@testim/testim-cli 4.148.1 → 4.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,7 @@ For the live and up to date documentation of this tool please check out [this gu
10
10
 
11
11
  ### Installation
12
12
 
13
+
13
14
  Install the testim CLI globally:
14
15
 
15
16
  ```sh
package/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #! /usr/bin/env node
2
2
  "use strict";var jT=Object.create;var ii=Object.defineProperty;var $T=Object.getOwnPropertyDescriptor;var WT=Object.getOwnPropertyNames;var VT=Object.getPrototypeOf,GT=Object.prototype.hasOwnProperty;var v=(s,e)=>()=>(s&&(e=s(s=0)),e);var H=(s,e)=>{for(var t in e)ii(s,t,{get:e[t],enumerable:!0})},ld=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of WT(e))!GT.call(s,n)&&n!==t&&ii(s,n,{get:()=>e[n],enumerable:!(r=$T(e,n))||r.enumerable});return s};var I=(s,e,t)=>(t=s!=null?jT(VT(s)):{},ld(e||!s||!s.__esModule?ii(t,"default",{value:s,enumerable:!0}):t,s)),He=s=>ld(ii({},"__esModule",{value:!0}),s);var Be={};H(Be,{log:()=>M,measure:()=>qT});function M(...s){if(!pd)return;let e=Date.now();console.log(`${e-HT} ${e-ud} `,...s),ud=e}function qT(s,e){if(!pd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var pd,HT,ud,je=v(()=>{"use strict";pd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,HT=Date.now(),ud=Date.now()});var Gt,jr=v(()=>{"use strict";Gt="element-6066-11e4-a52e-4f735466cecf"});function re(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 qe(s,e,t,r,n){let i="";return n=n?encodeURIComponent(n):"master",e&&t&&(i=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(i+=`?result-id=${r}`)),i}function tc(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Oe(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 rc=v(()=>{"use strict"});var nc,dd,md,mi=v(()=>{nc={ngrok:"4.3.3","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"},dd={"@applitools/eyes-sdk-core":"13.11.34-legacy.1","@applitools/spec-driver-webdriverio":"1.4.29","@segment/analytics-node":"2.1.3","@types/unzip-stream":"0.3.4",ajv:"6.12.6","body-parser":"1.20.3",chalk:"4.1.2","chrome-launcher":"0.15.0",commander:"10.0.0",compression:"1.7.4",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",eventsource:"3.0.6",express:"4.21.1",fkill:"7.2.1","form-data":"3.0.0","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"1.1.4",jsonwebtoken:"9.0.0",linkedom:"0.18.0",lodash:"4.17.21","memory-fs":"0.5.0",ms:"2.1.2","node-fetch":"2.7.0",npm:"10.5.0","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":"6.3.1","rox-node":"5.4.12",semver:"7.6.0","serialize-error":"7.0.1","socket.io-client":"4.8.0","source-map-support":"0.5.19",superagent:"9.0.1","superagent-proxy":"3.0.0","test-exclude":"7.0.0","ua-parser-js":"0.7.39","unzip-stream":"0.3.4",uuid:"11.0.5","validate-npm-package-name":"3.0.0",webdriverio:"8.40.6",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.17.1",xml2js:"0.6.2",yaml:"2.2.2"},md={node:">= 18.0.0"}});var Ls,JT,fd,Ht,YT,Ds,gd,hd,fi,Ns,yd,he,bd,Td,gi,$e,ic,wd,hi,vd,FR,BR,Sd,Ed,Ms,Id,Rd,xd,Ad,oc,ac,cc,lc,Cd,Us,Pd,uc,de=v(()=>{"use strict";Ls=process.env.SERVICES_HOST||"https://services.testim.io",JT="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:Ls,Ls=process.env.SERVICES_HOST);Ht=process.env.RUNNER_ENVIRONMENT||"production",YT={production:"",staging:".staging",development:".dev"},Ds=process.env.EXTENSION_SP_S3_HOST||`https://playback-components${YT[Ht]}.testim.io`,gd=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),hd=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),fi=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),Ns=process.env.EDITOR_URL,yd=process.env.WEBSOCKET_HOST||`${Ls}/ws`,he=Ls,bd=parseInt(process.env.LOGGER_CONSOLE||"0",10),Td=parseInt(process.env.LOGGER_DEBUG||"0",10),gi=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),$e=parseInt(process.env.IS_ON_PREM||"0",10),ic=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,wd=parseInt(process.env.DEBUG_MODE||"0",10),hi=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,vd=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",FR=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),BR=process.env.APPIUM_VERSION||"1.10.1",Sd=process.env.GATEWAY_URL,Ed=process.env.EXTENSION_SERVICES_HOST||Ls,Ms=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:JT,Id=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:fd,Rd=fd,xd=5*60*1e3,Ad=40,oc=process.env.HEADSPIN_MOBILE_API_BASE_URL||"https://api-dev.headspin.io",ac=process.env.TDC_MOBILE_API_BASE_URL||"https://api.tdc.tricentis-cloud.com",cc=process.env.HEADSPIN_TDC_DEVICES_API_PATH||"v0",lc=process.env.HEADSPIN_TDC_APPS_API_PATH||"v1",Cd=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",Us=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",Pd=process.env.P_CLOUDY_DEFAULT_TEST_DURATION||60,uc=process.env.P_CLOUDY_DEFAULT_ANDROID_DEVICE_NAME||"samsung"});var kd,yi,Od=v(()=>{"use strict";kd=I(require("superagent")),yi=class{constructor(e){this.logs=[];this.url=process.env.CORALOGIX_URL||"https://ingress.coralogix.com/logs/v1/bulk",this.token=process.env.CORALOGIX_PRIVATE_KEY||"d0eb01da-f966-1663-63c6-8871225d7c39",this.applicationName=e.applicationName,this.subsystemName=e.subsystemName,this.flushIntervalMs=e.flushIntervalMs||2e3,this.maxBufferedLogsCount=e.maxBufferedLogsCount||50,this.interval=setInterval(()=>this.flushLogs(),this.flushIntervalMs)}addLog(e){this.logs.push(e),this.logs.length>=this.maxBufferedLogsCount&&this.flushLogs()}setProxy(e){this.proxy=e}async waitForFlush(){clearInterval(this.interval),await this.flushLogs()}async flushLogs(){try{if(this.logs.length===0)return;let e={applicationName:this.applicationName,subsystemName:this.subsystemName,logEntries:[...this.logs]};this.logs=[];let t=kd.default.post(this.url).set("Content-Type","application/json; charset=UTF-8").set("Authorization",`Bearer ${this.token}`).send(e);this.proxy&&t.proxy(this.proxy),await t}catch{}}}});var Ld={};H(Ld,{CoralogixTransport:()=>pc});var _d,XT,QT,pc,Dd=v(()=>{"use strict";_d=I(require("winston-transport"));Od();XT={debug:1,silly:2,verbose:2,silent:2,info:3,http:3,warn:4,warning:4,error:5,critical:6,crit:6},QT=["err","error","reason","e"],pc=class extends _d.default{constructor(t){super(t);this.name="Coralogix Transport",this.category=t.category,this.logger=new yi({applicationName:"testim",subsystemName:"runner"})}log(t,r){let{category:n,level:i,message:o,meta:a={},...l}=t,c={...a,...l},d={severity:XT[i],text:o,category:n||this.category};c.className&&(d.className=c.className),c.methodName&&(d.methodName=c.methodName),c.threadId&&(d.threadId=c.threadId),delete c.className,delete c.methodName,delete c.threadId,delete c.category,delete c.level,delete c.message;let m=!1;a instanceof Error&&(m=!0,c.msg=a.message+a.stack,o&&(c.msg=`${o}
3
- ${c.msg}`));for(let u of QT)a[u]instanceof Error&&(c[u]={message:a[u].message,stack:a[u].stack,name:a[u].name,type:a[u].type,cause:a[u].cause,...a[u]});Object.keys(c).length>0&&(o&&!m&&(c.msg=o),d.text=JSON.stringify(c)),this.logger.addLog(d),r(null,!0)}setProxy(t){this.logger.setProxy(t)}async waitForFlush(){return await this.logger.waitForFlush()}}});function tw(){let s=[],e=()=>Promise.resolve(),t=r=>{};if(!$e){let{CoralogixTransport:r}=(Dd(),He(Ld)),n=new r({category:"ROOT"});s.push(n),e=()=>n.waitForFlush(),t=i=>n.setProxy(i)}if(bd){let r={depth:5,colors:!0};s.push(new mt.transports.Console({format:mt.format.combine(mt.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),mt.format.timestamp({format:"HH:mm:ss:SSS"}),mt.format.printf(n=>`[${n.timestamp}] ${n.level} ${n.category}: ${n.message} ${Ti.inspect(n.meta,r)}`))}))}return[s,e,t]}function $d(s){dc=s}function Wd(s){jd=s}function Vd(s){$e||!s||nw(s)}function Md(s){return{projectId:jd,time:new Date().toISOString(),...dc&&!s&&{executionId:dc}}}function P(s){return new mc(aw.child({category:s}))}var Ud,mt,Ti,bi,Fd,ZT,ew,Nd,Bd,rw,sw,nw,iw,ow,aw,dc,jd,mc,W=v(()=>{"use strict";Ud=I(require("node:os")),mt=I(require("winston"));de();Ti=I(require("node:util")),bi=I(require("chalk")),Fd=I(require("dayjs"));F();ZT=Ud.hostname(),ew=tt();Nd={depth:5,colors:!0},Bd=(s,e,t)=>{let r=`[${(0,Fd.default)().format("HH:mm:ss:SSS")}]`,n=Ti.inspect(e,Nd),i=Ti.inspect(t,Nd);return`${bi.default.white(r)} ${bi.default.reset()}SessionPlayer-${bi.default.red(s)} ${n} ${i}`},[rw,sw,nw]=tw(),iw=Td?"debug":"info",ow={release:Boolean(!1),branch:"runner-v4.148.1"},aw=mt.createLogger({levels:mt.config.syslog.levels,level:iw,transports:rw,defaultMeta:{name:"runner",hostname:ZT,nodeVersion:process.version,runnerVersion:ew,...ow}}),dc=null,jd=null;mc=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,{meta:r,message:t,...Md(n)})}catch(i){try{this._logger.log("crit",{message:`failed to log message ${i.message}, ${i.stack}`,...Md(n)})}catch{}}}waitForFlush(){return sw()}}});var Ei,$r,C,qt,pr,It,wi,Wr,oe,Fs,rt,zt,Rt,vi,Vr,Si,Bs,Y=v(()=>{"use strict";Ei=require("p-retry"),$r=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},C=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},qt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},pr=class extends Error{constructor(t,r){super(t instanceof Error?t.message:t,{cause:t});this.type=r}},It=class extends Ei.AbortError{},wi=class extends Ei.AbortError{},Wr=class extends Ei.AbortError{},oe=class extends Error{},Fs=class extends Error{},rt=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},zt=class extends rt{constructor(){super(...arguments);this.name="GridConcurrencyError"}},Rt=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},vi=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},Vr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},Si=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Bs=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function fc(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ce(s){return(0,qd.setTimeout)(s)}function gc(s,e){let t=new Promise((r,n)=>{e.onabort=()=>{n(e.reason)}});return Promise.race([s,t])}function le(s,e,t="Timeout Error"){fi&&!Gd&&(Gd=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new oe(t);return e=fi?Number(fi)||6e5:e,Promise.race([s,ce(e).then(()=>{throw r})])}async function se(s,e,{concurrency:t}={}){if(t){Hd||=(await import("p-limit")).default;let r=Hd(t);return await Promise.all(Array.from(s,(n,i)=>r(()=>e(n,i))))}return await Promise.all(Array.from(s,e))}function Kt(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var qd,Gd,Hd,hc=v(()=>{"use strict";qd=require("timers/promises");Y();de();Gd=!1});var $s,zd,lw,js,Kd,uw,pw,Jd,Yd=v(()=>{"use strict";$s=I(require("lodash"));de();zd=require("dns");W();hc();lw=P("http-request-counters"),js=!1,Kd=async()=>{if($e)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await se(s,t=>zd.promises.lookup(t)));return e||(js=!0),e}catch{return lw.error("network connectivity test failed"),js=!0,!1}},uw=$s.throttle(Kd,10*1e3),pw=60*1e3*15,Jd=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,i){let o=n.get(i)||0;n.set(i,o+1),setTimeout(()=>{let a=n.get(i)||1;n.set(i,a-1)},pw)}function t(n,i=n.name){return async function(...o){e(s.call,i);try{let a=await n.call(null,...o);return e(s.success,i),a}catch(a){throw e(s.fail,i),js||uw(),a}}}async function r(){if(js||!await Kd())return!1;let n=$s.sum([...s.fail.values()]),i=$s.sum([...s.call.values()]);return n<i*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>js,t}});var ze={};H(ze,{deleteReq:()=>Ws,didNetworkConnectivityTestFail:()=>Ec,download:()=>vc,get:()=>Te,getFullRes:()=>hw,getText:()=>Gs,head:()=>yw,isNetworkHealthy:()=>Sc,post:()=>We,postForm:()=>Vs,postText:()=>Tc,put:()=>wc});function mw(){return global.caFileContent}function fw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function gw(){return!ft.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(ft.default),global.proxyUri}function dr(s,e=!1){let t=mw();t&&s.ca(t);let r=!e&&gw();r&&s.proxy(r)}async function Xd(s,e,t={},r=Gr,n=0){let i=ft.default.post(s).send(e).timeout(r).set(t);dr(i),n&&i.retry(n);try{return await i}catch(o){throw o.url=s,o.originalRequestTimeout=r,o.additionalSetHeaders=t,o}}async function bc(s,e,t={},r=Gr,{isBinary:n=!1,skipProxy:i=!1}={}){let o=ft.default.get(s).query(e||{}).timeout(r).set(t);return n&&o.buffer(!0),dr(o,i),await o}var ft,yc,st,Gr,dw,Dt,Ws,We,Vs,Gs,Tc,Te,hw,yw,wc,vc,Sc,Ec,Ve=v(()=>{"use strict";ft=I(require("superagent"));W();Yd();yc=P("http-request"),st=Jd(),Gr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,dw=6e4;Dt=(s,e,t)=>{let r=e.response;e.response instanceof ft.default.Response&&typeof r.toError=="function"&&(e=e.response.toError(),e.requestHeaders=r==null?void 0:r.header,e.responseHeaders=r==null?void 0:r.headers);let n=new Error("").stack;throw yc.error(s,{...t,error:e,logErrorAndRethrowStack:n}),e};Ws=st(async(s,e={},t={},r=Gr)=>{try{let n=ft.default.delete(s).send(e).timeout(r).set(t);dr(n);let i=await n;return i.type==="text/plain"?i.text:i.body}catch(n){return Dt("failed to delete request",n,{url:s})}}),We=st(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let i=await Xd(s,e,t,r,n);return i.type==="text/plain"?i.text:i.body}catch(i){return Dt("failed to post request",i,{url:s})}});Vs=st(async(s,e,t,r={},n=Gr)=>{let i=ft.default.post(s).type("form").timeout(n).set(r);i.field(e),Object.entries(t).forEach(([o,a])=>{i.attach(o,a.buffer,a.fileName)}),dr(i);try{let o=await i;return o.type==="text/plain"?o.text:o.body}catch(o){return Dt("failed to post request",o,{url:s})}});Gs=st(async(s,e,t)=>{try{return(await bc(s,e,t)).text}catch(r){return Dt("failed to getText request",r,{url:s,query:e})}}),Tc=st(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{return(await Xd(s,e,t,r,n)).text}catch(i){return Dt("failed to post request",i,{url:s})}}),Te=st(async(s,e,t,r,n)=>{try{return(await bc(s,e,t,r,n)).body}catch(i){return Dt("failed to get request",i,{url:s,query:e})}}),hw=st((s,e,t,r)=>bc(s,e,t,r)),yw=st(async s=>{let e=ft.default.head(s).timeout(Gr);dr(e);try{return await e}catch(t){return Dt("failed to head request",t,{url:s})}}),wc=st(async(s,e,t={},r=Gr)=>{let n=ft.default.put(s).send(e).timeout(r).set(t);dr(n);try{return(await n).body}catch(i){return Dt("failed to put request",i,{url:s})}}),vc=st(async s=>{yc.info("start to download",{url:s});let e=ft.default.get(s).set("User-Agent","Testim.io").timeout(dw).buffer(!0).parse(fw);dr(e);try{let t=await e;return yc.info("finished to download",{url:s}),t}catch(t){return Dt("failed to download",t,{url:s})}}),Sc=st.isNetworkHealthy,Ec=st.didNetworkConnectivityTestFail});function gt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Nt.resolve(__dirname,"../../"):s=Nt.resolve(__dirname,""),s):process.cwd()}function Ii(s,e){return Oe(s)?e||Nt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Nt.basename(s)}function tt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function xc(){try{return md.node}catch{return""}}async function em(s,e,t=!0){let r=await nt.promises.readdir(s,{withFileTypes:!0});await nt.promises.mkdir(e,{recursive:t});for(let n of r){let i=Nt.join(s,n.name),o=Nt.join(e,n.name);n.isDirectory()?await em(i,o):await nt.promises.copyFile(i,o)}}async function ye(s){try{return await nt.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Nt,Qd,Zd,nt,bw,Mt,Ke,Ri,Ic,it,Rc,tm=v(()=>{"use strict";Nt=I(require("node:path"));rc();mi();Qd=I(require("unzip-stream")),Zd=I(require("p-retry")),nt=require("node:fs"),bw=3;Mt=async s=>{let e=await Promise.resolve().then(()=>(Ve(),ze));return(0,Zd.default)(()=>e.download(s),{retries:bw,factor:1})},Ke=async(s,e)=>{let t=await Mt(s);return nt.promises.writeFile(e,t.body)};Ri=async(s,e)=>{let t=Ii(s,e);return Oe(s)?Ke(s,t):nt.promises.copyFile(s,t)},Ic=async s=>Oe(s)?Mt(s):nt.promises.readFile(s),it=async(s,e)=>(0,nt.createReadStream)(s).pipe(Qd.Extract({path:e})),Rc=s=>(0,nt.statSync)(s).size/1e6});var Ut={};H(Ut,{APPIUM_SESSION_MESSAGE:()=>Oc,CLI_MODE:()=>q,MOBILE_APP_SOURCE:()=>xi,MOBILE_RUN_SKIP_REASON:()=>kc,X_HEADER_RUNNER_ID:()=>_c,gridMessages:()=>ht,gridTypes:()=>L,mobileWeb:()=>Cc,runnerStatus:()=>Ac,runnerTestStatus:()=>me,socketEventTypes:()=>xt,stepResult:()=>qs,test:()=>Pc,testRunStatus:()=>Hs,testStatus:()=>Je,timeoutMessages:()=>Me});var Me,Hs,Ac,me,Je,ht,Cc,Pc,xt,q,L,qs,xi,kc,Oc,_c,ie=v(()=>{"use strict";Me={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Hs={COMPLETED:"completed"},Ac={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},me={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Je={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},ht={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Cc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Pc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},xt={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"},L={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",TESTIM_PRIVATE:"testimPrivate",LAMBDATEST:"lambdaTest",TESTIM_LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC",P_CLOUDY:"pcloudy"},qs={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed",MOBILE_SESSION_ERROR:"mobile-session-error",UNKNOWN_ERROR:"unknown-error"},xi={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},kc={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},Oc={APP_NOT_EXIST_ON_DEVICE:"used to start the app doesn't exist or cannot be launched",APP_NEVER_STARTED:"never started",DEVICE_OS_VERSION_TOO_LOW:"DeviceOSVersionTooLow",TIMEOUT_ERROR:"Timeout awaiting 'request'",SAUCELABS_APP_IS_NOT_INSTALLED:"Original error: 'app' option is required for reinstall"},_c="X-Testim-Runner-ID"});function zs(s,e){var t,r,n;return(t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length||!s.browser?[...new Set(e.map(i=>{var o;return(o=i.runConfig)==null?void 0:o.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function Tw(){let{argv:s}=process;if(s.includes("--remoteRunId"))return{remoteRunId:s[s.indexOf("--remoteRunId")+1],projectId:s[s.indexOf("--project")+1],token:s[s.indexOf("--token")+1]}}var Ks,rm,Ye,ww,vw,Sw,Ew,Iw,Lc,Dc,sm=v(()=>{"use strict";ie();Ks=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},rm=s=>Boolean(s.resultId&&s.source==="remote-run"),Ye=(s,e)=>s.testStatus===Je.QUARANTINE&&!rm(e)&&!e.runQuarantinedTests;ww=s=>Boolean(s.loginMode),vw=s=>Boolean(s.tunnelOnlyMode),Sw=s=>Boolean(s.createPrefechedData),Ew=s=>Boolean(s.installLazyDepsMode),Iw=s=>Boolean(s.agentMode),Lc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Dc=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function Ci(s=0){return Ai.default.duration(s).format("HH:mm:ss.SSS")}function Nc(s=0){return Ai.default.duration(s).asSeconds()}var Ai,nm,im=v(()=>{"use strict";Ai=I(require("dayjs")),nm=I(require("dayjs/plugin/duration"));Ai.default.extend(nm.default)});var Js,Hr,Jt,om,qr,am=v(()=>{"use strict";ie();Js=s=>!(!s||"fileName"in s),Hr=(s,e)=>{if(e===L.TESTIM_TVC)return!1;if(s){if(s.appMetadata&&"iOSSupportedTargetDevice"in s.appMetadata)return s.appMetadata.iOSSupportedTargetDevice==="virtual";if("fileName"in s)return s.fileName.endsWith(".app")}return!1},Jt=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},om=s=>s===L.TESTIM_TVC,qr=(s,e)=>om(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function Mc(s=4e3){let e=process.memoryUsage(),t=r=>Math.round(r/1024/1024*100)/100;return{isOverThreshold:t(e.rss)>s,rss:`${t(e.rss)} MB -> Resident Set Size - total memory allocated for the process execution`,heapTotal:`${t(e.heapTotal)} MB -> total size of the allocated heap`,heapUsed:`${t(e.heapUsed)} MB -> actual memory used during the execution`,external:`${t(e.external)} MB -> V8 external memory`}}var cm=v(()=>{"use strict"});var J={};H(J,{OSS:()=>zr,TESTIM_BROWSER_DIR:()=>Ft,buildBasicHeader:()=>tc,calcPercentile:()=>Oi,copyDir:()=>em,delay:()=>ce,doesPathExist:()=>ye,download:()=>Mt,downloadAndSave:()=>Ke,extractElementId:()=>_e,getArgsOnRemoteRunFailure:()=>Tw,getBrowserInfo:()=>xw,getCdpAddressForHost:()=>gr,getCliLocation:()=>gt,getDuration:()=>Ci,getDurationSec:()=>Nc,getEnginesVersion:()=>xc,getEnvironmentGitBranch:()=>fr,getLinksFromUnescapeHTML:()=>Qs,getLocalFileSizeInMB:()=>Rc,getMemorySnapshot:()=>Mc,getPlanType:()=>ki,getRunConfigByBrowserName:()=>Ys,getRunnerVersion:()=>tt,getSource:()=>Ri,getSourceAsBuffer:()=>Ic,getSourcePath:()=>Ii,getTestUrl:()=>qe,getUniqBrowsers:()=>zs,groupTestsByRetries:()=>Fc,guid:()=>re,hasTestPlanFlag:()=>Ks,isAgentMode:()=>Iw,isAppFromDevice:()=>Js,isAppFromDeviceDisabled:()=>qr,isCreatePrefetchedDataMode:()=>Sw,isInstallLazyDepsMode:()=>Ew,isLoginMode:()=>ww,isMobileProject:()=>Jt,isPromise:()=>fc,isQuarantineAndNotRemoteRun:()=>Ye,isRemoteRun:()=>rm,isTestimVirtualGrid:()=>om,isTunnelOnlyMode:()=>vw,isURL:()=>Oe,promiseAbort:()=>gc,promiseFromCallback:()=>Kt,promiseMap:()=>se,promiseTimeout:()=>le,removePropertyFromObject:()=>Pi,replaceArgsWithNoDashes:()=>Lc,sanitizeNumberValue:()=>mr,shouldBlockVirtualIosBuild:()=>Hr,spreadObjectToArgs:()=>Dc,unescapeHTML:()=>Xs,unzipFile:()=>it});function mr(s,e){let t=Number(s);return Number.isNaN(t)||t<=0?e:t}function xw(s){return s=s.toLowerCase(),Uc.find(e=>e.browserValue===s)}function Ys(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Uc.find(i=>i.browserName.toLowerCase()===s||s.includes(i.synonyms))||Uc[0],n=zr.find(i=>i.osName==="Windows 10");return e&&(e.platform?n=zr.find(i=>i.sl.platform===e.platform):e.platformName&&(n=zr.find(i=>i.sl.platformName===e.platformName))),t&&(t.os_version?n=zr.find(i=>i.bs.os_version===t.os_version):t.platform&&(n=zr.find(i=>i.bs.platform===t.platform))),Kr.merge(r,n)}function fr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function Pi(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&Pi(s[r],e,t))}function _e(s){return s.ELEMENT||s[Gt]}function ki(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Fc(s=[]){return Kr.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=t.slice().sort((i,o)=>{let a=typeof i.retryCount=="number"?i.retryCount:1,l=typeof o.retryCount=="number"?o.retryCount:1;return a===l?i.startTime-o.startTime:(i.retryCount??0)-(o.retryCount??0)}),n=Kr.cloneDeep(r.at(-1));return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}function Xs(s){return dm.parseFromString(`<html><body>${s}</body></html>`,"text/html").documentElement.textContent}function Qs(s){return[...dm.parseFromString(`<html><body>${s}</body></html>`,"text/html").getElementsByTagName("a")].map(t=>t.href).filter(Boolean)}async function gr(s,e){let t=await Promise.resolve().then(()=>(Ve(),ze));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 lm,Kr,um,pm,Rw,Ft,zr,Uc,Oi,dm,F=v(()=>{"use strict";lm=I(require("os")),Kr=I(require("lodash")),um=I(require("path")),pm=require("linkedom");jr();tm();sm();im();rc();hc();am();cm();Rw=lm.homedir(),Ft=um.join(Rw,".testim-browser-profile"),zr=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"},lt:{platform:"Linux"}},{osName:"Windows 11",bs:{os:"WINDOWS",os_version:"11"},sl:{platform:"Windows 11"},lt:{platform:"Windows 11"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"},lt:{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 Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17"},sl:{},lt:{platform:"macOS Sonoma",safari_version:"17"}},{osName:"macOS Ventura",bs:{os:"OS X",os_version:"Ventura",safari_version:"16.5"},sl:{platform:"macOS 13",safari_version:"latest"},lt:{platform:"macOS Ventura",safari_version:"16"}},{osName:"macOS Monterey",bs:{os:"OS X",os_version:"Monterey",safari_version:"15.6"},sl:{platform:"macOS 12",safari_version:"latest"},lt:{platform:"macOS Monterey",safari_version:"15"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14.1"},sl:{platform:"macOS 11",safari_version:"latest"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13.1"},sl:{platform:"macOS 10.15",safari_version:"latest"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12.1"},sl:{platform:"macOS 10.14",safari_version:"latest"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11.1"},sl:{platform:"macOS 10.13",safari_version:"latest"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10.1"},sl:{platform:"macOS 10.12",safari_version:"latest"}},{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:"latest"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"latest"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"latest"}},{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:"latest"}},{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"}}],Uc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"112"},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 Chromium",bs:{browser:"Edge",browser_version:"112"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{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"}];Oi=(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]};dm=new pm.DOMParser});var Bc={};H(Bc,{$schema:()=>Aw,default:()=>_w,definitions:()=>Cw,properties:()=>Ow,required:()=>kw,type:()=>Pw});var Aw,Cw,Pw,kw,Ow,_w,mm=v(()=>{Aw="http://json-schema.org/draft-07/schema#",Cw={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}}}},Pw="object",kw=["entries"],Ow={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},_w={$schema:Aw,definitions:Cw,type:Pw,required:kw,properties:Ow}});async function wm(){try{return await le(_i.promises.readFile(Mi()).then(async s=>{let e=await Tm;return Nw(e,s)}),3e4)}catch{return{}}}function Nw(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),i=Yr.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),o=i.update(r);return JSON.parse(Buffer.concat([o,i.final()]))}function Bt(s,e,t=Lw,r=void 0){return async()=>{if(!hm)return await s();let n=e;r&&(e+=JSON.stringify(r));let i=await Mw(e);if(i)return Zs.debug("cache hit:",{fnName:e}),i;if(Zs.debug("cache miss:",{fnName:e}),!ym)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let o=await s();return o&&await Uw(e,o,t),o}}async function Mw(s){let t=(await Ui)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function Uw(s,e,t){if(jc)throw Zs.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 Ui;r[s]={value:e,expiry:Date.now()+t},bm=new Promise(n=>{Ni=n}),Dw(r)}catch{Zs.error("failed updating cache")}}async function Xr(){let s=await Ui;Object.keys(s).forEach(e=>{delete s[e]})}function vm(s){hm=s}function Fw(s=!0){ym=s}async function Sm(){try{return jc=!0,await bm}finally{jc=!1}}function Em(s){Di=s,Ui=wm()}var _i,Li,Yr,fm,Zs,Di,gm,Ni,hm,ym,jc,bm,Tm,Lw,Mi,Ui,Dw,Im,Rm,gx,xm,Yt=v(()=>{"use strict";_i=I(require("fs")),Li=I(require("path")),Yr=I(require("crypto"));F();fm=require("lodash");W();Zs=P("local cache"),Di=Li.resolve(gt(),"testim-cache"),hm=!0,ym=!0,jc=!1,bm=new Promise(s=>{Ni=s}),Tm=new Promise(s=>{gm=s}),Lw=1e3*60*60*3,Mi=()=>Li.resolve(Li.resolve(Di,"testim.cache"));Ui=wm(),Dw=(0,fm.debounce)(async s=>{let e;try{let t=await Tm,r=Yr.randomBytes(16),n=JSON.stringify(s),i=Buffer.from(t),o=Yr.createCipheriv("aes-256-cbc",Buffer.concat([i,Buffer.alloc(32)],32),r),a=Buffer.concat([r,o.update(n),o.final()]);await ye(Di)||await _i.promises.mkdir(Di,{recursive:!0}),await _i.promises.writeFile(Mi(),a)}catch(t){Zs.error("failed saving cache",{err:t}),e=t}Ni(e?{success:!1,error:e}:{success:!0})},200);Im=gm,Rm=vm.bind(void 0,!1),gx=vm.bind(void 0,!0),xm=()=>Fw(!1)});function Fi(){return{cliLocation:gt(),userInfo:Qr.userInfo(),platform:Qr.platform(),release:Qr.release()}}var Qr,$c=v(()=>{"use strict";Qr=I(require("node:os"));F()});function Bw(s){try{return Bi.resolve(Bi.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 Xt(s){let e=Bw(s);return require(e)}var Bi,en=v(()=>{"use strict";Bi=I(require("path"))});function jw(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function $w(s){return/The "to" argument must be of type string./.exec(s)}function km(s,e,t){let r=jw(s),n=$w(s);return r||n?(Pm.info("Failed to install package due to insufficient write access",{...Fi(),package:t,path:r}),console.error(`
3
+ ${c.msg}`));for(let u of QT)a[u]instanceof Error&&(c[u]={message:a[u].message,stack:a[u].stack,name:a[u].name,type:a[u].type,cause:a[u].cause,...a[u]});Object.keys(c).length>0&&(o&&!m&&(c.msg=o),d.text=JSON.stringify(c)),this.logger.addLog(d),r(null,!0)}setProxy(t){this.logger.setProxy(t)}async waitForFlush(){return await this.logger.waitForFlush()}}});function tw(){let s=[],e=()=>Promise.resolve(),t=r=>{};if(!$e){let{CoralogixTransport:r}=(Dd(),He(Ld)),n=new r({category:"ROOT"});s.push(n),e=()=>n.waitForFlush(),t=i=>n.setProxy(i)}if(bd){let r={depth:5,colors:!0};s.push(new mt.transports.Console({format:mt.format.combine(mt.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),mt.format.timestamp({format:"HH:mm:ss:SSS"}),mt.format.printf(n=>`[${n.timestamp}] ${n.level} ${n.category}: ${n.message} ${Ti.inspect(n.meta,r)}`))}))}return[s,e,t]}function $d(s){dc=s}function Wd(s){jd=s}function Vd(s){$e||!s||nw(s)}function Md(s){return{projectId:jd,time:new Date().toISOString(),...dc&&!s&&{executionId:dc}}}function P(s){return new mc(aw.child({category:s}))}var Ud,mt,Ti,bi,Fd,ZT,ew,Nd,Bd,rw,sw,nw,iw,ow,aw,dc,jd,mc,W=v(()=>{"use strict";Ud=I(require("node:os")),mt=I(require("winston"));de();Ti=I(require("node:util")),bi=I(require("chalk")),Fd=I(require("dayjs"));F();ZT=Ud.hostname(),ew=tt();Nd={depth:5,colors:!0},Bd=(s,e,t)=>{let r=`[${(0,Fd.default)().format("HH:mm:ss:SSS")}]`,n=Ti.inspect(e,Nd),i=Ti.inspect(t,Nd);return`${bi.default.white(r)} ${bi.default.reset()}SessionPlayer-${bi.default.red(s)} ${n} ${i}`},[rw,sw,nw]=tw(),iw=Td?"debug":"info",ow={release:Boolean(!1),branch:"runner-v4.149.0"},aw=mt.createLogger({levels:mt.config.syslog.levels,level:iw,transports:rw,defaultMeta:{name:"runner",hostname:ZT,nodeVersion:process.version,runnerVersion:ew,...ow}}),dc=null,jd=null;mc=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,{meta:r,message:t,...Md(n)})}catch(i){try{this._logger.log("crit",{message:`failed to log message ${i.message}, ${i.stack}`,...Md(n)})}catch{}}}waitForFlush(){return sw()}}});var Ei,$r,C,qt,pr,It,wi,Wr,oe,Fs,rt,zt,Rt,vi,Vr,Si,Bs,Y=v(()=>{"use strict";Ei=require("p-retry"),$r=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},C=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},qt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},pr=class extends Error{constructor(t,r){super(t instanceof Error?t.message:t,{cause:t});this.type=r}},It=class extends Ei.AbortError{},wi=class extends Ei.AbortError{},Wr=class extends Ei.AbortError{},oe=class extends Error{},Fs=class extends Error{},rt=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},zt=class extends rt{constructor(){super(...arguments);this.name="GridConcurrencyError"}},Rt=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},vi=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},Vr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},Si=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Bs=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function fc(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ce(s){return(0,qd.setTimeout)(s)}function gc(s,e){let t=new Promise((r,n)=>{e.onabort=()=>{n(e.reason)}});return Promise.race([s,t])}function le(s,e,t="Timeout Error"){fi&&!Gd&&(Gd=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new oe(t);return e=fi?Number(fi)||6e5:e,Promise.race([s,ce(e).then(()=>{throw r})])}async function se(s,e,{concurrency:t}={}){if(t){Hd||=(await import("p-limit")).default;let r=Hd(t);return await Promise.all(Array.from(s,(n,i)=>r(()=>e(n,i))))}return await Promise.all(Array.from(s,e))}function Kt(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var qd,Gd,Hd,hc=v(()=>{"use strict";qd=require("timers/promises");Y();de();Gd=!1});var $s,zd,lw,js,Kd,uw,pw,Jd,Yd=v(()=>{"use strict";$s=I(require("lodash"));de();zd=require("dns");W();hc();lw=P("http-request-counters"),js=!1,Kd=async()=>{if($e)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await se(s,t=>zd.promises.lookup(t)));return e||(js=!0),e}catch{return lw.error("network connectivity test failed"),js=!0,!1}},uw=$s.throttle(Kd,10*1e3),pw=60*1e3*15,Jd=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,i){let o=n.get(i)||0;n.set(i,o+1),setTimeout(()=>{let a=n.get(i)||1;n.set(i,a-1)},pw)}function t(n,i=n.name){return async function(...o){e(s.call,i);try{let a=await n.call(null,...o);return e(s.success,i),a}catch(a){throw e(s.fail,i),js||uw(),a}}}async function r(){if(js||!await Kd())return!1;let n=$s.sum([...s.fail.values()]),i=$s.sum([...s.call.values()]);return n<i*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>js,t}});var ze={};H(ze,{deleteReq:()=>Ws,didNetworkConnectivityTestFail:()=>Ec,download:()=>vc,get:()=>Te,getFullRes:()=>hw,getText:()=>Gs,head:()=>yw,isNetworkHealthy:()=>Sc,post:()=>We,postForm:()=>Vs,postText:()=>Tc,put:()=>wc});function mw(){return global.caFileContent}function fw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function gw(){return!ft.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(ft.default),global.proxyUri}function dr(s,e=!1){let t=mw();t&&s.ca(t);let r=!e&&gw();r&&s.proxy(r)}async function Xd(s,e,t={},r=Gr,n=0){let i=ft.default.post(s).send(e).timeout(r).set(t);dr(i),n&&i.retry(n);try{return await i}catch(o){throw o.url=s,o.originalRequestTimeout=r,o.additionalSetHeaders=t,o}}async function bc(s,e,t={},r=Gr,{isBinary:n=!1,skipProxy:i=!1}={}){let o=ft.default.get(s).query(e||{}).timeout(r).set(t);return n&&o.buffer(!0),dr(o,i),await o}var ft,yc,st,Gr,dw,Dt,Ws,We,Vs,Gs,Tc,Te,hw,yw,wc,vc,Sc,Ec,Ve=v(()=>{"use strict";ft=I(require("superagent"));W();Yd();yc=P("http-request"),st=Jd(),Gr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,dw=6e4;Dt=(s,e,t)=>{let r=e.response;e.response instanceof ft.default.Response&&typeof r.toError=="function"&&(e=e.response.toError(),e.requestHeaders=r==null?void 0:r.header,e.responseHeaders=r==null?void 0:r.headers);let n=new Error("").stack;throw yc.error(s,{...t,error:e,logErrorAndRethrowStack:n}),e};Ws=st(async(s,e={},t={},r=Gr)=>{try{let n=ft.default.delete(s).send(e).timeout(r).set(t);dr(n);let i=await n;return i.type==="text/plain"?i.text:i.body}catch(n){return Dt("failed to delete request",n,{url:s})}}),We=st(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let i=await Xd(s,e,t,r,n);return i.type==="text/plain"?i.text:i.body}catch(i){return Dt("failed to post request",i,{url:s})}});Vs=st(async(s,e,t,r={},n=Gr)=>{let i=ft.default.post(s).type("form").timeout(n).set(r);i.field(e),Object.entries(t).forEach(([o,a])=>{i.attach(o,a.buffer,a.fileName)}),dr(i);try{let o=await i;return o.type==="text/plain"?o.text:o.body}catch(o){return Dt("failed to post request",o,{url:s})}});Gs=st(async(s,e,t)=>{try{return(await bc(s,e,t)).text}catch(r){return Dt("failed to getText request",r,{url:s,query:e})}}),Tc=st(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{return(await Xd(s,e,t,r,n)).text}catch(i){return Dt("failed to post request",i,{url:s})}}),Te=st(async(s,e,t,r,n)=>{try{return(await bc(s,e,t,r,n)).body}catch(i){return Dt("failed to get request",i,{url:s,query:e})}}),hw=st((s,e,t,r)=>bc(s,e,t,r)),yw=st(async s=>{let e=ft.default.head(s).timeout(Gr);dr(e);try{return await e}catch(t){return Dt("failed to head request",t,{url:s})}}),wc=st(async(s,e,t={},r=Gr)=>{let n=ft.default.put(s).send(e).timeout(r).set(t);dr(n);try{return(await n).body}catch(i){return Dt("failed to put request",i,{url:s})}}),vc=st(async s=>{yc.info("start to download",{url:s});let e=ft.default.get(s).set("User-Agent","Testim.io").timeout(dw).buffer(!0).parse(fw);dr(e);try{let t=await e;return yc.info("finished to download",{url:s}),t}catch(t){return Dt("failed to download",t,{url:s})}}),Sc=st.isNetworkHealthy,Ec=st.didNetworkConnectivityTestFail});function gt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Nt.resolve(__dirname,"../../"):s=Nt.resolve(__dirname,""),s):process.cwd()}function Ii(s,e){return Oe(s)?e||Nt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Nt.basename(s)}function tt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function xc(){try{return md.node}catch{return""}}async function em(s,e,t=!0){let r=await nt.promises.readdir(s,{withFileTypes:!0});await nt.promises.mkdir(e,{recursive:t});for(let n of r){let i=Nt.join(s,n.name),o=Nt.join(e,n.name);n.isDirectory()?await em(i,o):await nt.promises.copyFile(i,o)}}async function ye(s){try{return await nt.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Nt,Qd,Zd,nt,bw,Mt,Ke,Ri,Ic,it,Rc,tm=v(()=>{"use strict";Nt=I(require("node:path"));rc();mi();Qd=I(require("unzip-stream")),Zd=I(require("p-retry")),nt=require("node:fs"),bw=3;Mt=async s=>{let e=await Promise.resolve().then(()=>(Ve(),ze));return(0,Zd.default)(()=>e.download(s),{retries:bw,factor:1})},Ke=async(s,e)=>{let t=await Mt(s);return nt.promises.writeFile(e,t.body)};Ri=async(s,e)=>{let t=Ii(s,e);return Oe(s)?Ke(s,t):nt.promises.copyFile(s,t)},Ic=async s=>Oe(s)?Mt(s):nt.promises.readFile(s),it=async(s,e)=>(0,nt.createReadStream)(s).pipe(Qd.Extract({path:e})),Rc=s=>(0,nt.statSync)(s).size/1e6});var Ut={};H(Ut,{APPIUM_SESSION_MESSAGE:()=>Oc,CLI_MODE:()=>q,MOBILE_APP_SOURCE:()=>xi,MOBILE_RUN_SKIP_REASON:()=>kc,X_HEADER_RUNNER_ID:()=>_c,gridMessages:()=>ht,gridTypes:()=>L,mobileWeb:()=>Cc,runnerStatus:()=>Ac,runnerTestStatus:()=>me,socketEventTypes:()=>xt,stepResult:()=>qs,test:()=>Pc,testRunStatus:()=>Hs,testStatus:()=>Je,timeoutMessages:()=>Me});var Me,Hs,Ac,me,Je,ht,Cc,Pc,xt,q,L,qs,xi,kc,Oc,_c,ie=v(()=>{"use strict";Me={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},Hs={COMPLETED:"completed"},Ac={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},me={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Je={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},ht={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Cc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Pc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},xt={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"},L={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",TESTIM_PRIVATE:"testimPrivate",LAMBDATEST:"lambdaTest",TESTIM_LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC",P_CLOUDY:"pcloudy"},qs={SETUP_TIMEOUT:"setup-timeout",NETWORK_ERROR:"network-error",GRID_ERROR:"grid-error",SELENIUM_ERROR:"selenium-error",BROWSER_CLOSED:"browser-closed",MOBILE_SESSION_ERROR:"mobile-session-error",UNKNOWN_ERROR:"unknown-error"},xi={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},kc={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},Oc={APP_NOT_EXIST_ON_DEVICE:"used to start the app doesn't exist or cannot be launched",APP_NEVER_STARTED:"never started",DEVICE_OS_VERSION_TOO_LOW:"DeviceOSVersionTooLow",TIMEOUT_ERROR:"Timeout awaiting 'request'",SAUCELABS_APP_IS_NOT_INSTALLED:"Original error: 'app' option is required for reinstall"},_c="X-Testim-Runner-ID"});function zs(s,e){var t,r,n;return(t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length||!s.browser?[...new Set(e.map(i=>{var o;return(o=i.runConfig)==null?void 0:o.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function Tw(){let{argv:s}=process;if(s.includes("--remoteRunId"))return{remoteRunId:s[s.indexOf("--remoteRunId")+1],projectId:s[s.indexOf("--project")+1],token:s[s.indexOf("--token")+1]}}var Ks,rm,Ye,ww,vw,Sw,Ew,Iw,Lc,Dc,sm=v(()=>{"use strict";ie();Ks=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},rm=s=>Boolean(s.resultId&&s.source==="remote-run"),Ye=(s,e)=>s.testStatus===Je.QUARANTINE&&!rm(e)&&!e.runQuarantinedTests;ww=s=>Boolean(s.loginMode),vw=s=>Boolean(s.tunnelOnlyMode),Sw=s=>Boolean(s.createPrefechedData),Ew=s=>Boolean(s.installLazyDepsMode),Iw=s=>Boolean(s.agentMode),Lc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Dc=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function Ci(s=0){return Ai.default.duration(s).format("HH:mm:ss.SSS")}function Nc(s=0){return Ai.default.duration(s).asSeconds()}var Ai,nm,im=v(()=>{"use strict";Ai=I(require("dayjs")),nm=I(require("dayjs/plugin/duration"));Ai.default.extend(nm.default)});var Js,Hr,Jt,om,qr,am=v(()=>{"use strict";ie();Js=s=>!(!s||"fileName"in s),Hr=(s,e)=>{if(e===L.TESTIM_TVC)return!1;if(s){if(s.appMetadata&&"iOSSupportedTargetDevice"in s.appMetadata)return s.appMetadata.iOSSupportedTargetDevice==="virtual";if("fileName"in s)return s.fileName.endsWith(".app")}return!1},Jt=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},om=s=>s===L.TESTIM_TVC,qr=(s,e)=>om(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function Mc(s=4e3){let e=process.memoryUsage(),t=r=>Math.round(r/1024/1024*100)/100;return{isOverThreshold:t(e.rss)>s,rss:`${t(e.rss)} MB -> Resident Set Size - total memory allocated for the process execution`,heapTotal:`${t(e.heapTotal)} MB -> total size of the allocated heap`,heapUsed:`${t(e.heapUsed)} MB -> actual memory used during the execution`,external:`${t(e.external)} MB -> V8 external memory`}}var cm=v(()=>{"use strict"});var J={};H(J,{OSS:()=>zr,TESTIM_BROWSER_DIR:()=>Ft,buildBasicHeader:()=>tc,calcPercentile:()=>Oi,copyDir:()=>em,delay:()=>ce,doesPathExist:()=>ye,download:()=>Mt,downloadAndSave:()=>Ke,extractElementId:()=>_e,getArgsOnRemoteRunFailure:()=>Tw,getBrowserInfo:()=>xw,getCdpAddressForHost:()=>gr,getCliLocation:()=>gt,getDuration:()=>Ci,getDurationSec:()=>Nc,getEnginesVersion:()=>xc,getEnvironmentGitBranch:()=>fr,getLinksFromUnescapeHTML:()=>Qs,getLocalFileSizeInMB:()=>Rc,getMemorySnapshot:()=>Mc,getPlanType:()=>ki,getRunConfigByBrowserName:()=>Ys,getRunnerVersion:()=>tt,getSource:()=>Ri,getSourceAsBuffer:()=>Ic,getSourcePath:()=>Ii,getTestUrl:()=>qe,getUniqBrowsers:()=>zs,groupTestsByRetries:()=>Fc,guid:()=>re,hasTestPlanFlag:()=>Ks,isAgentMode:()=>Iw,isAppFromDevice:()=>Js,isAppFromDeviceDisabled:()=>qr,isCreatePrefetchedDataMode:()=>Sw,isInstallLazyDepsMode:()=>Ew,isLoginMode:()=>ww,isMobileProject:()=>Jt,isPromise:()=>fc,isQuarantineAndNotRemoteRun:()=>Ye,isRemoteRun:()=>rm,isTestimVirtualGrid:()=>om,isTunnelOnlyMode:()=>vw,isURL:()=>Oe,promiseAbort:()=>gc,promiseFromCallback:()=>Kt,promiseMap:()=>se,promiseTimeout:()=>le,removePropertyFromObject:()=>Pi,replaceArgsWithNoDashes:()=>Lc,sanitizeNumberValue:()=>mr,shouldBlockVirtualIosBuild:()=>Hr,spreadObjectToArgs:()=>Dc,unescapeHTML:()=>Xs,unzipFile:()=>it});function mr(s,e){let t=Number(s);return Number.isNaN(t)||t<=0?e:t}function xw(s){return s=s.toLowerCase(),Uc.find(e=>e.browserValue===s)}function Ys(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Uc.find(i=>i.browserName.toLowerCase()===s||s.includes(i.synonyms))||Uc[0],n=zr.find(i=>i.osName==="Windows 10");return e&&(e.platform?n=zr.find(i=>i.sl.platform===e.platform):e.platformName&&(n=zr.find(i=>i.sl.platformName===e.platformName))),t&&(t.os_version?n=zr.find(i=>i.bs.os_version===t.os_version):t.platform&&(n=zr.find(i=>i.bs.platform===t.platform))),Kr.merge(r,n)}function fr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function Pi(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&Pi(s[r],e,t))}function _e(s){return s.ELEMENT||s[Gt]}function ki(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Fc(s=[]){return Kr.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=t.slice().sort((i,o)=>{let a=typeof i.retryCount=="number"?i.retryCount:1,l=typeof o.retryCount=="number"?o.retryCount:1;return a===l?i.startTime-o.startTime:(i.retryCount??0)-(o.retryCount??0)}),n=Kr.cloneDeep(r.at(-1));return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}function Xs(s){return dm.parseFromString(`<html><body>${s}</body></html>`,"text/html").documentElement.textContent}function Qs(s){return[...dm.parseFromString(`<html><body>${s}</body></html>`,"text/html").getElementsByTagName("a")].map(t=>t.href).filter(Boolean)}async function gr(s,e){let t=await Promise.resolve().then(()=>(Ve(),ze));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 lm,Kr,um,pm,Rw,Ft,zr,Uc,Oi,dm,F=v(()=>{"use strict";lm=I(require("os")),Kr=I(require("lodash")),um=I(require("path")),pm=require("linkedom");jr();tm();sm();im();rc();hc();am();cm();Rw=lm.homedir(),Ft=um.join(Rw,".testim-browser-profile"),zr=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"},lt:{platform:"Linux"}},{osName:"Windows 11",bs:{os:"WINDOWS",os_version:"11"},sl:{platform:"Windows 11"},lt:{platform:"Windows 11"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"},lt:{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 Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17"},sl:{},lt:{platform:"macOS Sonoma",safari_version:"17"}},{osName:"macOS Ventura",bs:{os:"OS X",os_version:"Ventura",safari_version:"16.5"},sl:{platform:"macOS 13",safari_version:"latest"},lt:{platform:"macOS Ventura",safari_version:"16"}},{osName:"macOS Monterey",bs:{os:"OS X",os_version:"Monterey",safari_version:"15.6"},sl:{platform:"macOS 12",safari_version:"latest"},lt:{platform:"macOS Monterey",safari_version:"15"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14.1"},sl:{platform:"macOS 11",safari_version:"latest"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13.1"},sl:{platform:"macOS 10.15",safari_version:"latest"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12.1"},sl:{platform:"macOS 10.14",safari_version:"latest"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11.1"},sl:{platform:"macOS 10.13",safari_version:"latest"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10.1"},sl:{platform:"macOS 10.12",safari_version:"latest"}},{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:"latest"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"latest"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"latest"}},{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:"latest"}},{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"}}],Uc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"112"},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 Chromium",bs:{browser:"Edge",browser_version:"112"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{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"}];Oi=(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]};dm=new pm.DOMParser});var Bc={};H(Bc,{$schema:()=>Aw,default:()=>_w,definitions:()=>Cw,properties:()=>Ow,required:()=>kw,type:()=>Pw});var Aw,Cw,Pw,kw,Ow,_w,mm=v(()=>{Aw="http://json-schema.org/draft-07/schema#",Cw={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}}}},Pw="object",kw=["entries"],Ow={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},_w={$schema:Aw,definitions:Cw,type:Pw,required:kw,properties:Ow}});async function wm(){try{return await le(_i.promises.readFile(Mi()).then(async s=>{let e=await Tm;return Nw(e,s)}),3e4)}catch{return{}}}function Nw(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),i=Yr.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),o=i.update(r);return JSON.parse(Buffer.concat([o,i.final()]))}function Bt(s,e,t=Lw,r=void 0){return async()=>{if(!hm)return await s();let n=e;r&&(e+=JSON.stringify(r));let i=await Mw(e);if(i)return Zs.debug("cache hit:",{fnName:e}),i;if(Zs.debug("cache miss:",{fnName:e}),!ym)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let o=await s();return o&&await Uw(e,o,t),o}}async function Mw(s){let t=(await Ui)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function Uw(s,e,t){if(jc)throw Zs.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 Ui;r[s]={value:e,expiry:Date.now()+t},bm=new Promise(n=>{Ni=n}),Dw(r)}catch{Zs.error("failed updating cache")}}async function Xr(){let s=await Ui;Object.keys(s).forEach(e=>{delete s[e]})}function vm(s){hm=s}function Fw(s=!0){ym=s}async function Sm(){try{return jc=!0,await bm}finally{jc=!1}}function Em(s){Di=s,Ui=wm()}var _i,Li,Yr,fm,Zs,Di,gm,Ni,hm,ym,jc,bm,Tm,Lw,Mi,Ui,Dw,Im,Rm,gx,xm,Yt=v(()=>{"use strict";_i=I(require("fs")),Li=I(require("path")),Yr=I(require("crypto"));F();fm=require("lodash");W();Zs=P("local cache"),Di=Li.resolve(gt(),"testim-cache"),hm=!0,ym=!0,jc=!1,bm=new Promise(s=>{Ni=s}),Tm=new Promise(s=>{gm=s}),Lw=1e3*60*60*3,Mi=()=>Li.resolve(Li.resolve(Di,"testim.cache"));Ui=wm(),Dw=(0,fm.debounce)(async s=>{let e;try{let t=await Tm,r=Yr.randomBytes(16),n=JSON.stringify(s),i=Buffer.from(t),o=Yr.createCipheriv("aes-256-cbc",Buffer.concat([i,Buffer.alloc(32)],32),r),a=Buffer.concat([r,o.update(n),o.final()]);await ye(Di)||await _i.promises.mkdir(Di,{recursive:!0}),await _i.promises.writeFile(Mi(),a)}catch(t){Zs.error("failed saving cache",{err:t}),e=t}Ni(e?{success:!1,error:e}:{success:!0})},200);Im=gm,Rm=vm.bind(void 0,!1),gx=vm.bind(void 0,!0),xm=()=>Fw(!1)});function Fi(){return{cliLocation:gt(),userInfo:Qr.userInfo(),platform:Qr.platform(),release:Qr.release()}}var Qr,$c=v(()=>{"use strict";Qr=I(require("node:os"));F()});function Bw(s){try{return Bi.resolve(Bi.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 Xt(s){let e=Bw(s);return require(e)}var Bi,en=v(()=>{"use strict";Bi=I(require("path"))});function jw(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function $w(s){return/The "to" argument must be of type string./.exec(s)}function km(s,e,t){let r=jw(s),n=$w(s);return r||n?(Pm.info("Failed to install package due to insufficient write access",{...Fi(),package:t,path:r}),console.error(`
4
4
 
5
5
  Testim failed installing the package ${t||""} due to insufficient permissions.
6
6
  This is probably due to an installation of @testim/testim-cli with sudo, and running it without sudo.
@@ -400,7 +400,7 @@ Please make sure the CLI has stable access to the internet. ${Ec()?"(Internal: n
400
400
  `;return this.driver.executeJS(n,t.locatedElement)}async safariPreUploadActions(t){let r={width:"150px",height:"150px",left:"10px",top:"10px"};try{return await this.forceInputToBeVisible(t,r)}catch(n){throw la.error("failed to set input file in Safari recovery",{err:n}),n}}async uploadFilesAndForceVisibility(t,r){try{this.driver.isSafari()&&await this.safariPreUploadActions(r),await this.uploadFiles(t,r)}catch(n){let i="The element is not editable",o="The element is not focusable",a="An element command could not be completed because the element is not visible on the page.",l="element not interactable",c="element is not pointer- or keyboard interactable",d="invalid element state: Element is not currently interactable and may not be manipulated",m="Element must not be hidden, disabled or read-only",u="is not reachable by keyboard",f=n?n.message:"";if(f===d||f.startsWith(m)||f.startsWith(i)||f.startsWith(o)||f.startsWith(a)||f.includes(u)||f.includes(l)||f.includes(c)){await this.forceInputToBeVisible(r),await this.uploadFiles(t,r);return}throw la.error("failed to set input file",{err:n}),n}}async uploadFiles(t,r){for(let n of t)await this.driver.elementIdValue(_e(r.seleniumElement),n)}async performAction(){let t=this.getTarget(),r=_.flags.overrideAzureStorageUrl.isEnabled(),n=_.flags.downloadToBase64.isEnabled(),{sessionPlayerInit:i,context:o,step:a,stepActionUtils:l,driver:c}=this,d=await i.utils.addTokenToFileUrls(o.project.id,a.fileUrls,l.testimServicesApi,r,la);if(d.length===0)throw new Error("No files urls to upload");if(n&&(d=await Promise.all(d.map(async({name:u,url:f})=>{let h=await Mt(f);return{name:u,url:`data:${h.type};base64,${Buffer.from(h.body).toString("base64")}`}}))),c.isSafari()||c.isFirefox()||c.isEdgeChromium()){await this.driver.executeJS(`
401
401
  const getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};
402
402
  const downloadAndUploadFile = ${OE()};
403
- return downloadAndUploadFile.apply(null, arguments);`,t.locatedElement,d);return}let m=await Sy(d,this.uploadFile);await this.uploadFilesAndForceVisibility(m,t)}}});var pa,da,Ry=v(()=>{"use strict";pa=require("url");pe();da=class extends V{async updateBaseUrl(e){let t=new pa.URL(e),r=new pa.URL(this.context.recordedBaseUrl),n=new pa.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 ma,xy=v(()=>{"use strict";pe();F();ma=class extends V{async performAction(){await ce(this.step.durationMS||0)}}});var fa,Ay=v(()=>{"use strict";pe();fa=class extends V{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var Kn,Cy=v(()=>{"use strict";pe();Kn=class extends V{async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:r}=this.sessionPlayerInit;try{let i=await this.driver.executeCodeAsync(r,t,e);return(i==null?void 0:i.value)||{}}catch(i){throw(n=i==null?void 0:i.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.'):i}}runApiInBg(e){let{apiCall:t}=this.sessionPlayerInit;return t(e)}async performAction(){let{sessionPlayerInit:{commonConstants:e},step:t,context:r}=this,n={id:t.id,url:r.apiUrl,method:t.method,headers:r.apiHeaders,body:r.apiBody,timeout:r.data.maxTotalStepTime,omitCookies:t.omitCookies,forceUseFetch:["android","ios"].includes(r.project.type),formData:t.formData,fileUrls:r.fileUrls},i=t.sendViaWebApp?await this.runApiInAut(n):await this.runApiInBg(n),o=i.result||{},a={method:t.method,status:o.status,url:t.url};return i.success?o.status===0?{result:o,resultInfo:a,shouldRetry:!1,success:!1,reason:"Connection problem",errorType:e.stepResult.API_REQUEST_NETWORK_ERROR}:{result:o,resultInfo:a,shouldRetry:!1,success:!0}:{result:o,resultInfo:a,shouldRetry:!1,success:!1,reason:o.error||e.error.REQUEST_TIMED_OUT,errorType:o.exception?void 0:o.error?e.stepResult.API_FAILURE:e.stepResult.API_REQUEST_NETWORK_ERROR}}}});var ga,Py=v(()=>{"use strict";pe();ga=class extends V{async performAction(){let e=this.step.extractTextParamName,t=await this.stepActionUtils.extractTargetText(this.getTarget());return this.context.data.exports||={},this.context.data.exports[e]=t,{success:!0,data:this.context.data}}}});var ky,Fu,Bu,Oy=v(()=>{"use strict";ky=I(require("@applitools/spec-driver-webdriverio"));mi();we();Fu=class{constructor(){let{EyeSdkBuilder:e}=Z(),t=dd["@applitools/eyes-sdk-core"]||"N/A",{makeSDK:r}=require("@applitools/eyes-sdk-core");this.sdk=r({name:"Testim.io",version:`4.0.1/eyes-sdk-core/${t}`,spec:ky.default}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:i}=Z(),o=await this.sdk.makeManager({type:e?"ufg":"classic",concurrency:t});return i.rememberCreatedBatch(r,n),o}},Bu=new Fu});var Ly,_y,Jn,Dy=v(()=>{"use strict";Ly=I(require("lodash"));pe();W();Oy();_y=P("pixel-validation-step-action"),Jn=class extends V{async performAction(){var m,u;let{shouldUseVisualGrid:t,applitoolsSdkConfig:r,applitoolsSdkLogger:n,testResultId:i}=this.context;this.runContext=this.context.getRunContext(void 0);let o=((m=this.runContext.incomingParams)==null?void 0:m.final)||{},a=((u=r.batch)==null?void 0:u.id)||i,l=await Bu.getManager(t,this.context.config.applitoolsConcurrency||5,a,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},d;try{let f=await l.openEyes({driver:this.driver.client,config:r,logger:n}),g={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};Ly.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(g,o.applitoolsStepSettings),_y.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await f.check({settings:g}),d={isApplitoolsSdkResult:!0,success:!0,eyesResults:await f.close()}}catch(f){_y.error("Applitools SDK step failed",{err:f,info:f.info}),d={isApplitoolsSdkResult:!0,success:!1,err:f}}return await Bu.handleApplitoolsSdkResult(this.context,d,this.step)}}});var Ss,ju=v(()=>{"use strict";hs();Y();ta();Ss=class extends ir{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:i="",id:o=""}=e,{incomingParams:a,testResultId:l,retryIndex:c,stepResultId:d}=t,m={config:t.config,data:t.data},u=t.data.timeToPlayStep,f=await gs(i,o,a,m,l,c,d,u);return this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof oe?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var or,Ny=v(()=>{"use strict";ju();or=class extends Ss{isFailedResult(e){return e===!1}}});var ha,My=v(()=>{"use strict";ju();ha=class extends Ss{isFailedResult(e){return!e}}});var ya,Uy=v(()=>{"use strict";hs();pe();Y();ya=class extends V{async performAction(){let{stepId:e,packageData:t,resultId:r,retryIndex:n,stepResultId:i,timeToPlayBeforeExec:o}=this.context;try{return{data:await fs(e,r,n,t,i,o),success:!0}}catch(a){return a instanceof Rt?{success:!1,code:"invalid-node-package",message:a.message}:a instanceof oe?{success:!1,code:"timeout"}:{success:!1,reason:a.message,exception:a}}}}});var Lr,Fy=v(()=>{"use strict";pe();Lr=class extends V{async performAction(){return{success:"skipped",reason:"This step can run only in \u2018extension\u2019 run mode with either Chrome or Edge Chromium"}}}});var be,By=v(()=>{"use strict";pe();be=class extends V{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((i,o)=>this.context.playback.sfdcAddLog(i,o)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{let i=this.context.sfdcTestActions;if(i===void 0)throw new Error("No test actions were compiled");return{success:!0,reason:await e.sfdcExecute(t,i,this.context)}}catch(i){return{success:!1,reason:i.reason||i.message,exception:i,shouldRetry:!1}}finally{t.releaseObjects()}}}});var ba,jy=v(()=>{"use strict";pe();ba=class extends V{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((i,o)=>this.context.playback.sfdcAddLog(i,o)));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(i){return{success:!1,reason:i.reason||i.message,exception:i,shouldRetry:!1}}finally{t.releaseObjects()}}}});var Ta,$y=v(()=>{"use strict";pe();Ta=class extends V{async performAction(){let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler);try{return await e.sfdcExecuteJavascript(t,this.step.code||"",this.context),{success:!0}}catch(r){return{success:!1,reason:r.reason||r.message,exception:r,shouldRetry:!1}}finally{t.releaseObjects()}}}});function _E(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}function wa(s,e){_E(LE,e),e.registerLocateStepActionUtils(Gn.getUtils(s))}var LE,$u=v(()=>{"use strict";Uh();jh();Jh();Yh();Qh();ty();ny();iy();oy();ay();uy();py();dy();gy();by();Iy();Ry();xy();Ay();Cy();Py();Dy();Ny();My();Uy();Fy();By();jy();$y();LE={locate:Gn,scroll:Yo,mouse:Xo,submit:ia,text:Zo,"special-key":ra,"user-code":Wt,"validation-code-step":Wt,"wait-for-code-step":Wt,"action-code-step":Wt,"condition-step":vs,"skip-code-step":vs,"element-code-step":vs,"evaluate-expression":Qo,"text-validation":qn,"wait-for-text-validation":qn,"select-option":na,"drop-file":ca,"input-file":ua,hover:oa,navigation:da,wheel:aa,sleep:ma,refresh:fa,"keyboard-shortcut-step":sa,"api-validation":Kn,"api-action":Kn,"api-code-step":Wt,"extract-text":ga,"simple-ui-verification":Jn,"wait-for-simple-ui-verification":Jn,"cli-validation-download-file":Lr,"cli-wait-for-download-file":Lr,"network-validation-step":Lr,"cli-validation-code-step":or,"cli-wait-for-code-step":or,"cli-action-code-step":or,"cli-api-code-step":or,"cli-condition-step":ha,"node-package":ya,"email-code-step":Wt,"cli-email-code-step":or,"sfdc-internal-test-step":Ta,"sfdc-recorded-step":ba,"sfdc-step-login":be,"sfdc-step-loginas":be,"sfdc-step-logout":be,"sfdc-step-sobjectcreate":be,"sfdc-step-sobjectdelete":be,"sfdc-step-findrecord":be,"sfdc-step-quickaction":be,"sfdc-step-sobjectedit":be,"sfdc-step-sobjectvalidate":be,"sfdc-step-launchapp":be,"sfdc-step-wait-for-page-load":be,"sfdc-step-closeconsoletabs":be,"sfdc-step-relatedlistaction":be,"sfdc-step-permission-validation":be,"sfdc-step-convert-lead-to-opportunity":be,"sfdc-step-quotelineeditor":be,"sfdc-document-validation":Lr,"sfdc-step-flow-screen-completion":be,"sfdc-step-sobjectverifyoptions":be}});var Wy,DE,Es,Wu=v(()=>{"use strict";Wy=["simple-ui-verification","wait-for-simple-ui-verification"],DE=[...Wy,"custom-validation","sfdc-internal-test-step","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-wait-for-page-load","sfdc-step-closeconsoletabs","sfdc-step-sobjectedit","sfdc-step-relatedlistaction","sfdc-step-permission-validation","sfdc-step-convert-lead-to-opportunity","sfdc-step-quotelineeditor","sfdc-document-validation","sfdc-step-flow-screen-completion","sfdc-step-sobjectverifyoptions"],Es=class{constructor(e){this.isDebuggerConnected=e;this.totalStepTime=0;this.currentRetryStart=0;this.totalStepTimesReport=[];this.currentRetryTimes=[];this.currentRetryTimesReport={};this.resetStepVariables(),this.resetRetryVariables()}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=i=>{let o=this.getTotalStepTimeLeftToPlay(e,i),a=5e3;return o<=a?[a]:[Math.max(a,o/3)]};e.setStartTimestamp();let r=this.getTotalStepRunTime(e),n=DE.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return Wy.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+1e3}getTabTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getDynamicParentTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getFrameTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getLocateTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,r=e.step.type,n=3e4;return r==="sleep"?e.step.durationMS+t:Math.max(this.getTotalStepTimeLeftToPlay(e),n)}}});var Gy={};H(Gy,{SeleniumTestPlayer:()=>Yn});var Vy,NE,Yn,Vu=v(()=>{"use strict";F();Vy=require("@applitools/eyes-sdk-core");Ln();Y();W();_u();_h();Mu();Ko();Nh();Uu();we();$u();Wu();NE=P("SeleniumTestPlayer"),Yn=class{constructor(e,t,r,n,i=void 0,o=void 0){this.id=e;this.playbackTimeoutCalculator=new Es(Jo());let{SessionPlayer:a,commonConstants:l,StepActionFactory:c}=Z();this.driver=n??new Ar;let d=new zo(this.driver);this.stepActionFactory=new c(d),wa(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new Ho(this.driver),this.driver.tabService=this.tabService,this.tabService.createSesion(e);let m=Dh(this.driver);this.sessionPlayer=new a(e,{tabService:this.tabService,cookieUtils:new ws(this.driver),FrameLocator:m,portSelector:qo,LocateElementPlayer:null,stepActionUtils:d,stepActionFactory:this.stepActionFactory,playbackTimeoutCalculator:this.playbackTimeoutCalculator,makeSDK:Vy.makeSDK}),this.sessionPlayer.setShouldMonitorPerformance(Boolean(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=o,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(()=>null)}async onDone(){var r,n;let{commonConstants:e}=Z(),t=1e3*60*2;try{await le((r=this.driver)==null?void 0:r.end(),t)}catch(i){i instanceof oe&&await((n=this.driver)==null?void 0:n.forceEnd().catch(()=>null))}this.sessionPlayer.playbackManager.off(e.playback.RESULT,this.onStepCompleted),Object.assign(this,{sessionPlayer:null,tabService:null,stepActionFactory:null,driver:null})}clearSessionTabs(){this.tabService.clearAllTabs(this.id)}async addTab(e,t={loadInfo:!0}){let r=await this.driver.getTabIds();if(!Array.isArray(r)){NE.error("addTab: driver.getTabIds() returned a non-array",{ids:r});return}let n=r.at(-1);await this.tabService.addNewTab(this.id,n,e,t),await 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(),i=["app.testim.io"].concat(r);for(let o of n.reverse()){await this.tabService.addNewTab(this.id,o,e,{...t,forceSwitch:!0});let a=this.tabService.getTabInfo(this.id,o);if(i.some(l=>a.url.includes(l))){await this.tabService.removeTabInfo(this.id,o);continue}await this.sessionPlayer.addPlaybackFrameHandler(o,void 0,{emptyPage:!0})}if(this.tabService.tabCount(this.id)===1){let o=this.tabService.getMainTabInfo(this.id),a=this.tabService.getTabUtils(this.id,o);await this.tabService.switchTab(a.tabId,this.id,{forceSwitch:!0})}this.tabService.fixMissingMainTab(this.id)}getSessionId(){return this.driver.getSessionId()}}});var Hu={};H(Hu,{WorkerSelenium:()=>Gu});function UE(s){let{playback:e}=Z().commonConstants;for(let t of Object.values(e))s.playbackManager.on(t,()=>M(`Got event ${t}`))}var va,ME,Gu,qu=v(()=>{"use strict";F();je();Wn();W();Pt();Po();ie();ku();Y();Vu();we();at();va=P("worker-selenium"),ME=1e9,Gu=class extends Ot{initPlayer(t){return new Yn(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,i){M("in WorkerSelenium getBrowserOnce"),Q.onGetSession(this.id,this.testName,t.runMode);let{driver:o}=n;this.windowUtils=new Ts(this.id,o),n.clearSessionTabs();let{browserValue:a}=this.testRunConfig,l=t.baseUrl;try{let c=this.options.useLocalChromeDriver;await o.init({browserOptions:this.options,testName:this.testName,testRunConfig:this.testRunConfig,gridInfo:i,customExtensionLocalLocation:r,executionId:this.executionId,testResultId:this.testResultId,seleniumPerfStats:t.seleniumPerfStats,fastInit:c,lambdatestService:this.lambdatestService,printFinalCaps:this.options.printFinalCaps,mode:q.SELENIUM}),M("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:c}),M("in WorkerSelenium after addTab"),c||await this.windowUtils.navigate(l,ME),await this.windowUtils.validatePageIsAvailable(),M("in WorkerSelenium after navigate")}catch(c){let d=c.message&&(c.message.startsWith("Malformed URL")||c.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=c.message&&c.message==="invalid argument";throw c instanceof It||d||m?new It(`Page '${l}' is not available`):(va.error("failed to navigate to page",{baseUrl:l,err:c,whitelistedPublicIp:Ki(),initializedFromCache:Ji()}),c)}}async runTestOnce(t,r){var m;let{manifestVersion:n,localAssetService:i}=Z(),{driver:o,sessionPlayer:a}=r,l=n||"runner";Q.onWaitToTestComplete(this.id),UE(a),a.playbackManager.executionId=t.executionId,a.playbackManager.executionName=t.executionName,this.options.mode===q.SELENIUM&&a.setLightweightMode(this.options.lightweightMode),t.sfdcCredential&&a.setSfdcCredential(t.sfdcCredential),i.initialize({serverUrl:this.options.localRCASaver});let c=null;(m=this.options.lightweightMode)!=null&&m.preloadTests&&(c=(await Mn(this.options))[this.testId]);let d=async()=>le(new Promise((u,f)=>{a.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:l,resolve:u,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,incognito:!1,remoteRunId:t.remoteRunId,preloadedTest:c}).catch(f)}),this.testRunTimeout,Me.TEST_COMPLETE_TIMEOUT_MSG).catch(u=>{var f;throw u instanceof oe&&((f=a.stopPlayingOnTestTimeout)==null||f.call(a)),u}).then(async u=>{await i.drain(),u.stepsResults=null,u.resultId=this.testResultId,o.isAlive()||(va.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),u.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})`),u.keepAliveIssue=f);let g={...u,...t.seleniumPerfStats.getStats()};return this.lambdatestService.isLambdatestRun()&&await o.executeJS(`lambda-status=${g.success?"passed":"failed"}`).catch(()=>{}),g});o.start(),M("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,r),M("right after super.runTestOnce in workerSelenium");let u=await d();return M("right after runSeleniumTest"),u}catch(u){throw va.error("failed to run test once",{err:u}),u}}}});var Hy,qy,Ge,FE,BE,zu,vt,Sa=v(()=>{"use strict";Hy=I(require("ora")),qy=require("jimp");de();Ve();ge();W();ie();we();ue();Ge=P("mobile-grid-service"),FE="https://tdc.tricentis-cloud.com",BE="https://ui.headspin.io",zu=class{constructor(){this.gridsAppIdGetter={[L.TESTIM_TDC]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("testimTdcAppId",t),[L.TESTIM_TVC]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("testimTvcAppId",t),[L.P_CLOUDY]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("pCloudyAppId",t),[L.TESTIM_HEADSPIN]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("headSpinAppId",t),[L.BROWSERSTACK]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("browserStackAppId",t),[L.SAUCELABS]:({testRunHandler:e,mobileApp:t,gridHost:r})=>e.getSauceLabsAppPath(r,t)}}isTdcOrHeadSpinGrid(e){return e===L.TESTIM_TDC||e===L.TESTIM_HEADSPIN}getLockDeviceApiUrl(e){let t=this.getBaseApiUrl(e);return this.isTdcOrHeadSpinGrid(e.type)?`${t}/lock`:""}getBaseApiUrl(e){let{type:t,apiUrl:r}=e;return t===L.TESTIM_HEADSPIN?`${r||oc}/${cc}/devices`:t===L.TESTIM_TDC?`${r||ac}/${cc}/devices`:""}getHeaders(e){return{...this.isTdcOrHeadSpinGrid(e.type)&&{"Content-Type":"application/json",Authorization:`Bearer ${e.accessToken}`}}}buildRequestBody(e,t){return{...this.isTdcOrHeadSpinGrid(e.type)&&{device_id:t}}}async lockDevice(e,t){let r=this.getLockDeviceApiUrl(e),n=this.getHeaders(e),i=this.buildRequestBody(e,t);try{await We({url:r,headers:n,body:i})}catch(o){throw Ge.debug(`error while locking device ${t}`,{error:o}),o.status===401?new Error(`failed to lock device ${t}, device may be already locked and in use`):o}}async getHeadSpinDeviceConnection(e,t){let n=`${this.getBaseApiUrl(e)}/device_id:${t}/automation-config`;try{let i=await Te(n,void 0,this.getHeaders(e));return this.extractHeadSpinDeviceConnection(i,e.accessToken)}catch(i){throw Ge.error("error while getting automation config for device",{error:i,deviceId:t}),i}}async getPCloudyAuthToken(e,t,r){let n=await Gs(`https://${e}/api/access`,void 0,{Authorization:`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`});return JSON.parse(n).result.token}extractHeadSpinDeviceConnection(e,t){let r=Object.keys(e)[0],n=e[r].driver_url,i=new URL(n);return{hostname:i.hostname,port:Number(i.port),protocol:i.protocol.slice(0,-1),path:`/v0/${t}/wd/hub`}}async getGridDirectConnection(e,t){let r={};return this.isTdcOrHeadSpinGrid(e.type)&&(r=await this.getHeadSpinDeviceConnection(e,t)),r}getGridConnection(e){var r;if(this.isTdcOrHeadSpinGrid(e.type)){let n=(r=e.host)!=null&&r.includes("ulb.tdc.tricentis-cloud.com")?`/ulb/appium/v0/${e.accessToken}/wd/hub`:`/v0/${e.accessToken}/wd/hub`;return{protocol:e.protocol||"https",hostname:e.host,port:e.port,path:n}}if(e.type===L.TESTIM_TVC)return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/wd/hub"};if(e.type===L.P_CLOUDY)return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/appiumcloud/wd/hub",user:e.user,key:e.key};if([L.BROWSERSTACK,L.SAUCELABS].includes(e.type))return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/wd/hub",user:e.user,key:e.key}}async getDeviceNameFromSessionCaps({capabilities:e,gridType:t,projectId:r,projectType:n,companyId:i,gridId:o}){var a,l,c;if(t===L.TESTIM_HEADSPIN||t===L.TESTIM_TDC){let d=await Qn({projectId:r,projectType:n,companyId:i,gridId:o,selectors:`device_id:${e.udid}`});return((a=d==null?void 0:d[0])==null?void 0:a.name)||e.device}if(t===L.BROWSERSTACK)return((l=e.mobile)==null?void 0:l.version.split("-")[0])||((c=e.desired)==null?void 0:c.deviceName);if(t===L.SAUCELABS)return e.testobject_device_name;if(t===L.P_CLOUDY){if(e.pCloudy_DeviceFullName){let d=e.pCloudy_DeviceFullName.split("_");return`${d[0]} ${d[1]}`}return e.deviceModel}return e.device}async updateDeviceOnRemoteTestResult(e,t,r,n,i=!1){let{executionId:o,testId:a,testResultId:l}=e,{project:c,projectData:{type:d}={},company:{companyId:m=""}={},gridData:{gridId:u="",type:f=""}={}}=n,h=t.capabilities,g=h.platformName,y;if(f===L.TESTIM_TVC){let{getTvcDeviceInfoFromSessionCaps:w}=Z();y=w(t.capabilities,i)}else y=await this.getDeviceFromAppiumCapabilities(h,t,r,g,f,c,d,m,u,i);let T=await this.buildRemoteResultLink(n.gridData,t.sessionId,h);return await Ir(c,o,a,l,"RUNNING",{device:y,...T&&{remoteResultLink:T}}),Ge.info("device details updated on testResult",{testResultId:l,executionId:o,testId:a,device:y,remoteResultLink:T,gridType:f}),y}getOsVersion(e,t){var n;let r=e.platformVersion;return!r&&t===L.BROWSERSTACK?(n=e.mobile)==null?void 0:n.version.split("-")[1]:r}async getScaleFactorAndSize(e,t,r,n,i){if(e.pixelRatio&&typeof e.deviceScreenSize=="string"){let o=e.deviceScreenSize.split("x"),a=Number(o[0]),l=Number(o[1]);return{scaleFactor:e.pixelRatio,width:a,height:l}}try{let{AppiumApi:o}=Z(),a=new o(t,r.sessionId,null,i),[l,c]=await Promise.all([a.getScreenshot(),a.getDeviceSize()]),d=Buffer.from(l,"base64"),m=await qy.Jimp.fromBuffer(d),u=m.bitmap.width,f=m.bitmap.height;return{scaleFactor:u/c.width,width:u,height:f}}catch(o){return Ge.warn("failed to get device scale factor from appium, applying default scale factor",{err:o}),{scaleFactor:n==="android"?1:2}}}async getDeviceFromAppiumCapabilities(e,t,r,n,i,o,a,l,c,d){let[m,u]=await Promise.all([this.getScaleFactorAndSize(e,r,t,n,d),this.getDeviceNameFromSessionCaps({capabilities:e,gridType:i,projectId:o,projectType:a,companyId:l,gridId:c})]),f=this.getOsVersion(e,i);return{name:u??"",model:e.deviceModel,udid:e.udid,osVersion:f,osType:n,isVirtual:!1,...m}}async buildRemoteResultLink(e,t,r){return e.type===L.BROWSERSTACK?(await this.fetchWithUserAndPasswordAuth({url:`${Us}/sessions/${t}.json`,user:e.user,key:e.key})).automation_session.public_url:e.type===L.SAUCELABS?r.testobject_test_report_url:e.type===L.TESTIM_TVC?r.replayUrl:e.type===L.TESTIM_HEADSPIN||e.type===L.TESTIM_TDC?`${e.type===L.TESTIM_HEADSPIN?BE:FE}/sessions/${t}/waterfall`:""}async getTmaDeviceDetails(e,t){let n=(await Te(`${e}/api/devices`)).find(i=>i.udid===t);if(!n)throw new Error(`device ${t} not found`);return{udid:n.udid,name:n.name,model:n.model,height:n.height,width:n.width,geo:"local",osVersion:n.osVersion,osType:n.deviceType.toLowerCase(),scaleFactor:n.scaleFactor??0,isVirtual:n.virtual??!1,minApiVersion:n.minApiVersion}}async updateTmaDeviceDetails(e,t,r){let{executionId:n,testId:i,testResultId:o}=r,{project:a,localTmaUrl:l}=t,c=await this.getTmaDeviceDetails(l,e);return await Ir(a,n,i,o,"RUNNING",{device:c}),Ge.info("device details updated on testResult",{testResultId:o,executionId:n,testId:i,device:c}),c}async getGridAppId({gridData:e,testRunHandler:t,projectId:r}){let n=e.type,i=t.mobileApp,o=this.gridsAppIdGetter[n]({testRunHandler:t,mobileApp:i,gridHost:e.host});return o?(_.flags.allowFixingAppIdStructure.isEnabled()&&(Ge.info("fixing gridAppId structure",{gridAppId:o,projectId:r,testResultId:t.testResultId,executionId:t.executionId}),await Ju({gridAppId:o,gridId:e.gridId,projectId:r,gridType:n,appId:i.appId,gridHost:e.host})),o):t.getAppPathByGridType(n,e.gridId,i)}async getMobileAppDataByAppId({appId:e,projectId:t,token:r}){let n=await Xn({appId:e,projectId:t});return{appUrl:`${he}/storage${n.filePath}?access_token=${r}`,mobileApp:n}}calculateUploadRequestTimeOut(e){let t=0,r=Math.ceil(e/1024);return t=(Math.ceil(r/(Ad*60))+1)*60*1e3,Math.max(xd,t)}async uploadAppToGrid({projectId:e,testRunHandler:t,mobileApp:r,gridId:n,gridType:i}){let a={[L.BROWSERSTACK]:{name:"Browserstack"},[L.TESTIM_TVC]:{name:"Mobile Virtual Grid"},[L.P_CLOUDY]:{name:"pCloudy"}}[i].name;if(t.isAppFromDevice)throw new Error(`Application from your device, ${a} grid dose not support application from device. Please choose a compatible application for testing.`);let l=r||t.mobileApp,c=(0,Hy.default)(`uploading app to ${a} please wait..`).start();try{Ge.info(`uploading app to ${a} during test run`,{mobileApp:r,projectId:e,testResultId:t.testResultId,executionId:t.executionId});let d=await Ku({projectId:e,gridId:n,app:l,timeout:this.calculateUploadRequestTimeOut(l.fileSize)});return c.succeed(`app uploaded successfully to ${a}`),d.gridAppId}catch(d){throw c.fail(`failed to upload app to ${a}`),Ge.error(`failed to upload app to ${a}`,{error:d,mobileApp:r,projectId:e,testResultId:t.testResultId,executionId:t.executionId}),new Error(`failed to upload app to ${a}`)}}async verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:t,projectId:r,gridId:n,gridType:i,mobileAppId:o}){let a=t.get(o);if(a!=null&&a.isUploaded)return a.uploadedAppId;let l=await this.uploadAppToGrid({projectId:r,testRunHandler:e,gridId:n,gridType:i});return t.set(o,{isUploaded:!0,uploadedAppId:l}),l}async getAppIdFromGridOrTestimPublicLink({testRunHandler:e,options:t,pendingAppUploads:r}){let n="",i,{executionId:o,testResultId:a}=e,{appId:l="",project:c,authData:{token:d=""}={},gridData:m={}}=t,{gridId:u="",type:f=""}=m;if(!l&&e.isAppFromDevice)return n;if(l){Ge.info("getting appData by appId",{appId:l,projectId:c,testResultId:a,executionId:o});let T=await this.getMobileAppDataByAppId({appId:l,projectId:c,token:d});n=T.appUrl,i=T.mobileApp,e.nativeApp=i}else Ge.info("no appId setting appPath from app associated with the test",{projectId:c,testResultId:a,executionId:o}),n=e.downloadableAppPublicLink||"";let h=l||e.mobileApp.appId,g=await this.getGridAppId({projectId:c,gridData:m,testRunHandler:e}),y=f===L.BROWSERSTACK||f===L.TESTIM_TVC||f===L.P_CLOUDY;if(g){let T=t.projectData.type,w=await this.verifyAppStillExistsOnGrid({gridAppId:g,gridData:m,projectType:T});w&&(Ge.info("app exists on grid, using gridAppId",{gridAppId:g,projectId:c,testResultId:a,executionId:o,mobileAppId:h}),n=g),!w&&y&&(Ge.info("app not exists on grid, uploading it",{gridAppId:g,projectId:c,testResultId:a,executionId:o,mobileAppId:h}),n=await this.verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:r,projectId:c,gridId:u,gridType:f,mobileAppId:h})),!w&&!y&&Ge.info("app not exists on grid, using testimStorage url",{projectId:c,testResultId:a,executionId:o})}return!g&&y&&(n=await this.verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:r,projectId:c,gridId:u,gridType:f,mobileAppId:h})),n}async verifyAppStillExistsOnGrid({gridAppId:e,gridData:t,projectType:r}){var d,m;let{accessToken:n,user:i,host:o,key:a,type:l,apiUrl:c}=t;if(l===L.BROWSERSTACK){let u=`${Us}/recent_apps`,f=await this.fetchWithUserAndPasswordAuth({url:u,user:i,key:a});return Array.isArray(f)?f.some(h=>h.app_url===e):!1}if(l===L.SAUCELABS){let u=`https://${o==null?void 0:o.replace("ondemand","api")}/v1/storage/files`;return(await this.fetchWithUserAndPasswordAuth({url:u,user:i,key:a})).items.some(h=>h.id===e)}if(l===L.TESTIM_HEADSPIN||l===L.TESTIM_TDC){let u=`${c}/${lc}/apps`;return c||(u=`${l===L.TESTIM_HEADSPIN?oc:ac}/${lc}/apps`),(await this.fetchWithTokenAuth({url:u,accessToken:n,authType:"Bearer"})).apps.some(h=>h.app_id===e)}if(l===L.TESTIM_TVC){let u=`${Cd}/versions/${e}/info`,f=t[`${r}Token`];try{return await this.fetchWithTokenAuth({url:u,accessToken:f,authType:"Upload-Token",userAgent:"Testim-CLI"}),!0}catch(h){return h.status!==404&&Ge.error("error while verifying app exists on TVC",{error:h}),!1}}if(l===L.P_CLOUDY){let u=await this.getPCloudyAuthToken(o,i,a),f=`https://${o}/api/drive`,h=await Tc({url:f,body:{token:u,filter:"all"},headers:{contentType:null}});return(m=(d=JSON.parse(h).result)==null?void 0:d.files)==null?void 0:m.some(y=>y.file===e)}throw new Error(`grid type ${l} is not supported`)}async fetchWithUserAndPasswordAuth({url:e,user:t,key:r}){let n={Authorization:`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`};return await Te(e,void 0,n)}async fetchWithTokenAuth({url:e,accessToken:t,authType:r,userAgent:n}){let i={Authorization:`${r} ${t}`,...n&&{"User-Agent":n}};return await Te(e,void 0,i)}},vt=new zu});function zy({nativeAppMetadata:s,appPath:e,gridInfo:t}){if(!s&&!e||!s)throw Error("Application not specified. Please provide the required application for execution and try again.");if(!s.id&&!s.activity&&!s.packageName)throw Error("The application appears to be corrupted. Please ensure the application is in a valid state before running the test.");if(t.mode!=="local"&&!jE.includes(t.type))throw Error(`unsupported grid was detected please make sure to select supported mobile grid (${t.type})`)}function $E({deviceUdid:s,gridInfo:e,testRunConfig:t}){let{staticAllocation:r}=(t==null?void 0:t.mobile)||{};if(e.type!==L.TESTIM_TDC&&e.type!==L.TESTIM_HEADSPIN)throw Error("unsupported grid was detected please make sure to select supported mobile grid for direct connection");if(!s&&!(r!=null&&r.deviceUdid))throw Error("missing device udid or test run config is not static");if(!s&&(r!=null&&r.deviceUdid)&&r.deviceUdid.split(",").length!==1)throw Error("provided static config contains multi devices")}function WE(s){let{testName:e,executionId:t,testResultId:r,customTag:n}=s,i=[{executionId:t},{testResultId:r}];return e&&i.push({testName:e}),n&&i.push({customTag:n}),i}function VE(s,e,t){let{fullReset:r,setNoReset:n,skipLoadBalancer:i}=e,o=s===L.TESTIM_TDC,a=s===L.TESTIM_HEADSPIN,l=o?"tdc":"headspin",c=a&&_.flags.enableBatchHeadSpin.isEnabled(),d=o&&(_.flags.enableBatchTDC.isEnabled()||_.flags.headSpinTdcEnableFlagCapability.isEnabled()),m=_.flags.increaseTDCRequestTimeout.isEnabled();return{[`${l}:capture.video`]:!0,..._.flags.tdcHsPreventNetworkCapture.isEnabled()&&{[`${l}:capture.network`]:!1},...i&&{[`${l}:controlLock`]:!0},[`${l}:retryNewSessionFailure`]:!1,[`${l}:sessionTags`]:WE(t),[`${l}:enableBatch`]:c||d,...!r&&{"appium:noReset":n},...m&&{[`${l}:newCommandTimeout`]:600,"appium:newCommandTimeout":600}}}function Ea(s){return"id"in s?s.id:s.packageName}function GE(s,e){return{[`${e===L.TESTIM_TDC?"tdc":"headspin"}:app.id`]:s}}function HE({projectType:s,sessionCaps:e,options:t,nativeAppMetadata:r,appPath:n,androidActivityWait:i}){let{fullReset:o,setNoReset:a}=t,l={"appium:app":n},c=n==null?void 0:n.startsWith("http");n&&!c&&(l=GE(n,t.gridData.type));let m=()=>o===void 0&&n?!0:typeof o=="string"?o!=="false":o;switch(s){case"ios":return{...e,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest","appium:fullReset":m(),...r&&{"appium:bundleId":Ea(r)},...n&&l};case"android":return{...e,platformName:"Android","appium:fullReset":!!o,"appium:autoGrantPermissions":!a,"appium:automationName":"UiAutomator2",...i&&{"appium:appWaitActivity":`${i}, *`},...r&&{"appium:appPackage":Ea(r),"appium:appActivity":r.activity??".*"},...n&&l};default:throw Error(`unsupported mobile project ${s}`)}}function Nr({projectType:s,sessionCaps:e,nativeAppMetadata:t,appPath:r,androidActivityWait:n,appiumPrefix:i="",shouldRunInEnhancedMode:o}){switch(s){case"ios":return{platformName:"iOS",[`${i}autoAcceptAlerts`]:!0,[`${i}automationName`]:o?"WaldoTestim":"XCUITest",[`${i}fullReset`]:!0,...t&&{[`${i}bundleId`]:Ea(t)},...r&&{[`${i}app`]:r},...e};case"android":return{platformName:"Android",[`${i}autoGrantPermissions`]:!0,[`${i}automationName`]:o?"WaldoTestim":"UiAutomator2",...n&&{[`${i}appWaitActivity`]:`${n}, *`},...t&&{[`${i}appPackage`]:Ea(t),[`${i}appActivity`]:t.activity??".*"},...r&&{[`${i}app`]:r},...e};default:throw Error(`unsupported mobile project ${s}`)}}function Ky({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,sessionTags:n,options:i,gridInfo:o,shouldRunInEnhancedMode:a}){let l=VE(o.type,i,n);return HE({projectType:s,sessionCaps:l,options:i,nativeAppMetadata:e,appPath:t,androidActivityWait:r,shouldRunInEnhancedMode:a})}function Ra({osVersion:s,mobileConfig:e}){let{staticAllocation:t,dynamicAllocation:r}=e;return s||(t!=null&&t.osVersion?t==null?void 0:t.osVersion:r!=null&&r.osVersionRegex?r==null?void 0:r.osVersionRegex:".*")}function xa({deviceName:s,mobileConfig:e,projectType:t,gridType:r}){let{staticAllocation:n,dynamicAllocation:i}=e,o=r===L.P_CLOUDY;return s||(n!=null&&n.deviceName?o?n.deviceUdid:n.deviceName:i!=null&&i.deviceNameRegex?t==="android"&&i.deviceNameRegex===".*"&&o?uc:i.deviceNameRegex:t==="ios"&&r===L.BROWSERSTACK?"iPhone.*":o?t==="ios"?"apple":uc:".*")}function qE(s,e){let{androidToken:t,iosToken:r}=s,n=e==="ios";if(!t&&!r)throw Error("missing access token for testim virtual cloud");if(n&&!r)throw Error("missing ios token for testim virtual cloud");if(!n&&!t)throw Error("missing android token for testim virtual cloud");return n?r:t}function zE(s){return{"appium:appiumVersion":"2.0.0","appium:platformVersion":"10",...Ia(s,Is)}}function Jy(s,e,t){return s?Object.entries(s).reduce((r,[n,i])=>{if(e(n)){if(!t)return r[n]=i,r;let o=n.replace(t,"");r[o]=i}return r},{}):{}}function KE(s){return Jy(s,e=>e.startsWith("browserstack."),"browserstack.")}function JE(s){return Jy(s,e=>!e.startsWith("browserstack."))}function Yy(s){return!s||!Xy(s)?"2.0.0":s}function Xy(s){return s.split(".")[0]==="2"||s.includes("appium2")||s==="latest"}function Qy({osVersion:s,projectType:e,appiumVersion:t,isBrowserStack:r=!1}){let n=/^(1[4-9](\.\d+){0,2})$|^\^\(\?=1[4-9]((\.\d+){0,2})\.\*\)\.\*$/,i=/^(10(\.\d+){0,2})$|^\^\(\?=10((\.\d+){0,2})\.\*\)\.\*$/,o=/^(1[7-9](\.\d+){0,2})$|^\^\(\?=1[7-9]((\.\d+){0,2})\.\*\)\.\*$/,a=r&&i.test(s),l=e==="android"&&(n.test(s)||a),c=e==="ios"&&o.test(s),d=l||c;if(t){let m=Xy(t);return!m&&d?(console.warn(`Appium 2 is required for version: ${s}, forcing appium 2 for current session.`),!0):m}return d}function Ia(s,e){let t={};return Object.entries(s).forEach(([r,n])=>{let i=`${e}${r}`;t[i]=n}),t}async function YE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a,shouldRunInEnhancedMode:l}){let{osVersion:c,deviceName:d}=n,m=(a==null?void 0:a.mobile)||{},{type:u}=i,f=qE(i,s),h=await Qn({gridId:i.gridId,projectType:s,projectId:n.project,companyId:n.company.companyId}),g=h==null?void 0:h.find(({udid:S})=>{var E;return((E=m.staticAllocation)==null?void 0:E.deviceUdid)===S}),y=(g==null?void 0:g.osVersion)??Ra({osVersion:c,mobileConfig:m}),T=(g==null?void 0:g.name)??xa({deviceName:d,mobileConfig:m,projectType:s,gridType:u}),w=qe(n.editorUrl,n.project,o.testId,o.testResultId,o.branch),b={device:T,os_version:y,"waldo:displayName":`${o.testName}-${o.executionId}-${o.testResultId}`,"waldo:externalUrl":w,...l&&{"waldo:automationName":"WaldoTestim"},"waldo:options":{token:f}};return Nr({projectType:s,sessionCaps:b,nativeAppMetadata:e,appPath:t,androidActivityWait:r,shouldRunInEnhancedMode:l})}function XE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{user:m,key:u,type:f}=i,h=_.flags.enableAppium2pCloudy.isEnabled(),g=Ra({osVersion:l,mobileConfig:d}),y=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:f}),T=/^[a-zA-Z]+$/.test(y),w={...g!==".*"&&{pCloudy_DeviceVersion:g},...T&&{pCloudy_DeviceManufacturer:y},...!T&&{pCloudy_DeviceFullName:y}},b={pCloudy_Username:m,pCloudy_ApiKey:u,pCloudy_Individual:o.pCloudyIndividual,pCloudy_EnableVideo:!0,pCloudy_EnablePerformanceData:!0,pCloudy_EnableDeviceLogs:!0,...w,pCloudy_DurationInMinutes:n.duration?Number(n.duration):Number(Pd),pCloudy_ApplicationName:t,appiumVersion:"1.21.0",newCommandTimeout:600,lunchTimeout:"90000",uiautomator2ServerInstallTimeout:15e4,uiautomator2ServerLaunchTimeout:2e5};return h&&(b=zE(b)),t="",Nr({projectType:s,sessionCaps:b,nativeAppMetadata:e,appPath:t,androidActivityWait:r,...h&&{appiumPrefix:Is}})}function QE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{type:m}=i,u=Ra({osVersion:l,mobileConfig:d}),f=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:m}),h=(0,Dr.omit)({...n.saucelabs},["automationName","platformName"]),g={...h["sauce:options"]};if(delete h["sauce:options"],Qy({osVersion:h.platformVersion||u,projectType:s,appiumVersion:g.appiumVersion})){let T={debug:!0,networkLogs:!0},w={user:i.user,key:i.key,name:o.testResultId,build:o.executionId,appiumVersion:Yy(g.appiumVersion),deviceName:f,tags:Object.values(o)},b={"appium:platformVersion":u,"appium:deviceName":f,...Ia(h,Is),"sauce:options":{...T,...w,...(0,Dr.omit)(g,"appiumVersion")}};return Nr({projectType:s,sessionCaps:b,appiumPrefix:Is,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}let y={"saucelabs.user":i.user,"saucelabs.key":i.key,platformVersion:u,deviceName:f,tags:Object.values(o),name:o.testResultId,build:o.executionId,...h,...g};return Nr({projectType:s,sessionCaps:y,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}function ZE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{type:m}=i,u=Ra({osVersion:l,mobileConfig:d}),f=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:m}),h=KE(n.browserstack),g=(0,Dr.omit)(JE(n.browserstack),["automationName","platformName","project","build","name"]),{project:y,build:T,name:w}=n.browserstack||{},b=_.flags.enableAppium2BrowserStack.isEnabled();if(b||Qy({osVersion:g.platformVersion||u,projectType:s,isBrowserStack:!0,appiumVersion:h.appiumVersion})){let E={userName:i.user,accessKey:i.key,appiumVersion:b?"2.0.1":Yy(h.appiumVersion),projectName:y||o.project,buildName:T||o.executionId,debug:!0,networkLogs:!0},A={"appium:platformVersion":u,"appium:deviceName":f,...Ia(g,Is),"bstack:options":{...E,...(0,Dr.omit)(h,"appiumVersion")}};return Nr({projectType:s,sessionCaps:A,appiumPrefix:Is,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}let S={os_version:g.platformVersion||u,device:g.deviceName||f,realDevice:!0,name:w||o.testResultId,project:y||o.project,build:T||o.executionId,buildTags:Object.values(o).join(","),"browserstack.user":i.user,"browserstack.key":i.key,"browserstack.debug":!0,"browserstack.networkLogs":!0,...g,...Ia(h,"browserstack.")};return Nr({projectType:s,sessionCaps:S,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}async function eI(s){if(L.TESTIM_TDC===s.gridInfo.type||L.TESTIM_HEADSPIN===s.gridInfo.type)return Ky(s);if(L.TESTIM_TVC===s.gridInfo.type)return await YE(s);if(L.P_CLOUDY===s.gridInfo.type)return XE(s);if(L.SAUCELABS===s.gridInfo.type)return QE(s);if(L.BROWSERSTACK===s.gridInfo.type)return ZE(s);throw new Error(`unsupported grid type ${s.gridInfo.type}`)}function tI(s,e){var c,d;let{staticAllocation:t,dynamicAllocation:r,type:n}=e||{},{deviceName:i,osVersion:o,deviceUdid:a}=s,l={};return n==="dynamic"&&(!i&&((c=r==null?void 0:r.selector)!=null&&c.manufacturer)&&(l.manufacturer=r.selector.manufacturer),!o&&((d=r==null?void 0:r.selector)!=null&&d.osVersion)&&(l.os_version=r.selector.osVersion)),n==="static"&&!a&&(t!=null&&t.deviceUdid)&&(l.device_id=t.deviceUdid),i&&(l.manufacturer=i),o&&(l.os_version=o),a&&(l.device_id=a,delete l.os_version,delete l.manufacturer),l}async function Zy(s){let{gridInfo:e,nativeAppMetadata:t,options:r,appPath:n,testRunConfig:i}=s,{selectedGrid:o}=(i==null?void 0:i.mobile)||{};if(i!=null&&i.mobile&&(o==null?void 0:o.type)!==e.type)throw Error(`selected grid type ${o.type} is not equal to grid type ${e.type}`);zy({nativeAppMetadata:t,appPath:n,gridInfo:e});let a=vt.getGridConnection(e),l=await eI(s);if(e.type===L.TESTIM_HEADSPIN||e.type===L.TESTIM_TDC){let y=e.type===L.TESTIM_HEADSPIN?"headspin":"tdc",T=tI(r,i==null?void 0:i.mobile);if(!(0,Dr.isEmpty)(T)){let w=Object.entries(T).map(([b,S])=>S.split(",").map(E=>E===".*"||E==="="?"":`${b}:${E}`).join(",")).join(" ").trim();l[`${y}:selector`]=w}}let c=e.type===L.TESTIM_TVC?{alwaysMatch:l}:l,d=_.flags.increaseTDCRequestTimeout.isEnabled(),m=0,u=(0,Yu.default)("2m"),f=(0,Yu.default)("12m"),h=mr(_.flags.appiumConnectionRetryCount.getValue(),m),g=mr(_.flags.appiumConnectionRequestTimeout.getValue(),u);return d&&g<f&&(g=f),{...a,desiredCapabilities:l,connectionRetryTimeout:g,capabilities:c,connectionRetryCount:h,logLevel:r.appiumLogLevel}}async function eb(s){var h,g;let{projectType:e,gridInfo:t,nativeAppMetadata:r,options:n,appPath:i,androidActivityWait:o,sessionTags:a,testRunConfig:l}=s,{deviceUdid:c}=n;zy({nativeAppMetadata:r,appPath:i,gridInfo:t}),$E({deviceUdid:c,gridInfo:t,testRunConfig:l});let d=c||((g=(h=l.mobile)==null?void 0:h.staticAllocation)==null?void 0:g.deviceUdid),m=await vt.getGridDirectConnection(t,d),f=Ky({projectType:e,nativeAppMetadata:r,appPath:i,androidActivityWait:o,options:n,sessionTags:a,testRunConfig:l,gridInfo:t});return d&&(f["appium:udid"]=d),{...m,desiredCapabilities:f,capabilities:f,connectionRetryCount:0,logLevel:n.appiumLogLevel}}function tb(s){let{projectType:e,nativeAppMetadata:t,appPath:r,androidActivityWait:n}=s,o=Nr({projectType:e,sessionCaps:{dontStopAppOnReset:!0,fullReset:!1},nativeAppMetadata:t,appPath:r,androidActivityWait:n});return e==="ios"&&delete o.app,o}function rb(s){var t,r;let e={...s};return delete e.path,delete e.user,delete e.key,delete e.desiredCapabilities,delete e.capabilities["saucelabs.user"],delete e.capabilities["saucelabs.key"],delete e.capabilities["browserstack.user"],delete e.capabilities["browserstack.key"],(t=e.capabilities["sauce:options"])==null||delete t.user,(r=e.capabilities["sauce:options"])==null||delete r.key,delete e.capabilities.key,delete e.capabilities.user,e}var Yu,Dr,Is,jE,Xu=v(()=>{"use strict";Yu=I(require("ms"));ue();ie();Sa();Dr=require("lodash");F();de();ge();Is="appium:",jE=[L.BROWSERSTACK,L.SAUCELABS,L.TESTIM_HEADSPIN,L.TESTIM_TDC,L.TESTIM_TVC,L.P_CLOUDY]});var Aa,nb=v(()=>{"use strict";Aa=class{constructor(){this.sessionTabs={}}on(){}tabCount(){}getAllOpenTabIds(){return[]}isSessionTab(){return!1}getAllTabInfos(){return{}}async addNewTab(){}addOpenerStepId(){}addOpenerStep(){}getTabUtilsByTabIdAndSessionId(){}getTabUtilsByTabId(){return{}}getTabInfo(){return{}}getTabUtils(){return{}}getMainTabInfo(){}getMainTabUtils(){return{}}getMainTabId(){return null}async isMainTabExists(){return!1}clearAllTabs(){}async switchTab(){}async getTabDetails(){}async isMainTabIncognito(){return!1}async getTabIdByTabInfo(){return NaN}}});var Ca,ib=v(()=>{"use strict";F();Ca=class{constructor(e){this.driver=e;this._abortedSteps=[];this.unescapeHTML=Xs;this.getLinksFromUnescapeHTML=Qs}resetAbort(){this._abortedSteps.length=0}abort(e){this._abortedSteps.push(e)}get abortedSteps(){return this._abortedSteps}async executeInAut(e,t){throw new Error("not implemented (mobile)")}extractTargetText(e){throw new Error("not implemented (mobile)")}getCookie(e){throw new Error("not implemented (mobile)")}setCookie(e){throw new Error("not implemented (mobile)")}async getNextDynamicParent(e,t){throw new Error("not implemented (mobile)")}}});var Qu,Pa,ob=v(()=>{"use strict";W();Qu=P("mobile-frame-locator-mock"),Pa=class{foundFrameCallback(){return Qu.info("foundFrameCallback-mock invoked"),{}}locate(){return Qu.info("locate-mock invoked"),{}}async findFrame(){return Qu.info("findFrame-mock invoked"),{}}}});var rI,cb,ab,Rs,Zu=v(()=>{"use strict";rI=I(require("webdriverio")),cb=require("@applitools/eyes-sdk-core");nb();Mu();W();ib();Uu();we();$u();ob();Wu();ab=P("appium-test-player"),Rs=class{constructor(e,t,r,n=rI,i=void 0,o=void 0){this.id=e;this.driver=n;let{SessionPlayer:a,commonConstants:l,StepActionFactory:c,MobileLocateElementPlayer:d}=Z(),m=new Ca(this.driver);this.stepActionFactory=new c(m),wa(this.driver,this.stepActionFactory),this.playbackTimeoutCalculator=new Es(Jo()),this.sessionPlayer=new a(e,{tabService:new Aa,cookieUtils:void 0,FrameLocator:Pa,portSelector:qo,LocateElementPlayer:d,stepActionUtils:m,stepActionFactory:this.stepActionFactory,playbackTimeoutCalculator:this.playbackTimeoutCalculator,makeSDK:cb.makeSDK}),this.sessionPlayer.setShouldMonitorPerformance(Boolean(r)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=o,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(){let{playbackManager:e}=this.sessionPlayer,{executionId:t,testResult:{resultId:r}={},appiumApi:n}=e,i={executionId:t,testResultId:r,sessionId:n==null?void 0:n.sessionId};try{n!=null&&n.sessionId&&(await(n==null?void 0:n.endSession()),ab.info("appium session deleted",{...i}))}catch(o){ab.error("error while deleting appium session",{...i,error:o})}finally{let{commonConstants:o}=Z();e.off(o.playback.RESULT)}}getSessionId(){var e;return(e=this.sessionPlayer.playbackManager.appiumApi)==null?void 0:e.sessionId}}});async function sI(s){return await Te(`${s}/api/status`)}async function lb(s,e){return await Te(`${s}/api/devices/${e}/status`)}async function ub(s){if((await sI(s)).fsmState!=="Ready")throw new Error("TMA is not ready")}var pb=v(()=>{"use strict";Ve()});var db={};H(db,{WorkerLocalTma:()=>sp});var Mr,ep,tp,rp,sp,mb=v(()=>{"use strict";Ve();Xu();Wn();F();W();Pt();Zu();we();pb();Sa();Mr=P("worker-appium"),ep=class extends Error{},tp=class extends Error{},rp=class extends Error{},sp=class extends Ot{constructor(){super(...arguments);this.baseDevicePath=(t,r)=>`${t}/api/devices/${r}`}initPlayer(t){return new Rs(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async initAndGetAppiumAPI(t){if(t.sessionPlayer.playbackManager.appiumApi)return t.sessionPlayer.playbackManager.appiumApi;let{AppiumApi:r}=Z(),{DOMParser:n}=await import("linkedom"),i=new r(this.sessionData.serverAddress,this.sessionData.sessionId,n,!1);return t.sessionPlayer.playbackManager.appiumApi=i,i}async getBrowserOnce(t,r,n,i){var E;if(Q.onGetSession(this.id,this.testName,t.runMode),!this.options.localTmaUrl||!this.options.deviceUdid)throw new Error("Missing localTmaUrl or deviceUdid");let{localTmaUrl:o,deviceUdid:a,projectData:l}=this.options;await ub(o);let{project:c,authData:{token:d=""}={}}=this.options,{driver:m}=n,u=l.type,f=this.options.appId;if(f){let{mobileApp:A}=await vt.getMobileAppDataByAppId({appId:f,projectId:c,token:d});t.nativeApp=A}let h=u==="android"?t.androidActivityWait:null,g=t.nativeAppMetadata,y=t.downloadableAppPublicLink,T=t.appPackageNameOrBundleId;if(!g)throw new Error("Application not specified. Please provide the required application for execution and try again.");if(!T)throw new Error("The application appears to be corrupted. Please ensure the application is in a valid state before running the test.");let[{appInstalled:w,version:b},S]=await Promise.all([this.getAppStateFromDevice(o,a,T),lb(o,a)]).catch(A=>{throw this.handleDeviceNotFoundError(A),A});if(Mr.info("device status and app state",{deviceStatus:S,appInstalled:w,version:b,executionId:this.executionId,testResultId:this.testResultId}),!w&&t.isAppFromDevice&&!f)throw new Error("The application is not installed on the target device. Please ensure the application is installed and try again.");!w&&y&&(await this.installApp(o,a,y),Mr.info("Application installed successfully",{deviceUdid:a,executionId:this.executionId,testResultId:this.testResultId}));try{let A={testName:this.testName,executionId:this.executionId,testResultId:this.testResultId,project:`${(E=this.options.projectData)==null?void 0:E.name}-${this.options.project}`},D=tb({projectType:u,nativeAppMetadata:g,appPath:y,androidActivityWait:h,sessionTags:A,gridInfo:i,options:this.options,testRunConfig:this.testRunConfig}),j={capabilities:{udid:a,...D}};Mr.info("requesting new appium session from TMA",{tmaSessionSettings:j,executionId:this.executionId,testResultId:this.testResultId});let R=await this.requestNewAppiumSessionFromTma(o,j,g);this.sessionData=R;let x=await m.attach({sessionId:R.sessionId,capabilities:D,options:{capabilities:D}});this.device=await vt.updateTmaDeviceDetails(a,this.options,t),Mr.info(`init new appium session with local TMA testName: ${this.testName}`,{sessionId:x.sessionId,testResultId:this.testResultId,nativeAppMetadata:g,sessionCaps:x.capabilities})}catch(A){throw Mr.error("failed to start application",{err:A}),A}}async requestNewAppiumSessionFromTma(t,r,n){var i,o;try{let a=await We({url:`${t}/api/session`,headers:{"Content-Type":"application/json"},body:r,timeout:6e4}),l={name:n.name,version:n.version};return{...a,appInfo:l,env:"local-tma"}}catch(a){this.handleDeviceNotFoundError(a);let l=(o=(i=a.response)==null?void 0:i.body)==null?void 0:o.message;throw a.status===500&&typeof l=="string"&&l.startsWith("Failed to create driver session")?new rp(l):a}}async getAppStateFromDevice(t,r,n){let i=this.options.projectData.type==="ios"?"bundles":"apps",o=`${this.baseDevicePath(t,r)}/${i}`,l=(await Te(o)).find(c=>"id"in c?c.id===n:c.packageName===n);return l?{appInstalled:!0,version:l.version}:{appInstalled:!1,version:""}}async installApp(t,r,n){var i,o;try{let a=await Mt(n);await Vs(`${this.baseDevicePath(t,r)}/apps`,{},{file:{buffer:a.body,fileName:"app"}})}catch(a){this.handleDeviceNotFoundError(a);let l=(o=(i=a.response)==null?void 0:i.body)==null?void 0:o.message,c="Failed to install app";throw l&&(c=`${c}: ${l}`),new tp(c,{cause:a})}}handleDeviceNotFoundError(t){var n,i;let r=(i=(n=t.response)==null?void 0:n.body)==null?void 0:i.message;if(t.status===404&&typeof r=="string"&&(r!=null&&r.startsWith("Ensure that the requested device")))throw new ep(`Device Unavailable: Please ensure that the specified device ${this.options.deviceUdid} is currently connected`)}async runTestOnce(t,r){let{manifestVersion:n,localAssetService:i}=Z(),{sessionPlayer:o}=r,a=n||"runner";Q.onWaitToTestComplete(this.id),o.playbackManager.executionId=t.executionId,o.playbackManager.executionName=t.executionName,o.playbackManager.appiumSessionData={...this.sessionData,device:this.device},await this.initAndGetAppiumAPI(r),i.initialize({serverUrl:this.options.localRCASaver});let l=async()=>{try{let c=await new Promise((m,u)=>{o.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:a,resolve:m,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,remoteRunId:t.remoteRunId}).catch(u)});return await i.drain(),c.stepsResults=null,c.resultId=this.testResultId,{...c,...t.seleniumPerfStats.getStats()}}catch(c){throw Mr.error("error while running appium tests",{err:c}),c}};try{return await super.runTestOnce(t,r),await l()}catch(c){throw Mr.error("failed to run test once",{err:c}),c}}}});var gb={};H(gb,{WorkerAppium:()=>np});var fb,Ur,np,hb=v(()=>{"use strict";F();Xu();fb=require("linkedom");Wn();W();Pt();Zu();we();Sa();ie();os();Ur=P("worker-appium"),np=class extends Ot{initPlayer(t){return new Rs(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,i){let o=this.options.projectData.type,a=(o==="android"||o==="ios")&&await t.isTestRecordedWithEnhancedMode();if(i.type!==L.TESTIM_TVC&&a)throw Error("The provided test(s) were authored in Enhanced Mode and can run only on VMG!");Q.onGetSession(this.id,this.testName,t.runMode);let{driver:l}=n,c=await vt.getAppIdFromGridOrTestimPublicLink({testRunHandler:t,options:this.options,pendingAppUploads:this.executionQueue.pendingAppUploads}),d=o==="android"?t.androidActivityWait:null,m=t.nativeAppMetadata;if(!m)throw new Error("Application not specified. Please provide the required application for execution and try again.");try{let u={testName:this.testName,executionId:this.executionId,testResultId:this.testResultId,project:`${this.options.projectData.name}-${this.options.project}`,...this.options.customTag&&{customTag:this.options.customTag},testId:this.testId,branch:this.branch,pCloudyIndividual:`${this.executionId}-${this.uniqueId}`},f={projectType:o,nativeAppMetadata:m,appPath:c,androidActivityWait:d,sessionTags:u,gridInfo:i,options:this.options,testRunConfig:this.testRunConfig,shouldRunInEnhancedMode:a},h;this.options.skipLoadBalancer&&this.options.deviceUdid?(this.options.lockDevice&&await vt.lockDevice(i,this.options.deviceUdid),h=await eb(f)):h=await Zy({...f,shouldRunInEnhancedMode:a}),Ur.info("starting appium session",{testResultId:this.testResultId,executionId:this.executionId,sessionTags:u,nativeAppMetadata:m,capabilities:rb(h)}),h.headers={"User-Agent":this.getUserAgentString()};let g=this.getServerAddressFromGrid();this.activeSession=await l.remote(h),this.device=await vt.updateDeviceOnRemoteTestResult(t,this.activeSession,g,this.options,a);let y=`${g}/session/${this.activeSession.sessionId}`;this.updateSlotData(y),Ur.info("appium session started successfully",{sessionId:this.activeSession.sessionId,testResultId:this.testResultId,executionId:this.executionId,sessionCaps:this.activeSession.capabilities})}catch(u){throw Ur.error("failed to start application",{testResultId:this.testResultId,executionId:this.executionId,err:u}),u}}startKeepAlive(t){let{errors:r}=Z(),n=async()=>{try{await t.getOrientation()}catch(i){Ur.error("failed to keep appium session alive",{err:i}),r!=null&&r.AppiumSessionTerminatedError&&i instanceof r.AppiumSessionTerminatedError&&this.stopKeepAlive()}};this.keepAliveIndex=setInterval(n,25e3)}stopKeepAlive(){this.keepAliveIndex&&clearTimeout(this.keepAliveIndex)}updateSlotData(t){try{this.options.slotService==="redis"&&Mf(this.options.company.companyId,this.options.projectData.projectId,{testResultId:this.testResultId,executionId:this.executionId,type:"execution",source:this.options.source,sessionUrl:t},this.id)}catch(r){Ur.error("failed to update slot data",{err:r})}}getServerAddressFromGrid(){let{host:t,port:r,accessToken:n,type:i}=this.options.gridData;return i===L.TESTIM_HEADSPIN||i===L.TESTIM_TDC?`https://${t}:${r}/v0/${n}/wd/hub`:i===L.P_CLOUDY?`https://${t}/appiumcloud/wd/hub`:`https://${t}:${r}/wd/hub`}getDirectAddressConnection(){let{protocol:t,hostname:r,port:n,path:i}=this.activeSession.options;if(t&&r&&n&&i)return`${t}://${r}:${n}${i}`}async runTestOnce(t,r){var f,h,g;let{manifestVersion:n,AppiumApi:i,localAssetService:o}=Z(),{sessionPlayer:a}=r,l=n||"runner",c=this.options.timeout;Q.onWaitToTestComplete(this.id),a.playbackManager.executionId=t.executionId,a.playbackManager.executionName=t.executionName;let d;if(this.options.skipLoadBalancer){let y=this.options.deviceUdid||((f=this.testRunConfig.mobile)==null?void 0:f.staticAllocation.deviceUdid),{protocol:T,hostname:w,port:b,path:S}=await vt.getHeadSpinDeviceConnection(this.options.gridData,y);d=`${T}://${w}:${b}${S}`}else d=this.getDirectAddressConnection()||this.getServerAddressFromGrid();let m=this.activeSession.capabilities;a.playbackManager.appiumSessionData={env:"remote",capabilities:m,sessionId:this.activeSession.sessionId,sessionToken:this.options.gridData.accessToken,gridType:this.options.gridData.type,projectType:this.options.projectData.type,gridId:this.options.gridData.gridId,companyId:(h=this.options.company)==null?void 0:h.companyId,device:this.device},a.playbackManager.appiumApi=new i(d,this.activeSession.sessionId,fb.DOMParser,((g=this.device)==null?void 0:g.domMode)==="enhanced"),this.startKeepAlive(a.playbackManager.appiumApi),o.initialize({serverUrl:this.options.localRCASaver});let u=async()=>{try{let y=await new Promise((w,b)=>{a.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:l,resolve:w,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,remoteRunId:t.remoteRunId}).catch(b)});return this.stopKeepAlive(),await o.drain(),y.stepsResults=null,y.resultId=this.testResultId,{...y,...t.seleniumPerfStats.getStats()}}catch(y){throw Ur.error("error while running appium tests",{testResultId:this.testResultId,executionId:this.executionId,err:y}),this.stopKeepAlive(),y}};try{return await super.runTestOnce(t,r),await le(u(),c)}catch(y){throw Ur.error("failed to run test once",{err:y}),y}}getUserAgentString(){return"Testim/CI-Branch:runner-v4.148.1"}}});var ka,yb=v(()=>{"use strict";F();Ln();Y();ka=class{constructor(e){this.id=e;this.driver=new Ar}async onDone(){try{await le(this.driver.end(),12e4)}catch(t){t instanceof oe&&await this.driver.forceEnd().catch(()=>null)}this.driver=null}getSessionId(){return this.driver.getSessionId()}}});var bb,Oa,Tb=v(()=>{"use strict";bb=I(require("ws"));F();Oa=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=Kt(i=>{t.once("open",i)}),n=Kt(i=>{t.once("error",i)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",i=>this.onCDPMessage(i)),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||=0;let i=this._lastWsId++,o=new Promise((l,c)=>{this._cdpCallbacks.set(i,{resolve:l,reject:c})}),a={method:e,params:t,id:i};return r&&Object.assign(a,{sessionId:r}),n.send(JSON.stringify(a)),o}}});var La,ip,_a,wb=v(()=>{"use strict";F();La=I(require("chrome-launcher"));eu();Tb();En();ip=class{constructor(e){this.sessionId=e;this._isAlive=!1;this.cdpTestRunner=new Oa}async init(e){var h,g,y,T;let{browserOptions:t,testName:r,testRunConfig:n,gridInfo:i,customExtensionLocalLocation:o,executionId:a,testResultId:l,printFinalCaps:c,mode:d}=e,m=Ro({browserOptions:t,testName:r,testRunConfig:n,gridInfo:i,customExtensionLocalLocation:o,executionId:a,testResultId:l,printFinalCaps:c,mode:d}),u=[...((h=m.desiredCapabilities)==null?void 0:h.chromeOptions.args)??[],...((T=(y=(g=m.capabilities)==null?void 0:g.alwaysMatch)==null?void 0:y["goog:chromeOptions"])==null?void 0:T.args)??[],...La.Launcher.defaultFlags().filter(w=>w!=="--disable-extensions")];this.chrome=await La.launch({chromeFlags:u,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let f=await gr(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(f),as(()=>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}},_a=class{constructor(e){this.id=e;this.sessionId=re();this.driver=new ip(this.sessionId)}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var op={};H(op,{WorkerExtension:()=>Zn});function nI(s){return s instanceof Error&&"type"in s&&typeof s.type=="string"}function vb(s){return nI(s)?s:new Error(s)}var dt,Zn,Da=v(()=>{"use strict";je();Y();Wn();F();W();Pt();ie();yb();wb();at();dt=P("worker-ext"),Zn=class extends Ot{initPlayer(){return this.options.useChromeLauncher?new _a(this.id):new ka(this.id)}async _getBrowserOnce(e,t,r,n){var o;let{driver:i}=r;try{return await i.init({overrideConfiguration:e.overrideTestConfig,browserOptions:this.options,testName:this.testName,testRunConfig:this.testRunConfig,gridInfo:n,customExtensionLocalLocation:t,executionId:this.executionId,testResultId:this.testResultId,seleniumPerfStats:e.seleniumPerfStats,fastInit:(o=this.options.lightweightMode)==null?void 0:o.general,lambdatestService:this.lambdatestService,printFinalCaps:this.options.printFinalCaps,mode:q.EXTENSION})}catch(a){throw dt.error("failed to get browser",{err:a,gridInfo:n,whitelistedPublicIp:Ki(),initializedFromCache:Ji(),testId:e.testId,resultId:e.testResultId,publicIps:this.options.publicIps}),a}}async getBrowserOnce(e,t,r,n){return Q.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,r,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async updateTestStatusOnGrid(e,t,r){var i;let n=t?"passed":"failed";if(this.lambdatestService.isLambdatestRun()&&await e.executeJS(`lambda-status=${n}`),"browserstack"in this.options&&((i=this.options.browserstack)!=null&&i["browserstack.user"])){let o={action:"setSessionStatus",arguments:{status:n,reason:r}};await e.execute(`browserstack_executor: ${JSON.stringify(o)}`)}}async runTestOnce(e,t){let{testResultId:r,executionId:n,testId:i}=this;M("WorkerExtension runTestOnce");let o=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await le(e.runTestUsingCDP(d.cdpTestRunner),m,Me.TEST_START_TIMEOUT_MSG)}catch(u){if(!(u instanceof oe))throw u;return dt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,u)=>{try{let f=await d.url(m);return u.driverUrlFinished=!0,f}catch(f){throw dt.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:i,url:m,urlLength:m.length}),f}},l=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},c=async()=>{var f;if(M("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);try{return{...await o(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw dt.warn("failed to run test via CDP",{err:h}),h}}let{driver:m}=t,u={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Q.onWaitToTestStart(this.id);try{await le(Promise.all([a(t.driver,h,u),l(u)]),this.options.testStartTimeout,Me.TEST_START_TIMEOUT_MSG)}catch(T){if(!(T instanceof oe))throw T;dt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:i,...u}),await e.checkViaRestAPIIfTestStarted()}Q.onWaitToTestComplete(this.id);let g=new AbortController,y=T=>{e.onCompletedCleanup(),dt.warn("on browser closed error detected",{err:T,testResultId:r,executionId:n,testId:i}),m.unregisterToClosedBrowser(y),T.type=qs.BROWSER_CLOSED,g.abort(T)};m.registerToClosedBrowser(y);try{let T=le(e.onCompleted(),this.testRunTimeout,Me.TEST_COMPLETE_TIMEOUT_MSG),w=await gc(T,g.signal);m.unregisterToClosedBrowser(y);try{await this.updateTestStatusOnGrid(m,Boolean(w.success),w.reason)}catch(E){dt.error("Could not update the grid about the test status",{err:E})}m.isAlive()||(dt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),w.gridIssues="could not validate grid is alive");let b=m.maxKeepAliveGap();return b>=3e4&&(dt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),w.keepAliveIssue=b),{...w,...e.seleniumPerfStats.getStats()}}catch(T){throw dt.warn("timeout wait until test completed",{err:T,testResultId:r,executionId:n,testId:i}),vb(T)}finally{m.unregisterToClosedBrowser(y)}}catch(h){throw dt.warn("failed to start url",{err:h}),vb(h)}};t.driver.start();try{return await super.runTestOnce(e,t),M("WorkerExtension super.runTestOnce"),await c()}catch(d){throw dt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var cp={};H(cp,{WorkerExtensionSingleBrowser:()=>ap});var iI,oI,ap,lp=v(()=>{"use strict";je();F();W();xu();Pt();Da();iI=P("base-worker"),oI=500,ap=class extends Zn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await jn(this.id,this.releaseSlotOnTestFinished,t,this.options.company.companyId,this.options.slotService,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,i){return Q.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,r,n,i)}async getTestPlayer(t,r){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(iI.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 i=this.handleQuarantine(t);if(i)return i;M("before runTest onTestStarted single browser");let o=await this.onTestStarted(this.id,t.testId,t.testResultId,n,t.retryKey);t.baseUrl=o.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 ce(oI)}}});var up,Na,Sb=v(()=>{"use strict";Ln();de();je();hl();at();au();Y();W();ie();gh();Mo();up=P("worker-manager"),Na=class{constructor(e){this.customExtensionLocalLocation=e;this.workerIdCount=0;this.parallelCount=0;this.workers=new Map;this.combinedTestResults={};this.workerUniqueIds=[];this.onWorkerFinished=async(e,...t)=>{this.workers.has(e)&&(this.workers.delete(e),this.executionQueue.hasMoreTests()&&this.workers.size<this.parallelCount&&this.runWorker(...t))};this.runWorker=async(...e)=>{let t=++this.workerIdCount;this.workers.set(t,null);let r=this.executionQueue.getNext();if(!r){this.workers.delete(t);return}let n=this.workerUniqueIds[t%this.parallelCount],i=await this.createWorker(r.runConfig.browserValue,...e);this.workers.set(t,i),i.id=t,i.uniqueId=n,i.run(r,this.onWorkerFinished,...e)}}async getWorkerType({mode:e,localTmaUrl:t},r){if(e)switch(e){case q.SELENIUM:return(await Promise.resolve().then(()=>(qu(),Hu))).WorkerSelenium;case q.APPIUM:return t?(await Promise.resolve().then(()=>(mb(),db))).WorkerLocalTma:(await Promise.resolve().then(()=>(hb(),gb))).WorkerAppium;default:return Dn.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(await Promise.resolve().then(()=>(lp(),cp))).WorkerExtensionSingleBrowser:(await Promise.resolve().then(()=>(Da(),op))).WorkerExtension}else switch(r){case(Or.find(n=>n===r)&&Dn.isFeatureAvailableForProject("useSameBrowserForMultiTests")):return(await Promise.resolve().then(()=>(lp(),cp))).WorkerExtensionSingleBrowser;case Or.find(n=>n===r):return(await Promise.resolve().then(()=>(Da(),op))).WorkerExtension;case Bn.find(n=>n===r):return(await Promise.resolve().then(()=>(qu(),Hu))).WorkerSelenium;default:throw new C(`browser ${r} is not supported`)}}async createWorker(e,...t){let r=t[0],n=await this.getWorkerType({mode:r.mode,localTmaUrl:r.localTmaUrl},e);try{return M("before new Worker",r.mode),new n(this.executionQueue,...t)}finally{M("after new Worker",r.mode)}}async runTests(e,t,r,n,i,o,a,l){if(e&&e.length===0)return;let c=!1,d=0,m=(u,f)=>new Promise(h=>{var fe,Ze,St,Br,k,N,$,K;let g=i.project,y=e.length;this.parallelCount=a,this.workerUniqueIds=this.generateUniqueIds(this.parallelCount),this.executionQueue=new No(r,n,e,i,o,t),this.combinedTestResults={};let T=((fe=i.company)==null?void 0:fe.ucid)||"",w=(Ze=i.company)==null?void 0:Ze.companyId,b=(St=i.company)==null?void 0:St.name,S=i.source||"cli",E=i.user,A=(Br=i.company)==null?void 0:Br.planType,D=(k=i.company)==null?void 0:k.isStartUp,j=(N=i.projectData)==null?void 0:N.name,R=($=i.projectData)==null?void 0:$.type,x=i.lightweightMode,O=(K=i.gridData)==null?void 0:K.type,B=(Pe,Et,ve,Qa,ni,Za)=>(d++,wf({executionId:r,projectId:g,testId:Et,resultId:ve,ucid:T,companyId:w,companyName:b,projectName:j,companyPlan:A,source:S,user:E,lightweightMode:x,isStartUp:D,projectType:R,appSource:Za,gridType:O}),t.testStartAndReport(Pe,r,ve,Qa,ni)),G=async(Pe,Et,ve,Qa,ni,Za)=>{var od,ad,cd;d--;let et={...(x==null?void 0:x.onlyTestIdsNoSuite)&&{show:!0},...ve.seleniumStats&&{seleniumStats:ve.seleniumStats},...ve.gridIssues&&{gridIssues:ve.gridIssues},...ve.keepAliveIssue&&{keepAliveIssue:ve.keepAliveIssue},...i.host&&{gridHost:i.host}};if(ve.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(ve.seleniumPerfMarks),delete ve.seleniumPerfMarks),i.grid||i.gridId?(et.gridName=i.grid||((od=i.gridData)==null?void 0:od.name),et.gridType=(ad=i.gridData)==null?void 0:ad.type,et.gridProvider=(cd=i.gridData)==null?void 0:cd.provider):i.localTmaUrl?(et.gridName="local-tma-from-options",et.gridType="local-tma"):i.useLocalChromeDriver?(et.gridName="local-chrome-driver-from-options",et.gridType="local-chrome"):i.useChromeLauncher?(et.gridName="chrome-launcher-from-options",et.gridType="local-chrome"):i.browserstack?et.gridName="browserstack-from-options":i.saucelabs&&(et.gridName="saucelabs-from-options"),await t.testEndAndReport(Pe,ve,r,Qa,ni,et).catch(BT=>up.error("testEndAndReport threw an error",{err:BT})),ni)return;this.combinedTestResults[ve.resultId]=ve,vf({executionId:r,projectId:g,testId:Et,resultId:ve.resultId,result:ve,ucid:T,companyId:w,companyName:b,projectName:j,companyPlan:A,source:S,user:E,lightweightMode:x,logger:up,isStartUp:D,projectType:R,appSource:Za}),l&&!ve.success&&(this.executionQueue.stop(),c=!0),(Object.keys(this.combinedTestResults).length===y||c&&d===0)&&h(this.combinedTestResults)},z=(Pe,Et)=>{this.combinedTestResults[Et.resultId]=Et,t.onTestIgnored(Pe,Et.resultId),d--,(Object.keys(this.combinedTestResults).length===y||c&&d===0)&&h(this.combinedTestResults)},X=(Pe,Et)=>t.onGridSlot(Pe,Et);for(i.userData={loginData:{...wr(),refreshToken:qi(),authData:wr(),token:u,userAccessKey:f},projectId:i.project,company:i.company,servicesUrl:he},M("in localStrategy before createWorker");this.workers.size<this.parallelCount&&this.executionQueue.hasMoreTests();)this.runWorker(i,this.customExtensionLocalLocation,r,B,G,X,z)});try{let u=await At(),f=await zi(),h=await m(u,f);if(this.workers.size>0&&this.workers.clear(),c)throw new qt;return h}catch(u){throw up.error("failed running parallel workers",{executionId:r,err:u}),u}}generateUniqueIds(e){return Array.from({length:e},(t,r)=>`worker-${r+1}`)}}});var pp,ae,Eb=v(()=>{"use strict";pp=class{static colorString(e,t){return`${e}${t}${pp.Reset}`}},ae=pp;ae.Reset="\x1B[0m",ae.Bright="\x1B[1m",ae.Dim="\x1B[2m",ae.Underscore="\x1B[4m",ae.Blink="\x1B[5m",ae.Reverse="\x1B[7m",ae.Hidden="\x1B[8m",ae.FgBlack="\x1B[30m",ae.FgRed="\x1B[31m",ae.FgGreen="\x1B[32m",ae.FgYellow="\x1B[33m",ae.FgBlue="\x1B[34m",ae.FgMagenta="\x1B[35m",ae.FgCyan="\x1B[36m",ae.FgWhite="\x1B[37m",ae.FgGray="\x1B[90m",ae.BgBlack="\x1B[40m",ae.BgRed="\x1B[41m",ae.BgGreen="\x1B[42m",ae.BgYellow="\x1B[43m",ae.BgBlue="\x1B[44m",ae.BgMagenta="\x1B[45m",ae.BgCyan="\x1B[46m",ae.BgWhite="\x1B[47m",ae.BgGray="\x1B[100m"});var ei,Ib,Ma,dp,mp,Fr,fp=v(()=>{"use strict";ei=I(require("lodash"));F();W();de();ie();je();ts();gl();hl();ge();ue();Pt();ag();Y();Sb();Mo();Ib=require("uuid");Eb();({CLI_MODE:Ma}=Ut),dp=P("test-plan-runner"),mp=class{constructor(e){this.customExtensionLocalLocation=e;this.startTime=Date.now()}static get id(){return mp._id}async runTestAllPhases(e,t,r,n,i,o,a,l){let c={},d=new Na(this.customExtensionLocalLocation),m=async()=>{let g=i.beforeParallel||1,y=!0,T=await d.runTests(e,l,o,a,i,n,g,y);Object.assign(c,T)},u=async()=>{let g=hi||i.parallel,y=!1;M("right before this.workerManager.runTests");let T=await d.runTests(t,l,o,a,i,n,g,y);M("right after this.workerManager.runTests"),Object.assign(c,T)},f=async()=>{let g=i.afterParallel||1,y=!1,T=await d.runTests(r,l,o,a,i,n,g,y);Object.assign(c,T)};Sf({executionId:o,projectId:i.project}),M("right before runBeforeTests");try{return await m(),M("right before runTestPlanTests"),await u(),M("right after runTestPlanTests"),await f(),c}catch(g){if(dp.error("error running test plan",{err:g}),g instanceof qt)return l.markAllQueuedTests(o,me.ABORTED,"aborted",!1);throw g}finally{await h()}async function h(){var y,T,w,b;if((y=i.lightweightMode)!=null&&y.disablePixelValidation)return;if(i.mode===Ma.SELENIUM){let[{getSessionPlayer:S},{makeSDK:E}]=await Promise.all([Promise.resolve().then(()=>(we(),tr)),import("@applitools/eyes-sdk-core")]),{EyeSdkBuilder:A}=S();await A.closeBatch(o,E);return}let g;try{if(!((b=(w=(T=i.company)==null?void 0:T.activePlan)==null?void 0:w.premiumFeatures)!=null&&b.applitools)||(g=await bp(i.project),ei.default.isEmpty(g)||!o))return;let{runKey:S,url:E}=g;await require("@applitools/eyes-sdk-core").makeSDK({name:"Testim.io",version:"4.0.0",spec:{}}).closeBatches({settings:{batchIds:[o],serverUrl:E,apiKey:S}})}catch{}}}async runTestPlan(e,t,r,n,i,o,a,l){var b,S,E;let c=re(),d=n.project;$d(c),e.forEach(A=>Object.assign(A,{isBeforeTestPlan:!0})),r.forEach(A=>Object.assign(A,{isAfterTestPlan:!0}));let m=[...e,...t,...r],u=new bo(m,n,o,a),f=ei.default.chain(m).map(A=>{var D;return((D=A.overrideTestConfig)==null?void 0:D.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=(b=n.lightweightMode)!=null&&b.onlyTestIdsNoSuite?[]:m.map(A=>A.name),y=(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:u.executionStart(c,d,this.startTime,i,g);M("before testListInfoPromise");let T=await y;(E=n.lightweightMode)!=null&&E.onlyTestIdsNoSuite||Q.onTestPlanStarted(T.beforeTests,T.tests,T.afterTests,i,c,l,h),M("before runTestAllPhases");let w=await this.runTestAllPhases(T.beforeTests,T.tests,T.afterTests,a,n,c,i||"All Tests",u);return M("before executionEnd"),await u.executionEnd(c),M("after executionEnd"),{results:w,executionId:c,testPlanName:i,configName:h}}isJsonString(e){try{JSON.parse(e)}catch{return!1}return!0}handleReportFailure(e,t){try{e.text?t=e.text:t=JSON.stringify(e)}catch{}console.error(ae.colorString(ae.FgMagenta,t)),process.exit(-1)}async reportTestRunnerStarted(e,t){try{return await gp(e,t.testOptimization)}catch(r){return this.handleReportFailure(r,"Failed Report: Test Runner Started")}}async reportTestRunnerFinished(e){try{return await hp(e)}catch(t){return this.handleReportFailure(t,"Failed Report: Test Runner Finished")}}async runTestPlans(e,t){dp.info("start to run test plan",{options:{...e,token:void 0,userParamsData:void 0},branchToUse:t});function r(d){return ei.default.flattenDeep(Object.values(d)).reduce((m,u)=>m.concat(u.beforeTests,u.tests,u.afterTests),[])}let n={},i={},o=e.project,a={testPlans:[],testPlansData:{}};_.flags.enableTestPlanAggregation.isEnabled()?(await se(e.testPlanIds,async d=>{let m=await ti(o,e.testPlan,[d],t,e.intersections);m.testPlans.forEach(u=>{a.testPlans.push(u);let f=u._id;a.testPlansData[f]=m.testPlansData[f]})}),await se(e.testPlan,async d=>{let m=await ti(o,[d],e.testPlanIds,t,e.intersections);m.testPlans.forEach(u=>{a.testPlans.push(u);let f=u._id;a.testPlansData[f]=m.testPlansData[f]})})):a=await ti(o,e.testPlan,e.testPlanIds,t,e.intersections);let l=a.testPlans,c=a.testPlansData;if(!l||l.length===0)throw new C(`no test plan to run ${e.testPlan}`);if(!c||Object.keys(c).length===0){if(e.passZeroTests)return[];throw new C(`no test to run in test plan ${e.testPlan}`)}return e.mode!==Ma.APPIUM&&await Iu(e,r(c)),await se(l,async d=>{var h;let m=d.testPlanId;n[m]={};let u={...e};u.baseUrl||=d.startUrl,u.appId||=((h=d.mobileApp)==null?void 0:h.appId)||void 0,u.gridId||=d.gridId,e.grid&&delete u.gridId,u.gridData=await af(e,d);let f=u.overrideExecutionName||d.name;return await se(c[m],async g=>{let y=await this.runTestPlan(g.beforeTests,g.tests,g.afterTests,u,f,m,t);Q.onTestPlanFinished(y.results,d.name,this.startTime,y.executionId,!1),n[m][y.executionId]=y.results;let T=Object.keys(n[m]).map(E=>({executionId:E,status:Eu(n[m][E])})),w=Object.keys(n[m]).map(E=>n[m][E]).reduce((E,A)=>Object.assign(E,A),{}),b=Eu(w);Object.assign(i,w);let S=b?T[0].executionId:T.find(E=>!E.status).executionId;return await yp(o,m,{success:b,executions:T,executionId:S}),y})})}async runAnonymousTestPlan(e,t){var l;dp.info("start to run anonymous",{options:{...e,token:void 0},branchToUse:t}),M("before getSuite");let r=await yh(e,t);if(M("after getSuite"),!((l=r==null?void 0:r.tests[0])!=null&&l.length)){if(e.rerunFailedByRunId)throw new C("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new C("No tests to run")}t="branch"in r&&r.branch||t;let n=r;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new C("Invalid run ID - no such run.");n.runName===""&&(n.runName=`rerun-${e.rerunFailedByRunId}`)}let i=e.overrideExecutionName||n.runName||[].concat(e.label,e.name,e.suites).join(" "),o=!0;M("Right before validateConfig + runAnonymousTestPlan tests map");let a;return e.appId&&e.mode===Ma.APPIUM&&(a=await Xn({appId:e.appId,projectId:e.project})),await se(r.tests,async c=>{if(a&&c.forEach(m=>{"nativeApp"in m&&(m.nativeApp=a)}),e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}e.mode!==Ma.APPIUM&&await Iu(e,c),M("right before runTestPlan");let d=await this.runTestPlan([],c,[],e,i,null,t,o);return M("right after runTestPlan"),await Q.onTestPlanFinished(d.results,i,this.startTime,d.executionId,o),d})}async run(e){let t=fn(),r=[];await this.reportTestRunnerStarted(e.project,e),Ks(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t),await this.reportTestRunnerFinished(e.project);let n=ei.default.flattenDeep(r);return M("right before onAllTestPlansFinished"),await Q.onAllTestPlansFinished(n),M("right after onAllTestPlansFinished"),n.map(i=>i.results).reduce((i,o)=>Object.assign(i,o),{})}},Fr=mp;Fr._id=(0,Ib.v4)()});var Re={};H(Re,{addTestRetry:()=>Kl,clearTestResult:()=>vu,deleteCloudflareTunnel:()=>xp,fetchLambdatestConfig:()=>Yl,fixGridAppIDStructure:()=>Ju,forceUpdateCloudflareTunnelRoutes:()=>Rp,getAllGrids:()=>fl,getAppDetails:()=>Xn,getApplitoolsIntegrationData:()=>bp,getBrowserStackSessionMetaData:()=>hI,getCloudflareTunnel:()=>Ip,getEditorUrl:()=>mI,getGridSlot:()=>ml,getHybridGridProvider:()=>dl,getLabFeaturesByProjectId:()=>cu,getMobileDevicesFromGrid:()=>Qn,getRealData:()=>$l,getS3Artifact:()=>xn,getS3ArtifactText:()=>jl,getSuiteTestList:()=>Ru,getTestPlan:()=>dI,getTestPlanTestList:()=>ti,getTestResults:()=>kr,getUsageForCurrentBillingPeriod:()=>Sp,initializeUserWithAuth:()=>Ep,isTestResultCompleted:()=>wu,keepAliveCompanySlots:()=>Fl,keepAliveGrid:()=>ul,loadSfdcCredential:()=>vp,loadTest:()=>Un,releaseCompanySlot:()=>Ml,releaseGridSlot:()=>pl,reportExecutionFinished:()=>To,reportExecutionStarted:()=>zl,reportRunnerFinished:()=>hp,reportRunnerStarted:()=>gp,requestCompanySlot:()=>Nl,saveRemoteStep:()=>uu,saveTestPlanResult:()=>yp,updateCompanySlot:()=>Ul,updateExecutionTests:()=>ql,updateRemoteRunFailure:()=>Ap,updateTestDataArtifact:()=>wo,updateTestResult:()=>jo,updateTestStatus:()=>Ir,uploadAppToGrid:()=>Ku,uploadRunDataArtifact:()=>Su,validateUserAccessKey:()=>cl});async function xs(){let s=await At();if(!s)throw new Error("Failed to get token from server");return{[_c]:Fr.id,Authorization:`Bearer ${s}`}}async function Ee({url:s,body:e,headers:t={},timeout:r,retry:n}){let i=await xs(),o={...t,...i};return We({url:`${he}${s||""}`,body:e,headers:o,timeout:r,retry:n})}async function uI(s,e,t,r={},n=void 0){let i=await xs(),o={...r,...i};return await Vs(`${he}${s||""}`,e,t,o,n)}async function ri(s,e){let t=await xs();return await wc(`${he}${s||""}`,e,t)}async function xb(s,e){let t=await xs();return await Ws(`${he}${s||""}`,e,t)}async function pI(s,e){let t=await xs();return await Gs(`${he}${s||""}`,e||void 0,t)}async function Ae(s,e,t,r){let n=await xs();return await Te(`${he}${s||""}`,e||void 0,n,r,t)}function xn(s,e){return(0,ee.default)(()=>Ae(`/storage${s}`,null,{isBinary:!0},e),{retries:te,factor:1})}function jl(s){return(0,ee.default)(()=>pI(`/storage${s}`))}async function gp(s,e){return await Ee({url:"/test-runner",body:{projectId:s,testOptimization:e}})}async function hp(s){return await xb("/test-runner",{projectId:s})}async function dI(s,e){let t=n=>n===null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,ee.default)(()=>Ae("/testPlan",{projectId:s,name:e.join(",")}),{retries:te,factor:1})).map(({testConfigIds:n,beforeAllLabels:i,testLabels:o,afterAllLabels:a,...l})=>Object.assign(l,{testConfigIds:t(n),beforeAllLabels:t(i),testLabels:t(o),afterAllLabels:t(a)}))}async function vp({branch:s,projectId:e}){let t=await(0,ee.default)(()=>Ae(`/branch/branchData/${encodeURIComponent(s)}`,{projectId:e}),{retries:te,factor:1});return t==null?void 0:t.sfdcCredential}function Un({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,ee.default)(()=>Ae(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:te,factor:1})}function yp(s,e,t){return(0,ee.default)(()=>Ee({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:te,factor:1})}function Ir(s,e,t,r,n,i,o=te){return(0,ee.default)(()=>ri("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:aI,...i}),{retries:o,factor:1})}function ql(s,e,t,r,n,i,o,a){return(0,ee.default)(()=>ri("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:i,endTime:o,projectId:a}),{retries:te,factor:1})}async function zl({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:i,resultLabels:o,remoteRunId:a,localRunUserId:l,isLocalRun:c,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(Zi(),yf));return Ee({timeout:9e4,url:"/result/run",body:{runId:s,projectId:e,labels:t,startTime:r,execution:n,status:"RUNNING",config:i,resultLabels:o,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:l,isLocalRun:c}},retry:3})}function To(s,e,t,r,n={},i=void 0,o=void 0){let a=Date.now();return(0,ee.default)(()=>ri("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:i,resultExtraData:o}),{retries:te,factor:1})}async function ti(s,e,t,r,n){return(0,ee.default)(()=>Ee({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:te,factor:1})}function Ru({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:i,suiteIds:o,branch:a,rerunFailedByRunId:l,testConfigIds:c,intersections:d}){return(0,ee.default)(()=>Ee({url:"/suite/v2/list",body:{projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:i,suiteIds:o,branch:a,rerunFailedByRunId:l,testConfigIds:c,intersections:d}}),{retries:te,factor:1})}async function Xn({appId:s,projectId:e}){try{return await(0,ee.default)(()=>Ae(`/mobile-app/app/${s}?projectId=${e}`),{retries:te,factor:1})}catch(t){throw new Error(`Could not load app with the ID ${s}`,{cause:t})}}async function Sp(s){try{return await(0,ee.default)(()=>Ae(`/plan/project/${s}/usage-current-billing-period`),{retries:te,factor:1})}catch(e){_t.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function wu(s,e,t){return(0,ee.default)(()=>Ae(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:te,factor:1})}function kr(s,e,t,r){return(0,ee.default)(()=>Ae(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:te,factor:1})}function ul(s,e){return Ee({url:`/grid/keep-alive?reqId=${re()}`,body:{projectId:s,slots:e},timeout:1e4})}function pl(s,e,t,r,n){return Ee({url:`/grid/release?reqId=${re()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function dl(s){return Ee({url:"/grid/hybrid/provider",body:s})}function ml(s){return(0,ee.default)(()=>Ae("/grid/grid-slot",{...s,reqId:re()}),{retries:te,factor:1})}async function Ep({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n,publicIp:i,gridId:o,grid:a,clientCliVersion:l,clientNodeVersion:c,clientNpmVersion:d}){var m,u;try{return await(0,ee.default)(()=>We({url:`${he}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n,publicIp:i,gridId:o,gridName:a,clientCliVersion:l,clientNodeVersion:c,clientNpmVersion:d},timeout:6e4}),{retries:te,factor:1})}catch(f){if(_t.error("error initializing info from server",f),(m=f.message)!=null&&m.includes("Bad Request"))throw new C("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.");if((u=f.code)!=null&&u.includes("ENOTFOUND"))throw new C("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend.");if(f.text)try{let h=JSON.parse(f.text),g=h.clientMessage.color||"red",y=h.clientMessage.bgColor||"bgBlack";console.log(Tp.default[y](Tp.default[g](h.clientMessage.text))),h.exitCode&&process.exit(h.exitCode)}catch{_t.error("Error parsing error message from server",f)}throw f}}async function mI(){if(Ns)return{editorUrl:Ns};try{return await(0,ee.default)(()=>Ae("/system-info/editor-url"),{retries:te,onFailedAttempt:s=>{if(s.attemptNumber>=te)throw s},factor:1})}catch(s){return _t.error("cannot retrieve editor-url from server",{err:s}),{editorUrl:"https://app.testim.io"}}}function fl(s){return(0,ee.default)(()=>Ae("/grid",{companyId:s}),{retries:te,factor:1})}function $l(s,e,t){return(0,ee.default)(()=>Ae(`/real-data/${e}?${t}&projectId=${s}`),{retries:te,factor:1})}function jo(s,e,t,r,n){return(0,ee.default)(()=>Ee({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:te,factor:1})}function vu(s,e,t,r){return(0,ee.default)(()=>Ee({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:te,factor:1})}function uu(s,e,t,r){return(0,ee.default)(()=>Ee({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:te,factor:1})}function fI(s){return s.startsWith("/")?s:`/${s}`}function gI(s,e,t){let r=fI(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Ab(s,e,t,r,n,i="application/octet-stream"){let o=null;i==="application/json"&&(o=".json");let a=`${n}_${re()}${o||""}`,l=`${e}/${t}/${a}`,c=gI(l,lI,s),d=Buffer.from(Rb.gzip(r,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,ee.default)(()=>uI(`/storage${c}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:te,factor:1}),c}function Kl({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:i,testResult:o}){return(0,ee.default)(()=>Ee({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:i,testId:t,runId:e,testResult:o}}),{retries:te,factor:1})}async function bp(s){try{return await Ae(`/integration/applitools/v3/connected?projectId=${s}`)}catch(e){return _t.warn("could'nt get applitools integration data.",{err:e}),{}}}async function Ip(s,e){try{return await ri("/tunnel",{companyId:s,routes:e})}catch(t){return _t.warn("could'nt get tunnel.",{err:t}),{}}}async function Rp(s,e){try{return await Ee({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){_t.warn("could'nt get tunnel.",{err:t});return}}async function xp(s,e){try{return await xb(`/tunnel/${e}`,{companyId:s})}catch(t){_t.warn("could'nt get tunnel.",{err:t});return}}function Ap(s){return We({url:`${he}/result/remoteRunFailure`,body:s})}async function Qn({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let i=`${cI}/mobileDevices/${t}/${r}?projectType=${e}`;i=n?`${i}&selectors=${encodeURIComponent(n)}`:i;try{return await(0,ee.default)(()=>Ae(i,{projectId:s}),{retries:te,factor:1})}catch(o){return _t.warn("could'nt get devices from headspin grid.",{err:o}),null}}async function Ku({projectId:s,gridId:e,app:t,timeout:r}){return(0,ee.default)(()=>Ee({url:`/mobile-app/app/upload-to-grid?projectId=${s}&gridId=${e}`,body:t,timeout:r}),{retries:te,factor:1})}async function Ju(s){return(0,ee.default)(()=>Ee({url:"/mobile-app/app/fix-grid-app-id",body:s}),{retries:te,factor:1})}async function Nl(s,e){return(0,ee.default)(()=>Ee({url:"/slot-management/request-slot",body:{companyId:s,projectId:e}}),{retries:te,factor:1})}async function Ml(s,e,t){return(0,ee.default)(()=>Ee({url:"/slot-management/release-slot",body:{companyId:s,projectId:e,slotId:t}}),{retries:te,factor:1})}async function Ul(s,e,t){return(0,ee.default)(()=>ri("/slot-management/update-slot",{slotId:t.slotId,companyId:s,projectId:e,slot:t}),{retries:te,factor:1})}function Fl(s,e,t){return Ee({url:`/slot-management/keep-alive?reqId=${re()}`,body:{slots:t,companyId:s,projectId:e},timeout:1e4})}async function hI(s,e){return await Te(`${Us}/sessions/${s}`,void 0,{Authorization:`Basic ${Buffer.from(`${e.user}:${e.key}`).toString("base64")}`})}async function cl(s){try{return await Ae("/v2/project/validateUserAccessKey",s),!0}catch(e){return _t.error("error validating user access key",{error:e}),!1}}var Tp,ar,Rb,ee,wp,aI,_t,te,cI,lI,Yl,cu,Su,wo,ge=v(()=>{"use strict";Tp=I(require("chalk")),ar=I(require("lodash")),Rb=I(require("pako"));F();de();ie();Ve();at();ee=I(require("p-retry")),wp=I(require("object-hash"));Y();W();fp();aI=tt(),_t=P("testim service api"),te=3,cI="/grid",lI="test-result-artifacts";Yl=async()=>(0,ee.default)(()=>Ae("/grid/lt/config"),{retries:te,factor:1}),cu=async s=>(0,ee.default)(()=>Ae(`/labFeature/v2/project/${s}`),{retries:te,factor:1});Su=ar.memoize(async(s,e,t,r)=>{if(!ar.isEmpty(r))return await Ab(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,wp.default)(r)}:${e}:${t}`),wo=ar.memoize(async(s,e,t,r,n)=>!r||ar.isEmpty(r)?void 0:await Ab(s,e,t,JSON.stringify((()=>{let o=ar.clone(r);if(n!=null&&n.hiddenParams){let a=n.hiddenParams||[];(Array.isArray(a)?a:Object.keys(a)).forEach(c=>{o[c]&&Object.assign(o,{[c]:Pc.HIDDEN_PARAM})})}return o})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,wp.default)(r)}:${e}:${t}`)});async function Cb(){let s=await Promise.any(yI.map(async e=>{try{return await Te(e)}catch{return null}}));return s==null?void 0:s.ip}var yI,Pb=v(()=>{"use strict";Ve();yI=["https://api.ipify.org?format=json","https://ipinfo.io/json","https://api.my-ip.io/ip.json"]});function Ua(){return tt()}var Cp=v(()=>{"use strict";F()});function wI(s){q.EXTENSION!==s&&process.nextTick(()=>{try{(we(),He(tr)).getSessionPlayer()}catch{}})}function vI(s){var e,t;(t=(e=s.clientConfig)==null?void 0:e.clientMessages)!=null&&t.length&&s.clientConfig.clientMessages.forEach(r=>{let n=r.color||"yellow",i=r.bgColor||"bgBlack";console.log(Pp.default[i](Pp.default[n](r.text)))})}async function si(s){let{project:e,token:t,userAccessKey:r,lightweightMode:n,useLocalChromeDriver:i,useChromeLauncher:o,mode:a,gridId:l,grid:c}=s,d=Boolean(n==null?void 0:n.general),m=Boolean(i||o),u=d?TI:bI,f=Ua(),h=xc(),g=await Dm(),y=null;if(_.flags.getPublicIpFrom3rdPartyServices.isEnabled()&&!m)try{y=await Cb()}catch(b){kb.error("failed to get public ip",b)}let T=!0;M("before initializeUserWithAuth");let w=await Bt(async()=>(wI(a),T=!1,await Ep({projectId:e,token:t,branchName:s.branch,lightweightMode:n,localGrid:m,publicIp:y,gridId:l,grid:c,clientCliVersion:f,clientNodeVersion:h,clientNpmVersion:g})),"initializeUserWithAuth",u,{project:e,token:t,branchName:s.branch,lightweightModeGeneral:d,localGrid:m,gridId:l,grid:c,publicIp:y})();return vI(w),s.publicIps=[w.clientPublicIp],M("after initializeUserWithAuth"),y&&w.clientPublicIp&&w.clientPublicIp!==y&&(kb.error("public ip mismatch",{publicIpFromExternalService:y,publicIpFromServices:w.clientPublicIp}),s.publicIps.push(y)),ef(w.authData,{projectId:e,token:t,userAccessKey:r,publicIp:w.clientPublicIp,initializedFromCache:T}),w}var Pp,kb,bI,TI,Ob=v(()=>{"use strict";Pp=I(require("chalk"));je();ge();Yt();at();Pb();ie();W();ue();Cp();F();Zr();kb=P("initializeUserWithAuth"),bI=1e3*60*5,TI=1e3*60*60*10});async function Db(s){var r;let e=Promise.resolve();s.useLocalChromeDriver&&(s.chromeBinaryLocation=s.downloadBrowser?await Hi():s.chromeBinaryLocation,e=tn({projectId:s.project,userId:s.user},{chromeBinaryLocation:s.chromeBinaryLocation},Boolean((r=s.lightweightMode)==null?void 0:r.general)),s.useLocalChromeDriver=!0),!s.playerRequirePath&&s.mode!==q.EXTENSION&&await br(s.playerLocation,s.canary),s.mode!==q.SELENIUM&&s.mode!==q.APPIUM&&!s.ext&&await Qc(s.extensionLocation);let t;if(s.installCustomExtension){let n=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);t=await Xc(s.installCustomExtension,n)}return await e,t}async function Nb(s){var o;SI.info("prepare MockNetwork",{location:s});let e=await Ic(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>_b*1e6)throw new Error(`${kp} exceeded ${_b}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${kp} cannot be parsed.${Fa.EOL}${a}`)}let n=new Lb.default;if(!n.validate(Bc,r)){let a=(o=n.errors)==null?void 0:o.map((l,c)=>`${++c}) ${l.dataPath} ${l.message}`).join(Fa.EOL);throw new Error(`${kp} is malformed.${Fa.EOL}${a}`)}return r.entries}var Fa,Lb,_b,kp,SI,Op=v(()=>{"use strict";Fa=I(require("node:os"));F();mm();sn();Lb=I(require("ajv"));ie();rl();W();Ob();_b=1,kp="JSON file supplied to --mock-network-pattern",SI=P("prepare runner")});function jb(s){return s.start&&gn(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function $b(s){let e=!!s.start;if(Number.isNaN(s.agentPort))throw new C("Agent port is not number");let t=vo(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,startTestimBrowser:e,ext:s.ext,extensionPath:s.extensionPath,playerLocation:s.playerPath||t,canary:s.canary,playerPath:s.playerPath,playerRequirePath:s.playerRequirePath,downloadBrowser:Boolean(s.downloadBrowser)}}var Wb=v(()=>{"use strict";Cn();rs();Y()});var Vb,CI,PI,Np,Gb=v(()=>{"use strict";Vb="TST_CREDS",CI=["username","password"],PI="$encrypted",Np={get proxyPlaceholder(){return new Proxy({},{get(s,e){let t={};for(let r of CI)t[r]={[PI]:`${e}.${r}`};return t}})},containsEncryptedCredentials(s){return s.includes(Vb)},injectProxyCredentialsStoreToGlobal(){Object.assign(globalThis,{[Vb]:this.proxyPlaceholder})}}});var jp={};H(jp,{doLogin:()=>Bp,getProjectId:()=>kI,getToken:()=>OI});async function kI(){return zb("projectId")}async function OI(){return zb("token")}function qb(s,e){return Promise.race([s,ce(e).then(()=>{throw new oe("timeout")})])}async function _I(){let s=(await import("express")).default(),e=async function(){return qb(new Promise(n=>{s.get("/loginInfo",(i,o)=>{n(JSON.parse(Buffer.from(i.query.info,"base64").toString())),o.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((r,n)=>{let i=s.listen(42543,o=>{o&&n(o),r(i.address().port)})});try{let{getEditorUrl:r}=await Promise.resolve().then(()=>(ge(),Re)),{editorUrl:n}=await r();uo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function Bp({overwriteExisting:s=!0,projects:e=null}={}){let t=Mp.homedir(),r=Up.join(t,".testim");if(await ye(r)&&!s)return;let i={},[{default:o},{default:a}]=await Promise.all([import("prompts"),import("ora")]),l=a("Getting credentials from Tricentis Testim extension ...").start();if(e||(e=await qb(_I(),62e3).catch(()=>null)),e!=null&&e.token){i.token=e.token,i.projectId=e.projectId,l.succeed(),await Hb(r,i);return}if(e!=null&&e.length){l.succeed();let c=e.length===1?{project:e[0]}:await o({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}))});i.token=c.project.ci.token,i.projectId=c.project.id,await Hb(r,i);return}l.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Hb(s,e){await Fp.promises.writeFile(s,ja.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function zb(s){let e=Mp.homedir(),t=Up.join(e,".testim"),r=await ye(t),n={};if(r)try{n=ja.parse((await Fp.promises.readFile(t)).toString())}catch{}return n||={},n[s]}var Mp,Up,ja,Fp,$a=v(()=>{"use strict";Mp=I(require("os")),Up=I(require("path")),ja=I(require("yaml"));F();Fp=require("fs");Y();Ol()});var tT={};H(tT,{process:()=>jI,program:()=>p});var Wp,Xb,Wa,Qb,Vt,De,Zb,LI,Le,Hp,DI,NI,Jb,eT,MI,Vp,Gp,qp,$p,Lt,UI,p,FI,BI,Yb,jI,zp=v(()=>{"use strict";Wp=I(require("ms")),Xb=I(require("chalk")),Wa=I(require("node:fs")),Qb=I(require("node:url")),Vt=I(require("lodash")),De=I(require("node:path"));F();Cn();Wb();Yt();Zb=require("commander");ie();Y();jr();F();ue();Gb();Mo();LI=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Le=(s,e)=>(e.push(s),e),Hp=new Zb.Command,DI=s=>s.split(","),NI=(s,e)=>!s||s.length===0?e:s,Jb=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],eT=()=>{function s(g){return g.includes("-h, --help")}function e(g){return g.includes("--params [params-json-string]")}function t(g){return g.includes("--ext")||g.includes("--extension-path")||g.includes("--headless-extension-download-path")}function r(g){return g.includes("--player-path")||g.includes("--player-require-path")}function n(g){return g.includes("--executionId")||g.includes("--source")||g.includes("--resultId")||g.includes("--remoteRunId")||g.includes("--schedulerId")}function i(g){return g.includes("--get-browser-timeout")||g.includes("--get-browser-retries")||g.includes("--get-session-timeout")||g.includes("--get-session-retries")||g.includes("--driver-request-timeout")||g.includes("--driver-request-retries")}function o(g){return g.includes("--user")}function a(g){return g.includes("shouldMonitorPerformance")}function l(g){return g.includes("--save-rca-locally")}function c(g){return g.includes("--exit-code-ignore-failing-tests")}function d(g){return g.includes("--high-speed")}function m(g){return g.includes("--urls")}function u(g){return g.includes("--test-start-timeout")}function f(g){return g.includes("--install-lazy-deps")}function h(g){return g.includes("--print-final-caps")||g.includes("--print-grids")}Hp.help(g=>g.split(`
403
+ return downloadAndUploadFile.apply(null, arguments);`,t.locatedElement,d);return}let m=await Sy(d,this.uploadFile);await this.uploadFilesAndForceVisibility(m,t)}}});var pa,da,Ry=v(()=>{"use strict";pa=require("url");pe();da=class extends V{async updateBaseUrl(e){let t=new pa.URL(e),r=new pa.URL(this.context.recordedBaseUrl),n=new pa.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 ma,xy=v(()=>{"use strict";pe();F();ma=class extends V{async performAction(){await ce(this.step.durationMS||0)}}});var fa,Ay=v(()=>{"use strict";pe();fa=class extends V{async execute(){try{return await this.driver.reloadTab(),{success:!0}}catch(e){return{success:!1,reason:e.message}}}}});var Kn,Cy=v(()=>{"use strict";pe();Kn=class extends V{async runApiInAut(e){var n;e.withCredentials=!0;let t=this.context.data.timeToPlayStep+3e3,{apiCall:r}=this.sessionPlayerInit;try{let i=await this.driver.executeCodeAsync(r,t,e);return(i==null?void 0:i.value)||{}}catch(i){throw(n=i==null?void 0:i.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.'):i}}runApiInBg(e){let{apiCall:t}=this.sessionPlayerInit;return t(e)}async performAction(){let{sessionPlayerInit:{commonConstants:e},step:t,context:r}=this,n={id:t.id,url:r.apiUrl,method:t.method,headers:r.apiHeaders,body:r.apiBody,timeout:r.data.maxTotalStepTime,omitCookies:t.omitCookies,forceUseFetch:["android","ios"].includes(r.project.type),formData:t.formData,fileUrls:r.fileUrls},i=t.sendViaWebApp?await this.runApiInAut(n):await this.runApiInBg(n),o=i.result||{},a={method:t.method,status:o.status,url:t.url};return i.success?o.status===0?{result:o,resultInfo:a,shouldRetry:!1,success:!1,reason:"Connection problem",errorType:e.stepResult.API_REQUEST_NETWORK_ERROR}:{result:o,resultInfo:a,shouldRetry:!1,success:!0}:{result:o,resultInfo:a,shouldRetry:!1,success:!1,reason:o.error||e.error.REQUEST_TIMED_OUT,errorType:o.exception?void 0:o.error?e.stepResult.API_FAILURE:e.stepResult.API_REQUEST_NETWORK_ERROR}}}});var ga,Py=v(()=>{"use strict";pe();ga=class extends V{async performAction(){let e=this.step.extractTextParamName,t=await this.stepActionUtils.extractTargetText(this.getTarget());return this.context.data.exports||={},this.context.data.exports[e]=t,{success:!0,data:this.context.data}}}});var ky,Fu,Bu,Oy=v(()=>{"use strict";ky=I(require("@applitools/spec-driver-webdriverio"));mi();we();Fu=class{constructor(){let{EyeSdkBuilder:e}=Z(),t=dd["@applitools/eyes-sdk-core"]||"N/A",{makeSDK:r}=require("@applitools/eyes-sdk-core");this.sdk=r({name:"Testim.io",version:`4.0.1/eyes-sdk-core/${t}`,spec:ky.default}),this.handleApplitoolsSdkResult=e.handleApplitoolsSdkResult}async getManager(e,t,r,n){let{EyeSdkBuilder:i}=Z(),o=await this.sdk.makeManager({type:e?"ufg":"classic",concurrency:t});return i.rememberCreatedBatch(r,n),o}},Bu=new Fu});var Ly,_y,Jn,Dy=v(()=>{"use strict";Ly=I(require("lodash"));pe();W();Oy();_y=P("pixel-validation-step-action"),Jn=class extends V{async performAction(){var m,u;let{shouldUseVisualGrid:t,applitoolsSdkConfig:r,applitoolsSdkLogger:n,testResultId:i}=this.context;this.runContext=this.context.getRunContext(void 0);let o=((m=this.runContext.incomingParams)==null?void 0:m.final)||{},a=((u=r.batch)==null?void 0:u.id)||i,l=await Bu.getManager(t,this.context.config.applitoolsConcurrency||5,a,this.runContext.applitoolsIntegrationData),c=this.getTarget()||{},d;try{let f=await l.openEyes({driver:this.driver.client,config:r,logger:n}),g={region:this.step.action==="element"&&c.seleniumElement||void 0,fully:this.step.action==="stitched"};Ly.isPlainObject(o.applitoolsStepSettings)&&(Object.assign(g,o.applitoolsStepSettings),_y.info("Applitools SDK step executed with applitoolsStepSettings parameter",{applitoolsStepSettings:o.applitoolsStepSettings})),await f.check({settings:g}),d={isApplitoolsSdkResult:!0,success:!0,eyesResults:await f.close()}}catch(f){_y.error("Applitools SDK step failed",{err:f,info:f.info}),d={isApplitoolsSdkResult:!0,success:!1,err:f}}return await Bu.handleApplitoolsSdkResult(this.context,d,this.step)}}});var Ss,ju=v(()=>{"use strict";hs();Y();ta();Ss=class extends ir{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:i="",id:o=""}=e,{incomingParams:a,testResultId:l,retryIndex:c,stepResultId:d}=t,m={config:t.config,data:t.data},u=t.data.timeToPlayStep,f=await gs(i,o,a,m,l,c,d,u);return this.checkCodeResponse(f)}async performAction(){try{return await this.executeCliCode()}catch(e){let{stepResult:t}=this.sessionPlayerInit.commonConstants;return e instanceof oe?{success:!1,errorType:t.ACTION_TIMEOUT}:{success:!1,reason:e.message,exception:e}}}}});var or,Ny=v(()=>{"use strict";ju();or=class extends Ss{isFailedResult(e){return e===!1}}});var ha,My=v(()=>{"use strict";ju();ha=class extends Ss{isFailedResult(e){return!e}}});var ya,Uy=v(()=>{"use strict";hs();pe();Y();ya=class extends V{async performAction(){let{stepId:e,packageData:t,resultId:r,retryIndex:n,stepResultId:i,timeToPlayBeforeExec:o}=this.context;try{return{data:await fs(e,r,n,t,i,o),success:!0}}catch(a){return a instanceof Rt?{success:!1,code:"invalid-node-package",message:a.message}:a instanceof oe?{success:!1,code:"timeout"}:{success:!1,reason:a.message,exception:a}}}}});var Lr,Fy=v(()=>{"use strict";pe();Lr=class extends V{async performAction(){return{success:"skipped",reason:"This step can run only in \u2018extension\u2019 run mode with either Chrome or Edge Chromium"}}}});var be,By=v(()=>{"use strict";pe();be=class extends V{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((i,o)=>this.context.playback.sfdcAddLog(i,o)));t.log.info(`BEGIN STEP '${(n=(r=this.step).getStepPreview)==null?void 0:n.call(r)}'`);try{let i=this.context.sfdcTestActions;if(i===void 0)throw new Error("No test actions were compiled");return{success:!0,reason:await e.sfdcExecute(t,i,this.context)}}catch(i){return{success:!1,reason:i.reason||i.message,exception:i,shouldRetry:!1}}finally{t.releaseObjects()}}}});var ba,jy=v(()=>{"use strict";pe();ba=class extends V{async performAction(){var r,n;let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler||((i,o)=>this.context.playback.sfdcAddLog(i,o)));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(i){return{success:!1,reason:i.reason||i.message,exception:i,shouldRetry:!1}}finally{t.releaseObjects()}}}});var Ta,$y=v(()=>{"use strict";pe();Ta=class extends V{async performAction(){let{sfdc:e}=this.sessionPlayerInit,t=e.sfdcNewSePage(this.driver,this.context.sfdcLogHandler);try{return await e.sfdcExecuteJavascript(t,this.step.code||"",this.context),{success:!0}}catch(r){return{success:!1,reason:r.reason||r.message,exception:r,shouldRetry:!1}}finally{t.releaseObjects()}}}});function _E(s,e){Object.keys(s).forEach(t=>{e.registerStepAction(t,s[t])})}function wa(s,e){_E(LE,e),e.registerLocateStepActionUtils(Gn.getUtils(s))}var LE,$u=v(()=>{"use strict";Uh();jh();Jh();Yh();Qh();ty();ny();iy();oy();ay();uy();py();dy();gy();by();Iy();Ry();xy();Ay();Cy();Py();Dy();Ny();My();Uy();Fy();By();jy();$y();LE={locate:Gn,scroll:Yo,mouse:Xo,submit:ia,text:Zo,"special-key":ra,"user-code":Wt,"validation-code-step":Wt,"wait-for-code-step":Wt,"action-code-step":Wt,"condition-step":vs,"skip-code-step":vs,"element-code-step":vs,"evaluate-expression":Qo,"text-validation":qn,"wait-for-text-validation":qn,"select-option":na,"drop-file":ca,"input-file":ua,hover:oa,navigation:da,wheel:aa,sleep:ma,refresh:fa,"keyboard-shortcut-step":sa,"api-validation":Kn,"api-action":Kn,"api-code-step":Wt,"extract-text":ga,"simple-ui-verification":Jn,"wait-for-simple-ui-verification":Jn,"cli-validation-download-file":Lr,"cli-wait-for-download-file":Lr,"network-validation-step":Lr,"cli-validation-code-step":or,"cli-wait-for-code-step":or,"cli-action-code-step":or,"cli-api-code-step":or,"cli-condition-step":ha,"node-package":ya,"email-code-step":Wt,"cli-email-code-step":or,"sfdc-internal-test-step":Ta,"sfdc-recorded-step":ba,"sfdc-step-login":be,"sfdc-step-loginas":be,"sfdc-step-logout":be,"sfdc-step-sobjectcreate":be,"sfdc-step-sobjectdelete":be,"sfdc-step-findrecord":be,"sfdc-step-quickaction":be,"sfdc-step-sobjectedit":be,"sfdc-step-sobjectvalidate":be,"sfdc-step-launchapp":be,"sfdc-step-wait-for-page-load":be,"sfdc-step-closeconsoletabs":be,"sfdc-step-relatedlistaction":be,"sfdc-step-permission-validation":be,"sfdc-step-convert-lead-to-opportunity":be,"sfdc-step-quotelineeditor":be,"sfdc-document-validation":Lr,"sfdc-step-flow-screen-completion":be,"sfdc-step-sobjectverifyoptions":be}});var Wy,DE,Es,Wu=v(()=>{"use strict";Wy=["simple-ui-verification","wait-for-simple-ui-verification"],DE=[...Wy,"custom-validation","sfdc-internal-test-step","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-wait-for-page-load","sfdc-step-closeconsoletabs","sfdc-step-sobjectedit","sfdc-step-relatedlistaction","sfdc-step-permission-validation","sfdc-step-convert-lead-to-opportunity","sfdc-step-quotelineeditor","sfdc-document-validation","sfdc-step-flow-screen-completion","sfdc-step-sobjectverifyoptions"],Es=class{constructor(e){this.isDebuggerConnected=e;this.totalStepTime=0;this.currentRetryStart=0;this.totalStepTimesReport=[];this.currentRetryTimes=[];this.currentRetryTimesReport={};this.resetStepVariables(),this.resetRetryVariables()}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=i=>{let o=this.getTotalStepTimeLeftToPlay(e,i),a=5e3;return o<=a?[a]:[Math.max(a,o/3)]};e.setStartTimestamp();let r=this.getTotalStepRunTime(e),n=DE.includes(e.stepType)?[r]:t(r);this.resetStepVariables(r,n),e.context.data.maxTotalStepTime=r}initRetryTime(){this.resetRetryVariables()}getTotalStepRunTime(e){let r=e.context.config.stepTimeout;return Wy.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+1e3}getTabTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getDynamicParentTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getFrameTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getLocateTimeout(e){return this.getTotalCurrentRetryTimeLeft(e)}getActionTimeout(e){if(this.isDebuggerConnected)return 6e5;let t=5e3,r=e.step.type,n=3e4;return r==="sleep"?e.step.durationMS+t:Math.max(this.getTotalStepTimeLeftToPlay(e),n)}}});var Gy={};H(Gy,{SeleniumTestPlayer:()=>Yn});var Vy,NE,Yn,Vu=v(()=>{"use strict";F();Vy=require("@applitools/eyes-sdk-core");Ln();Y();W();_u();_h();Mu();Ko();Nh();Uu();we();$u();Wu();NE=P("SeleniumTestPlayer"),Yn=class{constructor(e,t,r,n,i=void 0,o=void 0){this.id=e;this.playbackTimeoutCalculator=new Es(Jo());let{SessionPlayer:a,commonConstants:l,StepActionFactory:c}=Z();this.driver=n??new Ar;let d=new zo(this.driver);this.stepActionFactory=new c(d),wa(this.driver,this.stepActionFactory),this.tabService=this.driver.tabService||new Ho(this.driver),this.driver.tabService=this.tabService,this.tabService.createSesion(e);let m=Dh(this.driver);this.sessionPlayer=new a(e,{tabService:this.tabService,cookieUtils:new ws(this.driver),FrameLocator:m,portSelector:qo,LocateElementPlayer:null,stepActionUtils:d,stepActionFactory:this.stepActionFactory,playbackTimeoutCalculator:this.playbackTimeoutCalculator,makeSDK:Vy.makeSDK}),this.sessionPlayer.setShouldMonitorPerformance(Boolean(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=o,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(()=>null)}async onDone(){var r,n;let{commonConstants:e}=Z(),t=1e3*60*2;try{await le((r=this.driver)==null?void 0:r.end(),t)}catch(i){i instanceof oe&&await((n=this.driver)==null?void 0:n.forceEnd().catch(()=>null))}this.sessionPlayer.playbackManager.off(e.playback.RESULT,this.onStepCompleted),Object.assign(this,{sessionPlayer:null,tabService:null,stepActionFactory:null,driver:null})}clearSessionTabs(){this.tabService.clearAllTabs(this.id)}async addTab(e,t={loadInfo:!0}){let r=await this.driver.getTabIds();if(!Array.isArray(r)){NE.error("addTab: driver.getTabIds() returned a non-array",{ids:r});return}let n=r.at(-1);await this.tabService.addNewTab(this.id,n,e,t),await 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(),i=["app.testim.io"].concat(r);for(let o of n.reverse()){await this.tabService.addNewTab(this.id,o,e,{...t,forceSwitch:!0});let a=this.tabService.getTabInfo(this.id,o);if(i.some(l=>a.url.includes(l))){await this.tabService.removeTabInfo(this.id,o);continue}await this.sessionPlayer.addPlaybackFrameHandler(o,void 0,{emptyPage:!0})}if(this.tabService.tabCount(this.id)===1){let o=this.tabService.getMainTabInfo(this.id),a=this.tabService.getTabUtils(this.id,o);await this.tabService.switchTab(a.tabId,this.id,{forceSwitch:!0})}this.tabService.fixMissingMainTab(this.id)}getSessionId(){return this.driver.getSessionId()}}});var Hu={};H(Hu,{WorkerSelenium:()=>Gu});function UE(s){let{playback:e}=Z().commonConstants;for(let t of Object.values(e))s.playbackManager.on(t,()=>M(`Got event ${t}`))}var va,ME,Gu,qu=v(()=>{"use strict";F();je();Wn();W();Pt();Po();ie();ku();Y();Vu();we();at();va=P("worker-selenium"),ME=1e9,Gu=class extends Ot{initPlayer(t){return new Yn(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,i){M("in WorkerSelenium getBrowserOnce"),Q.onGetSession(this.id,this.testName,t.runMode);let{driver:o}=n;this.windowUtils=new Ts(this.id,o),n.clearSessionTabs();let{browserValue:a}=this.testRunConfig,l=t.baseUrl;try{let c=this.options.useLocalChromeDriver;await o.init({browserOptions:this.options,testName:this.testName,testRunConfig:this.testRunConfig,gridInfo:i,customExtensionLocalLocation:r,executionId:this.executionId,testResultId:this.testResultId,seleniumPerfStats:t.seleniumPerfStats,fastInit:c,lambdatestService:this.lambdatestService,printFinalCaps:this.options.printFinalCaps,mode:q.SELENIUM}),M("in WorkerSelenium after driver.init"),await n.addTab(void 0,{skipLoadInfo:c}),M("in WorkerSelenium after addTab"),c||await this.windowUtils.navigate(l,ME),await this.windowUtils.validatePageIsAvailable(),M("in WorkerSelenium after navigate")}catch(c){let d=c.message&&(c.message.startsWith("Malformed URL")||c.message.includes("Reached error page: about:neterror"))&&a==="firefox",m=c.message&&c.message==="invalid argument";throw c instanceof It||d||m?new It(`Page '${l}' is not available`):(va.error("failed to navigate to page",{baseUrl:l,err:c,whitelistedPublicIp:Ki(),initializedFromCache:Ji()}),c)}}async runTestOnce(t,r){var m;let{manifestVersion:n,localAssetService:i}=Z(),{driver:o,sessionPlayer:a}=r,l=n||"runner";Q.onWaitToTestComplete(this.id),UE(a),a.playbackManager.executionId=t.executionId,a.playbackManager.executionName=t.executionName,this.options.mode===q.SELENIUM&&a.setLightweightMode(this.options.lightweightMode),t.sfdcCredential&&a.setSfdcCredential(t.sfdcCredential),i.initialize({serverUrl:this.options.localRCASaver});let c=null;(m=this.options.lightweightMode)!=null&&m.preloadTests&&(c=(await Mn(this.options))[this.testId]);let d=async()=>le(new Promise((u,f)=>{a.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:l,resolve:u,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,incognito:!1,remoteRunId:t.remoteRunId,preloadedTest:c}).catch(f)}),this.testRunTimeout,Me.TEST_COMPLETE_TIMEOUT_MSG).catch(u=>{var f;throw u instanceof oe&&((f=a.stopPlayingOnTestTimeout)==null||f.call(a)),u}).then(async u=>{await i.drain(),u.stepsResults=null,u.resultId=this.testResultId,o.isAlive()||(va.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),u.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})`),u.keepAliveIssue=f);let g={...u,...t.seleniumPerfStats.getStats()};return this.lambdatestService.isLambdatestRun()&&await o.executeJS(`lambda-status=${g.success?"passed":"failed"}`).catch(()=>{}),g});o.start(),M("right before super.runTestOnce in workerSelenium");try{await super.runTestOnce(t,r),M("right after super.runTestOnce in workerSelenium");let u=await d();return M("right after runSeleniumTest"),u}catch(u){throw va.error("failed to run test once",{err:u}),u}}}});var Hy,qy,Ge,FE,BE,zu,vt,Sa=v(()=>{"use strict";Hy=I(require("ora")),qy=require("jimp");de();Ve();ge();W();ie();we();ue();Ge=P("mobile-grid-service"),FE="https://tdc.tricentis-cloud.com",BE="https://ui.headspin.io",zu=class{constructor(){this.gridsAppIdGetter={[L.TESTIM_TDC]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("testimTdcAppId",t),[L.TESTIM_TVC]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("testimTvcAppId",t),[L.P_CLOUDY]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("pCloudyAppId",t),[L.TESTIM_HEADSPIN]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("headSpinAppId",t),[L.BROWSERSTACK]:({testRunHandler:e,mobileApp:t})=>e.getAppPath("browserStackAppId",t),[L.SAUCELABS]:({testRunHandler:e,mobileApp:t,gridHost:r})=>e.getSauceLabsAppPath(r,t)}}isTdcOrHeadSpinGrid(e){return e===L.TESTIM_TDC||e===L.TESTIM_HEADSPIN}getLockDeviceApiUrl(e){let t=this.getBaseApiUrl(e);return this.isTdcOrHeadSpinGrid(e.type)?`${t}/lock`:""}getBaseApiUrl(e){let{type:t,apiUrl:r}=e;return t===L.TESTIM_HEADSPIN?`${r||oc}/${cc}/devices`:t===L.TESTIM_TDC?`${r||ac}/${cc}/devices`:""}getHeaders(e){return{...this.isTdcOrHeadSpinGrid(e.type)&&{"Content-Type":"application/json",Authorization:`Bearer ${e.accessToken}`}}}buildRequestBody(e,t){return{...this.isTdcOrHeadSpinGrid(e.type)&&{device_id:t}}}async lockDevice(e,t){let r=this.getLockDeviceApiUrl(e),n=this.getHeaders(e),i=this.buildRequestBody(e,t);try{await We({url:r,headers:n,body:i})}catch(o){throw Ge.debug(`error while locking device ${t}`,{error:o}),o.status===401?new Error(`failed to lock device ${t}, device may be already locked and in use`):o}}async getHeadSpinDeviceConnection(e,t){let n=`${this.getBaseApiUrl(e)}/device_id:${t}/automation-config`;try{let i=await Te(n,void 0,this.getHeaders(e));return this.extractHeadSpinDeviceConnection(i,e.accessToken)}catch(i){throw Ge.error("error while getting automation config for device",{error:i,deviceId:t}),i}}async getPCloudyAuthToken(e,t,r){let n=await Gs(`https://${e}/api/access`,void 0,{Authorization:`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`});return JSON.parse(n).result.token}extractHeadSpinDeviceConnection(e,t){let r=Object.keys(e)[0],n=e[r].driver_url,i=new URL(n);return{hostname:i.hostname,port:Number(i.port),protocol:i.protocol.slice(0,-1),path:`/v0/${t}/wd/hub`}}async getGridDirectConnection(e,t){let r={};return this.isTdcOrHeadSpinGrid(e.type)&&(r=await this.getHeadSpinDeviceConnection(e,t)),r}getGridConnection(e){var r;if(this.isTdcOrHeadSpinGrid(e.type)){let n=(r=e.host)!=null&&r.includes("ulb.tdc.tricentis-cloud.com")?`/ulb/appium/v0/${e.accessToken}/wd/hub`:`/v0/${e.accessToken}/wd/hub`;return{protocol:e.protocol||"https",hostname:e.host,port:e.port,path:n}}if(e.type===L.TESTIM_TVC)return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/wd/hub"};if(e.type===L.P_CLOUDY)return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/appiumcloud/wd/hub",user:e.user,key:e.key};if([L.BROWSERSTACK,L.SAUCELABS].includes(e.type))return{protocol:e.protocol||"https",hostname:e.host,port:443,path:"/wd/hub",user:e.user,key:e.key}}async getDeviceNameFromSessionCaps({capabilities:e,gridType:t,projectId:r,projectType:n,companyId:i,gridId:o}){var a,l,c;if(t===L.TESTIM_HEADSPIN||t===L.TESTIM_TDC){let d=await Qn({projectId:r,projectType:n,companyId:i,gridId:o,selectors:`device_id:${e.udid}`});return((a=d==null?void 0:d[0])==null?void 0:a.name)||e.device}if(t===L.BROWSERSTACK)return((l=e.mobile)==null?void 0:l.version.split("-")[0])||((c=e.desired)==null?void 0:c.deviceName);if(t===L.SAUCELABS)return e.testobject_device_name;if(t===L.P_CLOUDY){if(e.pCloudy_DeviceFullName){let d=e.pCloudy_DeviceFullName.split("_");return`${d[0]} ${d[1]}`}return e.deviceModel}return e.device}async updateDeviceOnRemoteTestResult(e,t,r,n,i=!1){let{executionId:o,testId:a,testResultId:l}=e,{project:c,projectData:{type:d}={},company:{companyId:m=""}={},gridData:{gridId:u="",type:f=""}={}}=n,h=t.capabilities,g=h.platformName,y;if(f===L.TESTIM_TVC){let{getTvcDeviceInfoFromSessionCaps:w}=Z();y=w(t.capabilities,i)}else y=await this.getDeviceFromAppiumCapabilities(h,t,r,g,f,c,d,m,u,i);let T=await this.buildRemoteResultLink(n.gridData,t.sessionId,h);return await Ir(c,o,a,l,"RUNNING",{device:y,...T&&{remoteResultLink:T}}),Ge.info("device details updated on testResult",{testResultId:l,executionId:o,testId:a,device:y,remoteResultLink:T,gridType:f}),y}getOsVersion(e,t){var n;let r=e.platformVersion;return!r&&t===L.BROWSERSTACK?(n=e.mobile)==null?void 0:n.version.split("-")[1]:r}async getScaleFactorAndSize(e,t,r,n,i){if(e.pixelRatio&&typeof e.deviceScreenSize=="string"){let o=e.deviceScreenSize.split("x"),a=Number(o[0]),l=Number(o[1]);return{scaleFactor:e.pixelRatio,width:a,height:l}}try{let{AppiumApi:o}=Z(),a=new o(t,r.sessionId,null,i),[l,c]=await Promise.all([a.getScreenshot(),a.getDeviceSize()]),d=Buffer.from(l,"base64"),m=await qy.Jimp.fromBuffer(d),u=m.bitmap.width,f=m.bitmap.height;return{scaleFactor:u/c.width,width:u,height:f}}catch(o){return Ge.warn("failed to get device scale factor from appium, applying default scale factor",{err:o}),{scaleFactor:n==="android"?1:2}}}async getDeviceFromAppiumCapabilities(e,t,r,n,i,o,a,l,c,d){let[m,u]=await Promise.all([this.getScaleFactorAndSize(e,r,t,n,d),this.getDeviceNameFromSessionCaps({capabilities:e,gridType:i,projectId:o,projectType:a,companyId:l,gridId:c})]),f=this.getOsVersion(e,i);return{name:u??"",model:e.deviceModel,udid:e.udid,osVersion:f,osType:n,isVirtual:!1,...m}}async buildRemoteResultLink(e,t,r){return e.type===L.BROWSERSTACK?(await this.fetchWithUserAndPasswordAuth({url:`${Us}/sessions/${t}.json`,user:e.user,key:e.key})).automation_session.public_url:e.type===L.SAUCELABS?r.testobject_test_report_url:e.type===L.TESTIM_TVC?r.replayUrl:e.type===L.TESTIM_HEADSPIN||e.type===L.TESTIM_TDC?`${e.type===L.TESTIM_HEADSPIN?BE:FE}/sessions/${t}/waterfall`:""}async getTmaDeviceDetails(e,t){let n=(await Te(`${e}/api/devices`)).find(i=>i.udid===t);if(!n)throw new Error(`device ${t} not found`);return{udid:n.udid,name:n.name,model:n.model,height:n.height,width:n.width,geo:"local",osVersion:n.osVersion,osType:n.deviceType.toLowerCase(),scaleFactor:n.scaleFactor??0,isVirtual:n.virtual??!1,minApiVersion:n.minApiVersion}}async updateTmaDeviceDetails(e,t,r){let{executionId:n,testId:i,testResultId:o}=r,{project:a,localTmaUrl:l}=t,c=await this.getTmaDeviceDetails(l,e);return await Ir(a,n,i,o,"RUNNING",{device:c}),Ge.info("device details updated on testResult",{testResultId:o,executionId:n,testId:i,device:c}),c}async getGridAppId({gridData:e,testRunHandler:t,projectId:r}){let n=e.type,i=t.mobileApp,o=this.gridsAppIdGetter[n]({testRunHandler:t,mobileApp:i,gridHost:e.host});return o?(_.flags.allowFixingAppIdStructure.isEnabled()&&(Ge.info("fixing gridAppId structure",{gridAppId:o,projectId:r,testResultId:t.testResultId,executionId:t.executionId}),await Ju({gridAppId:o,gridId:e.gridId,projectId:r,gridType:n,appId:i.appId,gridHost:e.host})),o):t.getAppPathByGridType(n,e.gridId,i)}async getMobileAppDataByAppId({appId:e,projectId:t,token:r}){let n=await Xn({appId:e,projectId:t});return{appUrl:`${he}/storage${n.filePath}?access_token=${r}`,mobileApp:n}}calculateUploadRequestTimeOut(e){let t=0,r=Math.ceil(e/1024);return t=(Math.ceil(r/(Ad*60))+1)*60*1e3,Math.max(xd,t)}async uploadAppToGrid({projectId:e,testRunHandler:t,mobileApp:r,gridId:n,gridType:i}){let a={[L.BROWSERSTACK]:{name:"Browserstack"},[L.TESTIM_TVC]:{name:"Mobile Virtual Grid"},[L.P_CLOUDY]:{name:"pCloudy"}}[i].name;if(t.isAppFromDevice)throw new Error(`Application from your device, ${a} grid dose not support application from device. Please choose a compatible application for testing.`);let l=r||t.mobileApp,c=(0,Hy.default)(`uploading app to ${a} please wait..`).start();try{Ge.info(`uploading app to ${a} during test run`,{mobileApp:r,projectId:e,testResultId:t.testResultId,executionId:t.executionId});let d=await Ku({projectId:e,gridId:n,app:l,timeout:this.calculateUploadRequestTimeOut(l.fileSize)});return c.succeed(`app uploaded successfully to ${a}`),d.gridAppId}catch(d){throw c.fail(`failed to upload app to ${a}`),Ge.error(`failed to upload app to ${a}`,{error:d,mobileApp:r,projectId:e,testResultId:t.testResultId,executionId:t.executionId}),new Error(`failed to upload app to ${a}`)}}async verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:t,projectId:r,gridId:n,gridType:i,mobileAppId:o}){let a=t.get(o);if(a!=null&&a.isUploaded)return a.uploadedAppId;let l=await this.uploadAppToGrid({projectId:r,testRunHandler:e,gridId:n,gridType:i});return t.set(o,{isUploaded:!0,uploadedAppId:l}),l}async getAppIdFromGridOrTestimPublicLink({testRunHandler:e,options:t,pendingAppUploads:r}){let n="",i,{executionId:o,testResultId:a}=e,{appId:l="",project:c,authData:{token:d=""}={},gridData:m={}}=t,{gridId:u="",type:f=""}=m;if(!l&&e.isAppFromDevice)return n;if(l){Ge.info("getting appData by appId",{appId:l,projectId:c,testResultId:a,executionId:o});let T=await this.getMobileAppDataByAppId({appId:l,projectId:c,token:d});n=T.appUrl,i=T.mobileApp,e.nativeApp=i}else Ge.info("no appId setting appPath from app associated with the test",{projectId:c,testResultId:a,executionId:o}),n=e.downloadableAppPublicLink||"";let h=l||e.mobileApp.appId,g=await this.getGridAppId({projectId:c,gridData:m,testRunHandler:e}),y=f===L.BROWSERSTACK||f===L.TESTIM_TVC||f===L.P_CLOUDY;if(g){let T=t.projectData.type,w=await this.verifyAppStillExistsOnGrid({gridAppId:g,gridData:m,projectType:T});w&&(Ge.info("app exists on grid, using gridAppId",{gridAppId:g,projectId:c,testResultId:a,executionId:o,mobileAppId:h}),n=g),!w&&y&&(Ge.info("app not exists on grid, uploading it",{gridAppId:g,projectId:c,testResultId:a,executionId:o,mobileAppId:h}),n=await this.verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:r,projectId:c,gridId:u,gridType:f,mobileAppId:h})),!w&&!y&&Ge.info("app not exists on grid, using testimStorage url",{projectId:c,testResultId:a,executionId:o})}return!g&&y&&(n=await this.verifyAppAlreadyUploaded({testRunHandler:e,pendingAppUploads:r,projectId:c,gridId:u,gridType:f,mobileAppId:h})),n}async verifyAppStillExistsOnGrid({gridAppId:e,gridData:t,projectType:r}){var d,m;let{accessToken:n,user:i,host:o,key:a,type:l,apiUrl:c}=t;if(l===L.BROWSERSTACK){let u=`${Us}/recent_apps`,f=await this.fetchWithUserAndPasswordAuth({url:u,user:i,key:a});return Array.isArray(f)?f.some(h=>h.app_url===e):!1}if(l===L.SAUCELABS){let u=`https://${o==null?void 0:o.replace("ondemand","api")}/v1/storage/files`;return(await this.fetchWithUserAndPasswordAuth({url:u,user:i,key:a})).items.some(h=>h.id===e)}if(l===L.TESTIM_HEADSPIN||l===L.TESTIM_TDC){let u=`${c}/${lc}/apps`;return c||(u=`${l===L.TESTIM_HEADSPIN?oc:ac}/${lc}/apps`),(await this.fetchWithTokenAuth({url:u,accessToken:n,authType:"Bearer"})).apps.some(h=>h.app_id===e)}if(l===L.TESTIM_TVC){let u=`${Cd}/versions/${e}/info`,f=t[`${r}Token`];try{return await this.fetchWithTokenAuth({url:u,accessToken:f,authType:"Upload-Token",userAgent:"Testim-CLI"}),!0}catch(h){return h.status!==404&&Ge.error("error while verifying app exists on TVC",{error:h}),!1}}if(l===L.P_CLOUDY){let u=await this.getPCloudyAuthToken(o,i,a),f=`https://${o}/api/drive`,h=await Tc({url:f,body:{token:u,filter:"all"},headers:{contentType:null}});return(m=(d=JSON.parse(h).result)==null?void 0:d.files)==null?void 0:m.some(y=>y.file===e)}throw new Error(`grid type ${l} is not supported`)}async fetchWithUserAndPasswordAuth({url:e,user:t,key:r}){let n={Authorization:`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`};return await Te(e,void 0,n)}async fetchWithTokenAuth({url:e,accessToken:t,authType:r,userAgent:n}){let i={Authorization:`${r} ${t}`,...n&&{"User-Agent":n}};return await Te(e,void 0,i)}},vt=new zu});function zy({nativeAppMetadata:s,appPath:e,gridInfo:t}){if(!s&&!e||!s)throw Error("Application not specified. Please provide the required application for execution and try again.");if(!s.id&&!s.activity&&!s.packageName)throw Error("The application appears to be corrupted. Please ensure the application is in a valid state before running the test.");if(t.mode!=="local"&&!jE.includes(t.type))throw Error(`unsupported grid was detected please make sure to select supported mobile grid (${t.type})`)}function $E({deviceUdid:s,gridInfo:e,testRunConfig:t}){let{staticAllocation:r}=(t==null?void 0:t.mobile)||{};if(e.type!==L.TESTIM_TDC&&e.type!==L.TESTIM_HEADSPIN)throw Error("unsupported grid was detected please make sure to select supported mobile grid for direct connection");if(!s&&!(r!=null&&r.deviceUdid))throw Error("missing device udid or test run config is not static");if(!s&&(r!=null&&r.deviceUdid)&&r.deviceUdid.split(",").length!==1)throw Error("provided static config contains multi devices")}function WE(s){let{testName:e,executionId:t,testResultId:r,customTag:n}=s,i=[{executionId:t},{testResultId:r}];return e&&i.push({testName:e}),n&&i.push({customTag:n}),i}function VE(s,e,t){let{fullReset:r,setNoReset:n,skipLoadBalancer:i}=e,o=s===L.TESTIM_TDC,a=s===L.TESTIM_HEADSPIN,l=o?"tdc":"headspin",c=a&&_.flags.enableBatchHeadSpin.isEnabled(),d=o&&(_.flags.enableBatchTDC.isEnabled()||_.flags.headSpinTdcEnableFlagCapability.isEnabled()),m=_.flags.increaseTDCRequestTimeout.isEnabled();return{[`${l}:capture.video`]:!0,..._.flags.tdcHsPreventNetworkCapture.isEnabled()&&{[`${l}:capture.network`]:!1},...i&&{[`${l}:controlLock`]:!0},[`${l}:retryNewSessionFailure`]:!1,[`${l}:sessionTags`]:WE(t),[`${l}:enableBatch`]:c||d,...!r&&{"appium:noReset":n},...m&&{[`${l}:newCommandTimeout`]:600,"appium:newCommandTimeout":600}}}function Ea(s){return"id"in s?s.id:s.packageName}function GE(s,e){return{[`${e===L.TESTIM_TDC?"tdc":"headspin"}:app.id`]:s}}function HE({projectType:s,sessionCaps:e,options:t,nativeAppMetadata:r,appPath:n,androidActivityWait:i}){let{fullReset:o,setNoReset:a}=t,l={"appium:app":n},c=n==null?void 0:n.startsWith("http");n&&!c&&(l=GE(n,t.gridData.type));let m=()=>o===void 0&&n?!0:typeof o=="string"?o!=="false":o;switch(s){case"ios":return{...e,platformName:"iOS","appium:autoAcceptAlerts":!0,"appium:automationName":"XCUITest","appium:fullReset":m(),...r&&{"appium:bundleId":Ea(r)},...n&&l};case"android":return{...e,platformName:"Android","appium:fullReset":!!o,"appium:autoGrantPermissions":!a,"appium:automationName":"UiAutomator2",...i&&{"appium:appWaitActivity":`${i}, *`},...r&&{"appium:appPackage":Ea(r),"appium:appActivity":r.activity??".*"},...n&&l};default:throw Error(`unsupported mobile project ${s}`)}}function Nr({projectType:s,sessionCaps:e,nativeAppMetadata:t,appPath:r,androidActivityWait:n,appiumPrefix:i="",shouldRunInEnhancedMode:o}){switch(s){case"ios":return{platformName:"iOS",[`${i}autoAcceptAlerts`]:!0,[`${i}automationName`]:o?"WaldoTestim":"XCUITest",[`${i}fullReset`]:!0,...t&&{[`${i}bundleId`]:Ea(t)},...r&&{[`${i}app`]:r},...e};case"android":return{platformName:"Android",[`${i}autoGrantPermissions`]:!0,[`${i}automationName`]:o?"WaldoTestim":"UiAutomator2",...n&&{[`${i}appWaitActivity`]:`${n}, *`},...t&&{[`${i}appPackage`]:Ea(t),[`${i}appActivity`]:t.activity??".*"},...r&&{[`${i}app`]:r},...e};default:throw Error(`unsupported mobile project ${s}`)}}function Ky({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,sessionTags:n,options:i,gridInfo:o,shouldRunInEnhancedMode:a}){let l=VE(o.type,i,n);return HE({projectType:s,sessionCaps:l,options:i,nativeAppMetadata:e,appPath:t,androidActivityWait:r,shouldRunInEnhancedMode:a})}function Ra({osVersion:s,mobileConfig:e}){let{staticAllocation:t,dynamicAllocation:r}=e;return s||(t!=null&&t.osVersion?t==null?void 0:t.osVersion:r!=null&&r.osVersionRegex?r==null?void 0:r.osVersionRegex:".*")}function xa({deviceName:s,mobileConfig:e,projectType:t,gridType:r}){let{staticAllocation:n,dynamicAllocation:i}=e,o=r===L.P_CLOUDY;return s||(n!=null&&n.deviceName?o?n.deviceUdid:n.deviceName:i!=null&&i.deviceNameRegex?t==="android"&&i.deviceNameRegex===".*"&&o?uc:i.deviceNameRegex:t==="ios"&&r===L.BROWSERSTACK?"iPhone.*":o?t==="ios"?"apple":uc:".*")}function qE(s,e){let{androidToken:t,iosToken:r}=s,n=e==="ios";if(!t&&!r)throw Error("missing access token for testim virtual cloud");if(n&&!r)throw Error("missing ios token for testim virtual cloud");if(!n&&!t)throw Error("missing android token for testim virtual cloud");return n?r:t}function zE(s){return{"appium:appiumVersion":"2.0.0","appium:platformVersion":"10",...Ia(s,Is)}}function Jy(s,e,t){return s?Object.entries(s).reduce((r,[n,i])=>{if(e(n)){if(!t)return r[n]=i,r;let o=n.replace(t,"");r[o]=i}return r},{}):{}}function KE(s){return Jy(s,e=>e.startsWith("browserstack."),"browserstack.")}function JE(s){return Jy(s,e=>!e.startsWith("browserstack."))}function Yy(s){return!s||!Xy(s)?"2.0.0":s}function Xy(s){return s.split(".")[0]==="2"||s.includes("appium2")||s==="latest"}function Qy({osVersion:s,projectType:e,appiumVersion:t,isBrowserStack:r=!1}){let n=/^(1[4-9](\.\d+){0,2})$|^\^\(\?=1[4-9]((\.\d+){0,2})\.\*\)\.\*$/,i=/^(10(\.\d+){0,2})$|^\^\(\?=10((\.\d+){0,2})\.\*\)\.\*$/,o=/^(1[7-9](\.\d+){0,2})$|^\^\(\?=1[7-9]((\.\d+){0,2})\.\*\)\.\*$/,a=r&&i.test(s),l=e==="android"&&(n.test(s)||a),c=e==="ios"&&o.test(s),d=l||c;if(t){let m=Xy(t);return!m&&d?(console.warn(`Appium 2 is required for version: ${s}, forcing appium 2 for current session.`),!0):m}return d}function Ia(s,e){let t={};return Object.entries(s).forEach(([r,n])=>{let i=`${e}${r}`;t[i]=n}),t}async function YE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a,shouldRunInEnhancedMode:l}){let{osVersion:c,deviceName:d}=n,m=(a==null?void 0:a.mobile)||{},{type:u}=i,f=qE(i,s),h=await Qn({gridId:i.gridId,projectType:s,projectId:n.project,companyId:n.company.companyId}),g=h==null?void 0:h.find(({udid:S})=>{var E;return((E=m.staticAllocation)==null?void 0:E.deviceUdid)===S}),y=(g==null?void 0:g.osVersion)??Ra({osVersion:c,mobileConfig:m}),T=(g==null?void 0:g.name)??xa({deviceName:d,mobileConfig:m,projectType:s,gridType:u}),w=qe(n.editorUrl,n.project,o.testId,o.testResultId,o.branch),b={device:T,os_version:y,"waldo:displayName":`${o.testName}-${o.executionId}-${o.testResultId}`,"waldo:externalUrl":w,...l&&{"waldo:automationName":"WaldoTestim"},"waldo:options":{token:f}};return Nr({projectType:s,sessionCaps:b,nativeAppMetadata:e,appPath:t,androidActivityWait:r,shouldRunInEnhancedMode:l})}function XE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{user:m,key:u,type:f}=i,h=_.flags.enableAppium2pCloudy.isEnabled(),g=Ra({osVersion:l,mobileConfig:d}),y=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:f}),T=/^[a-zA-Z]+$/.test(y),w={...g!==".*"&&{pCloudy_DeviceVersion:g},...T&&{pCloudy_DeviceManufacturer:y},...!T&&{pCloudy_DeviceFullName:y}},b={pCloudy_Username:m,pCloudy_ApiKey:u,pCloudy_Individual:o.pCloudyIndividual,pCloudy_EnableVideo:!0,pCloudy_EnablePerformanceData:!0,pCloudy_EnableDeviceLogs:!0,...w,pCloudy_DurationInMinutes:n.duration?Number(n.duration):Number(Pd),pCloudy_ApplicationName:t,appiumVersion:"1.21.0",newCommandTimeout:600,lunchTimeout:"90000",uiautomator2ServerInstallTimeout:15e4,uiautomator2ServerLaunchTimeout:2e5};return h&&(b=zE(b)),t="",Nr({projectType:s,sessionCaps:b,nativeAppMetadata:e,appPath:t,androidActivityWait:r,...h&&{appiumPrefix:Is}})}function QE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{type:m}=i,u=Ra({osVersion:l,mobileConfig:d}),f=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:m}),h=(0,Dr.omit)({...n.saucelabs},["automationName","platformName"]),g={...h["sauce:options"]};if(delete h["sauce:options"],Qy({osVersion:h.platformVersion||u,projectType:s,appiumVersion:g.appiumVersion})){let T={debug:!0,networkLogs:!0},w={user:i.user,key:i.key,name:o.testResultId,build:o.executionId,appiumVersion:Yy(g.appiumVersion),deviceName:f,tags:Object.values(o)},b={"appium:platformVersion":u,"appium:deviceName":f,...Ia(h,Is),"sauce:options":{...T,...w,...(0,Dr.omit)(g,"appiumVersion")}};return Nr({projectType:s,sessionCaps:b,appiumPrefix:Is,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}let y={"saucelabs.user":i.user,"saucelabs.key":i.key,platformVersion:u,deviceName:f,tags:Object.values(o),name:o.testResultId,build:o.executionId,...h,...g};return Nr({projectType:s,sessionCaps:y,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}function ZE({projectType:s,nativeAppMetadata:e,appPath:t,androidActivityWait:r,options:n,gridInfo:i,sessionTags:o,testRunConfig:a}){let{osVersion:l,deviceName:c}=n,d=(a==null?void 0:a.mobile)||{},{type:m}=i,u=Ra({osVersion:l,mobileConfig:d}),f=xa({deviceName:c,mobileConfig:d,projectType:s,gridType:m}),h=KE(n.browserstack),g=(0,Dr.omit)(JE(n.browserstack),["automationName","platformName","project","build","name"]),{project:y,build:T,name:w}=n.browserstack||{},b=_.flags.enableAppium2BrowserStack.isEnabled();if(b||Qy({osVersion:g.platformVersion||u,projectType:s,isBrowserStack:!0,appiumVersion:h.appiumVersion})){let E={userName:i.user,accessKey:i.key,appiumVersion:b?"2.0.1":Yy(h.appiumVersion),projectName:y||o.project,buildName:T||o.executionId,debug:!0,networkLogs:!0},A={"appium:platformVersion":u,"appium:deviceName":f,...Ia(g,Is),"bstack:options":{...E,...(0,Dr.omit)(h,"appiumVersion")}};return Nr({projectType:s,sessionCaps:A,appiumPrefix:Is,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}let S={os_version:g.platformVersion||u,device:g.deviceName||f,realDevice:!0,name:w||o.testResultId,project:y||o.project,build:T||o.executionId,buildTags:Object.values(o).join(","),"browserstack.user":i.user,"browserstack.key":i.key,"browserstack.debug":!0,"browserstack.networkLogs":!0,...g,...Ia(h,"browserstack.")};return Nr({projectType:s,sessionCaps:S,nativeAppMetadata:e,appPath:t,androidActivityWait:r})}async function eI(s){if(L.TESTIM_TDC===s.gridInfo.type||L.TESTIM_HEADSPIN===s.gridInfo.type)return Ky(s);if(L.TESTIM_TVC===s.gridInfo.type)return await YE(s);if(L.P_CLOUDY===s.gridInfo.type)return XE(s);if(L.SAUCELABS===s.gridInfo.type)return QE(s);if(L.BROWSERSTACK===s.gridInfo.type)return ZE(s);throw new Error(`unsupported grid type ${s.gridInfo.type}`)}function tI(s,e){var c,d;let{staticAllocation:t,dynamicAllocation:r,type:n}=e||{},{deviceName:i,osVersion:o,deviceUdid:a}=s,l={};return n==="dynamic"&&(!i&&((c=r==null?void 0:r.selector)!=null&&c.manufacturer)&&(l.manufacturer=r.selector.manufacturer),!o&&((d=r==null?void 0:r.selector)!=null&&d.osVersion)&&(l.os_version=r.selector.osVersion)),n==="static"&&!a&&(t!=null&&t.deviceUdid)&&(l.device_id=t.deviceUdid),i&&(l.manufacturer=i),o&&(l.os_version=o),a&&(l.device_id=a,delete l.os_version,delete l.manufacturer),l}async function Zy(s){let{gridInfo:e,nativeAppMetadata:t,options:r,appPath:n,testRunConfig:i}=s,{selectedGrid:o}=(i==null?void 0:i.mobile)||{};if(i!=null&&i.mobile&&(o==null?void 0:o.type)!==e.type)throw Error(`selected grid type ${o.type} is not equal to grid type ${e.type}`);zy({nativeAppMetadata:t,appPath:n,gridInfo:e});let a=vt.getGridConnection(e),l=await eI(s);if(e.type===L.TESTIM_HEADSPIN||e.type===L.TESTIM_TDC){let y=e.type===L.TESTIM_HEADSPIN?"headspin":"tdc",T=tI(r,i==null?void 0:i.mobile);if(!(0,Dr.isEmpty)(T)){let w=Object.entries(T).map(([b,S])=>S.split(",").map(E=>E===".*"||E==="="?"":`${b}:${E}`).join(",")).join(" ").trim();l[`${y}:selector`]=w}}let c=e.type===L.TESTIM_TVC?{alwaysMatch:l}:l,d=_.flags.increaseTDCRequestTimeout.isEnabled(),m=0,u=(0,Yu.default)("2m"),f=(0,Yu.default)("12m"),h=mr(_.flags.appiumConnectionRetryCount.getValue(),m),g=mr(_.flags.appiumConnectionRequestTimeout.getValue(),u);return d&&g<f&&(g=f),{...a,desiredCapabilities:l,connectionRetryTimeout:g,capabilities:c,connectionRetryCount:h,logLevel:r.appiumLogLevel}}async function eb(s){var h,g;let{projectType:e,gridInfo:t,nativeAppMetadata:r,options:n,appPath:i,androidActivityWait:o,sessionTags:a,testRunConfig:l}=s,{deviceUdid:c}=n;zy({nativeAppMetadata:r,appPath:i,gridInfo:t}),$E({deviceUdid:c,gridInfo:t,testRunConfig:l});let d=c||((g=(h=l.mobile)==null?void 0:h.staticAllocation)==null?void 0:g.deviceUdid),m=await vt.getGridDirectConnection(t,d),f=Ky({projectType:e,nativeAppMetadata:r,appPath:i,androidActivityWait:o,options:n,sessionTags:a,testRunConfig:l,gridInfo:t});return d&&(f["appium:udid"]=d),{...m,desiredCapabilities:f,capabilities:f,connectionRetryCount:0,logLevel:n.appiumLogLevel}}function tb(s){let{projectType:e,nativeAppMetadata:t,appPath:r,androidActivityWait:n}=s,o=Nr({projectType:e,sessionCaps:{dontStopAppOnReset:!0,fullReset:!1},nativeAppMetadata:t,appPath:r,androidActivityWait:n});return e==="ios"&&delete o.app,o}function rb(s){var t,r;let e={...s};return delete e.path,delete e.user,delete e.key,delete e.desiredCapabilities,delete e.capabilities["saucelabs.user"],delete e.capabilities["saucelabs.key"],delete e.capabilities["browserstack.user"],delete e.capabilities["browserstack.key"],(t=e.capabilities["sauce:options"])==null||delete t.user,(r=e.capabilities["sauce:options"])==null||delete r.key,delete e.capabilities.key,delete e.capabilities.user,e}var Yu,Dr,Is,jE,Xu=v(()=>{"use strict";Yu=I(require("ms"));ue();ie();Sa();Dr=require("lodash");F();de();ge();Is="appium:",jE=[L.BROWSERSTACK,L.SAUCELABS,L.TESTIM_HEADSPIN,L.TESTIM_TDC,L.TESTIM_TVC,L.P_CLOUDY]});var Aa,nb=v(()=>{"use strict";Aa=class{constructor(){this.sessionTabs={}}on(){}tabCount(){}getAllOpenTabIds(){return[]}isSessionTab(){return!1}getAllTabInfos(){return{}}async addNewTab(){}addOpenerStepId(){}addOpenerStep(){}getTabUtilsByTabIdAndSessionId(){}getTabUtilsByTabId(){return{}}getTabInfo(){return{}}getTabUtils(){return{}}getMainTabInfo(){}getMainTabUtils(){return{}}getMainTabId(){return null}async isMainTabExists(){return!1}clearAllTabs(){}async switchTab(){}async getTabDetails(){}async isMainTabIncognito(){return!1}async getTabIdByTabInfo(){return NaN}}});var Ca,ib=v(()=>{"use strict";F();Ca=class{constructor(e){this.driver=e;this._abortedSteps=[];this.unescapeHTML=Xs;this.getLinksFromUnescapeHTML=Qs}resetAbort(){this._abortedSteps.length=0}abort(e){this._abortedSteps.push(e)}get abortedSteps(){return this._abortedSteps}async executeInAut(e,t){throw new Error("not implemented (mobile)")}extractTargetText(e){throw new Error("not implemented (mobile)")}getCookie(e){throw new Error("not implemented (mobile)")}setCookie(e){throw new Error("not implemented (mobile)")}async getNextDynamicParent(e,t){throw new Error("not implemented (mobile)")}}});var Qu,Pa,ob=v(()=>{"use strict";W();Qu=P("mobile-frame-locator-mock"),Pa=class{foundFrameCallback(){return Qu.info("foundFrameCallback-mock invoked"),{}}locate(){return Qu.info("locate-mock invoked"),{}}async findFrame(){return Qu.info("findFrame-mock invoked"),{}}}});var rI,cb,ab,Rs,Zu=v(()=>{"use strict";rI=I(require("webdriverio")),cb=require("@applitools/eyes-sdk-core");nb();Mu();W();ib();Uu();we();$u();ob();Wu();ab=P("appium-test-player"),Rs=class{constructor(e,t,r,n=rI,i=void 0,o=void 0){this.id=e;this.driver=n;let{SessionPlayer:a,commonConstants:l,StepActionFactory:c,MobileLocateElementPlayer:d}=Z(),m=new Ca(this.driver);this.stepActionFactory=new c(m),wa(this.driver,this.stepActionFactory),this.playbackTimeoutCalculator=new Es(Jo()),this.sessionPlayer=new a(e,{tabService:new Aa,cookieUtils:void 0,FrameLocator:Pa,portSelector:qo,LocateElementPlayer:d,stepActionUtils:m,stepActionFactory:this.stepActionFactory,playbackTimeoutCalculator:this.playbackTimeoutCalculator,makeSDK:cb.makeSDK}),this.sessionPlayer.setShouldMonitorPerformance(Boolean(r)),this.sessionPlayer.playbackManager.isRemoteSession=!0,this.sessionPlayer.playbackManager.isLocalRun=!1,this.sessionPlayer.playbackManager.testRetryCount=i,this.sessionPlayer.playbackManager.previousTestResultId=o,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(){let{playbackManager:e}=this.sessionPlayer,{executionId:t,testResult:{resultId:r}={},appiumApi:n}=e,i={executionId:t,testResultId:r,sessionId:n==null?void 0:n.sessionId};try{n!=null&&n.sessionId&&(await(n==null?void 0:n.endSession()),ab.info("appium session deleted",{...i}))}catch(o){ab.error("error while deleting appium session",{...i,error:o})}finally{let{commonConstants:o}=Z();e.off(o.playback.RESULT)}}getSessionId(){var e;return(e=this.sessionPlayer.playbackManager.appiumApi)==null?void 0:e.sessionId}}});async function sI(s){return await Te(`${s}/api/status`)}async function lb(s,e){return await Te(`${s}/api/devices/${e}/status`)}async function ub(s){if((await sI(s)).fsmState!=="Ready")throw new Error("TMA is not ready")}var pb=v(()=>{"use strict";Ve()});var db={};H(db,{WorkerLocalTma:()=>sp});var Mr,ep,tp,rp,sp,mb=v(()=>{"use strict";Ve();Xu();Wn();F();W();Pt();Zu();we();pb();Sa();Mr=P("worker-appium"),ep=class extends Error{},tp=class extends Error{},rp=class extends Error{},sp=class extends Ot{constructor(){super(...arguments);this.baseDevicePath=(t,r)=>`${t}/api/devices/${r}`}initPlayer(t){return new Rs(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async initAndGetAppiumAPI(t){if(t.sessionPlayer.playbackManager.appiumApi)return t.sessionPlayer.playbackManager.appiumApi;let{AppiumApi:r}=Z(),{DOMParser:n}=await import("linkedom"),i=new r(this.sessionData.serverAddress,this.sessionData.sessionId,n,!1);return t.sessionPlayer.playbackManager.appiumApi=i,i}async getBrowserOnce(t,r,n,i){var E;if(Q.onGetSession(this.id,this.testName,t.runMode),!this.options.localTmaUrl||!this.options.deviceUdid)throw new Error("Missing localTmaUrl or deviceUdid");let{localTmaUrl:o,deviceUdid:a,projectData:l}=this.options;await ub(o);let{project:c,authData:{token:d=""}={}}=this.options,{driver:m}=n,u=l.type,f=this.options.appId;if(f){let{mobileApp:A}=await vt.getMobileAppDataByAppId({appId:f,projectId:c,token:d});t.nativeApp=A}let h=u==="android"?t.androidActivityWait:null,g=t.nativeAppMetadata,y=t.downloadableAppPublicLink,T=t.appPackageNameOrBundleId;if(!g)throw new Error("Application not specified. Please provide the required application for execution and try again.");if(!T)throw new Error("The application appears to be corrupted. Please ensure the application is in a valid state before running the test.");let[{appInstalled:w,version:b},S]=await Promise.all([this.getAppStateFromDevice(o,a,T),lb(o,a)]).catch(A=>{throw this.handleDeviceNotFoundError(A),A});if(Mr.info("device status and app state",{deviceStatus:S,appInstalled:w,version:b,executionId:this.executionId,testResultId:this.testResultId}),!w&&t.isAppFromDevice&&!f)throw new Error("The application is not installed on the target device. Please ensure the application is installed and try again.");!w&&y&&(await this.installApp(o,a,y),Mr.info("Application installed successfully",{deviceUdid:a,executionId:this.executionId,testResultId:this.testResultId}));try{let A={testName:this.testName,executionId:this.executionId,testResultId:this.testResultId,project:`${(E=this.options.projectData)==null?void 0:E.name}-${this.options.project}`},D=tb({projectType:u,nativeAppMetadata:g,appPath:y,androidActivityWait:h,sessionTags:A,gridInfo:i,options:this.options,testRunConfig:this.testRunConfig}),j={capabilities:{udid:a,...D}};Mr.info("requesting new appium session from TMA",{tmaSessionSettings:j,executionId:this.executionId,testResultId:this.testResultId});let R=await this.requestNewAppiumSessionFromTma(o,j,g);this.sessionData=R;let x=await m.attach({sessionId:R.sessionId,capabilities:D,options:{capabilities:D}});this.device=await vt.updateTmaDeviceDetails(a,this.options,t),Mr.info(`init new appium session with local TMA testName: ${this.testName}`,{sessionId:x.sessionId,testResultId:this.testResultId,nativeAppMetadata:g,sessionCaps:x.capabilities})}catch(A){throw Mr.error("failed to start application",{err:A}),A}}async requestNewAppiumSessionFromTma(t,r,n){var i,o;try{let a=await We({url:`${t}/api/session`,headers:{"Content-Type":"application/json"},body:r,timeout:6e4}),l={name:n.name,version:n.version};return{...a,appInfo:l,env:"local-tma"}}catch(a){this.handleDeviceNotFoundError(a);let l=(o=(i=a.response)==null?void 0:i.body)==null?void 0:o.message;throw a.status===500&&typeof l=="string"&&l.startsWith("Failed to create driver session")?new rp(l):a}}async getAppStateFromDevice(t,r,n){let i=this.options.projectData.type==="ios"?"bundles":"apps",o=`${this.baseDevicePath(t,r)}/${i}`,l=(await Te(o)).find(c=>"id"in c?c.id===n:c.packageName===n);return l?{appInstalled:!0,version:l.version}:{appInstalled:!1,version:""}}async installApp(t,r,n){var i,o;try{let a=await Mt(n);await Vs(`${this.baseDevicePath(t,r)}/apps`,{},{file:{buffer:a.body,fileName:"app"}})}catch(a){this.handleDeviceNotFoundError(a);let l=(o=(i=a.response)==null?void 0:i.body)==null?void 0:o.message,c="Failed to install app";throw l&&(c=`${c}: ${l}`),new tp(c,{cause:a})}}handleDeviceNotFoundError(t){var n,i;let r=(i=(n=t.response)==null?void 0:n.body)==null?void 0:i.message;if(t.status===404&&typeof r=="string"&&(r!=null&&r.startsWith("Ensure that the requested device")))throw new ep(`Device Unavailable: Please ensure that the specified device ${this.options.deviceUdid} is currently connected`)}async runTestOnce(t,r){let{manifestVersion:n,localAssetService:i}=Z(),{sessionPlayer:o}=r,a=n||"runner";Q.onWaitToTestComplete(this.id),o.playbackManager.executionId=t.executionId,o.playbackManager.executionName=t.executionName,o.playbackManager.appiumSessionData={...this.sessionData,device:this.device},await this.initAndGetAppiumAPI(r),i.initialize({serverUrl:this.options.localRCASaver});let l=async()=>{try{let c=await new Promise((m,u)=>{o.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:a,resolve:m,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,remoteRunId:t.remoteRunId}).catch(u)});return await i.drain(),c.stepsResults=null,c.resultId=this.testResultId,{...c,...t.seleniumPerfStats.getStats()}}catch(c){throw Mr.error("error while running appium tests",{err:c}),c}};try{return await super.runTestOnce(t,r),await l()}catch(c){throw Mr.error("failed to run test once",{err:c}),c}}}});var gb={};H(gb,{WorkerAppium:()=>np});var fb,Ur,np,hb=v(()=>{"use strict";F();Xu();fb=require("linkedom");Wn();W();Pt();Zu();we();Sa();ie();os();Ur=P("worker-appium"),np=class extends Ot{initPlayer(t){return new Rs(this.id,t.runParams,this.options.shouldMonitorPerformance,void 0,t.retryCount,t.previousTestResultId)}async getBrowserOnce(t,r,n,i){let o=this.options.projectData.type,a=(o==="android"||o==="ios")&&await t.isTestRecordedWithEnhancedMode();if(i.type!==L.TESTIM_TVC&&a)throw Error("The provided test(s) were authored in Enhanced Mode and can run only on VMG!");Q.onGetSession(this.id,this.testName,t.runMode);let{driver:l}=n,c=await vt.getAppIdFromGridOrTestimPublicLink({testRunHandler:t,options:this.options,pendingAppUploads:this.executionQueue.pendingAppUploads}),d=o==="android"?t.androidActivityWait:null,m=t.nativeAppMetadata;if(!m)throw new Error("Application not specified. Please provide the required application for execution and try again.");try{let u={testName:this.testName,executionId:this.executionId,testResultId:this.testResultId,project:`${this.options.projectData.name}-${this.options.project}`,...this.options.customTag&&{customTag:this.options.customTag},testId:this.testId,branch:this.branch,pCloudyIndividual:`${this.executionId}-${this.uniqueId}`},f={projectType:o,nativeAppMetadata:m,appPath:c,androidActivityWait:d,sessionTags:u,gridInfo:i,options:this.options,testRunConfig:this.testRunConfig,shouldRunInEnhancedMode:a},h;this.options.skipLoadBalancer&&this.options.deviceUdid?(this.options.lockDevice&&await vt.lockDevice(i,this.options.deviceUdid),h=await eb(f)):h=await Zy({...f,shouldRunInEnhancedMode:a}),Ur.info("starting appium session",{testResultId:this.testResultId,executionId:this.executionId,sessionTags:u,nativeAppMetadata:m,capabilities:rb(h)}),h.headers={"User-Agent":this.getUserAgentString()};let g=this.getServerAddressFromGrid();this.activeSession=await l.remote(h),this.device=await vt.updateDeviceOnRemoteTestResult(t,this.activeSession,g,this.options,a);let y=`${g}/session/${this.activeSession.sessionId}`;this.updateSlotData(y),Ur.info("appium session started successfully",{sessionId:this.activeSession.sessionId,testResultId:this.testResultId,executionId:this.executionId,sessionCaps:this.activeSession.capabilities})}catch(u){throw Ur.error("failed to start application",{testResultId:this.testResultId,executionId:this.executionId,err:u}),u}}startKeepAlive(t){let{errors:r}=Z(),n=async()=>{try{await t.getOrientation()}catch(i){Ur.error("failed to keep appium session alive",{err:i}),r!=null&&r.AppiumSessionTerminatedError&&i instanceof r.AppiumSessionTerminatedError&&this.stopKeepAlive()}};this.keepAliveIndex=setInterval(n,25e3)}stopKeepAlive(){this.keepAliveIndex&&clearTimeout(this.keepAliveIndex)}updateSlotData(t){try{this.options.slotService==="redis"&&Mf(this.options.company.companyId,this.options.projectData.projectId,{testResultId:this.testResultId,executionId:this.executionId,type:"execution",source:this.options.source,sessionUrl:t},this.id)}catch(r){Ur.error("failed to update slot data",{err:r})}}getServerAddressFromGrid(){let{host:t,port:r,accessToken:n,type:i}=this.options.gridData;return i===L.TESTIM_HEADSPIN||i===L.TESTIM_TDC?`https://${t}:${r}/v0/${n}/wd/hub`:i===L.P_CLOUDY?`https://${t}/appiumcloud/wd/hub`:`https://${t}:${r}/wd/hub`}getDirectAddressConnection(){let{protocol:t,hostname:r,port:n,path:i}=this.activeSession.options;if(t&&r&&n&&i)return`${t}://${r}:${n}${i}`}async runTestOnce(t,r){var f,h,g;let{manifestVersion:n,AppiumApi:i,localAssetService:o}=Z(),{sessionPlayer:a}=r,l=n||"runner",c=this.options.timeout;Q.onWaitToTestComplete(this.id),a.playbackManager.executionId=t.executionId,a.playbackManager.executionName=t.executionName;let d;if(this.options.skipLoadBalancer){let y=this.options.deviceUdid||((f=this.testRunConfig.mobile)==null?void 0:f.staticAllocation.deviceUdid),{protocol:T,hostname:w,port:b,path:S}=await vt.getHeadSpinDeviceConnection(this.options.gridData,y);d=`${T}://${w}:${b}${S}`}else d=this.getDirectAddressConnection()||this.getServerAddressFromGrid();let m=this.activeSession.capabilities;a.playbackManager.appiumSessionData={env:"remote",capabilities:m,sessionId:this.activeSession.sessionId,sessionToken:this.options.gridData.accessToken,gridType:this.options.gridData.type,projectType:this.options.projectData.type,gridId:this.options.gridData.gridId,companyId:(h=this.options.company)==null?void 0:h.companyId,device:this.device},a.playbackManager.appiumApi=new i(d,this.activeSession.sessionId,fb.DOMParser,((g=this.device)==null?void 0:g.domMode)==="enhanced"),this.startKeepAlive(a.playbackManager.appiumApi),o.initialize({serverUrl:this.options.localRCASaver});let u=async()=>{try{let y=await new Promise((w,b)=>{a.playByTestId({testId:this.testId,executionId:this.executionId,resultId:this.testResultId,baseUrl:this.baseUrl,userData:this.userData,version:l,resolve:w,isLocalRun:!1,overrideTestConfigId:this.overrideTestConfigId,branch:this.branch,remoteRunId:t.remoteRunId}).catch(b)});return this.stopKeepAlive(),await o.drain(),y.stepsResults=null,y.resultId=this.testResultId,{...y,...t.seleniumPerfStats.getStats()}}catch(y){throw Ur.error("error while running appium tests",{testResultId:this.testResultId,executionId:this.executionId,err:y}),this.stopKeepAlive(),y}};try{return await super.runTestOnce(t,r),await le(u(),c)}catch(y){throw Ur.error("failed to run test once",{err:y}),y}}getUserAgentString(){return"Testim/CI-Branch:runner-v4.149.0"}}});var ka,yb=v(()=>{"use strict";F();Ln();Y();ka=class{constructor(e){this.id=e;this.driver=new Ar}async onDone(){try{await le(this.driver.end(),12e4)}catch(t){t instanceof oe&&await this.driver.forceEnd().catch(()=>null)}this.driver=null}getSessionId(){return this.driver.getSessionId()}}});var bb,Oa,Tb=v(()=>{"use strict";bb=I(require("ws"));F();Oa=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=Kt(i=>{t.once("open",i)}),n=Kt(i=>{t.once("error",i)}).catch(()=>{t.close(),t.removeAllListeners()});return t.on("message",i=>this.onCDPMessage(i)),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||=0;let i=this._lastWsId++,o=new Promise((l,c)=>{this._cdpCallbacks.set(i,{resolve:l,reject:c})}),a={method:e,params:t,id:i};return r&&Object.assign(a,{sessionId:r}),n.send(JSON.stringify(a)),o}}});var La,ip,_a,wb=v(()=>{"use strict";F();La=I(require("chrome-launcher"));eu();Tb();En();ip=class{constructor(e){this.sessionId=e;this._isAlive=!1;this.cdpTestRunner=new Oa}async init(e){var h,g,y,T;let{browserOptions:t,testName:r,testRunConfig:n,gridInfo:i,customExtensionLocalLocation:o,executionId:a,testResultId:l,printFinalCaps:c,mode:d}=e,m=Ro({browserOptions:t,testName:r,testRunConfig:n,gridInfo:i,customExtensionLocalLocation:o,executionId:a,testResultId:l,printFinalCaps:c,mode:d}),u=[...((h=m.desiredCapabilities)==null?void 0:h.chromeOptions.args)??[],...((T=(y=(g=m.capabilities)==null?void 0:g.alwaysMatch)==null?void 0:y["goog:chromeOptions"])==null?void 0:T.args)??[],...La.Launcher.defaultFlags().filter(w=>w!=="--disable-extensions")];this.chrome=await La.launch({chromeFlags:u,startingUrl:void 0,ignoreDefaultFlags:!0}),this.chrome.process.once("exit",()=>{this._isAlive=!1}),this.chrome.process.once("close",()=>{this._isAlive=!1}),this._isAlive=!0;let f=await gr(`localhost:${this.chrome.port}`);await this.cdpTestRunner.initSession(f),as(()=>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}},_a=class{constructor(e){this.id=e;this.sessionId=re();this.driver=new ip(this.sessionId)}async onDone(){return this.driver.stop()}getSessionId(){return this.sessionId}}});var op={};H(op,{WorkerExtension:()=>Zn});function nI(s){return s instanceof Error&&"type"in s&&typeof s.type=="string"}function vb(s){return nI(s)?s:new Error(s)}var dt,Zn,Da=v(()=>{"use strict";je();Y();Wn();F();W();Pt();ie();yb();wb();at();dt=P("worker-ext"),Zn=class extends Ot{initPlayer(){return this.options.useChromeLauncher?new _a(this.id):new ka(this.id)}async _getBrowserOnce(e,t,r,n){var o;let{driver:i}=r;try{return await i.init({overrideConfiguration:e.overrideTestConfig,browserOptions:this.options,testName:this.testName,testRunConfig:this.testRunConfig,gridInfo:n,customExtensionLocalLocation:t,executionId:this.executionId,testResultId:this.testResultId,seleniumPerfStats:e.seleniumPerfStats,fastInit:(o=this.options.lightweightMode)==null?void 0:o.general,lambdatestService:this.lambdatestService,printFinalCaps:this.options.printFinalCaps,mode:q.EXTENSION})}catch(a){throw dt.error("failed to get browser",{err:a,gridInfo:n,whitelistedPublicIp:Ki(),initializedFromCache:Ji(),testId:e.testId,resultId:e.testResultId,publicIps:this.options.publicIps}),a}}async getBrowserOnce(e,t,r,n){return Q.onGetSession(this.id,this.testName,e.runMode),this._getBrowserOnce(e,t,r,n)}isUsingChromeLauncher(e){return Boolean(this.options.useChromeLauncher)}async updateTestStatusOnGrid(e,t,r){var i;let n=t?"passed":"failed";if(this.lambdatestService.isLambdatestRun()&&await e.executeJS(`lambda-status=${n}`),"browserstack"in this.options&&((i=this.options.browserstack)!=null&&i["browserstack.user"])){let o={action:"setSessionStatus",arguments:{status:n,reason:r}};await e.execute(`browserstack_executor: ${JSON.stringify(o)}`)}}async runTestOnce(e,t){let{testResultId:r,executionId:n,testId:i}=this;M("WorkerExtension runTestOnce");let o=async d=>{let m=this.options.timeoutWasGiven?Math.max(1e4,this.options.timeout):this.options.testStartTimeout;try{return await le(e.runTestUsingCDP(d.cdpTestRunner),m,Me.TEST_START_TIMEOUT_MSG)}catch(u){if(!(u instanceof oe))throw u;return dt.warn("timeout while running test using CDP. Running checkViaRestAPIIfTestStarted",{testResultId:r}),await e.checkViaRestAPIIfTestStarted()}},a=async(d,m,u)=>{try{let f=await d.url(m);return u.driverUrlFinished=!0,f}catch(f){throw dt.error("error from driver.url",{err:f,testResultId:r,executionId:n,testId:i,url:m,urlLength:m.length}),f}},l=async d=>{let m=await e.onStarted(this.options.testStartTimeout);return d.testRunHandlerOnStartedHadFinished=!0,m},c=async()=>{var f;if(M("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);try{return{...await o(t.driver),...e.seleniumPerfStats.getStats()}}catch(h){throw dt.warn("failed to run test via CDP",{err:h}),h}}let{driver:m}=t,u={driverUrlFinished:!1,testRunHandlerOnStartedHadFinished:!1};try{let h=await e.getRunTestUrl();Q.onWaitToTestStart(this.id);try{await le(Promise.all([a(t.driver,h,u),l(u)]),this.options.testStartTimeout,Me.TEST_START_TIMEOUT_MSG)}catch(T){if(!(T instanceof oe))throw T;dt.warn("timeout occurred (see log's payload). Running checkViaRestAPIIfTestStarted",{testResultId:r,executionId:n,testId:i,...u}),await e.checkViaRestAPIIfTestStarted()}Q.onWaitToTestComplete(this.id);let g=new AbortController,y=T=>{e.onCompletedCleanup(),dt.warn("on browser closed error detected",{err:T,testResultId:r,executionId:n,testId:i}),m.unregisterToClosedBrowser(y),T.type=qs.BROWSER_CLOSED,g.abort(T)};m.registerToClosedBrowser(y);try{let T=le(e.onCompleted(),this.testRunTimeout,Me.TEST_COMPLETE_TIMEOUT_MSG),w=await gc(T,g.signal);m.unregisterToClosedBrowser(y);try{await this.updateTestStatusOnGrid(m,Boolean(w.success),w.reason)}catch(E){dt.error("Could not update the grid about the test status",{err:E})}m.isAlive()||(dt.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),w.gridIssues="could not validate grid is alive");let b=m.maxKeepAliveGap();return b>=3e4&&(dt.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`),w.keepAliveIssue=b),{...w,...e.seleniumPerfStats.getStats()}}catch(T){throw dt.warn("timeout wait until test completed",{err:T,testResultId:r,executionId:n,testId:i}),vb(T)}finally{m.unregisterToClosedBrowser(y)}}catch(h){throw dt.warn("failed to start url",{err:h}),vb(h)}};t.driver.start();try{return await super.runTestOnce(e,t),M("WorkerExtension super.runTestOnce"),await c()}catch(d){throw dt.error("failed to run test",{err:d,testId:e.testId,resultId:e.testResultId}),d}}}});var cp={};H(cp,{WorkerExtensionSingleBrowser:()=>ap});var iI,oI,ap,lp=v(()=>{"use strict";je();F();W();xu();Pt();Da();iI=P("base-worker"),oI=500,ap=class extends Zn{async _releasePlayer(){if(!this.testPlayer)return;let{projectId:t}=this.userData||{};await jn(this.id,this.releaseSlotOnTestFinished,t,this.options.company.companyId,this.options.slotService,this.testPlayer),this.testPlayer=null}onQueueCompleted(){return this._releasePlayer()}async getBrowserOnce(t,r,n,i){return Q.onGetSession(this.id,`worker ${this.id}`,t.runMode),this._getBrowserOnce(t,r,n,i)}async getTestPlayer(t,r){return this.testPlayer&&!this.testPlayer.driver.isAlive()&&(iI.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 i=this.handleQuarantine(t);if(i)return i;M("before runTest onTestStarted single browser");let o=await this.onTestStarted(this.id,t.testId,t.testResultId,n,t.retryKey);t.baseUrl=o.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 ce(oI)}}});var up,Na,Sb=v(()=>{"use strict";Ln();de();je();hl();at();au();Y();W();ie();gh();Mo();up=P("worker-manager"),Na=class{constructor(e){this.customExtensionLocalLocation=e;this.workerIdCount=0;this.parallelCount=0;this.workers=new Map;this.combinedTestResults={};this.workerUniqueIds=[];this.onWorkerFinished=async(e,...t)=>{this.workers.has(e)&&(this.workers.delete(e),this.executionQueue.hasMoreTests()&&this.workers.size<this.parallelCount&&this.runWorker(...t))};this.runWorker=async(...e)=>{let t=++this.workerIdCount;this.workers.set(t,null);let r=this.executionQueue.getNext();if(!r){this.workers.delete(t);return}let n=this.workerUniqueIds[t%this.parallelCount],i=await this.createWorker(r.runConfig.browserValue,...e);this.workers.set(t,i),i.id=t,i.uniqueId=n,i.run(r,this.onWorkerFinished,...e)}}async getWorkerType({mode:e,localTmaUrl:t},r){if(e)switch(e){case q.SELENIUM:return(await Promise.resolve().then(()=>(qu(),Hu))).WorkerSelenium;case q.APPIUM:return t?(await Promise.resolve().then(()=>(mb(),db))).WorkerLocalTma:(await Promise.resolve().then(()=>(hb(),gb))).WorkerAppium;default:return Dn.isFeatureAvailableForProject("useSameBrowserForMultiTests")?(await Promise.resolve().then(()=>(lp(),cp))).WorkerExtensionSingleBrowser:(await Promise.resolve().then(()=>(Da(),op))).WorkerExtension}else switch(r){case(Or.find(n=>n===r)&&Dn.isFeatureAvailableForProject("useSameBrowserForMultiTests")):return(await Promise.resolve().then(()=>(lp(),cp))).WorkerExtensionSingleBrowser;case Or.find(n=>n===r):return(await Promise.resolve().then(()=>(Da(),op))).WorkerExtension;case Bn.find(n=>n===r):return(await Promise.resolve().then(()=>(qu(),Hu))).WorkerSelenium;default:throw new C(`browser ${r} is not supported`)}}async createWorker(e,...t){let r=t[0],n=await this.getWorkerType({mode:r.mode,localTmaUrl:r.localTmaUrl},e);try{return M("before new Worker",r.mode),new n(this.executionQueue,...t)}finally{M("after new Worker",r.mode)}}async runTests(e,t,r,n,i,o,a,l){if(e&&e.length===0)return;let c=!1,d=0,m=(u,f)=>new Promise(h=>{var fe,Ze,St,Br,k,N,$,K;let g=i.project,y=e.length;this.parallelCount=a,this.workerUniqueIds=this.generateUniqueIds(this.parallelCount),this.executionQueue=new No(r,n,e,i,o,t),this.combinedTestResults={};let T=((fe=i.company)==null?void 0:fe.ucid)||"",w=(Ze=i.company)==null?void 0:Ze.companyId,b=(St=i.company)==null?void 0:St.name,S=i.source||"cli",E=i.user,A=(Br=i.company)==null?void 0:Br.planType,D=(k=i.company)==null?void 0:k.isStartUp,j=(N=i.projectData)==null?void 0:N.name,R=($=i.projectData)==null?void 0:$.type,x=i.lightweightMode,O=(K=i.gridData)==null?void 0:K.type,B=(Pe,Et,ve,Qa,ni,Za)=>(d++,wf({executionId:r,projectId:g,testId:Et,resultId:ve,ucid:T,companyId:w,companyName:b,projectName:j,companyPlan:A,source:S,user:E,lightweightMode:x,isStartUp:D,projectType:R,appSource:Za,gridType:O}),t.testStartAndReport(Pe,r,ve,Qa,ni)),G=async(Pe,Et,ve,Qa,ni,Za)=>{var od,ad,cd;d--;let et={...(x==null?void 0:x.onlyTestIdsNoSuite)&&{show:!0},...ve.seleniumStats&&{seleniumStats:ve.seleniumStats},...ve.gridIssues&&{gridIssues:ve.gridIssues},...ve.keepAliveIssue&&{keepAliveIssue:ve.keepAliveIssue},...i.host&&{gridHost:i.host}};if(ve.seleniumPerfMarks&&(t.concatSeleniumPerfMarks(ve.seleniumPerfMarks),delete ve.seleniumPerfMarks),i.grid||i.gridId?(et.gridName=i.grid||((od=i.gridData)==null?void 0:od.name),et.gridType=(ad=i.gridData)==null?void 0:ad.type,et.gridProvider=(cd=i.gridData)==null?void 0:cd.provider):i.localTmaUrl?(et.gridName="local-tma-from-options",et.gridType="local-tma"):i.useLocalChromeDriver?(et.gridName="local-chrome-driver-from-options",et.gridType="local-chrome"):i.useChromeLauncher?(et.gridName="chrome-launcher-from-options",et.gridType="local-chrome"):i.browserstack?et.gridName="browserstack-from-options":i.saucelabs&&(et.gridName="saucelabs-from-options"),await t.testEndAndReport(Pe,ve,r,Qa,ni,et).catch(BT=>up.error("testEndAndReport threw an error",{err:BT})),ni)return;this.combinedTestResults[ve.resultId]=ve,vf({executionId:r,projectId:g,testId:Et,resultId:ve.resultId,result:ve,ucid:T,companyId:w,companyName:b,projectName:j,companyPlan:A,source:S,user:E,lightweightMode:x,logger:up,isStartUp:D,projectType:R,appSource:Za}),l&&!ve.success&&(this.executionQueue.stop(),c=!0),(Object.keys(this.combinedTestResults).length===y||c&&d===0)&&h(this.combinedTestResults)},z=(Pe,Et)=>{this.combinedTestResults[Et.resultId]=Et,t.onTestIgnored(Pe,Et.resultId),d--,(Object.keys(this.combinedTestResults).length===y||c&&d===0)&&h(this.combinedTestResults)},X=(Pe,Et)=>t.onGridSlot(Pe,Et);for(i.userData={loginData:{...wr(),refreshToken:qi(),authData:wr(),token:u,userAccessKey:f},projectId:i.project,company:i.company,servicesUrl:he},M("in localStrategy before createWorker");this.workers.size<this.parallelCount&&this.executionQueue.hasMoreTests();)this.runWorker(i,this.customExtensionLocalLocation,r,B,G,X,z)});try{let u=await At(),f=await zi(),h=await m(u,f);if(this.workers.size>0&&this.workers.clear(),c)throw new qt;return h}catch(u){throw up.error("failed running parallel workers",{executionId:r,err:u}),u}}generateUniqueIds(e){return Array.from({length:e},(t,r)=>`worker-${r+1}`)}}});var pp,ae,Eb=v(()=>{"use strict";pp=class{static colorString(e,t){return`${e}${t}${pp.Reset}`}},ae=pp;ae.Reset="\x1B[0m",ae.Bright="\x1B[1m",ae.Dim="\x1B[2m",ae.Underscore="\x1B[4m",ae.Blink="\x1B[5m",ae.Reverse="\x1B[7m",ae.Hidden="\x1B[8m",ae.FgBlack="\x1B[30m",ae.FgRed="\x1B[31m",ae.FgGreen="\x1B[32m",ae.FgYellow="\x1B[33m",ae.FgBlue="\x1B[34m",ae.FgMagenta="\x1B[35m",ae.FgCyan="\x1B[36m",ae.FgWhite="\x1B[37m",ae.FgGray="\x1B[90m",ae.BgBlack="\x1B[40m",ae.BgRed="\x1B[41m",ae.BgGreen="\x1B[42m",ae.BgYellow="\x1B[43m",ae.BgBlue="\x1B[44m",ae.BgMagenta="\x1B[45m",ae.BgCyan="\x1B[46m",ae.BgWhite="\x1B[47m",ae.BgGray="\x1B[100m"});var ei,Ib,Ma,dp,mp,Fr,fp=v(()=>{"use strict";ei=I(require("lodash"));F();W();de();ie();je();ts();gl();hl();ge();ue();Pt();ag();Y();Sb();Mo();Ib=require("uuid");Eb();({CLI_MODE:Ma}=Ut),dp=P("test-plan-runner"),mp=class{constructor(e){this.customExtensionLocalLocation=e;this.startTime=Date.now()}static get id(){return mp._id}async runTestAllPhases(e,t,r,n,i,o,a,l){let c={},d=new Na(this.customExtensionLocalLocation),m=async()=>{let g=i.beforeParallel||1,y=!0,T=await d.runTests(e,l,o,a,i,n,g,y);Object.assign(c,T)},u=async()=>{let g=hi||i.parallel,y=!1;M("right before this.workerManager.runTests");let T=await d.runTests(t,l,o,a,i,n,g,y);M("right after this.workerManager.runTests"),Object.assign(c,T)},f=async()=>{let g=i.afterParallel||1,y=!1,T=await d.runTests(r,l,o,a,i,n,g,y);Object.assign(c,T)};Sf({executionId:o,projectId:i.project}),M("right before runBeforeTests");try{return await m(),M("right before runTestPlanTests"),await u(),M("right after runTestPlanTests"),await f(),c}catch(g){if(dp.error("error running test plan",{err:g}),g instanceof qt)return l.markAllQueuedTests(o,me.ABORTED,"aborted",!1);throw g}finally{await h()}async function h(){var y,T,w,b;if((y=i.lightweightMode)!=null&&y.disablePixelValidation)return;if(i.mode===Ma.SELENIUM){let[{getSessionPlayer:S},{makeSDK:E}]=await Promise.all([Promise.resolve().then(()=>(we(),tr)),import("@applitools/eyes-sdk-core")]),{EyeSdkBuilder:A}=S();await A.closeBatch(o,E);return}let g;try{if(!((b=(w=(T=i.company)==null?void 0:T.activePlan)==null?void 0:w.premiumFeatures)!=null&&b.applitools)||(g=await bp(i.project),ei.default.isEmpty(g)||!o))return;let{runKey:S,url:E}=g;await require("@applitools/eyes-sdk-core").makeSDK({name:"Testim.io",version:"4.0.0",spec:{}}).closeBatches({settings:{batchIds:[o],serverUrl:E,apiKey:S}})}catch{}}}async runTestPlan(e,t,r,n,i,o,a,l){var b,S,E;let c=re(),d=n.project;$d(c),e.forEach(A=>Object.assign(A,{isBeforeTestPlan:!0})),r.forEach(A=>Object.assign(A,{isAfterTestPlan:!0}));let m=[...e,...t,...r],u=new bo(m,n,o,a),f=ei.default.chain(m).map(A=>{var D;return((D=A.overrideTestConfig)==null?void 0:D.name)||""}).uniq().compact().value(),h=(f==null?void 0:f.length)===1?f[0]:null,g=(b=n.lightweightMode)!=null&&b.onlyTestIdsNoSuite?[]:m.map(A=>A.name),y=(S=n.lightweightMode)!=null&&S.onlyTestIdsNoSuite?{beforeTests:e,tests:t,afterTests:r}:u.executionStart(c,d,this.startTime,i,g);M("before testListInfoPromise");let T=await y;(E=n.lightweightMode)!=null&&E.onlyTestIdsNoSuite||Q.onTestPlanStarted(T.beforeTests,T.tests,T.afterTests,i,c,l,h),M("before runTestAllPhases");let w=await this.runTestAllPhases(T.beforeTests,T.tests,T.afterTests,a,n,c,i||"All Tests",u);return M("before executionEnd"),await u.executionEnd(c),M("after executionEnd"),{results:w,executionId:c,testPlanName:i,configName:h}}isJsonString(e){try{JSON.parse(e)}catch{return!1}return!0}handleReportFailure(e,t){try{e.text?t=e.text:t=JSON.stringify(e)}catch{}console.error(ae.colorString(ae.FgMagenta,t)),process.exit(-1)}async reportTestRunnerStarted(e,t){try{return await gp(e,t.testOptimization)}catch(r){return this.handleReportFailure(r,"Failed Report: Test Runner Started")}}async reportTestRunnerFinished(e){try{return await hp(e)}catch(t){return this.handleReportFailure(t,"Failed Report: Test Runner Finished")}}async runTestPlans(e,t){dp.info("start to run test plan",{options:{...e,token:void 0,userParamsData:void 0},branchToUse:t});function r(d){return ei.default.flattenDeep(Object.values(d)).reduce((m,u)=>m.concat(u.beforeTests,u.tests,u.afterTests),[])}let n={},i={},o=e.project,a={testPlans:[],testPlansData:{}};_.flags.enableTestPlanAggregation.isEnabled()?(await se(e.testPlanIds,async d=>{let m=await ti(o,e.testPlan,[d],t,e.intersections);m.testPlans.forEach(u=>{a.testPlans.push(u);let f=u._id;a.testPlansData[f]=m.testPlansData[f]})}),await se(e.testPlan,async d=>{let m=await ti(o,[d],e.testPlanIds,t,e.intersections);m.testPlans.forEach(u=>{a.testPlans.push(u);let f=u._id;a.testPlansData[f]=m.testPlansData[f]})})):a=await ti(o,e.testPlan,e.testPlanIds,t,e.intersections);let l=a.testPlans,c=a.testPlansData;if(!l||l.length===0)throw new C(`no test plan to run ${e.testPlan}`);if(!c||Object.keys(c).length===0){if(e.passZeroTests)return[];throw new C(`no test to run in test plan ${e.testPlan}`)}return e.mode!==Ma.APPIUM&&await Iu(e,r(c)),await se(l,async d=>{var h;let m=d.testPlanId;n[m]={};let u={...e};u.baseUrl||=d.startUrl,u.appId||=((h=d.mobileApp)==null?void 0:h.appId)||void 0,u.gridId||=d.gridId,e.grid&&delete u.gridId,u.gridData=await af(e,d);let f=u.overrideExecutionName||d.name;return await se(c[m],async g=>{let y=await this.runTestPlan(g.beforeTests,g.tests,g.afterTests,u,f,m,t);Q.onTestPlanFinished(y.results,d.name,this.startTime,y.executionId,!1),n[m][y.executionId]=y.results;let T=Object.keys(n[m]).map(E=>({executionId:E,status:Eu(n[m][E])})),w=Object.keys(n[m]).map(E=>n[m][E]).reduce((E,A)=>Object.assign(E,A),{}),b=Eu(w);Object.assign(i,w);let S=b?T[0].executionId:T.find(E=>!E.status).executionId;return await yp(o,m,{success:b,executions:T,executionId:S}),y})})}async runAnonymousTestPlan(e,t){var l;dp.info("start to run anonymous",{options:{...e,token:void 0},branchToUse:t}),M("before getSuite");let r=await yh(e,t);if(M("after getSuite"),!((l=r==null?void 0:r.tests[0])!=null&&l.length)){if(e.rerunFailedByRunId)throw new C("No failed tests found in the provided run");if(e.passZeroTests)return[];throw new C("No tests to run")}t="branch"in r&&r.branch||t;let n=r;if(e.rerunFailedByRunId&&!n.runName){if(!n.runExists)throw new C("Invalid run ID - no such run.");n.runName===""&&(n.runName=`rerun-${e.rerunFailedByRunId}`)}let i=e.overrideExecutionName||n.runName||[].concat(e.label,e.name,e.suites).join(" "),o=!0;M("Right before validateConfig + runAnonymousTestPlan tests map");let a;return e.appId&&e.mode===Ma.APPIUM&&(a=await Xn({appId:e.appId,projectId:e.project})),await se(r.tests,async c=>{if(a&&c.forEach(m=>{"nativeApp"in m&&(m.nativeApp=a)}),e.resultId){let m=c[0];m.resultId=e.resultId,c=[m]}e.mode!==Ma.APPIUM&&await Iu(e,c),M("right before runTestPlan");let d=await this.runTestPlan([],c,[],e,i,null,t,o);return M("right after runTestPlan"),await Q.onTestPlanFinished(d.results,i,this.startTime,d.executionId,o),d})}async run(e){let t=fn(),r=[];await this.reportTestRunnerStarted(e.project,e),Ks(e)?r=await this.runTestPlans(e,t):r=await this.runAnonymousTestPlan(e,t),await this.reportTestRunnerFinished(e.project);let n=ei.default.flattenDeep(r);return M("right before onAllTestPlansFinished"),await Q.onAllTestPlansFinished(n),M("right after onAllTestPlansFinished"),n.map(i=>i.results).reduce((i,o)=>Object.assign(i,o),{})}},Fr=mp;Fr._id=(0,Ib.v4)()});var Re={};H(Re,{addTestRetry:()=>Kl,clearTestResult:()=>vu,deleteCloudflareTunnel:()=>xp,fetchLambdatestConfig:()=>Yl,fixGridAppIDStructure:()=>Ju,forceUpdateCloudflareTunnelRoutes:()=>Rp,getAllGrids:()=>fl,getAppDetails:()=>Xn,getApplitoolsIntegrationData:()=>bp,getBrowserStackSessionMetaData:()=>hI,getCloudflareTunnel:()=>Ip,getEditorUrl:()=>mI,getGridSlot:()=>ml,getHybridGridProvider:()=>dl,getLabFeaturesByProjectId:()=>cu,getMobileDevicesFromGrid:()=>Qn,getRealData:()=>$l,getS3Artifact:()=>xn,getS3ArtifactText:()=>jl,getSuiteTestList:()=>Ru,getTestPlan:()=>dI,getTestPlanTestList:()=>ti,getTestResults:()=>kr,getUsageForCurrentBillingPeriod:()=>Sp,initializeUserWithAuth:()=>Ep,isTestResultCompleted:()=>wu,keepAliveCompanySlots:()=>Fl,keepAliveGrid:()=>ul,loadSfdcCredential:()=>vp,loadTest:()=>Un,releaseCompanySlot:()=>Ml,releaseGridSlot:()=>pl,reportExecutionFinished:()=>To,reportExecutionStarted:()=>zl,reportRunnerFinished:()=>hp,reportRunnerStarted:()=>gp,requestCompanySlot:()=>Nl,saveRemoteStep:()=>uu,saveTestPlanResult:()=>yp,updateCompanySlot:()=>Ul,updateExecutionTests:()=>ql,updateRemoteRunFailure:()=>Ap,updateTestDataArtifact:()=>wo,updateTestResult:()=>jo,updateTestStatus:()=>Ir,uploadAppToGrid:()=>Ku,uploadRunDataArtifact:()=>Su,validateUserAccessKey:()=>cl});async function xs(){let s=await At();if(!s)throw new Error("Failed to get token from server");return{[_c]:Fr.id,Authorization:`Bearer ${s}`}}async function Ee({url:s,body:e,headers:t={},timeout:r,retry:n}){let i=await xs(),o={...t,...i};return We({url:`${he}${s||""}`,body:e,headers:o,timeout:r,retry:n})}async function uI(s,e,t,r={},n=void 0){let i=await xs(),o={...r,...i};return await Vs(`${he}${s||""}`,e,t,o,n)}async function ri(s,e){let t=await xs();return await wc(`${he}${s||""}`,e,t)}async function xb(s,e){let t=await xs();return await Ws(`${he}${s||""}`,e,t)}async function pI(s,e){let t=await xs();return await Gs(`${he}${s||""}`,e||void 0,t)}async function Ae(s,e,t,r){let n=await xs();return await Te(`${he}${s||""}`,e||void 0,n,r,t)}function xn(s,e){return(0,ee.default)(()=>Ae(`/storage${s}`,null,{isBinary:!0},e),{retries:te,factor:1})}function jl(s){return(0,ee.default)(()=>pI(`/storage${s}`))}async function gp(s,e){return await Ee({url:"/test-runner",body:{projectId:s,testOptimization:e}})}async function hp(s){return await xb("/test-runner",{projectId:s})}async function dI(s,e){let t=n=>n===null?[]:typeof n=="string"&&JSON.parse(n)||n;return(await(0,ee.default)(()=>Ae("/testPlan",{projectId:s,name:e.join(",")}),{retries:te,factor:1})).map(({testConfigIds:n,beforeAllLabels:i,testLabels:o,afterAllLabels:a,...l})=>Object.assign(l,{testConfigIds:t(n),beforeAllLabels:t(i),testLabels:t(o),afterAllLabels:t(a)}))}async function vp({branch:s,projectId:e}){let t=await(0,ee.default)(()=>Ae(`/branch/branchData/${encodeURIComponent(s)}`,{projectId:e}),{retries:te,factor:1});return t==null?void 0:t.sfdcCredential}function Un({testId:s,branch:e,projectId:t,skipSharedSteps:r=!1,useBranchMap:n=!0}){return(0,ee.default)(()=>Ae(`/test/${s}`,{projectId:t,branch:e,skipSharedSteps:r,useBranchMap:n}),{retries:te,factor:1})}function yp(s,e,t){return(0,ee.default)(()=>Ee({url:"/testPlan/result",body:{projectId:s,testPlanId:e,result:t}}),{retries:te,factor:1})}function Ir(s,e,t,r,n,i,o=te){return(0,ee.default)(()=>ri("/result/run/test",{runId:e,testId:t,resultId:r,status:n,projectId:s,runnerVersion:aI,...i}),{retries:o,factor:1})}function ql(s,e,t,r,n,i,o,a){return(0,ee.default)(()=>ri("/result/run/tests",{runId:s,runnerStatuses:e,status:t,reason:r,success:n,startTime:i,endTime:o,projectId:a}),{retries:te,factor:1})}async function zl({executionId:s,projectId:e,labels:t,startTime:r,executions:n,config:i,resultLabels:o,remoteRunId:a,localRunUserId:l,isLocalRun:c,intersections:d}){let{isCi:m}=await Promise.resolve().then(()=>(Zi(),yf));return Ee({timeout:9e4,url:"/result/run",body:{runId:s,projectId:e,labels:t,startTime:r,execution:n,status:"RUNNING",config:i,resultLabels:o,remoteRunId:a,intersections:d,metadata:{isCiRun:m,localRunUserId:l,isLocalRun:c}},retry:3})}function To(s,e,t,r,n={},i=void 0,o=void 0){let a=Date.now();return(0,ee.default)(()=>ri("/result/run",{runId:e,projectId:t,endTime:a,status:s,success:r,tmsOptions:n,remoteRunId:i,resultExtraData:o}),{retries:te,factor:1})}async function ti(s,e,t,r,n){return(0,ee.default)(()=>Ee({url:"/testPlan/list",body:{projectId:s,names:e,planIds:t,branch:r,intersections:n},timeout:12e4}),{retries:te,factor:1})}function Ru({projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:i,suiteIds:o,branch:a,rerunFailedByRunId:l,testConfigIds:c,intersections:d}){return(0,ee.default)(()=>Ee({url:"/suite/v2/list",body:{projectId:s,labels:e,testIds:t,testNames:r,testConfigNames:n,suiteNames:i,suiteIds:o,branch:a,rerunFailedByRunId:l,testConfigIds:c,intersections:d}}),{retries:te,factor:1})}async function Xn({appId:s,projectId:e}){try{return await(0,ee.default)(()=>Ae(`/mobile-app/app/${s}?projectId=${e}`),{retries:te,factor:1})}catch(t){throw new Error(`Could not load app with the ID ${s}`,{cause:t})}}async function Sp(s){try{return await(0,ee.default)(()=>Ae(`/plan/project/${s}/usage-current-billing-period`),{retries:te,factor:1})}catch(e){_t.error("failed getting usage for current billing period",{projectId:s,error:e});return}}function wu(s,e,t){return(0,ee.default)(()=>Ae(`/result/${s}/isComplete`,{projectId:e,testRetryKey:t}),{retries:te,factor:1})}function kr(s,e,t,r){return(0,ee.default)(()=>Ae(`/test/v2/${s}/result/${e}`,{projectId:t,branch:r}),{retries:te,factor:1})}function ul(s,e){return Ee({url:`/grid/keep-alive?reqId=${re()}`,body:{projectId:s,slots:e},timeout:1e4})}function pl(s,e,t,r,n){return Ee({url:`/grid/release?reqId=${re()}`,body:{companyId:s,projectId:e,slotId:t,gridId:r,browser:n}})}function dl(s){return Ee({url:"/grid/hybrid/provider",body:s})}function ml(s){return(0,ee.default)(()=>Ae("/grid/grid-slot",{...s,reqId:re()}),{retries:te,factor:1})}async function Ep({projectId:s,token:e,branchName:t,lightweightMode:r,localGrid:n,publicIp:i,gridId:o,grid:a,clientCliVersion:l,clientNodeVersion:c,clientNpmVersion:d}){var m,u;try{return await(0,ee.default)(()=>We({url:`${he}/executions/initialize`,body:{projectId:s,token:e,branchName:t||"master",lightweightMode:r,localGrid:n,publicIp:i,gridId:o,gridName:a,clientCliVersion:l,clientNodeVersion:c,clientNpmVersion:d},timeout:6e4}),{retries:te,factor:1})}catch(f){if(_t.error("error initializing info from server",f),(m=f.message)!=null&&m.includes("Bad Request"))throw new C("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.");if((u=f.code)!=null&&u.includes("ENOTFOUND"))throw new C("Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend.");if(f.text)try{let h=JSON.parse(f.text),g=h.clientMessage.color||"red",y=h.clientMessage.bgColor||"bgBlack";console.log(Tp.default[y](Tp.default[g](h.clientMessage.text))),h.exitCode&&process.exit(h.exitCode)}catch{_t.error("Error parsing error message from server",f)}throw f}}async function mI(){if(Ns)return{editorUrl:Ns};try{return await(0,ee.default)(()=>Ae("/system-info/editor-url"),{retries:te,onFailedAttempt:s=>{if(s.attemptNumber>=te)throw s},factor:1})}catch(s){return _t.error("cannot retrieve editor-url from server",{err:s}),{editorUrl:"https://app.testim.io"}}}function fl(s){return(0,ee.default)(()=>Ae("/grid",{companyId:s}),{retries:te,factor:1})}function $l(s,e,t){return(0,ee.default)(()=>Ae(`/real-data/${e}?${t}&projectId=${s}`),{retries:te,factor:1})}function jo(s,e,t,r,n){return(0,ee.default)(()=>Ee({url:"/result/test",body:{projectId:s,resultId:e,testId:t,testResult:r,remoteRunId:n}}),{retries:te,factor:1})}function vu(s,e,t,r){return(0,ee.default)(()=>Ee({url:"/result/test/clear",body:{projectId:s,resultId:e,testId:t,testResult:r}}),{retries:te,factor:1})}function uu(s,e,t,r){return(0,ee.default)(()=>Ee({url:"/remoteStep",body:{projectId:s,resultId:e,stepId:t,remoteStep:r}}),{retries:te,factor:1})}function fI(s){return s.startsWith("/")?s:`/${s}`}function gI(s,e,t){let r=fI(s);return t&&(r=`/${t}${r}`),e&&(r=`/${e}${r}`),r}async function Ab(s,e,t,r,n,i="application/octet-stream"){let o=null;i==="application/json"&&(o=".json");let a=`${n}_${re()}${o||""}`,l=`${e}/${t}/${a}`,c=gI(l,lI,s),d=Buffer.from(Rb.gzip(r,{level:3})),m={file:{fileName:a,buffer:d}};return await(0,ee.default)(()=>uI(`/storage${c}`,{},m,{"X-Asset-Encoding":"gzip"}),{retries:te,factor:1}),c}function Kl({projectId:s,runId:e,testId:t,newResultId:r,originalTestResultId:n,previousTestResultId:i,testResult:o}){return(0,ee.default)(()=>Ee({url:"/result/test/retry",body:{projectId:s,newResultId:r,originalTestResultId:n,previousTestResultId:i,testId:t,runId:e,testResult:o}}),{retries:te,factor:1})}async function bp(s){try{return await Ae(`/integration/applitools/v3/connected?projectId=${s}`)}catch(e){return _t.warn("could'nt get applitools integration data.",{err:e}),{}}}async function Ip(s,e){try{return await ri("/tunnel",{companyId:s,routes:e})}catch(t){return _t.warn("could'nt get tunnel.",{err:t}),{}}}async function Rp(s,e){try{return await Ee({url:`/tunnel/${e}`,body:{companyId:s}})}catch(t){_t.warn("could'nt get tunnel.",{err:t});return}}async function xp(s,e){try{return await xb(`/tunnel/${e}`,{companyId:s})}catch(t){_t.warn("could'nt get tunnel.",{err:t});return}}function Ap(s){return We({url:`${he}/result/remoteRunFailure`,body:s})}async function Qn({projectId:s,projectType:e,gridId:t,companyId:r,selectors:n}){let i=`${cI}/mobileDevices/${t}/${r}?projectType=${e}`;i=n?`${i}&selectors=${encodeURIComponent(n)}`:i;try{return await(0,ee.default)(()=>Ae(i,{projectId:s}),{retries:te,factor:1})}catch(o){return _t.warn("could'nt get devices from headspin grid.",{err:o}),null}}async function Ku({projectId:s,gridId:e,app:t,timeout:r}){return(0,ee.default)(()=>Ee({url:`/mobile-app/app/upload-to-grid?projectId=${s}&gridId=${e}`,body:t,timeout:r}),{retries:te,factor:1})}async function Ju(s){return(0,ee.default)(()=>Ee({url:"/mobile-app/app/fix-grid-app-id",body:s}),{retries:te,factor:1})}async function Nl(s,e){return(0,ee.default)(()=>Ee({url:"/slot-management/request-slot",body:{companyId:s,projectId:e}}),{retries:te,factor:1})}async function Ml(s,e,t){return(0,ee.default)(()=>Ee({url:"/slot-management/release-slot",body:{companyId:s,projectId:e,slotId:t}}),{retries:te,factor:1})}async function Ul(s,e,t){return(0,ee.default)(()=>ri("/slot-management/update-slot",{slotId:t.slotId,companyId:s,projectId:e,slot:t}),{retries:te,factor:1})}function Fl(s,e,t){return Ee({url:`/slot-management/keep-alive?reqId=${re()}`,body:{slots:t,companyId:s,projectId:e},timeout:1e4})}async function hI(s,e){return await Te(`${Us}/sessions/${s}`,void 0,{Authorization:`Basic ${Buffer.from(`${e.user}:${e.key}`).toString("base64")}`})}async function cl(s){try{return await Ae("/v2/project/validateUserAccessKey",s),!0}catch(e){return _t.error("error validating user access key",{error:e}),!1}}var Tp,ar,Rb,ee,wp,aI,_t,te,cI,lI,Yl,cu,Su,wo,ge=v(()=>{"use strict";Tp=I(require("chalk")),ar=I(require("lodash")),Rb=I(require("pako"));F();de();ie();Ve();at();ee=I(require("p-retry")),wp=I(require("object-hash"));Y();W();fp();aI=tt(),_t=P("testim service api"),te=3,cI="/grid",lI="test-result-artifacts";Yl=async()=>(0,ee.default)(()=>Ae("/grid/lt/config"),{retries:te,factor:1}),cu=async s=>(0,ee.default)(()=>Ae(`/labFeature/v2/project/${s}`),{retries:te,factor:1});Su=ar.memoize(async(s,e,t,r)=>{if(!ar.isEmpty(r))return await Ab(s,e,t,JSON.stringify(r),"test-run-data","application/json")},(s,e,t,r)=>`${(0,wp.default)(r)}:${e}:${t}`),wo=ar.memoize(async(s,e,t,r,n)=>!r||ar.isEmpty(r)?void 0:await Ab(s,e,t,JSON.stringify((()=>{let o=ar.clone(r);if(n!=null&&n.hiddenParams){let a=n.hiddenParams||[];(Array.isArray(a)?a:Object.keys(a)).forEach(c=>{o[c]&&Object.assign(o,{[c]:Pc.HIDDEN_PARAM})})}return o})()),"test-test-data","application/json"),(s,e,t,r)=>`${(0,wp.default)(r)}:${e}:${t}`)});async function Cb(){let s=await Promise.any(yI.map(async e=>{try{return await Te(e)}catch{return null}}));return s==null?void 0:s.ip}var yI,Pb=v(()=>{"use strict";Ve();yI=["https://api.ipify.org?format=json","https://ipinfo.io/json","https://api.my-ip.io/ip.json"]});function Ua(){return tt()}var Cp=v(()=>{"use strict";F()});function wI(s){q.EXTENSION!==s&&process.nextTick(()=>{try{(we(),He(tr)).getSessionPlayer()}catch{}})}function vI(s){var e,t;(t=(e=s.clientConfig)==null?void 0:e.clientMessages)!=null&&t.length&&s.clientConfig.clientMessages.forEach(r=>{let n=r.color||"yellow",i=r.bgColor||"bgBlack";console.log(Pp.default[i](Pp.default[n](r.text)))})}async function si(s){let{project:e,token:t,userAccessKey:r,lightweightMode:n,useLocalChromeDriver:i,useChromeLauncher:o,mode:a,gridId:l,grid:c}=s,d=Boolean(n==null?void 0:n.general),m=Boolean(i||o),u=d?TI:bI,f=Ua(),h=xc(),g=await Dm(),y=null;if(_.flags.getPublicIpFrom3rdPartyServices.isEnabled()&&!m)try{y=await Cb()}catch(b){kb.error("failed to get public ip",b)}let T=!0;M("before initializeUserWithAuth");let w=await Bt(async()=>(wI(a),T=!1,await Ep({projectId:e,token:t,branchName:s.branch,lightweightMode:n,localGrid:m,publicIp:y,gridId:l,grid:c,clientCliVersion:f,clientNodeVersion:h,clientNpmVersion:g})),"initializeUserWithAuth",u,{project:e,token:t,branchName:s.branch,lightweightModeGeneral:d,localGrid:m,gridId:l,grid:c,publicIp:y})();return vI(w),s.publicIps=[w.clientPublicIp],M("after initializeUserWithAuth"),y&&w.clientPublicIp&&w.clientPublicIp!==y&&(kb.error("public ip mismatch",{publicIpFromExternalService:y,publicIpFromServices:w.clientPublicIp}),s.publicIps.push(y)),ef(w.authData,{projectId:e,token:t,userAccessKey:r,publicIp:w.clientPublicIp,initializedFromCache:T}),w}var Pp,kb,bI,TI,Ob=v(()=>{"use strict";Pp=I(require("chalk"));je();ge();Yt();at();Pb();ie();W();ue();Cp();F();Zr();kb=P("initializeUserWithAuth"),bI=1e3*60*5,TI=1e3*60*60*10});async function Db(s){var r;let e=Promise.resolve();s.useLocalChromeDriver&&(s.chromeBinaryLocation=s.downloadBrowser?await Hi():s.chromeBinaryLocation,e=tn({projectId:s.project,userId:s.user},{chromeBinaryLocation:s.chromeBinaryLocation},Boolean((r=s.lightweightMode)==null?void 0:r.general)),s.useLocalChromeDriver=!0),!s.playerRequirePath&&s.mode!==q.EXTENSION&&await br(s.playerLocation,s.canary),s.mode!==q.SELENIUM&&s.mode!==q.APPIUM&&!s.ext&&await Qc(s.extensionLocation);let t;if(s.installCustomExtension){let n=Boolean(s.useLocalChromeDriver||s.useChromeLauncher);t=await Xc(s.installCustomExtension,n)}return await e,t}async function Nb(s){var o;SI.info("prepare MockNetwork",{location:s});let e=await Ic(s),t=Buffer.isBuffer(e)?e:e.body;if(t.byteLength>_b*1e6)throw new Error(`${kp} exceeded ${_b}MB`);let r;try{r=JSON.parse(t.toString("utf-8"))}catch(a){throw new Error(`${kp} cannot be parsed.${Fa.EOL}${a}`)}let n=new Lb.default;if(!n.validate(Bc,r)){let a=(o=n.errors)==null?void 0:o.map((l,c)=>`${++c}) ${l.dataPath} ${l.message}`).join(Fa.EOL);throw new Error(`${kp} is malformed.${Fa.EOL}${a}`)}return r.entries}var Fa,Lb,_b,kp,SI,Op=v(()=>{"use strict";Fa=I(require("node:os"));F();mm();sn();Lb=I(require("ajv"));ie();rl();W();Ob();_b=1,kp="JSON file supplied to --mock-network-pattern",SI=P("prepare runner")});function jb(s){return s.start&&gn(null,"cli-start-command",{downloadBrowser:Boolean(s.downloadBrowser)}),!!(s.startV2||s.start||s.agent)}async function $b(s){let e=!!s.start;if(Number.isNaN(s.agentPort))throw new C("Agent port is not number");let t=vo(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,startTestimBrowser:e,ext:s.ext,extensionPath:s.extensionPath,playerLocation:s.playerPath||t,canary:s.canary,playerPath:s.playerPath,playerRequirePath:s.playerRequirePath,downloadBrowser:Boolean(s.downloadBrowser)}}var Wb=v(()=>{"use strict";Cn();rs();Y()});var Vb,CI,PI,Np,Gb=v(()=>{"use strict";Vb="TST_CREDS",CI=["username","password"],PI="$encrypted",Np={get proxyPlaceholder(){return new Proxy({},{get(s,e){let t={};for(let r of CI)t[r]={[PI]:`${e}.${r}`};return t}})},containsEncryptedCredentials(s){return s.includes(Vb)},injectProxyCredentialsStoreToGlobal(){Object.assign(globalThis,{[Vb]:this.proxyPlaceholder})}}});var jp={};H(jp,{doLogin:()=>Bp,getProjectId:()=>kI,getToken:()=>OI});async function kI(){return zb("projectId")}async function OI(){return zb("token")}function qb(s,e){return Promise.race([s,ce(e).then(()=>{throw new oe("timeout")})])}async function _I(){let s=(await import("express")).default(),e=async function(){return qb(new Promise(n=>{s.get("/loginInfo",(i,o)=>{n(JSON.parse(Buffer.from(i.query.info,"base64").toString())),o.status(200).end()})}),6e4).catch(()=>null)}();await new Promise((r,n)=>{let i=s.listen(42543,o=>{o&&n(o),r(i.address().port)})});try{let{getEditorUrl:r}=await Promise.resolve().then(()=>(ge(),Re)),{editorUrl:n}=await r();uo(`${n}/#/new-test`)}catch{console.log("Unable to open Testim automatically - please manually go to https://app.testim.io")}return await e}async function Bp({overwriteExisting:s=!0,projects:e=null}={}){let t=Mp.homedir(),r=Up.join(t,".testim");if(await ye(r)&&!s)return;let i={},[{default:o},{default:a}]=await Promise.all([import("prompts"),import("ora")]),l=a("Getting credentials from Tricentis Testim extension ...").start();if(e||(e=await qb(_I(),62e3).catch(()=>null)),e!=null&&e.token){i.token=e.token,i.projectId=e.projectId,l.succeed(),await Hb(r,i);return}if(e!=null&&e.length){l.succeed();let c=e.length===1?{project:e[0]}:await o({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}))});i.token=c.project.ci.token,i.projectId=c.project.id,await Hb(r,i);return}l.fail(),console.log("Error getting credentials - please pass `--token` and `--project` to the CLI or try again")}async function Hb(s,e){await Fp.promises.writeFile(s,ja.stringify(e)),console.log(`Testim credentials saved in '${s}'`)}async function zb(s){let e=Mp.homedir(),t=Up.join(e,".testim"),r=await ye(t),n={};if(r)try{n=ja.parse((await Fp.promises.readFile(t)).toString())}catch{}return n||={},n[s]}var Mp,Up,ja,Fp,$a=v(()=>{"use strict";Mp=I(require("os")),Up=I(require("path")),ja=I(require("yaml"));F();Fp=require("fs");Y();Ol()});var tT={};H(tT,{process:()=>jI,program:()=>p});var Wp,Xb,Wa,Qb,Vt,De,Zb,LI,Le,Hp,DI,NI,Jb,eT,MI,Vp,Gp,qp,$p,Lt,UI,p,FI,BI,Yb,jI,zp=v(()=>{"use strict";Wp=I(require("ms")),Xb=I(require("chalk")),Wa=I(require("node:fs")),Qb=I(require("node:url")),Vt=I(require("lodash")),De=I(require("node:path"));F();Cn();Wb();Yt();Zb=require("commander");ie();Y();jr();F();ue();Gb();Mo();LI=s=>s.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()),Le=(s,e)=>(e.push(s),e),Hp=new Zb.Command,DI=s=>s.split(","),NI=(s,e)=>!s||s.length===0?e:s,Jb=["enable-heavy-ad-intervention","heavy-ad-privacy-mitigations","use-fake-device-for-media-stream","use-fake-ui-for-media-stream","proxy-server"],eT=()=>{function s(g){return g.includes("-h, --help")}function e(g){return g.includes("--params [params-json-string]")}function t(g){return g.includes("--ext")||g.includes("--extension-path")||g.includes("--headless-extension-download-path")}function r(g){return g.includes("--player-path")||g.includes("--player-require-path")}function n(g){return g.includes("--executionId")||g.includes("--source")||g.includes("--resultId")||g.includes("--remoteRunId")||g.includes("--schedulerId")}function i(g){return g.includes("--get-browser-timeout")||g.includes("--get-browser-retries")||g.includes("--get-session-timeout")||g.includes("--get-session-retries")||g.includes("--driver-request-timeout")||g.includes("--driver-request-retries")}function o(g){return g.includes("--user")}function a(g){return g.includes("shouldMonitorPerformance")}function l(g){return g.includes("--save-rca-locally")}function c(g){return g.includes("--exit-code-ignore-failing-tests")}function d(g){return g.includes("--high-speed")}function m(g){return g.includes("--urls")}function u(g){return g.includes("--test-start-timeout")}function f(g){return g.includes("--install-lazy-deps")}function h(g){return g.includes("--print-final-caps")||g.includes("--print-grids")}Hp.help(g=>g.split(`
404
404
  `).filter(T=>!t(T)&&!e(T)&&!s(T)&&!r(T)&&!n(T)&&!a(T)&&!o(T)&&!i(T)&&!l(T)&&!c(T)&&!d(T)&&!m(T)&&!u(T)&&!f(T)&&!h(T)).join(`
405
405
  `))},MI=(s,e)=>{let t=e?`Please use ${e} instead.`:"";console.log(Xb.default.yellow(`
406
406
  WARNING: ${s} is deprecated. ${t}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "4.148.1",
3
+ "version": "4.149.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@testim/testim-cli",
9
- "version": "4.148.1",
9
+ "version": "4.149.0",
10
10
  "license": "Proprietary",
11
11
  "dependencies": {
12
12
  "@applitools/eyes-sdk-core": "13.11.34-legacy.1",
@@ -822,12 +822,9 @@
822
822
  }
823
823
  },
824
824
  "node_modules/@babel/runtime": {
825
- "version": "7.27.0",
826
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
827
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
828
- "dependencies": {
829
- "regenerator-runtime": "^0.14.0"
830
- },
825
+ "version": "7.27.1",
826
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz",
827
+ "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==",
831
828
  "engines": {
832
829
  "node": ">=6.9.0"
833
830
  }
@@ -3246,9 +3243,9 @@
3246
3243
  "optional": true
3247
3244
  },
3248
3245
  "node_modules/bare-fs": {
3249
- "version": "4.1.3",
3250
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.3.tgz",
3251
- "integrity": "sha512-OeEZYIg+2qepaWLyphaOXHAHKo3xkM8y3BeGAvHdMN8GNWvEAU1Yw6rYpGzu/wDDbKxgEjVeVDpgGhDzaeMpjg==",
3246
+ "version": "4.1.4",
3247
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.4.tgz",
3248
+ "integrity": "sha512-r8+26Voz8dGX3AYpJdFb1ZPaUSM8XOLCZvy+YGpRTmwPHIxA7Z3Jov/oMPtV7hfRQbOnH8qGlLTzQAbgtdNN0Q==",
3252
3249
  "optional": true,
3253
3250
  "dependencies": {
3254
3251
  "bare-events": "^2.5.4",
@@ -10520,11 +10517,6 @@
10520
10517
  "node": ">=10"
10521
10518
  }
10522
10519
  },
10523
- "node_modules/regenerator-runtime": {
10524
- "version": "0.14.1",
10525
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
10526
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
10527
- },
10528
10520
  "node_modules/require-directory": {
10529
10521
  "version": "2.1.1",
10530
10522
  "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -12566,9 +12558,9 @@
12566
12558
  "peer": true
12567
12559
  },
12568
12560
  "node_modules/vite-node/node_modules/vite": {
12569
- "version": "6.3.3",
12570
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz",
12571
- "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==",
12561
+ "version": "6.3.4",
12562
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
12563
+ "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
12572
12564
  "peer": true,
12573
12565
  "dependencies": {
12574
12566
  "esbuild": "^0.25.0",
@@ -13222,9 +13214,9 @@
13222
13214
  }
13223
13215
  },
13224
13216
  "node_modules/vitest/node_modules/vite": {
13225
- "version": "6.3.3",
13226
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz",
13227
- "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==",
13217
+ "version": "6.3.4",
13218
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
13219
+ "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
13228
13220
  "peer": true,
13229
13221
  "dependencies": {
13230
13222
  "esbuild": "^0.25.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "4.148.1",
3
+ "version": "4.149.0",
4
4
  "description": "Command line interface for running Testing on your CI",
5
5
  "author": "Oren Rubin",
6
6
  "contributors": [