@testim/testim-cli 4.176.2 → 4.178.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 +3 -3
- package/cli.js +2 -2
- package/cli.js.map +2 -2
- package/npm-shrinkwrap.json +686 -266
- package/package.json +34 -1
package/README.md
CHANGED
|
@@ -157,14 +157,14 @@ The following are Environment Variables that the runner listens to:
|
|
|
157
157
|
|
|
158
158
|
### Running local runner
|
|
159
159
|
To test `runner` code changes by locally running executions via the CLI, you can do any of the following:
|
|
160
|
-
1. Go to the Runner folder, (i.e cd apps/runner) and copy-paste a CLI command - remove the 'testim' command and instead do '
|
|
161
|
-
Example: `
|
|
160
|
+
1. Go to the Runner folder, (i.e cd apps/runner) and copy-paste a CLI command - remove the 'testim' command and instead do 'pnpm start'
|
|
161
|
+
Example: `pnpm start --token <token> --project <project> --grid <grid>`
|
|
162
162
|
2. You can follow the instructions on runner's [DOC.md](./DOC.md) file, to create a beta version - than, you can do: node {{full path to runner folder}}/deploy/cli.js
|
|
163
163
|
Example: `node apps/runner/deploy/cli.js --token <token> --project <project> --grid <grid>`
|
|
164
164
|
|
|
165
165
|
Important note - due to multi region support, when you want to run local runner against non-production environments, you will need to add an env var
|
|
166
166
|
named RUNNER_ENVIRONMENT to take the correct services configuration - the values are production (default), staging, development.
|
|
167
|
-
Example: `RUNNER_ENVIRONMENT=staging
|
|
167
|
+
Example: `RUNNER_ENVIRONMENT=staging pnpm start --token <token> --project <project> --grid <grid>`
|
|
168
168
|
|
|
169
169
|
License
|
|
170
170
|
----
|
package/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var sw=Object.create;var gn=Object.defineProperty;var iw=Object.getOwnPropertyDescriptor;var nw=Object.getOwnPropertyNames;var ow=Object.getPrototypeOf,aw=Object.prototype.hasOwnProperty;var I=(s,e)=>()=>(s&&(e=s(s=0)),e);var z=(s,e)=>{for(var t in e)gn(s,t,{get:e[t],enumerable:!0})},Id=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of nw(e))!aw.call(s,i)&&i!==t&&gn(s,i,{get:()=>e[i],enumerable:!(r=iw(e,i))||r.enumerable});return s};var R=(s,e,t)=>(t=s!=null?sw(ow(s)):{},Id(e||!s||!s.__esModule?gn(t,"default",{value:s,enumerable:!0}):t,s)),Xe=s=>Id(gn({},"__esModule",{value:!0}),s);var Ve={};z(Ve,{log:()=>M,measure:()=>lw});function M(...s){if(!xd)return;let e=Date.now();console.log(`${e-cw} ${e-Rd} `,...s),Rd=e}function lw(s,e){if(!xd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var xd,cw,Rd,Ge=I(()=>{"use strict";xd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,cw=Date.now(),Rd=Date.now()});var Xt,Gr=I(()=>{"use strict";Xt="element-6066-11e4-a52e-4f735466cecf"});function ie(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let i=Math.floor(Math.random()*e.length);t+=e[i]}return t}function Ye(s,e,t,r,i){let n="";return i=i?encodeURIComponent(i):"master",e&&t&&(n=`${s}/#/project/${e}/branch/${i}/test/${t}`,r&&(n+=`?result-id=${r}`)),n}function gc(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Me(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 hc=I(()=>{"use strict"});var bc,Ad,Cd,En=I(()=>{bc={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:"2.0.1"},Ad={"@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.8.1",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",eventsource:"3.0.6",express:"4.21.2",fkill:"7.2.1","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",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","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.44.1",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.17.1",xml2js:"0.6.2",yaml:"2.2.2"},Cd={node:">= 18.0.0"}});var hr,yr,Pd,Hs,dw,Yt,kd,Od,In,ot,_d,be,Ld,Dd,Rn,He,Tc,Nd,xn,Md,Fd,ex,tx,Ud,Bd,jd,$d,wc,Wd,vc,Vd,qs,zs,ce=I(()=>{"use strict";hr=process.env.SERVICES_HOST||"https://services.testim.io",yr="https://app.testim.io";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:hr,hr=process.env.SERVICES_HOST);Pd=process.env.TESTIM_REGION||"us-west-2",Hs=process.env.RUNNER_ENVIRONMENT||"production",dw={production:"",staging:".staging",development:".dev"},Yt=process.env.EXTENSION_SP_S3_HOST||`https://playback-components${dw[Hs]||""}.testim.io`,kd=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Od=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),In=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),ot=process.env.EDITOR_URL,_d=process.env.WEBSOCKET_HOST||`${hr}/ws`,be=()=>hr,Ld=parseInt(process.env.LOGGER_CONSOLE||"0",10),Dd=parseInt(process.env.LOGGER_DEBUG||"0",10),Rn=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),He=parseInt(process.env.IS_ON_PREM||"0",10),Tc=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,Nd=parseInt(process.env.DEBUG_MODE||"0",10),xn=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Md=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",Fd=process.env.CORALOGIX_PRIVATE_KEY||"d0eb01da-f966-1663-63c6-8871225d7c39",ex=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),tx=process.env.APPIUM_VERSION||"1.10.1",Ud=process.env.GATEWAY_URL,Bd=()=>process.env.EXTENSION_SERVICES_HOST||hr,jd=5*60*1e3,$d=40,wc=process.env.TDC_MOBILE_API_BASE_URL||"https://api.tdc.tricentis-cloud.com",Wd=process.env.TDC_DEVICES_API_PATH||"v0",vc=process.env.TDC_APPS_API_PATH||"v1",Vd=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",qs=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",zs=s=>{hr=s,process.env.SERVICES_HOST=s,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:hr}});var Gd,An,Hd=I(()=>{"use strict";Gd=R(require("superagent"));ce();An=class{constructor(e){this.logs=[];this.url=process.env.CORALOGIX_URL||"https://ingress.coralogix.com/logs/v1/bulk",this.token=Fd,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=Gd.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 zd={};z(zd,{CoralogixTransport:()=>Sc});var qd,mw,fw,Sc,Kd=I(()=>{"use strict";qd=R(require("winston-transport"));Hd();mw={debug:1,silly:2,verbose:2,silent:2,info:3,http:3,warn:4,warning:4,error:5,critical:6,crit:6},fw=["err","error","reason","e"],Sc=class extends qd.default{constructor(t){super(t);this.name="Coralogix Transport",this.category=t.category,this.logger=new An({applicationName:"testim",subsystemName:"runner"})}log(t,r){let{category:i,level:n,message:o,meta:a={},...c}=t,l={...a,...c},d={severity:mw[n],text:o,category:i||this.category};l.className&&(d.className=l.className),l.methodName&&(d.methodName=l.methodName),l.threadId&&(d.threadId=l.threadId),delete l.className,delete l.methodName,delete l.threadId,delete l.category,delete l.level,delete l.message;let m=!1;a instanceof Error&&(m=!0,l.msg=a.message+a.stack,o&&(l.msg=`${o}
|
|
3
|
-
${l.msg}`));for(let u of fw)a[u]instanceof Error&&(l[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(l).length>0&&(o&&!m&&(l.msg=o),d.text=JSON.stringify(l)),this.logger.addLog(d),r(null,!0)}setProxy(t){this.logger.setProxy(t)}async waitForFlush(){return await this.logger.waitForFlush()}}});function yw(){let s=[],e=()=>Promise.resolve(),t=r=>{};if(!He){let{CoralogixTransport:r}=(Kd(),Xe(zd)),i=new r({category:"ROOT"});s.push(i),e=()=>i.waitForFlush(),t=n=>i.setProxy(n)}if(Ld){let r={depth:5,colors:!0};s.push(new ht.transports.Console({format:ht.format.combine(ht.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),ht.format.timestamp({format:"HH:mm:ss:SSS"}),ht.format.printf(i=>`[${i.timestamp}] ${i.level} ${i.category}: ${i.message} ${Pn.inspect(i.meta,r)}`))}))}return[s,e,t]}function tm(s){Ec=s}function rm(s){em=s}function sm(s){He||!s||ww(s)}function Xd(s){return{projectId:em,time:new Date().toISOString(),region:$t.getRegion(),...Ec&&!s&&{executionId:Ec}}}function C(s){return new $t(Ew.child({category:s}))}var Yd,ht,Pn,Cn,Qd,gw,hw,Jd,Zd,bw,Tw,ww,vw,Sw,Ew,Ec,em,$t,W=I(()=>{"use strict";Yd=R(require("node:os")),ht=R(require("winston"));ce();Pn=R(require("node:util")),Cn=R(require("chalk")),Qd=R(require("dayjs"));F();gw=Yd.hostname(),hw=at();Jd={depth:5,colors:!0},Zd=(s,e,t)=>{let r=`[${(0,Qd.default)().format("HH:mm:ss:SSS")}]`,i=Pn.inspect(e,Jd),n=Pn.inspect(t,Jd);return`${Cn.default.white(r)} ${Cn.default.reset()}SessionPlayer-${Cn.default.red(s)} ${i} ${n}`},[bw,Tw,ww]=yw(),vw=Dd?"debug":"info",Sw={release:Boolean(!1),branch:"test"},Ew=ht.createLogger({levels:ht.config.syslog.levels,level:vw,transports:bw,defaultMeta:{name:"runner",hostname:gw,nodeVersion:process.version,runnerVersion:hw,...Sw}}),Ec=null,em=null;$t=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)}static setRegion(e){$t.region=e}static getRegion(){return $t.region}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:i}=r;try{this._logger.log(e,{meta:r,message:t,...Xd(i)})}catch(n){try{this._logger.log("crit",{message:`failed to log message ${n.message}, ${n.stack}`,...Xd(i)})}catch{}}}waitForFlush(){return Tw()}}});var Ln,Hr,x,Qt,br,kt,kn,qr,le,Ks,ct,Zt,Ot,On,zr,_n,Js,Y=I(()=>{"use strict";Ln=require("p-retry"),Hr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},x=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},Qt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},br=class extends Error{constructor(t,r){super(t instanceof Error?t.message:t,{cause:t});this.type=r}},kt=class extends Ln.AbortError{},kn=class extends Ln.AbortError{},qr=class extends Ln.AbortError{},le=class extends Error{},Ks=class extends Error{},ct=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},Zt=class extends ct{constructor(){super(...arguments);this.name="GridConcurrencyError"}},Ot=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},On=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},zr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},_n=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Js=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function Ic(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function de(s){return(0,om.setTimeout)(s)}function Rc(s,e){let t=new Promise((r,i)=>{e.onabort=()=>{i(e.reason)}});return Promise.race([s,t])}function ue(s,e,t="Timeout Error"){In&&!im&&(im=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new le(t);return e=In?Number(In)||6e5:e,Promise.race([s,de(e).then(()=>{throw r})])}async function ne(s,e,{concurrency:t}={}){if(t){nm||=(await import("p-limit")).default;let r=nm(t);return await Promise.all(Array.from(s,(i,n)=>r(()=>e(i,n))))}return await Promise.all(Array.from(s,e))}function er(s){return new Promise((e,t)=>{s((r,i)=>r?t(r):e(i))})}var om,im,nm,xc=I(()=>{"use strict";om=require("timers/promises");Y();ce();im=!1});var Ys,am,Rw,Xs,cm,xw,Aw,lm,um=I(()=>{"use strict";Ys=R(require("lodash"));ce();am=require("dns");W();xc();Rw=C("http-request-counters"),Xs=!1,cm=async()=>{if(He)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ne(s,t=>am.promises.lookup(t)));return e||(Xs=!0),e}catch{return Rw.error("network connectivity test failed"),Xs=!0,!1}},xw=Ys.throttle(cm,10*1e3),Aw=60*1e3*15,lm=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(i,n){let o=i.get(n)||0;i.set(n,o+1),setTimeout(()=>{let a=i.get(n)||1;i.set(n,a-1)},Aw)}function t(i,n=i.name){return async function(...o){e(s.call,n);try{let a=await i.call(null,...o);return e(s.success,n),a}catch(a){throw e(s.fail,n),Xs||xw(),a}}}async function r(){if(Xs||!await cm())return!1;let i=Ys.sum([...s.fail.values()]),n=Ys.sum([...s.call.values()]);return i<n*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Xs,t}});var Qe={};z(Qe,{deleteReq:()=>Qs,didNetworkConnectivityTestFail:()=>Lc,download:()=>Oc,get:()=>ve,getFullRes:()=>Lw,getText:()=>Pc,head:()=>Dw,isNetworkHealthy:()=>_c,post:()=>qe,postForm:()=>Zs,postText:()=>_w,put:()=>kc});function Pw(){return global.caFileContent}function kw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function Ow(){return!yt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(yt.default),global.proxyUri}function Tr(s,e=!1){let t=Pw();t&&s.ca(t);let r=!e&&Ow();r&&s.proxy(r)}async function pm(s,e,t={},r=Kr,i=0){let n=yt.default.post(s).send(e).timeout(r).set(t);Tr(n),i&&n.retry(i);try{return await n}catch(o){throw o.url=s,o.originalRequestTimeout=r,o.additionalSetHeaders=t,o}}async function Cc(s,e,t={},r=Kr,{isBinary:i=!1,skipProxy:n=!1}={}){let o=yt.default.get(s).query(e||{}).timeout(r).set(t);return i&&o.buffer(!0),Tr(o,n),await o}var yt,Ac,lt,Kr,Cw,Wt,Qs,qe,Zs,Pc,_w,ve,Lw,Dw,kc,Oc,_c,Lc,ze=I(()=>{"use strict";yt=R(require("superagent"));W();um();Ac=C("http-request"),lt=lm(),Kr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,Cw=6e4;Wt=(s,e,t)=>{let r=e.response;e.response instanceof yt.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 i=new Error("").stack;throw Ac.error(s,{...t,error:e,logErrorAndRethrowStack:i}),e};Qs=lt(async(s,e={},t={},r=Kr)=>{try{let i=yt.default.delete(s).send(e).timeout(r).set(t);Tr(i);let n=await i;return n.type==="text/plain"?n.text:n.body}catch(i){return Wt("failed to delete request",i,{url:s})}}),qe=lt(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{let n=await pm(s,e,t,r,i);return n.type==="text/plain"?n.text:n.body}catch(n){return Wt("failed to post request",n,{url:s})}});Zs=lt(async(s,e,t,r={},i=Kr)=>{let n=yt.default.post(s).type("form").timeout(i).set(r);n.field(e),Object.entries(t).forEach(([o,a])=>{n.attach(o,a.buffer,a.fileName)}),Tr(n);try{let o=await n;return o.type==="text/plain"?o.text:o.body}catch(o){return Wt("failed to post request",o,{url:s})}});Pc=lt(async(s,e,t)=>{try{return(await Cc(s,e,t)).text}catch(r){return Wt("failed to getText request",r,{url:s,query:e})}}),_w=lt(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{return(await pm(s,e,t,r,i)).text}catch(n){return Wt("failed to post request",n,{url:s})}}),ve=lt(async(s,e,t,r,i)=>{try{return(await Cc(s,e,t,r,i)).body}catch(n){return Wt("failed to get request",n,{url:s,query:e})}}),Lw=lt((s,e,t,r)=>Cc(s,e,t,r)),Dw=lt(async s=>{let e=yt.default.head(s).timeout(Kr);Tr(e);try{return await e}catch(t){return Wt("failed to head request",t,{url:s})}}),kc=lt(async(s,e,t={},r=Kr)=>{let i=yt.default.put(s).send(e).timeout(r).set(t);Tr(i);try{return(await i).body}catch(n){return Wt("failed to put request",n,{url:s})}}),Oc=lt(async s=>{Ac.info("start to download",{url:s});let e=yt.default.get(s).set("User-Agent","Testim.io").timeout(Cw).buffer(!0).parse(kw);Tr(e);try{let t=await e;return Ac.info("finished to download",{url:s}),t}catch(t){return Wt("failed to download",t,{url:s})}}),_c=lt.isNetworkHealthy,Lc=lt.didNetworkConnectivityTestFail});function bt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Vt.resolve(__dirname,"../../"):s=Vt.resolve(__dirname,""),s):process.cwd()}function Dn(s,e){return Me(s)?e||Vt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Vt.basename(s)}function at(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function Mc(){try{return Cd.node}catch{return""}}async function fm(s,e,t=!0){let r=await ut.promises.readdir(s,{withFileTypes:!0});await ut.promises.mkdir(e,{recursive:t});for(let i of r){let n=Vt.join(s,i.name),o=Vt.join(e,i.name);i.isDirectory()?await fm(n,o):await ut.promises.copyFile(n,o)}}async function Te(s){try{return await ut.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Vt,dm,mm,ut,Nw,Gt,Ze,Nn,Dc,je,Nc,Fc=I(()=>{"use strict";Vt=R(require("node:path"));hc();En();dm=R(require("unzip-stream")),mm=R(require("p-retry")),ut=require("node:fs"),Nw=3;Gt=async s=>{let e=await Promise.resolve().then(()=>(ze(),Qe));return(0,mm.default)(()=>e.download(s),{retries:Nw,factor:1})},Ze=async(s,e)=>{let t=await Gt(s);return ut.promises.writeFile(e,t.body)};Nn=async(s,e)=>{let t=Dn(s,e);return Me(s)?Ze(s,t):ut.promises.copyFile(s,t)},Dc=async s=>Me(s)?Gt(s):ut.promises.readFile(s),je=async(s,e)=>(0,ut.createReadStream)(s).pipe(dm.Extract({path:e})),Nc=s=>(0,ut.statSync)(s).size/1e6});var Ht={};z(Ht,{APPIUM_SESSION_MESSAGE:()=>Wc,CLI_MODE:()=>J,MOBILE_APP_SOURCE:()=>Mn,MOBILE_RUN_SKIP_REASON:()=>$c,OPERANDS:()=>ti,REGION_CONFIG:()=>Xr,X_HEADER_RUNNER_ID:()=>Vc,gridMessages:()=>Tt,gridTypes:()=>N,mobileWeb:()=>Bc,runnerStatus:()=>Uc,runnerTestStatus:()=>he,socketEventTypes:()=>_t,stepResult:()=>Jr,test:()=>jc,testRunStatus:()=>ei,testStatus:()=>et,timeoutMessages:()=>Pe});var Pe,ei,Uc,he,et,Tt,Bc,jc,_t,J,N,Jr,Mn,$c,Wc,Vc,Xr,ti,ae=I(()=>{"use strict";Pe={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout",TEST_REACHED_CUSTOM_TIMEOUT_MSG:"test-reached-custom-timeout"},ei={COMPLETED:"completed"},Uc={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},he={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},et={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},Tt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Bc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},jc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},_t={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},J={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},N={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",TESTIM_PRIVATE:"testimPrivate",LAMBDATEST:"lambdaTest",TESTIM_LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC"},Jr={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",KEEP_ALIVE_FAILED:"keep-alive-failed"},Mn={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},$c={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"},Vc="X-Testim-Runner-ID",Xr={TTL:1e3*60*60*24,CACHE_FN_NAME:"setRegionConfig"},ti=(t=>(t.AND="AND",t.OR="OR",t))(ti||{})});function ri(s,e){var t,r,i,n,o,a;return(t=s.browserstack)!=null&&t.browserName||(r=s.saucelabs)!=null&&r.browserName?[(i=s.browser)==null?void 0:i.toLowerCase()]:(n=s.testConfigNames)!=null&&n.length||(o=s.testConfigIds)!=null&&o.length||s.testPlan.length||s.testPlanIds.length||!s.browser?[...new Set(e.map(c=>{var l;return(l=c.runConfig)==null?void 0:l.browserValue}))]:[(a=s.browser)==null?void 0:a.toLowerCase()]}function Mw(){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 si,gm,tt,Fw,Uw,Bw,jw,$w,Gc,Hc,hm=I(()=>{"use strict";ae();si=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},gm=s=>Boolean(s.resultId&&s.source==="remote-run"),tt=(s,e)=>s.testStatus===et.QUARANTINE&&!gm(e)&&!e.runQuarantinedTests;Fw=s=>Boolean(s.loginMode),Uw=s=>Boolean(s.tunnelOnlyMode),Bw=s=>Boolean(s.createPrefechedData),jw=s=>Boolean(s.installLazyDepsMode),$w=s=>Boolean(s.agentMode),Gc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Hc=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function Un(s=0){return Fn.default.duration(s).format("HH:mm:ss.SSS")}function qc(s=0){return Fn.default.duration(s).asSeconds()}var Fn,ym,Bn,bm=I(()=>{"use strict";Fn=R(require("dayjs")),ym=R(require("dayjs/plugin/duration"));Fn.default.extend(ym.default);Bn=s=>{let e=Math.floor(s.asMinutes()),t=s.asSeconds()%60||0;return e>0?`${e} min ${Math.floor(t)} sec`:`${Math.floor(t)} sec`}});var ii,Yr,tr,Tm,Qr,wm=I(()=>{"use strict";ae();ii=s=>!(!s||"fileName"in s),Yr=(s,e)=>{if(e===N.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},tr=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},Tm=s=>s===N.TESTIM_TVC,Qr=(s,e)=>Tm(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function zc(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 vm=I(()=>{"use strict"});var Q={};z(Q,{OSS:()=>Zr,TESTIM_BROWSER_DIR:()=>wt,buildBasicHeader:()=>gc,calcPercentile:()=>Wn,copyDir:()=>fm,delay:()=>de,doesPathExist:()=>Te,download:()=>Gt,downloadAndSave:()=>Ze,extractElementId:()=>Fe,formatTimeoutDuration:()=>Bn,getArgsOnRemoteRunFailure:()=>Mw,getBrowserInfo:()=>Vw,getCdpAddressForHost:()=>Sr,getCliLocation:()=>bt,getDuration:()=>Un,getDurationSec:()=>qc,getEnginesVersion:()=>Mc,getEnvironmentGitBranch:()=>vr,getLinksFromUnescapeHTML:()=>ai,getLocalFileSizeInMB:()=>Nc,getMemorySnapshot:()=>zc,getPlanType:()=>$n,getRunConfigByBrowserName:()=>ni,getRunnerVersion:()=>at,getSource:()=>Nn,getSourceAsBuffer:()=>Dc,getSourcePath:()=>Dn,getTestUrl:()=>Ye,getUniqBrowsers:()=>ri,groupTestsByRetries:()=>Jc,guid:()=>ie,hasTestPlanFlag:()=>si,isAgentMode:()=>$w,isAppFromDevice:()=>ii,isAppFromDeviceDisabled:()=>Qr,isCreatePrefetchedDataMode:()=>Bw,isInstallLazyDepsMode:()=>jw,isLoginMode:()=>Fw,isMobileProject:()=>tr,isPromise:()=>Ic,isQuarantineAndNotRemoteRun:()=>tt,isRemoteRun:()=>gm,isTestimVirtualGrid:()=>Tm,isTunnelOnlyMode:()=>Uw,isURL:()=>Me,promiseAbort:()=>Rc,promiseFromCallback:()=>er,promiseMap:()=>ne,promiseTimeout:()=>ue,removePropertyFromObject:()=>jn,replaceArgsWithNoDashes:()=>Gc,sanitizeNumberValue:()=>wr,shouldBlockVirtualIosBuild:()=>Yr,spreadObjectToArgs:()=>Hc,unescapeHTML:()=>oi,unzipFile:()=>je});function wr(s,e){let t=Number(s);return Number.isNaN(t)||t<=0?e:t}function Vw(s){return s=s.toLowerCase(),Kc.find(e=>e.browserValue===s)}function ni(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Kc.find(n=>n.browserName.toLowerCase()===s||s.includes(n.synonyms))||Kc[0],i=Zr.find(n=>n.osName==="Windows 10");return e&&(e.platform?i=Zr.find(n=>n.sl.platform===e.platform):e.platformName&&(i=Zr.find(n=>n.sl.platformName===e.platformName))),t&&(t.os_version?i=Zr.find(n=>n.bs.os_version===t.os_version):t.platform&&(i=Zr.find(n=>n.bs.platform===t.platform))),es.merge(r,i)}function vr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function jn(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&jn(s[r],e,t))}function Fe(s){return s.ELEMENT||s[Xt]}function $n(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Jc(s=[]){return es.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((n,o)=>{let a=typeof n.retryCount=="number"?n.retryCount:1,c=typeof o.retryCount=="number"?o.retryCount:1;return a===c?n.startTime-o.startTime:(n.retryCount??0)-(o.retryCount??0)}),i=es.cloneDeep(r.at(-1));return i&&(i.retryTestResults=r,e.push(i)),e},[]).compact().value()}function oi(s){return xm.parseFromString(`<html><body>${s}</body></html>`,"text/html").documentElement.textContent}function ai(s){return[...xm.parseFromString(`<html><body>${s}</body></html>`,"text/html").getElementsByTagName("a")].map(t=>t.href).filter(Boolean)}async function Sr(s,e){let t=await Promise.resolve().then(()=>(ze(),Qe));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 Em,es,Im,Rm,Ww,wt,Sm,Zr,Kc,Wn,xm,F=I(()=>{"use strict";Em=R(require("os")),es=R(require("lodash")),Im=R(require("path")),Rm=require("linkedom");Gr();Fc();hm();bm();hc();xc();wm();vm();Ww=Em.homedir(),wt=Im.join(Ww,".testim-browser-profile"),Sm="133",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"}}],Kc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:Sm},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:Sm},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"}];Wn=(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,i)=>r-i),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]};xm=new Rm.DOMParser});var Xc={};z(Xc,{$schema:()=>Gw,default:()=>Jw,definitions:()=>Hw,properties:()=>Kw,required:()=>zw,type:()=>qw});var Gw,Hw,qw,zw,Kw,Jw,Am=I(()=>{Gw="http://json-schema.org/draft-07/schema#",Hw={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}}}},qw="object",zw=["entries"],Kw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Jw={$schema:Gw,definitions:Hw,type:qw,required:zw,properties:Kw}});async function Dm(){try{return await ue(Vn.promises.readFile(zn()).then(async s=>{let e=await Lm;return Qw(e,s)}),3e4)}catch{return{}}}function Qw(s,e){let t=e.slice(0,16),r=e.slice(16),i=Buffer.from(s),n=rs.createDecipheriv("aes-256-cbc",Buffer.concat([i,Buffer.alloc(32)],32),t),o=n.update(r);return JSON.parse(Buffer.concat([o,n.final()]))}function Lt(s,e,t=Xw,r=void 0){return async()=>{if(!km)return await s();let i=e;r&&(e+=JSON.stringify(r));let n=await Qc(e);if(n)return ci.debug("cache hit:",{fnName:e}),n;if(ci.debug("cache miss:",{fnName:e}),!Om)throw new Error(`Attempted to rebuild cache for ${i}. cache miss is not allowed with current run configuration`);let o=await s();return o&&await Zw(e,o,t),o}}async function Qc(s){let t=(await Kn)[s];if(!t)return;let{value:r,expiry:i}=t;if(!(i<Date.now())&&r)return r}async function Zw(s,e,t){if(Yc)throw ci.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 Kn;r[s]={value:e,expiry:Date.now()+t},_m=new Promise(i=>{qn=i}),Yw(r)}catch{ci.error("failed updating cache")}}async function ss(){let s=await Kn;Object.keys(s).forEach(e=>{delete s[e]})}function Nm(s){km=s}function ev(s=!0){Om=s}async function Mm(){try{return Yc=!0,await _m}finally{Yc=!1}}function Fm(s){Hn=s,Kn=Dm()}var Vn,Gn,rs,Cm,ci,Hn,Pm,qn,km,Om,Yc,_m,Lm,Xw,zn,Kn,Yw,Um,Bm,Ox,jm,rr=I(()=>{"use strict";Vn=R(require("fs")),Gn=R(require("path")),rs=R(require("crypto"));F();Cm=require("lodash");W();ci=C("local cache"),Hn=Gn.resolve(bt(),"testim-cache"),km=!0,Om=!0,Yc=!1,_m=new Promise(s=>{qn=s}),Lm=new Promise(s=>{Pm=s}),Xw=1e3*60*60*3,zn=()=>Gn.resolve(Gn.resolve(Hn,"testim.cache"));Kn=Dm(),Yw=(0,Cm.debounce)(async s=>{let e;try{let t=await Lm,r=rs.randomBytes(16),i=JSON.stringify(s),n=Buffer.from(t),o=rs.createCipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),r),a=Buffer.concat([r,o.update(i),o.final()]);await Te(Hn)||await Vn.promises.mkdir(Hn,{recursive:!0}),await Vn.promises.writeFile(zn(),a)}catch(t){ci.error("failed saving cache",{err:t}),e=t}qn(e?{success:!1,error:e}:{success:!0})},200);Um=Pm,Bm=Nm.bind(void 0,!1),Ox=Nm.bind(void 0,!0),jm=()=>ev(!1)});function Jn(){return{cliLocation:bt(),userInfo:is.userInfo(),platform:is.platform(),release:is.release()}}var is,Zc=I(()=>{"use strict";is=R(require("node:os"));F()});function tv(s){try{return Xn.resolve(Xn.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 sr(s){let e=tv(s);return require(e)}var Xn,li=I(()=>{"use strict";Xn=R(require("path"))});function rv(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function sv(s){return/The "to" argument must be of type string./.exec(s)}function Gm(s,e,t){let r=rv(s),i=sv(s);return r||i?(Vm.info("Failed to install package due to insufficient write access",{...Jn(),package:t,path:r}),console.error(`
|
|
2
|
+
"use strict";var sw=Object.create;var gn=Object.defineProperty;var iw=Object.getOwnPropertyDescriptor;var nw=Object.getOwnPropertyNames;var ow=Object.getPrototypeOf,aw=Object.prototype.hasOwnProperty;var I=(s,e)=>()=>(s&&(e=s(s=0)),e);var z=(s,e)=>{for(var t in e)gn(s,t,{get:e[t],enumerable:!0})},Id=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of nw(e))!aw.call(s,i)&&i!==t&&gn(s,i,{get:()=>e[i],enumerable:!(r=iw(e,i))||r.enumerable});return s};var R=(s,e,t)=>(t=s!=null?sw(ow(s)):{},Id(e||!s||!s.__esModule?gn(t,"default",{value:s,enumerable:!0}):t,s)),Xe=s=>Id(gn({},"__esModule",{value:!0}),s);var Ve={};z(Ve,{log:()=>M,measure:()=>lw});function M(...s){if(!xd)return;let e=Date.now();console.log(`${e-cw} ${e-Rd} `,...s),Rd=e}function lw(s,e){if(!xd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var xd,cw,Rd,Ge=I(()=>{"use strict";xd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,cw=Date.now(),Rd=Date.now()});var Xt,Gr=I(()=>{"use strict";Xt="element-6066-11e4-a52e-4f735466cecf"});function ie(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let i=Math.floor(Math.random()*e.length);t+=e[i]}return t}function Ye(s,e,t,r,i){let n="";return i=i?encodeURIComponent(i):"master",e&&t&&(n=`${s}/#/project/${e}/branch/${i}/test/${t}`,r&&(n+=`?result-id=${r}`)),n}function gc(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Me(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 hc=I(()=>{"use strict"});var bc,Ad,Cd,En=I(()=>{bc={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:"2.0.1"},Ad={"@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.8.1",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",eventsource:"3.0.6","form-data":"4.0.0",express:"4.21.2",fkill:"7.2.1","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",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","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.44.1",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.17.1",xml2js:"0.6.2",yaml:"2.2.2"},Cd={node:">= 18.0.0"}});var hr,yr,Pd,Hs,dw,Yt,kd,Od,In,ot,_d,be,Ld,Dd,Rn,He,Tc,Nd,xn,Md,Fd,ex,tx,Ud,Bd,jd,$d,wc,Wd,vc,Vd,qs,zs,ce=I(()=>{"use strict";hr=process.env.SERVICES_HOST||"https://services.testim.io",yr="https://app.testim.io";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:hr,hr=process.env.SERVICES_HOST);Pd=process.env.TESTIM_REGION||"us-west-2",Hs=process.env.RUNNER_ENVIRONMENT||"production",dw={production:"",staging:".staging",development:".dev"},Yt=process.env.EXTENSION_SP_S3_HOST||`https://playback-components${dw[Hs]||""}.testim.io`,kd=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Od=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),In=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),ot=process.env.EDITOR_URL,_d=process.env.WEBSOCKET_HOST||`${hr}/ws`,be=()=>hr,Ld=parseInt(process.env.LOGGER_CONSOLE||"0",10),Dd=parseInt(process.env.LOGGER_DEBUG||"0",10),Rn=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),He=parseInt(process.env.IS_ON_PREM||"0",10),Tc=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,Nd=parseInt(process.env.DEBUG_MODE||"0",10),xn=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,Md=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",Fd=process.env.CORALOGIX_PRIVATE_KEY||"d0eb01da-f966-1663-63c6-8871225d7c39",ex=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),tx=process.env.APPIUM_VERSION||"1.10.1",Ud=process.env.GATEWAY_URL,Bd=()=>process.env.EXTENSION_SERVICES_HOST||hr,jd=5*60*1e3,$d=40,wc=process.env.TDC_MOBILE_API_BASE_URL||"https://api.tdc.tricentis-cloud.com",Wd=process.env.TDC_DEVICES_API_PATH||"v0",vc=process.env.TDC_APPS_API_PATH||"v1",Vd=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",qs=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",zs=s=>{hr=s,process.env.SERVICES_HOST=s,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:hr}});var Gd,An,Hd=I(()=>{"use strict";Gd=R(require("superagent"));ce();An=class{constructor(e){this.logs=[];this.url=process.env.CORALOGIX_URL||"https://ingress.coralogix.com/logs/v1/bulk",this.token=Fd,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=Gd.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 zd={};z(zd,{CoralogixTransport:()=>Sc});var qd,mw,fw,Sc,Kd=I(()=>{"use strict";qd=R(require("winston-transport"));Hd();mw={debug:1,silly:2,verbose:2,silent:2,info:3,http:3,warn:4,warning:4,error:5,critical:6,crit:6},fw=["err","error","reason","e"],Sc=class extends qd.default{constructor(t){super(t);this.name="Coralogix Transport",this.category=t.category,this.logger=new An({applicationName:"testim",subsystemName:"runner"})}log(t,r){let{category:i,level:n,message:o,meta:a={},...c}=t,l={...a,...c},d={severity:mw[n],text:o,category:i||this.category};l.className&&(d.className=l.className),l.methodName&&(d.methodName=l.methodName),l.threadId&&(d.threadId=l.threadId),delete l.className,delete l.methodName,delete l.threadId,delete l.category,delete l.level,delete l.message;let m=!1;a instanceof Error&&(m=!0,l.msg=a.message+a.stack,o&&(l.msg=`${o}
|
|
3
|
+
${l.msg}`));for(let u of fw)a[u]instanceof Error&&(l[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(l).length>0&&(o&&!m&&(l.msg=o),d.text=JSON.stringify(l)),this.logger.addLog(d),r(null,!0)}setProxy(t){this.logger.setProxy(t)}async waitForFlush(){return await this.logger.waitForFlush()}}});function yw(){let s=[],e=()=>Promise.resolve(),t=r=>{};if(!He){let{CoralogixTransport:r}=(Kd(),Xe(zd)),i=new r({category:"ROOT"});s.push(i),e=()=>i.waitForFlush(),t=n=>i.setProxy(n)}if(Ld){let r={depth:5,colors:!0};s.push(new ht.transports.Console({format:ht.format.combine(ht.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),ht.format.timestamp({format:"HH:mm:ss:SSS"}),ht.format.printf(i=>`[${i.timestamp}] ${i.level} ${i.category}: ${i.message} ${Pn.inspect(i.meta,r)}`))}))}return[s,e,t]}function tm(s){Ec=s}function rm(s){em=s}function sm(s){He||!s||ww(s)}function Xd(s){return{projectId:em,time:new Date().toISOString(),region:$t.getRegion(),...Ec&&!s&&{executionId:Ec}}}function C(s){return new $t(Ew.child({category:s}))}var Yd,ht,Pn,Cn,Qd,gw,hw,Jd,Zd,bw,Tw,ww,vw,Sw,Ew,Ec,em,$t,W=I(()=>{"use strict";Yd=R(require("node:os")),ht=R(require("winston"));ce();Pn=R(require("node:util")),Cn=R(require("chalk")),Qd=R(require("dayjs"));F();gw=Yd.hostname(),hw=at();Jd={depth:5,colors:!0},Zd=(s,e,t)=>{let r=`[${(0,Qd.default)().format("HH:mm:ss:SSS")}]`,i=Pn.inspect(e,Jd),n=Pn.inspect(t,Jd);return`${Cn.default.white(r)} ${Cn.default.reset()}SessionPlayer-${Cn.default.red(s)} ${i} ${n}`},[bw,Tw,ww]=yw(),vw=Dd?"debug":"info",Sw={release:Boolean(!1),branch:"test"},Ew=ht.createLogger({levels:ht.config.syslog.levels,level:vw,transports:bw,defaultMeta:{name:"runner",hostname:gw,nodeVersion:process.version,runnerVersion:hw,...Sw}}),Ec=null,em=null;$t=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)}static setRegion(e){$t.region=e}static getRegion(){return $t.region}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:i}=r;try{this._logger.log(e,{meta:r,message:t,...Xd(i)})}catch(n){try{this._logger.log("crit",{message:`failed to log message ${n.message}, ${n.stack}`,...Xd(i)})}catch{}}}waitForFlush(){return Tw()}}});var Ln,Hr,x,Qt,br,kt,kn,qr,le,Ks,ct,Zt,Ot,On,zr,_n,Js,Y=I(()=>{"use strict";Ln=require("p-retry"),Hr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},x=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},Qt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},br=class extends Error{constructor(t,r){super(t instanceof Error?t.message:t,{cause:t});this.type=r}},kt=class extends Ln.AbortError{},kn=class extends Ln.AbortError{},qr=class extends Ln.AbortError{},le=class extends Error{},Ks=class extends Error{},ct=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},Zt=class extends ct{constructor(){super(...arguments);this.name="GridConcurrencyError"}},Ot=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},On=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},zr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},_n=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},Js=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function Ic(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function de(s){return(0,om.setTimeout)(s)}function Rc(s,e){let t=new Promise((r,i)=>{e.onabort=()=>{i(e.reason)}});return Promise.race([s,t])}function ue(s,e,t="Timeout Error"){In&&!im&&(im=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new le(t);return e=In?Number(In)||6e5:e,Promise.race([s,de(e).then(()=>{throw r})])}async function ne(s,e,{concurrency:t}={}){if(t){nm||=(await import("p-limit")).default;let r=nm(t);return await Promise.all(Array.from(s,(i,n)=>r(()=>e(i,n))))}return await Promise.all(Array.from(s,e))}function er(s){return new Promise((e,t)=>{s((r,i)=>r?t(r):e(i))})}var om,im,nm,xc=I(()=>{"use strict";om=require("timers/promises");Y();ce();im=!1});var Ys,am,Rw,Xs,cm,xw,Aw,lm,um=I(()=>{"use strict";Ys=R(require("lodash"));ce();am=require("dns");W();xc();Rw=C("http-request-counters"),Xs=!1,cm=async()=>{if(He)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ne(s,t=>am.promises.lookup(t)));return e||(Xs=!0),e}catch{return Rw.error("network connectivity test failed"),Xs=!0,!1}},xw=Ys.throttle(cm,10*1e3),Aw=60*1e3*15,lm=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(i,n){let o=i.get(n)||0;i.set(n,o+1),setTimeout(()=>{let a=i.get(n)||1;i.set(n,a-1)},Aw)}function t(i,n=i.name){return async function(...o){e(s.call,n);try{let a=await i.call(null,...o);return e(s.success,n),a}catch(a){throw e(s.fail,n),Xs||xw(),a}}}async function r(){if(Xs||!await cm())return!1;let i=Ys.sum([...s.fail.values()]),n=Ys.sum([...s.call.values()]);return i<n*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Xs,t}});var Qe={};z(Qe,{deleteReq:()=>Qs,didNetworkConnectivityTestFail:()=>Lc,download:()=>Oc,get:()=>ve,getFullRes:()=>Lw,getText:()=>Pc,head:()=>Dw,isNetworkHealthy:()=>_c,post:()=>qe,postForm:()=>Zs,postText:()=>_w,put:()=>kc});function Pw(){return global.caFileContent}function kw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function Ow(){return!("proxy"in yt.default.Request.prototype)&&global.SuperagentProxy&&global.SuperagentProxy(yt.default),global.proxyUri}function Tr(s,e=!1){let t=Pw();t&&s.ca(t);let r=!e&&Ow();r&&s.proxy(r)}async function pm(s,e,t={},r=Kr,i=0){let n=yt.default.post(s).send(e).timeout(r).set(t);Tr(n),i&&n.retry(i);try{return await n}catch(o){throw o.url=s,o.originalRequestTimeout=r,o.additionalSetHeaders=t,o}}async function Cc(s,e,t={},r=Kr,{isBinary:i=!1,skipProxy:n=!1}={}){let o=yt.default.get(s).query(e||{}).timeout(r).set(t);return i&&o.buffer(!0),Tr(o,n),await o}var yt,Ac,lt,Kr,Cw,Wt,Qs,qe,Zs,Pc,_w,ve,Lw,Dw,kc,Oc,_c,Lc,ze=I(()=>{"use strict";yt=R(require("superagent"));W();um();Ac=C("http-request"),lt=lm(),Kr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,Cw=6e4;Wt=(s,e,t)=>{let r=e.response;e.response instanceof yt.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 i=new Error("").stack;throw Ac.error(s,{...t,error:e,logErrorAndRethrowStack:i}),e};Qs=lt(async(s,e={},t={},r=Kr)=>{try{let i=yt.default.delete(s).send(e).timeout(r).set(t);Tr(i);let n=await i;return n.type==="text/plain"?n.text:n.body}catch(i){return Wt("failed to delete request",i,{url:s})}}),qe=lt(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{let n=await pm(s,e,t,r,i);return n.type==="text/plain"?n.text:n.body}catch(n){return Wt("failed to post request",n,{url:s})}});Zs=lt(async(s,e,t,r={},i=Kr)=>{let n=yt.default.post(s).type("form").timeout(i).set(r);n.field(e),Object.entries(t).forEach(([o,a])=>{n.attach(o,a.buffer,a.fileName)}),Tr(n);try{let o=await n;return o.type==="text/plain"?o.text:o.body}catch(o){return Wt("failed to post request",o,{url:s})}});Pc=lt(async(s,e,t)=>{try{return(await Cc(s,e,t)).text}catch(r){return Wt("failed to getText request",r,{url:s,query:e})}}),_w=lt(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{return(await pm(s,e,t,r,i)).text}catch(n){return Wt("failed to post request",n,{url:s})}}),ve=lt(async(s,e,t,r,i)=>{try{return(await Cc(s,e,t,r,i)).body}catch(n){return Wt("failed to get request",n,{url:s,query:e})}}),Lw=lt((s,e,t,r)=>Cc(s,e,t,r)),Dw=lt(async s=>{let e=yt.default.head(s).timeout(Kr);Tr(e);try{return await e}catch(t){return Wt("failed to head request",t,{url:s})}}),kc=lt(async(s,e,t={},r=Kr)=>{let i=yt.default.put(s).send(e).timeout(r).set(t);Tr(i);try{return(await i).body}catch(n){return Wt("failed to put request",n,{url:s})}}),Oc=lt(async s=>{Ac.info("start to download",{url:s});let e=yt.default.get(s).set("User-Agent","Testim.io").timeout(Cw).buffer(!0).parse(kw);Tr(e);try{let t=await e;return Ac.info("finished to download",{url:s}),t}catch(t){return Wt("failed to download",t,{url:s})}}),_c=lt.isNetworkHealthy,Lc=lt.didNetworkConnectivityTestFail});function bt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Vt.resolve(__dirname,"../../"):s=Vt.resolve(__dirname,""),s):process.cwd()}function Dn(s,e){return Me(s)?e||Vt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Vt.basename(s)}function at(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function Mc(){try{return Cd.node}catch{return""}}async function fm(s,e,t=!0){let r=await ut.promises.readdir(s,{withFileTypes:!0});await ut.promises.mkdir(e,{recursive:t});for(let i of r){let n=Vt.join(s,i.name),o=Vt.join(e,i.name);i.isDirectory()?await fm(n,o):await ut.promises.copyFile(n,o)}}async function Te(s){try{return await ut.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Vt,dm,mm,ut,Nw,Gt,Ze,Nn,Dc,je,Nc,Fc=I(()=>{"use strict";Vt=R(require("node:path"));hc();En();dm=R(require("unzip-stream")),mm=R(require("p-retry")),ut=require("node:fs"),Nw=3;Gt=async s=>{let e=await Promise.resolve().then(()=>(ze(),Qe));return(0,mm.default)(()=>e.download(s),{retries:Nw,factor:1})},Ze=async(s,e)=>{let t=await Gt(s);return ut.promises.writeFile(e,t.body)};Nn=async(s,e)=>{let t=Dn(s,e);return Me(s)?Ze(s,t):ut.promises.copyFile(s,t)},Dc=async s=>Me(s)?Gt(s):ut.promises.readFile(s),je=async(s,e)=>(0,ut.createReadStream)(s).pipe(dm.Extract({path:e})),Nc=s=>(0,ut.statSync)(s).size/1e6});var Ht={};z(Ht,{APPIUM_SESSION_MESSAGE:()=>Wc,CLI_MODE:()=>J,MOBILE_APP_SOURCE:()=>Mn,MOBILE_RUN_SKIP_REASON:()=>$c,OPERANDS:()=>ti,REGION_CONFIG:()=>Xr,X_HEADER_RUNNER_ID:()=>Vc,gridMessages:()=>Tt,gridTypes:()=>N,mobileWeb:()=>Bc,runnerStatus:()=>Uc,runnerTestStatus:()=>he,socketEventTypes:()=>_t,stepResult:()=>Jr,test:()=>jc,testRunStatus:()=>ei,testStatus:()=>et,timeoutMessages:()=>Pe});var Pe,ei,Uc,he,et,Tt,Bc,jc,_t,J,N,Jr,Mn,$c,Wc,Vc,Xr,ti,ae=I(()=>{"use strict";Pe={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout",TEST_REACHED_CUSTOM_TIMEOUT_MSG:"test-reached-custom-timeout"},ei={COMPLETED:"completed"},Uc={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},he={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},et={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},Tt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},Bc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},jc={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},_t={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},J={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},N={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",TESTIM_PRIVATE:"testimPrivate",LAMBDATEST:"lambdaTest",TESTIM_LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC"},Jr={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",KEEP_ALIVE_FAILED:"keep-alive-failed"},Mn={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},$c={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"},Vc="X-Testim-Runner-ID",Xr={TTL:1e3*60*60*24,CACHE_FN_NAME:"setRegionConfig"},ti=(t=>(t.AND="AND",t.OR="OR",t))(ti||{})});function ri(s,e){var t,r,i,n,o,a;return(t=s.browserstack)!=null&&t.browserName||(r=s.saucelabs)!=null&&r.browserName?[(i=s.browser)==null?void 0:i.toLowerCase()]:(n=s.testConfigNames)!=null&&n.length||(o=s.testConfigIds)!=null&&o.length||s.testPlan.length||s.testPlanIds.length||!s.browser?[...new Set(e.map(c=>{var l;return(l=c.runConfig)==null?void 0:l.browserValue}))]:[(a=s.browser)==null?void 0:a.toLowerCase()]}function Mw(){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 si,gm,tt,Fw,Uw,Bw,jw,$w,Gc,Hc,hm=I(()=>{"use strict";ae();si=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},gm=s=>Boolean(s.resultId&&s.source==="remote-run"),tt=(s,e)=>s.testStatus===et.QUARANTINE&&!gm(e)&&!e.runQuarantinedTests;Fw=s=>Boolean(s.loginMode),Uw=s=>Boolean(s.tunnelOnlyMode),Bw=s=>Boolean(s.createPrefechedData),jw=s=>Boolean(s.installLazyDepsMode),$w=s=>Boolean(s.agentMode),Gc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Hc=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function Un(s=0){return Fn.default.duration(s).format("HH:mm:ss.SSS")}function qc(s=0){return Fn.default.duration(s).asSeconds()}var Fn,ym,Bn,bm=I(()=>{"use strict";Fn=R(require("dayjs")),ym=R(require("dayjs/plugin/duration"));Fn.default.extend(ym.default);Bn=s=>{let e=Math.floor(s.asMinutes()),t=s.asSeconds()%60||0;return e>0?`${e} min ${Math.floor(t)} sec`:`${Math.floor(t)} sec`}});var ii,Yr,tr,Tm,Qr,wm=I(()=>{"use strict";ae();ii=s=>!(!s||"fileName"in s),Yr=(s,e)=>{if(e===N.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},tr=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},Tm=s=>s===N.TESTIM_TVC,Qr=(s,e)=>Tm(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function zc(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 vm=I(()=>{"use strict"});var Q={};z(Q,{OSS:()=>Zr,TESTIM_BROWSER_DIR:()=>wt,buildBasicHeader:()=>gc,calcPercentile:()=>Wn,copyDir:()=>fm,delay:()=>de,doesPathExist:()=>Te,download:()=>Gt,downloadAndSave:()=>Ze,extractElementId:()=>Fe,formatTimeoutDuration:()=>Bn,getArgsOnRemoteRunFailure:()=>Mw,getBrowserInfo:()=>Vw,getCdpAddressForHost:()=>Sr,getCliLocation:()=>bt,getDuration:()=>Un,getDurationSec:()=>qc,getEnginesVersion:()=>Mc,getEnvironmentGitBranch:()=>vr,getLinksFromUnescapeHTML:()=>ai,getLocalFileSizeInMB:()=>Nc,getMemorySnapshot:()=>zc,getPlanType:()=>$n,getRunConfigByBrowserName:()=>ni,getRunnerVersion:()=>at,getSource:()=>Nn,getSourceAsBuffer:()=>Dc,getSourcePath:()=>Dn,getTestUrl:()=>Ye,getUniqBrowsers:()=>ri,groupTestsByRetries:()=>Jc,guid:()=>ie,hasTestPlanFlag:()=>si,isAgentMode:()=>$w,isAppFromDevice:()=>ii,isAppFromDeviceDisabled:()=>Qr,isCreatePrefetchedDataMode:()=>Bw,isInstallLazyDepsMode:()=>jw,isLoginMode:()=>Fw,isMobileProject:()=>tr,isPromise:()=>Ic,isQuarantineAndNotRemoteRun:()=>tt,isRemoteRun:()=>gm,isTestimVirtualGrid:()=>Tm,isTunnelOnlyMode:()=>Uw,isURL:()=>Me,promiseAbort:()=>Rc,promiseFromCallback:()=>er,promiseMap:()=>ne,promiseTimeout:()=>ue,removePropertyFromObject:()=>jn,replaceArgsWithNoDashes:()=>Gc,sanitizeNumberValue:()=>wr,shouldBlockVirtualIosBuild:()=>Yr,spreadObjectToArgs:()=>Hc,unescapeHTML:()=>oi,unzipFile:()=>je});function wr(s,e){let t=Number(s);return Number.isNaN(t)||t<=0?e:t}function Vw(s){return s=s.toLowerCase(),Kc.find(e=>e.browserValue===s)}function ni(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Kc.find(n=>n.browserName.toLowerCase()===s||s.includes(n.synonyms))||Kc[0],i=Zr.find(n=>n.osName==="Windows 10");return e&&(e.platform?i=Zr.find(n=>n.sl.platform===e.platform):e.platformName&&(i=Zr.find(n=>n.sl.platformName===e.platformName))),t&&(t.os_version?i=Zr.find(n=>n.bs.os_version===t.os_version):t.platform&&(i=Zr.find(n=>n.bs.platform===t.platform))),es.merge(r,i)}function vr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function jn(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&jn(s[r],e,t))}function Fe(s){return s.ELEMENT||s[Xt]}function $n(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Jc(s=[]){return es.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((n,o)=>{let a=typeof n.retryCount=="number"?n.retryCount:1,c=typeof o.retryCount=="number"?o.retryCount:1;return a===c?n.startTime-o.startTime:(n.retryCount??0)-(o.retryCount??0)}),i=es.cloneDeep(r.at(-1));return i&&(i.retryTestResults=r,e.push(i)),e},[]).compact().value()}function oi(s){return xm.parseFromString(`<html><body>${s}</body></html>`,"text/html").documentElement.textContent}function ai(s){return[...xm.parseFromString(`<html><body>${s}</body></html>`,"text/html").getElementsByTagName("a")].map(t=>t.href).filter(Boolean)}async function Sr(s,e){let t=await Promise.resolve().then(()=>(ze(),Qe));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 Em,es,Im,Rm,Ww,wt,Sm,Zr,Kc,Wn,xm,F=I(()=>{"use strict";Em=R(require("os")),es=R(require("lodash")),Im=R(require("path")),Rm=require("linkedom");Gr();Fc();hm();bm();hc();xc();wm();vm();Ww=Em.homedir(),wt=Im.join(Ww,".testim-browser-profile"),Sm="133",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"}}],Kc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:Sm},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:Sm},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"}];Wn=(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,i)=>r-i),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]};xm=new Rm.DOMParser});var Xc={};z(Xc,{$schema:()=>Gw,default:()=>Jw,definitions:()=>Hw,properties:()=>Kw,required:()=>zw,type:()=>qw});var Gw,Hw,qw,zw,Kw,Jw,Am=I(()=>{Gw="http://json-schema.org/draft-07/schema#",Hw={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}}}},qw="object",zw=["entries"],Kw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Jw={$schema:Gw,definitions:Hw,type:qw,required:zw,properties:Kw}});async function Dm(){try{return await ue(Vn.promises.readFile(zn()).then(async s=>{let e=await Lm;return Qw(e,s)}),3e4)}catch{return{}}}function Qw(s,e){let t=e.slice(0,16),r=e.slice(16),i=Buffer.from(s),n=rs.createDecipheriv("aes-256-cbc",Buffer.concat([i,Buffer.alloc(32)],32),t),o=n.update(r);return JSON.parse(Buffer.concat([o,n.final()]))}function Lt(s,e,t=Xw,r=void 0){return async()=>{if(!km)return await s();let i=e;r&&(e+=JSON.stringify(r));let n=await Qc(e);if(n)return ci.debug("cache hit:",{fnName:e}),n;if(ci.debug("cache miss:",{fnName:e}),!Om)throw new Error(`Attempted to rebuild cache for ${i}. cache miss is not allowed with current run configuration`);let o=await s();return o&&await Zw(e,o,t),o}}async function Qc(s){let t=(await Kn)[s];if(!t)return;let{value:r,expiry:i}=t;if(!(i<Date.now())&&r)return r}async function Zw(s,e,t){if(Yc)throw ci.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 Kn;r[s]={value:e,expiry:Date.now()+t},_m=new Promise(i=>{qn=i}),Yw(r)}catch{ci.error("failed updating cache")}}async function ss(){let s=await Kn;Object.keys(s).forEach(e=>{delete s[e]})}function Nm(s){km=s}function ev(s=!0){Om=s}async function Mm(){try{return Yc=!0,await _m}finally{Yc=!1}}function Fm(s){Hn=s,Kn=Dm()}var Vn,Gn,rs,Cm,ci,Hn,Pm,qn,km,Om,Yc,_m,Lm,Xw,zn,Kn,Yw,Um,Bm,Ox,jm,rr=I(()=>{"use strict";Vn=R(require("fs")),Gn=R(require("path")),rs=R(require("crypto"));F();Cm=require("lodash");W();ci=C("local cache"),Hn=Gn.resolve(bt(),"testim-cache"),km=!0,Om=!0,Yc=!1,_m=new Promise(s=>{qn=s}),Lm=new Promise(s=>{Pm=s}),Xw=1e3*60*60*3,zn=()=>Gn.resolve(Gn.resolve(Hn,"testim.cache"));Kn=Dm(),Yw=(0,Cm.debounce)(async s=>{let e;try{let t=await Lm,r=rs.randomBytes(16),i=JSON.stringify(s),n=Buffer.from(t),o=rs.createCipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),r),a=Buffer.concat([r,o.update(i),o.final()]);await Te(Hn)||await Vn.promises.mkdir(Hn,{recursive:!0}),await Vn.promises.writeFile(zn(),a)}catch(t){ci.error("failed saving cache",{err:t}),e=t}qn(e?{success:!1,error:e}:{success:!0})},200);Um=Pm,Bm=Nm.bind(void 0,!1),Ox=Nm.bind(void 0,!0),jm=()=>ev(!1)});function Jn(){return{cliLocation:bt(),userInfo:is.userInfo(),platform:is.platform(),release:is.release()}}var is,Zc=I(()=>{"use strict";is=R(require("node:os"));F()});function tv(s){try{return Xn.resolve(Xn.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 sr(s){let e=tv(s);return require(e)}var Xn,li=I(()=>{"use strict";Xn=R(require("path"))});function rv(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function sv(s){return/The "to" argument must be of type string./.exec(s)}function Gm(s,e,t){let r=rv(s),i=sv(s);return r||i?(Vm.info("Failed to install package due to insufficient write access",{...Jn(),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.
|