@testim/testim-cli 3.303.0 → 4.0.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cli.js +91 -91
- package/cli.js.map +4 -4
- package/package.json +10 -2
- package/npm-shrinkwrap.json +0 -21851
package/cli.js
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var Cw=Object.create;var Yn=Object.defineProperty;var Aw=Object.getOwnPropertyDescriptor;var kw=Object.getOwnPropertyNames;var _w=Object.getPrototypeOf,Ow=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>(s&&(e=s(s=0)),e);var Kd=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),$=(s,e)=>{for(var t in e)Yn(s,t,{get:e[t],enumerable:!0})},Jd=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of kw(e))!Ow.call(s,n)&&n!==t&&Yn(s,n,{get:()=>e[n],enumerable:!(r=Aw(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?Cw(_w(s)):{},Jd(e||!s||!s.__esModule?Yn(t,"default",{value:s,enumerable:!0}):t,s)),G=s=>Jd(Yn({},"__esModule",{value:!0}),s);var Oe={};$(Oe,{log:()=>N,measure:()=>Nw});function N(...s){if(!Zd)return;let e=Date.now();console.log(`${e-Lw} ${e-Qd} `,...s),Qd=e}function Nw(s,e){if(!Zd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Zd,Lw,Qd,Le=T(()=>{"use strict";Zd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,Lw=Date.now(),Qd=Date.now()});var Ba={};$(Ba,{EDGE_CHROMIUM_MIN_VERSION:()=>oo,SELENIUM_STATUS_CODES:()=>sT,UNICODE_CHARACTERS:()=>Dw,W3C_ELEMENT_ID:()=>$t});var Dw,$t,Mw,Uw,Fw,ep,tp,rp,sp,jw,np,op,ip,ap,Bw,cp,lp,up,dp,pp,mp,fp,hp,$w,Ww,gp,yp,Gw,qw,Vw,Hw,zw,Kw,Jw,Xw,Yw,Qw,Zw,eT,tT,rT,sT,oo,Yr=T(()=>{"use strict";Dw={NULL:"\uE000",Unidentified:"\uE000",Cancel:"\uE001",Help:"\uE002","Back space":"\uE003",Backspace:"\uE003",Tab:"\uE004",Clear:"\uE005",Return:"\uE006",Enter:"\uE007",Shift:"\uE008",Control:"\uE009",Alt:"\uE00A",Pause:"\uE00B",Escape:"\uE00C",Space:"\uE00D"," ":"\uE00D",Pageup:"\uE00E",PageUp:"\uE00E",Page_Up:"\uE00E",Pagedown:"\uE00F",PageDown:"\uE00F",Page_Down:"\uE00F",End:"\uE010",Home:"\uE011","Left arrow":"\uE012",Arrow_Left:"\uE012",ArrowLeft:"\uE012","Up arrow":"\uE013",Arrow_Up:"\uE013",ArrowUp:"\uE013","Right arrow":"\uE014",Arrow_Right:"\uE014",ArrowRight:"\uE014","Down arrow":"\uE015",Arrow_Down:"\uE015",ArrowDown:"\uE015",Insert:"\uE016",Delete:"\uE017",Semicolon:"\uE018",Equals:"\uE019","Numpad 0":"\uE01A","Numpad 1":"\uE01B","Numpad 2":"\uE01C","Numpad 3":"\uE01D","Numpad 4":"\uE01E","Numpad 5":"\uE01F","Numpad 6":"\uE020","Numpad 7":"\uE021","Numpad 8":"\uE022","Numpad 9":"\uE023",Multiply:"\uE024",Add:"\uE025",Separator:"\uE026",Subtract:"\uE027",Decimal:"\uE028",Divide:"\uE029",F1:"\uE031",F2:"\uE032",F3:"\uE033",F4:"\uE034",F5:"\uE035",F6:"\uE036",F7:"\uE037",F8:"\uE038",F9:"\uE039",F10:"\uE03A",F11:"\uE03B",F12:"\uE03C",Command:"\uE03D",Meta:"\uE03D",Zenkaku_Hankaku:"\uE040",ZenkakuHankaku:"\uE040"},$t="element-6066-11e4-a52e-4f735466cecf",Mw={id:"Unknown",status:-1,message:"Remote end send an unknown status code."},Uw={id:"Success",status:0,message:"The command executed successfully."},Fw={id:"NoSuchDriver",status:6,message:"A session is either terminated or not started"},ep={id:"NoSuchElement",status:404,message:"An element could not be located on the page using the given search parameters."},tp={id:"NoSuchFrame",status:400,message:"A request to switch to a frame could not be satisfied because the frame could not be found."},rp={id:"UnknownCommand",status:404,message:"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource."},sp={id:"StaleElementReference",status:400,message:"An element command failed because the referenced element is no longer attached to the DOM."},jw={id:"ElementNotVisible",status:11,message:"An element command could not be completed because the element is not visible on the page."},np={id:"InvalidElementState",status:400,message:"An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element)."},op={id:"UnknownError",status:500,message:"An unknown server-side error occurred while processing the command."},ip={id:"ElementIsNotSelectable",status:400,message:"An attempt was made to select an element that cannot be selected."},ap={id:"JavaScriptError",status:500,message:"An error occurred while executing user supplied JavaScript."},Bw={id:"XPathLookupError",status:19,message:"An error occurred while searching for an element by XPath."},cp={id:"Timeout",status:408,message:"An operation did not complete before its timeout expired."},lp={id:"NoSuchWindow",status:400,message:"A request to switch to a different window could not be satisfied because the window could not be found."},up={id:"InvalidCookieDomain",status:400,message:"An illegal attempt was made to set a cookie under a different domain than the current page."},dp={id:"UnableToSetCookie",status:500,message:"A request to set a cookie's value could not be satisfied."},pp={id:"UnexpectedAlertOpen",status:500,message:"A modal dialog was open, blocking this operation"},mp={id:"NoAlertOpenError",status:400,message:"An attempt was made to operate on a modal dialog when one was not open."},fp={id:"ScriptTimeout",status:408,message:"A script did not complete before its timeout expired."},hp={id:"InvalidElementCoordinates",status:400,message:"The coordinates provided to an interactions operation are invalid."},$w={id:"IMENotAvailable",status:30,message:"IME was not available."},Ww={id:"IMEEngineActivationFailed",status:31,message:"An IME engine could not be started."},gp={id:"InvalidSelector",status:400,message:"Argument was an invalid selector (e.g. XPath/CSS)."},yp={id:"SessionNotCreatedException",status:500,message:"A new session could not be created."},Gw={id:"ElementNotScrollable",status:34,message:"Element cannot be scrolled into view."},qw={id:"SelectorTimeoutError",status:100,message:"Request timed out after the element was still found on the page."},Vw={id:"NoSessionIdError",status:101,message:"A session id is required for this command but wasn't found in the response payload"},Hw={id:"GridApiError",status:102,message:"A call to the Selenium Grid API failed"},zw={id:"ElementClickIntercepted",status:400,message:"The Element Click command could not be completed because the element receiving the events is obscuring the element that was requested clicked."},Kw={id:"ElementNotInteractable",status:400,message:"A command could not be completed because the element is not pointer- or keyboard interactable."},Jw={id:"InsecureCertificate",status:400,message:"Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate."},Xw={id:"InvalidArgument",status:400,message:"The arguments passed to a command are either invalid or malformed."},Yw={id:"InvalidSessionId",status:404,message:"Occurs if the given session id is not in the list of active sessions, meaning the session either does not exist or that it\u2019s not active."},Qw={id:"MoveTargetOutOfBounds",status:500,message:"The target for mouse interaction is not in the browser\u2019s viewport and cannot be brought into that viewport."},Zw={id:"NoSuchCookie",status:404,message:"No cookie matching the given path name was found amongst the associated cookies of the current browsing context\u2019s active document."},eT={id:"UnableToCaptureScreen",status:500,message:"A screen capture was made impossible."},tT={id:"UnknownMethod",status:405,message:"The requested command matched a known URL but did not match an method for that URL."},rT={id:"UnsupportedOperation",status:500,message:"Indicates that a command that should have executed properly cannot be supported for some reason."},sT={"-1":Mw,0:Uw,6:Fw,7:ep,8:tp,9:rp,10:sp,11:jw,12:np,13:op,15:ip,17:ap,19:Bw,21:cp,23:lp,24:up,25:dp,26:pp,27:mp,28:fp,29:hp,30:$w,31:Ww,32:gp,33:yp,34:Gw,100:qw,101:Vw,102:Hw,"element click intercepted":zw,"element not selectable":ip,"element not interactable":Kw,"insecure certificate":Jw,"invalid argument":Xw,"invalid cookie domain":up,"invalid coordinates":hp,"invalid element state":np,"invalid selector":gp,"invalid session id":Yw,"javascript error":ap,"move target out of bounds":Qw,"no such alert":mp,"no such cookie":Zw,"no such element":ep,"no such frame":tp,"no such window":lp,"script timeout":fp,"session not created":yp,"stale element reference":sp,timeout:cp,"unable to set cookie":dp,"unable to capture screen":eT,"unexpected alert open":pp,"unknown command":rp,"unknown error":op,"unknown method":tT,"unsupported operation":rT},oo=79});function K(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function st(s,e,t,r,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function $a(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Be(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var Wa=T(()=>{"use strict"});var qa,bp,wp,io=T(()=>{qa={ngrok:"4.3.3",webpack:"5.74.0",playwright:"0.12.1",puppeteer:"2.1.1","selenium-webdriver":"3.6.0","v8-to-istanbul":"9.1.0","istanbul-lib-coverage":"3.2.0","@bcoe/v8-coverage":"0.2.3","convert-source-map":"1.7.0",multer:"1.4.5-lts.1"},bp={"@applitools/eyes-sdk-core":"13.11.29","@testim/coralogix-logger":"1.1.27-beta.1","@testim/webdriverio":"0.0.8","abort-controller":"3.0.0",ajv:"6.12.6","analytics-node":"5.0.0","appium-dom-utils":"1.0.6",archiver:"5.3.0","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0","combine-source-map":"0.8.0",commander:"10.0.0",compression:"1.7.4",cors:"2.8.5","crypto-js":"4.1.1","data-uri-to-buffer":"2.0.2",decompress:"4.2.1",express:"4.17.3",fkill:"7.2.1","form-data":"3.0.0",glob:"7.2.0","https-proxy-agent":"5.0.0","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"0.16.2",jsdom:"19.0.0",jsonwebtoken:"9.0.0",lodash:"4.17.21","memory-fs":"0.5.0",memorystream:"0.3.1",moment:"2.29.4",ms:"2.1.2",npm:"8.19.2","object-hash":"3.0.0",ora:"5.4.1","p-limit":"4.0.0","p-retry":"4.6.2",pako:"1.0.11",portfinder:"1.0.28","promise-queue":"2.2.5",prompts:"2.4.2","proxy-agent":"5.0.0","rox-node":"4.9.18",semver:"7.3.2","serialize-error":"7.0.1","socket.io-client":"4.5.4","source-map-support":"0.5.19",superagent:"3.8.3","superagent-proxy":"3.0.0","test-exclude":"6.0.0",threads:"0.12.0","ua-parser-js":"0.7.33","validate-npm-package-name":"3.0.0",webdriverio:"7.24.0",winston:"3.6.0","winston-transport":"4.5.0",ws:"8.5.0",xml2js:"0.4.23",yaml:"1.10.0"},wp={node:">= 14.0.0"}});var xe={};$(xe,{APPIUM_VERSION:()=>lT,BLOB_URL:()=>mr,CANONICAL_BLOB_URL:()=>ec,CANONICAL_EDGE_URL:()=>tc,DEBUG_MODE:()=>aT,DF_ENABLE_VIDEO:()=>cT,DISABLE_AGENT_ORIGIN_CHECK:()=>Vs,DISABLE_DEBUGGER_INFINITE_TIMEOUT:()=>Va,EDGE_URL:()=>Za,EDITOR_URL:()=>pr,EXTENSION_SERVICES_HOST:()=>Qa,GATEWAY_URL:()=>Ya,IS_ON_PREM:()=>Ie,LOGGER_CONSOLE:()=>za,LOGGER_DEBUG:()=>Ka,OVERRIDE_TIMEOUTS:()=>Hs,REQUESTS_QUEUE_SIZE:()=>iT,ROLLOUT_KEY:()=>Ja,SERVICES_HOST:()=>he,START_WORKER_DELAY_MS:()=>Xa,TESTIM_CONCURRENT_WORKER_COUNT:()=>Ks,WEBDRIVER_DEBUG:()=>zs,WEBSOCKET_HOST:()=>Ha});var qs,Tp,vp,Vs,Va,Hs,pr,Ha,he,za,Ka,zs,Ie,iT,aT,Ks,Ja,cT,Xa,lT,Ya,Qa,mr,Za,ec,tc,le=T(()=>{"use strict";qs=process.env.SERVICES_HOST||"https://services.testim.io",Tp="https://testimstatic.blob.core.windows.net",vp="https://tstresultfiles.azureedge.net";process.env.GATEWAY_URL&&(process.env.CORALOGIX_URL=`${process.env.GATEWAY_URL}/testim/coralogix/api/v1/logs`,process.env.SERVICES_HOST=`${process.env.GATEWAY_URL}/testim/services`,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:qs,qs=process.env.SERVICES_HOST);Vs=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Va=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),Hs=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),pr=process.env.EDITOR_URL,Ha=process.env.WEBSOCKET_HOST||`${qs}/ws`,he=qs,za=parseInt(process.env.LOGGER_CONSOLE||"0",10),Ka=parseInt(process.env.LOGGER_DEBUG||"0",10),zs=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Ie=parseInt(process.env.IS_ON_PREM||"0",10),iT=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,aT=parseInt(process.env.DEBUG_MODE||"0",10),Ks=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Ja=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",cT=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),Xa=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),lT=process.env.APPIUM_VERSION||"1.10.1",Ya=process.env.GATEWAY_URL,Qa=process.env.EXTENSION_SERVICES_HOST||qs,mr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Tp,Za=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:vp,ec=Tp,tc=vp});var rc={};$(rc,{CoralogixTransport:()=>Qr});var Pe,Ep,uT,dT,Qr,sc=T(()=>{"use strict";Pe=require("@testim/coralogix-logger"),Ep=E(require("winston-transport")),uT={silly:Pe.Severity.verbose,verbose:Pe.Severity.verbose,info:Pe.Severity.info,http:Pe.Severity.info,warn:Pe.Severity.warning,warning:Pe.Severity.warning,error:Pe.Severity.error,silent:Pe.Severity.verbose,critical:Pe.Severity.critical,crit:Pe.Severity.critical,debug:Pe.Severity.debug},dT=["err","error","reason","e"],Qr=class extends Ep.default{constructor(t){t=Object.assign({},Qr.options,t);super(t);this.options=t,this.logger=new Pe.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,r){let{category:n,level:o,message:i,meta:a={},...c}=t,l=Object.assign({},a,this.options.extraFields,c),d=new Pe.Log;d.severity=uT[o],d.text=i,d.category=n,l.className&&(d.className=l.className),l.methodName&&(d.methodName=l.methodName),l.threadId&&(d.threadId=l.threadId),delete l.className,delete l.methodName,delete l.threadId,delete l.category,delete l.level,delete l.message;let m=!1;a instanceof Error&&(m=!0,l.msg=a.message+a.stack,i&&(l.msg=`${i}
|
|
3
|
-
${l.msg}`));for(let p of dT)a[p]instanceof Error&&(l[p]={message:a[p].message,stack:a[p].stack,name:a[p].name,type:a[p].type,cause:a[p].cause,...a[p]});Object.keys(l).length>0&&(i&&!m&&(l.msg=i),d.text=l),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Pe.CoralogixLogger.configure(t),Qr.options=t}}});var Js={};$(Js,{getLogger:()=>x,setExecutionId:()=>ic,setProjectId:()=>ac,setProxyUri:()=>cc});function fT(){let s=[],e=()=>Promise.resolve();if(!Ie){let{CoralogixTransport:t}=(sc(),G(rc));t.configure(Ip);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}return za&&s.push(new bt.transports.Console({format:bt.format.combine(bt.format.colorize(),bt.format.simple())})),[s,e]}function ic(s){nc=s}function ac(s){xp=s}function cc(s){if(Ie||!s)return;let{CoralogixTransport:e}=(sc(),G(rc));e.configure({...Ip,proxyUri:s})}function Sp(s){return{projectId:xp,time:new Date().toISOString(),...nc&&!s&&{executionId:nc}}}function x(s){return new oc(wT.child({category:s}))}var Rp,bt,pT,mT,Ip,hT,gT,yT,bT,wT,nc,xp,oc,j=T(()=>{"use strict";Rp=E(require("os")),bt=E(require("winston"));le();F();pT=Rp.hostname(),mT=nt(),Ip={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};[hT,gT]=fT(),yT=Ka?"debug":"info",bT={release:Boolean(!0),branch:"production"},wT=bt.createLogger({levels:bt.config.syslog.levels,level:yT,transports:hT,defaultMeta:{name:"runner",hostname:pT,nodeVersion:process.version,runnerVersion:mT,...bT}}),nc=null,xp=null;oc=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Sp(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Sp(n)))}catch{}}}waitForFlush(){return gT()}}});var uc={};$(uc,{AbortError:()=>Me,ArgError:()=>R,ClientError:()=>yr,GetBrowserError:()=>Wt,GridConcurrencyError:()=>gr,GridError:()=>it,NoArgsError:()=>fr,NotImplementedError:()=>es,NpmPackageError:()=>at,NpmPermissionsError:()=>wr,PageNotAvailableError:()=>ot,PlaygroundCodeError:()=>br,QuotaDepletedError:()=>Zr,SeleniumCrashError:()=>lc,SeleniumError:()=>hr,StopRunOnError:()=>At,TimeoutError:()=>X});var Pp,Me,fr,R,hr,At,Wt,ot,X,Zr,it,gr,at,lc,yr,br,wr,es,z=T(()=>{"use strict";Pp=require("p-retry"),Me=class extends Error{constructor(t="aborted"){super(t);this.name="AbortError"}},fr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},R=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},hr=class extends Error{constructor(t){super(t.orgStatusMessage||t.message);this.name="SeleniumError",this.errorType=t.type}},At=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},Wt=class extends Error{constructor(t,r){super(t);this.type=r}},ot=class extends Pp.AbortError{},X=class extends Error{},Zr=class extends Error{},it=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},gr=class extends it{constructor(){super(...arguments);this.name="GridConcurrencyError"}},at=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},lc=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},yr=class extends Error{},br=class extends Error{},wr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},es=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function ao(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ie(s){return new Promise(e=>{setTimeout(e,s)})}function re(s,e,t="Timeout Error"){Hs&&!Cp&&(Cp=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new X(t);return e=Hs?Number(Hs)||6e5:e,Promise.race([s,ie(e).then(()=>{throw r})])}async function de(s,e,{concurrency:t}={}){if(t){Ap||(Ap=(await import("p-limit")).default);let r=Ap(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function ct(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Cp,Ap,dc=T(()=>{"use strict";z();le();Cp=!1});var Ys,kp,TT,Xs,_p,vT,ET,Op,Lp=T(()=>{"use strict";Ys=E(require("lodash"));le();kp=require("dns");j();dc();TT=x("http-request-counters"),Xs=!1,_p=async()=>{if(Ie)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await de(s,t=>kp.promises.lookup(t)));return e||(Xs=!0),e}catch{return TT.error("network connectivity test failed"),Xs=!0,!1}},vT=Ys.throttle(_p,10*1e3),ET=60*1e3*15,Op=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},ET)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Xs||vT(),a}}}async function r(){if(Xs||!await _p())return!1;let n=Ys.sum([...s.fail.values()]),o=Ys.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Xs,t}});var kt={};$(kt,{deleteFullRes:()=>PT,deleteReq:()=>Qs,didNetworkConnectivityTestFail:()=>bc,download:()=>gc,get:()=>vr,getFullRes:()=>kT,getText:()=>AT,head:()=>_T,isNetworkHealthy:()=>yc,post:()=>Tt,postForm:()=>mc,postFullRes:()=>CT,put:()=>hc});function RT(){return global.caFileContent}function IT(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function xT(){return!wt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(wt.default),global.proxyUri}function Tr(s,e=!1){let t=RT();t&&s.ca(t);let r=!e&&xT();r&&s.proxy(r)}async function Np(s,e={},t={},r=ts){let n=wt.default.delete(s).send(e).timeout(r).set(t);return Tr(n),await n}async function Dp(s,e,t={},r=ts,n=0){let o=wt.default.post(s).send(e).timeout(r).set(t);Tr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function fc(s,e,t={},r=ts,{isBinary:n=!1,skipProxy:o=!1}={}){let i=wt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),Tr(i,o),await i}var wt,pc,We,ts,ST,Gt,Qs,PT,Tt,CT,mc,AT,vr,kT,_T,hc,gc,yc,bc,vt=T(()=>{"use strict";wt=E(require("superagent"));j();Lp();pc=x("http-request"),We=Op(),ts=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,ST=6e4;Gt=(s,e,t)=>{throw pc.error(s,{...t,error:e}),e};Qs=We(async(s,e,t,r)=>{try{let n=await Np(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Gt("failed to delete request",n,{url:s})}});PT=We(Np),Tt=We(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await Dp(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Gt("failed to post request",o,{url:s})}});CT=We(Dp),mc=We(async(s,e,t,r={},n=ts)=>{let o=wt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.keys(t).forEach(i=>{o.attach(i,t[i].buffer,t[i].fileName)}),Tr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Gt("failed to post request",i,{url:s})}});AT=We(async(s,e,t)=>{try{return(await fc(s,e,t)).text}catch(r){return Gt("failed to getText request",r,{url:s,query:e})}}),vr=We(async(s,e,t,r,n)=>{try{return(await fc(s,e,t,r,n)).body}catch(o){return Gt("failed to get request",o,{url:s,query:e})}}),kT=We((s,e,t,r)=>fc(s,e,t,r)),_T=We(async s=>{let e=wt.default.head(s).timeout(ts);Tr(e);try{return await e}catch(t){return Gt("failed to head request",t,{url:s})}}),hc=We(async(s,e,t={},r=ts)=>{let n=wt.default.put(s).send(e).timeout(r).set(t);Tr(n);try{return(await n).body}catch(o){return Gt("failed to put request",o,{url:s})}}),gc=We(async s=>{pc.info("start to download",{url:s});let e=wt.default.get(s).timeout(ST).buffer(!0).parse(IT);Tr(e);try{let t=await e;return pc.info("finished to download",{url:s}),t}catch(t){return Gt("failed to download",t,{url:s})}}),yc=We.isNetworkHealthy,bc=We.didNetworkConnectivityTestFail});function lt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=_t.resolve(__dirname,"../../"):s=_t.resolve(__dirname,""),s):process.cwd()}function co(s,e){return Be(s)?e||_t.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||_t.basename(s)}function nt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function LT(){try{return wp.node}catch{return""}}async function uo(s,e,t=!0){let r=await Ge.promises.readdir(s,{withFileTypes:!0});await Ge.promises.mkdir(e,{recursive:t});for(let n of r){let o=_t.join(s,n.name),i=_t.join(e,n.name);n.isDirectory()?await uo(o,i):await Ge.promises.copyFile(o,i)}}async function ye(s){try{return await Ge.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var _t,Mp,Up,Ge,OT,Er,qe,Fp,lo,wc,Ye,Tc,vc=T(()=>{"use strict";_t=E(require("path"));Wa();io();Mp=E(require("p-retry")),Up=E(require("decompress")),Ge=require("fs"),OT=3;Er=async s=>{let e=await Promise.resolve().then(()=>(vt(),kt));return(0,Mp.default)(()=>e.download(s),{retries:OT})},qe=async(s,e)=>{let t=await Er(s);return Ge.promises.writeFile(e,t.body)},Fp=async(s,e)=>new Promise((t,r)=>{try{let n=(0,Ge.createWriteStream)(e);(0,Ge.createReadStream)(s).pipe(n),n.on("finish",()=>{n.close(()=>t())})}catch(n){r(n)}});lo=async(s,e)=>{let t=co(s,e);return Be(s)?qe(s,t):Fp(s,t)},wc=async s=>Be(s)?Er(s):Ge.promises.readFile(s),Ye=async(s,e)=>await(0,Up.default)(s,e),Tc=s=>(0,Ge.statSync)(s).size/1e6});var Lt={};$(Lt,{CLI_MODE:()=>Q,gridMessages:()=>rs,gridTypes:()=>ue,mobileWeb:()=>Ec,runnerTestStatus:()=>pe,sessionType:()=>Ot,socketEventTypes:()=>Qe,stepResult:()=>en,test:()=>Sc,testRunStatus:()=>Zs,testStatus:()=>Ve,timeoutMessages:()=>Ue});var Ue,Zs,pe,Ve,rs,Ec,Sc,Qe,Q,Ot,ue,en,ae=T(()=>{"use strict";Ue={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Zs={COMPLETED:"completed",RUNNING:"running"},pe={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED"},Ve={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},rs={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Ec={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Sc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Qe={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Q={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},Ot={CODELESS:"codeless",CODEFUL:"codeful"},ue={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin"},en={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed"}});function Sr(s){return s.files.length>0?Ot.CODEFUL:Ot.CODELESS}function tn(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function NT(){let{argv:s}=process;if(s.includes("--remoteRunId"))return{remoteRunId:s[s.indexOf("--remoteRunId")+1],projectId:s[s.indexOf("--project")+1],token:s[s.indexOf("--token")+1]}}var rn,jp,He,DT,MT,UT,FT,jT,BT,Rc,Bp=T(()=>{"use strict";ae();rn=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},jp=s=>Boolean(s.resultId&&s.source==="remote-run"),He=(s,e)=>s.testStatus===Ve.QUARANTINE&&!jp(e)&&!e.runQuarantinedTests;DT=s=>Boolean(s.initCodimMode),MT=s=>Boolean(s.loginMode),UT=s=>Boolean(s.tunnelOnlyMode),FT=s=>Boolean(s.createPrefechedData),jT=s=>Boolean(s.installLazyDepsMode),BT=s=>Boolean(s.agentMode),Rc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})}});function po(s){let e=Ic.default.duration(s);return`${e.hours()}:${e.minutes()}:${e.seconds()}.${e.milliseconds()}`}function xc(s){return Ic.default.duration(s).asSeconds()}var Ic,$p=T(()=>{"use strict";Ic=E(require("moment"))});var H={};$(H,{TESTIM_BROWSER_DIR:()=>Nt,TimeoutError:()=>X,buildBasicHeader:()=>$a,calcPercentile:()=>ho,copy:()=>Fp,copyDir:()=>uo,delay:()=>ie,doesPathExist:()=>ye,download:()=>Er,downloadAndSave:()=>qe,extractElementId:()=>ut,getArgsOnRemoteRunFailure:()=>NT,getBrowserInfo:()=>nn,getCdpAddressForHost:()=>xr,getCliLocation:()=>lt,getDuration:()=>po,getDurationSec:()=>xc,getEnginesVersion:()=>LT,getEnvironmentGitBranch:()=>Ir,getLocalFileSizeInMB:()=>Tc,getPlanType:()=>fo,getRunConfigByBrowserName:()=>on,getRunnerVersion:()=>nt,getSessionType:()=>Sr,getSource:()=>lo,getSourceAsBuffer:()=>wc,getSourcePath:()=>co,getTestUrl:()=>st,getUniqBrowsers:()=>tn,groupTestsByRetries:()=>Cc,guid:()=>K,hasTestPlanFlag:()=>rn,isAgentMode:()=>BT,isCreatePrefetchedDataMode:()=>FT,isInitCodimMode:()=>DT,isInstallLazyDepsMode:()=>jT,isLoginMode:()=>MT,isPromise:()=>ao,isQuarantineAndNotRemoteRun:()=>He,isRemoteRun:()=>jp,isTunnelOnlyMode:()=>UT,isURL:()=>Be,promiseFromCallback:()=>ct,promiseMap:()=>de,promiseTimeout:()=>re,removePropertyFromObject:()=>mo,replaceArgsWithNoDashes:()=>Rc,unzipFile:()=>Ye});function nn(s){return s=s.toLowerCase(),Pc.find(e=>e.browserValue===s)}function on(s,e,t){s=s.toLowerCase();let r=Pc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||Pc[0],n=sn.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=sn.find(o=>o.sl.platform===e.platform):e.platformName&&(n=sn.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=sn.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=sn.find(o=>o.bs.platform===t.platform))),Rr.merge(r,n)}function Ir(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function mo(s,e,t){for(let r in s)Object.prototype.hasOwnProperty.call(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&mo(s[r],e,t))}function ut(s){return s.ELEMENT||s[$t]}function fo(s){s||(s={});let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Cc(s=[]){return Rr.chain(s).groupBy(e=>e.originalTestResultId||e.resultId).values().reduce((e,t)=>{if(!t)return e;if(t.length===1)return e.push(t[0]),e;let r=Rr.orderBy(t,o=>typeof o.retryCount=="number"?o.retryCount:1),n=Rr.chain(r).last().cloneDeep().value();return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function xr(s,e){let t=await Promise.resolve().then(()=>(vt(),kt));try{return(await t.get(`http://${s}/json/version`,void 0,void 0,e)).webSocketDebuggerUrl}catch{throw new Error("unable to connect to devtools server")}}var Wp,Rr,Gp,$T,Nt,sn,Pc,ho,F=T(()=>{"use strict";Wp=E(require("os")),Rr=E(require("lodash")),Gp=E(require("path"));Yr();vc();Bp();$p();Wa();dc();$T=Wp.homedir(),Nt=Gp.join($T,".testim-browser-profile"),sn=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14"},sl:{platform:"macOS 11",safari_version:"14"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13"},sl:{platform:"macOS 10.15",safari_version:"13"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12"},sl:{platform:"macOS 10.14",safari_version:"12"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11"},sl:{platform:"macOS 10.13",safari_version:"11"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10"},sl:{platform:"macOS 10.12",safari_version:"10.0"}},{osName:"OS X El Capitan",bs:{os:"OS X",os_version:"El Capitan",safari_version:"9.1"},sl:{platform:"OS X 10.11",safari_version:"9.0"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"8.0"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"7.0"}},{osName:"OS X Mountain Lion",bs:{os:"OS X",os_version:"Mountain Lion",safari_version:"6.2"},sl:{platform:"OS X 10.8",safari_version:"6.0"}},{osName:"OS X Lion",bs:{os:"OS X",os_version:"Lion",safari_version:"6"},sl:{}},{osName:"OS X Snow Leopard",bs:{os:"OS X",os_version:"Snow Leopard",safari_version:"5.1"},sl:{}},{osName:"iOS",bs:{platform:"MAC"},sl:{platformName:"iOS",appiumVersion:"1.6.4"}},{osName:"Android",bs:{platform:"ANDROID"},sl:{platformName:"Android",appiumVersion:"1.6.4"}}],Pc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"94"},sl:{browserName:"chrome",version:"94.0"},browserValue:"chrome"},{browserName:"Firefox",bs:{browser:"Firefox",browser_version:"89"},sl:{browserName:"firefox",version:"89.0"},browserValue:"firefox"},{browserName:"Safari",bs:{browser:"Safari"},sl:{browserName:"safari"},browserValue:"safari"},{browserName:"Edge",bs:{browser:"Edge",browser_version:"18"},sl:{browserName:"MicrosoftEdge",version:"18.17763"},browserValue:"edge",eol:!0},{browserName:"Edge Chromium",bs:{browser:"Edge",browser_version:"94"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{browserName:"Internet Explorer 11",bs:{browser:"IE",browser_version:"11"},sl:{browserName:"internet explorer",version:"11.0"},synonyms:["ie11"],browserValue:"ie11",eol:!0},{browserName:"Browser",bs:{},sl:{browserName:"Browser"},browserValue:"browser"},{browserName:"Android",bs:{browserName:"android"},sl:{},browserValue:"android"},{browserName:"iPad",bs:{browserName:"iPad"},sl:{},browserValue:"ipad"},{browserName:"iPhone",bs:{browserName:"iPhone"},sl:{},browserValue:"iphone"}];ho=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var Ac={};$(Ac,{$schema:()=>WT,default:()=>zT,definitions:()=>GT,properties:()=>HT,required:()=>VT,type:()=>qT});var WT,GT,qT,VT,HT,zT,qp=T(()=>{WT="http://json-schema.org/draft-07/schema#",GT={request:{type:"object",required:["url"],additionalProperties:!1,properties:{url:{type:"string"},method:{type:"string",pattern:"^GET$|^HEAD$|^POST$|^PUT$|^DELETE$|^CONNECT$|^OPTIONS$|^TRACE$|^PATCH$"}}},header:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"}}},cookie:{type:"object",required:["name","value"],additionalProperties:!1,properties:{name:{type:"string"},value:{type:"string"},path:{type:"string"},domain:{type:"string"},expires:{type:"string",format:"date-time"},httpOnly:{type:"boolean"},secure:{type:"boolean"}}},response:{type:"object",required:["status"],additionalProperties:!1,properties:{status:{type:"integer",minimum:100,exclusiveMaximum:600},headers:{type:"array",items:{$ref:"#/definitions/header"}},cookies:{type:"array",items:{$ref:"#/definitions/cookie"}},content:{type:"object",required:["text"],additionalProperties:!1,properties:{text:{type:"string"}}}}},redirectResponse:{type:"object",required:["redirectUrl"],additionalProperties:!1,properties:{redirectUrl:{type:"string"}}},passthroughResponse:{type:"object",required:["passthrough"],additionalProperties:!1,properties:{passthrough:{type:"boolean",enum:[!0]}}},entry:{type:"object",required:["request","response"],additionalProperties:!1,properties:{request:{$ref:"#/definitions/request"},response:{oneOf:[{$ref:"#/definitions/response"},{$ref:"#/definitions/redirectResponse"},{$ref:"#/definitions/passthroughResponse"}]},maxHits:{type:"integer",minimum:1}}}},qT="object",VT=["entries"],HT={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},zT={$schema:WT,definitions:GT,type:qT,required:VT,properties:HT}});async function Yp(){try{return await re(go.promises.readFile(To()).then(async s=>{let e=await Xp;return XT(e,s)}),3e4)}catch{return{}}}function XT(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=ns.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function dt(s,e,t=KT,r=void 0){return async()=>{if(!zp)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await YT(e);if(o)return an.debug("cache hit:",{fnName:e}),o;if(an.debug("cache miss:",{fnName:e}),!Kp)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await QT(e,i,t),i}}async function YT(s){let t=(await vo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function QT(s,e,t){if(kc)throw an.error("calling set after waitForSave is not allowed",{key:s,ttl:t}),new Error("calling set after waitForSave is not allowed");try{let r=await vo;r[s]={value:e,expiry:Date.now()+t},Jp=new Promise(n=>{wo=n}),JT(r)}catch{an.error("failed updating cache")}}async function Qp(){let s=await vo;Object.keys(s).forEach(e=>{delete s[e]})}function Zp(s){zp=s}function ZT(s=!0){Kp=s}async function em(){try{return kc=!0,await Jp}finally{kc=!1}}function tm(s){bo=s,vo=Yp()}var go,yo,ns,Vp,an,bo,Hp,wo,zp,Kp,kc,Jp,Xp,KT,To,vo,JT,rm,sm,yx,nm,qt=T(()=>{"use strict";go=E(require("fs")),yo=E(require("path")),ns=E(require("crypto"));F();Vp=require("lodash");j();an=x("local cache"),bo=yo.resolve(lt(),"testim-cache"),zp=!0,Kp=!0,kc=!1,Jp=new Promise(s=>{wo=s}),Xp=new Promise(s=>{Hp=s}),KT=1e3*60*60*3,To=()=>yo.resolve(yo.resolve(bo,"testim.cache"));vo=Yp(),JT=(0,Vp.debounce)(async s=>{let e;try{let t=await Xp,r=ns.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=ns.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ye(bo)||await go.promises.mkdir(bo,{recursive:!0}),await go.promises.writeFile(To(),a)}catch(t){an.error("failed saving cache",{err:t}),e=t}wo(e?{success:!1,error:e}:{success:!0})},200);rm=Hp,sm=Zp.bind(void 0,!1),yx=Zp.bind(void 0,!0),nm=()=>ZT(!1)});function Eo(){return{cliLocation:lt(),userInfo:os.userInfo(),platform:os.platform(),release:os.release()}}var os,_c=T(()=>{"use strict";os=E(require("os"));F()});function ev(s){try{return So.resolve(So.dirname(require.resolve(`${s}/package.json`)),require(`${s}/package.json`).main||"")}catch(e){if(e.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return require.resolve(s);throw e}}function Vt(s){let e=ev(s);return require(e)}var So,cn=T(()=>{"use strict";So=E(require("path"))});async function cm(s){return(await im(`npm view ${s} version`)).stdout.trim()}function Lc(s){try{return Vt(s)}catch{return!1}}function lm(s,e){return require(is.join(s,`./node_modules/${e}/package.json`)).version}async function Io(s,e,t){function r(c){let d=/EACCES[^']+'(.+)'/.exec(c.stderr);return d===null?!1:d[1]}function n(c){return/The "to" argument must be of type string./.exec(c.stderr)}let o=is.join(s,"npm-shrinkwrap.json"),i=is.join(s,"npm-shrinkwrap-dummy.json"),a=!1;try{try{await ye(o)&&(await Oc.promises.rename(o,i),a=!0)}catch{}return await im(`npm i ${e} --no-save --no-prune --prefer-offline --no-audit --progress=false`,{...t,cwd:s}).catch(c=>{let l=r(c),d=n(c);throw l||d?(am.info("Failed to install package due to insufficient write access",{...Eo(),package:e,path:l||s}),console.error(`
|
|
2
|
+
"use strict";var ew=Object.create;var qn=Object.defineProperty;var tw=Object.getOwnPropertyDescriptor;var rw=Object.getOwnPropertyNames;var sw=Object.getPrototypeOf,nw=Object.prototype.hasOwnProperty;var w=(r,e)=>()=>(r&&(e=r(r=0)),e);var W=(r,e)=>{for(var t in e)qn(r,t,{get:e[t],enumerable:!0})},Cd=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of rw(e))!nw.call(r,n)&&n!==t&&qn(r,n,{get:()=>e[n],enumerable:!(s=tw(e,n))||s.enumerable});return r};var E=(r,e,t)=>(t=r!=null?ew(sw(r)):{},Cd(e||!r||!r.__esModule?qn(t,"default",{value:r,enumerable:!0}):t,r)),ie=r=>Cd(qn({},"__esModule",{value:!0}),r);var _e={};W(_e,{log:()=>_,measure:()=>iw});function _(...r){if(!Ld)return;let e=Date.now();console.log(`${e-ow} ${e-Od} `,...r),Od=e}function iw(r,e){if(!Ld)return;let t=Date.now();try{r()}finally{console.log(e||r.name,"took",Date.now()-t)}}var Ld,ow,Od,Oe=w(()=>{"use strict";Ld=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,ow=Date.now(),Od=Date.now()});var Da,Hr,Ma,Bs=w(()=>{"use strict";Da={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"},Hr="element-6066-11e4-a52e-4f735466cecf",Ma=79});function z(r=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let s=0;s<r;s++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function at(r,e,t,s,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${r}/#/project/${e}/branch/${n}/test/${t}`,s&&(o+=`?result-id=${s}`)),o}function Fa(r,e){return`Basic ${Buffer.from(`${r}:${e}`).toString("base64")}`}function Ge(r){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(r)||t.test(r)}var Ua=w(()=>{"use strict"});var Ba,Nd,Dd,Zn=w(()=>{Ba={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"},Nd={"@applitools/eyes-sdk-core":"13.11.29","@applitools/spec-driver-webdriverio":"1.4.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"},Dd={node:">= 14.0.0"}});var $s,Md,Fd,eo,Ud,to,zr,jd,ge,Bd,$d,ro,Le,$a,NR,so,Wd,DR,Gd,MR,Vd,qd,Kr,Hd,zd,Kd,le=w(()=>{"use strict";$s=process.env.SERVICES_HOST||"https://services.testim.io",Md="https://testimstatic.blob.core.windows.net",Fd="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:$s,$s=process.env.SERVICES_HOST);eo=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Ud=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),to=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),zr=process.env.EDITOR_URL,jd=process.env.WEBSOCKET_HOST||`${$s}/ws`,ge=$s,Bd=parseInt(process.env.LOGGER_CONSOLE||"0",10),$d=parseInt(process.env.LOGGER_DEBUG||"0",10),ro=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Le=parseInt(process.env.IS_ON_PREM||"0",10),$a=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,NR=parseInt(process.env.DEBUG_MODE||"0",10),so=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Wd=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",DR=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),Gd=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),MR=process.env.APPIUM_VERSION||"1.10.1",Vd=process.env.GATEWAY_URL,qd=process.env.EXTENSION_SERVICES_HOST||$s,Kr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Md,Hd=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:Fd,zd=Md,Kd=Fd});var Wa={};W(Wa,{CoralogixTransport:()=>Jr});var Ie,Jd,lw,uw,Jr,Ga=w(()=>{"use strict";Ie=require("@testim/coralogix-logger"),Jd=E(require("winston-transport")),lw={silly:Ie.Severity.verbose,verbose:Ie.Severity.verbose,info:Ie.Severity.info,http:Ie.Severity.info,warn:Ie.Severity.warning,warning:Ie.Severity.warning,error:Ie.Severity.error,silent:Ie.Severity.verbose,critical:Ie.Severity.critical,crit:Ie.Severity.critical,debug:Ie.Severity.debug},uw=["err","error","reason","e"],Jr=class extends Jd.default{constructor(t){t=Object.assign({},Jr.options,t);super(t);this.options=t,this.logger=new Ie.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,s){let{category:n,level:o,message:i,meta:a={},...c}=t,l=Object.assign({},a,this.options.extraFields,c),d=new Ie.Log;d.severity=lw[o],d.text=i,d.category=n,l.className&&(d.className=l.className),l.methodName&&(d.methodName=l.methodName),l.threadId&&(d.threadId=l.threadId),delete l.className,delete l.methodName,delete l.threadId,delete l.category,delete l.level,delete l.message;let m=!1;a instanceof Error&&(m=!0,l.msg=a.message+a.stack,i&&(l.msg=`${i}
|
|
3
|
+
${l.msg}`));for(let p of uw)a[p]instanceof Error&&(l[p]={message:a[p].message,stack:a[p].stack,name:a[p].name,type:a[p].type,cause:a[p].cause,...a[p]});Object.keys(l).length>0&&(i&&!m&&(l.msg=i),d.text=l),this.logger.addLog(d),s(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Ie.CoralogixLogger.configure(t),Jr.options=t}}});var Ja={};W(Ja,{getLogger:()=>R,setExecutionId:()=>Ha,setProjectId:()=>za,setProxyUri:()=>Ka});function mw(){let r=[],e=()=>Promise.resolve();if(!Le){let{CoralogixTransport:t}=(Ga(),ie(Wa));t.configure(Qd);let s=new t({category:"ROOT"});r.push(s),e=()=>s.waitForFlush()}return Bd&&r.push(new vt.transports.Console({format:vt.format.combine(vt.format.colorize(),vt.format.simple())})),[r,e]}function Ha(r){Va=r}function za(r){Zd=r}function Ka(r){if(Le||!r)return;let{CoralogixTransport:e}=(Ga(),ie(Wa));e.configure({...Qd,proxyUri:r})}function Yd(r){return{projectId:Zd,time:new Date().toISOString(),...Va&&!r&&{executionId:Va}}}function R(r){return new qa(bw.child({category:r}))}var Xd,vt,dw,pw,Qd,fw,hw,gw,yw,bw,Va,Zd,qa,j=w(()=>{"use strict";Xd=E(require("os")),vt=E(require("winston"));le();U();dw=Xd.hostname(),pw=ct(),Qd={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};[fw,hw]=mw(),gw=$d?"debug":"info",yw={release:Boolean(!1),branch:"test"},bw=vt.createLogger({levels:vt.config.syslog.levels,level:gw,transports:fw,defaultMeta:{name:"runner",hostname:dw,nodeVersion:process.version,runnerVersion:pw,...yw}}),Va=null,Zd=null;qa=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,s={}){let{executionId:n}=s;try{this._logger.log(e,Object.assign({meta:s,message:t},Yd(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Yd(n)))}catch{}}}waitForFlush(){return hw()}}});var tp={};W(tp,{AbortError:()=>je,ArgError:()=>I,ClientError:()=>hr,GetBrowserError:()=>qt,GridConcurrencyError:()=>fr,GridError:()=>ut,NoArgsError:()=>mr,NotImplementedError:()=>Xr,NpmPackageError:()=>dt,NpmPermissionsError:()=>yr,PageNotAvailableError:()=>lt,PlaygroundCodeError:()=>gr,QuotaDepletedError:()=>Yr,SeleniumCrashError:()=>Ws,SeleniumError:()=>_t,StopRunOnError:()=>Ot,TimeoutError:()=>J});var ep,je,mr,I,_t,Ot,qt,lt,J,Yr,ut,fr,dt,Ws,hr,gr,yr,Xr,q=w(()=>{"use strict";ep=require("p-retry"),je=class extends Error{constructor(t="aborted"){super(t);this.name="AbortError"}},mr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},I=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},_t=class extends Error{constructor(t){super(t.orgStatusMessage||t.message);this.name="SeleniumError",this.errorType=t.type}},Ot=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},qt=class extends Error{constructor(t,s){super(t);this.type=s}},lt=class extends ep.AbortError{},J=class extends Error{},Yr=class extends Error{},ut=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},fr=class extends ut{constructor(){super(...arguments);this.name="GridConcurrencyError"}},dt=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},Ws=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}},Xr=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function no(r){return!!r&&(typeof r=="object"||typeof r=="function")&&typeof r.then=="function"&&typeof r.catch=="function"}function se(r){return new Promise(e=>{setTimeout(e,r)})}function te(r,e,t="Timeout Error"){to&&!rp&&(rp=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let s=new J(t);return e=to?Number(to)||6e5:e,Promise.race([r,se(e).then(()=>{throw s})])}async function de(r,e,{concurrency:t}={}){if(t){sp||(sp=(await import("p-limit")).default);let s=sp(t);return await Promise.all(Array.from(r,(n,o)=>s(()=>e(n,o))))}return await Promise.all(Array.from(r,e))}function pt(r){return new Promise((e,t)=>{r((s,n)=>s?t(s):e(n))})}var rp,sp,Ya=w(()=>{"use strict";q();le();rp=!1});var Vs,np,ww,Gs,op,Tw,vw,ip,ap=w(()=>{"use strict";Vs=E(require("lodash"));le();np=require("dns");j();Ya();ww=R("http-request-counters"),Gs=!1,op=async()=>{if(Le)return!0;let r=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await de(r,t=>np.promises.lookup(t)));return e||(Gs=!0),e}catch{return ww.error("network connectivity test failed"),Gs=!0,!1}},Tw=Vs.throttle(op,10*1e3),vw=60*1e3*15,ip=()=>{let r={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)},vw)}function t(n,o=n.name){return async function(...i){e(r.call,o);try{let a=await n.call(null,...i);return e(r.success,o),a}catch(a){throw e(r.fail,o),Gs||Tw(),a}}}async function s(){if(Gs||!await op())return!1;let n=Vs.sum([...r.fail.values()]),o=Vs.sum([...r.call.values()]);return n<o*.1}return s.counters=r,t.counters=r,t.isNetworkHealthy=s,t.didNetworkConnectivityTestFail=()=>Gs,t}});var Lt={};W(Lt,{deleteFullRes:()=>xw,deleteReq:()=>qs,didNetworkConnectivityTestFail:()=>sc,download:()=>tc,get:()=>wr,getFullRes:()=>Cw,getText:()=>Aw,head:()=>kw,isNetworkHealthy:()=>rc,post:()=>St,postForm:()=>Qa,postFullRes:()=>Pw,put:()=>ec});function Sw(){return global.caFileContent}function Rw(r,e){let t=[];r.on("data",s=>{t.push(s)}),r.on("end",()=>{e(null,Buffer.concat(t))})}function Iw(){return!Et.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(Et.default),global.proxyUri}function br(r,e=!1){let t=Sw();t&&r.ca(t);let s=!e&&Iw();s&&r.proxy(s)}async function cp(r,e={},t={},s=Qr){let n=Et.default.delete(r).send(e).timeout(s).set(t);return br(n),await n}async function lp(r,e,t={},s=Qr,n=0){let o=Et.default.post(r).send(e).timeout(s).set(t);br(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=r,i.originalRequestTimeout=s,i.additionalSetHeaders=t,i}}async function Za(r,e,t={},s=Qr,{isBinary:n=!1,skipProxy:o=!1}={}){let i=Et.default.get(r).query(e||{}).timeout(s).set(t);return n&&i.buffer(!0),br(i,o),await i}var Et,Xa,qe,Qr,Ew,Ht,qs,xw,St,Pw,Qa,Aw,wr,Cw,kw,ec,tc,rc,sc,Rt=w(()=>{"use strict";Et=E(require("superagent"));j();ap();Xa=R("http-request"),qe=ip(),Qr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,Ew=6e4;Ht=(r,e,t)=>{throw Xa.error(r,{...t,error:e}),e};qs=qe(async(r,e,t,s)=>{try{let n=await cp(r,e,t,s);return n.type==="text/plain"?n.text:n.body}catch(n){return Ht("failed to delete request",n,{url:r})}});xw=qe(cp),St=qe(async({url:r,body:e,headers:t,timeout:s,retry:n})=>{try{let o=await lp(r,e,t,s,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Ht("failed to post request",o,{url:r})}});Pw=qe(lp),Qa=qe(async(r,e,t,s={},n=Qr)=>{let o=Et.default.post(r).type("form").timeout(n).set(s);o.field(e),Object.keys(t).forEach(i=>{o.attach(i,t[i].buffer,t[i].fileName)}),br(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Ht("failed to post request",i,{url:r})}});Aw=qe(async(r,e,t)=>{try{return(await Za(r,e,t)).text}catch(s){return Ht("failed to getText request",s,{url:r,query:e})}}),wr=qe(async(r,e,t,s,n)=>{try{return(await Za(r,e,t,s,n)).body}catch(o){return Ht("failed to get request",o,{url:r,query:e})}}),Cw=qe((r,e,t,s)=>Za(r,e,t,s)),kw=qe(async r=>{let e=Et.default.head(r).timeout(Qr);br(e);try{return await e}catch(t){return Ht("failed to head request",t,{url:r})}}),ec=qe(async(r,e,t={},s=Qr)=>{let n=Et.default.put(r).send(e).timeout(s).set(t);br(n);try{return(await n).body}catch(o){return Ht("failed to put request",o,{url:r})}}),tc=qe(async r=>{Xa.info("start to download",{url:r});let e=Et.default.get(r).timeout(Ew).buffer(!0).parse(Rw);br(e);try{let t=await e;return Xa.info("finished to download",{url:r}),t}catch(t){return Ht("failed to download",t,{url:r})}}),rc=qe.isNetworkHealthy,sc=qe.didNetworkConnectivityTestFail});function mt(){let r;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?r=Nt.resolve(__dirname,"../../"):r=Nt.resolve(__dirname,""),r):process.cwd()}function oo(r,e){return Ge(r)?e||Nt.join(process.cwd(),r.replace(/^.*[\\/]/,"")):e||Nt.basename(r)}function ct(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function Ow(){try{return Dd.node}catch{return""}}async function ao(r,e,t=!0){let s=await He.promises.readdir(r,{withFileTypes:!0});await He.promises.mkdir(e,{recursive:t});for(let n of s){let o=Nt.join(r,n.name),i=Nt.join(e,n.name);n.isDirectory()?await ao(o,i):await He.promises.copyFile(o,i)}}async function be(r){try{return await He.promises.access(r),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Nt,up,dp,He,_w,Tr,ze,pp,io,nc,tt,oc,ic=w(()=>{"use strict";Nt=E(require("path"));Ua();Zn();up=E(require("p-retry")),dp=E(require("decompress")),He=require("fs"),_w=3;Tr=async r=>{let e=await Promise.resolve().then(()=>(Rt(),Lt));return(0,up.default)(()=>e.download(r),{retries:_w})},ze=async(r,e)=>{let t=await Tr(r);return He.promises.writeFile(e,t.body)},pp=async(r,e)=>new Promise((t,s)=>{try{let n=(0,He.createWriteStream)(e);(0,He.createReadStream)(r).pipe(n),n.on("finish",()=>{n.close(()=>t())})}catch(n){s(n)}});io=async(r,e)=>{let t=oo(r,e);return Ge(r)?ze(r,t):pp(r,t)},nc=async r=>Ge(r)?Tr(r):He.promises.readFile(r),tt=async(r,e)=>await(0,dp.default)(r,e),oc=r=>(0,He.statSync)(r).size/1e6});var Mt={};W(Mt,{CLI_MODE:()=>X,MOBILE_APP_SOURCE:()=>co,gridMessages:()=>Zr,gridTypes:()=>ue,mobileWeb:()=>cc,runnerStatus:()=>ac,runnerTestStatus:()=>pe,sessionType:()=>Dt,socketEventTypes:()=>rt,stepResult:()=>zs,test:()=>lc,testRunStatus:()=>Hs,testStatus:()=>Ke,timeoutMessages:()=>Be});var Be,Hs,ac,pe,Ke,Zr,cc,lc,rt,X,Dt,ue,zs,co,ae=w(()=>{"use strict";Be={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Hs={COMPLETED:"completed",RUNNING:"running"},ac={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},pe={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Ke={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},Zr={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},cc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},lc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},rt={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},X={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},Dt={CODELESS:"codeless",CODEFUL:"codeful"},ue={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin"},zs={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed"},co={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"}});function vr(r){return r.files.length>0?Dt.CODEFUL:Dt.CODELESS}function Ks(r,e){var t,s,n;return((t=r.testConfigNames)!=null&&t.length||(s=r.testConfigIds)!=null&&s.length||r.testPlan.length||r.testPlanIds.length)&&!r.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=r.browser)==null?void 0:n.toLowerCase()]}function Lw(){let{argv:r}=process;if(r.includes("--remoteRunId"))return{remoteRunId:r[r.indexOf("--remoteRunId")+1],projectId:r[r.indexOf("--project")+1],token:r[r.indexOf("--token")+1]}}var Js,mp,Je,Nw,Dw,Mw,Fw,Uw,jw,uc,fp=w(()=>{"use strict";ae();Js=r=>{var e,t;return Boolean(((e=r.testPlan)==null?void 0:e.length)||((t=r.testPlanIds)==null?void 0:t.length))},mp=r=>Boolean(r.resultId&&r.source==="remote-run"),Je=(r,e)=>r.testStatus===Ke.QUARANTINE&&!mp(e)&&!e.runQuarantinedTests;Nw=r=>Boolean(r.initCodimMode),Dw=r=>Boolean(r.loginMode),Mw=r=>Boolean(r.tunnelOnlyMode),Fw=r=>Boolean(r.createPrefechedData),Uw=r=>Boolean(r.installLazyDepsMode),jw=r=>Boolean(r.agentMode),uc=(r,e)=>{r.forEach((t,s)=>{e.has(t)&&(r[s]=`--${t}`)})}});function lo(r){let e=dc.default.duration(r);return`${e.hours()}:${e.minutes()}:${e.seconds()}.${e.milliseconds()}`}function pc(r){return dc.default.duration(r).asSeconds()}var dc,hp=w(()=>{"use strict";dc=E(require("moment"))});var Ys,es,Xs,gp=w(()=>{"use strict";Ys=r=>!(!r||"fileName"in r),es=r=>{var e;return r&&"fileName"in r?(e=r.fileName)==null?void 0:e.endsWith(".app"):!1},Xs=r=>{var e,t;return((e=r.projectData)==null?void 0:e.type)==="ios"||((t=r.projectData)==null?void 0:t.type)==="android"}});var H={};W(H,{TESTIM_BROWSER_DIR:()=>Ft,TimeoutError:()=>J,buildBasicHeader:()=>Fa,calcPercentile:()=>mo,copy:()=>pp,copyDir:()=>ao,delay:()=>se,doesPathExist:()=>be,download:()=>Tr,downloadAndSave:()=>ze,extractElementId:()=>De,getArgsOnRemoteRunFailure:()=>Lw,getBrowserInfo:()=>Zs,getCdpAddressForHost:()=>Rr,getCliLocation:()=>mt,getDuration:()=>lo,getDurationSec:()=>pc,getEnginesVersion:()=>Ow,getEnvironmentGitBranch:()=>Sr,getLocalFileSizeInMB:()=>oc,getPlanType:()=>po,getRunConfigByBrowserName:()=>en,getRunnerVersion:()=>ct,getSessionType:()=>vr,getSource:()=>io,getSourceAsBuffer:()=>nc,getSourcePath:()=>oo,getTestUrl:()=>at,getUniqBrowsers:()=>Ks,groupTestsByRetries:()=>fc,guid:()=>z,hasTestPlanFlag:()=>Js,isAgentMode:()=>jw,isAppForVirtualIosDevice:()=>es,isAppFromDevice:()=>Ys,isCreatePrefetchedDataMode:()=>Fw,isInitCodimMode:()=>Nw,isInstallLazyDepsMode:()=>Uw,isLoginMode:()=>Dw,isMobileProject:()=>Xs,isPromise:()=>no,isQuarantineAndNotRemoteRun:()=>Je,isRemoteRun:()=>mp,isTunnelOnlyMode:()=>Mw,isURL:()=>Ge,promiseFromCallback:()=>pt,promiseMap:()=>de,promiseTimeout:()=>te,removePropertyFromObject:()=>uo,replaceArgsWithNoDashes:()=>uc,unzipFile:()=>tt});function Zs(r){return r=r.toLowerCase(),mc.find(e=>e.browserValue===r)}function en(r,e,t){r=r.toLowerCase();let s=mc.find(o=>o.browserName.toLowerCase()===r||r.includes(o.synonyms))||mc[0],n=Qs.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=Qs.find(o=>o.sl.platform===e.platform):e.platformName&&(n=Qs.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=Qs.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=Qs.find(o=>o.bs.platform===t.platform))),Er.merge(s,n)}function Sr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function uo(r,e,t){for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(t(s,e)?delete r[s]:typeof r[s]=="object"&&uo(r[s],e,t))}function De(r){return r.ELEMENT||r[Hr]}function po(r){r||(r={});let e=Date.now(),t=r.expireAt||r.expireAT;return r.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function fc(r=[]){return Er.chain(r).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 s=Er.orderBy(t,o=>typeof o.retryCount=="number"?o.retryCount:1),n=Er.chain(s).last().cloneDeep().value();return n&&(n.retryTestResults=s,e.push(n)),e},[]).compact().value()}async function Rr(r,e){let t=await Promise.resolve().then(()=>(Rt(),Lt));try{return(await t.get(`http://${r}/json/version`,void 0,void 0,e)).webSocketDebuggerUrl}catch{throw new Error("unable to connect to devtools server")}}var yp,Er,bp,Bw,Ft,Qs,mc,mo,U=w(()=>{"use strict";yp=E(require("os")),Er=E(require("lodash")),bp=E(require("path"));Bs();ic();fp();hp();Ua();Ya();gp();Bw=yp.homedir(),Ft=bp.join(Bw,".testim-browser-profile"),Qs=[{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"}}],mc=[{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"}];mo=(r,e)=>{if(r.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(r=[...r].sort((s,n)=>s-n),e<=0)return r[0];if(e>=100)return r.at(-1);let t=Math.ceil(r.length*(e/100))-1;return r[t]}});var hc={};W(hc,{$schema:()=>$w,default:()=>Hw,definitions:()=>Ww,properties:()=>qw,required:()=>Vw,type:()=>Gw});var $w,Ww,Gw,Vw,qw,Hw,wp=w(()=>{$w="http://json-schema.org/draft-07/schema#",Ww={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}}}},Gw="object",Vw=["entries"],qw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Hw={$schema:$w,definitions:Ww,type:Gw,required:Vw,properties:qw}});async function xp(){try{return await te(fo.promises.readFile(bo()).then(async r=>{let e=await Ip;return Jw(e,r)}),3e4)}catch{return{}}}function Jw(r,e){let t=e.slice(0,16),s=e.slice(16),n=Buffer.from(r),o=rs.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(s);return JSON.parse(Buffer.concat([i,o.final()]))}function ft(r,e,t=zw,s=void 0){return async()=>{if(!Ep)return await r();let n=e;s&&(e+=JSON.stringify(s));let o=await Yw(e);if(o)return tn.debug("cache hit:",{fnName:e}),o;if(tn.debug("cache miss:",{fnName:e}),!Sp)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await r();return i&&await Xw(e,i,t),i}}async function Yw(r){let t=(await wo)[r];if(!t)return;let{value:s,expiry:n}=t;if(!(n<Date.now())&&s)return s}async function Xw(r,e,t){if(gc)throw tn.error("calling set after waitForSave is not allowed",{key:r,ttl:t}),new Error("calling set after waitForSave is not allowed");try{let s=await wo;s[r]={value:e,expiry:Date.now()+t},Rp=new Promise(n=>{yo=n}),Kw(s)}catch{tn.error("failed updating cache")}}async function Pp(){let r=await wo;Object.keys(r).forEach(e=>{delete r[e]})}function Ap(r){Ep=r}function Qw(r=!0){Sp=r}async function Cp(){try{return gc=!0,await Rp}finally{gc=!1}}function kp(r){go=r,wo=xp()}var fo,ho,rs,Tp,tn,go,vp,yo,Ep,Sp,gc,Rp,Ip,zw,bo,wo,Kw,_p,Op,oI,Lp,zt=w(()=>{"use strict";fo=E(require("fs")),ho=E(require("path")),rs=E(require("crypto"));U();Tp=require("lodash");j();tn=R("local cache"),go=ho.resolve(mt(),"testim-cache"),Ep=!0,Sp=!0,gc=!1,Rp=new Promise(r=>{yo=r}),Ip=new Promise(r=>{vp=r}),zw=1e3*60*60*3,bo=()=>ho.resolve(ho.resolve(go,"testim.cache"));wo=xp(),Kw=(0,Tp.debounce)(async r=>{let e;try{let t=await Ip,s=rs.randomBytes(16),n=JSON.stringify(r),o=Buffer.from(t),i=rs.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),s),a=Buffer.concat([s,i.update(n),i.final()]);await be(go)||await fo.promises.mkdir(go,{recursive:!0}),await fo.promises.writeFile(bo(),a)}catch(t){tn.error("failed saving cache",{err:t}),e=t}yo(e?{success:!1,error:e}:{success:!0})},200);_p=vp,Op=Ap.bind(void 0,!1),oI=Ap.bind(void 0,!0),Lp=()=>Qw(!1)});function To(){return{cliLocation:mt(),userInfo:ss.userInfo(),platform:ss.platform(),release:ss.release()}}var ss,yc=w(()=>{"use strict";ss=E(require("os"));U()});function Zw(r){try{return vo.resolve(vo.dirname(require.resolve(`${r}/package.json`)),require(`${r}/package.json`).main||"")}catch(e){if(e.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return require.resolve(r);throw e}}function Kt(r){let e=Zw(r);return require(e)}var vo,rn=w(()=>{"use strict";vo=E(require("path"))});async function Fp(r){return(await Dp(`npm view ${r} version`)).stdout.trim()}function wc(r){try{return Kt(r)}catch{return!1}}function Up(r,e){return require(ns.join(r,`./node_modules/${e}/package.json`)).version}async function So(r,e,t){function s(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(r,"npm-shrinkwrap.json"),i=ns.join(r,"npm-shrinkwrap-dummy.json"),a=!1;try{try{await be(o)&&(await bc.promises.rename(o,i),a=!0)}catch{}return await Dp(`npm i ${e} --no-save --no-prune --prefer-offline --no-audit --progress=false`,{...t,cwd:r}).catch(c=>{let l=s(c),d=n(c);throw l||d?(Mp.info("Failed to install package due to insufficient write access",{...To(),package:e,path:l||r}),console.error(`
|
|
4
4
|
|
|
5
5
|
Testim failed installing the package ${e} due to insufficient permissions.
|
|
6
6
|
This is probably due to an installation of @testim/testim-cli with sudo, and running it without sudo.
|
|
7
|
-
Testim had missing write access to ${l||
|
|
7
|
+
Testim had missing write access to ${l||r}
|
|
8
8
|
|
|
9
|
-
`),new
|
|
10
|
-
stdout: ${c} stderr: ${l}`}
|
|
9
|
+
`),new yr(l||r)):c})}finally{if(a)try{await bc.promises.rename(i,o)}catch{}}}function jp(r,e,t,s){return new Promise((n,o)=>{let i=t?["--proxy",t]:[],a=t?{env:Object.assign(process.env,{HTTP_PROXY:t,HTTPS_PROXY:t})}:{},c="",l="",d="--no-save --no-package-lock --no-prune --prefer-offline --no-audit --progress=false".split(" "),m=(0,Eo.spawn)("node",[eT,"i","--prefix",r,...d,...e,...i],a);m.stderr.pipe(process.stderr),m.stdout.pipe(process.stdout),m.stdout.on("data",p=>{c+=p}),m.stderr.on("data",p=>{l+=p}),m.on("close",p=>{var f;if(p){let h;try{let g=(f=/npm ERR! 404 {2}'(.+)' is not in the npm registry/gm.exec(l))==null?void 0:f[1];h=`404 Not Found - GET https://registry.npmjs.org/${g==null?void 0:g.split("@")[0]} - Not found`}catch{h=`Npm Install closed with exit code ${p}
|
|
10
|
+
stdout: ${c} stderr: ${l}`}Mp.debug(`Npm Install closed with exit code ${p}`,{message:h}),o(new dt(h))}else n(c)}),setTimeout(()=>{try{m.kill()}finally{o(new J)}},s)})}var bc,ns,Np,Eo,Dp,Mp,eT,sn=w(()=>{"use strict";bc=E(require("fs")),ns=E(require("path"));U();Np=require("util"),Eo=require("child_process");j();yc();rn();q();Dp=(0,Np.promisify)(Eo.exec),Mp=R("cli-service");eT=ns.resolve(require.resolve("npm").replace("index.js",""),"bin","npm-cli.js")});var Vp={};W(Vp,{install:()=>rT,isReady:()=>nT,start:()=>sT});var Bp,$p,Wp,Gp,Tc,tT,rT,sT,nT,qp=w(()=>{"use strict";Bp=E(require("fkill")),$p=E(require("p-retry"));sn();Rt();U();rn();Wp="chromedriver",Gp=9515,Tc=`http://localhost:${Gp}/wd/hub`,tT=["--url-base=/wd/hub","--disable-build-check","--whitelisted-ips=0.0.0.0","--log-level=OFF"],rT=async()=>{await So(mt(),`${Wp} --detect_chromedriver_version`)},sT=async()=>{process.env.NODE_OPTIONS="",await(0,Bp.default)(`:${Gp}`,{silent:!0}),await Kt(Wp).start(tT,!0)},nT=async({chromeBinaryLocation:r})=>{await(0,$p.default)(async()=>{var n;let e=await wr(`${Tc}/status`);if(!((n=e==null?void 0:e.value)!=null&&n.ready))throw new Error("status failed");let t={...r&&{binary:r}},s=await St({url:`${Tc}/session`,body:{desiredCapabilities:{browserName:"chrome",chromeOptions:t}},headers:{"Content-Type":"application/json"}});if(!s||s.status!==0||!s.sessionId)throw new Error("create session failed");await qs(`${Tc}/session/${s.sessionId}`)},{retries:99,factor:1,minTimeout:30})}});var nn={};W(nn,{getSessionPlayerFolder:()=>Rc,prepareChromeDriver:()=>xr,prepareCustomExtension:()=>Ec,prepareExtension:()=>Sc,preparePlayer:()=>Pr});async function Ec(r,e=!1){if(!r)return;if(Ge(r)){let n=os.join(process.cwd(),r.replace(/^.*[\\/]/,""));if(await oT(r)>vc&&!e)throw new I(Hp);return await ze(r,n),n}let t=os.resolve(r);if(!Kp.existsSync(t))throw new I(`Failed to find custom extension in location: ${t}`);if(oc(t)>vc&&!e)throw new I(Hp);return t}async function oT(r){let e=(Rt(),ie(Lt));try{let s=(await e.head(r)).headers["content-length"];return(s?parseInt(s,10):0)/1e6}catch(t){throw Io.warn("failed to download custom extension",{err:t}),new I(`Failed to download custom extension from location: ${r}`)}}function Sc(r){Io.info("prepare extension",{locations:r});let e=r.map(t=>({location:t,path:oo(t)}));return ft(()=>de(e,({location:t,path:s})=>io(t,s)),"prepareExtension",Yp,e)()}async function xr(r={},e={},t=!1){let n=require("ora")("Starting Driver").start(),o=await Promise.resolve().then(()=>(qp(),Vp));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||(Io.error(a,{...r,...To(),error:(0,Jp.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 av(){let s=`${mr}/extension/sessionPlayer_LATEST_RELEASE`;return(await Er(s)).body.toString("utf8")}async function cv(s,e){if(!Be(s)||Be(s)&&e||Ie)return s;let t=await av();return`${s}-${t}`}function Fc(){let s=lt();return as.resolve(s,"testim-bin")}function lv(){let s=Fc();return as.resolve(s,"sessionPlayer.zip")}async function Em(s,e,t=!1){try{return await lo(s,e),await Ye(e,Fc())}catch(r){if(t)throw r;return await Em(s,e,!0)}}async function Ar(s,e){Po.info("prepare player",{location:s,canary:e});let t=lv();return dt(async()=>{let r=await cv(s,e);return await Em(r,t),{}},"preparePlayer",vm,[s,e,t])()}var bm,wm,as,Tm,Po,vm,Dc,ym,cs=T(()=>{"use strict";bm=E(require("ms")),wm=E(require("fs")),as=E(require("path"));le();qt();Tm=require("serialize-error");j();_c();z();F();Po=x("prepare runner and testim start"),vm=(0,bm.default)("0.5 day"),Dc=16,ym=`The size of the custom extension is more than ${Dc}MB`});function uv(){let s=dn.type().toLowerCase();return s==="darwin"?dn.arch()==="arm"?"mac_arm":"mac":s==="windows_nt"?dn.arch()==="x64"?"win64":"win32":"linux"}async function Ao(){let s=uv(),e="https://storage.googleapis.com/chromium-browser-snapshots",t={linux:"Linux_x64",mac:"Mac",mac_arm:"Mac_Arm",win32:"Win",win64:"Win_x64"};if(!(s in t))throw new R(`Unsupported platform: ${s}`);let r=parseInt(pn,10)>591479?"chrome-win":"chrome-win32",n={linux:"chrome-linux",mac:"chrome-mac",mac_arm:"chrome-mac",win32:r,win64:r},o={linux:"chrome",mac:"Chromium.app/Contents/MacOS/Chromium",mac_arm:"Chromium.app/Contents/MacOS/Chromium",win32:"chrome.exe",win64:"chrome.exe"},i=`${e}/${t[s]}/${pn}/${n[s]}.zip`,a=Co.join(jc,n[s]),c=`${a}.zip`,l=Co.join(a,o[s]);if(await ye(l))return l;if(!await ye(c)){let m=(0,Bc.default)("Downloading Chromium").start();try{await Sm.promises.mkdir(jc),await qe(i,c)}catch(p){let f=`Failed to download Chromium: ${p.message}`;throw m.fail(f),new Error(f)}m.succeed()}let d=(0,Bc.default)("Extracting Chromium").start();try{await Ye(c,jc)}catch(m){let p=`Failed to extract Chromium: ${m.message}`;throw d.fail(p),new Error(p)}return d.succeed(),l}var Sm,dn,Co,Bc,pn,jc,$c=T(()=>{"use strict";Sm=E(require("fs")),dn=E(require("os")),Co=E(require("path")),Bc=E(require("ora"));z();F();pn="1000968",jc=Co.join(Nt,`chrome-${pn}`)});async function Im(s,e){return _o=s,Vc=e,await Wc()}function xm(s,e,t){Ze=s.token,_o=e,Vc=t,fn=Hc(Ze),ko=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted}function dv(s=_o,e=Vc){return dt(()=>(mn.info("request to get cli token from server"),Tt({url:`${he}/auth/token`,body:{projectId:s,token:e}})),"getTokenV3",Rm*10,{projectId:s,token:e})()}async function pv(){return mn.info("request to refresh JWT cli token from server"),Ze=(await Tt({url:`${he}/auth/refreshToken`,body:{token:Ze,refreshToken:ko}})).token,fn=Hc(Ze),Ze}async function Wc(){try{let s=await dv();return mn.info("successfully get cli token from server"),Ze=s.token,fn=Hc(Ze),ko=s.refreshToken,Gc=s.ngrokToken,qc=s.isNgrokWhitelisted,Ze}catch(s){throw s.message.includes("Unauthorized")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(mn.error(`While trying to retrieve CLI token. caught error: ${s}`,{projectId:_o}),new R(`While trying to retrieve CLI token, caught error: ${s}`))}}function Hc(s){return require("jsonwebtoken").decode(s).exp*1e3}async function Ht(){if(!fn)return Wc();if(fn<Date.now()+4*Rm)try{return await pv()}catch(s){return mn.error("failed to refresh token, executing fallback",s),Wc()}return Ze}function Oo(){return ko}function Dt(){return Ze?{uid:require("jsonwebtoken").decode(Ze).id,ngrokToken:Gc,isNgrokWhitelisted:qc}:{}}var mn,Ze,fn,ko,Gc,qc,_o,Vc,Rm,Et=T(()=>{"use strict";le();vt();qt();z();j();mn=x("testim-custom-token"),_o=null,Vc=null,Rm=5*60*1e3});var Pm={};$(Pm,{isCi:()=>ls});var ls,Lo=T(()=>{"use strict";ls=Boolean(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.BUILD_NUMBER||process.env.RUN_ID||!1)});var ve={};$(ve,{addTestRetry:()=>gl,clearTestResult:()=>ml,deleteCloudflareTunnel:()=>Tl,fetchLambdatestConfig:()=>ul,forceUpdateCloudflareTunnelRoutes:()=>wl,getAllGrids:()=>ll,getAppDetails:()=>tl,getApplitoolsIntegrationData:()=>yl,getCloudflareTunnel:()=>bl,getEditorUrl:()=>bv,getGridById:()=>Mo,getGridByName:()=>al,getHybridGridProvider:()=>il,getLabFeaturesByProjectId:()=>dl,getMobileDevicesFromGrid:()=>El,getRealData:()=>yn,getS3Artifact:()=>gn,getSuiteTestList:()=>el,getTestPlan:()=>yv,getTestPlanTestList:()=>Zc,getTestResults:()=>kr,getUsageForCurrentBillingPeriod:()=>rl,initializeUserWithAuth:()=>cl,isTestResultCompleted:()=>sl,keepAliveGrid:()=>nl,loadSfdcCredential:()=>Kc,loadTest:()=>Jc,releaseGridSlot:()=>ol,reportExecutionFinished:()=>Do,reportExecutionStarted:()=>Qc,saveRemoteStep:()=>fl,saveTestPlanResult:()=>Xc,updateExecutionTests:()=>Yc,updateRemoteRunFailure:()=>vl,updateTestDataArtifact:()=>Uo,updateTestResult:()=>pl,updateTestStatus:()=>us,uploadRunDataArtifact:()=>hl});async function hn(){let s=await Ht();if(!s)throw new Error("Failed to get token from server");return{Authorization:`Bearer ${s}`}}async function et({url:s,body:e,headers:t={},timeout:r,retry:n}){let o=await hn(),i=Object.assign({},t,o);return Tt({url:`${he}${s||""}`,body:e,headers:i,timeout:r,retry:n})}async function hv(s,e,t,r={},n=void 0){let o=await hn(),i=Object.assign({},r,o);return await mc(`${he}${s||""}`,e,t,i,n)}async function No(s,e){let t=await hn();return await hc(`${he}${s||""}`,e,t)}async function gv(s,e){let t=await hn();return await Qs(`${he}${s||""}`,e,t)}async function Ce(s,e,t,r){let n=await hn();return await vr(`${he}${s||""}`,e||void 0,n,r,t)}function gn(s,e){return(0,oe.default)(()=>Ce(`/storage${s}`,null,{isBinary:!0},e),{retries:ne})}async function yv(s,e){let t=n=>n==null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,oe.default)(()=>Ce("/testPlan",{projectId:s,name:e.join(",")}),{retries:ne})).map(({testConfigIds:n,beforeAllLabels:o,testLabels:i,afterAllLabels:a,...c})=>Object.assign(c,{testConfigIds:t(n),beforeAllLabels:t(o),testLabels:t(i),afterAllLabels:t(a)}))}async function Kc({branch:s,projectId:e}){let t=await(0,oe.default)(()=>Ce(`/branch/branchData/${s}`,{projectId:e}),{retries:ne});return t==null?void 0:t.sfdcCredential}function Jc({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,oe.default)(()=>Ce(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:ne})}function Xc(s,e,t){return(0,oe.default)(()=>et({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:ne})}function us(s,e,t,r,n,o,i=ne){return(0,oe.default)(()=>No("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:mv,...o}),{retries:i})}function Yc(s,e,t,r,n,o,i,a){return(0,oe.default)(()=>No("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:o,endTime:i,projectId:a}),{retries:ne})}async function Qc({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:o,resultLabels:i,remoteRunId:a,localRunUserId:c,isLocalRun:l,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(Lo(),Pm));return et({timeout:9e4,url:"/result/run",body:{runId:s,projectId:e,labels:t,startTime:r,execution:n,status:"RUNNING",config:o,resultLabels:i,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:c,isLocalRun:l}},retry:3})}function Do(s,e,t,r,n={},o=void 0,i=void 0){let a=Date.now();return(0,oe.default)(()=>No("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:o,resultExtraData:i}),{retries:ne})}async function Zc(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:ne})}function el({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}){return(0,oe.default)(()=>et({url:"/suite/v2/list",body:{projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}}),{retries:ne,factor:1})}async function tl({appId:s,projectId:e}){try{return await(0,oe.default)(()=>Ce(`/mobile-app/app/${s}?projectId=${e}`),{retries:ne,factor:1})}catch(t){Ut.error("failed getting application details",{appId:s,error:t});return}}async function rl(s){try{return await(0,oe.default)(()=>Ce(`/plan/project/${s}/usage-current-billing-period`),{retries:ne})}catch(e){Ut.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function sl(s,e,t){return(0,oe.default)(()=>Ce(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:ne})}function kr(s,e,t,r){return(0,oe.default)(()=>Ce(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:ne,factor:1})}function nl(s,e){return et({url:`/grid/keep-alive?reqId=${K()}`,body:{projectId:s,slots:e},timeout:1e4})}function ol(s,e,t,r,n){return et({url:`/grid/release?reqId=${K()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function il(s){return et({url:"/grid/hybrid/provider",body:s})}function al(s,e,t,r,n){return(0,oe.default)(()=>Ce("/grid/name",{companyId:s,projectId:e,name:t,browser:r,executionId:n,reqId:K()}),{retries:ne})}function Mo(s,e,t,r,n){return(0,oe.default)(()=>Ce(`/grid/${t}`,{companyId:s,projectId:e,browser:r,executionId:n,reqId:K()}),{retries:ne})}async function cl({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n}){var o,i;try{return await(0,oe.default)(()=>Tt({url:`${he}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n}}),{retries:ne})}catch(a){throw Ut.error("error initializing info from server",a),(o=a==null?void 0:a.message)!=null&&o.includes("Bad Request")?new R("Error trying to retrieve CLI token. Your CLI token and project might not match. Please make sure to pass `--project` and `--token` that match to each other or make sure they match in your ~/.testim file."):(i=a==null?void 0:a.code)!=null&&i.includes("ENOTFOUND")?new R("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend."):a}}async function bv(){if(pr)return{editorUrl:pr};try{return await(0,oe.default)(()=>Ce("/system-info/editor-url"),{retries:ne,onFailedAttempt:s=>{if(s.attemptNumber>=ne)throw s}})}catch{return Ut.error("cannot retrieve editor-url from server"),{editorUrl:"https://app.testim.io"}}}function ll(s){return(0,oe.default)(()=>Ce("/grid",{companyId:s}),{retries:ne})}function yn(s,e,t){return(0,oe.default)(()=>Ce(`/real-data/${e}?${t}&projectId=${s}`),{retries:ne})}function pl(s,e,t,r,n){return(0,oe.default)(()=>et({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:ne})}function ml(s,e,t,r){return(0,oe.default)(()=>et({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:ne})}function fl(s,e,t,r){return(0,oe.default)(()=>et({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:ne})}function wv(s){return s.startsWith("/")?s:`/${s}`}function Tv(s,e,t){let r=wv(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Am(s,e,t,r,n,o="application/octet-stream"){let i=null;o==="application/json"&&(i=".json");let a=`${n}_${K()}${i||""}`,c=`${e}/${t}/${a}`,l=Tv(c,"test-result-artifacts",s),d=Buffer.from(Cm.gzip(r,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,oe.default)(()=>hv(`/storage${l}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:ne,factor:1}),l}function gl({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:o,testResult:i}){return(0,oe.default)(()=>et({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:o,testId:t,runId:e,testResult:i}}),{retries:ne})}async function yl(s){try{return await Ce(`/integration/applitools/v3/connected?projectId=${s}`)}catch(e){return Ut.warn("could'nt get applitools integration data.",{err:e}),{}}}async function bl(s,e){try{return await No("/tunnel",{companyId:s,routes:e})}catch(t){return Ut.warn("could'nt get tunnel.",{err:t}),{}}}async function wl(s,e){try{return await et({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}async function Tl(s,e){try{return await gv(`/tunnel/${e}`,{companyId:s})}catch(t){Ut.warn("could'nt get tunnel.",{err:t});return}}function vl(s){return Tt({url:`${he}/result/remoteRunFailure`,body:s})}async function El({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let o=`${fv}/mobileDevices/${t}/${r}?projectType=${e}`;o=n?`${o}&selectors=${encodeURIComponent(n)}`:o;try{return await(0,oe.default)(()=>Ce(o,{projectId:s}),{retries:ne})}catch(i){return Ut.warn("could'nt get devices from headspin grid.",{err:i}),null}}var zt,Cm,oe,zc,mv,Ut,ne,fv,ul,dl,hl,Uo,Te=T(()=>{"use strict";zt=E(require("lodash")),Cm=E(require("pako"));F();le();ae();vt();Et();oe=E(require("p-retry")),zc=E(require("object-hash"));z();j();mv=nt(),Ut=x("testim service api"),ne=3,fv="/grid";ul=async()=>(0,oe.default)(()=>Ce("/grid/lt/config"),{retries:ne}),dl=async s=>(0,oe.default)(()=>Ce(`/labFeature/v2/project/${s}`),{retries:ne});hl=zt.memoize(async(s,e,t,r)=>{if(!zt.isEmpty(r))return await Am(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`),Uo=zt.memoize(async(s,e,t,r,n)=>!r||zt.isEmpty(r)?void 0:await Am(s,e,t,JSON.stringify((()=>{let i=zt.clone(r);if(n!=null&&n.hiddenParams){let{hiddenParams:a}=n;(a||[]).forEach(c=>{i[c]&&Object.assign(i,{[c]:Sc.HIDDEN_PARAM})})}return i})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,zc.default)(r)}:${e}:${t}`)});var _r={};$(_r,{getSessionPlayer:()=>se,options:()=>Rl});var Fo,Rl,Sl,se,Ee=T(()=>{"use strict";Fo=require("path"),Rl={playerPath:void 0},se=()=>{if(Sl)return Sl;let s=(Le(),G(Oe));s.log("getSessionPlayerRequire start");let{getSessionPlayerFolder:e}=(cs(),G(un)),t=e(),r=Rl.playerPath?(0,Fo.resolve)(Rl.playerPath,"src/background/sessionPlayerInit.ts"):(0,Fo.join)(t,"sessionPlayer.js"),n=require(r);return s.log("getSessionPlayerRequire end"),Sl=n,n}});function Sv(s){process.nextTick(()=>{if([Q.SELENIUM,Q.APPIUM].includes(s))try{(Ee(),G(_r)).getSessionPlayer(),require("jsdom")}catch{}})}async function bn(s){let{project:e,token:t,lightweightMode:r,useLocalChromeDriver:n,useChromeLauncher:o,mode:i}=s,a=Boolean(r==null?void 0:r.general),c=Boolean(n||o),l=a?Ev:vv;N("before initializeUserWithAuth");let d=await dt(async()=>(Sv(i),await cl({projectId:e,token:t,branchName:s.branch,lightweightMode:r,localGrid:c})),"initializeUserWithAuth",l,{project:e,token:t,branchName:s.branch,lightweightModeGeneral:a,localGrid:c})();return N("after initializeUserWithAuth"),xm(d.authData,s.project,s.token),d}var vv,Ev,km=T(()=>{"use strict";Le();Te();qt();Et();ae();vv=1e3*60*5,Ev=1e3*60*60*10});async function Lm(s){var o;let e=Promise.resolve(),t=!s.host&&!s.gridId&&!s.grid&&(!s.testPlan||s.testPlan.length===0),r=s.files.length!==0;(t&&r||s.useLocalChromeDriver)&&(s.chromeBinaryLocation=s.downloadBrowser?await Ao():s.chromeBinaryLocation,e=Cr({projectId:s.project,userId:s.user},{chromeBinaryLocation:s.chromeBinaryLocation},Boolean((o=s.lightweightMode)==null?void 0:o.general)),s.useLocalChromeDriver=!0),!s.playerRequirePath&&s.mode!==Q.EXTENSION&&await Ar(s.playerLocation,s.canary),s.mode===Q.EXTENSION&&!s.ext&&await Uc(s.extensionLocation);let n;if(s.installCustomExtension){let i=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);n=await Mc(s.installCustomExtension,i)}return await e,n}async function Nm(s){var i;Rv.info("prepare MockNetwork",{location:s});let e=await wc(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>_m*1e6)throw new Error(`${Il} exceeded ${_m}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${Il} cannot be parsed.${jo.EOL}${a}`)}let n=new Om.default;if(!n.validate(Ac,r)){let a=(i=n.errors)==null?void 0:i.map((c,l)=>`${++l}) ${c.dataPath} ${c.message}`).join(jo.EOL);throw new Error(`${Il} is malformed.${jo.EOL}${a}`)}return r.entries}var jo,Om,_m,Il,Rv,xl=T(()=>{"use strict";jo=E(require("os"));F();qp();cs();Om=E(require("ajv"));ae();$c();km();_m=1,Il="JSON file supplied to --mock-network-pattern",Rv=(j(),G(Js)).getLogger("prepare runner")});function Mm(s,e=process){async function t(r){await re(de(Dm,async n=>n()),1e4).catch(()=>null),s(r)}e.on("uncaughtException",async r=>{wn.error("Caught exception",{err:r}),console.log("Uncaught exception"),r.message&&console.log("Message =",r.message),r.reason&&console.log("Reason =",r.reason),await t(r)}),e.on("unhandledRejection",r=>{var n;if(wn.fatal("Caught unhandled promise rejection",r),!((n=r==null?void 0:r.message)!=null&&n.includes("ENOTFOUND x-api.rollout.io")))throw r}),e.on("rejectionHandled",()=>{wn.error("Caught rejection handled")}),e.once("SIGTERM",()=>{let r="Runner aborted - SIGTERM event",n=new Error(r);throw wn.error(r),t(n),n}),e.once("SIGINT",()=>{let r="Runner aborted - SIGINT event",n=new Error(r);throw wn.error(r),t(n),n}),e.once("exit",r=>{s(r)})}function ds(s){Dm.push(s)}var wn,Dm,Tn=T(()=>{"use strict";j();F();wn=x("process-handler"),Dm=[]});function kl(s,e){let t=s.canary?"-master.zip":".zip",r=`${e?ec:mr}/extension/testim-firefox-profile${t}`,n=`${e?tc:mr}/extension/testim-headless${t}`;return{firefox:r,chrome:n,"edge-chromium":n}}function $m(s){let{chrome:e,firefox:t}=kl(s,!1);return s.browser==="firefox"?t:s.browser==="chrome"?e:[e,t]}function $o(s){let e=`${mr}/extension/sessionPlayer`;return s.canary?`${e}-master`:e}var Wo=T(()=>{"use strict";le()});function Hm(s){Ie||(s!=null&&s.userId||(s={anonymousId:Vm}),qm.identify(s))}function pt(s,e){return ps("ci",s,e)}function ps(s,e,t){if(Ie)return;let r=s?{userId:s}:{anonymousId:Vm};qm.track(Object.assign(r,{event:e,properties:t}))}var Gm,qm,Vm,ms=T(()=>{"use strict";le();Gm=E(require("analytics-node")),qm=new Gm.default("sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY",{flushAt:1}),Vm=require("crypto").randomBytes(20).toString("hex")});function zm(s){return s.start&&ps(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function Km(s){let e=["playground-playwright","playground-puppeteer","playground-selenium"],t=!1,r=!1,n=!1,o=!1;if(s.start&&(o=!0),Number.isNaN(s.agentPort))throw new R("Agent port is not number");if(typeof s.agent=="string"&&e.some(a=>s.agent.includes(a))){let a=s.agent.split(",").map(c=>c.trim());a.includes("playground-playwright")&&(t=!0),a.includes("playground-puppeteer")&&(r=!0),a.includes("playground-selenium")&&(n=!0)}let i=$o(s);return console.log("Start Testim CLI on Agent mode"),{project:s.project,token:s.token,agentMode:!0,agentPort:s.agentPort,agentBind:s.agentBind,openEditor:s.openEditor,installPlaygroundPlaywrightDeps:t,installPlaygroundPuppeteerDeps:r,installPlaygroundSeleniumDeps:n,startTestimBrowser:o,ext:s.ext,extensionPath:s.extensionPath,playerLocation:s.playerPath||i,canary:s.canary,playerPath:s.playerPath,playerRequirePath:s.playerRequirePath,downloadBrowser:Boolean(s.downloadBrowser)}}var Jm=T(()=>{"use strict";Wo();ms();z()});function qo(s){let{platform:e}=process;e==="win32"?(0,Go.exec)(`start chrome ${s}`):e==="darwin"?(0,Go.exec)(`open -a "Google Chrome" ${s}`):e==="linux"&&(0,Go.exec)(`google-chrome ${s}`)}var Go,_l=T(()=>{"use strict";Go=require("child_process")});var En={};$(En,{doLogin:()=>Dl,getProjectId:()=>_v,getToken:()=>Ov});async function _v(){return Qm("projectId")}async function Ov(){return Qm("token")}function Ym(s,e){return Promise.race([s,ie(e).then(()=>{throw new X("timeout")})])}async function Lv(){let s=(await import("express")).default(),e=async function(){return Ym(new Promise(n=>{s.get("/loginInfo",(o,i)=>{n(JSON.parse(Buffer.from(o.query.info,"base64").toString())),i.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((r,n)=>{let o=s.listen(42543,i=>{i&&n(i),r(o.address().port)})});try{let{getEditorUrl:r}=await Promise.resolve().then(()=>(Te(),ve)),{editorUrl:n}=await r();qo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function Dl({overwriteExisting:s=!0,projects:e=null}={}){let t=Ol.homedir(),r=Ll.join(t,".testim");if(await ye(r)&&!s)return;let o={},[{default:i},{default:a}]=await Promise.all([import("prompts"),import("ora")]),c=a("Getting credentials from Testim extension ...").start();if(e||(e=await Ym(Lv(),62e3).catch(()=>null)),e!=null&&e.token){o.token=e.token,o.projectId=e.projectId,c.succeed(),await Xm(r,o);return}if(e!=null&&e.length){c.succeed();let l=e.length===1?{project:e[0]}:await i({type:"select",name:"project",message:"There are multiple projects associated with your user account. Please select the project you would like to connect to:",choices:e.map(d=>({title:d.name,value:d}))});o.token=l.project.ci.token,o.projectId=l.project.id,await Xm(r,o);return}c.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Xm(s,e){await Nl.promises.writeFile(s,Vo.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function Qm(s){let e=Ol.homedir(),t=Ll.join(e,".testim"),r=await ye(t),n={};if(r)try{n=Vo.parse((await Nl.promises.readFile(t)).toString())}catch{}return n||(n={}),n[s]}var Ol,Ll,Vo,Nl,fs=T(()=>{"use strict";Ol=E(require("os")),Ll=E(require("path")),Vo=E(require("yaml"));F();Nl=require("fs");_l()});var nf={};$(nf,{process:()=>Wv});var Ml,ef,Ul,tf,mt,Ne,rf,Nv,Ae,jl,Dv,Mv,Zm,sf,Uv,Fl,zo,Bl,Fv,Ho,St,jv,u,Bv,$v,Wv,of=T(()=>{"use strict";Ml=E(require("ms")),ef=E(require("chalk")),Ul=E(require("fs")),tf=E(require("url")),mt=E(require("lodash")),Ne=E(require("path"));F();Wo();Jm();qt();rf=require("commander");ae();z();Yr();F();Nv=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Ae=(s,e)=>(e.push(s),e),jl=new rf.Command,Dv=s=>s.split(","),Mv=(s,e)=>!s||s.length===0?e:s,Zm=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],sf=()=>{function s(h){return h.includes("-h, --help")}function e(h){return h.includes("--params [params-json-string]")}function t(h){return h.includes("--ext")||h.includes("--extension-path")}function r(h){return h.includes("--player-path")||h.includes("--player-require-path")}function n(h){return h.includes("--executionId")||h.includes("--source")||h.includes("--resultId")||h.includes("--remoteRunId")||h.includes("--schedulerId")}function o(h){return h.includes("--get-browser-timeout")||h.includes("--get-browser-retries")||h.includes("--get-session-timeout")||h.includes("--get-session-retries")||h.includes("--driver-request-timeout")||h.includes("--driver-request-retries")}function i(h){return h.includes("--user")}function a(h){return h.includes("shouldMonitorPerformance")}function c(h){return h.includes("--save-rca-locally")}function l(h){return h.includes("--exit-code-ignore-failing-tests")}function d(h){return h.includes("--high-speed")}function m(h){return h.includes("--urls")}function p(h){return h.includes("--test-start-timeout")}function f(h){return h.includes("--install-lazy-deps")}jl.help(h=>h.split(`
|
|
17
|
-
`).filter(y=>!t(y)&&!e(y)&&!
|
|
18
|
-
`))},
|
|
19
|
-
WARNING: ${
|
|
20
|
-
`))},Fl=["clover","html","json-summary","json","lcov","lcovonly","teamcity","text-lcov","text-summary","text"],{env:zo,argv:Bl,stdout:Fv,exit:Ho,cwd:St}=global.process,jv=["trace","debug","info","warn","error","silent"];Rc(Bl,new Set(["run","connect","agent","tunneld","start","init","install-lazy-deps"]));jl.description("Testim.io CLI").option("--run [file-glob-pattern]","codeful test files to run",Ae,[]).option("-h --help","output usage information",sf).option("-o --options-file [options-file.json]","").option("-c --config-file [config-file.js]","").option("--test-config [test-config]","test config name to override for all tests in current execution",Ae,[]).option("--test-config-id [test-config-id]","test config ID to override for all tests in current execution",Ae,[]).option("--params-file [params-file.json]","").option("--params [params-json-string]","").option("-t, --testId [test-id]","test ID to run",Ae,[]).option("-w, --webpackConfig [webpack-configuration]","webpack configuration used to build the code based project").option("--test-id [test-id]","test ID to run",Ae,[]).option("-l, --label [label]","labels to search test by",Ae,[]).option("-n, --name [test-name]","test name to run",Ae,[]).option("--project [project-id]","project ID").option("-r, --report-file [report junit xml path]","where to save junit xml results file").option("--urls","add step urls to the junit report").option("--override-report-file-classname [override-report-file-classname]","custom junit class name for the junit reporter").option("--reporters [names]","report types",Dv).option("-h, --host [host-name]","host name or ip containing the selenium grid").option("-p, --port [host-port]","host port").option("-g, --grid [grid-name]","grid name").option("--path [grid-path]","grid path").option("--protocol [grid-protocol]","grid protocol http or https").option("--grid-username [grid-username]","grid http basic auth username").option("--grid-password [grid-password]","grid http basic auth password").option("-gi --grid-id [grid-id]","grid ID").option("-b, --browser [browser-type]","browser type (chrome/firefox)").option("-h, --headless [headless]","run in headless mode").option("-m, --mode [runner-mode]","use extension or selenium mode (extension/selenium/appium)").option("--branch [branch]","branch name",void 0).option("--base-url [base-url]","change base-url to a specified url for all tests in current execution").option("--token [token]","identification token to testim").option("--is-regression-baseline-run","save doms and run results as regression baseline data").option("--parallel [number-of-tests]","number of tests to run in parallel").option("--before-parallel [number-of-tests]","number of tests to run in parallel during the before phase of a test plan").option("--after-parallel [number-of-tests]","number of tests to run in parallel during the after phase of a test plan").option("--canary [canary-mode]","enable canary mode",!1).option("--test-plan [test-plan-name]","test plan to run",Ae,[]).option("--test-plan-id [test-plan-id]","test plan to run",Ae,[]).option("--suite [suite-name]","suite to run",Ae,[]).option("--suite-id [suite-id]","suite ID to run",Ae,[]).option("--rerun-failed-by-run-id [run-id]","allows re-running failed tests from a specific run ID").option("--disable-grid-check [boolean]","disable checking if selenium grid is available",!1).option("--disable-native-events [boolean]","pass nativeEvents=false capability to the selenium browser (in selenium mode)",!1).option("--disable-timeout-retry [boolean]","disable retry after test pass test timeout",!1).option("--ca-file [ca-file-location]","ca certificate file location").option("--proxy [proxy-url]","proxy url to all requests").option("--proxy-for-grid [proxy-for-grid]","used together with --proxy to also router grid traffic through a proxy").option("--result-label [result-label]","result label",Ae,[]).option("-oen --override-execution-name [execution-name]","override the default execution name","").option("--retries [max_num_of_retries]","number of retries on test failure, defaults to 0 (no retries)",Number,0).option("--set-retention [retention-in-days]","set the number of days for results retention").option("--user [user-id]","user ID for local Testim-CLI").option("--pass-zero-tests","don't fail the run if no tests were found").option("--device-model [device-model]","The device model to use, iPhone 12, Nexus 5X, SM-G900P etc....").option("--device-udid [device-udid]","the device unique id").option("--os-version [os-version]","The operating system version number").option("--app-id [app-id]","The application id from app library on Testim Editor App").option("--appium-log-level [appium-log-level]","Level of logging verbosity").option("-rad --reset-app-data [reset-app-data]","set noReset appium capability to true, default value true!",!1).option("-fr --full-reset [full-reset]","set fullReset appium capability to true to reinstall application on session start and session end").option("-roso --reset-on-session-start-only [reset-on-session-start-only]","set resetOnSessionStartOnly appium capability to true to avoid uninstall app on session end (ios run only)",!1).option("-str --suppress-tms-reporting [suppress-tms-reporting]","disable test management reporting",!1).option("-tsr --tms-suppress-reporting [tms-suppress-reporting]","disable test management reporting",!1).option("-tid --tms-run-id [tms-run-id]","update existing result in test management","").option("-tff --tms-field-file [tms-field-file.json]","pass field file location to add custom result field to the tms result report","").option("--disable-file-cache","disable internal CLI file caching").option("--file-cache-location [directory]"," internal CLI file caching location").option("--test-start-timeout [test-start-timeout]","The time to wait for a test to start after getting a browser session",Number,Number(zo.TESTIM_TEST_START_TIMEOUT)||2*60*1e3).option("--timeout [test-timeout]","Test run timeout in milliseconds",Number).option("--browser-timeout [open-browser-timeout]","Get browser from grid timeout in milliseconds",Number).option("--new-browser-wait-timeout [max-wait-to-browser]","Maximum get browser wait in minutes",Number).option("--get-browser-timeout [get-browser-timeout]","Timeout for a single attempt to get browser from the grid configured in the project's plan",Number).option("--get-browser-retries [get-browser-retries]","Number of attempts to get browser from the grid configured in the project's plan",Number).option("--get-session-timeout [get-session-timeout]",'Timeout for "/session" request to the selenium server',Number,(0,Ml.default)("90s")).option("--get-session-retries [get-session-retries]",'Retries for "/session" request to the selenium server',Number,3).option("--driver-request-timeout [driver-request-timeout]","Timeout for any WebDriver request to the grid server",Number,(0,Ml.default)("90s")).option("--driver-request-retries [driver-request-retries]","Retries for any WebDriver request to the grid server",Number,3).option("--use-local-chrome-driver [use-local-chrome-driver]","use a local ChromeDriver instance instead of a selenium grid").option("--chrome-binary-location [chrome-binary-location]","Chrome binary location").option("--use-chrome-launcher","use a local Chrome installation without selenium").option("-mnh --mock-network-har","use the HAR file configured in the Testim editor to mock network traffic").option("-mnp --mock-network-pattern [local file location path]","use a JSON rule file to mock network traffic (Rule file schema: https://help.testim.io/page/mocking-network-traffic)").option("-omf --override-mapping-file [local file location path]","pass map file location to override mock network (see schema: https://help.testim.io/page/mocking-network-traffic)").option("-dmn --disable-mock-network","Disable mock mode for the entire CLI run").option("--run-quarantined-tests","Run quarantine tests").option("--collect-code-coverage","collect code coverage for all js files under base url").option("--code-coverage-url-filter [url pattern]","collect code coverage for all js files matching url filter (url including asterisk)").option("--code-coverage-report-path [path]","where to save coverage report (default ./coverage)").option("--code-coverage-source-map-path [path]","path of source code").option("--code-coverage-reporter [reporter]",`set code coverage reporter (default html and text), options: ${Fl.join("/")}`,Ae,[]).option("--code-coverage-include [pattern]","set selecting files for coverage (default src/**)",Ae,[]).option("--sauce-user [sauce-lab-user]","user to connect to sauce labs").option("--sauce-key [sauce-lab-key]","key to use when connecting to sauce labs").option("--sauce-options [sauce-options]","json file of browser and os options for sauce").option("--browserstack-user [browserstack-user]","user to connect to browserStack").option("--browserstack-key [browserstack-key]","key to use when connecting to browserStack").option("--browserstack-options [browserstack-options]","json file of browser and os options for browserStack").option("--perfecto-token [perfecto-token]","security token to use when connecting to perfecto").option("--perfecto-options [perfecto-options]","json file of browser and os options for perfecto").option("--experitest-token [experitest-token]","security token to use when connecting to experitest").option("--testobject-key [testobject-key]","api key to use when connecting to testobject").option("--testobject-options [testobject-options]","json file of options for testobject").option("--ext [extension src path]","use extension from path (default it '/..')").option("--extension-path [path to extension archived file]","override the used extension").option("--install-custom-extension [chrome extension zipped file url or local path]","chrome extension to be installed in the browser").option("--player-path [path to player file]").option("--player-require-path [path to unminified player - development only]").option("--init [init]","Path for an initial test app").option("--inspect [port]","Opens node inspector at given port",Number).option("--login","Log in to Testim").option("--require-credentials","Log in to Testim if not already logged in").option("--tunneld","run a tunnel daemon only").option("--tunnel [tunnel]","enable tunnel").option("--tunnel-routes [routes]","tunnel routes for cloudflare tunnels").option("--tunnel-port [tunnel-port]","tunnel port address").option("--tunnel-host-header [tunnel-host-header]","tunnel host header").option("--tunnel-region [tunnel-region]","ngrok tunnel region").option("--tunnel-diagnostics","collect ngrok tunnel diagnostics").option("--tunnel-use-http-address [tunnel-use-http-address]","use http:// address instead of https://",!1).option("--external-lambdatest-tunnel-id [tunnel-id]","use existing lambdatest tunnel ID").option("--external-lambdatest-use-wss","use wss instead of ssh for LT",!1).option("--external-lambdatest-disable-automation-tunneling","don't tunnel Testim calls in LT tunnel",!0).option("--external-lambdatest-mitm","Turn on LT Man in the middle",!1).option("--w3c-capabilities [enable-w3c-caps-mode]","enable/disable w3c capabilities format (default enable)",JSON.parse,!0).option("--old-capabilities [enable-old-caps-mode]","enable/disable old capabilities format (default enable)",JSON.parse,!0).option("--disable-sockets","Disable CLI sockets",!1).option("--executionId [execution-id]","","").option("--remoteRunId [remote-run-id]","","").option("--schedulerId [scheduler-id]","","").option("--source [source]","","cli").option("--resultId [result-id]","","").option("--connect, --agent [enable-agent-mode]","enable Testim CLI agent mode",!1).option("--start [enable-start]","Connect to testim and open the editor in a standalone browser",!1).option("--download-browser","when used with the start option, downloads a fixed version to run Testim editor in",!1).option("--agent-port [agent-port]","set agent port",Number,42543).option("--agent-bind [agent-host-bind]","set agent host bind","127.0.0.1").option("--chrome-extra-prefs [chrome-extra-prefs]","add extra chrome preferences","").option("--chrome-extra-args [chrome-extra-args]","add extra chrome arguments separated by ','","").option("--chrome-block-location [chrome-block-location]","block chrome geolocation",!1).option("--chrome-user-data-dir [chrome-user-data-dir]","use custom chrome user date dir",!1).option("--disable-cookies-same-site-none-requires-secure [disable-same-site-none-requires-secure]","Disable cookies without SameSite must be secure",!1).option("--selenium-caps-file [selenium-caps-file.json]","json file to merge into Testim selenium desired capabilities").option("--version [version]","print the current version of the Testim CLI and exit",!1).option("--monitor-performance","collect test playback performance data").option("--high-speed","DEPRECATED: use --turbo-mode instead").option("--turbo-mode","run in turbo mode").option("--lightweight-mode [settings]","run lightweight mode").option("--create-prefeched-data [location]","prefetch data into local cache file").option("--use-prefeched-data [location]","use prefetched data from local cache file, and force using only cached data").option("--save-rca-locally [path]","save root cause analysis assets locally").option("--exit-code-ignore-failing-tests","return exit code of zero when tests fail. non zero exit code will mean a real error occurred").option("--intersect-with-label [label]","Out of the execution's test list, run only those tests that have the specified label",Ae,[]).option("--intersect-with-suite [suiteName]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite name)",Ae,[]).option("--intersect-with-suite-id [suiteId]","Out of the execution's test list, run only those tests that are included in the specified suite (by suite ID)",Ae,[]).option("--install-lazy-deps [install-lazy-deps]","Install all lazy dependencies from package.json",!1).parse(Bl);u=jl.opts(),Bv=()=>{u.grid||u.gridId||(u.host||(u.host="ondemand.saucelabs.com"),u.port||(u.port=80))},$v=()=>{u.grid||u.gridId||(u.host||(u.host="hub-cloud.browserstack.com"),u.port||(u.port=80))},Wv=async()=>{var g,y,w,C,b,v,I,k,D;u.inspect&&require("inspector").open(u.inspect);let s={},e={},t=[],r={};if(!Bl.slice(2).length)throw sf(),new fr;if(u.requireCredentials){let S=await Promise.resolve().then(()=>(fs(),En)),_=await S.getProjectId(),P=await S.getToken();(!_||!P)&&await S.doLogin()}if(u.login)return await(await Promise.resolve().then(()=>(fs(),En))).doLogin(),{loginMode:!0};if(u.init)return{initCodimMode:!0,initTestProject:u.init};if(u.version){let S="Testim CLI Version: ";zo.npm_package_version&&(console.log(S,zo.npm_package_version),Ho(0));let _=nt();_&&(console.log(S,_),Ho(0)),console.log("Could not find version, please check the package.json manually"),Ho(0)}if(u.installLazyDeps)return{installLazyDepsMode:!0};u.disableFileCache&&sm();let n=u.fileCacheLocation||u.usePrefechedData||u.createPrefechedData;if(n){let S=Ne.resolve(n);tm(S)}if(u.usePrefechedData&&nm(),u.playerRequirePath){let S=Ne.resolve(u.playerRequirePath);console.log("Using Local Clickim for Player Require Path =",S);let _=Ne.join(S,"tsconfig.node.json"),L=require("ts-node").register({project:_,ignore:[/node_modules/,new RegExp(`^${mt.escapeRegExp(Ne.relative(St(),__dirname))}`)],transpileOnly:!0});require("tsconfig-paths").register({paths:L.config.options.paths,baseUrl:L.config.options.baseUrl}),(Ee(),G(_r)).options.playerPath=S;let V=require("module"),Y=V.prototype.require;V.prototype.require=function(fe){return fe==="rox-alias"?Y.call(this,"rox-node"):Y.apply(this,arguments)}}if(u.caFile&&(global.caFileContent=Ul.readFileSync(u.caFile)),u.proxy&&(global.proxyUri=u.proxy,global.SuperagentProxy=require("superagent-proxy"),global.ProxyAgent=require("proxy-agent"),global.HttpsProxyAgent=require("https-proxy-agent")),u.proxyForGrid&&!u.proxy)throw new R("missing --proxy option");if(zm(u))return Km(u);try{let S={};u.configFile?S=require(Ne.join(St(),u.configFile)).config:u.optionsFile&&(S=require(Ne.join(St(),u.optionsFile))),S&&typeof S.then=="function"&&(S=await S),Object.keys(S).forEach(_=>{let P=Nv(_);u[P]=Mv(u[P],S[_])})}catch(S){throw S.message=`Unable to read options file: ${S.message}`,S}if(u.tunneld)return{tunnel:!0,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,tunnelOnlyMode:!0,token:u.token,project:u.project};let o=((g=u.testConfig)==null?void 0:g.length)||((y=u.testConfigId)==null?void 0:y.length),i=((w=u.testPlan)==null?void 0:w.length)||((C=u.testPlanId)==null?void 0:C.length),a=((b=u.suite)==null?void 0:b.length)||((v=u.suiteId)==null?void 0:v.length);if(u.seleniumCapsFile)try{r=require(Ne.join(St(),u.seleniumCapsFile))}catch(S){throw new R(`Failed to parse selenium caps file file error: ${S.message}`)}if((I=u.reporters)!=null&&I.includes("junit")&&!u.reportFile&&console.log("Warning: please define --report-file option for JUnit reporter"),!u.tunnel&&u.externalLambdatestTunnelId)throw new R("missing --tunnel parameter");if(!u.tunnel&&u.externalLambdatestUseWss)throw new R("missing --tunnel parameter");if(!u.tunnel&&[u.tunnelPort,u.tunnelHostHeader,u.tunnelRegion,u.tunnelDiagnostics].some(Boolean))throw new R("missing --tunnel parameter");if(u.chromeExtraPrefs)try{e=require(Ne.join(St(),u.chromeExtraPrefs))}catch(S){throw new R(`Failed to read/open chrome extra prefs file error: ${S.message}`)}if(u.chromeExtraArgs){let S=u.chromeExtraArgs.split(",");for(let _ of S){let[P]=_.split("=");Zm.includes(P)||u.useLocalChromeDriver||u.useChromeLauncher?(t.push(_),P==="proxy-server"&&t.push("proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io")):console.warn(`Ignoring an unsupported chrome arg (${P}), allowed values: ${JSON.stringify(Zm)}`)}}if(u.paramsFile)try{s=Object.assign({},s,require(Ne.join(St(),u.paramsFile)))}catch(S){throw new R(`Failed to read/open params file error: ${S.message}`)}if(u.params)try{s=Object.assign({},s,JSON.parse(u.params))}catch(S){throw new R(`Failed to parse params string error: ${S.message}`)}if(u.sauceUser&&!u.sauceKey||!u.sauceUser&&u.sauceKey)throw new R("missing --sauce-user <sauce-user> or --sauce-key <sauce-key>");if(u.sauceUser&&u.sauceKey&&(Bv(),u.saucelabs={},u.saucelabs.username=u.sauceUser,u.saucelabs.accessKey=u.sauceKey),u.sauceOptions)try{let S=require(Ne.join(St(),u.sauceOptions)),_=S.platformName&&["ios","android"].includes(S.platformName.toLowerCase());if(S.browserName){let L=S.browserName.toLowerCase();switch(L){case"microsoftedge":u.browser="edge";break;default:u.browser=L}}u.browser==="edge"&&parseFloat(S.version)>=oo&&(u.browser="edge-chromium");let P=parseFloat(S.version)<50&&!["dev","beta"].includes(S.version);if(!_&&u.browser==="chrome"&&P)throw new R("The minimum chrome supported version is 50.0");u.saucelabs=Object.assign({},u.saucelabs,S)}catch(S){throw new R(`Failed to parse saucelabs options file error: ${S.message}`)}if(u.browserstackUser&&!u.browserstackKey||!u.browserstackUser&&u.browserstackKey)throw new R("missing --browserstack-user <browserstack-user> or --browserstack-key <browserstack-key>");if(u.browserstackUser&&u.browserstackKey&&($v(),u.browserstack={},u.browserstack["browserstack.user"]=u.browserstackUser,u.browserstack["browserstack.key"]=u.browserstackKey),u.browserstackOptions)try{let S=require(Ne.join(St(),u.browserstackOptions)),_=S.platform&&["mac","android"].includes(S.platform.toLowerCase());if(S.browserName&&(u.browser=S.browserName.toLowerCase()),u.browser==="edge"&&parseFloat(S.browser_version)>=oo&&(u.browser="edge-chromium"),!_&&parseFloat(S.browser_version)<50&&u.browser==="chrome")throw new R("The minimum chrome supported version is 50.0");u.browserstack=Object.assign({},u.browserstack,S)}catch(S){throw new R(`Failed to parse browserstack options file error: ${S.message}`)}if(u.perfecto={},u.perfectoToken&&(u.perfecto.securityToken=u.perfectoToken),u.perfectoOptions)try{let S=require(Ne.join(St(),u.perfectoOptions)),_={location:"US East",securityToken:u.perfectoToken};u.perfecto=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse perfecto options file error: ${S.message}`)}if(u.testobjectSauce={},u.testobjectKey&&(u.testobjectSauce.testobjectApiKey=u.testobjectKey),u.testobjectOptions)try{let S=require(Ne.join(St(),u.testobjectOptions)),_={testobjectApiKey:u.testobjectKey};u.testobjectSauce=Object.assign({},_,S)}catch(S){throw new R(`Failed to parse test object options file error: ${S.message}`)}if(!u.project){let _=await(await Promise.resolve().then(()=>(fs(),En))).getProjectId();if(_)u.project=_;else throw new R("missing project-id info, either --login to provide new credentials or use --project <project-id>")}u.mode||(u.mode=u.run.length?"selenium":"extension"),u.testConfig&&(u.testConfig=[u.testConfig].flat()),u.testConfigId&&(u.testConfigId=[u.testConfigId].flat()),u.retries=!u.retries||typeof u.retries=="boolean"?1:Number(u.retries)+1,u.browserTimeout=!u.browserTimeout||typeof u.browserTimeout=="boolean"?60*1e3:u.browserTimeout,u.newBrowserWaitTimeout=!u.newBrowserWaitTimeout||typeof u.newBrowserWaitTimeout=="boolean"?10*60*1e3:u.newBrowserWaitTimeout*60*1e3,u.getBrowserTimeout||(u.getBrowserTimeout=u.browserTimeout),u.getBrowserRetries||(u.getBrowserRetries=Math.round(u.newBrowserWaitTimeout/u.browserTimeout)),u.getSessionTimeout=u.browserTimeout<u.getSessionTimeout?u.getSessionTimeout:u.browserTimeout,u.driverRequestTimeout=u.browserTimeout<u.driverRequestTimeout?u.driverRequestTimeout:u.browserTimeout;let c=Boolean(u.timeout);if(u.timeout=!u.timeout||typeof u.timeout=="boolean"?10*60*1e3:u.timeout,u.beforeParallel=!u.beforeParallel||typeof u.beforeParallel=="boolean"?1:Number(u.beforeParallel),u.parallel=!u.parallel||typeof u.parallel=="boolean"?1:Number(u.parallel),u.afterParallel=!u.afterParallel||typeof u.afterParallel=="boolean"?1:Number(u.afterParallel),u.parallel>1&&u.run&&!u.gridId&&!u.grid&&(!u.testPlan||u.testPlan.length===0)&&!((k=u.testPlanId)!=null&&k.length)&&Fv.isTTY&&!u.headless&&!zo.TERM&&((await require("prompts")({type:"toggle",name:"isSure",message:"Running in parallel without --headless flag will open several browsers on your computer. Are you sure?",initial:!1,active:"yes",inactive:"no"})).isSure||Ho(0)),u.tunnelPort=!u.tunnelPort||typeof u.tunnelPort=="boolean"?"80":u.tunnelPort,u.port&&(u.port=Number(u.port)),u.retries<=0||Number.isNaN(u.retries))throw new R("test failure retry count could not be a negative number or string, --retries <max_num_of_retries>");if(u.retries>21)throw new R("Max number of retries exceeded. Number cannot be greater than 20, --retries <max_num_of_retries>");if(!u.token){let _=await(await Promise.resolve().then(()=>(fs(),En))).getToken();if(_)u.token=_;else throw new R("missing Testim Access Token, either --login to provide new credentials or use --token <testim-access-token>, contact info@testim.io if you need a new one.")}if(u.browserTimeout<=0||Number.isNaN(u.browserTimeout))throw new R("get browser timeout could not be a negative number, --browser-timeout <get-browser-timeout>");if(u.newBrowserWaitTimeout<=0||Number.isNaN(u.newBrowserWaitTimeout))throw new R("max new browser wait timeout could not be a negative number, --new-browser-wait-timeout <max-wait-to-browser>");if(u.timeout<=0||Number.isNaN(u.timeout))throw new R("test run timeout could not be a negative number, --timeout <run-timeout>");if(u.beforeParallel<=0||Number.isNaN(u.beforeParallel))throw new R("before-parallel could not be a negative number or not number, --before-parallel <number-of-tests>");if(u.parallel<=0||Number.isNaN(u.parallel))throw new R("parallel could not be a negative number or not number, --parallel <number-of-tests>");if(u.afterParallel<=0||Number.isNaN(u.afterParallel))throw new R("after-parallel could not be a negative number or not number, --after-parallel <number-of-tests>");if(![Q.EXTENSION,Q.SELENIUM,Q.APPIUM].includes(u.mode))throw new R(`runner mode <${u.mode}> is not supported`);if(u.mode!==Q.SELENIUM&&u.disableNativeEvents)throw new R("disable-native-events is only applicable in selenium mode");if(!u.browser&&!o&&!i&&(u.browser="chrome"),u.appiumLogLevel||(u.appiumLogLevel="silent"),!jv.includes(u.appiumLogLevel))throw new R(`runner appium-log-level <${u.appiumLogLevel}> is not supported`);if(u.testPlan&&u.testPlan.length===0&&u.testPlanId&&u.testPlanId.length===0){if(typeof u.host!="string"&&typeof u.grid!="string"&&typeof u.gridId!="string"&&u.run.length===0&&!u.useLocalChromeDriver&&!u.useChromeLauncher&&!u.createPrefechedData)throw new R("missing remote grid address parameter, specify --host <host-name-or-ip> or --grid <grid-name> or --grid-id <grid-id>")}else if(u.testId.length||u.label.length||u.name.length||o||u.browser||a||u.useLocalChromeDriver||u.useChromeLauncher)throw new R("cannot set --testId, --label, --name, --browser, --test-config, --test-config-id, --use-local-chrome-driver --use-chrome-launcher or --suite with --test-plan option");if(!i&&(u.beforeParallel!==1||u.afterParallel!==1))throw new R("cannot set --before-parallel or --after-parallel without --test-plan option");if((u.testId.length||i||u.label.length||u.name.length||a)&&u.file)throw new R("Cannot pass codeful automation tests with --testId --label --name or --suite");if([u.host,u.grid,u.gridId].filter(Boolean).length>1)throw new R("please define exactly one of --grid or --grid-id or --host");if((D=u.host)!=null&&D.includes("/")&&(/^(f|ht)tps?:\/\//i.test(u.host)||(u.host=`http://${u.host}`),u.host=tf.parse(u.host).hostname),u.resultLabel.length){u.resultLabel=u.resultLabel.map(_=>_.trim()).filter(Boolean);let S=u.resultLabel.filter(_=>_.length>=250).filter(Boolean);if(u.branch==="auto-detect"&&u.resultLabel.includes("auto-detect-branch")&&Ir()&&u.resultLabel.unshift(Ir()),S.length)throw new R("A result label cannot exceed 250 characters")}let d=$m(u),m=$o(u);if(!u.w3cCapabilities&&!u.oldCapabilities)throw new R("cannot set --w3c-capabilities and --old-capabilities options as false");if(u.protocol||(u.protocol=u.port===443?"https":"http"),!["http","https"].includes(u.protocol))throw new R("invalid --protocol value, allow --protocol http or https");if(u.rerunFailedByRunId&&u.branch)throw new R("It is not possible to use --branch with --rerun-failed-by-run-id. Tests will automatically run on the same branch that was used in the original run");if(u.rerunFailedByRunId&&(a||u.name.length||u.testId.length||u.label.length||i))throw new R("Re-running failed tests is not possible when suite (--suite), label (--label), plan (--test-plan), or other test flags (--test) are provided. Please remove these flags and try again");if(u.run.length){let S=require("glob");if(u.files=mt.flatMap(u.run,_=>S.sync(_)),u.files.length===0)throw new R(`No files found at path '${u.run}'.`)}else u.files=[];if(u.setRetention&&!mt.inRange(mt.parseInt(u.setRetention),1,11))throw new R("Please provide the number of days that the test results will be retained for (--set-retention must be a whole number between 1 to 10)");u.setRetention&&(u.setRetention=Number(u.setRetention));let p="is no longer supported, please use --override-mapping-file";if(u.mockNetworkHar)throw new R(`--mock-network-har ${p}`);if(u.mockNetworkPattern)throw new R(`--mock-network-pattern ${p}`);if(u.disableMockNetwork&&u.overrideMappingFile)throw new R("You can either use --disable-mock-network or --override-mapping-file");if(!u.collectCodeCoverage&&u.codeCoverageSourceMapPath)throw new R("cannot set --code-coverage-source-map-path without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageReporter.length)throw new R("cannot set --code-coverage-reporter without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageInclude.length)throw new R("cannot set --code-coverage-include without passing --collect-code-coverage");if(u.collectCodeCoverage&&u.codeCoverageReporter&&mt.difference(u.codeCoverageReporter,Fl).length){let S=mt.difference(u.codeCoverageReporter,Fl);throw new R(`invalid --code-coverage-reporter parameters ${S.join("/")}`)}u.codeCoverageReporter=u.codeCoverageReporter.length===0?["html","text"]:u.codeCoverageReporter,u.codeCoverageInclude=u.codeCoverageInclude.length===0?["src/**"]:u.codeCoverageInclude;let f={mockNetworkHar:"--mock-network-har",mockNetworkPattern:"--mock-network-pattern",overrideMappingFile:"--override-mapping-file",codeCoverageUrlFilter:"--code-coverage-url-filter",collectCodeCoverage:"--collect-code-coverage",disableMockNetwork:"--disable-mock-network",useChromeLauncher:"--use-chrome-launcher"},h=Object.keys(f).filter(S=>Boolean(u[S]));if(u.mode!==Q.EXTENSION&&h.length){let S=h.length>1?"are":"is";throw new R(`${h.map(_=>f[_]).join(" and ")} ${S} only applicable in extension mode`)}if(u.tmsFieldFile)try{let S=Ul.readFileSync(u.tmsFieldFile);u.tmsCustomFields=JSON.parse(S)}catch(S){throw new R(`failed to parse field file error: ${S.message}`)}if(u.highSpeed&&(Uv("--high-speed"," --turbo-mode"),u.turboMode=!0),u.deviceUdid&&(u.deviceModel||u.osVersion))throw new R("It is not possible to use --osVersion or --deviceModel with --device-udid. device-udid is unique and cannot be combined with another flag");if(u.resetAppData&&u.fullReset)throw new R("It is not possible to set both --reset-app-data and --full-reset capabilities to true at the same time!");if(u.resetOnSessionStartOnly&&!u.fullReset&&console.warn("Ignoring --reset-on-session-start-only flag, should be used when --full-reset is provided for ios runs"),u.lightweightMode)try{let S={general:!0,disableLabs:!0,disableFeatureFlags:!0,disableAssets:!0,disablePixelValidation:!0,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!0,assumePreloadedSharedSteps:!0,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableAutoImprove:!0,disableQuotaBlocking:!0,onlyTestIdsNoSuite:!0,uploadAssetsAndResultsOnFailure:!0,preloadTests:!0,disableProjectDefaults:!0,type:"lightweight"},_=typeof u.lightweightMode=="string"?JSON.parse(u.lightweightMode):{};u.lightweightMode=Object.assign({},S,_)}catch(S){throw new R(`failed to parse lightweightMode settings error: ${S.message}`)}else u.turboMode&&u.mode===Q.EXTENSION&&(u.lightweightMode={general:!0,disableLabs:!1,disableFeatureFlags:!1,disableAssets:!0,disablePixelValidation:!1,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!1,assumePreloadedSharedSteps:!1,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableQuotaBlocking:!1,disableAutoImprove:!1,onlyTestIdsNoSuite:!1,uploadAssetsAndResultsOnFailure:!0,preloadTests:!1,disableProjectDefaults:!1,type:"turboMode"});if(typeof u.baseUrl=="boolean")throw new R("base url cannot be used as a flag, and must contain a string value");return{testId:[u.testId].flat(),name:[u.name].flat(),label:[u.label].flat(),suites:[u.suite].flat(),suiteIds:[u.suiteId].flat(),testPlan:[u.testPlan].flat(),testPlanIds:[u.testPlanId].flat(),files:[u.files].flat(),webpackConfig:u.webpackConfig,reportFile:u.reportFile,urls:u.urls,reportFileClassname:u.overrideReportFileClassname,reporters:u.reporters,project:u.project,host:u.host,headless:u.headless,useLocalChromeDriver:u.useLocalChromeDriver,chromeBinaryLocation:u.chromeBinaryLocation,useChromeLauncher:u.useChromeLauncher,port:u.port,grid:u.grid,gridId:u.gridId,disableNativeEvents:u.disableNativeEvents,saucelabs:u.saucelabs,browserstack:u.browserstack,baseUrl:u.baseUrl,branch:(u.branch==="auto-detect"?Ir():u.branch)||"master",autoDetect:u.branch==="auto-detect",token:u.token,userParamsData:s,mode:u.mode,isRegressionBaselineRun:u.isRegressionBaselineRun,browser:u.browser,beforeParallel:u.beforeParallel,parallel:u.parallel,afterParallel:u.afterParallel,canary:u.canary,rerunFailedByRunId:u.rerunFailedByRunId,disableGridCheck:u.disableGridCheck,disableTimeoutRetry:u.disableTimeoutRetry,resultLabels:u.resultLabel,path:u.path,protocol:u.protocol,perfecto:u.perfecto,experitestToken:u.experitestToken,testobjectSauce:u.testobjectSauce,gridUsername:u.gridUsername,gridPassword:u.gridPassword,overrideExecutionName:u.overrideExecutionName,tmsSuppressReporting:Boolean(u.suppressTmsReporting)||Boolean(u.tmsSuppressReporting),tmsRunId:u.tmsRunId,tmsCustomFields:u.tmsCustomFields,proxyForGrid:u.proxyForGrid,retentionDays:u.setRetention,passZeroTests:Boolean(u.passZeroTests),runQuarantinedTests:Boolean(u.runQuarantinedTests),deviceModel:u.deviceModel,deviceUdid:u.deviceUdid,osVersion:u.osVersion,appId:u.appId,appiumLogLevel:u.appiumLogLevel,resetAppData:u.resetAppData,fullReset:u.fullReset,resetOnSessionStartOnly:u.resetOnSessionStartOnly,ext:u.ext,extensionLocation:[u.extensionPath||d].flat(),extensionPath:u.extensionPath,playerLocation:u.playerPath||m,playerPath:u.playerPath,playerRequirePath:u.playerRequirePath,tunnel:u.tunnel,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,externalLambdatestTunnelId:u.externalLambdatestTunnelId,externalLambdatestUseWss:u.externalLambdatestUseWss||!1,externalLambdatestDisableAutomationTunneling:Boolean(u.externalLambdatestDisableAutomationTunneling),externalLambdatestMitm:Boolean(u.externalLambdatestMitm),beforeTest:u.beforeTest,afterTest:u.afterTest,beforeSuite:u.beforeSuite,afterSuite:u.afterSuite,timeout:u.timeout,timeoutWasGiven:c,browserTimeout:u.browserTimeout,newBrowserWaitTimeout:u.newBrowserWaitTimeout,getBrowserTimeout:u.getBrowserTimeout,getBrowserRetries:u.getBrowserRetries,getSessionTimeout:u.getSessionTimeout,getSessionRetries:u.getSessionRetries,driverRequestTimeout:u.driverRequestTimeout,driverRequestRetries:u.driverRequestRetries,testStartTimeout:u.testStartTimeout,testConfigNames:u.testConfig,testConfigIds:u.testConfigId,overrideMappingFile:u.overrideMappingFile,disableMockNetwork:u.disableMockNetwork,codeCoverageUrlFilter:u.codeCoverageUrlFilter,collectCodeCoverage:u.collectCodeCoverage,codeCoverageReportPath:u.codeCoverageReportPath,codeCoverageSourceMapPath:u.codeCoverageSourceMapPath,codeCoverageReporter:u.codeCoverageReporter,codeCoverageInclude:u.codeCoverageInclude,executionId:u.executionId,remoteRunId:u.remoteRunId,schedulerId:u.schedulerId,source:u.source,resultId:u.resultId,installCustomExtension:u.installCustomExtension,w3cCapabilities:u.w3cCapabilities,oldCapabilities:u.oldCapabilities,chromeBlockLocation:u.chromeBlockLocation,chromeUserDataDir:u.chromeUserDataDir,retries:u.retries,chromeExtraPrefs:e,chromeExtraArgs:t,disableCookiesSameSiteNoneRequiresSecure:u.disableCookiesSameSiteNoneRequiresSecure,seleniumCapsFileContent:r,shouldMonitorPerformance:u.monitorPerformance,user:u.user,lightweightMode:u.lightweightMode,createPrefechedData:u.createPrefechedData,saveRCALocally:u.saveRcaLocally,exitCodeIgnoreFailingTests:u.exitCodeIgnoreFailingTests,disableSockets:u.disableSockets,intersections:{labels:u.intersectWithLabel.length?[u.intersectWithLabel].flat():void 0,suiteNames:u.intersectWithSuite.length?[u.intersectWithSuite].flat():void 0,suiteIds:u.intersectWithSuiteId.length?[u.intersectWithSuiteId].flat():void 0},downloadBrowser:u.downloadBrowser}}});var qv={};var hs,af,cf,Ko,Gv,lf=T(()=>{"use strict";hs=E(require("path")),af=require("fs"),cf=require("child_process"),Ko=hs.resolve(__filename),Gv=!Ko.includes("node_modules")&&hs.dirname(Ko).endsWith("src");Gv&&!(0,af.existsSync)(hs.resolve(Ko,"..","..","..","webdriverio","build","index.js"))&&(console.log("Hi developer, we're initializing the runner dev env for the first time for you \u2764\uFE0F"),(0,cf.execSync)("yarn workspace @testim/webdriverio build",{cwd:hs.resolve(Ko,"..","..")}))});var $l={};$($l,{installAllLazyDependencies:()=>zv,lazyRequire:()=>ge});async function ge(s,e={}){let t=Lc(s);if(t)return t;let r;e.silent||(r=(0,uf.default)(`Installing ${s} before first usage...`).start());try{let n=await Hv(s);return r&&r.succeed(),n}catch(n){Vv.warn("failed to install dependency lazily",{dependency:s,err:n});let o=pf(s),i=`${s}@${o}`,c=process.argv.includes("npx")?"":"-g ",l=`Installation of ${s} failed. This typically means you are running an out-of-date version of Node.js or NPM.Please manually install by running the following command: npm install ${c}${i}`;throw r&&r.fail(l),n}}async function Hv(s){return gs.has(s)||(gs.set(s,df(s)),gs.get(s).catch(()=>{gs.delete(s)})),gs.get(s)}async function df(s){let e=Lc(s);if(e)return e;let t=pf(s),r=`${s}@${t}`;return await Io(lt(),r),Vt(s)}async function zv(){let s=Object.keys(qa);for(let e of s)await df(e)}function pf(s){let e=Object.entries(qa).find(([t])=>t===s);if(!e)throw new Error("The given package name is not lazyDependencies");return e[1]}var uf,Vv,gs,ft=T(()=>{"use strict";uf=E(require("ora"));ln();j();F();io();cn();Vv=x("lazy-require"),gs=new Map});var gf={};$(gf,{init:()=>Jv});async function Jv(s){var w,C;let e=typeof s=="string"?s:"";(typeof s!="string"||!s.trim())&&(e=(await(0,Gl.default)({type:"text",name:"project",message:"Please enter Project name",validate:v=>String(v).length>3})).project);let t=Kt.resolve(e);Jt.existsSync(t)&&Jt.readdirSync(t).length!==0&&(console.log(`${t} is not empty. Quitting...`),process.exit(1));let r=t.substr(Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"))+1),n=(0,ff.default)(r);if(!n.validForNewPackages){let b=`The name '${r}' is not a valid package name:`;throw console.log(Jo.default.red(b)),n.errors&&n.errors.forEach(v=>console.log(Jo.default.red(v))),n.warnings&&n.warnings.forEach(v=>console.log(Jo.default.yellowBright(`warning: ${v}`))),new R(`${b}
|
|
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 iT(){let r=`${Kr}/extension/sessionPlayer_LATEST_RELEASE`;return(await Tr(r)).body.toString("utf8")}async function aT(r,e){if(!Ge(r)||Ge(r)&&e||Le)return r;let t=await iT();return`${r}-${t}`}function Rc(){let r=mt();return os.resolve(r,"testim-bin")}function cT(){let r=Rc();return os.resolve(r,"sessionPlayer.zip")}async function Xp(r,e,t=!1){try{return await io(r,e),await tt(e,Rc())}catch(s){if(t)throw s;return await Xp(r,e,!0)}}async function Pr(r,e){Io.info("prepare player",{location:r,canary:e});let t=cT();return ft(async()=>{let s=await aT(r,e);return await Xp(s,t),{}},"preparePlayer",Yp,[r,e,t])()}var zp,Kp,os,Jp,Io,Yp,vc,Hp,is=w(()=>{"use strict";zp=E(require("ms")),Kp=E(require("fs")),os=E(require("path"));le();zt();Jp=require("serialize-error");j();yc();q();U();Io=R("prepare runner and testim start"),Yp=(0,zp.default)("0.5 day"),vc=16,Hp=`The size of the custom extension is more than ${vc}MB`});function lT(){let r=on.type().toLowerCase();return r==="darwin"?on.arch()==="arm"?"mac_arm":"mac":r==="windows_nt"?on.arch()==="x64"?"win64":"win32":"linux"}async function Po(){let r=lT(),e="https://storage.googleapis.com/chromium-browser-snapshots",t={linux:"Linux_x64",mac:"Mac",mac_arm:"Mac_Arm",win32:"Win",win64:"Win_x64"};if(!(r in t))throw new I(`Unsupported platform: ${r}`);let s=parseInt(an,10)>591479?"chrome-win":"chrome-win32",n={linux:"chrome-linux",mac:"chrome-mac",mac_arm:"chrome-mac",win32:s,win64:s},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[r]}/${an}/${n[r]}.zip`,a=xo.join(Ic,n[r]),c=`${a}.zip`,l=xo.join(a,o[r]);if(await be(l))return l;if(!await be(c)){let m=(0,xc.default)("Downloading Chromium").start();try{await Qp.promises.mkdir(Ic),await ze(i,c)}catch(p){let f=`Failed to download Chromium: ${p.message}`;throw m.fail(f),new Error(f)}m.succeed()}let d=(0,xc.default)("Extracting Chromium").start();try{await tt(c,Ic)}catch(m){let p=`Failed to extract Chromium: ${m.message}`;throw d.fail(p),new Error(p)}return d.succeed(),l}var Qp,on,xo,xc,an,Ic,Pc=w(()=>{"use strict";Qp=E(require("fs")),on=E(require("os")),xo=E(require("path")),xc=E(require("ora"));q();U();an="1000968",Ic=xo.join(Ft,`chrome-${an}`)});async function em(r,e){return Co=r,_c=e,await Ac()}function tm(r,e,t){st=r.token,Co=e,_c=t,ln=Oc(st),Ao=r.refreshToken,Cc=r.ngrokToken,kc=r.isNgrokWhitelisted}function uT(r=Co,e=_c){return ft(()=>(cn.info("request to get cli token from server"),St({url:`${ge}/auth/token`,body:{projectId:r,token:e}})),"getTokenV3",Zp*10,{projectId:r,token:e})()}async function dT(){return cn.info("request to refresh JWT cli token from server"),st=(await St({url:`${ge}/auth/refreshToken`,body:{token:st,refreshToken:Ao}})).token,ln=Oc(st),st}async function Ac(){try{let r=await uT();return cn.info("successfully get cli token from server"),st=r.token,ln=Oc(st),Ao=r.refreshToken,Cc=r.ngrokToken,kc=r.isNgrokWhitelisted,st}catch(r){throw r.message.includes("Unauthorized")?new I("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."):(cn.error(`While trying to retrieve CLI token. caught error: ${r}`,{projectId:Co}),new I(`While trying to retrieve CLI token, caught error: ${r}`))}}function Oc(r){return require("jsonwebtoken").decode(r).exp*1e3}async function Jt(){if(!ln)return Ac();if(ln<Date.now()+4*Zp)try{return await dT()}catch(r){return cn.error("failed to refresh token, executing fallback",r),Ac()}return st}function ko(){return Ao}function Ut(){return st?{uid:require("jsonwebtoken").decode(st).id,ngrokToken:Cc,isNgrokWhitelisted:kc}:{}}var cn,st,ln,Ao,Cc,kc,Co,_c,Zp,It=w(()=>{"use strict";le();Rt();zt();q();j();cn=R("testim-custom-token"),Co=null,_c=null,Zp=5*60*1e3});var rm={};W(rm,{isCi:()=>as});var as,_o=w(()=>{"use strict";as=Boolean(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.BUILD_NUMBER||process.env.RUN_ID||!1)});var ve={};W(ve,{addTestRetry:()=>rl,clearTestResult:()=>Zc,deleteCloudflareTunnel:()=>il,fetchLambdatestConfig:()=>Yc,forceUpdateCloudflareTunnelRoutes:()=>ol,getAllGrids:()=>Jc,getAppDetails:()=>$c,getApplitoolsIntegrationData:()=>sl,getCloudflareTunnel:()=>nl,getEditorUrl:()=>yT,getGridById:()=>No,getGridByName:()=>zc,getHybridGridProvider:()=>Hc,getLabFeaturesByProjectId:()=>Xc,getMobileDevicesFromGrid:()=>cl,getRealData:()=>pn,getS3Artifact:()=>dn,getSuiteTestList:()=>Bc,getTestPlan:()=>gT,getTestPlanTestList:()=>jc,getTestResults:()=>Ar,getUsageForCurrentBillingPeriod:()=>Wc,initializeUserWithAuth:()=>Kc,isTestResultCompleted:()=>Gc,keepAliveGrid:()=>Vc,loadSfdcCredential:()=>Nc,loadTest:()=>Dc,releaseGridSlot:()=>qc,reportExecutionFinished:()=>Lo,reportExecutionStarted:()=>Uc,saveRemoteStep:()=>el,saveTestPlanResult:()=>Mc,updateExecutionTests:()=>Fc,updateRemoteRunFailure:()=>al,updateTestDataArtifact:()=>Do,updateTestResult:()=>Qc,updateTestStatus:()=>cs,uploadRunDataArtifact:()=>tl});async function un(){let r=await Jt();if(!r)throw new Error("Failed to get token from server");return{Authorization:`Bearer ${r}`}}async function nt({url:r,body:e,headers:t={},timeout:s,retry:n}){let o=await un(),i=Object.assign({},t,o);return St({url:`${ge}${r||""}`,body:e,headers:i,timeout:s,retry:n})}async function fT(r,e,t,s={},n=void 0){let o=await un(),i=Object.assign({},s,o);return await Qa(`${ge}${r||""}`,e,t,i,n)}async function Oo(r,e){let t=await un();return await ec(`${ge}${r||""}`,e,t)}async function hT(r,e){let t=await un();return await qs(`${ge}${r||""}`,e,t)}async function xe(r,e,t,s){let n=await un();return await wr(`${ge}${r||""}`,e||void 0,n,s,t)}function dn(r,e){return(0,oe.default)(()=>xe(`/storage${r}`,null,{isBinary:!0},e),{retries:ne})}async function gT(r,e){let t=n=>n==null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,oe.default)(()=>xe("/testPlan",{projectId:r,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 Nc({branch:r,projectId:e}){let t=await(0,oe.default)(()=>xe(`/branch/branchData/${r}`,{projectId:e}),{retries:ne});return t==null?void 0:t.sfdcCredential}function Dc({testId:r,branch:e,projectId:t,skipSharedSteps:s=!1,useBranchMap:n=!0}){return(0,oe.default)(()=>xe(`/test/${r}`,{projectId:t,branch:e,skipSharedSteps:s,useBranchMap:n}),{retries:ne})}function Mc(r,e,t){return(0,oe.default)(()=>nt({url:"/testPlan/result",body:{projectId:r,testPlanId:e,result:t}}),{retries:ne})}function cs(r,e,t,s,n,o,i=ne){return(0,oe.default)(()=>Oo("/result/run/test",{runId:e,testId:t,resultId:s,status:n,projectId:r,runnerVersion:pT,...o}),{retries:i})}function Fc(r,e,t,s,n,o,i,a){return(0,oe.default)(()=>Oo("/result/run/tests",{runId:r,runnerStatuses:e,status:t,reason:s,success:n,startTime:o,endTime:i,projectId:a}),{retries:ne})}async function Uc({executionId:r,projectId:e,labels:t,startTime:s,executions:n,config:o,resultLabels:i,remoteRunId:a,localRunUserId:c,isLocalRun:l,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(_o(),rm));return nt({timeout:9e4,url:"/result/run",body:{runId:r,projectId:e,labels:t,startTime:s,execution:n,status:"RUNNING",config:o,resultLabels:i,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:c,isLocalRun:l}},retry:3})}function Lo(r,e,t,s,n={},o=void 0,i=void 0){let a=Date.now();return(0,oe.default)(()=>Oo("/result/run",{runId:e,projectId:t,endTime:a,status:r,success:s,tmsOptions:n,remoteRunId:o,resultExtraData:i}),{retries:ne})}async function jc(r,e,t,s,n){return(0,oe.default)(()=>nt({url:"/testPlan/list",body:{projectId:r,names:e,planIds:t,branch:s,intersections:n},timeout:12e4}),{retries:ne})}function Bc({projectId:r,labels:e,testIds:t,testNames:s,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}){return(0,oe.default)(()=>nt({url:"/suite/v2/list",body:{projectId:r,labels:e,testIds:t,testNames:s,testConfigNames:n,suiteNames:o,suiteIds:i,branch:a,rerunFailedByRunId:c,testConfigIds:l,intersections:d}}),{retries:ne,factor:1})}async function $c({appId:r,projectId:e}){try{return await(0,oe.default)(()=>xe(`/mobile-app/app/${r}?projectId=${e}`),{retries:ne,factor:1})}catch(t){Bt.error("failed getting application details",{appId:r,error:t});return}}async function Wc(r){try{return await(0,oe.default)(()=>xe(`/plan/project/${r}/usage-current-billing-period`),{retries:ne})}catch(e){Bt.error("failed getting usage for current billing period",{projectId:r,error:e});return}}function Gc(r,e,t){return(0,oe.default)(()=>xe(`/result/${r}/isComplete`,{projectId:e,testRetryKey:t}),{retries:ne})}function Ar(r,e,t,s){return(0,oe.default)(()=>xe(`/test/v2/${r}/result/${e}`,{projectId:t,branch:s}),{retries:ne,factor:1})}function Vc(r,e){return nt({url:`/grid/keep-alive?reqId=${z()}`,body:{projectId:r,slots:e},timeout:1e4})}function qc(r,e,t,s,n){return nt({url:`/grid/release?reqId=${z()}`,body:{companyId:r,projectId:e,slotId:t,gridId:s,browser:n}})}function Hc(r){return nt({url:"/grid/hybrid/provider",body:r})}function zc(r,e,t,s,n){return(0,oe.default)(()=>xe("/grid/name",{companyId:r,projectId:e,name:t,browser:s,executionId:n,reqId:z()}),{retries:ne})}function No(r,e,t,s,n){return(0,oe.default)(()=>xe(`/grid/${t}`,{companyId:r,projectId:e,browser:s,executionId:n,reqId:z()}),{retries:ne})}async function Kc({projectId:r,token:e,branchName:t,lightweightMode:s,localGrid:n}){var o,i;try{return await(0,oe.default)(()=>St({url:`${ge}/executions/initialize`,body:{projectId:r,token:e,branchName:t||"master",lightweightMode:s,localGrid:n}}),{retries:ne})}catch(a){throw Bt.error("error initializing info from server",a),(o=a==null?void 0:a.message)!=null&&o.includes("Bad Request")?new I("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 I("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend."):a}}async function yT(){if(zr)return{editorUrl:zr};try{return await(0,oe.default)(()=>xe("/system-info/editor-url"),{retries:ne,onFailedAttempt:r=>{if(r.attemptNumber>=ne)throw r}})}catch{return Bt.error("cannot retrieve editor-url from server"),{editorUrl:"https://app.testim.io"}}}function Jc(r){return(0,oe.default)(()=>xe("/grid",{companyId:r}),{retries:ne})}function pn(r,e,t){return(0,oe.default)(()=>xe(`/real-data/${e}?${t}&projectId=${r}`),{retries:ne})}function Qc(r,e,t,s,n){return(0,oe.default)(()=>nt({url:"/result/test",body:{projectId:r,resultId:e,testId:t,testResult:s,remoteRunId:n}}),{retries:ne})}function Zc(r,e,t,s){return(0,oe.default)(()=>nt({url:"/result/test/clear",body:{projectId:r,resultId:e,testId:t,testResult:s}}),{retries:ne})}function el(r,e,t,s){return(0,oe.default)(()=>nt({url:"/remoteStep",body:{projectId:r,resultId:e,stepId:t,remoteStep:s}}),{retries:ne})}function bT(r){return r.startsWith("/")?r:`/${r}`}function wT(r,e,t){let s=bT(r);return t&&(s=`/${t}${s}`),e&&(s=`/${e}${s}`),s}async function nm(r,e,t,s,n,o="application/octet-stream"){let i=null;o==="application/json"&&(i=".json");let a=`${n}_${z()}${i||""}`,c=`${e}/${t}/${a}`,l=wT(c,"test-result-artifacts",r),d=Buffer.from(sm.gzip(s,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,oe.default)(()=>fT(`/storage${l}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:ne,factor:1}),l}function rl({projectId:r,runId:e,testId:t,newResultId:s,originalTestResultId:n,previousTestResultId:o,testResult:i}){return(0,oe.default)(()=>nt({url:"/result/test/retry",body:{projectId:r,newResultId:s,originalTestResultId:n,previousTestResultId:o,testId:t,runId:e,testResult:i}}),{retries:ne})}async function sl(r){try{return await xe(`/integration/applitools/v3/connected?projectId=${r}`)}catch(e){return Bt.warn("could'nt get applitools integration data.",{err:e}),{}}}async function nl(r,e){try{return await Oo("/tunnel",{companyId:r,routes:e})}catch(t){return Bt.warn("could'nt get tunnel.",{err:t}),{}}}async function ol(r,e){try{return await nt({url:`/tunnel/${e}`,body:{companyId:r}})}catch(t){Bt.warn("could'nt get tunnel.",{err:t});return}}async function il(r,e){try{return await hT(`/tunnel/${e}`,{companyId:r})}catch(t){Bt.warn("could'nt get tunnel.",{err:t});return}}function al(r){return St({url:`${ge}/result/remoteRunFailure`,body:r})}async function cl({projectId:r,projectType:e,gridId:t,companyId:s,selectors:n}){let o=`${mT}/mobileDevices/${t}/${s}?projectType=${e}`;o=n?`${o}&selectors=${encodeURIComponent(n)}`:o;try{return await(0,oe.default)(()=>xe(o,{projectId:r}),{retries:ne})}catch(i){return Bt.warn("could'nt get devices from headspin grid.",{err:i}),null}}var Yt,sm,oe,Lc,pT,Bt,ne,mT,Yc,Xc,tl,Do,Te=w(()=>{"use strict";Yt=E(require("lodash")),sm=E(require("pako"));U();le();ae();Rt();It();oe=E(require("p-retry")),Lc=E(require("object-hash"));q();j();pT=ct(),Bt=R("testim service api"),ne=3,mT="/grid";Yc=async()=>(0,oe.default)(()=>xe("/grid/lt/config"),{retries:ne}),Xc=async r=>(0,oe.default)(()=>xe(`/labFeature/v2/project/${r}`),{retries:ne});tl=Yt.memoize(async(r,e,t,s)=>{if(!Yt.isEmpty(s))return await nm(r,e,t,JSON.stringify(s),"test-run-data","application/json")},(r,e,t,s)=>`${(0,Lc.default)(s)}:${e}:${t}`),Do=Yt.memoize(async(r,e,t,s,n)=>!s||Yt.isEmpty(s)?void 0:await nm(r,e,t,JSON.stringify((()=>{let i=Yt.clone(s);if(n!=null&&n.hiddenParams){let{hiddenParams:a}=n;(a||[]).forEach(c=>{i[c]&&Object.assign(i,{[c]:lc.HIDDEN_PARAM})})}return i})()),"test-test-data","application/json"),(r,e,t,s)=>`${(0,Lc.default)(s)}:${e}:${t}`)});var Cr={};W(Cr,{getSessionPlayer:()=>re,options:()=>ul});var Mo,ul,ll,re,Ee=w(()=>{"use strict";Mo=require("path"),ul={playerPath:void 0},re=()=>{if(ll)return ll;let r=(Oe(),ie(_e));r.log("getSessionPlayerRequire start");let{getSessionPlayerFolder:e}=(is(),ie(nn)),t=e(),s=ul.playerPath?(0,Mo.resolve)(ul.playerPath,"src/background/sessionPlayerInit.ts"):(0,Mo.join)(t,"sessionPlayer.js"),n=require(s);return r.log("getSessionPlayerRequire end"),ll=n,n}});function ET(r){process.nextTick(()=>{if([X.SELENIUM,X.APPIUM].includes(r))try{(Ee(),ie(Cr)).getSessionPlayer(),require("jsdom")}catch{}})}async function mn(r){let{project:e,token:t,lightweightMode:s,useLocalChromeDriver:n,useChromeLauncher:o,mode:i}=r,a=Boolean(s==null?void 0:s.general),c=Boolean(n||o),l=a?vT:TT;_("before initializeUserWithAuth");let d=await ft(async()=>(ET(i),await Kc({projectId:e,token:t,branchName:r.branch,lightweightMode:s,localGrid:c})),"initializeUserWithAuth",l,{project:e,token:t,branchName:r.branch,lightweightModeGeneral:a,localGrid:c})();return _("after initializeUserWithAuth"),tm(d.authData,r.project,r.token),d}var TT,vT,om=w(()=>{"use strict";Oe();Te();zt();It();ae();TT=1e3*60*5,vT=1e3*60*60*10});async function cm(r){var o;let e=Promise.resolve(),t=!r.host&&!r.gridId&&!r.grid&&(!r.testPlan||r.testPlan.length===0),s=r.files.length!==0;(t&&s||r.useLocalChromeDriver)&&(r.chromeBinaryLocation=r.downloadBrowser?await Po():r.chromeBinaryLocation,e=xr({projectId:r.project,userId:r.user},{chromeBinaryLocation:r.chromeBinaryLocation},Boolean((o=r.lightweightMode)==null?void 0:o.general)),r.useLocalChromeDriver=!0),!r.playerRequirePath&&r.mode!==X.EXTENSION&&await Pr(r.playerLocation,r.canary),r.mode===X.EXTENSION&&!r.ext&&await Sc(r.extensionLocation);let n;if(r.installCustomExtension){let i=Boolean(r.useLocalChromeDriver||r.useChromeLauncher);n=await Ec(r.installCustomExtension,i)}return await e,n}async function lm(r){var i;ST.info("prepare MockNetwork",{location:r});let e=await nc(r),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>im*1e6)throw new Error(`${dl} exceeded ${im}MB`);let s;try{s=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${dl} cannot be parsed.${Fo.EOL}${a}`)}let n=new am.default;if(!n.validate(hc,s)){let a=(i=n.errors)==null?void 0:i.map((c,l)=>`${++l}) ${c.dataPath} ${c.message}`).join(Fo.EOL);throw new Error(`${dl} is malformed.${Fo.EOL}${a}`)}return s.entries}var Fo,am,im,dl,ST,pl=w(()=>{"use strict";Fo=E(require("os"));U();wp();is();am=E(require("ajv"));ae();Pc();om();im=1,dl="JSON file supplied to --mock-network-pattern",ST=(j(),ie(Ja)).getLogger("prepare runner")});function dm(r,e=process){async function t(s){await te(de(um,async n=>n()),1e4).catch(()=>null),r(s)}e.on("uncaughtException",async s=>{fn.error("Caught exception",{err:s}),console.log("Uncaught exception"),s.message&&console.log("Message =",s.message),s.reason&&console.log("Reason =",s.reason),await t(s)}),e.on("unhandledRejection",s=>{var n;if(fn.fatal("Caught unhandled promise rejection",s),!((n=s==null?void 0:s.message)!=null&&n.includes("ENOTFOUND x-api.rollout.io")))throw s}),e.on("rejectionHandled",()=>{fn.error("Caught rejection handled")}),e.once("SIGTERM",()=>{let s="Runner aborted - SIGTERM event",n=new Error(s);throw fn.error(s),t(n),n}),e.once("SIGINT",()=>{let s="Runner aborted - SIGINT event",n=new Error(s);throw fn.error(s),t(n),n}),e.once("exit",s=>{r(s)})}function ls(r){um.push(r)}var fn,um,hn=w(()=>{"use strict";j();U();fn=R("process-handler"),um=[]});function gl(r,e){let t=r.canary?"-master.zip":".zip",s=`${e?zd:Kr}/extension/testim-firefox-profile${t}`,n=`${e?Kd:Kr}/extension/testim-headless${t}`;return{firefox:s,chrome:n,"edge-chromium":n}}function gm(r){let{chrome:e,firefox:t}=gl(r,!1);return r.browser==="firefox"?t:r.browser==="chrome"?e:[e,t]}function jo(r){let e=`${Kr}/extension/sessionPlayer`;return r.canary?`${e}-master`:e}var Bo=w(()=>{"use strict";le()});function vm(r){Le||(r!=null&&r.userId||(r={anonymousId:Tm}),wm.identify(r))}function ht(r,e){return us("ci",r,e)}function us(r,e,t){if(Le)return;let s=r?{userId:r}:{anonymousId:Tm};wm.track(Object.assign(s,{event:e,properties:t}))}var bm,wm,Tm,ds=w(()=>{"use strict";le();bm=E(require("analytics-node")),wm=new bm.default("sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY",{flushAt:1}),Tm=require("crypto").randomBytes(20).toString("hex")});function Em(r){return r.start&&us(null,"cli-start-command",{downloadBrowser:Boolean(r.downloadBrowser)}),!!(r.startV2||r.start||r.agent)}async function Sm(r){let e=["playground-playwright","playground-puppeteer","playground-selenium"],t=!1,s=!1,n=!1,o=!1;if(r.start&&(o=!0),Number.isNaN(r.agentPort))throw new I("Agent port is not number");if(typeof r.agent=="string"&&e.some(a=>r.agent.includes(a))){let a=r.agent.split(",").map(c=>c.trim());a.includes("playground-playwright")&&(t=!0),a.includes("playground-puppeteer")&&(s=!0),a.includes("playground-selenium")&&(n=!0)}let i=jo(r);return console.log("Start Testim CLI on Agent mode"),{project:r.project,token:r.token,agentMode:!0,agentPort:r.agentPort,agentBind:r.agentBind,openEditor:r.openEditor,installPlaygroundPlaywrightDeps:t,installPlaygroundPuppeteerDeps:s,installPlaygroundSeleniumDeps:n,startTestimBrowser:o,ext:r.ext,extensionPath:r.extensionPath,playerLocation:r.playerPath||i,canary:r.canary,playerPath:r.playerPath,playerRequirePath:r.playerRequirePath,downloadBrowser:Boolean(r.downloadBrowser)}}var Rm=w(()=>{"use strict";Bo();ds();q()});function Wo(r){let{platform:e}=process;e==="win32"?(0,$o.exec)(`start chrome ${r}`):e==="darwin"?(0,$o.exec)(`open -a "Google Chrome" ${r}`):e==="linux"&&(0,$o.exec)(`google-chrome ${r}`)}var $o,yl=w(()=>{"use strict";$o=require("child_process")});var yn={};W(yn,{doLogin:()=>vl,getProjectId:()=>kT,getToken:()=>_T});async function kT(){return Pm("projectId")}async function _T(){return Pm("token")}function xm(r,e){return Promise.race([r,se(e).then(()=>{throw new J("timeout")})])}async function OT(){let r=(await import("express")).default(),e=async function(){return xm(new Promise(n=>{r.get("/loginInfo",(o,i)=>{n(JSON.parse(Buffer.from(o.query.info,"base64").toString())),i.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((s,n)=>{let o=r.listen(42543,i=>{i&&n(i),s(o.address().port)})});try{let{getEditorUrl:s}=await Promise.resolve().then(()=>(Te(),ve)),{editorUrl:n}=await s();Wo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function vl({overwriteExisting:r=!0,projects:e=null}={}){let t=bl.homedir(),s=wl.join(t,".testim");if(await be(s)&&!r)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 xm(OT(),62e3).catch(()=>null)),e!=null&&e.token){o.token=e.token,o.projectId=e.projectId,c.succeed(),await Im(s,o);return}if(e!=null&&e.length){c.succeed();let l=e.length===1?{project:e[0]}:await i({type:"select",name:"project",message:"There are multiple projects associated with your user account. Please select the project you would like to connect to:",choices:e.map(d=>({title:d.name,value:d}))});o.token=l.project.ci.token,o.projectId=l.project.id,await Im(s,o);return}c.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Im(r,e){await Tl.promises.writeFile(r,Go.stringify(e)),console.log(`Testim credentials saved in '${r}'`)}async function Pm(r){let e=bl.homedir(),t=wl.join(e,".testim"),s=await be(t),n={};if(s)try{n=Go.parse((await Tl.promises.readFile(t)).toString())}catch{}return n||(n={}),n[r]}var bl,wl,Go,Tl,ps=w(()=>{"use strict";bl=E(require("os")),wl=E(require("path")),Go=E(require("yaml"));U();Tl=require("fs");yl()});var Lm={};W(Lm,{process:()=>$T});var El,Cm,Sl,km,gt,Me,_m,LT,Pe,Il,NT,DT,Am,Om,MT,Rl,qo,xl,FT,Vo,xt,UT,u,jT,BT,$T,Nm=w(()=>{"use strict";El=E(require("ms")),Cm=E(require("chalk")),Sl=E(require("fs")),km=E(require("url")),gt=E(require("lodash")),Me=E(require("path"));U();Bo();Rm();zt();_m=require("commander");ae();q();Bs();U();LT=r=>r.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Pe=(r,e)=>(e.push(r),e),Il=new _m.Command,NT=r=>r.split(","),DT=(r,e)=>!r||r.length===0?e:r,Am=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],Om=()=>{function r(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 s(h){return h.includes("--player-path")||h.includes("--player-require-path")}function n(h){return h.includes("--executionId")||h.includes("--source")||h.includes("--resultId")||h.includes("--remoteRunId")||h.includes("--schedulerId")}function o(h){return h.includes("--get-browser-timeout")||h.includes("--get-browser-retries")||h.includes("--get-session-timeout")||h.includes("--get-session-retries")||h.includes("--driver-request-timeout")||h.includes("--driver-request-retries")}function i(h){return h.includes("--user")}function a(h){return h.includes("shouldMonitorPerformance")}function c(h){return h.includes("--save-rca-locally")}function l(h){return h.includes("--exit-code-ignore-failing-tests")}function d(h){return h.includes("--high-speed")}function m(h){return h.includes("--urls")}function p(h){return h.includes("--test-start-timeout")}function f(h){return h.includes("--install-lazy-deps")}Il.help(h=>h.split(`
|
|
17
|
+
`).filter(y=>!t(y)&&!e(y)&&!r(y)&&!s(y)&&!n(y)&&!a(y)&&!i(y)&&!o(y)&&!c(y)&&!l(y)&&!d(y)&&!m(y)&&!p(y)&&!f(y)).join(`
|
|
18
|
+
`))},MT=(r,e)=>{let t=e?`Please use ${e} instead.`:"";console.log(Cm.default.yellow(`
|
|
19
|
+
WARNING: ${r} is deprecated. ${t}
|
|
20
|
+
`))},Rl=["clover","html","json-summary","json","lcov","lcovonly","teamcity","text-lcov","text-summary","text"],{env:qo,argv:xl,stdout:FT,exit:Vo,cwd:xt}=global.process,UT=["trace","debug","info","warn","error","silent"];uc(xl,new Set(["run","connect","agent","tunneld","start","init","install-lazy-deps"]));Il.description("Testim.io CLI").option("--run [file-glob-pattern]","codeful test files to run",Pe,[]).option("-h --help","output usage information",Om).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",Pe,[]).option("--test-config-id [test-config-id]","test config ID to override for all tests in current execution",Pe,[]).option("--params-file [params-file.json]","").option("--params [params-json-string]","").option("-t, --testId [test-id]","test ID to run",Pe,[]).option("-w, --webpackConfig [webpack-configuration]","webpack configuration used to build the code based project").option("--test-id [test-id]","test ID to run",Pe,[]).option("-l, --label [label]","labels to search test by",Pe,[]).option("-n, --name [test-name]","test name to run",Pe,[]).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",NT).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",Pe,[]).option("--test-plan-id [test-plan-id]","test plan to run",Pe,[]).option("--suite [suite-name]","suite to run",Pe,[]).option("--suite-id [suite-id]","suite ID to run",Pe,[]).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",Pe,[]).option("-oen --override-execution-name [execution-name]","override the default execution name","").option("--retries [max_num_of_retries]","number of retries on test failure, defaults to 0 (no retries)",Number,0).option("--set-retention [retention-in-days]","set the number of days for results retention").option("--user [user-id]","user ID for local Testim-CLI").option("--pass-zero-tests","don't fail the run if no tests were found").option("--device-model [device-model]","The device model to use, iPhone 12, Nexus 5X, SM-G900P etc....").option("--device-udid [device-udid]","the device unique id").option("--os-version [os-version]","The operating system version number").option("--app-id [app-id]","The application id from app library on Testim Editor App").option("--appium-log-level [appium-log-level]","Level of logging verbosity").option("-rad --reset-app-data [reset-app-data]","set noReset appium capability to true, default value true!",!1).option("-fr --full-reset [full-reset]","set fullReset appium capability to true to reinstall application on session start and session end").option("-roso --reset-on-session-start-only [reset-on-session-start-only]","set resetOnSessionStartOnly appium capability to true to avoid uninstall app on session end (ios run only)",!1).option("-str --suppress-tms-reporting [suppress-tms-reporting]","disable test management reporting",!1).option("-tsr --tms-suppress-reporting [tms-suppress-reporting]","disable test management reporting",!1).option("-tid --tms-run-id [tms-run-id]","update existing result in test management","").option("-tff --tms-field-file [tms-field-file.json]","pass field file location to add custom result field to the tms result report","").option("--disable-file-cache","disable internal CLI file caching").option("--file-cache-location [directory]"," internal CLI file caching location").option("--test-start-timeout [test-start-timeout]","The time to wait for a test to start after getting a browser session",Number,Number(qo.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,El.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,El.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: ${Rl.join("/")}`,Pe,[]).option("--code-coverage-include [pattern]","set selecting files for coverage (default src/**)",Pe,[]).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",Pe,[]).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)",Pe,[]).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)",Pe,[]).option("--install-lazy-deps [install-lazy-deps]","Install all lazy dependencies from package.json",!1).parse(xl);u=Il.opts(),jT=()=>{u.grid||u.gridId||(u.host||(u.host="ondemand.saucelabs.com"),u.port||(u.port=80))},BT=()=>{u.grid||u.gridId||(u.host||(u.host="hub-cloud.browserstack.com"),u.port||(u.port=80))},$T=async()=>{var g,y,T,A,b,v,x,k,D;u.inspect&&require("inspector").open(u.inspect);let r={},e={},t=[],s={};if(!xl.slice(2).length)throw Om(),new mr;if(u.requireCredentials){let S=await Promise.resolve().then(()=>(ps(),yn)),O=await S.getProjectId(),P=await S.getToken();(!O||!P)&&await S.doLogin()}if(u.login)return await(await Promise.resolve().then(()=>(ps(),yn))).doLogin(),{loginMode:!0};if(u.init)return{initCodimMode:!0,initTestProject:u.init};if(u.version){let S="Testim CLI Version: ";qo.npm_package_version&&(console.log(S,qo.npm_package_version),Vo(0));let O=ct();O&&(console.log(S,O),Vo(0)),console.log("Could not find version, please check the package.json manually"),Vo(0)}if(u.installLazyDeps)return{installLazyDepsMode:!0};u.disableFileCache&&Op();let n=u.fileCacheLocation||u.usePrefechedData||u.createPrefechedData;if(n){let S=Me.resolve(n);kp(S)}if(u.usePrefechedData&&Lp(),u.playerRequirePath){let S=Me.resolve(u.playerRequirePath);console.log("Using Local Clickim for Player Require Path =",S);let O=Me.join(S,"tsconfig.node.json"),N=require("ts-node").register({project:O,ignore:[/node_modules/,new RegExp(`^${gt.escapeRegExp(Me.relative(xt(),__dirname))}`)],transpileOnly:!0});require("tsconfig-paths").register({paths:N.config.options.paths,baseUrl:N.config.options.baseUrl}),(Ee(),ie(Cr)).options.playerPath=S;let V=require("module"),Y=V.prototype.require;V.prototype.require=function(fe){return fe==="rox-alias"?Y.call(this,"rox-node"):Y.apply(this,arguments)}}if(u.caFile&&(global.caFileContent=Sl.readFileSync(u.caFile)),u.proxy&&(global.proxyUri=u.proxy,global.SuperagentProxy=require("superagent-proxy"),global.ProxyAgent=require("proxy-agent"),global.HttpsProxyAgent=require("https-proxy-agent")),u.proxyForGrid&&!u.proxy)throw new I("missing --proxy option");if(Em(u))return Sm(u);try{let S={};u.configFile?S=require(Me.join(xt(),u.configFile)).config:u.optionsFile&&(S=require(Me.join(xt(),u.optionsFile))),S&&typeof S.then=="function"&&(S=await S),Object.keys(S).forEach(O=>{let P=LT(O);u[P]=DT(u[P],S[O])})}catch(S){throw S.message=`Unable to read options file: ${S.message}`,S}if(u.tunneld)return{tunnel:!0,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,tunnelOnlyMode:!0,token:u.token,project:u.project};let o=((g=u.testConfig)==null?void 0:g.length)||((y=u.testConfigId)==null?void 0:y.length),i=((T=u.testPlan)==null?void 0:T.length)||((A=u.testPlanId)==null?void 0:A.length),a=((b=u.suite)==null?void 0:b.length)||((v=u.suiteId)==null?void 0:v.length);if(u.seleniumCapsFile)try{s=require(Me.join(xt(),u.seleniumCapsFile))}catch(S){throw new I(`Failed to parse selenium caps file file error: ${S.message}`)}if((x=u.reporters)!=null&&x.includes("junit")&&!u.reportFile&&console.log("Warning: please define --report-file option for JUnit reporter"),!u.tunnel&&u.externalLambdatestTunnelId)throw new I("missing --tunnel parameter");if(!u.tunnel&&u.externalLambdatestUseWss)throw new I("missing --tunnel parameter");if(!u.tunnel&&[u.tunnelPort,u.tunnelHostHeader,u.tunnelRegion,u.tunnelDiagnostics].some(Boolean))throw new I("missing --tunnel parameter");if(u.chromeExtraPrefs)try{e=require(Me.join(xt(),u.chromeExtraPrefs))}catch(S){throw new I(`Failed to read/open chrome extra prefs file error: ${S.message}`)}if(u.chromeExtraArgs){let S=u.chromeExtraArgs.split(",");for(let O of S){let[P]=O.split("=");Am.includes(P)||u.useLocalChromeDriver||u.useChromeLauncher?(t.push(O),P==="proxy-server"&&t.push("proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io")):console.warn(`Ignoring an unsupported chrome arg (${P}), allowed values: ${JSON.stringify(Am)}`)}}if(u.paramsFile)try{r=Object.assign({},r,require(Me.join(xt(),u.paramsFile)))}catch(S){throw new I(`Failed to read/open params file error: ${S.message}`)}if(u.params)try{r=Object.assign({},r,JSON.parse(u.params))}catch(S){throw new I(`Failed to parse params string error: ${S.message}`)}if(u.sauceUser&&!u.sauceKey||!u.sauceUser&&u.sauceKey)throw new I("missing --sauce-user <sauce-user> or --sauce-key <sauce-key>");if(u.sauceUser&&u.sauceKey&&(jT(),u.saucelabs={},u.saucelabs.username=u.sauceUser,u.saucelabs.accessKey=u.sauceKey),u.sauceOptions)try{let S=require(Me.join(xt(),u.sauceOptions)),O=S.platformName&&["ios","android"].includes(S.platformName.toLowerCase());if(S.browserName){let N=S.browserName.toLowerCase();switch(N){case"microsoftedge":u.browser="edge";break;default:u.browser=N}}u.browser==="edge"&&parseFloat(S.version)>=Ma&&(u.browser="edge-chromium");let P=parseFloat(S.version)<50&&!["dev","beta"].includes(S.version);if(!O&&u.browser==="chrome"&&P)throw new I("The minimum chrome supported version is 50.0");u.saucelabs=Object.assign({},u.saucelabs,S)}catch(S){throw new I(`Failed to parse saucelabs options file error: ${S.message}`)}if(u.browserstackUser&&!u.browserstackKey||!u.browserstackUser&&u.browserstackKey)throw new I("missing --browserstack-user <browserstack-user> or --browserstack-key <browserstack-key>");if(u.browserstackUser&&u.browserstackKey&&(BT(),u.browserstack={},u.browserstack["browserstack.user"]=u.browserstackUser,u.browserstack["browserstack.key"]=u.browserstackKey),u.browserstackOptions)try{let S=require(Me.join(xt(),u.browserstackOptions)),O=S.platform&&["mac","android"].includes(S.platform.toLowerCase());if(S.browserName&&(u.browser=S.browserName.toLowerCase()),u.browser==="edge"&&parseFloat(S.browser_version)>=Ma&&(u.browser="edge-chromium"),!O&&parseFloat(S.browser_version)<50&&u.browser==="chrome")throw new I("The minimum chrome supported version is 50.0");u.browserstack=Object.assign({},u.browserstack,S)}catch(S){throw new I(`Failed to parse browserstack options file error: ${S.message}`)}if(u.perfecto={},u.perfectoToken&&(u.perfecto.securityToken=u.perfectoToken),u.perfectoOptions)try{let S=require(Me.join(xt(),u.perfectoOptions)),O={location:"US East",securityToken:u.perfectoToken};u.perfecto=Object.assign({},O,S)}catch(S){throw new I(`Failed to parse perfecto options file error: ${S.message}`)}if(u.testobjectSauce={},u.testobjectKey&&(u.testobjectSauce.testobjectApiKey=u.testobjectKey),u.testobjectOptions)try{let S=require(Me.join(xt(),u.testobjectOptions)),O={testobjectApiKey:u.testobjectKey};u.testobjectSauce=Object.assign({},O,S)}catch(S){throw new I(`Failed to parse test object options file error: ${S.message}`)}if(!u.project){let O=await(await Promise.resolve().then(()=>(ps(),yn))).getProjectId();if(O)u.project=O;else throw new I("missing project-id info, either --login to provide new credentials or use --project <project-id>")}u.mode||(u.mode=u.run.length?"selenium":"extension"),u.testConfig&&(u.testConfig=[u.testConfig].flat()),u.testConfigId&&(u.testConfigId=[u.testConfigId].flat()),u.retries=!u.retries||typeof u.retries=="boolean"?1:Number(u.retries)+1,u.browserTimeout=!u.browserTimeout||typeof u.browserTimeout=="boolean"?60*1e3:u.browserTimeout,u.newBrowserWaitTimeout=!u.newBrowserWaitTimeout||typeof u.newBrowserWaitTimeout=="boolean"?10*60*1e3:u.newBrowserWaitTimeout*60*1e3,u.getBrowserTimeout||(u.getBrowserTimeout=u.browserTimeout),u.getBrowserRetries||(u.getBrowserRetries=Math.round(u.newBrowserWaitTimeout/u.browserTimeout)),u.getSessionTimeout=u.browserTimeout<u.getSessionTimeout?u.getSessionTimeout:u.browserTimeout,u.driverRequestTimeout=u.browserTimeout<u.driverRequestTimeout?u.driverRequestTimeout:u.browserTimeout;let c=Boolean(u.timeout);if(u.timeout=!u.timeout||typeof u.timeout=="boolean"?10*60*1e3:u.timeout,u.beforeParallel=!u.beforeParallel||typeof u.beforeParallel=="boolean"?1:Number(u.beforeParallel),u.parallel=!u.parallel||typeof u.parallel=="boolean"?1:Number(u.parallel),u.afterParallel=!u.afterParallel||typeof u.afterParallel=="boolean"?1:Number(u.afterParallel),u.parallel>1&&u.run&&!u.gridId&&!u.grid&&(!u.testPlan||u.testPlan.length===0)&&!((k=u.testPlanId)!=null&&k.length)&&FT.isTTY&&!u.headless&&!qo.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)),u.tunnelPort=!u.tunnelPort||typeof u.tunnelPort=="boolean"?"80":u.tunnelPort,u.port&&(u.port=Number(u.port)),u.retries<=0||Number.isNaN(u.retries))throw new I("test failure retry count could not be a negative number or string, --retries <max_num_of_retries>");if(u.retries>21)throw new I("Max number of retries exceeded. Number cannot be greater than 20, --retries <max_num_of_retries>");if(!u.token){let O=await(await Promise.resolve().then(()=>(ps(),yn))).getToken();if(O)u.token=O;else throw new I("missing Testim Access Token, either --login to provide new credentials or use --token <testim-access-token>, contact info@testim.io if you need a new one.")}if(u.browserTimeout<=0||Number.isNaN(u.browserTimeout))throw new I("get browser timeout could not be a negative number, --browser-timeout <get-browser-timeout>");if(u.newBrowserWaitTimeout<=0||Number.isNaN(u.newBrowserWaitTimeout))throw new I("max new browser wait timeout could not be a negative number, --new-browser-wait-timeout <max-wait-to-browser>");if(u.timeout<=0||Number.isNaN(u.timeout))throw new I("test run timeout could not be a negative number, --timeout <run-timeout>");if(u.beforeParallel<=0||Number.isNaN(u.beforeParallel))throw new I("before-parallel could not be a negative number or not number, --before-parallel <number-of-tests>");if(u.parallel<=0||Number.isNaN(u.parallel))throw new I("parallel could not be a negative number or not number, --parallel <number-of-tests>");if(u.afterParallel<=0||Number.isNaN(u.afterParallel))throw new I("after-parallel could not be a negative number or not number, --after-parallel <number-of-tests>");if(![X.EXTENSION,X.SELENIUM,X.APPIUM].includes(u.mode))throw new I(`runner mode <${u.mode}> is not supported`);if(u.mode!==X.SELENIUM&&u.disableNativeEvents)throw new I("disable-native-events is only applicable in selenium mode");if(!u.browser&&!o&&!i&&(u.browser="chrome"),u.appiumLogLevel||(u.appiumLogLevel="silent"),!UT.includes(u.appiumLogLevel))throw new I(`runner appium-log-level <${u.appiumLogLevel}> is not supported`);if(u.testPlan&&u.testPlan.length===0&&u.testPlanId&&u.testPlanId.length===0){if(typeof u.host!="string"&&typeof u.grid!="string"&&typeof u.gridId!="string"&&u.run.length===0&&!u.useLocalChromeDriver&&!u.useChromeLauncher&&!u.createPrefechedData)throw new I("missing remote grid address parameter, specify --host <host-name-or-ip> or --grid <grid-name> or --grid-id <grid-id>")}else if(u.testId.length||u.label.length||u.name.length||o||u.browser||a||u.useLocalChromeDriver||u.useChromeLauncher)throw new I("cannot set --testId, --label, --name, --browser, --test-config, --test-config-id, --use-local-chrome-driver --use-chrome-launcher or --suite with --test-plan option");if(!i&&(u.beforeParallel!==1||u.afterParallel!==1))throw new I("cannot set --before-parallel or --after-parallel without --test-plan option");if((u.testId.length||i||u.label.length||u.name.length||a)&&u.file)throw new I("Cannot pass codeful automation tests with --testId --label --name or --suite");if([u.host,u.grid,u.gridId].filter(Boolean).length>1)throw new I("please define exactly one of --grid or --grid-id or --host");if((D=u.host)!=null&&D.includes("/")&&(/^(f|ht)tps?:\/\//i.test(u.host)||(u.host=`http://${u.host}`),u.host=km.parse(u.host).hostname),u.resultLabel.length){u.resultLabel=u.resultLabel.map(O=>O.trim()).filter(Boolean);let S=u.resultLabel.filter(O=>O.length>=250).filter(Boolean);if(u.branch==="auto-detect"&&u.resultLabel.includes("auto-detect-branch")&&Sr()&&u.resultLabel.unshift(Sr()),S.length)throw new I("A result label cannot exceed 250 characters")}let d=gm(u),m=jo(u);if(!u.w3cCapabilities&&!u.oldCapabilities)throw new I("cannot set --w3c-capabilities and --old-capabilities options as false");if(u.protocol||(u.protocol=u.port===443?"https":"http"),!["http","https"].includes(u.protocol))throw new I("invalid --protocol value, allow --protocol http or https");if(u.rerunFailedByRunId&&u.branch)throw new I("It is not possible to use --branch with --rerun-failed-by-run-id. Tests will automatically run on the same branch that was used in the original run");if(u.rerunFailedByRunId&&(a||u.name.length||u.testId.length||u.label.length||i))throw new I("Re-running failed tests is not possible when suite (--suite), label (--label), plan (--test-plan), or other test flags (--test) are provided. Please remove these flags and try again");if(u.run.length){let S=require("glob");if(u.files=gt.flatMap(u.run,O=>S.sync(O)),u.files.length===0)throw new I(`No files found at path '${u.run}'.`)}else u.files=[];if(u.setRetention&&!gt.inRange(gt.parseInt(u.setRetention),1,11))throw new I("Please provide the number of days that the test results will be retained for (--set-retention must be a whole number between 1 to 10)");u.setRetention&&(u.setRetention=Number(u.setRetention));let p="is no longer supported, please use --override-mapping-file";if(u.mockNetworkHar)throw new I(`--mock-network-har ${p}`);if(u.mockNetworkPattern)throw new I(`--mock-network-pattern ${p}`);if(u.disableMockNetwork&&u.overrideMappingFile)throw new I("You can either use --disable-mock-network or --override-mapping-file");if(!u.collectCodeCoverage&&u.codeCoverageSourceMapPath)throw new I("cannot set --code-coverage-source-map-path without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageReporter.length)throw new I("cannot set --code-coverage-reporter without passing --collect-code-coverage");if(!u.collectCodeCoverage&&u.codeCoverageInclude.length)throw new I("cannot set --code-coverage-include without passing --collect-code-coverage");if(u.collectCodeCoverage&&u.codeCoverageReporter&>.difference(u.codeCoverageReporter,Rl).length){let S=gt.difference(u.codeCoverageReporter,Rl);throw new I(`invalid --code-coverage-reporter parameters ${S.join("/")}`)}u.codeCoverageReporter=u.codeCoverageReporter.length===0?["html","text"]:u.codeCoverageReporter,u.codeCoverageInclude=u.codeCoverageInclude.length===0?["src/**"]:u.codeCoverageInclude;let f={mockNetworkHar:"--mock-network-har",mockNetworkPattern:"--mock-network-pattern",overrideMappingFile:"--override-mapping-file",codeCoverageUrlFilter:"--code-coverage-url-filter",collectCodeCoverage:"--collect-code-coverage",disableMockNetwork:"--disable-mock-network",useChromeLauncher:"--use-chrome-launcher"},h=Object.keys(f).filter(S=>Boolean(u[S]));if(u.mode!==X.EXTENSION&&h.length){let S=h.length>1?"are":"is";throw new I(`${h.map(O=>f[O]).join(" and ")} ${S} only applicable in extension mode`)}if(u.tmsFieldFile)try{let S=Sl.readFileSync(u.tmsFieldFile);u.tmsCustomFields=JSON.parse(S)}catch(S){throw new I(`failed to parse field file error: ${S.message}`)}if(u.highSpeed&&(MT("--high-speed"," --turbo-mode"),u.turboMode=!0),u.deviceUdid&&(u.deviceModel||u.osVersion))throw new I("It is not possible to use --osVersion or --deviceModel with --device-udid. device-udid is unique and cannot be combined with another flag");if(u.resetAppData&&u.fullReset)throw new I("It is not possible to set both --reset-app-data and --full-reset capabilities to true at the same time!");if(u.resetOnSessionStartOnly&&!u.fullReset&&console.warn("Ignoring --reset-on-session-start-only flag, should be used when --full-reset is provided for ios runs"),u.lightweightMode)try{let S={general:!0,disableLabs:!0,disableFeatureFlags:!0,disableAssets:!0,disablePixelValidation:!0,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!0,assumePreloadedSharedSteps:!0,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableAutoImprove:!0,disableQuotaBlocking:!0,onlyTestIdsNoSuite:!0,uploadAssetsAndResultsOnFailure:!0,preloadTests:!0,disableProjectDefaults:!0,type:"lightweight"},O=typeof u.lightweightMode=="string"?JSON.parse(u.lightweightMode):{};u.lightweightMode=Object.assign({},S,O)}catch(S){throw new I(`failed to parse lightweightMode settings error: ${S.message}`)}else u.turboMode&&u.mode===X.EXTENSION&&(u.lightweightMode={general:!0,disableLabs:!1,disableFeatureFlags:!1,disableAssets:!0,disablePixelValidation:!1,disableResults:!0,disableStepDelay:!0,disableRemoteStep:!1,assumePreloadedSharedSteps:!1,disableVisibilityCheck:!1,disableLocators:!1,bypassSetup:!1,disableQuotaBlocking:!1,disableAutoImprove:!1,onlyTestIdsNoSuite:!1,uploadAssetsAndResultsOnFailure:!0,preloadTests:!1,disableProjectDefaults:!1,type:"turboMode"});if(typeof u.baseUrl=="boolean")throw new I("base url cannot be used as a flag, and must contain a string value");return{testId:[u.testId].flat(),name:[u.name].flat(),label:[u.label].flat(),suites:[u.suite].flat(),suiteIds:[u.suiteId].flat(),testPlan:[u.testPlan].flat(),testPlanIds:[u.testPlanId].flat(),files:[u.files].flat(),webpackConfig:u.webpackConfig,reportFile:u.reportFile,urls:u.urls,reportFileClassname:u.overrideReportFileClassname,reporters:u.reporters,project:u.project,host:u.host,headless:u.headless,useLocalChromeDriver:u.useLocalChromeDriver,chromeBinaryLocation:u.chromeBinaryLocation,useChromeLauncher:u.useChromeLauncher,port:u.port,grid:u.grid,gridId:u.gridId,disableNativeEvents:u.disableNativeEvents,saucelabs:u.saucelabs,browserstack:u.browserstack,baseUrl:u.baseUrl,branch:(u.branch==="auto-detect"?Sr():u.branch)||"master",autoDetect:u.branch==="auto-detect",token:u.token,userParamsData:r,mode:u.mode,isRegressionBaselineRun:u.isRegressionBaselineRun,browser:u.browser,beforeParallel:u.beforeParallel,parallel:u.parallel,afterParallel:u.afterParallel,canary:u.canary,rerunFailedByRunId:u.rerunFailedByRunId,disableGridCheck:u.disableGridCheck,disableTimeoutRetry:u.disableTimeoutRetry,resultLabels:u.resultLabel,path:u.path,protocol:u.protocol,perfecto:u.perfecto,experitestToken:u.experitestToken,testobjectSauce:u.testobjectSauce,gridUsername:u.gridUsername,gridPassword:u.gridPassword,overrideExecutionName:u.overrideExecutionName,tmsSuppressReporting:Boolean(u.suppressTmsReporting)||Boolean(u.tmsSuppressReporting),tmsRunId:u.tmsRunId,tmsCustomFields:u.tmsCustomFields,proxyForGrid:u.proxyForGrid,retentionDays:u.setRetention,passZeroTests:Boolean(u.passZeroTests),runQuarantinedTests:Boolean(u.runQuarantinedTests),deviceModel:u.deviceModel,deviceUdid:u.deviceUdid,osVersion:u.osVersion,appId:u.appId,appiumLogLevel:u.appiumLogLevel,resetAppData:u.resetAppData,fullReset:u.fullReset,resetOnSessionStartOnly:u.resetOnSessionStartOnly,ext:u.ext,extensionLocation:[u.extensionPath||d].flat(),extensionPath:u.extensionPath,playerLocation:u.playerPath||m,playerPath:u.playerPath,playerRequirePath:u.playerRequirePath,tunnel:u.tunnel,tunnelPort:u.tunnelPort,tunnelRoutes:u.tunnelRoutes,tunnelRoutesOutput:u.tunnelRoutesOutput,tunnelHostHeader:u.tunnelHostHeader,tunnelRegion:u.tunnelRegion,tunnelDiagnostics:u.tunnelDiagnostics,tunnelUseHttpAddress:u.tunnelUseHttpAddress,externalLambdatestTunnelId:u.externalLambdatestTunnelId,externalLambdatestUseWss:u.externalLambdatestUseWss||!1,externalLambdatestDisableAutomationTunneling:Boolean(u.externalLambdatestDisableAutomationTunneling),externalLambdatestMitm:Boolean(u.externalLambdatestMitm),beforeTest:u.beforeTest,afterTest:u.afterTest,beforeSuite:u.beforeSuite,afterSuite:u.afterSuite,timeout:u.timeout,timeoutWasGiven:c,browserTimeout:u.browserTimeout,newBrowserWaitTimeout:u.newBrowserWaitTimeout,getBrowserTimeout:u.getBrowserTimeout,getBrowserRetries:u.getBrowserRetries,getSessionTimeout:u.getSessionTimeout,getSessionRetries:u.getSessionRetries,driverRequestTimeout:u.driverRequestTimeout,driverRequestRetries:u.driverRequestRetries,testStartTimeout:u.testStartTimeout,testConfigNames:u.testConfig,testConfigIds:u.testConfigId,overrideMappingFile:u.overrideMappingFile,disableMockNetwork:u.disableMockNetwork,codeCoverageUrlFilter:u.codeCoverageUrlFilter,collectCodeCoverage:u.collectCodeCoverage,codeCoverageReportPath:u.codeCoverageReportPath,codeCoverageSourceMapPath:u.codeCoverageSourceMapPath,codeCoverageReporter:u.codeCoverageReporter,codeCoverageInclude:u.codeCoverageInclude,executionId:u.executionId,remoteRunId:u.remoteRunId,schedulerId:u.schedulerId,source:u.source,resultId:u.resultId,installCustomExtension:u.installCustomExtension,w3cCapabilities:u.w3cCapabilities,oldCapabilities:u.oldCapabilities,chromeBlockLocation:u.chromeBlockLocation,chromeUserDataDir:u.chromeUserDataDir,retries:u.retries,chromeExtraPrefs:e,chromeExtraArgs:t,disableCookiesSameSiteNoneRequiresSecure:u.disableCookiesSameSiteNoneRequiresSecure,seleniumCapsFileContent:s,shouldMonitorPerformance:u.monitorPerformance,user:u.user,lightweightMode:u.lightweightMode,createPrefechedData:u.createPrefechedData,saveRCALocally:u.saveRcaLocally,exitCodeIgnoreFailingTests:u.exitCodeIgnoreFailingTests,disableSockets:u.disableSockets,intersections:{labels:u.intersectWithLabel.length?[u.intersectWithLabel].flat():void 0,suiteNames:u.intersectWithSuite.length?[u.intersectWithSuite].flat():void 0,suiteIds:u.intersectWithSuiteId.length?[u.intersectWithSuiteId].flat():void 0},downloadBrowser:u.downloadBrowser}}});var GT={};var ms,Dm,Mm,Ho,WT,Fm=w(()=>{"use strict";ms=E(require("path")),Dm=require("fs"),Mm=require("child_process"),Ho=ms.resolve(__filename),WT=!Ho.includes("node_modules")&&ms.dirname(Ho).endsWith("src");WT&&!(0,Dm.existsSync)(ms.resolve(Ho,"..","..","..","webdriverio","build","index.js"))&&(console.log("Hi developer, we're initializing the runner dev env for the first time for you \u2764\uFE0F"),(0,Mm.execSync)("yarn workspace @testim/webdriverio build",{cwd:ms.resolve(Ho,"..","..")}))});var Pl={};W(Pl,{installAllLazyDependencies:()=>HT,lazyRequire:()=>he});async function he(r,e={}){let t=wc(r);if(t)return t;let s;e.silent||(s=(0,Um.default)(`Installing ${r} before first usage...`).start());try{let n=await qT(r);return s&&s.succeed(),n}catch(n){VT.warn("failed to install dependency lazily",{dependency:r,err:n});let o=Bm(r),i=`${r}@${o}`,c=process.argv.includes("npx")?"":"-g ",l=`Installation of ${r} 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 s&&s.fail(l),n}}async function qT(r){return fs.has(r)||(fs.set(r,jm(r)),fs.get(r).catch(()=>{fs.delete(r)})),fs.get(r)}async function jm(r){let e=wc(r);if(e)return e;let t=Bm(r),s=`${r}@${t}`;return await So(mt(),s),Kt(r)}async function HT(){let r=Object.keys(Ba);for(let e of r)await jm(e)}function Bm(r){let e=Object.entries(Ba).find(([t])=>t===r);if(!e)throw new Error("The given package name is not lazyDependencies");return e[1]}var Um,VT,fs,yt=w(()=>{"use strict";Um=E(require("ora"));sn();j();U();Zn();rn();VT=R("lazy-require"),fs=new Map});var Vm={};W(Vm,{init:()=>KT});async function KT(r){var T,A;let e=typeof r=="string"?r:"";(typeof r!="string"||!r.trim())&&(e=(await(0,Cl.default)({type:"text",name:"project",message:"Please enter Project name",validate:v=>String(v).length>3})).project);let t=Xt.resolve(e);Qt.existsSync(t)&&Qt.readdirSync(t).length!==0&&(console.log(`${t} is not empty. Quitting...`),process.exit(1));let s=t.substr(Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\"))+1),n=(0,Wm.default)(s);if(!n.validForNewPackages){let b=`The name '${s}' is not a valid package name:`;throw console.log(zo.default.red(b)),n.errors&&n.errors.forEach(v=>console.log(zo.default.red(v))),n.warnings&&n.warnings.forEach(v=>console.log(zo.default.yellowBright(`warning: ${v}`))),new I(`${b}
|
|
21
21
|
validation errors:
|
|
22
|
-
${((
|
|
22
|
+
${((T=n.errors)==null?void 0:T.join(`
|
|
23
23
|
`))||""}
|
|
24
24
|
warnings:
|
|
25
|
-
${((
|
|
26
|
-
`))||""}`)}let i=(await(0,Gl.default)({type:"toggle",name:"isJs",message:"Add support for TypeScript?",initial:!0,active:"no",inactive:"yes"})).isJs?"template.js":"template.ts",a="codim",c=Kt.join(__dirname,a,i),l=Kt.join(process.cwd(),e),d=(0,Wl.default)(`Creating new test project in ${l}`).start();await uo(c,l);let m=Kt.join(__dirname,a,i,"package.json"),p=Kt.join(process.cwd(),e,"package.json"),h=(await Jt.promises.readFile(m)).toString().replace("~testim-codeful-test-project~",r);await Jt.promises.writeFile(p,h);let g="node_modules",y=Kt.join(process.cwd(),e,".gitignore");await Jt.promises.writeFile(y,g),d.succeed(),d=(0,Wl.default)("Installing dependencies").start(),await Kv("npm install",{cwd:l}),d.succeed(),console.log(`Testim Dev Kit project folder successfully created in ${l}.`)}var Jt,Kt,mf,Wl,Jo,Gl,ff,hf,Kv,yf=T(()=>{"use strict";Jt=E(require("fs")),Kt=E(require("path")),mf=E(require("child_process")),Wl=E(require("ora")),Jo=E(require("chalk")),Gl=E(require("prompts")),ff=E(require("validate-npm-package-name")),hf=require("util");z();vc();Kv=(0,hf.promisify)(mf.exec)});var wf={};$(wf,{preloadTests:()=>Sn});async function Sn(s){if(!Array.isArray(s.testId)||!s.testId.length)return{};let e={branch:s.branch,projectId:s.project};return await dt(async()=>{let t=await de(s.testId,r=>Jc({...e,testId:r}),{concurrency:2});return bf.keyBy(t,"testData.id")},"loadTests",Xv,[e,s.testId])()}var bf,Xv,Xo=T(()=>{"use strict";bf=E(require("lodash"));qt();Te();F();Xv=1e3*60*60*10});function ql(){return nt()}async function Ef(){if(!Ie)try{let s=await re(Qv(),5e3,"The API call to NPM timed out"),e=ql();e&&vf.lt(e,s)&&console.log(Tf.default.yellow(`Warning: You are using version ${e}, a newer version is available. To update please run npm install (npm install -g @testim/testim-cli)`))}catch(s){Yv.warn("Failed to get NPM version",{err:s})}}var Tf,vf,Yv,Qv,Vl=T(()=>{"use strict";Tf=E(require("chalk")),vf=E(require("semver"));F();le();ln();qt();j();Yv=x("npm-driver"),Qv=dt(()=>cm("@testim/testim-cli"),"getNpmVersion")});var Hl,eE,ys,Sf,Rf,zl,If,xf=T(()=>{"use strict";F();z();j();ft();Hl=x("testimNgrok"),eE=".whitelisted-ngrok.testim.io",ys="",Rf=async(s,e={})=>{if(!e.ngrokToken)throw new R("tunnel feature is not enabled, please contact support - info@testim.io.");let t;e.isNgrokWhitelisted&&(t=`${K()}-${s.projectData.projectId}${eE}`);let r={proto:"http",addr:s.tunnelPort||80,authtoken:e.ngrokToken,hostname:t};s.tunnelHostHeader&&(r.host_header=s.tunnelHostHeader),s.tunnelRegion&&(r.region=s.tunnelRegion);let o=await(await ge("ngrok")).connect(r);s.tunnelUseHttpAddress&&o.startsWith("https://")?(Hl.info("replace https to http"),ys=o.replace("https://","http://")):ys=o,s.tunnelDiagnostics&&zl(),s.baseUrl=ys},zl=async(s=!0)=>{try{let t=(await ge("ngrok")).getApi(),{tunnels:r}=await t.listTunnels(),n=r.find(o=>o.public_url===ys);console.log("ngrok stats",n),Hl.info("ngrok stats",{tunnel:n})}catch(e){Hl.error("error collecting ngrok stats",{err:e})}s&&(Sf=setTimeout(()=>zl(),1e4))},If=async s=>{if(!ys)return;clearTimeout(Sf),s.tunnelDiagnostics&&await zl(!1),await(await ge("ngrok")).disconnect(ys)}});var Xt,Jl,Pf,rE,sE,Kl,Yo,Zo,Qo,nE,Cf,Af,kf=T(()=>{"use strict";Xt=E(require("os")),Jl=E(require("fs")),Pf=E(require("child_process"));F();Te();rE="https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/",sE={win32ia32:{path:"cloudflared-windows-386.exe"},win32x64:{path:"cloudflared-windows-amd64.exe"},darwinx64:{path:"cloudflared-darwin-amd64.tgz",extract:!0},linuxia32:{path:"cloudflared-linux-386"},linuxx64:{path:"cloudflared-linux-amd64"}},Kl=Xt.tmpdir(),Yo=`${Kl}/cloudflared`,Zo=null,Qo=null,nE=async()=>{if(await ye(Yo))return;let e=sE[Xt.platform()+Xt.arch()];if(!e)throw new Error(`tunnel on ${Xt.platform()+Xt.arch()} platform is not supported.`);let t=e.extract?Kl+e.path:Yo;await qe(`${rE}/${e.path}`,t),e.extract&&await Ye(t,Kl),await Jl.promises.chmod(Yo,"755")},Cf=async s=>{let e=s.baseUrl||`http://localhost:${s.tunnelPort||80}`,t="tunnelRoutes"in s&&s.tunnelRoutes||[e],[r]=await Promise.all([bl(s.company.companyId,t),nE()]);Zo=r._id,Qo=Pf.spawn(Yo,["tunnel","--no-autoupdate","run","--force","--token",r.token],{stdio:"inherit"}),await wl(s.company.companyId,Zo),"tunnelRoutesOutput"in s&&s.tunnelRoutesOutput&&await Jl.promises.writeFile(s.tunnelRoutesOutput,JSON.stringify(r.routesMapping,null,2)),s.baseUrl=`${s.tunnelUseHttpAddress?"http":"https"}://${r.routesMapping[e]}`},Af=async s=>{let e=[];return Zo&&e.push(Tl(s.company.companyId,Zo)),Qo&&e.push(new Promise((t,r)=>{Qo.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),Qo.kill()})),await Promise.all(e)}});var Lf={};$(Lf,{featureFlagsService:()=>U});var J,Of,iE,aE,cE,_f,ei,Xl,U,be=T(()=>{"use strict";J=E(require("rox-node"));j();F();le();Of=x("FeatureFlagsService"),iE=!Ie&&!0&&!Ya,aE=2e4,cE=60*60*24,_f=["labs","disabled","enabled"],ei=class extends J.default.Variant{constructor(e="disabled"){super(e,_f)}getValue(){let e=super.getValue();return _f.includes(e)?e:(Of.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},Xl=class{constructor(){this.flags={useNewWSCLI:new J.default.Flag,useSafariWebdriverVisibilityChecks:new J.default.Flag,useClickimVisibilityChecks:new J.default.Flag,runGetElementCodeInAut:new J.default.Flag,enableFrameSwitchOptimization:new J.default.Flag,maximumJsResultSize:new J.default.Configuration(2e3*1024),skipFileInputClicks:new J.default.Flag,errorMessageOnBadNetwork:new J.default.Flag(!0),warnOnBadNetwork:new J.default.Flag(!1),overrideAzureStorageUrl:new J.default.Flag,useJsInputCodeInSafari:new J.default.Flag,useJsInputCodeInFirefox:new J.default.Flag,autoSaveDownloadFileFireFox:new J.default.Flag(!0),safariSelectOptionDispatchEventOnSelectElement:new J.default.Flag(!0),experimentalPreCodeCompilation:new J.default.Flag(!0),experimentalAsyncCustomCode:new J.default.Flag,useSameBrowserForMultiTests:new ei("labs"),highSpeedMode:new ei,usePortedHtml5DragDrop:new J.default.Flag,testNamesToBeforeSuiteHook:new J.default.Flag,addCustomCapabilities:new J.default.Variant("{}"),enableWorkerThreadsCliCodeExecution:new J.default.Flag(!0),LTNetworkCapabilities:new J.default.Flag,downloadToBase64:new J.default.Flag,dec2022eolBrowsers:new J.default.Flag,publicGridURL:new J.default.Configuration("public-grid.testim.io")},J.default.register("default",this.flags)}setProjectId(e){J.default.setCustomStringProperty("projectId",e)}setProjectType(e){J.default.setCustomStringProperty("projectType",e)}setCompanyProductType(e){J.default.setCustomStringProperty("productType",e)}setCompanyId(e){J.default.setCustomStringProperty("companyId",e)}setPlanType(e){J.default.setCustomStringProperty("planType",e)}setIsPOC(e){J.default.setCustomBooleanProperty("isPOC",e)}setIsStartUp(e){J.default.setCustomBooleanProperty("isStartUp",e)}setRunnerMode(e){J.default.setCustomStringProperty("runnerMode",e)}async fetch(){if(!iE)return;let e={fetchIntervalInSec:cE,disableNetworkFetch:!1};if(global.ProxyAgent){let t=new global.ProxyAgent(global.proxyUri);Object.assign(e,{httpsAgent:t,httpAgent:t})}return re(J.default.setup(Ja,e),aE).catch(t=>Of.error("failed to get feature flag status",t))}},U=new Xl});var Df,Mf,Yt,Uf,Ff,Nf,lE,uE,ti,dE,pE,te,ri=T(()=>{"use strict";Df=E(require("ms")),Mf=E(require("p-retry")),Yt=E(require("os")),Uf=E(require("portfinder")),Ff=E(require("child_process"));F();vt();Te();z();j();Wo();ae();be();Nf=x("lambdatestService"),lE="https://downloads.lambdatest.com/tunnel/v3",uE={win32ia32:"windows/32bit/LT_Windows.zip",win32x64:"windows/64bit/LT_Windows.zip",darwinia32:"mac/32bit/LT_Mac.zip",darwinx64:"mac/64bit/LT_Mac.zip",darwinarm64:"mac/64bit/LT_Mac.zip",linuxia32:"linux/32bit/LT_Linux.zip",linuxx64:"linux/64bit/LT_Linux.zip",freebsdia32:"freebsd/32bit/LT_Freebsd.zip",freebsdx64:"freebsd/64bit/LT_Freebsd.zip"},ti=`${Yt.tmpdir()}/LT`,dE=`${ti}/LT`,pE=(0,Df.default)("15m"),te=class{constructor(){this.isActive=!1}static isLambdatestGrid(e){return e.type===ue.LAMBDATEST||e.type===ue.HYBRID&&e.provider==="lambdatest"}isLambdatestRun(){return this.isActive}async enableIfNeeded(e){te.isLambdatestGrid(e)&&(te.lambdatestConfigPromise||(te.lambdatestConfigPromise=ul()),te.lambdatestConfig=await te.lambdatestConfigPromise,this.isActive=!0)}disable(){this.isActive=!1}get getSessionTimeout(){return this.isActive?pE:null}get getSessionRetries(){return this.isActive?1:null}static async prepareTunnel(){if(await ye(dE))return;let t=uE[Yt.platform()+Yt.arch()];if(!t)throw new Error(`tunnel on ${Yt.platform()+Yt.arch()} platform is not supported.`);let r=`${ti}.zip`;await qe(`${lE}/${t}`,r),await Ye(r,ti)}static async connectTunnel(e){if(e.externalLambdatestTunnelId){te.tunnelName=e.externalLambdatestTunnelId;return}await this.prepareTunnel();let t=await Uf.getPortPromise(),{gridData:r={},gridUsername:n,gridPassword:o}=e,i=global.proxyUri;te.tunnelName=K();let a=["--tunnelName",te.tunnelName,"--infoAPIPort",String(t)];if(e.externalLambdatestUseWss&&(a=[...a,"--mode","ws"]),e.externalLambdatestDisableAutomationTunneling&&(a=[...a,"--bypassHosts","run.testim.io,services.testim.io,api.coralogix.com,conf.rollout.io,statestore.rollout.io,push.rollout.io,analytic.rollout.io,res.cloudinary.com"]),r.tunnelUser&&r.tunnelKey)a=[...a,"--user",r.tunnelUser,"--key",r.tunnelKey];else if(n&&o)a=[...a,"--user",n,"--key",o];else throw new R("tunnel requires username and password");if(i)try{let d=new URL(i);a=[...a,"--proxy-host",d.hostname],d.port&&(a=[...a,"--proxy-port",d.port]),d.username&&d.password&&(a=[...a,"--proxy-user",d.username,"--proxy-pass",d.password])}catch{throw new R("proxy url is invalid")}e.externalLambdatestMitm&&(a=[...a,"--mitm"]),te.tunnel=Ff.spawn("./LT",a,{cwd:ti});let c="",l="";te.tunnel.stdout.on("data",d=>{c+=d.toString()}),te.tunnel.stderr.on("data",d=>{l+=d.toString()});try{let d=await(0,Mf.default)(()=>vr(`http://127.0.0.1:${t}/api/v1.0/info`,{},{},void 0,{skipProxy:!0}),{retries:30,minTimeout:2e3});Nf.info("LT tunnel info",d)}catch(d){throw Nf.error("Failed to start LT tunnel",{err:d,stdoutResult:c,stderrResult:l}),d}}static async disconnectTunnel(e){if(!(e.externalLambdatestTunnelId||!te.tunnel))return new Promise((t,r)=>{te.tunnel.on("close",n=>{n&&r(new Error(`tunnel process exited with code ${n}`)),t()}),te.tunnel.kill()})}getCapabilities(e,t,r,n,o){if(!this.isActive)return{};let i=te.lambdatestConfig.CAPABILITIES[t]||{},a={...te.tunnelName&&{tunnel:!0,tunnelName:te.tunnelName}},c=[],{mode:l,canary:d,ext:m,extensionPath:p,installCustomExtension:f}=e;if(l===Q.EXTENSION&&!m){let h=kl({canary:d},!0);!p&&h[t]&&(c=[...c,h[t]]),p&&Be(p)&&(c=[...c,p])}return f&&Be(f)&&(c=[...c,f]),{build:r,name:`${n} - ${o}`,platform:te.lambdatestConfig.PLATFORM,selenium_version:te.lambdatestConfig.SELENIUM_VERSION,resolution:te.lambdatestConfig.RESOLUTION,timezone:te.lambdatestConfig.TIMEZONE,...i,loadExtension:c,...a,console:!0,queueTimeout:300,network:U.flags.LTNetworkCapabilities.isEnabled()}}}});var Yl={};$(Yl,{connect:()=>ni,disconnect:()=>oi,serveTunneling:()=>fE});var si,jf,Bf,mE,ni,oi,fE,Ql=T(()=>{"use strict";xf();Tn();kf();Et();si=E(require("ora"));j();ae();ri();jf=x("tunnel"),Bf=s=>{var e;return[ue.LAMBDATEST,ue.HYBRID].includes((e=s.gridData)==null?void 0:e.type)&&s.gridData.tunnel==="lambdatest"},mE=s=>{var e;return s.tunnelRoutes||((e=s.gridData)==null?void 0:e.type)===ue.HYBRID&&s.gridData.tunnel==="cloudflare"},ni=async s=>{if(!s.tunnel)return;let e=Dt(),t;try{Bf(s)?(t=(0,si.default)("Starting testim lambdatest tunnel...").start(),await te.connectTunnel(s)):mE(s)?(t=(0,si.default)("Starting testim cloudflare tunnel...").start(),await Cf(s)):(t=(0,si.default)("Starting testim ngrok tunnel...").start(),await Rf(s,e)),t.succeed()}catch(r){let n="Failed to start tunnel. Please contact support@testim.io";throw jf.error("Failed to open tunnel",{err:r}),t==null||t.fail(n),new Error(n)}},oi=async s=>{if(s.tunnel)try{Bf(s)?await te.disconnectTunnel(s):"tunnelRoutes"in s?await Af(s):await If(s)}catch(e){let t="catch error - failed to close tunnel";throw jf.error(t,{err:e}),new Error(t)}},fE=async(s,e=new Promise(()=>{}))=>(await ni(s),ds(()=>oi(s)),await e)});function hE(s){if(s.protocol)return s.protocol;if([ue.TESTIM,ue.BROWSERSTACK,ue.SAUCELABS].includes(s.type)&&s.port===443)return"https";if([ue.TESTIM_ENTERPRISE,ue.LAMBDATEST,ue.DEVICE_FARM].includes(s.type)){let e=$f.exec(s.host);return(e==null?void 0:e[2])||"https"}return""}function gE(s){let e=$f.exec(s);return e==null?void 0:e[3]}function ai(s){var y,w,C,b,v,I,k,D,S;let e=s&&gE(s.host),t=s==null?void 0:s.port,r=s==null?void 0:s.path,n=s&&hE(s),o=s==null?void 0:s.token,i=s==null?void 0:s.slotId,a=(y=s==null?void 0:s.hybrid)==null?void 0:y.tunnel,c=(w=s==null?void 0:s.external)==null?void 0:w.user,l=(C=s==null?void 0:s.external)==null?void 0:C.key,d=s==null?void 0:s.type,m=d===ue.HYBRID?a&&((I=(v=(b=s.hybrid)==null?void 0:b.external)==null?void 0:v[s.hybrid.tunnel])==null?void 0:I.user):c,p=d===ue.HYBRID?a&&((S=(D=(k=s.hybrid)==null?void 0:k.external)==null?void 0:D[s.hybrid.tunnel])==null?void 0:S.key):l,f=s==null?void 0:s.name,h=s&&(s._id||s.gridId),g=s==null?void 0:s.provider;return{host:e,port:t,path:r,protocol:n,accessToken:o,slotId:i,gridId:h,tunnel:a,user:c,key:l,type:d,name:f,provider:g,tunnelUser:m,tunnelKey:p}}async function Gf(s,e,t,r,n){let o;try{o=await n()}catch(i){throw ze.error("failed to get grid",{projectId:s,companyId:e,err:i}),new Error(rs.UNKNOWN)}if(ze.info("get grid info",Object.assign({},o,{projectId:s,companyId:e})),!o||!["success","error"].includes(o.status))throw ze.error("invalid response - get grid",{res:o}),new Error(rs.UNKNOWN);if(o.status==="success"){let i=ai(o.grid);return yE(t,e,i.gridId,i.slotId,r),i}throw o.code==="not-found"?new it(rs.NOT_FOUND):o.code==="no-available-slot"?new gr(`Failed to run test on ${r} - concurrency limit reached`):(ze.error("invalid code error response - get grid",{res:o}),new it(rs.UNKNOWN))}function bE(s,e,t,r,n,o){return Gf(t,e,s,n,()=>Mo(e,t,r,n,o))}function wE(s,e,t,r,n,o,i){return Gf(t,e,s,n,()=>{var l;let c=(l=i.allGrids)==null?void 0:l.find(d=>(d.name||"").toLowerCase()===r.toLowerCase());return c!=null&&c._id?Mo(e,t,c._id,n,o):al(e,t,r,n,o)})}function qf(s){return ll(s)}async function Vf(s,e,t){let n=(t||await qf(s)).find(o=>o._id===e);if(!n)throw new R(`Failed to find grid id: ${e}`);return ai(n)}async function TE(s,e,t){let n=(t||await qf(s)).find(o=>(o.name||"").toLowerCase()===e.toLowerCase());if(!n)throw new R(`Failed to find grid name: ${e}`);return ai(n)}async function Zl(s,e){let t=Rn[s];if(!t)return;let{slotId:r,gridId:n,browser:o,companyId:i}=t;if(delete Rn[s],!r){ze.warn("failed to find grid slot id",{projectId:e});return}ze.info("release slot id",{projectId:e,companyId:i,slotId:r,gridId:n,browser:o});try{await ol(i,e,r,n,o)}catch(a){ze.error("failed to release slot",{projectId:e,err:a})}}async function vE(s){let e=Object.values(Rn).filter(Boolean);if(e.length!==0){ze.info("keep alive worker slots",{projectId:s,slots:e});try{await nl(s,e)}catch(t){ze.error("failed to update grid keep alive",{err:t,slots:e,projectId:s})}}}function EE(s){Wf=global.setInterval(vE,1e4,s)}async function SE(s){let e=Object.keys(Rn);if(e.length){ze.warn("not all slots released before end runner flow",{projectId:s});try{await de(e,t=>Zl(Number(t),s))}catch(t){ze.error("failed to release all slots",{err:t,projectId:s})}}}async function RE(s){await SE(s),clearInterval(Wf)}function IE(s,e){let{testobjectSauce:t,saucelabs:r}=e;if(s==="testobject")return t.testobjectApiKey;if(s==="saucelabs")return r.accessKey}function xE(s,e){let{saucelabs:t}=e;if(s==="saucelabs")return t.username}function Hf(s){let t=(()=>ii.isEmpty(s.testobjectSauce)?ii.isEmpty(s.saucelabs)?ii.isEmpty(s.perfecto)?"hostAndPort":"perfecto":"saucelabs":"testobject")(),{host:r,port:n,path:o,protocol:i}=s,a=IE(t,s),c=xE(t,s);return{host:r,port:n,path:o,protocol:i,type:t,user:c,key:a}}async function zf(s,e){let t=s.company.companyId;return await Vf(t,e.gridId,s.allGrids)}async function Kf(s){let{allGrids:e=void 0,company:t,host:r,useLocalChromeDriver:n,useChromeLauncher:o,gridId:i,grid:a}=s;if(n||o)return{mode:"local"};if(r)return Hf(s);let c=t==null?void 0:t.companyId;if(i)return Vf(c,i,e);if(a)return TE(c,a,e);if(rn(s)||s.tunnelOnlyMode){ze.info("skipping getting grid, as it is set on test plan",{companyId:c});return}throw new it("Missing host or grid configuration")}async function Jf(s,e,t,r){return await(async()=>{let{host:i,project:a,grid:c,gridId:l,useLocalChromeDriver:d,useChromeLauncher:m,company:p}=t,f=p==null?void 0:p.companyId;if(d||m)return{mode:"local"};if(i)return Hf(t);if(l)return bE(r,f,a,l,s,e);if(c)return wE(r,f,a,c,s,e,t);throw new it("Missing host or grid configuration")})()}var ii,ze,Rn,$f,Wf,yE,In,Xf,bs=T(()=>{"use strict";ii=E(require("lodash"));Te();j();F();ae();z();ze=x("grid-service"),Rn={},$f=/(^(https?):\/{2})?(.*)/,Wf=null;yE=(s,e,t,r,n)=>{Rn[s]={gridId:t,companyId:e,slotId:r,browser:n}};In={start:EE,end:RE};Xf=async(s={},e={},t={},r={},n={})=>{var h,g,y;let{company:{companyId:o}={}}=s,{gridId:i,type:a}=e,c=s.browser||t.browserValue,l=Boolean(s.tunnel),{maxRetries:d,currentRetry:m}=n;if(!i||!a||(a===ue.LAMBDATEST&&await((h=r.enableIfNeeded)==null?void 0:h.call(r,e)),a!==ue.HYBRID||!o||!c||!d||!m))return e;let p=await il({companyId:o,gridId:i,maxRetries:d,currentRetry:m,browser:c,usingTunnel:l});ze.info("handling hybrid grid",{response:p,companyId:o});let f=ai({...e,...p.connectionDetails,provider:p.provider});return p.provider!=="lambdatest"&&((g=r.disable)==null||g.call(r)),p.provider==="lambdatest"&&await((y=r.enableIfNeeded)==null?void 0:y.call(r,f)),f}});function Pn(){return ci||"master"}function Yf(s="master",e="false"){if(typeof s!="string"&&(s!=null&&s.branch)&&s.branch==="master"){ci="master";return}if(s&&!s.isArchived){ci=s.branch||s;return}ci=e?"master":void 0}var ci,eu=T(()=>{"use strict"});var Cn,tu,PE,ru,CE,su,li,ui,di,pi,mi,fi=T(()=>{"use strict";F();ae();Cn=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.FAILED||t===Ot.CODEFUL&&r===!1},tu=s=>{let{status:e}=s;return e===pe.ABORTED},PE=s=>{let{status:e,sessionType:t,success:r}=s;return e===pe.PASSED||t===Ot.CODEFUL&&r===!0},ru=s=>s.runnerStatus===pe.SKIPPED,CE=s=>s.testStatus===Ve.EVALUATING,su=(s,e)=>e?!s.runConfig:!1,li=(s,e)=>Object.values(s).filter(t=>ru(t)&&He(t,e)).length,ui=s=>Object.values(s).filter(e=>Cn(e)&&CE(e)).length,di=(s,e)=>Object.values(s).filter(t=>Cn(t)&&!su(t,e)),pi=(s,e)=>Object.values(s).filter(t=>PE(t)&&!su(t,e)),mi=(s,e)=>Object.values(s).filter(t=>tu(t)&&!su(t,e))});function AE(s){let e=s.indexOf("--token");if(e===-1&&(e=s.indexOf("--t")),e!==-1)try{let t=s.slice();return t.splice(e,2),t}catch{}return s}var hi,Zf,gi,eh=T(()=>{"use strict";j();fi();hi=x("debug-reporter"),Zf={token:void 0,userParamsData:void 0,projectData:void 0,allGrids:void 0,gridData:void 0,awsAccessKeyId:void 0,awsSecretAccessKey:void 0,runParams:void 0,perfecto:void 0,testobjectSauce:void 0},gi=class{constructor(e){this.options=e}onTestStarted(e,t){hi.info("Test Started",{testId:e.testId,testName:e.name,resultId:e.resultId,workerId:t})}onTestFinished(e,t){let r=this.options.gridData||{},n=r.provider,o=r.host,i=r.gridId,a=r.type,c=r.failedGetBrowserAttempts;hi.info("Test Finished",{testId:e.testId,testName:e.name,resultId:e.resultId,success:e.success,duration:e.duration,browser:this.options.browser,companyId:this.options.company.companyId,grid:{provider:n,host:o,failedGetBrowserAttempts:c,id:i,type:a},workerId:t})}onTestPlanStarted(e,t,r,n,o,i,a){let c=AE(process.argv);hi.info("Test Plan Started",{executionId:o,testPlanName:n,isAnonymous:i,configName:a,options:Object.assign({},this.options,Zf),args:c})}onTestPlanFinished(e,t,r,n,o,i){let a=pi(e,i).length,c=Object.keys(e).length-a;hi.info("Test Plan Finished",{isAnonymous:o,passed:a,failed:c,testPlanName:t,options:Object.assign({},this.options,Zf),duration:r,executionId:n})}}});var nu,Rt,An=T(()=>{"use strict";ae();nu=class{constructor(){this._planType="free"}setPlanType(e){this._planType=e}get isTestStatusEnabled(){return["pro","trial"].includes(this._planType)}shouldShowFreeGridRunWarning(e){return this._planType!=="pro"&&e===ue.DEVICE_FARM}},Rt=new nu});var iu={};$(iu,{Reporter:()=>kE});var Qt,kn,Or,yi,th,ou,kE,au=T(()=>{"use strict";Qt=E(require("chalk")),kn=E(require("lodash"));F();ae();An();fi();Or={success:Qt.default.green,warn:Qt.default.yellow,error:Qt.default.red},{CLI_MODE:yi}=Lt,th="device",ou=class{constructor(e,t){this.options=e;this.branchToUse=t;this.config={showWorkerNames:e.parallel>1}}toWorkerIdPrefix(e){return this.config.showWorkerNames?`W:${e}`:""}printWorkerDivider(){console.log("-".repeat(process.stdout.columns||83))}onTestStarted(e,t,r,n){let o=n?"File":"Test",i=e.isTestsContainer?"":`(${e.testId})`,a=e.isTestsContainer?"":`url: ${Qt.default.underline(st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse))}`;console.log(this.toWorkerIdPrefix(t),`${o} "${e.name}" started ${i} ${a}`.trim())}onTestFinished(e,t,r,n){if(n)return;let o=e.success?pe.PASSED:pe.FAILED,i=e.isTestsContainer?" ":`(${e.testId})`,a=Or[e.success?"success":"error"];console.log(a(this.toWorkerIdPrefix(t),`Test "${e.name}" finished status: ${o} ${i} duration: ${po(e.duration)}`))}printAllFailedTests(e){if(!e.length)return;let t=e.map(r=>{let n=st(this.options.editorUrl,this.options.project,r.testId,r.resultId,this.branchToUse);return r.isTestsContainer?r.name:`${r.name} : ${n}`});console.log(Or.error("Failed runs are:")),console.log(Or.error(t.join(`
|
|
27
|
-
\r`)))}onTestPlanFinished(e,t,r,n,o,i){let a=di(e,i),c=pi(e,i),l=mi(e,i),d=c.length,m=l.length,p=a.length,f="",h="";if(Rt.isTestStatusEnabled){let b=ui(e);f=` FAILED-EVALUATING: ${b}`,p-=b,h=` SKIPPED: ${li(e,this.options)}`}let g=this.buildTestPlanName(o,t,i),y,w=Or[p?"error":"success"],C=`PASSED: ${d} FAILED: ${p}${f} ABORTED: ${m}${h} Duration: ${po(r)}`;i||g.trim()===""||g.trim()==="Anonymous"?y=`Tests completed. ${C} (Execution ID: ${n})`:y=`Test plan${g} completed ${C} (${n})`,this.printWorkerDivider(),console.log(w(y)),this.printWorkerDivider(),this.printAllFailedTests(a)}buildTestPlanName(e,t,r){if(r)return"";let n=kn.isEmpty(this.options.suites)?"":`Suite: ${this.options.suites}`,o=kn.isEmpty(this.options.label)?"":`Label: ${this.options.label}`,i=kn.isEmpty(this.options.name)?"":`Name: ${this.options.name}`,a=kn.isEmpty(this.options.testId)?"":`Test Id: ${this.options.testId}`,c=[i,o,n,a].filter(Boolean).join(", ");return e?` anonymous (${c})`:` '${t}'`}onTestPlanStarted(e,t,r,n,o,i,a,c){let l=p=>{p.forEach((f,h)=>{var w;let g=(w=f.testData)!=null&&w.index?`- ${f.testData.index} / ${f.testData.total} Data set`:"",y=c?"":`(${f.testId})`;console.log(" ",h+1,":",`${f.name}${He(f,this.options)?"-quarantine":""}`,y,g)})},d=a?`config '${a}'`:"default configs";if(c)console.log(`Run test plan, Project: ${this.options.project} (Execution ID: ${o}):`);else{let p=this.options.sfdcCredential?` SfdcCredential: ${this.options.sfdcCredential}`:"",f=`${d}, Project: ${this.options.project}, Branch: ${this.branchToUse}${p}`;console.log(`Run${this.buildTestPlanName(i,n)} test plan with ${f} (${o})`)}this.printWorkerDivider(),e.length>0&&(console.log("Before all:"),l(e)),console.log(c?"File list:":"Test list:"),l(t),r.length>0&&(console.log("After all:"),l(r)),this.printWorkerDivider()}onGetSlot(e,t){let r=this.options.grid||this.options.gridId,n=this.options.mode===yi.APPIUM?th:t;r&&console.log(this.toWorkerIdPrefix(e),`Get ${Qt.default.underline(n)} slot from ${Qt.default.underline(r)}`)}onGetSession(e,t,r){let n=r===yi.APPIUM?th:"browser";console.log(this.toWorkerIdPrefix(e),`Get ${n} to run ${Qt.default.underline(t)}`)}onWaitToTestStart(e){console.log(this.toWorkerIdPrefix(e),"Wait for test start")}onWaitToTestComplete(e,t,r){let n=t?"file":"test";console.log(this.toWorkerIdPrefix(e),`Wait for ${n} complete`),r&&t&&console.log(this.toWorkerIdPrefix(e),`Chrome Debugger available at ${r}`)}onGetBrowserFailure(e,t,r){if(r!==2)return;let n=this.options.grid||this.options.gridId,o=this.options.mode===yi.APPIUM?"device":"browser";if(n)console.log(Or.warn(this.toWorkerIdPrefix(e),`It is taking us some time to get a ${o} from the grid ${n}`));else if(this.options.useLocalChromeDriver)console.log(Or.warn(this.toWorkerIdPrefix(e),"We are having issues starting ChromeDriver for you locally"));else if(this.options.host){let i=this.options.mode===yi.APPIUM?"Appium":"Selenium";console.log(Or.warn(this.toWorkerIdPrefix(e),`We are having issues reaching your ${i} grid at ${this.options.host}:${this.options.port||4444}`))}}},kE=ou});var uu={};$(uu,{Reporter:()=>ME});function _E(s){let e=s.testData||{},t=typeof e.total=="number"?` - ${e.index} / ${e.total} Data set`:"";return`${s.name}${t}`}function OE(s){return s.visitedUrlsList||console.log("No URLs found:","Please contact our support team or remove the --urls flag from the CLI command"),`${s.visitedUrlsList||""}`}function LE(s){return`${s.visitedUrlsJson||""}`}async function NE(s,e,t,r,n,o){function i(p){let f=st(s,t,p.testId,p.resultId,r),h={$:{name:_E(p),classname:n,time:xc(p.duration),ownedBy:p.testOwnerName,ownerEmail:p.testOwnerEmail},"system-out":f};if(Cn(p)||tu(p)){let g=`Step Failed: ${p.failureReason||p.reason}`,y=Cn(p)?`${g} More info at: ${f}`:g;h.failure={$:{message:y}}}return ru(p)&&He(p,o)&&Rt.isTestStatusEnabled&&(h.skipped={}),o.urls&&(h["visited-urls-list"]=OE(p),h["visited-urls-json"]=LE(p)),h}function a(p){let{results:f,testPlanName:h,configName:g}=p,y=f||{},C={name:(g&&h?`${h} with config '${g}'`:h)||"selenium run",tests:l(y),failure:d(y),timestamp:c(e)};if(Rt.isTestStatusEnabled){C.skipped=li(y,o);let b=ui(y);C.failure-=b,C["failure-evaluating"]=b}return{$:C,testcase:Object.keys(y).map(b=>i(y[b]))}}function c(p){let f=Object.keys(p).map(g=>p[g].startTime),h=Math.min.apply(null,f);return h?new Date(h).toISOString():new Date().toISOString()}function l(p){return Object.keys(p).length}function d(p){return di(p).length+mi(p).length}let m={testsuites:{testsuite:e.map(p=>a(p))}};try{return new lu.Builder().buildObject(m)}catch(p){return DE(p)}}function DE(s){let e=new lu.Builder,t={testsuites:{testsuite:{$:{name:"selenium run",tests:1,failure:1,timestamp:Date.now()},testcase:{$:{name:"junit reporter generator failed",classname:"testim.io.jUnitXmlReporter"},error:{$:{message:s.message}}}}}};return e.buildObject(t)}var lu,rh,cu,ME,du=T(()=>{"use strict";lu=E(require("xml2js"));F();rh=require("fs");An();fi();cu=class{constructor(e,t){this.options=e;this.branchToUse=t;this.classname="testim.io.test",typeof e.reportFileClassname=="string"&&(this.classname=e.reportFileClassname),e.reportFileClassname===!0&&(this.classname="")}async createResultsReport(e){let t=this.options.reportFile,r=this.options.project,n=await NE(this.options.editorUrl,e,r,this.branchToUse,this.classname,this.options);if(t)try{return await rh.promises.writeFile(t,n),console.log("JUnit XML file saved to",t),e}catch(o){return console.error("could not save report file",t,o),e}}async onAllTestPlansFinished(e){await this.createResultsReport(e)}};ME=cu});var sh={};$(sh,{Reporter:()=>UE});function ws(s){return s?s.replace(/\|/g,"||").replace(/'/g,"|'").replace(/\n/g,"|n").replace(/\r/g,"|r").replace(/\u0085/g,"|x").replace(/\u2028/g,"|l").replace(/\u2029/g,"|p").replace(/\[/g,"|[").replace(/\]/g,"|]"):""}var pu,mu,UE,nh=T(()=>{"use strict";j();pu=x("team-city-reporter");mu=class{constructor(e){this.options=e}getPrintName(e){let t=e.config||{},r=typeof t.testDataTotal=="number"?` - ${t.testDataIndex} / ${t.testDataTotal} Data set`:"",n=`${e.name} (${e.testId})${r}`;return ws(n)}onTestStarted(e,t,r,n,o){if(r){pu.debug("skip report test started because is rerun");return}let i=this.getPrintName(e);console.log(`##teamcity[testStarted name='${i}' captureStandardOutput='true' flowId='${o}']`)}onTestFailed(e,t,r,n,o,i){if(o){pu.debug("skip report test failed because is rerun");return}let a=this.getPrintName(e);console.log(`##teamcity[testFailed name='${a}' message='${ws(t)}' details='${ws(r)}' flowId='${i}']`)}onTestFinished(e,t,r){if(r){pu.debug("skip report test finished because is rerun");return}let n=this.getPrintName(e);console.log(`##teamcity[testFinished name='${n}' duration='${e.duration}' flowId='${e.resultId}']`)}onTestIgnored(e,t,r="ignore"){let n=this.getPrintName(t);console.log(`##teamcity[testIgnored name='${n}' message='${ws(r)}']`)}onTestPlanStarted(e,t,r,n){console.log(`##teamcity[testSuiteStarted name='${ws(n)}']`)}onTestPlanFinished(e,t){console.log(`##teamcity[testSuiteFinished name='${ws(t)}']`)}},UE=mu});var oh={};$(oh,{Reporter:()=>FE});var fu,FE,ih=T(()=>{"use strict";fu=class{constructor(e){this.options=e}onTestStarted(e,t){console.log(JSON.stringify({name:"testStarted",data:{test:e,workerId:t}}))}onTestFinished(e,t){console.log(JSON.stringify({name:"testFinished",data:{test:e,workerId:t}}))}onTestPlanStarted(e,t,r,n,o){let i={name:"suiteStarted",data:{projectId:this.options.project,executionId:o}};console.log(JSON.stringify(i))}onTestPlanFinished(e){console.log(JSON.stringify({name:"suiteFinished",data:{testResults:e}}))}},FE=fu});var ah={};$(ah,{Reporter:()=>jE});var hu,jE,ch=T(()=>{"use strict";F();_l();hu=class{constructor(e,t){this.options=e;this.branchToUse=t}onTestStarted(e,t,r,n){if(n)return;let o=st(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse);return qo(o)}},jE=hu});var BE,gu,Z,Ft=T(()=>{"use strict";eh();j();BE=x("reporter"),gu=class{constructor(){this.reporters=[];this.onGetBrowserFailure=this.generateHook("onGetBrowserFailure");this.onGetBrowserSuccess=this.generateHook("onGetBrowserSuccess");this.onTestPlanStarted=this.generateHook("onTestPlanStarted");this.onGetSlot=this.generateHook("onGetSlot");this.onGetSession=this.generateHook("onGetSession");this.onTestFinished=this.generateHook("onTestFinished");this.onTestFailed=this.generateHook("onTestFailed");this.onTestPassed=this.generateHook("onTestPassed");this.onTestStarted=this.generateHook("onTestStarted");this.onTestIgnored=this.generateHook("onTestIgnored");this.onWaitToTestStart=this.generateHook("onWaitToTestStart");this.onWaitToTestComplete=this.generateHook("onWaitToTestComplete");this.onTestPlanFinished=this.generateHook("onTestPlanFinished",this.onTestPlanFinishedMutator);this.onAllTestPlansFinished=this.generateHook("onAllTestPlansFinished",this.onAllTestPlansFinishedMutator)}async setOptions(e,t){this.reporters=[];let r=e.reporters;if(this.reporters.push(new gi(e)),r===void 0||r.length===0){let{Reporter:n}=await Promise.resolve().then(()=>(au(),iu));if(this.reporters.push(new n(e,t)),(e==null?void 0:e.reportFile)!==void 0){let{Reporter:o}=await Promise.resolve().then(()=>(du(),uu));this.reporters.push(new o(e,t))}}else(await Promise.all([r.includes("teamcity")&&Promise.resolve().then(()=>(nh(),sh)),r.includes("console")&&Promise.resolve().then(()=>(au(),iu)),r.includes("junit")&&Promise.resolve().then(()=>(du(),uu)),r.includes("json")&&Promise.resolve().then(()=>(ih(),oh)),r.includes("chrome")&&Promise.resolve().then(()=>(ch(),ah))])).forEach(o=>{o&&this.reporters.push(new o.Reporter(e,t))})}onTestPlanFinishedMutator(e,t,r,n,o,i,a){let c={};if(a){let d=Object.values(a);if(d.length>0){for(let m of Object.values(a))c[m.id]=m;for(let m of Object.keys(e))d.some(p=>p.parentResultId!==m)||(c[m]=e[m])}else BE.warn("childTestResults is not array"),c=e}else c=e;let l=Date.now()-(r||0);return[c,t,l,n,o,i,void 0]}onAllTestPlansFinishedMutator(e){for(let t of e)if(t.childTestResults){t.results={};let r=Object.values(t.childTestResults);for(let n of r)t.results[n.id]=n;for(let n of Object.keys(e))r.some(o=>o.parentResultId!==n)||(t.results[n]=e[n])}return[e]}generateHook(e,t){return async(...r)=>{var o;let n=t==null?void 0:t(...r);for(let i of this.reporters)await((o=i[e])==null?void 0:o.call(i,...n||r))}}},Z=new gu});function uh(s,e){return e!=null&&e.type&&(s[`${e.type}Mode`]=!0),s}function dh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:l,user:d,lightweightMode:m,isStartUp:p,projectType:f,appSource:h}){let g=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:lh(l,d),isStartUp:p,projectType:f,...["android","ios"].includes(f)&&h&&{appSource:h}},m);pt("test-run-ci",g)}function ph({executionId:s,projectId:e,testId:t,resultId:r,result:n,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,source:d,user:m,lightweightMode:p,logger:f,isStartUp:h,projectType:g,appSource:y}){try{let w=uh({executionId:s,projectId:e,testId:t,resultId:r,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,mockNetworkEnabled:n.wasMockNetworkActivated,source:lh(d,m),isStartUp:h,projectType:g,...["android","ios"].includes(g)&&y&&{appSource:y}},p);if(n.success){pt("test-run-ci-success",w);return}pt("test-run-ci-fail",Object.assign({},w,{failureReason:n.failureReason}))}catch(w){f.error("failed to update test end analytics",{err:w})}}function mh({executionId:s,projectId:e,sessionType:t}){pt("batch-run-ci",{executionId:s,projectId:e,sessionType:t})}var lh,yu=T(()=>{"use strict";ms();Lo();lh=(s,e)=>s!=="cli"&&s!=="cli-local"?s:ls&&e?"ci-with-user":ls?"ci":e?"cli-with-user":s});var $E,hh=T(()=>{"use strict";$E=require("istanbul-lib-report")});var gh,yh,WE,bh,Lr,GE,wh,bu,qE,Th,vh=T(()=>{"use strict";gh=E(require("ora")),yh=E(require("moment")),WE=E(require("test-exclude")),bh=E(require("fs")),Lr=E(require("path")),GE=E(require("istanbul-reports")),wh=E(require("istanbul-lib-report"));Te();z();F();j();ft();hh();bu=x("test-run-status"),qE=async(s,e,t)=>{let{mergeProcessCovs:n}=await ge("@bcoe/v8-coverage"),o={result:[]},i=new Map,c=(await yn(s,"testResult",`runId=${t}`)).data.docs;return await de(c.flatMap(l=>l.JSCoverageURLS||[]),async l=>{let d=await gn(l,9e4);await de(d,async m=>{if(!i.has(m.url)){let p=m.text;m.sourceUrl&&(i.set(m.url,"TEMP"),p=await(void 0)(m.sourceUrl)),i.set(m.url,{text:p,url:m.url,sourceMapType:m.sourceMapType,hash:m.hash})}delete m.text,o=n([o,{result:[m]}])})},{concurrency:20}),{covUrlMap:i,mergedCoverages:o}},Th=async(s,e,t,r)=>{if(!s.collectCodeCoverage)return;bu.info("start js coverage process");let n=(0,gh.default)(`analyzing coverage for ${t} ${t===1?"test":"tests"}`).start(),o=Lr.resolve(s.codeCoverageReportPath||"./coverage"),i=Lr.resolve(o,`.js/${(0,yh.default)().format("DDMMYYYYHHmmss")}`),a=s.codeCoverageSourceMapPath?Lr.resolve(s.codeCoverageSourceMapPath):void 0;try{let[c,{mergedCoverages:l,covUrlMap:d}]=await Promise.all([ge("istanbul-lib-coverage"),qE(s.project,e,r)]);if(l.result.length===0){n.fail("Failed to report coverage information - js code coverage is empty");return}bu.info("start js coverage merge and remap",{numOfFiles:d.size,numMergedCoverages:l.result.length});let m=c.createCoverageMap({}),p={};await de(l.result,async({url:h,functions:g})=>{let{text:y,sourceMapType:w}=d.get(h),C=await(void 0).getSourceMap({sourceMapType:w,url:h,source:y,sourceMapDir:a});p[h]=C;let b=await(void 0).convertV8ToIstanbul(s,{source:y,sourceMap:C,functions:g});m.merge(b)}),await(void 0).remapCoverage(s,i,p);let f=await(void 0).saveCoverageReports(s,m,o,i);return n.succeed(),f}catch(c){let l="Failed to report coverage information";c instanceof R?n.fail(`${l}, missing arg: ${c.message}`):n.fail(l),bu.error(l,{err:c})}}});var bi={};$(bi,{SELENIUM_PERF_MARKS:()=>Eh,SeleniumPerfStats:()=>Nr});var Eh,Nr,Ts=T(()=>{"use strict";F();Eh={GET_BROWSER:"GET_BROWSER",GET_HTML:"GET_HTML",GET_ELEMENT:"GET_ELEMENT",GET_SCREENSHOT:"GET_SCREENSHOT"},Nr=class{constructor(){this.marks=Object.fromEntries(Object.values(Object.assign({ALL:"ALL"},Eh)).map(e=>[e,[]]));this.startTimes={}}markStart(e){let t=K();return this.startTimes[`${e}:${t}`]=Date.now(),t}markEnd(e,t){let r=Date.now()-this.startTimes[`${t}:${e}`];if(delete this.startTimes[`${t}:${e}`],!this.marks[t]){this.marks.ALL.push(r);return}this.marks[t].push(r)}getStats(){let e=Object.entries(this.marks).flatMap(([t,r])=>!Array.isArray(r)||!r.length?[]:[[`${t}_COUNT`,r.length],[`${t}_P50`,ho(r,50)],[`${t}_P95`,ho(r,95)]]);return{seleniumPerfMarks:this.marks,seleniumStats:Object.fromEntries(e)}}}});var xh={};$(xh,{initServer:()=>zE,mapFilesToLocalDrive:()=>Tu});function Tu(s,e){var t;try{s.failurePath=(s.failurePath||[]).map(r=>Object.assign(r,wi[r.id]?{screenshot:wi[r.id]}:{})),Object.keys(vs).forEach(r=>{s.assets||(s.assets={}),s.assets[Ih[r]]=vs[r]}),s.assets||(s.assets={}),s.assets.screenshots=Object.values(wi)}catch(r){e&&e.error("failed to map files to local drive",{err:r}),s.failurePath||(s.failurePath=[]),s.assets||(s.assets={}),(t=s.assets).screenshots||(t.screenshots=[])}}async function zE({agentPort:s,agentBind:e,saveRCALocally:t}){let r=await ge("multer"),n=typeof t=="string"?t:VE;await wu.promises.mkdir(n,{recursive:!0});let o=r({storage:r.diskStorage({async destination(c,l,d){let m=JSON.parse(c.body.metadata||"{}");if(!m.testResultId)return d(new Error("missing testResultId"),"");let p=_n.join(n,m.testResultId);try{await wu.promises.mkdir(p,{recursive:!0})}catch(f){return d(f,"")}return d(null,p)},filename(c,l,d){let{fileName:m}=c.body,p=JSON.parse(c.body.metadata||"{}");if(!p.stepId&&!m)return d(new Error("missing stepId or fileName"),"");if(p.stepId){let f=_n.extname(m);return d(null,`step_${p.stepId}_${p.stepName||""}${f}`.replace(/[/\\?%*:|"<>\s]/g,"-"))}return d(null,m)}})}),i=(0,Rh.default)();i.post("/",o.single("file"),(c,l)=>{var m;let d=JSON.parse(c.body.metadata||"{}");d.stepId&&(wi[d.stepId]=c.file.path),d.testResultId&&HE.includes(d.subType)&&(vs[m=d.subType]||(vs[m]=[]),vs[d.subType].push(c.file.path)),l.sendStatus(200)}),i.use((c,l)=>l.status(404).send("Endpoint Not Found"));let{createServer:a}=await import("http");return await new Promise((c,l)=>{let d=a(i);d.listen(s,e),d.on("error",m),d.on("listening",()=>c(d.address()));function m(p){if(p.syscall!=="listen")return l(p);switch(p.code){case"EACCES":case"EPERM":return l(new R(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return l(new R(`Port ${s} is already in use`));default:return l(p)}}})}var wu,Sh,_n,Rh,VE,wi,vs,Ih,HE,vu=T(()=>{"use strict";wu=E(require("fs")),Sh=E(require("os")),_n=E(require("path")),Rh=E(require("express"));z();ft();VE=_n.join(Sh.tmpdir(),"testim/rca/"),wi={},vs={},Ih={"test-log":"consoleLogs","har-file":"networkLogs"},HE=Object.keys(Ih)});var Zt,Eu,Ti,Ph=T(()=>{"use strict";Zt=E(require("lodash"));F();j();Eu=x("override-test-data-builder"),Ti=class{constructor(e,t,r){this.params=e;this.testInfoList=t;this.projectId=r}isObjectNotArray(e){return Zt.isObject(e)&&!Array.isArray(e)}isArrayOfObjects(e){return Array.isArray(e)&&e.filter(t=>!this.isObjectNotArray(t)).length===0}overrideTestData(){let{params:e,projectId:t}=this;return this.isObjectNotArray(e)&&typeof e.overrideTestData<"u"&&(this.isObjectNotArray(e.overrideTestData)&&!Zt.isEmpty(e.overrideTestData)?(Object.keys(e.overrideTestData).forEach(r=>this.overrideSingleTest(r,e.overrideTestData[r])),delete e.overrideTestData):Eu.error("invalid overrideTestData",{overrideTestData:e.overrideTestData,projectId:t})),this.isObjectNotArray(e)&&typeof e.overrideAllTestsData<"u"&&(Zt.isObject(e.overrideAllTestsData)&&!Zt.isEmpty(e.overrideAllTestsData)?(this.testInfoList.map(n=>n.name).forEach(n=>this.overrideSingleTest(n,e.overrideAllTestsData)),delete e.overrideAllTestsData):Eu.error("invalid overrideAllTestsData",{overrideAllTestsData:e.overrideAllTestsData,projectId:t})),this.testInfoList}overrideSingleTest(e,t){let{projectId:r}=this;if(this.isObjectNotArray(t)||this.isArrayOfObjects(t)){this.replaceAndCreateOverrideTestData(e,t);return}Eu.error("skip override test data to test name",{testName:e,projectId:r}),console.error(`Invalid override test data provided to test '${e}'`)}replaceAndCreateOverrideTestData(e,t){let r=this.mapTestListToUniqueId(e);if(r.length!==0)return this.createNewTestPerOverrideTestData(r,t)}mapTestListToUniqueId(e){let{testInfoList:t}=this;return Zt.chain(t).map(r=>{if(r.name.toLowerCase()===e.toLowerCase())return this.generateTestUniqId(r)}).compact().uniq().value()}createNewTestPerOverrideTestData(e,t){let{testInfoList:r}=this;return[...new Set(e)].map(n=>{let o=r.map(d=>this.generateTestUniqId(d)),i=o.indexOf(n),a=o.lastIndexOf(n),c=r[i],l=this.createNewTestItems(c,t);return r.splice(i,a-i+1,...l)})}createNewTestItems(e,t){return[].concat(t).map((r,n)=>{let o=K();return Object.assign({},e,{resultId:o,testData:{value:r,index:n+1,total:t.length||1}})})}getTestType(e){return e.isBeforeTestPlan?"before":e.isAfterTestPlan?"after":"test"}generateTestUniqId(e){return`${e.testId}:${e.testConfig.id}:${this.getTestType(e)}`}}});async function vi(s,...e){if(!(!s||typeof s!="function"))try{return await s(...e)||{}}catch(t){throw tt.warn("failed to run hook",{err:t}),new R(`failed to run hook promise ${t.message}`)}}var Dr,tt,KE,JE,XE,YE,Ei,Ch=T(()=>{"use strict";Dr=E(require("lodash"));F();ae();bs();Te();z();j();Ft();Tn();vh();Ts();vu();le();be();Ph();An();tt=x("test-run-status"),KE=Ir(),JE=process.env.GIT_COMMIT||process.env.CIRCLE_SHA1||process.env.TRAVIS_COMMIT,XE=process.env.GIT_URL||process.env.CIRCLE_REPOSITORY_URL,YE=nt();Ei=class{constructor(e,t,r,n){this.testInfoList=e;this.options=t;this.branchToUse=n;this.exportsGlobal={};this.startTime=null;this.beforeSuiteParams={};this.executionStartedPromise=Promise.resolve();this.seleniumPerfStats=new Nr;var a,c,l,d,m;(a=this.options).runParams||(a.runParams={}),this.fileUserParamsData=this.options.userParamsData;let o=tn(t,e),i=t.lightweightMode?t.lightweightMode.type:t.mode;this.execConfig={parallel:Ks||t.parallel||1,browser:o,gitBranch:KE,gitCommit:JE,gitRepoUrl:XE,runnerVersion:YE,gridHost:t.host||((c=t.gridData)==null?void 0:c.host),testimBranch:n,canaryMode:t.canary,source:t.source,schedulerId:t.schedulerId,testPlanId:r,testPlans:t.testPlan,testLabels:t.label,testSuites:[...new Set(e.flatMap(p=>p.testSuites))],testNames:t.name,testIds:t.testId,testConfigs:t.testConfigNames,testConfigIds:t.testConfigIds,port:t.port,browserTimeout:t.browserTimeout,timeout:t.timeout,newBrowserWaitTimeout:t.newBrowserWaitTimeout,tunnel:t.tunnel,tunnelPort:t.tunnelPort,tunnelHostHeader:t.tunnelHostHeader,runnerMode:i,gridId:t.gridId||((l=t.gridData)==null?void 0:l.gridId),gridName:t.grid||((d=t.gridData)==null?void 0:d.name),gridType:(m=t.gridData)==null?void 0:m.type,retentionDays:t.retentionDays,codeCoverageReportPath:t.codeCoverageReportPath,collectCodeCoverage:t.codeCoverageUrlFilter||t.collectCodeCoverage,sessionType:Sr(t)},this.testRunStatus=this.calcTestRunStatus()}waitForExecutionStartedFinished(){return this.executionStartedPromise}getTestResult(e){return this.testRunStatus[e]}async addRetryTestResult({newResultId:e,originalTestResultId:t,previousTestResultId:r,projectId:n,executionId:o,retryCount:i=1}){let a=this.testRunStatus[t]||{},{config:c,isTestsContainer:l,testId:d,name:m,testStatus:p,testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:C,allLabels:b}=a,v={originalTestResultId:t,previousTestResultId:r,config:Dr.cloneDeep(c),testId:d,status:"QUEUED",name:m,resultId:e,isTestsContainer:l,retryCount:i,testStatus:p};return this.testRunStatus[e]=Object.assign({},v,{testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:w,testSuites:C,allLabels:b}),gl({projectId:n,runId:o,testId:d,newResultId:e,originalTestResultId:t,previousTestResultId:r,testResult:v})}getAllTestResults(){return this.testRunStatus}testStart(e,t,r,n){let o=this.getTestResult(r);o.workerId=e;let i=this.options.files.length>0;return Z.onTestStarted(o,e,n,i,r),o}async updateTestStatusRunning(e,t,r){var l;let{project:n,remoteRunId:o,projectData:i}=this.options;if((l=this.options.lightweightMode)!=null&&l.onlyTestIdsNoSuite)return this.executionStartedPromise;let a="";try{a=await Uo(n,e.testId,e.resultId,e.config.testData,i.defaults)||""}catch(d){tt.error("failed to upload test data artifact (runner)",{err:d})}let c=Dr.cloneDeep(e.config);return delete c.testData,c.testDataUrl=a,await this.executionStartedPromise,us(n,t,e.testId,e.resultId,"RUNNING",{startTime:e.startTime,config:c,remoteRunId:o,testRetryKey:r})}async testStartReport(e,t,r){if(He(e,this.options))return;let n=this.exportsGlobal;try{let o=await vi(this.options.beforeTest,Object.assign({},e,{exportsGlobal:n,globalParameters:n}),this.options.userData.loginData.token);return e.config.testData=Object.assign({},e.config.testData,this.exportsGlobal,this.fileUserParamsData,this.beforeSuiteParams,o),this.options.runParams[e.resultId]=e.config.testData,e.startTime=Date.now(),await this.updateTestStatusRunning(e,t,r),e}catch(o){throw tt.error("Failed to start test",{err:o}),o}}testStartAndReport(e,t,r,n,o){let i=this.testStart(e,t,r,n);return this.testStartReport(i,t,o)}onGridSlot(e,t){let r=this.getTestResult(e);r.config.gridInfo=Object.assign({},t,{key:void 0,user:void 0}),tt.info("on get grid info",{gridInfo:r.config.gridInfo})}reportTestStatus(e,t,r,n){let{name:o,testId:i,testStatus:a}=r,{resultId:c,success:l}=t;if(a===Ve.EVALUATING&&Rt.isTestStatusEnabled){Z.onTestIgnored(e,r,`test in ${Ve.EVALUATING} status`);return}if(l){Z.onTestPassed(o);return}Z.onTestFailed(r,r.failureReason,st(this.options.editorUrl,this.options.project,i,c,this.branchToUse),i,n,c)}calcResultText(e){return e.success?pe.PASSED:pe.FAILED}onTestIgnored(e,t){let r=this.getTestResult(t);Z.onTestIgnored(e,r,`test in ${Ve.QUARANTINE}`)}testEnd(e,t,r,n,o){let i=this.getTestResult(t.resultId),a=t.endTime-t.startTime||0;i.sessionId=n,i.startTime=t.startTime||i.startTime||Date.now(),i.duration=a,t.duration=a,i.failureReason=t.failureReason||t.reason,t.failureReason=i.failureReason,i.failurePath=t.failurePath,i.resultId=t.resultId,i.success=t.success,this.options.saveRCALocally&&Tu(i,tt),i.resultUrl=st(this.options.editorUrl,this.options.project,i.testId,i.resultId,this.branchToUse),i.status=this.calcResultText(t),t.status=i.status,t.name=i.name,t.testStatus=i.testStatus,t.testId||(t.testId=i.testId),t.testCreatorName=i.testCreatorName,t.testCreatorEmail=i.testCreatorEmail,t.testOwnerName=i.testOwnerName,t.testOwnerEmail=i.testOwnerEmail,t.testData=i.config&&typeof i.config.testDataTotal=="number"?{total:i.config.testDataTotal,index:i.config.testDataIndex}:{},this.reportTestStatus(e,t,i,o);let c=this.options.files.length>0;Z.onTestFinished(i,e,o,c);let l=Object.assign({},this.exportsGlobal,t.exportsGlobal);return this.exportsGlobal=l,i}async testEndReport(e,t,r,n){var i;let o=r.exportsGlobal;try{try{await vi(this.options.afterTest,Object.assign({},e,{exportsGlobal:o,globalParameters:o}),this.options.userData.loginData.token)}catch(a){tt.error("HOOK threw an error",{test:e.testId,err:a}),console.error("HOOK threw an error",a)}return(i=this.options.lightweightMode)!=null&&i.onlyTestIdsNoSuite?void 0:await us(this.options.project,t,e.testId,e.resultId,"FINISHED",{startTime:e.startTime,endTime:r.endTime,success:e.success,failureReason:e.failureReason,remoteRunId:this.options.remoteRunId,...n},5)}catch(a){throw tt.error("Failed to update test finished",{err:a}),a}}testEndAndReport(e,t,r,n,o,i){let a=this.testEnd(e,t,r,n,o);return this.testEndReport(a,r,t,i)}calcTestRunStatus(){let{options:e,testInfoList:t}=this,r=e.company.companyId,n=t.map(o=>{var c,l,d,m;let i=e.browser?on(e.browser,e.saucelabs,e.browserstack):o.runConfig;if(i&&U.flags.dec2022eolBrowsers.isEnabled()&&((c=nn(i.browserValue))!=null&&c.eol))throw new R(`Unsupported Browser: ${i.browserName}`);let a={testId:o.testId,status:He(o,e)?pe.SKIPPED:pe.QUEUED,name:o.name,resultId:o.resultId,isTestsContainer:o.isTestsContainer,testStatus:o.testStatus||Ve.DRAFT,testCreatorName:o.creatorName,testCreatorEmail:o.creatorEmail,testOwnerName:o.testOwnerName,testOwnerEmail:o.testOwnerEmail,testLabels:o.testLabels,testSuites:o.testSuites,allLabels:o.allLabels,config:Object.assign({},this.execConfig,{companyId:r,testData:((l=o.testData)==null?void 0:l.value)||null,isBeforeTestPlan:o.isBeforeTestPlan,isAfterTestPlan:o.isAfterTestPlan,testDataTotal:((d=o.testData)==null?void 0:d.total)||null,testDataIndex:((m=o.testData)==null?void 0:m.index)||null,baseUrl:e.baseUrl||o.baseUrl||o.testConfig.baseUrl,testConfig:o.overrideTestConfig||o.testConfig,browser:i.browserValue.toLowerCase()})};return[o.resultId,a]});return Object.fromEntries(n)}async executionStart(e,t,r,n,o){tt.info("execution started",{executionId:e});let{options:i}=this,{remoteRunId:a,projectData:c}=i;ds(()=>Promise.all([In.end(t),Do("ABORTED",e,t,!1,void 0,a,void 0)])),this.startTime=r||Date.now();let l={projectId:t,executionId:e,...U.flags.testNamesToBeforeSuiteHook.isEnabled()&&{testNames:o}},d=await vi(i.beforeSuite,l),m=new Ti(d,Dr.cloneDeep(this.testInfoList),t);this.testInfoList=m.overrideTestData(),this.testRunStatus=this.calcTestRunStatus(),this.beforeSuiteParams=d;let{testInfoList:p}=this,f=[],h=[],g=[];for(let w of p){if(w.isBeforeTestPlan){f.push(w);continue}if(w.isAfterTestPlan){g.push(w);continue}h.push(w)}let y=async()=>{let w=Dr.cloneDeep(this.testRunStatus);await de(Object.keys(w),async I=>{var P;let k=w[I],D=(P=k.config)==null?void 0:P.testData,S=k.testId,_=await Uo(t,S,I,D,c.defaults);_&&(delete k.config.testData,k.config.testDataUrl=_)});let C=Boolean(i.useLocalChromeDriver||i.useChromeLauncher),b={executionId:e,projectId:t,labels:n||[],startTime:r,executions:w,config:this.execConfig,resultLabels:i.resultLabels,remoteRunId:i.remoteRunId,localRunUserId:i.user,isLocalRun:C,intersections:i.intersections},v=Qc(b);return this.executionStartedPromise=v,v.catch(I=>tt.error(I)),v};try{await y()}catch(w){tt.error("Failed to start suite",{err:w}),console.error("Failed to start test run. Please contact support@testim.io")}return{beforeTests:f,tests:h,afterTests:g}}concatSeleniumPerfMarks(e){Dr.chain(e).keys().each(t=>{let r=t;this.seleniumPerfStats.marks[r]&&(this.seleniumPerfStats.marks[r]=[...this.seleniumPerfStats.marks[r],...e[r]])}).value()}async executionEnd(e){var d;let t=Cc(this.testRunStatus),r=t.length,n=0,o=0,i=0;for(let{status:m,testStatus:p}of t)m===pe.PASSED&&n++,m===pe.SKIPPED&&o++,m===pe.FAILED&&p===Ve.EVALUATING&&i++;let{seleniumPerfMarks:a,...c}=this.seleniumPerfStats.getStats();try{await vi(this.options.afterSuite,{exportsGlobal:this.exportsGlobal,tests:t,total:r,passed:n,skipped:o})}catch(m){console.log("check your callback handler on afterSuite Hook for syntax or exception errors"),tt.warn("error while running afterSuite Hook",{err:m,projectId:this.options.projectData.projectId,executionId:this.options.executionId})}let l=await Th(this.options,this.branchToUse,r,e);if(Object.assign(c,{coverageSummary:l}),!((d=this.options.lightweightMode)!=null&&d.onlyTestIdsNoSuite))try{return await Do("FINISHED",e,this.options.project,r===n+o+i,{tmsSuppressReporting:this.options.tmsSuppressReporting,tmsRunId:this.options.tmsRunId,tmsCustomFields:this.options.tmsCustomFields},this.options.remoteRunId,c)}catch(m){throw tt.error("Failed to update suite finished",{err:m}),m}}async markAllQueuedTests(e,t,r,n){let o=Object.keys(this.testRunStatus).filter(i=>this.getTestResult(i).status==="QUEUED");await Yc(e,["QUEUED"],t,r,n,this.startTime,null,this.options.project);for(let i of o){let a=this.getTestResult(i);a.status=t,a.failureReason=r,a.success=n}return this.testRunStatus}}});var Ri={};$(Ri,{buildAppiumOptions:()=>Cu,buildSeleniumOptions:()=>Pu});function ZE(s,e){let t={browserName:"safari",...e==="safari technology preview"&&{"safari.options":{technologyPreview:!0}}};return Object.assign(s.desiredCapabilities,t),s}function xu(s){return _h.readFileSync(s,{encoding:"base64"})}function Nh(s,e,t){if(!(t!=null&&t.isLambdatestRun()&&Be(s))&&s){let r=xu(s);On.info(`adding extension: custom, path: ${s} length: ${r.length} hash: ${Iu(r)} current extension count: ${e.length}`),e.push(r)}}function Dh(s,e,t,r,n){if(n!=null&&n.isLambdatestRun())return;if(s.ext||r){let c=typeof s.ext=="string"?s.ext:`${__dirname}/..`,l=r||c,d=`--load-extension=${l}`;On.info(`adding extension: testim unpacked , path: ${l}`),t.push(d);return}let o=s.canary?"-master.zip":".zip",i=Ru.join(process.cwd(),`testim-headless${o}`),a=xu(i);On.info(`adding extension: testim zipped, path: ${i} length: ${a.length} hash: ${Iu(a)} current extension count: ${e.length}`),e.push(a)}function eS(s,e,t,r,n,o,i){var g,y;let a=t.seleniumName||t.browserValue,c=[],l=[...Lh];e.headless&&l.push("--headless");let d=()=>e.mode!==Q.EXTENSION,m={prefs:{"profile.default_content_setting_values.popups":Su.CONTENT_SETTING_ALLOW,"profile.default_content_setting_values.automatic_downloads":Su.CONTENT_SETTING_ALLOW,"plugins.always_open_pdf_externally":!0,"safebrowsing.enabled":!0,"profile.content_settings.exceptions.clipboard":{"[*.],*":{last_modified:Date.now(),setting:1}},"download.allow_office_viewer_for_download":!1},w3c:d()};Si(n)&&(m.prefs["download.default_directory"]="C:\\Users\\testnode",m.w3c=!0,s.desiredCapabilities.version="latest-1",s.desiredCapabilities["aws:maxDurationSecs"]=2400,s.desiredCapabilities["aws:idleTimeoutSecs"]=60),Si(n)&&a==="MicrosoftEdge"&&(s.desiredCapabilities["ms:edgeChromium"]=!0),e.chromeExtraPrefs&&Object.assign(m.prefs,e.chromeExtraPrefs),e.chromeExtraArgs&&e.chromeExtraArgs.forEach(w=>l.push(`--${w}`)),e.chromeBlockLocation&&(m.prefs["profile.default_content_setting_values.geolocation"]=Su.CONTENT_SETTING_BLOCK),e.chromeUserDataDir&&l.push(`--user-data-dir=${e.chromeUserDataDir}`),(y=(g=e.projectData)==null?void 0:g.defaults)!=null&&y.disableChromiumGpu&&l.push("--disable-gpu"),Object.assign(s.desiredCapabilities,{browserName:a});function p(){t.mobileEmulation&&(m.mobileEmulation={deviceMetrics:{width:t.mobileEmulation.device.width,height:t.mobileEmulation.device.height+Ec.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,pixelRatio:t.mobileEmulation.device.deviceScaleFactor},userAgent:t.mobileEmulation.userAgent})}p(),Nh(r,c,i),e.mode===Q.EXTENSION&&Dh(e,c,l,o,i),c.length>0&&(m.extensions=c),e.disableCookiesSameSiteNoneRequiresSecure&&(m.localState={"browser.enabled_labs_experiments":["cookies-without-same-site-must-be-secure@2"]}),m.args=l;let f={MicrosoftEdge:"edgeOptions",chrome:"chromeOptions"}[a],h={MicrosoftEdge:"ms",chrome:"goog"}[a];return te.isLambdatestGrid(n)&&delete m.w3c,e.oldCapabilities&&n.type!=="testimEnterprise"&&!(i!=null&&i.isLambdatestRun())&&(s.desiredCapabilities[f]=m),(e.w3cCapabilities||n.type==="testimEnterprise")&&(s.desiredCapabilities[`${h}:${f}`]=m),s}function rS(s,e,t){let r={"pdfjs.disabled":!0};if(U.flags.autoSaveDownloadFileFireFox.isEnabled()&&Object.assign(r,{"browser.helperApps.neverAsk.saveToDisk":kh.join(","),"browser.helperApps.neverAsk.openFile":kh.join(","),"browser.helperApps.alwaysAsk.force":!1,"browser.download.manager.useWindow":!1,"browser.download.manager.focusWhenStarting":!1,"browser.download.manager.alertOnEXEOpen":!1,"browser.download.manager.showWhenStarting":!1,"browser.download.manager.closeWhenDone":!0,"browser.download.manager.showAlertOnComplete":!1}),Object.assign(s.desiredCapabilities,{acceptInsecureCerts:!0,browserName:"firefox",marionette:!0,"moz:firefoxOptions":{prefs:r}},t!=null&&t.isLambdatestRun()?{enableCustomTranslation:!0}:{}),e.disableCookiesSameSiteNoneRequiresSecure&&(s.desiredCapabilities["moz:firefoxOptions"].prefs["network.cookie.sameSite.noneRequiresSecure"]=!1),e.mode===Q.EXTENSION)if(e.ext)s.desiredCapabilities.testim_firefox_profile=e.ext;else{let n=e.canary?"-master.zip":".zip",o=Ru.join(process.cwd(),`testim-firefox-profile${n}`);s.desiredCapabilities.firefox_profile=xu(o)}return e.headless&&(s.desiredCapabilities["moz:firefoxOptions"].args||(s.desiredCapabilities["moz:firefoxOptions"].args=[]),s.desiredCapabilities["moz:firefoxOptions"].args.push("-headless")),s}function sS(s,e,t){let{saucelabs:r}=s;return r!=null&&r.username&&r.accessKey?t?(t.sl.version=t.browserValue==="safari"?t.sl.safari_version:t.sl.version,t.sl.appiumVersion=r.appiumVersion||t.sl.appiumVersion,Object.assign({},t.sl,r,{name:e})):Object.assign({},r,{name:e}):{}}function nS(s,e,t){return ht.isEmpty(s.browserstack)?{}:t?(t.bs.browser_version=t.browserValue==="safari"?t.bs.safari_version:t.bs.browser_version,t.browserValue==="safari"&&t.bs.safari_version==="10"&&Object.assign(t.bs,{"safari.options":{technologyPreview:!0}}),Object.assign({},t.bs,s.browserstack,{name:e})):Object.assign({},s.browserstack,{name:e})}function oS(s){return s.perfecto?s.perfecto:{}}function iS(s,e,t){if(s.experitestToken){let r=e==="safari";return{accessKey:s.experitestToken,browserVersion:"latest",platformName:r?"MAC":"WIN10",seleniumScreenshot:r,newSessionWaitTimeout:t}}return{}}function aS(s,e={}){let{gridData:t={},gridUsername:r,gridPassword:n}=s,o=r||t.user||e.user,i=n||t.key||e.key,a={};return o&&i&&(a.Authorization=$a(o,i)),a}function Pu(s,e,t,r,n,o,i,a=null){var g,y,w,C,b,v;if(r.mode==="local"){let I=[],k=[...Lh],D={};return s.headless&&k.push("--headless"),s.silentDebuggerExtensionApi&&k.push("--silent-debugger-extension-api"),s.remoteDebuggingPort!==void 0&&k.push(`--remote-debugging-port=${s.remoteDebuggingPort}`),s.chromeExtraArgs&&s.chromeExtraArgs.forEach(S=>k.push(`--${S}`)),s.chromeBinaryLocation&&(D.binary=s.chromeBinaryLocation),s.mode!=="selenium"&&Dh(s,I,k,null,a),Nh(n,I,a),{logLevel:Ah,desiredCapabilities:{chromeOptions:{args:k,extensions:I,...D},browserName:"chrome"},host:"localhost",port:9515}}let{driverRequestTimeout:c,driverRequestRetries:l}=s,d=aS(s,r),m={host:r.host,port:r.port||4444,path:r.path||"/wd/hub",protocol:r.protocol||"http",logLevel:Ah,connectionRetryTimeout:c,connectionRetryCount:l,getSessionTimeout:Math.max(a.getSessionTimeout,s.getSessionTimeout),getSessionRetries:a.getSessionRetries||s.getSessionRetries,deprecationWarnings:!1,desiredCapabilities:{javascriptEnabled:!0,locationContextEnabled:!0,handlesAlerts:!0,rotatable:!0,acceptSslCerts:!0,unexpectedAlertBehaviour:"accept",nativeEvents:!0,testName:e},...!ht.isEmpty(d)&&{headers:d},...s.proxyForGrid&&{agent:global.ProxyAgent(global.proxyUri)}};Si(r)&&(s.oldCapabilities=!1,s.w3cCapabilities=!0,m.desiredCapabilities={unexpectedAlertBehaviour:"accept"}),s.disableNativeEvents&&(m.desiredCapabilities.nativeEvents=!1),r.user&&r.key&&(r.type==="saucelabs"&&(s.saucelabs||(s.saucelabs={}),(g=s.saucelabs).username||(g.username=r.user),(y=s.saucelabs).accessKey||(y.accessKey=r.key)),r.type==="browserstack"&&(s.browserstack||(s.browserstack={}),(w=s.browserstack)["browserstack.user"]||(w["browserstack.user"]=r.user),(C=s.browserstack)["browserstack.key"]||(C["browserstack.key"]=r.key))),r.key&&r.type==="perfecto"&&(s.perfecto.securityToken=r.key);let p=Number(s.browserTimeout/1e3),f=s.browser||(t==null?void 0:t.browserValue);ht.merge(m.desiredCapabilities,sS(s,e,t),nS(s,e,t),oS(s),iS(s,f,p),a==null?void 0:a.getCapabilities(s,f,o,i,e));let h=null;switch(!s.ext&&!s.extensionPath&&((b=r.host)!=null&&b.endsWith(".testim.io"))&&!s.canary&&s.mode===Q.EXTENSION&&(f==="chrome"?h="/opt/testim-headless":f==="edge-chromium"&&(h="C:/selenium/testim-headless")),(v=r.host)!=null&&v.endsWith(".testim.io")&&f==="edge-chromium"&&(m.desiredCapabilities.version="83"),f){case"chrome":case"edge-chromium":m=tS(m,s,t,n,r,h,a);break;case"firefox":m=rS(m,s,a);break;case"safari":case"safari technology preview":m=ZE(m,f);break;default:break}ht.merge(m.desiredCapabilities,s.seleniumCapsFileContent);try{let I={"hub.lambdatest.com":"lambdatest",[U.flags.publicGridURL.getValue()]:"testim","testgrid-devicefarm.us-west-2.amazonaws.com":"devicefarm"},k=P=>P[r.provider]||P[m.host]||P[I[m.host]],D=P=>{var L,B;return k(P)||P[(L=m.desiredCapabilities)==null?void 0:L.browserName]||P[(B=m.desiredCapabilities)==null?void 0:B.version]||P||{}},S=JSON.parse(U.flags.addCustomCapabilities.getValue()||"{}"),_=D(D(S));Object.keys(_).length&&(On.info(`Adding custom capabilities: ${JSON.stringify(_)}`),Object.assign(m.desiredCapabilities,_))}catch(I){On.error("Failed to load custom capabilities",{error:I,customCapabilities:U.flags.addCustomCapabilities.getValue()})}return Si(r)&&m.desiredCapabilities&&!m.capabilities&&(QE(m.desiredCapabilities),m.capabilities={alwaysMatch:m.desiredCapabilities,firstMatch:[{}]},delete m.desiredCapabilities),m}function Cu({projectType:s,gridInfo:e,nativeApp:t,options:r,appPath:n,androidActivityWait:o}){let{deviceModel:i,osVersion:a,deviceUdid:c,fullReset:l,resetAppData:d,resetOnSessionStartOnly:m}=r,p={};if(!t&&!n)throw Error("missing mobile app!");if(e.type!==ue.TESTIM_HEADSPIN)throw Error("unsupported grid was detected please make sure to select supported mobile grid");let f={protocol:e.protocol||"https",hostname:e.host,port:e.port,path:`/v0/${e.accessToken}/wd/hub`,logLevel:r.appiumLogLevel},h={"headspin:capture":!0,...!l&&!d&&{"appium:noReset":!0},...!l&&d&&{"appium:noReset":!1}};switch(s){case"ios":h={...h,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest",...l&&{"appium:fullReset":l,"appium:resetOnSessionStartOnly":m},...t&&{"appium:bundleId":t.id},...n&&{"appium:app":n}};break;case"android":h={...h,platformName:"Android",...l&&{"appium:fullReset":l},...!l&&d&&{"appium:autoGrantPermissions":!0},"appium:automationName":"UiAutomator2","appium:appWaitActivity":o,...t&&{"appium:appPackage":t.id||t.packageName,"appium:appActivity":t.activity},...n&&{"appium:app":n}};break;default:throw Error(`unsupported mobile project ${s}`)}return i&&(p.model=i),a&&(p.os_version=a),c&&(p.device_id=c,delete p.model,delete p.os_version),ht.isEmpty(p)||(h["headspin:selector"]=p),{...f,desiredCapabilities:h,capabilities:h}}var _h,Ru,Oh,ht,On,Ah,Su,Lh,Iu,Si,QE,tS,kh,Ii=T(()=>{"use strict";_h=E(require("fs")),Ru=E(require("path")),Oh=E(require("crypto")),ht=E(require("lodash"));F();le();j();be();ae();ri();On=x("testim-desired-capabilities-builder"),Ah=zs?"verbose":"silent",Su={CONTENT_SETTING_DEFAULT:0,CONTENT_SETTING_ALLOW:1,CONTENT_SETTING_BLOCK:2,CONTENT_SETTING_ASK:3},Lh=["--disable-popup-blocking","--ignore-gpu-blacklist","--auto-select-desktop-capture-source=Entire screen","--ignore-certificate-errors","--disable-features=TranslateUI","--disable-background-networking","--disable-sync","--metrics-recording-only","--disable-default-apps","--mute-audio","--no-first-run","--disable-back-forward-cache"],Iu=(...s)=>Oh.createHash("sha256").update(s.join("")).digest("hex"),Si=s=>s.type===ue.DEVICE_FARM||s.type===ue.HYBRID&&s.provider==="devicefarm",QE=s=>{Object.prototype.hasOwnProperty.call(s,"version")&&(s.browserVersion=s.version,delete s.version),Object.prototype.hasOwnProperty.call(s,"platform")&&(s.platformName=s.platform,delete s.platform),Object.prototype.hasOwnProperty.call(s,"acceptSslCerts")&&(s.acceptInsecurecerts=s.acceptSslCerts,delete s.acceptSslCerts),Object.prototype.hasOwnProperty.call(s,"unexpectedAlertBehaviour")&&(s.unhandledPromptBehavior=s.unexpectedAlertBehaviour,delete s.unexpectedAlertBehaviour)};tS=ht.memoize(eS,(s,e,t,r,n,o)=>{let i=JSON.stringify(s.desiredCapabilities),a=JSON.stringify(ht.omit(e,"runParams")),c=JSON.stringify(t),l=JSON.stringify(n.type);return Iu(i,a,c,r,l,o)}),kh=["application/force-download","application/pdf","application/x-pdf","application/acrobat","applications/vnd.pdf","text/pdf","text/x-pdf","application/vnd.cups-pdf"]});var Uh={};$(Uh,{isElementDisplayed:()=>Mh});function Mh(s){function e(p){return p?[Node.ELEMENT_NODE,Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE].includes(p.nodeType):!1}function t(p){return p?r(p.parentNode,e):null}function r(p,f){for(let h=p;h&&h!==p.ownerDocument;h=h.parentNode)if(f(h))return h;return null}function n(p,f){for(let h=p;h&&h!==p.ownerDocument;h=t(h))if(f(h))return h;return null}function o(p,f){if(!p||!f)return null;p instanceof DocumentFragment&&(p=p.host);let g=window.getComputedStyle(p).getPropertyValue(f);if(g&&g!=="inherit")return g;let y=t(p);return o(y,f)}function i(p){let f=p.getBoundingClientRect();if(f.width>0&&f.height>0)return!0;if(p.tagName.toUpperCase()==="PATH"&&f.width+f.height>0){let g=o(p,"stroke-width");return!!g&&parseInt(g,10)>0}return o(p,"overflow")==="hidden"?!1:Array.from(p.childNodes).some(g=>g.nodeType===Node.TEXT_NODE?!0:e(g)?i(g):!1)}function a(p){return o(p,"overflow")==="hidden"}function c(p){return!p||!a(p)||!p.childNodes.length?!1:Array.from(p.childNodes).every(f=>f.nodeType===Node.TEXT_NODE?!1:!e(f)||!i(f)?!0:c(f))}function l(p){var f;return p?(f=p.parentNode)!=null&&f.host?!0:l(p.parentNode):!1}if(!s||!l(s)&&!document.contains(s))return!1;switch(s.tagName.toUpperCase()){case"BODY":return!0;case"SCRIPT":case"NOSCRIPT":return!1;case"OPTGROUP":case"OPTION":{let p=r(s,f=>f.tagName.toUpperCase()==="SELECT");return Mh(p)}case"INPUT":if(s.type==="hidden")return!1;break;default:break}if(o(s,"visibility")!=="visible")return!1;let d=!!n(s,p=>Number(o(p,"opacity"))===0),m=!!n(s,p=>o(p,"display")==="none");return!(d||m||!i(s)||c(s))}var Fh=T(()=>{"use strict"});var Au={};$(Au,{encodeForSafari:()=>lS,isOldProtocol:()=>cS});function cS(s){var e,t,r,n,o,i,a;return((e=s.message)==null?void 0:e.match(/Command not found/))||s.message==="HTTP method not allowed"||s.message==="Unknown error"||((t=s.message)==null?void 0:t.match(/Unknown timeout type/))||((r=s.seleniumStack)==null?void 0:r.type)==="UnknownCommand"||((n=s.message)==null?void 0:n.match(/did not match a known command/))||((o=s.message)==null?void 0:o.match(/Server returned HTTP response code: 405 for URL/))||((i=s.seleniumStack)==null?void 0:i.message)==="The arguments passed to a command are either invalid or malformed."||((a=s.message)==null?void 0:a.match(/Invalid timeout type specified: ms/))}function lS(s,e,t){if(!e||!s)return s;if(s.includes("%"))return s.replace(/ /g,"%20");try{return decodeURI(s)!==s?s:encodeURI(s)}catch(r){return t&&t.warn("tried to encode url but failed",{err:r,url:s}),s}}var ku=T(()=>{"use strict"});var Gh=Kd((EC,Wh)=>{"use strict";var $h=require("promise-queue"),jh=(le(),G(xe)),uS=require("@testim/webdriverio"),_u=(Le(),G(Oe)),{extractElementId:Ln}=(F(),G(H)),{getLogger:dS}=(j(),G(Js)),{UNICODE_CHARACTERS:Bh,W3C_ELEMENT_ID:pS}=(Yr(),G(Ba)),{isElementDisplayed:mS}=(Fh(),G(Uh)),{isOldProtocol:Mr,encodeForSafari:fS}=(ku(),G(Au)),{SELENIUM_PERF_MARKS:Es}=(Ts(),G(bi)),xi=dS("WebDriverApi");$h.configure(Promise);var hS=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},Ou=class{constructor(){this.w3cRequests={}}windowHandleMaximize(){return this.addToQueue(()=>this.client.windowHandleMaximize().then(e=>({height:e.value.height,width:e.value.width})))}rejectWithLog(e,t){let{testName:r,testResultId:n}=this,o=t?t.toString().substr(0,2e3):"";return xi.warn("error from selenium",{err:e,testResultId:n,testName:r,crashingFunc:o}),Promise.reject(e)}initQueueRequests(){let e=1/0;this.isAndroid()&&(e=1),typeof jh.REQUESTS_QUEUE_SIZE<"u"&&(e=jh.REQUESTS_QUEUE_SIZE);let t=1/0;this.queue=new $h(e,t)}addToQueue(e){let t=this.seleniumPerfStats.markStart();return this.queue.add(e).catch(r=>this.rejectWithLog(r,e)).finally(()=>this.seleniumPerfStats.markEnd(t))}async initClient(e,t,r){this.testName=t,this.testResultId=r,e.deprecationWarnings=!1,this.client=uS.remote(e),this.initQueueRequests(),_u.log("right before addToQueue");let n=this.seleniumPerfStats.markStart(Es.GET_BROWSER);try{await this.addToQueue(()=>(xi.info("requesting browser",{testResultId:r,testName:t}),_u.log("before this.client.init"),this.client.init())),_u.log("after client init")}finally{await this.seleniumPerfStats.markEnd(n,Es.GET_BROWSER)}}get isMobile(){return this.client.isMobile}getSessionId(){var e,t;return(t=(e=this.client)==null?void 0:e.requestHandler)==null?void 0:t.sessionID}isChrome(){return this.client.desiredCapabilities.browserName==="chrome"}isChromium(){return this.isChrome()||this.isEdgeChromium()}isFirefox(){return this.client.desiredCapabilities.browserName==="firefox"}isSafari(){return this.client.desiredCapabilities.browserName==="safari"||this.client.desiredCapabilities.browserName==="safari technology preview"}isAndroid(){return this.client.desiredCapabilities.platformName==="Android"}isEdgeChromium(){return this.client.desiredCapabilities.browserName==="MicrosoftEdge"&&!this.client.desiredCapabilities._isOldEdge}execute(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=i=>{throw i.executedScript=t,i},n=()=>this.client.requestHandler.create("/session/:sessionId/execute/sync",{script:t,args:e}).catch(r),o=()=>this.client.requestHandler.create("/session/:sessionId/execute",{script:t,args:e}).catch(r);return this.w3cRequests.execute?n():o().catch(i=>{if(Mr(i))return this.w3cRequests.execute=!0,n();throw i})})}executeAsync(...e){return this.addToQueue(()=>{let t=e.shift();if(typeof t!="string"&&typeof t!="function")return Promise.reject(new Error("number or type of arguments don't agree with execute protocol command"));typeof t=="function"&&(t=`return (${t}).apply(null, arguments)`);let r=()=>this.client.requestHandler.create("/session/:sessionId/execute/async",{script:t,args:e}),n=()=>this.client.requestHandler.create("/session/:sessionId/execute_async",{script:t,args:e});return this.w3cRequests.executeAsync?r():n().catch(o=>{if(Mr(o))return this.w3cRequests.executeAsync=!0,r();throw o})})}async executeCDP(e,t={}){var n;if(!this.isChromium())return;let r=await this.client.requestHandler.create({path:"/session/:sessionId/chromium/send_command_and_get_result",method:"POST"},{cmd:e,params:t});return(n=r==null?void 0:r.value)!=null&&n.targetInfos?r.value.targetInfos:[]}takeScreenshot(){let e=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.screenshot()).finally(()=>this.seleniumPerfStats.markEnd(e,Es.GET_SCREENSHOT))}takeElementScreenshot(e){let t=this.seleniumPerfStats.markStart(Es.GET_SCREENSHOT);return this.addToQueue(()=>this.client.elementIdScreenshot(Ln(e))).finally(()=>this.seleniumPerfStats.markEnd(t,Es.GET_SCREENSHOT))}getElementBySelector(e){return this.addToQueue(()=>this.client.element(e))}elementIdDisplayed(e){return this.addToQueue(()=>{let t=()=>this.client.elementIdDisplayed(e),r=()=>this.execute(mS,{ELEMENT:e,[pS]:e});return this.w3cRequests.elementIdDisplayed?r():t().catch(n=>{if(Mr(n))return this.w3cRequests.elementIdDisplayed=!0,r();throw n})})}windowHandles(){return this.addToQueue(()=>{let e=()=>this.client.requestHandler.create("/session/:sessionId/window_handles"),t=()=>this.client.requestHandler.create("/session/:sessionId/window/handles");return this.w3cRequests.windowHandles?t():e().catch(r=>{if(Mr(r))return this.w3cRequests.windowHandles=!0,t();throw r})})}url(e){return this.addToQueue(()=>this.client.url(fS(e,this.isSafari(),xi)))}reloadTab(){return this.addToQueue(()=>this.client.refresh())}source(){return this.addToQueue(()=>this.client.source())}timeouts(e,t){return this.addToQueue(()=>{let r=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{type:e,ms:t}),n=()=>this.client.requestHandler.create("/session/:sessionId/timeouts",{[e]:t});return this.w3cRequests.timeouts?n():r().catch(o=>{if(Mr(o))return this.w3cRequests.timeouts=!0,n();throw o})})}scroll(e,t){e=typeof e=="number"?e:0,t=typeof t=="number"?t:0;let r=function(n,o){window.scrollTo(n,o)};return this.execute(r,e,t)}setValue(e,t){return this.elementIdClear(Ln(e)).then(()=>this.elementIdValue(Ln(e),t))}getViewportSize(e){return this.execute(hS).then(t=>typeof e=="string"&&e.match(/(width|height)/)?(e=`screen${e.slice(0,1).toUpperCase()}${e.slice(1)}`,t.value[e]):{width:t.value.screenWidth||0,height:t.value.screenHeight||0})}keys(e){let t=i=>Bh.hasOwnProperty(i)?[Bh[i]]:i.split(""),r=[];if(typeof e=="string")r=t(e);else if(e instanceof Array)for(let i of e)r=r.concat(t(i));else return Promise.reject(new Error("number or type of arguments don't agree with keys protocol command"));let n=()=>this.client.requestHandler.create("/session/:sessionId/keys",{value:r}),o=()=>{let i=r.map(c=>({type:"keyDown",value:c})),a=r.map(c=>({type:"keyUp",value:c}));return this.actions([{type:"key",id:"keys",actions:[...i,...a]}])};return this.w3cRequests.keys?o():this.addToQueue(()=>n().catch(i=>{if(Mr(i))return this.w3cRequests.keys=!0,o();throw i}))}elementIdValue(e,t){return this.addToQueue(()=>this.client.elementIdValue(e,t))}elementIdClear(e){return this.addToQueue(()=>this.client.elementIdClear(e))}submitForm(e){return this.addToQueue(()=>this.client.submit(Ln(e)))}buttonPress(e){return this.addToQueue(()=>this.client.buttonPress(e))}findElementAndPress(e,t,r,n){return this.moveTo(Ln(e),t,r).then(()=>this.buttonPress(n))}rightClick(e,t,r){return this.findElementAndPress(e,t,r,"right")}leftClick(e,t,r){return this.findElementAndPress(e,t,r,"left")}elementIdClick(e){return this.addToQueue(()=>this.client.elementIdClick(e))}actions(e){return this.addToQueue(()=>this.client.actions(e))}doDoubleClick(){return this.addToQueue(()=>this.client.doDoubleClick())}dragAndDrop(e,t){return this.addToQueue(()=>this.client.dragAndDrop(e,t))}buttonDown(){return this.addToQueue(()=>this.client.buttonDown())}buttonUp(){return this.addToQueue(()=>this.client.buttonUp())}moveTo(e,t,r){let n={};return typeof t=="number"&&(n.xoffset=t),typeof r=="number"&&(n.yoffset=r),this.isSafari()&&!n.hasOwnProperty("yoffset")&&(n.yoffset=1),this.isSafari()&&!n.hasOwnProperty("xoffset")&&(n.xoffset=1),typeof e=="string"&&(n.element=e),this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/moveto",n))}uploadFile(e){return this.addToQueue(()=>this.client.uploadFile(e))}getUrl(){return this.addToQueue(()=>this.client.getUrl())}getTitle(){return this.addToQueue(()=>this.client.getTitle())}windowHandleSize(e="current",t){return this.addToQueue(()=>{let r={};typeof e=="object"&&([e,t]=["current",e]);let n={path:`/session/:sessionId/window/${e}/size`,method:"GET"};if(typeof t=="object"&&t.width&&t.height&&(n.method="POST",r={width:Math.abs(t.width),height:Math.abs(t.height)}),n.method==="POST"&&typeof r.width!="number"&&typeof r.height!="number")return Promise.reject(new Error("number or type of arguments don't agree with windowHandleSize protocol command"));let o=()=>this.client.requestHandler.create(n,r),i=()=>(n.path="/session/:sessionId/window/rect",this.client.requestHandler.create(n,r));return this.w3cRequests.windowHandleSize?i():o().catch(a=>{if(Mr(a))return this.w3cRequests.windowHandleSize=!0,i();throw a})})}setCookie(e,t,r,n,o,i,a){return this.addToQueue(()=>this.client.setCookie({name:e,value:t,domain:r,httpOnly:n,secure:o,path:i,expiry:a&&Math.floor(a)}))}getCookie(e){return this.addToQueue(()=>this.client.requestHandler.create("/session/:sessionId/cookie").then(t=>(t.value=t.value||[],typeof e=="string"?t.value.find(r=>r.name===e||r.name===encodeURIComponent(encodeURIComponent(e)))||null:t.value||(typeof e=="string"?null:[]))))}deleteCookie(e){return this.addToQueue(()=>this.client.deleteCookie(e))}isVisibleWithinViewport(e){return this.addToQueue(()=>this.client.isVisibleWithinViewport(e))}getCurrentTabId(){return this.addToQueue(()=>this.client.getCurrentTabId())}frame(e){return this.addToQueue(()=>this.client.frame(e))}switchTab(e){return this.addToQueue(()=>this.client.switchTab(e))}alertAccept(){return this.addToQueue(()=>this.client.alertAccept())}log(e="browser"){return this.addToQueue(()=>this.client.log(e))}end(){return this.w3cRequests={},this.queue?this.addToQueue(()=>this.client.end()):Promise.resolve()}forceEnd(){return this.w3cRequests={},this.client?this.client.end():Promise.resolve()}touchPerform(e){return this.addToQueue(()=>this.client.touchPerform(e))}touchAction(e){return this.addToQueue(()=>this.client.touchAction(e))}pressKeycode(e){return this.addToQueue(()=>this.client.pressKeycode(e))}setImmediateValue(e,t){return this.addToQueue(()=>this.client.setImmediateValue(e,t))}elementIdText(e){return this.addToQueue(()=>this.client.elementIdText(e)).then(t=>t.value)}isAppInstalled(e){return this.addToQueue(()=>this.client.isAppInstalled(e)).then(t=>{let r=!!t.value;return xi.info(`is app (${e}) installed? ${r}`,t),r})}launch(){return this.addToQueue(()=>this.client.launch())}context(e){return this.addToQueue(()=>this.client.context(e))}elementIdLocation(e){return this.addToQueue(()=>this.client.elementIdLocation(e))}};Wh.exports=Ou});var qh={};$(qh,{doubleClick:()=>gS});var gS,Vh=T(()=>{"use strict";gS=function(s,e){let t=["pointerup","pointerdown","pointermove"],r=getLocatedElement(s.locatedElement);if(!r)throw new Error("element not found");let n=s.events,o={status:"done",success:!0};window.__unloadNavigator=function(){e(o)};let i=function(p){function f(C,b,v){return v>C&&v<b}let h=p.pointerPosition||{},g=r.getBoundingClientRect(),y=h.originX&&f(g.left,g.left+g.width,h.originX)?h.originX:g.left+g.width/2,w=h.originY&&f(g.top,g.top+g.height,h.originY)?h.originY:g.top+g.height/2;return{x:y,y:w}},a=function(p,f){return{screenX:0,screenY:0,clientX:p,clientY:f,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,button:0,pointerType:"mouse",isPrimary:!0}},c=function(p,f,h){if(!window.PointerEvent)return;let g=a(f,h);return new window.PointerEvent(p,g)},l=function(p,f,h){let g=document.createEvent("MouseEvents");return g.initMouseEvent(p,!0,!0,document.defaultView,1,0,0,f,h,!1,!1,!1,!1,0,document.body?document.body.parentNode:document.documentElement),g},d=function(){var f;let p=document.activeElement;for(;(f=p.shadowRoot)!=null&&f.activeElement;)p=p.shadowRoot.activeElement;return p},m=function(p){let f=i(p),h=p.event;return t.includes(h)?c(h,f.x,f.y):l(h,f.x,f.y)};try{n.map(f=>m(f)).filter(Boolean).forEach(f=>r.dispatchEvent(f));let p=d();dispatchFocus(s.elementToFocusLocatedElement,p),window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e(o)}catch(p){window.__unloadNavigator&&(window.removeEventListener("unload",window.__unloadNavigator),window.__unloadNavigator=null),e({status:"done",result:p.toString(),success:!1})}}});var Hh={};$(Hh,{dispatchFocus:()=>Ss});function Ss(s,e){function t(o){let i=document.createEvent("HTMLEvents");return i.initEvent(o,!0,!1),i}function r(){var i;let o=document.activeElement;for(;(i=o.shadowRoot)!=null&&i.activeElement;)o=o.shadowRoot.activeElement;return o}function n(o,i){i&&(i.dispatchEvent(t("focusout")),i.dispatchEvent(t("blur"))),o.dispatchEvent(t("focusin")),o.dispatchEvent(t("focus")),typeof o.focus=="function"&&o.focus();let a=r();i&&a===i&&typeof i.blur=="function"&&i.blur()}if(s){let o=getLocatedElement(s);if(o&&o!==e)try{n(o,e)}catch{}}else e&&typeof e.blur=="function"&&e.blur()}var Pi=T(()=>{"use strict"});var Nn=Kd((SC,Kh)=>{"use strict";var Ur=require("lodash"),$e=(j(),G(Js)).getLogger("webdriver"),yS=require("ua-parser-js"),bS=(Ii(),G(Ri)),{SeleniumError:wS,SeleniumCrashError:TS}=(z(),G(uc)),Lu=(F(),G(H)),vS=Gh(),{doubleClick:ES}=(Vh(),G(qh)),{dispatchFocus:SS}=(Pi(),G(Hh)),{isOldProtocol:Fr}=(ku(),G(Au)),{featureFlagsService:RS}=(be(),G(Lf)),{W3C_ELEMENT_ID:IS}=(Yr(),G(Ba)),[er,xS]=[0,2],{extractElementId:It,getCdpAddressForHost:PS}=Lu,Ci=(Le(),G(Oe)),{SeleniumPerfStats:CS,SELENIUM_PERF_MARKS:jr}=(Ts(),G(bi)),tr=()=>(Ee(),G(_r)).getSessionPlayer().codeSnippets,AS=()=>(Ee(),G(_r)).getSessionPlayer().locatorBuilderUtils,zh=()=>(Ee(),G(_r)).getSessionPlayer().utils;async function kS(s){var e,t;try{let r=(t=(e=s==null?void 0:s.value)==null?void 0:e["goog:chromeOptions"])==null?void 0:t.debuggerAddress;return r?await PS(r):void 0}catch(r){$e.info("Error getting cdpAddress",r);return}}var Nu=class extends vS{constructor(){super(),this.started=!1,this.keepAliveTimer=null,this.unsupportedActions={},this._isAlive=!1,this._keepAliveRequests=[],this.cdpUrl=void 0,this.browserClosedCallbacks=[],this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=!1}registerToClosedBrowser(e){this.browserClosedCallbacks.push(e)}unregisterToClosedBrowser(e){this.browserClosedCallbacks=this.browserClosedCallbacks.filter(t=>t!==e)}async init(e,t,r,n,o,i,a,c=new CS,l=!1,d){var h,g,y,w,C;this.browserClosedFailedKeepAlives=0,this.ignoreHiddenTagsText=(y=(g=(h=e==null?void 0:e.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.ignoreHiddenTagsText,this.browserClosedCallbacks=[];let m=bS.buildSeleniumOptions(e,t,r,n,o,i,a,d);m.desiredCapabilities&&delete m.desiredCapabilities.marionette,m.capabilities&&delete m.capabilities.alwaysMatch.marionette,this.initUnsupportedActions(d==null?void 0:d.isLambdatestRun()),this.browserAndOS=null,this.seleniumPerfStats=c;let p=l?0:1500,f=l?()=>{}:()=>this.executeJS("window.focus()");try{Ci.log("before initClient in webdriver.js init");let b=await this.initClient(m,t,a);Ci.log("after initResult before getCdpAddress in init"),this.cdpUrl=await kS(b),Ci.log("after getCdpAddress in webdriver.js init"),$e.info(`init new session testName: ${t}`,{sessionId:this.getSessionId(),testResultId:a}),await Lu.delay(p),await f(),Ci.log("after focus and delay in webdriver.js init")}catch(b){if($e.error("failed to init webdriver",{err:b}),b.seleniumStack){let v=new wS(b.seleniumStack),I=((C=(w=e==null?void 0:e.company)==null?void 0:w.activePlan)==null?void 0:C.plan)==="free";throw v.message.includes("timed out waiting for a node")&&I?new Error("Our free grids are in full capacity, please try again or upgrade to our Professional plan"):v}throw new Error("failed to init client driver")}}initUnsupportedActions(e){e&&(this.unsupportedActions={...this.unsupportedActions,move:!0})}isAlive(){return this._isAlive}maxKeepAliveGap(){let e=n=>Ur.zip(Ur.dropRight(n,1),Ur.drop(n,1)),t=this._keepAliveRequests.map(({start:n})=>n).filter(Boolean),r=e(t).map(([n,o])=>o-n);return Math.max(...r)}isClosedBrowserError(e){return!e||!e.seleniumStack||!e.message?!1:e.seleniumStack.type==="UnknownError"&&(e.message.includes("CLIENT_STOPPED_SESSION")||e.message.includes("BROWSER_TIMEOUT")||e.message.includes("was terminated due to TIMEOUT"))||e.seleniumStack.type==="NoSuchWindow"&&e.message.includes("window was already closed")||e.seleniumStack.type==="SelectorTimeoutError"&&e.message.includes("chrome not reachable")}start(){if(this.started)return;this.started=!0;let e=this,t=function(){function r(a){e._keepAliveRequests.push({start:Date.now(),id:a})}function n(a,c){(e._keepAliveRequests.find(l=>l.id===c)||{})[a]=Date.now()}function o(){return window.getTestimStatus&&window.getTestimStatus()}if(e.queue.getQueueLength()>0)return Promise.resolve();let i=Lu.guid();return r(i),e.executeJS(o).then(()=>{e._isAlive=!0,n("end",i),e.browserClosedFailedKeepAlives=0}).catch(a=>{if(n("error",i),a.seleniumStack&&a.seleniumStack.type==="UnexpectedAlertOpen")return e.browserClosedFailedKeepAlives=0,$e.warn("close unexpected alert open"),e.alertAccept().catch(c=>$e.warn("failed to click on alert",{err:c}));if($e.warn("err while getting testim status",{err:a}),e._isAlive=!1,e.isClosedBrowserError(a)){e.browserClosedFailedKeepAlives++;let c=3;e.browserClosedFailedKeepAlives>=c&&e.browserClosedCallbacks.forEach(l=>{try{l(a)}catch{}})}else e.browserClosedFailedKeepAlives=0})};this.keepAliveTimer=setInterval(t,1e4)}switchToLocatedFrame(e){return this.getElement(e).then(async t=>{let r=It(t.value);return await this.switchToFrame({ELEMENT:r,[IS]:r}),t})}switchToFrame(e){return this.frame(e)}switchToTopFrame(){return this.frame().catch(e=>{var t;throw(t=e.message)!=null&&t.includes("ECONNREFUSED")?new TS:e})}getElement(e){let t=this.seleniumPerfStats.markStart(jr.GET_ELEMENT);return typeof e=="string"||typeof e=="number"?this.getElementBySelector(`[testim_dom_element_id='${e}']`).finally(()=>this.seleniumPerfStats.markEnd(t,jr.GET_ELEMENT)):e&&e.shadowPath&&e.shadowPath.length||RS.flags.runGetElementCodeInAut.isEnabled()&&this.isSafari()?this.execute(`
|
|
28
|
-
var fn = ${
|
|
25
|
+
${((A=n.warnings)==null?void 0:A.join(`
|
|
26
|
+
`))||""}`)}let i=(await(0,Cl.default)({type:"toggle",name:"isJs",message:"Add support for TypeScript?",initial:!0,active:"no",inactive:"yes"})).isJs?"template.js":"template.ts",a="codim",c=Xt.join(__dirname,a,i),l=Xt.join(process.cwd(),e),d=(0,Al.default)(`Creating new test project in ${l}`).start();await ao(c,l);let m=Xt.join(__dirname,a,i,"package.json"),p=Xt.join(process.cwd(),e,"package.json"),h=(await Qt.promises.readFile(m)).toString().replace("~testim-codeful-test-project~",s);await Qt.promises.writeFile(p,h);let g="node_modules",y=Xt.join(process.cwd(),e,".gitignore");await Qt.promises.writeFile(y,g),d.succeed(),d=(0,Al.default)("Installing dependencies").start(),await zT("npm install",{cwd:l}),d.succeed(),console.log(`Testim Dev Kit project folder successfully created in ${l}.`)}var Qt,Xt,$m,Al,zo,Cl,Wm,Gm,zT,qm=w(()=>{"use strict";Qt=E(require("fs")),Xt=E(require("path")),$m=E(require("child_process")),Al=E(require("ora")),zo=E(require("chalk")),Cl=E(require("prompts")),Wm=E(require("validate-npm-package-name")),Gm=require("util");q();ic();zT=(0,Gm.promisify)($m.exec)});var zm={};W(zm,{preloadTests:()=>bn});async function bn(r){if(!Array.isArray(r.testId)||!r.testId.length)return{};let e={branch:r.branch,projectId:r.project};return await ft(async()=>{let t=await de(r.testId,s=>Dc({...e,testId:s}),{concurrency:2});return Hm.keyBy(t,"testData.id")},"loadTests",JT,[e,r.testId])()}var Hm,JT,Ko=w(()=>{"use strict";Hm=E(require("lodash"));zt();Te();U();JT=1e3*60*60*10});function kl(){return ct()}async function Ym(){Le;return;try{let r=await te(XT(),5e3,"The API call to NPM timed out"),e=kl();e&&Jm.lt(e,r)&&console.log(Km.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(r){YT.warn("Failed to get NPM version",{err:r})}}var Km,Jm,YT,XT,_l=w(()=>{"use strict";Km=E(require("chalk")),Jm=E(require("semver"));U();le();sn();zt();j();YT=R("npm-driver"),XT=ft(()=>Fp("@testim/testim-cli"),"getNpmVersion")});var Ol,ZT,hs,Xm,Qm,Ll,Zm,ef=w(()=>{"use strict";U();q();j();yt();Ol=R("testimNgrok"),ZT=".whitelisted-ngrok.testim.io",hs="",Qm=async(r,e={})=>{if(!e.ngrokToken)throw new I("tunnel feature is not enabled, please contact support - info@testim.io.");let t;e.isNgrokWhitelisted&&(t=`${z()}-${r.projectData.projectId}${ZT}`);let s={proto:"http",addr:r.tunnelPort||80,authtoken:e.ngrokToken,hostname:t};r.tunnelHostHeader&&(s.host_header=r.tunnelHostHeader),r.tunnelRegion&&(s.region=r.tunnelRegion);let o=await(await he("ngrok")).connect(s);r.tunnelUseHttpAddress&&o.startsWith("https://")?(Ol.info("replace https to http"),hs=o.replace("https://","http://")):hs=o,r.tunnelDiagnostics&&Ll(),r.baseUrl=hs},Ll=async(r=!0)=>{try{let t=(await he("ngrok")).getApi(),{tunnels:s}=await t.listTunnels(),n=s.find(o=>o.public_url===hs);console.log("ngrok stats",n),Ol.info("ngrok stats",{tunnel:n})}catch(e){Ol.error("error collecting ngrok stats",{err:e})}r&&(Xm=setTimeout(()=>Ll(),1e4))},Zm=async r=>{if(!hs)return;clearTimeout(Xm),r.tunnelDiagnostics&&await Ll(!1),await(await he("ngrok")).disconnect(hs)}});var Zt,Dl,tf,tv,rv,Nl,Jo,Xo,Yo,sv,rf,sf,nf=w(()=>{"use strict";Zt=E(require("os")),Dl=E(require("fs")),tf=E(require("child_process"));U();Te();tv="https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/",rv={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"}},Nl=Zt.tmpdir(),Jo=`${Nl}/cloudflared`,Xo=null,Yo=null,sv=async()=>{if(await be(Jo))return;let e=rv[Zt.platform()+Zt.arch()];if(!e)throw new Error(`tunnel on ${Zt.platform()+Zt.arch()} platform is not supported.`);let t=e.extract?Nl+e.path:Jo;await ze(`${tv}/${e.path}`,t),e.extract&&await tt(t,Nl),await Dl.promises.chmod(Jo,"755")},rf=async r=>{let e=r.baseUrl||`http://localhost:${r.tunnelPort||80}`,t="tunnelRoutes"in r&&r.tunnelRoutes||[e],[s]=await Promise.all([nl(r.company.companyId,t),sv()]);Xo=s._id,Yo=tf.spawn(Jo,["tunnel","--no-autoupdate","run","--force","--token",s.token],{stdio:"inherit"}),await ol(r.company.companyId,Xo),"tunnelRoutesOutput"in r&&r.tunnelRoutesOutput&&await Dl.promises.writeFile(r.tunnelRoutesOutput,JSON.stringify(s.routesMapping,null,2)),r.baseUrl=`${r.tunnelUseHttpAddress?"http":"https"}://${s.routesMapping[e]}`},sf=async r=>{let e=[];return Xo&&e.push(il(r.company.companyId,Xo)),Yo&&e.push(new Promise((t,s)=>{Yo.on("close",n=>{n&&s(new Error(`tunnel process exited with code ${n}`)),t()}),Yo.kill()})),await Promise.all(e)}});var K,af,ov,iv,av,of,Qo,Ml,M,ye=w(()=>{"use strict";K=E(require("rox-node"));j();U();le();af=R("FeatureFlagsService"),ov=!Le&&!0&&!Vd,iv=2e4,av=60*60*24,of=["labs","disabled","enabled"],Qo=class extends K.default.Variant{constructor(e="disabled"){super(e,of)}getValue(){let e=super.getValue();return of.includes(e)?e:(af.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},Ml=class{constructor(){this.flags={useNewWSCLI:new K.default.Flag,useSafariWebdriverVisibilityChecks:new K.default.Flag,useClickimVisibilityChecks:new K.default.Flag,runGetElementCodeInAut:new K.default.Flag,enableFrameSwitchOptimization:new K.default.Flag,maximumJsResultSize:new K.default.Configuration(2e3*1024),skipFileInputClicks:new K.default.Flag,errorMessageOnBadNetwork:new K.default.Flag(!0),warnOnBadNetwork:new K.default.Flag(!1),overrideAzureStorageUrl:new K.default.Flag,useJsInputCodeInSafari:new K.default.Flag,useJsInputCodeInFirefox:new K.default.Flag,autoSaveDownloadFileFireFox:new K.default.Flag(!0),safariSelectOptionDispatchEventOnSelectElement:new K.default.Flag(!0),experimentalPreCodeCompilation:new K.default.Flag(!0),experimentalAsyncCustomCode:new K.default.Flag,useSameBrowserForMultiTests:new Qo("labs"),highSpeedMode:new Qo,usePortedHtml5DragDrop:new K.default.Flag,testNamesToBeforeSuiteHook:new K.default.Flag,addCustomCapabilities:new K.default.Variant("{}"),enableWorkerThreadsCliCodeExecution:new K.default.Flag(!0),LTNetworkCapabilities:new K.default.Flag,downloadToBase64:new K.default.Flag,dec2022eolBrowsers:new K.default.Flag,publicGridURL:new K.default.Configuration("public-grid.testim.io"),allowAppFromDeviceRuns:new K.default.Flag(!0)},K.default.register("default",this.flags)}setProjectId(e){K.default.setCustomStringProperty("projectId",e)}setProjectType(e){K.default.setCustomStringProperty("projectType",e)}setCompanyProductType(e){K.default.setCustomStringProperty("productType",e)}setCompanyId(e){K.default.setCustomStringProperty("companyId",e)}setPlanType(e){K.default.setCustomStringProperty("planType",e)}setIsPOC(e){K.default.setCustomBooleanProperty("isPOC",e)}setIsStartUp(e){K.default.setCustomBooleanProperty("isStartUp",e)}setRunnerMode(e){K.default.setCustomStringProperty("runnerMode",e)}async fetch(){if(!ov)return;let e={fetchIntervalInSec:av,disableNetworkFetch:!1};if(global.ProxyAgent){let t=new global.ProxyAgent(global.proxyUri);Object.assign(e,{httpsAgent:t,httpAgent:t})}return te(K.default.setup(Wd,e),iv).catch(t=>af.error("failed to get feature flag status",t))}},M=new Ml});var lf,uf,er,df,pf,cf,cv,lv,Zo,uv,dv,ee,ei=w(()=>{"use strict";lf=E(require("ms")),uf=E(require("p-retry")),er=E(require("os")),df=E(require("portfinder")),pf=E(require("child_process"));U();Rt();Te();q();j();Bo();ae();ye();cf=R("lambdatestService"),cv="https://downloads.lambdatest.com/tunnel/v3",lv={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"},Zo=`${er.tmpdir()}/LT`,uv=`${Zo}/LT`,dv=(0,lf.default)("15m"),ee=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){ee.isLambdatestGrid(e)&&(ee.lambdatestConfigPromise||(ee.lambdatestConfigPromise=Yc()),ee.lambdatestConfig=await ee.lambdatestConfigPromise,this.isActive=!0)}disable(){this.isActive=!1}get getSessionTimeout(){return this.isActive?dv:null}get getSessionRetries(){return this.isActive?1:null}static async prepareTunnel(){if(await be(uv))return;let t=lv[er.platform()+er.arch()];if(!t)throw new Error(`tunnel on ${er.platform()+er.arch()} platform is not supported.`);let s=`${Zo}.zip`;await ze(`${cv}/${t}`,s),await tt(s,Zo)}static async connectTunnel(e){if(e.externalLambdatestTunnelId){ee.tunnelName=e.externalLambdatestTunnelId;return}await this.prepareTunnel();let t=await df.getPortPromise(),{gridData:s={},gridUsername:n,gridPassword:o}=e,i=global.proxyUri;ee.tunnelName=z();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"]),s.tunnelUser&&s.tunnelKey)a=[...a,"--user",s.tunnelUser,"--key",s.tunnelKey];else if(n&&o)a=[...a,"--user",n,"--key",o];else throw new I("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 I("proxy url is invalid")}e.externalLambdatestMitm&&(a=[...a,"--mitm"]),ee.tunnel=pf.spawn("./LT",a,{cwd:Zo});let c="",l="";ee.tunnel.stdout.on("data",d=>{c+=d.toString()}),ee.tunnel.stderr.on("data",d=>{l+=d.toString()});try{let d=await(0,uf.default)(()=>wr(`http://127.0.0.1:${t}/api/v1.0/info`,{},{},void 0,{skipProxy:!0}),{retries:30,minTimeout:2e3});cf.info("LT tunnel info",d)}catch(d){throw cf.error("Failed to start LT tunnel",{err:d,stdoutResult:c,stderrResult:l}),d}}static async disconnectTunnel(e){if(!(e.externalLambdatestTunnelId||!ee.tunnel))return new Promise((t,s)=>{ee.tunnel.on("close",n=>{n&&s(new Error(`tunnel process exited with code ${n}`)),t()}),ee.tunnel.kill()})}getCapabilities(e,t,s,n,o){if(!this.isActive)return{};let i=ee.lambdatestConfig.CAPABILITIES[t]||{},a={...ee.tunnelName&&{tunnel:!0,tunnelName:ee.tunnelName}},c=[],{mode:l,canary:d,ext:m,extensionPath:p,installCustomExtension:f}=e;if(l===X.EXTENSION&&!m){let h=gl({canary:d},!0);!p&&h[t]&&(c=[...c,h[t]]),p&&Ge(p)&&(c=[...c,p])}return f&&Ge(f)&&(c=[...c,f]),{build:s,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:M.flags.LTNetworkCapabilities.isEnabled()}}}});var Fl={};W(Fl,{connect:()=>ri,disconnect:()=>si,serveTunneling:()=>mv});var ti,mf,ff,pv,ri,si,mv,Ul=w(()=>{"use strict";ef();hn();nf();It();ti=E(require("ora"));j();ae();ei();mf=R("tunnel"),ff=r=>{var e;return[ue.LAMBDATEST,ue.HYBRID].includes((e=r.gridData)==null?void 0:e.type)&&r.gridData.tunnel==="lambdatest"},pv=r=>{var e;return r.tunnelRoutes||((e=r.gridData)==null?void 0:e.type)===ue.HYBRID&&r.gridData.tunnel==="cloudflare"},ri=async r=>{if(!r.tunnel)return;let e=Ut(),t;try{ff(r)?(t=(0,ti.default)("Starting testim lambdatest tunnel...").start(),await ee.connectTunnel(r)):pv(r)?(t=(0,ti.default)("Starting testim cloudflare tunnel...").start(),await rf(r)):(t=(0,ti.default)("Starting testim ngrok tunnel...").start(),await Qm(r,e)),t.succeed()}catch(s){let n="Failed to start tunnel. Please contact support@testim.io";throw mf.error("Failed to open tunnel",{err:s}),t==null||t.fail(n),new Error(n)}},si=async r=>{if(r.tunnel)try{ff(r)?await ee.disconnectTunnel(r):"tunnelRoutes"in r?await sf(r):await Zm(r)}catch(e){let t="catch error - failed to close tunnel";throw mf.error(t,{err:e}),new Error(t)}},mv=async(r,e=new Promise(()=>{}))=>(await ri(r),ls(()=>si(r)),await e)});function fv(r){if(r.protocol)return r.protocol;if([ue.TESTIM,ue.BROWSERSTACK,ue.SAUCELABS].includes(r.type)&&r.port===443)return"https";if([ue.TESTIM_ENTERPRISE,ue.LAMBDATEST,ue.DEVICE_FARM].includes(r.type)){let e=hf.exec(r.host);return(e==null?void 0:e[2])||"https"}return""}function hv(r){let e=hf.exec(r);return e==null?void 0:e[3]}function oi(r){var y,T,A,b,v,x,k,D,S;let e=r&&hv(r.host),t=r==null?void 0:r.port,s=r==null?void 0:r.path,n=r&&fv(r),o=r==null?void 0:r.token,i=r==null?void 0:r.slotId,a=(y=r==null?void 0:r.hybrid)==null?void 0:y.tunnel,c=(T=r==null?void 0:r.external)==null?void 0:T.user,l=(A=r==null?void 0:r.external)==null?void 0:A.key,d=r==null?void 0:r.type,m=d===ue.HYBRID?a&&((x=(v=(b=r.hybrid)==null?void 0:b.external)==null?void 0:v[r.hybrid.tunnel])==null?void 0:x.user):c,p=d===ue.HYBRID?a&&((S=(D=(k=r.hybrid)==null?void 0:k.external)==null?void 0:D[r.hybrid.tunnel])==null?void 0:S.key):l,f=r==null?void 0:r.name,h=r&&(r._id||r.gridId),g=r==null?void 0:r.provider;return{host:e,port:t,path:s,protocol:n,accessToken:o,slotId:i,gridId:h,tunnel:a,user:c,key:l,type:d,name:f,provider:g,tunnelUser:m,tunnelKey:p}}async function yf(r,e,t,s,n){let o;try{o=await n()}catch(i){throw Ye.error("failed to get grid",{projectId:r,companyId:e,err:i}),new Error(Zr.UNKNOWN)}if(Ye.info("get grid info",Object.assign({},o,{projectId:r,companyId:e})),!o||!["success","error"].includes(o.status))throw Ye.error("invalid response - get grid",{res:o}),new Error(Zr.UNKNOWN);if(o.status==="success"){let i=oi(o.grid);return gv(t,e,i.gridId,i.slotId,s),i}throw o.code==="not-found"?new ut(Zr.NOT_FOUND):o.code==="no-available-slot"?new fr(`Failed to run test on ${s} - concurrency limit reached`):(Ye.error("invalid code error response - get grid",{res:o}),new ut(Zr.UNKNOWN))}function yv(r,e,t,s,n,o){return yf(t,e,r,n,()=>No(e,t,s,n,o))}function bv(r,e,t,s,n,o,i){return yf(t,e,r,n,()=>{var l;let c=(l=i.allGrids)==null?void 0:l.find(d=>(d.name||"").toLowerCase()===s.toLowerCase());return c!=null&&c._id?No(e,t,c._id,n,o):zc(e,t,s,n,o)})}function bf(r){return Jc(r)}async function wf(r,e,t){let n=(t||await bf(r)).find(o=>o._id===e);if(!n)throw new I(`Failed to find grid id: ${e}`);return oi(n)}async function wv(r,e,t){let n=(t||await bf(r)).find(o=>(o.name||"").toLowerCase()===e.toLowerCase());if(!n)throw new I(`Failed to find grid name: ${e}`);return oi(n)}async function jl(r,e){let t=wn[r];if(!t)return;let{slotId:s,gridId:n,browser:o,companyId:i}=t;if(delete wn[r],!s){Ye.warn("failed to find grid slot id",{projectId:e});return}Ye.info("release slot id",{projectId:e,companyId:i,slotId:s,gridId:n,browser:o});try{await qc(i,e,s,n,o)}catch(a){Ye.error("failed to release slot",{projectId:e,err:a})}}async function Tv(r){let e=Object.values(wn).filter(Boolean);if(e.length!==0){Ye.info("keep alive worker slots",{projectId:r,slots:e});try{await Vc(r,e)}catch(t){Ye.error("failed to update grid keep alive",{err:t,slots:e,projectId:r})}}}function vv(r){gf=global.setInterval(Tv,1e4,r)}async function Ev(r){let e=Object.keys(wn);if(e.length){Ye.warn("not all slots released before end runner flow",{projectId:r});try{await de(e,t=>jl(Number(t),r))}catch(t){Ye.error("failed to release all slots",{err:t,projectId:r})}}}async function Sv(r){await Ev(r),clearInterval(gf)}function Rv(r,e){let{testobjectSauce:t,saucelabs:s}=e;if(r==="testobject")return t.testobjectApiKey;if(r==="saucelabs")return s.accessKey}function Iv(r,e){let{saucelabs:t}=e;if(r==="saucelabs")return t.username}function Tf(r){let t=(()=>ni.isEmpty(r.testobjectSauce)?ni.isEmpty(r.saucelabs)?ni.isEmpty(r.perfecto)?"hostAndPort":"perfecto":"saucelabs":"testobject")(),{host:s,port:n,path:o,protocol:i}=r,a=Rv(t,r),c=Iv(t,r);return{host:s,port:n,path:o,protocol:i,type:t,user:c,key:a}}async function vf(r,e){let t=r.company.companyId;return await wf(t,e.gridId,r.allGrids)}async function Ef(r){let{allGrids:e=void 0,company:t,host:s,useLocalChromeDriver:n,useChromeLauncher:o,gridId:i,grid:a}=r;if(n||o)return{mode:"local"};if(s)return Tf(r);let c=t==null?void 0:t.companyId;if(i)return wf(c,i,e);if(a)return wv(c,a,e);if(Js(r)||r.tunnelOnlyMode){Ye.info("skipping getting grid, as it is set on test plan",{companyId:c});return}throw new ut("Missing host or grid configuration")}async function Sf(r,e,t,s){return await(async()=>{let{host:i,project:a,grid:c,gridId:l,useLocalChromeDriver:d,useChromeLauncher:m,company:p}=t,f=p==null?void 0:p.companyId;if(d||m)return{mode:"local"};if(i)return Tf(t);if(l)return yv(s,f,a,l,r,e);if(c)return bv(s,f,a,c,r,e,t);throw new ut("Missing host or grid configuration")})()}var ni,Ye,wn,hf,gf,gv,Tn,Rf,gs=w(()=>{"use strict";ni=E(require("lodash"));Te();j();U();ae();q();Ye=R("grid-service"),wn={},hf=/(^(https?):\/{2})?(.*)/,gf=null;gv=(r,e,t,s,n)=>{wn[r]={gridId:t,companyId:e,slotId:s,browser:n}};Tn={start:vv,end:Sv};Rf=async(r={},e={},t={},s={},n={})=>{var h,g,y;let{company:{companyId:o}={}}=r,{gridId:i,type:a}=e,c=r.browser||t.browserValue,l=Boolean(r.tunnel),{maxRetries:d,currentRetry:m}=n;if(!i||!a||(a===ue.LAMBDATEST&&await((h=s.enableIfNeeded)==null?void 0:h.call(s,e)),a!==ue.HYBRID||!o||!c||!d||!m))return e;let p=await Hc({companyId:o,gridId:i,maxRetries:d,currentRetry:m,browser:c,usingTunnel:l});Ye.info("handling hybrid grid",{response:p,companyId:o});let f=oi({...e,...p.connectionDetails,provider:p.provider});return p.provider!=="lambdatest"&&((g=s.disable)==null||g.call(s)),p.provider==="lambdatest"&&await((y=s.enableIfNeeded)==null?void 0:y.call(s,f)),f}});function En(){return ii||"master"}function If(r="master",e="false"){if(typeof r!="string"&&(r!=null&&r.branch)&&r.branch==="master"){ii="master";return}if(r&&!r.isArchived){ii=r.branch||r;return}ii=e?"master":void 0}var ii,Bl=w(()=>{"use strict"});var Sn,$l,xv,Wl,Pv,Gl,ai,ci,li,ui,di,pi=w(()=>{"use strict";U();ae();Sn=r=>{let{status:e,sessionType:t,success:s,mobile:n}=r;return n!=null&&n.isAppFromDevice||n!=null&&n.isAppForIosVirtualDevice?!1:e===pe.FAILED||t===Dt.CODEFUL&&s===!1},$l=r=>{let{status:e}=r;return e===pe.ABORTED},xv=r=>{let{status:e,sessionType:t,success:s}=r;return e===pe.PASSED||t===Dt.CODEFUL&&s===!0},Wl=r=>r.runnerStatus===ac.SKIPPED,Pv=r=>r.testStatus===Ke.EVALUATING,Gl=(r,e)=>e?!r.runConfig:!1,ai=(r,e)=>Object.values(r).filter(t=>{var s,n;return Wl(t)&&Je(t,e||((s=t.mobile)==null?void 0:s.isAppFromDevice)||((n=t.mobile)==null?void 0:n.isAppForIosVirtualDevice))}).length,ci=r=>Object.values(r).filter(e=>Sn(e)&&Pv(e)).length,li=(r,e)=>Object.values(r).filter(t=>Sn(t)&&!Gl(t,e)),ui=(r,e)=>Object.values(r).filter(t=>xv(t)&&!Gl(t,e)),di=(r,e)=>Object.values(r).filter(t=>$l(t)&&!Gl(t,e))});function Av(r){let e=r.indexOf("--token");if(e===-1&&(e=r.indexOf("--t")),e!==-1)try{let t=r.slice();return t.splice(e,2),t}catch{}return r}var mi,Pf,fi,Af=w(()=>{"use strict";j();pi();mi=R("debug-reporter"),Pf={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},fi=class{constructor(e){this.options=e}onTestStarted(e,t){mi.info("Test Started",{testId:e.testId,testName:e.name,resultId:e.resultId,workerId:t})}onTestFinished(e,t){let s=this.options.gridData||{},n=s.provider,o=s.host,i=s.gridId,a=s.type,c=s.failedGetBrowserAttempts;mi.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,s,n,o,i,a){let c=Av(process.argv);mi.info("Test Plan Started",{executionId:o,testPlanName:n,isAnonymous:i,configName:a,options:Object.assign({},this.options,Pf),args:c})}onTestPlanFinished(e,t,s,n,o,i){let a=ui(e,i).length,c=Object.keys(e).length-a;mi.info("Test Plan Finished",{isAnonymous:o,passed:a,failed:c,testPlanName:t,options:Object.assign({},this.options,Pf),duration:s,executionId:n})}}});var Vl,Pt,Rn=w(()=>{"use strict";ae();Vl=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}},Pt=new Vl});var Hl={};W(Hl,{Reporter:()=>Cv});var tr,In,kr,hi,Cf,ql,Cv,zl=w(()=>{"use strict";tr=E(require("chalk")),In=E(require("lodash"));U();ae();Rn();pi();kr={success:tr.default.green,warn:tr.default.yellow,error:tr.default.red},{CLI_MODE:hi}=Mt,Cf="device",ql=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,s,n){let o=n?"File":"Test",i=e.isTestsContainer?"":`(${e.testId})`,a=e.isTestsContainer?"":`url: ${tr.default.underline(at(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,s,n){if(n)return;let o=e.success?pe.PASSED:pe.FAILED,i=e.isTestsContainer?" ":`(${e.testId})`,a=kr[e.success?"success":"error"];console.log(a(this.toWorkerIdPrefix(t),`Test "${e.name}" finished status: ${o} ${i} duration: ${lo(e.duration)}`))}printAllFailedTests(e){if(!e.length)return;let t=e.map(s=>{let n=at(this.options.editorUrl,this.options.project,s.testId,s.resultId,this.branchToUse);return s.isTestsContainer?s.name:`${s.name} : ${n}`});console.log(kr.error("Failed runs are:")),console.log(kr.error(t.join(`
|
|
27
|
+
\r`)))}onTestPlanFinished(e,t,s,n,o,i){let a=li(e,i),c=ui(e,i),l=di(e,i),d=c.length,m=l.length,p=a.length,f="",h="";if(Pt.isTestStatusEnabled){let b=ci(e);f=` FAILED-EVALUATING: ${b}`,p-=b,h=` SKIPPED: ${ai(e,this.options)}`}let g=this.buildTestPlanName(o,t,i),y,T=kr[p?"error":"success"],A=`PASSED: ${d} FAILED: ${p}${f} ABORTED: ${m}${h} Duration: ${lo(s)}`;i||g.trim()===""||g.trim()==="Anonymous"?y=`Tests completed. ${A} (Execution ID: ${n})`:y=`Test plan${g} completed ${A} (${n})`,this.printWorkerDivider(),console.log(T(y)),this.printWorkerDivider(),this.printAllFailedTests(a)}buildTestPlanName(e,t,s){if(s)return"";let n=In.isEmpty(this.options.suites)?"":`Suite: ${this.options.suites}`,o=In.isEmpty(this.options.label)?"":`Label: ${this.options.label}`,i=In.isEmpty(this.options.name)?"":`Name: ${this.options.name}`,a=In.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,s,n,o,i,a,c){let l=p=>{p.forEach((f,h)=>{var T;let g=(T=f.testData)!=null&&T.index?`- ${f.testData.index} / ${f.testData.total} Data set`:"",y=c?"":`(${f.testId})`;console.log(" ",h+1,":",`${f.name}${Je(f,this.options)?"-quarantine":""}`,y,g)})},d=a?`config '${a}'`:"default configs";if(c)console.log(`Run test plan, Project: ${this.options.project} (Execution ID: ${o}):`);else{let p=this.options.sfdcCredential?` SfdcCredential: ${this.options.sfdcCredential}`:"",f=`${d}, Project: ${this.options.project}, Branch: ${this.branchToUse}${p}`;console.log(`Run${this.buildTestPlanName(i,n)} test plan with ${f} (${o})`)}this.printWorkerDivider(),e.length>0&&(console.log("Before all:"),l(e)),console.log(c?"File list:":"Test list:"),l(t),s.length>0&&(console.log("After all:"),l(s)),this.printWorkerDivider()}onGetSlot(e,t){let s=this.options.grid||this.options.gridId,n=this.options.mode===hi.APPIUM?Cf:t;s&&console.log(this.toWorkerIdPrefix(e),`Get ${tr.default.underline(n)} slot from ${tr.default.underline(s)}`)}onGetSession(e,t,s){let n=s===hi.APPIUM?Cf:"browser";console.log(this.toWorkerIdPrefix(e),`Get ${n} to run ${tr.default.underline(t)}`)}onWaitToTestStart(e){console.log(this.toWorkerIdPrefix(e),"Wait for test start")}onWaitToTestComplete(e,t,s){let n=t?"file":"test";console.log(this.toWorkerIdPrefix(e),`Wait for ${n} complete`),s&&t&&console.log(this.toWorkerIdPrefix(e),`Chrome Debugger available at ${s}`)}onGetBrowserFailure(e,t,s){if(s!==2)return;let n=this.options.grid||this.options.gridId,o=this.options.mode===hi.APPIUM?"device":"browser";if(n)console.log(kr.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(kr.warn(this.toWorkerIdPrefix(e),"We are having issues starting ChromeDriver for you locally"));else if(this.options.host){let i=this.options.mode===hi.APPIUM?"Appium":"Selenium";console.log(kr.warn(this.toWorkerIdPrefix(e),`We are having issues reaching your ${i} grid at ${this.options.host}:${this.options.port||4444}`))}}},Cv=ql});var Yl={};W(Yl,{Reporter:()=>Dv});function kv(r){let e=r.testData||{},t=typeof e.total=="number"?` - ${e.index} / ${e.total} Data set`:"";return`${r.name}${t}`}function _v(r){return r.visitedUrlsList||console.log("No URLs found:","Please contact our support team or remove the --urls flag from the CLI command"),`${r.visitedUrlsList||""}`}function Ov(r){return`${r.visitedUrlsJson||""}`}async function Lv(r,e,t,s,n,o){function i(p){let f=at(r,t,p.testId,p.resultId,s),h={$:{name:kv(p),classname:n,time:pc(p.duration),ownedBy:p.testOwnerName,ownerEmail:p.testOwnerEmail},"system-out":f};if(Sn(p)||$l(p)){let g=`Step Failed: ${p.failureReason||p.reason}`,y=Sn(p)?`${g} More info at: ${f}`:g;h.failure={$:{message:y}}}return Wl(p)&&Je(p,o)&&Pt.isTestStatusEnabled&&(h.skipped={}),o.urls&&(h["visited-urls-list"]=_v(p),h["visited-urls-json"]=Ov(p)),h}function a(p){let{results:f,testPlanName:h,configName:g}=p,y=f||{},A={name:(g&&h?`${h} with config '${g}'`:h)||"selenium run",tests:l(y),failure:d(y),timestamp:c(e)};if(Pt.isTestStatusEnabled){A.skipped=ai(y,o);let b=ci(y);A.failure-=b,A["failure-evaluating"]=b}return{$:A,testcase:Object.keys(y).map(b=>i(y[b]))}}function c(p){let f=Object.keys(p).map(g=>p[g].startTime),h=Math.min.apply(null,f);return h?new Date(h).toISOString():new Date().toISOString()}function l(p){return Object.keys(p).length}function d(p){return li(p).length+di(p).length}let m={testsuites:{testsuite:e.map(p=>a(p))}};try{return new Jl.Builder().buildObject(m)}catch(p){return Nv(p)}}function Nv(r){let e=new Jl.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:r.message}}}}}};return e.buildObject(t)}var Jl,kf,Kl,Dv,Xl=w(()=>{"use strict";Jl=E(require("xml2js"));U();kf=require("fs");Rn();pi();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,s=this.options.project,n=await Lv(this.options.editorUrl,e,s,this.branchToUse,this.classname,this.options);if(t)try{return await kf.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)}};Dv=Kl});var _f={};W(_f,{Reporter:()=>Mv});function ys(r){return r?r.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 Ql,Zl,Mv,Of=w(()=>{"use strict";j();Ql=R("team-city-reporter");Zl=class{constructor(e){this.options=e}getPrintName(e){let t=e.config||{},s=typeof t.testDataTotal=="number"?` - ${t.testDataIndex} / ${t.testDataTotal} Data set`:"",n=`${e.name} (${e.testId})${s}`;return ys(n)}onTestStarted(e,t,s,n,o){if(s){Ql.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,s,n,o,i){if(o){Ql.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(s)}' flowId='${i}']`)}onTestFinished(e,t,s){if(s){Ql.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,s="ignore"){let n=this.getPrintName(t);console.log(`##teamcity[testIgnored name='${n}' message='${ys(s)}']`)}onTestPlanStarted(e,t,s,n){console.log(`##teamcity[testSuiteStarted name='${ys(n)}']`)}onTestPlanFinished(e,t){console.log(`##teamcity[testSuiteFinished name='${ys(t)}']`)}},Mv=Zl});var Lf={};W(Lf,{Reporter:()=>Fv});var eu,Fv,Nf=w(()=>{"use strict";eu=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,s,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}}))}},Fv=eu});var Df={};W(Df,{Reporter:()=>Uv});var tu,Uv,Mf=w(()=>{"use strict";U();yl();tu=class{constructor(e,t){this.options=e;this.branchToUse=t}onTestStarted(e,t,s,n){if(n)return;let o=at(this.options.editorUrl,this.options.project,e.testId,e.resultId,this.branchToUse);return Wo(o)}},Uv=tu});var jv,ru,Q,$t=w(()=>{"use strict";Af();j();jv=R("reporter"),ru=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 s=e.reporters;if(this.reporters.push(new fi(e)),s===void 0||s.length===0){let{Reporter:n}=await Promise.resolve().then(()=>(zl(),Hl));if(this.reporters.push(new n(e,t)),(e==null?void 0:e.reportFile)!==void 0){let{Reporter:o}=await Promise.resolve().then(()=>(Xl(),Yl));this.reporters.push(new o(e,t))}}else(await Promise.all([s.includes("teamcity")&&Promise.resolve().then(()=>(Of(),_f)),s.includes("console")&&Promise.resolve().then(()=>(zl(),Hl)),s.includes("junit")&&Promise.resolve().then(()=>(Xl(),Yl)),s.includes("json")&&Promise.resolve().then(()=>(Nf(),Lf)),s.includes("chrome")&&Promise.resolve().then(()=>(Mf(),Df))])).forEach(o=>{o&&this.reporters.push(new o.Reporter(e,t))})}onTestPlanFinishedMutator(e,t,s,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 jv.warn("childTestResults is not array"),c=e}else c=e;let l=Date.now()-(s||0);return[c,t,l,n,o,i,void 0]}onAllTestPlansFinishedMutator(e){for(let t of e)if(t.childTestResults){t.results={};let s=Object.values(t.childTestResults);for(let n of s)t.results[n.id]=n;for(let n of Object.keys(e))s.some(o=>o.parentResultId!==n)||(t.results[n]=e[n])}return[e]}generateHook(e,t){return async(...s)=>{var o;let n=t==null?void 0:t(...s);for(let i of this.reporters)await((o=i[e])==null?void 0:o.call(i,...n||s))}}},Q=new ru});function Uf(r,e){return e!=null&&e.type&&(r[`${e.type}Mode`]=!0),r}function jf({executionId:r,projectId:e,testId:t,resultId:s,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:l,user:d,lightweightMode:m,isStartUp:p,projectType:f,appSource:h}){let g=Uf({executionId:r,projectId:e,testId:t,resultId:s,companyId:n,companyName:o,projectName:i,companyPlan:a,sessionType:c,source:Ff(l,d),isStartUp:p,projectType:f,...["android","ios"].includes(f)&&h&&{appSource:h}},m);ht("test-run-ci",g)}function Bf({executionId:r,projectId:e,testId:t,resultId:s,result:n,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,source:d,user:m,lightweightMode:p,logger:f,isStartUp:h,projectType:g,appSource:y}){try{let T=Uf({executionId:r,projectId:e,testId:t,resultId:s,companyId:o,companyName:i,projectName:a,companyPlan:c,sessionType:l,mockNetworkEnabled:n.wasMockNetworkActivated,source:Ff(d,m),isStartUp:h,projectType:g,...["android","ios"].includes(g)&&y&&{appSource:y}},p);if(n.success){ht("test-run-ci-success",T);return}ht("test-run-ci-fail",Object.assign({},T,{failureReason:n.failureReason}))}catch(T){f.error("failed to update test end analytics",{err:T})}}function $f({executionId:r,projectId:e,sessionType:t}){ht("batch-run-ci",{executionId:r,projectId:e,sessionType:t})}var Ff,su=w(()=>{"use strict";ds();_o();Ff=(r,e)=>r!=="cli"&&r!=="cli-local"?r:as&&e?"ci-with-user":as?"ci":e?"cli-with-user":r});var Bv,Gf=w(()=>{"use strict";Bv=require("istanbul-lib-report")});var Vf,qf,$v,Hf,_r,Wv,zf,nu,Gv,Kf,Jf=w(()=>{"use strict";Vf=E(require("ora")),qf=E(require("moment")),$v=E(require("test-exclude")),Hf=E(require("fs")),_r=E(require("path")),Wv=E(require("istanbul-reports")),zf=E(require("istanbul-lib-report"));Te();q();U();j();yt();Gf();nu=R("test-run-status"),Gv=async(r,e,t)=>{let{mergeProcessCovs:n}=await he("@bcoe/v8-coverage"),o={result:[]},i=new Map,c=(await pn(r,"testResult",`runId=${t}`)).data.docs;return await de(c.flatMap(l=>l.JSCoverageURLS||[]),async l=>{let d=await dn(l,9e4);await de(d,async m=>{if(!i.has(m.url)){let p=m.text;m.sourceUrl&&(i.set(m.url,"TEMP"),p=await(void 0)(m.sourceUrl)),i.set(m.url,{text:p,url:m.url,sourceMapType:m.sourceMapType,hash:m.hash})}delete m.text,o=n([o,{result:[m]}])})},{concurrency:20}),{covUrlMap:i,mergedCoverages:o}},Kf=async(r,e,t,s)=>{if(!r.collectCodeCoverage)return;nu.info("start js coverage process");let n=(0,Vf.default)(`analyzing coverage for ${t} ${t===1?"test":"tests"}`).start(),o=_r.resolve(r.codeCoverageReportPath||"./coverage"),i=_r.resolve(o,`.js/${(0,qf.default)().format("DDMMYYYYHHmmss")}`),a=r.codeCoverageSourceMapPath?_r.resolve(r.codeCoverageSourceMapPath):void 0;try{let[c,{mergedCoverages:l,covUrlMap:d}]=await Promise.all([he("istanbul-lib-coverage"),Gv(r.project,e,s)]);if(l.result.length===0){n.fail("Failed to report coverage information - js code coverage is empty");return}nu.info("start js coverage merge and remap",{numOfFiles:d.size,numMergedCoverages:l.result.length});let m=c.createCoverageMap({}),p={};await de(l.result,async({url:h,functions:g})=>{let{text:y,sourceMapType:T}=d.get(h),A=await(void 0).getSourceMap({sourceMapType:T,url:h,source:y,sourceMapDir:a});p[h]=A;let b=await(void 0).convertV8ToIstanbul(r,{source:y,sourceMap:A,functions:g});m.merge(b)}),await(void 0).remapCoverage(r,i,p);let f=await(void 0).saveCoverageReports(r,m,o,i);return n.succeed(),f}catch(c){let l="Failed to report coverage information";c instanceof I?n.fail(`${l}, missing arg: ${c.message}`):n.fail(l),nu.error(l,{err:c})}}});var Yf={};W(Yf,{SELENIUM_PERF_MARKS:()=>Ae,SeleniumPerfStats:()=>Wt});var Ae,Wt,bs=w(()=>{"use strict";U();Ae={GET_BROWSER:"GET_BROWSER",GET_HTML:"GET_HTML",GET_ELEMENT:"GET_ELEMENT",GET_SCREENSHOT:"GET_SCREENSHOT"},Wt=class{constructor(){this.marks=Object.fromEntries(Object.values(Object.assign({ALL:"ALL"},Ae)).map(e=>[e,[]]));this.startTimes={}}markStart(e){let t=z();return this.startTimes[`${e}:${t}`]=Date.now(),t}markEnd(e,t){let s=Date.now()-this.startTimes[`${t}:${e}`];if(delete this.startTimes[`${t}:${e}`],!this.marks[t]){this.marks.ALL.push(s);return}this.marks[t].push(s)}getStats(){let e=Object.entries(this.marks).flatMap(([t,s])=>!Array.isArray(s)||!s.length?[]:[[`${t}_COUNT`,s.length],[`${t}_P50`,mo(s,50)],[`${t}_P95`,mo(s,95)]]);return{seleniumPerfMarks:this.marks,seleniumStats:Object.fromEntries(e)}}}});var eh={};W(eh,{initServer:()=>Hv,mapFilesToLocalDrive:()=>iu});function iu(r,e){var t;try{r.failurePath=(r.failurePath||[]).map(s=>Object.assign(s,gi[s.id]?{screenshot:gi[s.id]}:{})),Object.keys(ws).forEach(s=>{r.assets||(r.assets={}),r.assets[Zf[s]]=ws[s]}),r.assets||(r.assets={}),r.assets.screenshots=Object.values(gi)}catch(s){e&&e.error("failed to map files to local drive",{err:s}),r.failurePath||(r.failurePath=[]),r.assets||(r.assets={}),(t=r.assets).screenshots||(t.screenshots=[])}}async function Hv({agentPort:r,agentBind:e,saveRCALocally:t}){let s=await he("multer"),n=typeof t=="string"?t:Vv;await ou.promises.mkdir(n,{recursive:!0});let o=s({storage:s.diskStorage({async destination(c,l,d){let m=JSON.parse(c.body.metadata||"{}");if(!m.testResultId)return d(new Error("missing testResultId"),"");let p=xn.join(n,m.testResultId);try{await ou.promises.mkdir(p,{recursive:!0})}catch(f){return d(f,"")}return d(null,p)},filename(c,l,d){let{fileName:m}=c.body,p=JSON.parse(c.body.metadata||"{}");if(!p.stepId&&!m)return d(new Error("missing stepId or fileName"),"");if(p.stepId){let f=xn.extname(m);return d(null,`step_${p.stepId}_${p.stepName||""}${f}`.replace(/[/\\?%*:|"<>\s]/g,"-"))}return d(null,m)}})}),i=(0,Qf.default)();i.post("/",o.single("file"),(c,l)=>{var m;let d=JSON.parse(c.body.metadata||"{}");d.stepId&&(gi[d.stepId]=c.file.path),d.testResultId&&qv.includes(d.subType)&&(ws[m=d.subType]||(ws[m]=[]),ws[d.subType].push(c.file.path)),l.sendStatus(200)}),i.use((c,l)=>l.status(404).send("Endpoint Not Found"));let{createServer:a}=await import("http");return await new Promise((c,l)=>{let d=a(i);d.listen(r,e),d.on("error",m),d.on("listening",()=>c(d.address()));function m(p){if(p.syscall!=="listen")return l(p);switch(p.code){case"EACCES":case"EPERM":return l(new I(`Port ${r} requires elevated privileges`));case"EADDRINUSE":return l(new I(`Port ${r} is already in use`));default:return l(p)}}})}var ou,Xf,xn,Qf,Vv,gi,ws,Zf,qv,au=w(()=>{"use strict";ou=E(require("fs")),Xf=E(require("os")),xn=E(require("path")),Qf=E(require("express"));q();yt();Vv=xn.join(Xf.tmpdir(),"testim/rca/"),gi={},ws={},Zf={"test-log":"consoleLogs","har-file":"networkLogs"},qv=Object.keys(Zf)});var rr,cu,yi,th=w(()=>{"use strict";rr=E(require("lodash"));U();j();cu=R("override-test-data-builder"),yi=class{constructor(e,t,s){this.params=e;this.testInfoList=t;this.projectId=s}isObjectNotArray(e){return rr.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)&&!rr.isEmpty(e.overrideTestData)?(Object.keys(e.overrideTestData).forEach(s=>this.overrideSingleTest(s,e.overrideTestData[s])),delete e.overrideTestData):cu.error("invalid overrideTestData",{overrideTestData:e.overrideTestData,projectId:t})),this.isObjectNotArray(e)&&typeof e.overrideAllTestsData<"u"&&(rr.isObject(e.overrideAllTestsData)&&!rr.isEmpty(e.overrideAllTestsData)?(this.testInfoList.map(n=>n.name).forEach(n=>this.overrideSingleTest(n,e.overrideAllTestsData)),delete e.overrideAllTestsData):cu.error("invalid overrideAllTestsData",{overrideAllTestsData:e.overrideAllTestsData,projectId:t})),this.testInfoList}overrideSingleTest(e,t){let{projectId:s}=this;if(this.isObjectNotArray(t)||this.isArrayOfObjects(t)){this.replaceAndCreateOverrideTestData(e,t);return}cu.error("skip override test data to test name",{testName:e,projectId:s}),console.error(`Invalid override test data provided to test '${e}'`)}replaceAndCreateOverrideTestData(e,t){let s=this.mapTestListToUniqueId(e);if(s.length!==0)return this.createNewTestPerOverrideTestData(s,t)}mapTestListToUniqueId(e){let{testInfoList:t}=this;return rr.chain(t).map(s=>{if(s.name.toLowerCase()===e.toLowerCase())return this.generateTestUniqId(s)}).compact().uniq().value()}createNewTestPerOverrideTestData(e,t){let{testInfoList:s}=this;return[...new Set(e)].map(n=>{let o=s.map(d=>this.generateTestUniqId(d)),i=o.indexOf(n),a=o.lastIndexOf(n),c=s[i],l=this.createNewTestItems(c,t);return s.splice(i,a-i+1,...l)})}createNewTestItems(e,t){return[].concat(t).map((s,n)=>{let o=z();return Object.assign({},e,{resultId:o,testData:{value:s,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 bi(r,...e){if(!(!r||typeof r!="function"))try{return await r(...e)||{}}catch(t){throw ot.warn("failed to run hook",{err:t}),new I(`failed to run hook promise ${t.message}`)}}var Or,ot,zv,Kv,Jv,Yv,wi,rh=w(()=>{"use strict";Or=E(require("lodash"));U();ae();gs();Te();q();j();$t();hn();Jf();bs();au();le();ye();th();Rn();ot=R("test-run-status"),zv=Sr(),Kv=process.env.GIT_COMMIT||process.env.CIRCLE_SHA1||process.env.TRAVIS_COMMIT,Jv=process.env.GIT_URL||process.env.CIRCLE_REPOSITORY_URL,Yv=ct();wi=class{constructor(e,t,s,n){this.testInfoList=e;this.options=t;this.branchToUse=n;this.exportsGlobal={};this.startTime=null;this.beforeSuiteParams={};this.executionStartedPromise=Promise.resolve();this.seleniumPerfStats=new Wt;var a,c,l,d,m;(a=this.options).runParams||(a.runParams={}),this.fileUserParamsData=this.options.userParamsData;let o=Ks(t,e),i=t.lightweightMode?t.lightweightMode.type:t.mode;this.execConfig={parallel:so||t.parallel||1,browser:o,gitBranch:zv,gitCommit:Kv,gitRepoUrl:Jv,runnerVersion:Yv,gridHost:t.host||((c=t.gridData)==null?void 0:c.host),testimBranch:n,canaryMode:t.canary,source:t.source,schedulerId:t.schedulerId,testPlanId:s,testPlans:t.testPlan,testLabels:t.label,testSuites:[...new Set(e.flatMap(p=>p.testSuites))],testNames:t.name,testIds:t.testId,testConfigs:t.testConfigNames,testConfigIds:t.testConfigIds,port:t.port,browserTimeout:t.browserTimeout,timeout:t.timeout,newBrowserWaitTimeout:t.newBrowserWaitTimeout,tunnel:t.tunnel,tunnelPort:t.tunnelPort,tunnelHostHeader:t.tunnelHostHeader,runnerMode:i,gridId:t.gridId||((l=t.gridData)==null?void 0:l.gridId),gridName:t.grid||((d=t.gridData)==null?void 0:d.name),gridType:(m=t.gridData)==null?void 0:m.type,retentionDays:t.retentionDays,codeCoverageReportPath:t.codeCoverageReportPath,collectCodeCoverage:t.codeCoverageUrlFilter||t.collectCodeCoverage,sessionType:vr(t)},this.testRunStatus=this.calcTestRunStatus()}waitForExecutionStartedFinished(){return this.executionStartedPromise}getTestResult(e){return this.testRunStatus[e]}async addRetryTestResult({newResultId:e,originalTestResultId:t,previousTestResultId:s,projectId:n,executionId:o,retryCount:i=1}){let a=this.testRunStatus[t]||{},{config:c,isTestsContainer:l,testId:d,name:m,testStatus:p,testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:T,testSuites:A,allLabels:b}=a,v={originalTestResultId:t,previousTestResultId:s,config:Or.cloneDeep(c),testId:d,status:"QUEUED",name:m,resultId:e,isTestsContainer:l,retryCount:i,testStatus:p};return this.testRunStatus[e]=Object.assign({},v,{testCreatorName:f,testCreatorEmail:h,testOwnerName:g,testOwnerEmail:y,testLabels:T,testSuites:A,allLabels:b}),rl({projectId:n,runId:o,testId:d,newResultId:e,originalTestResultId:t,previousTestResultId:s,testResult:v})}getAllTestResults(){return this.testRunStatus}testStart(e,t,s,n){let o=this.getTestResult(s);o.workerId=e;let i=this.options.files.length>0;return Q.onTestStarted(o,e,n,i,s),o}async updateTestStatusRunning(e,t,s){var l;let{project:n,remoteRunId:o,projectData:i}=this.options;if((l=this.options.lightweightMode)!=null&&l.onlyTestIdsNoSuite)return this.executionStartedPromise;let a="";try{a=await Do(n,e.testId,e.resultId,e.config.testData,i.defaults)||""}catch(d){ot.error("failed to upload test data artifact (runner)",{err:d})}let c=Or.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:s})}async testStartReport(e,t,s){if(Je(e,this.options))return;let n=this.exportsGlobal;try{let o=await bi(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,s),e}catch(o){throw ot.error("Failed to start test",{err:o}),o}}testStartAndReport(e,t,s,n,o){let i=this.testStart(e,t,s,n);return this.testStartReport(i,t,o)}onGridSlot(e,t){let s=this.getTestResult(e);s.config.gridInfo=Object.assign({},t,{key:void 0,user:void 0}),ot.info("on get grid info",{gridInfo:s.config.gridInfo})}reportTestStatus(e,t,s,n){let{name:o,testId:i,testStatus:a}=s,{resultId:c,success:l}=t;if(a===Ke.EVALUATING&&Pt.isTestStatusEnabled){Q.onTestIgnored(e,s,`test in ${Ke.EVALUATING} status`);return}if(l){Q.onTestPassed(o);return}Q.onTestFailed(s,s.failureReason,at(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 s=this.getTestResult(t);Q.onTestIgnored(e,s,`test in ${Ke.QUARANTINE}`)}testEnd(e,t,s,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&&iu(i,ot),i.resultUrl=at(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 l=Object.assign({},this.exportsGlobal,t.exportsGlobal);return this.exportsGlobal=l,i}async testEndReport(e,t,s,n){var i;let o=s.exportsGlobal;try{try{await bi(this.options.afterTest,Object.assign({},e,{exportsGlobal:o,globalParameters:o}),this.options.userData.loginData.token)}catch(a){ot.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:s.endTime,success:e.success,failureReason:e.failureReason,remoteRunId:this.options.remoteRunId,...n},5)}catch(a){throw ot.error("Failed to update test finished",{err:a}),a}}testEndAndReport(e,t,s,n,o,i){let a=this.testEnd(e,t,s,n,o);return this.testEndReport(a,s,t,i)}calcTestRunStatus(){let{options:e,testInfoList:t}=this,s=e.company.companyId,n=t.map(o=>{var m,p,f,h;let i=e.browser?en(e.browser,e.saucelabs,e.browserstack):o.runConfig;if(i&&M.flags.dec2022eolBrowsers.isEnabled()&&((m=Zs(i.browserValue))!=null&&m.eol))throw new I(`Unsupported Browser: ${i.browserName}`);let a=!M.flags.allowAppFromDeviceRuns.isEnabled()&&Ys(o.nativeApp),c=Xs(e)&&(es(o.nativeApp)||a),l=Je(o,e)||c,d={testId:o.testId,status:l?pe.SKIPPED:pe.QUEUED,name:o.name,resultId:o.resultId,isTestsContainer:o.isTestsContainer,testStatus:o.testStatus||Ke.DRAFT,testCreatorName:o.creatorName,testCreatorEmail:o.creatorEmail,testOwnerName:o.testOwnerName,testOwnerEmail:o.testOwnerEmail,testLabels:o.testLabels,testSuites:o.testSuites,allLabels:o.allLabels,...c&&{reason:es(o.nativeApp)?"virtual-build":"app-from-device"},config:Object.assign({},this.execConfig,{companyId:s,testData:((p=o.testData)==null?void 0:p.value)||null,isBeforeTestPlan:o.isBeforeTestPlan,isAfterTestPlan:o.isAfterTestPlan,testDataTotal:((f=o.testData)==null?void 0:f.total)||null,testDataIndex:((h=o.testData)==null?void 0:h.index)||null,baseUrl:e.baseUrl||o.baseUrl||o.testConfig.baseUrl,testConfig:o.overrideTestConfig||o.testConfig,browser:i.browserValue.toLowerCase()})};return[o.resultId,d]});return Object.fromEntries(n)}async executionStart(e,t,s,n,o){ot.info("execution started",{executionId:e});let{options:i}=this,{remoteRunId:a,projectData:c}=i;ls(()=>Promise.all([Tn.end(t),Lo("ABORTED",e,t,!1,void 0,a,void 0)])),this.startTime=s||Date.now();let l={projectId:t,executionId:e,...M.flags.testNamesToBeforeSuiteHook.isEnabled()&&{testNames:o}},d=await bi(i.beforeSuite,l),m=new yi(d,Or.cloneDeep(this.testInfoList),t);this.testInfoList=m.overrideTestData(),this.testRunStatus=this.calcTestRunStatus(),this.beforeSuiteParams=d;let{testInfoList:p}=this,f=[],h=[],g=[];for(let T of p){if(T.isBeforeTestPlan){f.push(T);continue}if(T.isAfterTestPlan){g.push(T);continue}h.push(T)}let y=async()=>{let T=Or.cloneDeep(this.testRunStatus);await de(Object.keys(T),async x=>{var P;let k=T[x],D=(P=k.config)==null?void 0:P.testData,S=k.testId,O=await Do(t,S,x,D,c.defaults);O&&(delete k.config.testData,k.config.testDataUrl=O)});let A=Boolean(i.useLocalChromeDriver||i.useChromeLauncher),b={executionId:e,projectId:t,labels:n||[],startTime:s,executions:T,config:this.execConfig,resultLabels:i.resultLabels,remoteRunId:i.remoteRunId,localRunUserId:i.user,isLocalRun:A,intersections:i.intersections},v=Uc(b);return this.executionStartedPromise=v,v.catch(x=>ot.error(x)),v};try{await y()}catch(T){ot.error("Failed to start suite",{err:T}),console.error("Failed to start test run. Please contact support@testim.io")}return{beforeTests:f,tests:h,afterTests:g}}concatSeleniumPerfMarks(e){Or.chain(e).keys().each(t=>{let s=t;this.seleniumPerfStats.marks[s]&&(this.seleniumPerfStats.marks[s]=[...this.seleniumPerfStats.marks[s],...e[s]])}).value()}async executionEnd(e){var d;let t=fc(this.testRunStatus),s=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===Ke.EVALUATING&&i++;let{seleniumPerfMarks:a,...c}=this.seleniumPerfStats.getStats();try{await bi(this.options.afterSuite,{exportsGlobal:this.exportsGlobal,tests:t,total:s,passed:n,skipped:o})}catch(m){console.log("check your callback handler on afterSuite Hook for syntax or exception errors"),ot.warn("error while running afterSuite Hook",{err:m,projectId:this.options.projectData.projectId,executionId:this.options.executionId})}let l=await Kf(this.options,this.branchToUse,s,e);if(Object.assign(c,{coverageSummary:l}),!((d=this.options.lightweightMode)!=null&&d.onlyTestIdsNoSuite))try{return await Lo("FINISHED",e,this.options.project,s===n+o+i,{tmsSuppressReporting:this.options.tmsSuppressReporting,tmsRunId:this.options.tmsRunId,tmsCustomFields:this.options.tmsCustomFields},this.options.remoteRunId,c)}catch(m){throw ot.error("Failed to update suite finished",{err:m}),m}}async markAllQueuedTests(e,t,s,n){let o=Object.keys(this.testRunStatus).filter(i=>this.getTestResult(i).status==="QUEUED");await Fc(e,["QUEUED"],t,s,n,this.startTime,null,this.options.project);for(let i of o){let a=this.getTestResult(i);a.status=t,a.failureReason=s,a.success=n}return this.testRunStatus}}});function Qv(r,e){let t={browserName:"safari",...e==="safari technology preview"&&{"safari.options":{technologyPreview:!0}}};return Object.assign(r.desiredCapabilities,t),r}function mu(r){return oh.readFileSync(r,{encoding:"base64"})}function ch(r,e,t){if(!(t!=null&&t.isLambdatestRun()&&Ge(r))&&r){let s=mu(r);Pn.info(`adding extension: custom, path: ${r} length: ${s.length} hash: ${pu(s)} current extension count: ${e.length}`),e.push(s)}}function lh(r,e,t,s,n){if(n!=null&&n.isLambdatestRun())return;if(r.ext||s){let c=typeof r.ext=="string"?r.ext:`${__dirname}/..`,l=s||c,d=`--load-extension=${l}`;Pn.info(`adding extension: testim unpacked , path: ${l}`),t.push(d);return}let o=r.canary?"-master.zip":".zip",i=du.join(process.cwd(),`testim-headless${o}`),a=mu(i);Pn.info(`adding extension: testim zipped, path: ${i} length: ${a.length} hash: ${pu(a)} current extension count: ${e.length}`),e.push(a)}function Zv(r,e,t,s,n,o,i){var g,y;let a=t.seleniumName||t.browserValue,c=[],l=[...ah];e.headless&&l.push("--headless");let d=()=>e.mode!==X.EXTENSION,m={prefs:{"profile.default_content_setting_values.popups":lu.CONTENT_SETTING_ALLOW,"profile.default_content_setting_values.automatic_downloads":lu.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()};uu(n)&&(m.prefs["download.default_directory"]="C:\\Users\\testnode",m.w3c=!0,r.desiredCapabilities.version="latest-1",r.desiredCapabilities["aws:maxDurationSecs"]=2400,r.desiredCapabilities["aws:idleTimeoutSecs"]=60),uu(n)&&a==="MicrosoftEdge"&&(r.desiredCapabilities["ms:edgeChromium"]=!0),e.chromeExtraPrefs&&Object.assign(m.prefs,e.chromeExtraPrefs),e.chromeExtraArgs&&e.chromeExtraArgs.forEach(T=>l.push(`--${T}`)),e.chromeBlockLocation&&(m.prefs["profile.default_content_setting_values.geolocation"]=lu.CONTENT_SETTING_BLOCK),e.chromeUserDataDir&&l.push(`--user-data-dir=${e.chromeUserDataDir}`),(y=(g=e.projectData)==null?void 0:g.defaults)!=null&&y.disableChromiumGpu&&l.push("--disable-gpu"),Object.assign(r.desiredCapabilities,{browserName:a});function p(){t.mobileEmulation&&(m.mobileEmulation={deviceMetrics:{width:t.mobileEmulation.device.width,height:t.mobileEmulation.device.height+cc.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,pixelRatio:t.mobileEmulation.device.deviceScaleFactor},userAgent:t.mobileEmulation.userAgent})}p(),ch(s,c,i),e.mode===X.EXTENSION&&lh(e,c,l,o,i),c.length>0&&(m.extensions=c),e.disableCookiesSameSiteNoneRequiresSecure&&(m.localState={"browser.enabled_labs_experiments":["cookies-without-same-site-must-be-secure@2"]}),m.args=l;let f={MicrosoftEdge:"edgeOptions",chrome:"chromeOptions"}[a],h={MicrosoftEdge:"ms",chrome:"goog"}[a];return ee.isLambdatestGrid(n)&&delete m.w3c,e.oldCapabilities&&n.type!=="testimEnterprise"&&!(i!=null&&i.isLambdatestRun())&&(r.desiredCapabilities[f]=m),(e.w3cCapabilities||n.type==="testimEnterprise")&&(r.desiredCapabilities[`${h}:${f}`]=m),r}function tE(r,e,t){let s={"pdfjs.disabled":!0};if(M.flags.autoSaveDownloadFileFireFox.isEnabled()&&Object.assign(s,{"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(r.desiredCapabilities,{acceptInsecureCerts:!0,browserName:"firefox",marionette:!0,"moz:firefoxOptions":{prefs:s}},t!=null&&t.isLambdatestRun()?{enableCustomTranslation:!0}:{}),e.disableCookiesSameSiteNoneRequiresSecure&&(r.desiredCapabilities["moz:firefoxOptions"].prefs["network.cookie.sameSite.noneRequiresSecure"]=!1),e.mode===X.EXTENSION)if(e.ext)r.desiredCapabilities.testim_firefox_profile=e.ext;else{let n=e.canary?"-master.zip":".zip",o=du.join(process.cwd(),`testim-firefox-profile${n}`);r.desiredCapabilities.firefox_profile=mu(o)}return e.headless&&(r.desiredCapabilities["moz:firefoxOptions"].args||(r.desiredCapabilities["moz:firefoxOptions"].args=[]),r.desiredCapabilities["moz:firefoxOptions"].args.push("-headless")),r}function rE(r,e,t){let{saucelabs:s}=r;return s!=null&&s.username&&s.accessKey?t?(t.sl.version=t.browserValue==="safari"?t.sl.safari_version:t.sl.version,t.sl.appiumVersion=s.appiumVersion||t.sl.appiumVersion,Object.assign({},t.sl,s,{name:e})):Object.assign({},s,{name:e}):{}}function sE(r,e,t){return bt.isEmpty(r.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,r.browserstack,{name:e})):Object.assign({},r.browserstack,{name:e})}function nE(r){return r.perfecto?r.perfecto:{}}function oE(r,e,t){if(r.experitestToken){let s=e==="safari";return{accessKey:r.experitestToken,browserVersion:"latest",platformName:s?"MAC":"WIN10",seleniumScreenshot:s,newSessionWaitTimeout:t}}return{}}function iE(r,e={}){let{gridData:t={},gridUsername:s,gridPassword:n}=r,o=s||t.user||e.user,i=n||t.key||e.key,a={};return o&&i&&(a.Authorization=Fa(o,i)),a}function Ti(r,e,t,s,n,o,i,a=null){var g,y,T,A,b,v;if(s.mode==="local"){let x=[],k=[...ah],D={};return r.headless&&k.push("--headless"),r.silentDebuggerExtensionApi&&k.push("--silent-debugger-extension-api"),r.remoteDebuggingPort!==void 0&&k.push(`--remote-debugging-port=${r.remoteDebuggingPort}`),r.chromeExtraArgs&&r.chromeExtraArgs.forEach(S=>k.push(`--${S}`)),r.chromeBinaryLocation&&(D.binary=r.chromeBinaryLocation),r.mode!=="selenium"&&lh(r,x,k,null,a),ch(n,x,a),{logLevel:sh,capabilities:{alwaysMatch:{"goog:chromeOptions":{args:k,extensions:x,...D},browserName:"chrome"},firstMatch:[{}]},path:"/wd/hub",hostname:"localhost",port:9515}}let{driverRequestTimeout:c,driverRequestRetries:l}=r,d=iE(r,s),m={host:s.host,port:s.port||4444,path:s.path||"/wd/hub",protocol:s.protocol||"http",logLevel:sh,connectionRetryTimeout:c,connectionRetryCount:l,getSessionTimeout:Math.max(a.getSessionTimeout,r.getSessionTimeout),getSessionRetries:a.getSessionRetries||r.getSessionRetries,deprecationWarnings:!1,desiredCapabilities:{acceptSslCerts:!0,unexpectedAlertBehaviour:"accept"},...!bt.isEmpty(d)&&{headers:d},...r.proxyForGrid&&{agent:global.ProxyAgent(global.proxyUri)}};uu(s)&&(r.oldCapabilities=!1,r.w3cCapabilities=!0,m.desiredCapabilities={unexpectedAlertBehaviour:"accept"}),r.disableNativeEvents&&(m.desiredCapabilities.nativeEvents=!1),s.user&&s.key&&(s.type==="saucelabs"&&(r.saucelabs||(r.saucelabs={}),(g=r.saucelabs).username||(g.username=s.user),(y=r.saucelabs).accessKey||(y.accessKey=s.key)),s.type==="browserstack"&&(r.browserstack||(r.browserstack={}),(T=r.browserstack)["browserstack.user"]||(T["browserstack.user"]=s.user),(A=r.browserstack)["browserstack.key"]||(A["browserstack.key"]=s.key))),s.key&&s.type==="perfecto"&&(r.perfecto.securityToken=s.key);let p=Number(r.browserTimeout/1e3),f=r.browser||(t==null?void 0:t.browserValue);bt.merge(m.desiredCapabilities,rE(r,e,t),sE(r,e,t),nE(r),oE(r,f,p),a==null?void 0:a.getCapabilities(r,f,o,i,e));let h=null;switch(!r.ext&&!r.extensionPath&&((b=s.host)!=null&&b.endsWith(".testim.io"))&&!r.canary&&r.mode===X.EXTENSION&&(f==="chrome"?h="/opt/testim-headless":f==="edge-chromium"&&(h="C:/selenium/testim-headless")),(v=s.host)!=null&&v.endsWith(".testim.io")&&f==="edge-chromium"&&(m.desiredCapabilities.version="83"),f){case"chrome":case"edge-chromium":m=eE(m,r,t,n,s,h,a);break;case"firefox":m=tE(m,r,a);break;case"safari":case"safari technology preview":m=Qv(m,f);break;default:break}bt.merge(m.desiredCapabilities,r.seleniumCapsFileContent);try{let x={"hub.lambdatest.com":"lambdatest",[M.flags.publicGridURL.getValue()]:"testim","testgrid-devicefarm.us-west-2.amazonaws.com":"devicefarm"},k=P=>P[s.provider]||P[m.host]||P[x[m.host]],D=P=>{var N,B;return k(P)||P[(N=m.desiredCapabilities)==null?void 0:N.browserName]||P[(B=m.desiredCapabilities)==null?void 0:B.version]||P||{}},S=JSON.parse(M.flags.addCustomCapabilities.getValue()||"{}"),O=D(D(S));Object.keys(O).length&&(Pn.info(`Adding custom capabilities: ${JSON.stringify(O)}`),Object.assign(m.desiredCapabilities,O))}catch(x){Pn.error("Failed to load custom capabilities",{error:x,customCapabilities:M.flags.addCustomCapabilities.getValue()})}return m.desiredCapabilities&&!m.capabilities&&(Xv(m.desiredCapabilities),m.capabilities={alwaysMatch:m.desiredCapabilities,firstMatch:[{}]},delete m.desiredCapabilities),m.hostname=m.host,m}function uh({projectType:r,gridInfo:e,nativeApp:t,options:s,appPath:n,androidActivityWait:o}){let{deviceModel:i,osVersion:a,deviceUdid:c,fullReset:l,resetAppData:d,resetOnSessionStartOnly:m}=s,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:s.appiumLogLevel},h={"headspin:capture":!0,...!l&&!d&&{"appium:noReset":!0},...!l&&d&&{"appium:noReset":!1}};switch(r){case"ios":h={...h,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest",...l&&{"appium:fullReset":l,"appium:resetOnSessionStartOnly":m},...t&&{"appium:bundleId":t.id},...n&&{"appium:app":n}};break;case"android":h={...h,platformName:"Android",...l&&{"appium:fullReset":l},...!l&&d&&{"appium:autoGrantPermissions":!0},"appium:automationName":"UiAutomator2","appium:appWaitActivity":o,...t&&{"appium:appPackage":t.id||t.packageName,"appium:appActivity":t.activity},...n&&{"appium:app":n}};break;default:throw Error(`unsupported mobile project ${r}`)}return i&&(p.model=i),a&&(p.os_version=a),c&&(p.device_id=c,delete p.model,delete p.os_version),bt.isEmpty(p)||(h["headspin:selector"]=p),{...f,desiredCapabilities:h,capabilities:h}}var oh,du,ih,bt,Pn,sh,lu,ah,pu,uu,Xv,eE,nh,vi=w(()=>{"use strict";oh=E(require("fs")),du=E(require("path")),ih=E(require("crypto")),bt=E(require("lodash"));U();le();j();ye();ae();ei();Pn=R("testim-desired-capabilities-builder"),sh=ro?"debug":"silent",lu={CONTENT_SETTING_DEFAULT:0,CONTENT_SETTING_ALLOW:1,CONTENT_SETTING_BLOCK:2,CONTENT_SETTING_ASK:3},ah=["--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"],pu=(...r)=>ih.createHash("sha256").update(r.join("")).digest("hex"),uu=r=>r.type===ue.DEVICE_FARM||r.type===ue.HYBRID&&r.provider==="devicefarm",Xv=r=>{Object.prototype.hasOwnProperty.call(r,"version")&&(r.browserVersion=r.version,delete r.version),Object.prototype.hasOwnProperty.call(r,"platform")&&(r.platformName=r.platform,delete r.platform),Object.prototype.hasOwnProperty.call(r,"acceptSslCerts")&&(r.acceptInsecureCerts=r.acceptSslCerts,delete r.acceptSslCerts),Object.prototype.hasOwnProperty.call(r,"unexpectedAlertBehaviour")&&(r.unhandledPromptBehavior=r.unexpectedAlertBehaviour,delete r.unexpectedAlertBehaviour),Object.prototype.hasOwnProperty.call(r,"chromeOptions")&&(r["goog:chromeOptions"]??(r["goog:chromeOptions"]=r.chromeOptions),delete r.chromeOptions)};eE=bt.memoize(Zv,(r,e,t,s,n,o)=>{let i=JSON.stringify(r.desiredCapabilities),a=JSON.stringify(bt.omit(e,"runParams")),c=JSON.stringify(t),l=JSON.stringify(n.type);return pu(i,a,c,s,l,o)}),nh=["application/force-download","application/pdf","application/x-pdf","application/acrobat","applications/vnd.pdf","text/pdf","text/x-pdf","application/vnd.cups-pdf"]});function Fe(r){var e,t,s,n,o,i,a,c;return((e=r.message)==null?void 0:e.match(/Command not found/))||r.message==="HTTP method not allowed"||r.message==="Unknown error"||((t=r.message)==null?void 0:t.match(/Unknown timeout type/))||((s=r.seleniumStack)==null?void 0:s.type)==="UnknownCommand"||((n=r.message)==null?void 0:n.match(/did not match a known command/))||((o=r.message)==null?void 0:o.match(/Server returned HTTP response code: 405 for URL/))||((i=r.seleniumStack)==null?void 0:i.message)==="The arguments passed to a command are either invalid or malformed."||((a=r.message)==null?void 0:a.match(/Invalid timeout type specified: ms/))||((c=r.message)==null?void 0:c.match(/\.\w* is not a function/))}function dh(r,e,t){if(!e||!r)return r;if(r.includes("%"))return r.replace(/ /g,"%20");try{return decodeURI(r)!==r?r:encodeURI(r)}catch(s){return t&&t.warn("tried to encode url but failed",{err:s,url:r}),r}}var hu=w(()=>{"use strict"});function gu(r){function e(p){return p?[Node.ELEMENT_NODE,Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE].includes(p.nodeType):!1}function t(p){return p?s(p.parentNode,e):null}function s(p,f){for(let h=p;h&&h!==p.ownerDocument;h=h.parentNode)if(f(h))return h;return null}function n(p,f){for(let h=p;h&&h!==p.ownerDocument;h=t(h))if(f(h))return h;return null}function o(p,f){if(!p||!f)return null;p instanceof DocumentFragment&&(p=p.host);let g=window.getComputedStyle(p).getPropertyValue(f);if(g&&g!=="inherit")return g;let y=t(p);return o(y,f)}function i(p){let f=p.getBoundingClientRect();if(f.width>0&&f.height>0)return!0;if(p.tagName.toUpperCase()==="PATH"&&f.width+f.height>0){let g=o(p,"stroke-width");return!!g&&parseInt(g,10)>0}return o(p,"overflow")==="hidden"?!1:Array.from(p.childNodes).some(g=>g.nodeType===Node.TEXT_NODE?!0:e(g)?i(g):!1)}function a(p){return o(p,"overflow")==="hidden"}function c(p){return!p||!a(p)||!p.childNodes.length?!1:Array.from(p.childNodes).every(f=>f.nodeType===Node.TEXT_NODE?!1:!e(f)||!i(f)?!0:c(f))}function l(p){var f;return p?(f=p.parentNode)!=null&&f.host?!0:l(p.parentNode):!1}if(!r||!l(r)&&!document.contains(r))return!1;switch(r.tagName.toUpperCase()){case"BODY":return!0;case"SCRIPT":case"NOSCRIPT":return!1;case"OPTGROUP":case"OPTION":{let p=s(r,f=>f.tagName.toUpperCase()==="SELECT");return gu(p)}case"INPUT":if(r.type==="hidden")return!1;break;default:break}if(o(r,"visibility")!=="visible")return!1;let d=!!n(r,p=>Number(o(p,"opacity"))===0),m=!!n(r,p=>o(p,"display")==="none");return!(d||m||!i(r)||c(r))}var ph=w(()=>{"use strict"});var mh,fh,Ei,aE,cE,Si,hh=w(()=>{"use strict";mh=E(require("promise-queue")),fh=E(require("webdriverio"));le();Oe();U();j();Bs();ph();hu();bs();Ei=R("WebDriverApi"),aE=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},cE={implicit:0,pageLoad:1,script:2},Si=class{seleniumPerfStats;client;get capabilities(){var e;return(e=this.client)==null?void 0:e.capabilities}get browserName(){return this.capabilities&&"browserName"in this.capabilities&&this.capabilities.browserName.toLocaleLowerCase()||void 0}constructor(){this.w3cRequests={}}windowHandleMaximize(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.maximizeWindow()})}rejectWithLog(e,t){let{testName:s,testResultId:n}=this,o=t?t.toString().substr(0,2e3):"";return Ei.warn("error from selenium",{err:e,testResultId:n,testName:s,crashingFunc:o}),Promise.reject(e)}initQueueRequests(){let e=1/0;this.isAndroid()&&(e=1),typeof $a<"u"&&(e=$a);let t=1/0;this.queue=new mh.default(e,t)}async addToQueue(e){let t=this.seleniumPerfStats.markStart();try{return await this.queue.add(e)}catch(s){return this.rejectWithLog(s,e)}finally{this.seleniumPerfStats.markEnd(t)}}async initClient(e,t,s){var o,i;this.testName=t,this.testResultId=s,e.deprecationWarnings=!1,this.initQueueRequests(),_("right before addToQueue");let n=(o=this.seleniumPerfStats)==null?void 0:o.markStart(Ae.GET_BROWSER);try{await this.addToQueue(async()=>{Ei.info("requesting browser",{testResultId:s,testName:t}),_("before this.client.init"),this.client=await fh.remote(e)}),_("after client init")}finally{await((i=this.seleniumPerfStats)==null?void 0:i.markEnd(n,Ae.GET_BROWSER))}}get isMobile(){var e;return(e=this.client)==null?void 0:e.isMobile}getSessionId(){var e;return(e=this.client)==null?void 0:e.sessionId}isChrome(){return this.browserName==="chrome"}isChromium(){return this.isChrome()||this.isEdgeChromium()}isFirefox(){return this.browserName==="firefox"}isSafari(){return this.browserName==="safari"||this.browserName==="safari technology preview"}isAndroid(){return this.capabilities&&"platformName"in this.capabilities&&this.capabilities.platformName.toLocaleLowerCase()==="android"}isEdgeChromium(){let e=this.capabilities&&"_isOldEdge"in this.capabilities&&this.capabilities._isOldEdge;return this.browserName==="microsoftedge"&&!e}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 s=i=>{throw i.executedScript=t,i},n=()=>this.client.execute(t,e).catch(s),o=()=>this.client.executeScript(t,e).catch(s);return"execute"in this.w3cRequests&&this.w3cRequests.execute?n():o().catch(i=>{if(Fe(i))return Object.assign(this.w3cRequests,{execute:!0}),n();throw i})}).then(t=>({value:t}))}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 s=()=>this.client.executeAsync(t,e),n=()=>this.client.executeAsyncScript(t,e);return"executeAsync"in this.w3cRequests&&this.w3cRequests.executeAsync?s():n().catch(o=>{if(Fe(o))return this.w3cRequests.executeAsync=!0,s();throw o})}).then(t=>({value:t}))}async executeCDP(e,t={}){var n;if(!this.isChromium())return;let s=await((n=this.client)==null?void 0:n.sendCommandAndGetResult(e,t));return s!=null&&s.targetInfos?s.targetInfos:[]}takeScreenshot(){var t;let e=(t=this.seleniumPerfStats)==null?void 0:t.markStart(Ae.GET_SCREENSHOT);return this.addToQueue(()=>{var s;return(s=this.client)==null?void 0:s.takeScreenshot().then(n=>({value:n}))}).finally(()=>{var s;return(s=this.seleniumPerfStats)==null?void 0:s.markEnd(e,Ae.GET_SCREENSHOT)})}takeElementScreenshot(e){let t=this.seleniumPerfStats.markStart(Ae.GET_SCREENSHOT);return this.addToQueue(()=>this.client.elementIdScreenshot(De(e))).finally(()=>this.seleniumPerfStats.markEnd(t,Ae.GET_SCREENSHOT))}getElementBySelector(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.$(e)}).then(t=>({value:t}))}elementIdDisplayed(e){return this.addToQueue(()=>{let t=()=>this.client.isElementDisplayed(e).then(n=>({value:n})),s=()=>this.execute(gu,{ELEMENT:e,[Hr]:e});return"elementIdDisplayed"in this.w3cRequests&&this.w3cRequests.elementIdDisplayed?s():t().catch(n=>{if(Fe(n))return this.w3cRequests.elementIdDisplayed=!0,s();throw n})})}windowHandles(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.getWindowHandles().then(t=>({value:t}))})}url(e){return e?this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.url(dh(e,this.isSafari(),Ei))}):Promise.resolve()}reloadTab(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.refresh()})}source(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.getPageSource()})}timeouts(e,t){return this.addToQueue(()=>{let s=()=>{let o=[];return o[cE[e]]=t,this.client.setTimeouts(...o)},n=()=>this.client.setTimeout({[e]:t});return"timeouts"in this.w3cRequests&&this.w3cRequests.timeouts?n():s().catch(o=>{if(Fe(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 s=function(n,o){window.scrollTo(n,o)};return this.execute(s,e,t)}setValue(e,t){return this.elementIdClear(De(e)).then(()=>this.elementIdValue(De(e),t))}getViewportSize(e){return this.execute(aE).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=>Da.hasOwnProperty(i)?[Da[i]]:i.split(""),s=[];if(typeof e=="string")s=t(e);else if(e instanceof Array)for(let i of e)s=s.concat(t(i));else return Promise.reject(new Error("number or type of arguments don't agree with keys protocol command"));let n=()=>{var i;return(i=this.client)==null?void 0:i.requestHandler.create("/session/:sessionId/keys",{value:s})},o=()=>{let i=s.map(c=>({type:"keyDown",value:c})),a=s.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(Fe(i))return this.w3cRequests.keys=!0,o();throw i}))}elementIdValue(e,t){return t=Array.isArray(t)?t.join():t,this.addToQueue(()=>{var s;return(s=this.client)==null?void 0:s.elementSendKeys(e,t)}).then(s=>({value:s}))}elementIdClear(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.elementClear(e)})}submitForm(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.elementSubmit(De(e))})}submitFormManually(e){return this.addToQueue(async()=>{var o;let t=await((o=this.client)==null?void 0:o.$(e)),s=await t.$('button[type="submit"]');return await s.isExisting()?s.click():(await t.$("input:last-of-type")).keys("Enter")})}findElementAndPress(e,t,s,n){return this.addToQueue(()=>{var o;return(o=this.client)==null?void 0:o.$(e).click({x:t,y:s,button:n})}).then(o=>({value:o}))}rightClick(e,t,s){return this.findElementAndPress(e,t,s,"right")}leftClick(e,t,s){return this.findElementAndPress(e,t,s,"left")}elementIdClick(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.elementClick(e)})}actions(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.performActions(e)}).then(t=>({value:t}))}doDoubleClick(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.$(e).doubleClick()}).then(t=>({value:t}))}dragAndDrop(e,t){return this.addToQueue(()=>{var s;return(s=this.client)==null?void 0:s.$(e).dragAndDrop(t)}).then(s=>({value:s}))}buttonDown(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.buttonDown()}).then(e=>({value:e}))}buttonUp(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.buttonUp()}).then(e=>({value:e}))}moveTo(e,t,s){let n={};return typeof t=="number"&&(n.xOffset=t),typeof s=="number"&&(n.yOffset=s),this.isSafari()&&!n.hasOwnProperty("yoffset")&&(n.yOffset=1),this.isSafari()&&!n.hasOwnProperty("xoffset")&&(n.xOffset=1),this.addToQueue(()=>{var o;return(o=this.client)==null?void 0:o.$(e).moveTo(n)})}uploadFile(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.uploadFile(e)}).then(t=>({value:t}))}getUrl(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.getUrl()})}getTitle(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.getTitle()})}windowHandleSize(e){return this.addToQueue(()=>{let t=async()=>await this.client.getWindowSize(),s=async()=>await this.client._getWindowSize();if(e!=null&&e.width&&(e!=null&&e.height)){let n=Math.abs(e.width),o=Math.abs(e.height);t=async()=>await this.client.setWindowSize(n,o),s=async()=>await this.client._setWindowSize(n,o)}return this.w3cRequests.windowHandleSize?t():s().catch(n=>{if(Fe(n))return this.w3cRequests.windowHandleSize=!0,t();throw n})}).then(t=>({value:t}))}setCookie(e,t,s,n,o,i,a){return this.addToQueue(()=>{var c;return(c=this.client)==null?void 0:c.setCookies({name:e,value:t,domain:s,httpOnly:n,secure:o,path:i,expiry:a&&Math.floor(a)})})}getCookie(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.getCookies(e).then((s=[])=>s||(typeof e=="string"?null:[]))})}deleteCookie(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.deleteCookie(e)})}isVisibleWithinViewport(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.$(e).isDisplayedInViewport()})}getCurrentTabId(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.getWindowHandle()}).then(e=>({value:e}))}frame(e=null){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.switchToFrame(e)})}switchTab(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.switchToWindow(e)}).then(t=>({value:t}))}alertAccept(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.acceptAlert()})}log(e="browser"){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.getLogs(e)})}end(){return this.w3cRequests={},this.queue?this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.deleteSession()}):Promise.resolve()}forceEnd(){var e;return this.w3cRequests={},this.client?(e=this.client)==null?void 0:e.deleteSession():Promise.resolve()}touchPerform(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.touchPerform(e)})}touchAction(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.touchAction(e)})}pressKeycode(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.pressKeyCode(e)})}setImmediateValue(e,t){return this.addToQueue(()=>{var s;return(s=this.client)==null?void 0:s.setValueImmediate(e,t)})}elementIdText(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.getElementText(e)})}isAppInstalled(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.isAppInstalled(e)}).then(t=>{let s=!!t.value;return Ei.info(`is app (${e}) installed? ${s}`,t),s})}launch(){return this.addToQueue(()=>{var e;return(e=this.client)==null?void 0:e.launchApp()})}context(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.switchContext(e)})}elementIdLocation(e){return this.addToQueue(()=>{var t;return(t=this.client)==null?void 0:t.getElementLocation(e)})}}});var gh,yh=w(()=>{"use strict";gh=function(r,e){let t=["pointerup","pointerdown","pointermove"],s=getLocatedElement(r.locatedElement);if(!s)throw new Error("element not found");let n=r.events,o={status:"done",success:!0};window.__unloadNavigator=function(){e(o)};let i=function(p){function f(A,b,v){return v>A&&v<b}let h=p.pointerPosition||{},g=s.getBoundingClientRect(),y=h.originX&&f(g.left,g.left+g.width,h.originX)?h.originX:g.left+g.width/2,T=h.originY&&f(g.top,g.top+g.height,h.originY)?h.originY:g.top+g.height/2;return{x:y,y:T}},a=function(p,f){return{screenX:0,screenY:0,clientX:p,clientY:f,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,bubbles:!0,cancelable:!0,button:0,pointerType:"mouse",isPrimary:!0}},c=function(p,f,h){if(!window.PointerEvent)return;let g=a(f,h);return new window.PointerEvent(p,g)},l=function(p,f,h){let g=document.createEvent("MouseEvents");return g.initMouseEvent(p,!0,!0,document.defaultView,1,0,0,f,h,!1,!1,!1,!1,0,document.body?document.body.parentNode:document.documentElement),g},d=function(){var f;let p=document.activeElement;for(;(f=p.shadowRoot)!=null&&f.activeElement;)p=p.shadowRoot.activeElement;return p},m=function(p){let f=i(p),h=p.event;return t.includes(h)?c(h,f.x,f.y):l(h,f.x,f.y)};try{n.map(f=>m(f)).filter(Boolean).forEach(f=>s.dispatchEvent(f));let p=d();dispatchFocus(r.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})}}});function Lr(r,e){function t(o){let i=document.createEvent("HTMLEvents");return i.initEvent(o,!0,!1),i}function s(){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=s();i&&a===i&&typeof i.blur=="function"&&i.blur()}if(r){let o=getLocatedElement(r);if(o&&o!==e)try{n(o,e)}catch{}}else e&&typeof e.blur=="function"&&e.blur()}var Ri=w(()=>{"use strict"});var vh={};W(vh,{WebDriver:()=>Nr});async function pE(r){var e,t;try{let s=(t=(e=r==null?void 0:r.value)==null?void 0:e["goog:chromeOptions"])==null?void 0:t.debuggerAddress;return s?await uE(s):void 0}catch(s){Ve.info("Error getting cdpAddress",s);return}}var Xe,Th,Ve,sr,lE,bh,uE,nr,dE,wh,Nr,An=w(()=>{"use strict";Xe=E(require("lodash"));U();Oe();vi();Th=E(require("ua-parser-js"));Bs();j();hu();hh();q();yh();Ri();ye();bs();Ve=R("webdriver"),[sr,lE]=[0,2],{extractElementId:bh,getCdpAddressForHost:uE}=H,nr=()=>(Ee(),ie(Cr)).getSessionPlayer().codeSnippets,dE=()=>(Ee(),ie(Cr)).getSessionPlayer().locatorBuilderUtils,wh=()=>(Ee(),ie(Cr)).getSessionPlayer().utils;Nr=class extends Si{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,s,n,o,i,a,c=new Wt,l=!1,d){var h,g,y,T,A;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=Ti(e,t,s,n,o,i,a,d);m.desiredCapabilities&&delete m.desiredCapabilities.marionette,m.capabilities&&delete m.capabilities.alwaysMatch.marionette,this.initUnsupportedActions(d==null?void 0:d.isLambdatestRun()),this.browserAndOS=null,this.seleniumPerfStats=c;let p=l?0:1500,f=l?()=>{}:()=>this.executeJS("window.focus()");try{_("before initClient in webdriver.js init");let b=await this.initClient(m,t,a);_("after initResult before getCdpAddress in init"),this.cdpUrl=await pE(b),_("after getCdpAddress in webdriver.js init"),Ve.info(`init new session testName: ${t}`,{sessionId:this.getSessionId(),testResultId:a}),await se(p),await f(),_("after focus and delay in webdriver.js init")}catch(b){if(Ve.error("failed to init webdriver",{err:b}),b.seleniumStack){let v=new _t(b.seleniumStack),x=((A=(T=e==null?void 0:e.company)==null?void 0:T.activePlan)==null?void 0:A.plan)==="free";throw v.message.includes("timed out waiting for a node")&&x?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=>Xe.zip(Xe.dropRight(n,1),Xe.drop(n,1)),t=this._keepAliveRequests.map(({start:n})=>n).filter(Boolean),s=e(t).map(([n,o])=>o-n);return Math.max(...s)}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 s(a){e._keepAliveRequests.push({start:Date.now(),id:a})}function n(a,c){(e._keepAliveRequests.find(l=>l.id===c)||{})[a]=Date.now()}function o(){return window.getTestimStatus&&window.getTestimStatus()}if(e.queue.getQueueLength()>0)return Promise.resolve();let i=z();return s(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,Ve.warn("close unexpected alert open"),e.alertAccept().catch(c=>Ve.warn("failed to click on alert",{err:c}));if(Ve.warn("err while getting testim status",{err:a}),e._isAlive=!1,e.isClosedBrowserError(a)){e.browserClosedFailedKeepAlives++;let c=3;e.browserClosedFailedKeepAlives>=c&&e.browserClosedCallbacks.forEach(l=>{try{l(a)}catch{}})}else e.browserClosedFailedKeepAlives=0})};this.keepAliveTimer=setInterval(t,1e4)}switchToLocatedFrame(e){return this.getElement(e).then(async t=>{let s=bh(t.value);return await this.switchToFrame({ELEMENT:s,[Hr]:s}),t})}switchToFrame(e){return this.frame(e)}switchToTopFrame(){return this.frame().catch(e=>{var t;throw(t=e.message)!=null&&t.includes("ECONNREFUSED")?new Ws:e})}getElement(e){let t=this.seleniumPerfStats.markStart(Ae.GET_ELEMENT);return typeof e=="string"||typeof e=="number"?this.getElementBySelector(`[testim_dom_element_id='${e}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Ae.GET_ELEMENT)):e&&e.shadowPath&&e.shadowPath.length||M.flags.runGetElementCodeInAut.isEnabled()&&this.isSafari()?this.execute(`
|
|
28
|
+
var fn = ${nr().getLocatedElementCode};
|
|
29
29
|
return fn.apply(null, arguments);
|
|
30
|
-
`,e).finally(()=>this.seleniumPerfStats.markEnd(t,
|
|
31
|
-
var getLocatedElement = ${
|
|
30
|
+
`,e).finally(()=>this.seleniumPerfStats.markEnd(t,Ae.GET_ELEMENT)):this.getElementBySelector(`[testim_dom_element_id='${e&&e.testimId}']`).finally(()=>this.seleniumPerfStats.markEnd(t,Ae.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,s){return this.timeouts("script",t).then(()=>this.executeAsync(e,s))}async markDynamicParent(e,t,s){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 = ${nr().getLocatedElementCode};
|
|
32
32
|
var setDynamicParentAttribute = ${n.toString()};
|
|
33
33
|
return setDynamicParentAttribute.apply(null, arguments)
|
|
34
|
-
`,{attributeName:
|
|
35
|
-
var getLocatedElement = ${
|
|
34
|
+
`,{attributeName:dE().DYNAMIC_PARENT_FIELD_NAME,attributeValue:t,locatedElement:e.locatedElement})}getLocatedElementRectWithPadding(e){function t(s){var n=getLocatedElement(s);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 = ${nr().getLocatedElementCode};
|
|
36
36
|
var getLocation = ${t.toString()};
|
|
37
37
|
return getLocation.apply(null, arguments)
|
|
38
|
-
`,e)}getElementLocationWithPadding(e){return this.getLocatedElementRectWithPadding(e)}getLocatedElementRect(e){function t(
|
|
39
|
-
var getLocatedElement = ${
|
|
38
|
+
`,e)}getElementLocationWithPadding(e){return this.getLocatedElementRectWithPadding(e)}getLocatedElementRect(e){function t(s){var n=getLocatedElement(s);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 = ${nr().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(
|
|
43
|
-
var getLocatedElement = ${
|
|
42
|
+
`,e)}getElementLocation(e){return this.getLocatedElementRect(e.locatedElement)}getTargetText(e){return this.getElementTextJS(e.locatedElement)}getElementTextJS(e){function t(s,n){function o(d){if(!d.childNodes||d.childNodes.length===0)return d;var m=Array.apply(null,d.childNodes).filter(function(p){return p.nodeType===Node.ELEMENT_NODE});return m.forEach(function(p){typeof p.tagName=="string"&&p.tagName.toLowerCase()==="title"?d.removeChild(p):o(p)}),d}function i(d){var m=d.tagName;return m==="INPUT"||m==="TEXTAREA"}function a(d){try{if(d.shadowRoot&&Object.getOwnPropertyDescriptor(d.ownerDocument.defaultView.Node.prototype,"textContent").get.toString().indexOf("[native code]")===-1)return d.shadowRoot.textContent.replace(/(\r\n|\n|\r)/gm,"")}catch{}if(n&&Array.prototype.some.call(d.children,function(f){return f.hidden})){var m=d.cloneNode(!0),p=Array.prototype.filter.call(m.children,function(f){return f.hidden});return p.forEach(function(f){m.removeChild(f)}),m.textContent.replace(/(\r\n|\n|\r)/gm,"")}return d.textContent.replace(/(\r\n|\n|\r)/gm,"")}function c(d){if(i(d))return d.value;if(d instanceof SVGElement){var m=d.cloneNode(!0);return o(m).textContent.replace(/(\r\n|\n|\r)/gm,"")}else return a(d)}var l=getLocatedElement(s);return l?c(l):""}return this.executeJS(`
|
|
43
|
+
var getLocatedElement = ${nr().getLocatedElementCode};
|
|
44
44
|
var extractText = ${t.toString()};
|
|
45
45
|
return extractText.apply(null, arguments)
|
|
46
|
-
`,e,this.ignoreHiddenTagsText).then(
|
|
47
|
-
var getLocatedElement = ${
|
|
48
|
-
var dispatchFocus = ${
|
|
49
|
-
var doubleClick = ${
|
|
46
|
+
`,e,this.ignoreHiddenTagsText).then(s=>s.value)}getHTML(e){let t=nr().getHtmlCode(null,e),s=this.seleniumPerfStats.markStart(Ae.GET_HTML);return this.executeJS(t).then(n=>(this.seleniumPerfStats.markEnd(s,Ae.GET_HTML),n.value)).catch(n=>{this.seleniumPerfStats.markEnd(s,Ae.GET_HTML);let o=Object.assign(new Error,{success:!1,reason:n.toString(),errorType:"internal-error"});throw this.client.requestHandler.sessionID||(o.extraInfo="Inside getHtml catch and trying to check if in quirks mode - but the session has already terminated"),o})}maximizeWithoutValidation(){return this.windowHandleMaximize()}setViewportSizeNEW(e,t){let n=function(){return{screenWidth:Math.floor(window.innerWidth||0),screenHeight:Math.floor(window.innerHeight||0)}},o=(a,c=1)=>this.windowHandleSize().then(l=>this.execute(n).then(d=>{let m=l.value.width-d.value.screenWidth,p=l.value.height-d.value.screenHeight;return this.windowHandleSize({width:a.width+m,height:a.height+p})}).then(()=>this.execute(n)).then(d=>{if(c<5&&(d.value.screenWidth!==a.width||d.value.screenHeight!==a.height))return o(a,c+1)}));if(typeof e!="object"||typeof e.width!="number"||typeof e.height!="number"||typeof t<"u"&&typeof t!="boolean")throw new Error("number or type of arguments don't agree with setViewportSize command");return(typeof t>"u"?!0:t)?o(e):this.windowHandleSize(e)}setViewportSize(e,t){var s=!0;return this.setViewportSizeNEW({width:e,height:t},s)}getBrowserMajorVersion(e){try{return parseInt(e.browser.major,10)}catch(t){return Ve.error("failed to get browser version",{err:t}),0}}getBrowserAndOS(){function e(t,s){var n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(n[1]))return"Internet Explorer "+s.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 s=t.value,n=(0,Th.default)(s),o=n.os;return this.browserAndOS={os:o.name+" "+o.version,browserMajor:this.getBrowserMajorVersion(n),browser:e(t.value,n.browser),userAgent:s,browserVersion:n.browser.version},this.browserAndOS})}getUserAgentInfo(){return this.executeJS(`return ${nr().getUserAgentInfo()}`).then(e=>e.value)}setValue(e,t){return super.setValue(e,t)}getRelativeMoveActions(e,t){let{rect:s,clickOffset:n}=e,o=this.inViewCenter(s),i=Math.floor(n.x-o.x),a=Math.floor(n.y-o.y);return!wh().isWithinBounds(-o.x,o.x,i)||!wh().isWithinBounds(-o.y,o.y,a)?(Ve.warn("using center as fallback for offset"),this.getMoveActions(0,0,t)):this.getMoveActions(i,a,t)}computeAbsoluteMovement(e){let{frameOffset:t,rect:s,clickOffset:n}=e,o=s.left+n.x+t.x,i=s.top+n.y+t.y;return{x:o,y:i}}actWithActionsAPI(e,t,s,n){let o=this.getRelativeMoveActions(e,s),i=this.getClickActions(n,t);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:o.concat(i)}]).catch(a=>{Ve.error("tried to use element origin but failed because of visibility, trying absolute",a);let{x:c,y:l}=this.computeAbsoluteMovement(e),d=this.getMoveActions(c,l);return this.actions([{type:"pointer",id:"mouse",parameters:{pointerType:"mouse"},actions:d.concat(i)}])})}doubleClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,sr,e,["pointerDown","pointerUp","pointerDown","pointerUp"])}doubleClickWithJS(e){return this.executeCodeAsync(`
|
|
47
|
+
var getLocatedElement = ${nr().getLocatedElementCode};
|
|
48
|
+
var dispatchFocus = ${Lr.toString()};
|
|
49
|
+
var doubleClick = ${gh.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(
|
|
54
|
-
var ${y} = require('${
|
|
53
|
+
`,e.timeout,e)}getClickActions(e=[],t){return e.map(s=>({type:s,button:t}))}getClickActionList(e=[],t){return[{type:"pointer",id:"mouse",actions:this.getClickActions(e,t)}]}leftClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,sr,e,["pointerDown","pointerUp"])}rightClickWithActionsAPI(e,t){return this.actWithActionsAPI(t,lE,e,["pointerDown","pointerUp"])}rightClick(e,t){return this.unsupportedActions.move?this.rightClickWithActionsAPI(e,t):super.rightClick(e).catch(s=>{if(Fe(s))return this.unsupportedActions.move=!0,this.rightClickWithActionsAPI(e,t);throw s})}leftClick(e,t){return this.unsupportedActions.move?this.leftClickWithActionsAPI(e,t):super.leftClick(e).catch(s=>{if(Fe(s))return this.unsupportedActions.move=!0,this.leftClickWithActionsAPI(e,t);throw s})}dragAndDropOldAPI(e,t){return this.moveTo(e).then(()=>this.buttonDown()).then(()=>this.moveTo(t)).then(()=>this.buttonUp())}calculateElementMiddlePoint(e,t={top:0,left:0}){return this.getLocatedElementRect(e).then(s=>{if(!s||!s.value)throw Ve.warn(`could not find element for locatedElement ${e}`),new Error("could not calculate rect");let{x:n,y:o,width:i,height:a}=s.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{x:s,y:n}=t.clickOffset;return this.moveTo(e,s,n).catch(o=>{if(Fe(o))return this.unsupportedActions.move=!0,this.moveToElementWithActionsAPI(e,t);throw o})}getMoveActions(e=1,t=1,s="viewport",n=0){return[{type:"pointerMove",duration:n,x:Math.floor(e)||1,y:Math.floor(t)||1,origin:s}]}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(s=>{Ve.error("tried to use element origin but failed because of visibility, trying location",s);let n=this.computeAbsoluteMovement(t);return this.moveWithActionsAPI(n)})}getDragCoordinates(e){let t=e.filter(o=>o.event==="mousemove"||o.event==="pointermove"),s=Xe.first(t).pointerPosition,n=Xe.last(t).pointerPosition;return{xDiff:n.screenX-s.screenX,yDiff:n.screenY-s.screenY}}dragWithMoveTo(e,t,s,n,o){return this.moveTo(e,n,o).then(()=>this.buttonDown()).then(()=>this.moveTo(e,t,s)).then(()=>this.buttonUp())}dragWithActionsAPI(e,t,s,n,o){let i=this.getMoveActions(n,o,e,1),a=this.getClickActions(["pointerDown"],sr),c=this.getMoveActions(t,s,"pointer",1),l=this.getClickActions(["pointerUp"],sr);return this.actions([{type:"pointer",id:"mouse",actions:i.concat(a).concat(c).concat(l)}])}drag(e,t,s,n,o){let{width:i,height:a}=t,c=s-i/2+1,l=n-a/2;return this.getDragCoordinates(o).then(d=>{let{xDiff:m,yDiff:p}=d;return this.unsupportedActions.move?this.dragWithActionsAPI(e,m,p,c,l):this.dragWithMoveTo(e,m,p,c,l).catch(f=>{if(Fe(f))return this.unsupportedActions.move=!0,this.dragWithActionsAPI(e,m,p,c,l);throw f})})}getMoveRelativeSequence(e,t,s,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:s,y:n},l=10,d=Math.round(i(a,c)/l),m=Array.apply([],new Array(d)).map(()=>({x:Math.round((c.x-a.x)/d),y:Math.round((c.y-a.y)/d)}));return[{x:1,y:1}].concat(m)}getMoveAbsoluteSequence(e,t,s,n){return this.getMoveRelativeSequence(e,t,s,n).reduce((i,a)=>{let c=Xe.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,s){let{fromRect:n,fromX:o,fromY:i,toRect:a,toX:c,toY:l}=s,d=this.getMoveRelativeSequence(n.left+o,n.top+i,a.left+c,a.top+l);await this.moveTo(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(t,Math.round(c),Math.round(l)),await this.buttonUp()}dragAndDropWithActionsAPIWithGeneratedMoves(e){let{fromRect:t,fromX:s,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+s),l=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a),p=this.getMoveAbsoluteSequence(t.left+s,t.top+n,o.left+i,o.top+a),f=this.getMoveActions(c,l),h=this.getClickActions(["pointerDown"],sr),g=Xe.flatMap(p,b=>this.getMoveActions(b.x,b.y)),y=this.getMoveActions(d,m),T=this.getClickActions(["pointerUp"],sr),A=f.concat(h).concat(g).concat(y).concat(T);return this.actions([{type:"pointer",id:"mouse",actions:A}])}dragAndDrop(e,t,s){return this.isSafari()?this.unsupportedActions.move?this.dragAndDropWithActionsAPIWithGeneratedMoves(s):this.dragAndDropWithGeneratedMoves(e,t,s).catch(n=>{if(Fe(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPIWithGeneratedMoves(s);throw n}):this.unsupportedActions.move?this.dragAndDropWithActionsAPI(s):this.dragAndDropOldAPI(e,t).catch(n=>{if(Fe(n))return this.unsupportedActions.move=!0,this.dragAndDropWithActionsAPI(s);throw n})}doubleClickFallback(e,t,s){return this.isSafari()?this.doubleClickWithJS(t):this.doubleClickWithActionsAPI(e,s)}doubleClick(e,t,s){return this.unsupportedActions.move||this.isSafari()?this.doubleClickFallback(e,t,s):this.doDoubleClick(e).catch(n=>{if(Fe(n))return this.unsupportedActions.move=!0,this.doubleClickFallback(e,t,s);throw n})}dragAndDropWithActionsAPI(e){let{fromRect:t,fromX:s,fromY:n,toRect:o,toX:i,toY:a}=e,c=Math.round(t.left+s),l=Math.round(t.top+n),d=Math.round(o.left+i),m=Math.round(o.top+a);return this.moveWithActionsAPI({x:c,y:l}).then(()=>{let p=this.getClickActionList(["pointerDown"],sr);return this.actions(p)}).then(()=>this.moveWithActionsAPI({x:d,y:m})).then(()=>{let p=this.getClickActionList(["pointerUp"],sr);return this.actions(p)})}getTabIds(){return this.windowHandles().then(e=>e.value)}isVisible(e){return this.elementIdDisplayed(bh(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(s=>Ve.error("error getting element location",{err:s})).then(s=>s!=null&&s.value?{top:s.value.y,left:s.value.x,width:s.value.width,height:s.value.height}:t)}end(){return Ve.info("delete session",{sessionId:this.getSessionId()}),this.getSessionId()||Ve.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}}async submit(e){if(this.unsupportedActions.submit)return await super.submitFormManually(e);try{return await super.submitForm(e)}catch(t){if(Fe(t))return this.unsupportedActions.submit=!0,super.submitFormManually();throw t}}}});var yu,bu,Ii,wu=w(()=>{"use strict";j();ye();Te();yu=R("lab-features-service"),bu=class{constructor(){this.featuresForProject=[];this.labBatman=!1}async loadLabFeatures(e,t){(!t||!e)&&(yu.error("missing companyPlan or projectId when loading lab features",{companyPlan:t,projectId:e}),this.featuresForProject=[]);try{let s=this.isLabsEnabledForCompany(t),n=s?await Xc(e):[];this.featuresForProject=n,this.labBatman=s}catch(s){yu.error("failed loading lab features",{err:s,companyPlan:t,projectId:e}),this.featuresForProject=[]}}isFeatureAvailableForProject(e){let t=M.flags[e];this.validateAsLabFeatureFlag(t);let s=t.getValue();if(s==="disabled")return!1;if(s==="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 yu.error(t,{featureFlagName:e.name}),new Error(t)}},Ii=new bu});function Sh(r){let e=/^\\\\\?\\/.test(r),t=/[^\u0000-\u0080]+/.test(r);return e||t?r:r.replace(/\\/g,"/")}function mE(r,e,t,s,n={},o=void 0,i=void 0){let a=Object.keys(n).reduce((g,y)=>(g+=`
|
|
54
|
+
var ${y} = require('${Sh(n[y])}');
|
|
55
55
|
`,g),""),c=i?`
|
|
56
|
-
${
|
|
56
|
+
${vu.default.toString()}
|
|
57
57
|
var fileBuffer = dataUriToBuffer('${i}');
|
|
58
|
-
`:"var fileBuffer = null;";function l(g,y){function
|
|
58
|
+
`:"var fileBuffer = null;";function l(g,y){function T(){return g.apply(this,y)}return T.prototype=g.prototype,new T}let d=`
|
|
59
59
|
|
|
60
60
|
const getMessage = arguments => {
|
|
61
61
|
const args = Array.prototype.slice.call(arguments);
|
|
@@ -171,7 +171,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
|
|
|
171
171
|
|
|
172
172
|
${d}
|
|
173
173
|
|
|
174
|
-
var isPromise = ${
|
|
174
|
+
var isPromise = ${no.toString()}
|
|
175
175
|
|
|
176
176
|
const {incomingParams, context, code} = input;
|
|
177
177
|
|
|
@@ -197,17 +197,17 @@ ${((C=n.warnings)==null?void 0:C.join(`
|
|
|
197
197
|
${m}
|
|
198
198
|
|
|
199
199
|
injectCode(params, args, incomingParams, context, code, done);
|
|
200
|
-
`,f=[],h=(0,
|
|
201
|
-
var res = requireOrImportMethod('${
|
|
200
|
+
`,f=[],h=(0,xi.spawn)(l(Function,["input","done","progress",p]));return te(new Promise(g=>{h.send({incomingParams:e,context:t,code:s}).on("message",y=>{let T=Object.assign({},y,{tstConsoleLogs:f});Ue.debug("Run code worker response",{messageWithLogs:T,transactionId:r}),g(T)}).on("progress",y=>{f.push(y)}).on("error",y=>{y.message==="malformed data: URI"?Ue.error("Run code worker error",{err:y,transactionId:r,fileDataUrl:i}):Ue.error("Run code worker error",{err:y,transactionId:r}),g({tstConsoleLogs:f,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{Ue.debug("Run code worker has been terminated",{transactionId:r})})}),o).catch(g=>{if(!(g instanceof J))throw g;return Ue.warn("timeout to run code",{transactionId:r,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 fE(r){try{return{sync:!0,lib:globalThis.require(r)}}catch(e){if(e.code==="ERR_REQUIRE_ESM"){let t=globalThis.require("path");return{sync:!1,lib:Tu.promises.readFile(`${Ts}${t.sep}package.json`).then(n=>{let o=JSON.parse(n);return import(t.join(r,o.main||`${t.sep}index.js`))})}}throw e}}function hE(r,e,t,s,n={},o=void 0,i=void 0){Dr||(Dr=require("worker_threads"));let{Worker:a}=Dr,c=Object.keys(n).reduce((y,T)=>(y+=`
|
|
201
|
+
var res = requireOrImportMethod('${Sh(n[T])}');
|
|
202
202
|
if (res.sync) {
|
|
203
|
-
var ${
|
|
203
|
+
var ${T} = res.lib;
|
|
204
204
|
} else {
|
|
205
|
-
var ${
|
|
205
|
+
var ${T} = await res.lib;
|
|
206
206
|
}
|
|
207
207
|
`,y),""),l=i?`
|
|
208
|
-
${
|
|
208
|
+
${vu.default.toString()}
|
|
209
209
|
var fileBuffer = dataUriToBuffer('${i}');
|
|
210
|
-
`:"var fileBuffer = null;";function d(y,
|
|
210
|
+
`:"var fileBuffer = null;";function d(y,T){function A(){return y.apply(this,T)}return A.prototype=y.prototype,new A}let m=`
|
|
211
211
|
const getMessage = arguments => {
|
|
212
212
|
const args = Array.prototype.slice.call(arguments);
|
|
213
213
|
let message = args.shift() + '';
|
|
@@ -328,7 +328,7 @@ ${((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 = ${
|
|
331
|
+
var requireOrImportMethod = ${fE}
|
|
332
332
|
|
|
333
333
|
// requireCode will set async to be true if needed.
|
|
334
334
|
${c}
|
|
@@ -337,7 +337,7 @@ ${((C=n.warnings)==null?void 0:C.join(`
|
|
|
337
337
|
|
|
338
338
|
${m}
|
|
339
339
|
|
|
340
|
-
var isPromise = ${
|
|
340
|
+
var isPromise = ${no.toString()}
|
|
341
341
|
|
|
342
342
|
parentPort.once('message', input => {
|
|
343
343
|
const {incomingParams, context, code} = input;
|
|
@@ -366,72 +366,72 @@ ${((C=n.warnings)==null?void 0:C.join(`
|
|
|
366
366
|
injectCode(params, args, incomingParams, context, code);
|
|
367
367
|
});
|
|
368
368
|
})();
|
|
369
|
-
`,h=[],g=new a(f,{eval:!0});return re(new Promise(y=>{g.on("message",w=>{if(w.action==="finish"){let{data:C}=w,b=Object.assign({},C,{tstConsoleLogs:h});De.debug("Run code worker response",{messageWithLogs:b,transactionId:s}),y(b)}else w.action==="progress"&&h.push(w.data)}).on("error",w=>{w.message==="malformed data: URI"?De.error("Run code worker error",{err:w,transactionId:s,fileDataUrl:i}):De.error("Run code worker error",{err:w,transactionId:s}),y({tstConsoleLogs:h,status:"failed",result:{resultValue:w==null?void 0:w.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{De.debug("Run code worker has been terminated",{transactionId:s})}),g.postMessage({incomingParams:e,context:JSON.parse(JSON.stringify(t)),code:r})}),o).catch(y=>{if(!(y instanceof X))throw y;return De.warn("timeout to run code",{transactionId:s,err:y}),{tstConsoleLogs:h,status:"failed",result:{resultValue:y==null?void 0:y.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1}}).finally(()=>g==null?void 0:g.terminate())}async function NS(s){try{await Fu.promises.rm(s,{recursive:!0,force:!0})}catch(e){De.warn("failed to remove install npm packages folder",{err:e})}}function Yh(s,e,t,r){return`${e}_${t}_${s}_${r}`}async function Is(s,e,t,r,n,o){let i=Yh(n,e,s,t),{data:a}=await DS(i,r,o);return a}async function xs(s,e,t,r,n,o,i,a,c,l){var h;let d=Object.fromEntries(((h=t.nodePackageParams)==null?void 0:h.map(g=>[g.paramName,g.testimPackageLocalLocation]))||[]),m=Yh(i,n,e,o);if(l){let g=await gn(l);g&&(c=g)}if(typeof Br>"u")try{Br=require("worker_threads")}catch{Br=!1}Buffer.isBuffer(c)&&(De.debug("runCodeWithPackages: converted a buffer to base 64 string data URI",{fileDataUrl:c}),c=c.toString());let p="data:,";if(c==="data:"&&(De.debug("runCodeWithPackages, fileDataUrl was an empty string ",{fileDataUrl:c}),c=p),Br&&U.flags.enableWorkerThreadsCliCodeExecution.isEnabled()){let g=await LS(m,t,r,s,d,a,c);return Object.assign({},g,{nodeVersion:process.version})}let f=await _S(m,t,r,s,d,a,c);return Object.assign({},f,{nodeVersion:process.version})}async function DS(s,e,t){let r=e.map(c=>`${c.packageName}@${c.packageVersion}`),n=Qh(),o=Rs.join(n,`/${s}`),i=global.proxyUri;async function a(){let c="";try{if(c=await um(o,r,i,t),De.info("npm package install finished",{transactionId:s,output:c,timeout:t}),Number(c.trim().split(" ")[1])<r.length)throw"npm package install failed, couldn't install all packages";return{data:e.map(d=>{let m=lm(o,d.packageName),p=`${d.packageName}@${m}`,f=Rs.resolve(o,"node_modules",d.packageName);return Object.assign({},d,{packageFullName:p,packageLocalLocation:f})}),installFolder:o}}catch(l){throw De.warn("npm package install failed",{transactionId:s,err:l}),l}}try{return await re(a(),t)}catch(c){throw c instanceof X&&De.warn("timeout to install package",{packages:r,transactionId:s,err:c,timeout:t}),c}}function Qh(){return Rs.join(Jh.tmpdir(),"/testim_local_packages")}function Zh(){let s=Qh();return NS(s)}var Fu,Jh,Rs,ju,ki,De,Br,$r=T(()=>{"use strict";Fu=E(require("fs")),Jh=E(require("os")),Rs=E(require("path"));F();ln();ju=E(require("data-uri-to-buffer")),ki=require("threads");z();j();Te();be();De=x("cli-service");ki.config.set({basepath:{node:__dirname}})});var rr={};$(rr,{run:()=>US});function MS(s,e){try{let t=e.defaults.enforceMaximumJsResultSize,r=U.flags.maximumJsResultSize.getValue(),n=JSON.stringify(s).length>r;return t?n:!1}catch{return!1}}var US,eg=T(()=>{"use strict";$r();z();be();US=async(s,e,t)=>{let{code:r,stepId:n,incomingParams:o,context:i,testResultId:a,retryIndex:c,stepResultId:l,runTimeout:d,fileDataUrl:m,s3filepath:p}=e.data;try{let f=await xs(r,n,o,i,a,c,l,d,m,p);return f&&MS({result:f.result,tstConsoleLogs:f.tstConsoleLogs},t)?{code:"js-result-max-size-exceeded",success:!1}:{data:f,success:!0}}catch(f){throw f instanceof X?new Error("Timeout while running action"):f}}});var Bu,Cs,$u=T(()=>{"use strict";j();Bu=x("cookies-utils"),Cs=class{constructor(e){this.driver=e}async set(e){let t=e.domain;!e.hostOnly&&t&&!t.startsWith(".")&&(t=`.${t}`);try{return await this.driver.setCookie(e.name,e.value,t,e.httpOnly,e.secure,e.path,e.expirationDate)}catch(r){throw Bu.error("failed to set cookie",{err:r}),r}}async get(e){try{return await this.driver.getCookie(e.name)}catch(t){throw Bu.error("failed to get cookie",{err:t}),t}}async remove(e){try{return await this.driver.deleteCookie(e.name)}catch(t){throw Bu.error("failed to remove cookie",{err:t}),t}}}});var Wu,FS,As,Gu=T(()=>{"use strict";F();Wu=E(require("p-retry"));F();j();z();FS=x("window-utils"),As=class{constructor(e,t){this.id=e,this.driver=t}getElementFromPoint(e,t){function r(n,o){var i=document.elementFromPoint(n,o);return{testimId:i?i.getAttribute("testim_dom_element_id"):null,tagName:i?i.tagName:null}}return this.driver.executeJS(r,e,t).then(n=>n.value)}getLocation(){return this.driver.getUrl()}stopListeningToScroll(){return Promise.resolve()}resumeListeningToScroll(){return Promise.resolve()}scrollToPosition(e){return this.driver.scroll(e.x,e.y)}scrollToPositionWithoutAnimation(e){function t(r){var n="scrollBehavior"in document.documentElement.style;return n?window.scrollTo({left:r.x,top:r.y,behavior:"instant"}):window.scrollTo(r.x,r.y)}return this.driver.executeJS(t,e)}getCurrentScrollPosition(){function e(){return{x:window.scrollX,y:window.scrollY}}return this.driver.executeJS(e).then(t=>t.value)}navigate(e,t=15e3){let r=this;async function n(o=3){try{await r.driver.url(e)}catch(i){if(i.seleniumStack&&i.message.includes("method IWebBrowser2::Navigate2() failed")&&o>0)return FS.warn("selenium navigation failed. retrying to navigate",{err:i}),await ie(1500),n(o-1);throw i}}return Promise.race([n(),ie(t)])}reloadTab(e=15e3){return Promise.race([this.driver.reloadTab(),ie(e)])}getViewportSize(){return this.driver.getViewportSize()}maximizeWithoutValidation(){return this.driver.maximizeWithoutValidation()}getFullPageSize(){function e(){var t=document.body,r=document.documentElement,n=Math.max(t.scrollHeight,t.offsetHeight,r.clientHeight,r.scrollHeight,r.offsetHeight),o=Math.max(t.scrollWidth,t.offsetWidth,r.clientWidth,r.scrollWidth,r.offsetWidth);return{height:n,width:o}}return this.driver.executeJS(e).then(t=>t.value)}extractToNewWindow(){return Promise.resolve()}async checkSize(e){await ie(1e3);let t=await this.getViewportSize();return t.width!==e.width||t.height!==e.height?Promise.reject({actualSize:t,expectedSize:e}):{actualSize:t,expectedSize:e}}async setViewportSize(e){return await this.driver.setViewportSize(e.width,e.height),await this.checkSize(e)}async validatePageIsAvailable(){function e(){var r;if(typeof location<"u")r=location;else if(typeof window<"u"&&typeof window.location<"u")r=window.location;else return!1;return r.href!=="chrome-error://chromewebdata/"&&r.href!=="safari-resource:/ErrorPage.html"&&r.href.indexOf("res://ieframe.dll/http_404.htm")!==0&&r.href.indexOf("ms-appx-web://microsoft.microsoftedge/assets/errorpages/")!==0}if(!(await this.driver.executeJS(e)).value)throw new ot("validatePageIsAvailable:PageNotAvailableError")}focusTab(){return this.driver.switchTab(this.id)}quit(){}async getOsAndBrowser(){let e=await(0,Wu.default)(()=>this.driver.getBrowserAndOS(),{retries:3});return{uaBrowserName:e.browser,uaOs:e.os,userAgent:e.userAgent,browserVersion:e.browserVersion}}getUserAgentInfo(){return(0,Wu.default)(()=>this.driver.getUserAgentInfo(),{retries:3})}}});var qu,_i,tg=T(()=>{"use strict";qu=E(require("p-retry")),_i=class{constructor(e,t,r={takeScreenshots:!0}){this.tabId=e,this.driver=t,this.options=r}base64AddPadding(e){return e+Array((4-e.length%4)%4+1).join("=")}shouldTakeScreenshots(){return typeof this.options.takeScreenshots!="boolean"?!0:this.options.takeScreenshots}async takeScreenshot(){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let e=3,t=2e3,r=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),n=()=>Promise.all([r,this.driver.takeScreenshot()]),[o,i]=await(0,qu.default)(n,{retries:e,minTimeout:t}),a=i?i.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(a.replace(/[\r\n]/g,""))}`,devicePixelRatio:o}}async takeElementScreenshot(e){if(!this.shouldTakeScreenshots())return{devicePixelRatio:1,image:""};let t=3,r=2e3,n=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),o=()=>Promise.all([n,this.driver.takeElementScreenshot(e)]),[i,a]=await(0,qu.default)(o,{retries:t,minTimeout:r}),c=a?a.value:"";return{image:`data:image/png;base64,${this.base64AddPadding(c.replace(/[\r\n]/g,""))}`,devicePixelRatio:i}}getDevicePixelRatio(){function e(){try{return window.devicePixelRatio}catch{return 1}}return this.driver.executeJS(e).then(t=>t.value)}forcePixelRatio(e=1){return this.currentDevicePixelRatio=e,Promise.resolve()}getCurrentDevicePixelRatio(){return this.currentDevicePixelRatio}}});async function rg(s,e){let t=e.image||e,r=e.devicePixelRatio;if(!t)throw new Error("Failed to get image");let n=t.match(/^data\:[^;]*\;base64,(.*)$/);if(!n)throw new Error("Image is not in base64 format");let o=s.offset||{top:0,left:0};if(o.top*=r,o.left*=r,!s.elementRect)return jS.warn("missing elementRect",ng.omit(s,"image")),{};let{elementRect:i}=s,a=await ks.default.read(Buffer.from(n[1],"base64")),c=i.left*r+o.left*r,l=i.top*r+o.top*r,d=i.width*r,m=i.height*r;c<0&&(d+=c,d=d<0?0:d,c=0),l<0&&(m+=l,m=m<0?0:m,l=0);let p=a.bitmap.width,f=a.bitmap.height;if(c+d>p&&(d=p-c),l+m>f&&(m=f-l),m<=0||d<=0)throw new Dn("height or width is equal or lower than zero");return{elementImage:await a.crop(c,l,d,m).getBase64Async(ks.default.MIME_PNG)}}async function BS(s,e){let t=await ks.default.read(s.width,s.height);for(let n of e){let o=n.image.match(/^data\:[^;]*\;base64,(.*)$/),i=await ks.default.read(Buffer.from(o[1],"base64"));await new Promise((a,c)=>{t.composite(i,n.position.left,n.position.top,l=>{if(l){c(l);return}a()})})}return await t.getBase64Async(ks.default.MIME_PNG)}function $S(s,e){return BS(s,e)}function WS(){return Promise.resolve()}function GS(s){function e(r){return typeof s[r]=="string"&&s[r].startsWith("data")}function t(r){return WS(s[r]).then(n=>({key:r,url:n}))}return Promise.all(Object.keys(s).filter(e).map(t)).then(r=>r.reduce((n,o)=>(n[o.key]=o.url,n),s))}function sg(s,e){return e=e||1,s=s||{left:0,top:0,width:0,height:0},{left:e*Math.round(s.left),top:e*Math.round(s.top),width:e*Math.round(s.width),height:e*Math.round(s.height),pixelRatio:e}}var ng,ks,jS,Dn,Oi,og=T(()=>{"use strict";ng=E(require("lodash"));F();ks=E(require("jimp"));j();jS=x("image-capture-utils"),Dn=class extends Error{constructor(e){super(e),this.rectIsOutsideOfImageError=!0,Object.setPrototypeOf(this,Dn.prototype)}};Oi=class{constructor(e,t,r){this.windowUtils=t,this.screenshotUtils=r}async takeViewPortImage(){let e=await this.screenshotUtils.takeScreenshot();return typeof e=="string"?e:e.image}takeImageForComparison(){return this.takeViewPortImage()}async takeAreaDataUrl(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot(),r=await rg(e,t);return r.screenImage=t.image,r.absoluteScreenHighlight=sg(e.elementRect,t.devicePixelRatio),r}async takeElementImage(e){let t=await this.screenshotUtils.takeElementScreenshot({ELEMENT:e});return typeof t=="string"?t:t.image}async takeArea(e){e.areas&&(e=e.areas);let t=await this.screenshotUtils.takeScreenshot();return GS({screenImage:t.image,absoluteScreenHighlight:sg(e.elementRect,t.devicePixelRatio)})}forcePixelRatio(e){return this.screenshotUtils.forcePixelRatio(e)}getCurrentDevicePixelRatio(){return this.screenshotUtils.getCurrentDevicePixelRatio()}async takeStitchedDataUrl(e){let{windowUtils:t,screenshotUtils:r}=this,n=()=>ie(250),o=Boolean(e);async function i(p,f){o?await t.scrollToPositionWithoutAnimation(p):await t.scrollToPosition(p),await n();let h=await r.takeScreenshot(),g=await rg({elementRect:f},h);return{position:{left:p.x+f.left,top:p.y+f.top},size:{width:f.width,height:f.height},image:g.elementImage}}async function a(p){let f=[];for(let h of p){let g=await i(h.scrollPos,h.cropData);f.push(g)}return f}function c(p,f){let h=Math.max(p.width,f.width),g=f.width,y=Math.max(p.height,f.height),w=f.height,C=Array.from({length:Math.ceil(h/g)},(v,I)=>({scrollX:Math.min(I*g,h-g),cropX:I*g-Math.min(I*g,h-g),cropW:g-(I*g-Math.min(I*g,h-g))})),b=Array.from({length:Math.ceil(y/w)},(v,I)=>({scrollY:Math.min(I*w,y-w),cropY:I*w-Math.min(I*w,y-w),cropH:w-(I*w-Math.min(I*w,y-w))}));return C.flatMap(v=>b.map(I=>({scrollPos:{x:v.scrollX,y:I.scrollY},cropData:{top:I.cropY,left:v.cropX,width:v.cropW,height:I.cropH}})))}async function l(p,f){let h=await t.getCurrentScrollPosition(),g=c(p,f),y=await a(g);return await t.scrollToPosition(h),$S(p,y)}let[d,m]=await Promise.all([t.getFullPageSize(),t.getViewportSize()]);return await l(d,m)}}});var ig,Li,Ni,ag=T(()=>{"use strict";ig=E(require("semver"));F();j();Gu();tg();og();Ee();Li=x("tab-service"),Ni=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){if(this.sessionTabs[e])return this.sessionTabs[e].tabCount}getAllOpenTabIds(e){let t=this.getAllTabInfos(e);return Object.keys(t).filter(r=>!t[r].isClosed)}getActiveTabInfo(e){return this.sessionTabs[e].lastActiveTabInfo}getAllTabIds(e){return Object.keys(this.getAllTabInfos(e)).map(t=>t)}isSessionTab(e,t){return this.getAllTabIds(e).includes(t)}createSesion(e){this.sessionTabs[e]||(this.addedTabs[e]=new Set,this.sessionTabs[e]={tabCount:0,tabInfos:{}})}setAddFrameHandlerCallBack(e){this.addFrameHandler=e}getAllTabInfoStrings(e){return this.getAllTabIds(e).map(r=>{let n=this.getTabInfo(e,r);return`tabId=${r}, url=${n.url}, order=${n.order}, isMain=${n.isMain}, openerStepId=${n.openerStepId}, isClosed=${n.isClosed}, currentUrl: ${n.currentUrl}, lastUpdatedUrl: ${n.lastUpdatedUrl}`})}getAllTabInfos(e){return this.sessionTabs[e].tabInfos}addNewTab(e,t,r,n={}){return this.addedTabs[e].has(t)?Promise.resolve():(this.addedTabs[e].add(t),Li.info(`Adding a new tab sessionId: ${e}, tabId: ${t}, openerId: ${r}`),this.addTab(e,t,this.sessionTabs[e].tabCount++,r,n))}addOpenerStepId(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r}addOpenerStep(e,t,r){this.sessionTabs[e].tabInfos[t].openerStepId=r.id,this.sessionTabs[e].tabInfos[t].openerOriginalStepId=r.originalStepId}fixMissingMainTab(e){if(this.getMainTabInfo(e))return;let r=this.getAllTabInfos(e);Object.keys(r).length!==0&&(Object.values(this.getAllTabInfos(e))[0].isMain=!0)}async buildTabInfo(e,t,r,n,o={}){let i=await this.getTabDetails(t,e,o),a=K();function c(l){return o.checkForMainTab?i.isMainTab:!i.isMainTab||i.isMainTab==="unknown"?!l.getMainTabInfo(e):i.isMainTab}return this.sessionTabs[e].tabInfos[t]={infoId:a,url:i.url,title:i.title,favIconUrl:i.favIconUrl,order:r,from:this.getTabInfo(e,i.openerTabId),isMain:c(this),openerStepId:n},a}async addTab(e,t,r,n,o={}){let i=await this.buildTabInfo(e,t,r,n,o),a=new As(t,this.driver);this._utils[i]={attachDebugger:()=>Promise.resolve(),detachDebugger:()=>Promise.resolve(),onDebuggerDetached:()=>{},tabId:t,domUtils:{getDOM:()=>Promise.resolve()},windowUtils:a,imageCaptureUtils:new Oi(t,a,new _i(t,this.driver,{takeScreenshots:o.takeScreenshots}))}}getTabUtilsByTabIdAndSessionId(e,t){let r=this.sessionTabs[e].tabInfos[t];return this._utils[r.infoId]}getTabUtilsByTabId(e){let t=Object.keys(this._utils).find(r=>this._utils[r].tabId===e);return this._utils[t]}getTabInfo(e,t){return this.sessionTabs[e].tabInfos[t]}getTabUtils(e,t){if(!t)return this.getMainTabUtils(e);if(this._utils[t.infoId])return this._utils[t.infoId];if(t.isMain)return this.getMainTabUtils(e);let r=this.getAllTabInfos(e),n=Object.keys(r).map(i=>r[i]).filter(i=>!i.isMain);if(n.length===1)return this._utils[n[0].infoId];let o=Object.keys(e).map(i=>e[i]).filter(i=>this.isSameTab(e,t,i));return o.length>0?this._utils[o[0].infoId]:this.getMainTabUtils(e)}exactUrlMatch(e,t,r){let n=r.filter(o=>o===t.url);return!!((e.url===t.url||e.currentUrl===t.url||e.currentUrl&&e.currentUrl===t.currentUrl)&&n.length===1)}singleExactMatchForParts(e,t,r,n){let{urlUtils:o}=se(),i=o.urlBreaker(e.url||e.currentUrl),a=o.urlBreaker(t.url||t.currentUrl),c=n(i),l=n(a),d=r.map(m=>o.urlBreaker(m)).map(m=>n(m)).filter(m=>m===c);return c===l&&d.length===1}isSameTab(e,t,r){let{tabMatcher:n}=se();if(n){let l=this.getAllTabInfos(e),d=Object.keys(l).map(m=>l[m]);return n.isSameTab(d,t,r)}if(t.isMain&&r.isMain||t.openerStepId&&r.openerStepId&&t.openerStepId===r.openerStepId)return!0;let o=this.getAllTabInfos(e),i=Object.keys(o).map(l=>o[l].url);if(this.exactUrlMatch(t,r,i))return!0;let a=l=>`${l.domain}/${l.path.join("/")}`;if(this.singleExactMatchForParts(t,r,i,a))return!0;let c=l=>`${l.domain}/${l.path.join("/")}#${l.hash}`;return!!(this.singleExactMatchForParts(t,r,i,c)||t.order===r.order)}getMainTabInfo(e){let t=this.getAllTabInfos(e);return Object.keys(t).map(r=>t[r]).find(r=>r.isMain)}getMainTabUtils(e){let t=this.getMainTabInfo(e);return t?this.getTabUtils(e,t):{}}removeTabInfo(e,t){let n=this.getAllTabInfos(e)[t];delete this.sessionTabs[e].tabInfos[t],delete this._utils[n.infoId],this.sessionTabs[e].tabCount--}getMainTabId(e){let t=this.getAllTabInfos(e);return Object.keys(t).find(r=>t[r].isMain)}isMainTabExists(e){return this.getMainTabId(e)?Promise.resolve(!0):Promise.resolve(!1)}clearAllTabs(e){let t=this.getAllTabInfos(e);this.sessionTabs[e].tabCount=0,Object.keys(t).forEach(r=>this.removeTabInfo(e,r))}clearNonMainTabs(e){let t=this.getAllTabInfos(e);Object.keys(t).filter(r=>!t[r].isMain).forEach(r=>this.removeTabInfo(e,r)),this.sessionTabs[e].tabCount=1}switchTab(e,t,{forceSwitch:r=!1}={}){let n=this.sessionTabs[t]?this.sessionTabs[t].tabCount:1;return typeof n=="number"&&n>1||r?this.driver.switchTab(e):Promise.resolve()}getTabDetails(e,t,r={}){return this.switchTab(e,t,r).then(()=>{if(r.skipLoadInfo)return{title:"",url:""};let n=Promise.resolve("unknown");return r.checkForMainTab&&(n=this.driver.executeJS("return window.__isMainTestimTab").then(o=>o.value)),Promise.all([this.driver.getTitle(),this.driver.getUrl(),n]).then(([o,i,a])=>({title:o,url:i,isMainTab:a}),o=>(Li.error("failed to get url or title",{err:o}),{title:"",url:""}))}).catch(n=>{Li.error("failed to switch to tab",{tabId:e,err:n})})}async getUnregisteredTabId(e){return(await this.driver.getTabIds()).find(r=>!this.getAllTabIds(e).includes(r))}async waitForTabToOpen(e){let t=await this.getUnregisteredTabId(e);return t||(await ie(500),await this.waitForTabToOpen(e))}async tryToAddTab(e,t){if(this.pendingTabs[e])return;let r=await this.getUnregisteredTabId(e);r&&(await this.addNewTab(e,r),await this.addFrameHandler(r),this.sessionTabs[e].currentTab=null)}addNewPopup(e,t){let r=this.getAllTabInfos(e);return Object.keys(r).find(o=>r[o].openerStepId===t)?Promise.resolve():this.pendingTabs[e]?(Li.info(`overriding opener step id from ${this.pendingTabs[e]} to ${t}`),this.pendingTabs[e]=t,Promise.resolve()):(this.pendingTabs[e]=t,this.waitForTabToOpen(e).then(o=>this.addNewTab(e,o,this.pendingTabs[e]).then(()=>this.addFrameHandler(o)).then(()=>delete this.pendingTabs[e]).then(()=>this.sessionTabs[e].currentTab=null)))}waitToPendingTabs(e,t){let n=3e3,o=this;return t?new Promise(i=>{function a(){o.pendingTabs[e]===t&&n-500>0?(n-=500,setTimeout(a,500)):i()}a()}):Promise.resolve()}isMainTabIncognito(){return Promise.resolve(!1)}isInvalidStepVersion(e){let t=ig.lt(e._version||e.version,"1.2.0"),r=!!e.parameterValues,n=r&&e.parameterValues.some(o=>o.type==="locate"&&!o.frameLocators);return t&&(!r||n)}getTabIdByTabInfo(e,t){var i,a;let{tabMatcher:r,commonConstants:n}=se();if(this.isInvalidStepVersion(t))return Promise.reject({success:!1,shouldRetry:!1,errorType:n.stepResult.INVALID_TEST_VERSION});if((i=t.useCurrentTab)!=null&&i.call(t))return this.driver.getCurrentTabId().then(c=>{if(c)return c;let l=this.getMainTabId(e);if(l)return l;throw new Error("Current tab not found")});let o=(a=t.tabInfo)==null?void 0:a.openerStepId;return this.waitToPendingTabs(e,o).then(()=>{let c;if(r){let l=this.getAllTabIds(e).map(d=>Object.assign({},this.getTabInfo(e,d),{tabId:d})).filter(d=>!d.isClosed);c=r.matchTabs(t,l)}else{let l=t.tabInfo;l?c=this.getAllTabIds(e).find(d=>{let m=this.getTabInfo(e,d);return this.isSameTab(e,m,l)}):c=this.getMainTabId(e)}return c?this.sessionTabs[e].currentTab===c?c:this.switchTab(c,e).then(()=>(this.sessionTabs[e].currentTab=c,c)).catch(l=>{let d=["no such window","no window found","the window could not be found"];if(l.message&&d.some(m=>l.message.toLowerCase().includes(m)))return this.sessionTabs[e].tabCount--,this.sessionTabs[e].tabInfos[c].isClosed=!0,this.getTabIdByTabInfo(e,t);throw l}):this.tryToAddTab(e,o).then(()=>{throw new Error("No tab ID found")})})}}});var Vu,Di,Hu=T(()=>{"use strict";Vu=class{constructor(){}select(){return console.log(`
|
|
369
|
+
`,h=[],g=new a(f,{eval:!0});return te(new Promise(y=>{g.on("message",T=>{if(T.action==="finish"){let{data:A}=T,b=Object.assign({},A,{tstConsoleLogs:h});Ue.debug("Run code worker response",{messageWithLogs:b,transactionId:r}),y(b)}else T.action==="progress"&&h.push(T.data)}).on("error",T=>{T.message==="malformed data: URI"?Ue.error("Run code worker error",{err:T,transactionId:r,fileDataUrl:i}):Ue.error("Run code worker error",{err:T,transactionId:r}),y({tstConsoleLogs:h,status:"failed",result:{resultValue:T==null?void 0:T.toString(),exports:{},exportsTest:{},exportsGlobal:{}},success:!1})}).on("exit",()=>{Ue.debug("Run code worker has been terminated",{transactionId:r})}),g.postMessage({incomingParams:e,context:JSON.parse(JSON.stringify(t)),code:s})}),o).catch(y=>{if(!(y instanceof J))throw y;return Ue.warn("timeout to run code",{transactionId:r,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 gE(r){try{await Tu.promises.rm(r,{recursive:!0,force:!0})}catch(e){Ue.warn("failed to remove install npm packages folder",{err:e})}}function Rh(r,e,t,s){return`${e}_${t}_${r}_${s}`}async function vs(r,e,t,s,n,o){let i=Rh(n,e,r,t),{data:a}=await yE(i,s,o);return a}async function Es(r,e,t,s,n,o,i,a,c,l){var h;let d=Object.fromEntries(((h=t.nodePackageParams)==null?void 0:h.map(g=>[g.paramName,g.testimPackageLocalLocation]))||[]),m=Rh(i,n,e,o);if(l){let g=await dn(l);g&&(c=g)}if(typeof Dr>"u")try{Dr=require("worker_threads")}catch{Dr=!1}Buffer.isBuffer(c)&&(Ue.debug("runCodeWithPackages: converted a buffer to base 64 string data URI",{fileDataUrl:c}),c=c.toString());let p="data:,";if(c==="data:"&&(Ue.debug("runCodeWithPackages, fileDataUrl was an empty string ",{fileDataUrl:c}),c=p),Dr&&M.flags.enableWorkerThreadsCliCodeExecution.isEnabled()){let g=await hE(m,t,s,r,d,a,c);return Object.assign({},g,{nodeVersion:process.version})}let f=await mE(m,t,s,r,d,a,c);return Object.assign({},f,{nodeVersion:process.version})}async function yE(r,e,t){let s=e.map(c=>`${c.packageName}@${c.packageVersion}`),n=Ih(),o=Ts.join(n,`/${r}`),i=global.proxyUri;async function a(){let c="";try{if(c=await jp(o,s,i,t),Ue.info("npm package install finished",{transactionId:r,output:c,timeout:t}),Number(c.trim().split(" ")[1])<s.length)throw"npm package install failed, couldn't install all packages";return{data:e.map(d=>{let m=Up(o,d.packageName),p=`${d.packageName}@${m}`,f=Ts.resolve(o,"node_modules",d.packageName);return Object.assign({},d,{packageFullName:p,packageLocalLocation:f})}),installFolder:o}}catch(l){throw Ue.warn("npm package install failed",{transactionId:r,err:l}),l}}try{return await te(a(),t)}catch(c){throw c instanceof J&&Ue.warn("timeout to install package",{packages:s,transactionId:r,err:c,timeout:t}),c}}function Ih(){return Ts.join(Eh.tmpdir(),"/testim_local_packages")}function xh(){let r=Ih();return gE(r)}var Tu,Eh,Ts,vu,xi,Ue,Dr,Mr=w(()=>{"use strict";Tu=E(require("fs")),Eh=E(require("os")),Ts=E(require("path"));U();sn();vu=E(require("data-uri-to-buffer")),xi=require("threads");q();j();Te();ye();Ue=R("cli-service");xi.config.set({basepath:{node:__dirname}})});var or={};W(or,{run:()=>wE});function bE(r,e){try{let t=e.defaults.enforceMaximumJsResultSize,s=M.flags.maximumJsResultSize.getValue(),n=JSON.stringify(r).length>s;return t?n:!1}catch{return!1}}var wE,Ph=w(()=>{"use strict";Mr();q();ye();wE=async(r,e,t)=>{let{code:s,stepId:n,incomingParams:o,context:i,testResultId:a,retryIndex:c,stepResultId:l,runTimeout:d,fileDataUrl:m,s3filepath:p}=e.data;try{let f=await Es(s,n,o,i,a,c,l,d,m,p);return f&&bE({result:f.result,tstConsoleLogs:f.tstConsoleLogs},t)?{code:"js-result-max-size-exceeded",success:!1}:{data:f,success:!0}}catch(f){throw f instanceof J?new Error("Timeout while running action"):f}}});var Eu,Rs,Su=w(()=>{"use strict";j();Eu=R("cookies-utils"),Rs=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(s){throw Eu.error("failed to set cookie",{err:s}),s}}async get(e){try{return await this.driver.getCookie(e.name)}catch(t){throw Eu.error("failed to get cookie",{err:t}),t}}async remove(e){try{return await this.driver.deleteCookie(e.name)}catch(t){throw Eu.error("failed to remove cookie",{err:t}),t}}}});var Ru,TE,Is,Iu=w(()=>{"use strict";U();Ru=E(require("p-retry"));U();j();q();TE=R("window-utils"),Is=class{constructor(e,t){this.id=e,this.driver=t}getElementFromPoint(e,t){function s(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(s,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(s){var n="scrollBehavior"in document.documentElement.style;return n?window.scrollTo({left:s.x,top:s.y,behavior:"instant"}):window.scrollTo(s.x,s.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 s=this;async function n(o=3){try{await s.driver.url(e)}catch(i){if(i.seleniumStack&&i.message.includes("method IWebBrowser2::Navigate2() failed")&&o>0)return TE.warn("selenium navigation failed. retrying to navigate",{err:i}),await se(1500),n(o-1);throw i}}return Promise.race([n(),se(t)])}reloadTab(e=15e3){return Promise.race([this.driver.reloadTab(),se(e)])}getViewportSize(){return this.driver.getViewportSize()}maximizeWithoutValidation(){return this.driver.maximizeWithoutValidation()}getFullPageSize(){function e(){var t=document.body,s=document.documentElement,n=Math.max(t.scrollHeight,t.offsetHeight,s.clientHeight,s.scrollHeight,s.offsetHeight),o=Math.max(t.scrollWidth,t.offsetWidth,s.clientWidth,s.scrollWidth,s.offsetWidth);return{height:n,width:o}}return this.driver.executeJS(e).then(t=>t.value)}extractToNewWindow(){return Promise.resolve()}async checkSize(e){await se(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 s;if(typeof location<"u")s=location;else if(typeof window<"u"&&typeof window.location<"u")s=window.location;else return!1;return s.href!=="chrome-error://chromewebdata/"&&s.href!=="safari-resource:/ErrorPage.html"&&s.href.indexOf("res://ieframe.dll/http_404.htm")!==0&&s.href.indexOf("ms-appx-web://microsoft.microsoftedge/assets/errorpages/")!==0}if(!(await this.driver.executeJS(e)).value)throw new lt("validatePageIsAvailable:PageNotAvailableError")}focusTab(){return this.driver.switchTab(this.id)}quit(){}async getOsAndBrowser(){let e=await(0,Ru.default)(()=>this.driver.getBrowserAndOS(),{retries:3});return{uaBrowserName:e.browser,uaOs:e.os,userAgent:e.userAgent,browserVersion:e.browserVersion}}getUserAgentInfo(){return(0,Ru.default)(()=>this.driver.getUserAgentInfo(),{retries:3})}}});var xu,Pi,Ah=w(()=>{"use strict";xu=E(require("p-retry")),Pi=class{constructor(e,t,s={takeScreenshots:!0}){this.tabId=e,this.driver=t,this.options=s}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,s=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),n=()=>Promise.all([s,this.driver.takeScreenshot()]),[o,i]=await(0,xu.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,s=2e3,n=this.currentDevicePixelRatio?Promise.resolve(this.currentDevicePixelRatio):this.getDevicePixelRatio(),o=()=>Promise.all([n,this.driver.takeElementScreenshot(e)]),[i,a]=await(0,xu.default)(o,{retries:t,minTimeout:s}),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 Ch(r,e){let t=e.image||e,s=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=r.offset||{top:0,left:0};if(o.top*=s,o.left*=s,!r.elementRect)return vE.warn("missing elementRect",_h.omit(r,"image")),{};let{elementRect:i}=r,a=await xs.default.read(Buffer.from(n[1],"base64")),c=i.left*s+o.left*s,l=i.top*s+o.top*s,d=i.width*s,m=i.height*s;c<0&&(d+=c,d=d<0?0:d,c=0),l<0&&(m+=l,m=m<0?0:m,l=0);let p=a.bitmap.width,f=a.bitmap.height;if(c+d>p&&(d=p-c),l+m>f&&(m=f-l),m<=0||d<=0)throw new Cn("height or width is equal or lower than zero");return{elementImage:await a.crop(c,l,d,m).getBase64Async(xs.default.MIME_PNG)}}async function EE(r,e){let t=await xs.default.read(r.width,r.height);for(let n of e){let o=n.image.match(/^data\:[^;]*\;base64,(.*)$/),i=await xs.default.read(Buffer.from(o[1],"base64"));await new Promise((a,c)=>{t.composite(i,n.position.left,n.position.top,l=>{if(l){c(l);return}a()})})}return await t.getBase64Async(xs.default.MIME_PNG)}function SE(r,e){return EE(r,e)}function RE(){return Promise.resolve()}function IE(r){function e(s){return typeof r[s]=="string"&&r[s].startsWith("data")}function t(s){return RE(r[s]).then(n=>({key:s,url:n}))}return Promise.all(Object.keys(r).filter(e).map(t)).then(s=>s.reduce((n,o)=>(n[o.key]=o.url,n),r))}function kh(r,e){return e=e||1,r=r||{left:0,top:0,width:0,height:0},{left:e*Math.round(r.left),top:e*Math.round(r.top),width:e*Math.round(r.width),height:e*Math.round(r.height),pixelRatio:e}}var _h,xs,vE,Cn,Ai,Oh=w(()=>{"use strict";_h=E(require("lodash"));U();xs=E(require("jimp"));j();vE=R("image-capture-utils"),Cn=class extends Error{constructor(e){super(e),this.rectIsOutsideOfImageError=!0,Object.setPrototypeOf(this,Cn.prototype)}};Ai=class{constructor(e,t,s){this.windowUtils=t,this.screenshotUtils=s}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(),s=await Ch(e,t);return s.screenImage=t.image,s.absoluteScreenHighlight=kh(e.elementRect,t.devicePixelRatio),s}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 IE({screenImage:t.image,absoluteScreenHighlight:kh(e.elementRect,t.devicePixelRatio)})}forcePixelRatio(e){return this.screenshotUtils.forcePixelRatio(e)}getCurrentDevicePixelRatio(){return this.screenshotUtils.getCurrentDevicePixelRatio()}async takeStitchedDataUrl(e){let{windowUtils:t,screenshotUtils:s}=this,n=()=>se(250),o=Boolean(e);async function i(p,f){o?await t.scrollToPositionWithoutAnimation(p):await t.scrollToPosition(p),await n();let h=await s.takeScreenshot(),g=await Ch({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),T=f.height,A=Array.from({length:Math.ceil(h/g)},(v,x)=>({scrollX:Math.min(x*g,h-g),cropX:x*g-Math.min(x*g,h-g),cropW:g-(x*g-Math.min(x*g,h-g))})),b=Array.from({length:Math.ceil(y/T)},(v,x)=>({scrollY:Math.min(x*T,y-T),cropY:x*T-Math.min(x*T,y-T),cropH:T-(x*T-Math.min(x*T,y-T))}));return A.flatMap(v=>b.map(x=>({scrollPos:{x:v.scrollX,y:x.scrollY},cropData:{top:x.cropY,left:v.cropX,width:v.cropW,height:x.cropH}})))}async function l(p,f){let h=await t.getCurrentScrollPosition(),g=c(p,f),y=await a(g);return await t.scrollToPosition(h),SE(p,y)}let[d,m]=await Promise.all([t.getFullPageSize(),t.getViewportSize()]);return await l(d,m)}}});var Lh,Ci,ki,Nh=w(()=>{"use strict";Lh=E(require("semver"));U();j();Iu();Ah();Oh();Ee();Ci=R("tab-service"),ki=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(s=>!t[s].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(s=>{let n=this.getTabInfo(e,s);return`tabId=${s}, 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,s,n={}){return this.addedTabs[e].has(t)?Promise.resolve():(this.addedTabs[e].add(t),Ci.info(`Adding a new tab sessionId: ${e}, tabId: ${t}, openerId: ${s}`),this.addTab(e,t,this.sessionTabs[e].tabCount++,s,n))}addOpenerStepId(e,t,s){this.sessionTabs[e].tabInfos[t].openerStepId=s}addOpenerStep(e,t,s){this.sessionTabs[e].tabInfos[t].openerStepId=s.id,this.sessionTabs[e].tabInfos[t].openerOriginalStepId=s.originalStepId}fixMissingMainTab(e){if(this.getMainTabInfo(e))return;let s=this.getAllTabInfos(e);Object.keys(s).length!==0&&(Object.values(this.getAllTabInfos(e))[0].isMain=!0)}async buildTabInfo(e,t,s,n,o={}){let i=await this.getTabDetails(t,e,o),a=z();function c(l){return o.checkForMainTab?i.isMainTab:!i.isMainTab||i.isMainTab==="unknown"?!l.getMainTabInfo(e):i.isMainTab}return this.sessionTabs[e].tabInfos[t]={infoId:a,url:i.url,title:i.title,favIconUrl:i.favIconUrl,order:s,from:this.getTabInfo(e,i.openerTabId),isMain:c(this),openerStepId:n},a}async addTab(e,t,s,n,o={}){let i=await this.buildTabInfo(e,t,s,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 Ai(t,a,new Pi(t,this.driver,{takeScreenshots:o.takeScreenshots}))}}getTabUtilsByTabIdAndSessionId(e,t){let s=this.sessionTabs[e].tabInfos[t];return this._utils[s.infoId]}getTabUtilsByTabId(e){let t=Object.keys(this._utils).find(s=>this._utils[s].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 s=this.getAllTabInfos(e),n=Object.keys(s).map(i=>s[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,s){let n=s.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,s,n){let{urlUtils:o}=re(),i=o.urlBreaker(e.url||e.currentUrl),a=o.urlBreaker(t.url||t.currentUrl),c=n(i),l=n(a),d=s.map(m=>o.urlBreaker(m)).map(m=>n(m)).filter(m=>m===c);return c===l&&d.length===1}isSameTab(e,t,s){let{tabMatcher:n}=re();if(n){let l=this.getAllTabInfos(e),d=Object.keys(l).map(m=>l[m]);return n.isSameTab(d,t,s)}if(t.isMain&&s.isMain||t.openerStepId&&s.openerStepId&&t.openerStepId===s.openerStepId)return!0;let o=this.getAllTabInfos(e),i=Object.keys(o).map(l=>o[l].url);if(this.exactUrlMatch(t,s,i))return!0;let a=l=>`${l.domain}/${l.path.join("/")}`;if(this.singleExactMatchForParts(t,s,i,a))return!0;let c=l=>`${l.domain}/${l.path.join("/")}#${l.hash}`;return!!(this.singleExactMatchForParts(t,s,i,c)||t.order===s.order)}getMainTabInfo(e){let t=this.getAllTabInfos(e);return Object.keys(t).map(s=>t[s]).find(s=>s.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(s=>t[s].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(s=>this.removeTabInfo(e,s))}clearNonMainTabs(e){let t=this.getAllTabInfos(e);Object.keys(t).filter(s=>!t[s].isMain).forEach(s=>this.removeTabInfo(e,s)),this.sessionTabs[e].tabCount=1}switchTab(e,t,{forceSwitch:s=!1}={}){let n=this.sessionTabs[t]?this.sessionTabs[t].tabCount:1;return typeof n=="number"&&n>1||s?this.driver.switchTab(e):Promise.resolve()}getTabDetails(e,t,s={}){return this.switchTab(e,t,s).then(()=>{if(s.skipLoadInfo)return{title:"",url:""};let n=Promise.resolve("unknown");return s.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=>(Ci.error("failed to get url or title",{err:o}),{title:"",url:""}))}).catch(n=>{Ci.error("failed to switch to tab",{tabId:e,err:n})})}async getUnregisteredTabId(e){return(await this.driver.getTabIds()).find(s=>!this.getAllTabIds(e).includes(s))}async waitForTabToOpen(e){let t=await this.getUnregisteredTabId(e);return t||(await se(500),await this.waitForTabToOpen(e))}async tryToAddTab(e,t){if(this.pendingTabs[e])return;let s=await this.getUnregisteredTabId(e);s&&(await this.addNewTab(e,s),await this.addFrameHandler(s),this.sessionTabs[e].currentTab=null)}addNewPopup(e,t){let s=this.getAllTabInfos(e);return Object.keys(s).find(o=>s[o].openerStepId===t)?Promise.resolve():this.pendingTabs[e]?(Ci.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=Lh.lt(e._version||e.version,"1.2.0"),s=!!e.parameterValues,n=s&&e.parameterValues.some(o=>o.type==="locate"&&!o.frameLocators);return t&&(!s||n)}getTabIdByTabInfo(e,t){var i,a;let{tabMatcher:s,commonConstants:n}=re();if(this.isInvalidStepVersion(t))return Promise.reject({success:!1,shouldRetry:!1,errorType:n.stepResult.INVALID_TEST_VERSION});if((i=t.useCurrentTab)!=null&&i.call(t))return this.driver.getCurrentTabId().then(c=>{if(c)return c;let l=this.getMainTabId(e);if(l)return l;throw new Error("Current tab not found")});let o=(a=t.tabInfo)==null?void 0:a.openerStepId;return this.waitToPendingTabs(e,o).then(()=>{let c;if(s){let l=this.getAllTabIds(e).map(d=>Object.assign({},this.getTabInfo(e,d),{tabId:d})).filter(d=>!d.isClosed);c=s.matchTabs(t,l)}else{let l=t.tabInfo;l?c=this.getAllTabIds(e).find(d=>{let m=this.getTabInfo(e,d);return this.isSameTab(e,m,l)}):c=this.getMainTabId(e)}return c?this.sessionTabs[e].currentTab===c?c:this.switchTab(c,e).then(()=>(this.sessionTabs[e].currentTab=c,c)).catch(l=>{let d=["no such window","no window found","the window could not be found"];if(l.message&&d.some(m=>l.message.toLowerCase().includes(m)))return this.sessionTabs[e].tabCount--,this.sessionTabs[e].tabInfos[c].isClosed=!0,this.getTabIdByTabInfo(e,t);throw l}):this.tryToAddTab(e,o).then(()=>{throw new Error("No tab ID found")})})}}});var Pu,_i,Au=w(()=>{"use strict";Pu=class{constructor(){}select(){return console.log(`
|
|
370
370
|
internal error - cant use port selector in selenium!!!!
|
|
371
|
-
`),Promise.reject({reason:"cant use port selector in selenium!"})}prepare(){}handleLegacyDataCaching(){}},
|
|
372
|
-
Action required: Please allow opening a websockets connection to ${
|
|
371
|
+
`),Promise.reject({reason:"cant use port selector in selenium!"})}prepare(){}handleLegacyDataCaching(){}},_i=new Pu});var Ps,Cu=w(()=>{"use strict";Su();Ee();Ps=class{constructor(e,t){this.driver=e,this._abortedSteps=[],this.cookieUtils=t||new Rs(this.driver)}get sessionPlayerInit(){return re()}getTimeStamp(){return Date.now()}getTestimId(e){if(!e)return;let{locatorBuilderUtils:t}=this.sessionPlayerInit,s=t.TESTIM_ID_FIELD_NAME;return t.isEmptyResult(e)?t.EMPTY_RESULT_ID:e.getAttribute(s)}resetAbort(){this._abortedSteps=[]}abort(e){this._abortedSteps.push(e)}get abortedSteps(){return this._abortedSteps}restoreNativeAlerts(){}executeOverloadNativeAlertsInFrame(){}getClickOffset(e,t){let{utils:s}=this.sessionPlayerInit;return e&&s.isWithinBounds(0,t.width,e.x)&&s.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(s=>s.value)}extractTargetText(e){return this.driver.getTargetText(e)}extractText(e){return this.driver.getElementTextJS(e)}async markDynamicParent(e,t,s){return this.driver.markDynamicParent(e,t,s)}getCookie(e){return this.cookieUtils.get({name:e})}setCookie(e,t){return this.cookieUtils.set(e)}getNextDynamicParent(e,t){let s=`return ${this.sessionPlayerInit.codeSnippets.getNextDynamicParent(t)}`;return this.driver.executeJS(s).then(n=>n.value)}}});function Mh(r){class e{constructor(s,n){this.frameManager=s,this.locateElementPlayer=n,this._cache={}}cacheResults(s,n){this._cache[s]=n}getResultsFromCache(s){return this._cache[s]}cacheFrameLocateResults(s){if(s!=null&&s.seleniumFrameElement&&s.frameLocateResultUrl){let n=Dh(s.seleniumFrameElement);n&&this.cacheResults(n,s.frameLocateResultUrl)}}async foundFrameCallback(s,n,o){let{frameOffset:i,locatedElement:a}=s,{locatorBuilderUtils:c}=re();if(c.isEmptyResult(a)){let p="got empty result in frame result, not rejected from locate element player";throw xE.error(p),new Error(p)}let l=await r.switchToLocatedFrame(a),d=Dh(l.value),m=this.getResultsFromCache(d);return{frameId:-1,frameOffset:i,tabInfo:n.tabInfo,tabId:n.tabId,testimFrameId:o,testimFullFrameId:`${this.currentFrameHandler.testimFullFrameId}-${o}`,seleniumFrameElement:l.value,frameLocateResultUrl:m}}locate(s,n,o,i,a,c){let l=new this.locateElementPlayer(i);return s.targetId=`frameLocator_${n}`,l.locate(s,o,s.targetId).then(d=>(d.isVisible=!0,l.handleLocateResult(d,c,s).catch(()=>{throw new Error}))).then(d=>{let{locatedElement:m}=i.data[s.targetId];return r.getElementLocationWithPadding(m).then(p=>{let f=p.value||{top:0,left:0};return d.frameOffset={top:o.frameOffset.top+f.top,left:o.frameOffset.left+f.left},d})}).then(d=>(l.addFrameDataToContext&&l.addFrameDataToContext(d.targetId,d.locateResult),this.foundFrameCallback(d,a,s.testimFrameId))).then(d=>(this.currentFrameHandler=d,d))}async findFrame(s,n,o,i){let a=M.flags.enableFrameSwitchOptimization.isEnabled(),l=o.playback.resultsHandler.resultsByChronologicOrder.at(-1),d=1,m=Boolean(l)&&l.stepId===s.id&&l.results.length>d;if(a&&!m&&this.currentFrameHandler){let y=n.findIndex(T=>T.testimFrameId===this.currentFrameHandler.testimFrameId);if(y>-1){let T=n.slice(y+1),A=0;for(let b of T)A++,this.currentFrameHandler=await this.locate(b,A,this.currentFrameHandler,o,i,s);return this.currentFrameHandler}}let p=await i.getTopFrameHandler();p.frameOffset={top:0,left:0},await(a&&this.currentFrameHandler===p?this.currentFrameHandler:r.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,s);return g}}return e}var xE,PE,AE,Dh,Fh=w(()=>{"use strict";j();ye();Ee();xE=R("frame-locator"),PE="ELEMENT",AE="element-6066-11e4-a52e-4f735466cecf",Dh=r=>r?r[PE]||r[AE]:null});var Oi,ku=w(()=>{"use strict";le();Oi=()=>{try{if(Ud)return!1;if(require("inspector").url())return!0}catch{}return!1}});var _u,Uh,Fr,CE,Ou,$e,kn=w(()=>{"use strict";U();It();_u=E(require("ws")),Uh=require("events");j();le();Fr=R("socket-ng-service"),CE=5e3,Ou=class extends Uh.EventEmitter{constructor(){super(...arguments);this.clientId=z();this.ws=null;this.filterMap={};this.listeners={}}onReconnect(t){Fr.info("test result websocket re-connect"),setTimeout(()=>this.connect(t),CE)}formatUrl(t){return t.startsWith("http://")?t.replace("http://","ws://"):t.startsWith("https://")?t.replace("https://","wss://"):t}parseEvent(t){try{return JSON.parse(t)}catch(s){Fr.error("failed to parse or trigger event",{err:s})}}connect(t){let s=this.formatUrl(jd);return Jt().then(n=>new Promise(o=>{let i={...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};this.ws=new _u.default(`${s}?projectId=${t}&clientId=${this.clientId}&token=${n}`,i),this.ws.on("open",()=>{var a;return Fr.info("websocket opened"),this.reSendAllExistingFilters(),(a=this.onConnect)==null||a.call(this),o()}),this.ws.on("close",a=>{Fr.info("websocket closed",{event:a}),(!this.ws||this.ws.readyState===_u.default.CLOSED)&&this.onReconnect(t)}),this.ws.on("error",a=>{Fr.info("websocket error",{event:a})}),this.ws.on("message",a=>{let c=this.parseEvent(a);c!=null&&c.type&&this.emit(c.type,c.data)})}))}sendMessage(t){if(!this.ws){Fr.warn("tried to send error when websocket was disconnected");return}try{this.ws.send(JSON.stringify(t))}catch(s){Fr.error("failed to stringify message for sending",{err:s})}}listenOnce(t,s,n){let o=i=>{s(i)&&(n(i),this.removeListener(t,o))};this.on(t,o)}listenTo(t,s,n,o){function i(c){n(c)&&o(c)}(Array.isArray(s)?s:[s]).forEach(c=>{var d,m;(d=this.listeners)[m=`${t}:${c}`]||(d[m]=[]);let l=i.bind(this);this.listeners[`${t}:${c}`].push(l),this.on(c,l)})}reSendAllExistingFilters(){Object.keys(this.filterMap).forEach(t=>{let s=this.filterMap[t];this.sendMessage({type:"add-filter",filter:s})})}addFilter(t,s,n,o=!1){return new Promise(i=>{let a=z(),c={query:s,id:a,type:n,fullDocument:o};this.listenOnce("add-filter:done",l=>l.id===a,i),this.sendMessage({type:"add-filter",filter:c}),this.filterMap[t]=c})}removeListeners(t,s){Object.keys(this.listeners).length!==0&&s.forEach(n=>{let o=this.listeners[`${t}:${n}`];o&&(delete this.listeners[`${t}:${n}`],o.forEach(i=>this.removeListener(n,i)))})}removeFilter(t,s){let n=this.filterMap[t];if(!n)return;let o=Array.isArray(s)?s:[s];this.removeListeners(t,o),delete this.filterMap[t],this.sendMessage({type:"remove-filter",filter:n})}},$e=new Ou});var Bh,Lu,kE,_E,OE,jh,Li,ir,Ni=w(()=>{"use strict";Bh=E(require("p-retry")),Lu=E(require("socket.io-client"));le();U();j();kE=50,_E=10,OE=5e3,jh=10*1e3,Li=R("base socket service"),ir=class{constructor(){this.attempts=0;this.rooms={};this.emitPromiseQueue=void 0}joinToMultipleResults(){let e=Object.keys(this.rooms);Li.info("re-join all existing rooms",{testResultIds:e}),e.forEach(t=>{var n;let s=this.rooms[t];(n=this.emitJoinRoom)==null||n.call(this,t,s)})}joinRoom(e,t){this.rooms[e]=t}leaveRoom(e){delete this.rooms[e]}addSocketHandlers(){let e=(t,s)=>{let n="websocket";try{n=this._socket.io.engine.transport.name}catch{}Li.error(`Error in SocketService websocket _${t}_ socket ${this._socket.id} is ${this.url} over ${n}. Reconnect attempts ${this.attempts}. Error is: ${s==null?void 0:s.message}`)};this._socket.on("reconnect_attempt",t=>{if(e("reconnect_attempt",{message:"reconnect attempt",attempt:t}),this.attempts++,this.attempts===_E&&!this.isAllowedWS&&(this._socket.io.opts.transports=["polling"],this._socket.io.opts.upgrade=!1),this.attempts>=kE)throw new Error(`Can't connect to Testim Servers.
|
|
372
|
+
Action required: Please allow opening a websockets connection to ${ge} 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",()=>{Li.info("reconnect to socket and re-join to rooms"),this.joinToMultipleResults()}),this._socket.on("connect",()=>{var t;this.attempts=0,this.isAllowedWS===void 0&&(this.isAllowedWS=this._socket.io.engine.transport&&this._socket.io.engine.transport.name==="websocket"),(t=this.onConnect)==null||t.call(this)})}initNewSocket(e,t){let s={query:{projectId:e},requestTimeout:jh,transports:["websocket"],upgrade:!1,forceNew:!0,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0",...global.caFileContent&&{ca:global.caFileContent},...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};return new Promise(n=>{this.url=`${ge}/${t}`,this._socket=Lu.connect(this.url,s),this.addSocketHandlers(),this._socket.on("connect",n),this._socket.open()})}init(e,t){let s={query:{projectId:e},requestTimeout:jh,transports:["websocket"],upgrade:!1,rejectUnauthorized:process.env.NODE_TLS_REJECT_UNAUTHORIZED!=="0",...global.caFileContent&&{ca:global.caFileContent},...global.proxyUri&&{agent:new global.ProxyAgent(global.proxyUri)}};this.url=`${ge}/${t}`,this._socket=Lu.connect(this.url,s),this.addSocketHandlers()}emitPromise(e,t){let s={},n=()=>new Promise((o,i)=>{this._socket.emit(e,t,a=>a!=null&&a.success?o():(s[e]=t,i(new Error("bad ack"))))});return this.emitPromiseQueue=(this.emitPromiseQueue||Promise.resolve()).then(()=>(0,Bh.default)(()=>te(n(),OE),{retries:200,minTimeout:3e3,factor:1})).finally(()=>{Object.keys(s).length>0&&Li.error("Bad acknowledge from socket emit",{errorneousEvents:s})}),this.emitPromiseQueue}}});var Nu,Ur,$h=w(()=>{"use strict";Ni();Nu=class extends ir{constructor(){super(...arguments);this.listerers={}}init(t){super.init(t,"testResult"),this.listerers={}}listenToTestResult(t,s,n){this.listerers[t]&&(this._socket.off("testResult:updated",this.listerers[t]),delete this.listerers[t]),this.listerers[t]=o=>{o.resultId===t&&o.testId===s&&n(o.testResult)},this._socket.on("testResult:updated",this.listerers[t])}emitJoinRoom(t,s){return this.emitPromise("testResult:join",{resultId:t,testId:s})}async joinToTestResult(t,s){this.rooms[t]||(this.joinRoom(t,s),await this.emitJoinRoom(t,s))}emitLeaveRoom(t,s){return this.emitPromise("testResult:leave",{resultId:t,testId:s})}leaveTestResult(t,s){return this.listerers[t]?(this.leaveRoom(t),this._socket.off("testResult:updated",this.listerers[t]),delete this.listerers[t],this.emitLeaveRoom(t,s)):Promise.resolve()}getSocket(){return this._socket}},Ur=new Nu});var Gh={};W(Gh,{testResultService:()=>Qe});var Wh,Du,Qe,As=w(()=>{"use strict";Wh=require("events");kn();ae();ye();$h();Du=class extends Wh.EventEmitter{init(e){if(M.flags.useNewWSCLI.isEnabled()){$e.onConnect=()=>this.emit("socket-connected");return}Ur.init(e),Ur.onConnect=()=>this.emit("socket-connected")}joinToTestResult(e,t){return M.flags.useNewWSCLI.isEnabled()?$e.addFilter(`${e}:testResult`,{resultId:e,testId:t},[rt.TEST_RESULT_UPDATED,rt.TEST_RESULT_CREATED]):Ur.joinToTestResult(e,t)}async leaveTestResult(e,t){if(M.flags.useNewWSCLI.isEnabled()){$e.removeFilter(`${e}:testResult`,[rt.TEST_RESULT_UPDATED,rt.TEST_RESULT_CREATED]);return}await Ur.leaveTestResult(e,t)}listenToTestResult(e,t,s){if(M.flags.useNewWSCLI.isEnabled()){$e.listenTo(`${e}:testResult`,[rt.TEST_RESULT_UPDATED,rt.TEST_RESULT_CREATED],n=>n.resultId===e&&n.testId===t,n=>s(n));return}Ur.listenToTestResult(e,t,s)}getSocket(){if(!M.flags.useNewWSCLI.isEnabled())return Ur.getSocket()}},Qe=new Du});var $,ce=w(()=>{"use strict";Ee();$=class{constructor(e,t,s,n={},o=void 0,i=void 0,a={}){this.step=e,this.context=t,this.frameHandler=s,this.frameId=0,this.stepActionUtils=o,this.locateElementPlayer=i,this.exportsGlobal=n,this.exportsTest=a}get driver(){return this.stepActionUtils.driver}get sessionPlayerInit(){return re()}async performAction(){throw new Error("not implemented")}getTarget(){let e=this.step.targetId||"targetId";return this.context.data[e]}async execute(e,t){var s;try{return{success:!0,...await this.performAction(e,t)}}catch(n){let o=(n==null?void 0:n.message)||((s=n==null?void 0:n.seleniumStack)==null?void 0:s.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 NE(r){return{getFrameIdByTestimFrameId(){},async setElementResultDataOnContext(e){let t=await r.getElement(e.locatedElement);e.seleniumElement=t.value},getElementRectangle(e){return r.getElementRect(e)},getOffsets(e){return Promise.resolve([e.frameOffset||{}])},htmlStringToDom(e,t,s,n,o=!0){let i=new Di.VirtualConsole,a=new Di.JSDOM(e,{virtualConsole:i}),{window:c}=a;return o&&setTimeout(()=>{c.close()},1e3*60),Object.assign(c.document,{TESTIM_URL:t})},shouldUseNativeVisibilityCheck(e,t,s,n){return e.opacity===0||e.isShadowed?!1:s===void 0||n===void 0?!0:M.flags.useClickimVisibilityChecks.isEnabled()?!1:t.isSafari()?M.flags.useSafariWebdriverVisibilityChecks.isEnabled():!0},async isVisible(e,t,s,n,o,i,a){let{locatorBuilderUtils:c,codeSnippets:l,visibilityUtils:d,positionUtils:m}=re();if(this.shouldUseNativeVisibilityCheck(n,r,d,m))return r.isVisible(e.seleniumElement);if(!e.seleniumElement)return{visible:!1,invisibleReason:"element not found"};try{await r.isVisible(e.seleniumElement)}catch{}if(!t||c.isEmptyResult(t))return{visible:!1,invisibleReason:"element not found"};let h=[m.calculateElementMiddlePoint(s),m.calculateClickPoint(n.clickOffset,s)].filter(Boolean),g=l.getVisibilityCode.getCompoundVisibilityInfoCode(e.locatedElement,h,!1,n),y;try{y=await r.execute(`return ${g}`)}catch(x){throw jr.error("failed to execute getVisibilityCode",{err:x}),x}let{value:T}=y||{},A=T.elementVisibilityInfo||LE,[b,v]=T.elementsFromPointResults||[null,null];return d.checkElementVisibility(A,n,v,b,a,t)},scrollToElement(e,t){let{codeSnippets:s}=re(),n=s.scrollToElement;return r.execute(n(t))}}}var Di,jr,LE,_n,Vh=w(()=>{"use strict";Di=require("jsdom");ce();j();ye();Ee();jr=R("locate-step-action"),LE={opacity:1,clientRects:{}};_n=class extends ${execute(){return this.driver.getHTML(this.step)}static getUtils(e){return Object.assign(NE(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")}}});var qh,Hh=w(()=>{"use strict";qh=function(r,e,t,s,n,o,i,a){function c(T,A){if(!A)return{success:!1};elementScrollTo(A,T.x,T.y);let b=A.scrollLeft,v=A.scrollTop;return{success:Math.abs(v-T.y)<1&&Math.abs(b-T.x)<1,actualX:b,actualY:v}}function l(T,A,b,v,x,k,D){if(!b)return{x:v,y:x};let S=getLocatedElement(A);if(s&&!S)return{x:T.scrollWidth,y:T.scrollHeight};if(!S)throw new Error("could not find target element");let O=S.getBoundingClientRect(),P=0,N=0,B=Math.max(window.innerHeight-(O.height+10),0),V=Math.max(window.innerWidth-(O.width+10),0);return P=D?T.scrollTop+O.top-Math.min(x,B):T.scrollTop,N=k?T.scrollLeft+O.left-Math.min(v,V):T.scrollLeft,{x:Math.round(N),y:Math.round(P)}}let d=!r;if(r=d?document.scrollingElement||document.documentElement:getLocatedElement(r),!r)throw new Error("could not find target to scroll on");let m={top:r.scrollTop,left:r.scrollLeft},p=l(r,e,t,n,o,i,a),f=c(p,r);d&&!document.scrollingElement&&!f.success&&m.top===r.scrollTop&&m.left===r.scrollLeft&&(r=document.body,p=l(r,e,t,n,o,i,a),f=c(p,r));let h=f.actualX,g=f.actualY,y=getLocatedElement(e);if(t&&s&&!y)return{success:!1,expectedPosition:p};if(t){if(!y)throw new Error("could not find target to scroll to");let T=y.getBoundingClientRect();h=T.left,g=T.top}return{success:f.success,actualX:h,actualY:g}}});var Mi,zh=w(()=>{"use strict";Hh();ce();Mi=class extends ${getFailureString(e,t,s,n,o){if(!e.isScrollToElement)return`Scrolling limit reached. Expected:(y: ${s}, x: ${t}); Actual:(y:${o}, x: ${n})`;let i="Scrolling limit reached";return e.shouldScrollTop&&(i+=`. Expected top margin: ${s}, actual: ${o}`),e.shouldScrollLeft&&(i+=`. Expected left margin: ${t}, actual: ${n}`),i}async scroll(e,t,s){let{codeSnippets:n,commonConstants:{stepResult:o}}=this.sessionPlayerInit,i=Math.round(Number(t.isScrollToElement?t.marginTop:t.y)),a=Math.round(Number(t.isScrollToElement?t.marginLeft:t.x)),c=this.driver.isFirefox()?function(d,m,p){d.scrollTo(m,p)}:function(d,m,p){d.scrollTop=p,d.scrollLeft=m},l=`
|
|
373
373
|
var getLocatedElement = ${n.getLocatedElementCode};
|
|
374
374
|
var elementScrollTo = ${c.toString()};
|
|
375
|
-
var scroll = ${
|
|
375
|
+
var scroll = ${qh.toString()};
|
|
376
376
|
return scroll.apply(null, arguments)
|
|
377
|
-
`;try{let d=await this.driver.executeJSWithArray(l,[r,e,Boolean(t.isScrollToElement),Boolean(t.isDynamicScroll),a,i,t.shouldScrollLeft,t.shouldScrollTop]);if(!(d!=null&&d.value))return{errorType:o.SCROLL_ACTION_FAILURE,success:!1};let{success:m,actualX:p,actualY:f}=d.value;return m?{success:!0}:{errorType:o.SCROLL_ACTION_FAILURE,success:!1,resultInfo:{error:this.getFailureString(t,a,i,p,f)}}}catch{return{errorType:o.SCROLL_ACTION_FAILURE,success:!1}}}scrollOnDocument(e,t){return this.scroll(t,e)}scrollOnElement(e,t){return this.scroll(t,e,this.getTarget().locatedElement)}execute(){let e=this.context,t=this.step,r=t.isScrollToElement?e.data.scrollToElement.locatedElement:null;return t.element.isDocument?this.scrollOnDocument(t,r):this.scrollOnElement(t,r)}}});var vg,Eg=T(()=>{"use strict";vg=function(s){let e={};function t(a){return a!=null&&a.toLowerCase?(a=a.toLowerCase(),a==="text"?"text/plain":a==="url"?"text/uri-list":a):a}let r={data:{},setData(a,c){e[t(a)]=c},getData(a){return e[t(a)]}},n=getLocatedElement(s.fromLocatedElement),o=getLocatedElement(s.toLocatedElement);if(!n)throw new Error("from element not found");if(!o)throw new Error("to element not found");let i=function(a,c){let l=document.createEvent("CustomEvent");l.initCustomEvent(c,!0,!0,null),l.dataTransfer=r,a.dispatchEvent?a.dispatchEvent(l):a.fireEvent&&a.fireEvent(`on${c}`,l)};i(n,"dragstart"),i(o,"drop"),i(n,"dragend")}});var Sg,Rg=T(()=>{"use strict";Sg=(s,e)=>{let t=typeof Event=="function";window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function r(b,v){var D;function I(S){function _(B){return o(B).find(V=>Array.apply(null,V.classList||[]).includes("Select-control"))}function P(B){let V=_(B);return V?V.querySelector("INPUT"):null}let L=P(S);L&&L.focus()}let k=(D=b.quirks)==null?void 0:D.isReactSelect;v.type==="mousedown"&&k&&I(b.element)}function n(b,v){var k;let I=(k=b.quirks)==null?void 0:k.isCKEditorFrame;v.type==="click"&&I&&document.body.focus()}function o(b){return b?[b].concat(o(b.parentNode)):[]}function i(b){let v={status:"done",result:b,success:!0};C.isNonTextableElemnet&&(v.reason="Set text on non input element"),e(v)}function a(b){b=b||{},e({status:"failed",result:b,success:!1})}function c(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function l(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,P=f("mousemove",v,k,D,0);b.dispatchEvent(P)}function d(b,v){function I(P,L,B){return B>P&&B<L}let k=b.pointerPosition||{},D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function m(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function p(b,v,I,k){if(!window.PointerEvent)return;let D=m(v,I,k);return D.pointerType="mouse",D.isPrimary=!0,new window.PointerEvent(b,D)}function f(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function h(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=d(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?p(_,k,D.x,D.y):f(_,k,D.x,D.y,S)}function g(){var v;let b=document.activeElement;for(;(v=b.shadowRoot)!=null&&v.activeElement;)b=b.shadowRoot.activeElement;return b}function y(b){b.events.map(v=>{try{return h(v,b)}catch{return}}).filter(Boolean).forEach(v=>{b.element.dispatchEvent(v),r(b,v),n(b,v)}),window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator)}var C={element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,quirks:s.quirks,modifiers:s.modifiers,button:s.button};if(!C.element){a("element not found");return}c(C.element),l(C.element);try{y(C);let b=g(),v=C.quirks,I=v==null?void 0:v.isReactSelect,k=v==null?void 0:v.isCKEditorFrame;!I&&!k&&dispatchFocus(s.elementToFocusLocatedElement,b),i()}catch(b){a(b.toString())}}});var Ig,xg=T(()=>{"use strict";Ig=function(s,e){let t=typeof Event=="function",r=typeof PointerEvent=="function",n=40;window.__unloadNavigator=o,window.addEventListener("unload",window.__unloadNavigator);function o(b){e({status:"done",result:b,success:!0})}function i(b){b=b||{},e({status:"failed",result:b,success:!1})}function a(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function c(b){let v={},I=b.getBoundingClientRect(),k=I.left+I.width/2,D=I.top+I.height/2,P=p("mousemove",v,k,D,0);b.dispatchEvent(P)}function l(b,v){function I(P,L,B){return B>P&&B<L}let k=b.pointerPosition||{};if(C.isDrag)return{x:k.originX||0,y:k.originY||0};let D=v.getBoundingClientRect(),S=k.originX&&I(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,_=k.originY&&I(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:_}}function d(b,v,I){return{screenX:0,screenY:0,clientX:v,clientY:I,ctrlKey:Boolean(b.ctrl),altKey:Boolean(b.alt),shiftKey:Boolean(b.shift),metaKey:Boolean(b.meta),bubbles:!0,cancelable:!0,composed:!0}}function m(b,v,I,k,D){if(r){let _=d(v,I,k);return _.pointerType="mouse",_.isPrimary=!0,new window.PointerEvent(b,_)}let S=document.createEvent("PointerEvent");return S.initPointerEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),S}function p(b,v,I,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,I,k,Boolean(v.ctrl),Boolean(v.alt),Boolean(v.shift),Boolean(v.meta),D,document.body?document.body.parentNode:document.documentElement),S}function f(b,v){let I=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=l(b,v.element),S=v.button||0,_=b.event;return I.includes(_)?m(_,k,D.x,D.y,S):p(_,k,D.x,D.y,S)}function h(b,v){function I(){return b.event==="click"&&v.isDrag&&!v.allEventsOnSameElement}return I()}function g(b,v,I){try{let k=f(v.events[b],v);h(k,v)||v.element.dispatchEvent(k)}catch{}if(b+1===v.events.length)I();else{let k=Math.min(v.events[b+1].timeStamp-v.events[b].timeStamp,n);setTimeout(()=>{g(b+1,v,I)},k)}}function y(b,v){g(0,b,()=>{window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v()})}let C={eventIndex:0,element:s.isRoot?document.documentElement:getLocatedElement(s.locatedElement),events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,quirks:s.quirks,isDoubleClick:s.isDoubleClick,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement,allEventsOnSameElement:s.allEventsOnSameElement};if(!C.element){i("element not found");return}a(C.element),c(C.element),y(C,()=>{o()})}});var Pg,Cg=T(()=>{"use strict";Pg=function(s,e){let t=typeof MouseEvent=="function",r=typeof DragEvent=="function",n=typeof PointerEvent=="function",o={};window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function i(P){e({status:"done",result:P,success:!0})}function a(P){P=P||{},e({status:"failed",result:P,success:!1,keep:!0})}function c(P){return P!=null&&P.toLowerCase?(P=P.toLowerCase(),P==="text"?"text/plain":P==="url"?"text/uri-list":P):P}function l(){try{return new DataTransfer}catch{return{data:{},setData(L,B){o[c(L)]=B},getData(L){return o[c(L)]}}}}let d=["drag","dragstart","dragend"],m=["pointerup","pointerdown","pointermove"],p=d.concat(["drop","dragenter","dragover"]);function f(P){let L=P;for(;L&&L!==document.documentElement;){if(L.draggable)return L;L=L.parentElement}return null}function h(P,L,B){let V=L.element,Y=B.dispatchDragEventsOnClosestDraggable;if(d.includes(P.type)&&Y){if(!V&&L.lastDraggedElement)return L.lastDraggedElement;let ee=f(V);if(ee)return L.lastDraggedElement=ee,ee}return V}function g(P,L,B){function V(Xr,A,O){return O>Xr&&O<A}let Y=P.pointerPosition||{};if(L)return{x:Y.originX||0,y:Y.originY||0};let ee=B.getBoundingClientRect(),fe=Y.originX&&V(ee.left,ee.left+ee.width,Y.originX)?Y.originX:ee.left+ee.width/2,Ct=Y.originY&&V(ee.top,ee.top+ee.height,Y.originY)?Y.originY:ee.top+ee.height/2;return{x:fe,y:Ct}}function y(P,L,B){let V=(L==null?void 0:L.modifiers)||{},Y=g(P,B.isDrag,B.element),ee=(L==null?void 0:L.button)||0,fe=P.event;return m.includes(fe)?C(fe,V,Y.x,Y.y,ee):p.includes(fe)?v(fe,V,Y.x,Y.y,ee):b(fe,V,Y.x,Y.y,ee)}function w(P,L,B){return{screenX:0,screenY:0,clientX:L,clientY:B,ctrlKey:Boolean(P.ctrl),altKey:Boolean(P.alt),shiftKey:Boolean(P.shift),metaKey:Boolean(P.meta),bubbles:!0,cancelable:!0,composed:!0}}function C(P,L,B,V,Y){if(n){let fe=w(L,B,V);return fe.pointerType="mouse",fe.isPrimary=!0,new window.PointerEvent(P,fe)}let ee=document.createEvent("PointerEvent");return ee.initPointerEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),ee}function b(P,L,B,V,Y){let ee=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return ee.initMouseEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(L.ctrl),Boolean(L.alt),Boolean(L.shift),Boolean(L.meta),Y,document.body?document.body.parentNode:document.documentElement),ee}function v(P,L,B,V){if(P==="dragstart"&&(window.TSTA||(window.TSTA={}),window.TSTA.dataTransfer=l()),!r){let fe=document.createEvent("CustomEvent");return fe.initCustomEvent(P,!0,!0,null),fe.dataTransfer=window.TSTA.dataTransfer,fe}let Y=w(L,B,V),ee=new window.DragEvent(P,Y);return Object.defineProperties(ee,{dataTransfer:{get(){return window.TSTA.dataTransfer}}}),ee}function I(P,L,B){let V=h(P,L,B);V&&V.dispatchEvent(P)}function k(P,L){function B(){return P.event==="click"&&L.isDrag&&!L.allEventsOnSameElement}return B()}function D(P,L,B){if(B){let V=Math.min(B.timeStamp-L.timeStamp,40);setTimeout(()=>{S(P)},V)}else window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),i()}function S(P){let L,B=P.events[P.eventIndex],V=P.events[++P.eventIndex];try{P.element=getLocatedElement(B.locatedElement),L=y(B,s,P)}catch(Y){return a(`exception in get event in drag step:${Y.message}`)}if(k(B,P))return D(P,B,V);if(L)try{I(L,P,B)}catch(Y){return a(`exception in executeEvent in drag step:${Y.message}`)}else return a(`cannot execute event ${B.event}`);D(P,B,V)}let _={eventIndex:0,allEventsOnSameElement:s.allEventsOnSameElement,events:s.events,eventType:s.eventType,eventData:s.eventData,stepId:s.id,testResultId:s.testResultId,isDrag:s.isDrag,useRecordedMousedown:s.useRecordedMousedown,trackActiveElement:s.trackActiveElement};setTimeout(()=>{try{S(_)}catch(P){a(P)}},0)}});var Fn,$i,Ag=T(()=>{"use strict";Fn=E(require("lodash"));ce();Pi();Eg();Rg();xg();be();Cg();$i=class extends W{getDnDRectsAndOffsets(e,t,r,n){let o=this.stepActionUtils.getClickOffset(r,e.rectWithoutFrameOffset),i=this.stepActionUtils.getClickOffset(n,t.rectWithoutFrameOffset);return{fromRect:e.rectWithoutFrameOffset,fromX:o.xOffset,fromY:o.yOffset,toRect:t.rectWithoutFrameOffset,toX:i.xOffset,toY:i.yOffset}}async clickJs(){var c;let e=this.step,t=this.context,r=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events;if(!(o!=null&&o.length))return;let i={isRoot:r.isRoot,locatedElement:r.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button},a=`
|
|
377
|
+
`;try{let d=await this.driver.executeJSWithArray(l,[s,e??void 0,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,s=t.isScrollToElement?e.data.scrollToElement.locatedElement:null;return t.element.isDocument?this.scrollOnDocument(t,s):this.scrollOnElement(t,s)}}});var Kh,Jh=w(()=>{"use strict";Kh=function(r){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 s={data:{},setData(a,c){e[t(a)]=c},getData(a){return e[t(a)]}},n=getLocatedElement(r.fromLocatedElement),o=getLocatedElement(r.toLocatedElement);if(!n)throw new Error("from element not found");if(!o)throw new Error("to element not found");let i=function(a,c){let l=document.createEvent("CustomEvent");l.initCustomEvent(c,!0,!0,null),l.dataTransfer=s,a.dispatchEvent?a.dispatchEvent(l):a.fireEvent&&a.fireEvent(`on${c}`,l)};i(n,"dragstart"),i(o,"drop"),i(n,"dragend")}});var Yh,Xh=w(()=>{"use strict";Yh=(r,e)=>{let t=typeof Event=="function";window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function s(b,v){var D;function x(S){function O(B){return o(B).find(V=>Array.apply(null,V.classList||[]).includes("Select-control"))}function P(B){let V=O(B);return V?V.querySelector("INPUT"):null}let N=P(S);N&&N.focus()}let k=(D=b.quirks)==null?void 0:D.isReactSelect;v.type==="mousedown"&&k&&x(b.element)}function n(b,v){var k;let x=(k=b.quirks)==null?void 0:k.isCKEditorFrame;v.type==="click"&&x&&document.body.focus()}function o(b){return b?[b].concat(o(b.parentNode)):[]}function i(b){let v={status:"done",result:b,success:!0};A.isNonTextableElemnet&&(v.reason="Set text on non input element"),e(v)}function a(b){b=b||{},e({status:"failed",result:b,success:!1})}function c(b){let v=t?new Event("mouseover",{composed:!0}):document.createEvent("Events");v.initEvent("mouseover",!0,!0),b.dispatchEvent(v)}function l(b){let v={},x=b.getBoundingClientRect(),k=x.left+x.width/2,D=x.top+x.height/2,P=f("mousemove",v,k,D,0);b.dispatchEvent(P)}function d(b,v){function x(P,N,B){return B>P&&B<N}let k=b.pointerPosition||{},D=v.getBoundingClientRect(),S=k.originX&&x(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,O=k.originY&&x(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:O}}function m(b,v,x){return{screenX:0,screenY:0,clientX:v,clientY:x,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,x,k){if(!window.PointerEvent)return;let D=m(v,x,k);return D.pointerType="mouse",D.isPrimary=!0,new window.PointerEvent(b,D)}function f(b,v,x,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,x,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 x=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=d(b,v.element),S=v.button||0,O=b.event;return x.includes(O)?p(O,k,D.x,D.y):f(O,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),s(b,v),n(b,v)}),window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator)}var A={element:r.isRoot?document.documentElement:getLocatedElement(r.locatedElement),events:r.events,quirks:r.quirks,modifiers:r.modifiers,button:r.button};if(!A.element){a("element not found");return}c(A.element),l(A.element);try{y(A);let b=g(),v=A.quirks,x=v==null?void 0:v.isReactSelect,k=v==null?void 0:v.isCKEditorFrame;!x&&!k&&dispatchFocus(r.elementToFocusLocatedElement,b),i()}catch(b){a(b.toString())}}});var Qh,Zh=w(()=>{"use strict";Qh=function(r,e){let t=typeof Event=="function",s=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={},x=b.getBoundingClientRect(),k=x.left+x.width/2,D=x.top+x.height/2,P=p("mousemove",v,k,D,0);b.dispatchEvent(P)}function l(b,v){function x(P,N,B){return B>P&&B<N}let k=b.pointerPosition||{};if(A.isDrag)return{x:k.originX||0,y:k.originY||0};let D=v.getBoundingClientRect(),S=k.originX&&x(D.left,D.left+D.width,k.originX)?k.originX:D.left+D.width/2,O=k.originY&&x(D.top,D.top+D.height,k.originY)?k.originY:D.top+D.height/2;return{x:S,y:O}}function d(b,v,x){return{screenX:0,screenY:0,clientX:v,clientY:x,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,x,k,D){if(s){let O=d(v,x,k);return O.pointerType="mouse",O.isPrimary=!0,new window.PointerEvent(b,O)}let S=document.createEvent("PointerEvent");return S.initPointerEvent(b,!0,!0,document.defaultView,1,0,0,x,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,x,k,D){let S=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return S.initMouseEvent(b,!0,!0,document.defaultView,1,0,0,x,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 x=["pointerup","pointerdown","pointermove"],k=v.modifiers||{},D=l(b,v.element),S=v.button||0,O=b.event;return x.includes(O)?m(O,k,D.x,D.y,S):p(O,k,D.x,D.y,S)}function h(b,v){function x(){return b.event==="click"&&v.isDrag&&!v.allEventsOnSameElement}return x()}function g(b,v,x){try{let k=f(v.events[b],v);h(k,v)||v.element.dispatchEvent(k)}catch{}if(b+1===v.events.length)x();else{let k=Math.min(v.events[b+1].timeStamp-v.events[b].timeStamp,n);setTimeout(()=>{g(b+1,v,x)},k)}}function y(b,v){g(0,b,()=>{window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v()})}let A={eventIndex:0,element:r.isRoot?document.documentElement:getLocatedElement(r.locatedElement),events:r.events,eventType:r.eventType,eventData:r.eventData,stepId:r.id,testResultId:r.testResultId,quirks:r.quirks,isDoubleClick:r.isDoubleClick,isDrag:r.isDrag,useRecordedMousedown:r.useRecordedMousedown,trackActiveElement:r.trackActiveElement,allEventsOnSameElement:r.allEventsOnSameElement};if(!A.element){i("element not found");return}a(A.element),c(A.element),y(A,()=>{o()})}});var eg,tg=w(()=>{"use strict";eg=function(r,e){let t=typeof MouseEvent=="function",s=typeof DragEvent=="function",n=typeof PointerEvent=="function",o={};window.__unloadNavigator=i,window.addEventListener("unload",window.__unloadNavigator);function i(P){e({status:"done",result:P,success:!0})}function a(P){P=P||{},e({status:"failed",result:P,success:!1,keep:!0})}function c(P){return P!=null&&P.toLowerCase?(P=P.toLowerCase(),P==="text"?"text/plain":P==="url"?"text/uri-list":P):P}function l(){try{return new DataTransfer}catch{return{data:{},setData(N,B){o[c(N)]=B},getData(N){return o[c(N)]}}}}let d=["drag","dragstart","dragend"],m=["pointerup","pointerdown","pointermove"],p=d.concat(["drop","dragenter","dragover"]);function f(P){let N=P;for(;N&&N!==document.documentElement;){if(N.draggable)return N;N=N.parentElement}return null}function h(P,N,B){let V=N.element,Y=B.dispatchDragEventsOnClosestDraggable;if(d.includes(P.type)&&Y){if(!V&&N.lastDraggedElement)return N.lastDraggedElement;let Z=f(V);if(Z)return N.lastDraggedElement=Z,Z}return V}function g(P,N,B){function V(qr,C,L){return L>qr&&L<C}let Y=P.pointerPosition||{};if(N)return{x:Y.originX||0,y:Y.originY||0};let Z=B.getBoundingClientRect(),fe=Y.originX&&V(Z.left,Z.left+Z.width,Y.originX)?Y.originX:Z.left+Z.width/2,kt=Y.originY&&V(Z.top,Z.top+Z.height,Y.originY)?Y.originY:Z.top+Z.height/2;return{x:fe,y:kt}}function y(P,N,B){let V=(N==null?void 0:N.modifiers)||{},Y=g(P,B.isDrag,B.element),Z=(N==null?void 0:N.button)||0,fe=P.event;return m.includes(fe)?A(fe,V,Y.x,Y.y,Z):p.includes(fe)?v(fe,V,Y.x,Y.y,Z):b(fe,V,Y.x,Y.y,Z)}function T(P,N,B){return{screenX:0,screenY:0,clientX:N,clientY:B,ctrlKey:Boolean(P.ctrl),altKey:Boolean(P.alt),shiftKey:Boolean(P.shift),metaKey:Boolean(P.meta),bubbles:!0,cancelable:!0,composed:!0}}function A(P,N,B,V,Y){if(n){let fe=T(N,B,V);return fe.pointerType="mouse",fe.isPrimary=!0,new window.PointerEvent(P,fe)}let Z=document.createEvent("PointerEvent");return Z.initPointerEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(N.ctrl),Boolean(N.alt),Boolean(N.shift),Boolean(N.meta),Y,document.body?document.body.parentNode:document.documentElement,0,0,0,0,0,0,0,0,0,"mouse",0,!0),Z}function b(P,N,B,V,Y){let Z=t?new MouseEvent("click",{composed:!0}):document.createEvent("MouseEvents");return Z.initMouseEvent(P,!0,!0,document.defaultView,1,0,0,B,V,Boolean(N.ctrl),Boolean(N.alt),Boolean(N.shift),Boolean(N.meta),Y,document.body?document.body.parentNode:document.documentElement),Z}function v(P,N,B,V){if(P==="dragstart"&&(window.TSTA||(window.TSTA={}),window.TSTA.dataTransfer=l()),!s){let fe=document.createEvent("CustomEvent");return fe.initCustomEvent(P,!0,!0,null),fe.dataTransfer=window.TSTA.dataTransfer,fe}let Y=T(N,B,V),Z=new window.DragEvent(P,Y);return Object.defineProperties(Z,{dataTransfer:{get(){return window.TSTA.dataTransfer}}}),Z}function x(P,N,B){let V=h(P,N,B);V&&V.dispatchEvent(P)}function k(P,N){function B(){return P.event==="click"&&N.isDrag&&!N.allEventsOnSameElement}return B()}function D(P,N,B){if(B){let V=Math.min(B.timeStamp-N.timeStamp,40);setTimeout(()=>{S(P)},V)}else window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),i()}function S(P){let N,B=P.events[P.eventIndex],V=P.events[++P.eventIndex];try{P.element=getLocatedElement(B.locatedElement),N=y(B,r,P)}catch(Y){return a(`exception in get event in drag step:${Y.message}`)}if(k(B,P))return D(P,B,V);if(N)try{x(N,P,B)}catch(Y){return a(`exception in executeEvent in drag step:${Y.message}`)}else return a(`cannot execute event ${B.event}`);D(P,B,V)}let O={eventIndex:0,allEventsOnSameElement:r.allEventsOnSameElement,events:r.events,eventType:r.eventType,eventData:r.eventData,stepId:r.id,testResultId:r.testResultId,isDrag:r.isDrag,useRecordedMousedown:r.useRecordedMousedown,trackActiveElement:r.trackActiveElement};setTimeout(()=>{try{S(O)}catch(P){a(P)}},0)}});var On,Fi,rg=w(()=>{"use strict";On=E(require("lodash"));ce();Ri();Jh();Xh();Zh();ye();tg();Fi=class extends ${getDnDRectsAndOffsets(e,t,s,n){let o=this.stepActionUtils.getClickOffset(s,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,s=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events;if(!(o!=null&&o.length))return;let i={isRoot:s.isRoot,locatedElement:s.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button},a=`
|
|
378
378
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
379
|
-
var dispatchFocus = ${
|
|
380
|
-
var doClick = ${
|
|
379
|
+
var dispatchFocus = ${Lr.toString()};
|
|
380
|
+
var doClick = ${Yh.toString()};
|
|
381
381
|
var eventData = arguments[0];
|
|
382
382
|
var done = arguments[1];
|
|
383
383
|
return doClick.call(null, eventData, done);
|
|
384
|
-
`;try{return(c=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&c.success?{success:!0}:{success:!1}}catch(l){return{success:!1,reason:l.message,exception:l}}}isWithinBounds(e,t,
|
|
384
|
+
`;try{return(c=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&c.success?{success:!0}:{success:!1}}catch(l){return{success:!1,reason:l.message,exception:l}}}isWithinBounds(e,t,s){return s>e&&s<t}getEventSequenceOffset(){var c;let e=(c=this.step.events[0])==null?void 0:c.pointerPosition;if(!e)return{xOffset:0,yOffset:0};let s=this.context.data[this.step.targetId||"targetId"].rectWithoutFrameOffset,n=this.isWithinBounds(s.left,s.left+s.width,e.originX),o=this.isWithinBounds(s.top,s.top+s.height,e.originY),i=n?0:s.left+s.width/2-e.originX,a=o?0:s.top+s.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 s=On.cloneDeep(e);return s.event=t,s}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||{},s=this.step.events.find(o=>o.event==="mouseup")||t&&this.step.events.find(o=>o.event==="pointerup"),n=On.findLastIndex(this.step.events,o=>o.event==="mousemove")||t&&On.findLastIndex(this.step.events,o=>o.event==="pointermove");s&&n>0&&!this.step.allEventsOnSameElement&&this.step.events.splice(n+1,0,this.generateEventOfType(s,"mouseover")),this.step.isHTML5Drag&&!this.step.toElement&&(this.step.events=this.addDragendIfNeeded(this.step.events)),this.addOffsetToEvents(this.getEventSequenceOffset())}async dragPathJs(){var c,l;let e=this.step,t=this.context,s=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:s.isRoot,locatedElement:s.locatedElement,events:o,quirks:e.quirks,modifiers:e.modifiers,button:e.button,isDrag:!0,allEventsOnSameElement:e.allEventsOnSameElement},a=`
|
|
385
385
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
386
|
-
var dispatchFocus = ${
|
|
387
|
-
var doDragPath = ${
|
|
386
|
+
var dispatchFocus = ${Lr.toString()};
|
|
387
|
+
var doDragPath = ${Qh.toString()};
|
|
388
388
|
return doDragPath.apply(null, arguments);
|
|
389
|
-
`;try{return(l=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&l.success?{success:!0}:{success:!1}}catch(d){return{success:!1,reason:d.message,exception:d}}}chooseAndRunAction(){let e=this.getTarget(),{locatedElement:t,seleniumElement:
|
|
389
|
+
`;try{return(l=(await this.driver.executeCodeAsync(a,n,i)).value)!=null&&l.success?{success:!0}:{success:!1}}catch(d){return{success:!1,reason:d.message,exception:d}}}chooseAndRunAction(){let e=this.getTarget(),{locatedElement:t,seleniumElement:s,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(s,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(),T=this.context.data.timeToPlayStep+3e3,A=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:A.elementToFocusLocatedElement,trackActiveElement:this.step.trackActiveElement,locatedElement:A.locatedElement,isRoot:A.isRoot},v=`
|
|
390
390
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
391
|
-
var dnd = ${
|
|
391
|
+
var dnd = ${eg.toString()};
|
|
392
392
|
var eventData = arguments[0];
|
|
393
393
|
var done = arguments[1];
|
|
394
394
|
return dnd.call(null, eventData, done);
|
|
395
|
-
`;return this.driver.executeCodeAsync(v,
|
|
395
|
+
`;return this.driver.executeCodeAsync(v,T,b)}let h=`
|
|
396
396
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
397
|
-
var dnd = ${
|
|
397
|
+
var dnd = ${Kh.toString()};
|
|
398
398
|
var eventData = arguments[0];
|
|
399
399
|
return dnd.call(null, eventData);
|
|
400
|
-
`,g={fromLocatedElement:t,toLocatedElement:p.locatedElement};return this.driver.executeJS(h,g)}let f=this.getDnDRectsAndOffsets(e,p,this.step.element.clickOffset,this.step.toElement.clickOffset);return this.driver.dragAndDrop(
|
|
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(s,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(s,c):this.driver.leftClick(s,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(s=>s.event==="dragend"))return e;let t={event:"dragend",eventInfo:{detail:0},pointerPosition:this.getToElementPosition()};return e.concat(t)}getToElementPosition(){var t,s;if(!((s=(t=this.context.data)==null?void 0:t.toElement)!=null&&s.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)),s=e[t-1];if(!s||s.event!=="dragover"){let n={event:"dragover",eventInfo:{detail:0},pointerPosition:this.getToElementPosition(),fireOnTarget:!0};e.splice(t,0,n)}else s.fireOnTarget=!0;return e}fixEventSequence(e){let t=this.addDragendIfNeeded(e);return this.addDragOverBeforeDragEnd(t)}addElementLocatedElementToDragEvents(e,t,s){let n=o=>o.fireOnTarget||["drop","dragenter"].includes(o.event);return e.forEach(o=>o.locatedElement=n(o)?s:t),e}generateHTML5DragEventSequence(){let e=this.context.data.targetId,t=this.context.data.toElement,s=this.step.events.filter(n=>n.event!=="mousemove"&&n.event!=="pointermove");return s=this.fixEventSequence(s),s=this.addElementLocatedElementToDragEvents(s,e.locatedElement,t.locatedElement),this.step.dispatchDragEventsOnClosestDraggable&&s.forEach(n=>n.dispatchDragEventsOnClosestDraggable=!0),s}}});var Ln,sg=w(()=>{"use strict";ce();Ln=class extends ${async performAction(e){let{step:t,context:s,frameHandler:n,sessionPlayerInit:{paramEvaluator:o,utils:i,commonConstants:a}}=this,c=this.getTarget();try{let l=await this.stepActionUtils.extractTargetText(c),d,m;if(o){let p=o.computeExpression(t.expression2,s,this.exportsGlobal,this.exportsTest);d=l,m=p.evaluatedText}else{let p=await e.executeStep(t.expression2,s,n,this.exportsGlobal,this.locateElementPlayer,this.exportsTest);d=l,m=p.evaluatedText}try{return i.compareOrMatch(m,d)?{success:!0}:{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:String(m),actual:d}}}catch{return{success:!1,errorType:a.stepResult.TEXT_COMPARE_FAILURE,resultInfo:{expected:m.toString(),actual:d}}}}catch(l){return{success:!1,reason:l.message,exception:l,shouldRetry:!0}}}}});var ng,DE,Ui,og=w(()=>{"use strict";ng=E(require("lodash"));ce();j();DE=R("evaluate-expression-step-action"),Ui=class extends ${async execute(){let e=this.step,t=this.context,s=this.exportsGlobal,n=this.exportsTest;try{DE.info("runner running incoming params evaluation");let o=t.incomingParams||{};ng.isEmpty(o)&&(o=this.sessionPlayerInit.stepParamBuilder.getStepInputs(e,t,s,n));let i=["context",...o.as.functionParameters],a=[t,...o.as.functionArguments],l=`return ${e.subType==="text"?`'${e.expression.replace(/'/g,"\\'")}'`:e.expression}`.replace(/\n/g,"\\n"),m=Function.apply(Function,i.concat([l])).apply(null,a);return t.data[e.targetName]=m,t.data[e.targetId]=m,t.internalParams&&t.internalParams.add(e.targetId),{success:!0,evaluatedText:m,data:t.data}}catch(o){let{stepResult:i}=this.sessionPlayerInit.commonConstants;throw{errorType:i.EVALUATE_EXPRESSION_EXCEPTION,resultInfo:{exception:o.toString()},success:!1}}}}});var ig,ag=w(()=>{"use strict";ig=function(r,e){let t=typeof Event=="function",s=r.isRoot?document.documentElement:getLocatedElement(r.locatedElement),n={eventIndex:0,element:s,events:r.events,eventType:r.eventType,quirks:r.quirks};if(!s)throw new Error("element not found");window.__unloadNavigator=function(){fe()},window.addEventListener("unload",window.__unloadNavigator);let o=["keydown","keyup","keypress"],i=15;function a(C){try{if(!t)return;let L=new CustomEvent("textInput",{bubbles:!0,cancelable:!0});return C.eventData&&(L.data=C.eventData.data),L}catch{}}function c(C){try{let L=document.createEvent("TextEvent");L.data=C.eventData.data;let F=1,G=C.eventData.locale||"en-US";return L.initTextEvent("textInput",!0,!0,window,C.eventData.data,F,G),L}catch{}}function l(C){return a(C)||c()}function d(C,L,F){try{return new KeyboardEvent(C,{bubbles:!0,cancelable:!0,location:L.location||0,key:L.key||"",ctrlKey:Boolean(F.ctrl),shiftKey:Boolean(F.shift),altKey:Boolean(F.alt),metaKey:Boolean(F.meta)})}catch{}}function m(C,L,F){try{let G=document.createEvent("KeyboardEvent");return G.initKeyEvent(C,!0,!0,null,Boolean(F.ctrl),Boolean(F.alt),Boolean(F.shift),Boolean(F.meta),L.key||"",0),G}catch{}}function p(C,L,F){try{let G=document.createEvent("Events");return G.initEvent(C,!0,!0),G.altKey=Boolean(F.alt),G.ctrlKey=Boolean(F.ctrl),G.metaKey=Boolean(F.meta),G.shiftKey=Boolean(F.shift),G.keyCode=L.key||"",G}catch{}}function f(C,L,F){return d(C,L,F)||m(C,L,F)||p(C,L,F)}function h(C){let L=o.indexOf(C.event);if(typeof L!="number"||L<0)return null;let F=C.eventData,G=F.modifiers||{},me=f(C.event,F,G);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_=F.keyCode,me._charCode_=F.charCode||0,me}function g(C){return C.event==="textInput"?l(C):h(C)}function y(C,L){return function(){var G;return C.event==="textInput"&&!((G=L.quirks)!=null&&G.isAuth0Form)}()}function T(C,L){return C.event==="keyup"&&L.event==="keydown"?i:0}function A(C,L,F){let G=T(L,F);return Math.min(F.timeStamp-L.timeStamp,G)}function b(C){let L=Object.getOwnPropertyDescriptor(C,"value");if(!L)return;let F=C.value;C.value=`${F}#`,L.configurable&&delete C.value,C.value=F;let G=document.createEvent("HTMLEvents");G.initEvent("input",!0,!1),C.dispatchEvent(G),Object.defineProperty(C,"value",L)}function v(C){if(C.isInput)try{if(b(C.element),t)C.element.dispatchEvent(new Event("change"));else{let L=document.createEvent("HTMLEvents");L.initEvent("change",!1,!0),C.element.dispatchEvent(L)}}catch{}}function x(C,L,F){F?setTimeout(()=>{N(C)},A(C,L,F)):(window.__unloadNavigator&&window.removeEventListener("unload",window.__unloadNavigator),v(C),fe())}function k(C,L){return(C==="change"||C==="blur")&&L.element.tagName==="OPTION"}function D(C,L,F){return k(C.type,L)?L.element.parentElement:F.locatedElement?getLocatedElement(F.locatedElement):L.element}function S(C,L){let F=C.firstChild,G;for(;F;){if(F.nodeType===3){if(L.offset--<=0)return F}else if(F.nodeType===1&&(G=S(F,L),G))return G;F=F.nextSibling}return null}function O(C,L){if(!(!C||!L)){if(!isNaN(L.start))C.selectionStart=L.start,C.selectionEnd=L.end;else if(!isNaN(L.nodeOffset)){let F;if(C.firstChild?F=S(C,{offset:L.nodeOffset}):F=C,F){let G=window.getSelection(),me=document.createRange();try{G.removeAllRanges(),me.setStart(F,L.textOffset),me.setEnd(F,L.textOffset),G.addRange(me)}catch{}}}}}function P(C,L,F){if(L.isFocusable&&L.isSelectable(C)&&C.type!=="submit")try{O(L.element,F.eventData.selection)}catch{}let G=D(C,L,F);if(!G)throw new Error("could not find element");C.type==="submit"&&G.action?G.submit():G.dispatchEvent(C)}function N(C){let L,F=C.events[C.eventIndex],G=C.events[++C.eventIndex];try{L=g(F)}catch(me){return kt(`exception in get event in text step:${me.message}`)}if(y(F,C))return x(C,F,G);if(L)try{P(L,C,F)}catch(me){return kt(`exception in executeEvent in text step:${me.message}`)}else if(C.noEventExecuter)C.noEventExecuter(C,F);else return kt(`cannot execute event ${F.event}`);x(C,F,G)}function B(C){let L=C.tagName;return L==="INPUT"||L==="TEXTAREA"}function V(C){return C.getAttribute?Boolean(C.getAttribute("contenteditable")==="true"):!1}function Y(C,L){if(C.isInput){C.element.value=L.eventData.text;let F=document.createEvent("Event");F.initEvent("input",!0,!1),C.element.dispatchEvent(F)}else C.isContentEditable&&(C.element.innerHTML=L.eventData.text)}function Z(){var L;let C=document.activeElement;for(;(L=C.shadowRoot)!=null&&L.activeElement;)C=C.shadowRoot.activeElement;return C}function fe(C){let L={status:"done",result:C,success:!0};n.isNonTextableElemnet&&(L.reason="Set text on non input element"),e(L)}function kt(C){C=C||{};let L={status:"failed",result:C,success:!1};n.isNonTextableElemnet&&(L.reason="Set text on non input element"),e(L)}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(C){return C.type!=="keyup"},n.noEventExecuter=Y}catch(C){kt(`exception in set text step:${C.message}`);return}let qr=Z();dispatchFocus(r.elementToFocusLocatedElement,qr),N(n)}});var ji,cg=w(()=>{"use strict";ce();Ri();U();ag();ji=class extends ${async setValueNative(){let e=this.context,t=this.getTarget();return this.step.delayBetweenChars?(await this.driver.elementIdClear(De(t.seleniumElement)),await this.setTextDelayed()):this.driver.setValue(t.seleniumElement,e.stepText)}async setValueJS(){var d;let e=this.step,t=this.context,s=t.data[e.targetId||"targetId"],n=t.data.timeToPlayStep+3e3,o=e.events,{setTextDraftJs:i}=this.sessionPlayerInit.codeSnippets;if(s.isDraftEditor&&i)return this.driver.executeJS(i(s.locatedElement,t.stepText));if(!(o!=null&&o.length))return;let a={eventType:e.type,events:o,quirks:e.quirks,locatedElement:s.locatedElement,isRoot:s.isRoot,elementToFocusLocatedElement:s.elementToFocusLocatedElement},c=`
|
|
401
401
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
402
|
-
var dispatchFocus = ${
|
|
403
|
-
var setText = ${
|
|
402
|
+
var dispatchFocus = ${Lr};
|
|
403
|
+
var setText = ${ig.toString()};
|
|
404
404
|
var eventData = arguments[0];
|
|
405
405
|
var done = arguments[1];
|
|
406
406
|
return setText.call(null, eventData, done);
|
|
407
|
-
`,l=await this.driver.executeCodeAsync(c,n,a);return{success:Boolean((d=l.value)==null?void 0:d.success)}}async setTextDelayed(){let e=this.context.stepText,t=this.getTarget();for(let
|
|
407
|
+
`,l=await this.driver.executeCodeAsync(c,n,a);return{success:Boolean((d=l.value)==null?void 0:d.success)}}async setTextDelayed(){let e=this.context.stepText,t=this.getTarget();for(let s=0;s<e.length;s++)await this.driver.elementIdValue(De(t.seleniumElement),e[s]),s<e.length-1&&await se(this.step.delayBetweenChars)}async setValueAppendNative(){let e=[],t=this.context,s=this.getTarget();if(s!=null&&s.seleniumElement)return this.step.delayBetweenChars?this.setTextDelayed():(e.push(Array.from(t.stepText)),this.driver.elementIdValue(De(s.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:s}=this.sessionPlayerInit.commonConstants;return{success:!1,errorType:s.TEXT_ACTION_FAILURE,resultInfo:{error:"'Append Text' is only supported in Native Mode"}}}return this.step.nativeEvents&&!t?this.setValueNative():this.setValueJS()}}});var lg,ug=w(()=>{"use strict";lg=function(r,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)||"{}"),T=Object.assign({},y,p);window.sessionStorage.setItem(f,JSON.stringify(T))}catch(y){let T=y.message.toLowerCase().includes("quota"),A=y.message===h;if(y.message.includes("sessionStorage")||y.message.includes("The operation is insecure")||T||A){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)||"{}"),x=Object.assign({},v,p);if(b.setAttribute(f,JSON.stringify(x)),T||A){try{window.sessionStorage.removeItem(f)}catch{}(window.TSTA=window.TSTA||{}).useFallbackStorage=!0}return}throw y}}function s(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=r.functionParams,l=r.transactionId;try{let m=s(r);m.push(o,i,a);let p=((d=r.function)==null?void 0:d.params)||c,h=(e||n(Function,p)).apply(null,m);typeof Promise<"u"&&h instanceof Promise?(t(l,{type:"promise"}),h.then(g=>{t(l,{status:"done",success:!0,result:{resultValue:g,exports:o,exportsTest:i,exportsGlobal:a}})},g=>{t(l,{status:"failed",success:!1,result:{resultValue:g.toString(),exports:o,exportsTest:i,exportsGlobal:a}})})):t(l,{status:"done",success:!0,result:{resultValue:h,exports:o,exportsTest:i,exportsGlobal:a}})}catch(m){t(l,{status:"failed",success:!1,result:{resultValue:m.toString(),exports:o,exportsTest:i,exportsGlobal:a}})}}});var Bi,Mu,ar,$i=w(()=>{"use strict";Bi=E(require("lodash"));U();ce();j();ug();ye();Mu=R("base-js-step-action"),ar=class extends ${isExceedingMaxResultSize(e,t){try{let s=t.project.defaults.enforceMaximumJsResultSize,n=M.flags.maximumJsResultSize.getValue(),o=JSON.stringify(e).length>n;return s?o:(o&&Mu.warn(`js result size exceeded ${n}, stepId: ${this.step.id}`),!1)}catch{return!1}}executeGetStatus(e){return this.driver.executeJS(t=>{let s=`data-testim-${t}`;try{return window.sessionStorage.getItem(s)}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(s):"{}"}throw n}},e)}constructJSFunParams(e){let t=e.incomingParams,s=["context",...t.as.functionParameters,"exports","exportsTest","exportsGlobal"],n=[e.context,...t.as.functionArguments];return s.push(e.code),n.forEach(o=>{Bi.isObject(o)&&uo(o,"seleniumElement",Bi.isEqual)}),{function:{params:s,args:n},transactionId:e.transactionId,browser:e.browser,browserMajor:e.browserMajor}}checkStatus(e){let t=this,s=t.context.config.retryTimeout,n=t.context.data.timeToPlayStep-s;async function o(){let i;try{i=await t.executeGetStatus(e)}catch(l){Mu.warn("failed to get js status",{err:l}),i={value:{status:"exception"}}}let a;try{a=JSON.parse(i?i.value:"{}")}catch{Mu.warn("non object value",{selRes:i}),a={status:"exception"}}let c=t.stepActionUtils.abortedSteps.find(l=>l.id===t.step.id);return c||(a?a.status&&a.status==="done"?a:a.status&&a.status==="failed"?{success:!1,shouldRetry:!0,result:a.result}:n-s<=0?Object.assign(a,{success:!1,shouldRetry:!0}):(n-=s,await se(s),o()):{success:!0})}return o()}executeInAut(e){let t=M.flags.experimentalPreCodeCompilation.isEnabled(),s=M.flags.experimentalAsyncCustomCode.isEnabled(),n=this.constructJSFunParams(e),o=n.function.args.some(l=>Boolean(l==null?void 0:l.locatedElement)),i="undefined";if(t){let l=n.function.params.slice(0,-1);i=s?`async function(${l.join(",")}) {
|
|
408
408
|
${e.code}
|
|
409
409
|
};`:`function(${l.join(",")}) {
|
|
410
410
|
${e.code}
|
|
411
411
|
};`,n.function.params.pop()}let{codeSnippets:a}=this.sessionPlayerInit,c=`
|
|
412
412
|
${o?`var getLocatedElement = ${a.getLocatedElementCode};`:";"}
|
|
413
|
-
var runCode = ${
|
|
413
|
+
var runCode = ${lg.toString()};
|
|
414
414
|
var eventData = arguments[0];
|
|
415
415
|
var funcToRun = ${i};
|
|
416
416
|
return runCode.call(null, eventData, funcToRun);
|
|
417
|
-
`;return t?this.driver.executeJS(c,n).catch(l=>this.handleExecutionError(l)):this.driver.executeJS(c,n)}codeExecDone(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:
|
|
418
|
-
Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,
|
|
417
|
+
`;return t?this.driver.executeJS(c,n).catch(l=>this.handleExecutionError(l)):this.driver.executeJS(c,n)}codeExecDone(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants,{context:s}=this,{result:n={},tstConsoleLogs:o,nodeVersion:i,navigateToDifferentDomain:a}=e;n.exports&&(s.data.exports=n.exports);let c={nodeVersion:i,tstConsoleLogs:o,data:s.data};return this.isFailedResult(n.resultValue)?Object.assign(c,{success:!1,errorType:t.JS_ASSERTION_FAILED}):this.isExceedingMaxResultSize({result:n,tstConsoleLogs:o},s)?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:s}=this;if(e.type==="promise")return Promise.resolve({data:s.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:s.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 s={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(s,{browser:n.browser,browserMajor:n.browserMajor}),this.context.isPendingPromise||await this.executeInAut(s);let o=await this.checkStatus(s.transactionId);return await this.checkCodeResponse(o)}handleExecutionError(e){if((e==null?void 0:e.seleniumStack)&&e.seleniumStack.type==="JavaScriptError"&&e.seleniumStack.orgStatusMessage){let s=e.seleniumStack.orgStatusMessage.indexOf(`
|
|
418
|
+
Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,s===-1?void 0:s);throw new Error(n)}throw e}}});var Gt,dg=w(()=>{"use strict";$i();Gt=class extends ar{isFailedResult(e){return e===!1}}});var Cs,pg=w(()=>{"use strict";$i();Cs=class extends ar{isFailedResult(e){return!e}}});var ME,Wi,mg=w(()=>{"use strict";ce();U();ME={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"},Wi=class extends ${setWithValueApi(e){let t=this.getTarget();return t!=null&&t.seleniumElement?this.driver.elementIdValue(De(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(ME[t]),this.setWithValueApi(e)}}});function fg(r,e){function t(s,n){let o=Element.prototype.matches,i=o&&isNativeFunction(o)?o:document.createElement(s.tagName).__proto__.matches;do{if(i.call(s,n))return s;s=s.parentElement||s.parentNode}while(s!==null&&s.nodeType===1);return null}try{let s=getLocatedElement(r);if(!s)return{success:!1,status:"failed",result:"option element not found"};let n=t(s,"select");return n?(n.focus(),s.selected?{success:!0,status:"done"}:(s.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}s.dispatchEvent(i)}),{success:!0,status:"done"})):{success:!1,status:"failed",result:"select element not found"}}catch(s){return{success:!1,status:"failed",result:s.toString()}}}var hg=w(()=>{"use strict"});var Gi,gg=w(()=>{"use strict";ce();hg();U();ye();Gi=class extends ${async performAction(){var m,p;let e=this.context.data[this.step.targetId||"targetId"],{seleniumElement:t,locatedElement:s}=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(De(t))}catch(f){if(!f.message.includes("Cannot check the displayedness of a non-Element argument"))throw f}let c=M.flags.safariSelectOptionDispatchEventOnSelectElement.isEnabled(),l=`
|
|
419
419
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
420
420
|
var isNativeFunction = ${this.sessionPlayerInit.utils.isNativeFunction.toString()};
|
|
421
|
-
var selectOption = ${
|
|
421
|
+
var selectOption = ${fg.toString()};
|
|
422
422
|
return selectOption.apply(null, arguments);
|
|
423
|
-
`;return(p=(await this.driver.executeJSWithArray(l,[
|
|
423
|
+
`;return(p=(await this.driver.executeJSWithArray(l,[s,c])).value)!=null&&p.success?{success:!0}:{success:!1}}}});var Vi,yg=w(()=>{"use strict";ce();Vi=class extends ${async performAction(){await this.driver.submit(this.getTarget().seleniumElement)}}});var FE,qi,bg=w(()=>{"use strict";ce();FE=(r,e,t,s)=>({x:t,y:s,width:e,height:r,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(){}}),qi=class extends ${getRect(){return this.driver.isFirefox()?this.getTarget().rectWithoutFrameOffset:this.getTarget().rect}async performAction(){let e=this.getTarget(),{seleniumElement:t,rectWithoutFrameOffset:s,rect:n}=e,{width:o,height:i}=n,a=o/2,c=i/2,l=this.step.element.clickOffset;if(l&&this.step.shouldAccountForMouseOffsetInHover){let{x:m,y:p}=l;this.sessionPlayerInit.utils.isWithinTargetRect(FE(i,o,0,0),m,p)&&(a=m,c=p)}let d={frameOffset:{x:n.left-s.left,y:n.top-s.top},rect:s,clickOffset:{x:Math.floor(a),y:Math.floor(c)}};return await this.driver.hover(t,d),{success:!0}}}});var wg,Tg=w(()=>{"use strict";wg=function(r,e){function s(a,c){function l(h,g,y){return y>h&&y<g}let d=a.pointerPosition||{},m=c.getBoundingClientRect(),p=d.originX&&l(m.left,m.left+m.width,d.originX)?d.originX:m.left+m.width/2,f=d.originY&&l(m.top,m.top+m.height,d.originY)?d.originY:m.top+m.height/2;return{x:p,y:f}}function n(a,c,l){let d=s(a,l),m=(c==null?void 0:c.modifiers)||{},p={deltaX:a.deltaX,deltaY:a.deltaY,deltaZ:a.deltaZ,deltaMode:a.deltaMode,clientX:d.x,clientY:d.y,bubbles:!0,cancelable:!0,ctrl:Boolean(m.ctrl),alt:Boolean(m.alt),shift:Boolean(m.shift),meta:Boolean(m.meta)};return new WheelEvent("wheel",p)}function o(a,c){if(a.length===0){e({state:"success"});return}if(!c)throw new Error("element not found");let l=a.shift(),d=n(l,r.eventData,c),m=a[0]?Math.min(a[0].timeStamp-l.timeStamp,200):200;c.dispatchEvent(d),setTimeout(()=>{o(a,c)},m)}let i=getLocatedElement(r.locatedElement);o(r.events,i)}});var Hi,vg=w(()=>{"use strict";ce();Tg();Hi=class extends ${async performAction(){var c;let e=this.step,t=this.context,s=e.events;if(!(s!=null&&s.length))return;let n={events:s,eventData:{modifiers:e.modifiers,button:e.button},locatedElement:this.getTarget().locatedElement},o=t.data.timeToPlayStep+3e3,i=`
|
|
424
424
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
425
|
-
var wheel = ${
|
|
425
|
+
var wheel = ${wg.toString()};
|
|
426
426
|
var eventData = arguments[0];
|
|
427
427
|
var done = arguments[1];
|
|
428
428
|
return wheel.call(null, eventData, done);
|
|
429
|
-
`;return{success:((c=(await this.driver.executeCodeAsync(i,o,n)).value)==null?void 0:c.state)==="success"}}}});var
|
|
429
|
+
`;return{success:((c=(await this.driver.executeCodeAsync(i,o,n)).value)==null?void 0:c.state)==="success"}}}});var Eg,Sg=w(()=>{"use strict";Eg=function(r,e){let t=getLocatedElement(r);if(!t)throw new Error("element not found");function s(){let i=-1,a=0,c=[],l={waitOn(){let d=++i;return function(m){d in c||(c[d]=m,a++,e.length===a&&l.endWithCallback(c))}},endWith(d){l.endWithCallback=d}};return l}function n(i,a,c){let l=new XMLHttpRequest;l.open("GET",i),l.responseType="blob",l.onload=function(){if(this.status>=200&&this.status<300)c({blob:l.response,name:a});else throw new Error("Failed to load blob response code is not between 200 - 300")},l.onerror=function(){throw new Error("Failed to load blob")},l.send()}let o=s();e.forEach(i=>{n(i.url,i.name,o.waitOn())}),o.endWith(i=>{let a=createDropEvent(i);t.dispatchEvent(a)})}});var UE,zi,Rg=w(()=>{"use strict";ce();j();Sg();ye();UE=R("drop-file-step-action"),zi=class extends ${async performAction(){let{codeSnippets:e,utils:t}=this.sessionPlayerInit,s=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,UE),i=`
|
|
430
430
|
var getLocatedElement = ${e.getLocatedElementCode};
|
|
431
431
|
var createDropEvent = ${e.createDropEvent.toString()};
|
|
432
|
-
var downloadFileAndFireDropEvent = ${
|
|
432
|
+
var downloadFileAndFireDropEvent = ${Eg.toString()};
|
|
433
433
|
return downloadFileAndFireDropEvent.apply(null, arguments)
|
|
434
|
-
`;return await this.driver.executeJSWithArray(i,[
|
|
434
|
+
`;return await this.driver.executeJSWithArray(i,[s.locatedElement,o])}}});function Pg(r={width:"2px",height:"2px",left:"0px",top:"400px"}){return`function getVisibleElement(locatedElement) {
|
|
435
435
|
var input = getLocatedElement(locatedElement);
|
|
436
436
|
if(input) {
|
|
437
437
|
function parents(element, _elements) {
|
|
@@ -460,20 +460,20 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
|
|
|
460
460
|
})
|
|
461
461
|
|
|
462
462
|
forceStyle(input, 'visibility', 'visible');
|
|
463
|
-
forceStyle(input, 'width', '${
|
|
464
|
-
forceStyle(input, 'max-width', '${
|
|
465
|
-
forceStyle(input, 'height', '${
|
|
466
|
-
forceStyle(input, 'max-height', '${
|
|
463
|
+
forceStyle(input, 'width', '${r.width}');
|
|
464
|
+
forceStyle(input, 'max-width', '${r.width}');
|
|
465
|
+
forceStyle(input, 'height', '${r.height}');
|
|
466
|
+
forceStyle(input, 'max-height', '${r.height}');
|
|
467
467
|
forceStyle(input, 'z-index', 100000000);
|
|
468
468
|
forceStyle(input, 'opacity', 1);
|
|
469
|
-
forceStyle(input, 'top', '${
|
|
470
|
-
forceStyle(input, 'left', '${
|
|
469
|
+
forceStyle(input, 'top', '${r.top}');
|
|
470
|
+
forceStyle(input, 'left', '${r.left}');
|
|
471
471
|
forceStyle(input, 'position', 'fixed');
|
|
472
472
|
forceStyle(input, 'pointer-events', 'all');
|
|
473
473
|
input.removeAttribute("disabled");
|
|
474
474
|
input.focus();
|
|
475
475
|
}
|
|
476
|
-
}`}async function
|
|
476
|
+
}`}async function BE(r,e){let t=null;try{t=(await tc(r)).body}catch(n){if(jE.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 s=`${Ig.tmpdir()}/${e}`;return await xg.promises.writeFile(s,t),s}function $E(r){return de(r,e=>BE(e.url,e.name))}function WE(r,e){return e(r)}async function Ag(r,e){let t=await $E(r),s=await de(t,n=>WE(n,e));return Array.isArray(s)&&s.map(n=>n==null?void 0:n.value)}var Ig,xg,jE,Cg=w(()=>{"use strict";Ig=E(require("os"));Rt();xg=require("fs");U();j();jE=R("input-file-utils")});function VE(){return`async function downloadAndUpload(locatedElement, fileUrls) {
|
|
477
477
|
const fileIsNative = typeof window.File === 'function' && (window.File.toString().indexOf('native code') > -1);
|
|
478
478
|
const File = fileIsNative ? window.File : (function obtainSafeGlobals() {
|
|
479
479
|
const attachTo = document.body || document.documentElement;
|
|
@@ -550,21 +550,21 @@ Build info`),n=e.seleniumStack.orgStatusMessage.slice(0,r===-1?void 0:r);throw n
|
|
|
550
550
|
element.dispatchEvent(new Event("change", { bubbles: true }));
|
|
551
551
|
}
|
|
552
552
|
element.removeEventListener("change", changeFiredHandler, true);
|
|
553
|
-
}`}var
|
|
553
|
+
}`}var Ki,Ji,kg=w(()=>{"use strict";Cg();ce();j();U();ye();Ki=R("input-file-step-action"),Ji=class extends ${uploadFile(e){return this.driver.uploadFile(e)}forceInputToBeVisible(e,t){Ki.info("workaround - stepaction - move element to visible position");let s=`
|
|
554
554
|
var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
555
|
-
var getVisibleElement = ${
|
|
555
|
+
var getVisibleElement = ${Pg(t)};
|
|
556
556
|
return getVisibleElement.apply(null, arguments);
|
|
557
|
-
`;return this.driver.executeJS(
|
|
557
|
+
`;return this.driver.executeJS(s,e.locatedElement)}async safariPreUploadActions(e){let t={width:"150px",height:"150px",left:"10px",top:"10px"};try{return await this.forceInputToBeVisible(e,t)}catch(s){throw Ki.error("failed to set input file in Safari recovery",{err:s}),s}}async uploadFilesAndForceVisibility(e,t){try{this.driver.isSafari()&&await this.safariPreUploadActions(t),await this.uploadFiles(e,t)}catch(s){let n="The element is not editable",o="The element is not focusable",i="An element command could not be completed because the element is not visible on the page.",a="element not interactable",c="element is not pointer- or keyboard interactable",l="invalid element state: Element is not currently interactable and may not be manipulated",d="Element must not be hidden, disabled or read-only",m="is not reachable by keyboard",p=s?s.message:"";if(p===l||p.startsWith(d)||p.startsWith(n)||p.startsWith(o)||p.startsWith(i)||p.includes(m)||p.includes(a)||p.includes(c)){await this.forceInputToBeVisible(t),await this.uploadFiles(e,t);return}throw Ki.error("failed to set input file",{err:s}),s}}async uploadFiles(e,t){for(let s of e)await this.driver.elementIdValue(De(t.seleniumElement),s)}async performAction(){let e=this.context.data[this.step.targetId||"targetId"],t=M.flags.overrideAzureStorageUrl.isEnabled(),s=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,Ki),a=this.driver.isSafari()&&(s||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 Tr(m);return{name:d,url:`data:${p.type};base64,${Buffer.from(p.body).toString("base64")}`}}))),a||c){await this.driver.executeJSWithArray(`
|
|
558
558
|
const getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
|
|
559
|
-
const downloadAndUploadFile = ${
|
|
560
|
-
return downloadAndUploadFile.apply(null, arguments);`,[e.locatedElement,i]);return}let l=await ty(i,this.uploadFile.bind(this));await this.uploadFilesAndForceVisibility(l,e)}}});var ea,ta,ny=T(()=>{"use strict";ea=require("url");ce();ta=class extends W{async updateBaseUrl(e){let t=new ea.URL(e),r=new ea.URL(this.context.recordedBaseUrl),n=new ea.URL(this.context.baseUrl);return t.host===r.host&&r.host!==n.host&&(t.host=n.host),t.href}async performAction(){let e=this.context.data.testimNavigationStepDestination||this.context.data.url;if(this.step.openInNewTab){await this.driver.client.newWindow(e);return}let t=await this.updateBaseUrl(e);await this.driver.url(t)}}});var ra,oy=T(()=>{"use strict";ce();F();ra=class extends W{async performAction(){await ie(this.step.durationMS)}}});var sa,iy=T(()=>{"use strict";ce();sa=class extends W{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var Bn,ay=T(()=>{"use strict";ce();Bn=class extends W{async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:r}=this.sessionPlayerInit;try{let o=await this.driver.executeCodeAsync(r,t,e);return(o==null?void 0:o.value)||{}}catch(o){throw(n=o==null?void 0:o.message)!=null&&n.includes("Javascript execution context no longer exists")?new Error('The page refreshed or changed while executing this step. Please consider unchecking "Send via web page" if this is expected.'):o}}runApiInBg(e){let{apiCall:t}=this.sessionPlayerInit;return new Promise(r=>{t(e,r)})}async performAction(){let{commonConstants:e}=this.sessionPlayerInit,t=this.step,r=this.context,n={id:t.id,url:r.apiUrl,method:t.method,headers:r.apiHeaders,body:r.apiBody,timeout:r.data.maxTotalStepTime,omitCookies:t.omitCookies,formData:t.formData,fileUrls:r.fileUrls},o;t.sendViaWebApp?o=await this.runApiInAut(n):o=await this.runApiInBg(n);let i=o.result||{},a={method:t.method,status:i.status,url:t.url};return o.success?i.status===0?{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:"Connection problem",errorType:e.stepResult.API_REQUEST_NETWORK_ERROR}:{result:i,resultInfo:a,shouldRetry:!1,success:!0}:{result:i,resultInfo:a,shouldRetry:!1,success:!1,reason:i.error||e.error.REQUEST_TIMED_OUT,errorType:i.error?e.stepResult.API_FAILURE:e.stepResult.API_REQUEST_NETWORK_ERROR}}}});var na,cy=T(()=>{"use strict";ce();na=class extends W{async performAction(){let e=this.step.extractTextParamName,t=await this.stepActionUtils.extractTargetText(this.getTarget());return this.context.data.exports=this.context.data.exports||{},this.context.data.exports[e]=t,{success:!0,data:this.context.data}}}});var oa,ly=T(()=>{"use strict";ce();ia();oa=class extends W{async performAction(){return await Ns(this.step,this.context,this.driver,this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),this.frameHandler.frameManager)}}});function ir(s){if(qr.has(s,"elementId"))return s.elementId;if(qr.has(s,$t))return s[$t];if(qr.has(s,aa))return s[aa]}var qr,uy,aa,td,rd,sd,dy=T(()=>{"use strict";qr=E(require("lodash")),uy=require("@applitools/eyes-sdk-core");Yr();io();Ee();aa="ELEMENT";td=class{isDriver(e){return Boolean((e==null?void 0:e.getPrototype)&&e.desiredCapabilities&&e.requestHandler)}isElement(e){if(!e)return!1;let t=e.value||e;return Boolean(t[$t]||t[aa])}isSelector(e){return typeof e=="string"}transformDriver(e){return new Proxy(e,{get:(t,r)=>{if(r!=="then")return Reflect.get(t,r)}})}transformElement(e){let t=ir(e.value||e);return{[$t]:t,[aa]:t}}transformSelector(e){return qr.has(e,"selector")?qr.has(e,"type")?e.type==="css"?`css selector:${e.selector}`:`${e.type}:${e.selector}`:e.selector:e}extractSelector(e){return qr.has(e,"selector")?e.selector:void 0}isStaleElementError(e,t){if(!e)return!1;let r=e.originalError||e;return r instanceof Error?r.seleniumStack&&r.seleniumStack.type==="StaleElementReference":r.value&&r.selector&&r.selector===t}isEqualElements(e,t,r){if(!t||!r)return!1;let n=ir(t),o=ir(r);return n===o}async executeScript(e,t,r){let{value:n}=await e.execute(t,r);return n}async mainContext(e){return await e.frame(null),e}async parentContext(e){return await e.frameParent(),e}async childContext(e,t){return await e.frame(t),e}async findElement(e,t,r){let{value:n}=r?await e.elementIdElement(ir(r),t):await e.element(t);return n}async findElements(e,t,r){let{value:n}=r?await e.elementIdElements(ir(r),t):await e.elements(t);return n}async getWindowSize(e){let{value:t}=await e.windowHandleSize();return{width:t.width,height:t.height}}async setWindowSize(e,t){await e.windowHandlePosition({x:0,y:0}),await e.windowHandleSize(t)}async getDriverInfo(e){let t=e.desiredCapabilities;return{sessionId:e.requestHandler.sessionID||e.sessionId,isMobile:e.isMobile,isNative:e.isMobile&&!t.browserName,deviceName:t.deviceName,platformName:t.platformName||t.platform,platformVersion:t.platformVersion,browserName:t.browserName??t.name,browserVersion:t.browserVersion??t.version,pixelRatio:t.pixelRatio}}async getTitle(e){return e.getTitle()}async getUrl(e){return e.getUrl()}async visit(e,t){await e.url(t)}async takeScreenshot(e){return e.saveScreenshot()}async click(e,t){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.elementIdClick(ir(t))}async hover(e,t,r){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.moveTo(ir(t),r==null?void 0:r.x,r==null?void 0:r.y)}async type(e,t,r){this.isSelector(t)?t=await this.findElement(e,t):e.elementIdValue(ir(t),r)}async scrollIntoView(e,t,r=!1){this.isSelector(t)&&(t=await this.findElement(e,t)),await e.execute("arguments[0].scrollIntoView(arguments[1])",t,r)}async waitUntilDisplayed(e,t,r){await e.waitForVisible(t,r)}},rd=class{constructor(){let{EyeSdkBuilder:e}=se(),t=bp["@applitools/eyes-sdk-core"]||"N/A";this.sdk=(0,uy.makeSDK)({name:"Testim.io",version:`4.0.0/eyes-sdk-core/${t}`,spec:new td}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:o}=se(),i=await this.sdk.makeManager({type:e?"vg":"classic",concurrency:t});return o.rememberCreatedBatch(r,n),i}},sd=new rd});var my,py,$n,fy=T(()=>{"use strict";my=E(require("lodash"));ce();j();dy();py=x("pixel-validation-step-action"),$n=class extends W{async performAction(){var d,m;let{shouldUseVisualGrid:e,applitoolsSdkConfig:t,applitoolsSdkLogger:r,testResultId:n}=this.context;this.runContext=this.context.getRunContext(void 0);let o=((d=this.runContext.incomingParams)==null?void 0:d.final)||{},i=((m=t.batch)==null?void 0:m.id)||n,a=await sd.getManager(e,this.context.config.applitoolsConcurrency||5,i,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},l;try{let p=await a.openEyes({driver:this.driver.client,config:t,logger:r}),h={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};my.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(h,o.applitoolsStepSettings),py.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await p.check({settings:h}),l={isApplitoolsSdkResult:!0,success:!0,eyesResults:await p.close()}}catch(p){py.error("Applitools SDK step failed",{err:p,info:p.info}),l={isApplitoolsSdkResult:!0,success:!1,err:p}}return await sd.handleApplitoolsSdkResult(this.context,l,this.step)}}});var Ds,nd=T(()=>{"use strict";F();$r();Vi();Ds=class extends or{async executeCliCode(){var h,g,y;let{step:e,context:t}=this,r=this.stepActionUtils.driver.isMobile;if(!((y=(g=(h=t.company)==null?void 0:h.activePlan)==null?void 0:g.premiumFeatures)==null?void 0:y.cliAction)&&!r)return{success:"skipped",reason:"CLI action is not enabled in your current plan"};let{code:o,id:i}=e,{incomingParams:a,testResultId:c,retryIndex:l,stepResultId:d}=t,m={config:t.config,data:t.data},p=t.data.timeToPlayStep,f=await xs(o,i,a,m,c,l,d,p);return await this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof X?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var ar,hy=T(()=>{"use strict";nd();ar=class extends Ds{isFailedResult(e){return e===!1}}});var ca,gy=T(()=>{"use strict";nd();ca=class extends Ds{isFailedResult(e){return!e}}});var la,yy=T(()=>{"use strict";F();$r();ce();z();la=class extends W{async performAction(){let{context:e}=this,{stepId:t,packageData:r,resultId:n,retryIndex:o,stepResultId:i,timeToPlayBeforeExec:a}=e;try{return{data:await Is(t,n,o,r,i,a),success:!0}}catch(c){return c instanceof at?{success:!1,code:"invalid-node-package",message:c.message}:c instanceof X?{success:!1,code:"timeout"}:{success:!1,reason:c.message,exception:c}}}}});var Ms,by=T(()=>{"use strict";ce();Ms=class extends W{async performAction(){return{success:"skipped",reason:"This step can run only on Chrome"}}}});var je,wy=T(()=>{"use strict";ce();je=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{let o=this.context.sfdcTestActions;if(o===void 0)throw new Error("No test actions were compiled");return{success:!0,reason:await e.sfdcExecute(t,o,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});var ua,Ty=T(()=>{"use strict";ce();ua=class extends W{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((o,i)=>this.context.playback.sfdcAddLog(o,i)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{return{success:!0,reason:await e.sfdcExecuteRecordedStep(t,this.step.recordedData,this.context)}}catch(o){return{success:!1,reason:o.reason||o.message,exception:o,shouldRetry:!1}}finally{t.releaseObjects()}}}});function lR(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}function da(s,e){lR(uR,e),e.registerLocateStepActionUtils&&e.registerLocateStepActionUtils(Un.getUtils(s))}var uR,od=T(()=>{"use strict";yg();Tg();Ag();kg();Og();Dg();Fg();jg();Bg();Gg();qg();Vg();Kg();Yg();sy();ny();oy();iy();ay();cy();ly();fy();hy();gy();yy();by();wy();Ty();uR={locate:Un,scroll:Bi,mouse:$i,submit:Ki,text:Gi,"special-key":Hi,"user-code":jt,"validation-code-step":jt,"wait-for-code-step":jt,"action-code-step":jt,"condition-step":Ls,"skip-code-step":Ls,"element-code-step":Ls,"evaluate-expression":Wi,"text-validation":jn,"wait-for-text-validation":jn,"select-option":zi,"drop-file":Yi,"input-file":Zi,hover:Ji,navigation:ta,wheel:Xi,sleep:ra,refresh:sa,"api-validation":Bn,"api-action":Bn,"api-code-step":jt,"extract-text":na,"simple-ui-verification":$n,"wait-for-simple-ui-verification":$n,"cli-validation-download-file":Ms,"cli-wait-for-download-file":Ms,"network-validation-step":Ms,"cli-validation-code-step":ar,"cli-wait-for-code-step":ar,"cli-action-code-step":ar,"cli-api-code-step":ar,"cli-condition-step":ca,"node-package":la,"email-code-step":jt,"cli-email-code-step":ar,"tdk-hybrid":oa,"sfdc-recorded-step":ua,"sfdc-step-login":je,"sfdc-step-loginas":je,"sfdc-step-logout":je,"sfdc-step-sobjectcreate":je,"sfdc-step-sobjectdelete":je,"sfdc-step-findrecord":je,"sfdc-step-quickaction":je,"sfdc-step-sobjectedit":je,"sfdc-step-sobjectvalidate":je,"sfdc-step-launchapp":je,"sfdc-step-closeconsoletabs":je,"sfdc-step-relatedlistaction":je}});var id,Wn,ad=T(()=>{"use strict";id=class{on(){}},Wn=new id});var vy,dR,Ey,pR,Us,cd=T(()=>{"use strict";vy=E(require("lodash")),dR=1e3,Ey=["simple-ui-verification","wait-for-simple-ui-verification"],pR=[...Ey,"custom-validation","sfdc-recorded-step","sfdc-step-login","sfdc-step-loginas","sfdc-step-logout","sfdc-step-sobjectcreate","sfdc-step-sobjectdelete","sfdc-step-findrecord","sfdc-step-quickaction","sfdc-step-sobjectvalidate","sfdc-step-launchapp","sfdc-step-closeconsoletabs","sfdc-step-sobjectedit","sfdc-step-relatedlistaction"],Us=class{constructor(e){this.resetStepVariables(),this.resetRetryVariables(),this.isDebuggerConnected=e}resetStepVariables(e,t){this.currentRetryTimes=t||[],this.totalStepTime=e||0,this.totalStepTimesReport=[],this.currentRetryTimesReport={};let r=Date.now();this.currentRetryStart=r,this.lastUpdateTime=r}resetRetryVariables(){let e=Date.now();this.currentRetryStart=e,this.lastUpdateTime=e,this.totalStepTimesReport.push(this.currentRetryTimesReport),this.currentRetryTimesReport={}}initStepRun(e){let t=o=>{let i=this.getTotalStepTimeLeftToPlay(e,o),a=5e3;return i<=a?[a]:[Math.max(a,i/3)]};e.setStartTimestamp();let r=this.getTotalStepRunTime(e),n=pR.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}getStepTimes(){return this.totalStepTimesReport.push(this.currentRetryTimesReport),vy.cloneDeep(this.totalStepTimesReport)}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return Ey.includes(e.stepType)&&(r=e.context.config.applitoolsStepTimeout||18e5),e.step.type.startsWith("sfdc-")&&(r=e.step.defaultTimeout),e.step.useStepTimeout&&e.step.stepTimeout?e.step.stepTimeout:r}getTotalStepTimeLeftToPlay(e,t=this.totalStepTime){let r=Date.now()-e.startTimestamp;return t-r}getCurrentRetryTime(e){return e.retryIndex<this.currentRetryTimes.length?this.currentRetryTimes[e.retryIndex]:this.getTotalStepTimeLeftToPlay(e)}getTotalCurrentRetryTimeLeft(e){let t=Date.now()-this.currentRetryStart;return this.getCurrentRetryTime(e)-t+dR}getTabTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getDynamicParentTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getFrameTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getLocateTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}calcAndroidScrollTimeout(e){let r=2e3;return e.step.isScrollToElement&&(r=4e3),e.step.events.length*r+5e3}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,r=e.step.type,n=3e4,o;return r==="sleep"?o=e.step.durationMS+t:r==="android-scroll"?o=Math.max(this.calcAndroidScrollTimeout(e),n):o=Math.max(this.getTotalStepTimeLeftToPlay(e),n),o}setStepPhaseTime(e){let t=Date.now(),r=t-this.lastUpdateTime;this.lastUpdateTime=t,this.currentRetryTimesReport[e]=r}reportGetTabTime(){this.setStepPhaseTime("tab")}reportGetFrameTime(){this.setStepPhaseTime("frame")}reportCalcConditionTime(){this.setStepPhaseTime("condition")}reportPreLocateActionsTime(){this.setStepPhaseTime("pre-locate")}reportFindElementsTime(){this.setStepPhaseTime("locate")}reportStepActionTime(){this.setStepPhaseTime("action")}}});var ld={};$(ld,{SeleniumTestPlayer:()=>Gn});var Sy,Gn,pa=T(()=>{"use strict";F();Sy=E(Nn());$u();ag();Hu();zu();ug();Ku();Ee();Os();od();ad();cd();Gn=class{constructor(e,t,r,n="code",o=new Sy.default,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d}=se();this.driver=o,this.id=e;let m=new _s(this.driver);this.stepActionFactory=new d(m),da(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new Ni(this.driver),this.driver.tabService=this.tabService,this.windowCreationListener=Wn,this.playbackTimeoutCalculator=new Us(Mi()),this.tabService.createSesion(e);let p=lg(this.driver);this.sessionPlayer=new c(e,this.tabService,new Cs(this.driver),Wn,p,Di,null,null,m,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.tabService.setAddFrameHandlerCallBack(this.sessionPlayer.addPlaybackFrameHandler.bind(this.sessionPlayer)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){n!=null&&n.isTabOpener&&this.tabService.addNewPopup(this.id,n.id).catch(()=>{})}onDone(){let{commonConstants:e}=se(),t=1e3*60*2;return re(this.driver.end(),t).catch(r=>{if(r instanceof X)return this.driver.forceEnd().catch(()=>null)}).then(()=>{this.sessionPlayer.playbackManager.off(e.playback.RESULT,this.onStepCompleted),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null})}clearSessionTabs(){this.tabService.clearAllTabs(this.id)}async addTab(e,t={loadInfo:!0}){let n=(await this.driver.getTabIds()).at(-1);return await this.tabService.addNewTab(this.id,n,e,t),this.sessionPlayer.addPlaybackFrameHandler(n,void 0,{emptyPage:!0})}async addAllTabs(e,t={loadInfo:!0,checkForMainTab:!0,takeScreenshots:!0},r=[]){let n=await this.driver.getTabIds(),o=["app.testim.io"].concat(r);for(let i of n.reverse()){await this.tabService.addNewTab(this.id,i,e,{...t,forceSwitch:!0});let a=this.tabService.getTabInfo(this.id,i);if(o.some(c=>a.url.includes(c))){await this.tabService.removeTabInfo(this.id,i);continue}await this.sessionPlayer.addPlaybackFrameHandler(i,void 0,{emptyPage:!0})}if(this.tabService.tabCount(this.id)===1){let i=this.tabService.getMainTabInfo(this.id),a=this.tabService.getTabUtils(this.id,i);await this.tabService.switchTab(a.tabId,this.id,{forceSwitch:!0})}this.tabService.fixMissingMainTab(this.id)}getSessionId(){return this.driver.getSessionId()}}});var xy={};$(xy,{buildCodeTests:()=>ud});async function mR(s,e,t,r,n){try{return await Ry(s,e,t,r,n)}catch(o){if((o==null?void 0:o.code)==="ENOENT")return cr.compiler=null,cr.webpackConfig=null,r&&(r.data={}),await Ry(s,e,t,r,n);throw o}}async function Ry(s,e={mode:"development"},t=void 0,r=void 0,n=void 0){let o=await ge("webpack"),i=lr.cloneDeep(e);e.externals={testim:"__testim"},e.devtool||(e.devtool="inline-source-map"),e.plugins||(e.plugins=[]),e.plugins.push(new o.DefinePlugin(fR(t)),new o.DefinePlugin({"process.argv":JSON.stringify(process.argv)})),s=s.map(h=>ma.resolve(h));let a=s.map(()=>K(30));if(e.optimization={minimize:!1},Number(process.versions.node.split(".")[0])>=17){let h=require("crypto"),g=h.createHash;h.createHash=(y,w)=>g(y==="md4"?"sha256":y,w)}e.entry=Object.fromEntries(lr.zip(s,a).map(([h,g])=>[g,h])),e.output=Object.assign({devtoolModuleFilenameTemplate:h=>`file:///${h.absoluteResourcePath}`,filename:"[name].bundle.js"},e.output);let l;r?(lr.isEqual(cr.webpackConfig,i)&&cr.compiler||(cr.webpackConfig=i,cr.compiler=o(e)),l=cr.compiler):l=o(e);let d=r||new Iy.default;l.outputFileSystem=d;let m=ct(h=>{n==null||n.addEventListener("abort",()=>{h(new Me,void 0)})});try{let h=await Promise.race([ct(g=>l.run(g)),m]);if(h!=null&&h.hasErrors())throw new Error(h==null?void 0:h.toJson().errors.toString())}catch(h){let g=h.message.match(/Entry module not found: Error: Can't resolve '(.*)'/);throw g&&g.length===2?e.output&&e.output.library==="tdk"?new R(`Could not open dev-kit functions file in ${g[1]}`):new R(`Can't find test files in: '${g[1]}'`):new R(`Compilation Webpack Error in tests: ${h.message}`)}return{tests:[s.map((h,g)=>({code:d.readFileSync(ma.resolve("./dist",`${a[g]}.bundle.js`)),name:h})).map(({code:h,name:g})=>({code:h.toString(),baseUrl:"",name:ma.resolve(g),testConfig:{},testConfigId:null,testId:K(),resultId:K(),isTestsContainer:!0}))],runName:`Testim Dev Kit Run ${new Date().toLocaleString()}`}}function fR(s){let e=lr.fromPairs(Object.keys(process.env).filter(r=>/^TDK_/i.test(r)||r==="BASE_URL").map(r=>[r,process.env[r]])),t={BASE_URL:s==null?void 0:s.baseUrl};return{"process.env":hR({...t,...e})}}function hR(s){return Object.fromEntries(Object.entries(s).map(([e,t])=>[e,JSON.stringify(t)]))}var lr,ma,Iy,cr,ud,dd=T(()=>{"use strict";lr=E(require("lodash")),ma=E(require("path"));F();Iy=E(require("memory-fs"));z();ft();cr={compiler:null,webpackConfig:null};ud=mR});var Ay={};$(Ay,{compileFunctionsLibrary:()=>gd,findTestFolder:()=>Vr,findTests:()=>pd,getLocalLocatorContents:()=>md,getLocalLocators:()=>qn,saveLocators:()=>hd,saveTest:()=>fd});async function qn(){let s=await Vr(process.cwd()),e=Je.join(s,"locators","locators.js");function t(n){let o=n.toString().replace("module.exports =","return").replace(/require/g,"(x => /locator.(.*).json/.exec(x)[1])");return new Function(o)()}let r=await rt.promises.readFile(e).then(t,()=>({}));return Object.fromEntries(Object.keys(r).map(n=>[n.replace(/"/g,'\\"'),r[n]]))}async function pd(s=process.cwd()){let e=await Vr(s),t=await rt.promises.readdir(e,{withFileTypes:!0}),r=["webpack.config.js","tsconfig.js",".DS_Store","functions.js"],n=[".html",".json"];return t.filter(o=>!r.includes(o.name)&&!n.some(i=>o.name.endsWith(i))&&o.isFile()&&!o.name.startsWith(".")).map(o=>o.name)}async function gR(s){let e=Object.entries(s),t=e.map(([,n])=>n),r=await Promise.all(t);for(let n=0;n<r.length;n++)e[n][1]=r[n];return Object.fromEntries(e)}async function md(s,e=!1,t=process.cwd()){let r={};if(e){let n=await Vr(t);for(let o of Object.values(s))r[o]=rt.promises.readFile(Je.join(n,"locators",`locator.${o}.json`)).then(JSON.parse)}try{return await gR(r)}catch(n){return console.error(n),{}}}async function fd({body:s,name:e,locators:t,language:r="javascript"}){let n=await Vr(process.cwd()),o=Je.join(n,"locators","locators.js"),i=Je.join(n,e);if(!i.startsWith(n))throw new Error("A test name must be a valid file name and inside the tests directory");if(r==="javascript"?i.endsWith(".js")&&!i.endsWith(".test.js")?i=`${i.substr(0,i.length-3)}.test.js`:i.endsWith(".test.js")||(i+=".test.js"):i.endsWith(".ts")&&!i.endsWith(".test.ts")?i=`${i.substr(0,i.length-3)}.test.ts`:i.endsWith(".test.ts")||(i=`${i}.test.ts`),i.endsWith("locators/locators.js"))throw new Error("Cannot override locators file from the internet as it is evaluated by the runner");await rt.promises.writeFile(i,s),await rt.promises.mkdir(Je.join(n,"locators")).catch(()=>{});for(let{id:l,body:d}of t)await rt.promises.writeFile(Je.join(n,"locators",`locator.${l}.json`),JSON.stringify(d));let a=Object.fromEntries(t.map(({name:l,id:d})=>[l,d])),c=await qn();Object.assign(c,a),await Cy(o,c)}async function Cy(s,e){let t=`module.exports = {
|
|
561
|
-
`;for(let[
|
|
562
|
-
`;t+="};",await rt.promises.writeFile(s,t)}async function hd(s,{mergeIntoExisting:e}={mergeIntoExisting:!1}){let t=await Vr(process.cwd()),r=Je.join(t,"locators","locators.js");await rt.promises.mkdir(Je.join(t,"locators")).catch(()=>{});for(let{name:o,id:i,elementLocator:a}of s)await rt.promises.writeFile(Je.join(t,"locators",`locator.${i}.json`),JSON.stringify({name:o,id:i,elementLocator:a}));let n=Object.fromEntries(s.map(({name:o,id:i})=>[o,i]));if(e){let o=await qn();Object.assign(n,o)}await Cy(r,n)}async function gd({fileSystem:s,bypassWebpack:e}={},t=void 0){let r=await Vr(process.cwd());if(t!=null&&t.aborted)throw new Me;let n=Je.join(r,"functions.js");if(e!=null&&e.testim){let i=require("module"),a=i.prototype.require;i.prototype.require=function(l){return l==="testim"?e.testim:a.apply(this,arguments)};try{return delete require.cache[require.resolve(n)],require(n)}finally{i.prototype.require=a}}return(await ud([n],{output:{libraryTarget:"umd",library:"tdk",globalObject:"globalThis"},cache:{type:"memory"},mode:"development"},{},s,t)).tests[0][0].code}var Py,Je,rt,Vr,yd=T(()=>{"use strict";Py=E(require("lodash")),Je=E(require("path")),rt=require("fs");z();dd();Vr=Py.memoize(async s=>(await rt.promises.readdir(s)).includes("tests")&&(await rt.promises.stat(Je.join(s,"tests"))).isDirectory()?Je.join(s,"tests"):s)});var ky={};$(ky,{getArgumentsFromContext:()=>Hr});async function Hr(s,e,t){let r=yR(s.parameterNames.map(n=>n.displayName),e.incomingParams.as);return await Promise.all(r.map(n=>typeof n=="object"&&n.locatedElement?t(n):n))}function yR(s,e){let t=[];for(let r of s){let n=e.functionParameters.indexOf(r);t.push(e.functionArguments[n])}return t}var Vn=T(()=>{"use strict"});var Oy={};$(Oy,{execute:()=>TR});async function vR(s,e,t,r,n,o){var a;let i;try{let{WebDriver:c}=await bR("selenium-webdriver");if(o.aborted)throw new _y;let{Executor:l,HttpClient:d}=require("selenium-webdriver/http"),m=s.driver.client.requestHandler.defaultOptions,p=s.driver.client.requestHandler.startPath,h=`${m.protocol}://${m.hostname}:${m.port}`+p,g=new d(h),y=new c(s.getSessionId(),new l(g));await ER(y,s.driver);let C=await wR(t,r,v=>y.findElement({css:v.selector})),b=e.bind(null,y,...C);return i=function(){g.send=async function(){throw new _y}},o.addEventListener("abort",i),await b(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}async function ER(s,e){if(e.cdpUrl){let t=await s.getAllWindowHandles();for(let r of t)if(await s.switchTo().window(r),await s.executeScript("return window.__isMainTestimTab"))break}}var _y,bR,wR,TR,Ly=T(()=>{"use strict";({AbortError:_y}=(z(),G(uc))),{lazyRequire:bR}=(ft(),G($l)),{getArgumentsFromContext:wR}=(Vn(),G(ky)),TR=vR});var Ny={};$(Ny,{execute:()=>SR});async function RR(s,e,t,r,n,o){var a;let i;try{let c=await ge("puppeteer");if(o.aborted)throw new Me;let l=await c.connect({browserWSEndpoint:s.driver.cdpUrl,defaultViewport:null,product:"chrome"});if(o.aborted)throw l.disconnect(),new Me;i=function(){l.disconnect()},o.addEventListener("abort",i);let d=await l.pages(),m;for(let y of d)if(await y.evaluate(()=>window.__isMainTestimTab)){m=y;break}let p=m||d.at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,shouldRetry:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{o.removeEventListener("abort",i)}}var SR,Dy=T(()=>{"use strict";z();ft();Vn();SR=RR});var My={};$(My,{execute:()=>IR});async function xR(s,e,t,r,n,o){var a;let i;try{let c=await ge("playwright");if(o.aborted)throw new Me;let l=await c.chromium.connect({wsEndpoint:s.driver.cdpUrl});if(o.aborted)throw l.disconnect(),new Me;i=function(){l.disconnect()},o.addEventListener("abort",i);let p=(await(await l.newContext({viewport:null})).pages()).at(-1),h=await Hr(t,r,y=>p.$(y.selector));return await e.bind(null,p,...h)(),{success:!0}}catch(c){return o.aborted?{success:!1,shouldRetry:!1,reason:"aborted"}:{success:!1,reason:(c==null?void 0:c.message)||c,extraInfo:(a=c==null?void 0:c.constructor)==null?void 0:a.name}}finally{i&&o.removeEventListener("abort",i)}}var IR,Uy=T(()=>{"use strict";z();ft();Vn();IR=xR});var jy={};$(jy,{execute:()=>PR});async function CR(s,e,t,r,n,o,i,a){function c(){s.sessionPlayer.stopPlaying()}a.addEventListener("abort",c);function l(P){if(o.parameterValues){let L=o.parameterValues.find(B=>B.type==="locate"&&B.id===P.locatorId);return{elementLocator:L.elementLocator,id:L.id,name:"Hybrid Step Locator"}}return P.locatedElement.shadowPath?P.locatedElement.shadowPath[0]:P}let d=await Hr(o,t,l),m=e.bind(null,...d),p=K(),f=K(),h=t.testResultId,g=t.config.baseUrl,y=Fy.cloneDeep(t);y.loginData=r;let C=se().manifestVersion||"runner",b=!1,v=null,I="master",k=`Execute TDK Function '${o.functionName}'`,D=!0,S={fn:m,bypassSetup:!0,isBeforeOrAfterTest:!0,name:k,sourceCode:m.toString(),sourceName:m.name,testId:p,resultId:K()},_=typeof e.results=="boolean"&&!e.results;try{N("tdkHybridStepPlayback before addAllTabs"),n?(s.sessionPlayer.playbackAutUtils.frameManager=n,s.sessionPlayer.frameManager=n):await s.addAllTabs(null,{loadInfo:!0,checkForMainTab:!0,takeScreenshots:!_},[s.driver.initialUrl]),s.sessionPlayer.playbackManager.dontAssociateChildResult=!0,s.sessionPlayer.playbackManager.onlyLocalReporting=_,N("tdkHybridStepPlayback before playTestByCode");let P=await new Promise((L,B)=>{i==="agent"&&AR(s,L);function V(){B(new Me),a.removeEventListener("abort",V)}a.addEventListener("abort",V),s.sessionPlayer.playTestByCode(p,f,h,g,y,C,L,b,v,I,[S],k,D).catch(B)});return N("tdkHybridStepPlayback after playTestByCode"),{success:P.success,shouldRetry:!1,resultInfo:{testId:p,executionId:f,resultId:S.resultId}}}catch(P){return{success:!1,error:P,shouldRetry:!1}}finally{a.removeEventListener("abort",c)}}function AR(s,e){let{commonConstants:t}=se();s.sessionPlayer.playbackManager.on(t.playback.START,({testResult:r})=>{let n=r.runnerStatus;Object.defineProperty(r,"runnerStatus",{get(){return n},set(o){n=o,o==="FINISHED"&&e(r)}})})}var Fy,PR,By=T(()=>{"use strict";Fy=E(require("lodash"));Le();F();z();Vn();Ee();PR=CR});var fa={};$(fa,{abort:()=>Td,execute:()=>Ns,run:()=>OR});async function Ns(s,e,t,r,n,o="cli"){let i=new Wy.AbortController,{signal:a}=i;wd.set(e.stepResultId,i);try{N("before seleniumTestPlayer require");let{SeleniumTestPlayer:c}=(pa(),G(ld)),{compileFunctionsLibrary:l}=(yd(),G(Ay)),{functionName:d}=s,m={},p=!1,f=new c(e.id,m,p,Ot.CODEFUL,t);bd=f.sessionPlayer.codeSessionPlayer.proxy;let h=s.bypassWebpack?{testim:bd.wrappedSteps()}:!1;N("before compileFunctionsLibrary",{bypassWebpack:Boolean(s.bypassWebpack)});let g;try{g=await l({fileSystem:kR,bypassWebpack:h},a)}catch(w){return{success:!1,shouldRetry:!1,reason:`Unable to compile functions library. ${w.message}`,extraInfo:w.stack}}typeof globalThis>"u"&&(global.globalThis=process);let y;if(h?y=g[d]:(global.globalThis.__testim=bd.wrappedSteps(),(0,eval)(g),y=globalThis.tdk[d]),N("after hybridFunction obtain and eval"),!y)return{success:!1,shouldRetry:!1,reason:`Could not find function '${d}' locally. Please make sure you have a functions.js file with a '${d}' function defined`,extraInfo:Object.keys(globalThis.tdk)};if(y.type==="selenium"){let w=(Ly(),G(Oy)).execute;return await w(f,y,s,e,o,a)}if(y.type==="puppeteer"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running puppeteer code requires the remote debugging protocol to be open. Please contact Testim support."};N("before puppeteerPlayback");let w=(Dy(),G(Ny)).execute;try{return await w(f,y,s,e,o,a)}finally{N("after puppeteerPlayback")}}if(y.type==="playwright"){if(!f.driver.cdpUrl)return{success:!1,shouldRetry:!1,reason:"running playwright code requires the remote debugging protocol to be open. Please contact Testim support."};let w=(Uy(),G(My)).execute;return await w(f,y,s,e,o,a)}if(y.type==="tdk"||!y.type){let w=(By(),G(jy)).execute;N("before tdkPlayback");try{return await w(f,y,e,r,n,s,o,a)}finally{N("after tdkPlayback")}}return{success:!1,shouldRetry:!1,reason:`unknown hybrid format ${y.type}`}}catch(c){_R.info("error running hybrid step",{err:c});return}finally{wd.delete(e.stepResultId)}}function Td(s){let e=wd.get(s);if(e)e.abort();else throw new Error("No such stepResultId")}var $y,Wy,kR,_R,wd,bd,OR,ia=T(()=>{"use strict";$y=E(require("memory-fs"));Le();Wy=require("abort-controller");j();ae();kR=new $y.default,_R=x("hybrid-step-playback"),wd=new Map,OR=(s,e,t,r)=>{let{step:n,context:o}=e.data;return Ns(n,o,s,r.loginData)}});var vd={};$(vd,{run:()=>LR});var LR,Gy=T(()=>{"use strict";F();$r();z();LR=async(s,e)=>{let{stepId:t,testResultId:r,retryIndex:n,stepResultId:o,packageData:i,timeout:a}=e.data;try{return{data:await Is(t,r,n,i,o,a),success:!0}}catch(c){if(c instanceof at)return{success:!1,code:"invalid-node-package",message:c.message};if(c instanceof X)return{success:!1,code:"timeout"};throw c}}});async function Vy(s,e,t,r){try{return await fl(s,e,t,r)}catch{ha.error("failed to report remote step state",{projectId:s,resultId:e,stepId:t});return}}async function DR(s,e,t,r,n){return ha.info("finished to run remote step",{stepId:t,sessionId:n}),await Vy(s,e,t,{status:"completed",success:!0,failureReason:null,data:r})}async function qy(s,e,t,r,n){return ha.info("failed to run remote step",{stepId:t,sessionId:n,failureReason:r}),await Vy(s,e,t,{status:"completed",success:!1,failureReason:r})}async function Hy(s,e,t,r){if(!(t!=null&&t.type)||t.status==="completed")return;let{project:n,projectData:o,userData:i}=s,a=t.type,c=e.getSessionId(),l=t.id;ha.info("start play remote step",{stepType:a,stepId:l,sessionId:c});let d=NR[a];if(!d)return await qy(n,r,l,`Failed to find step type ${a}`,c);try{let m=await d.run(e,t,o,i);return await DR(n,r,l,m,c)}catch(m){return await qy(n,r,l,m.message,c)}}var ha,NR,zy=T(()=>{"use strict";eg();ia();Te();Gy();j();ha=x("step-playback"),NR={"cli-validation-code-step":rr,"cli-wait-for-code-step":rr,"cli-action-code-step":rr,"cli-api-code-step":rr,"cli-condition-step":rr,"cli-download-code-step":rr,"node-package":vd,"tdk-hybrid":fa}});var Ky={};$(Ky,{remoteStepServiceSocketIO:()=>UR});var Ed,UR,Jy=T(()=>{"use strict";Fi();Ed=class extends sr{constructor(){super(...arguments);this.listerers={}}init(t){super.init(t,"remoteStep"),this.listerers={}}emitJoinRoom(t){return this.emitPromise("remoteStep:join",{resultId:t})}emitLeaveRoom(t){return this.emitPromise("remoteStep:leave",{resultId:t})}joinToRemoteStep(t){return this.rooms[t]?Promise.resolve():(this.joinRoom(t),this.emitJoinRoom(t))}listenToRemoteStep(t,r){this.listerers[t]&&(this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t]),this.listerers[t]=n=>{n.resultId===t&&n.remoteStep&&n.remoteStep.status==="pending"&&r(n.remoteStep)},this._socket.on("remoteStep:saved",this.listerers[t])}unlistenToRemoteStep(t){return this.listerers[t]?(this.leaveRoom(t),this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t],this.emitLeaveRoom(t)):Promise.resolve()}},UR=new Ed});var Xy={};$(Xy,{remoteStepService:()=>Fs});var Sd,Hn,Rd,Fs,ga=T(()=>{"use strict";Mn();ae();be();({REMOTE_STEP_SAVED:Sd}=Qe),Rd=class{async init(e){U.flags.useNewWSCLI.isEnabled()||(Hn=(await Promise.resolve().then(()=>(Jy(),Ky))).remoteStepServiceSocketIO,Hn.init(e))}joinToRemoteStep(e){return U.flags.useNewWSCLI.isEnabled()?Fe.addFilter(`${e}:remoteStep`,{resultId:e},[Sd]):Hn.joinToRemoteStep(e)}listenToRemoteStep(e,t){if(U.flags.useNewWSCLI.isEnabled()){Fe.listenTo(`${e}:remoteStep`,[Sd],r=>r.resultId===e&&r.remoteStep&&r.remoteStep.status==="pending",r=>t(r.remoteStep));return}Hn.listenToRemoteStep(e,t)}unlistenToRemoteStep(e){return U.flags.useNewWSCLI.isEnabled()?(Fe.removeFilter(`${e}:remoteStep`,[Sd]),Promise.resolve()):Hn.unlistenToRemoteStep(e)}},Fs=new Rd});var Qy,Zy,eb,Se,FR,tb,Yy,ya,rb=T(()=>{"use strict";Qy=E(require("lodash"));F();le();Le();ms();Et();Te();zy();Zy=E(require("p-retry")),eb=require("url");j();Xo();Ts();ae();ga();Os();Se=x("test-run-handler"),FR=3,tb=20*1e3,Yy=s=>JSON.stringify(s).length<tb,ya=class{constructor(e,t,r,n,o,i){this._executionId=e;this._executionName=t;this._options=n;this._branch=o;this._testRunStatus=i;this.seleniumPerfStats=new Nr;this._totalRetryCount=1;this._retryCount=1;this._timeoutRetryCount=1;this.clearTestResultFinished=Promise.resolve(void 0);var c,l;this._testStatus=r.testStatus,this._testId=r.testId,this._testName=r.name,this._testResultId=r.resultId,this._code=r.code,this._baseUrl=n.baseUrl||r.baseUrl||r.testConfig.baseUrl,this._nativeApp=r.nativeApp,this._overrideTestConfigId=(c=r.overrideTestConfig)==null?void 0:c.id,this._maxRetryCount=n.retries,this._remoteRunId=n.remoteRunId;let a=!((l=r.runConfig)!=null&&l.isMobileWeb)&&n.browser;this._runConfig=a?on(n.browser,n.saucelabs,n.browserstack):r.runConfig}async waitForExecutionStartedFinished(){return await this._testRunStatus.waitForExecutionStartedFinished(),await this.clearTestResultFinished}get testStatus(){return this._testStatus}get runMode(){return this._options.mode}get automationMode(){return this._code?"codeful":"codeless"}get code(){return this._code}get runConfig(){return this._runConfig}get testResultId(){return this._testResultId}get baseUrl(){return this._baseUrl}set baseUrl(e){this._baseUrl=e}get executionId(){return this._executionId}get executionName(){return this._executionName}get androidActivityWait(){var n;let e=this._nativeApp&&"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp;if((n=e==null?void 0:e.activity)!=null&&n.includes(e.id))return`${e.id}.*`;let{activity:t}=e,r=t.split(".").pop();return t.replace(r,"*")}get getAppSource(){if(this._nativeApp)return this.nativeAppLink?"from-library":"from-device"}get nativeAppLink(){let e=null;return this._nativeApp&&"filePath"in this._nativeApp&&(e=`${he}/storage${this._nativeApp.filePath}?access_token=${this._options.authData.token}`),e}async getNativeAppData(){let{appId:e,baseUrl:t}=this._options;if(t&&!this._nativeApp&&!e){let r=t||this.baseUrl;if(!r)return null;let[n,o]=r.split(":");return{packageName:n,activity:o}}return this._nativeApp&&!e?"appMetadata"in this._nativeApp?this._nativeApp.appMetadata:this._nativeApp:null}get branch(){return this._branch}get sfdcCredential(){return this._options.sfdcCredential}get remoteRunId(){return this._remoteRunId}get overrideTestConfigId(){return this._overrideTestConfigId}markClearBrowser(){this.clearBrowser=!0}async getRunRequestParams(){var r,n;let t={tokenV3:await Ht(),refreshToken:Oo(),projectId:this._options.project,executionId:this._executionId,executionName:this._executionName,testId:this._testId,resultId:this._testResultId,baseUrl:this._baseUrl,branch:this._branch,servicesUrl:Qa,remoteRunId:this.remoteRunId,previousTestResultId:this.previousTestResultId,testRetryCount:this.retryCount,...this.code&&{isCodeMode:!0,testName:this.testName},...this._options.shouldMonitorPerformance&&{shouldMonitorPerformance:!0},...this._options.company&&{companyId:this._options.company.companyId,onprem:this._options.company.onprem,storageBaseUrl:this._options.company.storageBaseUrl,storageType:this._options.company.storageType,planType:this._options.company.planType,isPOC:this._options.company.isPOC,isStartUp:this._options.company.isStartUp},...this._options.collectCodeCoverage&&{codeCoverageUrlFilter:this._options.codeCoverageUrlFilter||`${this.baseUrl}*`},...this._options.disableMockNetwork&&{disableMockNetwork:this._options.disableMockNetwork},...this._options.lightweightMode&&{lightweightMode:this._options.lightweightMode},...this.clearBrowser&&{clearBrowser:!0},...this._options.localRCASaver&&{localRCASaver:this._options.localRCASaver},...this.sfdcCredential&&{sfdcCredential:this.sfdcCredential}};if(this._options.disableMockNetwork&&pt("user-disable-mock"),t.lightweightMode&&((r=this._options.lightweightMode)!=null&&r.general)){Object.assign(t,{company:this._options.company});let o=this.runData,i=Yy(o);Object.assign(t.lightweightMode,{isRunDataSentInUrl:i});let a=JSON.stringify(o).length,c=this.testId;i?(Object.assign(t,{runData:o}),Se.info(`Run data sent as URL param, test id: ${c} run data length: ${a}`)):Se.warn(`Run data is too big to be sent as a URL param. Test id: ${c}, run data size: ${a} (limit: ${tb} characters)`),Object.assign(t,{isLocalRun:Boolean(this._options.useLocalChromeDriver||this._options.useChromeLauncher)})}if((n=this._options.lightweightMode)!=null&&n.preloadTests&&this._options.useChromeLauncher){let o=await Sn(this._options);Object.assign(t,{preloadedTest:o[t.testId]})}return t}async getRunTestUrl(){let e=await this.getRunRequestParams(),t=`https://run.testim.io/?params=${encodeURIComponent(JSON.stringify(e))}`;return Se.info(`Test (${this.testId}) run URL length: ${t.length}`),t}set sessionId(e){this._sessionId=e}get sessionId(){return this._sessionId}get testId(){return this._testId}get testName(){return this._testName}get runParams(){var e;return((e=this._options.runParams)==null?void 0:e[this._testResultId])||{}}get runData(){return{userParamsData:this.runParams,overrideTestConfigId:this._overrideTestConfigId||null}}async clearTestResult(){var o;let e={...this.runData,...this.runMode===Q.EXTENSION&&{code:this.code},...this._options.mockNetworkRules&&{mockNetworkRules:this._options.mockNetworkRules}},t=this._timeoutRetryCount>1||this._retryCount>1;if((o=this._options.lightweightMode)!=null&&o.disableResults&&!t&&Yy(e))return;let r=async()=>{try{return await hl(this._options.project,this._testId,this._testResultId,e)}catch(i){return Se.error("failed to upload run data artifact (runner)",{err:i}),""}},n=async()=>{let i=await r();return await this._testRunStatus.waitForExecutionStartedFinished(),ml(this._options.project,this._testResultId,this._testId,{name:this._testName,resultId:this._testResultId,status:"pending",retryCount:this._retryCount,runDataUrl:i,runData:i?void 0:e,testRetryKey:this.retryKey})};return this.clearTestResultFinished=n(),this.clearTestResultFinished}hasMoreRetries(){return this._retryCount<this._maxRetryCount}get retryKey(){return`${this._retryCount}:${this._timeoutRetryCount}`}startNewRetry(){return this._retryCount++,this._timeoutRetryCount=1,this.onRetry()}async runTestUsingCDP(e){N("runTestUsingCDP");let{targetInfos:t}=await e.cdpCommand("Target.getTargets")||{targetInfos:[]},{targetId:r}=t.find(o=>o.type==="background_page"&&o.title==="Testim Editor")||{},{targetId:n}=t.find(o=>o.type==="page")||{};if(!r)throw new Error("testim extension not found");if(!n)throw new Error("AUT target not found");try{N("before Target.attachToTarget");let[o,i]=await Promise.all([e.cdpCommand("Target.attachToTarget",{targetId:r,flatten:!0}),this.getRunRequestParams()]),{sessionId:a}=o||{};N("before Runtime.evaluate"),await(0,Zy.default)(async()=>{let{result:l}=await e.cdpCommand("Runtime.evaluate",{expression:"typeof runTestimTest !== 'undefined'",returnByValue:!0},a);if(!l.value)throw new Error("runTestimTest not available on global scope")},{retries:100,minTimeout:30,factor:1}),N("after wait for runTestimTest function");let{result:c}=await e.cdpCommand("Runtime.evaluate",{expression:`runTestimTest(${JSON.stringify(i)})`,awaitPromise:!0,returnByValue:!0},a);if(c.subtype==="error")throw new Error(c.description);return N("after Runtime.evaluate"),c.value}catch(o){throw Se.error("error running test using CDP",{err:o}),new Error("Error running test using CDP")}}isRetryKeyMismatch(e){return e.testRetryKey&&e.testRetryKey!==this.retryKey}validateRunConfig(){let{baseUrl:e,runConfig:{browserValue:t}}=this;if(e&&t==="safari"){let r;try{r=new eb.URL(e)}catch{return}let{username:n,password:o}=r;if(n||o)throw new Error("Basic authentication in URL is not supported in Safari")}}onStarted(e){return new Promise(t=>{let r=!1,n=o=>{if(!r){if(this.isRetryKeyMismatch(o)){Se.warn(`ignoring result update for on started due to retry key mismatch, got ${o.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}["running","completed"].includes(o.status)&&(o.resultId=this.testResultId,o.status==="completed"&&(Se.info("setting _wasCompletedOnStartedCheck to true",{testResult:o,resultId:this.testResultId,testId:this.testId,testRetryKey:this.retryKey}),this._wasCompletedOnStartedCheck=o),r=!0,t(o))}};if(this._options.disableSockets){let o=Date.now()+e,i=async()=>{if(Date.now()>o)return;let{testId:a,testResultId:c,branch:l,_options:{project:d}}=this;try{let m=await kr(a,c,d,l);n(m),r||setTimeout(i,3e3)}catch(m){Se.error("failed to check if done",{err:m}),setTimeout(i,3e3)}};setTimeout(i,3e3)}else Ke.listenToTestResult(this._testResultId,this._testId,n)})}async checkViaRestAPIIfTestStarted(){let{testId:e,testResultId:t,_options:{project:r},branch:n}=this;try{let o=await kr(e,t,r,n),i=["running","completed"];if(i.includes(o.status))return Se.info(`get status: ${o.status} after not get test started status`,{testId:e,testResultId:t,branch:n}),o;throw Se.error(`test not start test status: ${o.status} (expected [${i.join(", ")}])`,{testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}catch(o){throw Se.error("failed to get test result after test start timeout",{err:o,testId:e,testResultId:t,branch:n}),new Error(Ue.TEST_START_TIMEOUT_MSG)}}async onCompletedCleanup(){if(!this._options.disableSockets)return await Ke.leaveTestResult(this._testResultId,this._testId)}async onCompleted(){let e;try{let t=await new Promise(r=>{if(this._wasCompletedOnStartedCheck&&!this.isRetryKeyMismatch(this._wasCompletedOnStartedCheck)){Se.info("test was already completed in on started check",{resultId:this.testResultId,testId:this.testId}),r(this._wasCompletedOnStartedCheck);return}this._options.disableSockets||Ke.listenToTestResult(this._testResultId,this._testId,i=>{if(this.isRetryKeyMismatch(i)){Se.warn(`ignoring result update for on completed due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId});return}i.status==="completed"&&(i.resultId=this._testResultId,r(i))});let n=this._options.disableSockets?0:Math.floor(1e4+Math.random()*5e3),o=this._options.disableSockets?0:Math.floor(6e4+Math.random()*15e3);if(e=Qy.debounce(async()=>{try{let i=await kr(this._testId,this._testResultId,this._options.project,this.branch);return this.isRetryKeyMismatch(i)?(Se.warn(`ignoring result update for on completed (in reconnect) due to retry key mismatch, got ${i.testRetryKey}, current is ${this.retryKey}`,{resultId:this.testResultId,testId:this.testId}),!1):(i==null?void 0:i.status)==="completed"?(Se.info("Socket reconnected - Test complete",{testId:this._testId,resultId:this._testResultId,projectId:this._options.project}),i.resultId=this._testResultId,r(i),!0):!1}catch(i){return Se.warn("Error while trying to check status on socket connect",i),!1}},n,{maxWait:o}),!this._options.disableSockets)Ke.on("socket-connected",e);else{let i=()=>{setTimeout(async()=>{try{let{isComplete:a}=await sl(this._testResultId,this._options.project,this.retryKey);a?await e()||(Se.warn("onConnected returned false even though isComplete was true"),i()):i()}catch(a){Se.error("failed to check is complete",{err:a}),i()}},3e3)};i()}});return await this.onCompletedCleanup(),t}finally{e&&!this._options.disableSockets&&Ke.off("socket-connected",e)}}listenToRemoteStep(e){Fs.listenToRemoteStep(this.testResultId,t=>{Hy(this._options,e,t,this.testResultId)})}hasMoreTimeoutRetries(){let e=this._options.disableTimeoutRetry?1:FR;return this._timeoutRetryCount<e}startNewTimeoutRetry(){return this._timeoutRetryCount++,this.onRetry()}get retryCount(){return this._retryCount}get previousTestResultId(){return this._previousTestResultId}isAllowReportTestResultRetries(){var e,t,r;return Boolean((r=(t=(e=this._options.company)==null?void 0:e.activePlan)==null?void 0:t.premiumFeatures)==null?void 0:r.allowReportTestResultRetries)}async onRetry(){var e;this._previousTestResultId=this.testResultId,this.isAllowReportTestResultRetries()&&(this._totalRetryCount++,this._originalTestResultId||(this._originalTestResultId=this._previousTestResultId),this._testResultId=K(),!((e=this._options.lightweightMode)!=null&&e.onlyTestIdsNoSuite)&&await this._testRunStatus.addRetryTestResult({retryCount:this._totalRetryCount,executionId:this._executionId,projectId:this._options.project,newResultId:this._testResultId,originalTestResultId:this._originalTestResultId,previousTestResultId:this._previousTestResultId}))}}});var ba,sb=T(()=>{"use strict";rb();ba=class{constructor(e,t,r,n,o,i){this._waitingTests=r.map(a=>new ya(e,t,a,n,o,i))}stop(){this._waitingTests=[]}getNext(){let e=this._waitingTests.shift();if(e)return e}hasMoreTests(){return Boolean(this._waitingTests.length)}}});var jR,BR,zn,Id=T(()=>{"use strict";bs();j();jR=x("worker-utils"),BR=async(s,e,t)=>{e&&await Zl(s,t)},zn=async(s,e,t,r)=>{jR.info("releasing player",{hasPlayer:Boolean(r)});try{await(r==null?void 0:r.onDone())}finally{await BR(s,e,t)}}});function zR(s,e,t,r){return{testId:s,reason:r,name:e,resultId:t,success:!1}}var Cd,ib,Pd,xt,$R,nb,ob,wa,WR,xd,GR,Bt,qR,VR,HR,Pt,Ta=T(()=>{"use strict";Cd=E(require("ms")),ib=E(require("moment")),Pd=E(require("p-retry"));F();Le();bs();Te();j();Id();Ft();ri();be();ga();Os();vt();ae();z();xt=x("base-worker"),{GET_BROWSER_TIMEOUT_MSG:$R,TEST_START_TIMEOUT_MSG:nb,TEST_COMPLETE_TIMEOUT_MSG:ob}=Ue,{SETUP_TIMEOUT:wa,NETWORK_ERROR:WR,GRID_ERROR:xd,BROWSER_CLOSED:GR,SELENIUM_ERROR:Bt,UNKNOWN_ERROR:qR}=en,VR=(0,Cd.default)("1s"),HR=1;Pt=class{constructor(e,t,r,n,o,i,a,c,l=!0){this.executionQueue=e;this.options=t;this.customExtensionLocalLocation=r;this.executionId=n;this.onTestStarted=o;this.onTestCompleted=i;this.onGridSlot=a;this.onTestIgnored=c;this.releaseSlotOnTestFinished=l;this.id=Pt.getWorkerId();this.lambdatestService=new te;this.isCodeMode=t.files&&t.files.length>0,this.baseUrl=t.baseUrl,this.testRunTimeout=t.timeout,this.isRegressionBaselineRun=t.isRegressionBaselineRun,this.userData=t.userData}static getWorkerId(){return HR++}async getGridSlot(e,t){let r=await Jf(e,t.executionId,this.options,this.id);return this.onGridSlot(t.testResultId,r),r}async getSlotOnce(e){let{browserValue:t}=this.testRunConfig;return Z.onGetSlot(this.id,t||"chrome"),await this.getGridSlot(t,e)}initPlayer(e){throw new es(!0)}async getBrowserOnce(e,t,r,n){throw new es(!0)}async runTestOnce(e,t){return e.sessionId=t.getSessionId(),xt.info("Test run started",{testId:e.testId,resultId:e.testResultId,seleniumSession:t.getSessionId()}),await e.clearTestResult()}handleQuarantine(e){if(!He({testStatus:e.testStatus},this.options))return;let t={name:e.testName,testId:e.testId,resultId:e.testResultId,runnerStatus:pe.SKIPPED,testStatus:e.testStatus};return this.onTestIgnored(this.id,t),t}setSessionTimeout(){return this.options.mode===Q.APPIUM?Math.max((0,Cd.default)("180s"),this.options.getSessionTimeout):Math.max(this.lambdatestService.getSessionTimeout||0,this.options.getSessionTimeout)}async getTestPlayer(e,t){var o;let r=(o=this.userData)==null?void 0:o.projectId,n;try{N("before getSlotOnce retries");let i=0,a=await(0,Pd.default)(async()=>{let d=Date.now();try{return await re(this.getSlotOnce(e),this.options.getBrowserTimeout,Ue.GET_BROWSER_TIMEOUT_MSG)}catch(m){let p={testId:this.testId,testResultId:this.testResultId,executionId:this.executionId};throw m instanceof gr?xt.info("could not get grid slot due to concurrency issue",p):xt.error("error getting grid slot",{error:m,...p}),i++,await ie(this.options.getBrowserTimeout-(Date.now()-d)),m}},{retries:this.options.getBrowserRetries-1,minTimeout:0,factor:1});N("after getSlotOnce retries"),N("before getBrowserOnce retries");let c=this.options.getBrowserRetries-i;if(!c)throw new Error("No free browser slots in desired grid");let l=0;n=await(0,Pd.default)(async()=>{let d=Date.now(),m=this.initPlayer(e);try{a=await Xf(this.options,a,this.testRunConfig,this.lambdatestService,{maxRetries:c,currentRetry:l+1}),this.options.gridData.provider=a.provider,this.options.gridData.host=a.host,this.options.gridData.failedGetBrowserAttempts=l;let p=this.setSessionTimeout();N("before getBrowserOnce");let f=await re(this.getBrowserOnce(e,t,m,a),p,Ue.GET_BROWSER_TIMEOUT_MSG);return N("after getBrowserOnce"),Z.onGetBrowserSuccess(this.id,r),m||f}catch(p){let f={provider:a.provider,host:a.host,failedGetBrowserAttempts:l,id:this.options.gridData.gridId,type:a.type},h=this.options.mode===Q.APPIUM?"device":"browser";throw xt.error(`error getting ${h} from grid`,{error:p,testId:this.testId,testResultId:this.testResultId,executionId:this.executionId,grid:f}),Z.onGetBrowserFailure(this.id,r,++l),m.onDone(),p instanceof ot||await ie(this.options.getBrowserTimeout-(Date.now()-d)),p}},{retries:c-1,minTimeout:0,factor:1}),N("after getBrowserOnce retries")}catch(i){throw await zn(this.id,this.releaseSlotOnTestFinished,r,n),i instanceof ot?i:i instanceof it?new Wt(i,xd):new Wt(i,Bt)}return n}async runTest(e,t,r){var l;N("inside runTest");let n=(l=this.userData)==null?void 0:l.projectId,o=this.handleQuarantine(e);if(o)return o;N("before runTest onTestStarted");let i=e.getAppSource,a=await this.onTestStarted(this.id,e.testId,e.testResultId,r,e.retryKey,i);e.baseUrl=a.config.baseUrl;let c=await this.getTestPlayer(e,t);try{return await this.runTestOnce(e,c)}finally{await zn(this.id,this.releaseSlotOnTestFinished,n,c)}}async runTestCleanup(){}async onQueueCompleted(){}run(){var m,p;let e=()=>process.nextTick(()=>this.run()),t=async(f,h,g)=>{var I;if(He(f,this.options))return e();let y=h.sessionId,w=k=>g==null?void 0:g.message.includes(k),C=g&&g instanceof Wt,b=g&&(w(nb)||w(ob)),v=!f.success&&(h.hasMoreRetries()&&!C&&!b||b&&h.hasMoreTimeoutRetries());try{let k=h.retryKey;f.testRetryKey=k;let D=h.getAppSource;return await this.onTestCompleted(this.id,this.testId,f,y,v,D),this.executionQueue.hasMoreTests()&&!((I=this.options.lightweightMode)!=null&&I.general)&&await ie(VR),await this.runTestCleanup(),v?(b?await h.startNewTimeoutRetry():await h.startNewRetry(),xt.info(`retry test id: ${this.testId} name: ${this.testName} again`,{testId:this.testId,testName:this.testName,isTimeoutErrors:b,testRetryKey:k,totalRetries:h._totalRetryCount}),this.testResultId=h.testResultId,await l(h,v)):await e()}catch(k){if(k instanceof At)return;xt.error("failed to process test result",{error:k}),e();return}},r=()=>`Due to network connectivity issues, Testim CLI has been unable to connect to the grid.
|
|
563
|
-
Please make sure the CLI has stable access to the internet. ${bc()?"(Internal: network connectivity test failed)":""}`,n=(f,h)=>{let g=this.options.mode===Q.APPIUM?"device":"browser";if(!h&&U.flags.errorMessageOnBadNetwork.isEnabled())return{errorType:WR,reason:r()};let y=f instanceof Error?f.message:f;if(y.includes($R))return{errorType:wa,reason:`Test couldn't get ${g}`};if(y.includes(nb))return{errorType:wa,reason:"Test couldn't be started"};if(y.includes(ob)){if(!this.testRunTimeout)return{errorType:wa,reason:"Test timeout reached: test is too long"};let w=ib.default.duration(this.testRunTimeout,"milliseconds"),C=Math.floor(w.asMinutes()),b=w.seconds(),v=C>0?` ${C} min`:"",I=b>0?` ${b} sec`:"";return{errorType:wa,reason:`Test timeout reached (timeout:${v}${I}): test is too long`}}if(f instanceof Wt&&f.type){if(f.type===xd)return{errorType:xd,reason:`Test couldn't get ${g} from grid - ${f.message}`};if(f.type===Bt)return{errorType:Bt,reason:`Failed to create new session - ${f.message}`}}return"type"in f&&f.type===GR?{errorType:Bt,reason:"Session terminated, it is possible that the cli could not connect to the grid to send keep-alive requests for a prolonged period"}:"failure"in f&&f.failure instanceof hr?{errorType:Bt,reason:`Test couldn't get ${g} from grid - ${f.failure.message}`}:/SeleniumError: connect ECONNREFUSED/.test(f.message)||/Couldn't connect to selenium server/.test(f.message)?{errorType:Bt,reason:"Failed to connect to the grid, please check if the grid is accessible from your network"}:/terminated due to FORWARDING_TO_NODE_FAILED/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is out of memory or not responding, please try to rerun the test"}:/terminated due to PROXY_REREGISTRATION/.test(f.message)?{errorType:Bt,reason:"Session terminated, it is likely that the grid is not responding, please try to rerun the test"}:/forwarding the new session cannot find : Capabilities/.test(f.message)?{errorType:Bt,reason:`Session could not be created, please check that the ${g} you requested is supported in your plan`}:{errorType:qR,reason:y}},o=async(f,h)=>{var b;let g=await yc();!g&&U.flags.warnOnBadNetwork.isEnabled()&&console.warn(r()),xt.warn("error on run",{err:f});let y=(b=this.userData)==null?void 0:b.projectId,{errorType:w,reason:C}=n(f,g);pl(y,this.testResultId,this.testId,{status:Zs.COMPLETED,success:!1,reason:C,errorType:w,testRetryKey:h.retryKey,setupStepResult:{status:Zs.COMPLETED,success:!1,reason:C,errorType:w}},h.remoteRunId),await t(zR(this.testId,this.testName,this.testResultId,C),h,f)},i=async(f,h)=>{var b;let g=this.testId,y=this.testResultId,w=(b=this.userData)==null?void 0:b.projectId,C=this.branch;if(!g||!y||!w||!C)return xt.warn("Test failed. Not enough data to recover results via API",{err:f}),o(f,h);try{let v=await kr(g,y,w,C);if(xt.warn("Test failed. Got results via API",{err:f,testResult:v}),v&&v.status===Zs.COMPLETED)return await t(v,h);throw f}catch(v){return v!==f&&xt.error("Failed to fetch test results from server",{testId:g,resultId:y,projectId:w,branch:C,err:v}),o(f,h)}},a=this.options.disableSockets||((m=this.options.lightweightMode)==null?void 0:m.disableResults)&&(this.options.useChromeLauncher||this.options.mode!=="extension"),c=this.options.disableSockets||((p=this.options.lightweightMode)==null?void 0:p.disableRemoteStep),l=async(f,h)=>{try{await Promise.all([!c&&Fs.joinToRemoteStep(this.testResultId),!a&&Ke.joinToTestResult(this.testResultId,this.testId)]),f.validateRunConfig();let g=await this.runTest(f,this.customExtensionLocalLocation,h),y=await t(g,f);return N("After onRunComplete"),y}catch(g){return i(g,f)}finally{c||Fs.unlistenToRemoteStep(this.testResultId)}},d=this.executionQueue.getNext();return d?(this.testId=d.testId,this.testName=d.testName,this.testResultId=d.testResultId,this.overrideTestConfigId=d.overrideTestConfigId,this.testRunConfig=d.runConfig,this.branch=d.branch,l(d)):this.onQueueCompleted()}}});var ab={};$(ab,{WorkerSelenium:()=>Ad});function JR(s){let{playback:e}=se().commonConstants;function t(r){s.playbackManager.on(r,()=>{N(`Got event ${r}`)})}Object.values(e).forEach(t)}var va,KR,Ad,cb=T(()=>{"use strict";F();Le();Ta();j();Ft();z();Xo();ae();Gu();pa();Ee();va=x("worker-selenium"),KR=1e9,Ad=class extends Pt{initPlayer(t){return new Gn(this.id,t.runParams,this.options.shouldMonitorPerformance,t.automationMode,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,o){N("in WorkerSelenium getBrowserOnce"),Z.onGetSession(this.id,this.testName,t.runMode);let{driver:i}=n;this.windowUtils=new As(this.id,i),n.clearSessionTabs();let{browserValue:a}=this.testRunConfig,c=t.baseUrl;try{let l=this.options.useLocalChromeDriver;await i.init(this.options,this.testName,this.testRunConfig,o,r,this.executionId,this.testResultId,t.seleniumPerfStats,l,this.lambdatestService),N("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:l}),N("in WorkerSelenium after addTab"),l||await this.windowUtils.navigate(c,KR),await this.windowUtils.validatePageIsAvailable(),N("in WorkerSelenium after navigate")}catch(l){let d=l.message&&(l.message.startsWith("Malformed URL")||l.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=l.message&&l.message==="invalid argument";throw l instanceof ot||d||m?new ot(`Page '${c}' is not available`):(va.error("failed to navigate to page",{err:l}),l)}}async runTestOnce(t,r){var d;let n=se(),{driver:o,sessionPlayer:i}=r,a=n.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),JR(i),i.playbackManager.executionId=t.executionId,i.playbackManager.executionName=t.executionName,i.setLightweightMode(this.options.lightweightMode),t.sfdcCredential&&i.setSfdcCredential(t.sfdcCredential),n.localAssetService&&n.localAssetService.initialize({serverUrl:this.options.localRCASaver});let c=null;(d=this.options.lightweightMode)!=null&&d.preloadTests&&(c=(await Sn(this.options))[this.testId]);let l=async()=>{if(t.automationMode==="codeful"){i.callOrderScheduler?i.callOrderScheduler.schedule(()=>t.waitForExecutionStartedFinished(),{key:`test-result:${this.userData.projectId}:${this.testResultId}`}):await t.waitForExecutionStartedFinished(),N("right before playTestByCode");let p=new Promise((f,h)=>{i.playTestByCode(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,f,!1,this.overrideTestConfigId,this.branch,t.code,t.testName).catch(h)});return re(p.then(f=>(N("right after playTestByCode"),f)),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(f=>{var h;throw f instanceof X&&((h=i.stopPlayingOnTestTimeout)==null||h.call(i)),f}).then(f=>(f.resultId=this.testResultId,f))}let m=!1;return re(new Promise((p,f)=>{i.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,a,p,!1,this.overrideTestConfigId,this.branch,m,t.remoteRunId,void 0,void 0,c).catch(f)}),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG).catch(p=>{var f;throw p instanceof X&&((f=i.stopPlayingOnTestTimeout)==null||f.call(i)),p}).then(async p=>{n.localAssetService&&await n.localAssetService.drain(),p.stepsResults=null,p.resultId=this.testResultId,o.isAlive()||(va.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.gridIssues="could not validate grid is alive");let f=o.maxKeepAliveGap();f>=3e4&&(va.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),p.keepAliveIssue=f);let g={...p,...t.seleniumPerfStats.getStats()};return this.lambdatestService.isLambdatestRun()&&await o.executeJS(`lambda-status=${g.success?"passed":"failed"}`).catch(()=>{}),g})};o.start(),N("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,r),N("right after super.runTestOnce in workerSelenium");let m=await l();return N("right after runSeleniumTest"),m}catch(m){throw va.error("failed to run test once",{err:m}),m}}}});var Ea,lb=T(()=>{"use strict";Ea=class{constructor(e){this.driver=e,this._utils={},this.sessionTabs={},this.pendingTabs={},this.addedTabs={}}on(){}tabCount(e){}getAllOpenTabIds(e){}getActiveTabInfo(e){}getAllTabIds(e){}isSessionTab(e,t){}createSesion(e){}setAddFrameHandlerCallBack(e){}getAllTabInfoStrings(e){}getAllTabInfos(e){}addNewTab(e,t,r,n={}){}addOpenerStepId(e,t,r){}addOpenerStep(e,t,r){}fixMissingMainTab(e){}buildTabInfo(e,t,r,n,o={}){}addTab(e,t,r,n,o={}){}getTabUtilsByTabIdAndSessionId(e,t){}getTabUtilsByTabId(e){}getTabInfo(e,t){}getTabUtils(e,t){}exactUrlMatch(e,t,r){}singleExactMatchForParts(e,t,r,n){}isSameTab(e,t,r){}getMainTabInfo(e){}getMainTabUtils(e){return{}}removeTabInfo(e,t){}getMainTabId(e){}isMainTabExists(e){}clearAllTabs(e){}clearNonMainTabs(e){}switchTab(e,t,{forceSwitch:r}={forceSwitch:!1}){}getTabDetails(e,t,r={}){}getUnregisteredTabId(e){}waitForTabToOpen(e){}tryToAddTab(e,t){}addNewPopup(e,t){}waitToPendingTabs(e,t){}isMainTabIncognito(){}isInvalidStepVersion(e){}getTabIdByTabInfo(e,t){}}});function ub(s){class e{constructor(r,n){this.frameManager=r,this.locateElementPlayer=n}foundFrameCallback(r,n,o){return kd.info("foundFrameCallback-mock invoked"),{}}locate(r,n,o,i,a,c){return kd.info("locate-mock invoked"),{}}findFrame(r,n,o,i){return kd.info("findFrame-mock invoked"),{}}}return e}var kd,db=T(()=>{"use strict";j();kd=x("mobile-frame-locator-mock")});var XR,YR,Sa,pb=T(()=>{"use strict";XR=E(require("webdriverio"));lb();Hu();j();zu();Ku();Ee();Os();od();db();ad();cd();YR=x("appium-test-player"),Sa=class{constructor(e,t,r,n="code",o=XR,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d,MobileLocateElementPlayer:m}=se();this.driver=o,this.id=e;let p=new _s(this.driver);this.stepActionFactory=new d(p),da(this.driver,this.stepActionFactory),this.tabService=new Ea(this.driver),this.windowCreationListener=Wn,this.playbackTimeoutCalculator=new Us(Mi()),this.tabService.createSesion(e);let f=ub(this.driver);this.sessionPlayer=new c(e,this.tabService,null,null,f,Di,m,null,p,this.stepActionFactory,this.playbackTimeoutCalculator,Ke.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(r),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,r,n){}async onDone(){try{await this.driver.activeSession.deleteSession()}catch(e){YR.error("error while deleting appium session",{error:e})}finally{let{commonConstants:e}=se();this.sessionPlayer.playbackManager.off(e.playback.RESULT),this.sessionPlayer=null,this.tabService=null,this.stepActionFactory=null,this.driver=null}}getSessionId(){return this.driver.activeSession.sessionId}}});var fb={};$(fb,{WorkerAppium:()=>_d});var mb,Kn,_d,hb=T(()=>{"use strict";mb=E(require("jsdom"));le();Te();Ii();Ta();j();Ft();pb();Ee();Kn=x("worker-appium"),_d=class extends Pt{initPlayer(e){return new Sa(this.id,e.runParams,this.options.shouldMonitorPerformance,e.automationMode,void 0,e.retryCount,e.previousTestResultId)}async getBrowserOnce(e,t,r,n){Z.onGetSession(this.id,this.testName,e.runMode);let{driver:o}=r,i=this.options.projectData.type,a=await e.getNativeAppData(),c=i==="android"?e.androidActivityWait:null,l=e.nativeAppLink;if(this.options.appId){let{project:d,appId:m}=this.options,p=await tl({appId:m,projectId:d});if(!p)throw Kn.error("mobile app not found",{appId:m,projectId:d}),new Error("mobile app not found");l=`${he}/storage${p.filePath}?access_token=${this.options.authData.token}`}try{let d=Cu({projectType:i,gridInfo:n,testRunConfig:this.testRunConfig,nativeApp:a,options:this.options,appPath:l,androidActivityWait:c}),m=await o.remote(d);Object.assign(o,{activeSession:m}),await this.updateDeviceInfo(e,m),Kn.info(`init new appium session testName: ${this.testName}`,{sessionId:m.sessionId,testResultId:this.testResultId,nativeApp:a})}catch(d){throw Kn.error("failed to start application",{err:d}),d}}getServerAddressFromGrid(){let{host:e,port:t,accessToken:r}=this.options.gridData;return`https://${e}:${t}/v0/${r}/wd/hub`}async updateDeviceInfo(e,t){var f;let{executionId:r,testId:n,testResultId:o}=e,{project:i,projectData:{type:a}={},company:{companyId:c=""}={},gridData:{gridId:l=""}={}}=this.options,d=await El({projectId:i,projectType:a,companyId:c,gridId:l,selectors:`device_id:${t.capabilities.udid}`}),p={name:(f=d==null?void 0:d[0])==null?void 0:f.name,model:t.capabilities.deviceModel,osVersion:t.capabilities.platformVersion,udid:t.capabilities.udid,osType:t.capabilities.platformName,scaleFactor:t.capabilities.pixelRatio,virtual:!1};await us(i,r,n,o,"RUNNING",{device:p})}getDirectAddressConnection(e){let{directConnectProtocol:t,directConnectHost:r,directConnectPort:n,directConnectPath:o}=e;if(t&&r&&n&&o)return`${t}://${r}:${n}${o}`}async runTestOnce(e,t){let r=se(),{sessionPlayer:n}=t,o=t.driver,i=r.manifestVersion||"runner";Z.onWaitToTestComplete(this.id,this.isCodeMode),n.playbackManager.executionId=e.executionId,n.playbackManager.executionName=e.executionName;let a=this.getDirectAddressConnection(o.activeSession.capabilities)||this.getServerAddressFromGrid(),c=new mb.JSDOM("").window.DOMParser;n.playbackManager.appiumApi=new r.AppiumApi(a,o.activeSession.sessionId,c),r.localAssetService&&r.localAssetService.initialize({serverUrl:this.options.localRCASaver});let l=async()=>{try{let m=await new Promise((f,h)=>n.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,i,f,!1,this.overrideTestConfigId,this.branch,!1,e.remoteRunId,void 0,void 0,void 0).catch(h));return r.localAssetService&&await r.localAssetService.drain(),m.stepsResults=null,m.resultId=this.testResultId,{...m,...e.seleniumPerfStats.getStats()}}catch(d){throw Kn.error("error while running appium tests",{err:d}),d}};try{return await super.runTestOnce(e,t),await l.call(this)}catch(d){throw Kn.error("failed to run test once",{err:d}),d}}}});var gb,Ra,yb=T(()=>{"use strict";F();gb=E(Nn()),Ra=class{constructor(e){this.driver=new gb.default,this.id=e}onDone(){return re(this.driver.end(),12e4).catch(t=>{if(t instanceof X)return this.driver.forceEnd();throw t}).catch(()=>{}).then(()=>{this.driver=null})}getSessionId(){return this.driver.getSessionId()}}});var bb,Ia,wb=T(()=>{"use strict";bb=E(require("ws"));F();Ia=class{constructor(){this._cdpWs=null;this._cdpUrl=null;this._cdpCallbacks=new Map}async initSession(e,t=500){await this.stopSession(),this._cdpUrl=e,await this.initCDPWebsocket(t)}async initCDPWebsocket(e=500){if(this._cdpWs)return this._cdpWs;let t=new bb.default(this._cdpUrl,{timeout:e}),r=ct(o=>{t.once("open",o)}),n=ct(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",o=>this.onCDPMessage(o)),this._cdpWs=Promise.race([r,n]).then(()=>t),this._cdpWs}onCDPMessage(e){var n;let t=JSON.parse(e),r=this._cdpCallbacks.get(t.id);r&&(this._cdpCallbacks.delete(t.id),t.error?r.reject(new Error(t.error)):(n=t.result.exceptionDetails)!=null&&n.exception?r.reject(new Error(t.result.exceptionDetails.exception.description)):r.resolve(t.result))}async stopSession(){let e=this._cdpWs;if(this._cdpUrl=null,this._cdpWs=null,this._cdpCallbacks.clear(),e)try{return(await e).close()}catch{return}}async cdpCommand(e,t,r){let n=await this.initCDPWebsocket();this._lastWsId||(this._lastWsId=0);let o=this._lastWsId++,i=new Promise((c,l)=>{this._cdpCallbacks.set(o,{resolve:c,reject:l})}),a={method:e,params:t,id:o};return r&&Object.assign(a,{sessionId:r}),n.send(JSON.stringify(a)),i}}});var Pa,Od,xa,Tb=T(()=>{"use strict";F();Pa=E(require("chrome-launcher"));Ii();wb();Tn();Od=class{constructor(e){this.sessionId=e,this.cdpTestRunner=new Ia}async init(e,t,r,n,o,i,a){let l=[...Pu(e,t,r,n,o,i,a).desiredCapabilities.chromeOptions.args,...Pa.Launcher.defaultFlags().filter(m=>m!=="--disable-extensions")];this.chrome=await Pa.launch({chromeFlags:l,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let d=await xr(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(d),ds(()=>this.chrome.kill())}isAlive(){return this._isAlive}start(){}async stop(){await this.cdpTestRunner.stopSession(),this.chrome&&await this.chrome.kill(),this._isAlive=!1}getSessionId(){return this.sessionId}},xa=class{constructor(e){this.sessionId=K(),this.driver=new Od(this.sessionId),this.id=e}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var vb={};$(vb,{WorkerExtension:()=>Jn});var gt,Jn,Ld=T(()=>{"use strict";Le();z();Ta();F();j();Ft();ae();yb();Tb();gt=x("worker-ext"),Jn=class extends Pt{initPlayer(){return this.options.useChromeLauncher?new xa(this.id):new Ra(this.id)}async _getBrowserOnce(e,t,r,n){var i;let{driver:o}=r;try{return await o.init(this.options,this.testName,this.testRunConfig,n,t,this.executionId,this.testResultId,e.seleniumPerfStats,(i=this.options.lightweightMode)==null?void 0:i.general,this.lambdatestService)}catch(a){throw gt.error("failed to get browser",{err:a,gridInfo:n,testId:e.testId,resultId:e.testResultId}),a}}async getBrowserOnce(e,t,r,n){return Z.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,r,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async runTestOnce(e,t){let{testResultId:r,executionId:n,testId:o}=this;N("WorkerExtension runTestOnce");let i=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await re(e.runTestUsingCDP(d.cdpTestRunner),m,Ue.TEST_START_TIMEOUT_MSG)}catch(p){if(!(p instanceof X))throw p;return gt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,p)=>{try{let f=await d.url(m);return p.driverUrlFinished=!0,f}catch(f){throw gt.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:o,url:m,urlLength:m.length}),f}},c=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},l=async()=>{var f;if(N("WorkerExtension runExtTest"),((f=this.options.lightweightMode)==null?void 0:f.disableRemoteStep)||this.options.disableSockets||e.listenToRemoteStep(t.driver),this.isUsingChromeLauncher(t)){Z.onWaitToTestStart(this.id),Z.onWaitToTestComplete(this.id,this.isCodeMode);try{return{...await i(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw gt.warn("failed to run test via CDP",{err:h}),h}}let{driver:m}=t,p={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Z.onWaitToTestStart(this.id);try{await re(Promise.all([a(t.driver,h,p),c(p)]),this.options.testStartTimeout,Ue.TEST_START_TIMEOUT_MSG)}catch(y){if(!(y instanceof X))throw y;gt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:o,...p}),await e.checkViaRestAPIIfTestStarted()}Z.onWaitToTestComplete(this.id,this.isCodeMode);let g=y=>{throw e.onCompletedCleanup(),gt.warn("on browser closed error detected",{err:y,testResultId:r,executionId:n,testId:o}),m.unregisterToClosedBrowser(g),y.type=en.BROWSER_CLOSED,y};m.registerToClosedBrowser(g);try{let y=await re(e.onCompleted(),this.testRunTimeout,Ue.TEST_COMPLETE_TIMEOUT_MSG);m.unregisterToClosedBrowser(g),this.lambdatestService.isLambdatestRun()&&await m.executeJS(`lambda-status=${y.success?"passed":"failed"}`).catch(()=>{}),m.isAlive()||(gt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.gridIssues="could not validate grid is alive");let w=m.maxKeepAliveGap();return w>=3e4&&(gt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.keepAliveIssue=w),{...y,...e.seleniumPerfStats.getStats()}}catch(y){throw gt.warn("timeout wait until test completed",{err:y,testResultId:r,executionId:n,testId:o}),new Error(y)}finally{m.unregisterToClosedBrowser(g)}}catch(h){throw gt.warn("failed to start url",{err:h}),new Error(h)}};t.driver.start();try{return await super.runTestOnce(e,t),N("WorkerExtension super.runTestOnce"),await l()}catch(d){throw gt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var Eb={};$(Eb,{WorkerExtensionSingleBrowser:()=>Nd});var QR,ZR,Nd,Sb=T(()=>{"use strict";Le();F();j();Id();Ft();Ld();QR=x("base-worker"),ZR=500,Nd=class extends Jn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await zn(this.id,this.releaseSlotOnTestFinished,t,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,o){return Z.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,r,n,o)}async getTestPlayer(t,r){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(QR.warn("WorkerExtensionSingleBrowser is releasing a dead player",{workerId:this.id}),await this._releasePlayer()),this.testPlayer||(this.testPlayer=await super.getTestPlayer(t,r)),this.testPlayer}async runTest(t,r,n){let o=this.handleQuarantine(t);if(o)return o;N("before runTest onTestStarted single browser");let i=await this.onTestStarted(this.id,t.testId,t.testResultId,n,t.retryKey);t.baseUrl=i.config.baseUrl;let a=await this.getTestPlayer(t,r);return t.markClearBrowser(),await this.runTestOnce(t,a)}async runTestCleanup(){var t;if(!this.executionQueue.hasMoreTests()){await this.onQueueCompleted();return}(t=this.options.lightweightMode)!=null&&t.general&&await ie(ZR)}}});function eI(s,e){e===0?s():setTimeout(s,e*Xa)}var VL,Dd,Ca,Rb=T(()=>{"use strict";VL=E(Nn());F();le();Le();yu();Et();Uu();z();j();ae();sb();Dd=x("parallel-worker-manager"),Ca=class{constructor(e){this.customExtensionLocalLocation=e}getWorkerType(e){switch(e){case Q.SELENIUM:return(cb(),G(ab)).WorkerSelenium;case Q.APPIUM:return(hb(),G(fb)).WorkerAppium;default:return Ai.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(Sb(),G(Eb)).WorkerExtensionSingleBrowser:(Ld(),G(vb)).WorkerExtension}}createWorkers(e,t,r,...n){let o=this.getWorkerType(r),i=()=>{try{return N("before new Worker",r),new o(t,...n)}finally{N("after new Worker",r)}};return Array.from(new Array(e),i)}async runTests(e,t,r,n,o,i,a,c,l){if(e&&e.length===0)return;let d=!1,m=0,p=f=>new Promise(h=>{var Ct,Xr,A,O,M,q;let g=o.project,y=new ba(r,n,e,o,i,t),w={},C=e.length,b=(Ct=o.company)==null?void 0:Ct.companyId,v=(Xr=o.company)==null?void 0:Xr.name,I=o.source||"cli",k=o.user,D=(A=o.company)==null?void 0:A.planType,S=(O=o.company)==null?void 0:O.isStartUp,_=(M=o.projectData)==null?void 0:M.name,P=(q=o.projectData)==null?void 0:q.type,L=o.lightweightMode,B=Sr(o),V=(me,Xe,we,Ua,Xn,Fa)=>(m++,dh({executionId:r,projectId:g,testId:Xe,resultId:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,isStartUp:S,projectType:P,appSource:Fa}),t.testStartAndReport(me,r,we,Ua,Xn)),Y=async(me,Xe,we,Ua,Xn,Fa)=>{var Vd,Hd,zd;m--;let yt={...(L==null?void 0:L.onlyTestIdsNoSuite)&&{show:!0},...we.seleniumStats&&{seleniumStats:we.seleniumStats},...we.gridIssues&&{gridIssues:we.gridIssues},...we.keepAliveIssue&&{keepAliveIssue:we.keepAliveIssue},...o.host&&{gridHost:o.host}};if(we.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(we.seleniumPerfMarks),delete we.seleniumPerfMarks),o.grid||o.gridId?(yt.gridName=o.grid||((Vd=o.gridData)==null?void 0:Vd.name),yt.gridType=(Hd=o.gridData)==null?void 0:Hd.type,yt.gridProvider=(zd=o.gridData)==null?void 0:zd.provider):o.useLocalChromeDriver?(yt.gridName="local-chrome-driver-from-options",yt.gridType="local-chrome"):o.useChromeLauncher?(yt.gridName="chrome-launcher-from-options",yt.gridType="local-chrome"):o.browserstack?yt.gridName="browserstack-from-options":o.saucelabs&&(yt.gridName="saucelabs-from-options"),await t.testEndAndReport(me,we,r,Ua,Xn,yt).catch(Pw=>Dd.error("testEndAndReport threw an error",{err:Pw})),Xn)return;w[we.resultId]=we,ph({executionId:r,projectId:g,testId:Xe,resultId:we.resultId,result:we,companyId:b,companyName:v,projectName:_,companyPlan:D,sessionType:B,source:I,user:k,lightweightMode:L,logger:Dd,isStartUp:S,projectType:P,appSource:Fa}),l&&!we.success&&(y.stop(),d=!0),(Object.keys(w).length===C||d&&m===0)&&h(w)},ee=(me,Xe)=>{w[Xe.resultId]=Xe,t.onTestIgnored(me,Xe.resultId),m--,(Object.keys(w).length===C||d&&m===0)&&h(w)},fe=(me,Xe)=>t.onGridSlot(me,Xe);o.userData={loginData:Object.assign({},Dt(),{refreshToken:Oo(),authData:Dt(),token:f}),projectId:o.project,company:o.company,servicesUrl:he},N("in localStrategy before createWorker"),this.createWorkers(c,y,o.mode,o,this.customExtensionLocalLocation,r,V,Y,fe,ee).forEach((me,Xe)=>{N("before schedule worker.run after createWorkers"),eI(()=>{N("right before worker.run"),me.run()},Xe)})});try{let f=await Ht(),h=await p(f);if(d)throw new At;return h}catch(f){throw Dd.error("failed running parallel workers",{executionId:r,err:f}),f}}}});var Aa,Ib=T(()=>{"use strict";Fi();Aa=class extends sr{init(e){return super.initNewSocket(e,"real-data")}emitJoinRoom(e,t){this._socket.emit("testResult:listen",{query:`projectId=${t}&runId=${e}`})}joinToTestResultsByRunId(e,t){this.joinRoom(e,t),this.emitJoinRoom(e,t)}stopListenToTestResultsByRunId(e){this.leaveRoom(e),this._socket.emit("testResult:listen:stop",{})}listenToTestResultsByRunId(e){function t(r){e(r.data)}this._socket.on("testResult:changes",t.bind(this))}}});var Md,Ud,ka,xb=T(()=>{"use strict";Mn();ae();be();Ib();({TEST_RESULT_CREATED:Md,TEST_RESULT_UPDATED:Ud}=Qe),ka=class{constructor(){U.flags.useNewWSCLI.isEnabled()||(this.realDataServiceSocketIO=new Aa)}init(e){return U.flags.useNewWSCLI.isEnabled()?Promise.resolve():this.realDataServiceSocketIO.init(e)}joinToTestResultsByRunId(e,t){if(U.flags.useNewWSCLI.isEnabled())return Fe.addFilter(e,{runId:e},[Ud,Md],!0);this.realDataServiceSocketIO.joinToTestResultsByRunId(e,t)}stopListenToTestResultsByRunId(e){if(U.flags.useNewWSCLI.isEnabled()){Fe.removeFilter(e,[Ud,Md]);return}this.realDataServiceSocketIO.stopListenToTestResultsByRunId(e)}listenToTestResultsByRunId(e,t){if(U.flags.useNewWSCLI.isEnabled()){Fe.listenTo(e,[Ud,Md],r=>r.runId===e,r=>t(r));return}this.realDataServiceSocketIO.listenToTestResultsByRunId(t)}}});async function Ab(s,e){var t;if((t=s.lightweightMode)!=null&&t.onlyTestIdsNoSuite&&s.testId)return{tests:[s.testId.map(n=>({testId:n,testConfig:{},resultId:K()}))]};if(s.files.length>0){let{buildCodeTests:r}=await Promise.resolve().then(()=>(dd(),xy)),n={};if(s.webpackConfig){let o=Cb.join(process.cwd(),s.webpackConfig);n=require(o)}return r(s.files,n,{baseUrl:s.baseUrl})}return await el({projectId:s.project,labels:s.label,testIds:s.testId,testNames:s.name,testConfigNames:s.testConfigNames,suiteNames:s.suites,suiteIds:s.suiteIds,branch:e,rerunFailedByRunId:s.rerunFailedByRunId,testConfigIds:s.testConfigIds,intersections:s.intersections})}function Fd(s){let e=Object.keys(s).length,t=Object.keys(s).reduce((r,n)=>r+(s[n].success===!0?1:0),0);return e===t}async function jd(s,e){let t=s.mode==="extension"?["edge-chromium","chrome"]:["firefox","chrome","edge-chromium","safari","safari technology preview","browser","android","ios","iphone","ipad"],r=Pb.difference(tn(s,e),t);if(r.length>0)throw pt("invalid-config-run",{browser:r.join(", "),mode:"runner"}),new R(`browser type <${r}> is not supported in ${s.mode} mode.`);return e}var Pb,Cb,kb=T(()=>{"use strict";Pb=E(require("lodash")),Cb=E(require("path"));F();ms();Te();z()});var zr,_b,tI,_a,rI,Oa,Ob=T(()=>{"use strict";zr=E(require("lodash"));F();j();le();ae();Le();bs();eu();yu();Te();Et();Ft();Ch();z();Rb();xb();kb();({testRunStatus:_b,CLI_MODE:tI}=Lt),_a=x("test-plan-runner"),rI=1e3*60*5,Oa=class{constructor(e){this.startTime=Date.now();this.workerManager=new Ca(e)}async runTestAllPhases(e,t,r,n,o,i,a,c){let l={},d=Dt(),m=async()=>{let y=o.beforeParallel||1,w=!0,C=await this.workerManager.runTests(e,c,i,a,o,n,d,y,w);Object.assign(l,C)},p=async()=>{let y=Ks||o.parallel,w=!1;N("right before this.workerManager.runTests");let C=await this.workerManager.runTests(t,c,i,a,o,n,d,y,w);N("right after this.workerManager.runTests"),Object.assign(l,C)},f=async()=>{let y=o.afterParallel||1,w=!1,C=await this.workerManager.runTests(r,c,i,a,o,n,d,y,w);Object.assign(l,C)},h=Sr(o);mh({executionId:i,projectId:o.project,sessionType:h}),N("right before runBeforeTests");try{return await m(),N("right before runTestPlanTests"),await p(),N("right after runTestPlanTests"),await f(),l}catch(y){if(_a.error("error running test plan",{err:y}),y instanceof At)return c.markAllQueuedTests(i,pe.ABORTED,"aborted",!1);throw y}finally{await g()}async function g(){var w,C,b,v;if((w=o.lightweightMode)!=null&&w.disablePixelValidation)return;if(o.mode===tI.SELENIUM){let{EyeSdkBuilder:I}=(await Promise.resolve().then(()=>(Ee(),_r))).getSessionPlayer();await I.closeBatch(i);return}let y;try{if(!((v=(b=(C=o.company)==null?void 0:C.activePlan)==null?void 0:b.premiumFeatures)!=null&&v.applitools)||(y=await yl(o.project),zr.default.isEmpty(y)||!i))return;let{runKey:I,url:k}=y;await require("@applitools/eyes-sdk-core").makeSDK({name:"Testim.io",version:"4.0.0",spec:{}}).closeBatches({settings:{batchIds:[i],serverUrl:k,apiKey:I}})}catch{}}}async initRealDataService(e){let t=new ka;return await t.init(e),t}async listenToTestCreatedInFile(e,t,r,n){let o={};e.joinToTestResultsByRunId(r,t);let i=!0;return await new Promise(c=>{let l=d=>{i=!1,c(d)};e.listenToTestResultsByRunId(r,d=>{let m=d.id;if(!n.getTestResult(m)){let h=o[m],g=zr.default.merge({},h,d,{resultId:m});if(o[m]=g,!h||h.status!==d.status){let w=(n.getTestResult(g.parentResultId)||{workerId:1}).workerId;[_b.RUNNING].includes(d.status)&&Z.onTestStarted(g,w),[_b.COMPLETED].includes(d.status)&&(g.duration=g.endTime-g.startTime||0,Z.onTestFinished(g,w))}}let p=!Object.values(o).some(h=>["QUEUED","RUNNING"].includes(h.runnerStatus)),f=!Object.values(n.getAllTestResults()).some(h=>["QUEUED","RUNNING"].includes(h.status));if(p&&f)return l(Object.values(o));if(f&&!p)return ie(1e4).then(()=>{i&&l(o)})})})}async initRealDataServiceAndListenToTestsCreatedInFile(e,t,r){let n=await this.initRealDataService(e);return this.listenToTestCreatedInFile(n,e,t,r)}async runTestPlan(e,t,r,n,o,i,a,c){var k,D,S;let l=K(),d=n.project;ic(l),e.forEach(_=>Object.assign(_,{isBeforeTestPlan:!0})),r.forEach(_=>Object.assign(_,{isAfterTestPlan:!0}));let m=[...e,...t,...r],p=new Ei(m,n,i,a),f=zr.default.chain(m).map(_=>{var P;return((P=_.overrideTestConfig)==null?void 0:P.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=n.files.length>0,y=(k=n.lightweightMode)!=null&&k.onlyTestIdsNoSuite?[]:m.map(_=>_.name),w=(D=n.lightweightMode)!=null&&D.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:p.executionStart(l,d,this.startTime,o,y),C;g&&(C=this.initRealDataServiceAndListenToTestsCreatedInFile(d,l,p)),N("before testListInfoPromise");let b=await w;(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite||Z.onTestPlanStarted(b.beforeTests,b.tests,b.afterTests,o,l,c,h,g),N("before runTestAllPhases");let v=await this.runTestAllPhases(b.beforeTests,b.tests,b.afterTests,a,n,l,o||"All Tests",p),I=await re(C,rI).catch(async()=>{var P;_a.warn("timed out waiting for child results on websocket. using REST fallback",{projectId:d,executionId:l});let _=await yn(d,"testResult",`runId=${l}&sort=runOrder`);return zr.default.chain(((P=_==null?void 0:_.data)==null?void 0:P.docs)||[]).groupBy("parentResultId").omit("undefined").values().flatten().value()});return N("before executionEnd"),await p.executionEnd(l),N("after executionEnd"),{results:v,executionId:l,testPlanName:o,configName:h,childTestResults:I}}async runTestPlans(e,t){_a.info("start to run test plan",{options:Object.assign({},e,{token:void 0,userParamsData:void 0}),branchToUse:t});function r(d){return zr.default.flattenDeep(Object.values(d)).reduce((m,p)=>m.concat(p.beforeTests,p.tests,p.afterTests),[])}let n={},o={},i=e.project,a=await Zc(i,e.testPlan,e.testPlanIds,t,e.intersections),c=a.testPlans,l=a.testPlansData;if(!c||c.length===0)throw new R(`no test plan to run ${e.testPlan}`);if(!l||Object.keys(l).length===0){if(e.passZeroTests)return[];throw new R(`no test to run in test plan ${e.testPlan}`)}return await jd(e,r(l)),await de(c,async d=>{let m=d.testPlanId;n[m]={};let p=Object.assign({},e);p.baseUrl=e.baseUrl||d.startUrl,p.host=e.host,p.port=e.port,p.gridId=e.gridId||d.gridId,e.grid&&delete p.gridId,p.gridData=await zf(e,d);let f=p.overrideExecutionName||d.name;return await de(l[m],async h=>{let g=await this.runTestPlan(h.beforeTests,h.tests,h.afterTests,p,f,m,t),y=e.files.length>0;Z.onTestPlanFinished(g.results,d.name,this.startTime,g.executionId,!1,y,g.childTestResults),n[m][g.executionId]=g.results;let w=Object.keys(n[m]).map(I=>({executionId:I,status:Fd(n[m][I])})),C=Object.keys(n[m]).map(I=>n[m][I]).reduce((I,k)=>Object.assign(I,k),{}),b=Fd(C);Object.assign(o,C);let v=b?w[0].executionId:w.find(I=>!I.status).executionId;return await Xc(i,m,{success:b,executions:w,executionId:v}),g})})}async runAnonymousTestPlan(e,t){var a;_a.info("start to run anonymous",{options:Object.assign({},e,{token:void 0}),branchToUse:t}),N("before getSuite");let r=await Ab(e,t);if(N("after getSuite"),!((a=r==null?void 0:r.tests[0])!=null&&a.length)){if(e.rerunFailedByRunId)throw new R("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new R("No tests to run")}t="branch"in r&&r.branch||t;let n=r;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new R("Invalid run ID - no such run.");n.runName===""&&(n.runName=`rerun-${e.rerunFailedByRunId}`)}let o=e.overrideExecutionName||n.runName||[].concat(e.label,e.name,e.suites).join(" "),i=!0;return N("Right before validateConfig + runAnonymousTestPlan tests map"),await de(r.tests,async c=>{if(e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}await jd(e,c),N("right before runTestPlan");let l=await this.runTestPlan([],c,[],e,o,null,t,i);N("right after runTestPlan");let d=e.files.length>0;return await Z.onTestPlanFinished(l.results,o,this.startTime,l.executionId,i,d,l.childTestResults),l})}async run(e){let t=Pn(),r=[];rn(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t);let n=zr.default.flattenDeep(r);return N("right before onAllTestPlansFinished"),await Z.onAllTestPlansFinished(n),N("right after onAllTestPlansFinished"),n.map(o=>o.results).reduce((o,i)=>Object.assign(o,i),{})}}});var Nb={};$(Nb,{init:()=>EI,run:()=>TI});function nI(s){if(!Bd.get(s,"company.activePlan.premiumFeatures.allowCLI")){let t=s.project;ps(s.authData.uid,"cli-not-supported",{projectId:t}),console.warn("Testim CLI is not supported in this plan")}}async function oI(s){let e=s.project,t=await rl(e);if(t!=null&&t.isExecutionBlocked)throw console.error("You have reached the limit of runs for the billing month, please upgrade your plan at https://www.testim.io/upgrade-contact-us?source=cli"),ps(s.authData.uid,"execution-quota-surpassed",{projectId:e}),new Zr}function iI(s,e){var o,i,a,c;if(fo(e.activePlan)==="free"){let l=s.parallel||1,d=((i=(o=e.activePlan)==null?void 0:o.premiumFeatures)==null?void 0:i.concurrency)||1;if(l>d)throw new R(`Cannot run with parallel ${s.parallel}. Max parallel value is ${d}`)}let r=s.retentionDays;if(!r)return;let n=(c=(a=e.activePlan)==null?void 0:a.premiumFeatures)==null?void 0:c.resultRetention;if(r>n)throw new R(`Retention days (${r}) cannot be greater than the company's retention days (${n}). Run aborted`)}async function aI(s){var e;if(!((e=s.lightweightMode)!=null&&e.disableQuotaBlocking))try{await Promise.all([oI(s),nI(s)])}catch(t){if([R,Zr].some(r=>t instanceof r))throw t;sI.error("could not validate cli account",{err:t})}}function cI(s){let e=Dt();return Hm({userId:e.uid,name:e.uid,traits:{projectId:s,company:{id:s,lastCIRun:Math.floor(Date.now()/1e3)}}})}async function lI(s,{disableResults:e=!1,disableRemoteStep:t=!1}){if(U.flags.useNewWSCLI.isEnabled()&&!e&&!t)return Fe.connect(s);if(!t){let{remoteStepService:r}=await Promise.resolve().then(()=>(ga(),Xy));await r.init(s)}if(!e){let{testResultService:r}=await Promise.resolve().then(()=>(Os(),gg));r.init(s)}}function uI(s,e){let{branch:t,autoDetect:r}=s;if(Yf(e,r),!e&&!r)throw new R(`branch ${t} does not exist, run aborted.`)}async function dI(s){let{project:e}=s,t=Pn();Bd.get(s,"company.activePlan.premiumFeatures.ttaForSalesforce")&&(s.sfdcCredential=await Kc({projectId:e,branch:t}))}function pI(s,e){let{onprem:t,id:r,storageBaseUrl:n,storageType:o,name:i,activePlan:a={}}=e;if(t){let{mode:m,extensionPath:p,ext:f,playerPath:h}=s;if([Q.SELENIUM].includes(m)&&!h)throw new R("in selenium on prem mode --player-path must be provided");if(m==="extension"&&!p&&!f)throw new R("In extension on prem mode --ext or --extension-path must be provided")}let c=Boolean(a.isPoc),l=Boolean(a.isStartUp),d=fo(a);d==="free"&&(s.newBrowserWaitTimeout=s.newBrowserWaitTimeout<Lb?Lb:s.newBrowserWaitTimeout),U.setCompanyId(r),U.setIsPOC(c),U.setIsStartUp(l),U.setPlanType(d),Rt.setPlanType(d),s.company={companyId:r,onprem:t,storageBaseUrl:n,storageType:o,name:i,planType:d,isPOC:c,isStartUp:l,activePlan:a}}function mI(s,e){if(pr){s.editorUrl=pr;return}s.editorUrl=e.editorUrl}function fI(s,e){s.allGrids=e}function hI(s,e){s.authData=e}function gI(s,e){let{id:t,name:r,type:n,defaults:o}=e;U.setProjectId(t),U.setProjectType(n),s.projectData={projectId:t,type:n,name:r,defaults:o}}async function yI(s){s.gridData=await Kf(s)}async function bI(s){let{project:e}=s,t={projectId:e};s.overrideMappingFile&&(pt("user-override-file",t),s.mockNetworkRules=await Nm(s.overrideMappingFile))}async function wI(s,e){N("in runner.js runRunner");let{project:t,remoteRunId:r,useLocalChromeDriver:n,useChromeLauncher:o}=s;r||(s.source=n||o?"cli-local":"cli"),await Ef(),N("in runner.js after checkNpmVersion"),await aI(s),N("in runRunner before tunnel.connect"),await ni(s),N("in runRunner after tunnel.connect");let a=await new Oa(e).run(s);return N("before tunnel.disconnect"),await oi(s),await In.end(t),N("after tunnel.disconnect and gridService.keepAlive.end"),a}function vI(s){var e;Rt.shouldShowFreeGridRunWarning((e=s.gridData)==null?void 0:e.type)&&console.log(`
|
|
559
|
+
const downloadAndUploadFile = ${VE()};
|
|
560
|
+
return downloadAndUploadFile.apply(null, arguments);`,[e.locatedElement,i]);return}let l=await Ag(i,this.uploadFile.bind(this));await this.uploadFilesAndForceVisibility(l,e)}}});var Yi,Xi,_g=w(()=>{"use strict";Yi=require("url");ce();Xi=class extends ${async updateBaseUrl(e){let t=new Yi.URL(e),s=new Yi.URL(this.context.recordedBaseUrl),n=new Yi.URL(this.context.baseUrl);return t.host===s.host&&s.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 Qi,Og=w(()=>{"use strict";ce();U();Qi=class extends ${async performAction(){await se(this.step.durationMS)}}});var Zi,Lg=w(()=>{"use strict";ce();Zi=class extends ${async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var Nn,Ng=w(()=>{"use strict";ce();Nn=class extends ${async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:s}=this.sessionPlayerInit;try{let o=await this.driver.executeCodeAsync(s,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(s=>{t(e,s)})}async performAction(){let{commonConstants:e}=this.sessionPlayerInit,t=this.step,s=this.context,n={id:t.id,url:s.apiUrl,method:t.method,headers:s.apiHeaders,body:s.apiBody,timeout:s.data.maxTotalStepTime,omitCookies:t.omitCookies,formData:t.formData,fileUrls:s.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 ea,Dg=w(()=>{"use strict";ce();ea=class extends ${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 ta,Mg=w(()=>{"use strict";ce();ra();ta=class extends ${async performAction(){return await ks(this.step,this.context,this.driver,this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),this.frameHandler.frameManager)}}});var Fg,Ug,Fu,Uu,jg=w(()=>{"use strict";Fg=E(require("@applitools/spec-driver-webdriverio")),Ug=require("@applitools/eyes-sdk-core");Zn();Ee();Fu=class{constructor(){let{EyeSdkBuilder:e}=re(),t=Nd["@applitools/eyes-sdk-core"]||"N/A";this.sdk=(0,Ug.makeSDK)({name:"Testim.io",version:`4.0.1/eyes-sdk-core/${t}`,spec:Fg.default}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,s,n){let{EyeSdkBuilder:o}=re(),i=await this.sdk.makeManager({type:e?"vg":"classic",concurrency:t});return o.rememberCreatedBatch(s,n),i}},Uu=new Fu});var $g,Bg,Dn,Wg=w(()=>{"use strict";$g=E(require("lodash"));ce();j();jg();Bg=R("pixel-validation-step-action"),Dn=class extends ${async performAction(){var d,m;let{shouldUseVisualGrid:e,applitoolsSdkConfig:t,applitoolsSdkLogger:s,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 Uu.getManager(e,this.context.config.applitoolsConcurrency||5,i,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},l;try{let p=await a.openEyes({driver:this.driver.client,config:t,logger:s}),h={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};$g.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(h,o.applitoolsStepSettings),Bg.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await p.check({settings:h}),l={isApplitoolsSdkResult:!0,success:!0,eyesResults:await p.close()}}catch(p){Bg.error("Applitools SDK step failed",{err:p,info:p.info}),l={isApplitoolsSdkResult:!0,success:!1,err:p}}return await Uu.handleApplitoolsSdkResult(this.context,l,this.step)}}});var _s,ju=w(()=>{"use strict";U();Mr();$i();_s=class extends ar{async executeCliCode(){var h,g,y;let{step:e,context:t}=this,s=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)&&!s)return{success:"skipped",reason:"CLI action is not enabled in your current plan"};let{code:o,id:i}=e,{incomingParams:a,testResultId:c,retryIndex:l,stepResultId:d}=t,m={config:t.config,data:t.data},p=t.data.timeToPlayStep,f=await Es(o,i,a,m,c,l,d,p);return await this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof J?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var cr,Gg=w(()=>{"use strict";ju();cr=class extends _s{isFailedResult(e){return e===!1}}});var sa,Vg=w(()=>{"use strict";ju();sa=class extends _s{isFailedResult(e){return!e}}});var na,qg=w(()=>{"use strict";U();Mr();ce();q();na=class extends ${async performAction(){let{context:e}=this,{stepId:t,packageData:s,resultId:n,retryIndex:o,stepResultId:i,timeToPlayBeforeExec:a}=e;try{return{data:await vs(t,n,o,s,i,a),success:!0}}catch(c){return c instanceof dt?{success:!1,code:"invalid-node-package",message:c.message}:c instanceof J?{success:!1,code:"timeout"}:{success:!1,reason:c.message,exception:c}}}}});var Os,Hg=w(()=>{"use strict";ce();Os=class extends ${async performAction(){return{success:"skipped",reason:"This step can run only on Chrome"}}}});var We,zg=w(()=>{"use strict";ce();We=class extends ${async performAction(){var s,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=(s=this.step).getStepPreview)==null?void 0:n.call(s)}'`);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 oa,Kg=w(()=>{"use strict";ce();oa=class extends ${async performAction(){var s,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=(s=this.step).getStepPreview)==null?void 0:n.call(s)}'`);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 qE(r,e){Object.keys(r).forEach(t=>{e.registerStepAction(t,r[t])})}function ia(r,e){qE(HE,e),e.registerLocateStepActionUtils&&e.registerLocateStepActionUtils(_n.getUtils(r))}var HE,Bu=w(()=>{"use strict";Vh();zh();rg();sg();og();cg();dg();pg();mg();gg();yg();bg();vg();Rg();kg();_g();Og();Lg();Ng();Dg();Mg();Wg();Gg();Vg();qg();Hg();zg();Kg();HE={locate:_n,scroll:Mi,mouse:Fi,submit:Vi,text:ji,"special-key":Wi,"user-code":Gt,"validation-code-step":Gt,"wait-for-code-step":Gt,"action-code-step":Gt,"condition-step":Cs,"skip-code-step":Cs,"element-code-step":Cs,"evaluate-expression":Ui,"text-validation":Ln,"wait-for-text-validation":Ln,"select-option":Gi,"drop-file":zi,"input-file":Ji,hover:qi,navigation:Xi,wheel:Hi,sleep:Qi,refresh:Zi,"api-validation":Nn,"api-action":Nn,"api-code-step":Gt,"extract-text":ea,"simple-ui-verification":Dn,"wait-for-simple-ui-verification":Dn,"cli-validation-download-file":Os,"cli-wait-for-download-file":Os,"network-validation-step":Os,"cli-validation-code-step":cr,"cli-wait-for-code-step":cr,"cli-action-code-step":cr,"cli-api-code-step":cr,"cli-condition-step":sa,"node-package":na,"email-code-step":Gt,"cli-email-code-step":cr,"tdk-hybrid":ta,"sfdc-recorded-step":oa,"sfdc-step-login":We,"sfdc-step-loginas":We,"sfdc-step-logout":We,"sfdc-step-sobjectcreate":We,"sfdc-step-sobjectdelete":We,"sfdc-step-findrecord":We,"sfdc-step-quickaction":We,"sfdc-step-sobjectedit":We,"sfdc-step-sobjectvalidate":We,"sfdc-step-launchapp":We,"sfdc-step-closeconsoletabs":We,"sfdc-step-relatedlistaction":We}});var $u,Mn,Wu=w(()=>{"use strict";$u=class{on(){}},Mn=new $u});var Jg,zE,Yg,KE,Ls,Gu=w(()=>{"use strict";Jg=E(require("lodash")),zE=1e3,Yg=["simple-ui-verification","wait-for-simple-ui-verification"],KE=[...Yg,"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"],Ls=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 s=Date.now();this.currentRetryStart=s,this.lastUpdateTime=s}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 s=this.getTotalStepRunTime(e),n=KE.includes(e.stepType)?[s]:t(s);this.resetStepVariables(s,n),e.context.data.maxTotalStepTime=s}getStepTimes(){return this.totalStepTimesReport.push(this.currentRetryTimesReport),Jg.cloneDeep(this.totalStepTimesReport)}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let s=e.context.config.stepTimeout;return Yg.includes(e.stepType)&&(s=e.context.config.applitoolsStepTimeout||18e5),e.step.type.startsWith("sfdc-")&&(s=e.step.defaultTimeout),e.step.useStepTimeout&&e.step.stepTimeout?e.step.stepTimeout:s}getTotalStepTimeLeftToPlay(e,t=this.totalStepTime){let s=Date.now()-e.startTimestamp;return t-s}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+zE}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 s=2e3;return e.step.isScrollToElement&&(s=4e3),e.step.events.length*s+5e3}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,s=e.step.type,n=3e4,o;return s==="sleep"?o=e.step.durationMS+t:s==="android-scroll"?o=Math.max(this.calcAndroidScrollTimeout(e),n):o=Math.max(this.getTotalStepTimeLeftToPlay(e),n),o}setStepPhaseTime(e){let t=Date.now(),s=t-this.lastUpdateTime;this.lastUpdateTime=t,this.currentRetryTimesReport[e]=s}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 Vu={};W(Vu,{SeleniumTestPlayer:()=>Fn});var Fn,aa=w(()=>{"use strict";U();An();Su();Nh();Au();Cu();Fh();ku();Ee();As();Bu();Wu();Gu();Fn=class{constructor(e,t,s,n="code",o=new Nr,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d}=re();this.driver=o,this.id=e;let m=new Ps(this.driver);this.stepActionFactory=new d(m),ia(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new ki(this.driver),this.driver.tabService=this.tabService,this.windowCreationListener=Mn,this.playbackTimeoutCalculator=new Ls(Oi()),this.tabService.createSesion(e);let p=Mh(this.driver);this.sessionPlayer=new c(e,this.tabService,new Rs(this.driver),Mn,p,_i,null,null,m,this.stepActionFactory,this.playbackTimeoutCalculator,Qe.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(s),this.tabService.setAddFrameHandlerCallBack(this.sessionPlayer.addPlaybackFrameHandler.bind(this.sessionPlayer)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,s,n){n!=null&&n.isTabOpener&&this.tabService.addNewPopup(this.id,n.id).catch(()=>{})}onDone(){let{commonConstants:e}=re(),t=1e3*60*2;return te(this.driver.end(),t).catch(s=>{if(s instanceof J)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},s=[]){let n=await this.driver.getTabIds(),o=["app.testim.io"].concat(s);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 Zg={};W(Zg,{buildCodeTests:()=>qu});async function JE(r,e,t,s,n){try{return await Xg(r,e,t,s,n)}catch(o){if((o==null?void 0:o.code)==="ENOENT")return lr.compiler=null,lr.webpackConfig=null,s&&(s.data={}),await Xg(r,e,t,s,n);throw o}}async function Xg(r,e={mode:"development"},t=void 0,s=void 0,n=void 0){let o=await he("webpack"),i=ur.cloneDeep(e);e.externals={testim:"__testim"},e.devtool||(e.devtool="inline-source-map"),e.plugins||(e.plugins=[]),e.plugins.push(new o.DefinePlugin(YE(t)),new o.DefinePlugin({"process.argv":JSON.stringify(process.argv)})),r=r.map(h=>ca.resolve(h));let a=r.map(()=>z(30));if(e.optimization={minimize:!1},Number(process.versions.node.split(".")[0])>=17){let h=require("crypto"),g=h.createHash;h.createHash=(y,T)=>g(y==="md4"?"sha256":y,T)}e.entry=Object.fromEntries(ur.zip(r,a).map(([h,g])=>[g,h])),e.output=Object.assign({devtoolModuleFilenameTemplate:h=>`file:///${h.absoluteResourcePath}`,filename:"[name].bundle.js"},e.output);let l;s?(ur.isEqual(lr.webpackConfig,i)&&lr.compiler||(lr.webpackConfig=i,lr.compiler=o(e)),l=lr.compiler):l=o(e);let d=s||new Qg.default;l.outputFileSystem=d;let m=pt(h=>{n==null||n.addEventListener("abort",()=>{h(new je,void 0)})});try{let h=await Promise.race([pt(g=>l.run(g)),m]);if(h!=null&&h.hasErrors())throw new Error(h==null?void 0:h.toJson().errors.toString())}catch(h){let g=h.message.match(/Entry module not found: Error: Can't resolve '(.*)'/);throw g&&g.length===2?e.output&&e.output.library==="tdk"?new I(`Could not open dev-kit functions file in ${g[1]}`):new I(`Can't find test files in: '${g[1]}'`):new I(`Compilation Webpack Error in tests: ${h.message}`)}return{tests:[r.map((h,g)=>({code:d.readFileSync(ca.resolve("./dist",`${a[g]}.bundle.js`)),name:h})).map(({code:h,name:g})=>({code:h.toString(),baseUrl:"",name:ca.resolve(g),testConfig:{},testConfigId:null,testId:z(),resultId:z(),isTestsContainer:!0}))],runName:`Testim Dev Kit Run ${new Date().toLocaleString()}`}}function YE(r){let e=ur.fromPairs(Object.keys(process.env).filter(s=>/^TDK_/i.test(s)||s==="BASE_URL").map(s=>[s,process.env[s]])),t={BASE_URL:r==null?void 0:r.baseUrl};return{"process.env":XE({...t,...e})}}function XE(r){return Object.fromEntries(Object.entries(r).map(([e,t])=>[e,JSON.stringify(t)]))}var ur,ca,Qg,lr,qu,Hu=w(()=>{"use strict";ur=E(require("lodash")),ca=E(require("path"));U();Qg=E(require("memory-fs"));q();yt();lr={compiler:null,webpackConfig:null};qu=JE});var ry={};W(ry,{compileFunctionsLibrary:()=>Xu,findTestFolder:()=>Br,findTests:()=>zu,getLocalLocatorContents:()=>Ku,getLocalLocators:()=>Un,saveLocators:()=>Yu,saveTest:()=>Ju});async function Un(){let r=await Br(process.cwd()),e=Ze.join(r,"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 s=await it.promises.readFile(e).then(t,()=>({}));return Object.fromEntries(Object.keys(s).map(n=>[n.replace(/"/g,'\\"'),s[n]]))}async function zu(r=process.cwd()){let e=await Br(r),t=await it.promises.readdir(e,{withFileTypes:!0}),s=["webpack.config.js","tsconfig.js",".DS_Store","functions.js"],n=[".html",".json"];return t.filter(o=>!s.includes(o.name)&&!n.some(i=>o.name.endsWith(i))&&o.isFile()&&!o.name.startsWith(".")).map(o=>o.name)}async function QE(r){let e=Object.entries(r),t=e.map(([,n])=>n),s=await Promise.all(t);for(let n=0;n<s.length;n++)e[n][1]=s[n];return Object.fromEntries(e)}async function Ku(r,e=!1,t=process.cwd()){let s={};if(e){let n=await Br(t);for(let o of Object.values(r))s[o]=it.promises.readFile(Ze.join(n,"locators",`locator.${o}.json`)).then(JSON.parse)}try{return await QE(s)}catch(n){return console.error(n),{}}}async function Ju({body:r,name:e,locators:t,language:s="javascript"}){let n=await Br(process.cwd()),o=Ze.join(n,"locators","locators.js"),i=Ze.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(s==="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 it.promises.writeFile(i,r),await it.promises.mkdir(Ze.join(n,"locators")).catch(()=>{});for(let{id:l,body:d}of t)await it.promises.writeFile(Ze.join(n,"locators",`locator.${l}.json`),JSON.stringify(d));let a=Object.fromEntries(t.map(({name:l,id:d})=>[l,d])),c=await Un();Object.assign(c,a),await ty(o,c)}async function ty(r,e){let t=`module.exports = {
|
|
561
|
+
`;for(let[s,n]of Object.entries(e))t+=` "${s}": require('./locator.${n}.json'),
|
|
562
|
+
`;t+="};",await it.promises.writeFile(r,t)}async function Yu(r,{mergeIntoExisting:e}={mergeIntoExisting:!1}){let t=await Br(process.cwd()),s=Ze.join(t,"locators","locators.js");await it.promises.mkdir(Ze.join(t,"locators")).catch(()=>{});for(let{name:o,id:i,elementLocator:a}of r)await it.promises.writeFile(Ze.join(t,"locators",`locator.${i}.json`),JSON.stringify({name:o,id:i,elementLocator:a}));let n=Object.fromEntries(r.map(({name:o,id:i})=>[o,i]));if(e){let o=await Un();Object.assign(n,o)}await ty(s,n)}async function Xu({fileSystem:r,bypassWebpack:e}={},t=void 0){let s=await Br(process.cwd());if(t!=null&&t.aborted)throw new je;let n=Ze.join(s,"functions.js");if(e!=null&&e.testim){let i=require("module"),a=i.prototype.require;i.prototype.require=function(l){return l==="testim"?e.testim:a.apply(this,arguments)};try{return delete require.cache[require.resolve(n)],require(n)}finally{i.prototype.require=a}}return(await qu([n],{output:{libraryTarget:"umd",library:"tdk",globalObject:"globalThis"},cache:{type:"memory"},mode:"development"},{},r,t)).tests[0][0].code}var ey,Ze,it,Br,Qu=w(()=>{"use strict";ey=E(require("lodash")),Ze=E(require("path")),it=require("fs");q();Hu();Br=ey.memoize(async r=>(await it.promises.readdir(r)).includes("tests")&&(await it.promises.stat(Ze.join(r,"tests"))).isDirectory()?Ze.join(r,"tests"):r)});var sy={};W(sy,{getArgumentsFromContext:()=>$r});async function $r(r,e,t){let s=ZE(r.parameterNames.map(n=>n.displayName),e.incomingParams.as);return await Promise.all(s.map(n=>typeof n=="object"&&n.locatedElement?t(n):n))}function ZE(r,e){let t=[];for(let s of r){let n=e.functionParameters.indexOf(s);t.push(e.functionArguments[n])}return t}var jn=w(()=>{"use strict"});var oy={};W(oy,{execute:()=>rS});async function sS(r,e,t,s,n,o){var a;let i;try{let{WebDriver:c}=await eS("selenium-webdriver");if(o.aborted)throw new ny;let{Executor:l,HttpClient:d}=require("selenium-webdriver/http"),m=r.driver.client.options,p=m.path,h=`${m.protocol}://${m.hostname}:${m.port}`+p,g=new d(h),y=new c(r.getSessionId(),new l(g));await nS(y,r.driver);let A=await tS(t,s,v=>y.findElement({css:v.selector})),b=e.bind(null,y,...A);return i=function(){g.send=async function(){throw new ny}},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 nS(r,e){if(e.cdpUrl){let t=await r.getAllWindowHandles();for(let s of t)if(await r.switchTo().window(s),await r.executeScript("return window.__isMainTestimTab"))break}}var ny,eS,tS,rS,iy=w(()=>{"use strict";({AbortError:ny}=(q(),ie(tp))),{lazyRequire:eS}=(yt(),ie(Pl)),{getArgumentsFromContext:tS}=(jn(),ie(sy)),rS=sS});var ay={};W(ay,{execute:()=>oS});async function iS(r,e,t,s,n,o){var a;let i;try{let c=await he("puppeteer");if(o.aborted)throw new je;let l=await c.connect({browserWSEndpoint:r.driver.cdpUrl,defaultViewport:null,product:"chrome"});if(o.aborted)throw l.disconnect(),new je;i=function(){l.disconnect()},o.addEventListener("abort",i);let d=await l.pages(),m;for(let y of d)if(await y.evaluate(()=>window.__isMainTestimTab)){m=y;break}let p=m||d.at(-1),h=await $r(t,s,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 oS,cy=w(()=>{"use strict";q();yt();jn();oS=iS});var ly={};W(ly,{execute:()=>aS});async function cS(r,e,t,s,n,o){var a;let i;try{let c=await he("playwright");if(o.aborted)throw new je;let l=await c.chromium.connect({wsEndpoint:r.driver.cdpUrl});if(o.aborted)throw l.disconnect(),new je;i=function(){l.disconnect()},o.addEventListener("abort",i);let p=(await(await l.newContext({viewport:null})).pages()).at(-1),h=await $r(t,s,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 aS,uy=w(()=>{"use strict";q();yt();jn();aS=cS});var py={};W(py,{execute:()=>lS});async function uS(r,e,t,s,n,o,i,a){function c(){r.sessionPlayer.stopPlaying()}a.addEventListener("abort",c);function l(P){if(o.parameterValues){let N=o.parameterValues.find(B=>B.type==="locate"&&B.id===P.locatorId);return{elementLocator:N.elementLocator,id:N.id,name:"Hybrid Step Locator"}}return P.locatedElement.shadowPath?P.locatedElement.shadowPath[0]:P}let d=await $r(o,t,l),m=e.bind(null,...d),p=z(),f=z(),h=t.testResultId,g=t.config.baseUrl,y=dy.cloneDeep(t);y.loginData=s;let A=re().manifestVersion||"runner",b=!1,v=null,x="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:z()},O=typeof e.results=="boolean"&&!e.results;try{_("tdkHybridStepPlayback before addAllTabs"),n?(r.sessionPlayer.playbackAutUtils.frameManager=n,r.sessionPlayer.frameManager=n):await r.addAllTabs(null,{loadInfo:!0,checkForMainTab:!0,takeScreenshots:!O},[r.driver.initialUrl]),r.sessionPlayer.playbackManager.dontAssociateChildResult=!0,r.sessionPlayer.playbackManager.onlyLocalReporting=O,_("tdkHybridStepPlayback before playTestByCode");let P=await new Promise((N,B)=>{i==="agent"&&dS(r,N);function V(){B(new je),a.removeEventListener("abort",V)}a.addEventListener("abort",V),r.sessionPlayer.playTestByCode(p,f,h,g,y,A,N,b,v,x,[S],k,D).catch(B)});return _("tdkHybridStepPlayback after playTestByCode"),{success:P.success,shouldRetry:!1,resultInfo:{testId:p,executionId:f,resultId:S.resultId}}}catch(P){return{success:!1,error:P,shouldRetry:!1}}finally{a.removeEventListener("abort",c)}}function dS(r,e){let{commonConstants:t}=re();r.sessionPlayer.playbackManager.on(t.playback.START,({testResult:s})=>{let n=s.runnerStatus;Object.defineProperty(s,"runnerStatus",{get(){return n},set(o){n=o,o==="FINISHED"&&e(s)}})})}var dy,lS,my=w(()=>{"use strict";dy=E(require("lodash"));Oe();U();q();jn();Ee();lS=uS});var la={};W(la,{abort:()=>td,execute:()=>ks,run:()=>fS});async function ks(r,e,t,s,n,o="cli"){let i=new hy.AbortController,{signal:a}=i;ed.set(e.stepResultId,i);try{_("before seleniumTestPlayer require");let{SeleniumTestPlayer:c}=(aa(),ie(Vu)),{compileFunctionsLibrary:l}=(Qu(),ie(ry)),{functionName:d}=r,m={},p=!1,f=new c(e.id,m,p,Dt.CODEFUL,t);Zu=f.sessionPlayer.codeSessionPlayer.proxy;let h=r.bypassWebpack?{testim:Zu.wrappedSteps()}:!1;_("before compileFunctionsLibrary",{bypassWebpack:Boolean(r.bypassWebpack)});let g;try{g=await l({fileSystem:pS,bypassWebpack:h},a)}catch(T){return{success:!1,shouldRetry:!1,reason:`Unable to compile functions library. ${T.message}`,extraInfo:T.stack}}typeof globalThis>"u"&&(global.globalThis=process);let y;if(h?y=g[d]:(global.globalThis.__testim=Zu.wrappedSteps(),(0,eval)(g),y=globalThis.tdk[d]),_("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 T=(iy(),ie(oy)).execute;return await T(f,y,r,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."};_("before puppeteerPlayback");let T=(cy(),ie(ay)).execute;try{return await T(f,y,r,e,o,a)}finally{_("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 T=(uy(),ie(ly)).execute;return await T(f,y,r,e,o,a)}if(y.type==="tdk"||!y.type){let T=(my(),ie(py)).execute;_("before tdkPlayback");try{return await T(f,y,e,s,n,r,o,a)}finally{_("after tdkPlayback")}}return{success:!1,shouldRetry:!1,reason:`unknown hybrid format ${y.type}`}}catch(c){mS.info("error running hybrid step",{err:c});return}finally{ed.delete(e.stepResultId)}}function td(r){let e=ed.get(r);if(e)e.abort();else throw new Error("No such stepResultId")}var fy,hy,pS,mS,ed,Zu,fS,ra=w(()=>{"use strict";fy=E(require("memory-fs"));Oe();hy=require("abort-controller");j();ae();pS=new fy.default,mS=R("hybrid-step-playback"),ed=new Map,fS=(r,e,t,s)=>{let{step:n,context:o}=e.data;return ks(n,o,r,s.loginData)}});var rd={};W(rd,{run:()=>hS});var hS,gy=w(()=>{"use strict";U();Mr();q();hS=async(r,e)=>{let{stepId:t,testResultId:s,retryIndex:n,stepResultId:o,packageData:i,timeout:a}=e.data;try{return{data:await vs(t,s,n,i,o,a),success:!0}}catch(c){if(c instanceof dt)return{success:!1,code:"invalid-node-package",message:c.message};if(c instanceof J)return{success:!1,code:"timeout"};throw c}}});async function by(r,e,t,s){try{return await el(r,e,t,s)}catch{ua.error("failed to report remote step state",{projectId:r,resultId:e,stepId:t});return}}async function yS(r,e,t,s,n){return ua.info("finished to run remote step",{stepId:t,sessionId:n}),await by(r,e,t,{status:"completed",success:!0,failureReason:null,data:s})}async function yy(r,e,t,s,n){return ua.info("failed to run remote step",{stepId:t,sessionId:n,failureReason:s}),await by(r,e,t,{status:"completed",success:!1,failureReason:s})}async function wy(r,e,t,s){if(!(t!=null&&t.type)||t.status==="completed")return;let{project:n,projectData:o,userData:i}=r,a=t.type,c=e.getSessionId(),l=t.id;ua.info("start play remote step",{stepType:a,stepId:l,sessionId:c});let d=gS[a];if(!d)return await yy(n,s,l,`Failed to find step type ${a}`,c);try{let m=await d.run(e,t,o,i);return await yS(n,s,l,m,c)}catch(m){return await yy(n,s,l,m.message,c)}}var ua,gS,Ty=w(()=>{"use strict";Ph();ra();Te();gy();j();ua=R("step-playback"),gS={"cli-validation-code-step":or,"cli-wait-for-code-step":or,"cli-action-code-step":or,"cli-api-code-step":or,"cli-condition-step":or,"cli-download-code-step":or,"node-package":rd,"tdk-hybrid":la}});var vy={};W(vy,{remoteStepServiceSocketIO:()=>wS});var sd,wS,Ey=w(()=>{"use strict";Ni();sd=class extends ir{constructor(){super(...arguments);this.listerers={}}init(t){super.init(t,"remoteStep"),this.listerers={}}emitJoinRoom(t){return this.emitPromise("remoteStep:join",{resultId:t})}emitLeaveRoom(t){return this.emitPromise("remoteStep:leave",{resultId:t})}async joinToRemoteStep(t){this.rooms[t]||(this.joinRoom(t),await this.emitJoinRoom(t))}listenToRemoteStep(t,s){this.listerers[t]&&(this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t]),this.listerers[t]=n=>{n.resultId===t&&n.remoteStep&&n.remoteStep.status==="pending"&&s(n.remoteStep)},this._socket.on("remoteStep:saved",this.listerers[t])}async unlistenToRemoteStep(t){this.listerers[t]&&(this.leaveRoom(t),this._socket.off("remoteStep:saved",this.listerers[t]),delete this.listerers[t],await this.emitLeaveRoom(t))}},wS=new sd});var Sy={};W(Sy,{remoteStepService:()=>Ns});var nd,Bn,od,Ns,da=w(()=>{"use strict";kn();ae();ye();({REMOTE_STEP_SAVED:nd}=rt),od=class{async init(e){M.flags.useNewWSCLI.isEnabled()||(Bn=(await Promise.resolve().then(()=>(Ey(),vy))).remoteStepServiceSocketIO,Bn.init(e))}joinToRemoteStep(e){return M.flags.useNewWSCLI.isEnabled()?$e.addFilter(`${e}:remoteStep`,{resultId:e},[nd]):Bn.joinToRemoteStep(e)}listenToRemoteStep(e,t){if(M.flags.useNewWSCLI.isEnabled()){$e.listenTo(`${e}:remoteStep`,[nd],s=>s.resultId===e&&s.remoteStep&&s.remoteStep.status==="pending",s=>t(s.remoteStep));return}Bn.listenToRemoteStep(e,t)}unlistenToRemoteStep(e){return M.flags.useNewWSCLI.isEnabled()?($e.removeFilter(`${e}:remoteStep`,[nd]),Promise.resolve()):Bn.unlistenToRemoteStep(e)}},Ns=new od});var Iy,xy,Py,Se,TS,Ay,Ry,pa,Cy=w(()=>{"use strict";Iy=E(require("lodash"));U();le();Oe();ds();It();Te();Ty();xy=E(require("p-retry")),Py=require("url");j();Ko();bs();ae();da();As();ye();Se=R("test-run-handler"),TS=3,Ay=20*1e3,Ry=r=>JSON.stringify(r).length<Ay,pa=class{constructor(e,t,s,n,o,i){this._executionId=e;this._executionName=t;this._options=n;this._branch=o;this._testRunStatus=i;this.seleniumPerfStats=new Wt;this._totalRetryCount=1;this._retryCount=1;this._timeoutRetryCount=1;this.clearTestResultFinished=Promise.resolve(void 0);var c,l;this._testStatus=s.testStatus,this._testId=s.testId,this._testName=s.name,this._testResultId=s.resultId,this._code=s.code,this._baseUrl=n.baseUrl||s.baseUrl||s.testConfig.baseUrl,this._nativeApp=s.nativeApp,this._overrideTestConfigId=(c=s.overrideTestConfig)==null?void 0:c.id,this._maxRetryCount=n.retries,this._remoteRunId=n.remoteRunId;let a=!((l=s.runConfig)!=null&&l.isMobileWeb)&&n.browser;this._runConfig=a?en(n.browser,n.saucelabs,n.browserstack):s.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,s=t.split(".").pop();return t.replace(s,"*")}get isFFAllowAppFromDeviceEnabled(){return M.flags.allowAppFromDeviceRuns.isEnabled()}get isAppFromDevice(){return Ys(this._nativeApp)}get isAppForIosVirtualDevice(){return es(this._nativeApp)}get getAppSource(){if(this._nativeApp)return this.isAppFromDevice?co.FROM_DEVICE:co.FROM_LIBRARY}get nativeAppLink(){let e=null;return this._nativeApp&&"filePath"in this._nativeApp&&(e=`${ge}/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 s=t||this.baseUrl;if(!s)return null;let[n,o]=s.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 s,n;let t={tokenV3:await Jt(),refreshToken:ko(),projectId:this._options.project,executionId:this._executionId,executionName:this._executionName,testId:this._testId,resultId:this._testResultId,baseUrl:this._baseUrl,branch:this._branch,servicesUrl:qd,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&&ht("user-disable-mock"),t.lightweightMode&&((s=this._options.lightweightMode)!=null&&s.general)){Object.assign(t,{company:this._options.company});let o=this.runData,i=Ry(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: ${Ay} 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 bn(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===X.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&&Ry(e))return;let s=async()=>{try{return await tl(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 s();return await this._testRunStatus.waitForExecutionStartedFinished(),Zc(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){_("runTestUsingCDP");let{targetInfos:t}=await e.cdpCommand("Target.getTargets")||{targetInfos:[]},{targetId:s}=t.find(o=>o.type==="background_page"&&o.title==="Testim Editor")||{},{targetId:n}=t.find(o=>o.type==="page")||{};if(!s)throw new Error("testim extension not found");if(!n)throw new Error("AUT target not found");try{_("before Target.attachToTarget");let[o,i]=await Promise.all([e.cdpCommand("Target.attachToTarget",{targetId:s,flatten:!0}),this.getRunRequestParams()]),{sessionId:a}=o||{};_("before Runtime.evaluate"),await(0,xy.default)(async()=>{let{result:l}=await e.cdpCommand("Runtime.evaluate",{expression:"typeof runTestimTest !== 'undefined'",returnByValue:!0},a);if(!l.value)throw new Error("runTestimTest not available on global scope")},{retries:100,minTimeout:30,factor:1}),_("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 _("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 s;try{s=new Py.URL(e)}catch{return}let{username:n,password:o}=s;if(n||o)throw new Error("Basic authentication in URL is not supported in Safari")}}onStarted(e){return new Promise(t=>{let s=!1,n=o=>{if(!s){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),s=!0,t(o))}};if(this._options.disableSockets){let o=Date.now()+e,i=async()=>{if(Date.now()>o)return;let{testId:a,testResultId:c,branch:l,_options:{project:d}}=this;try{let m=await Ar(a,c,d,l);n(m),s||setTimeout(i,3e3)}catch(m){Se.error("failed to check if done",{err:m}),setTimeout(i,3e3)}};setTimeout(i,3e3)}else Qe.listenToTestResult(this._testResultId,this._testId,n)})}async checkViaRestAPIIfTestStarted(){let{testId:e,testResultId:t,_options:{project:s},branch:n}=this;try{let o=await Ar(e,t,s,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(Be.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(Be.TEST_START_TIMEOUT_MSG)}}async onCompletedCleanup(){if(!this._options.disableSockets)return await Qe.leaveTestResult(this._testResultId,this._testId)}async onCompleted(){let e;try{let t=await new Promise(s=>{if(this._wasCompletedOnStartedCheck&&!this.isRetryKeyMismatch(this._wasCompletedOnStartedCheck)){Se.info("test was already completed in on started check",{resultId:this.testResultId,testId:this.testId}),s(this._wasCompletedOnStartedCheck);return}this._options.disableSockets||Qe.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,s(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=Iy.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,s(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)Qe.on("socket-connected",e);else{let i=()=>{setTimeout(async()=>{try{let{isComplete:a}=await Gc(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&&Qe.off("socket-connected",e)}}listenToRemoteStep(e){Ns.listenToRemoteStep(this.testResultId,t=>{wy(this._options,e,t,this.testResultId)})}hasMoreTimeoutRetries(){let e=this._options.disableTimeoutRetry?1:TS;return this._timeoutRetryCount<e}startNewTimeoutRetry(){return this._timeoutRetryCount++,this.onRetry()}get retryCount(){return this._retryCount}get previousTestResultId(){return this._previousTestResultId}isAllowReportTestResultRetries(){var e,t,s;return Boolean((s=(t=(e=this._options.company)==null?void 0:e.activePlan)==null?void 0:t.premiumFeatures)==null?void 0:s.allowReportTestResultRetries)}async onRetry(){var e;this._previousTestResultId=this.testResultId,this.isAllowReportTestResultRetries()&&(this._totalRetryCount++,this._originalTestResultId||(this._originalTestResultId=this._previousTestResultId),this._testResultId=z(),!((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 ma,ky=w(()=>{"use strict";Cy();ma=class{constructor(e,t,s,n,o,i){this._waitingTests=s.map(a=>new pa(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 vS,ES,$n,id=w(()=>{"use strict";gs();j();vS=R("worker-utils"),ES=async(r,e,t)=>{e&&await jl(r,t)},$n=async(r,e,t,s)=>{vS.info("releasing player",{hasPlayer:Boolean(s)});try{await(s==null?void 0:s.onDone())}finally{await ES(r,e,t)}}});function CS(r,e,t,s){return{testId:r,reason:s,name:e,resultId:t,success:!1}}var ld,Ly,cd,At,SS,_y,Oy,fa,RS,ad,IS,Vt,xS,PS,AS,Ct,ha=w(()=>{"use strict";ld=E(require("ms")),Ly=E(require("moment")),cd=E(require("p-retry"));U();Oe();gs();Te();j();id();$t();ei();ye();da();As();Rt();ae();q();At=R("base-worker"),{GET_BROWSER_TIMEOUT_MSG:SS,TEST_START_TIMEOUT_MSG:_y,TEST_COMPLETE_TIMEOUT_MSG:Oy}=Be,{SETUP_TIMEOUT:fa,NETWORK_ERROR:RS,GRID_ERROR:ad,BROWSER_CLOSED:IS,SELENIUM_ERROR:Vt,UNKNOWN_ERROR:xS}=zs,PS=(0,ld.default)("1s"),AS=1;Ct=class{constructor(e,t,s,n,o,i,a,c,l=!0){this.executionQueue=e;this.options=t;this.customExtensionLocalLocation=s;this.executionId=n;this.onTestStarted=o;this.onTestCompleted=i;this.onGridSlot=a;this.onTestIgnored=c;this.releaseSlotOnTestFinished=l;this.id=Ct.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 AS++}async getGridSlot(e,t){let s=await Sf(e,t.executionId,this.options,this.id);return this.onGridSlot(t.testResultId,s),s}async getSlotOnce(e){let{browserValue:t}=this.testRunConfig;return Q.onGetSlot(this.id,t||"chrome"),await this.getGridSlot(t,e)}initPlayer(e){throw new Xr(!0)}async getBrowserOnce(e,t,s,n){throw new Xr(!0)}async runTestOnce(e,t){return e.sessionId=t.getSessionId(),At.info("Test run started",{testId:e.testId,resultId:e.testResultId,seleniumSession:t.getSessionId()}),await e.clearTestResult()}handleQuarantine(e){if(!Je({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}handleMobileTest(e){let t=!e.isFFAllowAppFromDeviceEnabled&&e.isAppFromDevice,s=e.isAppForIosVirtualDevice;if(t||s){let n={name:e.testName,testId:e.testId,resultId:e.testResultId,runnerStatus:pe.SKIPPED,testStatus:e.testStatus,mobile:{isAppFromDevice:t,isAppForIosVirtualDevice:s}};return this.onTestIgnored(this.id,n),n}}setSessionTimeout(){return this.options.mode===X.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 s=(o=this.userData)==null?void 0:o.projectId,n;try{_("before getSlotOnce retries");let i=0,a=await(0,cd.default)(async()=>{let d=Date.now();try{return await te(this.getSlotOnce(e),this.options.getBrowserTimeout,Be.GET_BROWSER_TIMEOUT_MSG)}catch(m){let p={testId:this.testId,testResultId:this.testResultId,executionId:this.executionId};throw m instanceof fr?At.info("could not get grid slot due to concurrency issue",p):At.error("error getting grid slot",{error:m,...p}),i++,await se(this.options.getBrowserTimeout-(Date.now()-d)),m}},{retries:this.options.getBrowserRetries-1,minTimeout:0,factor:1});_("after getSlotOnce retries"),_("before getBrowserOnce retries");let c=this.options.getBrowserRetries-i;if(!c)throw new Error("No free browser slots in desired grid");let l=0;n=await(0,cd.default)(async()=>{let d=Date.now(),m=this.initPlayer(e);try{a=await Rf(this.options,a,this.testRunConfig,this.lambdatestService,{maxRetries:c,currentRetry:l+1}),this.options.gridData.provider=a.provider,this.options.gridData.host=a.host,this.options.gridData.failedGetBrowserAttempts=l;let p=this.setSessionTimeout();_("before getBrowserOnce");let f=await te(this.getBrowserOnce(e,t,m,a),p,Be.GET_BROWSER_TIMEOUT_MSG);return _("after getBrowserOnce"),Q.onGetBrowserSuccess(this.id,s),m||f}catch(p){let f={provider:a.provider,host:a.host,failedGetBrowserAttempts:l,id:this.options.gridData.gridId,type:a.type},h=this.options.mode===X.APPIUM?"device":"browser";throw At.error(`error getting ${h} from grid`,{error:p,testId:this.testId,testResultId:this.testResultId,executionId:this.executionId,grid:f}),Q.onGetBrowserFailure(this.id,s,++l),m.onDone(),p instanceof lt||await se(this.options.getBrowserTimeout-(Date.now()-d)),p}},{retries:c-1,minTimeout:0,factor:1}),_("after getBrowserOnce retries")}catch(i){throw await $n(this.id,this.releaseSlotOnTestFinished,s,n),i instanceof lt?i:i instanceof ut?new qt(i,ad):new qt(i,Vt)}return n}async runTest(e,t,s){var d;_("inside runTest");let n=(d=this.userData)==null?void 0:d.projectId,o=this.handleQuarantine(e);if(o)return o;let i=Xs(this.options)&&this.handleMobileTest(e);if(i)return i;_("before runTest onTestStarted");let a=e.getAppSource,c=await this.onTestStarted(this.id,e.testId,e.testResultId,s,e.retryKey,a);e.baseUrl=c.config.baseUrl;let l=await this.getTestPlayer(e,t);try{return await this.runTestOnce(e,l)}finally{await $n(this.id,this.releaseSlotOnTestFinished,n,l)}}async runTestCleanup(){}async onQueueCompleted(){}run(){var m,p;let e=()=>process.nextTick(()=>this.run()),t=async(f,h,g)=>{var x;if(Je(f,this.options)||!h.isFFAllowAppFromDeviceEnabled&&h.isAppFromDevice||h.isAppForIosVirtualDevice)return e();let y=h.sessionId,T=k=>g==null?void 0:g.message.includes(k),A=g&&g instanceof qt,b=g&&(T(_y)||T(Oy)),v=!f.success&&(h.hasMoreRetries()&&!A&&!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()&&!((x=this.options.lightweightMode)!=null&&x.general)&&await se(PS),await this.runTestCleanup(),v?(b?await h.startNewTimeoutRetry():await h.startNewRetry(),At.info(`retry test id: ${this.testId} name: ${this.testName} again`,{testId:this.testId,testName:this.testName,isTimeoutErrors:b,testRetryKey:k,totalRetries:h._totalRetryCount}),this.testResultId=h.testResultId,await l(h,v)):await e()}catch(k){if(k instanceof Ot)return;At.error("failed to process test result",{error:k}),e();return}},s=()=>`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. ${sc()?"(Internal: network connectivity test failed)":""}`,n=(f,h)=>{let g=this.options.mode===X.APPIUM?"device":"browser";if(!h&&M.flags.errorMessageOnBadNetwork.isEnabled())return{errorType:RS,reason:s()};let y=f instanceof Error?f.message:f;if(y.includes(SS))return{errorType:fa,reason:`Test couldn't get ${g}`};if(y.includes(_y))return{errorType:fa,reason:"Test couldn't be started"};if(y.includes(Oy)){if(!this.testRunTimeout)return{errorType:fa,reason:"Test timeout reached: test is too long"};let T=Ly.default.duration(this.testRunTimeout,"milliseconds"),A=Math.floor(T.asMinutes()),b=T.seconds(),v=A>0?` ${A} min`:"",x=b>0?` ${b} sec`:"";return{errorType:fa,reason:`Test timeout reached (timeout:${v}${x}): test is too long`}}if(f instanceof qt&&f.type){if(f.type===ad)return{errorType:ad,reason:`Test couldn't get ${g} from grid - ${f.message}`};if(f.type===Vt)return{errorType:Vt,reason:`Failed to create new session - ${f.message}`}}return"type"in f&&f.type===IS?{errorType:Vt,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 _t?{errorType:Vt,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:Vt,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:Vt,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:Vt,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:Vt,reason:`Session could not be created, please check that the ${g} you requested is supported in your plan`}:{errorType:xS,reason:y}},o=async(f,h)=>{var b;let g=await rc();!g&&M.flags.warnOnBadNetwork.isEnabled()&&console.warn(s()),At.warn("error on run",{err:f});let y=(b=this.userData)==null?void 0:b.projectId,{errorType:T,reason:A}=n(f,g);Qc(y,this.testResultId,this.testId,{status:Hs.COMPLETED,success:!1,reason:A,errorType:T,testRetryKey:h.retryKey,setupStepResult:{status:Hs.COMPLETED,success:!1,reason:A,errorType:T}},h.remoteRunId),await t(CS(this.testId,this.testName,this.testResultId,A),h,f)},i=async(f,h)=>{var b;let g=this.testId,y=this.testResultId,T=(b=this.userData)==null?void 0:b.projectId,A=this.branch;if(!g||!y||!T||!A)return At.warn("Test failed. Not enough data to recover results via API",{err:f}),o(f,h);try{let v=await Ar(g,y,T,A);if(At.warn("Test failed. Got results via API",{err:f,testResult:v}),v&&v.status===Hs.COMPLETED)return await t(v,h);throw f}catch(v){return v!==f&&At.error("Failed to fetch test results from server",{testId:g,resultId:y,projectId:T,branch:A,err:v}),o(f,h)}},a=this.options.disableSockets||((m=this.options.lightweightMode)==null?void 0:m.disableResults)&&(this.options.useChromeLauncher||this.options.mode!=="extension"),c=this.options.disableSockets||((p=this.options.lightweightMode)==null?void 0:p.disableRemoteStep),l=async(f,h)=>{try{await Promise.all([!c&&Ns.joinToRemoteStep(this.testResultId),!a&&Qe.joinToTestResult(this.testResultId,this.testId)]),f.validateRunConfig();let g=await this.runTest(f,this.customExtensionLocalLocation,h),y=await t(g,f);return _("After onRunComplete"),y}catch(g){return i(g,f)}finally{c||Ns.unlistenToRemoteStep(this.testResultId)}},d=this.executionQueue.getNext();return d?(this.testId=d.testId,this.testName=d.testName,this.testResultId=d.testResultId,this.overrideTestConfigId=d.overrideTestConfigId,this.testRunConfig=d.runConfig,this.branch=d.branch,l(d)):this.onQueueCompleted()}}});var Ny={};W(Ny,{WorkerSelenium:()=>ud});function _S(r){let{playback:e}=re().commonConstants;function t(s){r.playbackManager.on(s,()=>{_(`Got event ${s}`)})}Object.values(e).forEach(t)}var ga,kS,ud,Dy=w(()=>{"use strict";U();Oe();ha();j();$t();q();Ko();ae();Iu();aa();Ee();ga=R("worker-selenium"),kS=1e9,ud=class extends Ct{initPlayer(t){return new Fn(this.id,t.runParams,this.options.shouldMonitorPerformance,t.automationMode,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,s,n,o){_("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 l=this.options.useLocalChromeDriver;await i.init(this.options,this.testName,this.testRunConfig,o,s,this.executionId,this.testResultId,t.seleniumPerfStats,l,this.lambdatestService),_("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:l}),_("in WorkerSelenium after addTab"),l||await this.windowUtils.navigate(c,kS),await this.windowUtils.validatePageIsAvailable(),_("in WorkerSelenium after navigate")}catch(l){let d=l.message&&(l.message.startsWith("Malformed URL")||l.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=l.message&&l.message==="invalid argument";throw l instanceof lt||d||m?new lt(`Page '${c}' is not available`):(ga.error("failed to navigate to page",{err:l}),l)}}async runTestOnce(t,s){var d;let n=re(),{driver:o,sessionPlayer:i}=s,a=n.manifestVersion||"runner";Q.onWaitToTestComplete(this.id,this.isCodeMode),_S(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 bn(this.options))[this.testId]);let l=async()=>{if(t.automationMode==="codeful"){i.callOrderScheduler?i.callOrderScheduler.schedule(()=>t.waitForExecutionStartedFinished(),{key:`test-result:${this.userData.projectId}:${this.testResultId}`}):await t.waitForExecutionStartedFinished(),_("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 te(p.then(f=>(_("right after playTestByCode"),f)),this.testRunTimeout,Be.TEST_COMPLETE_TIMEOUT_MSG).catch(f=>{var h;throw f instanceof J&&((h=i.stopPlayingOnTestTimeout)==null||h.call(i)),f}).then(f=>(f.resultId=this.testResultId,f))}let m=!1;return te(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,Be.TEST_COMPLETE_TIMEOUT_MSG).catch(p=>{var f;throw p instanceof J&&((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()||(ga.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&&(ga.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(),_("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,s),_("right after super.runTestOnce in workerSelenium");let m=await l();return _("right after runSeleniumTest"),m}catch(m){throw ga.error("failed to run test once",{err:m}),m}}}});var ya,My=w(()=>{"use strict";ya=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,s,n={}){}addOpenerStepId(e,t,s){}addOpenerStep(e,t,s){}fixMissingMainTab(e){}buildTabInfo(e,t,s,n,o={}){}addTab(e,t,s,n,o={}){}getTabUtilsByTabIdAndSessionId(e,t){}getTabUtilsByTabId(e){}getTabInfo(e,t){}getTabUtils(e,t){}exactUrlMatch(e,t,s){}singleExactMatchForParts(e,t,s,n){}isSameTab(e,t,s){}getMainTabInfo(e){}getMainTabUtils(e){return{}}removeTabInfo(e,t){}getMainTabId(e){}isMainTabExists(e){}clearAllTabs(e){}clearNonMainTabs(e){}switchTab(e,t,{forceSwitch:s}={forceSwitch:!1}){}getTabDetails(e,t,s={}){}getUnregisteredTabId(e){}waitForTabToOpen(e){}tryToAddTab(e,t){}addNewPopup(e,t){}waitToPendingTabs(e,t){}isMainTabIncognito(){}isInvalidStepVersion(e){}getTabIdByTabInfo(e,t){}}});function Fy(r){class e{constructor(s,n){this.frameManager=s,this.locateElementPlayer=n}foundFrameCallback(s,n,o){return dd.info("foundFrameCallback-mock invoked"),{}}locate(s,n,o,i,a,c){return dd.info("locate-mock invoked"),{}}findFrame(s,n,o,i){return dd.info("findFrame-mock invoked"),{}}}return e}var dd,Uy=w(()=>{"use strict";j();dd=R("mobile-frame-locator-mock")});var OS,LS,ba,jy=w(()=>{"use strict";OS=E(require("webdriverio"));My();Au();j();Cu();ku();Ee();As();Bu();Uy();Wu();Gu();LS=R("appium-test-player"),ba=class{constructor(e,t,s,n="code",o=OS,i,a){let{sessionPlayer:c,commonConstants:l,stepActionFactory:d,MobileLocateElementPlayer:m}=re();this.driver=o,this.id=e;let p=new Ps(this.driver);this.stepActionFactory=new d(p),ia(this.driver,this.stepActionFactory),this.tabService=new ya(this.driver),this.windowCreationListener=Mn,this.playbackTimeoutCalculator=new Ls(Oi()),this.tabService.createSesion(e);let f=Fy(this.driver);this.sessionPlayer=new c(e,this.tabService,null,null,f,_i,m,null,p,this.stepActionFactory,this.playbackTimeoutCalculator,Qe.getSocket(),n),this.sessionPlayer.setShouldMonitorPerformance&&this.sessionPlayer.setShouldMonitorPerformance(s),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=a,this.sessionPlayer.playbackManager.userParamsData=t||{},this.onStepCompleted=this.onStepCompleted.bind(this),this.sessionPlayer.playbackManager.on(l.playback.RESULT,this.onStepCompleted)}onStepCompleted(e,t,s,n){}async onDone(){try{await this.driver.activeSession.deleteSession()}catch(e){LS.error("error while deleting appium session",{error:e})}finally{let{commonConstants:e}=re();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 $y={};W($y,{WorkerAppium:()=>pd});var By,Wn,pd,Wy=w(()=>{"use strict";By=E(require("jsdom"));le();Te();vi();ha();j();$t();jy();Ee();Wn=R("worker-appium"),pd=class extends Ct{initPlayer(e){return new ba(this.id,e.runParams,this.options.shouldMonitorPerformance,e.automationMode,void 0,e.retryCount,e.previousTestResultId)}async getBrowserOnce(e,t,s,n){Q.onGetSession(this.id,this.testName,e.runMode);let{driver:o}=s,i=this.options.projectData.type,a=await e.getNativeAppData(),c=i==="android"?e.androidActivityWait:null,l=e.nativeAppLink;if(this.options.appId){let{project:d,appId:m}=this.options,p=await $c({appId:m,projectId:d});if(!p)throw Wn.error("mobile app not found",{appId:m,projectId:d}),new Error("mobile app not found");l=`${ge}/storage${p.filePath}?access_token=${this.options.authData.token}`}try{let d=uh({projectType:i,gridInfo:n,testRunConfig:this.testRunConfig,nativeApp:a,options:this.options,appPath:l,androidActivityWait:c}),m=await o.remote(d);Object.assign(o,{activeSession:m}),await this.updateDeviceInfo(e,m),Wn.info(`init new appium session testName: ${this.testName}`,{sessionId:m.sessionId,testResultId:this.testResultId,nativeApp:a})}catch(d){throw Wn.error("failed to start application",{err:d}),d}}getServerAddressFromGrid(){let{host:e,port:t,accessToken:s}=this.options.gridData;return`https://${e}:${t}/v0/${s}/wd/hub`}async updateDeviceInfo(e,t){var f;let{executionId:s,testId:n,testResultId:o}=e,{project:i,projectData:{type:a}={},company:{companyId:c=""}={},gridData:{gridId:l=""}={}}=this.options,d=await cl({projectId:i,projectType:a,companyId:c,gridId:l,selectors:`device_id:${t.capabilities.udid}`}),p={name:(f=d==null?void 0:d[0])==null?void 0:f.name,model:t.capabilities.deviceModel,osVersion:t.capabilities.platformVersion,udid:t.capabilities.udid,osType:t.capabilities.platformName,scaleFactor:t.capabilities.pixelRatio,virtual:!1};await cs(i,s,n,o,"RUNNING",{device:p})}getDirectAddressConnection(e){let{directConnectProtocol:t,directConnectHost:s,directConnectPort:n,directConnectPath:o}=e;if(t&&s&&n&&o)return`${t}://${s}:${n}${o}`}async runTestOnce(e,t){let s=re(),{sessionPlayer:n}=t,o=t.driver,i=s.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 By.JSDOM("").window.DOMParser;n.playbackManager.appiumApi=new s.AppiumApi(a,o.activeSession.sessionId,c),s.localAssetService&&s.localAssetService.initialize({serverUrl:this.options.localRCASaver});let l=async()=>{try{let m=await new Promise((f,h)=>n.playByTestId(this.testId,this.executionId,this.testResultId,this.baseUrl,this.userData,i,f,!1,this.overrideTestConfigId,this.branch,!1,e.remoteRunId,void 0,void 0,void 0).catch(h));return s.localAssetService&&await s.localAssetService.drain(),m.stepsResults=null,m.resultId=this.testResultId,{...m,...e.seleniumPerfStats.getStats()}}catch(d){throw Wn.error("error while running appium tests",{err:d}),d}};try{return await super.runTestOnce(e,t),await l.call(this)}catch(d){throw Wn.error("failed to run test once",{err:d}),d}}}});var wa,Gy=w(()=>{"use strict";U();An();q();wa=class{constructor(e){this.driver=new Nr,this.id=e}async onDone(){try{await te(this.driver.end(),12e4)}catch(t){t instanceof J&&await this.driver.forceEnd().catch(()=>{})}this.driver=null}getSessionId(){return this.driver.getSessionId()}}});var Vy,Ta,qy=w(()=>{"use strict";Vy=E(require("ws"));U();Ta=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 Vy.default(this._cdpUrl,{timeout:e}),s=pt(o=>{t.once("open",o)}),n=pt(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",o=>this.onCDPMessage(o)),this._cdpWs=Promise.race([s,n]).then(()=>t),this._cdpWs}onCDPMessage(e){var n;let t=JSON.parse(e),s=this._cdpCallbacks.get(t.id);s&&(this._cdpCallbacks.delete(t.id),t.error?s.reject(new Error(t.error)):(n=t.result.exceptionDetails)!=null&&n.exception?s.reject(new Error(t.result.exceptionDetails.exception.description)):s.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,s){let n=await this.initCDPWebsocket();this._lastWsId||(this._lastWsId=0);let o=this._lastWsId++,i=new Promise((c,l)=>{this._cdpCallbacks.set(o,{resolve:c,reject:l})}),a={method:e,params:t,id:o};return s&&Object.assign(a,{sessionId:s}),n.send(JSON.stringify(a)),i}}});var Ea,md,va,Hy=w(()=>{"use strict";U();Ea=E(require("chrome-launcher"));vi();qy();hn();md=class{constructor(e){this.sessionId=e,this.cdpTestRunner=new Ta}async init(e,t,s,n,o,i,a){var m,p;let c=Ti(e,t,s,n,o,i,a),l=[...((m=c.desiredCapabilities)==null?void 0:m.chromeOptions.args)??[],...((p=c.capabilities)==null?void 0:p.alwaysMatch["goog:chromeOptions"].args)??[],...Ea.Launcher.defaultFlags().filter(f=>f!=="--disable-extensions")];this.chrome=await Ea.launch({chromeFlags:l,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let d=await Rr(`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}},va=class{constructor(e){this.sessionId=z(),this.driver=new md(this.sessionId),this.id=e}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var zy={};W(zy,{WorkerExtension:()=>Gn});var wt,Gn,fd=w(()=>{"use strict";Oe();q();ha();U();j();$t();ae();Gy();Hy();wt=R("worker-ext"),Gn=class extends Ct{initPlayer(){return this.options.useChromeLauncher?new va(this.id):new wa(this.id)}async _getBrowserOnce(e,t,s,n){var i;let{driver:o}=s;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 wt.error("failed to get browser",{err:a,gridInfo:n,testId:e.testId,resultId:e.testResultId}),a}}async getBrowserOnce(e,t,s,n){return Q.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,s,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async runTestOnce(e,t){let{testResultId:s,executionId:n,testId:o}=this;_("WorkerExtension runTestOnce");let i=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await te(e.runTestUsingCDP(d.cdpTestRunner),m,Be.TEST_START_TIMEOUT_MSG)}catch(p){if(!(p instanceof J))throw p;return wt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:s}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,p)=>{try{let f=await d.url(m);return p.driverUrlFinished=!0,f}catch(f){throw wt.error("error from driver.url",{err:f,testResultId:s,executionId:n,testId:o,url:m,urlLength:m.length}),f}},c=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},l=async()=>{var f;if(_("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 wt.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();Q.onWaitToTestStart(this.id);try{await te(Promise.all([a(t.driver,h,p),c(p)]),this.options.testStartTimeout,Be.TEST_START_TIMEOUT_MSG)}catch(y){if(!(y instanceof J))throw y;wt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:s,executionId:n,testId:o,...p}),await e.checkViaRestAPIIfTestStarted()}Q.onWaitToTestComplete(this.id,this.isCodeMode);let g=y=>{throw e.onCompletedCleanup(),wt.warn("on browser closed error detected",{err:y,testResultId:s,executionId:n,testId:o}),m.unregisterToClosedBrowser(g),y.type=zs.BROWSER_CLOSED,y};m.registerToClosedBrowser(g);try{let y=await te(e.onCompleted(),this.testRunTimeout,Be.TEST_COMPLETE_TIMEOUT_MSG);m.unregisterToClosedBrowser(g),this.lambdatestService.isLambdatestRun()&&await m.executeJS(`lambda-status=${y.success?"passed":"failed"}`).catch(()=>{}),m.isAlive()||(wt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.gridIssues="could not validate grid is alive");let T=m.maxKeepAliveGap();return T>=3e4&&(wt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),y.keepAliveIssue=T),{...y,...e.seleniumPerfStats.getStats()}}catch(y){throw wt.warn("timeout wait until test completed",{err:y,testResultId:s,executionId:n,testId:o}),new Error(y)}finally{m.unregisterToClosedBrowser(g)}}catch(h){throw wt.warn("failed to start url",{err:h}),new Error(h)}};t.driver.start();try{return await super.runTestOnce(e,t),_("WorkerExtension super.runTestOnce"),await l()}catch(d){throw wt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var Ky={};W(Ky,{WorkerExtensionSingleBrowser:()=>hd});var NS,DS,hd,Jy=w(()=>{"use strict";Oe();U();j();id();$t();fd();NS=R("base-worker"),DS=500,hd=class extends Gn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await $n(this.id,this.releaseSlotOnTestFinished,t,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,s,n,o){return Q.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,s,n,o)}async getTestPlayer(t,s){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(NS.warn("WorkerExtensionSingleBrowser is releasing a dead player",{workerId:this.id}),await this._releasePlayer()),this.testPlayer||(this.testPlayer=await super.getTestPlayer(t,s)),this.testPlayer}async runTest(t,s,n){let o=this.handleQuarantine(t);if(o)return o;_("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,s);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 se(DS)}}});function MS(r,e){e===0?r():setTimeout(r,e*Gd)}var gd,Sa,Yy=w(()=>{"use strict";An();U();le();Oe();su();It();wu();q();j();ae();ky();gd=R("parallel-worker-manager"),Sa=class{constructor(e){this.customExtensionLocalLocation=e}getWorkerType(e){switch(e){case X.SELENIUM:return(Dy(),ie(Ny)).WorkerSelenium;case X.APPIUM:return(Wy(),ie($y)).WorkerAppium;default:return Ii.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(Jy(),ie(Ky)).WorkerExtensionSingleBrowser:(fd(),ie(zy)).WorkerExtension}}createWorkers(e,t,s,...n){let o=this.getWorkerType(s),i=()=>{try{return _("before new Worker",s),new o(t,...n)}finally{_("after new Worker",s)}};return Array.from(new Array(e),i)}async runTests(e,t,s,n,o,i,a,c,l){if(e&&e.length===0)return;let d=!1,m=0,p=f=>new Promise(h=>{var kt,qr,C,L,F,G;let g=o.project,y=new ma(s,n,e,o,i,t),T={},A=e.length,b=(kt=o.company)==null?void 0:kt.companyId,v=(qr=o.company)==null?void 0:qr.name,x=o.source||"cli",k=o.user,D=(C=o.company)==null?void 0:C.planType,S=(L=o.company)==null?void 0:L.isStartUp,O=(F=o.projectData)==null?void 0:F.name,P=(G=o.projectData)==null?void 0:G.type,N=o.lightweightMode,B=vr(o),V=(me,et,we,Oa,Vn,La)=>(m++,jf({executionId:s,projectId:g,testId:et,resultId:we,companyId:b,companyName:v,projectName:O,companyPlan:D,sessionType:B,source:x,user:k,lightweightMode:N,isStartUp:S,projectType:P,appSource:La}),t.testStartAndReport(me,s,we,Oa,Vn)),Y=async(me,et,we,Oa,Vn,La)=>{var xd,Pd,Ad;m--;let Tt={...(N==null?void 0:N.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?(Tt.gridName=o.grid||((xd=o.gridData)==null?void 0:xd.name),Tt.gridType=(Pd=o.gridData)==null?void 0:Pd.type,Tt.gridProvider=(Ad=o.gridData)==null?void 0:Ad.provider):o.useLocalChromeDriver?(Tt.gridName="local-chrome-driver-from-options",Tt.gridType="local-chrome"):o.useChromeLauncher?(Tt.gridName="chrome-launcher-from-options",Tt.gridType="local-chrome"):o.browserstack?Tt.gridName="browserstack-from-options":o.saucelabs&&(Tt.gridName="saucelabs-from-options"),await t.testEndAndReport(me,we,s,Oa,Vn,Tt).catch(Zb=>gd.error("testEndAndReport threw an error",{err:Zb})),Vn)return;T[we.resultId]=we,Bf({executionId:s,projectId:g,testId:et,resultId:we.resultId,result:we,companyId:b,companyName:v,projectName:O,companyPlan:D,sessionType:B,source:x,user:k,lightweightMode:N,logger:gd,isStartUp:S,projectType:P,appSource:La}),l&&!we.success&&(y.stop(),d=!0),(Object.keys(T).length===A||d&&m===0)&&h(T)},Z=(me,et)=>{T[et.resultId]=et,t.onTestIgnored(me,et.resultId),m--,(Object.keys(T).length===A||d&&m===0)&&h(T)},fe=(me,et)=>t.onGridSlot(me,et);o.userData={loginData:Object.assign({},Ut(),{refreshToken:ko(),authData:Ut(),token:f}),projectId:o.project,company:o.company,servicesUrl:ge},_("in localStrategy before createWorker"),this.createWorkers(c,y,o.mode,o,this.customExtensionLocalLocation,s,V,Y,fe,Z).forEach((me,et)=>{_("before schedule worker.run after createWorkers"),MS(()=>{_("right before worker.run"),me.run()},et)})});try{let f=await Jt(),h=await p(f);if(d)throw new Ot;return h}catch(f){throw gd.error("failed running parallel workers",{executionId:s,err:f}),f}}}});var Ra,Xy=w(()=>{"use strict";Ni();Ra=class extends ir{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(s){e(s.data)}this._socket.on("testResult:changes",t.bind(this))}}});var yd,bd,Ia,Qy=w(()=>{"use strict";kn();ae();ye();Xy();({TEST_RESULT_CREATED:yd,TEST_RESULT_UPDATED:bd}=rt),Ia=class{constructor(){M.flags.useNewWSCLI.isEnabled()||(this.realDataServiceSocketIO=new Ra)}init(e){return M.flags.useNewWSCLI.isEnabled()?Promise.resolve():this.realDataServiceSocketIO.init(e)}joinToTestResultsByRunId(e,t){if(M.flags.useNewWSCLI.isEnabled())return $e.addFilter(e,{runId:e},[bd,yd],!0);this.realDataServiceSocketIO.joinToTestResultsByRunId(e,t)}stopListenToTestResultsByRunId(e){if(M.flags.useNewWSCLI.isEnabled()){$e.removeFilter(e,[bd,yd]);return}this.realDataServiceSocketIO.stopListenToTestResultsByRunId(e)}listenToTestResultsByRunId(e,t){if(M.flags.useNewWSCLI.isEnabled()){$e.listenTo(e,[bd,yd],s=>s.runId===e,s=>t(s));return}this.realDataServiceSocketIO.listenToTestResultsByRunId(t)}}});async function tb(r,e){var t;if((t=r.lightweightMode)!=null&&t.onlyTestIdsNoSuite&&r.testId)return{tests:[r.testId.map(n=>({testId:n,testConfig:{},resultId:z()}))]};if(r.files.length>0){let{buildCodeTests:s}=await Promise.resolve().then(()=>(Hu(),Zg)),n={};if(r.webpackConfig){let o=eb.join(process.cwd(),r.webpackConfig);n=require(o)}return s(r.files,n,{baseUrl:r.baseUrl})}return await Bc({projectId:r.project,labels:r.label,testIds:r.testId,testNames:r.name,testConfigNames:r.testConfigNames,suiteNames:r.suites,suiteIds:r.suiteIds,branch:e,rerunFailedByRunId:r.rerunFailedByRunId,testConfigIds:r.testConfigIds,intersections:r.intersections})}function wd(r){let e=Object.keys(r).length,t=Object.keys(r).reduce((s,n)=>s+(r[n].success===!0?1:0),0);return e===t}async function Td(r,e){let t=r.mode==="extension"?["edge-chromium","chrome"]:["firefox","chrome","edge-chromium","safari","safari technology preview","browser","android","ios","iphone","ipad"],s=Zy.difference(Ks(r,e),t);if(s.length>0)throw ht("invalid-config-run",{browser:s.join(", "),mode:"runner"}),new I(`browser type <${s}> is not supported in ${r.mode} mode.`);return e}var Zy,eb,rb=w(()=>{"use strict";Zy=E(require("lodash")),eb=E(require("path"));U();ds();Te();q()});var Wr,sb,FS,xa,US,Pa,nb=w(()=>{"use strict";Wr=E(require("lodash"));U();j();le();ae();Oe();gs();Bl();su();Te();It();$t();rh();q();Yy();Qy();rb();({testRunStatus:sb,CLI_MODE:FS}=Mt),xa=R("test-plan-runner"),US=1e3*60*5,Pa=class{constructor(e){this.startTime=Date.now();this.workerManager=new Sa(e)}async runTestAllPhases(e,t,s,n,o,i,a,c){let l={},d=Ut(),m=async()=>{let y=o.beforeParallel||1,T=!0,A=await this.workerManager.runTests(e,c,i,a,o,n,d,y,T);Object.assign(l,A)},p=async()=>{let y=so||o.parallel,T=!1;_("right before this.workerManager.runTests");let A=await this.workerManager.runTests(t,c,i,a,o,n,d,y,T);_("right after this.workerManager.runTests"),Object.assign(l,A)},f=async()=>{let y=o.afterParallel||1,T=!1,A=await this.workerManager.runTests(s,c,i,a,o,n,d,y,T);Object.assign(l,A)},h=vr(o);$f({executionId:i,projectId:o.project,sessionType:h}),_("right before runBeforeTests");try{return await m(),_("right before runTestPlanTests"),await p(),_("right after runTestPlanTests"),await f(),l}catch(y){if(xa.error("error running test plan",{err:y}),y instanceof Ot)return c.markAllQueuedTests(i,pe.ABORTED,"aborted",!1);throw y}finally{await g()}async function g(){var T,A,b,v;if((T=o.lightweightMode)!=null&&T.disablePixelValidation)return;if(o.mode===FS.SELENIUM){let{EyeSdkBuilder:x}=(await Promise.resolve().then(()=>(Ee(),Cr))).getSessionPlayer();await x.closeBatch(i);return}let y;try{if(!((v=(b=(A=o.company)==null?void 0:A.activePlan)==null?void 0:b.premiumFeatures)!=null&&v.applitools)||(y=await sl(o.project),Wr.default.isEmpty(y)||!i))return;let{runKey:x,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:x}})}catch{}}}async initRealDataService(e){let t=new Ia;return await t.init(e),t}async listenToTestCreatedInFile(e,t,s,n){let o={};e.joinToTestResultsByRunId(s,t);let i=!0;return await new Promise(c=>{let l=d=>{i=!1,c(d)};e.listenToTestResultsByRunId(s,d=>{let m=d.id;if(!n.getTestResult(m)){let h=o[m],g=Wr.default.merge({},h,d,{resultId:m});if(o[m]=g,!h||h.status!==d.status){let T=(n.getTestResult(g.parentResultId)||{workerId:1}).workerId;[sb.RUNNING].includes(d.status)&&Q.onTestStarted(g,T),[sb.COMPLETED].includes(d.status)&&(g.duration=g.endTime-g.startTime||0,Q.onTestFinished(g,T))}}let p=!Object.values(o).some(h=>["QUEUED","RUNNING"].includes(h.runnerStatus)),f=!Object.values(n.getAllTestResults()).some(h=>["QUEUED","RUNNING"].includes(h.status));if(p&&f)return l(Object.values(o));if(f&&!p)return se(1e4).then(()=>{i&&l(o)})})})}async initRealDataServiceAndListenToTestsCreatedInFile(e,t,s){let n=await this.initRealDataService(e);return this.listenToTestCreatedInFile(n,e,t,s)}async runTestPlan(e,t,s,n,o,i,a,c){var k,D,S;let l=z(),d=n.project;Ha(l),e.forEach(O=>Object.assign(O,{isBeforeTestPlan:!0})),s.forEach(O=>Object.assign(O,{isAfterTestPlan:!0}));let m=[...e,...t,...s],p=new wi(m,n,i,a),f=Wr.default.chain(m).map(O=>{var P;return((P=O.overrideTestConfig)==null?void 0:P.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=n.files.length>0,y=(k=n.lightweightMode)!=null&&k.onlyTestIdsNoSuite?[]:m.map(O=>O.name),T=(D=n.lightweightMode)!=null&&D.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:s}:p.executionStart(l,d,this.startTime,o,y),A;g&&(A=this.initRealDataServiceAndListenToTestsCreatedInFile(d,l,p)),_("before testListInfoPromise");let b=await T;(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite||Q.onTestPlanStarted(b.beforeTests,b.tests,b.afterTests,o,l,c,h,g),_("before runTestAllPhases");let v=await this.runTestAllPhases(b.beforeTests,b.tests,b.afterTests,a,n,l,o||"All Tests",p),x=await te(A,US).catch(async()=>{var P;xa.warn("timed out waiting for child results on websocket. using REST fallback",{projectId:d,executionId:l});let O=await pn(d,"testResult",`runId=${l}&sort=runOrder`);return Wr.default.chain(((P=O==null?void 0:O.data)==null?void 0:P.docs)||[]).groupBy("parentResultId").omit("undefined").values().flatten().value()});return _("before executionEnd"),await p.executionEnd(l),_("after executionEnd"),{results:v,executionId:l,testPlanName:o,configName:h,childTestResults:x}}async runTestPlans(e,t){xa.info("start to run test plan",{options:Object.assign({},e,{token:void 0,userParamsData:void 0}),branchToUse:t});function s(d){return Wr.default.flattenDeep(Object.values(d)).reduce((m,p)=>m.concat(p.beforeTests,p.tests,p.afterTests),[])}let n={},o={},i=e.project,a=await jc(i,e.testPlan,e.testPlanIds,t,e.intersections),c=a.testPlans,l=a.testPlansData;if(!c||c.length===0)throw new I(`no test plan to run ${e.testPlan}`);if(!l||Object.keys(l).length===0){if(e.passZeroTests)return[];throw new I(`no test to run in test plan ${e.testPlan}`)}return await Td(e,s(l)),await de(c,async d=>{let m=d.testPlanId;n[m]={};let p=Object.assign({},e);p.baseUrl=e.baseUrl||d.startUrl,p.host=e.host,p.port=e.port,p.gridId=e.gridId||d.gridId,e.grid&&delete p.gridId,p.gridData=await vf(e,d);let f=p.overrideExecutionName||d.name;return await de(l[m],async h=>{let g=await this.runTestPlan(h.beforeTests,h.tests,h.afterTests,p,f,m,t),y=e.files.length>0;Q.onTestPlanFinished(g.results,d.name,this.startTime,g.executionId,!1,y,g.childTestResults),n[m][g.executionId]=g.results;let T=Object.keys(n[m]).map(x=>({executionId:x,status:wd(n[m][x])})),A=Object.keys(n[m]).map(x=>n[m][x]).reduce((x,k)=>Object.assign(x,k),{}),b=wd(A);Object.assign(o,A);let v=b?T[0].executionId:T.find(x=>!x.status).executionId;return await Mc(i,m,{success:b,executions:T,executionId:v}),g})})}async runAnonymousTestPlan(e,t){var a;xa.info("start to run anonymous",{options:Object.assign({},e,{token:void 0}),branchToUse:t}),_("before getSuite");let s=await tb(e,t);if(_("after getSuite"),!((a=s==null?void 0:s.tests[0])!=null&&a.length)){if(e.rerunFailedByRunId)throw new I("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new I("No tests to run")}t="branch"in s&&s.branch||t;let n=s;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new I("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 _("Right before validateConfig + runAnonymousTestPlan tests map"),await de(s.tests,async c=>{if(e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}await Td(e,c),_("right before runTestPlan");let l=await this.runTestPlan([],c,[],e,o,null,t,i);_("right after runTestPlan");let d=e.files.length>0;return await Q.onTestPlanFinished(l.results,o,this.startTime,l.executionId,i,d,l.childTestResults),l})}async run(e){let t=En(),s=[];Js(e)?s=await this.runTestPlans(e,t):s=await this.runAnonymousTestPlan(e,t);let n=Wr.default.flattenDeep(s);return _("right before onAllTestPlansFinished"),await Q.onAllTestPlansFinished(n),_("right after onAllTestPlansFinished"),n.map(o=>o.results).reduce((o,i)=>Object.assign(o,i),{})}}});var ib={};W(ib,{init:()=>nR,run:()=>rR});function BS(r){if(!vd.get(r,"company.activePlan.premiumFeatures.allowCLI")){let t=r.project;us(r.authData.uid,"cli-not-supported",{projectId:t}),console.warn("Testim CLI is not supported in this plan")}}async function $S(r){let e=r.project,t=await Wc(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(r.authData.uid,"execution-quota-surpassed",{projectId:e}),new Yr}function WS(r,e){var o,i,a,c;if(po(e.activePlan)==="free"){let l=r.parallel||1,d=((i=(o=e.activePlan)==null?void 0:o.premiumFeatures)==null?void 0:i.concurrency)||1;if(l>d)throw new I(`Cannot run with parallel ${r.parallel}. Max parallel value is ${d}`)}let s=r.retentionDays;if(!s)return;let n=(c=(a=e.activePlan)==null?void 0:a.premiumFeatures)==null?void 0:c.resultRetention;if(s>n)throw new I(`Retention days (${s}) cannot be greater than the company's retention days (${n}). Run aborted`)}async function GS(r){var e;if(!((e=r.lightweightMode)!=null&&e.disableQuotaBlocking))try{await Promise.all([$S(r),BS(r)])}catch(t){if([I,Yr].some(s=>t instanceof s))throw t;jS.error("could not validate cli account",{err:t})}}function VS(r){let e=Ut();return vm({userId:e.uid,name:e.uid,traits:{projectId:r,company:{id:r,lastCIRun:Math.floor(Date.now()/1e3)}}})}async function qS(r,{disableResults:e=!1,disableRemoteStep:t=!1}){if(M.flags.useNewWSCLI.isEnabled()&&!e&&!t)return $e.connect(r);if(!t){let{remoteStepService:s}=await Promise.resolve().then(()=>(da(),Sy));await s.init(r)}if(!e){let{testResultService:s}=await Promise.resolve().then(()=>(As(),Gh));s.init(r)}}function HS(r,e){let{branch:t,autoDetect:s}=r;if(If(e,s),!e&&!s)throw new I(`branch ${t} does not exist, run aborted.`)}async function zS(r){let{project:e}=r,t=En();vd.get(r,"company.activePlan.premiumFeatures.ttaForSalesforce")&&(r.sfdcCredential=await Nc({projectId:e,branch:t}))}function KS(r,e){let{onprem:t,id:s,storageBaseUrl:n,storageType:o,name:i,activePlan:a={}}=e;if(t){let{mode:m,extensionPath:p,ext:f,playerPath:h}=r;if([X.SELENIUM].includes(m)&&!h)throw new I("in selenium on prem mode --player-path must be provided");if(m==="extension"&&!p&&!f)throw new I("In extension on prem mode --ext or --extension-path must be provided")}let c=Boolean(a.isPoc),l=Boolean(a.isStartUp),d=po(a);d==="free"&&(r.newBrowserWaitTimeout=r.newBrowserWaitTimeout<ob?ob:r.newBrowserWaitTimeout),M.setCompanyId(s),M.setIsPOC(c),M.setIsStartUp(l),M.setPlanType(d),Pt.setPlanType(d),r.company={companyId:s,onprem:t,storageBaseUrl:n,storageType:o,name:i,planType:d,isPOC:c,isStartUp:l,activePlan:a}}function JS(r,e){if(zr){r.editorUrl=zr;return}r.editorUrl=e.editorUrl}function YS(r,e){r.allGrids=e}function XS(r,e){r.authData=e}function QS(r,e){let{id:t,name:s,type:n,defaults:o}=e;M.setProjectId(t),M.setProjectType(n),r.projectData={projectId:t,type:n,name:s,defaults:o}}async function ZS(r){r.gridData=await Ef(r)}async function eR(r){let{project:e}=r,t={projectId:e};r.overrideMappingFile&&(ht("user-override-file",t),r.mockNetworkRules=await lm(r.overrideMappingFile))}async function tR(r,e){_("in runner.js runRunner");let{project:t,remoteRunId:s,useLocalChromeDriver:n,useChromeLauncher:o}=r;s||(r.source=n||o?"cli-local":"cli"),await Ym(),_("in runner.js after checkNpmVersion"),await GS(r),_("in runRunner before tunnel.connect"),await ri(r),_("in runRunner after tunnel.connect");let a=await new Pa(e).run(r);return _("before tunnel.disconnect"),await si(r),await Tn.end(t),_("after tunnel.disconnect and gridService.keepAlive.end"),a}function sR(r){var e;Pt.shouldShowFreeGridRunWarning((e=r.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
|
|
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`),
|
|
566
|
+
`)}async function nR(r){var g,y,T;_("start runner init");let{project:e,lightweightMode:t,useChromeLauncher:s,mode:n,disableSockets:o}=r,i=M.fetch(),a=qS(e,{disableResults:o||Boolean((t==null?void 0:t.disableResults)&&(s||n!=="extension")),disableRemoteStep:o||Boolean(t==null?void 0:t.disableRemoteStep)});i.catch(()=>{}),a.catch(()=>{});let{authData:c,editorConfig:l,companyByProjectId:d,projectById:m,branchName:p,allGrids:f}=await mn(r);if(WS(r,d),await Promise.all([i,a]),r.browser&&M.flags.dec2022eolBrowsers.isEnabled()){let A=Zs(r.browser);if(A.eol)throw new I(`Unsupported browser: ${A.browserName}`)}_("after featureFlagsReady and socketConnected"),JS(r,l),KS(r,d),QS(r,m),HS(r,p),YS(r,f),XS(r,c),await zS(r),(g=r.lightweightMode)!=null&&g.disableLabs||await Ii.loadLabFeatures(m.id,d.activePlan),((y=r.lightweightMode)==null?void 0:y.type)==="turboMode"&&(M.flags.highSpeedMode.getValue()==="disabled"||r.company.planType==="free")&&delete r.lightweightMode,((T=r.lightweightMode)==null?void 0:T.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`),Tn.start(e),VS(e),await eR(r),await ZS(r),sR(r);let h=En();await Q.setOptions(r,h)}var vd,ob,jS,rR,ab=w(()=>{"use strict";vd=E(require("lodash"));U();_l();Ul();Oe();gs();ds();Bl();Te();It();j();$t();le();ae();q();nb();kn();wu();ye();Rn();pl();ob=30*60*1e3,jS=R("runner");rR=tR});function cb(r){r.get("/",(e,t)=>{let s=Ed();return t.status(200).json({success:!0,isTestimAgent:!0,startMode:s})}),r.get("/version",(e,t)=>{t.status(200).json({node:process.version,app:kl()})}),r.get("/loginInfo",(e,t)=>{try{let s=JSON.parse(Buffer.from(e.query.info,"base64").toString());vl({overwriteExisting:!1,projects:s}),t.status(200).end()}catch{t.status(400).end()}})}var lb=w(()=>{"use strict";ps();Sd();_l()});function pb(r){let e=(0,db.Router)();return e.post("/run",(t,s)=>{var a;if(!((a=t.body)!=null&&a.step)){s.status(400).send({error:"Missing step"});return}let{step:n,context:o,loginData:i}=t.body;r.webdriverApi||s.status(503).send({success:!1,reason:"Testim Agent was not started with Testim Start."}),t.setTimeout(0),ks(n,o,r.webdriverApi,i,void 0,"agent").then(c=>{s.status(200).send(c)}).catch(c=>{ub.error("failed to run hybrid code",{e:c}),s.status(500).send(Object.assign({success:!1,error:c}))})}),e.post("/abort",(t,s)=>{var n;if(!((n=t.body)!=null&&n.stepResultId)){s.status(400).send({error:"missing stepResultId"});return}try{td(t.body.stepResultId),s.status(204).end()}catch(o){if(o&&o.message==="No such stepResultId"){s.status(400).send({error:"No such stepResultId"});return}ub.error("hybrid code abort unexpected error",{e:o}),s.status(500).send({error:"unexpected error",info:`${o?o.message:"N/A"}`})}}),e}var db,ub,mb=w(()=>{"use strict";ra();db=require("express");j();ub=R("hybrid-router")});var fb,Gr,hb,gb=w(()=>{"use strict";fb=require("express");j();Qu();Gr=(0,fb.Router)(),hb=R("codim-router");Gr.get("/tests",async(r,e)=>{let t=await zu();e.json({tests:t,success:!0})});Gr.get("/locators",async(r,e)=>{let t=await Un(),s=await Ku(t,r.query.full);e.json({locators:t,contents:s,success:!0})});Gr.post("/locators",async(r,e)=>{if(!r.body){e.status(400).send({success:!1,reason:"missing body"});return}if(!r.body.locators){e.status(400).send({success:!1,reason:"missing locators"});return}let{locators:t,mergeIntoExisting:s}=r.body;await Yu(t,{mergeIntoExisting:s||!1}),e.status(200).send({success:!0})});Gr.get("/compile",async(r,e)=>{try{let t=await Xu(r.body.name);e.send({success:!0,code:t})}catch(t){hb.error(t),e.json({success:!1,reason:t.message})}});Gr.post("/saveTest",async(r,e)=>{if(!r.body){e.status(400).send({success:!1,reason:"missing body"});return}try{await Ju(r.body),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),hb.error(t)}})});var Rd,yb,Ds,Aa,bb=w(()=>{"use strict";Rd=E(require("chalk"));Mr();yb=require("express");j();q();Ds=R("cli-router"),Aa=(0,yb.Router)();Aa.post("/run",async(r,e)=>{let{code:t,stepId:s,incomingParams:n,context:o,testResultId:i,retryIndex:a,stepResultId:c,timeout:l,fileDataUrl:d}=r.body;if(typeof t!="string"||!s||!n||!o||!i||typeof a!="number"||!c||typeof l!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let m=await Es(t,s,n,o,i,a,c,l,d);m.success||(console.log(Rd.default.red(m.result.resultValue)),Ds.error("CLI Action Failure",{message:m.result.resultValue})),e.status(200).json({success:!0,data:m})}catch(m){Ds.error("failed to run cli code",{err:m}),console.log(Rd.default.red("failed to run cli code",m)),e.status(500).json({success:!1,code:"internal-error"})}});Aa.post("/install",async(r,e)=>{let{stepId:t,testResultId:s,retryIndex:n,packageData:o,stepResultId:i,timeout:a}=r.body;if(!t||typeof o!="object"||!s||typeof n!="number"||!i||typeof a!="number"){e.status(400).json({success:!1,code:"invalid-params"});return}try{let c=await vs(t,s,n,o,i,a);Ds.info("installed packages successfully"),e.status(200).json({success:!0,data:c})}catch(c){if(c instanceof dt){Ds.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 J){Ds.error("timeout installing node package"),e.status(200).json({success:!1,code:"timeout"});return}Ds.error("failed to install node packages",{err:c}),e.status(500).json({success:!1,code:"internal-error"})}})});var oR,wb=w(()=>{"use strict";Mr();j();bb();oR=R("cli-service");xh().catch(r=>oR.warn("failed to clean local package folder",{err:r}))});async function iR(r,e,t="utf8"){let s=Eb.join(vb.tmpdir(),r);return await Tb.promises.writeFile(s,e,t),s}async function cR({code:r}){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}});
|
|
@@ -574,13 +574,13 @@ Turbo mode will ignore step delays. Test artifacts like screenshots and logs wil
|
|
|
574
574
|
process.send({type: 'uncaughtException', error: {message: error.message, stack: error.stack}});
|
|
575
575
|
process.exit(1);
|
|
576
576
|
});
|
|
577
|
-
${
|
|
578
|
-
`,
|
|
577
|
+
${r};
|
|
578
|
+
`,s=await iR(`tst-playground-${Date.now()}.js`,t),n=aR(s);Vr[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{Vr[e]&&(Vr[e].kill(),delete Vr[e])}}async function Ib({code:r,type:e}){if(["playwright","puppeteer","selenium"].includes(e))return cR({code:r});throw new hr}async function xb(){Object.keys(Vr).forEach(r=>{Vr[r].kill(),delete Vr[r]})}var Tb,vb,Eb,Sb,Rb,Vr,aR,Pb=w(()=>{"use strict";Tb=E(require("fs")),vb=E(require("os")),Eb=E(require("path")),Sb=require("child_process");q();Rb=["playwright","selenium","puppeteer"],Vr={};aR=r=>{let e,t=new Promise(n=>{e=n}),s=(0,Sb.fork)(r,{stdio:["inherit","inherit","inherit","ipc"]});return t.child=s,s.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})})}),s.on("error",n=>{e({error:n})}),s.on("exit",n=>{e({exitCode:n})}),t}});var kb,Ca,_b,Ab,Cb,lR,Ob=w(()=>{"use strict";kb=require("express");j();q();le();Pb();Ca=(0,kb.Router)(),_b=R("playground-router"),Ab=["localhost","app.testim.io","playground.testim.io","staging.testim.io","app.staging.testim.cc","tta-crm.tricentis.com"],Cb=r=>{if(!r)return{};try{return new URL(r)}catch{return{}}},lR=(r,e,t)=>{if(eo)return t();let s=r.headers.referer,n=r.headers.origin;if(!s&&!n)return e.status(400).send();let o=Cb(s),i=Cb(n);return!Ab.includes(o.hostname)&&!Ab.includes(i.hostname)?e.status(400).send():t()};Ca.post("/run",[lR],async(r,e)=>{let t=r.body||{},{code:s,type:n}=t;if(!s||!Rb.includes(n)){e.status(400).send({success:!1,reason:"missing arguments"});return}try{await Ib(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}),_b.error(o)}});Ca.post("/stop",(r,e)=>{try{xb(),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),_b.error(t)}})});function Nb(r){let e=(0,Lb.Router)();return e.get("/cdp-url",(t,s)=>{if(!r){s.status(503).send({error:"Testim standalone browser is not running"});return}s.status(200).send({url:r.webdriverApi.cdpUrl})}),e.get("/status",(t,s)=>{if(!r){s.status(503).send({ok:!1});return}s.status(200).send({ok:!0})}),e}var Lb,Db=w(()=>{"use strict";Lb=require("express")});var jb={};W(jb,{orchestrateRoutes:()=>uR});function uR(r,e){let t=(0,Fb.default)();r(t),t.use(Id.default.urlencoded({extended:!1,limit:"50mb"})),t.use((0,Ub.default)()),t.use(Id.default.json({limit:"50mb"}));let n={methods:["GET","PUT","POST","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"],credentials:!0,maxAge:86400,origin:Le||eo?"*":["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,Mb.default)(n)),cb(t),t.use("/files",Gr),t.use("/playground",Ca),t.use("/cliJs",Aa),t.use("/standalone-browser",Nb(e)),t.use("/hybrid",pb(e)),t.use((o,i)=>{i.status(404).send("Endpoint Not Found")}),t}var Mb,Fb,Id,Ub,Bb=w(()=>{"use strict";Mb=E(require("cors")),Fb=E(require("express")),Id=E(require("body-parser")),Ub=E(require("compression"));lb();mb();gb();wb();Ob();Db();le()});var $b={};W($b,{init:()=>dR});async function dR({agentPort:r,agentBind:e,project:t,token:s,installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i},a){await mR({installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i,project:t}),await pR({agentPort:r,agentBind:e,project:t,token:s},a)}function pR({agentPort:r,agentBind:e,project:t,token:s},n){return new Promise((o,i)=>{let a=()=>{};t&&(em(t,s),a=f=>{f.use((h,g,y)=>{h.project=t,y()})});let c=(Bb(),ie(jb)).orchestrateRoutes(a,n),d=require("http").createServer(c);d.listen(r,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 I(`Port ${r} requires elevated privileges`));case"EADDRINUSE":return i(new I(`Port ${r} 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}`),fR()}})}function mR({installPlaygroundPlaywrightDeps:r,installPlaygroundPuppeteerDeps:e,installPlaygroundSeleniumDeps:t,project:s}){let n=[];return r&&n.push(he("playwright")),e&&n.push(he("puppeteer")),t&&n.push(he("selenium-webdriver"),xr({projectId:s})),Promise.all(n)}async function fR(){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 Wb=w(()=>{"use strict";It();q();yt();is()});var Jb={};W(Jb,{getStartedWithStart:()=>Ed,runAgentMode:()=>bR});async function bR(r){var s;let e;if(await Pr(r.playerLocation,r.canary),r.startTestimBrowser){await vR();try{e=await TR(r)}catch(n){throw(s=n==null?void 0:n.message)!=null&&s.includes("user data directory is already in use")?new I('Please close all chrome browsers that were opened with "testim start" and try again'):n}}let t=await Promise.resolve().then(()=>(Wb(),$b));return e!=null&&e.webdriverApi&&setTimeout(async()=>{setTimeout(()=>(aa(),ie(Vu)));let o=["webpack"];for(let i of o)await he(i,{silent:!0}).catch(()=>null)},6e3),t.init(r,e)}function Ed(){return zb}function Gb(r){try{return process.kill(r,0)}catch{return!1}}async function wR(r,e,t){let s=dr.join(Ft,`chrome-${an}-process`),n=3e3,o=()=>{Ce.rmSync(s,{recursive:!0}),console.log(`
|
|
579
579
|
|
|
580
|
-
Browser session ended`),process.exit(0)};if(await
|
|
581
|
-
`).map(o=>o.trim()),
|
|
582
|
-
`):""}overrideMimeType(t){if([Re.LOADING,Re.DONE].includes(this.readyState))throw new
|
|
583
|
-
${
|
|
580
|
+
Browser session ended`),process.exit(0)};if(await be(s)){let f=JSON.parse(Ce.readFileSync(s));if(Gb(f.pid)){let h=()=>Gb(f.pid)?setTimeout(h,n):o();return h(),{webdriverApi:f}}}let i=await Po();await be(Ms)||await Ce.promises.mkdir(Ms,{recursive:!0});let c=[...Kb(Ms,e,t,i).desiredCapabilities.chromeOptions.args,..._a.Launcher.defaultFlags().filter(f=>!["--disable-extensions","--disable-component-extensions-with-background-pages"].includes(f))],l={GOOGLE_API_KEY:"AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k",GOOGLE_DEFAULT_CLIENT_ID:"811574891467.apps.googleusercontent.com",GOOGLE_DEFAULT_CLIENT_SECRET:"kdloedMFGdGla2P1zacGjAQh"},d=`${r.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`,m=await _a.launch({chromeFlags:c,startingUrl:d,ignoreDefaultFlags:!0,userDataDir:Ms,chromePath:i,envVars:l}),p={port:m.port,pid:m.pid,cdpUrl:await Rr(`localhost:${m.port}`)};return Ce.writeFileSync(s,JSON.stringify(p)),m.process.once("exit",o),m.process.once("close",o),{webdriverApi:p}}async function TR(r){let e=`${Hd}/extension/testim-full-master.zip`,t=dr.basename(e),s=dr.join(Ft,t),n=dr.join(Ft,`${t}__unzipped__`),o=!(r.ext||r.extensionPath);if(o&&await be(s)){let f=await Ce.promises.stat(s);o=Date.now()-gR>f.mtimeMs}if(await Ce.promises.mkdir(Ft,{recursive:!0}),o){let f=(0,qb.default)("Downloading Testim Editor").start();await ze(e,s);try{await tt(s,n)}catch{await Ce.promises.rm(s,{recursive:!0,force:!0}),await ze(e,s);try{await tt(s,n)}catch{throw await Ce.promises.rm(s,{recursive:!0,force:!0}),f.fail("Failed to download Testim Editor"),new Error("Failed to download Testim Editor")}}finally{r.downloadBrowser||await Ce.promises.rm(n,{recursive:!0,force:!0})}f.succeed()}let i=r.extensionPath?null:(await Ce.promises.readFile(r.ext||s)).toString("base64");if(r.downloadBrowser)return await wR(r,i,n);await xr({projectId:r.project},{chromeBinaryLocation:r.chromeBinaryLocations});let a=Kb(Ms,i,r.extensionPath,r.chromeBinaryLocations),{WebDriver:c}=(An(),ie(vh)),{SeleniumPerfStats:l}=(bs(),ie(Yf)),d=new c;d.seleniumPerfStats=new l;let m=await d.initClient(a);zb=!0;let p=`${r.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`;await d.url(p),Object.assign(d,{initialUrl:p});try{d.cdpUrl=await Rr(m.value["goog:chromeOptions"].debuggerAddress)}catch{}return{webdriverApi:d}}function Kb(r,e,t,s){let n=e?[e]:[],o=[`--user-data-dir=${r}`,"--log-level=OFF","--silent-debugger-extension-api","--no-first-run"];return t&&o.push(`--load-extension=${t}`),{logLevel:hR,desiredCapabilities:{chromeOptions:{args:o,extensions:n,binary:s},browserName:"chrome"},host:"localhost",port:9515}}async function vR(){if(await be(ka))try{let{webSocketDebuggerUrl:r}=await ER();await SR(r),await Ce.promises.unlink(ka)}catch(r){r&&r.message==="unable to connect to devtools http server"&&await Ce.promises.unlink(ka)}}async function ER(){let r=await Ce.promises.readFile(ka,{encoding:"utf8"}),[e,t]=r.split(`
|
|
581
|
+
`).map(o=>o.trim()),s=Number.parseInt(e,10);if(!Number.isInteger(s)||s<1||s>65535)throw new Error("invalid port number");if(!t.startsWith("/devtools/browser/"))throw new Error("invalid devtools browser url");let n=await Rr(`localhost:${s}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:s,webSocketDebuggerUrl:n}}async function SR(r,e=100){let t=await RR(r,e);return pt(s=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),s)})}async function RR(r,e=100){let t=new Hb.default(r,{timeout:e}),s=pt(o=>{t.once("open",o)}).then(()=>{t.removeAllListeners()}),n=pt(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return Promise.race([s,n]).then(()=>t)}var Vb,qb,Hb,Ce,dr,_a,hR,gR,Ms,yR,ka,zb,Sd=w(()=>{"use strict";Vb=E(require("ms")),qb=E(require("ora")),Hb=E(require("ws")),Ce=E(require("fs")),dr=E(require("path")),_a=E(require("chrome-launcher"));le();is();q();yt();Pc();U();hR=ro?"verbose":"silent",gR=(0,Vb.default)("1h"),Ms=dr.join(Ft,"profile"),yR="DevToolsActivePort",ka=dr.join(Ms,yR);zb=!1});var bN=require("source-map-support/register");var kd;(kd=Array.prototype).at||(kd.at=function(r){let e=Number.isInteger(r)?r:0,t=e>=0?e:this.length+e;if(!(t<0||t>=this.length))return this[t]});var _d=require("perf_hooks");var Qn=E(require("os")),Us=E(require("url")),js=E(require("http")),Na=E(require("https")),Hn=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 s;e=e.toLowerCase(),(s=this._listeners)[e]||(s[e]=[]),this._listeners[e].push(t)}removeEventListener(e,t){let s;e=e.toLowerCase(),this._listeners[e]&&(s=this._listeners[e].indexOf(t),s!==-1&&this._listeners[e].splice(s,1))}dispatchEvent(e){var n;e.currentTarget=this,e.target=this;let t=e.type,s=this._listeners[t]||[];for(let o of s)o==null||o.call(this,e);(n=this[`on${t}`])==null||n.call(this,e)}},Kn=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 s=Buffer.alloc(t.byteLength),n=new Uint8Array(t);for(let o=0;o<t.byteLength;o++)s[o]=n[o];this._body=s}else if("buffer"in t&&t.buffer instanceof ArrayBuffer){let s=Buffer.alloc(t.byteLength),n=t.byteOffset,o=new Uint8Array(t.buffer);for(let i=0;i<t.byteLength;i++)s[i]=o[i+n];this._body=s}else if(typeof t=="object"&&t instanceof Hn.default)this._body=null;else throw new Error(`Unsupported send() data ${t}`)}_finalizeHeaders(t,s){this._contentType&&!("content-type"in s)&&(t["Content-Type"]=this._contentType),this._body&&(t["Content-Length"]=this._body.length.toString())}_startUpload(t){this._body&&t.write(this._body),t.end()}},Fs=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}},Jn=class extends Error{},Yn=class extends Error{},Xn=class extends Error{},pr=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=js.globalAgent;this.nodejsHttpsAgent=Na.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 (${Qn.type()} ${Qn.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 Kn(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 s=t.baseUrl;if(s!==null&&!Us.parse(s,!1,!0).protocol)throw new Jn("baseUrl must be an absolute URL");this.nodejsBaseUrl=s}}open(t,s,n){if(t=t.toUpperCase(),t in this._restrictedMethods)throw new Xn(`HTTP method ${t} is not allowed in XHR`);let o=this._parseUrl(s);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,s){if(this.readyState!==Re.OPENED)throw new pr("XHR readyState must be OPENED");let n=t.toLowerCase();this._restrictedHeaders[n]||/^sec-/.test(n)||/^proxy-/.test(n)||(s=s.toString(),n in this._loweredHeaders?(t=this._loweredHeaders[n],this._headers[t]=`${this._headers[t]}, ${s}`):(this._loweredHeaders[n]=t,this._headers[t]=s))}send(t){if(this.readyState!==Re.OPENED)throw new pr("XHR readyState must be OPENED");if(this._request)throw new pr("send() already called");switch(this._url.protocol){case"file:":this._sendFile();break;case"http:":case"https:":this._sendHttp(t);break;default:throw new Yn(`Unsupported protocol ${this._url.protocol}`)}}abort(){this._request&&(this._request.abort(),this._setError(),this._dispatchProgress("abort"),this._dispatchProgress("loadend"))}getResponseHeader(t){var n;let s=t.toLowerCase();return((n=this._responseHeaders)==null?void 0:n[s])||null}getAllResponseHeaders(){return this._responseHeaders?Object.entries(this._responseHeaders).map(([t,s])=>`${t}: ${s}`).join(`\r
|
|
582
|
+
`):""}overrideMimeType(t){if([Re.LOADING,Re.DONE].includes(this.readyState))throw new pr("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=t.toLowerCase()}_setReadyState(t){this.readyState=t;let s=new Fs("readystatechange");this.dispatchEvent(s)}_sendFile(){throw this._url.method!=="GET"?new Yn("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 s=this._url.protocol==="http:"?this.nodejsHttpAgent:this.nodejsHttpsAgent,o=(this._url.protocol==="http:"?js:Na).request({hostname:this._url.hostname,port:this._url.port,path:this._url.path,auth:this._url.auth,method:this._method,headers:this._headers,agent:s});typeof t=="object"&&t instanceof Hn.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 Hn.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,s){if(this._request!==t)return;if([301,302,303,307,308].includes(s.statusCode)){this._url=this._parseUrl(s.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=s,this._response.on("data",o=>this._onHttpResponseData(s,o)),this._response.on("end",()=>this._onHttpResponseEnd(s)),this._response.on("close",()=>this._onHttpResponseClose(s)),this.status=this._response.statusCode,this.statusText=js.STATUS_CODES[this.status],this._parseResponseHeaders(s);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,s){if(this._response===t)return this._responseParts.push(s),this._loadedBytes+=s.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 s=this._request;return this._setError(),s.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 s=new Fs(t);s.lengthComputable=this._lengthComputable,s.loaded=this._loadedBytes,s.total=this._totalBytes,this.dispatchEvent(s)}_setError(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null}_parseUrl(t){let s,n,o,i=this.nodejsBaseUrl===null?t:Us.resolve(this.nodejsBaseUrl,t),a=Us.parse(i,!1,!0);return a.hash=null,a.auth&&(typeof o<"u"&&o!==null||typeof n<"u"&&n!==null)&&(s=a.auth.indexOf(":"),s===-1?o||(o=a.auth):(o||(o=a.substring(0,s)),n||(n=a.substring(s+1)))),(o||n)&&(a.auth=`${o}:${n}`),a}_parseResponseHeaders(t){this._responseHeaders={},Object.entries(t.headers).forEach(([s,n])=>{let o=s.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 s=new ArrayBuffer(t.length),n=new Uint8Array(s);for(let o=0;o<t.length;o++)n[o]=t[o];this.response=s;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"],s=/;\s*charset=(.*)$/.exec(t);return t&&s?s[1]:"utf-8"}},ke=Re;ke.SyntaxError=Jn,ke.ProgressEvent=Fs,ke.SecurityError=Xn,ke.XMLHttpRequest=Re,ke.InvalidStateError=pr,ke.XMLHttpRequestUpload=Kn,ke.UNSENT=0,ke.OPENED=1,ke.HEADERS_RECEIVED=2,ke.LOADING=3,ke.DONE=4;Object.assign(global,{xhr2:ke,XMLHttpRequest:ke,performance:_d.performance,...typeof Blob>"u"&&{Blob:require("buffer").Blob}});var Yb=E(require("semver"));Oe();pl();zt();is();var Xb=E(require("chalk")),Qb=require("events");ae();hn();q();ae();_o();j();var pm=E(require("os")),ml=E(require("path")),fl=E(require("chalk")),Uo=require("fs");function mm(r){var e,t,s;if(!((e=r==null?void 0:r.message)!=null&&e.includes("SIGINT")))try{let n=pm.homedir();(0,Uo.mkdirSync)(ml.resolve(n,".testim_logs"),{recursive:!0});let o=ml.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=r==null?void 0:r.message)!=null&&t.includes("Unable to compile TypeScript")&&((s=r.stack)!=null&&s.includes("runner/src"))&&process.argv.some(i=>i.includes("player-require-path"))&&(console.log(fl.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(fl.default.red("change require('ts-node/register/transpile-only'); to require('ts-node/register'); for better errors"))),(0,Uo.writeFileSync)(o,`${r}
|
|
583
|
+
${r==null?void 0:r.stack}
|
|
584
584
|
|
|
585
|
-
${JSON.stringify(
|
|
585
|
+
${JSON.stringify(r,Object.getOwnPropertyNames(r),2)}`)}catch{}}rn();var xT=R("process-handler"),fm=!1;function PT(r){return r instanceof Error?1:fm?0:(r||(r={}),Object.values(r).some(({runnerStatus:t,success:s,testStatus:n,status:o})=>[t,o].includes(pe.SKIPPED)||[t,o].includes(pe.FAILED)&&n===Ke.EVALUATING?!1:s!==!0)?1:0)}function AT(){try{Kt("chromedriver").stop()}catch{}}function hm(){fm=!0}async function hl(r){r!=null&&r.stack&&(as?console.error(r,r.stack):mm(r)),AT(),await xT.waitForFlush(),process.exit(PT(r))}Te();j();var IR=R("cli-entry");function xR(r){if(!Yb.satisfies(process.version,r))throw new I(`Required node version ${r} not satisfied with current version ${process.version}`);let e=14,t=16,s=Number(process.versions.node.split(".")[0]),n=new Date("2023-04-30T00:00:00.000Z")<=new Date;if(s<e)throw new I(`Testim.io CLI supports Node.js ${e} and above, please upgrade to a newer Node.js version`);if(s<t&&n)throw new I(`Testim.io CLI supports Node.js ${t} and above, please upgrade to a newer Node.js version`);s<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 PR(){console.log("Starting Testim.io CLI");let[r,e]=await Promise.all([Promise.resolve().then(()=>(U(),H)),Promise.resolve().then(()=>(Nm(),Lm)),Promise.resolve().then(()=>(Fm(),GT)).catch(()=>{})]);_("Starting Testim.io CLI"),dm(hl);try{xR(r.getEnginesVersion())}catch(t){console.log("Argument Error:",t.message),process.exit(1)}try{let t=await e.process();if(_("in main, after options.process"),Ka(global.proxyUri),"parallel"in t&&t.parallel>5&&(Qb.EventEmitter.defaultMaxListeners=t.parallel*2),za(t.project),_p("token"in t&&typeof t.token=="string"?t.token:"anonymous_encrypt_key"),r.isInstallLazyDepsMode(t)){console.log("Lazy dependency installation started");let{installAllLazyDependencies:o}=await Promise.resolve().then(()=>(yt(),Pl));return await o()}if(r.isInitCodimMode(t)){let{init:o}=await Promise.resolve().then(()=>(qm(),Vm));return o(t.initTestProject)}if(r.isLoginMode(t))return;if(r.isCreatePrefetchedDataMode(t)){await Pp(),await mn(t);let{preloadTests:o}=await Promise.resolve().then(()=>(Ko(),zm));await o(t),!t.playerRequirePath&&t.mode!==X.EXTENSION&&await Pr(t.playerLocation,t.canary);let i=await Cp();i.success?console.log(`created prefetched data at ${bo()}`):console.error("failed to create prefetch data",i.error);return}let s=await Promise.resolve().then(()=>(ab(),ib));if(r.isTunnelOnlyMode(t)){await s.init(t);let{serveTunneling:o}=await Promise.resolve().then(()=>(Ul(),Fl));await o(t);return}if(r.isAgentMode(t)){let{runAgentMode:o}=await Promise.resolve().then(()=>(Sd(),Jb));return o(t)}if(t.saveRCALocally){let{initServer:o}=await Promise.resolve().then(()=>(au(),eh)),{port:i}=await o(t);t.localRCASaver=`http://localhost:${i}`}t.exitCodeIgnoreFailingTests&&hm(),_("right before testRunner.init/prepareRunner.prepare");let[n]=await Promise.all([cm(t),s.init(t)]);return _("right after testRunner.init/prepareRunner.prepare"),await s.run(t,n)}catch(t){if(t instanceof mr)return;let s=r.getArgsOnRemoteRunFailure();return s&&await al({...s,error:t.message}).catch(()=>{}),t instanceof I?(console.log(Xb.default.red("Argument Error:",t.message)),t):t instanceof _t?(console.log("Selenium Error:",t.message),t):(console.log("Error:",t.message),IR.error("runner ended with unexpected error",{err:t}),t)}}PR().then(r=>{Array.isArray(r)&&r.length===0&&console.log("No tests ran"),hl(r)});
|
|
586
586
|
//# sourceMappingURL=cli.js.map
|