@testim/testim-cli 4.89.0 → 4.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #! /usr/bin/env node
2
2
  "use strict";var OT=Object.create;var Gn=Object.defineProperty;var _T=Object.getOwnPropertyDescriptor;var LT=Object.getOwnPropertyNames;var DT=Object.getPrototypeOf,NT=Object.prototype.hasOwnProperty;var w=(s,e)=>()=>(s&&(e=s(s=0)),e);var G=(s,e)=>{for(var t in e)Gn(s,t,{get:e[t],enumerable:!0})},qp=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of LT(e))!NT.call(s,n)&&n!==t&&Gn(s,n,{get:()=>e[n],enumerable:!(r=_T(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?OT(DT(s)):{},qp(e||!s||!s.__esModule?Gn(t,"default",{value:s,enumerable:!0}):t,s)),ye=s=>qp(Gn({},"__esModule",{value:!0}),s);var $e={};G($e,{log:()=>M,measure:()=>UT});function M(...s){if(!Jp)return;let e=Date.now();console.log(`${e-MT} ${e-Kp} `,...s),Kp=e}function UT(s,e){if(!Jp)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Jp,MT,Kp,We=w(()=>{"use strict";Jp=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,MT=Date.now(),Kp=Date.now()});var zt,$a,Nr=w(()=>{"use strict";zt="element-6066-11e4-a52e-4f735466cecf",$a=79});function se(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 o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function Wa(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 Va=w(()=>{"use strict"});var Ha,Yp,Xp,Qn=w(()=>{Ha={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"},Yp={"@applitools/eyes-sdk-core":"13.11.32","@applitools/spec-driver-webdriverio":"1.4.29","@segment/analytics-node":"1.3.0","@types/unzip-stream":"0.3.2",ajv:"6.12.6","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0",commander:"10.0.0",compression:"1.7.4","coralogix-logger":"1.1.28",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",express:"4.19.2",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:"0.22.10",jsonwebtoken:"9.0.0",linkedom:"0.16.10",lodash:"4.17.21","memory-fs":"0.5.0",ms:"2.1.2",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":"4.9.18",semver:"7.6.0","serialize-error":"7.0.1","socket.io-client":"4.6.2","source-map-support":"0.5.19",superagent:"8.1.2","superagent-proxy":"3.0.0","test-exclude":"6.0.0","ua-parser-js":"0.7.33","unzip-stream":"0.3.1","validate-npm-package-name":"3.0.0",webdriverio:"7.24.0",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.5.0",xml2js:"0.6.2",yaml:"2.2.2"},Xp={node:">= 18.0.0"}});var ks,Qp,Zp,ed,td,Zn,Os,rd,fe,sd,nd,eo,_e,qa,od,to,id,RR,ad,AR,cd,ld,Mr,ud,pd,dd,md,fd,gd,hd,yd,bd,Td,wd,_s,vd,Ed,Sd,za,ue=w(()=>{"use strict";ks=process.env.SERVICES_HOST||"https://services.testim.io",Qp="https://testimstatic.blob.core.windows.net",Zp="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:ks,ks=process.env.SERVICES_HOST);ed=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),td=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),Zn=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),Os=process.env.EDITOR_URL,rd=process.env.WEBSOCKET_HOST||`${ks}/ws`,fe=ks,sd=parseInt(process.env.LOGGER_CONSOLE||"0",10),nd=parseInt(process.env.LOGGER_DEBUG||"0",10),eo=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),_e=parseInt(process.env.IS_ON_PREM||"0",10),qa=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,od=parseInt(process.env.DEBUG_MODE||"0",10),to=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,id=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",RR=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),ad=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),AR=process.env.APPIUM_VERSION||"1.10.1",cd=process.env.GATEWAY_URL,ld=process.env.EXTENSION_SERVICES_HOST||ks,Mr=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:Qp,ud=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:Zp,pd=Qp,dd=Zp,md=5*60*1e3,fd=40,gd=process.env.TMA_BASE_API_URL||"http://127.0.0.1:8585/api",hd=process.env.HEADSPIN_MOBILE_DEVICES_API_URL||"https://api-dev.headspin.io/v0",yd=process.env.HEADSPIN_MOBILE_APPS_API_URL||"https://api-dev.headspin.io/v1",bd=process.env.TDC_MOBILE_DEVICES_API_URL||"https://api.tdc.tricentis-cloud.com/v0",Td=process.env.TDC_MOBILE_APPS_API_URL||"https://api.tdc.tricentis-cloud.com/v1",wd=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",_s=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",vd=process.env.SAUCE_LABS_US_APPS_API_URL||"https://api.us-west-1.saucelabs.com/v1",Ed=process.env.SAUCE_LABS_EU_APPS_API_URL||"https://api.eu-central-1.saucelabs.com/v1",Sd=process.env.P_CLOUDY_DEFAULT_TEST_DURATION||60,za=process.env.P_CLOUDY_DEFAULT_ANDROID_DEVICE_NAME||"samsung"});var Ka={};G(Ka,{CoralogixTransport:()=>Ur});var Re,Id,jT,$T,Ur,Ja=w(()=>{"use strict";Re=require("coralogix-logger"),Id=E(require("winston-transport")),jT={debug:Re.Severity.debug,silly:Re.Severity.verbose,verbose:Re.Severity.verbose,silent:Re.Severity.verbose,info:Re.Severity.info,http:Re.Severity.info,warn:Re.Severity.warning,warning:Re.Severity.warning,error:Re.Severity.error,critical:Re.Severity.critical,crit:Re.Severity.critical},$T=["err","error","reason","e"],Ur=class extends Id.default{constructor(t){t=Object.assign({},Ur.options,t);super(t);this.options=t,this.logger=new Re.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,r){let{category:n,level:o,message:i,meta:a={},...l}=t,c=Object.assign({},a,this.options.extraFields,l),d=new Re.Log;d.severity=jT[o],d.text=i,d.category=n,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,i&&(c.msg=`${i}
3
- ${c.msg}`));for(let u of $T)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&&(i&&!m&&(c.msg=i),d.text=c),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Re.CoralogixLogger.configure(t),Ur.options=t}}});var rc={};G(rc,{getLogger:()=>x,sessionPlayerLoggerFormatter:()=>Qa,setExecutionId:()=>Za,setProjectId:()=>ec,setProxyUri:()=>tc});function GT(){let s=[],e=()=>Promise.resolve();if(!_e){let{CoralogixTransport:t}=(Ja(),ye(Ka));t.configure(Pd);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}if(sd){let t={depth:5,colors:!0};s.push(new ft.transports.Console({format:ft.format.combine(ft.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),ft.format.timestamp({format:"HH:mm:ss:SSS"}),ft.format.printf(r=>`[${r.timestamp}] ${r.level} ${r.category}: ${r.message} ${so.inspect(r.meta,t)}`))}))}return[s,e]}function Za(s){Ya=s}function ec(s){kd=s}function tc(s){if(_e||!s)return;let{CoralogixTransport:e}=(Ja(),ye(Ka));e.configure({...Pd,proxyUri:s})}function Ad(s){return{projectId:kd,time:new Date().toISOString(),...Ya&&!s&&{executionId:Ya}}}function x(s){return new Xa(JT.child({category:s}))}var xd,ft,so,ro,Cd,WT,VT,Pd,Rd,Qa,HT,qT,zT,KT,JT,Ya,kd,Xa,j=w(()=>{"use strict";xd=E(require("os")),ft=E(require("winston"));ue();so=E(require("util")),ro=E(require("chalk")),Cd=E(require("dayjs"));B();WT=xd.hostname(),VT=gt(),Pd={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};Rd={depth:5,colors:!0},Qa=(s,e,t)=>{let r=`[${(0,Cd.default)().format("HH:mm:ss:SSS")}]`,n=so.inspect(e,Rd),o=so.inspect(t,Rd);return`${ro.default.white(r)} ${ro.default.reset()}SessionPlayer-${ro.default.red(s)} ${n} ${o}`},[HT,qT]=GT(),zT=nd?"debug":"info",KT={release:Boolean(!0),branch:"production"},JT=ft.createLogger({levels:ft.config.syslog.levels,level:zT,transports:HT,defaultMeta:{name:"runner",hostname:WT,nodeVersion:process.version,runnerVersion:VT,...KT}}),Ya=null,kd=null;Xa=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Ad(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Ad(n)))}catch{}}}waitForFlush(){return qT()}}});var ao,Fr,P,Kt,fr,Rt,no,Br,ne,Ls,ze,Jt,At,oo,jr,io,Ds,K=w(()=>{"use strict";ao=require("p-retry"),Fr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},P=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},Kt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},fr=class extends Error{constructor(t,r){super(t);this.type=r}},Rt=class extends ao.AbortError{},no=class extends ao.AbortError{},Br=class extends ao.AbortError{},ne=class extends Error{},Ls=class extends Error{},ze=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},Jt=class extends ze{constructor(){super(...arguments);this.name="GridConcurrencyError"}},At=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},oo=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},jr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},io=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Ds=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function sc(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function oe(s){return(0,Ld.setTimeout)(s)}function nc(s,e){let t=new Promise((r,n)=>{e.onabort=()=>{n(e.reason)}});return Promise.race([s,t])}function ce(s,e,t="Timeout Error"){Zn&&!Od&&(Od=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new ne(t);return e=Zn?Number(Zn)||6e5:e,Promise.race([s,oe(e).then(()=>{throw r})])}async function ie(s,e,{concurrency:t}={}){if(t){_d||=(await import("p-limit")).default;let r=_d(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function Yt(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Ld,Od,_d,oc=w(()=>{"use strict";Ld=require("timers/promises");K();ue();Od=!1});var Ms,Dd,YT,Ns,Nd,XT,QT,Md,Ud=w(()=>{"use strict";Ms=E(require("lodash"));ue();Dd=require("dns");j();oc();YT=x("http-request-counters"),Ns=!1,Nd=async()=>{if(_e)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ie(s,t=>Dd.promises.lookup(t)));return e||(Ns=!0),e}catch{return YT.error("network connectivity test failed"),Ns=!0,!1}},XT=Ms.throttle(Nd,10*1e3),QT=60*1e3*15,Md=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},QT)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Ns||XT(),a}}}async function r(){if(Ns||!await Nd())return!1;let n=Ms.sum([...s.fail.values()]),o=Ms.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Ns,t}});var Ke={};G(Ke,{deleteFullRes:()=>sw,deleteReq:()=>Us,didNetworkConnectivityTestFail:()=>mc,download:()=>pc,get:()=>be,getFullRes:()=>ow,getText:()=>Bs,head:()=>iw,isNetworkHealthy:()=>dc,post:()=>Ge,postForm:()=>Fs,postFullRes:()=>nw,postText:()=>lc,put:()=>uc});function ew(){return global.caFileContent}function tw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function rw(){return!xt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(xt.default),global.proxyUri}function gr(s,e=!1){let t=ew();t&&s.ca(t);let r=!e&&rw();r&&s.proxy(r)}async function Fd(s,e={},t={},r=$r){let n=xt.default.delete(s).send(e).timeout(r).set(t);return gr(n),await n}async function ac(s,e,t={},r=$r,n=0){let o=xt.default.post(s).send(e).timeout(r).set(t);gr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function cc(s,e,t={},r=$r,{isBinary:n=!1,skipProxy:o=!1}={}){let i=xt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),gr(i,o),await i}var xt,ic,Ve,$r,ZT,Nt,Us,sw,Ge,nw,Fs,Bs,lc,be,ow,iw,uc,pc,dc,mc,He=w(()=>{"use strict";xt=E(require("superagent"));j();Ud();ic=x("http-request"),Ve=Md(),$r=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,ZT=6e4;Nt=(s,e,t)=>{throw ic.error(s,{...t,error:e}),e};Us=Ve(async(s,e,t,r)=>{try{let n=await Fd(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Nt("failed to delete request",n,{url:s})}});sw=Ve(Fd),Ge=Ve(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await ac(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Nt("failed to post request",o,{url:s})}});nw=Ve(ac),Fs=Ve(async(s,e,t,r={},n=$r)=>{let o=xt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.entries(t).forEach(([i,a])=>{o.attach(i,a.buffer,a.fileName)}),gr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Nt("failed to post request",i,{url:s})}});Bs=Ve(async(s,e,t)=>{try{return(await cc(s,e,t)).text}catch(r){return Nt("failed to getText request",r,{url:s,query:e})}}),lc=Ve(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{return(await ac(s,e,t,r,n)).text}catch(o){return Nt("failed to post request",o,{url:s})}}),be=Ve(async(s,e,t,r,n)=>{try{return(await cc(s,e,t,r,n)).body}catch(o){return Nt("failed to get request",o,{url:s,query:e})}}),ow=Ve((s,e,t,r)=>cc(s,e,t,r)),iw=Ve(async s=>{let e=xt.default.head(s).timeout($r);gr(e);try{return await e}catch(t){return Nt("failed to head request",t,{url:s})}}),uc=Ve(async(s,e,t={},r=$r)=>{let n=xt.default.put(s).send(e).timeout(r).set(t);gr(n);try{return(await n).body}catch(o){return Nt("failed to put request",o,{url:s})}}),pc=Ve(async s=>{ic.info("start to download",{url:s});let e=xt.default.get(s).timeout(ZT).buffer(!0).parse(tw);gr(e);try{let t=await e;return ic.info("finished to download",{url:s}),t}catch(t){return Nt("failed to download",t,{url:s})}}),dc=Ve.isNetworkHealthy,mc=Ve.didNetworkConnectivityTestFail});function ht(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Mt.resolve(__dirname,"../../"):s=Mt.resolve(__dirname,""),s):process.cwd()}function co(s,e){return Oe(s)?e||Mt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Mt.basename(s)}function gt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function cw(){try{return Xp.node}catch{return""}}async function $d(s,e,t=!0){let r=await tt.promises.readdir(s,{withFileTypes:!0});await tt.promises.mkdir(e,{recursive:t});for(let n of r){let o=Mt.join(s,n.name),i=Mt.join(e,n.name);n.isDirectory()?await $d(o,i):await tt.promises.copyFile(o,i)}}async function ge(s){try{return await tt.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Mt,Bd,jd,tt,aw,Ut,Je,lo,fc,rt,gc,Wd=w(()=>{"use strict";Mt=E(require("path"));Va();Qn();Bd=E(require("unzip-stream")),jd=E(require("p-retry")),tt=require("fs"),aw=3;Ut=async s=>{let e=await Promise.resolve().then(()=>(He(),Ke));return(0,jd.default)(()=>e.download(s),{retries:aw,factor:1})},Je=async(s,e)=>{let t=await Ut(s);return tt.promises.writeFile(e,t.body)};lo=async(s,e)=>{let t=co(s,e);return Oe(s)?Je(s,t):tt.promises.copyFile(s,t)},fc=async s=>Oe(s)?Ut(s):tt.promises.readFile(s),rt=async(s,e)=>await(0,tt.createReadStream)(s).pipe(Bd.Extract({path:e})),gc=s=>(0,tt.statSync)(s).size/1e6});var Ft={};G(Ft,{APPIUM_SESSION_MESSAGE:()=>wc,CLI_MODE:()=>Z,MOBILE_APP_SOURCE:()=>uo,MOBILE_RUN_SKIP_REASON:()=>Tc,gridMessages:()=>yt,gridTypes:()=>_,mobileWeb:()=>yc,runnerStatus:()=>hc,runnerTestStatus:()=>de,socketEventTypes:()=>Ct,stepResult:()=>$s,test:()=>bc,testRunStatus:()=>js,testStatus:()=>Ye,timeoutMessages:()=>Fe});var Fe,js,hc,de,Ye,yt,yc,bc,Ct,Z,_,$s,uo,Tc,wc,ae=w(()=>{"use strict";Fe={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},js={COMPLETED:"completed",RUNNING:"running"},hc={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},de={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Ye={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},yt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},yc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},bc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Ct={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Z={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},_={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC",P_CLOUDY:"pcloudy"},$s={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"},uo={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},Tc={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},wc={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"}});function Ws(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function lw(){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 Vs,Vd,Xe,uw,pw,dw,mw,fw,vc,Ec,Gd=w(()=>{"use strict";ae();Vs=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},Vd=s=>Boolean(s.resultId&&s.source==="remote-run"),Xe=(s,e)=>s.testStatus===Ye.QUARANTINE&&!Vd(e)&&!e.runQuarantinedTests;uw=s=>Boolean(s.loginMode),pw=s=>Boolean(s.tunnelOnlyMode),dw=s=>Boolean(s.createPrefechedData),mw=s=>Boolean(s.installLazyDepsMode),fw=s=>Boolean(s.agentMode),vc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Ec=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function mo(s=0){return po.default.duration(s).format("HH:mm:ss.SSS")}function Sc(s=0){return po.default.duration(s).asSeconds()}var po,Hd,qd=w(()=>{"use strict";po=E(require("dayjs")),Hd=E(require("dayjs/plugin/duration"));po.default.extend(Hd.default)});var Gs,Wr,Hs,zd,Vr,Kd=w(()=>{"use strict";ae();Gs=s=>!(!s||"fileName"in s),Wr=(s,e)=>e===_.TESTIM_TVC?!1:s&&"fileName"in s?s.fileName.endsWith(".app"):!1,Hs=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},zd=s=>s===_.TESTIM_TVC,Vr=(s,e)=>zd(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function Ic(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 Jd=w(()=>{"use strict"});var J={};G(J,{OSS:()=>Gr,TESTIM_BROWSER_DIR:()=>Bt,buildBasicHeader:()=>Wa,calcPercentile:()=>ho,copyDir:()=>$d,delay:()=>oe,doesPathExist:()=>ge,download:()=>Ut,downloadAndSave:()=>Je,extractElementId:()=>De,getArgsOnRemoteRunFailure:()=>lw,getBrowserInfo:()=>hw,getCdpAddressForHost:()=>yr,getCliLocation:()=>ht,getDuration:()=>mo,getDurationSec:()=>Sc,getEnginesVersion:()=>cw,getEnvironmentGitBranch:()=>hr,getLocalFileSizeInMB:()=>gc,getMemorySnapshot:()=>Ic,getPlanType:()=>go,getRunConfigByBrowserName:()=>qs,getRunnerVersion:()=>gt,getSource:()=>lo,getSourceAsBuffer:()=>fc,getSourcePath:()=>co,getTestUrl:()=>qe,getUniqBrowsers:()=>Ws,groupTestsByRetries:()=>Ac,guid:()=>se,hasTestPlanFlag:()=>Vs,isAgentMode:()=>fw,isAppFromDevice:()=>Gs,isAppFromDeviceDisabled:()=>Vr,isCreatePrefetchedDataMode:()=>dw,isInstallLazyDepsMode:()=>mw,isLoginMode:()=>uw,isMobileProject:()=>Hs,isPromise:()=>sc,isQuarantineAndNotRemoteRun:()=>Xe,isRemoteRun:()=>Vd,isTestimVirtualGrid:()=>zd,isTunnelOnlyMode:()=>pw,isURL:()=>Oe,promiseAbort:()=>nc,promiseFromCallback:()=>Yt,promiseMap:()=>ie,promiseTimeout:()=>ce,removePropertyFromObject:()=>fo,replaceArgsWithNoDashes:()=>vc,shouldBlockVirtualIosBuild:()=>Wr,spreadObjectToArgs:()=>Ec,unzipFile:()=>rt});function hw(s){return s=s.toLowerCase(),Rc.find(e=>e.browserValue===s)}function qs(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Rc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||Rc[0],n=Gr.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=Gr.find(o=>o.sl.platform===e.platform):e.platformName&&(n=Gr.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=Gr.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=Gr.find(o=>o.bs.platform===t.platform))),Hr.merge(r,n)}function hr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function fo(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&fo(s[r],e,t))}function De(s){return s.ELEMENT||s[zt]}function go(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Ac(s=[]){return Hr.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((o,i)=>{let a=typeof o.retryCount=="number"?o.retryCount:1,l=typeof i.retryCount=="number"?i.retryCount:1;return a===l?o.startTime-i.startTime:(o.retryCount??0)-(i.retryCount??0)}),n=Hr.cloneDeep(r.at(-1));return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function yr(s,e){let t=await Promise.resolve().then(()=>(He(),Ke));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 Yd,Hr,Xd,gw,Bt,Gr,Rc,ho,B=w(()=>{"use strict";Yd=E(require("os")),Hr=E(require("lodash")),Xd=E(require("path"));Nr();Wd();Gd();qd();Va();oc();Kd();Jd();gw=Yd.homedir(),Bt=Xd.join(gw,".testim-browser-profile"),Gr=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 11",bs:{os:"WINDOWS",os_version:"11"},sl:{platform:"Windows 11"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17"},sl:{}},{osName:"macOS Ventura",bs:{os:"OS X",os_version:"Ventura",safari_version:"16.5"},sl:{platform:"macOS 13",safari_version:"latest"}},{osName:"macOS Monterey",bs:{os:"OS X",os_version:"Monterey",safari_version:"15.6"},sl:{platform:"macOS 12",safari_version:"latest"}},{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"}}],Rc=[{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"}];ho=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var xc={};G(xc,{$schema:()=>yw,default:()=>Ew,definitions:()=>bw,properties:()=>vw,required:()=>ww,type:()=>Tw});var yw,bw,Tw,ww,vw,Ew,Qd=w(()=>{yw="http://json-schema.org/draft-07/schema#",bw={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}}}},Tw="object",ww=["entries"],vw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Ew={$schema:yw,definitions:bw,type:Tw,required:ww,properties:vw}});async function om(){try{return await ce(yo.promises.readFile(vo()).then(async s=>{let e=await nm;return Rw(e,s)}),3e4)}catch{return{}}}function Rw(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=zr.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function bt(s,e,t=Sw,r=void 0){return async()=>{if(!tm)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await Aw(e);if(o)return zs.debug("cache hit:",{fnName:e}),o;if(zs.debug("cache miss:",{fnName:e}),!rm)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await xw(e,i,t),i}}async function Aw(s){let t=(await Eo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function xw(s,e,t){if(Cc)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 Eo;r[s]={value:e,expiry:Date.now()+t},sm=new Promise(n=>{wo=n}),Iw(r)}catch{zs.error("failed updating cache")}}async function Kr(){let s=await Eo;Object.keys(s).forEach(e=>{delete s[e]})}function im(s){tm=s}function Cw(s=!0){rm=s}async function am(){try{return Cc=!0,await sm}finally{Cc=!1}}function cm(s){To=s,Eo=om()}var yo,bo,zr,Zd,zs,To,em,wo,tm,rm,Cc,sm,nm,Sw,vo,Eo,Iw,lm,um,ZR,pm,jt=w(()=>{"use strict";yo=E(require("fs")),bo=E(require("path")),zr=E(require("crypto"));B();Zd=require("lodash");j();zs=x("local cache"),To=bo.resolve(ht(),"testim-cache"),tm=!0,rm=!0,Cc=!1,sm=new Promise(s=>{wo=s}),nm=new Promise(s=>{em=s}),Sw=1e3*60*60*3,vo=()=>bo.resolve(bo.resolve(To,"testim.cache"));Eo=om(),Iw=(0,Zd.debounce)(async s=>{let e;try{let t=await nm,r=zr.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=zr.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ge(To)||await yo.promises.mkdir(To,{recursive:!0}),await yo.promises.writeFile(vo(),a)}catch(t){zs.error("failed saving cache",{err:t}),e=t}wo(e?{success:!1,error:e}:{success:!0})},200);lm=em,um=im.bind(void 0,!1),ZR=im.bind(void 0,!0),pm=()=>Cw(!1)});function So(){return{cliLocation:ht(),userInfo:Jr.userInfo(),platform:Jr.platform(),release:Jr.release()}}var Jr,Pc=w(()=>{"use strict";Jr=E(require("os"));B()});function Pw(s){try{return Io.resolve(Io.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 Qt(s){let e=Pw(s);return require(e)}var Io,Ks=w(()=>{"use strict";Io=E(require("path"))});function kw(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function Ow(s){return/The "to" argument must be of type string./.exec(s)}function gm(s,e,t){let r=kw(s),n=Ow(s);return r||n?(fm.info("Failed to install package due to insufficient write access",{...So(),package:t,path:r}),console.error(`
3
+ ${c.msg}`));for(let u of $T)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&&(i&&!m&&(c.msg=i),d.text=c),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Re.CoralogixLogger.configure(t),Ur.options=t}}});var rc={};G(rc,{getLogger:()=>x,sessionPlayerLoggerFormatter:()=>Qa,setExecutionId:()=>Za,setProjectId:()=>ec,setProxyUri:()=>tc});function GT(){let s=[],e=()=>Promise.resolve();if(!_e){let{CoralogixTransport:t}=(Ja(),ye(Ka));t.configure(Pd);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}if(sd){let t={depth:5,colors:!0};s.push(new ft.transports.Console({format:ft.format.combine(ft.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),ft.format.timestamp({format:"HH:mm:ss:SSS"}),ft.format.printf(r=>`[${r.timestamp}] ${r.level} ${r.category}: ${r.message} ${so.inspect(r.meta,t)}`))}))}return[s,e]}function Za(s){Ya=s}function ec(s){kd=s}function tc(s){if(_e||!s)return;let{CoralogixTransport:e}=(Ja(),ye(Ka));e.configure({...Pd,proxyUri:s})}function Ad(s){return{projectId:kd,time:new Date().toISOString(),...Ya&&!s&&{executionId:Ya}}}function x(s){return new Xa(JT.child({category:s}))}var xd,ft,so,ro,Cd,WT,VT,Pd,Rd,Qa,HT,qT,zT,KT,JT,Ya,kd,Xa,j=w(()=>{"use strict";xd=E(require("os")),ft=E(require("winston"));ue();so=E(require("util")),ro=E(require("chalk")),Cd=E(require("dayjs"));B();WT=xd.hostname(),VT=gt(),Pd={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};Rd={depth:5,colors:!0},Qa=(s,e,t)=>{let r=`[${(0,Cd.default)().format("HH:mm:ss:SSS")}]`,n=so.inspect(e,Rd),o=so.inspect(t,Rd);return`${ro.default.white(r)} ${ro.default.reset()}SessionPlayer-${ro.default.red(s)} ${n} ${o}`},[HT,qT]=GT(),zT=nd?"debug":"info",KT={release:Boolean(!0),branch:"production"},JT=ft.createLogger({levels:ft.config.syslog.levels,level:zT,transports:HT,defaultMeta:{name:"runner",hostname:WT,nodeVersion:process.version,runnerVersion:VT,...KT}}),Ya=null,kd=null;Xa=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Ad(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Ad(n)))}catch{}}}waitForFlush(){return qT()}}});var ao,Fr,P,Kt,fr,Rt,no,Br,ne,Ls,ze,Jt,At,oo,jr,io,Ds,K=w(()=>{"use strict";ao=require("p-retry"),Fr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},P=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},Kt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},fr=class extends Error{constructor(t,r){super(t);this.type=r}},Rt=class extends ao.AbortError{},no=class extends ao.AbortError{},Br=class extends ao.AbortError{},ne=class extends Error{},Ls=class extends Error{},ze=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},Jt=class extends ze{constructor(){super(...arguments);this.name="GridConcurrencyError"}},At=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},oo=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},jr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},io=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Ds=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function sc(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function oe(s){return(0,Ld.setTimeout)(s)}function nc(s,e){let t=new Promise((r,n)=>{e.onabort=()=>{n(e.reason)}});return Promise.race([s,t])}function ce(s,e,t="Timeout Error"){Zn&&!Od&&(Od=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new ne(t);return e=Zn?Number(Zn)||6e5:e,Promise.race([s,oe(e).then(()=>{throw r})])}async function ie(s,e,{concurrency:t}={}){if(t){_d||=(await import("p-limit")).default;let r=_d(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function Yt(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Ld,Od,_d,oc=w(()=>{"use strict";Ld=require("timers/promises");K();ue();Od=!1});var Ms,Dd,YT,Ns,Nd,XT,QT,Md,Ud=w(()=>{"use strict";Ms=E(require("lodash"));ue();Dd=require("dns");j();oc();YT=x("http-request-counters"),Ns=!1,Nd=async()=>{if(_e)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ie(s,t=>Dd.promises.lookup(t)));return e||(Ns=!0),e}catch{return YT.error("network connectivity test failed"),Ns=!0,!1}},XT=Ms.throttle(Nd,10*1e3),QT=60*1e3*15,Md=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},QT)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Ns||XT(),a}}}async function r(){if(Ns||!await Nd())return!1;let n=Ms.sum([...s.fail.values()]),o=Ms.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Ns,t}});var Ke={};G(Ke,{deleteFullRes:()=>sw,deleteReq:()=>Us,didNetworkConnectivityTestFail:()=>mc,download:()=>pc,get:()=>be,getFullRes:()=>ow,getText:()=>Bs,head:()=>iw,isNetworkHealthy:()=>dc,post:()=>Ge,postForm:()=>Fs,postFullRes:()=>nw,postText:()=>lc,put:()=>uc});function ew(){return global.caFileContent}function tw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function rw(){return!xt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(xt.default),global.proxyUri}function gr(s,e=!1){let t=ew();t&&s.ca(t);let r=!e&&rw();r&&s.proxy(r)}async function Fd(s,e={},t={},r=$r){let n=xt.default.delete(s).send(e).timeout(r).set(t);return gr(n),await n}async function ac(s,e,t={},r=$r,n=0){let o=xt.default.post(s).send(e).timeout(r).set(t);gr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function cc(s,e,t={},r=$r,{isBinary:n=!1,skipProxy:o=!1}={}){let i=xt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),gr(i,o),await i}var xt,ic,Ve,$r,ZT,Nt,Us,sw,Ge,nw,Fs,Bs,lc,be,ow,iw,uc,pc,dc,mc,He=w(()=>{"use strict";xt=E(require("superagent"));j();Ud();ic=x("http-request"),Ve=Md(),$r=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,ZT=6e4;Nt=(s,e,t)=>{throw ic.error(s,{...t,error:e}),e};Us=Ve(async(s,e,t,r)=>{try{let n=await Fd(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Nt("failed to delete request",n,{url:s})}});sw=Ve(Fd),Ge=Ve(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await ac(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Nt("failed to post request",o,{url:s})}});nw=Ve(ac),Fs=Ve(async(s,e,t,r={},n=$r)=>{let o=xt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.entries(t).forEach(([i,a])=>{o.attach(i,a.buffer,a.fileName)}),gr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Nt("failed to post request",i,{url:s})}});Bs=Ve(async(s,e,t)=>{try{return(await cc(s,e,t)).text}catch(r){return Nt("failed to getText request",r,{url:s,query:e})}}),lc=Ve(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{return(await ac(s,e,t,r,n)).text}catch(o){return Nt("failed to post request",o,{url:s})}}),be=Ve(async(s,e,t,r,n)=>{try{return(await cc(s,e,t,r,n)).body}catch(o){return Nt("failed to get request",o,{url:s,query:e})}}),ow=Ve((s,e,t,r)=>cc(s,e,t,r)),iw=Ve(async s=>{let e=xt.default.head(s).timeout($r);gr(e);try{return await e}catch(t){return Nt("failed to head request",t,{url:s})}}),uc=Ve(async(s,e,t={},r=$r)=>{let n=xt.default.put(s).send(e).timeout(r).set(t);gr(n);try{return(await n).body}catch(o){return Nt("failed to put request",o,{url:s})}}),pc=Ve(async s=>{ic.info("start to download",{url:s});let e=xt.default.get(s).timeout(ZT).buffer(!0).parse(tw);gr(e);try{let t=await e;return ic.info("finished to download",{url:s}),t}catch(t){return Nt("failed to download",t,{url:s})}}),dc=Ve.isNetworkHealthy,mc=Ve.didNetworkConnectivityTestFail});function ht(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Mt.resolve(__dirname,"../../"):s=Mt.resolve(__dirname,""),s):process.cwd()}function co(s,e){return Oe(s)?e||Mt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Mt.basename(s)}function gt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function cw(){try{return Xp.node}catch{return""}}async function $d(s,e,t=!0){let r=await tt.promises.readdir(s,{withFileTypes:!0});await tt.promises.mkdir(e,{recursive:t});for(let n of r){let o=Mt.join(s,n.name),i=Mt.join(e,n.name);n.isDirectory()?await $d(o,i):await tt.promises.copyFile(o,i)}}async function ge(s){try{return await tt.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Mt,Bd,jd,tt,aw,Ut,Je,lo,fc,rt,gc,Wd=w(()=>{"use strict";Mt=E(require("path"));Va();Qn();Bd=E(require("unzip-stream")),jd=E(require("p-retry")),tt=require("fs"),aw=3;Ut=async s=>{let e=await Promise.resolve().then(()=>(He(),Ke));return(0,jd.default)(()=>e.download(s),{retries:aw,factor:1})},Je=async(s,e)=>{let t=await Ut(s);return tt.promises.writeFile(e,t.body)};lo=async(s,e)=>{let t=co(s,e);return Oe(s)?Je(s,t):tt.promises.copyFile(s,t)},fc=async s=>Oe(s)?Ut(s):tt.promises.readFile(s),rt=async(s,e)=>await(0,tt.createReadStream)(s).pipe(Bd.Extract({path:e})),gc=s=>(0,tt.statSync)(s).size/1e6});var Ft={};G(Ft,{APPIUM_SESSION_MESSAGE:()=>wc,CLI_MODE:()=>Z,MOBILE_APP_SOURCE:()=>uo,MOBILE_RUN_SKIP_REASON:()=>Tc,gridMessages:()=>yt,gridTypes:()=>_,mobileWeb:()=>yc,runnerStatus:()=>hc,runnerTestStatus:()=>de,socketEventTypes:()=>Ct,stepResult:()=>$s,test:()=>bc,testRunStatus:()=>js,testStatus:()=>Ye,timeoutMessages:()=>Fe});var Fe,js,hc,de,Ye,yt,yc,bc,Ct,Z,_,$s,uo,Tc,wc,ae=w(()=>{"use strict";Fe={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},js={COMPLETED:"completed",RUNNING:"running"},hc={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},de={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Ye={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},yt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},yc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},bc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Ct={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Z={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},_={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC",P_CLOUDY:"pcloudy"},$s={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"},uo={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},Tc={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},wc={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"}});function Ws(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function lw(){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 Vs,Vd,Xe,uw,pw,dw,mw,fw,vc,Ec,Gd=w(()=>{"use strict";ae();Vs=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},Vd=s=>Boolean(s.resultId&&s.source==="remote-run"),Xe=(s,e)=>s.testStatus===Ye.QUARANTINE&&!Vd(e)&&!e.runQuarantinedTests;uw=s=>Boolean(s.loginMode),pw=s=>Boolean(s.tunnelOnlyMode),dw=s=>Boolean(s.createPrefechedData),mw=s=>Boolean(s.installLazyDepsMode),fw=s=>Boolean(s.agentMode),vc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Ec=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function mo(s=0){return po.default.duration(s).format("HH:mm:ss.SSS")}function Sc(s=0){return po.default.duration(s).asSeconds()}var po,Hd,qd=w(()=>{"use strict";po=E(require("dayjs")),Hd=E(require("dayjs/plugin/duration"));po.default.extend(Hd.default)});var Gs,Wr,Hs,zd,Vr,Kd=w(()=>{"use strict";ae();Gs=s=>!(!s||"fileName"in s),Wr=(s,e)=>{if(e===_.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},Hs=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},zd=s=>s===_.TESTIM_TVC,Vr=(s,e)=>zd(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function Ic(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 Jd=w(()=>{"use strict"});var J={};G(J,{OSS:()=>Gr,TESTIM_BROWSER_DIR:()=>Bt,buildBasicHeader:()=>Wa,calcPercentile:()=>ho,copyDir:()=>$d,delay:()=>oe,doesPathExist:()=>ge,download:()=>Ut,downloadAndSave:()=>Je,extractElementId:()=>De,getArgsOnRemoteRunFailure:()=>lw,getBrowserInfo:()=>hw,getCdpAddressForHost:()=>yr,getCliLocation:()=>ht,getDuration:()=>mo,getDurationSec:()=>Sc,getEnginesVersion:()=>cw,getEnvironmentGitBranch:()=>hr,getLocalFileSizeInMB:()=>gc,getMemorySnapshot:()=>Ic,getPlanType:()=>go,getRunConfigByBrowserName:()=>qs,getRunnerVersion:()=>gt,getSource:()=>lo,getSourceAsBuffer:()=>fc,getSourcePath:()=>co,getTestUrl:()=>qe,getUniqBrowsers:()=>Ws,groupTestsByRetries:()=>Ac,guid:()=>se,hasTestPlanFlag:()=>Vs,isAgentMode:()=>fw,isAppFromDevice:()=>Gs,isAppFromDeviceDisabled:()=>Vr,isCreatePrefetchedDataMode:()=>dw,isInstallLazyDepsMode:()=>mw,isLoginMode:()=>uw,isMobileProject:()=>Hs,isPromise:()=>sc,isQuarantineAndNotRemoteRun:()=>Xe,isRemoteRun:()=>Vd,isTestimVirtualGrid:()=>zd,isTunnelOnlyMode:()=>pw,isURL:()=>Oe,promiseAbort:()=>nc,promiseFromCallback:()=>Yt,promiseMap:()=>ie,promiseTimeout:()=>ce,removePropertyFromObject:()=>fo,replaceArgsWithNoDashes:()=>vc,shouldBlockVirtualIosBuild:()=>Wr,spreadObjectToArgs:()=>Ec,unzipFile:()=>rt});function hw(s){return s=s.toLowerCase(),Rc.find(e=>e.browserValue===s)}function qs(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Rc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||Rc[0],n=Gr.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=Gr.find(o=>o.sl.platform===e.platform):e.platformName&&(n=Gr.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=Gr.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=Gr.find(o=>o.bs.platform===t.platform))),Hr.merge(r,n)}function hr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function fo(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&fo(s[r],e,t))}function De(s){return s.ELEMENT||s[zt]}function go(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Ac(s=[]){return Hr.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((o,i)=>{let a=typeof o.retryCount=="number"?o.retryCount:1,l=typeof i.retryCount=="number"?i.retryCount:1;return a===l?o.startTime-i.startTime:(o.retryCount??0)-(i.retryCount??0)}),n=Hr.cloneDeep(r.at(-1));return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function yr(s,e){let t=await Promise.resolve().then(()=>(He(),Ke));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 Yd,Hr,Xd,gw,Bt,Gr,Rc,ho,B=w(()=>{"use strict";Yd=E(require("os")),Hr=E(require("lodash")),Xd=E(require("path"));Nr();Wd();Gd();qd();Va();oc();Kd();Jd();gw=Yd.homedir(),Bt=Xd.join(gw,".testim-browser-profile"),Gr=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 11",bs:{os:"WINDOWS",os_version:"11"},sl:{platform:"Windows 11"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17"},sl:{}},{osName:"macOS Ventura",bs:{os:"OS X",os_version:"Ventura",safari_version:"16.5"},sl:{platform:"macOS 13",safari_version:"latest"}},{osName:"macOS Monterey",bs:{os:"OS X",os_version:"Monterey",safari_version:"15.6"},sl:{platform:"macOS 12",safari_version:"latest"}},{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"}}],Rc=[{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"}];ho=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var xc={};G(xc,{$schema:()=>yw,default:()=>Ew,definitions:()=>bw,properties:()=>vw,required:()=>ww,type:()=>Tw});var yw,bw,Tw,ww,vw,Ew,Qd=w(()=>{yw="http://json-schema.org/draft-07/schema#",bw={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}}}},Tw="object",ww=["entries"],vw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Ew={$schema:yw,definitions:bw,type:Tw,required:ww,properties:vw}});async function om(){try{return await ce(yo.promises.readFile(vo()).then(async s=>{let e=await nm;return Rw(e,s)}),3e4)}catch{return{}}}function Rw(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=zr.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function bt(s,e,t=Sw,r=void 0){return async()=>{if(!tm)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await Aw(e);if(o)return zs.debug("cache hit:",{fnName:e}),o;if(zs.debug("cache miss:",{fnName:e}),!rm)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await xw(e,i,t),i}}async function Aw(s){let t=(await Eo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function xw(s,e,t){if(Cc)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 Eo;r[s]={value:e,expiry:Date.now()+t},sm=new Promise(n=>{wo=n}),Iw(r)}catch{zs.error("failed updating cache")}}async function Kr(){let s=await Eo;Object.keys(s).forEach(e=>{delete s[e]})}function im(s){tm=s}function Cw(s=!0){rm=s}async function am(){try{return Cc=!0,await sm}finally{Cc=!1}}function cm(s){To=s,Eo=om()}var yo,bo,zr,Zd,zs,To,em,wo,tm,rm,Cc,sm,nm,Sw,vo,Eo,Iw,lm,um,ZR,pm,jt=w(()=>{"use strict";yo=E(require("fs")),bo=E(require("path")),zr=E(require("crypto"));B();Zd=require("lodash");j();zs=x("local cache"),To=bo.resolve(ht(),"testim-cache"),tm=!0,rm=!0,Cc=!1,sm=new Promise(s=>{wo=s}),nm=new Promise(s=>{em=s}),Sw=1e3*60*60*3,vo=()=>bo.resolve(bo.resolve(To,"testim.cache"));Eo=om(),Iw=(0,Zd.debounce)(async s=>{let e;try{let t=await nm,r=zr.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=zr.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ge(To)||await yo.promises.mkdir(To,{recursive:!0}),await yo.promises.writeFile(vo(),a)}catch(t){zs.error("failed saving cache",{err:t}),e=t}wo(e?{success:!1,error:e}:{success:!0})},200);lm=em,um=im.bind(void 0,!1),ZR=im.bind(void 0,!0),pm=()=>Cw(!1)});function So(){return{cliLocation:ht(),userInfo:Jr.userInfo(),platform:Jr.platform(),release:Jr.release()}}var Jr,Pc=w(()=>{"use strict";Jr=E(require("os"));B()});function Pw(s){try{return Io.resolve(Io.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 Qt(s){let e=Pw(s);return require(e)}var Io,Ks=w(()=>{"use strict";Io=E(require("path"))});function kw(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function Ow(s){return/The "to" argument must be of type string./.exec(s)}function gm(s,e,t){let r=kw(s),n=Ow(s);return r||n?(fm.info("Failed to install package due to insufficient write access",{...So(),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.