UNPKG

@testim/testim-cli

Version:

Command line interface for running Testing on your CI

12 lines (10 loc) 470 kB
#! /usr/bin/env node "use strict";var jw=Object.create;var Sn=Object.defineProperty;var $w=Object.getOwnPropertyDescriptor;var Ww=Object.getOwnPropertyNames;var Vw=Object.getPrototypeOf,Gw=Object.prototype.hasOwnProperty;var I=(s,e)=>()=>(s&&(e=s(s=0)),e);var q=(s,e)=>{for(var t in e)Sn(s,t,{get:e[t],enumerable:!0})},Hd=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ww(e))!Gw.call(s,i)&&i!==t&&Sn(s,i,{get:()=>e[i],enumerable:!(r=$w(e,i))||r.enumerable});return s};var R=(s,e,t)=>(t=s!=null?jw(Vw(s)):{},Hd(e||!s||!s.__esModule?Sn(t,"default",{value:s,enumerable:!0}):t,s)),Me=s=>Hd(Sn({},"__esModule",{value:!0}),s);var Be={};q(Be,{log:()=>M,measure:()=>qw});function M(...s){if(!zd)return;let e=Date.now();console.log(`${e-Hw} ${e-qd} `,...s),qd=e}function qw(s,e){if(!zd)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var zd,Hw,qd,je=I(()=>{"use strict";zd=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,Hw=Date.now(),qd=Date.now()});var Qt,Gr=I(()=>{"use strict";Qt="element-6066-11e4-a52e-4f735466cecf"});function ce(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 ze(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 Ic(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function De(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var Rc=I(()=>{"use strict"});var Cc,Kd,Jd,kn=I(()=>{Cc={"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.1.1"},Kd={"@applitools/eyes-sdk-core":"13.11.34-legacy.1","@testim/shared-logger":"workspace:*","@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.4",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.4",express:"4.22.1",fkill:"7.2.1","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jsonwebtoken:"9.0.3",linkedom:"0.18.0",lodash:"4.17.23","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:"9.18.4",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.17.1",xml2js:"0.6.2",yaml:"2.2.2"},Jd={node:">= 18.0.0"}});var br,Tr,Xd,qs,Jw,Zt,Yd,Qd,On,st,Zd,be,em,tm,_n,Fe,Ac,rm,Ln,sm,Dn,Pc,kc,im,nm,Ux,Bx,om,am,cm,lm,Oc,um,_c,pm,zs,Ks,le=I(()=>{"use strict";br=process.env.SERVICES_HOST||"https://services.testim.io",Tr="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:br,br=process.env.SERVICES_HOST);Xd=process.env.TESTIM_REGION||"us-west-2",qs=process.env.RUNNER_ENVIRONMENT||"production",Jw={production:"",staging:".staging",development:".dev"},Zt=process.env.EXTENSION_SP_S3_HOST||`https://playback-components${Jw[qs]||""}.testim.io`,Yd=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),Qd=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),On=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),st=process.env.EDITOR_URL,Zd=process.env.WEBSOCKET_HOST||`${br}/ws`,be=()=>br,em=parseInt(process.env.LOGGER_CONSOLE||"0",10),tm=parseInt(process.env.LOGGER_DEBUG||"0",10),_n=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),Fe=parseInt(process.env.IS_ON_PREM||"0",10),Ac=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,rm=parseInt(process.env.DEBUG_MODE||"0",10),Ln=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,sm=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",Dn=process.env.CORALOGIX_PRIVATE_KEY||"cxtp_cLWBXCtKOy35gMEA27eFjtY4dqrLo6",Pc=process.env.BETTERSTACK_INGEST_URL_US||"https://s1764893.us-east-9.betterstackdata.com",kc=process.env.BETTERSTACK_TOKEN_US||"hZwS8Qt91YwDSDSK6CGicabR",im=process.env.BETTERSTACK_INGEST_URL_EU||"",nm=process.env.BETTERSTACK_TOKEN_EU||"",Ux=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),Bx=process.env.APPIUM_VERSION||"1.10.1",om=process.env.GATEWAY_URL,am=()=>process.env.EXTENSION_SERVICES_HOST||br,cm=300*1e3,lm=40,Oc=process.env.TDC_MOBILE_API_BASE_URL||"https://api.tdc.tricentis-cloud.com",um=process.env.TDC_DEVICES_API_PATH||"v0",_c=process.env.TDC_APPS_API_PATH||"v1",pm=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",zs=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",Ks=s=>{br=s,process.env.SERVICES_HOST=s,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:br}});var dm,Nn,mm=I(()=>{"use strict";dm=R(require("superagent"));le();Nn=class{constructor(e){this.logs=[];this.url=process.env.CORALOGIX_URL||"https://ingress.coralogix.com/logs/v1/bulk",this.token=Dn,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=dm.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 gm={};q(gm,{CoralogixTransport:()=>Lc});var fm,Xw,Yw,Lc,hm=I(()=>{"use strict";fm=R(require("winston-transport"));mm();Xw={debug:1,silly:2,verbose:2,silent:2,info:3,http:3,warn:4,warning:4,error:5,critical:6,crit:6},Yw=["err","error","reason","e"],Lc=class extends fm.default{constructor(e){super(e),this.name="Coralogix Transport",this.category=e.category,this.logger=new Nn({applicationName:"testim",subsystemName:"runner"})}log(e,t){let{category:r,level:i,message:n,meta:o={},...a}=e,c={...o,...a},l={severity:Xw[i],text:n,category:r||this.category};c.className&&(l.className=c.className),c.methodName&&(l.methodName=c.methodName),c.threadId&&(l.threadId=c.threadId),delete c.className,delete c.methodName,delete c.threadId,delete c.category,delete c.level,delete c.message;let d=!1;o instanceof Error&&(d=!0,c.msg=o.message+o.stack,n&&(c.msg=`${n} ${c.msg}`));for(let m of Yw)o[m]instanceof Error&&(c[m]={message:o[m].message,stack:o[m].stack,name:o[m].name,type:o[m].type,cause:o[m].cause,...o[m]});Object.keys(c).length>0&&(n&&!d&&(c.msg=n),l.text=JSON.stringify(c)),this.logger.addLog(l),t(null,!0)}setProxy(e){this.logger.setProxy(e)}async waitForFlush(){return await this.logger.waitForFlush()}}});var Ke,ym,bm=I(()=>{"use strict";Ke={debug:1,verbose:2,info:3,warn:4,error:5,fatal:6},ym={1:"debug",2:"verbose",3:"info",4:"warn",5:"error",6:"fatal"}});function Dc(){return typeof global<"u"&&{}.toString.call(global)==="[object global]"}function Nc(s,e){return async t=>{await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(t)})}}function Mc(s,e,t){let r=require("superagent");return async i=>{let n=r.post(s).set("Content-Type","application/json").set("Authorization",`Bearer ${e}`).send(i),o=t==null?void 0:t();o&&n.proxy(o),await n}}var Fc=I(()=>{"use strict"});var Js,Tm=I(()=>{"use strict";Fc();Js=class{constructor(e){this.buffer=[];e.sendLogs?this.sendLogs=e.sendLogs:Dc()?this.sendLogs=Mc(e.ingestUrl,e.token,e.getProxy):this.sendLogs=Nc(e.ingestUrl,e.token),this.maxBufferSize=e.maxBufferSize??50,this.flushIntervalMs=e.flushIntervalMs??2e3,this.flushInterval=setInterval(()=>this.flush(),this.flushIntervalMs)}addLog(e){this.buffer.push(e),this.buffer.length>=this.maxBufferSize&&this.flush()}async flush(){if(this.buffer.length===0)return;let e=[...this.buffer];this.buffer=[];try{await this.sendLogs(e)}catch{}}async waitForFlush(){clearInterval(this.flushInterval),await this.flush()}destroy(){clearInterval(this.flushInterval)}}});var wm=I(()=>{"use strict";bm();Tm();Fc()});var Sm={};q(Sm,{BetterStackWinstonTransport:()=>Uc});var vm,Qw,Zw,Uc,Em=I(()=>{"use strict";vm=R(require("winston-transport"));wm();Qw={debug:Ke.debug,silly:Ke.verbose,verbose:Ke.verbose,silent:Ke.verbose,info:Ke.info,http:Ke.info,warn:Ke.warn,warning:Ke.warn,error:Ke.error,critical:Ke.fatal,crit:Ke.fatal},Zw=["err","error","reason","e"],Uc=class extends vm.default{constructor(e){super(e),this.name="BetterStack Transport",this.logger=new Js({ingestUrl:e.ingestUrl,token:e.token,getProxy:()=>this.proxy})}log(e,t){let{category:r,level:i,message:n,meta:o={},...a}=e,c={...o,...a},l=Qw[i]??Ke.info,d={dt:new Date().toISOString(),level:ym[l],severity:l,message:n,category:r||"ROOT",applicationName:"testim",subsystemName:"runner"};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;o instanceof Error&&(m=!0,c.msg=o.message+o.stack,n&&(c.msg=`${n} ${c.msg}`));for(let p of Zw)o[p]instanceof Error&&(c[p]={message:o[p].message,stack:o[p].stack,name:o[p].name,type:o[p].type,cause:o[p].cause,...o[p]});Object.keys(c).length>0&&(n&&!m&&(c.msg=n),Object.assign(d,c)),this.logger.addLog(d),t(null,!0)}setProxy(e){this.proxy=e}async waitForFlush(){return await this.logger.waitForFlush()}}});var Am={};q(Am,{featureFlagsService:()=>O});var F,Rm,xm,Cm,ev,tv,rv,Im,Mn,Bc,O,pe=I(()=>{"use strict";F=R(require("rox-node")),Rm=R(require("node-fetch")),xm=require("eventsource");W();U();le();Cm=A("FeatureFlagsService"),ev=!Fe&&!0&&!om,tv=2e4,rv=3600*24,Im=["labs","disabled","enabled"],Mn=class extends F.default.RoxString{constructor(e="disabled"){super(e,Im)}getValue(){let e=super.getValue();return Im.includes(e)?e:(Cm.warn('unexpected value for lab feature flag. Falling back to value "labs"',{featureFlagName:this.name,value:e}),"labs")}},Bc=class{constructor(){this.flags={useNewWSCLI:new F.default.Flag,useSafariWebdriverVisibilityChecks:new F.default.Flag,useClickimVisibilityChecks:new F.default.Flag,runGetElementCodeInAut:new F.default.Flag,enableFrameSwitchOptimization:new F.default.Flag,maximumJsResultSize:new F.default.RoxNumber(2e3*1024),skipFileInputClicks:new F.default.Flag,errorMessageOnBadNetwork:new F.default.Flag(!0),warnOnBadNetwork:new F.default.Flag(!1),overrideAzureStorageUrl:new F.default.Flag,autoSaveDownloadFileFireFox:new F.default.Flag(!0),safariSelectOptionDispatchEventOnSelectElement:new F.default.Flag(!0),experimentalPreCodeCompilation:new F.default.Flag(!0),experimentalAsyncCustomCode:new F.default.Flag,useSameBrowserForMultiTests:new Mn("labs"),highSpeedMode:new Mn,usePortedHtml5DragDrop:new F.default.Flag,testNamesToBeforeSuiteHook:new F.default.Flag,addCustomCapabilities:new F.default.RoxString("{}"),addCustomLTtunnelNTLMOptions:new F.default.RoxString("{}"),LTNetworkCapabilities:new F.default.Flag,downloadToBase64:new F.default.Flag,publicGridURL:new F.default.RoxString("public-grid.testim.io"),allowAppFromDeviceRuns:new F.default.Flag(!0),unsupportedCapsFields:new F.default.RoxString("[]"),dontFocusOnInit:new F.default.Flag,retryOnSeleniumHubError:new F.default.Flag,enableLambdaTestTunnelNTLM:new F.default.Flag,enableLambdaTestTunnelSkipUpgrade:new F.default.Flag,tdcHsPreventNetworkCapture:new F.default.Flag,enableBatchTDC:new F.default.Flag,clearRunnerFileCache:new F.default.Flag,forceTurboModeIfNeeded:new F.default.Flag,redisSlotManager:new F.default.Flag,tunnelBinaryNewVersion:new F.default.Flag(!1),encryptedCredentials:new F.default.Flag,computePackagePathFromPackageJsonExports:new F.default.Flag,sendExtensionOnEdgeNonLinux:new F.default.Flag,reuseCliPkgInstallFolder:new F.default.Flag,getPublicIpFrom3rdPartyServices:new F.default.Flag,chromedriverCdnBinariesUrl:new F.default.RoxString(""),sfdcHybridCompany:new F.default.Flag,allowFixingAppIdStructure:new F.default.Flag,enableAppium2BrowserStack:new F.default.Flag,increaseTDCRequestTimeout:new F.default.Flag,accessTokenExpiryMargin:new F.default.RoxNumber(300*1e3),useMV3Extension:new F.default.Flag,testimHeadlessExtensionDownloadUrl:new F.default.RoxString("",[]),applyMobileRestrictionFromDate:new F.default.RoxNumber(17235072e5),removeMobileTrialRestrictions:new F.default.Flag,appiumConnectionRetryCount:new F.default.RoxNumber(0),appiumConnectionRequestTimeout:new F.default.RoxNumber(12e4),DFBrowserVersion:new F.default.RoxString("latest",["latest","latest-1","latest-2"]),DFAcceptInsecureOrigins:new F.default.RoxString("http://jsbin.testim.io"),enableFixForCustomExtensionForLT:new F.default.Flag(!1),enableTestPlanAggregation:new F.default.Flag,secrets:new F.default.Flag,chromeArgsDisableFeatures:new F.default.RoxString(""),useNgrokTunnel:new F.default.Flag(!1),disableCoralogixLogger:new F.default.Flag(!1),disableBetterStackLogger:new F.default.Flag(!1)},F.default.register("default",this.flags)}setProjectId(e){F.default.setCustomStringProperty("projectId",e)}setProjectType(e){F.default.setCustomStringProperty("projectType",e)}setCompanyProductType(e){F.default.setCustomStringProperty("productType",e)}setCompanyId(e){F.default.setCustomStringProperty("companyId",e)}setPlanType(e){F.default.setCustomStringProperty("planType",e)}setIsPOC(e){F.default.setCustomBooleanProperty("isPOC",e)}setIsStartUp(e){F.default.setCustomBooleanProperty("isStartUp",e)}setRunnerMode(e){F.default.setCustomStringProperty("runnerMode",e)}setRunnerEnvironment(e){F.default.setCustomStringProperty("runnerEnvironment",e)}async fetch({proxy:e}){let t,r,i;if(!ev)return;if(e){t=require("https-proxy-agent").HttpsProxyAgent;let o=e?new t(e):void 0;r=(a,c)=>(0,Rm.default)(a,{...c,agent:o}),i=function(a){return new xm.EventSource(a,{fetch:r})}}let n={fetchIntervalInSec:rv,fetchFunction:r,eventSourceImpl:i};return ae(F.default.setup(sm,n),tv).catch(o=>Cm.error("failed to get feature flag status",o))}},O=new Bc});function nv(){let s=[];if(!Fe){if(Dn){let{CoralogixTransport:r}=(hm(),Me(gm));er.push(new r({category:"ROOT"}))}s.push(...er)}let e=async()=>{await Promise.all(er.map(r=>r.waitForFlush()))},t=r=>er.forEach(i=>i.setProxy(r));if(em){let r={depth:5,colors:!0};s.push(new gt.transports.Console({format:gt.format.combine(gt.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),gt.format.timestamp({format:"HH:mm:ss:SSS"}),gt.format.printf(i=>`[${i.timestamp}] ${i.level} ${i.category}: ${i.message} ${Un.inspect(i.meta,r)}`))}))}return[s,e,t]}function Wc(){return Nm}function Mm(s,e){if(Pm||Fe||!s||!e)return;Nm={ingestUrl:s.startsWith("https://")?s:`https://${s}`,sourceToken:e};let{BetterStackWinstonTransport:r}=(Em(),Me(Sm)),i=new r({ingestUrl:s,token:e});er.push(i),$c.add(i),Pm=!0,Vc()}function Vc(){let{featureFlagsService:s}=(pe(),Me(Am));for(let e of[...er])(e.name==="Coralogix Transport"&&s.flags.disableCoralogixLogger.isEnabled()||e.name==="BetterStack Transport"&&s.flags.disableBetterStackLogger.isEnabled())&&($c.remove(e),er=er.filter(r=>r!==e))}function Um(s){jc=s}function Bm(s){Fm=s}function jm(s){Fe||!s||cv(s)}function Om(s){return{projectId:Fm,time:new Date().toISOString(),region:Hr.getRegion(),...jc&&!s&&{executionId:jc}}}function A(s){return new Hr($c.child({category:s}))}var _m,gt,Un,Fn,Lm,sv,iv,er,Pm,km,Dm,ov,av,cv,lv,uv,$c,Nm,jc,Fm,Hr,W=I(()=>{"use strict";_m=R(require("node:os")),gt=R(require("winston"));le();Un=R(require("node:util"));U();Fn=R(require("chalk")),Lm=R(require("dayjs"));U();sv=_m.hostname(),iv=it(),er=[],Pm=!1;km={depth:5,colors:!0},Dm=(s,e,t)=>{let r=`[${(0,Lm.default)().format("HH:mm:ss:SSS")}]`,i=Un.inspect(e,km),n=Un.inspect(t,km);return`${Fn.default.white(r)} ${Fn.default.reset()}SessionPlayer-${Fn.default.red(s)} ${i} ${n}`},[ov,av,cv]=nv(),lv=tm?"debug":"info",uv={release:!1,branch:"test"},$c=gt.createLogger({levels:gt.config.syslog.levels,level:lv,transports:ov,defaultMeta:{name:"runner",hostname:sv,nodeVersion:process.version,runnerVersion:iv,...uv}});jc=null,Fm=null;Hr=class s{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){s.region=e}static getRegion(){return s.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;r.user&&(r.user=Gc(r.user,["email"]));try{this._logger.log(e,{meta:r,message:t,...Om(i)})}catch(n){try{this._logger.log("crit",{message:`failed to log message ${n.message}, ${n.stack}`,...Om(i)})}catch{}}}waitForFlush(){return av()}}});var Wn,qr,C,tr,wr,Ot,Bn,zr,ue,Xs,nt,rr,_t,jn,Kr,$n,Ys,Q=I(()=>{"use strict";Wn=require("p-retry"),qr=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},C=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},tr=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},wr=class extends Error{constructor(t,r){super(t instanceof Error?t.message:t,{cause:t});this.type=r}},Ot=class extends Wn.AbortError{},Bn=class extends Wn.AbortError{},zr=class extends Wn.AbortError{},ue=class extends Error{},Xs=class extends Error{},nt=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},rr=class extends nt{constructor(){super(...arguments);this.name="GridConcurrencyError"}},_t=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},jn=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},Kr=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`)}},Ys=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function Hc(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function ie(s){return(0,Vm.setTimeout)(s)}function qc(s,e){let t=new Promise((r,i)=>{e.onabort=()=>{i(e.reason)}});return Promise.race([s,t])}function ae(s,e,t="Timeout Error"){On&&!$m&&($m=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new ue(t);return e=On?Number(On)||6e5:e,Promise.race([s,ie(e).then(()=>{throw r})])}async function ne(s,e,{concurrency:t}={}){if(t){Wm||=(await import("p-limit")).default;let r=Wm(t);return await Promise.all(Array.from(s,(i,n)=>r(()=>e(i,n))))}return await Promise.all(Array.from(s,e))}function sr(s){return new Promise((e,t)=>{s((r,i)=>r?t(r):e(i))})}var Vm,$m,Wm,zc=I(()=>{"use strict";Vm=require("timers/promises");Q();le();$m=!1});var Zs,Gm,dv,Qs,Hm,mv,fv,qm,zm=I(()=>{"use strict";Zs=R(require("lodash"));le();Gm=require("dns");W();zc();dv=A("http-request-counters"),Qs=!1,Hm=async()=>{if(Fe)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=!!await ne(s,t=>Gm.promises.lookup(t));return e||(Qs=!0),e}catch{return dv.error("network connectivity test failed"),Qs=!0,!1}},mv=Zs.throttle(Hm,10*1e3),fv=60*1e3*15,qm=()=>{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)},fv)}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),Qs||mv(),a}}}async function r(){if(Qs||!await Hm())return!1;let i=Zs.sum([...s.fail.values()]),n=Zs.sum([...s.call.values()]);return i<n*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Qs,t}});var Je={};q(Je,{deleteReq:()=>ei,didNetworkConnectivityTestFail:()=>el,download:()=>Qc,get:()=>ve,getFullRes:()=>wv,getText:()=>Xc,head:()=>vv,isNetworkHealthy:()=>Zc,post:()=>$e,postForm:()=>ti,postText:()=>Tv,put:()=>Yc});function hv(){return global.caFileContent}function yv(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function bv(){return!("proxy"in ht.default.Request.prototype)&&global.SuperagentProxy&&global.SuperagentProxy(ht.default),global.proxyUri}function vr(s,e=!1){let t=hv();t&&s.ca(t);let r=!e&&bv();r&&s.proxy(r)}async function Km(s,e,t={},r=Jr,i=0){let n=ht.default.post(s).send(e).timeout(r).set(t);vr(n),i&&n.retry(i);try{return await n}catch(o){throw o.url=s,o.originalRequestTimeout=r,o.additionalSetHeaders=t,o}}async function Jc(s,e,t={},r=Jr,{isBinary:i=!1,skipProxy:n=!1}={}){let o=ht.default.get(s).query(e||{}).timeout(r).set(t);return i&&o.buffer(!0),vr(o,n),await o}var ht,Kc,ot,Jr,gv,Vt,ei,$e,ti,Xc,Tv,ve,wv,vv,Yc,Qc,Zc,el,We=I(()=>{"use strict";ht=R(require("superagent"));W();zm();Kc=A("http-request"),ot=qm(),Jr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,gv=6e4;Vt=(s,e,t)=>{let r=e.response;e.response instanceof ht.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 Kc.error(s,{...t,error:e,logErrorAndRethrowStack:i}),e};ei=ot(async(s,e={},t={},r=Jr)=>{try{let i=ht.default.delete(s).send(e).timeout(r).set(t);vr(i);let n=await i;return n.type==="text/plain"?n.text:n.body}catch(i){return Vt("failed to delete request",i,{url:s})}}),$e=ot(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{let n=await Km(s,e,t,r,i);return n.type==="text/plain"?n.text:n.body}catch(n){return Vt("failed to post request",n,{url:s})}});ti=ot(async(s,e,t,r={},i=Jr)=>{let n=ht.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)}),vr(n);try{let o=await n;return o.type==="text/plain"?o.text:o.body}catch(o){return Vt("failed to post request",o,{url:s})}});Xc=ot(async(s,e,t)=>{try{return(await Jc(s,e,t)).text}catch(r){return Vt("failed to getText request",r,{url:s,query:e})}}),Tv=ot(async({url:s,body:e,headers:t,timeout:r,retry:i})=>{try{return(await Km(s,e,t,r,i)).text}catch(n){return Vt("failed to post request",n,{url:s})}}),ve=ot(async(s,e,t,r,i)=>{try{return(await Jc(s,e,t,r,i)).body}catch(n){return Vt("failed to get request",n,{url:s,query:e})}}),wv=ot((s,e,t,r)=>Jc(s,e,t,r)),vv=ot(async s=>{let e=ht.default.head(s).timeout(Jr);vr(e);try{return await e}catch(t){return Vt("failed to head request",t,{url:s})}}),Yc=ot(async(s,e,t={},r=Jr)=>{let i=ht.default.put(s).send(e).timeout(r).set(t);vr(i);try{return(await i).body}catch(n){return Vt("failed to put request",n,{url:s})}}),Qc=ot(async s=>{Kc.info("start to download",{url:s});let e=ht.default.get(s).set("User-Agent","Testim.io").timeout(gv).buffer(!0).parse(yv);vr(e);try{let t=await e;return Kc.info("finished to download",{url:s}),t}catch(t){return Vt("failed to download",t,{url:s})}}),Zc=ot.isNetworkHealthy,el=ot.didNetworkConnectivityTestFail});function yt(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Gt.resolve(__dirname,"../../"):s=Gt.resolve(__dirname,""),s):process.cwd()}function Vn(s,e){return De(s)?e||Gt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Gt.basename(s)}function it(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function nl(){try{return Jd.node}catch{return""}}async function Zm(s,e,t=!0){let r=await at.promises.readdir(s,{withFileTypes:!0});await at.promises.mkdir(e,{recursive:t});for(let i of r){let n=Gt.join(s,i.name),o=Gt.join(e,i.name);i.isDirectory()?await Zm(n,o):await at.promises.copyFile(n,o)}}async function Te(s){try{return await at.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Gt,Jm,Xm,Ym,tl,Qm,at,Sv,Ht,Xe,Gn,rl,Ye,sl,il,ol,al=I(()=>{"use strict";Gt=R(require("node:path")),Jm=R(require("node:child_process"));Rc();kn();Xm=R(require("unzip-stream")),Ym=R(require("p-retry")),tl=R(require("node:fs")),Qm=R(require("node:crypto")),at=require("node:fs"),Sv=3;Ht=async s=>{let e=await Promise.resolve().then(()=>(We(),Je));return(0,Ym.default)(()=>e.download(s),{retries:Sv,factor:1})},Xe=async(s,e)=>{let t=await Ht(s);return at.promises.writeFile(e,t.body)};Gn=async(s,e)=>{let t=Vn(s,e);return De(s)?Xe(s,t):at.promises.copyFile(s,t)},rl=async s=>De(s)?Ht(s):at.promises.readFile(s),Ye=async(s,e)=>(0,at.createReadStream)(s).pipe(Xm.Extract({path:e})),sl=(s,e)=>new Promise((t,r)=>{var o;let i=Jm.spawn("tar",["-xzf",s,"-C",e],{stdio:["ignore","pipe","pipe"]}),n="";(o=i.stderr)==null||o.on("data",a=>{n+=a.toString()}),i.on("error",a=>{r(new Error(`Failed to extract tgz file ${s}: ${a.message}. ${n}`))}),i.on("close",a=>{a!==0&&r(new Error(`Failed to extract tgz file ${s}: tar exited with code ${a}. ${n}`)),t()})}),il=s=>(0,at.statSync)(s).size/1e6;ol=async(s,e,t="sha256",r="hex")=>{let i=await tl.promises.readFile(s),n=Qm.createHash(t).update(i).digest(r);if(n!==e)throw await tl.promises.unlink(s),new Error(`Checksum mismatch for ${s}. Expected ${e}, got ${n}`)}});var qt={};q(qt,{APPIUM_SESSION_MESSAGE:()=>dl,CLI_MODE:()=>J,MOBILE_APP_SOURCE:()=>Hn,MOBILE_RUN_SKIP_REASON:()=>pl,OPERANDS:()=>si,REGION_CONFIG:()=>Yr,SEGMENT_CONFIG:()=>Qr,X_HEADER_RUNNER_ID:()=>ml,gridMessages:()=>bt,gridTypes:()=>N,mobileWeb:()=>ll,runnerStatus:()=>cl,runnerTestStatus:()=>he,socketEventTypes:()=>Lt,stepResult:()=>Xr,test:()=>ul,testRunStatus:()=>ri,testStatus:()=>Qe,timeoutMessages:()=>Ae});var Ae,ri,cl,he,Qe,bt,ll,ul,Lt,J,N,Xr,Hn,pl,dl,ml,Yr,Qr,si,oe=I(()=>{"use strict";Ae={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"},ri={COMPLETED:"completed"},cl={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"},Qe={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},bt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},ll={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},ul={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Lt={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={LOCAL:"local",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"},Xr={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"},Hn={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},pl={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},dl={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"},ml="X-Testim-Runner-ID",Yr={TTL:1e3*60*60*24,CACHE_FN_NAME:"setRegionConfig"},Qr={TTL:1e3*60*60*72,CACHE_FN_NAME:"setSegmentConfig"},si=(t=>(t.AND="AND",t.OR="OR",t))(si||{})});function ii(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 Ev(){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 ni,ef,Ze,Iv,Rv,xv,Cv,Av,fl,gl,tf=I(()=>{"use strict";oe();ni=s=>{var e,t;return!!((e=s.testPlan)!=null&&e.length||(t=s.testPlanIds)!=null&&t.length)},ef=s=>!!(s.resultId&&s.source==="remote-run"),Ze=(s,e)=>s.testStatus===Qe.QUARANTINE&&!ef(e)&&!e.runQuarantinedTests;Iv=s=>!!s.loginMode,Rv=s=>!!s.tunnelOnlyMode,xv=s=>!!s.createPrefechedData,Cv=s=>!!s.installLazyDepsMode,Av=s=>!!s.agentMode,fl=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},gl=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function zn(s=0){return qn.default.duration(s).format("HH:mm:ss.SSS")}function hl(s=0){return qn.default.duration(s).asSeconds()}var qn,rf,Kn,sf=I(()=>{"use strict";qn=R(require("dayjs")),rf=R(require("dayjs/plugin/duration"));qn.default.extend(rf.default);Kn=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 oi,Zr,ir,nf,es,of=I(()=>{"use strict";oe();oi=s=>!(!s||"fileName"in s),Zr=(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},ir=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},nf=s=>s===N.TESTIM_TVC,es=(s,e)=>nf(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function yl(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 af=I(()=>{"use strict"});function lf(s){let e=(0,cf.default)(s);return e.validForNewPackages||e.validForOldPackages}function bl(s){let e=s.filter(t=>!lf(t.packageName)).map(t=>t.packageName);return e.length>0?e:null}function Tl(s){let e=s.filter(t=>t&&(t.includes("../")||t.includes("..\\"))).map(t=>t);return e.length>0?e:null}var cf,wl=I(()=>{"use strict";cf=R(require("validate-npm-package-name"))});var Y={};q(Y,{OSS:()=>ts,TESTIM_BROWSER_DIR:()=>Tt,buildBasicHeader:()=>Ic,calcPercentile:()=>Yn,copyDir:()=>Zm,delay:()=>ie,doesPathExist:()=>Te,download:()=>Ht,downloadAndSave:()=>Xe,extractElementId:()=>Ue,extractTgz:()=>sl,formatTimeoutDuration:()=>Kn,getArgsOnRemoteRunFailure:()=>Ev,getBrowserInfo:()=>kv,getCdpAddressForHost:()=>Ir,getCliLocation:()=>yt,getDuration:()=>zn,getDurationSec:()=>hl,getEnginesVersion:()=>nl,getEnvironmentGitBranch:()=>Er,getInvalidPackageNames:()=>bl,getInvalidPackagePaths:()=>Tl,getLinksFromUnescapeHTML:()=>li,getLocalFileSizeInMB:()=>il,getMemorySnapshot:()=>yl,getPlanType:()=>Xn,getRunConfigByBrowserName:()=>ai,getRunnerVersion:()=>it,getSource:()=>Gn,getSourceAsBuffer:()=>rl,getSourcePath:()=>Vn,getTestUrl:()=>ze,getUniqBrowsers:()=>ii,groupTestsByRetries:()=>Sl,guid:()=>ce,hasTestPlanFlag:()=>ni,isAgentMode:()=>Av,isAppFromDevice:()=>oi,isAppFromDeviceDisabled:()=>es,isCreatePrefetchedDataMode:()=>xv,isInstallLazyDepsMode:()=>Cv,isLoginMode:()=>Iv,isMobileProject:()=>ir,isPromise:()=>Hc,isQuarantineAndNotRemoteRun:()=>Ze,isRemoteRun:()=>ef,isTestimVirtualGrid:()=>nf,isTunnelOnlyMode:()=>Rv,isURL:()=>De,isValidPackageName:()=>lf,maskObjectFields:()=>Gc,maskSecret:()=>gf,promiseAbort:()=>qc,promiseFromCallback:()=>sr,promiseMap:()=>ne,promiseTimeout:()=>ae,removePropertyFromObject:()=>Jn,replaceArgsWithNoDashes:()=>fl,sanitizeNumberValue:()=>Sr,shouldBlockVirtualIosBuild:()=>Zr,spreadObjectToArgs:()=>gl,unescapeHTML:()=>ci,unzipFile:()=>Ye,verifyChecksum:()=>ol});function Sr(s,e){let t=Number(s);return Number.isNaN(t)||t<=0?e:t}function kv(s){return s=s.toLowerCase(),vl.find(e=>e.browserValue===s)}function ai(s,e,t){s=s==null?void 0:s.toLowerCase();let r=vl.find(n=>n.browserName.toLowerCase()===s||s.includes(n.synonyms))||vl[0],i=ts.find(n=>n.osName==="Windows 10");return e&&(e.platform?i=ts.find(n=>n.sl.platform===e.platform):e.platformName&&(i=ts.find(n=>n.sl.platformName===e.platformName))),t&&(t.os_version?i=ts.find(n=>n.bs.os_version===t.os_version):t.platform&&(i=ts.find(n=>n.bs.platform===t.platform))),rs.merge(r,i)}function Er(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH||process.env.GITHUB_BRANCH_NAME}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 Ue(s){return s.ELEMENT||s[Qt]}function Xn(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function Sl(s=[]){return rs.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].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=rs.cloneDeep(r.at(-1));return i&&(i.retryTestResults=r,e.push(i)),e},[]).compact().value()}function ci(s){return ff.parseFromString(`<html><body>${s}</body></html>`,"text/html").documentElement.textContent}function li(s){return[...ff.parseFromString(`<html><body>${s}</body></html>`,"text/html").getElementsByTagName("a")].map(t=>t.href).filter(Boolean)}async function Ir(s,e){let t=await Promise.resolve().then(()=>(We(),Je));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")}}function gf(s,{visiblePrefixLength:e=1,visibleSuffixLength:t=0,maskCharacter:r="*"}={}){if(!(s!=null&&s.length))return"";if(s.length-(e+t)<s.length*.8)return"".padEnd(s.length,r);let o=s.slice(0,e),a=s.slice(s.length-t);return`${o}${r.repeat(Math.ceil(s.length*.9))}${a}`}function Gc(s,e){let t=new Set(e),r=i=>{if(!(i===null||typeof i!="object")){if(Array.isArray(i)){i.forEach(n=>r(n));return}for(let n of Object.keys(i))if(t.has(n)){let o=i[n];o!=null&&(i[n]=gf(String(o)))}else typeof i[n]=="object"&&r(i[n])}};return r(s),s}var pf,rs,df,mf,Pv,Tt,uf,ts,vl,Yn,ff,U=I(()=>{"use strict";pf=R(require("os")),rs=R(require("lodash")),df=R(require("path")),mf=require("linkedom");Gr();al();tf();sf();Rc();zc();of();af();wl();Pv=pf.homedir(),Tt=df.join(Pv,".testim-browser-profile"),uf="133",ts=[{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 Tahoe",bs:{os:"OS X",os_version:"Tahoe",safari_version:"26.2"},sl:{},lt:{platform:"MacOS Tahoe"}},{osName:"MacOS Sequoia",bs:{os:"OS X",os_version:"Sequoia",safari_version:"18.4"},sl:{platform:"macOS 15",safari_version:"latest"},lt:{platform:"MacOS Sequoia"}},{osName:"macOS Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17.3"},sl:{platform:"macOS 14",safari_version:"latest"},lt:{platform:"macOS Sonoma"}},{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"}},{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"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14.1"},sl:{platform:"macOS 11",safari_version:"latest"},lt:{platform:"macOS Big Sur"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13.1"},sl:{},lt:{platform:"macOS Catalina"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12.1"},sl:{},lt:{platform:"macOS Mojave"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11.1"},sl:{},lt:{platform:"macOS High Sierra"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10.1"},sl:{},lt:{platform:"macOS Sierra"}},{osName:"OS X El Capitan",bs:{os:"OS X",os_version:"El Capitan",safari_version:"9.1"},sl:{},lt:{platform:"OS X El Capitan"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{},lt:{platform:"OS X Yosemite"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{}},{osName:"OS X Mountain Lion",bs:{os:"OS X",os_version:"Mountain Lion",safari_version:"6.2"},sl:{},lt:{platform:"OS X Mountain Lion"}},{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"}}],vl=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:uf},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:uf},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"}];Yn=(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]};ff=new mf.DOMParser});var El={};q(El,{$schema:()=>Ov,default:()=>Mv,definitions:()=>_v,properties:()=>Nv,required:()=>Dv,type:()=>Lv});var Ov,_v,Lv,Dv,Nv,Mv,hf=I(()=>{Ov="http://json-schema.org/draft-07/schema#",_v={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}}}},Lv="object",Dv=["entries"],Nv={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Mv={$schema:Ov,definitions:_v,type:Lv,required:Dv,properties:Nv}});async function Ef(){try{return await ae(Qn.promises.readFile(ro()).then(async s=>{let e=await Sf;return Bv(e,s)}),3e4)}catch{return{}}}function Bv(s,e){let t=e.slice(0,16),r=e.slice(16),i=Buffer.from(s),n=is.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 ct(s,e,t=Fv,r=void 0){return async()=>{if(!Tf)return await s();let i=e;r&&(e+=JSON.stringify(r));let n=await ns(e);if(n)return ui.debug("cache hit:",{fnName:e}),n;if(ui.debug("cache miss:",{fnName:e}),!wf)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 jv(e,o,t),o}}async function ns(s){let t=(await so)[s];if(!t)return;let{value:r,expiry:i}=t;if(!(i<Date.now())&&r)return r}async function jv(s,e,t){if(Il)throw ui.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 so;r[s]={value:e,expiry:Date.now()+t},vf=new Promise(i=>{to=i}),Uv(r)}catch{ui.error("failed updating cache")}}async function os(){let s=await so;Object.keys(s).forEach(e=>{delete s[e]})}function If(s){Tf=s}function $v(s=!0){wf=s}async function Rf(){try{return Il=!0,await vf}finally{Il=!1}}function xf(s){eo=s,so=Ef()}var Qn,Zn,is,yf,ui,eo,bf,to,Tf,wf,Il,vf,Sf,Fv,ro,so,Uv,Cf,Af,PC,Pf,zt=I(()=>{"use strict";Qn=R(require("fs")),Zn=R(require("path")),is=R(require("crypto"));U();yf=require("lodash");W();ui=A("local cache"),eo=Zn.resolve(yt(),"testim-cache"),Tf=!0,wf=!0,Il=!1,vf=new Promise(s=>{to=s}),Sf=new Promise(s=>{bf=s}),Fv=1e3*60*60*3,ro=()=>Zn.resolve(Zn.resolve(eo,"testim.cache"));so=Ef(),Uv=(0,yf.debounce)(async s=>{let e;try{let t=await Sf,r=is.randomBytes(16),i=JSON.stringify(s),n=Buffer.from(t),o=is.createCipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),r),a=Buffer.concat([r,o.update(i),o.final()]);await Te(eo)||await Qn.promises.mkdir(eo,{recursive:!0}),await Qn.promises.writeFile(ro(),a)}catch(t){ui.error("failed saving cache",{err:t}),e=t}to(e?{success:!1,error:e}:{success:!0})},200);Cf=bf,Af=If.bind(void 0,!1),PC=If.bind(void 0,!0),Pf=()=>$v(!1)});function io(){return{cliLocation:yt(),userInfo:as.userInfo(),platform:as.platform(),release:as.release()}}var as,Rl=I(()=>{"use strict";as=R(require("node:os"));U()});function Wv(s){try{return no.resolve(no.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 or(s){let e=Wv(s);return require(e)}var no,pi=I(()=>{"use strict";no=R(require("path"))});function Vv(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function Gv(s){return/The "to" argument must be of type string./.exec(s)}function Lf(s,e,t){let r=Vv(s),i=Gv(s);return r||i?(_f.info("Failed to install package due to insufficient write access",{...io(),package:t,path:r}),console.error(` Testim failed installing the package ${t||""} due to insufficient permissions. This is probably due to an installation of @testim/testim-cli with sudo, and running it without sudo. Testim had missing write access to ${r||e} `),!0):!1}function xl(s){try{return or(s)}catch{return!1}}function Df(s,e){let t=di.join(s,`./node_modules/${e}/package.json`);return JSON.parse(cs.readFileSync(t,"utf-8")).version}function Nf(s){if(typeof s=="string"&&s.endsWith(".cjs"))return s;if(typeof s=="object"&&s!==null)for(let e of Object.keys(s).filter(t=>t!=="browser")){let t=Nf(s[e]);if(t)return t}}function Mf(s){let e=di.join(s,"package.json"),t=JSON.parse(cs.readFileSync(e,"utf-8"));if(!("exports"in t))return"";let r=Nf(t);if(!r)throw new $n(t.name);return r}async function ao(s,e,t){let r=di.join(s,"npm-shrinkwrap.json"),i=di.join(s,"npm-shrinkwrap-dummy.json"),n=!1;try{try{await Te(r)&&(await cs.promises.rename(r,i),n=!0)}catch{}return await Of(`npm i ${e} --no-save --no-prune --prefer-offline --no-audit --progress=false`,{...t,cwd:s}).catch(o=>{throw Lf(o.stderr,s,e)?new Kr(`${s} Failed to install package: ${e} due to insufficient write access in directory`):o})}finally{if(n)try{await cs.promises.rename(i,r)}catch{}}}function Cl(s,e,t,r,i=!0){return new Promise((n,o)=>{var h,g,b,T;let a=t?["--proxy",t]:[],c=t?{env:Object.assign(process.env,{HTTP_PROXY:t,HTTPS_PROXY:t})}:{},l="",d="",m=["--no-save","--no-package-lock","--no-prune","--no-audit","--progress=false"];i&&m.push("--prefer-offline");let p="npm";process.platform==="win32"&&(p="npm.cmd",c.shell=!0);let f=(0,oo.spawn)(p,["i","--prefix",s,...m,...e,...a],c);(h=f.stderr)==null||h.pipe(process.stderr),(g=f.stdout)==null||g.pipe(process.stdout),(b=f.stdout)==null||b.on("data",v=>{l+=v}),(T=f.stderr)==null||T.on("data",v=>{d+=v}),f.on("close",v=>{var y,w;if(v){i&&Cl(s,e,t,r,!1).then(n).catch(o);let S;try{let x=(y=/npm ERR! 404 {2}'(.+)' is not in the npm registry/gm.exec(d))==null?void 0:y[1],_=(w=/No matching version found for (\S+)@/gm.exec(d))==null?void 0:w[1];x||_?S=`404 Not Found - GET https://registry.npmjs.org/${_??x} - Not found`:Lf(d,s)?S=`insufficient write access in location ${s}`:S=`Npm Installation closed with exit code ${v} with error: ${d}`}catch(x){S=`Npm Install closed with exit code ${v} err: ${x} stdout: ${l} stderr: ${d}`}_f.info(`Npm Install closed with exit code ${v}`,{message:S,stderr:d}),o(new _t(S))}else n(l)}),setTimeout(()=>{try{f.kill()}finally{o(new ue)}},r)})}async function Ff(){try{return(await Of("npm -v")).stdout.trim()}catch{return""}}var cs,di,kf,oo,Of,_f,ls=I(()=>{"use strict";cs=R(require("fs")),di=R(require("path"));U();kf=require("util"),oo=require("child_process");W();Rl();pi();Q();Of=(0,kf.promisify)(oo.exec),_f=A("cli-service")});var $f={};q($f,{install:()=>qv,isReady:()=>Kv,start:()=>zv});var Uf,Bf,jf,kl,Pl,Hv,qv,zv,Kv,Wf=I(()=>{"use strict";Uf=R(require("fkill")),Bf=R(require("p-retry"));ls();We();U();pi();pe();jf="chromedriver",kl=9515,Pl=`http://localhost:${kl}/wd/hub`,Hv=[`--port=${kl}`,"--url-base=/wd/hub","--disable-build-check","--whitelisted-ips=0.0.0.0","--log-level=OFF"],qv=async()=>{let s=O.flags.chromedriverCdnBinariesUrl.getValue(),e=De(s)?`--chromedriver_cdnbinariesurl=${s}`:"";await ao(yt(),`${jf} --detect_chromedriver_version ${e}`)},zv=async()=>{process.env.NODE_OPTIONS="",await(0,Uf.default)(`:${kl}`,{silent:!0}),await or(jf).start(Hv,!0)},Kv=async({chromeBinaryLocation:s})=>{await(0,Bf.default)(async()=>{var i;let e=await ve(`${Pl}/status`);if(!((i=e==null?void 0:e.value)!=null&&i.ready))throw new Error("status failed");let t={...s&&{binary:s}},r=await $e({url:`${Pl}/session`,body:{desiredCapabilities:{browserName:"chrome",chromeOptions:t}},headers:{"Content-Type":"application/json"}});if(!r||r.status!==0||!r.sessionId)throw new Error("create session failed");await ei(`${Pl}/session/${r.sessionId}`)},{retries:99,factor:1,minTimeout:30})}});var fi={};q(fi,{getSessionPlayerFolder:()=>Dl,prepareChromeDriver:()=>mi,prepareCustomExtension:()=>_l,prepareExtension:()=>Ll,preparePlayer:()=>Rr});async function _l(s,e=!1){if(!s)return;if(De(s)){let i=us.join(process.cwd(),s.replace(/^.*[\\/]/,""));if(await Jv(s)>Ol&&!e)throw new C(Vf);return await Xe(s,i),i}let t=us.resolve(s);if(!Hf.existsSync(t))throw new C(`Failed to find custom extension in location: ${t}`);if(il(t)>Ol&&!e)throw new C(Vf);return t}async function Jv(s){let e=(We(),Me(Je));try{let r=(await e.head(s)).headers["content-length"];return(r?parseInt(r,10):0)/1e6}catch(t){throw co.warn("failed to download custom extension",{err:t}),new C(`Failed to download custom extension from location: ${s}`)}}function Ll(s){co.info("prepare extension",{locations:s});let e=s.map(t=>({location:t,path:Vn(t)}));return ct(()=>ne(e,({locat