@testim/testim-cli 4.83.0 → 4.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +3 -3
- package/cli.js.map +2 -2
- package/npm-shrinkwrap.json +133 -107
- package/package.json +8 -6
package/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
"use strict";var qT=Object.create;var Kn=Object.defineProperty;var zT=Object.getOwnPropertyDescriptor;var KT=Object.getOwnPropertyNames;var JT=Object.getPrototypeOf,YT=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>(s&&(e=s(s=0)),e);var G=(s,e)=>{for(var t in e)Kn(s,t,{get:e[t],enumerable:!0})},Jp=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of KT(e))!YT.call(s,n)&&n!==t&&Kn(s,n,{get:()=>e[n],enumerable:!(r=zT(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?qT(JT(s)):{},Jp(e||!s||!s.__esModule?Kn(t,"default",{value:s,enumerable:!0}):t,s)),ye=s=>Jp(Kn({},"__esModule",{value:!0}),s);var We={};G(We,{log:()=>M,measure:()=>QT});function M(...s){if(!Qp)return;let e=Date.now();console.log(`${e-XT} ${e-Xp} `,...s),Xp=e}function QT(s,e){if(!Qp)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Qp,XT,Xp,Ve=T(()=>{"use strict";Qp=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,XT=Date.now(),Xp=Date.now()});var Ga,zt,Ha,Mr=T(()=>{"use strict";Ga={NULL:"\uE000",Unidentified:"\uE000",Cancel:"\uE001",Help:"\uE002","Back space":"\uE003",Backspace:"\uE003",Tab:"\uE004",Clear:"\uE005",Return:"\uE006",Enter:"\uE007",Shift:"\uE008",Control:"\uE009",Alt:"\uE00A",Pause:"\uE00B",Escape:"\uE00C",Space:"\uE00D"," ":"\uE00D",Pageup:"\uE00E",PageUp:"\uE00E",Page_Up:"\uE00E",Pagedown:"\uE00F",PageDown:"\uE00F",Page_Down:"\uE00F",End:"\uE010",Home:"\uE011","Left arrow":"\uE012",Arrow_Left:"\uE012",ArrowLeft:"\uE012","Up arrow":"\uE013",Arrow_Up:"\uE013",ArrowUp:"\uE013","Right arrow":"\uE014",Arrow_Right:"\uE014",ArrowRight:"\uE014","Down arrow":"\uE015",Arrow_Down:"\uE015",ArrowDown:"\uE015",Insert:"\uE016",Delete:"\uE017",Semicolon:"\uE018",Equals:"\uE019","Numpad 0":"\uE01A","Numpad 1":"\uE01B","Numpad 2":"\uE01C","Numpad 3":"\uE01D","Numpad 4":"\uE01E","Numpad 5":"\uE01F","Numpad 6":"\uE020","Numpad 7":"\uE021","Numpad 8":"\uE022","Numpad 9":"\uE023",Multiply:"\uE024",Add:"\uE025",Separator:"\uE026",Subtract:"\uE027",Decimal:"\uE028",Divide:"\uE029",F1:"\uE031",F2:"\uE032",F3:"\uE033",F4:"\uE034",F5:"\uE035",F6:"\uE036",F7:"\uE037",F8:"\uE038",F9:"\uE039",F10:"\uE03A",F11:"\uE03B",F12:"\uE03C",Command:"\uE03D",Meta:"\uE03D",Zenkaku_Hankaku:"\uE040",ZenkakuHankaku:"\uE040"},zt="element-6066-11e4-a52e-4f735466cecf",Ha=79});function se(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function ze(s,e,t,r,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function qa(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Oe(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var za=T(()=>{"use strict"});var Ja,Zp,ed,ro=T(()=>{Ja={ngrok:"4.3.3",webpack:"5.74.0",playwright:"0.12.1",puppeteer:"2.1.1","selenium-webdriver":"3.6.0","v8-to-istanbul":"9.1.0","istanbul-lib-coverage":"3.2.0","@bcoe/v8-coverage":"0.2.3","convert-source-map":"1.7.0",multer:"1.4.5-lts.1"},Zp={"@applitools/eyes-sdk-core":"13.11.32","@applitools/spec-driver-webdriverio":"1.4.29","@segment/analytics-node":"1.3.0","@types/unzip-stream":"0.3.2",ajv:"6.12.6","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0",commander:"10.0.0",compression:"1.7.4","coralogix-logger":"1.1.28",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",express:"4.17.3",fkill:"7.2.1","form-data":"3.0.0","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"0.22.10",jsonwebtoken:"9.0.0",linkedom:"
|
|
2
|
+
"use strict";var qT=Object.create;var Kn=Object.defineProperty;var zT=Object.getOwnPropertyDescriptor;var KT=Object.getOwnPropertyNames;var JT=Object.getPrototypeOf,YT=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>(s&&(e=s(s=0)),e);var G=(s,e)=>{for(var t in e)Kn(s,t,{get:e[t],enumerable:!0})},Jp=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of KT(e))!YT.call(s,n)&&n!==t&&Kn(s,n,{get:()=>e[n],enumerable:!(r=zT(e,n))||r.enumerable});return s};var E=(s,e,t)=>(t=s!=null?qT(JT(s)):{},Jp(e||!s||!s.__esModule?Kn(t,"default",{value:s,enumerable:!0}):t,s)),ye=s=>Jp(Kn({},"__esModule",{value:!0}),s);var We={};G(We,{log:()=>M,measure:()=>QT});function M(...s){if(!Qp)return;let e=Date.now();console.log(`${e-XT} ${e-Xp} `,...s),Xp=e}function QT(s,e){if(!Qp)return;let t=Date.now();try{s()}finally{console.log(e||s.name,"took",Date.now()-t)}}var Qp,XT,Xp,Ve=T(()=>{"use strict";Qp=process.env.MEASURE_TESTIM_CLI_PERFORMANCE,XT=Date.now(),Xp=Date.now()});var Ga,zt,Ha,Mr=T(()=>{"use strict";Ga={NULL:"\uE000",Unidentified:"\uE000",Cancel:"\uE001",Help:"\uE002","Back space":"\uE003",Backspace:"\uE003",Tab:"\uE004",Clear:"\uE005",Return:"\uE006",Enter:"\uE007",Shift:"\uE008",Control:"\uE009",Alt:"\uE00A",Pause:"\uE00B",Escape:"\uE00C",Space:"\uE00D"," ":"\uE00D",Pageup:"\uE00E",PageUp:"\uE00E",Page_Up:"\uE00E",Pagedown:"\uE00F",PageDown:"\uE00F",Page_Down:"\uE00F",End:"\uE010",Home:"\uE011","Left arrow":"\uE012",Arrow_Left:"\uE012",ArrowLeft:"\uE012","Up arrow":"\uE013",Arrow_Up:"\uE013",ArrowUp:"\uE013","Right arrow":"\uE014",Arrow_Right:"\uE014",ArrowRight:"\uE014","Down arrow":"\uE015",Arrow_Down:"\uE015",ArrowDown:"\uE015",Insert:"\uE016",Delete:"\uE017",Semicolon:"\uE018",Equals:"\uE019","Numpad 0":"\uE01A","Numpad 1":"\uE01B","Numpad 2":"\uE01C","Numpad 3":"\uE01D","Numpad 4":"\uE01E","Numpad 5":"\uE01F","Numpad 6":"\uE020","Numpad 7":"\uE021","Numpad 8":"\uE022","Numpad 9":"\uE023",Multiply:"\uE024",Add:"\uE025",Separator:"\uE026",Subtract:"\uE027",Decimal:"\uE028",Divide:"\uE029",F1:"\uE031",F2:"\uE032",F3:"\uE033",F4:"\uE034",F5:"\uE035",F6:"\uE036",F7:"\uE037",F8:"\uE038",F9:"\uE039",F10:"\uE03A",F11:"\uE03B",F12:"\uE03C",Command:"\uE03D",Meta:"\uE03D",Zenkaku_Hankaku:"\uE040",ZenkakuHankaku:"\uE040"},zt="element-6066-11e4-a52e-4f735466cecf",Ha=79});function se(s=16){let e="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",t="";for(let r=0;r<s;r++){let n=Math.floor(Math.random()*e.length);t+=e[n]}return t}function ze(s,e,t,r,n){let o="";return n=n?encodeURIComponent(n):"master",e&&t&&(o=`${s}/#/project/${e}/branch/${n}/test/${t}`,r&&(o+=`?result-id=${r}`)),o}function qa(s,e){return`Basic ${Buffer.from(`${s}:${e}`).toString("base64")}`}function Oe(s){let e=/^(https?:\/\/)/i,t=new RegExp("^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$","i");return e.test(s)||t.test(s)}var za=T(()=>{"use strict"});var Ja,Zp,ed,ro=T(()=>{Ja={ngrok:"4.3.3",webpack:"5.74.0",playwright:"0.12.1",puppeteer:"2.1.1","selenium-webdriver":"3.6.0","v8-to-istanbul":"9.1.0","istanbul-lib-coverage":"3.2.0","@bcoe/v8-coverage":"0.2.3","convert-source-map":"1.7.0",multer:"1.4.5-lts.1"},Zp={"@applitools/eyes-sdk-core":"13.11.32","@applitools/spec-driver-webdriverio":"1.4.29","@segment/analytics-node":"1.3.0","@types/unzip-stream":"0.3.2",ajv:"6.12.6","body-parser":"1.20.1",chalk:"4.1.2","chrome-launcher":"0.15.0",commander:"10.0.0",compression:"1.7.4","coralogix-logger":"1.1.28",cors:"2.8.5","data-uri-to-buffer":"2.0.2",dayjs:"1.11.8",express:"4.17.3",fkill:"7.2.1","form-data":"3.0.0","https-proxy-agent":"7.0.2","istanbul-lib-report":"3.0.0","istanbul-reports":"3.1.5",jimp:"0.22.10",jsonwebtoken:"9.0.0",linkedom:"git+https://github.com/omril1/linkedom.git#cd031e9b299ef58ffdaaf6d9a60490bb843c8afa",lodash:"4.17.21","memory-fs":"0.5.0",ms:"2.1.2",npm:"10.5.0","object-hash":"3.0.0",ora:"5.4.1","p-limit":"4.0.0","p-retry":"4.6.2",pako:"1.0.11",portfinder:"1.0.28","promise-queue":"2.2.5",prompts:"2.4.2","proxy-agent":"6.3.1","rox-node":"4.9.18",semver:"7.6.0","serialize-error":"7.0.1","socket.io-client":"4.6.2","source-map-support":"0.5.19",superagent:"8.1.2","superagent-proxy":"3.0.0","test-exclude":"6.0.0","ua-parser-js":"0.7.33","unzip-stream":"0.3.1","validate-npm-package-name":"3.0.0",webdriverio:"7.24.0",winston:"3.11.0","winston-transport":"4.6.0",ws:"8.5.0",xml2js:"0.6.2",yaml:"2.2.2"},ed={node:">= 18.0.0"}});var Us,td,rd,so,sd,no,Fs,nd,fe,od,id,oo,_e,Ya,ad,io,cd,qR,ld,zR,ud,pd,Ur,dd,md,fd,gd,hd,yd,bd,Td,wd,vd,Ed,Bs,Sd,Id,Rd,Xa,le=T(()=>{"use strict";Us=process.env.SERVICES_HOST||"https://services.testim.io",td="https://testimstatic.blob.core.windows.net",rd="https://tstresultfiles.azureedge.net";process.env.GATEWAY_URL&&(process.env.CORALOGIX_URL=`${process.env.GATEWAY_URL}/testim/coralogix/api/v1/logs`,process.env.SERVICES_HOST=`${process.env.GATEWAY_URL}/testim/services`,process.env.EXTENSION_SERVICES_HOST=process.env.TUNNEL_GATEWAY?process.env.SERVICES_HOST:Us,Us=process.env.SERVICES_HOST);so=parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK||"0",10),sd=parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT||"0",10),no=parseInt(process.env.OVERRIDE_TIMEOUTS||"0",10),Fs=process.env.EDITOR_URL,nd=process.env.WEBSOCKET_HOST||`${Us}/ws`,fe=Us,od=parseInt(process.env.LOGGER_CONSOLE||"0",10),id=parseInt(process.env.LOGGER_DEBUG||"0",10),oo=parseInt(process.env.WEBDRIVER_DEBUG||"0",10),_e=parseInt(process.env.IS_ON_PREM||"0",10),Ya=process.env.REQUESTS_QUEUE_SIZE?parseInt(process.env.REQUESTS_QUEUE_SIZE,10):void 0,ad=parseInt(process.env.DEBUG_MODE||"0",10),io=process.env.TESTIM_CONCURRENT_WORKER_COUNT?parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT,10):null,cd=process.env.ROLLOUT_KEY||"5b5560729601aa6484276518",qR=parseInt(process.env.DF_ENABLE_VIDEO||"0",10),ld=parseInt(process.env.START_WORKER_DELAY_MS||"1500",10),zR=process.env.APPIUM_VERSION||"1.10.1",ud=process.env.GATEWAY_URL,pd=process.env.EXTENSION_SERVICES_HOST||Us,Ur=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/blob`:td,dd=process.env.GATEWAY_URL?`${process.env.GATEWAY_URL}/testim/edge`:rd,md=td,fd=rd,gd=5*60*1e3,hd=40,yd=process.env.TMA_BASE_API_URL||"http://127.0.0.1:8585/api",bd=process.env.HEADSPIN_MOBILE_DEVICES_API_URL||"https://api-dev.headspin.io/v0",Td=process.env.HEADSPIN_MOBILE_APPS_API_URL||"https://api-dev.headspin.io/v1",wd=process.env.TDC_MOBILE_DEVICES_API_URL||"https://api.tdc.tricentis-cloud.com/v0",vd=process.env.TDC_MOBILE_APPS_API_URL||"https://api.tdc.tricentis-cloud.com/v1",Ed=process.env.TVC_MOBILE_API_URL||"https://api.waldo.com",Bs=process.env.BROWSERSTACK_APPS_API_URL||"https://api-cloud.browserstack.com/app-automate",Sd=process.env.SAUCE_LABS_US_APPS_API_URL||"https://api.us-west-1.saucelabs.com/v1",Id=process.env.SAUCE_LABS_EU_APPS_API_URL||"https://api.eu-central-1.saucelabs.com/v1",Rd=process.env.P_CLOUDY_DEFAULT_TEST_DURATION||60,Xa=process.env.P_CLOUDY_DEFAULT_ANDROID_DEVICE_NAME||"samsung"});var Qa={};G(Qa,{CoralogixTransport:()=>Fr});var Ae,Ad,tw,rw,Fr,Za=T(()=>{"use strict";Ae=require("coralogix-logger"),Ad=E(require("winston-transport")),tw={debug:Ae.Severity.debug,silly:Ae.Severity.verbose,verbose:Ae.Severity.verbose,silent:Ae.Severity.verbose,info:Ae.Severity.info,http:Ae.Severity.info,warn:Ae.Severity.warning,warning:Ae.Severity.warning,error:Ae.Severity.error,critical:Ae.Severity.critical,crit:Ae.Severity.critical},rw=["err","error","reason","e"],Fr=class extends Ad.default{constructor(t){t=Object.assign({},Fr.options,t);super(t);this.options=t,this.logger=new Ae.CoralogixLogger(t.category||""),this.name="Coralogix Transport",t.timestamp&&(this.timestamp=t.timestamp)}log(t,r){let{category:n,level:o,message:i,meta:a={},...l}=t,c=Object.assign({},a,this.options.extraFields,l),d=new Ae.Log;d.severity=tw[o],d.text=i,d.category=n,c.className&&(d.className=c.className),c.methodName&&(d.methodName=c.methodName),c.threadId&&(d.threadId=c.threadId),delete c.className,delete c.methodName,delete c.threadId,delete c.category,delete c.level,delete c.message;let m=!1;a instanceof Error&&(m=!0,c.msg=a.message+a.stack,i&&(c.msg=`${i}
|
|
3
3
|
${c.msg}`));for(let u of rw)a[u]instanceof Error&&(c[u]={message:a[u].message,stack:a[u].stack,name:a[u].name,type:a[u].type,cause:a[u].cause,...a[u]});Object.keys(c).length>0&&(i&&!m&&(c.msg=i),d.text=c),this.logger.addLog(d),r(null,!0)}waitForFlush(){return this.logger.waitForFlush()}static configure(t){Ae.CoralogixLogger.configure(t),Fr.options=t}}});var ic={};G(ic,{getLogger:()=>x,sessionPlayerLoggerFormatter:()=>rc,setExecutionId:()=>sc,setProjectId:()=>nc,setProxyUri:()=>oc});function ow(){let s=[],e=()=>Promise.resolve();if(!_e){let{CoralogixTransport:t}=(Za(),ye(Qa));t.configure(Od);let r=new t({category:"ROOT"});s.push(r),e=()=>r.waitForFlush()}if(od){let t={depth:5,colors:!0};s.push(new ft.transports.Console({format:ft.format.combine(ft.format.colorize({all:!0,colors:{info:"blue",error:"red",warning:"yellow"}}),ft.format.timestamp({format:"HH:mm:ss:SSS"}),ft.format.printf(r=>`[${r.timestamp}] ${r.level} ${r.category}: ${r.message} ${co.inspect(r.meta,t)}`))}))}return[s,e]}function sc(s){ec=s}function nc(s){_d=s}function oc(s){if(_e||!s)return;let{CoralogixTransport:e}=(Za(),ye(Qa));e.configure({...Od,proxyUri:s})}function Cd(s){return{projectId:_d,time:new Date().toISOString(),...ec&&!s&&{executionId:ec}}}function x(s){return new tc(uw.child({category:s}))}var Pd,ft,co,ao,kd,sw,nw,Od,xd,rc,iw,aw,cw,lw,uw,ec,_d,tc,j=T(()=>{"use strict";Pd=E(require("os")),ft=E(require("winston"));le();co=E(require("util")),ao=E(require("chalk")),kd=E(require("dayjs"));B();sw=Pd.hostname(),nw=gt(),Od={privateKey:"d0eb01da-f966-1663-63c6-8871225d7c39",applicationName:"testim",subsystemName:"runner"};xd={depth:5,colors:!0},rc=(s,e,t)=>{let r=`[${(0,kd.default)().format("HH:mm:ss:SSS")}]`,n=co.inspect(e,xd),o=co.inspect(t,xd);return`${ao.default.white(r)} ${ao.default.reset()}SessionPlayer-${ao.default.red(s)} ${n} ${o}`},[iw,aw]=ow(),cw=id?"debug":"info",lw={release:Boolean(!0),branch:"production"},uw=ft.createLogger({levels:ft.config.syslog.levels,level:cw,transports:iw,defaultMeta:{name:"runner",hostname:sw,nodeVersion:process.version,runnerVersion:nw,...lw}}),ec=null,_d=null;tc=class{constructor(e){this._logger=e;this.debug=this.debug.bind(this),this.info=this.info.bind(this),this.warn=this.warn.bind(this),this.error=this.error.bind(this),this.fatal=this.fatal.bind(this)}debug(e,t={}){this.innerLog("debug",e,t)}info(e,t={}){this.innerLog("info",e,t)}warn(e,t={}){this.innerLog("warning",e,t)}error(e,t={}){this.innerLog("error",e,t)}fatal(e,t={}){this.innerLog("crit",e,t)}innerLog(e,t,r={}){let{executionId:n}=r;try{this._logger.log(e,Object.assign({meta:r,message:t},Cd(n)))}catch(o){try{this._logger.log("crit",Object.assign({message:`failed to log message ${o.message}, ${o.stack}`},Cd(n)))}catch{}}}waitForFlush(){return aw()}}});var mo,Br,P,Kt,fr,Rt,lo,jr,ne,js,Ke,Jt,At,uo,$r,Wr,Vr,po,$s,z=T(()=>{"use strict";mo=require("p-retry"),Br=class extends Error{constructor(){super(...arguments);this.name="NoArgsError"}},P=class extends Error{constructor(){super(...arguments);this.name="ArgError"}},Kt=class extends Error{constructor(){super(...arguments);this.name="StopRunOnError"}},fr=class extends Error{constructor(t,r){super(t);this.type=r}},Rt=class extends mo.AbortError{},lo=class extends mo.AbortError{},jr=class extends mo.AbortError{},ne=class extends Error{},js=class extends Error{},Ke=class extends Error{constructor(){super(...arguments);this.name="GridError"}toString(){return this.message}},Jt=class extends Ke{constructor(){super(...arguments);this.name="GridConcurrencyError"}},At=class extends Error{constructor(){super(...arguments);this.name="NpmPackageError"}},uo=class extends Error{constructor(){super(...arguments);this.message="selenium driver crashed";this.name="SeleniumCrashError"}},$r=class extends Error{},Wr=class extends Error{constructor(t){super();this.innerStack=t}},Vr=class extends Error{constructor(t){super(`Testim had missing write access to ${t}`);this.path=t}},po=class extends Error{constructor(e){super(`Package for CLI action need to have a CommonJS export which the package ${e} does not have`)}},$s=class extends Error{constructor(e=!1){let t="not implemented";e&&(t="should be implemented on descendant"),super(t)}}});function ac(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"&&typeof s.catch=="function"}function oe(s){return(0,Nd.setTimeout)(s)}function cc(s,e){let t=new Promise((r,n)=>{e.onabort=()=>{n(e.reason)}});return Promise.race([s,t])}function ce(s,e,t="Timeout Error"){no&&!Ld&&(Ld=!0,console.log("Debugger connected - timeouts were overridden to 10 minutes to improve debugging"));let r=new ne(t);return e=no?Number(no)||6e5:e,Promise.race([s,oe(e).then(()=>{throw r})])}async function ie(s,e,{concurrency:t}={}){if(t){Dd||=(await import("p-limit")).default;let r=Dd(t);return await Promise.all(Array.from(s,(n,o)=>r(()=>e(n,o))))}return await Promise.all(Array.from(s,e))}function Yt(s){return new Promise((e,t)=>{s((r,n)=>r?t(r):e(n))})}var Nd,Ld,Dd,lc=T(()=>{"use strict";Nd=require("timers/promises");z();le();Ld=!1});var Vs,Md,pw,Ws,Ud,dw,mw,Fd,Bd=T(()=>{"use strict";Vs=E(require("lodash"));le();Md=require("dns");j();lc();pw=x("http-request-counters"),Ws=!1,Ud=async()=>{if(_e)return!0;let s=["www.google.com","www.facebook.com","www.microsoft.com","testim.io"];try{let e=Boolean(await ie(s,t=>Md.promises.lookup(t)));return e||(Ws=!0),e}catch{return pw.error("network connectivity test failed"),Ws=!0,!1}},dw=Vs.throttle(Ud,10*1e3),mw=60*1e3*15,Fd=()=>{let s={call:new Map,success:new Map,fail:new Map};function e(n,o){let i=n.get(o)||0;n.set(o,i+1),setTimeout(()=>{let a=n.get(o)||1;n.set(o,a-1)},mw)}function t(n,o=n.name){return async function(...i){e(s.call,o);try{let a=await n.call(null,...i);return e(s.success,o),a}catch(a){throw e(s.fail,o),Ws||dw(),a}}}async function r(){if(Ws||!await Ud())return!1;let n=Vs.sum([...s.fail.values()]),o=Vs.sum([...s.call.values()]);return n<o*.1}return r.counters=s,t.counters=s,t.isNetworkHealthy=r,t.didNetworkConnectivityTestFail=()=>Ws,t}});var Je={};G(Je,{deleteFullRes:()=>bw,deleteReq:()=>Gs,didNetworkConnectivityTestFail:()=>yc,download:()=>gc,get:()=>be,getFullRes:()=>ww,getText:()=>qs,head:()=>vw,isNetworkHealthy:()=>hc,post:()=>He,postForm:()=>Hs,postFullRes:()=>Tw,postText:()=>mc,put:()=>fc});function gw(){return global.caFileContent}function hw(s,e){let t=[];s.on("data",r=>{t.push(r)}),s.on("end",()=>{e(null,Buffer.concat(t))})}function yw(){return!xt.default.Request.prototype.proxy&&global.SuperagentProxy&&global.SuperagentProxy(xt.default),global.proxyUri}function gr(s,e=!1){let t=gw();t&&s.ca(t);let r=!e&&yw();r&&s.proxy(r)}async function jd(s,e={},t={},r=Gr){let n=xt.default.delete(s).send(e).timeout(r).set(t);return gr(n),await n}async function pc(s,e,t={},r=Gr,n=0){let o=xt.default.post(s).send(e).timeout(r).set(t);gr(o),n&&o.retry(n);try{return await o}catch(i){throw i.url=s,i.originalRequestTimeout=r,i.additionalSetHeaders=t,i}}async function dc(s,e,t={},r=Gr,{isBinary:n=!1,skipProxy:o=!1}={}){let i=xt.default.get(s).query(e||{}).timeout(r).set(t);return n&&i.buffer(!0),gr(i,o),await i}var xt,uc,Ge,Gr,fw,Nt,Gs,bw,He,Tw,Hs,qs,mc,be,ww,vw,fc,gc,hc,yc,qe=T(()=>{"use strict";xt=E(require("superagent"));j();Bd();uc=x("http-request"),Ge=Fd(),Gr=parseInt(process.env.DEFAULT_REQUEST_TIMEOUT||"0",10)||3e4,fw=6e4;Nt=(s,e,t)=>{throw uc.error(s,{...t,error:e}),e};Gs=Ge(async(s,e,t,r)=>{try{let n=await jd(s,e,t,r);return n.type==="text/plain"?n.text:n.body}catch(n){return Nt("failed to delete request",n,{url:s})}});bw=Ge(jd),He=Ge(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{let o=await pc(s,e,t,r,n);return o.type==="text/plain"?o.text:o.body}catch(o){return Nt("failed to post request",o,{url:s})}});Tw=Ge(pc),Hs=Ge(async(s,e,t,r={},n=Gr)=>{let o=xt.default.post(s).type("form").timeout(n).set(r);o.field(e),Object.entries(t).forEach(([i,a])=>{o.attach(i,a.buffer,a.fileName)}),gr(o);try{let i=await o;return i.type==="text/plain"?i.text:i.body}catch(i){return Nt("failed to post request",i,{url:s})}});qs=Ge(async(s,e,t)=>{try{return(await dc(s,e,t)).text}catch(r){return Nt("failed to getText request",r,{url:s,query:e})}}),mc=Ge(async({url:s,body:e,headers:t,timeout:r,retry:n})=>{try{return(await pc(s,e,t,r,n)).text}catch(o){return Nt("failed to post request",o,{url:s})}}),be=Ge(async(s,e,t,r,n)=>{try{return(await dc(s,e,t,r,n)).body}catch(o){return Nt("failed to get request",o,{url:s,query:e})}}),ww=Ge((s,e,t,r)=>dc(s,e,t,r)),vw=Ge(async s=>{let e=xt.default.head(s).timeout(Gr);gr(e);try{return await e}catch(t){return Nt("failed to head request",t,{url:s})}}),fc=Ge(async(s,e,t={},r=Gr)=>{let n=xt.default.put(s).send(e).timeout(r).set(t);gr(n);try{return(await n).body}catch(o){return Nt("failed to put request",o,{url:s})}}),gc=Ge(async s=>{uc.info("start to download",{url:s});let e=xt.default.get(s).timeout(fw).buffer(!0).parse(hw);gr(e);try{let t=await e;return uc.info("finished to download",{url:s}),t}catch(t){return Nt("failed to download",t,{url:s})}}),hc=Ge.isNetworkHealthy,yc=Ge.didNetworkConnectivityTestFail});function ht(){let s;return require.main?(require.main.filename.includes("/src")||require.main.filename.includes("\\src")?s=Mt.resolve(__dirname,"../../"):s=Mt.resolve(__dirname,""),s):process.cwd()}function fo(s,e){return Oe(s)?e||Mt.join(process.cwd(),s.replace(/^.*[\\/]/,"")):e||Mt.basename(s)}function gt(){try{return require(`${__dirname}/package.json`).version}catch{return""}}function Sw(){try{return ed.node}catch{return""}}async function Vd(s,e,t=!0){let r=await rt.promises.readdir(s,{withFileTypes:!0});await rt.promises.mkdir(e,{recursive:t});for(let n of r){let o=Mt.join(s,n.name),i=Mt.join(e,n.name);n.isDirectory()?await Vd(o,i):await rt.promises.copyFile(o,i)}}async function ge(s){try{return await rt.promises.access(s),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}var Mt,$d,Wd,rt,Ew,Ut,Ye,go,bc,st,Tc,Gd=T(()=>{"use strict";Mt=E(require("path"));za();ro();$d=E(require("unzip-stream")),Wd=E(require("p-retry")),rt=require("fs"),Ew=3;Ut=async s=>{let e=await Promise.resolve().then(()=>(qe(),Je));return(0,Wd.default)(()=>e.download(s),{retries:Ew,factor:1})},Ye=async(s,e)=>{let t=await Ut(s);return rt.promises.writeFile(e,t.body)};go=async(s,e)=>{let t=fo(s,e);return Oe(s)?Ye(s,t):rt.promises.copyFile(s,t)},bc=async s=>Oe(s)?Ut(s):rt.promises.readFile(s),st=async(s,e)=>await(0,rt.createReadStream)(s).pipe($d.Extract({path:e})),Tc=s=>(0,rt.statSync)(s).size/1e6});var Ft={};G(Ft,{APPIUM_SESSION_MESSAGE:()=>Ic,CLI_MODE:()=>Q,MOBILE_APP_SOURCE:()=>ho,MOBILE_RUN_SKIP_REASON:()=>Sc,gridMessages:()=>yt,gridTypes:()=>_,mobileWeb:()=>vc,runnerStatus:()=>wc,runnerTestStatus:()=>pe,socketEventTypes:()=>Ct,stepResult:()=>Ks,test:()=>Ec,testRunStatus:()=>zs,testStatus:()=>Xe,timeoutMessages:()=>Be});var Be,zs,wc,pe,Xe,yt,vc,Ec,Ct,Q,_,Ks,ho,Sc,Ic,ae=T(()=>{"use strict";Be={GET_BROWSER_TIMEOUT_MSG:"get-browser-timeout",TEST_START_TIMEOUT_MSG:"test-start-timeout",TEST_COMPLETE_TIMEOUT_MSG:"test-complete-timeout"},zs={COMPLETED:"completed",RUNNING:"running"},wc={RUNNING:"RUNNING",SKIPPED:"SKIPPED",FINISHED:"FINISHED",ABORTED:"ABORTED",QUEUED:"QUEUED",TIMEOUT:"TIMEOUT"},pe={PASSED:"PASSED",FAILED:"FAILED",ABORTED:"ABORTED",SKIPPED:"SKIPPED",QUEUED:"QUEUED",PENDING:"PENDING"},Xe={DRAFT:"draft",EVALUATING:"evaluating",ACTIVE:"active",QUARANTINE:"quarantine"},yt={NOT_FOUND:"The specified grid is not available",UNKNOWN:"Test couldn't get browser - unknown error"},vc={MOBILE_WEB_REMOTE_RUN_HEADER_SPACING:50},Ec={HIDDEN_PARAM:"TST_HIDDEN_PARAM"},Ct={TEST_RESULT_CREATED:"test-result-created",TEST_RESULT_UPDATED:"test-result-updated",REMOTE_STEP_SAVED:"remote-step-saved"},Q={EXTENSION:"extension",SELENIUM:"selenium",APPIUM:"appium"},_={TESTIM_ENTERPRISE:"testimEnterprise",TESTIM:"testim",LAMBDATEST:"testimLambdaTest",DEVICE_FARM:"testimDF",HYBRID:"testimHybrid",BROWSERSTACK:"browserstack",SAUCELABS:"saucelabs",TESTIM_HEADSPIN:"testimHeadspin",TESTIM_TDC:"testimTDC",TESTIM_TVC:"testimTVC",P_CLOUDY:"pcloudy"},Ks={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"},ho={FROM_LIBRARY:"from-library",FROM_DEVICE:"from-device"},Sc={APP_FROM_DEVICE:"app-from-device",VIRTUAL_BUILD:"virtual-build"},Ic={APP_NOT_EXIST_ON_DEVICE:"used to start the app doesn't exist or cannot be launched",APP_NEVER_STARTED:"never started",DEVICE_OS_VERSION_TOO_LOW:"DeviceOSVersionTooLow",TIMEOUT_ERROR:"Timeout awaiting 'request'",SAUCELABS_APP_IS_NOT_INSTALLED:"Original error: 'app' option is required for reinstall"}});function Js(s,e){var t,r,n;return((t=s.testConfigNames)!=null&&t.length||(r=s.testConfigIds)!=null&&r.length||s.testPlan.length||s.testPlanIds.length)&&!s.browser?[...new Set(e.map(o=>{var i;return(i=o.runConfig)==null?void 0:i.browserValue}))]:[(n=s.browser)==null?void 0:n.toLowerCase()]}function Iw(){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 Ys,Hd,Qe,Rw,Aw,xw,Cw,Pw,Rc,Ac,qd=T(()=>{"use strict";ae();Ys=s=>{var e,t;return Boolean(((e=s.testPlan)==null?void 0:e.length)||((t=s.testPlanIds)==null?void 0:t.length))},Hd=s=>Boolean(s.resultId&&s.source==="remote-run"),Qe=(s,e)=>s.testStatus===Xe.QUARANTINE&&!Hd(e)&&!e.runQuarantinedTests;Rw=s=>Boolean(s.loginMode),Aw=s=>Boolean(s.tunnelOnlyMode),xw=s=>Boolean(s.createPrefechedData),Cw=s=>Boolean(s.installLazyDepsMode),Pw=s=>Boolean(s.agentMode),Rc=(s,e)=>{s.forEach((t,r)=>{e.has(t)&&(s[r]=`--${t}`)})},Ac=s=>{let e=[];return Object.entries(s).forEach(([t,r])=>{r&&e.push(`--${t}`,r)}),e}});function bo(s=0){return yo.default.duration(s).format("HH:mm:ss.SSS")}function xc(s=0){return yo.default.duration(s).asSeconds()}var yo,zd,Kd=T(()=>{"use strict";yo=E(require("dayjs")),zd=E(require("dayjs/plugin/duration"));yo.default.extend(zd.default)});var Xs,Hr,Qs,Jd,qr,Yd=T(()=>{"use strict";ae();Xs=s=>!(!s||"fileName"in s),Hr=(s,e)=>e===_.TESTIM_TVC?!1:s&&"fileName"in s?s.fileName.endsWith(".app"):!1,Qs=s=>{var e,t;return((e=s.projectData)==null?void 0:e.type)==="ios"||((t=s.projectData)==null?void 0:t.type)==="android"},Jd=s=>s===_.TESTIM_TVC,qr=(s,e)=>Jd(e)||!s.flags.allowAppFromDeviceRuns.isEnabled()});function Cc(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 Xd=T(()=>{"use strict"});var J={};G(J,{OSS:()=>zr,TESTIM_BROWSER_DIR:()=>Bt,buildBasicHeader:()=>qa,calcPercentile:()=>vo,copyDir:()=>Vd,delay:()=>oe,doesPathExist:()=>ge,download:()=>Ut,downloadAndSave:()=>Ye,extractElementId:()=>De,getArgsOnRemoteRunFailure:()=>Iw,getBrowserInfo:()=>Ow,getCdpAddressForHost:()=>yr,getCliLocation:()=>ht,getDuration:()=>bo,getDurationSec:()=>xc,getEnginesVersion:()=>Sw,getEnvironmentGitBranch:()=>hr,getLocalFileSizeInMB:()=>Tc,getMemorySnapshot:()=>Cc,getPlanType:()=>wo,getRunConfigByBrowserName:()=>Zs,getRunnerVersion:()=>gt,getSource:()=>go,getSourceAsBuffer:()=>bc,getSourcePath:()=>fo,getTestUrl:()=>ze,getUniqBrowsers:()=>Js,groupTestsByRetries:()=>kc,guid:()=>se,hasTestPlanFlag:()=>Ys,isAgentMode:()=>Pw,isAppFromDevice:()=>Xs,isAppFromDeviceDisabled:()=>qr,isCreatePrefetchedDataMode:()=>xw,isInstallLazyDepsMode:()=>Cw,isLoginMode:()=>Rw,isMobileProject:()=>Qs,isPromise:()=>ac,isQuarantineAndNotRemoteRun:()=>Qe,isRemoteRun:()=>Hd,isTestimVirtualGrid:()=>Jd,isTunnelOnlyMode:()=>Aw,isURL:()=>Oe,promiseAbort:()=>cc,promiseFromCallback:()=>Yt,promiseMap:()=>ie,promiseTimeout:()=>ce,removePropertyFromObject:()=>To,replaceArgsWithNoDashes:()=>Rc,shouldBlockVirtualIosBuild:()=>Hr,spreadObjectToArgs:()=>Ac,unzipFile:()=>st});function Ow(s){return s=s.toLowerCase(),Pc.find(e=>e.browserValue===s)}function Zs(s,e,t){s=s==null?void 0:s.toLowerCase();let r=Pc.find(o=>o.browserName.toLowerCase()===s||s.includes(o.synonyms))||Pc[0],n=zr.find(o=>o.osName==="Windows 10");return e&&(e.platform?n=zr.find(o=>o.sl.platform===e.platform):e.platformName&&(n=zr.find(o=>o.sl.platformName===e.platformName))),t&&(t.os_version?n=zr.find(o=>o.bs.os_version===t.os_version):t.platform&&(n=zr.find(o=>o.bs.platform===t.platform))),Kr.merge(r,n)}function hr(){return process.env.GIT_BRANCH||process.env.CIRCLE_BRANCH||process.env.TRAVIS_BRANCH||process.env.CI_BRANCH}function To(s,e,t){for(let r in s)Object.hasOwn(s,r)&&(t(r,e)?delete s[r]:typeof s[r]=="object"&&To(s[r],e,t))}function De(s){return s.ELEMENT||s[zt]}function wo(s){s||={};let e=Date.now(),t=s.expireAt||s.expireAT;return s.plan!=="free"?"pro":t?t<e?"free":"trial":"free"}function kc(s=[]){return Kr.chain(s).groupBy(e=>e.originalTestResultId||e.resultId).values().reduce((e,t)=>{if(!t)return e;if(t.length===1)return e.push(t[0]),e;let r=t.slice().sort((o,i)=>{let a=typeof o.retryCount=="number"?o.retryCount:1,l=typeof i.retryCount=="number"?i.retryCount:1;return a===l?o.startTime-i.startTime:(o.retryCount??0)-(i.retryCount??0)}),n=Kr.cloneDeep(r.at(-1));return n&&(n.retryTestResults=r,e.push(n)),e},[]).compact().value()}async function yr(s,e){let t=await Promise.resolve().then(()=>(qe(),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")}}var Qd,Kr,Zd,kw,Bt,zr,Pc,vo,B=T(()=>{"use strict";Qd=E(require("os")),Kr=E(require("lodash")),Zd=E(require("path"));Mr();Gd();qd();Kd();za();lc();Yd();Xd();kw=Qd.homedir(),Bt=Zd.join(kw,".testim-browser-profile"),zr=[{osName:"Linux",bs:{os:"LINUX"},sl:{platform:"Linux"}},{osName:"Windows 11",bs:{os:"WINDOWS",os_version:"11"},sl:{platform:"Windows 11"}},{osName:"Windows 10",bs:{os:"WINDOWS",os_version:"10"},sl:{platform:"Windows 10"}},{osName:"Windows 8",bs:{os:"WINDOWS",os_version:"8"},sl:{platform:"Windows 8"}},{osName:"Windows 8.1",bs:{os:"WINDOWS",os_version:"8.1"},sl:{platform:"Windows 8.1"}},{osName:"Windows 7",bs:{os:"WINDOWS",os_version:"7"},sl:{platform:"Windows 7"}},{osName:"Windows XP",bs:{os:"WINDOWS",os_version:"XP"},sl:{platform:"Windows XP"}},{osName:"macOS Sonoma",bs:{os:"OS X",os_version:"Sonoma",safari_version:"17"},sl:{}},{osName:"macOS Ventura",bs:{os:"OS X",os_version:"Ventura",safari_version:"16.5"},sl:{platform:"macOS 13",safari_version:"latest"}},{osName:"macOS Monterey",bs:{os:"OS X",os_version:"Monterey",safari_version:"15.6"},sl:{platform:"macOS 12",safari_version:"latest"}},{osName:"macOS Big Sur",bs:{os:"OS X",os_version:"Big Sur",safari_version:"14.1"},sl:{platform:"macOS 11",safari_version:"latest"}},{osName:"macOS Catalina",bs:{os:"OS X",os_version:"Catalina",safari_version:"13.1"},sl:{platform:"macOS 10.15",safari_version:"latest"}},{osName:"macOS Mojave",bs:{os:"OS X",os_version:"Mojave",safari_version:"12.1"},sl:{platform:"macOS 10.14",safari_version:"latest"}},{osName:"macOS High Sierra",bs:{os:"OS X",os_version:"High Sierra",safari_version:"11.1"},sl:{platform:"macOS 10.13",safari_version:"latest"}},{osName:"macOS Sierra",bs:{os:"OS X",os_version:"Sierra",safari_version:"10.1"},sl:{platform:"macOS 10.12",safari_version:"latest"}},{osName:"OS X El Capitan",bs:{os:"OS X",os_version:"El Capitan",safari_version:"9.1"},sl:{platform:"OS X 10.11",safari_version:"latest"}},{osName:"OS X Yosemite",bs:{os:"OS X",os_version:"Yosemite",safari_version:"8"},sl:{platform:"OS X 10.10",safari_version:"latest"}},{osName:"OS X Mavericks",bs:{os:"OS X",os_version:"Mavericks",safari_version:"7.1"},sl:{platform:"OS X 10.9",safari_version:"latest"}},{osName:"OS X Mountain Lion",bs:{os:"OS X",os_version:"Mountain Lion",safari_version:"6.2"},sl:{platform:"OS X 10.8",safari_version:"latest"}},{osName:"OS X Lion",bs:{os:"OS X",os_version:"Lion",safari_version:"6"},sl:{}},{osName:"OS X Snow Leopard",bs:{os:"OS X",os_version:"Snow Leopard",safari_version:"5.1"},sl:{}},{osName:"iOS",bs:{platform:"MAC"},sl:{platformName:"iOS",appiumVersion:"1.6.4"}},{osName:"Android",bs:{platform:"ANDROID"},sl:{platformName:"Android",appiumVersion:"1.6.4"}}],Pc=[{browserName:"Chrome",bs:{browser:"Chrome",browser_version:"112"},sl:{browserName:"chrome",version:"94.0"},browserValue:"chrome"},{browserName:"Firefox",bs:{browser:"Firefox",browser_version:"89"},sl:{browserName:"firefox",version:"89.0"},browserValue:"firefox"},{browserName:"Safari",bs:{browser:"Safari"},sl:{browserName:"safari"},browserValue:"safari"},{browserName:"Edge Chromium",bs:{browser:"Edge",browser_version:"112"},sl:{browserName:"MicrosoftEdge",version:"94"},synonyms:["edge-chromium"],browserValue:"edge-chromium",seleniumName:"MicrosoftEdge"},{browserName:"Browser",bs:{},sl:{browserName:"Browser"},browserValue:"browser"},{browserName:"Android",bs:{browserName:"android"},sl:{},browserValue:"android"},{browserName:"iPad",bs:{browserName:"iPad"},sl:{},browserValue:"ipad"},{browserName:"iPhone",bs:{browserName:"iPhone"},sl:{},browserValue:"iphone"}];vo=(s,e)=>{if(s.length===0)return 0;if(typeof e!="number")throw new TypeError("p must be a number");if(s=[...s].sort((r,n)=>r-n),e<=0)return s[0];if(e>=100)return s.at(-1);let t=Math.ceil(s.length*(e/100))-1;return s[t]}});var Oc={};G(Oc,{$schema:()=>_w,default:()=>Uw,definitions:()=>Lw,properties:()=>Mw,required:()=>Nw,type:()=>Dw});var _w,Lw,Dw,Nw,Mw,Uw,em=T(()=>{_w="http://json-schema.org/draft-07/schema#",Lw={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}}}},Dw="object",Nw=["entries"],Mw={version:{type:"string",enum:["1.2","1.2.0"]},creator:{type:"string"},entries:{type:"array",items:{$ref:"#/definitions/entry"}}},Uw={$schema:_w,definitions:Lw,type:Dw,required:Nw,properties:Mw}});async function am(){try{return await ce(Eo.promises.readFile(Ao()).then(async s=>{let e=await im;return jw(e,s)}),3e4)}catch{return{}}}function jw(s,e){let t=e.slice(0,16),r=e.slice(16),n=Buffer.from(s),o=Yr.createDecipheriv("aes-256-cbc",Buffer.concat([n,Buffer.alloc(32)],32),t),i=o.update(r);return JSON.parse(Buffer.concat([i,o.final()]))}function bt(s,e,t=Fw,r=void 0){return async()=>{if(!sm)return await s();let n=e;r&&(e+=JSON.stringify(r));let o=await $w(e);if(o)return en.debug("cache hit:",{fnName:e}),o;if(en.debug("cache miss:",{fnName:e}),!nm)throw new Error(`Attempted to rebuild cache for ${n}. cache miss is not allowed with current run configuration`);let i=await s();return i&&await Ww(e,i,t),i}}async function $w(s){let t=(await xo)[s];if(!t)return;let{value:r,expiry:n}=t;if(!(n<Date.now())&&r)return r}async function Ww(s,e,t){if(_c)throw en.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 xo;r[s]={value:e,expiry:Date.now()+t},om=new Promise(n=>{Ro=n}),Bw(r)}catch{en.error("failed updating cache")}}async function Xr(){let s=await xo;Object.keys(s).forEach(e=>{delete s[e]})}function cm(s){sm=s}function Vw(s=!0){nm=s}async function lm(){try{return _c=!0,await om}finally{_c=!1}}function um(s){Io=s,xo=am()}var Eo,So,Yr,tm,en,Io,rm,Ro,sm,nm,_c,om,im,Fw,Ao,xo,Bw,pm,dm,wA,mm,jt=T(()=>{"use strict";Eo=E(require("fs")),So=E(require("path")),Yr=E(require("crypto"));B();tm=require("lodash");j();en=x("local cache"),Io=So.resolve(ht(),"testim-cache"),sm=!0,nm=!0,_c=!1,om=new Promise(s=>{Ro=s}),im=new Promise(s=>{rm=s}),Fw=1e3*60*60*3,Ao=()=>So.resolve(So.resolve(Io,"testim.cache"));xo=am(),Bw=(0,tm.debounce)(async s=>{let e;try{let t=await im,r=Yr.randomBytes(16),n=JSON.stringify(s),o=Buffer.from(t),i=Yr.createCipheriv("aes-256-cbc",Buffer.concat([o,Buffer.alloc(32)],32),r),a=Buffer.concat([r,i.update(n),i.final()]);await ge(Io)||await Eo.promises.mkdir(Io,{recursive:!0}),await Eo.promises.writeFile(Ao(),a)}catch(t){en.error("failed saving cache",{err:t}),e=t}Ro(e?{success:!1,error:e}:{success:!0})},200);pm=rm,dm=cm.bind(void 0,!1),wA=cm.bind(void 0,!0),mm=()=>Vw(!1)});function Co(){return{cliLocation:ht(),userInfo:Qr.userInfo(),platform:Qr.platform(),release:Qr.release()}}var Qr,Lc=T(()=>{"use strict";Qr=E(require("os"));B()});function Gw(s){try{return Po.resolve(Po.dirname(require.resolve(`${s}/package.json`)),require(`${s}/package.json`).main||"")}catch(e){if(e.code==="ERR_PACKAGE_PATH_NOT_EXPORTED")return require.resolve(s);throw e}}function Qt(s){let e=Gw(s);return require(e)}var Po,tn=T(()=>{"use strict";Po=E(require("path"))});function Hw(s){let t=/EACCES[^']+'(.+)'/.exec(s);return t===null?!1:t[1]}function qw(s){return/The "to" argument must be of type string./.exec(s)}function ym(s,e,t){let r=Hw(s),n=qw(s);return r||n?(hm.info("Failed to install package due to insufficient write access",{...Co(),package:t,path:r}),console.error(`
|
|
4
4
|
|
|
5
5
|
Testim failed installing the package ${t||""} due to insufficient permissions.
|
|
@@ -424,9 +424,9 @@ Turbo mode will ignore step delays. Test artifacts like screenshots and logs wil
|
|
|
424
424
|
`,n=await bR(`tst-playground-${Date.now()}.js`,r),o=TR(n);_s[e]=o.child;let{error:i,exitCode:a}=await o;if(i)throw i;if(a!==0)throw new Error(`Process exited with exit code: ${a}`);return}finally{(t=_s[e])==null||t.kill(),delete _s[e]}}async function yT({code:s,type:e}){if(Wp.includes(e))return wR(s);throw new $r}function bT(){Object.keys(_s).forEach(s=>{_s[s].kill(),delete _s[s]})}var mT,fT,gT,hT,Wp,_s,TR,TT=T(()=>{"use strict";mT=E(require("fs")),fT=E(require("os")),gT=E(require("path")),hT=require("child_process");z();Wp=["playwright","selenium","puppeteer"],_s={};TR=s=>{let e,t=new Promise(n=>{e=n}),r=(0,hT.fork)(s,{stdio:["inherit","inherit","inherit","ipc"]});return r.on("message",n=>{if(!n)return;let{type:o,error:i}=n;i&&["uncaughtException","unhandledRejection"].includes(o)&&e({error:new Wr(i.stack)})}),r.on("error",n=>{e({error:n})}),r.on("exit",n=>{e({exitCode:n})}),Object.assign(t,{child:r})}});var ET,Ua,ST,wT,vT,vR,IT=T(()=>{"use strict";ET=require("express");j();z();le();TT();Ua=(0,ET.Router)(),ST=x("playground-router"),wT=["localhost","app.testim.io","playground.testim.io","staging.testim.io","app.staging.testim.cc","tta-crm.tricentis.com"],vT=s=>{if(!s)return{};try{return new URL(s)}catch{return{}}},vR=(s,e,t)=>{if(so)return t();let{referer:r,origin:n}=s.headers;if(!r&&!n)return e.status(400).send();let o=vT(r),i=vT(n);return!wT.includes(o.hostname)&&!wT.includes(i.hostname)?e.status(400).send():t()};Ua.post("/run",vR,async(s,e)=>{let{code:t,type:r}=s.body;if(!t||!Wp.includes(r)){e.status(400).send({success:!1,reason:"missing arguments"});return}try{await yT({code:t,type:r}),e.send({success:!0})}catch(n){if(n instanceof $r){e.status(404).send({success:!1});return}if(n instanceof Wr){e.json({success:!1,type:"playground-error",stack:n.innerStack});return}e.json({success:!1,reason:n.message}),ST.error(n)}});Ua.post("/stop",(s,e)=>{try{bT(),e.send({success:!0})}catch(t){e.json({success:!1,reason:t.message}),ST.error(t)}})});function AT(s){let e=(0,RT.Router)();return e.get("/cdp-url",(t,r)=>{if(!s){r.status(503).send({error:"Testim standalone browser is not running"});return}r.status(200).send({url:s.webdriverApi.cdpUrl})}),e.get("/status",(t,r)=>{if(!s){r.status(503).send({ok:!1});return}r.status(200).send({ok:!0})}),e}var RT,xT=T(()=>{"use strict";RT=require("express")});var OT={};G(OT,{orchestrateRoutes:()=>ER});function ER(s,e){let t=(0,PT.default)();s(t),t.use(Vp.default.urlencoded({extended:!1,limit:"50mb"})),t.use((0,kT.default)()),t.use(Vp.default.json({limit:"50mb"}));let n={methods:["GET","PUT","POST","DELETE","OPTIONS"],allowedHeaders:["Content-Type","Authorization"],credentials:!0,maxAge:86400,origin:_e||so?"*":["http://localhost:3000","https://app.testim.io","https://staging.testim.io","https://playground.testim.io","https://app.staging.testim.cc","chrome-extension://pebeiooilphfmbohdbhbomomkkoghoia","https://tta-crm.tricentis.com"]};return t.use("*",(0,CT.default)(n)),cT(t),t.use("/playground",Ua),t.use("/cliJs",Ma),t.use("/standalone-browser",AT(e)),t.use((o,i)=>{i.status(404).send("Endpoint Not Found")}),t}var CT,PT,Vp,kT,_T=T(()=>{"use strict";CT=E(require("cors")),PT=E(require("express")),Vp=E(require("body-parser")),kT=E(require("compression"));lT();dT();IT();xT();le()});var DT={};G(DT,{init:()=>SR});async function SR({agentPort:s,agentBind:e,project:t,token:r,installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i},a){await RR({installPlaygroundPlaywrightDeps:n,installPlaygroundPuppeteerDeps:o,installPlaygroundSeleniumDeps:i,project:t}),await IR({agentPort:s,agentBind:e,project:t,token:r},a)}async function IR({agentPort:s,agentBind:e,project:t,token:r},n){let{orchestrateRoutes:o}=await Promise.resolve().then(()=>(_T(),OT));return new Promise((i,a)=>{let l=()=>{};t&&($m(t,r),l=f=>{f.use((h,g,y)=>{Object.assign(h,{project:t}),y()})});let c=o(l,n),d=LT.createServer(c);d.listen(s,e),d.on("error",m),d.on("listening",u);function m(f){if(f.syscall!=="listen")return a(f);switch(f.code){case"EACCES":case"EPERM":return a(new P(`Port ${s} requires elevated privileges`));case"EADDRINUSE":return a(new P(`Port ${s} is already in use, is another Testim instance running?`));default:return a(f)}}function u(){let{port:f}=d.address();console.log(`Running on port: ${f}`),AR()}})}function RR({installPlaygroundPlaywrightDeps:s,installPlaygroundPuppeteerDeps:e,installPlaygroundSeleniumDeps:t,project:r}){let n=[];return s&&n.push(Ie("playwright")),e&&n.push(Ie("puppeteer")),t&&n.push(Ie("selenium-webdriver"),Tr({projectId:r})),Promise.all(n)}async function AR(){await require("prompts")({name:"",type:"text",message:'Type the word "stop" or Press Ctrl + C.',validate:t=>t.toUpperCase().trim()==="STOP"}),console.log("Exiting Testim CLI"),process.exit(0)}var LT,NT=T(()=>{"use strict";LT=E(require("http"));ot();z();Ir();ts()});var WT={};G(WT,{getStartedWithStart:()=>Bp,runAgentMode:()=>kR});async function kR(s){var r;let e;if(await wr(s.playerLocation,s.canary),s.startTestimBrowser){await LR();try{e=await _R(s)}catch(n){throw(r=n==null?void 0:n.message)!=null&&r.includes("user data directory is already in use")?new P('Please close all chrome browsers that were opened with "testim start" and try again'):n}}let t=await Promise.resolve().then(()=>(NT(),DT));return e!=null&&e.webdriverApi&&setTimeout(async()=>{setTimeout(()=>(Tp(),ye(gb)));let o=["webpack"];for(let i of o)await Ie(i,{silent:!0}).catch(()=>null)},6e3),t.init(s,e)}function Bp(){return jT}function MT(s){try{return process.kill(s,0)}catch{return!1}}async function OR(s,e,t){let r=pr.join(Bt,`chrome-${nn}-process`),n=3e3,o=()=>{Pe.rmSync(r,{recursive:!0}),console.log(`
|
|
425
425
|
|
|
426
426
|
Browser session ended`),process.exit(0)};if(await ge(r)){let f=JSON.parse(Pe.readFileSync(r));if(MT(f.pid)){let h=()=>MT(f.pid)?setTimeout(h,n):o();return h(),{webdriverApi:f}}}let i=await Mo();await ge(Ls)||await Pe.promises.mkdir(Ls,{recursive:!0});let l=[...$T(Ls,e,t,i).desiredCapabilities.chromeOptions.args,...Ba.Launcher.defaultFlags().filter(f=>!["--disable-extensions","--disable-component-extensions-with-background-pages"].includes(f))],c={GOOGLE_API_KEY:"AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k",GOOGLE_DEFAULT_CLIENT_ID:"811574891467.apps.googleusercontent.com",GOOGLE_DEFAULT_CLIENT_SECRET:"kdloedMFGdGla2P1zacGjAQh"},d=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`,m=await Ba.launch({chromeFlags:l,startingUrl:d,ignoreDefaultFlags:!0,userDataDir:Ls,chromePath:i,envVars:c}),u={port:m.port,pid:m.pid,cdpUrl:await yr(`localhost:${m.port}`)};return Pe.writeFileSync(r,JSON.stringify(u)),m.process.once("exit",o),m.process.once("close",o),{webdriverApi:u}}async function _R(s){let e=`${dd}/extension/testim-full-master.zip`,t=pr.basename(e),r=pr.join(Bt,t),n=pr.join(Bt,`${t}__unzipped__`),o=!(s.ext||s.extensionPath);if(o&&await ge(r)){let f=await Pe.promises.stat(r);o=Date.now()-CR>f.mtimeMs}if(await Pe.promises.mkdir(Bt,{recursive:!0}),o){let f=(0,FT.default)("Downloading Testim Editor").start();await Ye(e,r);try{await st(r,n)}catch{await Pe.promises.rm(r,{recursive:!0,force:!0}),await Ye(e,r);try{await st(r,n)}catch{throw await Pe.promises.rm(r,{recursive:!0,force:!0}),f.fail("Failed to download Testim Editor"),new Error("Failed to download Testim Editor")}}finally{s.downloadBrowser||await Pe.promises.rm(n,{recursive:!0,force:!0})}f.succeed()}let i=s.extensionPath?null:(await Pe.promises.readFile(s.ext||r)).toString("base64");if(s.downloadBrowser)return await OR(s,i,n);await Tr({projectId:s.project},{chromeBinaryLocation:s.chromeBinaryLocations});let a=$T(Ls,i,s.extensionPath,s.chromeBinaryLocations),{WebDriver:l}=(Ln(),ye(hh)),{SeleniumPerfStats:c}=(ms(),ye(Vg)),d=new l;d.seleniumPerfStats=new c;let m=await d.initClient(a);jT=!0;let u=`${s.extensionPath?"http://localhost:3000/app/":"https://app.testim.io"}?startMode=true`;await d.url(u),Object.assign(d,{initialUrl:u});try{d.cdpUrl=await yr(m.value["goog:chromeOptions"].debuggerAddress)}catch{}return{webdriverApi:d}}function $T(s,e,t,r){let n=e?[e]:[],o=[`--user-data-dir=${s}`,"--log-level=OFF","--silent-debugger-extension-api","--no-first-run"];return t&&o.push(`--load-extension=${t}`),{logLevel:xR,desiredCapabilities:{chromeOptions:{args:o,extensions:n,binary:r},browserName:"chrome"},host:"localhost",port:9515}}async function LR(){if(await ge(Fa))try{let{webSocketDebuggerUrl:s}=await DR();await NR(s),await Pe.promises.unlink(Fa)}catch(s){s&&s.message==="unable to connect to devtools http server"&&await Pe.promises.unlink(Fa)}}async function DR(){let s=await Pe.promises.readFile(Fa,{encoding:"utf8"}),[e,t]=s.split(`
|
|
427
|
-
`).map(o=>o.trim()),r=Number.parseInt(e,10);if(!Number.isInteger(r)||r<1||r>65535)throw new Error("invalid port number");if(!t.startsWith("/devtools/browser/"))throw new Error("invalid devtools browser url");let n=await yr(`localhost:${r}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:r,webSocketDebuggerUrl:n}}async function NR(s,e=100){let t=await MR(s,e);return Yt(r=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),r)})}async function MR(s,e=100){let t=new BT.default(s,{timeout:e}),r=Yt(o=>{t.once("open",o)}).then(()=>{t.removeAllListeners()}),n=Yt(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return Promise.race([r,n]).then(()=>t)}var UT,FT,BT,Pe,pr,Ba,xR,CR,Ls,PR,Fa,jT,jp=T(()=>{"use strict";UT=E(require("ms")),FT=E(require("ora")),BT=E(require("ws")),Pe=E(require("fs")),pr=E(require("path")),Ba=E(require("chrome-launcher"));le();ts();z();Ir();Hc();B();xR=oo?"verbose":"silent",CR=(0,UT.default)("1h"),Ls=pr.join(Bt,"profile"),PR="DevToolsActivePort",Fa=pr.join(Ls,PR);jT=!1});var
|
|
427
|
+
`).map(o=>o.trim()),r=Number.parseInt(e,10);if(!Number.isInteger(r)||r<1||r>65535)throw new Error("invalid port number");if(!t.startsWith("/devtools/browser/"))throw new Error("invalid devtools browser url");let n=await yr(`localhost:${r}`,500);if(!n.endsWith(t))throw new Error("invariant webSocketDebuggerUrl miss match");return{port:r,webSocketDebuggerUrl:n}}async function NR(s,e=100){let t=await MR(s,e);return Yt(r=>{t.send(JSON.stringify({id:0,method:"Browser.close"}),r)})}async function MR(s,e=100){let t=new BT.default(s,{timeout:e}),r=Yt(o=>{t.once("open",o)}).then(()=>{t.removeAllListeners()}),n=Yt(o=>{t.once("error",o)}).catch(()=>{t.close(),t.removeAllListeners()});return Promise.race([r,n]).then(()=>t)}var UT,FT,BT,Pe,pr,Ba,xR,CR,Ls,PR,Fa,jT,jp=T(()=>{"use strict";UT=E(require("ms")),FT=E(require("ora")),BT=E(require("ws")),Pe=E(require("fs")),pr=E(require("path")),Ba=E(require("chrome-launcher"));le();ts();z();Ir();Hc();B();xR=oo?"verbose":"silent",CR=(0,UT.default)("1h"),Ls=pr.join(Bt,"profile"),PR="DevToolsActivePort",Fa=pr.join(Ls,PR);jT=!1});var gN=require("source-map-support/register");Array.prototype.at||=function(s){let e=Number.isInteger(s)?s:0,t=e>=0?e:this.length+e;if(!(t<0||t>=this.length))return this[t]};var Yp=require("perf_hooks");var to=E(require("os")),Ns=E(require("url")),Ms=E(require("http")),Va=E(require("https")),Jn=E(require("form-data")),Yn=class{constructor(){this.onloadstart=null;this.onprogress=null;this.onabort=null;this.onerror=null;this.onload=null;this.ontimeout=null;this.onloadend=null;this._listeners={}}addEventListener(e,t){e=e.toLowerCase(),this._listeners[e]||=[],this._listeners[e].push(t)}removeEventListener(e,t){let r;e=e.toLowerCase(),this._listeners[e]&&(r=this._listeners[e].indexOf(t),r!==-1&&this._listeners[e].splice(r,1))}dispatchEvent(e){var n;e.currentTarget=this,e.target=this;let t=e.type,r=this._listeners[t]||[];for(let o of r)o==null||o.call(this,e);(n=this[`on${t}`])==null||n.call(this,e)}},Xn=class extends Yn{constructor(t){super();this._request=t;this._contentType=null;this._body=null}_reset(){this._contentType=null,this._body=null}_setData(t){if(t!=null)if(typeof t=="string")t.length!==0&&(this._contentType="text/plain;charset=UTF-8"),this._body=Buffer.from(t,"utf8");else if(Buffer.isBuffer(t))this._body=t;else if(t instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=new Uint8Array(t);for(let o=0;o<t.byteLength;o++)r[o]=n[o];this._body=r}else if("buffer"in t&&t.buffer instanceof ArrayBuffer){let r=Buffer.alloc(t.byteLength),n=t.byteOffset,o=new Uint8Array(t.buffer);for(let i=0;i<t.byteLength;i++)r[i]=o[i+n];this._body=r}else if(typeof t=="object"&&t instanceof Jn.default)this._body=null;else throw new Error(`Unsupported send() data ${t}`)}_finalizeHeaders(t,r){this._contentType&&!("content-type"in r)&&(t["Content-Type"]=this._contentType),this._body&&(t["Content-Length"]=this._body.length.toString())}_startUpload(t){this._body&&t.write(this._body),t.end()}},Ds=class{constructor(e){this.type=e;this.target=null;this.currentTarget=null;this.lengthComputable=!1;this.loaded=0;this.total=0;this.bubbles=!1;this.cancelable=!1}},Qn=class extends Error{},Zn=class extends Error{},eo=class extends Error{},mr=class extends Error{},Re=class extends Yn{constructor(t){super();this.UNSENT=0;this.OPENED=1;this.HEADERS_RECEIVED=2;this.LOADING=3;this.DONE=4;this.nodejsHttpAgent=Ms.globalAgent;this.nodejsHttpsAgent=Va.globalAgent;this.nodejsBaseUrl=null;this._restrictedMethods={CONNECT:!0,TRACE:!0,TRACK:!0};this._restrictedHeaders={"accept-charset":!0,"accept-encoding":!0,"access-control-request-headers":!0,"access-control-request-method":!0,connection:!0,"content-length":!0,cookie:!0,cookie2:!0,date:!0,dnt:!0,expect:!0,host:!0,"keep-alive":!0,origin:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,via:!0};this._privateHeaders={"set-cookie":!1,"set-cookie2":!1};this._userAgent=`Mozilla/5.0 (${to.type()} ${to.arch()}) node.js/${process.versions.node} v8/${process.versions.v8}`;this.onreadystatechange=null;this.readyState=Re.UNSENT;this.response=null;this.responseText="";this.responseType="";this.status=0;this.statusText="";this.timeout=0;this.upload=new Xn(this);this._method=null;this._url=null;this._sync=!1;this._headers=null;this._loweredHeaders=null;this._mimeOverride=null;this._request=null;this._response=null;this._responseParts=null;this._responseHeaders=null;this._aborting=null;this._error=null;this._loadedBytes=0;this._totalBytes=0;this._lengthComputable=!1;this._anonymous=t==null?void 0:t.anon}static nodejsSet(t){Re.prototype.nodejsSet(t)}nodejsSet(t){if("httpAgent"in t&&(this.nodejsHttpAgent=t.httpAgent),"httpsAgent"in t&&(this.nodejsHttpsAgent=t.httpsAgent),"baseUrl"in t){let r=t.baseUrl;if(r!==null&&!Ns.parse(r,!1,!0).protocol)throw new Qn("baseUrl must be an absolute URL");this.nodejsBaseUrl=r}}open(t,r,n){if(t=t.toUpperCase(),t in this._restrictedMethods)throw new eo(`HTTP method ${t} is not allowed in XHR`);let o=this._parseUrl(r);n===void 0&&(n=!0),this._method=t,this._url=o,this._sync=!n,this._headers={},this._loweredHeaders={},this._mimeOverride=null,this._setReadyState(Re.OPENED),this._request=null,this._response=null,this.status=0,this.statusText="",this._responseParts=[],this._responseHeaders=null,this._loadedBytes=0,this._totalBytes=0,this._lengthComputable=!1}setRequestHeader(t,r){if(this.readyState!==Re.OPENED)throw new mr("XHR readyState must be OPENED");let n=t.toLowerCase();this._restrictedHeaders[n]||/^sec-/.test(n)||/^proxy-/.test(n)||(r=r.toString(),n in this._loweredHeaders?(t=this._loweredHeaders[n],this._headers[t]=`${this._headers[t]}, ${r}`):(this._loweredHeaders[n]=t,this._headers[t]=r))}send(t){if(this.readyState!==Re.OPENED)throw new mr("XHR readyState must be OPENED");if(this._request)throw new mr("send() already called");switch(this._url.protocol){case"file:":this._sendFile();break;case"http:":case"https:":this._sendHttp(t);break;default:throw new Zn(`Unsupported protocol ${this._url.protocol}`)}}abort(){this._request&&(this._request.abort(),this._setError(),this._dispatchProgress("abort"),this._dispatchProgress("loadend"))}getResponseHeader(t){var n;let r=t.toLowerCase();return((n=this._responseHeaders)==null?void 0:n[r])||null}getAllResponseHeaders(){return this._responseHeaders?Object.entries(this._responseHeaders).map(([t,r])=>`${t}: ${r}`).join(`\r
|
|
428
428
|
`):""}overrideMimeType(t){if([Re.LOADING,Re.DONE].includes(this.readyState))throw new mr("overrideMimeType() not allowed in LOADING or DONE");this._mimeOverride=t.toLowerCase()}_setReadyState(t){this.readyState=t;let r=new Ds("readystatechange");this.dispatchEvent(r)}_sendFile(){throw this._url.method!=="GET"?new Zn("The file protocol only supports GET"):new Error("Protocol file: not implemented")}_sendHttp(t){if(this._sync)throw new Error("Synchronous XHR processing not implemented");t!=null&&(this._method==="GET"||this._method==="HEAD")?t=null:t||="",this.upload._setData(t),this._finalizeHeaders(t),this._sendHxxpRequest(t)}_sendHxxpRequest(t){let r=this._url.protocol==="http:"?this.nodejsHttpAgent:this.nodejsHttpsAgent,o=(this._url.protocol==="http:"?Ms:Va).request({hostname:this._url.hostname,port:this._url.port,path:this._url.path,auth:this._url.auth,method:this._method,headers:this._headers,agent:r});typeof t=="object"&&t instanceof Jn.default&&t.pipe(o),this._request=o,this.timeout&&o.setTimeout(this.timeout,()=>this._onHttpTimeout(o)),o.on("response",i=>this._onHttpResponse(o,i)),o.on("error",()=>this._onHttpRequestError(o)),this.upload._startUpload(o),this._request===o&&this._dispatchProgress("loadstart")}_finalizeHeaders(t){typeof t=="object"&&t instanceof Jn.default&&Object.assign(this._headers,t.getHeaders()),this._headers.Connection="keep-alive",this._headers.Host=this._url.host,this._anonymous&&(this._headers.Referer="about:blank"),this._headers["User-Agent"]=this._userAgent,this.upload._finalizeHeaders(this._headers,this._loweredHeaders)}_onHttpResponse(t,r){if(this._request!==t)return;if([301,302,303,307,308].includes(r.statusCode)){this._url=this._parseUrl(r.headers.location),this._method="GET","content-type"in this._loweredHeaders&&(delete this._headers[this._loweredHeaders["content-type"]],delete this._loweredHeaders["content-type"]),"Content-Type"in this._headers&&delete this._headers["Content-Type"],delete this._headers["Content-Length"],this.upload._reset(),this._finalizeHeaders(),this._sendHxxpRequest();return}this._response=r,this._response.on("data",o=>this._onHttpResponseData(r,o)),this._response.on("end",()=>this._onHttpResponseEnd(r)),this._response.on("close",()=>this._onHttpResponseClose(r)),this.status=this._response.statusCode,this.statusText=Ms.STATUS_CODES[this.status],this._parseResponseHeaders(r);let n=this._responseHeaders["content-length"];n?(this._totalBytes=parseInt(n,10),this._lengthComputable=!0):this._lengthComputable=!1,this._setReadyState(Re.HEADERS_RECEIVED)}_onHttpResponseData(t,r){if(this._response===t)return this._responseParts.push(r),this._loadedBytes+=r.length,this.readyState!==Re.LOADING&&this._setReadyState(Re.LOADING),this._dispatchProgress("progress")}_onHttpResponseEnd(t){if(this._response===t)return this._parseResponse(),this._request=null,this._response=null,this._setReadyState(Re.DONE),this._dispatchProgress("load"),this._dispatchProgress("loadend")}_onHttpResponseClose(t){if(this._response!==t)return;let r=this._request;return this._setError(),r.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_onHttpTimeout(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("timeout"),this._dispatchProgress("loadend")}_onHttpRequestError(t){if(this._request===t)return this._setError(),t.abort(),this._setReadyState(Re.DONE),this._dispatchProgress("error"),this._dispatchProgress("loadend")}_dispatchProgress(t){let r=new Ds(t);r.lengthComputable=this._lengthComputable,r.loaded=this._loadedBytes,r.total=this._totalBytes,this.dispatchEvent(r)}_setError(){this._request=null,this._response=null,this._responseHeaders=null,this._responseParts=null}_parseUrl(t){let r,n,o,i=this.nodejsBaseUrl===null?t:Ns.resolve(this.nodejsBaseUrl,t),a=Ns.parse(i,!1,!0);return a.hash=null,a.auth&&(o!=null||n!=null)&&(r=a.auth.indexOf(":"),r===-1?o||(o=a.auth):(o||(o=a.substring(0,r)),n||(n=a.substring(r+1)))),(o||n)&&(a.auth=`${o}:${n}`),a}_parseResponseHeaders(t){this._responseHeaders={},Object.entries(t.headers).forEach(([r,n])=>{let o=r.toLowerCase();this._privateHeaders[o]||(this._mimeOverride!==null&&o==="content-type"&&(n=this._mimeOverride),this._responseHeaders[o]=n)}),this._mimeOverride!==null&&!("content-type"in this._responseHeaders)&&(this._responseHeaders["content-type"]=this._mimeOverride)}_parseResponse(){let t=Buffer.concat(this._responseParts);switch(this._responseHeaders["content-encoding"]==="gzip"&&(t=require("zlib").gunzipSync(t)),this._responseParts=null,this.responseType){case"text":this._parseTextResponse(t);break;case"json":this.responseText=null;try{this.response=JSON.parse(t.toString("utf-8"))}catch{this.response=null}break;case"buffer":this.responseText=null,this.response=t;break;case"arraybuffer":{this.responseText=null;let r=new ArrayBuffer(t.length),n=new Uint8Array(r);for(let o=0;o<t.length;o++)n[o]=t[o];this.response=r;break}default:this._parseTextResponse(t)}}_parseTextResponse(t){try{this.responseText=t.toString(this._parseResponseEncoding())}catch{this.responseText=t.toString("binary")}this.response=this.responseText}_parseResponseEncoding(){let t=this._responseHeaders["content-type"],r=/;\s*charset=(.*)$/.exec(t);return t&&r?r[1]:"utf-8"}},ke=Re;ke.SyntaxError=Qn,ke.ProgressEvent=Ds,ke.SecurityError=eo,ke.XMLHttpRequest=Re,ke.InvalidStateError=mr,ke.XMLHttpRequestUpload=Xn,ke.UNSENT=0,ke.OPENED=1,ke.HEADERS_RECEIVED=2,ke.LOADING=3,ke.DONE=4;Object.assign(global,{xhr2:ke,XMLHttpRequest:ke,performance:Yp.performance,...typeof Blob>"u"&&{Blob:require("buffer").Blob}});var VT=E(require("semver"));Ve();Ul();jt();ts();var Gp=E(require("chalk")),GT=require("events");ae();fn();z();ae();$o();j();var rf=E(require("os")),Fl=E(require("path")),Bl=E(require("chalk")),Ko=require("fs");le();function sf(s){var e,t,r;if(!((e=s==null?void 0:s.message)!=null&&e.includes("SIGINT")))try{let n=rf.homedir();(0,Ko.mkdirSync)(Fl.resolve(n,".testim_logs"),{recursive:!0});let o=Fl.resolve(n,".testim_logs",`${new Date().toISOString().replace(/:|\./g,"_")}.log`);console.log("Oops :( The test runner has encountered an unexpected error. A complete log of this run can be found in:"),console.log(` ${o}`),ad&&console.log(`Call stack: ${s==null?void 0:s.stack}`),(t=s==null?void 0:s.message)!=null&&t.includes("Unable to compile TypeScript")&&((r=s.stack)!=null&&r.includes("runner/src"))&&process.argv.some(i=>i.includes("player-require-path"))&&(console.log(Bl.default.red("Looks like you got a TypeScript compile error champ - but it's not a very good one because we use TypeScript in transpile-only mode")),console.log(Bl.default.red("change require('ts-node/register/transpile-only'); to require('ts-node/register'); for better errors"))),(0,Ko.writeFileSync)(o,`${s}
|
|
429
429
|
${s==null?void 0:s.stack}
|
|
430
430
|
|
|
431
|
-
${JSON.stringify(s,Object.getOwnPropertyNames(s),2)}`)}catch{}}tn();var Iv=x("process-handler"),nf=!1;function Rv(s){return s instanceof Error?1:nf?0:(s||={},Object.values(s).some(({runnerStatus:t,success:r,testStatus:n,status:o})=>[t,o].includes(pe.SKIPPED)||[t,o].includes(pe.FAILED)&&n===Xe.EVALUATING?!1:r!==!0)?1:0)}function Av(){try{Qt("chromedriver").stop()}catch{}}function of(){nf=!0}async function jl(s){s!=null&&s.stack&&(rs?console.error(s,s.stack):sf(s)),Av(),await Iv.waitForFlush(),process.exit(Rv(s))}he();j();de();var UR=x("cli-entry");function FR(s){if(!VT.satisfies(process.version,s))throw new P(`Testim.io CLI supports Node.js ${s}. This condition was not satisfied with current version: ${process.version}`);let e=
|
|
431
|
+
${JSON.stringify(s,Object.getOwnPropertyNames(s),2)}`)}catch{}}tn();var Iv=x("process-handler"),nf=!1;function Rv(s){return s instanceof Error?1:nf?0:(s||={},Object.values(s).some(({runnerStatus:t,success:r,testStatus:n,status:o})=>[t,o].includes(pe.SKIPPED)||[t,o].includes(pe.FAILED)&&n===Xe.EVALUATING?!1:r!==!0)?1:0)}function Av(){try{Qt("chromedriver").stop()}catch{}}function of(){nf=!0}async function jl(s){s!=null&&s.stack&&(rs?console.error(s,s.stack):sf(s)),Av(),await Iv.waitForFlush(),process.exit(Rv(s))}he();j();de();var UR=x("cli-entry");function FR(s){if(!VT.satisfies(process.version,s))throw new P(`Testim.io CLI supports Node.js ${s}. This condition was not satisfied with current version: ${process.version}`);let e=18,t=20,r=Number(process.versions.node.split(".")[0]),n=new Date("2025-04-30T00:00:00.000Z"),o=n<=new Date,i=new Intl.DateTimeFormat("en-US",{year:"numeric",month:"long",day:"numeric"}).format(n);if(r<e)throw new P(`Testim.io CLI supports Node.js ${e} and above, please upgrade to a newer Node.js version`);if(r<t&&o)throw new P(`Testim.io CLI supports Node.js ${t} and above, please upgrade to a newer Node.js version`);r<t&&console.log(Gp.default.yellow(`Testim.io CLI will stop supporting Node.js < ${t} on ${i}. please upgrade to a newer Node.js version.`))}async function BR(){console.log("Starting Testim.io CLI");let[s,e]=await Promise.all([Promise.resolve().then(()=>(B(),J)),Promise.resolve().then(()=>(Cf(),xf))]);M("Starting Testim.io CLI"),tf(jl);try{FR(s.getEnginesVersion())}catch(t){console.log("Argument Error:",t.message),process.exit(1)}try{await D.fetch();let t=await e.process();if(M("in main, after options.process"),oc(global.proxyUri),GT.EventEmitter.defaultMaxListeners="parallel"in t&&t.parallel>10?t.parallel*3:30,nc(t.project),pm("token"in t&&typeof t.token=="string"?t.token:"anonymous_encrypt_key"),s.isInstallLazyDepsMode(t)){console.log("Lazy dependency installation started");let{installAllLazyDependencies:o}=await Promise.resolve().then(()=>(Ir(),_f));return await o()}if(s.isLoginMode(t))return;if(s.isCreatePrefetchedDataMode(t)){await Xr(),await dn(t);let{preloadTests:o}=await Promise.resolve().then(()=>(ti(),Df));await o(t),!t.playerRequirePath&&t.mode!==Q.EXTENSION&&await wr(t.playerLocation,t.canary);let i=await lm();i.success?console.log(`created prefetched data at ${Ao()}`):console.error("failed to create prefetch data",i.error);return}let r=await Promise.resolve().then(()=>(aT(),iT));if(s.isTunnelOnlyMode(t)){await r.init(t);let{serveTunneling:o}=await Promise.resolve().then(()=>(au(),iu));await o(t);return}if(s.isAgentMode(t)){let{runAgentMode:o}=await Promise.resolve().then(()=>(jp(),WT));return o(t)}if(t.saveRCALocally){let{initServer:o}=await Promise.resolve().then(()=>(Ou(),zg)),{port:i}=await o(t);t.localRCASaver=`http://localhost:${i}`}t.exitCodeIgnoreFailingTests&&of(),M("right before testRunner.init/prepareRunner.prepare");let[n]=await Promise.all([Qm(t),r.init(t)]);return M("right after testRunner.init/prepareRunner.prepare"),await r.run(t,n)}catch(t){if(t instanceof Br)return;let r=s.getArgsOnRemoteRunFailure();return r&&await xl({...r,error:t.message}).catch(()=>{}),t instanceof P?(console.log(Gp.default.red("Argument Error:",t.message)),t):(console.log("Error:",t.message),UR.error("runner ended with unexpected error",{err:t}),t)}}BR().then(s=>{Array.isArray(s)&&s.length===0&&console.log("No tests ran"),jl(s)});
|
|
432
432
|
//# sourceMappingURL=cli.js.map
|