momentic-mobile 0.21.1 → 0.21.2

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/bin/cli.js CHANGED
@@ -24,7 +24,7 @@ ${this.decisions.map(e=>e.toString()).join(`
24
24
  `).slice(o).filter(Boolean).join(`
25
25
  `);return e.push({message:n,origin:a,type:t}),e}_log(e,t){r.write(this._buffer,e," ".repeat(this._groupDepth)+t,3)}debug(e,...t){this._log("debug",vs(e,...t))}error(e,...t){this._log("error",vs(e,...t))}info(e,...t){this._log("info",vs(e,...t))}log(e,...t){this._log("log",vs(e,...t))}warn(e,...t){this._log("warn",vs(e,...t))}getBuffer(){return this._buffer.length>0?this._buffer:void 0}};function DT(r){let e=globalThis.console,t=new Pc;globalThis.console=t;try{r()}finally{let o=t.getBuffer()?.map(i=>i.message).join(`
26
26
  `);process.stderr.write(`${o}
27
- `),globalThis.console=e}}var zm=" ".repeat(6);import XD from"fetch-retry";import JD from"os";import kT,{multistream as QD}from"pino";import ZD from"pino-pretty";import e0 from"pino-std-serializers";var ki=new Map,t0=!0,FT="Log throttle exceeded",r0=100,n0=5e3,o0=XD(global.fetch,{retries:2,retryOn:function(r,e,t){return!!(e!==null||t&&t.status>=500)},retryDelay:function(r){return Math.pow(2,r)*500}}),Gm=class r{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=!1;lastWindowStart=Date.now();site="https://ingest.us.signoz.cloud:443/logs/json";flushIntervalMs;maxBatchSize;buffer=[];flushTimer;constructor({bindings:e,hostname:t,disableConsoleLogs:n,flushIntervalMs:o,maxBatchSize:i}){this.hostname=t??JD.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...e,env:"production"},this.flushIntervalMs=o??5e3,this.maxBatchSize=i??10;let a={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=t0?kT(a):kT(a,QD([{stream:ZD({colorize:!0})}]))}child(e){return new r({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}async flush(){await this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush()}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushBuffer()},this.flushIntervalMs))}async flushBuffer(){if(this.buffer.length===0)return;let e=this.buffer;this.buffer=[];try{let t=await o0(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:Co(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===FT)return!0;let t=Date.now();return t-this.lastWindowStart>n0&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,FT),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<r0?(this.logsInCurrentWindow++,!0):(this.droppedLogsInWindow=!0,!1)}log(e,t,n,...o){try{this.logHelper(e,t,n,...o)}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`)}}logHelper(e,t,n,...o){if(Ss[e]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof t=="string"&&!n&&(t={message:t}),typeof t=="object"&&t&&"err"in t&&t.err instanceof Error&&(t.err=e0.err(t.err));let i={...this.bindingAttributes,...t&&typeof t=="object"?t:{},...o.length>0?{args:o}:{}},a={host:this.hostname,env:this.bindingAttributes.env};this.disableConsoleLogs||this.consoleLogger[e](i,n,...o);let s={timestamp:Math.round(Date.now()*1e6),severity_text:e.toUpperCase(),resources:a,attributes:{},body:bE({message:n||"",...i})};this.buffer.push(s),this.buffer.length>=this.maxBatchSize?(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.flushBuffer()):this.scheduleFlush()}setApp(e){let t=this.bindingAttributes.app;this.bindingAttributes.app=e,ki.set("app",this),ki.delete(t)}debug(e,t,...n){this.log("debug",e,t,...n)}info(e,t,...n){this.log("info",e,t,...n)}warn(e,t,...n){this.log("warn",e,t,...n)}error(e,t,...n){this.log("error",e,t,...n)}bindings(){return this.bindingAttributes}addBinding(e,t){this.bindingAttributes[e]=t}setMinLevel(e){typeof e=="number"?(this.minLevelValue=e,this.consoleLogger.level=EE[e]):(this.minLevelValue=Ss[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},Fi=({app:r,hostname:e,disableConsoleLogs:t})=>(ki.has(r)||ki.set(r,new Gm({bindings:{app:r},hostname:e,disableConsoleLogs:t})),ki.get(r));async function UT(){await Promise.all([...ki.values()].map(r=>r.flush()))}import{hostname as i0}from"os";var Vt=Fi({app:"cli",hostname:i0(),disableConsoleLogs:!0}).child({cliVersion:"0.21.1"});function Hm(r){if(!r)return;r=r.toLowerCase();let e=Ac.safeParse(r);if(e.success)return C.setMinLevel(e.data),e.data}function BT({results:r,startTime:e,entity:t,getDisplayLine:n,onFailed:o}){let i=r.filter(u=>u.status==="PASSED"&&u.quarantined),a=r.filter(u=>u.status==="PASSED"&&!u.quarantined),s=r.filter(u=>u.status==="FAILED"&&u.quarantined),c=r.filter(u=>u.status==="FAILED"&&!u.quarantined),l=r.filter(u=>u.status==="CANCELLED");return DT(()=>{if(c.forEach(u=>{C.log(""),o(u)}),c.length){C.log("");let u=c.length===1?"":"s";C.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{C.dimmed(n(d))})}if(l.length){C.log("");let u=l.length===1?"":"s";C.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{C.dimmed(n(d))})}if(a.length){C.log("");let u=a.length===1?"":"s";C.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{C.dimmed(n(d))})}if(s.length){C.log("");let u=s.length===1?"":"s";C.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{C.dimmed(n(d))})}if(i.length){C.log("");let u=i.length===1?"":"s";C.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{C.dimmed(n(d))})}C.log(""),C.dimmed(`Total time: ${Math.round((Date.now()-e)/1e3)}s`)}),{quarantinedPassed:i.length,passed:a.length,quarantinedFailed:s.length,failed:c.length,cancelled:l.length}}var As=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=Ui.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=Ui.bgGreen.white("PASS"),a=3):r.includes("START")?(i=Ui.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=Ui.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=Ui.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=Ui.bgMagenta.white("RUNNING"),a=0):(C.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),a0||(i=`${i}`),C.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};import s0 from"fs";import{tmpdir as l0}from"os";import c0 from"path";import{registry as Rs}from"playwright-core/lib/server";import zT from"proper-lockfile";var GT=c0.join(l0(),"momenticBrowserInstallation");var Vm=["chrome","chromium","chrome-for-testing","ffmpeg"],u0={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},HT={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell",ffmpeg:"ffmpeg"};function VT(r){if(r==="Org Default")return!1;let e=HT[u0[r]??""]??"",t=Rs.findExecutable(e);return!t||t.installType==="none"?!1:Wm(t)}function Wm(r){let e=r.executablePath();return s0.existsSync(e)}function d0(r,e){let t=HT[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=Rs.findExecutable(t);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${r}`);if(!(!e&&Wm(n)))return n}async function p0({browser:r,force:e}){let t=d0(r,e);if(!t){C.info(`Browser '${r}' is already installed, skipping...`);return}C.info(`Installing browser '${r}'...`);try{await Rs.installDeps([t],!1),await Rs.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){C.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Rs.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Wm(o);)C.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function Oc({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?Vm:Array.from(new Set(r));try{await zT.lock(GT,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){C.warn(`Failed to acquire lock to install browsers. Please ensure that any other process installing browsers completes within 5 minutes: ${i}. Continuing without installation...`);return}let o;try{for(let i of n)try{await p0({browser:i,force:e})}catch(a){o=a,C.error(`Failed to install the ${i} browser: ${a}`)}}finally{await zT.unlock(GT,{realpath:!1})}if(o)throw o}import{createServer as m0}from"http";async function Lc(r,e,t=30){for(let n=0;n<t;n+=1){let o=r+n;if(await Nc(o))return o}C.error(`Could not find an available port for ${e} starting from ${r} after ${t} attempts`),process.exit(1)}async function Nc(r){return new Promise((e,t)=>{let n=m0();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(C.warn({err:o},"Unexpected error checking for open ports, continuing..."),n.close(),e(!0))}),n.once("listening",()=>{n.close(()=>{e(!0)})}),n.listen(r)})}import Hne from"blocked-at";import Wne from"why-is-node-running";function WT(r){let e=r?.shardIndex??1,t=r?.shardCount??1;if(e<1)throw new Error("Shard index must be greater than 0.");if(t<1)throw new Error("Shard count must be greater than 0.");if(e>t)throw new Error("Shard index cannot be greater than shard count")}function g0(r,e,t,n){if(t>r.length&&(C.warn(`Shard count ${t} is greater than the number of tests ${r.length}! Some workers won't have any tests to run.`),t=Math.max(t,r.length),e>t))return[];let o=Math.floor((e-1)*(r.length/t)),i=Math.floor(e*(r.length/t));return(n?[...r].sort((s,c)=>n(s).localeCompare(n(c))):[...r].sort()).filter((s,c)=>c>=o&&c<i)}function jT(r){let{items:e,shardIndex:t,shardCount:n,sortKey:o}=r;return n>1?g0(e,t,n,o):e}function jm({regenerateCache:r,saveCache:e,disableCache:t}){if(t){if(r)throw new Error("--disable-cache and --regenerate-cache cannot be used together.");if(e)throw new Error("--disable-cache and --save-cache cannot be used together.")}}import uB from"fs";import aoe,{multistream as loe}from"pino";import uoe from"pino-pretty";var moe=5*1024,h0="...[truncated]",goe=Buffer.byteLength(h0,"utf8");import{PostHog as Roe}from"posthog-node";var Gn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var $T=r=>{let e=r.reason===void 0?new DOMException("This operation was aborted.","AbortError"):r.reason;return e instanceof Error?e:new DOMException(e,"AbortError")};function z(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,a;if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);return new Promise((s,c)=>{let l;if(e.signal){let{signal:m}=e;if(m.aborted)return c($T(m));l=()=>c($T(m)),m.addEventListener("abort",l,{once:!0})}let u=()=>{if(e.signal&&e.signal.removeEventListener("abort",l),n)try{s(n())}catch(m){c(m)}else{typeof r.cancel=="function"&&Promise.resolve().then(()=>r.cancel()).catch(()=>{});let m=o instanceof Error?o:new Gn(o??`Promise timed out after ${t}ms`);c(m)}};t<1/0&&(a=i.setTimeout(u,t));let d=()=>{i.clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",l)};Promise.resolve(r).then(m=>{d(),s(m)}).catch(m=>{d(),c(m)})})}import{PostHog as Loe}from"posthog-node";import{execSync as f0}from"child_process";import Bi from"os";import S0 from"v8";var qT,jr,YT=Bi.platform(),y0=Bi.cpus().map(r=>({model:r.model,speed:r.speed})).reduce((r,e)=>(r[e.model]={speed:e.speed},r.totalCores=(r.totalCores??0)+1,r),{}),KT=r=>{try{let e={},t=!1,n=b0(),o=E0(),i=`${Math.round(n.freePercentage*100)}%`;n.freePercentage<.05&&(Object.assign(e,process.memoryUsage()),t=!0);let a=`${o?Math.round(o.idle):"unknown"}%`;o&&o?.total>80&&(t=!0);let s=S0.getHeapStatistics(),c=s.used_heap_size,l=s.heap_size_limit;c/l>.9&&(t=!0),t?(r.warn({memory:n,cpu:o,heapStats:s,...e},"Critical resource usage metrics detected"),xo&&C.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):r.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}};function XT(r){if(!Vr)return KT(r),{interval:setInterval(()=>KT(r),2e4),cpuMetadata:y0,platform:YT}}function b0(){let r=Bi.totalmem(),e=YT==="darwin"?T0():(()=>{let n=Bi.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),t=e.availableMemory/r;return{totalMemory:r,freeMemory:e.availableMemory,freePercentage:t}}function E0(){let r=Bi.cpus(),e=Date.now(),t={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let o of r)t.user+=o.times.user,t.nice+=o.times.nice,t.sys+=o.times.sys,t.idle+=o.times.idle,t.irq+=o.times.irq;if(t.total=t.user+t.nice+t.sys+t.idle+t.irq,!jr)return jr=t,null;let n={user:t.user-jr.user,nice:t.nice-jr.nice,sys:t.sys-jr.sys,idle:t.idle-jr.idle,irq:t.irq-jr.irq,total:t.total-jr.total};return qT={measurementTime:e,intervalMs:e-jr.measurementTime,user:n.user/n.total*100,nice:n.nice/n.total*100,sys:n.sys/n.total*100,idle:n.idle/n.total*100,irq:n.irq/n.total*100,total:100-n.idle/n.total*100},jr=t,qT}function T0(){try{let r=f0("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),t=r.match(/page size of (\d+) bytes/)?.[1],n=t?Number.parseInt(t,10):4096,o=u=>{let m=r.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Number.parseInt(m,10):0},i=o("Pages free"),a=o("Pages inactive"),s=o("Pages speculative"),c=i*n,l=(a+s)*n;return{availableMemory:c+l,rawFreeMemory:c,cachedMemory:l}}catch{let e=Bi.freemem();return{availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}var Dc=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function v0(r){if(!r||r.length===0)return{};let e={};for(let t of r){let n=t.indexOf(":");if(n>-1){let o=t.slice(0,n).trim(),i=t.slice(n+1).trim();o&&(e[o]=i);continue}e[t]=!0}return e}function kc(r,e){let t=v0(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var Av="=",zc=";",ng=",";var Rv=8192;var Vi={};II(Vi,{getKeyPairs:()=>tk,parseKeyPairsIntoRecord:()=>rk,parsePairKeyValue:()=>wv,serializeKeyPairs:()=>ek});ke();var Z0=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function ek(r){return r.reduce(function(e,t){var n=""+e+(e!==""?ng:"")+t;return n.length>Rv?e:n},"")}function tk(r){return r.getAllEntries().map(function(e){var t=Z0(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=zc+o.metadata.toString()),i})}function wv(r){var e=r.split(zc);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(Av);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=qm(e.join(zc))),{key:o,value:i,metadata:a}}}}}function rk(r){return typeof r!="string"||r.length===0?{}:r.split(ng).map(function(e){return wv(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,t){return e[t.key]=t.value,e},{})}ke();var Gc;(function(r){r.AlwaysOff="always_off",r.AlwaysOn="always_on",r.ParentBasedAlwaysOff="parentbased_always_off",r.ParentBasedAlwaysOn="parentbased_always_on",r.ParentBasedTraceIdRatio="parentbased_traceidratio",r.TraceIdRatio="traceidratio"})(Gc||(Gc={}));var nk=",",ok=["OTEL_SDK_DISABLED"];function ik(r){return ok.indexOf(r)>-1}var ak=["OTEL_BSP_EXPORT_TIMEOUT","OTEL_BSP_MAX_EXPORT_BATCH_SIZE","OTEL_BSP_MAX_QUEUE_SIZE","OTEL_BSP_SCHEDULE_DELAY","OTEL_BLRP_EXPORT_TIMEOUT","OTEL_BLRP_MAX_EXPORT_BATCH_SIZE","OTEL_BLRP_MAX_QUEUE_SIZE","OTEL_BLRP_SCHEDULE_DELAY","OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_SPAN_LINK_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_EXPORTER_OTLP_TIMEOUT","OTEL_EXPORTER_OTLP_TRACES_TIMEOUT","OTEL_EXPORTER_OTLP_METRICS_TIMEOUT","OTEL_EXPORTER_OTLP_LOGS_TIMEOUT","OTEL_EXPORTER_JAEGER_AGENT_PORT"];function sk(r){return ak.indexOf(r)>-1}var lk=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function ck(r){return lk.indexOf(r)>-1}var og=1/0,ig=128,uk=128,dk=128,ag={OTEL_SDK_DISABLED:!1,CONTAINER_NAME:"",ECS_CONTAINER_METADATA_URI_V4:"",ECS_CONTAINER_METADATA_URI:"",HOSTNAME:"",KUBERNETES_SERVICE_HOST:"",NAMESPACE:"",OTEL_BSP_EXPORT_TIMEOUT:3e4,OTEL_BSP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BSP_MAX_QUEUE_SIZE:2048,OTEL_BSP_SCHEDULE_DELAY:5e3,OTEL_BLRP_EXPORT_TIMEOUT:3e4,OTEL_BLRP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BLRP_MAX_QUEUE_SIZE:2048,OTEL_BLRP_SCHEDULE_DELAY:5e3,OTEL_EXPORTER_JAEGER_AGENT_HOST:"",OTEL_EXPORTER_JAEGER_AGENT_PORT:6832,OTEL_EXPORTER_JAEGER_ENDPOINT:"",OTEL_EXPORTER_JAEGER_PASSWORD:"",OTEL_EXPORTER_JAEGER_USER:"",OTEL_EXPORTER_OTLP_ENDPOINT:"",OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:"",OTEL_EXPORTER_OTLP_METRICS_ENDPOINT:"",OTEL_EXPORTER_OTLP_LOGS_ENDPOINT:"",OTEL_EXPORTER_OTLP_HEADERS:"",OTEL_EXPORTER_OTLP_TRACES_HEADERS:"",OTEL_EXPORTER_OTLP_METRICS_HEADERS:"",OTEL_EXPORTER_OTLP_LOGS_HEADERS:"",OTEL_EXPORTER_OTLP_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_TRACES_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_METRICS_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_LOGS_TIMEOUT:1e4,OTEL_EXPORTER_ZIPKIN_ENDPOINT:"http://localhost:9411/api/v2/spans",OTEL_LOG_LEVEL:Ge.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:uk,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:dk,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Gc.ParentBasedAlwaysOn,OTEL_TRACES_SAMPLER_ARG:"",OTEL_LOGS_EXPORTER:"",OTEL_EXPORTER_OTLP_INSECURE:"",OTEL_EXPORTER_OTLP_TRACES_INSECURE:"",OTEL_EXPORTER_OTLP_METRICS_INSECURE:"",OTEL_EXPORTER_OTLP_LOGS_INSECURE:"",OTEL_EXPORTER_OTLP_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE:"",OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE:"",OTEL_EXPORTER_OTLP_COMPRESSION:"",OTEL_EXPORTER_OTLP_TRACES_COMPRESSION:"",OTEL_EXPORTER_OTLP_METRICS_COMPRESSION:"",OTEL_EXPORTER_OTLP_LOGS_COMPRESSION:"",OTEL_EXPORTER_OTLP_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_TRACES_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_LOGS_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"cumulative"};function pk(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function mk(r,e,t,n,o){if(n===void 0&&(n=-1/0),o===void 0&&(o=1/0),typeof t[r]<"u"){var i=Number(t[r]);isNaN(i)||(i<n?e[r]=n:i>o?e[r]=o:e[r]=i)}}function gk(r,e,t,n){n===void 0&&(n=nk);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var hk={ALL:Ge.ALL,VERBOSE:Ge.VERBOSE,DEBUG:Ge.DEBUG,INFO:Ge.INFO,WARN:Ge.WARN,ERROR:Ge.ERROR,NONE:Ge.NONE};function fk(r,e,t){var n=t[r];if(typeof n=="string"){var o=hk[n.toUpperCase()];o!=null&&(e[r]=o)}}function Cv(r){var e={};for(var t in ag){var n=t;switch(n){case"OTEL_LOG_LEVEL":fk(n,e,r);break;default:if(ik(n))pk(n,e,r);else if(sk(n))mk(n,e,r);else if(ck(n))gk(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function Rt(){var r=Cv(process.env);return Object.assign({},ag,r)}function xv(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function Hc(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=xv(r.charCodeAt(n)),i=xv(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var Mv="1.25.1";var Sk="deployment.environment";var yk="process.runtime.name";var bk="service.name";var Ek="service.instance.id";var Tk="telemetry.sdk.name",vk="telemetry.sdk.language",Ak="telemetry.sdk.version";var _v=Sk;var Iv=yk;var Vc=bk;var Pv=Ek;var Ps=Tk,Os=vk,Ls=Ak;var Rk="nodejs";var Ov=Rk;var Wi,Wc=(Wi={},Wi[Ps]="opentelemetry",Wi[Iv]="node",Wi[Os]=Ov,Wi[Ls]=Mv,Wi);var wk=9,Ck=6,xk=Math.pow(10,Ck),Mk=Math.pow(10,wk);function Lv(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*xk);return[t,n]}function Nv(r){return r[0]*Mk+r[1]}function Ns(r){return r[0]*1e6+r[1]/1e3}var _o;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(_o||(_o={}));var Dv=function(){function r(){var e=this;this._promise=new Promise(function(t,n){e._resolve=t,e._reject=n})}return Object.defineProperty(r.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),r.prototype.resolve=function(e){this._resolve(e)},r.prototype.reject=function(e){this._reject(e)},r}();var _k=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Ik=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},kv=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new Dv}return Object.defineProperty(r.prototype,"isCalled",{get:function(){return this._isCalled},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"promise",{get:function(){return this._deferred.promise},enumerable:!1,configurable:!0}),r.prototype.call=function(){for(var e,t=this,n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];if(!this._isCalled){this._isCalled=!0;try{Promise.resolve((e=this._callback).call.apply(e,Ik([this._that],_k(n),!1))).then(function(i){return t._deferred.resolve(i)},function(i){return t._deferred.reject(i)})}catch(i){this._deferred.reject(i)}}return this._deferred.promise},r}();var gr;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(gr||(gr={}));var Ot;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Ot||(Ot={}));var Pk=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}();var nse=function(r){Pk(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function Fv(r,e){for(var t=0,n=r.length-1;n-t>1;){var o=Math.trunc((n+t)/2);r[o]<=e?t=o:n=o-1}return r[n]<=e?n:r[t]<=e?t:-1}ke();var hr;(function(r){r[r.DROP=0]="DROP",r[r.SUM=1]="SUM",r[r.LAST_VALUE=2]="LAST_VALUE",r[r.HISTOGRAM=3]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(hr||(hr={}));var Uv=function(){function r(){this.kind=hr.DROP}return r.prototype.createAccumulation=function(){},r.prototype.merge=function(e,t){},r.prototype.diff=function(e,t){},r.prototype.toMetricData=function(e,t,n,o){},r}();var me;(function(r){r.COUNTER="COUNTER",r.GAUGE="GAUGE",r.HISTOGRAM="HISTOGRAM",r.UP_DOWN_COUNTER="UP_DOWN_COUNTER",r.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",r.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",r.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(me||(me={}));var Ok=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function Lk(r){var e=r.map(function(){return 0});return e.push(0),{buckets:{boundaries:r,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var sg=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=Lk(t)),this.startTime=e,this._boundaries=t,this._recordMinMax=n,this._current=o}return r.prototype.record=function(e){if(!Number.isNaN(e)){this._current.count+=1,this._current.sum+=e,this._recordMinMax&&(this._current.min=Math.min(e,this._current.min),this._current.max=Math.max(e,this._current.max),this._current.hasMinMax=!0);var t=Fv(this._boundaries,e);this._current.buckets.counts[t+1]+=1}},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var lg=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=hr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new sg(e,this._boundaries,this._recordMinMax)},r.prototype.merge=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=i[c]+a[c];var l=1/0,u=-1/0;return this._recordMinMax&&(n.hasMinMax&&o.hasMinMax?(l=Math.min(n.min,o.min),u=Math.max(n.max,o.max)):n.hasMinMax?(l=n.min,u=n.max):o.hasMinMax&&(l=o.min,u=o.max)),new sg(e.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:n.count+o.count,sum:n.sum+o.sum,hasMinMax:this._recordMinMax&&(n.hasMinMax||o.hasMinMax),min:l,max:u})},r.prototype.diff=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=a[c]-i[c];return new sg(t.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:o.count-n.count,sum:o.sum-n.sum,hasMinMax:!1,min:1/0,max:-1/0})},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.HISTOGRAM,dataPoints:n.map(function(i){var a=Ok(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===me.GAUGE||e.type===me.UP_DOWN_COUNTER||e.type===me.OBSERVABLE_GAUGE||e.type===me.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,buckets:l.buckets,count:l.count}}})}},r}();ke();var cg=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},ug=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},dg=function(){function r(e,t,n,o){e===void 0&&(e=new Nk),t===void 0&&(t=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=t,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(r.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"length",{get:function(){return this.backing.length===0||this.indexEnd===this.indexStart&&this.at(0)===0?0:this.indexEnd-this.indexStart+1},enumerable:!1,configurable:!0}),r.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(t,n){return e.at(n)})},r.prototype.at=function(e){var t=this.indexBase-this.indexStart;return e<t&&(e+=this.backing.length),e-=t,this.backing.countAt(e)},r.prototype.incrementBucket=function(e,t){this.backing.increment(e,t)},r.prototype.decrementBucket=function(e,t){this.backing.decrement(e,t)},r.prototype.trim=function(){for(var e=0;e<this.length;e++)if(this.at(e)!==0){this.indexStart+=e;break}else if(e===this.length-1){this.indexStart=this.indexEnd=this.indexBase=0;return}for(var e=this.length-1;e>=0;e--)if(this.at(e)!==0){this.indexEnd-=this.length-e-1;break}this._rotate()},r.prototype.downscale=function(e){this._rotate();for(var t=1+this.indexEnd-this.indexStart,n=1<<e,o=0,i=0,a=this.indexStart;a<=this.indexEnd;){var s=a%n;s<0&&(s+=n);for(var c=s;c<n&&o<t;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},r.prototype.clone=function(){return new r(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},r.prototype._rotate=function(){var e=this.indexBase-this.indexStart;e!==0&&(e>0?(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,e),this.backing.reverse(e,this.backing.length)):(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,this.backing.length+e)),this.indexBase=this.indexStart)},r.prototype._relocateBucket=function(e,t){e!==t&&this.incrementBucket(e,this.backing.emptyBucket(t))},r}();var Nk=function(){function r(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(r.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),r.prototype.countAt=function(e){return this._counts[e]},r.prototype.growTo=function(e,t,n){var o=new Array(e).fill(0);o.splice.apply(o,ug([n,this._counts.length-t],cg(this._counts.slice(t)),!1)),o.splice.apply(o,ug([0,t],cg(this._counts.slice(0,t)),!1)),this._counts=o},r.prototype.reverse=function(e,t){for(var n=Math.floor((e+t)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[t-o-1],this._counts[t-o-1]=i}},r.prototype.emptyBucket=function(e){var t=this._counts[e];return this._counts[e]=0,t},r.prototype.increment=function(e,t){this._counts[e]+=t},r.prototype.decrement=function(e,t){this._counts[e]>=t?this._counts[e]-=t:this._counts[e]=0},r.prototype.clone=function(){return new r(ug([],cg(this._counts),!1))},r}();var Bv=52,Dk=2146435072,kk=1048575,pg=1023,jc=-pg+1,$c=pg,Ds=Math.pow(2,-1022);function qc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&Dk)>>20;return n-pg}function Kc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&kk)*Math.pow(2,32);return o+n}function ks(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function Gv(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var Fk=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Hn=function(r){Fk(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var Vv=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Ds)return this._minNormalLowerBoundaryIndex();var t=qc(e),n=this._rightShift(Kc(e)-1,Bv);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new Hn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new Hn("overflow: "+e+" is > maximum lower boundary: "+n);return ks(1,e<<this._shift)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){var e=jc>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return $c>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var Wv=function(){function r(e){this._scale=e,this._scaleFactor=ks(Math.LOG2E,e),this._inverseFactor=ks(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Ds)return this._minNormalLowerBoundaryIndex()-1;if(Kc(e)===0){var t=qc(e);return(t<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},r.prototype.lowerBoundary=function(e){var t=this._maxNormalLowerBoundaryIndex();if(e>=t){if(e===t)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new Hn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Ds;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new Hn("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){return jc<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return($c+1<<this._scale)-1},r}();var jv=-10,$v=20,Uk=Array.from({length:31},function(r,e){return e>10?new Wv(e-10):new Vv(e-10)});function mg(r){if(r>$v||r<jv)throw new Hn("expected scale >= "+jv+" && <= "+$v+", got: "+r);return Uk[r+10]}var Bk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Yc=function(){function r(e,t){this.low=e,this.high=t}return r.combine=function(e,t){return new r(Math.min(e.low,t.low),Math.max(e.high,t.high))},r}(),zk=20,Gk=160,gg=2,Hk=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=Gk),n===void 0&&(n=!0),o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=Number.POSITIVE_INFINITY),c===void 0&&(c=Number.NEGATIVE_INFINITY),l===void 0&&(l=new dg),u===void 0&&(u=new dg),d===void 0&&(d=mg(zk)),this.startTime=e,this._maxSize=t,this._recordMinMax=n,this._sum=o,this._count=i,this._zeroCount=a,this._min=s,this._max=c,this._positive=l,this._negative=u,this._mapping=d,this._maxSize<gg&&($.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+gg),this._maxSize=gg)}return r.prototype.record=function(e){this.updateByIncrement(e,1)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return{hasMinMax:this._recordMinMax,min:this.min,max:this.max,sum:this.sum,positive:{offset:this.positive.offset,bucketCounts:this.positive.counts()},negative:{offset:this.negative.offset,bucketCounts:this.negative.counts()},count:this.count,scale:this.scale,zeroCount:this.zeroCount}},Object.defineProperty(r.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),r.prototype.updateByIncrement=function(e,t){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=t,e===0){this._zeroCount+=t;return}this._sum+=e*t,e>0?this._updateBuckets(this._positive,e,t):this._updateBuckets(this._negative,-e,t)}},r.prototype.merge=function(e){this._count===0?(this._min=e.min,this._max=e.max):e.count!==0&&(e.min<this.min&&(this._min=e.min),e.max>this.max&&(this._max=e.max)),this.startTime=e.startTime,this._sum+=e.sum,this._count+=e.count,this._zeroCount+=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._mergeBuckets(this.positive,e,e.positive,t),this._mergeBuckets(this.negative,e,e.negative,t)},r.prototype.diff=function(e){this._min=1/0,this._max=-1/0,this._sum-=e.sum,this._count-=e.count,this._zeroCount-=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._diffBuckets(this.positive,e,e.positive,t),this._diffBuckets(this.negative,e,e.negative,t)},r.prototype.clone=function(){return new r(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},r.prototype._updateBuckets=function(e,t,n){var o=this._mapping.mapToIndex(t),i=!1,a=0,s=0;if(e.length===0?(e.indexStart=o,e.indexEnd=e.indexStart,e.indexBase=e.indexStart):o<e.indexStart&&e.indexEnd-o>=this._maxSize?(i=!0,s=o,a=e.indexEnd):o>e.indexEnd&&o-e.indexStart>=this._maxSize&&(i=!0,s=e.indexStart,a=o),i){var c=this._changeScale(a,s);this._downscale(c),o=this._mapping.mapToIndex(t)}this._incrementIndexBy(e,o,n)},r.prototype._incrementIndexBy=function(e,t,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=t),t<e.indexStart){var o=e.indexEnd-t;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=t}else if(t>e.indexEnd){var o=t-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=t}var i=t-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},r.prototype._grow=function(e,t){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=Gv(t);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},r.prototype._changeScale=function(e,t){for(var n=0;e-t>=this._maxSize;)e>>=1,t>>=1,n++;return n},r.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var t=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=mg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=Yc.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=Yc.combine(this._highLowAtScale(this.negative,this.scale,t),this._highLowAtScale(e.negative,e.scale,t));return Math.min(t-this._changeScale(n.high,n.low),t-this._changeScale(o.high,o.low))},r.prototype._highLowAtScale=function(e,t,n){if(e.length===0)return new Yc(0,-1);var o=t-n;return new Yc(e.indexStart>>o,e.indexEnd>>o)},r.prototype._mergeBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},r.prototype._diffBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++){var c=i+s>>a,l=c-e.indexBase;l<0&&(l+=e.backing.length),e.decrementBucket(l,n.at(s))}e.trim()},r}();var qv=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=hr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Hk(e,this._maxSize,this._recordMinMax)},r.prototype.merge=function(e,t){var n=t.clone();return n.merge(e),n},r.prototype.diff=function(e,t){var n=t.clone();return n.diff(e),n},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=Bk(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===me.GAUGE||e.type===me.UP_DOWN_COUNTER||e.type===me.OBSERVABLE_GAUGE||e.type===me.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,positive:{offset:l.positive.offset,bucketCounts:l.positive.bucketCounts},negative:{offset:l.negative.offset,bucketCounts:l.negative.bucketCounts},count:l.count,scale:l.scale,zeroCount:l.zeroCount}}})}},r}();var Vk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},hg=function(){function r(e,t,n){t===void 0&&(t=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=t,this.sampleTime=n}return r.prototype.record=function(e){this._current=e,this.sampleTime=Lv(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Kv=function(){function r(){this.kind=hr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new hg(e)},r.prototype.merge=function(e,t){var n=Ns(t.sampleTime)>=Ns(e.sampleTime)?t:e;return new hg(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Ns(t.sampleTime)>=Ns(e.sampleTime)?t:e;return new hg(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.GAUGE,dataPoints:n.map(function(i){var a=Vk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var Wk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Fs=function(){function r(e,t,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=t,this._current=n,this.reset=o}return r.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var fg=function(){function r(e){this.monotonic=e,this.kind=hr.SUM}return r.prototype.createAccumulation=function(e){return new Fs(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Fs(t.startTime,this.monotonic,o,t.reset):new Fs(e.startTime,this.monotonic,n+o)},r.prototype.diff=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return this.monotonic&&n>o?new Fs(t.startTime,this.monotonic,o,!0):new Fs(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.SUM,dataPoints:n.map(function(i){var a=Wk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var Io=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),qr=function(){function r(){}return r.Drop=function(){return rA},r.Sum=function(){return nA},r.LastValue=function(){return oA},r.Histogram=function(){return iA},r.ExponentialHistogram=function(){return jk},r.Default=function(){return $k},r}();var Yv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Uv,e}(qr);var Xv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case me.COUNTER:case me.OBSERVABLE_COUNTER:case me.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new fg(!0),e.NON_MONOTONIC_INSTANCE=new fg(!1),e}(qr);var Jv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Kv,e}(qr);var Qv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new lg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(qr);var Zv=function(r){Io(e,r);function e(t,n){n===void 0&&(n=!0);var o=r.call(this)||this;if(o._recordMinMax=n,t==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");t=t.concat(),t=t.sort(function(s,c){return s-c});var i=t.lastIndexOf(-1/0),a=t.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=t.slice(i+1,a),o}return e.prototype.createAggregator=function(t){return new lg(this._boundaries,this._recordMinMax)},e}(qr);var eA=function(r){Io(e,r);function e(t,n){t===void 0&&(t=160),n===void 0&&(n=!0);var o=r.call(this)||this;return o._maxSize=t,o._recordMinMax=n,o}return e.prototype.createAggregator=function(t){return new qv(this._maxSize,this._recordMinMax)},e}(qr);var tA=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case me.COUNTER:case me.UP_DOWN_COUNTER:case me.OBSERVABLE_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:return nA;case me.GAUGE:case me.OBSERVABLE_GAUGE:return oA;case me.HISTOGRAM:return t.advice.explicitBucketBoundaries?new Zv(t.advice.explicitBucketBoundaries):iA}return $.warn("Unable to recognize instrument type: "+t.type),rA},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(qr);var rA=new Yv,nA=new Xv,oA=new Jv,iA=new Qv,jk=new eA,$k=new tA;ke();function Xc(){return"unknown_service:"+process.argv0}var Vn=function(){return Vn=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},Vn.apply(this,arguments)},qk=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},Kk=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},Yk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Sg=function(){function r(e,t){var n=this,o;this._attributes=e,this.asyncAttributesPending=t!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=t?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return $.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return r.empty=function(){return r.EMPTY},r.default=function(){var e;return new r((e={},e[Vc]=Xc(),e[Os]=Wc[Os],e[Ps]=Wc[Ps],e[Ls]=Wc[Ls],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&$.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),r.prototype.waitForAsyncAttributes=function(){return qk(this,void 0,void 0,function(){return Kk(this,function(e){switch(e.label){case 0:return this.asyncAttributesPending?[4,this._asyncAttributesPromise]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})},r.prototype.merge=function(e){var t=this,n;if(!e)return this;var o=Vn(Vn({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new r(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=Yk(a,2),l=c[0],u=c[1];return Vn(Vn(Vn(Vn({},t._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new r(o,i)},r.EMPTY=new r({}),r}();var Po;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(Po||(Po={}));ke();var Xk=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},Jk=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},yg=function(){return gr.CUMULATIVE},aA=function(r){switch(r){case me.COUNTER:case me.OBSERVABLE_COUNTER:case me.GAUGE:case me.HISTOGRAM:case me.OBSERVABLE_GAUGE:return gr.DELTA;case me.UP_DOWN_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:return gr.CUMULATIVE}},sA=function(r){switch(r){case me.COUNTER:case me.HISTOGRAM:return gr.DELTA;case me.GAUGE:case me.UP_DOWN_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:case me.OBSERVABLE_COUNTER:case me.OBSERVABLE_GAUGE:return gr.CUMULATIVE}};function Qk(){var r=Rt(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?yg:e==="delta"?aA:e==="lowmemory"?sA:($.warn("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '"+r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE+"', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead."),yg)}function Zk(r){return r!=null?r===Po.DELTA?aA:r===Po.LOWMEMORY?sA:yg:Qk()}function eF(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return qr.Default()}}var lA=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=eF(t),this._aggregationTemporalitySelector=Zk(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return Xk(this,void 0,void 0,function(){return Jk(this,function(e){switch(e.label){case 0:return[4,this._otlpExporter.shutdown()];case 1:return e.sent(),[2]}})})},r.prototype.forceFlush=function(){return Promise.resolve()},r.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},r.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},r}();ke();ke();var tF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},cA=1e4,uA=5,dA=1e3,pA=5e3,mA=1.5;function Us(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=tF(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):$.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function bg(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function Eg(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return $.warn("Could not parse export URL: '"+r+"'"),r}}function Tg(r){return typeof r=="number"?r<=0?vg(r,cA):r:rF()}function rF(){var r,e=Number((r=Rt().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:Rt().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?vg(e,cA):e}function vg(r,e){return $.warn("Timeout must be greater than 0",r),e}function gA(r){var e=[429,502,503,504];return e.includes(r)}function hA(r){if(r==null)return-1;var e=Number.parseInt(r,10);if(Number.isInteger(e))return e>0?e*1e3:-1;var t=new Date(r).getTime()-Date.now();return t>=0?t:0}var fA=function(){function r(e){e===void 0&&(e={}),this._sendingPromises=[],this.url=this.getDefaultUrl(e),typeof e.hostname=="string"&&(this.hostname=e.hostname),this.shutdown=this.shutdown.bind(this),this._shutdownOnce=new kv(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=Tg(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:_o.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:_o.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:_o.SUCCESS})}).catch(function(n){t({code:_o.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{$.debug("items to be sent",e),t.send(e,n,o)}catch(i){o(i)}})},r.prototype.shutdown=function(){return this._shutdownOnce.call()},r.prototype.forceFlush=function(){return Promise.all(this._sendingPromises).then(function(){})},r.prototype._shutdown=function(){return $.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();ke();import*as Ag from"url";import*as Qc from"http";import*as Zc from"https";import*as SA from"zlib";import{Readable as oF}from"stream";var Wn;(function(r){r.NONE="none",r.GZIP="gzip"})(Wn||(Wn={}));var nF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),ji=function(r){nF(e,r);function e(t,n,o){var i=r.call(this,t)||this;return i.name="OTLPExporterError",i.data=o,i.code=n,i}return e}(Error);var Jc=function(){return Jc=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},Jc.apply(this,arguments)};function Rg(r,e,t,n,o){var i=r.timeoutMillis,a=new Ag.URL(r.url),s=Number(process.versions.node.split(".")[0]),c,l,u=!1,d=setTimeout(function(){if(clearTimeout(c),u=!0,l.destroyed){var h=new ji("Request Timeout");o(h)}else s>=14?l.destroy():l.abort()},i),m={hostname:a.hostname,port:a.port,path:a.pathname,method:"POST",headers:Jc({"Content-Type":t},r.headers),agent:r.agent},p=a.protocol==="http:"?Qc.request:Zc.request,g=function(h,f){switch(h===void 0&&(h=uA),f===void 0&&(f=dA),l=p(m,function(T){var w="";T.on("data",function(x){return w+=x}),T.on("aborted",function(){if(u){var x=new ji("Request Timeout");o(x)}}),T.on("end",function(){if(u===!1)if(T.statusCode&&T.statusCode<299)$.debug("statusCode: "+T.statusCode,w),n(),clearTimeout(d),clearTimeout(c);else if(T.statusCode&&gA(T.statusCode)&&h>0){var x=void 0;f=mA*f,T.headers["retry-after"]?x=hA(T.headers["retry-after"]):x=Math.round(Math.random()*(pA-f)+f),c=setTimeout(function(){g(h-1,f)},x)}else{var R=new ji(T.statusMessage,T.statusCode,w);o(R),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(T){if(u){var w=new ji("Request Timeout",T.code);o(w)}else o(T);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var T=new ji("Request Timeout");o(T)}clearTimeout(d),clearTimeout(c)}),r.compression){case Wn.GZIP:{l.setHeader("Content-Encoding","gzip");var b=iF(e);b.on("error",o).pipe(SA.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};g()}function iF(r){var e=new oF;return e.push(r),e.push(null),e}function wg(r){if(r.httpAgentOptions&&r.keepAlive===!1){$.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new Ag.URL(r.url),t=e.protocol==="http:"?Qc.Agent:Zc.Agent;return new t(Jc({keepAlive:!0},r.httpAgentOptions))}catch(n){$.error("collector exporter failed to create http agent. err: "+n.message);return}}function Cg(r){if(r)return r;var e=Rt().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||Rt().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Wn.GZIP?Wn.GZIP:Wn.NONE}ke();var aF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),eu=function(r){aF(e,r);function e(t,n,o){t===void 0&&(t={});var i=r.call(this,t)||this;return i.DEFAULT_HEADERS={},i._contentType=o,t.metadata&&$.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,Us(t.headers),Vi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=wg(t),i.compression=Cg(t.compression),i._serializer=n,i}return e.prototype.onInit=function(t){},e.prototype.send=function(t,n,o){var i=this;if(this._shutdownOnce.isCalled){$.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;Rg(i,(u=i._serializer.serializeRequest(t))!==null&&u!==void 0?u:new Uint8Array,i._contentType,c,l)}).then(n,o);this._sendingPromises.push(a);var s=function(){var c=i._sendingPromises.indexOf(a);i._sendingPromises.splice(c,1)};a.then(s,s)},e.prototype.onShutdown=function(){},e}(fA);function bA(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function sF(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function EA(r){var e=bA(r);return sF(e)}function lF(r){var e=bA(r);return e.toString()}var cF=typeof BigInt<"u"?lF:Nv;function yA(r){return r}function TA(r){if(r!==void 0)return Hc(r)}var uF={encodeHrTime:EA,encodeSpanContext:Hc,encodeOptionalSpanContext:TA};function vA(r){var e,t;if(r===void 0)return uF;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?EA:cF,encodeSpanContext:o?yA:Hc,encodeOptionalSpanContext:o?yA:TA}}var dF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function AA(r){return{name:r.name,version:r.version}}function $i(r){return Object.keys(r).map(function(e){return RA(e,r[e])})}function RA(r,e){return{key:r,value:wA(e)}}function wA(r){var e=typeof r;return e==="string"?{stringValue:r}:e==="number"?Number.isInteger(r)?{intValue:r}:{doubleValue:r}:e==="boolean"?{boolValue:r}:r instanceof Uint8Array?{bytesValue:r}:Array.isArray(r)?{arrayValue:{values:r.map(wA)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=dF(t,2),o=n[0],i=n[1];return RA(o,i)})}}:{}}function CA(r){return{attributes:$i(r.attributes),droppedAttributesCount:0}}ke();function MA(r,e){var t=vA(e);return{resource:CA(r.resource),schemaUrl:void 0,scopeMetrics:pF(r.scopeMetrics,t)}}function pF(r,e){return Array.from(r.map(function(t){return{scope:AA(t.scope),metrics:t.metrics.map(function(n){return mF(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function mF(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=SF(r.aggregationTemporality);switch(r.dataPointType){case Ot.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:xA(r,e)};break;case Ot.GAUGE:t.gauge={dataPoints:xA(r,e)};break;case Ot.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:hF(r,e)};break;case Ot.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:fF(r,e)};break}return t}function gF(r,e,t){var n={attributes:$i(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case Qt.INT:n.asInt=r.value;break;case Qt.DOUBLE:n.asDouble=r.value;break}return n}function xA(r,e){return r.dataPoints.map(function(t){return gF(t,r.descriptor.valueType,e)})}function hF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:$i(t.attributes),bucketCounts:n.buckets.counts,explicitBounds:n.buckets.boundaries,count:n.count,sum:n.sum,min:n.min,max:n.max,startTimeUnixNano:e.encodeHrTime(t.startTime),timeUnixNano:e.encodeHrTime(t.endTime)}})}function fF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:$i(t.attributes),count:n.count,min:n.min,max:n.max,sum:n.sum,positive:{offset:n.positive.offset,bucketCounts:n.positive.bucketCounts},negative:{offset:n.negative.offset,bucketCounts:n.negative.bucketCounts},scale:n.scale,zeroCount:n.zeroCount,startTimeUnixNano:e.encodeHrTime(t.startTime),timeUnixNano:e.encodeHrTime(t.endTime)}})}function SF(r){switch(r){case gr.DELTA:return 1;case gr.CUMULATIVE:return 2}}function _A(r,e){return{resourceMetrics:r.map(function(t){return MA(t,e)})}}var xg={serializeRequest:function(r){var e=_A(r,{useLongBits:!1}),t=new TextEncoder;return t.encode(JSON.stringify(e))},deserializeResponse:function(r){var e=new TextDecoder;return JSON.parse(e.decode(r))}};var IA="0.52.1";var PA=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),qi=function(){return qi=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},qi.apply(this,arguments)},OA="v1/metrics",yF="http://localhost:4318/"+OA,bF={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+IA},EF=function(r){PA(e,r);function e(t){var n=r.call(this,t,xg,"application/json")||this;return n.headers=qi(qi(qi(qi({},n.headers),bF),Vi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),Us(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?Eg(Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):Rt().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?bg(Rt().OTEL_EXPORTER_OTLP_ENDPOINT,OA):yF},e}(eu),LA=function(r){PA(e,r);function e(t){return r.call(this,new EF(t),t)||this}return e}(lA);var Ki;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(Ki||(Ki={}));var Kr;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Kr||(Kr={}));ke();var TF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),NA=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},DA=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},vF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},AF=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},RF=function(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};function kA(r){return r!=null}function tu(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function FA(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var Mg=function(r){TF(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function jn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new Mg("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function UA(r){return NA(this,void 0,void 0,function(){var e=this;return DA(this,function(t){return[2,Promise.all(r.map(function(n){return NA(e,void 0,void 0,function(){var o,i;return DA(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,n];case 1:return o=a.sent(),[2,{status:"fulfilled",value:o}];case 2:return i=a.sent(),[2,{status:"rejected",reason:i}];case 3:return[2]}})})}))]})})}function BA(r){return r.status==="rejected"}function _g(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,AF([],vF(e(n)),!1))}),t}function zA(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=RF(r),i=o.next();!i.done;i=o.next()){var a=i.value;if(!e.has(a))return!1}}catch(s){t={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!0}function GA(r,e){for(var t=0,n=r.length-1,o=r.length;n>=t;){var i=t+Math.trunc((n-t)/2);r[i]<e?t=i+1:(o=i,n=i-1)}return o}function HA(r,e){return r.toLowerCase()===e.toLowerCase()}ke();var fr;(function(r){r[r.DROP=0]="DROP",r[r.SUM=1]="SUM",r[r.LAST_VALUE=2]="LAST_VALUE",r[r.HISTOGRAM=3]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(fr||(fr={}));var Ig=function(){function r(){this.kind=fr.DROP}return r.prototype.createAccumulation=function(){},r.prototype.merge=function(e,t){},r.prototype.diff=function(e,t){},r.prototype.toMetricData=function(e,t,n,o){},r}();ke();var Te;(function(r){r.COUNTER="COUNTER",r.GAUGE="GAUGE",r.HISTOGRAM="HISTOGRAM",r.UP_DOWN_COUNTER="UP_DOWN_COUNTER",r.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",r.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",r.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(Te||(Te={}));function Yr(r,e,t){var n,o,i,a;return CF(r)||$.warn('Invalid metric name: "'+r+'". The metric name should be a ASCII string with a length no greater than 255 characters.'),{name:r,type:e,description:(n=t?.description)!==null&&n!==void 0?n:"",unit:(o=t?.unit)!==null&&o!==void 0?o:"",valueType:(i=t?.valueType)!==null&&i!==void 0?i:Qt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function VA(r,e){var t,n;return{name:(t=r.name)!==null&&t!==void 0?t:e.name,description:(n=r.description)!==null&&n!==void 0?n:e.description,type:e.type,unit:e.unit,valueType:e.valueType,advice:e.advice}}function WA(r,e){return HA(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var wF=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function CF(r){return r.match(wF)!=null}var xF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function MF(r){var e=r.map(function(){return 0});return e.push(0),{buckets:{boundaries:r,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var ru=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=MF(t)),this.startTime=e,this._boundaries=t,this._recordMinMax=n,this._current=o}return r.prototype.record=function(e){if(!Number.isNaN(e)){this._current.count+=1,this._current.sum+=e,this._recordMinMax&&(this._current.min=Math.min(e,this._current.min),this._current.max=Math.max(e,this._current.max),this._current.hasMinMax=!0);var t=GA(this._boundaries,e);this._current.buckets.counts[t]+=1}},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var nu=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=fr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ru(e,this._boundaries,this._recordMinMax)},r.prototype.merge=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=i[c]+a[c];var l=1/0,u=-1/0;return this._recordMinMax&&(n.hasMinMax&&o.hasMinMax?(l=Math.min(n.min,o.min),u=Math.max(n.max,o.max)):n.hasMinMax?(l=n.min,u=n.max):o.hasMinMax&&(l=o.min,u=o.max)),new ru(e.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:n.count+o.count,sum:n.sum+o.sum,hasMinMax:this._recordMinMax&&(n.hasMinMax||o.hasMinMax),min:l,max:u})},r.prototype.diff=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=a[c]-i[c];return new ru(t.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:o.count-n.count,sum:o.sum-n.sum,hasMinMax:!1,min:1/0,max:-1/0})},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.HISTOGRAM,dataPoints:n.map(function(i){var a=xF(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Te.GAUGE||e.type===Te.UP_DOWN_COUNTER||e.type===Te.OBSERVABLE_GAUGE||e.type===Te.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,buckets:l.buckets,count:l.count}}})}},r}();ke();var Pg=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Og=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},Lg=function(){function r(e,t,n,o){e===void 0&&(e=new _F),t===void 0&&(t=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=t,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(r.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"length",{get:function(){return this.backing.length===0||this.indexEnd===this.indexStart&&this.at(0)===0?0:this.indexEnd-this.indexStart+1},enumerable:!1,configurable:!0}),r.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(t,n){return e.at(n)})},r.prototype.at=function(e){var t=this.indexBase-this.indexStart;return e<t&&(e+=this.backing.length),e-=t,this.backing.countAt(e)},r.prototype.incrementBucket=function(e,t){this.backing.increment(e,t)},r.prototype.decrementBucket=function(e,t){this.backing.decrement(e,t)},r.prototype.trim=function(){for(var e=0;e<this.length;e++)if(this.at(e)!==0){this.indexStart+=e;break}else if(e===this.length-1){this.indexStart=this.indexEnd=this.indexBase=0;return}for(var e=this.length-1;e>=0;e--)if(this.at(e)!==0){this.indexEnd-=this.length-e-1;break}this._rotate()},r.prototype.downscale=function(e){this._rotate();for(var t=1+this.indexEnd-this.indexStart,n=1<<e,o=0,i=0,a=this.indexStart;a<=this.indexEnd;){var s=a%n;s<0&&(s+=n);for(var c=s;c<n&&o<t;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},r.prototype.clone=function(){return new r(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},r.prototype._rotate=function(){var e=this.indexBase-this.indexStart;e!==0&&(e>0?(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,e),this.backing.reverse(e,this.backing.length)):(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,this.backing.length+e)),this.indexBase=this.indexStart)},r.prototype._relocateBucket=function(e,t){e!==t&&this.incrementBucket(e,this.backing.emptyBucket(t))},r}();var _F=function(){function r(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(r.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),r.prototype.countAt=function(e){return this._counts[e]},r.prototype.growTo=function(e,t,n){var o=new Array(e).fill(0);o.splice.apply(o,Og([n,this._counts.length-t],Pg(this._counts.slice(t)),!1)),o.splice.apply(o,Og([0,t],Pg(this._counts.slice(0,t)),!1)),this._counts=o},r.prototype.reverse=function(e,t){for(var n=Math.floor((e+t)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[t-o-1],this._counts[t-o-1]=i}},r.prototype.emptyBucket=function(e){var t=this._counts[e];return this._counts[e]=0,t},r.prototype.increment=function(e,t){this._counts[e]+=t},r.prototype.decrement=function(e,t){this._counts[e]>=t?this._counts[e]-=t:this._counts[e]=0},r.prototype.clone=function(){return new r(Og([],Pg(this._counts),!1))},r}();var jA=52,IF=2146435072,PF=1048575,Ng=1023,ou=-Ng+1,iu=Ng,Bs=Math.pow(2,-1022);function au(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&IF)>>20;return n-Ng}function su(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&PF)*Math.pow(2,32);return o+n}function zs(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function qA(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var OF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),$n=function(r){OF(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var YA=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Bs)return this._minNormalLowerBoundaryIndex();var t=au(e),n=this._rightShift(su(e)-1,jA);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new $n("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new $n("overflow: "+e+" is > maximum lower boundary: "+n);return zs(1,e<<this._shift)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){var e=ou>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return iu>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var XA=function(){function r(e){this._scale=e,this._scaleFactor=zs(Math.LOG2E,e),this._inverseFactor=zs(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Bs)return this._minNormalLowerBoundaryIndex()-1;if(su(e)===0){var t=au(e);return(t<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},r.prototype.lowerBoundary=function(e){var t=this._maxNormalLowerBoundaryIndex();if(e>=t){if(e===t)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new $n("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Bs;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new $n("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){return ou<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(iu+1<<this._scale)-1},r}();var JA=-10,QA=20,LF=Array.from({length:31},function(r,e){return e>10?new XA(e-10):new YA(e-10)});function Dg(r){if(r>QA||r<JA)throw new $n("expected scale >= "+JA+" && <= "+QA+", got: "+r);return LF[r+10]}var NF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},lu=function(){function r(e,t){this.low=e,this.high=t}return r.combine=function(e,t){return new r(Math.min(e.low,t.low),Math.max(e.high,t.high))},r}(),DF=20,kF=160,kg=2,ZA=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=kF),n===void 0&&(n=!0),o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=Number.POSITIVE_INFINITY),c===void 0&&(c=Number.NEGATIVE_INFINITY),l===void 0&&(l=new Lg),u===void 0&&(u=new Lg),d===void 0&&(d=Dg(DF)),this.startTime=e,this._maxSize=t,this._recordMinMax=n,this._sum=o,this._count=i,this._zeroCount=a,this._min=s,this._max=c,this._positive=l,this._negative=u,this._mapping=d,this._maxSize<kg&&($.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+kg),this._maxSize=kg)}return r.prototype.record=function(e){this.updateByIncrement(e,1)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return{hasMinMax:this._recordMinMax,min:this.min,max:this.max,sum:this.sum,positive:{offset:this.positive.offset,bucketCounts:this.positive.counts()},negative:{offset:this.negative.offset,bucketCounts:this.negative.counts()},count:this.count,scale:this.scale,zeroCount:this.zeroCount}},Object.defineProperty(r.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),r.prototype.updateByIncrement=function(e,t){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=t,e===0){this._zeroCount+=t;return}this._sum+=e*t,e>0?this._updateBuckets(this._positive,e,t):this._updateBuckets(this._negative,-e,t)}},r.prototype.merge=function(e){this._count===0?(this._min=e.min,this._max=e.max):e.count!==0&&(e.min<this.min&&(this._min=e.min),e.max>this.max&&(this._max=e.max)),this.startTime=e.startTime,this._sum+=e.sum,this._count+=e.count,this._zeroCount+=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._mergeBuckets(this.positive,e,e.positive,t),this._mergeBuckets(this.negative,e,e.negative,t)},r.prototype.diff=function(e){this._min=1/0,this._max=-1/0,this._sum-=e.sum,this._count-=e.count,this._zeroCount-=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._diffBuckets(this.positive,e,e.positive,t),this._diffBuckets(this.negative,e,e.negative,t)},r.prototype.clone=function(){return new r(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},r.prototype._updateBuckets=function(e,t,n){var o=this._mapping.mapToIndex(t),i=!1,a=0,s=0;if(e.length===0?(e.indexStart=o,e.indexEnd=e.indexStart,e.indexBase=e.indexStart):o<e.indexStart&&e.indexEnd-o>=this._maxSize?(i=!0,s=o,a=e.indexEnd):o>e.indexEnd&&o-e.indexStart>=this._maxSize&&(i=!0,s=e.indexStart,a=o),i){var c=this._changeScale(a,s);this._downscale(c),o=this._mapping.mapToIndex(t)}this._incrementIndexBy(e,o,n)},r.prototype._incrementIndexBy=function(e,t,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=t),t<e.indexStart){var o=e.indexEnd-t;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=t}else if(t>e.indexEnd){var o=t-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=t}var i=t-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},r.prototype._grow=function(e,t){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=qA(t);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},r.prototype._changeScale=function(e,t){for(var n=0;e-t>=this._maxSize;)e>>=1,t>>=1,n++;return n},r.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var t=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=Dg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=lu.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=lu.combine(this._highLowAtScale(this.negative,this.scale,t),this._highLowAtScale(e.negative,e.scale,t));return Math.min(t-this._changeScale(n.high,n.low),t-this._changeScale(o.high,o.low))},r.prototype._highLowAtScale=function(e,t,n){if(e.length===0)return new lu(0,-1);var o=t-n;return new lu(e.indexStart>>o,e.indexEnd>>o)},r.prototype._mergeBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},r.prototype._diffBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++){var c=i+s>>a,l=c-e.indexBase;l<0&&(l+=e.backing.length),e.decrementBucket(l,n.at(s))}e.trim()},r}();var Fg=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=fr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ZA(e,this._maxSize,this._recordMinMax)},r.prototype.merge=function(e,t){var n=t.clone();return n.merge(e),n},r.prototype.diff=function(e,t){var n=t.clone();return n.diff(e),n},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=NF(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Te.GAUGE||e.type===Te.UP_DOWN_COUNTER||e.type===Te.OBSERVABLE_GAUGE||e.type===Te.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,positive:{offset:l.positive.offset,bucketCounts:l.positive.bucketCounts},negative:{offset:l.negative.offset,bucketCounts:l.negative.bucketCounts},count:l.count,scale:l.scale,zeroCount:l.zeroCount}}})}},r}();ke();var FF=Km("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function eR(r){return r.setValue(FF,!0)}ke();function tR(){return function(r){$.error(UF(r))}}function UF(r){return typeof r=="string"?r:JSON.stringify(BF(r))}function BF(r){for(var e={},t=r;t!==null;)Object.getOwnPropertyNames(t).forEach(function(n){if(!e[n]){var o=t[n];o&&(e[n]=String(o))}}),t=Object.getPrototypeOf(t);return e}var zF=tR();function cu(r){try{zF(r)}catch{}}var rR="1.30.1";var GF="process.runtime.name";var HF="service.name";var VF="telemetry.sdk.name",WF="telemetry.sdk.language",jF="telemetry.sdk.version";var nR=GF;var oR=HF;var Gs=VF,Hs=WF,Vs=jF;var $F="nodejs";var iR=$F;var Yi,Oo=(Yi={},Yi[Gs]="opentelemetry",Yi[nR]="node",Yi[Hs]=iR,Yi[Vs]=rR,Yi);function Ws(r){r.unref()}var ZF=9,eU=6,tU=Math.pow(10,eU),sue=Math.pow(10,ZF);function Lo(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*tU);return[t,n]}function Xi(r){return r[0]*1e6+r[1]/1e3}var js;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(js||(js={}));ke();function aR(r,e){return new Promise(function(t){Hi.with(eR(Hi.active()),function(){r.export(e,function(n){t(n)})})})}var sR={_export:aR};var rU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},uu=function(){function r(e,t,n){t===void 0&&(t=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=t,this.sampleTime=n}return r.prototype.record=function(e){this._current=e,this.sampleTime=Lo(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Ug=function(){function r(){this.kind=fr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new uu(e)},r.prototype.merge=function(e,t){var n=Xi(t.sampleTime)>=Xi(e.sampleTime)?t:e;return new uu(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Xi(t.sampleTime)>=Xi(e.sampleTime)?t:e;return new uu(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.GAUGE,dataPoints:n.map(function(i){var a=rU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var nU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Ji=function(){function r(e,t,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=t,this._current=n,this.reset=o}return r.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var du=function(){function r(e){this.monotonic=e,this.kind=fr.SUM}return r.prototype.createAccumulation=function(e){return new Ji(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Ji(t.startTime,this.monotonic,o,t.reset):new Ji(e.startTime,this.monotonic,n+o)},r.prototype.diff=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return this.monotonic&&n>o?new Ji(t.startTime,this.monotonic,o,!0):new Ji(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.SUM,dataPoints:n.map(function(i){var a=nU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var No=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Sr=function(){function r(){}return r.Drop=function(){return gR},r.Sum=function(){return hR},r.LastValue=function(){return fR},r.Histogram=function(){return SR},r.ExponentialHistogram=function(){return oU},r.Default=function(){return iU},r}();var lR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Ig,e}(Sr);var cR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case Te.COUNTER:case Te.OBSERVABLE_COUNTER:case Te.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new du(!0),e.NON_MONOTONIC_INSTANCE=new du(!1),e}(Sr);var uR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Ug,e}(Sr);var dR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new nu([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Sr);var $s=function(r){No(e,r);function e(t,n){n===void 0&&(n=!0);var o=r.call(this)||this;if(o._recordMinMax=n,t==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");t=t.concat(),t=t.sort(function(s,c){return s-c});var i=t.lastIndexOf(-1/0),a=t.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=t.slice(i+1,a),o}return e.prototype.createAggregator=function(t){return new nu(this._boundaries,this._recordMinMax)},e}(Sr);var pR=function(r){No(e,r);function e(t,n){t===void 0&&(t=160),n===void 0&&(n=!0);var o=r.call(this)||this;return o._maxSize=t,o._recordMinMax=n,o}return e.prototype.createAggregator=function(t){return new Fg(this._maxSize,this._recordMinMax)},e}(Sr);var mR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case Te.COUNTER:case Te.UP_DOWN_COUNTER:case Te.OBSERVABLE_COUNTER:case Te.OBSERVABLE_UP_DOWN_COUNTER:return hR;case Te.GAUGE:case Te.OBSERVABLE_GAUGE:return fR;case Te.HISTOGRAM:return t.advice.explicitBucketBoundaries?new $s(t.advice.explicitBucketBoundaries):SR}return $.warn("Unable to recognize instrument type: "+t.type),gR},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Sr);var gR=new lR,hR=new cR,fR=new uR,SR=new dR,oU=new pR,iU=new mR;var yR=function(r){return Sr.Default()},bR=function(r){return Ki.CUMULATIVE};var Bg=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},zg=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},ER=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},aU=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},TR=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:yR,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:bR,this._metricProducers=(o=e?.metricProducers)!==null&&o!==void 0?o:[],this._cardinalitySelector=e?.cardinalitySelector}return r.prototype.setMetricProducer=function(e){if(this._sdkMetricProducer)throw new Error("MetricReader can not be bound to a MeterProvider again.");this._sdkMetricProducer=e,this.onInitialized()},r.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},r.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},r.prototype.selectCardinalityLimit=function(e){return this._cardinalitySelector?this._cardinalitySelector(e):2e3},r.prototype.onInitialized=function(){},r.prototype.collect=function(e){return Bg(this,void 0,void 0,function(){var t,n,o,i,a,s;return zg(this,function(c){switch(c.label){case 0:if(this._sdkMetricProducer===void 0)throw new Error("MetricReader is not bound to a MetricProducer");if(this._shutdown)throw new Error("MetricReader is shutdown");return[4,Promise.all(aU([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],ER(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=ER.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(_g(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(_g(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Bg(this,void 0,void 0,function(){return zg(this,function(t){switch(t.label){case 0:return this._shutdown?($.error("Cannot call shutdown twice."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onShutdown()];case 1:return t.sent(),[3,4];case 2:return[4,jn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Bg(this,void 0,void 0,function(){return zg(this,function(t){switch(t.label){case 0:return this._shutdown?($.warn("Cannot forceFlush on already shutdown MetricReader."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onForceFlush()];case 1:return t.sent(),[2];case 2:return[4,jn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();ke();var sU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),pu=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},mu=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},lU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},cU=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},Gg=function(r){sU(e,r);function e(t){var n,o,i,a,s=r.call(this,{aggregationSelector:(n=t.exporter.selectAggregation)===null||n===void 0?void 0:n.bind(t.exporter),aggregationTemporalitySelector:(o=t.exporter.selectAggregationTemporality)===null||o===void 0?void 0:o.bind(t.exporter),metricProducers:t.metricProducers})||this;if(t.exportIntervalMillis!==void 0&&t.exportIntervalMillis<=0)throw Error("exportIntervalMillis must be greater than 0");if(t.exportTimeoutMillis!==void 0&&t.exportTimeoutMillis<=0)throw Error("exportTimeoutMillis must be greater than 0");if(t.exportTimeoutMillis!==void 0&&t.exportIntervalMillis!==void 0&&t.exportIntervalMillis<t.exportTimeoutMillis)throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis");return s._exportInterval=(i=t.exportIntervalMillis)!==null&&i!==void 0?i:6e4,s._exportTimeout=(a=t.exportTimeoutMillis)!==null&&a!==void 0?a:3e4,s._exporter=t.exporter,s}return e.prototype._runOnce=function(){return pu(this,void 0,void 0,function(){var t;return mu(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,jn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof Mg?($.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(cu(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return pu(this,void 0,void 0,function(){var o,i,a,s,c,l;return mu(this,function(u){switch(u.label){case 0:return[4,this.collect({timeoutMillis:this._exportTimeout})];case 1:if(o=u.sent(),i=o.resourceMetrics,a=o.errors,a.length>0&&(l=$).error.apply(l,cU(["PeriodicExportingMetricReader: metrics collection errors"],lU(a),!1)),!i.resource.asyncAttributesPending)return[3,5];u.label=2;case 2:return u.trys.push([2,4,,5]),[4,(n=(t=i.resource).waitForAsyncAttributes)===null||n===void 0?void 0:n.call(t)];case 3:return u.sent(),[3,5];case 4:return s=u.sent(),$.debug("Error while resolving async portion of resource: ",s),cu(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,sR._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==js.SUCCESS)throw new Error("PeriodicExportingMetricReader: metrics export failed (error "+c.error+")");return[2]}})})},e.prototype.onInitialized=function(){var t=this;this._interval=setInterval(function(){t._runOnce()},this._exportInterval),Ws(this._interval)},e.prototype.onForceFlush=function(){return pu(this,void 0,void 0,function(){return mu(this,function(t){switch(t.label){case 0:return[4,this._runOnce()];case 1:return t.sent(),[4,this._exporter.forceFlush()];case 2:return t.sent(),[2]}})})},e.prototype.onShutdown=function(){return pu(this,void 0,void 0,function(){return mu(this,function(t){switch(t.label){case 0:return this._interval&&clearInterval(this._interval),[4,this.onForceFlush()];case 1:return t.sent(),[4,this._exporter.shutdown()];case 2:return t.sent(),[2]}})})},e}(TR);ke();ke();function gu(){return"unknown_service:"+process.argv0}var qn=function(){return qn=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},qn.apply(this,arguments)},uU=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},dU=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},pU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},hu=function(){function r(e,t){var n=this,o;this._attributes=e,this.asyncAttributesPending=t!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=t?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return $.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return r.empty=function(){return r.EMPTY},r.default=function(){var e;return new r((e={},e[oR]=gu(),e[Hs]=Oo[Hs],e[Gs]=Oo[Gs],e[Vs]=Oo[Vs],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&$.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),r.prototype.waitForAsyncAttributes=function(){return uU(this,void 0,void 0,function(){return dU(this,function(e){switch(e.label){case 0:return this.asyncAttributesPending?[4,this._asyncAttributesPromise]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})},r.prototype.merge=function(e){var t=this,n;if(!e)return this;var o=qn(qn({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new r(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=pU(a,2),l=c[0],u=c[1];return qn(qn(qn(qn({},t._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new r(o,i)},r.EMPTY=new r({}),r}();var vR=function(){function r(){this._registeredViews=[]}return r.prototype.addView=function(e){this._registeredViews.push(e)},r.prototype.findViews=function(e,t){var n=this,o=this._registeredViews.filter(function(i){return n._matchInstrument(i.instrumentSelector,e)&&n._matchMeter(i.meterSelector,t)});return o},r.prototype._matchInstrument=function(e,t){return(e.getType()===void 0||t.type===e.getType())&&e.getNameFilter().match(t.name)&&e.getUnitFilter().match(t.unit)},r.prototype._matchMeter=function(e,t){return e.getNameFilter().match(t.name)&&(t.version===void 0||e.getVersionFilter().match(t.version))&&(t.schemaUrl===void 0||e.getSchemaUrlFilter().match(t.schemaUrl))},r}();ke();var Do=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),fu=function(){function r(e,t){this._writableMetricStorage=e,this._descriptor=t}return r.prototype._record=function(e,t,n){if(t===void 0&&(t={}),n===void 0&&(n=Hi.active()),typeof e!="number"){$.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===Qt.INT&&!Number.isInteger(e)&&($.warn("INT value type cannot accept a floating-point value for "+this._descriptor.name+", ignoring the fractional digits."),e=Math.trunc(e),!Number.isInteger(e))||this._writableMetricStorage.record(e,t,n,Lo(Date.now()))},r}();var AR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){this._record(t,n,o)},e}(fu);var RR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){$.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(fu);var wR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){this._record(t,n,o)},e}(fu);var CR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){$.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(fu);var Su=function(){function r(e,t,n){this._observableRegistry=n,this._descriptor=e,this._metricStorages=t}return r.prototype.addCallback=function(e){this._observableRegistry.addCallback(e,this)},r.prototype.removeCallback=function(e){this._observableRegistry.removeCallback(e,this)},r}();var xR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);var MR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);var _R=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);function qs(r){return r instanceof Su}var IR=function(){function r(e){this._meterSharedState=e}return r.prototype.createGauge=function(e,t){var n=Yr(e,Te.GAUGE,t),o=this._meterSharedState.registerMetricStorage(n);return new wR(o,n)},r.prototype.createHistogram=function(e,t){var n=Yr(e,Te.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new CR(o,n)},r.prototype.createCounter=function(e,t){var n=Yr(e,Te.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new RR(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Yr(e,Te.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new AR(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Yr(e,Te.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new MR(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableCounter=function(e,t){var n=Yr(e,Te.OBSERVABLE_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new xR(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableUpDownCounter=function(e,t){var n=Yr(e,Te.OBSERVABLE_UP_DOWN_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new _R(n,o,this._meterSharedState.observableRegistry)},r.prototype.addBatchObservableCallback=function(e,t){this._meterSharedState.observableRegistry.addBatchCallback(e,t)},r.prototype.removeBatchObservableCallback=function(e,t){this._meterSharedState.observableRegistry.removeBatchCallback(e,t)},r}();var yu=function(){function r(e){this._instrumentDescriptor=e}return r.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},r.prototype.updateDescription=function(e){this._instrumentDescriptor=Yr(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},r}();var mU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),PR=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},gU=function(){function r(e){this._hash=e,this._valueMap=new Map,this._keyMap=new Map}return r.prototype.get=function(e,t){return t??(t=this._hash(e)),this._valueMap.get(t)},r.prototype.getOrDefault=function(e,t){var n=this._hash(e);if(this._valueMap.has(n))return this._valueMap.get(n);var o=t();return this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,o),o},r.prototype.set=function(e,t,n){n??(n=this._hash(e)),this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,t)},r.prototype.has=function(e,t){return t??(t=this._hash(e)),this._valueMap.has(t)},r.prototype.keys=function(){var e,t;return PR(this,function(n){switch(n.label){case 0:e=this._keyMap.entries(),t=e.next(),n.label=1;case 1:return t.done===!0?[3,3]:[4,[t.value[1],t.value[0]]];case 2:return n.sent(),t=e.next(),[3,1];case 3:return[2]}})},r.prototype.entries=function(){var e,t;return PR(this,function(n){switch(n.label){case 0:e=this._valueMap.entries(),t=e.next(),n.label=1;case 1:return t.done===!0?[3,3]:[4,[this._keyMap.get(t.value[0]),t.value[1],t.value[0]]];case 2:return n.sent(),t=e.next(),[3,1];case 3:return[2]}})},Object.defineProperty(r.prototype,"size",{get:function(){return this._valueMap.size},enumerable:!1,configurable:!0}),r}();var Ir=function(r){mU(e,r);function e(){return r.call(this,tu)||this}return e}(gU);var hU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},bu=function(){function r(e,t){this._aggregator=e,this._activeCollectionStorage=new Ir,this._cumulativeMemoStorage=new Ir,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(t??2e3)-1,this._overflowHashCode=tu(this._overflowAttributes)}return r.prototype.record=function(e,t,n,o){var i=this,a=this._activeCollectionStorage.get(t);if(!a){if(this._activeCollectionStorage.size>=this._cardinalityLimit){var s=this._activeCollectionStorage.getOrDefault(this._overflowAttributes,function(){return i._aggregator.createAccumulation(o)});s?.record(e);return}a=this._aggregator.createAccumulation(o),this._activeCollectionStorage.set(t,a)}a?.record(e)},r.prototype.batchCumulate=function(e,t){var n=this;Array.from(e.entries()).forEach(function(o){var i=hU(o,3),a=i[0],s=i[1],c=i[2],l=n._aggregator.createAccumulation(t);l?.record(s);var u=l;if(n._cumulativeMemoStorage.has(a,c)){var d=n._cumulativeMemoStorage.get(a,c);u=n._aggregator.diff(d,l)}else if(n._cumulativeMemoStorage.size>=n._cardinalityLimit&&(a=n._overflowAttributes,c=n._overflowHashCode,n._cumulativeMemoStorage.has(a,c))){var d=n._cumulativeMemoStorage.get(a,c);u=n._aggregator.diff(d,l)}if(n._activeCollectionStorage.has(a,c)){var m=n._activeCollectionStorage.get(a,c);u=n._aggregator.merge(m,u)}n._cumulativeMemoStorage.set(a,l,c),n._activeCollectionStorage.set(a,u,c)})},r.prototype.collect=function(){var e=this._activeCollectionStorage;return this._activeCollectionStorage=new Ir,e},r}();var Hg=function(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},OR=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Eu=function(){function r(e,t){var n=this;this._aggregator=e,this._unreportedAccumulations=new Map,this._reportHistory=new Map,t.forEach(function(o){n._unreportedAccumulations.set(o,[])})}return r.prototype.buildMetrics=function(e,t,n,o){this._stashAccumulations(n);var i=this._getMergedUnreportedAccumulations(e),a=i,s;if(this._reportHistory.has(e)){var c=this._reportHistory.get(e),l=c.collectionTime;s=c.aggregationTemporality,s===Ki.CUMULATIVE?a=r.merge(c.accumulations,i,this._aggregator):a=r.calibrateStartTime(c.accumulations,i,l)}else s=e.selectAggregationTemporality(t.type);this._reportHistory.set(e,{accumulations:a,collectionTime:o,aggregationTemporality:s});var u=fU(a);if(u.length!==0)return this._aggregator.toMetricData(t,s,u,o)},r.prototype._stashAccumulations=function(e){var t,n,o=this._unreportedAccumulations.keys();try{for(var i=Hg(o),a=i.next();!a.done;a=i.next()){var s=a.value,c=this._unreportedAccumulations.get(s);c===void 0&&(c=[],this._unreportedAccumulations.set(s,c)),c.push(e)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}},r.prototype._getMergedUnreportedAccumulations=function(e){var t,n,o=new Ir,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=Hg(i),s=a.next();!s.done;s=a.next()){var c=s.value;o=r.merge(o,c,this._aggregator)}}catch(l){t={error:l}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return o},r.merge=function(e,t,n){for(var o=e,i=t.entries(),a=i.next();a.done!==!0;){var s=OR(a.value,3),c=s[0],l=s[1],u=s[2];if(e.has(c,u)){var d=e.get(c,u),m=n.merge(d,l);o.set(c,m,u)}else o.set(c,l,u);a=i.next()}return o},r.calibrateStartTime=function(e,t,n){var o,i;try{for(var a=Hg(e.keys()),s=a.next();!s.done;s=a.next()){var c=OR(s.value,2),l=c[0],u=c[1],d=t.get(l,u);d?.setStartTime(n)}}catch(m){o={error:m}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return t},r}();function fU(r){return Array.from(r.entries())}var SU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),yU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},LR=function(r){SU(e,r);function e(t,n,o,i,a){var s=r.call(this,t)||this;return s._attributesProcessor=o,s._aggregationCardinalityLimit=a,s._deltaMetricStorage=new bu(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new Eu(n,i),s}return e.prototype.record=function(t,n){var o=this,i=new Ir;Array.from(t.entries()).forEach(function(a){var s=yU(a,2),c=s[0],l=s[1];i.set(o._attributesProcessor.process(c),l)}),this._deltaMetricStorage.batchCumulate(i,n)},e.prototype.collect=function(t,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(t,this._instrumentDescriptor,o,n)},e}(yu);ke();function Vg(r,e){var t="";return r.unit!==e.unit&&(t+=" - Unit '"+r.unit+"' does not match '"+e.unit+`'
27
+ `),globalThis.console=e}}var zm=" ".repeat(6);import XD from"fetch-retry";import JD from"os";import kT,{multistream as QD}from"pino";import ZD from"pino-pretty";import e0 from"pino-std-serializers";var ki=new Map,t0=!0,FT="Log throttle exceeded",r0=100,n0=5e3,o0=XD(global.fetch,{retries:2,retryOn:function(r,e,t){return!!(e!==null||t&&t.status>=500)},retryDelay:function(r){return Math.pow(2,r)*500}}),Gm=class r{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=!1;lastWindowStart=Date.now();site="https://ingest.us.signoz.cloud:443/logs/json";flushIntervalMs;maxBatchSize;buffer=[];flushTimer;constructor({bindings:e,hostname:t,disableConsoleLogs:n,flushIntervalMs:o,maxBatchSize:i}){this.hostname=t??JD.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...e,env:"production"},this.flushIntervalMs=o??5e3,this.maxBatchSize=i??10;let a={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=t0?kT(a):kT(a,QD([{stream:ZD({colorize:!0})}]))}child(e){return new r({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}async flush(){await this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush()}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushBuffer()},this.flushIntervalMs))}async flushBuffer(){if(this.buffer.length===0)return;let e=this.buffer;this.buffer=[];try{let t=await o0(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:Co(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===FT)return!0;let t=Date.now();return t-this.lastWindowStart>n0&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,FT),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<r0?(this.logsInCurrentWindow++,!0):(this.droppedLogsInWindow=!0,!1)}log(e,t,n,...o){try{this.logHelper(e,t,n,...o)}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`)}}logHelper(e,t,n,...o){if(Ss[e]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof t=="string"&&!n&&(t={message:t}),typeof t=="object"&&t&&"err"in t&&t.err instanceof Error&&(t.err=e0.err(t.err));let i={...this.bindingAttributes,...t&&typeof t=="object"?t:{},...o.length>0?{args:o}:{}},a={host:this.hostname,env:this.bindingAttributes.env};this.disableConsoleLogs||this.consoleLogger[e](i,n,...o);let s={timestamp:Math.round(Date.now()*1e6),severity_text:e.toUpperCase(),resources:a,attributes:{},body:bE({message:n||"",...i})};this.buffer.push(s),this.buffer.length>=this.maxBatchSize?(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=void 0),this.flushBuffer()):this.scheduleFlush()}setApp(e){let t=this.bindingAttributes.app;this.bindingAttributes.app=e,ki.set("app",this),ki.delete(t)}debug(e,t,...n){this.log("debug",e,t,...n)}info(e,t,...n){this.log("info",e,t,...n)}warn(e,t,...n){this.log("warn",e,t,...n)}error(e,t,...n){this.log("error",e,t,...n)}bindings(){return this.bindingAttributes}addBinding(e,t){this.bindingAttributes[e]=t}setMinLevel(e){typeof e=="number"?(this.minLevelValue=e,this.consoleLogger.level=EE[e]):(this.minLevelValue=Ss[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},Fi=({app:r,hostname:e,disableConsoleLogs:t})=>(ki.has(r)||ki.set(r,new Gm({bindings:{app:r},hostname:e,disableConsoleLogs:t})),ki.get(r));async function UT(){await Promise.all([...ki.values()].map(r=>r.flush()))}import{hostname as i0}from"os";var Vt=Fi({app:"cli",hostname:i0(),disableConsoleLogs:!0}).child({cliVersion:"0.21.2"});function Hm(r){if(!r)return;r=r.toLowerCase();let e=Ac.safeParse(r);if(e.success)return C.setMinLevel(e.data),e.data}function BT({results:r,startTime:e,entity:t,getDisplayLine:n,onFailed:o}){let i=r.filter(u=>u.status==="PASSED"&&u.quarantined),a=r.filter(u=>u.status==="PASSED"&&!u.quarantined),s=r.filter(u=>u.status==="FAILED"&&u.quarantined),c=r.filter(u=>u.status==="FAILED"&&!u.quarantined),l=r.filter(u=>u.status==="CANCELLED");return DT(()=>{if(c.forEach(u=>{C.log(""),o(u)}),c.length){C.log("");let u=c.length===1?"":"s";C.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{C.dimmed(n(d))})}if(l.length){C.log("");let u=l.length===1?"":"s";C.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{C.dimmed(n(d))})}if(a.length){C.log("");let u=a.length===1?"":"s";C.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{C.dimmed(n(d))})}if(s.length){C.log("");let u=s.length===1?"":"s";C.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{C.dimmed(n(d))})}if(i.length){C.log("");let u=i.length===1?"":"s";C.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{C.dimmed(n(d))})}C.log(""),C.dimmed(`Total time: ${Math.round((Date.now()-e)/1e3)}s`)}),{quarantinedPassed:i.length,passed:a.length,quarantinedFailed:s.length,failed:c.length,cancelled:l.length}}var As=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=Ui.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=Ui.bgGreen.white("PASS"),a=3):r.includes("START")?(i=Ui.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=Ui.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=Ui.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=Ui.bgMagenta.white("RUNNING"),a=0):(C.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),a0||(i=`${i}`),C.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};import s0 from"fs";import{tmpdir as l0}from"os";import c0 from"path";import{registry as Rs}from"playwright-core/lib/server";import zT from"proper-lockfile";var GT=c0.join(l0(),"momenticBrowserInstallation");var Vm=["chrome","chromium","chrome-for-testing","ffmpeg"],u0={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},HT={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell",ffmpeg:"ffmpeg"};function VT(r){if(r==="Org Default")return!1;let e=HT[u0[r]??""]??"",t=Rs.findExecutable(e);return!t||t.installType==="none"?!1:Wm(t)}function Wm(r){let e=r.executablePath();return s0.existsSync(e)}function d0(r,e){let t=HT[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=Rs.findExecutable(t);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${r}`);if(!(!e&&Wm(n)))return n}async function p0({browser:r,force:e}){let t=d0(r,e);if(!t){C.info(`Browser '${r}' is already installed, skipping...`);return}C.info(`Installing browser '${r}'...`);try{await Rs.installDeps([t],!1),await Rs.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){C.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Rs.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Wm(o);)C.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function Oc({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?Vm:Array.from(new Set(r));try{await zT.lock(GT,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){C.warn(`Failed to acquire lock to install browsers. Please ensure that any other process installing browsers completes within 5 minutes: ${i}. Continuing without installation...`);return}let o;try{for(let i of n)try{await p0({browser:i,force:e})}catch(a){o=a,C.error(`Failed to install the ${i} browser: ${a}`)}}finally{await zT.unlock(GT,{realpath:!1})}if(o)throw o}import{createServer as m0}from"http";async function Lc(r,e,t=30){for(let n=0;n<t;n+=1){let o=r+n;if(await Nc(o))return o}C.error(`Could not find an available port for ${e} starting from ${r} after ${t} attempts`),process.exit(1)}async function Nc(r){return new Promise((e,t)=>{let n=m0();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(C.warn({err:o},"Unexpected error checking for open ports, continuing..."),n.close(),e(!0))}),n.once("listening",()=>{n.close(()=>{e(!0)})}),n.listen(r)})}import Hne from"blocked-at";import Wne from"why-is-node-running";function WT(r){let e=r?.shardIndex??1,t=r?.shardCount??1;if(e<1)throw new Error("Shard index must be greater than 0.");if(t<1)throw new Error("Shard count must be greater than 0.");if(e>t)throw new Error("Shard index cannot be greater than shard count")}function g0(r,e,t,n){if(t>r.length&&(C.warn(`Shard count ${t} is greater than the number of tests ${r.length}! Some workers won't have any tests to run.`),t=Math.max(t,r.length),e>t))return[];let o=Math.floor((e-1)*(r.length/t)),i=Math.floor(e*(r.length/t));return(n?[...r].sort((s,c)=>n(s).localeCompare(n(c))):[...r].sort()).filter((s,c)=>c>=o&&c<i)}function jT(r){let{items:e,shardIndex:t,shardCount:n,sortKey:o}=r;return n>1?g0(e,t,n,o):e}function jm({regenerateCache:r,saveCache:e,disableCache:t}){if(t){if(r)throw new Error("--disable-cache and --regenerate-cache cannot be used together.");if(e)throw new Error("--disable-cache and --save-cache cannot be used together.")}}import uB from"fs";import aoe,{multistream as loe}from"pino";import uoe from"pino-pretty";var moe=5*1024,h0="...[truncated]",goe=Buffer.byteLength(h0,"utf8");import{PostHog as Roe}from"posthog-node";var Gn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var $T=r=>{let e=r.reason===void 0?new DOMException("This operation was aborted.","AbortError"):r.reason;return e instanceof Error?e:new DOMException(e,"AbortError")};function z(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,a;if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);return new Promise((s,c)=>{let l;if(e.signal){let{signal:m}=e;if(m.aborted)return c($T(m));l=()=>c($T(m)),m.addEventListener("abort",l,{once:!0})}let u=()=>{if(e.signal&&e.signal.removeEventListener("abort",l),n)try{s(n())}catch(m){c(m)}else{typeof r.cancel=="function"&&Promise.resolve().then(()=>r.cancel()).catch(()=>{});let m=o instanceof Error?o:new Gn(o??`Promise timed out after ${t}ms`);c(m)}};t<1/0&&(a=i.setTimeout(u,t));let d=()=>{i.clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",l)};Promise.resolve(r).then(m=>{d(),s(m)}).catch(m=>{d(),c(m)})})}import{PostHog as Loe}from"posthog-node";import{execSync as f0}from"child_process";import Bi from"os";import S0 from"v8";var qT,jr,YT=Bi.platform(),y0=Bi.cpus().map(r=>({model:r.model,speed:r.speed})).reduce((r,e)=>(r[e.model]={speed:e.speed},r.totalCores=(r.totalCores??0)+1,r),{}),KT=r=>{try{let e={},t=!1,n=b0(),o=E0(),i=`${Math.round(n.freePercentage*100)}%`;n.freePercentage<.05&&(Object.assign(e,process.memoryUsage()),t=!0);let a=`${o?Math.round(o.idle):"unknown"}%`;o&&o?.total>80&&(t=!0);let s=S0.getHeapStatistics(),c=s.used_heap_size,l=s.heap_size_limit;c/l>.9&&(t=!0),t?(r.warn({memory:n,cpu:o,heapStats:s,...e},"Critical resource usage metrics detected"),xo&&C.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):r.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}};function XT(r){if(!Vr)return KT(r),{interval:setInterval(()=>KT(r),2e4),cpuMetadata:y0,platform:YT}}function b0(){let r=Bi.totalmem(),e=YT==="darwin"?T0():(()=>{let n=Bi.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),t=e.availableMemory/r;return{totalMemory:r,freeMemory:e.availableMemory,freePercentage:t}}function E0(){let r=Bi.cpus(),e=Date.now(),t={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let o of r)t.user+=o.times.user,t.nice+=o.times.nice,t.sys+=o.times.sys,t.idle+=o.times.idle,t.irq+=o.times.irq;if(t.total=t.user+t.nice+t.sys+t.idle+t.irq,!jr)return jr=t,null;let n={user:t.user-jr.user,nice:t.nice-jr.nice,sys:t.sys-jr.sys,idle:t.idle-jr.idle,irq:t.irq-jr.irq,total:t.total-jr.total};return qT={measurementTime:e,intervalMs:e-jr.measurementTime,user:n.user/n.total*100,nice:n.nice/n.total*100,sys:n.sys/n.total*100,idle:n.idle/n.total*100,irq:n.irq/n.total*100,total:100-n.idle/n.total*100},jr=t,qT}function T0(){try{let r=f0("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),t=r.match(/page size of (\d+) bytes/)?.[1],n=t?Number.parseInt(t,10):4096,o=u=>{let m=r.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Number.parseInt(m,10):0},i=o("Pages free"),a=o("Pages inactive"),s=o("Pages speculative"),c=i*n,l=(a+s)*n;return{availableMemory:c+l,rawFreeMemory:c,cachedMemory:l}}catch{let e=Bi.freemem();return{availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}var Dc=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function v0(r){if(!r||r.length===0)return{};let e={};for(let t of r){let n=t.indexOf(":");if(n>-1){let o=t.slice(0,n).trim(),i=t.slice(n+1).trim();o&&(e[o]=i);continue}e[t]=!0}return e}function kc(r,e){let t=v0(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var Av="=",zc=";",ng=",";var Rv=8192;var Vi={};II(Vi,{getKeyPairs:()=>tk,parseKeyPairsIntoRecord:()=>rk,parsePairKeyValue:()=>wv,serializeKeyPairs:()=>ek});ke();var Z0=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function ek(r){return r.reduce(function(e,t){var n=""+e+(e!==""?ng:"")+t;return n.length>Rv?e:n},"")}function tk(r){return r.getAllEntries().map(function(e){var t=Z0(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=zc+o.metadata.toString()),i})}function wv(r){var e=r.split(zc);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(Av);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=qm(e.join(zc))),{key:o,value:i,metadata:a}}}}}function rk(r){return typeof r!="string"||r.length===0?{}:r.split(ng).map(function(e){return wv(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,t){return e[t.key]=t.value,e},{})}ke();var Gc;(function(r){r.AlwaysOff="always_off",r.AlwaysOn="always_on",r.ParentBasedAlwaysOff="parentbased_always_off",r.ParentBasedAlwaysOn="parentbased_always_on",r.ParentBasedTraceIdRatio="parentbased_traceidratio",r.TraceIdRatio="traceidratio"})(Gc||(Gc={}));var nk=",",ok=["OTEL_SDK_DISABLED"];function ik(r){return ok.indexOf(r)>-1}var ak=["OTEL_BSP_EXPORT_TIMEOUT","OTEL_BSP_MAX_EXPORT_BATCH_SIZE","OTEL_BSP_MAX_QUEUE_SIZE","OTEL_BSP_SCHEDULE_DELAY","OTEL_BLRP_EXPORT_TIMEOUT","OTEL_BLRP_MAX_EXPORT_BATCH_SIZE","OTEL_BLRP_MAX_QUEUE_SIZE","OTEL_BLRP_SCHEDULE_DELAY","OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_SPAN_LINK_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_EXPORTER_OTLP_TIMEOUT","OTEL_EXPORTER_OTLP_TRACES_TIMEOUT","OTEL_EXPORTER_OTLP_METRICS_TIMEOUT","OTEL_EXPORTER_OTLP_LOGS_TIMEOUT","OTEL_EXPORTER_JAEGER_AGENT_PORT"];function sk(r){return ak.indexOf(r)>-1}var lk=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function ck(r){return lk.indexOf(r)>-1}var og=1/0,ig=128,uk=128,dk=128,ag={OTEL_SDK_DISABLED:!1,CONTAINER_NAME:"",ECS_CONTAINER_METADATA_URI_V4:"",ECS_CONTAINER_METADATA_URI:"",HOSTNAME:"",KUBERNETES_SERVICE_HOST:"",NAMESPACE:"",OTEL_BSP_EXPORT_TIMEOUT:3e4,OTEL_BSP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BSP_MAX_QUEUE_SIZE:2048,OTEL_BSP_SCHEDULE_DELAY:5e3,OTEL_BLRP_EXPORT_TIMEOUT:3e4,OTEL_BLRP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BLRP_MAX_QUEUE_SIZE:2048,OTEL_BLRP_SCHEDULE_DELAY:5e3,OTEL_EXPORTER_JAEGER_AGENT_HOST:"",OTEL_EXPORTER_JAEGER_AGENT_PORT:6832,OTEL_EXPORTER_JAEGER_ENDPOINT:"",OTEL_EXPORTER_JAEGER_PASSWORD:"",OTEL_EXPORTER_JAEGER_USER:"",OTEL_EXPORTER_OTLP_ENDPOINT:"",OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:"",OTEL_EXPORTER_OTLP_METRICS_ENDPOINT:"",OTEL_EXPORTER_OTLP_LOGS_ENDPOINT:"",OTEL_EXPORTER_OTLP_HEADERS:"",OTEL_EXPORTER_OTLP_TRACES_HEADERS:"",OTEL_EXPORTER_OTLP_METRICS_HEADERS:"",OTEL_EXPORTER_OTLP_LOGS_HEADERS:"",OTEL_EXPORTER_OTLP_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_TRACES_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_METRICS_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_LOGS_TIMEOUT:1e4,OTEL_EXPORTER_ZIPKIN_ENDPOINT:"http://localhost:9411/api/v2/spans",OTEL_LOG_LEVEL:Ge.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:og,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:ig,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:uk,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:dk,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Gc.ParentBasedAlwaysOn,OTEL_TRACES_SAMPLER_ARG:"",OTEL_LOGS_EXPORTER:"",OTEL_EXPORTER_OTLP_INSECURE:"",OTEL_EXPORTER_OTLP_TRACES_INSECURE:"",OTEL_EXPORTER_OTLP_METRICS_INSECURE:"",OTEL_EXPORTER_OTLP_LOGS_INSECURE:"",OTEL_EXPORTER_OTLP_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE:"",OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE:"",OTEL_EXPORTER_OTLP_COMPRESSION:"",OTEL_EXPORTER_OTLP_TRACES_COMPRESSION:"",OTEL_EXPORTER_OTLP_METRICS_COMPRESSION:"",OTEL_EXPORTER_OTLP_LOGS_COMPRESSION:"",OTEL_EXPORTER_OTLP_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_TRACES_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_LOGS_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"cumulative"};function pk(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function mk(r,e,t,n,o){if(n===void 0&&(n=-1/0),o===void 0&&(o=1/0),typeof t[r]<"u"){var i=Number(t[r]);isNaN(i)||(i<n?e[r]=n:i>o?e[r]=o:e[r]=i)}}function gk(r,e,t,n){n===void 0&&(n=nk);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var hk={ALL:Ge.ALL,VERBOSE:Ge.VERBOSE,DEBUG:Ge.DEBUG,INFO:Ge.INFO,WARN:Ge.WARN,ERROR:Ge.ERROR,NONE:Ge.NONE};function fk(r,e,t){var n=t[r];if(typeof n=="string"){var o=hk[n.toUpperCase()];o!=null&&(e[r]=o)}}function Cv(r){var e={};for(var t in ag){var n=t;switch(n){case"OTEL_LOG_LEVEL":fk(n,e,r);break;default:if(ik(n))pk(n,e,r);else if(sk(n))mk(n,e,r);else if(ck(n))gk(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function Rt(){var r=Cv(process.env);return Object.assign({},ag,r)}function xv(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function Hc(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=xv(r.charCodeAt(n)),i=xv(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var Mv="1.25.1";var Sk="deployment.environment";var yk="process.runtime.name";var bk="service.name";var Ek="service.instance.id";var Tk="telemetry.sdk.name",vk="telemetry.sdk.language",Ak="telemetry.sdk.version";var _v=Sk;var Iv=yk;var Vc=bk;var Pv=Ek;var Ps=Tk,Os=vk,Ls=Ak;var Rk="nodejs";var Ov=Rk;var Wi,Wc=(Wi={},Wi[Ps]="opentelemetry",Wi[Iv]="node",Wi[Os]=Ov,Wi[Ls]=Mv,Wi);var wk=9,Ck=6,xk=Math.pow(10,Ck),Mk=Math.pow(10,wk);function Lv(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*xk);return[t,n]}function Nv(r){return r[0]*Mk+r[1]}function Ns(r){return r[0]*1e6+r[1]/1e3}var _o;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(_o||(_o={}));var Dv=function(){function r(){var e=this;this._promise=new Promise(function(t,n){e._resolve=t,e._reject=n})}return Object.defineProperty(r.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),r.prototype.resolve=function(e){this._resolve(e)},r.prototype.reject=function(e){this._reject(e)},r}();var _k=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Ik=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},kv=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new Dv}return Object.defineProperty(r.prototype,"isCalled",{get:function(){return this._isCalled},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"promise",{get:function(){return this._deferred.promise},enumerable:!1,configurable:!0}),r.prototype.call=function(){for(var e,t=this,n=[],o=0;o<arguments.length;o++)n[o]=arguments[o];if(!this._isCalled){this._isCalled=!0;try{Promise.resolve((e=this._callback).call.apply(e,Ik([this._that],_k(n),!1))).then(function(i){return t._deferred.resolve(i)},function(i){return t._deferred.reject(i)})}catch(i){this._deferred.reject(i)}}return this._deferred.promise},r}();var gr;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(gr||(gr={}));var Ot;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Ot||(Ot={}));var Pk=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}();var nse=function(r){Pk(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function Fv(r,e){for(var t=0,n=r.length-1;n-t>1;){var o=Math.trunc((n+t)/2);r[o]<=e?t=o:n=o-1}return r[n]<=e?n:r[t]<=e?t:-1}ke();var hr;(function(r){r[r.DROP=0]="DROP",r[r.SUM=1]="SUM",r[r.LAST_VALUE=2]="LAST_VALUE",r[r.HISTOGRAM=3]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(hr||(hr={}));var Uv=function(){function r(){this.kind=hr.DROP}return r.prototype.createAccumulation=function(){},r.prototype.merge=function(e,t){},r.prototype.diff=function(e,t){},r.prototype.toMetricData=function(e,t,n,o){},r}();var me;(function(r){r.COUNTER="COUNTER",r.GAUGE="GAUGE",r.HISTOGRAM="HISTOGRAM",r.UP_DOWN_COUNTER="UP_DOWN_COUNTER",r.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",r.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",r.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(me||(me={}));var Ok=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function Lk(r){var e=r.map(function(){return 0});return e.push(0),{buckets:{boundaries:r,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var sg=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=Lk(t)),this.startTime=e,this._boundaries=t,this._recordMinMax=n,this._current=o}return r.prototype.record=function(e){if(!Number.isNaN(e)){this._current.count+=1,this._current.sum+=e,this._recordMinMax&&(this._current.min=Math.min(e,this._current.min),this._current.max=Math.max(e,this._current.max),this._current.hasMinMax=!0);var t=Fv(this._boundaries,e);this._current.buckets.counts[t+1]+=1}},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var lg=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=hr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new sg(e,this._boundaries,this._recordMinMax)},r.prototype.merge=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=i[c]+a[c];var l=1/0,u=-1/0;return this._recordMinMax&&(n.hasMinMax&&o.hasMinMax?(l=Math.min(n.min,o.min),u=Math.max(n.max,o.max)):n.hasMinMax?(l=n.min,u=n.max):o.hasMinMax&&(l=o.min,u=o.max)),new sg(e.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:n.count+o.count,sum:n.sum+o.sum,hasMinMax:this._recordMinMax&&(n.hasMinMax||o.hasMinMax),min:l,max:u})},r.prototype.diff=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=a[c]-i[c];return new sg(t.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:o.count-n.count,sum:o.sum-n.sum,hasMinMax:!1,min:1/0,max:-1/0})},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.HISTOGRAM,dataPoints:n.map(function(i){var a=Ok(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===me.GAUGE||e.type===me.UP_DOWN_COUNTER||e.type===me.OBSERVABLE_GAUGE||e.type===me.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,buckets:l.buckets,count:l.count}}})}},r}();ke();var cg=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},ug=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},dg=function(){function r(e,t,n,o){e===void 0&&(e=new Nk),t===void 0&&(t=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=t,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(r.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"length",{get:function(){return this.backing.length===0||this.indexEnd===this.indexStart&&this.at(0)===0?0:this.indexEnd-this.indexStart+1},enumerable:!1,configurable:!0}),r.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(t,n){return e.at(n)})},r.prototype.at=function(e){var t=this.indexBase-this.indexStart;return e<t&&(e+=this.backing.length),e-=t,this.backing.countAt(e)},r.prototype.incrementBucket=function(e,t){this.backing.increment(e,t)},r.prototype.decrementBucket=function(e,t){this.backing.decrement(e,t)},r.prototype.trim=function(){for(var e=0;e<this.length;e++)if(this.at(e)!==0){this.indexStart+=e;break}else if(e===this.length-1){this.indexStart=this.indexEnd=this.indexBase=0;return}for(var e=this.length-1;e>=0;e--)if(this.at(e)!==0){this.indexEnd-=this.length-e-1;break}this._rotate()},r.prototype.downscale=function(e){this._rotate();for(var t=1+this.indexEnd-this.indexStart,n=1<<e,o=0,i=0,a=this.indexStart;a<=this.indexEnd;){var s=a%n;s<0&&(s+=n);for(var c=s;c<n&&o<t;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},r.prototype.clone=function(){return new r(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},r.prototype._rotate=function(){var e=this.indexBase-this.indexStart;e!==0&&(e>0?(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,e),this.backing.reverse(e,this.backing.length)):(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,this.backing.length+e)),this.indexBase=this.indexStart)},r.prototype._relocateBucket=function(e,t){e!==t&&this.incrementBucket(e,this.backing.emptyBucket(t))},r}();var Nk=function(){function r(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(r.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),r.prototype.countAt=function(e){return this._counts[e]},r.prototype.growTo=function(e,t,n){var o=new Array(e).fill(0);o.splice.apply(o,ug([n,this._counts.length-t],cg(this._counts.slice(t)),!1)),o.splice.apply(o,ug([0,t],cg(this._counts.slice(0,t)),!1)),this._counts=o},r.prototype.reverse=function(e,t){for(var n=Math.floor((e+t)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[t-o-1],this._counts[t-o-1]=i}},r.prototype.emptyBucket=function(e){var t=this._counts[e];return this._counts[e]=0,t},r.prototype.increment=function(e,t){this._counts[e]+=t},r.prototype.decrement=function(e,t){this._counts[e]>=t?this._counts[e]-=t:this._counts[e]=0},r.prototype.clone=function(){return new r(ug([],cg(this._counts),!1))},r}();var Bv=52,Dk=2146435072,kk=1048575,pg=1023,jc=-pg+1,$c=pg,Ds=Math.pow(2,-1022);function qc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&Dk)>>20;return n-pg}function Kc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&kk)*Math.pow(2,32);return o+n}function ks(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function Gv(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var Fk=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Hn=function(r){Fk(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var Vv=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Ds)return this._minNormalLowerBoundaryIndex();var t=qc(e),n=this._rightShift(Kc(e)-1,Bv);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new Hn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new Hn("overflow: "+e+" is > maximum lower boundary: "+n);return ks(1,e<<this._shift)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){var e=jc>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return $c>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var Wv=function(){function r(e){this._scale=e,this._scaleFactor=ks(Math.LOG2E,e),this._inverseFactor=ks(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Ds)return this._minNormalLowerBoundaryIndex()-1;if(Kc(e)===0){var t=qc(e);return(t<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},r.prototype.lowerBoundary=function(e){var t=this._maxNormalLowerBoundaryIndex();if(e>=t){if(e===t)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new Hn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Ds;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new Hn("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){return jc<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return($c+1<<this._scale)-1},r}();var jv=-10,$v=20,Uk=Array.from({length:31},function(r,e){return e>10?new Wv(e-10):new Vv(e-10)});function mg(r){if(r>$v||r<jv)throw new Hn("expected scale >= "+jv+" && <= "+$v+", got: "+r);return Uk[r+10]}var Bk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Yc=function(){function r(e,t){this.low=e,this.high=t}return r.combine=function(e,t){return new r(Math.min(e.low,t.low),Math.max(e.high,t.high))},r}(),zk=20,Gk=160,gg=2,Hk=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=Gk),n===void 0&&(n=!0),o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=Number.POSITIVE_INFINITY),c===void 0&&(c=Number.NEGATIVE_INFINITY),l===void 0&&(l=new dg),u===void 0&&(u=new dg),d===void 0&&(d=mg(zk)),this.startTime=e,this._maxSize=t,this._recordMinMax=n,this._sum=o,this._count=i,this._zeroCount=a,this._min=s,this._max=c,this._positive=l,this._negative=u,this._mapping=d,this._maxSize<gg&&($.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+gg),this._maxSize=gg)}return r.prototype.record=function(e){this.updateByIncrement(e,1)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return{hasMinMax:this._recordMinMax,min:this.min,max:this.max,sum:this.sum,positive:{offset:this.positive.offset,bucketCounts:this.positive.counts()},negative:{offset:this.negative.offset,bucketCounts:this.negative.counts()},count:this.count,scale:this.scale,zeroCount:this.zeroCount}},Object.defineProperty(r.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),r.prototype.updateByIncrement=function(e,t){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=t,e===0){this._zeroCount+=t;return}this._sum+=e*t,e>0?this._updateBuckets(this._positive,e,t):this._updateBuckets(this._negative,-e,t)}},r.prototype.merge=function(e){this._count===0?(this._min=e.min,this._max=e.max):e.count!==0&&(e.min<this.min&&(this._min=e.min),e.max>this.max&&(this._max=e.max)),this.startTime=e.startTime,this._sum+=e.sum,this._count+=e.count,this._zeroCount+=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._mergeBuckets(this.positive,e,e.positive,t),this._mergeBuckets(this.negative,e,e.negative,t)},r.prototype.diff=function(e){this._min=1/0,this._max=-1/0,this._sum-=e.sum,this._count-=e.count,this._zeroCount-=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._diffBuckets(this.positive,e,e.positive,t),this._diffBuckets(this.negative,e,e.negative,t)},r.prototype.clone=function(){return new r(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},r.prototype._updateBuckets=function(e,t,n){var o=this._mapping.mapToIndex(t),i=!1,a=0,s=0;if(e.length===0?(e.indexStart=o,e.indexEnd=e.indexStart,e.indexBase=e.indexStart):o<e.indexStart&&e.indexEnd-o>=this._maxSize?(i=!0,s=o,a=e.indexEnd):o>e.indexEnd&&o-e.indexStart>=this._maxSize&&(i=!0,s=e.indexStart,a=o),i){var c=this._changeScale(a,s);this._downscale(c),o=this._mapping.mapToIndex(t)}this._incrementIndexBy(e,o,n)},r.prototype._incrementIndexBy=function(e,t,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=t),t<e.indexStart){var o=e.indexEnd-t;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=t}else if(t>e.indexEnd){var o=t-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=t}var i=t-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},r.prototype._grow=function(e,t){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=Gv(t);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},r.prototype._changeScale=function(e,t){for(var n=0;e-t>=this._maxSize;)e>>=1,t>>=1,n++;return n},r.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var t=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=mg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=Yc.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=Yc.combine(this._highLowAtScale(this.negative,this.scale,t),this._highLowAtScale(e.negative,e.scale,t));return Math.min(t-this._changeScale(n.high,n.low),t-this._changeScale(o.high,o.low))},r.prototype._highLowAtScale=function(e,t,n){if(e.length===0)return new Yc(0,-1);var o=t-n;return new Yc(e.indexStart>>o,e.indexEnd>>o)},r.prototype._mergeBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},r.prototype._diffBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++){var c=i+s>>a,l=c-e.indexBase;l<0&&(l+=e.backing.length),e.decrementBucket(l,n.at(s))}e.trim()},r}();var qv=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=hr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Hk(e,this._maxSize,this._recordMinMax)},r.prototype.merge=function(e,t){var n=t.clone();return n.merge(e),n},r.prototype.diff=function(e,t){var n=t.clone();return n.diff(e),n},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=Bk(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===me.GAUGE||e.type===me.UP_DOWN_COUNTER||e.type===me.OBSERVABLE_GAUGE||e.type===me.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,positive:{offset:l.positive.offset,bucketCounts:l.positive.bucketCounts},negative:{offset:l.negative.offset,bucketCounts:l.negative.bucketCounts},count:l.count,scale:l.scale,zeroCount:l.zeroCount}}})}},r}();var Vk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},hg=function(){function r(e,t,n){t===void 0&&(t=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=t,this.sampleTime=n}return r.prototype.record=function(e){this._current=e,this.sampleTime=Lv(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Kv=function(){function r(){this.kind=hr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new hg(e)},r.prototype.merge=function(e,t){var n=Ns(t.sampleTime)>=Ns(e.sampleTime)?t:e;return new hg(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Ns(t.sampleTime)>=Ns(e.sampleTime)?t:e;return new hg(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.GAUGE,dataPoints:n.map(function(i){var a=Vk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var Wk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Fs=function(){function r(e,t,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=t,this._current=n,this.reset=o}return r.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var fg=function(){function r(e){this.monotonic=e,this.kind=hr.SUM}return r.prototype.createAccumulation=function(e){return new Fs(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Fs(t.startTime,this.monotonic,o,t.reset):new Fs(e.startTime,this.monotonic,n+o)},r.prototype.diff=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return this.monotonic&&n>o?new Fs(t.startTime,this.monotonic,o,!0):new Fs(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Ot.SUM,dataPoints:n.map(function(i){var a=Wk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var Io=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),qr=function(){function r(){}return r.Drop=function(){return rA},r.Sum=function(){return nA},r.LastValue=function(){return oA},r.Histogram=function(){return iA},r.ExponentialHistogram=function(){return jk},r.Default=function(){return $k},r}();var Yv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Uv,e}(qr);var Xv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case me.COUNTER:case me.OBSERVABLE_COUNTER:case me.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new fg(!0),e.NON_MONOTONIC_INSTANCE=new fg(!1),e}(qr);var Jv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Kv,e}(qr);var Qv=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new lg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(qr);var Zv=function(r){Io(e,r);function e(t,n){n===void 0&&(n=!0);var o=r.call(this)||this;if(o._recordMinMax=n,t==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");t=t.concat(),t=t.sort(function(s,c){return s-c});var i=t.lastIndexOf(-1/0),a=t.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=t.slice(i+1,a),o}return e.prototype.createAggregator=function(t){return new lg(this._boundaries,this._recordMinMax)},e}(qr);var eA=function(r){Io(e,r);function e(t,n){t===void 0&&(t=160),n===void 0&&(n=!0);var o=r.call(this)||this;return o._maxSize=t,o._recordMinMax=n,o}return e.prototype.createAggregator=function(t){return new qv(this._maxSize,this._recordMinMax)},e}(qr);var tA=function(r){Io(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case me.COUNTER:case me.UP_DOWN_COUNTER:case me.OBSERVABLE_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:return nA;case me.GAUGE:case me.OBSERVABLE_GAUGE:return oA;case me.HISTOGRAM:return t.advice.explicitBucketBoundaries?new Zv(t.advice.explicitBucketBoundaries):iA}return $.warn("Unable to recognize instrument type: "+t.type),rA},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(qr);var rA=new Yv,nA=new Xv,oA=new Jv,iA=new Qv,jk=new eA,$k=new tA;ke();function Xc(){return"unknown_service:"+process.argv0}var Vn=function(){return Vn=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},Vn.apply(this,arguments)},qk=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},Kk=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},Yk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Sg=function(){function r(e,t){var n=this,o;this._attributes=e,this.asyncAttributesPending=t!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=t?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return $.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return r.empty=function(){return r.EMPTY},r.default=function(){var e;return new r((e={},e[Vc]=Xc(),e[Os]=Wc[Os],e[Ps]=Wc[Ps],e[Ls]=Wc[Ls],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&$.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),r.prototype.waitForAsyncAttributes=function(){return qk(this,void 0,void 0,function(){return Kk(this,function(e){switch(e.label){case 0:return this.asyncAttributesPending?[4,this._asyncAttributesPromise]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})},r.prototype.merge=function(e){var t=this,n;if(!e)return this;var o=Vn(Vn({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new r(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=Yk(a,2),l=c[0],u=c[1];return Vn(Vn(Vn(Vn({},t._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new r(o,i)},r.EMPTY=new r({}),r}();var Po;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(Po||(Po={}));ke();var Xk=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},Jk=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},yg=function(){return gr.CUMULATIVE},aA=function(r){switch(r){case me.COUNTER:case me.OBSERVABLE_COUNTER:case me.GAUGE:case me.HISTOGRAM:case me.OBSERVABLE_GAUGE:return gr.DELTA;case me.UP_DOWN_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:return gr.CUMULATIVE}},sA=function(r){switch(r){case me.COUNTER:case me.HISTOGRAM:return gr.DELTA;case me.GAUGE:case me.UP_DOWN_COUNTER:case me.OBSERVABLE_UP_DOWN_COUNTER:case me.OBSERVABLE_COUNTER:case me.OBSERVABLE_GAUGE:return gr.CUMULATIVE}};function Qk(){var r=Rt(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?yg:e==="delta"?aA:e==="lowmemory"?sA:($.warn("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '"+r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE+"', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead."),yg)}function Zk(r){return r!=null?r===Po.DELTA?aA:r===Po.LOWMEMORY?sA:yg:Qk()}function eF(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return qr.Default()}}var lA=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=eF(t),this._aggregationTemporalitySelector=Zk(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return Xk(this,void 0,void 0,function(){return Jk(this,function(e){switch(e.label){case 0:return[4,this._otlpExporter.shutdown()];case 1:return e.sent(),[2]}})})},r.prototype.forceFlush=function(){return Promise.resolve()},r.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},r.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},r}();ke();ke();var tF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},cA=1e4,uA=5,dA=1e3,pA=5e3,mA=1.5;function Us(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=tF(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):$.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function bg(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function Eg(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return $.warn("Could not parse export URL: '"+r+"'"),r}}function Tg(r){return typeof r=="number"?r<=0?vg(r,cA):r:rF()}function rF(){var r,e=Number((r=Rt().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:Rt().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?vg(e,cA):e}function vg(r,e){return $.warn("Timeout must be greater than 0",r),e}function gA(r){var e=[429,502,503,504];return e.includes(r)}function hA(r){if(r==null)return-1;var e=Number.parseInt(r,10);if(Number.isInteger(e))return e>0?e*1e3:-1;var t=new Date(r).getTime()-Date.now();return t>=0?t:0}var fA=function(){function r(e){e===void 0&&(e={}),this._sendingPromises=[],this.url=this.getDefaultUrl(e),typeof e.hostname=="string"&&(this.hostname=e.hostname),this.shutdown=this.shutdown.bind(this),this._shutdownOnce=new kv(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=Tg(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:_o.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:_o.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:_o.SUCCESS})}).catch(function(n){t({code:_o.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{$.debug("items to be sent",e),t.send(e,n,o)}catch(i){o(i)}})},r.prototype.shutdown=function(){return this._shutdownOnce.call()},r.prototype.forceFlush=function(){return Promise.all(this._sendingPromises).then(function(){})},r.prototype._shutdown=function(){return $.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();ke();import*as Ag from"url";import*as Qc from"http";import*as Zc from"https";import*as SA from"zlib";import{Readable as oF}from"stream";var Wn;(function(r){r.NONE="none",r.GZIP="gzip"})(Wn||(Wn={}));var nF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),ji=function(r){nF(e,r);function e(t,n,o){var i=r.call(this,t)||this;return i.name="OTLPExporterError",i.data=o,i.code=n,i}return e}(Error);var Jc=function(){return Jc=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},Jc.apply(this,arguments)};function Rg(r,e,t,n,o){var i=r.timeoutMillis,a=new Ag.URL(r.url),s=Number(process.versions.node.split(".")[0]),c,l,u=!1,d=setTimeout(function(){if(clearTimeout(c),u=!0,l.destroyed){var h=new ji("Request Timeout");o(h)}else s>=14?l.destroy():l.abort()},i),m={hostname:a.hostname,port:a.port,path:a.pathname,method:"POST",headers:Jc({"Content-Type":t},r.headers),agent:r.agent},p=a.protocol==="http:"?Qc.request:Zc.request,g=function(h,f){switch(h===void 0&&(h=uA),f===void 0&&(f=dA),l=p(m,function(T){var w="";T.on("data",function(x){return w+=x}),T.on("aborted",function(){if(u){var x=new ji("Request Timeout");o(x)}}),T.on("end",function(){if(u===!1)if(T.statusCode&&T.statusCode<299)$.debug("statusCode: "+T.statusCode,w),n(),clearTimeout(d),clearTimeout(c);else if(T.statusCode&&gA(T.statusCode)&&h>0){var x=void 0;f=mA*f,T.headers["retry-after"]?x=hA(T.headers["retry-after"]):x=Math.round(Math.random()*(pA-f)+f),c=setTimeout(function(){g(h-1,f)},x)}else{var R=new ji(T.statusMessage,T.statusCode,w);o(R),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(T){if(u){var w=new ji("Request Timeout",T.code);o(w)}else o(T);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var T=new ji("Request Timeout");o(T)}clearTimeout(d),clearTimeout(c)}),r.compression){case Wn.GZIP:{l.setHeader("Content-Encoding","gzip");var b=iF(e);b.on("error",o).pipe(SA.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};g()}function iF(r){var e=new oF;return e.push(r),e.push(null),e}function wg(r){if(r.httpAgentOptions&&r.keepAlive===!1){$.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new Ag.URL(r.url),t=e.protocol==="http:"?Qc.Agent:Zc.Agent;return new t(Jc({keepAlive:!0},r.httpAgentOptions))}catch(n){$.error("collector exporter failed to create http agent. err: "+n.message);return}}function Cg(r){if(r)return r;var e=Rt().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||Rt().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Wn.GZIP?Wn.GZIP:Wn.NONE}ke();var aF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),eu=function(r){aF(e,r);function e(t,n,o){t===void 0&&(t={});var i=r.call(this,t)||this;return i.DEFAULT_HEADERS={},i._contentType=o,t.metadata&&$.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,Us(t.headers),Vi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=wg(t),i.compression=Cg(t.compression),i._serializer=n,i}return e.prototype.onInit=function(t){},e.prototype.send=function(t,n,o){var i=this;if(this._shutdownOnce.isCalled){$.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;Rg(i,(u=i._serializer.serializeRequest(t))!==null&&u!==void 0?u:new Uint8Array,i._contentType,c,l)}).then(n,o);this._sendingPromises.push(a);var s=function(){var c=i._sendingPromises.indexOf(a);i._sendingPromises.splice(c,1)};a.then(s,s)},e.prototype.onShutdown=function(){},e}(fA);function bA(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function sF(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function EA(r){var e=bA(r);return sF(e)}function lF(r){var e=bA(r);return e.toString()}var cF=typeof BigInt<"u"?lF:Nv;function yA(r){return r}function TA(r){if(r!==void 0)return Hc(r)}var uF={encodeHrTime:EA,encodeSpanContext:Hc,encodeOptionalSpanContext:TA};function vA(r){var e,t;if(r===void 0)return uF;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?EA:cF,encodeSpanContext:o?yA:Hc,encodeOptionalSpanContext:o?yA:TA}}var dF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function AA(r){return{name:r.name,version:r.version}}function $i(r){return Object.keys(r).map(function(e){return RA(e,r[e])})}function RA(r,e){return{key:r,value:wA(e)}}function wA(r){var e=typeof r;return e==="string"?{stringValue:r}:e==="number"?Number.isInteger(r)?{intValue:r}:{doubleValue:r}:e==="boolean"?{boolValue:r}:r instanceof Uint8Array?{bytesValue:r}:Array.isArray(r)?{arrayValue:{values:r.map(wA)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=dF(t,2),o=n[0],i=n[1];return RA(o,i)})}}:{}}function CA(r){return{attributes:$i(r.attributes),droppedAttributesCount:0}}ke();function MA(r,e){var t=vA(e);return{resource:CA(r.resource),schemaUrl:void 0,scopeMetrics:pF(r.scopeMetrics,t)}}function pF(r,e){return Array.from(r.map(function(t){return{scope:AA(t.scope),metrics:t.metrics.map(function(n){return mF(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function mF(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=SF(r.aggregationTemporality);switch(r.dataPointType){case Ot.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:xA(r,e)};break;case Ot.GAUGE:t.gauge={dataPoints:xA(r,e)};break;case Ot.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:hF(r,e)};break;case Ot.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:fF(r,e)};break}return t}function gF(r,e,t){var n={attributes:$i(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case Qt.INT:n.asInt=r.value;break;case Qt.DOUBLE:n.asDouble=r.value;break}return n}function xA(r,e){return r.dataPoints.map(function(t){return gF(t,r.descriptor.valueType,e)})}function hF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:$i(t.attributes),bucketCounts:n.buckets.counts,explicitBounds:n.buckets.boundaries,count:n.count,sum:n.sum,min:n.min,max:n.max,startTimeUnixNano:e.encodeHrTime(t.startTime),timeUnixNano:e.encodeHrTime(t.endTime)}})}function fF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:$i(t.attributes),count:n.count,min:n.min,max:n.max,sum:n.sum,positive:{offset:n.positive.offset,bucketCounts:n.positive.bucketCounts},negative:{offset:n.negative.offset,bucketCounts:n.negative.bucketCounts},scale:n.scale,zeroCount:n.zeroCount,startTimeUnixNano:e.encodeHrTime(t.startTime),timeUnixNano:e.encodeHrTime(t.endTime)}})}function SF(r){switch(r){case gr.DELTA:return 1;case gr.CUMULATIVE:return 2}}function _A(r,e){return{resourceMetrics:r.map(function(t){return MA(t,e)})}}var xg={serializeRequest:function(r){var e=_A(r,{useLongBits:!1}),t=new TextEncoder;return t.encode(JSON.stringify(e))},deserializeResponse:function(r){var e=new TextDecoder;return JSON.parse(e.decode(r))}};var IA="0.52.1";var PA=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),qi=function(){return qi=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},qi.apply(this,arguments)},OA="v1/metrics",yF="http://localhost:4318/"+OA,bF={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+IA},EF=function(r){PA(e,r);function e(t){var n=r.call(this,t,xg,"application/json")||this;return n.headers=qi(qi(qi(qi({},n.headers),bF),Vi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),Us(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?Eg(Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):Rt().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?bg(Rt().OTEL_EXPORTER_OTLP_ENDPOINT,OA):yF},e}(eu),LA=function(r){PA(e,r);function e(t){return r.call(this,new EF(t),t)||this}return e}(lA);var Ki;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(Ki||(Ki={}));var Kr;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Kr||(Kr={}));ke();var TF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),NA=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},DA=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},vF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},AF=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},RF=function(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};function kA(r){return r!=null}function tu(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function FA(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var Mg=function(r){TF(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function jn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new Mg("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function UA(r){return NA(this,void 0,void 0,function(){var e=this;return DA(this,function(t){return[2,Promise.all(r.map(function(n){return NA(e,void 0,void 0,function(){var o,i;return DA(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,n];case 1:return o=a.sent(),[2,{status:"fulfilled",value:o}];case 2:return i=a.sent(),[2,{status:"rejected",reason:i}];case 3:return[2]}})})}))]})})}function BA(r){return r.status==="rejected"}function _g(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,AF([],vF(e(n)),!1))}),t}function zA(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=RF(r),i=o.next();!i.done;i=o.next()){var a=i.value;if(!e.has(a))return!1}}catch(s){t={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!0}function GA(r,e){for(var t=0,n=r.length-1,o=r.length;n>=t;){var i=t+Math.trunc((n-t)/2);r[i]<e?t=i+1:(o=i,n=i-1)}return o}function HA(r,e){return r.toLowerCase()===e.toLowerCase()}ke();var fr;(function(r){r[r.DROP=0]="DROP",r[r.SUM=1]="SUM",r[r.LAST_VALUE=2]="LAST_VALUE",r[r.HISTOGRAM=3]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(fr||(fr={}));var Ig=function(){function r(){this.kind=fr.DROP}return r.prototype.createAccumulation=function(){},r.prototype.merge=function(e,t){},r.prototype.diff=function(e,t){},r.prototype.toMetricData=function(e,t,n,o){},r}();ke();var Te;(function(r){r.COUNTER="COUNTER",r.GAUGE="GAUGE",r.HISTOGRAM="HISTOGRAM",r.UP_DOWN_COUNTER="UP_DOWN_COUNTER",r.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",r.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",r.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(Te||(Te={}));function Yr(r,e,t){var n,o,i,a;return CF(r)||$.warn('Invalid metric name: "'+r+'". The metric name should be a ASCII string with a length no greater than 255 characters.'),{name:r,type:e,description:(n=t?.description)!==null&&n!==void 0?n:"",unit:(o=t?.unit)!==null&&o!==void 0?o:"",valueType:(i=t?.valueType)!==null&&i!==void 0?i:Qt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function VA(r,e){var t,n;return{name:(t=r.name)!==null&&t!==void 0?t:e.name,description:(n=r.description)!==null&&n!==void 0?n:e.description,type:e.type,unit:e.unit,valueType:e.valueType,advice:e.advice}}function WA(r,e){return HA(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var wF=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function CF(r){return r.match(wF)!=null}var xF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i};function MF(r){var e=r.map(function(){return 0});return e.push(0),{buckets:{boundaries:r,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var ru=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=MF(t)),this.startTime=e,this._boundaries=t,this._recordMinMax=n,this._current=o}return r.prototype.record=function(e){if(!Number.isNaN(e)){this._current.count+=1,this._current.sum+=e,this._recordMinMax&&(this._current.min=Math.min(e,this._current.min),this._current.max=Math.max(e,this._current.max),this._current.hasMinMax=!0);var t=GA(this._boundaries,e);this._current.buckets.counts[t]+=1}},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var nu=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=fr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ru(e,this._boundaries,this._recordMinMax)},r.prototype.merge=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=i[c]+a[c];var l=1/0,u=-1/0;return this._recordMinMax&&(n.hasMinMax&&o.hasMinMax?(l=Math.min(n.min,o.min),u=Math.max(n.max,o.max)):n.hasMinMax?(l=n.min,u=n.max):o.hasMinMax&&(l=o.min,u=o.max)),new ru(e.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:n.count+o.count,sum:n.sum+o.sum,hasMinMax:this._recordMinMax&&(n.hasMinMax||o.hasMinMax),min:l,max:u})},r.prototype.diff=function(e,t){for(var n=e.toPointValue(),o=t.toPointValue(),i=n.buckets.counts,a=o.buckets.counts,s=new Array(i.length),c=0;c<i.length;c++)s[c]=a[c]-i[c];return new ru(t.startTime,n.buckets.boundaries,this._recordMinMax,{buckets:{boundaries:n.buckets.boundaries,counts:s},count:o.count-n.count,sum:o.sum-n.sum,hasMinMax:!1,min:1/0,max:-1/0})},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.HISTOGRAM,dataPoints:n.map(function(i){var a=xF(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Te.GAUGE||e.type===Te.UP_DOWN_COUNTER||e.type===Te.OBSERVABLE_GAUGE||e.type===Te.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,buckets:l.buckets,count:l.count}}})}},r}();ke();var Pg=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Og=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},Lg=function(){function r(e,t,n,o){e===void 0&&(e=new _F),t===void 0&&(t=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=t,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(r.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"length",{get:function(){return this.backing.length===0||this.indexEnd===this.indexStart&&this.at(0)===0?0:this.indexEnd-this.indexStart+1},enumerable:!1,configurable:!0}),r.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(t,n){return e.at(n)})},r.prototype.at=function(e){var t=this.indexBase-this.indexStart;return e<t&&(e+=this.backing.length),e-=t,this.backing.countAt(e)},r.prototype.incrementBucket=function(e,t){this.backing.increment(e,t)},r.prototype.decrementBucket=function(e,t){this.backing.decrement(e,t)},r.prototype.trim=function(){for(var e=0;e<this.length;e++)if(this.at(e)!==0){this.indexStart+=e;break}else if(e===this.length-1){this.indexStart=this.indexEnd=this.indexBase=0;return}for(var e=this.length-1;e>=0;e--)if(this.at(e)!==0){this.indexEnd-=this.length-e-1;break}this._rotate()},r.prototype.downscale=function(e){this._rotate();for(var t=1+this.indexEnd-this.indexStart,n=1<<e,o=0,i=0,a=this.indexStart;a<=this.indexEnd;){var s=a%n;s<0&&(s+=n);for(var c=s;c<n&&o<t;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},r.prototype.clone=function(){return new r(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},r.prototype._rotate=function(){var e=this.indexBase-this.indexStart;e!==0&&(e>0?(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,e),this.backing.reverse(e,this.backing.length)):(this.backing.reverse(0,this.backing.length),this.backing.reverse(0,this.backing.length+e)),this.indexBase=this.indexStart)},r.prototype._relocateBucket=function(e,t){e!==t&&this.incrementBucket(e,this.backing.emptyBucket(t))},r}();var _F=function(){function r(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(r.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),r.prototype.countAt=function(e){return this._counts[e]},r.prototype.growTo=function(e,t,n){var o=new Array(e).fill(0);o.splice.apply(o,Og([n,this._counts.length-t],Pg(this._counts.slice(t)),!1)),o.splice.apply(o,Og([0,t],Pg(this._counts.slice(0,t)),!1)),this._counts=o},r.prototype.reverse=function(e,t){for(var n=Math.floor((e+t)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[t-o-1],this._counts[t-o-1]=i}},r.prototype.emptyBucket=function(e){var t=this._counts[e];return this._counts[e]=0,t},r.prototype.increment=function(e,t){this._counts[e]+=t},r.prototype.decrement=function(e,t){this._counts[e]>=t?this._counts[e]-=t:this._counts[e]=0},r.prototype.clone=function(){return new r(Og([],Pg(this._counts),!1))},r}();var jA=52,IF=2146435072,PF=1048575,Ng=1023,ou=-Ng+1,iu=Ng,Bs=Math.pow(2,-1022);function au(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&IF)>>20;return n-Ng}function su(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&PF)*Math.pow(2,32);return o+n}function zs(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function qA(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var OF=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),$n=function(r){OF(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var YA=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Bs)return this._minNormalLowerBoundaryIndex();var t=au(e),n=this._rightShift(su(e)-1,jA);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new $n("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new $n("overflow: "+e+" is > maximum lower boundary: "+n);return zs(1,e<<this._shift)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){var e=ou>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return iu>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var XA=function(){function r(e){this._scale=e,this._scaleFactor=zs(Math.LOG2E,e),this._inverseFactor=zs(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Bs)return this._minNormalLowerBoundaryIndex()-1;if(su(e)===0){var t=au(e);return(t<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},r.prototype.lowerBoundary=function(e){var t=this._maxNormalLowerBoundaryIndex();if(e>=t){if(e===t)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new $n("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Bs;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new $n("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(r.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),r.prototype._minNormalLowerBoundaryIndex=function(){return ou<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(iu+1<<this._scale)-1},r}();var JA=-10,QA=20,LF=Array.from({length:31},function(r,e){return e>10?new XA(e-10):new YA(e-10)});function Dg(r){if(r>QA||r<JA)throw new $n("expected scale >= "+JA+" && <= "+QA+", got: "+r);return LF[r+10]}var NF=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},lu=function(){function r(e,t){this.low=e,this.high=t}return r.combine=function(e,t){return new r(Math.min(e.low,t.low),Math.max(e.high,t.high))},r}(),DF=20,kF=160,kg=2,ZA=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=kF),n===void 0&&(n=!0),o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=Number.POSITIVE_INFINITY),c===void 0&&(c=Number.NEGATIVE_INFINITY),l===void 0&&(l=new Lg),u===void 0&&(u=new Lg),d===void 0&&(d=Dg(DF)),this.startTime=e,this._maxSize=t,this._recordMinMax=n,this._sum=o,this._count=i,this._zeroCount=a,this._min=s,this._max=c,this._positive=l,this._negative=u,this._mapping=d,this._maxSize<kg&&($.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+kg),this._maxSize=kg)}return r.prototype.record=function(e){this.updateByIncrement(e,1)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return{hasMinMax:this._recordMinMax,min:this.min,max:this.max,sum:this.sum,positive:{offset:this.positive.offset,bucketCounts:this.positive.counts()},negative:{offset:this.negative.offset,bucketCounts:this.negative.counts()},count:this.count,scale:this.scale,zeroCount:this.zeroCount}},Object.defineProperty(r.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),r.prototype.updateByIncrement=function(e,t){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=t,e===0){this._zeroCount+=t;return}this._sum+=e*t,e>0?this._updateBuckets(this._positive,e,t):this._updateBuckets(this._negative,-e,t)}},r.prototype.merge=function(e){this._count===0?(this._min=e.min,this._max=e.max):e.count!==0&&(e.min<this.min&&(this._min=e.min),e.max>this.max&&(this._max=e.max)),this.startTime=e.startTime,this._sum+=e.sum,this._count+=e.count,this._zeroCount+=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._mergeBuckets(this.positive,e,e.positive,t),this._mergeBuckets(this.negative,e,e.negative,t)},r.prototype.diff=function(e){this._min=1/0,this._max=-1/0,this._sum-=e.sum,this._count-=e.count,this._zeroCount-=e.zeroCount;var t=this._minScale(e);this._downscale(this.scale-t),this._diffBuckets(this.positive,e,e.positive,t),this._diffBuckets(this.negative,e,e.negative,t)},r.prototype.clone=function(){return new r(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},r.prototype._updateBuckets=function(e,t,n){var o=this._mapping.mapToIndex(t),i=!1,a=0,s=0;if(e.length===0?(e.indexStart=o,e.indexEnd=e.indexStart,e.indexBase=e.indexStart):o<e.indexStart&&e.indexEnd-o>=this._maxSize?(i=!0,s=o,a=e.indexEnd):o>e.indexEnd&&o-e.indexStart>=this._maxSize&&(i=!0,s=e.indexStart,a=o),i){var c=this._changeScale(a,s);this._downscale(c),o=this._mapping.mapToIndex(t)}this._incrementIndexBy(e,o,n)},r.prototype._incrementIndexBy=function(e,t,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=t),t<e.indexStart){var o=e.indexEnd-t;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=t}else if(t>e.indexEnd){var o=t-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=t}var i=t-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},r.prototype._grow=function(e,t){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=qA(t);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},r.prototype._changeScale=function(e,t){for(var n=0;e-t>=this._maxSize;)e>>=1,t>>=1,n++;return n},r.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var t=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=Dg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=lu.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=lu.combine(this._highLowAtScale(this.negative,this.scale,t),this._highLowAtScale(e.negative,e.scale,t));return Math.min(t-this._changeScale(n.high,n.low),t-this._changeScale(o.high,o.low))},r.prototype._highLowAtScale=function(e,t,n){if(e.length===0)return new lu(0,-1);var o=t-n;return new lu(e.indexStart>>o,e.indexEnd>>o)},r.prototype._mergeBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},r.prototype._diffBuckets=function(e,t,n,o){for(var i=n.offset,a=t.scale-o,s=0;s<n.length;s++){var c=i+s>>a,l=c-e.indexBase;l<0&&(l+=e.backing.length),e.decrementBucket(l,n.at(s))}e.trim()},r}();var Fg=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=fr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ZA(e,this._maxSize,this._recordMinMax)},r.prototype.merge=function(e,t){var n=t.clone();return n.merge(e),n},r.prototype.diff=function(e,t){var n=t.clone();return n.diff(e),n},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=NF(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Te.GAUGE||e.type===Te.UP_DOWN_COUNTER||e.type===Te.OBSERVABLE_GAUGE||e.type===Te.OBSERVABLE_UP_DOWN_COUNTER;return{attributes:s,startTime:c.startTime,endTime:o,value:{min:l.hasMinMax?l.min:void 0,max:l.hasMinMax?l.max:void 0,sum:u?void 0:l.sum,positive:{offset:l.positive.offset,bucketCounts:l.positive.bucketCounts},negative:{offset:l.negative.offset,bucketCounts:l.negative.bucketCounts},count:l.count,scale:l.scale,zeroCount:l.zeroCount}}})}},r}();ke();var FF=Km("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function eR(r){return r.setValue(FF,!0)}ke();function tR(){return function(r){$.error(UF(r))}}function UF(r){return typeof r=="string"?r:JSON.stringify(BF(r))}function BF(r){for(var e={},t=r;t!==null;)Object.getOwnPropertyNames(t).forEach(function(n){if(!e[n]){var o=t[n];o&&(e[n]=String(o))}}),t=Object.getPrototypeOf(t);return e}var zF=tR();function cu(r){try{zF(r)}catch{}}var rR="1.30.1";var GF="process.runtime.name";var HF="service.name";var VF="telemetry.sdk.name",WF="telemetry.sdk.language",jF="telemetry.sdk.version";var nR=GF;var oR=HF;var Gs=VF,Hs=WF,Vs=jF;var $F="nodejs";var iR=$F;var Yi,Oo=(Yi={},Yi[Gs]="opentelemetry",Yi[nR]="node",Yi[Hs]=iR,Yi[Vs]=rR,Yi);function Ws(r){r.unref()}var ZF=9,eU=6,tU=Math.pow(10,eU),sue=Math.pow(10,ZF);function Lo(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*tU);return[t,n]}function Xi(r){return r[0]*1e6+r[1]/1e3}var js;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(js||(js={}));ke();function aR(r,e){return new Promise(function(t){Hi.with(eR(Hi.active()),function(){r.export(e,function(n){t(n)})})})}var sR={_export:aR};var rU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},uu=function(){function r(e,t,n){t===void 0&&(t=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=t,this.sampleTime=n}return r.prototype.record=function(e){this._current=e,this.sampleTime=Lo(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Ug=function(){function r(){this.kind=fr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new uu(e)},r.prototype.merge=function(e,t){var n=Xi(t.sampleTime)>=Xi(e.sampleTime)?t:e;return new uu(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Xi(t.sampleTime)>=Xi(e.sampleTime)?t:e;return new uu(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.GAUGE,dataPoints:n.map(function(i){var a=rU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var nU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Ji=function(){function r(e,t,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=t,this._current=n,this.reset=o}return r.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var du=function(){function r(e){this.monotonic=e,this.kind=fr.SUM}return r.prototype.createAccumulation=function(e){return new Ji(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Ji(t.startTime,this.monotonic,o,t.reset):new Ji(e.startTime,this.monotonic,n+o)},r.prototype.diff=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return this.monotonic&&n>o?new Ji(t.startTime,this.monotonic,o,!0):new Ji(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Kr.SUM,dataPoints:n.map(function(i){var a=nU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var No=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Sr=function(){function r(){}return r.Drop=function(){return gR},r.Sum=function(){return hR},r.LastValue=function(){return fR},r.Histogram=function(){return SR},r.ExponentialHistogram=function(){return oU},r.Default=function(){return iU},r}();var lR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Ig,e}(Sr);var cR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case Te.COUNTER:case Te.OBSERVABLE_COUNTER:case Te.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new du(!0),e.NON_MONOTONIC_INSTANCE=new du(!1),e}(Sr);var uR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Ug,e}(Sr);var dR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new nu([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Sr);var $s=function(r){No(e,r);function e(t,n){n===void 0&&(n=!0);var o=r.call(this)||this;if(o._recordMinMax=n,t==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");t=t.concat(),t=t.sort(function(s,c){return s-c});var i=t.lastIndexOf(-1/0),a=t.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=t.slice(i+1,a),o}return e.prototype.createAggregator=function(t){return new nu(this._boundaries,this._recordMinMax)},e}(Sr);var pR=function(r){No(e,r);function e(t,n){t===void 0&&(t=160),n===void 0&&(n=!0);var o=r.call(this)||this;return o._maxSize=t,o._recordMinMax=n,o}return e.prototype.createAggregator=function(t){return new Fg(this._maxSize,this._recordMinMax)},e}(Sr);var mR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case Te.COUNTER:case Te.UP_DOWN_COUNTER:case Te.OBSERVABLE_COUNTER:case Te.OBSERVABLE_UP_DOWN_COUNTER:return hR;case Te.GAUGE:case Te.OBSERVABLE_GAUGE:return fR;case Te.HISTOGRAM:return t.advice.explicitBucketBoundaries?new $s(t.advice.explicitBucketBoundaries):SR}return $.warn("Unable to recognize instrument type: "+t.type),gR},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Sr);var gR=new lR,hR=new cR,fR=new uR,SR=new dR,oU=new pR,iU=new mR;var yR=function(r){return Sr.Default()},bR=function(r){return Ki.CUMULATIVE};var Bg=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},zg=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},ER=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},aU=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},TR=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:yR,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:bR,this._metricProducers=(o=e?.metricProducers)!==null&&o!==void 0?o:[],this._cardinalitySelector=e?.cardinalitySelector}return r.prototype.setMetricProducer=function(e){if(this._sdkMetricProducer)throw new Error("MetricReader can not be bound to a MeterProvider again.");this._sdkMetricProducer=e,this.onInitialized()},r.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},r.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},r.prototype.selectCardinalityLimit=function(e){return this._cardinalitySelector?this._cardinalitySelector(e):2e3},r.prototype.onInitialized=function(){},r.prototype.collect=function(e){return Bg(this,void 0,void 0,function(){var t,n,o,i,a,s;return zg(this,function(c){switch(c.label){case 0:if(this._sdkMetricProducer===void 0)throw new Error("MetricReader is not bound to a MetricProducer");if(this._shutdown)throw new Error("MetricReader is shutdown");return[4,Promise.all(aU([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],ER(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=ER.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(_g(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(_g(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Bg(this,void 0,void 0,function(){return zg(this,function(t){switch(t.label){case 0:return this._shutdown?($.error("Cannot call shutdown twice."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onShutdown()];case 1:return t.sent(),[3,4];case 2:return[4,jn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Bg(this,void 0,void 0,function(){return zg(this,function(t){switch(t.label){case 0:return this._shutdown?($.warn("Cannot forceFlush on already shutdown MetricReader."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onForceFlush()];case 1:return t.sent(),[2];case 2:return[4,jn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();ke();var sU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),pu=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},mu=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},lU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},cU=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},Gg=function(r){sU(e,r);function e(t){var n,o,i,a,s=r.call(this,{aggregationSelector:(n=t.exporter.selectAggregation)===null||n===void 0?void 0:n.bind(t.exporter),aggregationTemporalitySelector:(o=t.exporter.selectAggregationTemporality)===null||o===void 0?void 0:o.bind(t.exporter),metricProducers:t.metricProducers})||this;if(t.exportIntervalMillis!==void 0&&t.exportIntervalMillis<=0)throw Error("exportIntervalMillis must be greater than 0");if(t.exportTimeoutMillis!==void 0&&t.exportTimeoutMillis<=0)throw Error("exportTimeoutMillis must be greater than 0");if(t.exportTimeoutMillis!==void 0&&t.exportIntervalMillis!==void 0&&t.exportIntervalMillis<t.exportTimeoutMillis)throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis");return s._exportInterval=(i=t.exportIntervalMillis)!==null&&i!==void 0?i:6e4,s._exportTimeout=(a=t.exportTimeoutMillis)!==null&&a!==void 0?a:3e4,s._exporter=t.exporter,s}return e.prototype._runOnce=function(){return pu(this,void 0,void 0,function(){var t;return mu(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,jn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof Mg?($.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(cu(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return pu(this,void 0,void 0,function(){var o,i,a,s,c,l;return mu(this,function(u){switch(u.label){case 0:return[4,this.collect({timeoutMillis:this._exportTimeout})];case 1:if(o=u.sent(),i=o.resourceMetrics,a=o.errors,a.length>0&&(l=$).error.apply(l,cU(["PeriodicExportingMetricReader: metrics collection errors"],lU(a),!1)),!i.resource.asyncAttributesPending)return[3,5];u.label=2;case 2:return u.trys.push([2,4,,5]),[4,(n=(t=i.resource).waitForAsyncAttributes)===null||n===void 0?void 0:n.call(t)];case 3:return u.sent(),[3,5];case 4:return s=u.sent(),$.debug("Error while resolving async portion of resource: ",s),cu(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,sR._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==js.SUCCESS)throw new Error("PeriodicExportingMetricReader: metrics export failed (error "+c.error+")");return[2]}})})},e.prototype.onInitialized=function(){var t=this;this._interval=setInterval(function(){t._runOnce()},this._exportInterval),Ws(this._interval)},e.prototype.onForceFlush=function(){return pu(this,void 0,void 0,function(){return mu(this,function(t){switch(t.label){case 0:return[4,this._runOnce()];case 1:return t.sent(),[4,this._exporter.forceFlush()];case 2:return t.sent(),[2]}})})},e.prototype.onShutdown=function(){return pu(this,void 0,void 0,function(){return mu(this,function(t){switch(t.label){case 0:return this._interval&&clearInterval(this._interval),[4,this.onForceFlush()];case 1:return t.sent(),[4,this._exporter.shutdown()];case 2:return t.sent(),[2]}})})},e}(TR);ke();ke();function gu(){return"unknown_service:"+process.argv0}var qn=function(){return qn=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}return r},qn.apply(this,arguments)},uU=function(r,e,t,n){function o(i){return i instanceof t?i:new t(function(a){a(i)})}return new(t||(t=Promise))(function(i,a){function s(u){try{l(n.next(u))}catch(d){a(d)}}function c(u){try{l(n.throw(u))}catch(d){a(d)}}function l(u){u.done?i(u.value):o(u.value).then(s,c)}l((n=n.apply(r,e||[])).next())})},dU=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},pU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},hu=function(){function r(e,t){var n=this,o;this._attributes=e,this.asyncAttributesPending=t!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=t?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return $.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return r.empty=function(){return r.EMPTY},r.default=function(){var e;return new r((e={},e[oR]=gu(),e[Hs]=Oo[Hs],e[Gs]=Oo[Gs],e[Vs]=Oo[Vs],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&$.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),r.prototype.waitForAsyncAttributes=function(){return uU(this,void 0,void 0,function(){return dU(this,function(e){switch(e.label){case 0:return this.asyncAttributesPending?[4,this._asyncAttributesPromise]:[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})},r.prototype.merge=function(e){var t=this,n;if(!e)return this;var o=qn(qn({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new r(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=pU(a,2),l=c[0],u=c[1];return qn(qn(qn(qn({},t._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new r(o,i)},r.EMPTY=new r({}),r}();var vR=function(){function r(){this._registeredViews=[]}return r.prototype.addView=function(e){this._registeredViews.push(e)},r.prototype.findViews=function(e,t){var n=this,o=this._registeredViews.filter(function(i){return n._matchInstrument(i.instrumentSelector,e)&&n._matchMeter(i.meterSelector,t)});return o},r.prototype._matchInstrument=function(e,t){return(e.getType()===void 0||t.type===e.getType())&&e.getNameFilter().match(t.name)&&e.getUnitFilter().match(t.unit)},r.prototype._matchMeter=function(e,t){return e.getNameFilter().match(t.name)&&(t.version===void 0||e.getVersionFilter().match(t.version))&&(t.schemaUrl===void 0||e.getSchemaUrlFilter().match(t.schemaUrl))},r}();ke();var Do=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),fu=function(){function r(e,t){this._writableMetricStorage=e,this._descriptor=t}return r.prototype._record=function(e,t,n){if(t===void 0&&(t={}),n===void 0&&(n=Hi.active()),typeof e!="number"){$.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===Qt.INT&&!Number.isInteger(e)&&($.warn("INT value type cannot accept a floating-point value for "+this._descriptor.name+", ignoring the fractional digits."),e=Math.trunc(e),!Number.isInteger(e))||this._writableMetricStorage.record(e,t,n,Lo(Date.now()))},r}();var AR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){this._record(t,n,o)},e}(fu);var RR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){$.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(fu);var wR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){this._record(t,n,o)},e}(fu);var CR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){$.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(fu);var Su=function(){function r(e,t,n){this._observableRegistry=n,this._descriptor=e,this._metricStorages=t}return r.prototype.addCallback=function(e){this._observableRegistry.addCallback(e,this)},r.prototype.removeCallback=function(e){this._observableRegistry.removeCallback(e,this)},r}();var xR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);var MR=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);var _R=function(r){Do(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Su);function qs(r){return r instanceof Su}var IR=function(){function r(e){this._meterSharedState=e}return r.prototype.createGauge=function(e,t){var n=Yr(e,Te.GAUGE,t),o=this._meterSharedState.registerMetricStorage(n);return new wR(o,n)},r.prototype.createHistogram=function(e,t){var n=Yr(e,Te.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new CR(o,n)},r.prototype.createCounter=function(e,t){var n=Yr(e,Te.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new RR(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Yr(e,Te.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new AR(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Yr(e,Te.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new MR(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableCounter=function(e,t){var n=Yr(e,Te.OBSERVABLE_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new xR(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableUpDownCounter=function(e,t){var n=Yr(e,Te.OBSERVABLE_UP_DOWN_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new _R(n,o,this._meterSharedState.observableRegistry)},r.prototype.addBatchObservableCallback=function(e,t){this._meterSharedState.observableRegistry.addBatchCallback(e,t)},r.prototype.removeBatchObservableCallback=function(e,t){this._meterSharedState.observableRegistry.removeBatchCallback(e,t)},r}();var yu=function(){function r(e){this._instrumentDescriptor=e}return r.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},r.prototype.updateDescription=function(e){this._instrumentDescriptor=Yr(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},r}();var mU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),PR=function(r,e){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(l){return function(u){return c([l,u])}}function c(l){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,o&&(i=l[0]&2?o.return:l[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,l[1])).done)return i;switch(o=0,i&&(l=[l[0]&2,i.value]),l[0]){case 0:case 1:i=l;break;case 4:return t.label++,{value:l[1],done:!1};case 5:t.label++,o=l[1],l=[0];continue;case 7:l=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){t.label=l[1];break}if(l[0]===6&&t.label<i[1]){t.label=i[1],i=l;break}if(i&&t.label<i[2]){t.label=i[2],t.ops.push(l);break}i[2]&&t.ops.pop(),t.trys.pop();continue}l=e.call(r,t)}catch(u){l=[6,u],o=0}finally{n=i=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},gU=function(){function r(e){this._hash=e,this._valueMap=new Map,this._keyMap=new Map}return r.prototype.get=function(e,t){return t??(t=this._hash(e)),this._valueMap.get(t)},r.prototype.getOrDefault=function(e,t){var n=this._hash(e);if(this._valueMap.has(n))return this._valueMap.get(n);var o=t();return this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,o),o},r.prototype.set=function(e,t,n){n??(n=this._hash(e)),this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,t)},r.prototype.has=function(e,t){return t??(t=this._hash(e)),this._valueMap.has(t)},r.prototype.keys=function(){var e,t;return PR(this,function(n){switch(n.label){case 0:e=this._keyMap.entries(),t=e.next(),n.label=1;case 1:return t.done===!0?[3,3]:[4,[t.value[1],t.value[0]]];case 2:return n.sent(),t=e.next(),[3,1];case 3:return[2]}})},r.prototype.entries=function(){var e,t;return PR(this,function(n){switch(n.label){case 0:e=this._valueMap.entries(),t=e.next(),n.label=1;case 1:return t.done===!0?[3,3]:[4,[this._keyMap.get(t.value[0]),t.value[1],t.value[0]]];case 2:return n.sent(),t=e.next(),[3,1];case 3:return[2]}})},Object.defineProperty(r.prototype,"size",{get:function(){return this._valueMap.size},enumerable:!1,configurable:!0}),r}();var Ir=function(r){mU(e,r);function e(){return r.call(this,tu)||this}return e}(gU);var hU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},bu=function(){function r(e,t){this._aggregator=e,this._activeCollectionStorage=new Ir,this._cumulativeMemoStorage=new Ir,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(t??2e3)-1,this._overflowHashCode=tu(this._overflowAttributes)}return r.prototype.record=function(e,t,n,o){var i=this,a=this._activeCollectionStorage.get(t);if(!a){if(this._activeCollectionStorage.size>=this._cardinalityLimit){var s=this._activeCollectionStorage.getOrDefault(this._overflowAttributes,function(){return i._aggregator.createAccumulation(o)});s?.record(e);return}a=this._aggregator.createAccumulation(o),this._activeCollectionStorage.set(t,a)}a?.record(e)},r.prototype.batchCumulate=function(e,t){var n=this;Array.from(e.entries()).forEach(function(o){var i=hU(o,3),a=i[0],s=i[1],c=i[2],l=n._aggregator.createAccumulation(t);l?.record(s);var u=l;if(n._cumulativeMemoStorage.has(a,c)){var d=n._cumulativeMemoStorage.get(a,c);u=n._aggregator.diff(d,l)}else if(n._cumulativeMemoStorage.size>=n._cardinalityLimit&&(a=n._overflowAttributes,c=n._overflowHashCode,n._cumulativeMemoStorage.has(a,c))){var d=n._cumulativeMemoStorage.get(a,c);u=n._aggregator.diff(d,l)}if(n._activeCollectionStorage.has(a,c)){var m=n._activeCollectionStorage.get(a,c);u=n._aggregator.merge(m,u)}n._cumulativeMemoStorage.set(a,l,c),n._activeCollectionStorage.set(a,u,c)})},r.prototype.collect=function(){var e=this._activeCollectionStorage;return this._activeCollectionStorage=new Ir,e},r}();var Hg=function(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},OR=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Eu=function(){function r(e,t){var n=this;this._aggregator=e,this._unreportedAccumulations=new Map,this._reportHistory=new Map,t.forEach(function(o){n._unreportedAccumulations.set(o,[])})}return r.prototype.buildMetrics=function(e,t,n,o){this._stashAccumulations(n);var i=this._getMergedUnreportedAccumulations(e),a=i,s;if(this._reportHistory.has(e)){var c=this._reportHistory.get(e),l=c.collectionTime;s=c.aggregationTemporality,s===Ki.CUMULATIVE?a=r.merge(c.accumulations,i,this._aggregator):a=r.calibrateStartTime(c.accumulations,i,l)}else s=e.selectAggregationTemporality(t.type);this._reportHistory.set(e,{accumulations:a,collectionTime:o,aggregationTemporality:s});var u=fU(a);if(u.length!==0)return this._aggregator.toMetricData(t,s,u,o)},r.prototype._stashAccumulations=function(e){var t,n,o=this._unreportedAccumulations.keys();try{for(var i=Hg(o),a=i.next();!a.done;a=i.next()){var s=a.value,c=this._unreportedAccumulations.get(s);c===void 0&&(c=[],this._unreportedAccumulations.set(s,c)),c.push(e)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}},r.prototype._getMergedUnreportedAccumulations=function(e){var t,n,o=new Ir,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=Hg(i),s=a.next();!s.done;s=a.next()){var c=s.value;o=r.merge(o,c,this._aggregator)}}catch(l){t={error:l}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return o},r.merge=function(e,t,n){for(var o=e,i=t.entries(),a=i.next();a.done!==!0;){var s=OR(a.value,3),c=s[0],l=s[1],u=s[2];if(e.has(c,u)){var d=e.get(c,u),m=n.merge(d,l);o.set(c,m,u)}else o.set(c,l,u);a=i.next()}return o},r.calibrateStartTime=function(e,t,n){var o,i;try{for(var a=Hg(e.keys()),s=a.next();!s.done;s=a.next()){var c=OR(s.value,2),l=c[0],u=c[1],d=t.get(l,u);d?.setStartTime(n)}}catch(m){o={error:m}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return t},r}();function fU(r){return Array.from(r.entries())}var SU=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),yU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},LR=function(r){SU(e,r);function e(t,n,o,i,a){var s=r.call(this,t)||this;return s._attributesProcessor=o,s._aggregationCardinalityLimit=a,s._deltaMetricStorage=new bu(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new Eu(n,i),s}return e.prototype.record=function(t,n){var o=this,i=new Ir;Array.from(t.entries()).forEach(function(a){var s=yU(a,2),c=s[0],l=s[1];i.set(o._attributesProcessor.process(c),l)}),this._deltaMetricStorage.batchCumulate(i,n)},e.prototype.collect=function(t,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(t,this._instrumentDescriptor,o,n)},e}(yu);ke();function Vg(r,e){var t="";return r.unit!==e.unit&&(t+=" - Unit '"+r.unit+"' does not match '"+e.unit+`'
28
28
  `),r.type!==e.type&&(t+=" - Type '"+r.type+"' does not match '"+e.type+`'
29
29
  `),r.valueType!==e.valueType&&(t+=" - Value Type '"+r.valueType+"' does not match '"+e.valueType+`'
30
30
  `),r.description!==e.description&&(t+=" - Description '"+r.description+"' does not match '"+e.description+`'
@@ -4358,14 +4358,14 @@ Available pages:${JSON.stringify(n.map(i=>i.url))}`);if(!Bo(o.url,this.logger)){
4358
4358
  `),tokenLength:d}),u=[],d=0,m=p.length?[p[p.length-1].id]:[],g=!1);let h=c[l],f=Pr(h);d+=f,h.length>a&&(h=h.slice(0,a));let w=Array.from(h.matchAll(Wx)).map(re=>re&&re.length>=3?{tagName:re[1],id:re[2]}:void 0).filter(re=>!!re),R=Array.from(h.matchAll(IG)).map(re=>re&&(re[2]||re[4])).filter(re=>!!re);R.reverse();let O=h.replace(/ id="[0-9]+"/g,"");u.push(O);for(let re of w)m.push(re.id),p.push(re);for(let re of R){let B=p[p.length-1];B&&B.tagName===re&&p.pop()}let v=p.some(re=>OG.includes(re.tagName)),M=c[l+1]??"",G=Pr(M),W=Array.from(M.matchAll(Wx)).map(re=>re&&re.length>2?re[1]:void 0).filter(re=>!!re),K=W.some(re=>qx.includes(re)),ve=W.some(re=>PG.includes(re));d+G>=i&&(g=!0),d>=n&&(K&&!v||R.some(re=>LG.includes(re)))&&(g=!0),d>=o&&ve&&!v&&(g=!0),l++}return u.length&&s.push({ids:m,content:u.join(`
4359
4359
  `),tokenLength:d}),s.forEach((h,f)=>{let b=h.ids[0],T=h.ids[h.ids.length-1];r.debug({tokenLength:h.tokenLength,minId:b,maxId:T},`Chunk for page filtering (index ${f+1}/${s.length})`)}),{chunks:s}}var kG=75e4,id=3e5;async function Wo(r){let{options:e,fixtures:t,screenshot:n}=r,{aiPageFiltering:o}=e,{logger:i,generator:a,orgId:s,signal:c}=t,l=r.tree,u=r.serializedTree,d=Pr(u);if(d>kG)try{let m=od({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await UG({...r,tokenLimit:id-1e4,chunks:m.chunks}),u=l.serialize();let p=Pr(u);i.info({oldTokens:d,newTokens:p},"Filtered page using keywords"),d=p}catch(m){i.warn({err:m},"Error filtering page using keyword matching, using naive truncation"),l=l.pruneToSerializedCharLimit(id*Kn),u=l.serialize();let p=Pr(u);i.info({oldTokens:d,newTokens:p},"Filtered page using naive truncation"),d=p}if(d>id)try{if(o){let m=od({serializedTree:u,options:$x,logger:i}),p=DG();l=await z(FG({...r,chunks:m.chunks,callId:p}),{milliseconds:12e3,signal:c}),u=l.serialize();let g=Pr(u);i.info({oldTokens:d,newTokens:g,langfuseCallId:p},"Filtered page using AI chunk ranking"),d=g}else{let m=od({serializedTree:u,options:jx,logger:i});l=await z(BG({...r,chunkResult:m,tokenLimit:4e4}),{milliseconds:12e3,signal:c}),u=l.serialize();let p=Pr(u);i.info({oldTokens:d,newTokens:p},"Filtered page using RAG"),d=p}}catch(m){i.warn({err:m},"Error filtering page using RAG/AI, using naive truncation"),l=l.pruneToSerializedCharLimit(id*Kn),u=l.serialize(),i.info("Filtered page using naive truncation")}return u}async function FG({type:r,callId:e,chunks:t,description:n,fixtures:o,tree:i}){let{generator:a,signal:s,logger:c}=o,l=await a.rankChunksWithAi({chunks:t,description:n,type:r,softTokenLimit:4e4,hardTokenLimit:8e4,callId:e},{abortSignal:s,logger:c,loggerTags:Se(c)}),u=[];return t.forEach((m,p)=>{l.indices.includes(p)&&(u=u.concat(m.ids))}),i.pruneUsingRelevantIds(new Set(u))}async function UG(r){let{description:e,fixtures:t,tree:n}=r,{generator:o,logger:i,signal:a}=t;if(!e.trim())throw new Error("Empty description passed to page filtering");let s=await o.getExtractedKeywords({goal:e},{logger:i,loggerTags:Se(i),abortSignal:a});i.info({keywordsResult:s},"Got keywords for page filtering");for(let c of s.keywords){let l=r.chunks.filter(p=>p.content.toLowerCase().includes(c.toLowerCase()));if(!l.length||l.reduce((p,g)=>p+g.tokenLength,0)>r.tokenLimit&&l.length>1)continue;let d=l.flatMap(p=>p.ids);return n.pruneUsingRelevantIds(new Set(d))}throw new Error("No keywords were unique enough for page filtering")}async function BG(r){let{description:e,fixtures:t,chunkResult:n,tokenLimit:o,tree:i}=r,{generator:a,logger:s,signal:c}=t,l=await a.rankChunksWithRag({description:e,chunks:n.chunks,tokenLimit:o},{abortSignal:c,logger:s,loggerTags:Se(s)});if(l.ids.length===0)throw new Error("RAG returned no important ids");return i.pruneUsingRelevantIds(new Set(l.ids.map(d=>`${d}`)))}async function Kh(r,e){if(!r.description)throw new E("UserConfigurationError","Cannot locate element with empty description");return Tr({action:async()=>zG(r,e),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:e.browser,logger:r.logger})}async function zG(r,e){let{disableCache:t,testContext:n,filterByViewport:o,skipWait:i,source:a,memory:s,aiPageFiltering:c,logger:l,allowNotActionableNodesOverride:u,skipSavingVisualAttributes:d}=r,{ctx:m,orgId:p,browser:g,localCodeEvalTools:h,generator:f,abortSignal:b}=e,T=r.description,w=r.useMemory&&!t;n&&(T=await Xs({orgId:p,s:T,context:n,localTools:h,signal:b,logger:l})),a&&(T=HG(T,a));let{serializedTree:x,tree:R}=await rn(g,{allowNotActionableNodesOverride:u,filterByViewport:o,abortSignal:b,skipWait:i,logger:l}),O,v=Date.now(),M;for(;!O&&Date.now()-v<3e3;){b.throwIfAborted();try{O=await g.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(Je){M=Je}}if(!O)throw new E("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${M?.message}`);let G=x,H=!1,K=`data:image/jpeg;base64,${O.toString("base64")}`;G=await Wo({type:"locator",description:T,screenshot:K,serializedTree:x,options:{aiPageFiltering:c},tree:R,fixtures:{generator:f,signal:b,logger:l,orgId:p}}),G!==x&&(H=!0);let ve=await f.getElementLocation({browserState:G,goal:T,screenshot:K,source:a,memory:w?s:void 0},{disableCache:t,abortSignal:b,loggerTags:Se(l),useMemory:w});if(l.debug({usedRag:H,result:ve},"Got locator result"),!(ve.id>0))throw new Pn(`Could not find any relevant element: ${ve.thoughts}`,ve.updatedMemory?{type:"GCS_TRACES",traces:ve.updatedMemory}:void 0);let{resolution:B,target:ce,frameConfig:fe}=await g.createTargetFromA11yId({id:ve.id,requirements:ve.requirements,additionalElements:ve.additionalElements,description:T,targetSource:"AI",logger:l,skipSavingVisualAttributes:d});if(B.a11yNode?.properties?.hidden&&B.a11yNode?.properties?.hidden!=="false")throw new E("ActionFailureError",`Momentic's AI found a relevant element to interact with, but it is explicitly marked with an 'aria-hidden' attribute. Please remove this attribute or adjust the element description to locate a different element. Element chosen: ${B.displayString}`);return w&&(ve.updatedMemory?ce.memory={type:"GCS_TRACES",traces:ve.updatedMemory}:s&&(ce.memory=s)),{thoughts:ve.thoughts,target:ce,resolution:B,frameConfig:fe,screenshot:K}}var GG=["Element exactly matching the description below. Interpret the description narrowly and do not assume there are any typos or errors. Err on the side of returning -1 unless there is a perfect match. Description:","Element closely matching the description below. Interpret the description narrowly and do not return elements that are merely loosely related. Description:","Element matching the description below. This element is being located as part of a negative check step (i.e. we are trying to verify the element does not exist). Therefore, interpret the description narrowly, do not assume there are typos, and err on the side of returning -1 unless there is a perfect match. Description:"],Kx="<select> element:",Yx="text input or contenteditable element:",Xx="Element matching the description below. It is possible the element is hidden or doesn't exist. Interpret the description narrowly and do not assume there are typos. Return -1 unless there is an straightforward match. Description:",Jx="Element matching the description below. This element is being located as part of a check step (i.e. we are trying to verify certain properties about the element). Interpret the description narrowly and do not return elements that are merely loosely related. Description:",qh=[Kx,Yx,Xx,Jx,...GG];function Qx(r,e){if(r===e)return!0;for(let t of qh){if(!r.startsWith(t))continue;let n=r.slice(t.length).trim();if(qh.some(o=>e.startsWith(o)&&e.slice(o.length).trim()===n)||n===e.trim())return!0}return!!qh.some(t=>e.startsWith(t)&&e.slice(t.length).trim()===r.trim())}function HG(r,e){if(!r||!e)return r;switch(e){case"SELECT_OPTION":return`${Kx} ${r}`;case"TYPE":return`${Yx} ${r}`;case"NEGATED_ELEMENT_VISIBLE_CHECK":return`${Xx}
4360
4360
  ${r}`;case"ELEMENT_CHECK":return`${Jx}
4361
- ${r}`;default:return r}}var VG=15;async function ad({command:r,aiPageFiltering:e,logger:t,fixtures:n,useMemory:o,maxRetries:i=VG}){if(!r.assertion.trim())throw new E("ActionFailureError","Assertion command is missing the assertion content");let a=Kp.optional().catch(void 0).parse(r.source);r.source&&!a&&t.warn(`Invalid source ${r.source} for AI assertion, ignoring...`);let{browser:s}=n,c=r.timeout?r.timeout*1e3:s.smartWaitingTimeout,l=zu(c),u=0,d=Date.now(),m,p,g;try{await Tr({action:()=>s.clearHighlights(),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:s,logger:t})}catch(f){t.warn({err:f},"Failed to clear highlights before AI check, continuing...")}let h;for(;u<i&&(!h||h-d<c);){n.abortSignal.throwIfAborted(),u!==0&&await q(l,n.abortSignal),h=Date.now();let f=!1;try{if(m=await Tr({action:async()=>{let T=await Zx(s,t,n.abortSignal);return p&&p.serializedTree===T.serializedTree&&p.screenshotBuff.equals(T.screenshotBuff)?(f=!0,m):(p=T,eM({command:r,state:T,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:t,source:a}))},frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s}),m?.success){m?.updatedMemory&&Js(r,m.updatedMemory,t);break}else throw m?.thoughts?new E("AssertionFailureError",m.thoughts):new E("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(b){n.abortSignal.throwIfAborted(),g=b instanceof Error?b:new Error(`${b}`),f?t.info(`AI check attempt ${u} failed (re-used previous result)`):t.info({err:b},`AI check assert attempt ${u} failed, retrying...`)}finally{u++}}if(!m?.success)try{m=await Tr({action:async()=>eM({command:r,state:await Zx(s,t,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:u,aiPageFiltering:e,logger:t}),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s})}catch(f){n.abortSignal.throwIfAborted(),g=f instanceof Error?f:new Error(`${f}`)}finally{u++}if(m?.updatedMemory&&Js(r,m.updatedMemory,t),!m?.success){let f=`AI check still failing after ${u} attempts.`;throw g&&(f+=` Latest result: ${g.message}`),new E("AssertionFailureError",f)}return{...m,succeedImmediately:!1,urlAfterCommand:s.url()}}async function Zx(r,e,t){let[n,o]=await Promise.all([rn(r,{abortSignal:t,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),r.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function eM({command:r,state:e,fixtures:t,useConsensus:n,useMemory:o,highlightElementsOnFailure:i,aiPageFiltering:a,attemptNumber:s,source:c,logger:l}){let{browser:u,generator:d,abortSignal:m}=t,p={type:"ASSERTION"},{serializedTree:g,tree:h}=e,f=e.screenshotBuff,b=f.toString("base64"),T=u.url(),w=r.contextChoice??"MULTIMODAL",x=g;w!=="VISION_ONLY"&&(x=await Wo({type:"assertion",serializedTree:g,tree:h,description:r.assertion,screenshot:b,options:{aiPageFiltering:a},fixtures:{generator:d,signal:m,logger:l,orgId:t.orgId}}),x!==g&&(p.ragUsed=!0),p.pageState=x);let R={goal:r.assertion,url:T,memory:o?r.cache?.memory:void 0,browserState:x,screenshot:b,contextChoice:w,source:c},v=await(w==="VISION_ONLY"?(M,G)=>d.getVisualAssertionResult(M,G):(M,G)=>d.getAssertionResult(M,G))(R,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!r.disableCache,abortSignal:m,logger:l,loggerTags:Se(l)});return(v.result||i)&&v.relevantElements&&(p.relevantElementsSerialized=v.relevantElements.map(M=>u.getSerializedFormFromA11yId(M)).filter(M=>!!M),await WG(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function WG(r,e,t){let n=Date.now();for(let o of r){if(Date.now()-n>2e3){t.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await z(e.highlightA11yId(o),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}})}catch(i){t.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}var jG=1e5,sd=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function tM(r,e){let{logger:t}=r,{abortSignal:n,browser:o}=e,i=Date.now();try{await $G(i,r,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof sd?t.warn("Skipping AI smart waiting due to excessive page size - falling back to naive waiting"):t.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=o.smartWaitingTimeout-(Date.now()-i);s>0&&await q(s,n)}finally{t.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function $G(r,e,t){let{abortSignal:n,browser:o}=t;if(o.smartWaitingTimeout<3e3){await q(o.smartWaitingTimeout,n);return}if(!e.description)throw new E("UserConfigurationError","Cannot locate element with empty description");await z(qG(r,e,t),{milliseconds:o.smartWaitingTimeout})}async function qG(r,e,t){let{logger:n,iframeUrl:o}=e,{browser:i}=t;for(;Date.now()-r<i.smartWaitingTimeout;)if(await Tr({action:async()=>KG(e,t),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function KG(r,e){let{testContext:t,logger:n,filterByViewport:o,allowNotActionableNodesOverride:i}=r,{browser:a,abortSignal:s,localCodeEvalTools:c,orgId:l,generator:u}=e,d=r.description;t&&(d=await Xs({orgId:l,s:d,context:t,localTools:c,signal:s,logger:n}));let{serializedTree:m}=await rn(a,{allowNotActionableNodesOverride:i,filterByViewport:o,abortSignal:s,logger:n});if(Pr(m)>jG)throw new sd;s.throwIfAborted();let g;try{g=await a.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(T){throw new E("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${T instanceof Error?T.message:T}`)}let f=`data:image/jpeg;base64,${g.toString("base64")}`;s.throwIfAborted();let b=await u.getSmartWaitingDecision({browserState:m,description:d,screenshot:f},{abortSignal:s,loggerTags:Se(n)});return n.debug({result:b},"Got smart waiting result"),b.isPageReady}import{cloneDeep as nM}from"lodash-es";async function oM(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=()=>nS(e.cache)?e.cache:void 0,a=i(),s=nM(a),c=(h=!1)=>{if(a=i(),!!a)if(h){let f=xw(s,a);a.target=f.target,a.updatedAt=f.updatedAt}else{if(!s){a=void 0;return}a.target=s.target,a.updatedAt=s.updatedAt}},l=Date.now(),u=0,d,m=500,p=!1;for(;u<2||Date.now()-l<t;){u++,u>1&&await q(m,o),o?.throwIfAborted(),a=i();let{result:h,elementWasFound:f}=await rM({cacheToUse:a,params:r});if(d=h,p=f,h.success)break;c(),m=Math.min(m*2,1e4)}if(!d)throw new E("InternalPlatformError",`Failed to evaluate manual element assertion in ${t}ms.`);if(o?.throwIfAborted(),!d.success&&a?.target&&Cl(a.target)){let h=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await rM({cacheToUse:h,params:r});d=f,d.success||c(!0)}let g=i();return d.success&&g?.target&&!p&&(g.target=th(g.target),g.updatedAt=new Date),d}async function rM({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!Mn(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=Lu(t.assertion),l,u=!1,d=nM(r);try{let{elementInteractedDisplayString:m,result:p,thoughts:g}=await a({ctx:o.ctx,tracer:i,command:t,target:t.target,cache:d?.target,action:async h=>YG(h.locator,e),options:{...t,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:qa(t),targetName:"target"}});return l={success:p.success,data:p.data,err:p.err,elementInteractedDisplayString:m,thoughts:g},u=!0,p.success||(s.warn({aiThoughts:g,elementString:m,err:p.err},"Element check found an element but failed"),l={...p,thoughts:g}),{result:l,elementWasFound:u}}catch(m){if(c)return l={success:!0,thoughts:`The element described does not exist on the page: ${m.message}`,err:void 0,data:void 0},{result:l,elementWasFound:u};if(!(m instanceof E)||m.reason!="ActionFailureError")throw m;return l={success:!1,err:m,data:void 0,thoughts:void 0},s.warn({err:m},"Element check did not find an element and failed"),{result:l,elementWasFound:u}}}async function YG(r,{command:e,fixtures:t}){return await t.browser.highlight(r),await XG(r,e.assertion)}async function XG(r,e){let t=!0,n,o;switch(e.type){case"ELEMENT_CONTENT":{let a=await r.textContent()??"";if(o={elementTextContent:Et(a,500,!0)},!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,n=new E("AssertionFailureError",`The content ${s} '${e.value}': ${a}`)}break}case"ELEMENT_ATTRIBUTE":{o={elementOuterHtml:Et(await r.evaluate(s=>s.cloneNode(!1).outerHTML),500,!0)};let a;try{a=await r.getAttribute(e.attr,{timeout:3e3})??""}catch(s){n=new E("AssertionFailureError",`The element does not have an attribute named ${e.attr}: ${s}`),t=!1;break}if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,e.operation==="EXISTS"?n=new E("AssertionFailureError",`The attribute ${e.attr} ${s}`):n=new E("AssertionFailureError",`The attribute ${e.attr} ${s} '${e.value}': ${a}`)}break}case"ELEMENT_EXISTENCE":{switch(e.condition){case"VISIBLE":{t=await r.evaluate(async(s,c)=>{let l=Date.now();for(;Date.now()-l<c;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return!0}return!1},kt*1e3);break}case"EDITABLE":{t=await r.isEditable({timeout:kt*1e3});break}case"EXISTS":{t=!0;break}case"ENABLED":{t=await r.isEnabled({timeout:kt*1e3});break}case"FOCUSED":{t=await r.evaluate(s=>s===document.activeElement);break}default:return(s=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e.condition)}if(t=e.negated?!t:t,!t){let a=yr(e);n=new E("AssertionFailureError",`The element ${a}`)}break}case"ELEMENT_NAME":{let a=await r.evaluate(s=>s.tagName);if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!0})){let s=yr(e);t=!1,n=new E("AssertionFailureError",`The element tag name ${s} '${e.value}': ${a}`)}break}case"ELEMENT_STYLE":{let a=await r.evaluate((s,c)=>window.getComputedStyle(s).getPropertyValue(c),e.property);if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,e.operation==="EXISTS"?n=new E("AssertionFailureError",`The style property ${e.property} ${s}`):n=new E("AssertionFailureError",`The style property ${e.property} ${s} '${e.value}': ${a}`)}break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}return{thoughts:void 0,success:t,data:o,err:n}}function iM(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as JG}from"jimp";async function il(r,e){let t=await r.screenshot(e),n=await JG.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as aM}from"jimp";import Yh from"jpeg-js";import QG from"pixelmatch";async function sM({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!Mn(t.target))throw new Error("Visual Diff with x/y is not supported yet");await o.waitForDOMStability({logger:a});let c={clearHighlights:!0,hideCaret:!0},l;t.target?.elementDescriptor?l=(await i({ctx:r,tracer:e,command:t,target:t.target,cache:t.cache?.target,action:async W=>il(o,{locator:W.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await il(o,c);let u=await s.prepareGoldenScreenshotForComparison(a,t,l);if((l.height!==u.height||l.width!==u.width)&&a.warn({currHeight:l.height,currWidth:l.width,savedHeight:u.height,savedWidth:u.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(l.height-u.height)>10||Math.abs(l.width-u.width)>10){let H=`${l.width}x${l.height}`,W=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${H}) does not match saved screenshot dimensions (${W}) - did you change the size of the target or the viewport?`,beforeScreenshotOverride:u.buffer,afterScreenshotOverride:l.buffer,succeedImmediately:!1,urlAfterCommand:o.url()}}let d=await aM.fromBuffer(l.buffer),m={width:l.width,height:l.height},p=await aM.fromBuffer(u.buffer),g={width:u.width,height:u.height},h,f=m.width*m.height,b=g.width*g.height,T=Math.abs(m.height-g.height),w=Math.abs(m.width-g.width);if(f>b){let H=d.cover({w:g.width,h:g.height});l.buffer=await H.getBuffer("image/jpeg"),h="current",l.width=g.width,l.height=g.height}else if(b>f){let H=p.cover({w:m.width,h:m.height});u.buffer=await H.getBuffer("image/jpeg"),h="saved"}let x={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},R=t.threshold??.1,v=QG(Yh.decode(u.buffer).data,Yh.decode(l.buffer).data,x.data,l.width,l.height,{threshold:R,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,M=v>R*100,G=`Visual diff of ${v.toFixed(2)}% detected, which is ${M?"over":"under"} the threshold of ${R*100}%.`;if(h&&(G+=` The ${h} screenshot was cropped since it was taller by ${T} pixels and wider by ${w} pixels.`),M)throw new E("ActionFailureError",G);return{fail:M,thoughts:G,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:Yh.encode(x,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var ZG=3e4;function eH(r){if(!r.body)return{};switch(r.body.type){case"json":return{content:r.body.content,contentType:"application/json"};case"form-urlencoded":{let e=new URLSearchParams;return Object.entries(r.body.content).forEach(([t,n])=>{e.append(t,n)}),{content:e.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function ld({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??ZG/1e3,i=Object.fromEntries(Object.entries(r.headers||{}).filter(([g,h])=>g&&h)),a=new URLSearchParams;Object.entries(r.params||{}).filter(([g,h])=>g&&h).forEach(([g,h])=>{a.append(g,h)});let s=a.toString(),c;if(ea(r.url)&&(c=r.url),t&&ta(r.url,t)&&(c=new URL(r.url,t).toString()),!c)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=c;e.info({url:l,searchParams:s,headers:i,body:r.body,method:r.method},"Making HTTP request");let d=await z((async()=>{let g=s?`${l}?${s}`:l;try{let h=eH(r),f=new Headers(i);return h.contentType&&!f.has("Content-Type")&&f.set("Content-Type",h.contentType),await n(g,{headers:f,method:r.method,body:h.content})}catch(h){throw e.error({err:h},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${h}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new E("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!d.ok){let g;try{g=await d.text()}catch(h){g=`Failed to read response body: ${h}`}throw new E("ActionFailureError",`Fetch request failed with status ${d.status}: ${g}`)}let m={};d.headers.forEach((g,h)=>{m[h]=g});let p={status:d.status,headers:m,request:{url:d.url,method:r.method,headers:i}};if(r.body?.type==="json"&&r.body.content)try{p.request.json=JSON.parse(r.body.content)}catch{}if(d.headers.get("content-type")?.includes("json"))try{p.json=await d.json()}catch{}else d.headers.get("content-type")?.includes("text")&&(p.text=await d.text());return p}var tH=5e3;async function cM({timeout:r=kt,...e}){let t=Date.now(),n=r*1e3,o=n+1e4,i,a=0,s=500;for(;a-t<n;){if(Date.now()-t>o){e.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}e.signal?.throwIfAborted();let c=Date.now();i=await cd(e),a=Date.now();let l=a-c;if(l>1e3&&e.logger.warn({pageAssertDuration:l},"Page assertion took longer than expected"),!i.success)await q(s,e.signal),s=Math.min(Math.floor(s*1.5),tH);else return i}return i=await cd(e),i}async function cd({assertion:r,browser:e,autoExpandIframes:t}){switch(r.type){case"CONTENT":case"CONTENT":{let o,i=!1,a;try{let s;if(t){let c=await e.evaluateFunctionInAllFrames(lM,{value:r.value,negated:!!r.negated,returnHtml:!1});i=r.negated?c.every(l=>l.evaluation):c.some(l=>l.evaluation),s=c.find(l=>l.pageHtml)?.pageHtml}else({evaluation:i,pageHtml:s}=await e.evaluateFunctionInPage(lM,{value:r.value,negated:!!r.negated,returnHtml:!0},"checking page content"));if(!i){let c=r.negated?Sn.CONTAINS:yn.CONTAINS;a=new E("AssertionFailureError",`The page ${c} '${r.value}'.`),o=s}}catch(s){a=new E("AssertionFailureError",`Failed to evaluate page content assertion: ${s instanceof Error?s.message:`${s}`}`)}return{success:i,err:a,data:i||!o?void 0:{pageContent:o}}}default:return(o=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function lM({value:r,negated:e,returnHtml:t}){let n=document.documentElement.outerHTML,o=n.includes(r)===!e;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:o,pageHtml:!o&&t?n:void 0}}var rH=3e4;async function uM({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??rH/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(ea(r.url)&&(s=r.url),t&&ta(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=await z((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:r.query,variables:r.variables?JSON.parse(r.variables):void 0}),signal:i.signal})}catch(d){e.error({err:d},"Failed to make HTTP request")}})(),{milliseconds:o*1e3});if(!l)throw new E("ActionFailureError",`GraphQL request timed out after ${o} seconds`);if(!l.ok){let d,m=await l.text();try{d=JSON.parse(m)}catch{throw new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${m}`)}let u={};return l.headers.forEach((d,m)=>{u[m]=d}),{status:l.status,headers:u,json:await l.json()}}var ud=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:e,generator:t,logger:n,storage:o,orgId:i,localCodeEvalTools:a,uploadedFileStorage:s,visualDiffScreenshotStorage:c,options:l}){this.orgId=i,this.options=l,this.browser=e,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=o,this.uploadedFileStorage=s,this.visualDiffScreenshotStorage=c,this.localCodeEvalTools=a,this.generator=t,this.logger=n}setOpen(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal)}setClosed(){this.executeAbortController.abort()}throwIfClosed(){this.executeAbortController.signal.throwIfAborted()}get closed(){return this.executeAbortController.signal.aborted}async evaluateAiAction({goal:e,startingScreenshot:t,history:n,disableCache:o,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[c,l]=await Promise.all([rn(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:s}),this.browser.screenshot({retries:1,clearHighlights:!0})]),u=`data:image/jpeg;base64,${l.toString("base64")}`,d=await Wo({type:"ai-action",description:e,screenshot:u,serializedTree:c.serializedTree,tree:c.tree,options:{aiPageFiltering:!!this.options?.aiPageFiltering},fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:t,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:{...Se(s)},langfuseSessionId:i})}async promptToCommand({goal:e,startingScreenshot:t,history:n,actionHint:o,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let c=this.browser.url(),[l,u]=await Promise.all([rn(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:a}),this.browser.screenshot({retries:1,clearHighlights:!0})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Wo({type:"ai-action",description:e,screenshot:d,serializedTree:l.serializedTree,tree:l.tree,options:{aiPageFiltering:!!this.options?.aiPageFiltering},fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:c,browserState:m,startingScreenshot:t,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Se(a)},langfuseSessionId:s})}catch(g){throw new E("InternalWebAgentError",`Error generating command: ${g instanceof Error?g.message:g}`,{errOptions:{cause:g}})}}async getBrowserState(e){return rn(this.browser,e)}async locateElement(e){return await Kh({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,t){return Tr({action:async()=>{let n=await this.browser.resolveHardcodedCssSelector({ctx:null,selector:e,timeoutMs:2e3,logger:this.logger});return{thoughts:"Located element with selector",target:{id:-1,selector:e,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:n}},frameConfig:t?{type:"url",url:t}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(e){return{ctx:e??null,browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,localCodeEvalTools:this.localCodeEvalTools,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??(this.orgId==="org_01HMSCJQBCCG51M2ZF65YC5B8W"||this.orgId==="org_01HMJTX4GT1KG94KZRCT8MZ6YB")}async wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:o,descriptions:i,caches:a,action:s,options:c,retriesWithAI:l=1}){let u=[];for(let d=0;d<i.length;d++){let m=i[d],p=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:m,cache:a[d],action:async g=>g,options:{...c,targetName:o[d]}});u.push(p)}try{let d=await s(...u.map(g=>g.result)),m=g=>g==="fromTarget"?"From Target":g==="toTarget"?"To Target":"Target",p=u.map((g,h)=>g.thoughts?`${m(o[h])}: ${g.thoughts}`:void 0).filter(g=>!!g).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(g=>g.elementInteractedDisplayString),thoughts:p}}catch(d){if(this.throwIfClosed(),l>0)return this.logger.warn({err:d},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:o,descriptions:i,caches:i.map(()=>{}),action:s,options:c,retriesWithAI:l-1});throw new E("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapElementTargetingCommand(e){let t=this.logger.child({commandId:e.command.id}),n;for(let o=0;o<2;o++)try{return await Tr({action:()=>this.wrapElementTargetingCommandHelper({...e,originalCache:e.originalCache??e.cache}),frameConfig:e.options.iframeUrl?{type:"url",url:e.options.iframeUrl}:void 0,browser:this.browser,logger:t})}catch(i){if(n=i,this.browser.userBrowserSettings.visualActions&&Ep(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(Ap(i)||Tp(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(Rp(i)){t.warn({err:i},"Invalid backend node id error, retrying element targeting command");continue}if(i instanceof zr&&i.retryableWithAI){t.warn({err:i},"Element cache disqualification error, retrying element targeting command");continue}throw i}throw n instanceof E?n:new E("ActionFailureError",n?.message??"An unknown error occurred during element targeting")}async wrapHardcodedCssTargetingCommandHelper({ctx:e,target:t,action:n,options:o,command:i}){let a=this.logger.child({commandId:i.id}),{targetName:s}=o;if(t.type!=="description")throw new E("ActionFailureError","Cannot use selector with non-description target");let c,l=Date.now(),u=Date.now();for(;Date.now()-u<this.browser.smartWaitingTimeout;){l=Date.now();try{let d=await this.browser.resolveHardcodedCssSelector({ctx:e,selector:t.elementDescriptor,targetName:s,logger:a});return{result:await n({locator:d.locator}),elementInteractedDisplayString:d.displayString}}catch(d){if(d.name==="AbortError")throw d;c=d,a.warn({err:d},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await q(500)}}throw c}async wrapElementTargetingCommandHelper(e){let{ctx:t,tracer:n,target:o,originalCache:i,action:a,options:s,command:c}=e,{disableCache:l,useSelector:u,targetName:d,targetHealingInProgress:m,source:p}=s,g=this.logger.child({commandId:c.id}),h=this.shouldUseMemory(),f=s.retriesWithAI??1,b=!1,T=dM(e.cache);if((!T||l)&&!ap(o))throw new E("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(e);l&&(g.info("Cache explicitly disabled for this step"),b=!0,T=void 0),T&&this.browser.userBrowserSettings.disableSecondaryCacheResolution&&T.targetSource==="HEURISTIC_HEALED"&&(b=!0,T=void 0),T?.inputDescription&&!Qx(o.elementDescriptor,T.inputDescription)&&(g.warn({old:T.inputDescription,new:o.elementDescriptor},"Target cache was generated with a different description, clearing it automatically"),b=!0,T=void 0);let w=R=>!!R&&Cl(R),x=!0;if(!w(T)){x=!1,g.info({description:o.elementDescriptor,targetHealingInProgress:m,cacheBustedBeforeAction:b,memory:s.memory,useMemory:h},"Prompting AI for an updated element location"),(b||!i)&&await tM({description:o.elementDescriptor,iframeUrl:s.iframeUrl,source:p,logger:g,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride},this.getControllerFixtures(t)),f--;let R;try{R=await Kh({description:o.elementDescriptor,disableCache:!!s.disableCache,iframeUrl:s.iframeUrl,source:p,useMemory:h,memory:h?s.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,logger:g},this.getControllerFixtures(t))}catch(M){if(M instanceof Pn&&M.updatedLocatorMemory){let G={id:-1,...i,memory:M.updatedLocatorMemory};Du({cmd:c,key:d,newTarget:G,logger:g,updatedWithAI:!0})}throw new E("ActionFailureError",M.message)}R.frameConfig&&this.browser.setActiveFrameConfig(R.frameConfig);let O=s.disableGlobalLocatorRedirect?{locator:R.resolution.locator}:await this.attemptLocatorRedirect(R.resolution.locator,g),v=await a(O);return Du({cmd:c,key:d,newTarget:R.target,logger:g,updatedWithAI:!0}),m&&(n.recordTargetAutoHeal({healType:"AI"}),R.target.targetSource="AI_HEALED",R.target.targetUpdateTime=new Date().toUTCString(),R.target.targetUpdateLoggerTags=Se(g)),{result:v,elementInteractedDisplayString:R.resolution.displayString,thoughts:R.thoughts}}try{let R=await this.browser.resolveTarget(t,T,{allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,targetName:d,logger:g,signal:this.executeAbortController.signal});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await this.browser.scrollIntoViewIfNeeded(R.locator);let O=s.disableGlobalLocatorRedirect?{locator:R.locator}:await this.attemptLocatorRedirect(R.locator,g),v=await a(O);if(He.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.21.1"]),Du({cmd:c,key:d,newTarget:T,logger:g,updatedWithAI:!1}),x){let M=R.decisions.filter(G=>G.matched);if(M.length!==1)g.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let G=M[0].type;n.recordTargetAutoHeal({healType:G})}}return{result:v,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let O="unknown";R instanceof Br&&R.cacheMissReason&&(O=R.cacheMissReason),He.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.21.1",`missReason:${O}`]);let v=!1;if((R instanceof zr||Ep(R)||Ap(R)||Rp(R)||uy(R)||Tp(R)||dy(R))&&(v=!0),R instanceof E&&!v)throw g.error({err:R},"Failed to execute action with cached target (fatal)"),R;if(f>0&&o){g.info({err:R},"Failed to execute action with cached target, retrying with AI");let M;return T.memory&&Zf(T.memory)&&(M=T.memory),this.wrapElementTargetingCommand({ctx:t,tracer:n,command:c,target:o,cache:void 0,originalCache:i,action:a,options:{...s,memory:M,retriesWithAI:f,targetHealingInProgress:!0}})}throw new E("ActionFailureError",R.message,{errOptions:{cause:R}})}}async attemptLocatorRedirect(e,t){return this.browser.userBrowserSettings.globalLocatorRedirect!==!1?this.browser.performTargetRedirection(e,t):{locator:e}}async screenshotWithDimensions(e){return il(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await q(this.options.slowMoMs);let a=await this.browser.getOpenPages(),s=this.browser.url(),c;try{c=await this.resolveCommandTemplateStrings(n,o)}catch(l){throw this.throwIfClosed(),new E("ActionFailureError",`Failed to substitute template strings in command: ${l.message}`,{errOptions:{cause:l}})}try{let l=await this.executePresetCommandHelper(e,t,n,o,i);return this.browser.userBrowserSettings.visualActions&&MS(n)?await this.browser.waitForDOMStability({timeout:we}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:le}),this.options?.autoFollowNewTabs&&await Vx({beforeUrl:s,command:n,beforePages:a.map(u=>u.url),browser:this.browser,logger:this.logger}),l}catch(l){throw l.name!=="AbortError"&&this.logger.error({err:l},"Error thrown in action controller"),l}finally{Ou(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>bh(e)}}async resolveCommandTemplateStrings(e,t){return Pu({obj:e,context:t,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(e,t,n,o,i){i=i||"disableCache"in n&&!!n.disableCache;let a=this.logger.child({commandId:n.id});switch(n.type){case"SUCCESS":let s=n.condition;return s?.assertion.trim()?ad({command:s,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a}):{succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AI_ASSERTION":{if(!n.assertion.trim())throw new E("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new E("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return ad({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new E("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let h=wT(n.schema);if(h)throw new E("UserConfigurationError",h)}let p=await this.browser.getCondensedHtml(),g=await this.browser.screenshot({retries:2});try{let h=await this.generator.getTextExtraction({goal:n.goal,browserState:p,returnSchema:n.schema,screenshot:`data:image/jpeg;base64,${g.toString("base64")}`},{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:Se(a)});if(h.result==="NOT_FOUND")throw new E("ActionFailureError","No relevant data found for extraction goal on this page");if(h.thoughts?.includes("MaxGenerationLengthExceededError"))throw new E("UserConfigurationError",h.thoughts);return{thoughts:h.thoughts||void 0,data:h.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(h){let f=h.message;throw f.includes("MaxGenerationLengthExceededError")?new E("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):f.includes("AIProviderError")&&f.includes("time")?new E("AIProviderError","The AI provider responded with an error. This may be because you tried to extract too much data. Please limit extraction results to 2000 characters.",{errOptions:{cause:h}}):h}}case"NAVIGATE":if(!ea(n.url)&&!ta(n.url,this.browser.baseUrl))throw new E("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"DIALOG":this.browser.registerDialogHandler(n.action);break;case"CAPTCHA":throw new E("UserConfigurationError","Captcha solving is no longer available on Momentic");case"GO_BACK":await this.browser.goBack();break;case"GO_FORWARD":await this.browser.goForward();break;case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_DOWN":case"SCROLL_UP":{let p,g;if(n.target&&kr(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:b,thoughts:T}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:w=>this.browser.hover(w),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});p=b,g=T}let h=this.browser.getViewport()?.height??Nn.height,f=this.browser.getViewport()?.width??Nn.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??h));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??h);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??f));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??f);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new E("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let p=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:p},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case"WAIT":if(n.delay>1800)throw new E("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let c=n.delay*1e3;await q(c,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(kr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let p=this.browser.url(),{elementInteractedDisplayString:g,result:h,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:T=>this.browser.click(T,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),b={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:f,data:h.downloadedFile?{downloadedFile:h.downloadedFile}:void 0};return Hu(p,b.urlAfterCommand)&&(b.succeedImmediately=!0,b.succeedImmediatelyReason="URL changed"),b}case"COPY":return await this.browser.copy(n.value),{succeedImmediately:!1,data:n.value,urlAfterCommand:this.browser.url()};case"PASTE":{await this.browser.paste();break}case"DRAG":{if(kr(n.fromTarget)&&kr(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0});break}if(kr(n.fromTarget)||kr(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:p,thoughts:g}=await this.wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(h,f)=>this.browser.dragAndDrop(h.locator,f.locator,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p[0],thoughts:g}}case"MOUSE_DRAG":{let p=parseInt(n.deltaX),g=parseInt(n.deltaY),h=n.steps??5;if(isNaN(p)||isNaN(g))throw new E("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&kr(n.target)){await this.browser.mouseDragUsingVisualCoordinates({deltaX:p,deltaY:g,steps:h,fromTarget:n.target.pixels});break}let f,b;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:T,thoughts:w}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async x=>this.browser.mouseDrag(p,g,h,x.locator,{force:n.force}),options:{disableCache:i,targetName:"target",...n}});f=T,b=w}else await this.browser.mouseDrag(p,g,h,void 0,{force:n.force});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:b}}case"SELECT_OPTION":{if(!Mn(n.target))throw new Error("Select with x/y is not supported yet");let p=n.target.elementDescriptor,g=n.choice,{elementInteractedDisplayString:h,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:p},cache:n.cache?.target,action:b=>this.browser.selectOption(b,g,n.force),options:{...n,targetName:"target",disableCache:i,source:qa(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:h,thoughts:f}}case"TAB":{let p={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:!0};await this.browser.switchToPage(n.action,p);break}case"NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"COOKIE":if(!n.value)break;let l=await this.browser.setCookie(n.value);a.debug({results:l},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let p;try{n.environment==="BROWSER"?(p=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),a.info({result:p},"Executed JavaScript in browser")):p=await Xr({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.timeout*1e3:void 0,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async g=>{if(!this.options?.scratchPadId){a.warn({updates:g},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:g,logger:a})}}})}catch(g){throw this.throwIfClosed(),new E("ActionFailureError",g instanceof Error?g.message:`${g}`,{errOptions:{cause:g}})}try{JSON.stringify(p)}catch(g){throw new E("ActionFailureError",`Return value is not serializable: ${g instanceof Error?g.message:`${g}`}`,{errOptions:{cause:g}})}return{urlAfterCommand:this.browser.url(),succeedImmediately:!1,data:p}}case"TYPE":{if(n.target&&kr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n),await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);break}let p=this.browser.url(),g,h,f=dM(n.target),b=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:w,thoughts:x}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:f,cache:n.cache?.target,action:R=>this.browser.typeIntoTarget(n.value,R,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter,relativePosition:n.relativePosition}),options:{...n,targetName:"target",disableCache:i,disableGlobalLocatorRedirect:!b,source:qa(n)}});g=w,h=x}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let T={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:h};return Hu(p,T.urlAfterCommand)&&(T.succeedImmediately=!0,T.succeedImmediatelyReason="URL changed"),T}case"HOVER":{if(kr(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:h=>this.browser.hover(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"FOCUS":{if(!Mn(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:h=>this.browser.focus(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"BLUR":{if(n.target&&!Mn(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:h=>this.browser.blur(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"PRESS":let u=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let d={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return Hu(u,d.urlAfterCommand)&&(d.succeedImmediately=!0,d.succeedImmediatelyReason="URL changed"),d;case"KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"REQUEST":{let p=new oH,g=nH(fetch,p),h;try{h=new URL(n.url).hostname}catch{}let f=await ld({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:g});return{data:ka.parse({...f,cookies:hc(p,h)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await uM({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return sM({ctx:e,tracer:t,command:n,disableCache:i,browser:this.browser,logger:a,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:p=>this.wrapElementTargetingCommand(p)});case"FILE_UPLOAD":{let p,g;if(n.fileSource.type==="URL"?(g=n.fileSource.url,p=await _C({uri:n.fileSource.url,logger:a,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(g=n.fileSource.name,p=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!p)throw new E("UserConfigurationError",`Attempted to use non-existent file for upload step: ${g}`);await this.browser.setFileChooserHandler({...p,filename:n.filename});break}case"AUTH_SAVE":return{data:await this.browser.saveAuthState(),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AUTH_LOAD":{let p;if(!n.storageState.trim())p=void 0;else if(p=await Xr({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof p!="object")throw new E("ActionFailureError",`Credentials must evaluate to an object (received ${typeof p} instead)`);let g;try{g=oE.optional().parse(p)}catch(h){throw new E("ActionFailureError",`Credentials provided do not follow the required format: ${h}`)}await this.browser.loadAuthState(g);break}case"ELEMENT_CHECK":{let p=(n.timeout??kt)*1e3,g=this.generator.getAgentConfig()?.assertion;if(iM(n.assertion)&&!n.useSelector&&n.target.type==="description"&&g&&g!=="v1"){let f={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let b=await ad({command:f,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory()});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${b.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:b.afterScreenshotOverride}}finally{f.cache?.memory&&Js(n,f.cache?.memory.traces,a)}}let h=await oM({command:n,tracer:t,timeoutMs:p,targetingWrapper:f=>this.wrapElementTargetingCommand(f),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!h.success,data:h.data,elementInteracted:h.elementInteractedDisplayString,thoughts:h.err?.message??h.thoughts??`Element assertion ${h.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let p=await Tr({action:async()=>cM({assertion:n.assertion,browser:this.browser,logger:a,timeout:n.timeout,signal:this.executeAbortController.signal,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:a});return{fail:!p.success,data:p.data,thoughts:p.success?"Page assertion passed.":p.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:!1}}case"REGISTER_REQUEST_LISTENER":{let p=new Xn(n.requestMatcher),g=this.browser.registerRequestListener(p);return this.registeredListeners[n.key]=g.then(async h=>await Rh(h)).catch(h=>{a.error({err:h},"Failed to get request listener response")}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"AWAIT_LISTENER":{let p=this.registeredListeners[n.key];if(!p)throw new E("ActionFailureError",`No listener registered with key: ${n.key}`);let g=n.timeout??10;return{data:await z(p,{milliseconds:g*1e3,message:`Request listener timed out after ${g} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let p=new Xn(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,{matches:g=>p.matches({url:g.request.url,method:g.request.method}),onRequestStart:(g,h)=>{this.recordedRequests[n.key][g]=Ku(h)},onRequestComplete:(g,h)=>{this.recordedRequests[n.key]?.[g]&&(this.recordedRequests[n.key][g]=Ku(h))}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let p=this.recordedRequests[n.key];if(!p)throw new E("ActionFailureError",`No recorder registered with key: ${n.key}`);return delete this.recordedRequests[n.key],{data:Object.values(p),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"SET_HEADER":{let p;return n.requestMatcher&&(p=new Xn(n.requestMatcher)),this.browser.setHeader(n.name,n.value,p),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"MOCK_ROUTE":return{data:{key:this.browser.registerMock(n.key,new Xn(n.requestMatcher),async(g,h)=>{let f=await Xr({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:g,response:h},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),b=iE.parse(f);return new Response(b.body,{status:b.status,headers:b.headers})},n.fetchOriginalResponse??!1)},succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"REMOVE_ROUTE_MOCK":return this.browser.removeMock(n.key),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"OFFLINE_MODE":return await this.browser.setOfflineMode(n.enable),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};default:return(p=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}return{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}async getReverseMappedDescription({browserState:e,targetId:t,disableCache:n,screenshot:o}){return(await this.generator.getReverseMappedDescription({browserState:e,target:t,screenshot:o},{disableCache:n,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights()}async startRecordMode({params:e,abortController:t,isClickToRecord:n}){this.recordAbortController=t;let o=new ed({signal:t.signal,...e});return await this.browser.startRecording(this.recordAbortController.signal,o,n),o}async runSectionAutohealing(e){return this.generator.getAutohealingProposal(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})}async getFailureRecoveryPlan(e){return this.generator.getFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})}};import{cloneDeep as iH}from"lodash-es";import fM from"truncate-json";var pM=1e3,mM=5e6,aH=5*1024*1024;function SM(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=fM(JSON.stringify(n.data),1e3);n.data=JSON.parse(o)}}catch(o){e.error({err:o},"Failed to serialize individual result output data"),n.data=`Result output data could not be serialized: ${o}`}switch(n.type){case"MOBILE_PRESET_STEP":gM(n);break;case"MOBILE_AI_ACTION_STEP":case"MOBILE_MODULE_STEP":gM(n),SM(n.steps,e);break;default:{let o=n;throw new Error("If Typescript complains about the line below, you missed a case or break in the switch above")}}}}function gM(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function hM(r,e){let t=JSON.stringify(r),n=t.replaceAll("\\u0000","");if(t.length!==n.length){let o=t.indexOf("\\u0000");e.warn({input:t.slice(Math.max(0,o-500),Math.min(t.length,o+500))},"Database content violation: stripped unicode character from input")}return n}function dd(r,e){let t=iH(r);if(SM(t,e),t.length>pM)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,pM);let n=hM(t,e);if(n.length>mM)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>mM;)t.pop(),n=hM(t,e);let{jsonString:o}=fM(n,aH);try{return Ht.array().parse(JSON.parse(o))}catch(i){throw e.error({serialized:n,err:i},"Could not parse serialized results into JSON structure after processing"),i}}import{AsyncLocalStorage as sH}from"async_hooks";var al=new sH;function lH(r){al.enterWith({activeTracers:[r]})}function cH(r,e){let t=al.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function uH(r,e){let t=al.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return al.run({activeTracers:n},e)}var Nr={globalAls:al,initializeRootTracerContext:lH,withChildTracer:cH,withChildTracerAsync:uH};var yM=["signal","timeoutMs","timeoutMsg"],jo=class r{spans;parentSection;finished=!1;startTime;endTime;constructor(e){this.startTime=e?.startTime??Date.now(),this.spans=e?.subSpans??[],this.parentSection=e}startSection(e,t){let n={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},o=new r(n);try{return Nr.withChildTracer(o,()=>t(o,n))}catch(i){throw n.error=i instanceof Error?i.message:String(i),i}finally{o.finish(),this.addSpan(n)}}async startAsyncSection(e,t,n){let o={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},i=new r(o);this.addSpan(o);try{let a;return n?.signal||n?.timeoutMs?a=await Nr.withChildTracerAsync(i,()=>z(t(i,o),{milliseconds:n?.timeoutMs??1/0,signal:n?.signal,message:n?.timeoutMsg??`Operation timed out after ${n?.timeoutMs??1/0}ms (${e})`})):a=await Nr.withChildTracerAsync(i,()=>t(i,o)),a}catch(a){throw o.error=a instanceof Error?a.message:String(a),a}finally{i.finish()}}finish(){if(!this.finished){this.endTime=Date.now();for(let e of this.spans)e.endTime||(e.endTime=this.endTime,e.durationMs=e.endTime-e.startTime);this.parentSection&&(this.parentSection.endTime=this.endTime,this.parentSection.durationMs=this.parentSection.endTime-this.parentSection.startTime),this.finished=!0}}addSpan(e){this.spans.push(e)}startSpan(e,t,...n){let o={type:e,startTime:Date.now(),endTime:void 0,attributes:{}},i=n[0]??void 0;Object.assign(o,i??{});for(let s of yM)s in o&&delete o[s];this.addSpan(o);let a;try{a=t(o),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime}catch(s){throw o.error=s instanceof Error?s.message:String(s),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime,s}return a}async startAsyncSpan(e,t,...n){let o={type:e,startTime:Date.now(),endTime:void 0,attributes:{},subSpans:[]},i=n[0]??void 0;Object.assign(o,i??{});for(let c of yM)c in o&&delete o[c];this.addSpan(o);let a=new r(o),s;try{i?.signal||i?.timeoutMs?s=await Nr.withChildTracerAsync(a,()=>z(t(o),{milliseconds:i?.timeoutMs??1/0,signal:i?.signal,message:i?.timeoutMsg??`Operation timed out after ${i?.timeoutMs??1/0}ms${"name"in i?` (${i.name})`:""}`})):s=await Nr.withChildTracerAsync(a,()=>t(o)),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime}catch(c){throw o.error=c instanceof Error?c.message:String(c),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime,c}return s}getRootSpan(){return this.finished||this.finish(),{type:"SECTION",name:"root step span",startTime:this.startTime,endTime:this.endTime,subSpans:this.spans,attributes:{},durationMs:this.endTime?this.endTime-this.startTime:void 0}}};function ie(){let r=Nr.globalAls.getStore()?.activeTracers,e;return!r||r.length===0?e=void 0:e=r[r.length-1],e||new jo}async function bM(r){let{driver:e,abortSignal:t,logger:n,packageName:o}=r,i;try{i=await z(e.execute("mobile: shell",{command:"dumpsys",args:["activity","recents"]}),{signal:t,milliseconds:1e4})}catch(s){t?.throwIfAborted(),n.warn({err:s,packageName:o},"Failed to read recents output while removing package");return}if(typeof i!="string"){n.warn({packageName:o,outputType:typeof i},"Unexpected dumpsys output when removing package from recents");return}let a=dH(i,o);if(a.length!==0)for(let s of a){t?.throwIfAborted();try{await e.execute("mobile: shell",{command:"am",args:["stack","remove",s.toString()]}),n.info({packageName:o,taskId:s},"Removed task from recents")}catch(c){t?.throwIfAborted(),n.warn({err:c,packageName:o,taskId:s},"Failed to remove task from recents")}}}function dH(r,e){let t=r.split("Task{");if(t.length<=1)return[];let n=new Set;for(let o of t.slice(1)){let i=`Task{${o}`;if(!i.includes(e)||i.includes("app.lawnchair/.LawnchairLauncher"))continue;let a=i.match(/taskId=(\d+)/);if(!a)continue;let[,s]=a;if(!s)continue;let c=Number.parseInt(s,10);Number.isNaN(c)||n.add(c)}return Array.from(n)}function sl(r){let e=[],t=r.getAttribute("text")??"",n=r.getAttribute("hint")??"",o=r.getAttribute("showing-hint")==="true";t.trim()&&!o&&t.trim()!==n.trim()&&e.push(t.trim());for(let i of Array.from(r.childNodes??[]))if(i.nodeType===3){let a=i.nodeValue??"";a.trim()&&e.push(a.trim())}else if(i.nodeType===1){let a=sl(i);a.trim()&&e.push(a.trim())}return e.join(" ").trim()}import{mkdirSync as NH}from"fs";import{tmpdir as DH}from"os";import MM from"path";import{diff as LH}from"deep-object-diff";import{cloneDeep as xM}from"lodash-es";import AM from"fontoxpath";import pH from"@prettier/plugin-xml";import mH from"prettier";import{DOMParser as gH,XMLSerializer as hH}from"slimdom";var fH=new Set(["android.webkit.webview","com.facebook.react.views.webview.reactwebview","com.tencent.smtt.sdk.webview","com.tencent.smtt.sdk.x5webview","org.xwalk.core.xwalkview","com.uc.webview.export.webview"]);function ll(r){let e=r.toLowerCase();return e.endsWith("webview")||fH.has(e)}function SH(r){let e=["android.widget.","android.view.","android.webkit.","android.app.","android.support.","androidx.","com.android.inputmethod."];for(let t of e)if(r.startsWith(t))return r.substring(t.length);return r}var yH=new Set(["index","package","a11y-important","screen-reader-focusabl"]),bH=new Set(["selected","checked","checkable","clickable","enabled","focusable","focused","long-clickable","password","scrollable","selected","showing-hint","context-clickable","multiline","text-entry-key","heading","dismissable","screen-reader-focusable","content-invalid","a11y-focused"]),EH=new Set(["text","hint"]),TH=new Set(["live-region","drawing-order"]),vH=new Set(["displayed","enabled"]);function AH(r,e){let t={};for(let[n,o]of Object.entries(e))yH.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||bH.has(n)&&o==="false"||EH.has(n)&&o===""||vH.has(n)&&o==="true"||TH.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function EM(r,e,t){let{prunedDocument:n,idToElement:o,prunedIdToElement:i,idCounter:a,opts:s}=r,c=a.value++;t.setAttribute("id",String(c));let l={};for(let m of e.attributes){let p=m.name,g=m.value;g!=null&&(l[p]=String(g))}let u=AH(e.tagName,l);for(let[m,p]of Object.entries(u))t.setAttribute(m,p);if(o.set(c,e),i.set(c,t),ll(e.tagName)){let m=s?.injectedWebviewContent??"";if(s?.removeWebviewContent){for(;t.firstChild;)t.removeChild(t.firstChild);return}else if(!s?.disableMomenticAccessibilityTree&&m.trim().length>0){for(;t.firstChild;)t.removeChild(t.firstChild);m.trim().length>0&&t.appendChild(n.createCDATASection(`
4361
+ ${r}`;default:return r}}var VG=15;async function ad({command:r,aiPageFiltering:e,logger:t,fixtures:n,useMemory:o,maxRetries:i=VG}){if(!r.assertion.trim())throw new E("ActionFailureError","Assertion command is missing the assertion content");let a=Kp.optional().catch(void 0).parse(r.source);r.source&&!a&&t.warn(`Invalid source ${r.source} for AI assertion, ignoring...`);let{browser:s}=n,c=r.timeout?r.timeout*1e3:s.smartWaitingTimeout,l=zu(c),u=0,d=Date.now(),m,p,g;try{await Tr({action:()=>s.clearHighlights(),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:s,logger:t})}catch(f){t.warn({err:f},"Failed to clear highlights before AI check, continuing...")}let h;for(;u<i&&(!h||h-d<c);){n.abortSignal.throwIfAborted(),u!==0&&await q(l,n.abortSignal),h=Date.now();let f=!1;try{if(m=await Tr({action:async()=>{let T=await Zx(s,t,n.abortSignal);return p&&p.serializedTree===T.serializedTree&&p.screenshotBuff.equals(T.screenshotBuff)?(f=!0,m):(p=T,eM({command:r,state:T,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:t,source:a}))},frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s}),m?.success){m?.updatedMemory&&Js(r,m.updatedMemory,t);break}else throw m?.thoughts?new E("AssertionFailureError",m.thoughts):new E("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(b){n.abortSignal.throwIfAborted(),g=b instanceof Error?b:new Error(`${b}`),f?t.info(`AI check attempt ${u} failed (re-used previous result)`):t.info({err:b},`AI check assert attempt ${u} failed, retrying...`)}finally{u++}}if(!m?.success)try{m=await Tr({action:async()=>eM({command:r,state:await Zx(s,t,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:u,aiPageFiltering:e,logger:t}),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s})}catch(f){n.abortSignal.throwIfAborted(),g=f instanceof Error?f:new Error(`${f}`)}finally{u++}if(m?.updatedMemory&&Js(r,m.updatedMemory,t),!m?.success){let f=`AI check still failing after ${u} attempts.`;throw g&&(f+=` Latest result: ${g.message}`),new E("AssertionFailureError",f)}return{...m,succeedImmediately:!1,urlAfterCommand:s.url()}}async function Zx(r,e,t){let[n,o]=await Promise.all([rn(r,{abortSignal:t,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),r.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function eM({command:r,state:e,fixtures:t,useConsensus:n,useMemory:o,highlightElementsOnFailure:i,aiPageFiltering:a,attemptNumber:s,source:c,logger:l}){let{browser:u,generator:d,abortSignal:m}=t,p={type:"ASSERTION"},{serializedTree:g,tree:h}=e,f=e.screenshotBuff,b=f.toString("base64"),T=u.url(),w=r.contextChoice??"MULTIMODAL",x=g;w!=="VISION_ONLY"&&(x=await Wo({type:"assertion",serializedTree:g,tree:h,description:r.assertion,screenshot:b,options:{aiPageFiltering:a},fixtures:{generator:d,signal:m,logger:l,orgId:t.orgId}}),x!==g&&(p.ragUsed=!0),p.pageState=x);let R={goal:r.assertion,url:T,memory:o?r.cache?.memory:void 0,browserState:x,screenshot:b,contextChoice:w,source:c},v=await(w==="VISION_ONLY"?(M,G)=>d.getVisualAssertionResult(M,G):(M,G)=>d.getAssertionResult(M,G))(R,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!r.disableCache,abortSignal:m,logger:l,loggerTags:Se(l)});return(v.result||i)&&v.relevantElements&&(p.relevantElementsSerialized=v.relevantElements.map(M=>u.getSerializedFormFromA11yId(M)).filter(M=>!!M),await WG(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function WG(r,e,t){let n=Date.now();for(let o of r){if(Date.now()-n>2e3){t.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await z(e.highlightA11yId(o),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}})}catch(i){t.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}var jG=1e5,sd=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function tM(r,e){let{logger:t}=r,{abortSignal:n,browser:o}=e,i=Date.now();try{await $G(i,r,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof sd?t.warn("Skipping AI smart waiting due to excessive page size - falling back to naive waiting"):t.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=o.smartWaitingTimeout-(Date.now()-i);s>0&&await q(s,n)}finally{t.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function $G(r,e,t){let{abortSignal:n,browser:o}=t;if(o.smartWaitingTimeout<3e3){await q(o.smartWaitingTimeout,n);return}if(!e.description)throw new E("UserConfigurationError","Cannot locate element with empty description");await z(qG(r,e,t),{milliseconds:o.smartWaitingTimeout})}async function qG(r,e,t){let{logger:n,iframeUrl:o}=e,{browser:i}=t;for(;Date.now()-r<i.smartWaitingTimeout;)if(await Tr({action:async()=>KG(e,t),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function KG(r,e){let{testContext:t,logger:n,filterByViewport:o,allowNotActionableNodesOverride:i}=r,{browser:a,abortSignal:s,localCodeEvalTools:c,orgId:l,generator:u}=e,d=r.description;t&&(d=await Xs({orgId:l,s:d,context:t,localTools:c,signal:s,logger:n}));let{serializedTree:m}=await rn(a,{allowNotActionableNodesOverride:i,filterByViewport:o,abortSignal:s,logger:n});if(Pr(m)>jG)throw new sd;s.throwIfAborted();let g;try{g=await a.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(T){throw new E("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${T instanceof Error?T.message:T}`)}let f=`data:image/jpeg;base64,${g.toString("base64")}`;s.throwIfAborted();let b=await u.getSmartWaitingDecision({browserState:m,description:d,screenshot:f},{abortSignal:s,loggerTags:Se(n)});return n.debug({result:b},"Got smart waiting result"),b.isPageReady}import{cloneDeep as nM}from"lodash-es";async function oM(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=()=>nS(e.cache)?e.cache:void 0,a=i(),s=nM(a),c=(h=!1)=>{if(a=i(),!!a)if(h){let f=xw(s,a);a.target=f.target,a.updatedAt=f.updatedAt}else{if(!s){a=void 0;return}a.target=s.target,a.updatedAt=s.updatedAt}},l=Date.now(),u=0,d,m=500,p=!1;for(;u<2||Date.now()-l<t;){u++,u>1&&await q(m,o),o?.throwIfAborted(),a=i();let{result:h,elementWasFound:f}=await rM({cacheToUse:a,params:r});if(d=h,p=f,h.success)break;c(),m=Math.min(m*2,1e4)}if(!d)throw new E("InternalPlatformError",`Failed to evaluate manual element assertion in ${t}ms.`);if(o?.throwIfAborted(),!d.success&&a?.target&&Cl(a.target)){let h=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await rM({cacheToUse:h,params:r});d=f,d.success||c(!0)}let g=i();return d.success&&g?.target&&!p&&(g.target=th(g.target),g.updatedAt=new Date),d}async function rM({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!Mn(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=Lu(t.assertion),l,u=!1,d=nM(r);try{let{elementInteractedDisplayString:m,result:p,thoughts:g}=await a({ctx:o.ctx,tracer:i,command:t,target:t.target,cache:d?.target,action:async h=>YG(h.locator,e),options:{...t,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:qa(t),targetName:"target"}});return l={success:p.success,data:p.data,err:p.err,elementInteractedDisplayString:m,thoughts:g},u=!0,p.success||(s.warn({aiThoughts:g,elementString:m,err:p.err},"Element check found an element but failed"),l={...p,thoughts:g}),{result:l,elementWasFound:u}}catch(m){if(c)return l={success:!0,thoughts:`The element described does not exist on the page: ${m.message}`,err:void 0,data:void 0},{result:l,elementWasFound:u};if(!(m instanceof E)||m.reason!="ActionFailureError")throw m;return l={success:!1,err:m,data:void 0,thoughts:void 0},s.warn({err:m},"Element check did not find an element and failed"),{result:l,elementWasFound:u}}}async function YG(r,{command:e,fixtures:t}){return await t.browser.highlight(r),await XG(r,e.assertion)}async function XG(r,e){let t=!0,n,o;switch(e.type){case"ELEMENT_CONTENT":{let a=await r.textContent()??"";if(o={elementTextContent:Et(a,500,!0)},!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,n=new E("AssertionFailureError",`The content ${s} '${e.value}': ${a}`)}break}case"ELEMENT_ATTRIBUTE":{o={elementOuterHtml:Et(await r.evaluate(s=>s.cloneNode(!1).outerHTML),500,!0)};let a;try{a=await r.getAttribute(e.attr,{timeout:3e3})??""}catch(s){n=new E("AssertionFailureError",`The element does not have an attribute named ${e.attr}: ${s}`),t=!1;break}if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,e.operation==="EXISTS"?n=new E("AssertionFailureError",`The attribute ${e.attr} ${s}`):n=new E("AssertionFailureError",`The attribute ${e.attr} ${s} '${e.value}': ${a}`)}break}case"ELEMENT_EXISTENCE":{switch(e.condition){case"VISIBLE":{t=await r.evaluate(async(s,c)=>{let l=Date.now();for(;Date.now()-l<c;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return!0}return!1},kt*1e3);break}case"EDITABLE":{t=await r.isEditable({timeout:kt*1e3});break}case"EXISTS":{t=!0;break}case"ENABLED":{t=await r.isEnabled({timeout:kt*1e3});break}case"FOCUSED":{t=await r.evaluate(s=>s===document.activeElement);break}default:return(s=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e.condition)}if(t=e.negated?!t:t,!t){let a=yr(e);n=new E("AssertionFailureError",`The element ${a}`)}break}case"ELEMENT_NAME":{let a=await r.evaluate(s=>s.tagName);if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!0})){let s=yr(e);t=!1,n=new E("AssertionFailureError",`The element tag name ${s} '${e.value}': ${a}`)}break}case"ELEMENT_STYLE":{let a=await r.evaluate((s,c)=>window.getComputedStyle(s).getPropertyValue(c),e.property);if(!Jr(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yr(e);t=!1,e.operation==="EXISTS"?n=new E("AssertionFailureError",`The style property ${e.property} ${s}`):n=new E("AssertionFailureError",`The style property ${e.property} ${s} '${e.value}': ${a}`)}break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}return{thoughts:void 0,success:t,data:o,err:n}}function iM(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as JG}from"jimp";async function il(r,e){let t=await r.screenshot(e),n=await JG.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as aM}from"jimp";import Yh from"jpeg-js";import QG from"pixelmatch";async function sM({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!Mn(t.target))throw new Error("Visual Diff with x/y is not supported yet");await o.waitForDOMStability({logger:a});let c={clearHighlights:!0,hideCaret:!0},l;t.target?.elementDescriptor?l=(await i({ctx:r,tracer:e,command:t,target:t.target,cache:t.cache?.target,action:async W=>il(o,{locator:W.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await il(o,c);let u=await s.prepareGoldenScreenshotForComparison(a,t,l);if((l.height!==u.height||l.width!==u.width)&&a.warn({currHeight:l.height,currWidth:l.width,savedHeight:u.height,savedWidth:u.width},"Mismatched before and after visual diff screenshot sizes"),Math.abs(l.height-u.height)>10||Math.abs(l.width-u.width)>10){let H=`${l.width}x${l.height}`,W=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${H}) does not match saved screenshot dimensions (${W}) - did you change the size of the target or the viewport?`,beforeScreenshotOverride:u.buffer,afterScreenshotOverride:l.buffer,succeedImmediately:!1,urlAfterCommand:o.url()}}let d=await aM.fromBuffer(l.buffer),m={width:l.width,height:l.height},p=await aM.fromBuffer(u.buffer),g={width:u.width,height:u.height},h,f=m.width*m.height,b=g.width*g.height,T=Math.abs(m.height-g.height),w=Math.abs(m.width-g.width);if(f>b){let H=d.cover({w:g.width,h:g.height});l.buffer=await H.getBuffer("image/jpeg"),h="current",l.width=g.width,l.height=g.height}else if(b>f){let H=p.cover({w:m.width,h:m.height});u.buffer=await H.getBuffer("image/jpeg"),h="saved"}let x={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},R=t.threshold??.1,v=QG(Yh.decode(u.buffer).data,Yh.decode(l.buffer).data,x.data,l.width,l.height,{threshold:R,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,M=v>R*100,G=`Visual diff of ${v.toFixed(2)}% detected, which is ${M?"over":"under"} the threshold of ${R*100}%.`;if(h&&(G+=` The ${h} screenshot was cropped since it was taller by ${T} pixels and wider by ${w} pixels.`),M)throw new E("ActionFailureError",G);return{fail:M,thoughts:G,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:Yh.encode(x,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var ZG=3e4;function eH(r){if(!r.body)return{};switch(r.body.type){case"json":return{content:r.body.content,contentType:"application/json"};case"form-urlencoded":{let e=new URLSearchParams;return Object.entries(r.body.content).forEach(([t,n])=>{e.append(t,n)}),{content:e.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function ld({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??ZG/1e3,i=Object.fromEntries(Object.entries(r.headers||{}).filter(([g,h])=>g&&h)),a=new URLSearchParams;Object.entries(r.params||{}).filter(([g,h])=>g&&h).forEach(([g,h])=>{a.append(g,h)});let s=a.toString(),c;if(ea(r.url)&&(c=r.url),t&&ta(r.url,t)&&(c=new URL(r.url,t).toString()),!c)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=c;e.info({url:l,searchParams:s,headers:i,body:r.body,method:r.method},"Making HTTP request");let d=await z((async()=>{let g=s?`${l}?${s}`:l;try{let h=eH(r),f=new Headers(i);return h.contentType&&!f.has("Content-Type")&&f.set("Content-Type",h.contentType),await n(g,{headers:f,method:r.method,body:h.content})}catch(h){throw e.error({err:h},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${h}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new E("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!d.ok){let g;try{g=await d.text()}catch(h){g=`Failed to read response body: ${h}`}throw new E("ActionFailureError",`Fetch request failed with status ${d.status}: ${g}`)}let m={};d.headers.forEach((g,h)=>{m[h]=g});let p={status:d.status,headers:m,request:{url:d.url,method:r.method,headers:i}};if(r.body?.type==="json"&&r.body.content)try{p.request.json=JSON.parse(r.body.content)}catch{}if(d.headers.get("content-type")?.includes("json"))try{p.json=await d.json()}catch{}else d.headers.get("content-type")?.includes("text")&&(p.text=await d.text());return p}var tH=5e3;async function cM({timeout:r=kt,...e}){let t=Date.now(),n=r*1e3,o=n+1e4,i,a=0,s=500;for(;a-t<n;){if(Date.now()-t>o){e.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}e.signal?.throwIfAborted();let c=Date.now();i=await cd(e),a=Date.now();let l=a-c;if(l>1e3&&e.logger.warn({pageAssertDuration:l},"Page assertion took longer than expected"),!i.success)await q(s,e.signal),s=Math.min(Math.floor(s*1.5),tH);else return i}return i=await cd(e),i}async function cd({assertion:r,browser:e,autoExpandIframes:t}){switch(r.type){case"CONTENT":case"CONTENT":{let o,i=!1,a;try{let s;if(t){let c=await e.evaluateFunctionInAllFrames(lM,{value:r.value,negated:!!r.negated,returnHtml:!1});i=r.negated?c.every(l=>l.evaluation):c.some(l=>l.evaluation),s=c.find(l=>l.pageHtml)?.pageHtml}else({evaluation:i,pageHtml:s}=await e.evaluateFunctionInPage(lM,{value:r.value,negated:!!r.negated,returnHtml:!0},"checking page content"));if(!i){let c=r.negated?Sn.CONTAINS:yn.CONTAINS;a=new E("AssertionFailureError",`The page ${c} '${r.value}'.`),o=s}}catch(s){a=new E("AssertionFailureError",`Failed to evaluate page content assertion: ${s instanceof Error?s.message:`${s}`}`)}return{success:i,err:a,data:i||!o?void 0:{pageContent:o}}}default:return(o=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function lM({value:r,negated:e,returnHtml:t}){let n=document.documentElement.outerHTML,o=n.includes(r)===!e;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:o,pageHtml:!o&&t?n:void 0}}var rH=3e4;async function uM({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??rH/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(ea(r.url)&&(s=r.url),t&&ta(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=await z((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:r.query,variables:r.variables?JSON.parse(r.variables):void 0}),signal:i.signal})}catch(d){e.error({err:d},"Failed to make HTTP request")}})(),{milliseconds:o*1e3});if(!l)throw new E("ActionFailureError",`GraphQL request timed out after ${o} seconds`);if(!l.ok){let d,m=await l.text();try{d=JSON.parse(m)}catch{throw new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new E("ActionFailureError",`GraphQL request failed with status ${l.status}: ${m}`)}let u={};return l.headers.forEach((d,m)=>{u[m]=d}),{status:l.status,headers:u,json:await l.json()}}var ud=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:e,generator:t,logger:n,storage:o,orgId:i,localCodeEvalTools:a,uploadedFileStorage:s,visualDiffScreenshotStorage:c,options:l}){this.orgId=i,this.options=l,this.browser=e,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=o,this.uploadedFileStorage=s,this.visualDiffScreenshotStorage=c,this.localCodeEvalTools=a,this.generator=t,this.logger=n}setOpen(){this.executeAbortController=new AbortController,this.browser.registerAbortSignal(this.executeAbortController.signal)}setClosed(){this.executeAbortController.abort()}throwIfClosed(){this.executeAbortController.signal.throwIfAborted()}get closed(){return this.executeAbortController.signal.aborted}async evaluateAiAction({goal:e,startingScreenshot:t,history:n,disableCache:o,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[c,l]=await Promise.all([rn(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:s}),this.browser.screenshot({retries:1,clearHighlights:!0})]),u=`data:image/jpeg;base64,${l.toString("base64")}`,d=await Wo({type:"ai-action",description:e,screenshot:u,serializedTree:c.serializedTree,tree:c.tree,options:{aiPageFiltering:!!this.options?.aiPageFiltering},fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:t,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:{...Se(s)},langfuseSessionId:i})}async promptToCommand({goal:e,startingScreenshot:t,history:n,actionHint:o,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let c=this.browser.url(),[l,u]=await Promise.all([rn(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:a}),this.browser.screenshot({retries:1,clearHighlights:!0})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Wo({type:"ai-action",description:e,screenshot:d,serializedTree:l.serializedTree,tree:l.tree,options:{aiPageFiltering:!!this.options?.aiPageFiltering},fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),p={url:c,browserState:m,startingScreenshot:t,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Se(a)},langfuseSessionId:s})}catch(g){throw new E("InternalWebAgentError",`Error generating command: ${g instanceof Error?g.message:g}`,{errOptions:{cause:g}})}}async getBrowserState(e){return rn(this.browser,e)}async locateElement(e){return await Kh({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,t){return Tr({action:async()=>{let n=await this.browser.resolveHardcodedCssSelector({ctx:null,selector:e,timeoutMs:2e3,logger:this.logger});return{thoughts:"Located element with selector",target:{id:-1,selector:e,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:n}},frameConfig:t?{type:"url",url:t}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(e){return{ctx:e??null,browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,localCodeEvalTools:this.localCodeEvalTools,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??(this.orgId==="org_01HMSCJQBCCG51M2ZF65YC5B8W"||this.orgId==="org_01HMJTX4GT1KG94KZRCT8MZ6YB")}async wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:o,descriptions:i,caches:a,action:s,options:c,retriesWithAI:l=1}){let u=[];for(let d=0;d<i.length;d++){let m=i[d],p=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:m,cache:a[d],action:async g=>g,options:{...c,targetName:o[d]}});u.push(p)}try{let d=await s(...u.map(g=>g.result)),m=g=>g==="fromTarget"?"From Target":g==="toTarget"?"To Target":"Target",p=u.map((g,h)=>g.thoughts?`${m(o[h])}: ${g.thoughts}`:void 0).filter(g=>!!g).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(g=>g.elementInteractedDisplayString),thoughts:p}}catch(d){if(this.throwIfClosed(),l>0)return this.logger.warn({err:d},"Failed to execute action with multiple cached targets, retrying with AI"),this.wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:o,descriptions:i,caches:i.map(()=>{}),action:s,options:c,retriesWithAI:l-1});throw new E("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapElementTargetingCommand(e){let t=this.logger.child({commandId:e.command.id}),n;for(let o=0;o<2;o++)try{return await Tr({action:()=>this.wrapElementTargetingCommandHelper({...e,originalCache:e.originalCache??e.cache}),frameConfig:e.options.iframeUrl?{type:"url",url:e.options.iframeUrl}:void 0,browser:this.browser,logger:t})}catch(i){if(n=i,this.browser.userBrowserSettings.visualActions&&Ep(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(Ap(i)||Tp(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(Rp(i)){t.warn({err:i},"Invalid backend node id error, retrying element targeting command");continue}if(i instanceof zr&&i.retryableWithAI){t.warn({err:i},"Element cache disqualification error, retrying element targeting command");continue}throw i}throw n instanceof E?n:new E("ActionFailureError",n?.message??"An unknown error occurred during element targeting")}async wrapHardcodedCssTargetingCommandHelper({ctx:e,target:t,action:n,options:o,command:i}){let a=this.logger.child({commandId:i.id}),{targetName:s}=o;if(t.type!=="description")throw new E("ActionFailureError","Cannot use selector with non-description target");let c,l=Date.now(),u=Date.now();for(;Date.now()-u<this.browser.smartWaitingTimeout;){l=Date.now();try{let d=await this.browser.resolveHardcodedCssSelector({ctx:e,selector:t.elementDescriptor,targetName:s,logger:a});return{result:await n({locator:d.locator}),elementInteractedDisplayString:d.displayString}}catch(d){if(d.name==="AbortError")throw d;c=d,a.warn({err:d},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await q(500)}}throw c}async wrapElementTargetingCommandHelper(e){let{ctx:t,tracer:n,target:o,originalCache:i,action:a,options:s,command:c}=e,{disableCache:l,useSelector:u,targetName:d,targetHealingInProgress:m,source:p}=s,g=this.logger.child({commandId:c.id}),h=this.shouldUseMemory(),f=s.retriesWithAI??1,b=!1,T=dM(e.cache);if((!T||l)&&!ap(o))throw new E("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(e);l&&(g.info("Cache explicitly disabled for this step"),b=!0,T=void 0),T&&this.browser.userBrowserSettings.disableSecondaryCacheResolution&&T.targetSource==="HEURISTIC_HEALED"&&(b=!0,T=void 0),T?.inputDescription&&!Qx(o.elementDescriptor,T.inputDescription)&&(g.warn({old:T.inputDescription,new:o.elementDescriptor},"Target cache was generated with a different description, clearing it automatically"),b=!0,T=void 0);let w=R=>!!R&&Cl(R),x=!0;if(!w(T)){x=!1,g.info({description:o.elementDescriptor,targetHealingInProgress:m,cacheBustedBeforeAction:b,memory:s.memory,useMemory:h},"Prompting AI for an updated element location"),(b||!i)&&await tM({description:o.elementDescriptor,iframeUrl:s.iframeUrl,source:p,logger:g,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride},this.getControllerFixtures(t)),f--;let R;try{R=await Kh({description:o.elementDescriptor,disableCache:!!s.disableCache,iframeUrl:s.iframeUrl,source:p,useMemory:h,memory:h?s.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,logger:g},this.getControllerFixtures(t))}catch(M){if(M instanceof Pn&&M.updatedLocatorMemory){let G={id:-1,...i,memory:M.updatedLocatorMemory};Du({cmd:c,key:d,newTarget:G,logger:g,updatedWithAI:!0})}throw new E("ActionFailureError",M.message)}R.frameConfig&&this.browser.setActiveFrameConfig(R.frameConfig);let O=s.disableGlobalLocatorRedirect?{locator:R.resolution.locator}:await this.attemptLocatorRedirect(R.resolution.locator,g),v=await a(O);return Du({cmd:c,key:d,newTarget:R.target,logger:g,updatedWithAI:!0}),m&&(n.recordTargetAutoHeal({healType:"AI"}),R.target.targetSource="AI_HEALED",R.target.targetUpdateTime=new Date().toUTCString(),R.target.targetUpdateLoggerTags=Se(g)),{result:v,elementInteractedDisplayString:R.resolution.displayString,thoughts:R.thoughts}}try{let R=await this.browser.resolveTarget(t,T,{allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,targetName:d,logger:g,signal:this.executeAbortController.signal});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await this.browser.scrollIntoViewIfNeeded(R.locator);let O=s.disableGlobalLocatorRedirect?{locator:R.locator}:await this.attemptLocatorRedirect(R.locator,g),v=await a(O);if(He.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.21.2"]),Du({cmd:c,key:d,newTarget:T,logger:g,updatedWithAI:!1}),x){let M=R.decisions.filter(G=>G.matched);if(M.length!==1)g.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let G=M[0].type;n.recordTargetAutoHeal({healType:G})}}return{result:v,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let O="unknown";R instanceof Br&&R.cacheMissReason&&(O=R.cacheMissReason),He.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.21.2",`missReason:${O}`]);let v=!1;if((R instanceof zr||Ep(R)||Ap(R)||Rp(R)||uy(R)||Tp(R)||dy(R))&&(v=!0),R instanceof E&&!v)throw g.error({err:R},"Failed to execute action with cached target (fatal)"),R;if(f>0&&o){g.info({err:R},"Failed to execute action with cached target, retrying with AI");let M;return T.memory&&Zf(T.memory)&&(M=T.memory),this.wrapElementTargetingCommand({ctx:t,tracer:n,command:c,target:o,cache:void 0,originalCache:i,action:a,options:{...s,memory:M,retriesWithAI:f,targetHealingInProgress:!0}})}throw new E("ActionFailureError",R.message,{errOptions:{cause:R}})}}async attemptLocatorRedirect(e,t){return this.browser.userBrowserSettings.globalLocatorRedirect!==!1?this.browser.performTargetRedirection(e,t):{locator:e}}async screenshotWithDimensions(e){return il(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await q(this.options.slowMoMs);let a=await this.browser.getOpenPages(),s=this.browser.url(),c;try{c=await this.resolveCommandTemplateStrings(n,o)}catch(l){throw this.throwIfClosed(),new E("ActionFailureError",`Failed to substitute template strings in command: ${l.message}`,{errOptions:{cause:l}})}try{let l=await this.executePresetCommandHelper(e,t,n,o,i);return this.browser.userBrowserSettings.visualActions&&MS(n)?await this.browser.waitForDOMStability({timeout:we}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:le}),this.options?.autoFollowNewTabs&&await Vx({beforeUrl:s,command:n,beforePages:a.map(u=>u.url),browser:this.browser,logger:this.logger}),l}catch(l){throw l.name!=="AbortError"&&this.logger.error({err:l},"Error thrown in action controller"),l}finally{Ou(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>bh(e)}}async resolveCommandTemplateStrings(e,t){return Pu({obj:e,context:t,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(e,t,n,o,i){i=i||"disableCache"in n&&!!n.disableCache;let a=this.logger.child({commandId:n.id});switch(n.type){case"SUCCESS":let s=n.condition;return s?.assertion.trim()?ad({command:s,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a}):{succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AI_ASSERTION":{if(!n.assertion.trim())throw new E("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new E("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return ad({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new E("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let h=wT(n.schema);if(h)throw new E("UserConfigurationError",h)}let p=await this.browser.getCondensedHtml(),g=await this.browser.screenshot({retries:2});try{let h=await this.generator.getTextExtraction({goal:n.goal,browserState:p,returnSchema:n.schema,screenshot:`data:image/jpeg;base64,${g.toString("base64")}`},{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:Se(a)});if(h.result==="NOT_FOUND")throw new E("ActionFailureError","No relevant data found for extraction goal on this page");if(h.thoughts?.includes("MaxGenerationLengthExceededError"))throw new E("UserConfigurationError",h.thoughts);return{thoughts:h.thoughts||void 0,data:h.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(h){let f=h.message;throw f.includes("MaxGenerationLengthExceededError")?new E("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):f.includes("AIProviderError")&&f.includes("time")?new E("AIProviderError","The AI provider responded with an error. This may be because you tried to extract too much data. Please limit extraction results to 2000 characters.",{errOptions:{cause:h}}):h}}case"NAVIGATE":if(!ea(n.url)&&!ta(n.url,this.browser.baseUrl))throw new E("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"DIALOG":this.browser.registerDialogHandler(n.action);break;case"CAPTCHA":throw new E("UserConfigurationError","Captcha solving is no longer available on Momentic");case"GO_BACK":await this.browser.goBack();break;case"GO_FORWARD":await this.browser.goForward();break;case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_DOWN":case"SCROLL_UP":{let p,g;if(n.target&&kr(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:b,thoughts:T}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:w=>this.browser.hover(w),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});p=b,g=T}let h=this.browser.getViewport()?.height??Nn.height,f=this.browser.getViewport()?.width??Nn.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??h));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??h);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??f));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??f);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new E("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let p=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:p},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case"WAIT":if(n.delay>1800)throw new E("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let c=n.delay*1e3;await q(c,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(kr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let p=this.browser.url(),{elementInteractedDisplayString:g,result:h,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:T=>this.browser.click(T,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),b={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:f,data:h.downloadedFile?{downloadedFile:h.downloadedFile}:void 0};return Hu(p,b.urlAfterCommand)&&(b.succeedImmediately=!0,b.succeedImmediatelyReason="URL changed"),b}case"COPY":return await this.browser.copy(n.value),{succeedImmediately:!1,data:n.value,urlAfterCommand:this.browser.url()};case"PASTE":{await this.browser.paste();break}case"DRAG":{if(kr(n.fromTarget)&&kr(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0});break}if(kr(n.fromTarget)||kr(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:p,thoughts:g}=await this.wrapMultiElementTargetingCommand({ctx:e,tracer:t,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(h,f)=>this.browser.dragAndDrop(h.locator,f.locator,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p[0],thoughts:g}}case"MOUSE_DRAG":{let p=parseInt(n.deltaX),g=parseInt(n.deltaY),h=n.steps??5;if(isNaN(p)||isNaN(g))throw new E("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&kr(n.target)){await this.browser.mouseDragUsingVisualCoordinates({deltaX:p,deltaY:g,steps:h,fromTarget:n.target.pixels});break}let f,b;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:T,thoughts:w}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async x=>this.browser.mouseDrag(p,g,h,x.locator,{force:n.force}),options:{disableCache:i,targetName:"target",...n}});f=T,b=w}else await this.browser.mouseDrag(p,g,h,void 0,{force:n.force});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:b}}case"SELECT_OPTION":{if(!Mn(n.target))throw new Error("Select with x/y is not supported yet");let p=n.target.elementDescriptor,g=n.choice,{elementInteractedDisplayString:h,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:p},cache:n.cache?.target,action:b=>this.browser.selectOption(b,g,n.force),options:{...n,targetName:"target",disableCache:i,source:qa(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:h,thoughts:f}}case"TAB":{let p={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:!0};await this.browser.switchToPage(n.action,p);break}case"NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"COOKIE":if(!n.value)break;let l=await this.browser.setCookie(n.value);a.debug({results:l},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let p;try{n.environment==="BROWSER"?(p=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),a.info({result:p},"Executed JavaScript in browser")):p=await Xr({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.timeout*1e3:void 0,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal,callbacks:{onPersistentVariableUpdates:async g=>{if(!this.options?.scratchPadId){a.warn({updates:g},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:g,logger:a})}}})}catch(g){throw this.throwIfClosed(),new E("ActionFailureError",g instanceof Error?g.message:`${g}`,{errOptions:{cause:g}})}try{JSON.stringify(p)}catch(g){throw new E("ActionFailureError",`Return value is not serializable: ${g instanceof Error?g.message:`${g}`}`,{errOptions:{cause:g}})}return{urlAfterCommand:this.browser.url(),succeedImmediately:!1,data:p}}case"TYPE":{if(n.target&&kr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n),await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);break}let p=this.browser.url(),g,h,f=dM(n.target),b=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:w,thoughts:x}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:f,cache:n.cache?.target,action:R=>this.browser.typeIntoTarget(n.value,R,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter,relativePosition:n.relativePosition}),options:{...n,targetName:"target",disableCache:i,disableGlobalLocatorRedirect:!b,source:qa(n)}});g=w,h=x}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let T={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:h};return Hu(p,T.urlAfterCommand)&&(T.succeedImmediately=!0,T.succeedImmediatelyReason="URL changed"),T}case"HOVER":{if(kr(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:h=>this.browser.hover(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"FOCUS":{if(!Mn(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:h=>this.browser.focus(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"BLUR":{if(n.target&&!Mn(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:p,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:h=>this.browser.blur(h),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:g}}case"PRESS":let u=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let d={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return Hu(u,d.urlAfterCommand)&&(d.succeedImmediately=!0,d.succeedImmediatelyReason="URL changed"),d;case"KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"REQUEST":{let p=new oH,g=nH(fetch,p),h;try{h=new URL(n.url).hostname}catch{}let f=await ld({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:g});return{data:ka.parse({...f,cookies:hc(p,h)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await uM({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return sM({ctx:e,tracer:t,command:n,disableCache:i,browser:this.browser,logger:a,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:p=>this.wrapElementTargetingCommand(p)});case"FILE_UPLOAD":{let p,g;if(n.fileSource.type==="URL"?(g=n.fileSource.url,p=await _C({uri:n.fileSource.url,logger:a,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(g=n.fileSource.name,p=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!p)throw new E("UserConfigurationError",`Attempted to use non-existent file for upload step: ${g}`);await this.browser.setFileChooserHandler({...p,filename:n.filename});break}case"AUTH_SAVE":return{data:await this.browser.saveAuthState(),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AUTH_LOAD":{let p;if(!n.storageState.trim())p=void 0;else if(p=await Xr({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof p!="object")throw new E("ActionFailureError",`Credentials must evaluate to an object (received ${typeof p} instead)`);let g;try{g=oE.optional().parse(p)}catch(h){throw new E("ActionFailureError",`Credentials provided do not follow the required format: ${h}`)}await this.browser.loadAuthState(g);break}case"ELEMENT_CHECK":{let p=(n.timeout??kt)*1e3,g=this.generator.getAgentConfig()?.assertion;if(iM(n.assertion)&&!n.useSelector&&n.target.type==="description"&&g&&g!=="v1"){let f={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let b=await ad({command:f,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory()});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${b.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:b.afterScreenshotOverride}}finally{f.cache?.memory&&Js(n,f.cache?.memory.traces,a)}}let h=await oM({command:n,tracer:t,timeoutMs:p,targetingWrapper:f=>this.wrapElementTargetingCommand(f),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!h.success,data:h.data,elementInteracted:h.elementInteractedDisplayString,thoughts:h.err?.message??h.thoughts??`Element assertion ${h.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let p=await Tr({action:async()=>cM({assertion:n.assertion,browser:this.browser,logger:a,timeout:n.timeout,signal:this.executeAbortController.signal,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:a});return{fail:!p.success,data:p.data,thoughts:p.success?"Page assertion passed.":p.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:!1}}case"REGISTER_REQUEST_LISTENER":{let p=new Xn(n.requestMatcher),g=this.browser.registerRequestListener(p);return this.registeredListeners[n.key]=g.then(async h=>await Rh(h)).catch(h=>{a.error({err:h},"Failed to get request listener response")}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"AWAIT_LISTENER":{let p=this.registeredListeners[n.key];if(!p)throw new E("ActionFailureError",`No listener registered with key: ${n.key}`);let g=n.timeout??10;return{data:await z(p,{milliseconds:g*1e3,message:`Request listener timed out after ${g} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let p=new Xn(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,{matches:g=>p.matches({url:g.request.url,method:g.request.method}),onRequestStart:(g,h)=>{this.recordedRequests[n.key][g]=Ku(h)},onRequestComplete:(g,h)=>{this.recordedRequests[n.key]?.[g]&&(this.recordedRequests[n.key][g]=Ku(h))}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let p=this.recordedRequests[n.key];if(!p)throw new E("ActionFailureError",`No recorder registered with key: ${n.key}`);return delete this.recordedRequests[n.key],{data:Object.values(p),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"SET_HEADER":{let p;return n.requestMatcher&&(p=new Xn(n.requestMatcher)),this.browser.setHeader(n.name,n.value,p),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"MOCK_ROUTE":return{data:{key:this.browser.registerMock(n.key,new Xn(n.requestMatcher),async(g,h)=>{let f=await Xr({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:g,response:h},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),b=iE.parse(f);return new Response(b.body,{status:b.status,headers:b.headers})},n.fetchOriginalResponse??!1)},succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"REMOVE_ROUTE_MOCK":return this.browser.removeMock(n.key),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"OFFLINE_MODE":return await this.browser.setOfflineMode(n.enable),{succeedImmediately:!1,urlAfterCommand:this.browser.url()};default:return(p=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}return{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}async getReverseMappedDescription({browserState:e,targetId:t,disableCache:n,screenshot:o}){return(await this.generator.getReverseMappedDescription({browserState:e,target:t,screenshot:o},{disableCache:n,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights()}async startRecordMode({params:e,abortController:t,isClickToRecord:n}){this.recordAbortController=t;let o=new ed({signal:t.signal,...e});return await this.browser.startRecording(this.recordAbortController.signal,o,n),o}async runSectionAutohealing(e){return this.generator.getAutohealingProposal(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})}async getFailureRecoveryPlan(e){return this.generator.getFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Se(this.logger)})}};import{cloneDeep as iH}from"lodash-es";import fM from"truncate-json";var pM=1e3,mM=5e6,aH=5*1024*1024;function SM(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=fM(JSON.stringify(n.data),1e3);n.data=JSON.parse(o)}}catch(o){e.error({err:o},"Failed to serialize individual result output data"),n.data=`Result output data could not be serialized: ${o}`}switch(n.type){case"MOBILE_PRESET_STEP":gM(n);break;case"MOBILE_AI_ACTION_STEP":case"MOBILE_MODULE_STEP":gM(n),SM(n.steps,e);break;default:{let o=n;throw new Error("If Typescript complains about the line below, you missed a case or break in the switch above")}}}}function gM(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function hM(r,e){let t=JSON.stringify(r),n=t.replaceAll("\\u0000","");if(t.length!==n.length){let o=t.indexOf("\\u0000");e.warn({input:t.slice(Math.max(0,o-500),Math.min(t.length,o+500))},"Database content violation: stripped unicode character from input")}return n}function dd(r,e){let t=iH(r);if(SM(t,e),t.length>pM)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,pM);let n=hM(t,e);if(n.length>mM)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>mM;)t.pop(),n=hM(t,e);let{jsonString:o}=fM(n,aH);try{return Ht.array().parse(JSON.parse(o))}catch(i){throw e.error({serialized:n,err:i},"Could not parse serialized results into JSON structure after processing"),i}}import{AsyncLocalStorage as sH}from"async_hooks";var al=new sH;function lH(r){al.enterWith({activeTracers:[r]})}function cH(r,e){let t=al.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function uH(r,e){let t=al.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return al.run({activeTracers:n},e)}var Nr={globalAls:al,initializeRootTracerContext:lH,withChildTracer:cH,withChildTracerAsync:uH};var yM=["signal","timeoutMs","timeoutMsg"],jo=class r{spans;parentSection;finished=!1;startTime;endTime;constructor(e){this.startTime=e?.startTime??Date.now(),this.spans=e?.subSpans??[],this.parentSection=e}startSection(e,t){let n={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},o=new r(n);try{return Nr.withChildTracer(o,()=>t(o,n))}catch(i){throw n.error=i instanceof Error?i.message:String(i),i}finally{o.finish(),this.addSpan(n)}}async startAsyncSection(e,t,n){let o={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},i=new r(o);this.addSpan(o);try{let a;return n?.signal||n?.timeoutMs?a=await Nr.withChildTracerAsync(i,()=>z(t(i,o),{milliseconds:n?.timeoutMs??1/0,signal:n?.signal,message:n?.timeoutMsg??`Operation timed out after ${n?.timeoutMs??1/0}ms (${e})`})):a=await Nr.withChildTracerAsync(i,()=>t(i,o)),a}catch(a){throw o.error=a instanceof Error?a.message:String(a),a}finally{i.finish()}}finish(){if(!this.finished){this.endTime=Date.now();for(let e of this.spans)e.endTime||(e.endTime=this.endTime,e.durationMs=e.endTime-e.startTime);this.parentSection&&(this.parentSection.endTime=this.endTime,this.parentSection.durationMs=this.parentSection.endTime-this.parentSection.startTime),this.finished=!0}}addSpan(e){this.spans.push(e)}startSpan(e,t,...n){let o={type:e,startTime:Date.now(),endTime:void 0,attributes:{}},i=n[0]??void 0;Object.assign(o,i??{});for(let s of yM)s in o&&delete o[s];this.addSpan(o);let a;try{a=t(o),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime}catch(s){throw o.error=s instanceof Error?s.message:String(s),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime,s}return a}async startAsyncSpan(e,t,...n){let o={type:e,startTime:Date.now(),endTime:void 0,attributes:{},subSpans:[]},i=n[0]??void 0;Object.assign(o,i??{});for(let c of yM)c in o&&delete o[c];this.addSpan(o);let a=new r(o),s;try{i?.signal||i?.timeoutMs?s=await Nr.withChildTracerAsync(a,()=>z(t(o),{milliseconds:i?.timeoutMs??1/0,signal:i?.signal,message:i?.timeoutMsg??`Operation timed out after ${i?.timeoutMs??1/0}ms${"name"in i?` (${i.name})`:""}`})):s=await Nr.withChildTracerAsync(a,()=>t(o)),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime}catch(c){throw o.error=c instanceof Error?c.message:String(c),o.endTime=Date.now(),o.durationMs=o.endTime-o.startTime,c}return s}getRootSpan(){return this.finished||this.finish(),{type:"SECTION",name:"root step span",startTime:this.startTime,endTime:this.endTime,subSpans:this.spans,attributes:{},durationMs:this.endTime?this.endTime-this.startTime:void 0}}};function ie(){let r=Nr.globalAls.getStore()?.activeTracers,e;return!r||r.length===0?e=void 0:e=r[r.length-1],e||new jo}async function bM(r){let{driver:e,abortSignal:t,logger:n,packageName:o}=r,i;try{i=await z(e.execute("mobile: shell",{command:"dumpsys",args:["activity","recents"]}),{signal:t,milliseconds:1e4})}catch(s){t?.throwIfAborted(),n.warn({err:s,packageName:o},"Failed to read recents output while removing package");return}if(typeof i!="string"){n.warn({packageName:o,outputType:typeof i},"Unexpected dumpsys output when removing package from recents");return}let a=dH(i,o);if(a.length!==0)for(let s of a){t?.throwIfAborted();try{await e.execute("mobile: shell",{command:"am",args:["stack","remove",s.toString()]}),n.info({packageName:o,taskId:s},"Removed task from recents")}catch(c){t?.throwIfAborted(),n.warn({err:c,packageName:o,taskId:s},"Failed to remove task from recents")}}}function dH(r,e){let t=r.split("Task{");if(t.length<=1)return[];let n=new Set;for(let o of t.slice(1)){let i=`Task{${o}`;if(!i.includes(e)||i.includes("app.lawnchair/.LawnchairLauncher"))continue;let a=i.match(/taskId=(\d+)/);if(!a)continue;let[,s]=a;if(!s)continue;let c=Number.parseInt(s,10);Number.isNaN(c)||n.add(c)}return Array.from(n)}function sl(r){let e=[],t=r.getAttribute("text")??"",n=r.getAttribute("hint")??"",o=r.getAttribute("showing-hint")==="true";t.trim()&&!o&&t.trim()!==n.trim()&&e.push(t.trim());for(let i of Array.from(r.childNodes??[]))if(i.nodeType===3){let a=i.nodeValue??"";a.trim()&&e.push(a.trim())}else if(i.nodeType===1){let a=sl(i);a.trim()&&e.push(a.trim())}return e.join(" ").trim()}import{mkdirSync as NH}from"fs";import{tmpdir as DH}from"os";import MM from"path";import{diff as LH}from"deep-object-diff";import{cloneDeep as xM}from"lodash-es";import AM from"fontoxpath";import pH from"@prettier/plugin-xml";import mH from"prettier";import{DOMParser as gH,XMLSerializer as hH}from"slimdom";var fH=new Set(["android.webkit.webview","com.facebook.react.views.webview.reactwebview","com.tencent.smtt.sdk.webview","com.tencent.smtt.sdk.x5webview","org.xwalk.core.xwalkview","com.uc.webview.export.webview"]);function ll(r){let e=r.toLowerCase();return e.endsWith("webview")||fH.has(e)}function SH(r){let e=["android.widget.","android.view.","android.webkit.","android.app.","android.support.","androidx.","com.android.inputmethod."];for(let t of e)if(r.startsWith(t))return r.substring(t.length);return r}var yH=new Set(["index","package","a11y-important","screen-reader-focusabl"]),bH=new Set(["selected","checked","checkable","clickable","enabled","focusable","focused","long-clickable","password","scrollable","selected","showing-hint","context-clickable","multiline","text-entry-key","heading","dismissable","screen-reader-focusable","content-invalid","a11y-focused"]),EH=new Set(["text","hint"]),TH=new Set(["live-region","drawing-order"]),vH=new Set(["displayed","enabled"]);function AH(r,e){let t={};for(let[n,o]of Object.entries(e))yH.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||bH.has(n)&&o==="false"||EH.has(n)&&o===""||vH.has(n)&&o==="true"||TH.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function EM(r,e,t){let{prunedDocument:n,idToElement:o,prunedIdToElement:i,idCounter:a,opts:s}=r,c=a.value++;t.setAttribute("id",String(c));let l={};for(let m of e.attributes){let p=m.name,g=m.value;g!=null&&(l[p]=String(g))}let u=AH(e.tagName,l);for(let[m,p]of Object.entries(u))t.setAttribute(m,p);if(o.set(c,e),i.set(c,t),ll(e.tagName)){let m=s?.injectedWebviewContent??"";if(s?.removeWebviewContent){for(;t.firstChild;)t.removeChild(t.firstChild);return}else if(!s?.disableMomenticAccessibilityTree&&m.trim().length>0){for(;t.firstChild;)t.removeChild(t.firstChild);m.trim().length>0&&t.appendChild(n.createCDATASection(`
4362
4362
  ${m}
4363
- `));return}}let d=Array.from(e.childNodes??[]);for(let m of d){let p=m.nodeType;if(p===3){let g=m.nodeValue;g&&g.trim().length>0&&t.appendChild(n.createTextNode(g));continue}if(p===1){let g=m;if(!CH(g,s?.viewportBounds))continue;let h=n.createElement(SH(g.tagName));EM(r,g,h),t.appendChild(h)}}}function RH(r,e,t,n){let o=r.parseFromString("<hierarchy/>","text/xml"),i=new Map,a={prunedDocument:o,idToElement:t,prunedIdToElement:i,idCounter:{value:0},opts:n},s=o.documentElement;EM(a,e,s);let c=new hH().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function TM(r,e){let t=new gH,n=t.parseFromString(r,"text/xml"),o=new Map,i=n.documentElement;if(!i)throw new E("InternalWebAgentError","No root element found in XML");if(i.tagName!=="hierarchy")throw new E("InternalWebAgentError","No hierarchy element found in XML");let{prunedDocument:a,prunedIdToElement:s,xml:c}=RH(t,i,o,e);return{xml:await mH.format(c,{parser:"xml",plugins:[pH],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function wH(r){let e=[],t=r;for(;t;){let n=t.tagName,o=t.parentElement,i=1;if(o){let a=Array.from(o.children).filter(s=>s.tagName===n);for(let s=0;s<a.length;s++)if(a[s]===t){i=s+1;break}}e.unshift(`${n}[${i}]`),t=o}return`/${e.join("/")}`}function pd(r,e){let t=r.idToElement.get(e);if(t)return wH(t)}function Xh(r,e){let t=r.idToElement.get(e);if(!t)return;let n=t.cloneNode(!0);for(let o of Array.from(n.children)){let i=o;for(let a of Array.from(i.children))i.removeChild(a)}return n.outerHTML}function $o(r){if(!r.hasAttribute("bounds"))return;let e=r.getAttribute("bounds");if(!e)return;let t=e.match(/\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);if(t){let n=parseInt(t[1],10),o=parseInt(t[2],10),i=parseInt(t[3],10),a=parseInt(t[4],10);if(Number.isFinite(n)&&Number.isFinite(o)&&Number.isFinite(i)&&Number.isFinite(a))return[n,o,i,a]}}function CH(r,e){if(!e)return!0;let t=$o(r);if(!t||t.length<4)return!0;let n=t[0],o=t[1],i=t[2],a=t[3];return!(i<=e.left||n>=e.right||a<=e.top||o>=e.bottom)}function vM(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function RM({requirements:r,element:e}){let t;if((r?.positionSpecificity||r?.shapeSpecificity)&&(t=$o(e),!t))throw new E("ActionFailureError","Element to cache has no bounds or unexpected bounds format");return{requiredText:r?.textRequired?e.getAttribute("text")??void 0:void 0,requiredAttributes:vM(e,r?.attributesRequired),requiredBounds:r?.boundsRequired,position:r?.positionSpecificity?{x1:t[0],y1:t[1],x2:t[2],y2:t[3],tolerance:r?.positionSpecificity}:void 0,shape:r?.shapeSpecificity?{width:t[2]-t[0],height:t[3]-t[1],tolerance:r?.shapeSpecificity}:void 0}}function CM({aiResponse:r,description:e,emulatorState:t}){let n=t.graph.idToElement.get(r.id);if(!n)throw new E("InternalWebAgentError",`Could not find node with id: ${r.id}`);let o=$o(n);if(!o)throw new E("InternalWebAgentError",`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=pd(t.graph,r.id)??"",a=Xh(t.graph,r.id)??"",s=RM({requirements:r.requirements,element:n}),c=[];r.additionalElements&&(c=r.additionalElements.map(({id:u,requirements:d})=>{let m=t.graph.idToElement.get(u);if(!m)return;let p=pd(t.graph,u);return p?{xPath:p,requirements:RM({requirements:d,element:m})}:void 0}).filter(u=>!!u));let l;if(ll(n.tagName)&&r.inWebview!==!1?l={type:"WEBVIEW",resolvedDescription:e,xPath:i}:l={type:"NATIVE",bounds:o,resolvedDescription:e,xPath:i,elementOnlySerializedXml:a,requirements:s,requiredRelatedElements:c},r.updatedMemory){let u={type:"GCS_TRACES",traces:r.updatedMemory};l.memory=u}return{target:l,resolvedNode:n}}function Jh(r){return r?.type==="WEBVIEW"?r.browserCache?.memory:void 0}var xH=.1,MH=.25;function md(r,e,t,n){let o=Math.abs(e-t);switch(r){case"precise":return o<=n;case"narrow":return o<=Math.abs(e)*xH;case"broad":return o<=Math.abs(e)*MH;case"irrelevant":return!0}}function _H(r,e){let t=e.x2-e.x1,n=(e.x1+e.x2)/2,o=(r[0]+r[2])/2;if(!md(e.tolerance,n,o,Math.min(1,t)))return!1;let i=e.y2-e.y1,a=(e.y1+e.y2)/2,s=(r[1]+r[3])/2;return md(e.tolerance,a,s,Math.min(1,i))}function IH(r,e){return md(e.tolerance,e.width,r[2]-r[0],Math.min(1,e.width))?md(e.tolerance,e.height,r[3]-r[1],Math.min(1,e.height)):!1}var wM=(r,e,t)=>{if(!e)return;let{requiredAttributes:n,requiredText:o,requiredBounds:i,position:a,shape:s}=e;if(o!==void 0&&o.length>0){let c=sl(r);if(c!==o)throw new E("ActionFailureError",`Resolved element text mismatch: expected ${o}, got ${c}`)}if(n)for(let[c,l]of Object.entries(n)){let u=r.getAttribute(c)??void 0;if(u!==l)throw new E("ActionFailureError",`Attribute ${c} mismatch: expected ${l}, got ${u}`)}if(i&&t&&!t.targetBounds.every((l,u)=>l===t.newElementBounds[u]))throw new E("ActionFailureError",`Bounds changed from [${t.targetBounds.join(",")} ] to [${t.newElementBounds.join(",")} ]`);if(a&&t&&!_H(t.newElementBounds,a))throw new E("ActionFailureError",`Position mismatch: expected ${JSON.stringify(a)}, got ${JSON.stringify(t.newElementBounds)}`);if(s&&t&&!IH(t.newElementBounds,s))throw new E("ActionFailureError",`Shape mismatch: expected ${JSON.stringify(s)}, got ${JSON.stringify(t.newElementBounds)}`)};async function gd(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ie();if(e.type==="WEBVIEW")return PH(e,r);let a=AM.evaluateXPathToFirstNode(e.xPath,o,null,null);if(!a)throw new E("ActionFailureError",`Could not resolve cached target via XPath: ${e.xPath}`);if(e.requiredRelatedElements){let m=e.requiredRelatedElements;i.startSection("Validate related elements are similar enough to past runs",()=>{for(let p of m){let g=AM.evaluateXPathToFirstNode(p.xPath,o);if(!g)throw new E("ActionFailureError",`Required related element not found for XPath: ${p.xPath}`);wM(g,p.requirements)}})}let s=$o(a);if(!s)throw new E("ActionFailureError","Resolved native element has no bounding box");wM(a,e.requirements,{targetBounds:e.bounds,newElementBounds:s});let c;for(let[m,p]of n.idToElement.entries())if(p===a){c=m;break}let l=e.elementOnlySerializedXml,u=e.xPath;return c!==void 0&&(l=Xh(n,c)??l,u=pd(n,c)??u),{resolvedTarget:{...e,resolvedNode:a,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function PH(r,e){let{stateManager:t,logger:n,signal:o}=e,i=ie(),a=await t.getActiveWebview();if(!a||!a.browserController)throw n.error({webview:a?{...a,browserController:!!a.browserController}:void 0},"resolveTargetCacheInWebView: No browser controller attached"),new E("InternalWebAgentError","No browser controller is attached to the requested webview");let s=a.browserController.browser;if(!r.browserCache)throw n.error({target:r},"resolveTargetCacheInWebView: No browser target available on cache"),new E("InternalWebAgentError","No browser target available on cache");let c=r.browserCache,l=await i.startAsyncSection("Resolve target in webview",()=>s.resolveTarget(null,c,{logger:n,signal:o,skipWaitForPageLoad:!0,skipSavingVisualAttributes:!0}));return{resolvedTarget:{...r,controller:a.browserController,resolution:l}}}function qo(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;sc(e)&&(e[t]={...e[t],[n]:Ri.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date,e[t].updatedAtLoggerTags=Se(r.logger)))}function hd(r){if(r.type==="WEBVIEW")return{type:"WEBVIEW",resolvedDescription:r.resolvedDescription,xPath:r.xPath,browserCache:r.browserCache,memory:r.memory};let{resolvedNode:e,...t}=r;return{...t}}var Ze=class{driver;generator;stateManager;logger;fixtures;aborter;orgId;aiSettings;constructor(e){this.stateManager=e.stateManager,this.generator=e.generator,this.driver=e.driver,this.logger=e.logger,this.fixtures=e.fixtures,this.aborter=e.aborter,this.orgId=e.orgId,this.aiSettings=e.aiSettings}shouldUseMemoryForCommand(e){return this.aiSettings?.useMemory&&!e?.disableCache}async findElement({description:e,tracer:t,skipFetchingFullWebviewContent:n=!1,removeWebviewContent:o=!1,useMemory:i=!1,memory:a,webviewMemory:s,metadata:c}){let l=this.logger.child({...c}),u=await t.startAsyncSection("Get emulator state",async()=>{let f=await this.stateManager.getDomState({skipFetchingFullWebviewContent:n,removeWebviewContent:o}),b=await this.stateManager.getCurrentScreenshotPngString();return{emulatorState:f,screenshot:b}}),d;try{d=await t.startAsyncSpan("AI_LOCATOR_CALL",async f=>{let b=await this.generator.getMobileElementLocation({description:e,screenXml:u.emulatorState.graph.xml,screenshot:u.screenshot,memory:i?a:void 0},{logger:l,loggerTags:Se(l),abortSignal:this.aborter.controller?.signal,useMemory:i,agentConfigVersion:this.aiSettings.agentConfig?.["mobile-locator"]});return f.result=b,b})}catch(f){throw this.throwIfAborted(),l.error({err:f},"Failed to locate element"),new E("InternalWebAgentError",`Failed to locate element: ${f instanceof Error?f.message:f}`,{errOptions:{cause:f}})}if(d.id===-1)throw new E("NoMatchingElementError",d.thoughts??"No matching element found");let{target:m,resolvedNode:p}=CM({aiResponse:d,description:e,emulatorState:u.emulatorState});if(m.type==="NATIVE")return t.addSpan({type:"TARGET_RESOLUTION",startTime:Date.now(),endTime:Date.now(),result:{serializedElement:m.elementOnlySerializedXml},attributes:{},subSpans:[]}),{resolvedTarget:{...m,resolvedNode:p},thoughts:d.thoughts};let{browserLocateResult:g,browserController:h}=await t.startAsyncSpan("TARGET_RESOLUTION",async f=>{let b=await this.stateManager.getActiveWebview();if(!b||!b.browserController)throw new E("InternalWebAgentError","No browser controller is attached to the requested webview");let T=await b.browserController.locateElement({description:e,disableCache:!1,useMemory:i,memory:i?s:void 0,logger:this.logger,skipWait:!0,skipSavingVisualAttributes:!0});return f.result={serializedElement:T.target.nodeOnlySerializedHtml??"Unknown HTML element in webview"},{browserLocateResult:T,browserController:b.browserController}});return{resolvedTarget:{...m,controller:h,resolution:g.resolution,browserCache:g.target},thoughts:g.thoughts}}async wrapTargetingAction(e){let{action:t,description:n,command:o,cacheKey:i="cache",targetName:a="target",cacheIsInvalidAfterResolution:s,tracer:c,skipFetchingFullWebviewContent:l=!1,removeWebviewContent:u=!1}=e,d,m={commandId:o.id};if(i==="cache"&&"cache"in o&&o.cache){let b=o.cache;a==="target"&&"target"in b?d=b.target:a==="fromTarget"&&"fromTarget"in b?d=b.fromTarget:a==="toTarget"&&"toTarget"in b&&(d=b.toTarget)}let p=!1,g=xM(d),h;if(o.disableCache&&(this.logger.debug({command:o},"Cache explicitly disabled for command"),p=!0,g=void 0),s&&(p=!0,g=void 0),g&&g?.resolvedDescription!==n&&(this.logger.info({description:n,cacheDescription:g?.resolvedDescription},"Cache description mismatch, clearing it automatically"),p=!0,g=void 0),!g){this.logger.info({description:n,cacheBustedBeforeAction:p},"Prompting AI for a new element location");let b=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:this.shouldUseMemoryForCommand(o),memory:d?.memory,webviewMemory:Jh(d),metadata:m});h=b.thoughts;let T=await t(b.resolvedTarget);return qo({command:o,cacheKey:i,targetName:a,updatedCache:b.resolvedTarget,updatedWithAI:!0,logger:this.logger}),{result:T,thoughts:h}}let f;try{await this.stateManager.waitForPageSourceStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before cache resolution"}),f=await this.stateManager.getDomState({skipFetchingFullWebviewContent:g.type==="NATIVE"});let{resolvedTarget:b,updatedCache:T}=await c.startAsyncSpan("CACHE_RESOLUTION",async x=>{let{resolvedTarget:R}=await gd({target:g,domState:f,stateManager:this.stateManager,logger:this.logger}),O=hd(R),v=LH(g,O);return v&&Object.keys(v).length>0&&this.logger.info({cacheDiffs:v},"Successfully resolved target with cache"),x.attributes.serializedElement=R.type==="WEBVIEW"?R.browserCache?.nodeOnlySerializedHtml??"Unknown HTML element in webview":R.elementOnlySerializedXml,{resolvedTarget:R,updatedCache:O}}),w=await t(b);return qo({command:o,cacheKey:i,targetName:a,updatedCache:T,updatedWithAI:!1,logger:this.logger}),g.type!=="WEBVIEW"&&He.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.21.1"]),{result:w,thoughts:"Successfully executed preset action with cache"}}catch(b){g.type!=="WEBVIEW"&&He.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.21.1"]),this.throwIfAborted(),this.logger.warn({err:b},"Failed to resolve target cache, retrying with AI");let T=this.shouldUseMemoryForCommand(o),w=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:T,memory:g?.memory,webviewMemory:Jh(g),metadata:m});h=w.thoughts;let x=await t(w.resolvedTarget);return qo({command:o,cacheKey:i,targetName:a,updatedCache:w.resolvedTarget,updatedWithAI:!0,logger:this.logger}),{result:x,thoughts:h}}}constructPerformerParams(){return{stateManager:this.stateManager,generator:this.generator,driver:this.driver,logger:this.logger,fixtures:this.fixtures,aborter:this.aborter,orgId:this.orgId,aiSettings:this.aiSettings}}getBoundsFromNativeCache(e){let[t,n,o,i]=e.bounds;if(t===void 0||n===void 0||o===void 0||i===void 0)throw new E("ActionFailureError",`Native element cache has incomplete bounds: [${e.bounds.join(", ")}]`);return{left:t,top:n,width:o-t,height:i-n}}calculateSwipeCoordinates({containerBounds:e,direction:t,desiredDelta:n,edgeMarginPercent:o=.1}){let i=e.left+e.width/2,a=e.top+e.height/2;if(t==="up"||t==="down"){let s=e.height*o,c=e.top+s,l=e.top+e.height-s,u=l-c,d=Math.min(Math.abs(n),u);return{startX:i,startY:t==="down"?l:c,actualDelta:d}}else{let s=e.width*o,c=e.left+s,l=e.left+e.width-s,u=l-c,d=Math.min(Math.abs(n),u);return{startX:t==="right"?l:c,startY:a,actualDelta:d}}}invertDirection(e){if(e==="up")return"down";if(e==="down")return"up";if(e==="left")return"right";if(e==="right")return"left";throw new Error(`Unreachable code: ${e}`)}async performRawSwipe({startX:e,startY:t,deltaPixels:n,direction:o,durationMs:i=300}){let a=Math.abs(n),s=e,c=t;o==="up"||o==="down"?c=o==="up"?t-a:t+a:s=o==="left"?e-a:e+a,await this.driver.performActions([{type:"pointer",id:"finger1",parameters:{pointerType:"touch"},actions:[{type:"pointerMove",duration:0,x:e,y:t},{type:"pointerDown",button:0},{type:"pause",duration:100},{type:"pointerMove",duration:i,x:s,y:c},{type:"pointerUp",button:0}]}]),await this.driver.releaseActions()}throwIfAborted(){this.aborter.controller?.signal.throwIfAborted()}get abortSignal(){return this.aborter.controller?.signal}get aiSettingsCopy(){return xM(this.aiSettings)}};function kH(r){let e={relativePosition:r.relativePosition};if(r.doubleTap&&r.longPress)throw new Error("UserConfigurationError: Cannot specify both doubleTap and longPress");return r.doubleTap?{...e,doubleTap:!0,doubleTapDelayMs:r.doubleTapDelayMs}:r.longPress?{...e,longPress:!0,longPressDurationMs:r.longPressDurationMs}:e}var ia=class extends Ze{async tapOnAbsoluteCoordinates(e){let t=e.x,n=e.y;if(this.logger.info({x:t,y:n},"Tap at coordinates"),e.longPress)return await this.driver.executeScript("mobile: longClickGesture",[{x:t,y:n,duration:e.longPressDurationMs??2e3}]);if(e.doubleTap){await this.driver.tap({x:t,y:n});let o=e.doubleTapDelayMs??100;await new Promise(i=>setTimeout(i,o))}await this.driver.tap({x:t,y:n})}async tapOnNativeTarget(e,t){let[n,o,i,a]=e.bounds,s=i-n,c=a-o,l=t?.relativePosition?.x??s/2,u=t?.relativePosition?.y??c/2;l=Math.max(0,Math.min(l,s)),u=Math.max(0,Math.min(u,c));let d=n+l,m=o+u;return await this.tapOnAbsoluteCoordinates({x:d,y:m,...t}),{x:d,y:m}}async tapOnWebviewTarget(e,t){let{controller:n}=e;return(await n.browser.click(e.resolution,{createIsolatedFolder:()=>{let i=Math.random().toString(36).substring(4),a=MM.join(DH(),"momentic","downloads"),s=MM.join(a,this.orgId,i);return NH(s,{recursive:!0}),s}},{delayMs:t?.longPress?t?.longPressDurationMs??2e3:void 0,relativePosition:t?.relativePosition,doubleClick:t?.doubleTap})).coordinates}async tapOnTarget({target:e,options:t}){return await ie().startAsyncSpan("EMULATOR_INTERACTION",async o=>{o.attributes.options=t,"type"in e&&e.type==="NATIVE"?o.attributes.point=await this.tapOnNativeTarget(e,t):(o.withinWebview=!0,o.attributes.point=await this.tapOnWebviewTarget(e,t))},{name:"Tap on target"})}async executeTap({command:e}){let t=ie(),n=kH(e);if(e.target.type==="coordinates"){let a=await this.driver.getWindowSize(),s=e.target.xPercent*a.width,c=e.target.yPercent*a.height;return await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.tapOnAbsoluteCoordinates({...n,x:s,y:c})},{name:`Tap at coordinates ${s}, ${c}`}),{success:!0,message:`Tapped at ${s}, ${c}`}}let o=e.target.description,{thoughts:i}=await this.wrapTargetingAction({command:e,tracer:t,action:a=>this.tapOnTarget({target:a,options:n}),description:o});return{success:!0,message:i}}};var Zn=class extends Ze{async doPress({keycode:e,longPress:t}){await ie().startAsyncSpan("EMULATOR_INTERACTION",async()=>this.driver.executeScript("mobile: pressKey",[{keycode:e,isLongPress:t}]),{name:"Send key events to emulator"})}};var _M=25,fd=class extends Ze{async doType(e){let t=ie();if(!e.target){if(e.clearContent)throw new E("UserConfigurationError","Clearing content is only supported when a target is provided to the Type step");return await this.stateManager.waitForPageSourceStability({timeoutMs:3e3,signal:this.aborter.controller?.signal,reason:"Waiting for page to stabilize before typing"}),await this.sendKeys(e),{success:!0,message:"Successfully executed type action"}}if(e.target.type!=="description")throw new E("UserConfigurationError","x/y targets are not supported for the Type step");let{thoughts:n}=await this.wrapTargetingAction({command:e,tracer:t,action:async o=>{"type"in o&&o.type==="NATIVE"?await this.doNativeType(e,o):await this.doWebviewType(e,o)},description:e.target.description});return{success:!0,message:n}}async doWebviewType(e,t){await ie().startAsyncSpan("EMULATOR_INTERACTION",async o=>{o.withinWebview=!0;let i={clearContent:e.clearContent,forceClearContent:e.forceClearContent,delay:e.keyPressDelayMs??_M};o.attributes.options=i;let{controller:a,resolution:s}=t;await a.browser.typeIntoTarget(e.text,s,i)},{name:"Typing within web view"})}async doNativeType(e,t){let n=new ia(this.constructPerformerParams());e.clearContent?(await n.tapOnNativeTarget(t,{longPress:!0}),await this.clearContent()):await n.tapOnNativeTarget(t),await this.stateManager.waitForPageSourceStability({timeoutMs:3e3,signal:this.aborter.controller?.signal,reason:"Waiting for keyboard to appear before typing"}),await this.sendKeys(e)}async sendKeys(e){let t=ie(),n=e.keyPressDelayMs??_M;await t.startAsyncSection("Waiting for system keyboard to open",async(o,i)=>{let a=Date.now();for(;Date.now()-a<3e3;){this.throwIfAborted();let s=Date.now();if(await this.driver.isKeyboardShown())return;let c=Date.now()-s;c<500&&await new Promise(l=>setTimeout(l,500-c))}i.attributes.timedOut=!0}),n?await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.driver.updateSettings({keyInjectionDelay:n}),await this.driver.keys(e.text),await this.driver.updateSettings({keyInjectionDelay:0})},{name:"Typing keys with a delay"}):await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.driver.keys(e.text)},{name:"Typing keys"})}async clearContent(){let e=ie();try{await e.startAsyncSection("Clearing any content from the focused field",()=>this.clearContentHelper())}catch(t){this.logger.warn({err:t},"Failed to find select all button, continuing...")}}async clearContentHelper(){let e=this.driver.$('//android.widget.LinearLayout[@content-desc="Select all" and @clickable="true"]');await e.waitForExist({timeout:750}),await e.click(),await new Zn(this.constructPerformerParams()).doPress({keycode:67})}};import Zt from"zod";var IM=.8,eo=.2,FH=Zt.object({navigationBar:Zt.object({visible:Zt.boolean(),x:Zt.number(),y:Zt.number(),width:Zt.number(),height:Zt.number()}),statusBar:Zt.object({visible:Zt.boolean(),x:Zt.number(),y:Zt.number(),width:Zt.number(),height:Zt.number()})}),aa=class extends Ze{async getHardcodedScrollableElementBounds(e,t){let n;switch(e.type){case"SCREEN":n=this.getInsetBoundsFromViewport(t);break;case"OPEN_APP":try{let o=FH.parse(await this.driver.executeScript("mobile: getSystemBars",[]));n=this.getInsetBoundsFromViewport(t),o.navigationBar.visible&&(n.height=Math.max(1,n.height-o.navigationBar.height)),o.statusBar.visible&&(n.top+=o.statusBar.height,n.height=Math.max(1,n.height-o.statusBar.height))}catch(o){this.logger.warn({err:o},"Failed to get system bars, using hardcoded bounds"),n=this.getInsetBoundsFromViewport(t)}break;case"OPEN_WEBVIEW":{let o=await this.stateManager.getActiveWebviewNodes();if(o.length===0&&(await this.stateManager.refreshWebviewsManually("get active webview nodes"),o=await this.stateManager.getActiveWebviewNodes()),o.length===0)throw new Error("No active webviews found");if(o.length>1){let a=o.map(s=>({id:s.id,ele:s.originalElement.outerHTML,bounds:s.bounds}));throw new Error(`Multiple active webviews found. Momentic currently only supports a single active webview at a time. Discovered nodes: ${JSON.stringify(a)}`)}let i=o[0]?.bounds;if(!i)throw new Error("No bounds found for active webview");n=this.getInsetBoundsFromBounds(i);break}default:{let o=e;throw new Error("If Typescript complains about the line above, you missed a switch case")}}return n}getInsetBoundsFromViewport(e){let t=Math.floor(e.width*eo),n=Math.floor(e.height*eo);return{left:e.x+t,top:e.y+n,width:Math.max(1,e.width-t*2),height:Math.max(1,e.height-n*2)}}getInsetBoundsFromBounds(e){let t=e[0],n=e[1],o=e[2],i=e[3],a=o-t,s=i-n,c=Math.floor(a*eo),l=Math.floor(s*eo);return{left:t+c,top:n+l,width:Math.max(1,a-c*2),height:Math.max(1,s-l*2)}}async executeSwipe(e){let t=ie();if(e.scrollableElement.type==="CUSTOM_COORDINATES"){let{startX:o,startY:i,deltaPixels:a}=e.scrollableElement;return await t.startAsyncSpan("EMULATOR_INTERACTION",async s=>{s.attributes.startX=o,s.attributes.startY=i,s.attributes.deltaPixels=a,s.attributes.direction=e.direction,await this.performRawSwipe({startX:o,startY:i,deltaPixels:a,direction:e.direction,durationMs:e.durationMs})},{name:`Swipe ${e.direction} using raw coordinates`}),{success:!0,message:"Successfully executed swipe action"}}if(e.scrollableElement.type!=="CUSTOM"){let o=await this.driver.getWindowRect(),i=await this.getHardcodedScrollableElementBounds(e.scrollableElement,o);return await t.startAsyncSpan("EMULATOR_INTERACTION",async a=>{await this.swipeByAbsoluteCoordinates({span:a,direction:e.direction,percent:e.viewportPercent,durationMs:e.durationMs,containerBounds:i})},{name:`Swipe ${e.direction} in the entire ${e.scrollableElement.type.toLowerCase()}`}),{success:!0,message:"Successfully executed swipe action"}}let{thoughts:n}=await this.wrapTargetingAction({command:e,description:e.scrollableElement.target.description,action:async o=>ie().startAsyncSpan("EMULATOR_INTERACTION",async a=>"type"in o&&o.type==="NATIVE"?this.scrollInNativeContainer({span:a,cmd:e,target:o}):(a.withinWebview=!0,this.swipeInWebview({span:a,cmd:e,target:o})),{name:`Swipe ${e.direction} in the specified container`}),tracer:t});return{success:!0,message:n}}async scrollInNativeContainer({span:e,cmd:t,target:n}){let o=n.bounds[2]-n.bounds[0],i=n.bounds[3]-n.bounds[1],a=Math.floor(o*eo),s=Math.floor(i*eo);await this.swipeByAbsoluteCoordinates({span:e,direction:t.direction,percent:t.viewportPercent,durationMs:t.durationMs,containerBounds:{left:n.bounds[0]+a,top:n.bounds[1]+s,width:Math.max(1,o-a*2),height:Math.max(1,i-s*2)}})}async swipeInWebview({span:e,cmd:t,target:n}){let{controller:o,resolution:i}=n;if(!o.browser.getViewport())throw new Error("Failed to get viewport size from webview");let s=t.direction==="down"||t.direction==="up",c=await i.locator.boundingBox();if(!c)throw new Error("Failed to get bounds for webview container");let l=Math.floor(c.width*eo),u=Math.floor(c.height*eo),d=Math.max(1,c.width-l*2),m=Math.max(1,c.height-u*2),p={x:c.x+l+d/2,y:c.y+u+m/2},g=(s?m:d)*(t.viewportPercent??IM)*(s?t.direction==="down"?1:-1:t.direction==="right"?1:-1);e.attributes.startPoint=p,e.attributes.scrollPixelAmount=g,await o.browser.mouseDragUsingVisualCoordinates({deltaX:s?0:g,deltaY:s?g:0,steps:10,dragDurationMs:t.durationMs,fromTarget:p})}async swipeByAbsoluteCoordinates({span:e,direction:t,percent:n=IM,durationMs:o=500,containerBounds:i}){e.attributes.containerBounds=i;let a,s;t==="up"||t==="down"?(a=i.height*n,s=Math.floor(a/(o/1e3))):(a=i.width*n,s=Math.floor(a/(o/1e3))),e.attributes.pixelDelta=a,e.attributes.pixelsPerSecond=s,await this.driver.executeScript("mobile: swipeGesture",[{...i,direction:t,percent:n,speed:s}])}};import{createHash as BH}from"crypto";import zH from"pixelmatch";import{_android as GH,chromium as HH}from"playwright";import{PNG as FM}from"pngjs";import{z as qe}from"zod";var PM=qe.object({"Android-Package":qe.string(),Browser:qe.string(),"Protocol-Version":qe.string(),"User-Agent":qe.string(),"V8-Version":qe.string(),"WebKit-Version":qe.string(),webSocketDebuggerUrl:qe.string()}),OM=qe.object({description:qe.string(),devtoolsFrontendUrl:qe.string(),id:qe.string(),title:qe.string(),type:qe.string(),url:qe.string(),webSocketDebuggerUrl:qe.string()}),LM=qe.object({proc:qe.string(),webview:qe.string(),webviewName:qe.string()}),NM=qe.array(LM.extend({info:PM.optional(),pages:qe.array(OM).optional()})),MNe=qe.array(LM.extend({info:PM,pages:qe.array(OM)}));function Qh(r,e,t=.01){let n=Buffer.from(r,"base64"),o=Buffer.from(e,"base64"),i=FM.sync.read(n),a=FM.sync.read(o);if(i.width!==a.width||i.height!==a.height)return 100;let s=i.width,c=i.height,l=Buffer.alloc(s*c*4);return zH(i.data,a.data,l,s,c,{threshold:t})/(s*c)*100}var Sd=class r{driver;limbarClient;device;currentContext;logger;webviews=new Map;fixtures;orgId;options;aborter;constructor({driver:e,context:t,limbarClient:n,logger:o,device:i,fixtures:a,orgId:s,options:c,aborter:l}){this.driver=e,this.limbarClient=n,this.device=i,this.currentContext=t,this.logger=o,this.fixtures=a,this.orgId=s,this.options=c,this.aborter=l;for(let u of["SIGINT","SIGTERM"])process.on(u,async()=>{await this.cleanupWebviews()})}static async init({driver:e,logger:t,fixtures:n,limbarClient:o,orgId:i,adbPort:a,options:s,aborter:c,playwrightDevice:l}){let u=await e.getContext(),d=typeof u=="string"?u:u.id,m;if(l)m=l;else{let g=(await GH.devices()).filter(h=>h._initializer?.serial?.endsWith(a.toString())||h._initializer?.serial?.endsWith((a-1).toString()));if(t.warn({devices:g.map(h=>({serial:h._initializer?.serial,model:h._initializer?.model}))},"No playwright device provided, using ADB to find device"),g.length===0)throw new E("UserInfrastructureError",`Momentic found no devices listening on port ${a} or ${a-1}. This can occur if Android Studio reuses existing emulators. Please run 'adb emu kill' and 'adb disconnect' and retry.`);if(g.length>1)throw new E("UserInfrastructureError",`Momentic found multiple devices on the ports ${a} or ${a-1}. This can occur if Android Studio reuses existing emulators. Please run 'adb emu kill' and 'adb disconnect' and retry.`);m=g[0]}let p=new r({driver:e,context:d,logger:t,device:m,fixtures:n,orgId:i,options:s,aborter:c,limbarClient:o});return p.startWebviewRefreshInterval(),p}async getContexts(){let e=await this.driver.getContexts({}),t=Array.from(this.webviews.values());return{contexts:e,webviews:t.map(n=>({contextId:n.contextId,packageName:n.packageName,active:n.active,hasPlaywright:!!n.browserController,lastSeen:n.lastSeen,socketName:n.socketName}))}}async getRawScreenshotBase64(e=2){let t=ie(),n;for(let o=0;o<e;o++)try{return await t.startAsyncSpan("EMULATOR_READ_STATE",async()=>await this.driver.takeScreenshot(),{name:"Take screenshot",signal:this.aborter.controller?.signal,timeoutMs:3e3})}catch(i){if(n=i,this.logger.warn({err:i},"Failed to take screenshot"),o===e-1)throw i}throw new E("InternalWebAgentError",`Failed to take screenshot: ${n}`)}async getCurrentScreenshotPngString(){return`data:image/png;base64,${await this.getRawScreenshotBase64(1)}`}async waitForScreenshotStability({timeoutMs:e,signal:t,reason:n,tolerancePercent:o=1}){await ie().startAsyncSpan("WAIT_FOR_SCREENSHOT_STABILITY",async i=>{i.attributes.reason=n;let a=Date.now(),s,c,l=!1;for(;Date.now()-a<e;){c&&c<500&&await q(500-c,t),t?.throwIfAborted();let u=Date.now();if(!s){s=await this.getRawScreenshotBase64(),c=u-a;continue}let d=await this.getRawScreenshotBase64();if(c=u-a,Qh(s,d)<=o){l=!0;break}s=d}l||(i.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for screenshot stability"))})}async waitForPageSourceStability({timeoutMs:e,signal:t,reason:n}){await ie().startAsyncSpan("WAIT_FOR_PAGE_STABILITY",async o=>{o.attributes.reason=n;let i=Date.now(),a,s,c=!1;for(;Date.now()-i<e;){s&&s<250&&await q(250-s,t),t?.throwIfAborted();let l=Date.now(),u;try{u=await this.getPageSource()}catch(m){this.logger.warn({err:m},"Failed to get page source during stability wait"),s=Date.now()-l;continue}let d=BH("md5").update(u).digest("hex");if(s=Date.now()-l,a&&a===d){c=!0;break}a=d}c||(o.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for page source stability"))})}async getCurrentPackage(){let e=await this.driver.execute("mobile: getCurrentPackage");return typeof e=="string"?e:void 0}async getActiveWebviewNodes(){let t=(await this.getDomState({skipFetchingFullWebviewContent:!0,removeWebviewContent:!0})).graph,n=await this.getCurrentPackage(),o=[];for(let[i,a]of t.idToElement.entries()){if(o.some(l=>l.id===i))continue;let s=a.getAttribute("content-desc");(ll(a.tagName)||n==="com.android.chrome"&&s==="Web View"&&a.tagName.toLowerCase().startsWith("frame"))&&o.push({id:i,originalElement:a,bounds:$o(a)})}return o}async getActiveWebviewContent(){let e=await this.getActiveWebview();if(!e||!e.browserController)return;this.throwIfAborted();let t=e.browserController;return(await ie().startAsyncSpan("EMULATOR_READ_STATE",()=>t.getBrowserState({abortSignal:this.aborter.controller?.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:this.logger,serializationOpts:{noId:!0}}),{name:"Get webview content",signal:this.aborter.controller?.signal})).serializedTree}async getDomState(e){return await ie().startAsyncSection("Get emulator state XML",async()=>{let n;if(!e?.skipFetchingFullWebviewContent)try{n=await this.getActiveWebviewContent()}catch(c){this.logger.error({err:c},"Could not get webview info to get the nested DOM state")}this.throwIfAborted();let i=e?.filterOffscreenElements??!0?await this.getViewportBounds():void 0,a=await this.getPageSource();return{graph:await TM(a,{injectedWebviewContent:n,disableMomenticAccessibilityTree:this.options.disableMomenticAccessibilityTree,removeWebviewContent:e?.removeWebviewContent,viewportBounds:i}),context:this.currentContext}},{timeoutMs:15e3})}async getPageSource(){return await ie().startAsyncSpan("EMULATOR_READ_STATE",()=>this.driver.getPageSource(),{name:"Get Android page source",signal:this.aborter.controller?.signal})}async getViewportBounds(){let e=await this.driver.getWindowRect();return{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height}}refreshPromise;refreshInterval;async refreshWebviewsManually(e){if(this.refreshPromise){await this.refreshPromise;return}clearInterval(this.refreshInterval),this.refreshPromise=this.doRefreshWebview(e).catch(t=>{this.logger.warn({err:t},"Error refreshing webviews, continuing...")}).finally(()=>{this.refreshPromise=void 0,this.startWebviewRefreshInterval()})}startWebviewRefreshInterval(){this.refreshInterval||(this.refreshInterval=setInterval(()=>{this.refreshPromise=this.doRefreshWebview("auto refresh").catch(e=>{this.logger.warn({err:e},"Error refreshing webviews, continuing...")}).finally(()=>{this.refreshPromise=void 0})},15e3))}async doRefreshWebview(e){this.logger.info({reason:e},"Refreshing webviews"),await this.getPageSource(),this.throwIfAborted();let t=await this.getCurrentPackage();if(t==="com.android.permissioncontroller")return;let n=await this.getDetailedContexts();if(!n){this.logger.warn("No context details, not proceeding with refreshing webviews");return}let o=Date.now(),i=new Set;for(let a of n){if(this.throwIfAborted(),a.webview==="NATIVE_APP")continue;let s=a.info["Android-Package"];if(t&&s!==t&&this.logger.warn({packageName:s,currentPkgName:t},"Ignoring webview not in the active package"),i.add(a.webview),!this.webviews.has(a.webview)||!this.webviews.get(a.webview)?.active){let c={contextId:a.webview,packageName:s,active:!1,lastSeen:o,socketName:a.proc.startsWith("@")?a.proc.substring(1):a.proc};this.logger.info({contextId:c.contextId,packageName:c.packageName,socketName:c.socketName},"New webview detected"),this.webviews.set(a.webview,c);let l;if(s==="com.android.chrome"?(this.logger.info({webviewInfo:c},`Connecting Playwright to Android Chrome: ${a.webview}`),l=await this.connectPlaywrightToChrome(c),this.logger.info(`Connected Playwright to Android Chrome: ${a.webview}`)):(this.logger.info({webviewInfo:c},`Connecting Playwright to webview: ${a.webview}`),l=await this.connectPlaywrightToWebview(s,c.socketName),l&&this.logger.info(`Connected Playwright to webview ${a.webview}`)),!l)continue;c.browserController=l,c.active=!0}}for(let[a,s]of this.webviews.entries())!i.has(a)&&s.active&&(this.logger.info(`Disconnecting dead webview ${a}`),this.disconnectPlaywrightFromWebview(s),s.active=!1);this.logger.info("Refreshed webviews")}async getActiveWebview(){await this.refreshPromise;let e=await this.driver.execute("mobile: getCurrentPackage"),t=async()=>{e!==void 0&&typeof e!="string"&&this.logger.warn({currentPkg:e},"Unexpected getCurrentPackage result"),this.logger.info({currentPkg:e,allWebviews:Array.from(this.webviews.values()).map(i=>({contextId:i.contextId,packageName:i.packageName,active:i.active}))},"getActiveWebview: filtering webviews");let o=[];for(let i of this.webviews.values())i.packageName===e&&i.active&&o.push(i);return this.logger.info(`getActiveWebview: found ${o.length} matching webviews`),o},n=await t();if(n.length===0&&(await ie().startAsyncSection("Refresh webviews",async()=>{await this.refreshWebviewsManually("no matching webview during getActiveWebview")}),n=await t()),n.length>1)throw new E("UserInfrastructureError","Multiple active webviews in a single package is currently not supported");return n[0]}getDeviceSerial(){let e=this.driver.capabilities,t=n=>{if(!e||typeof e!="object")return;let o=e[n];return typeof o=="string"?o:void 0};return t("deviceUDID")||t("udid")||t("appium:udid")||t("appium:deviceUDID")}async executeRawADBCommand(e){let t=this.getDeviceSerial(),n=e.trim().split(/\s+/).filter(i=>i.length>0);this.logger.info({serial:t,cmdArgs:n},"Executing ADB command");let o=await lt(n,{serial:t,timeoutMs:15e3,throwOnError:!0});return this.logger.info({result:o},"ADB command result"),o}async cleanupWebviews(){this.refreshInterval&&(clearInterval(this.refreshInterval),this.refreshInterval=void 0);for(let[e,t]of this.webviews.entries())this.logger.info(`Disconnecting webview ${e}`),this.disconnectPlaywrightFromWebview(t),t.active=!1}async getDetailedContexts(){return await ie().startAsyncSpan("EMULATOR_READ_STATE",async()=>{let t=await this.driver.execute("mobile: getContexts");this.aborter.controller?.signal.throwIfAborted();let n;try{n=NM.parse(t)}catch(o){throw new E("InternalWebAgentError",`Failed to parse contexts. Original error:
4363
+ `));return}}let d=Array.from(e.childNodes??[]);for(let m of d){let p=m.nodeType;if(p===3){let g=m.nodeValue;g&&g.trim().length>0&&t.appendChild(n.createTextNode(g));continue}if(p===1){let g=m;if(!CH(g,s?.viewportBounds))continue;let h=n.createElement(SH(g.tagName));EM(r,g,h),t.appendChild(h)}}}function RH(r,e,t,n){let o=r.parseFromString("<hierarchy/>","text/xml"),i=new Map,a={prunedDocument:o,idToElement:t,prunedIdToElement:i,idCounter:{value:0},opts:n},s=o.documentElement;EM(a,e,s);let c=new hH().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function TM(r,e){let t=new gH,n=t.parseFromString(r,"text/xml"),o=new Map,i=n.documentElement;if(!i)throw new E("InternalWebAgentError","No root element found in XML");if(i.tagName!=="hierarchy")throw new E("InternalWebAgentError","No hierarchy element found in XML");let{prunedDocument:a,prunedIdToElement:s,xml:c}=RH(t,i,o,e);return{xml:await mH.format(c,{parser:"xml",plugins:[pH],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function wH(r){let e=[],t=r;for(;t;){let n=t.tagName,o=t.parentElement,i=1;if(o){let a=Array.from(o.children).filter(s=>s.tagName===n);for(let s=0;s<a.length;s++)if(a[s]===t){i=s+1;break}}e.unshift(`${n}[${i}]`),t=o}return`/${e.join("/")}`}function pd(r,e){let t=r.idToElement.get(e);if(t)return wH(t)}function Xh(r,e){let t=r.idToElement.get(e);if(!t)return;let n=t.cloneNode(!0);for(let o of Array.from(n.children)){let i=o;for(let a of Array.from(i.children))i.removeChild(a)}return n.outerHTML}function $o(r){if(!r.hasAttribute("bounds"))return;let e=r.getAttribute("bounds");if(!e)return;let t=e.match(/\[(\d+),(\d+)\]\[(\d+),(\d+)\]/);if(t){let n=parseInt(t[1],10),o=parseInt(t[2],10),i=parseInt(t[3],10),a=parseInt(t[4],10);if(Number.isFinite(n)&&Number.isFinite(o)&&Number.isFinite(i)&&Number.isFinite(a))return[n,o,i,a]}}function CH(r,e){if(!e)return!0;let t=$o(r);if(!t||t.length<4)return!0;let n=t[0],o=t[1],i=t[2],a=t[3];return!(i<=e.left||n>=e.right||a<=e.top||o>=e.bottom)}function vM(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function RM({requirements:r,element:e}){let t;if((r?.positionSpecificity||r?.shapeSpecificity)&&(t=$o(e),!t))throw new E("ActionFailureError","Element to cache has no bounds or unexpected bounds format");return{requiredText:r?.textRequired?e.getAttribute("text")??void 0:void 0,requiredAttributes:vM(e,r?.attributesRequired),requiredBounds:r?.boundsRequired,position:r?.positionSpecificity?{x1:t[0],y1:t[1],x2:t[2],y2:t[3],tolerance:r?.positionSpecificity}:void 0,shape:r?.shapeSpecificity?{width:t[2]-t[0],height:t[3]-t[1],tolerance:r?.shapeSpecificity}:void 0}}function CM({aiResponse:r,description:e,emulatorState:t}){let n=t.graph.idToElement.get(r.id);if(!n)throw new E("InternalWebAgentError",`Could not find node with id: ${r.id}`);let o=$o(n);if(!o)throw new E("InternalWebAgentError",`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=pd(t.graph,r.id)??"",a=Xh(t.graph,r.id)??"",s=RM({requirements:r.requirements,element:n}),c=[];r.additionalElements&&(c=r.additionalElements.map(({id:u,requirements:d})=>{let m=t.graph.idToElement.get(u);if(!m)return;let p=pd(t.graph,u);return p?{xPath:p,requirements:RM({requirements:d,element:m})}:void 0}).filter(u=>!!u));let l;if(ll(n.tagName)&&r.inWebview!==!1?l={type:"WEBVIEW",resolvedDescription:e,xPath:i}:l={type:"NATIVE",bounds:o,resolvedDescription:e,xPath:i,elementOnlySerializedXml:a,requirements:s,requiredRelatedElements:c},r.updatedMemory){let u={type:"GCS_TRACES",traces:r.updatedMemory};l.memory=u}return{target:l,resolvedNode:n}}function Jh(r){return r?.type==="WEBVIEW"?r.browserCache?.memory:void 0}var xH=.1,MH=.25;function md(r,e,t,n){let o=Math.abs(e-t);switch(r){case"precise":return o<=n;case"narrow":return o<=Math.abs(e)*xH;case"broad":return o<=Math.abs(e)*MH;case"irrelevant":return!0}}function _H(r,e){let t=e.x2-e.x1,n=(e.x1+e.x2)/2,o=(r[0]+r[2])/2;if(!md(e.tolerance,n,o,Math.min(1,t)))return!1;let i=e.y2-e.y1,a=(e.y1+e.y2)/2,s=(r[1]+r[3])/2;return md(e.tolerance,a,s,Math.min(1,i))}function IH(r,e){return md(e.tolerance,e.width,r[2]-r[0],Math.min(1,e.width))?md(e.tolerance,e.height,r[3]-r[1],Math.min(1,e.height)):!1}var wM=(r,e,t)=>{if(!e)return;let{requiredAttributes:n,requiredText:o,requiredBounds:i,position:a,shape:s}=e;if(o!==void 0&&o.length>0){let c=sl(r);if(c!==o)throw new E("ActionFailureError",`Resolved element text mismatch: expected ${o}, got ${c}`)}if(n)for(let[c,l]of Object.entries(n)){let u=r.getAttribute(c)??void 0;if(u!==l)throw new E("ActionFailureError",`Attribute ${c} mismatch: expected ${l}, got ${u}`)}if(i&&t&&!t.targetBounds.every((l,u)=>l===t.newElementBounds[u]))throw new E("ActionFailureError",`Bounds changed from [${t.targetBounds.join(",")} ] to [${t.newElementBounds.join(",")} ]`);if(a&&t&&!_H(t.newElementBounds,a))throw new E("ActionFailureError",`Position mismatch: expected ${JSON.stringify(a)}, got ${JSON.stringify(t.newElementBounds)}`);if(s&&t&&!IH(t.newElementBounds,s))throw new E("ActionFailureError",`Shape mismatch: expected ${JSON.stringify(s)}, got ${JSON.stringify(t.newElementBounds)}`)};async function gd(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ie();if(e.type==="WEBVIEW")return PH(e,r);let a=AM.evaluateXPathToFirstNode(e.xPath,o,null,null);if(!a)throw new E("ActionFailureError",`Could not resolve cached target via XPath: ${e.xPath}`);if(e.requiredRelatedElements){let m=e.requiredRelatedElements;i.startSection("Validate related elements are similar enough to past runs",()=>{for(let p of m){let g=AM.evaluateXPathToFirstNode(p.xPath,o);if(!g)throw new E("ActionFailureError",`Required related element not found for XPath: ${p.xPath}`);wM(g,p.requirements)}})}let s=$o(a);if(!s)throw new E("ActionFailureError","Resolved native element has no bounding box");wM(a,e.requirements,{targetBounds:e.bounds,newElementBounds:s});let c;for(let[m,p]of n.idToElement.entries())if(p===a){c=m;break}let l=e.elementOnlySerializedXml,u=e.xPath;return c!==void 0&&(l=Xh(n,c)??l,u=pd(n,c)??u),{resolvedTarget:{...e,resolvedNode:a,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function PH(r,e){let{stateManager:t,logger:n,signal:o}=e,i=ie(),a=await t.getActiveWebview();if(!a||!a.browserController)throw n.error({webview:a?{...a,browserController:!!a.browserController}:void 0},"resolveTargetCacheInWebView: No browser controller attached"),new E("InternalWebAgentError","No browser controller is attached to the requested webview");let s=a.browserController.browser;if(!r.browserCache)throw n.error({target:r},"resolveTargetCacheInWebView: No browser target available on cache"),new E("InternalWebAgentError","No browser target available on cache");let c=r.browserCache,l=await i.startAsyncSection("Resolve target in webview",()=>s.resolveTarget(null,c,{logger:n,signal:o,skipWaitForPageLoad:!0,skipSavingVisualAttributes:!0}));return{resolvedTarget:{...r,controller:a.browserController,resolution:l}}}function qo(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;sc(e)&&(e[t]={...e[t],[n]:Ri.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date,e[t].updatedAtLoggerTags=Se(r.logger)))}function hd(r){if(r.type==="WEBVIEW")return{type:"WEBVIEW",resolvedDescription:r.resolvedDescription,xPath:r.xPath,browserCache:r.browserCache,memory:r.memory};let{resolvedNode:e,...t}=r;return{...t}}var Ze=class{driver;generator;stateManager;logger;fixtures;aborter;orgId;aiSettings;constructor(e){this.stateManager=e.stateManager,this.generator=e.generator,this.driver=e.driver,this.logger=e.logger,this.fixtures=e.fixtures,this.aborter=e.aborter,this.orgId=e.orgId,this.aiSettings=e.aiSettings}shouldUseMemoryForCommand(e){return this.aiSettings?.useMemory&&!e?.disableCache}async findElement({description:e,tracer:t,skipFetchingFullWebviewContent:n=!1,removeWebviewContent:o=!1,useMemory:i=!1,memory:a,webviewMemory:s,metadata:c}){let l=this.logger.child({...c}),u=await t.startAsyncSection("Get emulator state",async()=>{let f=await this.stateManager.getDomState({skipFetchingFullWebviewContent:n,removeWebviewContent:o}),b=await this.stateManager.getCurrentScreenshotPngString();return{emulatorState:f,screenshot:b}}),d;try{d=await t.startAsyncSpan("AI_LOCATOR_CALL",async f=>{let b=await this.generator.getMobileElementLocation({description:e,screenXml:u.emulatorState.graph.xml,screenshot:u.screenshot,memory:i?a:void 0},{logger:l,loggerTags:Se(l),abortSignal:this.aborter.controller?.signal,useMemory:i,agentConfigVersion:this.aiSettings.agentConfig?.["mobile-locator"]});return f.result=b,b})}catch(f){throw this.throwIfAborted(),l.error({err:f},"Failed to locate element"),new E("InternalWebAgentError",`Failed to locate element: ${f instanceof Error?f.message:f}`,{errOptions:{cause:f}})}if(d.id===-1)throw new E("NoMatchingElementError",d.thoughts??"No matching element found");let{target:m,resolvedNode:p}=CM({aiResponse:d,description:e,emulatorState:u.emulatorState});if(m.type==="NATIVE")return t.addSpan({type:"TARGET_RESOLUTION",startTime:Date.now(),endTime:Date.now(),result:{serializedElement:m.elementOnlySerializedXml},attributes:{},subSpans:[]}),{resolvedTarget:{...m,resolvedNode:p},thoughts:d.thoughts};let{browserLocateResult:g,browserController:h}=await t.startAsyncSpan("TARGET_RESOLUTION",async f=>{let b=await this.stateManager.getActiveWebview();if(!b||!b.browserController)throw new E("InternalWebAgentError","No browser controller is attached to the requested webview");let T=await b.browserController.locateElement({description:e,disableCache:!1,useMemory:i,memory:i?s:void 0,logger:this.logger,skipWait:!0,skipSavingVisualAttributes:!0});return f.result={serializedElement:T.target.nodeOnlySerializedHtml??"Unknown HTML element in webview"},{browserLocateResult:T,browserController:b.browserController}});return{resolvedTarget:{...m,controller:h,resolution:g.resolution,browserCache:g.target},thoughts:g.thoughts}}async wrapTargetingAction(e){let{action:t,description:n,command:o,cacheKey:i="cache",targetName:a="target",cacheIsInvalidAfterResolution:s,tracer:c,skipFetchingFullWebviewContent:l=!1,removeWebviewContent:u=!1}=e,d,m={commandId:o.id};if(i==="cache"&&"cache"in o&&o.cache){let b=o.cache;a==="target"&&"target"in b?d=b.target:a==="fromTarget"&&"fromTarget"in b?d=b.fromTarget:a==="toTarget"&&"toTarget"in b&&(d=b.toTarget)}let p=!1,g=xM(d),h;if(o.disableCache&&(this.logger.debug({command:o},"Cache explicitly disabled for command"),p=!0,g=void 0),s&&(p=!0,g=void 0),g&&g?.resolvedDescription!==n&&(this.logger.info({description:n,cacheDescription:g?.resolvedDescription},"Cache description mismatch, clearing it automatically"),p=!0,g=void 0),!g){this.logger.info({description:n,cacheBustedBeforeAction:p},"Prompting AI for a new element location");let b=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:this.shouldUseMemoryForCommand(o),memory:d?.memory,webviewMemory:Jh(d),metadata:m});h=b.thoughts;let T=await t(b.resolvedTarget);return qo({command:o,cacheKey:i,targetName:a,updatedCache:b.resolvedTarget,updatedWithAI:!0,logger:this.logger}),{result:T,thoughts:h}}let f;try{await this.stateManager.waitForPageSourceStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before cache resolution"}),f=await this.stateManager.getDomState({skipFetchingFullWebviewContent:g.type==="NATIVE"});let{resolvedTarget:b,updatedCache:T}=await c.startAsyncSpan("CACHE_RESOLUTION",async x=>{let{resolvedTarget:R}=await gd({target:g,domState:f,stateManager:this.stateManager,logger:this.logger}),O=hd(R),v=LH(g,O);return v&&Object.keys(v).length>0&&this.logger.info({cacheDiffs:v},"Successfully resolved target with cache"),x.attributes.serializedElement=R.type==="WEBVIEW"?R.browserCache?.nodeOnlySerializedHtml??"Unknown HTML element in webview":R.elementOnlySerializedXml,{resolvedTarget:R,updatedCache:O}}),w=await t(b);return qo({command:o,cacheKey:i,targetName:a,updatedCache:T,updatedWithAI:!1,logger:this.logger}),g.type!=="WEBVIEW"&&He.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.21.2"]),{result:w,thoughts:"Successfully executed preset action with cache"}}catch(b){g.type!=="WEBVIEW"&&He.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.21.2"]),this.throwIfAborted(),this.logger.warn({err:b},"Failed to resolve target cache, retrying with AI");let T=this.shouldUseMemoryForCommand(o),w=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:T,memory:g?.memory,webviewMemory:Jh(g),metadata:m});h=w.thoughts;let x=await t(w.resolvedTarget);return qo({command:o,cacheKey:i,targetName:a,updatedCache:w.resolvedTarget,updatedWithAI:!0,logger:this.logger}),{result:x,thoughts:h}}}constructPerformerParams(){return{stateManager:this.stateManager,generator:this.generator,driver:this.driver,logger:this.logger,fixtures:this.fixtures,aborter:this.aborter,orgId:this.orgId,aiSettings:this.aiSettings}}getBoundsFromNativeCache(e){let[t,n,o,i]=e.bounds;if(t===void 0||n===void 0||o===void 0||i===void 0)throw new E("ActionFailureError",`Native element cache has incomplete bounds: [${e.bounds.join(", ")}]`);return{left:t,top:n,width:o-t,height:i-n}}calculateSwipeCoordinates({containerBounds:e,direction:t,desiredDelta:n,edgeMarginPercent:o=.1}){let i=e.left+e.width/2,a=e.top+e.height/2;if(t==="up"||t==="down"){let s=e.height*o,c=e.top+s,l=e.top+e.height-s,u=l-c,d=Math.min(Math.abs(n),u);return{startX:i,startY:t==="down"?l:c,actualDelta:d}}else{let s=e.width*o,c=e.left+s,l=e.left+e.width-s,u=l-c,d=Math.min(Math.abs(n),u);return{startX:t==="right"?l:c,startY:a,actualDelta:d}}}invertDirection(e){if(e==="up")return"down";if(e==="down")return"up";if(e==="left")return"right";if(e==="right")return"left";throw new Error(`Unreachable code: ${e}`)}async performRawSwipe({startX:e,startY:t,deltaPixels:n,direction:o,durationMs:i=300}){let a=Math.abs(n),s=e,c=t;o==="up"||o==="down"?c=o==="up"?t-a:t+a:s=o==="left"?e-a:e+a,await this.driver.performActions([{type:"pointer",id:"finger1",parameters:{pointerType:"touch"},actions:[{type:"pointerMove",duration:0,x:e,y:t},{type:"pointerDown",button:0},{type:"pause",duration:100},{type:"pointerMove",duration:i,x:s,y:c},{type:"pointerUp",button:0}]}]),await this.driver.releaseActions()}throwIfAborted(){this.aborter.controller?.signal.throwIfAborted()}get abortSignal(){return this.aborter.controller?.signal}get aiSettingsCopy(){return xM(this.aiSettings)}};function kH(r){let e={relativePosition:r.relativePosition};if(r.doubleTap&&r.longPress)throw new Error("UserConfigurationError: Cannot specify both doubleTap and longPress");return r.doubleTap?{...e,doubleTap:!0,doubleTapDelayMs:r.doubleTapDelayMs}:r.longPress?{...e,longPress:!0,longPressDurationMs:r.longPressDurationMs}:e}var ia=class extends Ze{async tapOnAbsoluteCoordinates(e){let t=e.x,n=e.y;if(this.logger.info({x:t,y:n},"Tap at coordinates"),e.longPress)return await this.driver.executeScript("mobile: longClickGesture",[{x:t,y:n,duration:e.longPressDurationMs??2e3}]);if(e.doubleTap){await this.driver.tap({x:t,y:n});let o=e.doubleTapDelayMs??100;await new Promise(i=>setTimeout(i,o))}await this.driver.tap({x:t,y:n})}async tapOnNativeTarget(e,t){let[n,o,i,a]=e.bounds,s=i-n,c=a-o,l=t?.relativePosition?.x??s/2,u=t?.relativePosition?.y??c/2;l=Math.max(0,Math.min(l,s)),u=Math.max(0,Math.min(u,c));let d=n+l,m=o+u;return await this.tapOnAbsoluteCoordinates({x:d,y:m,...t}),{x:d,y:m}}async tapOnWebviewTarget(e,t){let{controller:n}=e;return(await n.browser.click(e.resolution,{createIsolatedFolder:()=>{let i=Math.random().toString(36).substring(4),a=MM.join(DH(),"momentic","downloads"),s=MM.join(a,this.orgId,i);return NH(s,{recursive:!0}),s}},{delayMs:t?.longPress?t?.longPressDurationMs??2e3:void 0,relativePosition:t?.relativePosition,doubleClick:t?.doubleTap})).coordinates}async tapOnTarget({target:e,options:t}){return await ie().startAsyncSpan("EMULATOR_INTERACTION",async o=>{o.attributes.options=t,"type"in e&&e.type==="NATIVE"?o.attributes.point=await this.tapOnNativeTarget(e,t):(o.withinWebview=!0,o.attributes.point=await this.tapOnWebviewTarget(e,t))},{name:"Tap on target"})}async executeTap({command:e}){let t=ie(),n=kH(e);if(e.target.type==="coordinates"){let a=await this.driver.getWindowSize(),s=e.target.xPercent*a.width,c=e.target.yPercent*a.height;return await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.tapOnAbsoluteCoordinates({...n,x:s,y:c})},{name:`Tap at coordinates ${s}, ${c}`}),{success:!0,message:`Tapped at ${s}, ${c}`}}let o=e.target.description,{thoughts:i}=await this.wrapTargetingAction({command:e,tracer:t,action:a=>this.tapOnTarget({target:a,options:n}),description:o});return{success:!0,message:i}}};var Zn=class extends Ze{async doPress({keycode:e,longPress:t}){await ie().startAsyncSpan("EMULATOR_INTERACTION",async()=>this.driver.executeScript("mobile: pressKey",[{keycode:e,isLongPress:t}]),{name:"Send key events to emulator"})}};var _M=25,fd=class extends Ze{async doType(e){let t=ie();if(!e.target){if(e.clearContent)throw new E("UserConfigurationError","Clearing content is only supported when a target is provided to the Type step");return await this.stateManager.waitForPageSourceStability({timeoutMs:3e3,signal:this.aborter.controller?.signal,reason:"Waiting for page to stabilize before typing"}),await this.sendKeys(e),{success:!0,message:"Successfully executed type action"}}if(e.target.type!=="description")throw new E("UserConfigurationError","x/y targets are not supported for the Type step");let{thoughts:n}=await this.wrapTargetingAction({command:e,tracer:t,action:async o=>{"type"in o&&o.type==="NATIVE"?await this.doNativeType(e,o):await this.doWebviewType(e,o)},description:e.target.description});return{success:!0,message:n}}async doWebviewType(e,t){await ie().startAsyncSpan("EMULATOR_INTERACTION",async o=>{o.withinWebview=!0;let i={clearContent:e.clearContent,forceClearContent:e.forceClearContent,delay:e.keyPressDelayMs??_M};o.attributes.options=i;let{controller:a,resolution:s}=t;await a.browser.typeIntoTarget(e.text,s,i)},{name:"Typing within web view"})}async doNativeType(e,t){let n=new ia(this.constructPerformerParams());e.clearContent?(await n.tapOnNativeTarget(t,{longPress:!0}),await this.clearContent()):await n.tapOnNativeTarget(t),await this.stateManager.waitForPageSourceStability({timeoutMs:3e3,signal:this.aborter.controller?.signal,reason:"Waiting for keyboard to appear before typing"}),await this.sendKeys(e)}async sendKeys(e){let t=ie(),n=e.keyPressDelayMs??_M;await t.startAsyncSection("Waiting for system keyboard to open",async(o,i)=>{let a=Date.now();for(;Date.now()-a<3e3;){this.throwIfAborted();let s=Date.now();if(await this.driver.isKeyboardShown())return;let c=Date.now()-s;c<500&&await new Promise(l=>setTimeout(l,500-c))}i.attributes.timedOut=!0}),n?await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.driver.updateSettings({keyInjectionDelay:n}),await this.driver.keys(e.text),await this.driver.updateSettings({keyInjectionDelay:0})},{name:"Typing keys with a delay"}):await t.startAsyncSpan("EMULATOR_INTERACTION",async()=>{await this.driver.keys(e.text)},{name:"Typing keys"})}async clearContent(){let e=ie();try{await e.startAsyncSection("Clearing any content from the focused field",()=>this.clearContentHelper())}catch(t){this.logger.warn({err:t},"Failed to find select all button, continuing...")}}async clearContentHelper(){let e=this.driver.$('//android.widget.LinearLayout[@content-desc="Select all" and @clickable="true"]');await e.waitForExist({timeout:750}),await e.click(),await new Zn(this.constructPerformerParams()).doPress({keycode:67})}};import Zt from"zod";var IM=.8,eo=.2,FH=Zt.object({navigationBar:Zt.object({visible:Zt.boolean(),x:Zt.number(),y:Zt.number(),width:Zt.number(),height:Zt.number()}),statusBar:Zt.object({visible:Zt.boolean(),x:Zt.number(),y:Zt.number(),width:Zt.number(),height:Zt.number()})}),aa=class extends Ze{async getHardcodedScrollableElementBounds(e,t){let n;switch(e.type){case"SCREEN":n=this.getInsetBoundsFromViewport(t);break;case"OPEN_APP":try{let o=FH.parse(await this.driver.executeScript("mobile: getSystemBars",[]));n=this.getInsetBoundsFromViewport(t),o.navigationBar.visible&&(n.height=Math.max(1,n.height-o.navigationBar.height)),o.statusBar.visible&&(n.top+=o.statusBar.height,n.height=Math.max(1,n.height-o.statusBar.height))}catch(o){this.logger.warn({err:o},"Failed to get system bars, using hardcoded bounds"),n=this.getInsetBoundsFromViewport(t)}break;case"OPEN_WEBVIEW":{let o=await this.stateManager.getActiveWebviewNodes();if(o.length===0&&(await this.stateManager.refreshWebviewsManually("get active webview nodes"),o=await this.stateManager.getActiveWebviewNodes()),o.length===0)throw new Error("No active webviews found");if(o.length>1){let a=o.map(s=>({id:s.id,ele:s.originalElement.outerHTML,bounds:s.bounds}));throw new Error(`Multiple active webviews found. Momentic currently only supports a single active webview at a time. Discovered nodes: ${JSON.stringify(a)}`)}let i=o[0]?.bounds;if(!i)throw new Error("No bounds found for active webview");n=this.getInsetBoundsFromBounds(i);break}default:{let o=e;throw new Error("If Typescript complains about the line above, you missed a switch case")}}return n}getInsetBoundsFromViewport(e){let t=Math.floor(e.width*eo),n=Math.floor(e.height*eo);return{left:e.x+t,top:e.y+n,width:Math.max(1,e.width-t*2),height:Math.max(1,e.height-n*2)}}getInsetBoundsFromBounds(e){let t=e[0],n=e[1],o=e[2],i=e[3],a=o-t,s=i-n,c=Math.floor(a*eo),l=Math.floor(s*eo);return{left:t+c,top:n+l,width:Math.max(1,a-c*2),height:Math.max(1,s-l*2)}}async executeSwipe(e){let t=ie();if(e.scrollableElement.type==="CUSTOM_COORDINATES"){let{startX:o,startY:i,deltaPixels:a}=e.scrollableElement;return await t.startAsyncSpan("EMULATOR_INTERACTION",async s=>{s.attributes.startX=o,s.attributes.startY=i,s.attributes.deltaPixels=a,s.attributes.direction=e.direction,await this.performRawSwipe({startX:o,startY:i,deltaPixels:a,direction:e.direction,durationMs:e.durationMs})},{name:`Swipe ${e.direction} using raw coordinates`}),{success:!0,message:"Successfully executed swipe action"}}if(e.scrollableElement.type!=="CUSTOM"){let o=await this.driver.getWindowRect(),i=await this.getHardcodedScrollableElementBounds(e.scrollableElement,o);return await t.startAsyncSpan("EMULATOR_INTERACTION",async a=>{await this.swipeByAbsoluteCoordinates({span:a,direction:e.direction,percent:e.viewportPercent,durationMs:e.durationMs,containerBounds:i})},{name:`Swipe ${e.direction} in the entire ${e.scrollableElement.type.toLowerCase()}`}),{success:!0,message:"Successfully executed swipe action"}}let{thoughts:n}=await this.wrapTargetingAction({command:e,description:e.scrollableElement.target.description,action:async o=>ie().startAsyncSpan("EMULATOR_INTERACTION",async a=>"type"in o&&o.type==="NATIVE"?this.scrollInNativeContainer({span:a,cmd:e,target:o}):(a.withinWebview=!0,this.swipeInWebview({span:a,cmd:e,target:o})),{name:`Swipe ${e.direction} in the specified container`}),tracer:t});return{success:!0,message:n}}async scrollInNativeContainer({span:e,cmd:t,target:n}){let o=n.bounds[2]-n.bounds[0],i=n.bounds[3]-n.bounds[1],a=Math.floor(o*eo),s=Math.floor(i*eo);await this.swipeByAbsoluteCoordinates({span:e,direction:t.direction,percent:t.viewportPercent,durationMs:t.durationMs,containerBounds:{left:n.bounds[0]+a,top:n.bounds[1]+s,width:Math.max(1,o-a*2),height:Math.max(1,i-s*2)}})}async swipeInWebview({span:e,cmd:t,target:n}){let{controller:o,resolution:i}=n;if(!o.browser.getViewport())throw new Error("Failed to get viewport size from webview");let s=t.direction==="down"||t.direction==="up",c=await i.locator.boundingBox();if(!c)throw new Error("Failed to get bounds for webview container");let l=Math.floor(c.width*eo),u=Math.floor(c.height*eo),d=Math.max(1,c.width-l*2),m=Math.max(1,c.height-u*2),p={x:c.x+l+d/2,y:c.y+u+m/2},g=(s?m:d)*(t.viewportPercent??IM)*(s?t.direction==="down"?1:-1:t.direction==="right"?1:-1);e.attributes.startPoint=p,e.attributes.scrollPixelAmount=g,await o.browser.mouseDragUsingVisualCoordinates({deltaX:s?0:g,deltaY:s?g:0,steps:10,dragDurationMs:t.durationMs,fromTarget:p})}async swipeByAbsoluteCoordinates({span:e,direction:t,percent:n=IM,durationMs:o=500,containerBounds:i}){e.attributes.containerBounds=i;let a,s;t==="up"||t==="down"?(a=i.height*n,s=Math.floor(a/(o/1e3))):(a=i.width*n,s=Math.floor(a/(o/1e3))),e.attributes.pixelDelta=a,e.attributes.pixelsPerSecond=s,await this.driver.executeScript("mobile: swipeGesture",[{...i,direction:t,percent:n,speed:s}])}};import{createHash as BH}from"crypto";import zH from"pixelmatch";import{_android as GH,chromium as HH}from"playwright";import{PNG as FM}from"pngjs";import{z as qe}from"zod";var PM=qe.object({"Android-Package":qe.string(),Browser:qe.string(),"Protocol-Version":qe.string(),"User-Agent":qe.string(),"V8-Version":qe.string(),"WebKit-Version":qe.string(),webSocketDebuggerUrl:qe.string()}),OM=qe.object({description:qe.string(),devtoolsFrontendUrl:qe.string(),id:qe.string(),title:qe.string(),type:qe.string(),url:qe.string(),webSocketDebuggerUrl:qe.string()}),LM=qe.object({proc:qe.string(),webview:qe.string(),webviewName:qe.string()}),NM=qe.array(LM.extend({info:PM.optional(),pages:qe.array(OM).optional()})),MNe=qe.array(LM.extend({info:PM,pages:qe.array(OM)}));function Qh(r,e,t=.01){let n=Buffer.from(r,"base64"),o=Buffer.from(e,"base64"),i=FM.sync.read(n),a=FM.sync.read(o);if(i.width!==a.width||i.height!==a.height)return 100;let s=i.width,c=i.height,l=Buffer.alloc(s*c*4);return zH(i.data,a.data,l,s,c,{threshold:t})/(s*c)*100}var Sd=class r{driver;limbarClient;device;currentContext;logger;webviews=new Map;fixtures;orgId;options;aborter;constructor({driver:e,context:t,limbarClient:n,logger:o,device:i,fixtures:a,orgId:s,options:c,aborter:l}){this.driver=e,this.limbarClient=n,this.device=i,this.currentContext=t,this.logger=o,this.fixtures=a,this.orgId=s,this.options=c,this.aborter=l;for(let u of["SIGINT","SIGTERM"])process.on(u,async()=>{await this.cleanupWebviews()})}static async init({driver:e,logger:t,fixtures:n,limbarClient:o,orgId:i,adbPort:a,options:s,aborter:c,playwrightDevice:l}){let u=await e.getContext(),d=typeof u=="string"?u:u.id,m;if(l)m=l;else{let g=(await GH.devices()).filter(h=>h._initializer?.serial?.endsWith(a.toString())||h._initializer?.serial?.endsWith((a-1).toString()));if(t.warn({devices:g.map(h=>({serial:h._initializer?.serial,model:h._initializer?.model}))},"No playwright device provided, using ADB to find device"),g.length===0)throw new E("UserInfrastructureError",`Momentic found no devices listening on port ${a} or ${a-1}. This can occur if Android Studio reuses existing emulators. Please run 'adb emu kill' and 'adb disconnect' and retry.`);if(g.length>1)throw new E("UserInfrastructureError",`Momentic found multiple devices on the ports ${a} or ${a-1}. This can occur if Android Studio reuses existing emulators. Please run 'adb emu kill' and 'adb disconnect' and retry.`);m=g[0]}let p=new r({driver:e,context:d,logger:t,device:m,fixtures:n,orgId:i,options:s,aborter:c,limbarClient:o});return p.startWebviewRefreshInterval(),p}async getContexts(){let e=await this.driver.getContexts({}),t=Array.from(this.webviews.values());return{contexts:e,webviews:t.map(n=>({contextId:n.contextId,packageName:n.packageName,active:n.active,hasPlaywright:!!n.browserController,lastSeen:n.lastSeen,socketName:n.socketName}))}}async getRawScreenshotBase64(e=2){let t=ie(),n;for(let o=0;o<e;o++)try{return await t.startAsyncSpan("EMULATOR_READ_STATE",async()=>await this.driver.takeScreenshot(),{name:"Take screenshot",signal:this.aborter.controller?.signal,timeoutMs:3e3})}catch(i){if(n=i,this.logger.warn({err:i},"Failed to take screenshot"),o===e-1)throw i}throw new E("InternalWebAgentError",`Failed to take screenshot: ${n}`)}async getCurrentScreenshotPngString(){return`data:image/png;base64,${await this.getRawScreenshotBase64(1)}`}async waitForScreenshotStability({timeoutMs:e,signal:t,reason:n,tolerancePercent:o=1}){await ie().startAsyncSpan("WAIT_FOR_SCREENSHOT_STABILITY",async i=>{i.attributes.reason=n;let a=Date.now(),s,c,l=!1;for(;Date.now()-a<e;){c&&c<500&&await q(500-c,t),t?.throwIfAborted();let u=Date.now();if(!s){s=await this.getRawScreenshotBase64(),c=u-a;continue}let d=await this.getRawScreenshotBase64();if(c=u-a,Qh(s,d)<=o){l=!0;break}s=d}l||(i.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for screenshot stability"))})}async waitForPageSourceStability({timeoutMs:e,signal:t,reason:n}){await ie().startAsyncSpan("WAIT_FOR_PAGE_STABILITY",async o=>{o.attributes.reason=n;let i=Date.now(),a,s,c=!1;for(;Date.now()-i<e;){s&&s<250&&await q(250-s,t),t?.throwIfAborted();let l=Date.now(),u;try{u=await this.getPageSource()}catch(m){this.logger.warn({err:m},"Failed to get page source during stability wait"),s=Date.now()-l;continue}let d=BH("md5").update(u).digest("hex");if(s=Date.now()-l,a&&a===d){c=!0;break}a=d}c||(o.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for page source stability"))})}async getCurrentPackage(){let e=await this.driver.execute("mobile: getCurrentPackage");return typeof e=="string"?e:void 0}async getActiveWebviewNodes(){let t=(await this.getDomState({skipFetchingFullWebviewContent:!0,removeWebviewContent:!0})).graph,n=await this.getCurrentPackage(),o=[];for(let[i,a]of t.idToElement.entries()){if(o.some(l=>l.id===i))continue;let s=a.getAttribute("content-desc");(ll(a.tagName)||n==="com.android.chrome"&&s==="Web View"&&a.tagName.toLowerCase().startsWith("frame"))&&o.push({id:i,originalElement:a,bounds:$o(a)})}return o}async getActiveWebviewContent(){let e=await this.getActiveWebview();if(!e||!e.browserController)return;this.throwIfAborted();let t=e.browserController;return(await ie().startAsyncSpan("EMULATOR_READ_STATE",()=>t.getBrowserState({abortSignal:this.aborter.controller?.signal,skipWait:!0,skipWaitForPageLoad:!0,logger:this.logger,serializationOpts:{noId:!0}}),{name:"Get webview content",signal:this.aborter.controller?.signal})).serializedTree}async getDomState(e){return await ie().startAsyncSection("Get emulator state XML",async()=>{let n;if(!e?.skipFetchingFullWebviewContent)try{n=await this.getActiveWebviewContent()}catch(c){this.logger.error({err:c},"Could not get webview info to get the nested DOM state")}this.throwIfAborted();let i=e?.filterOffscreenElements??!0?await this.getViewportBounds():void 0,a=await this.getPageSource();return{graph:await TM(a,{injectedWebviewContent:n,disableMomenticAccessibilityTree:this.options.disableMomenticAccessibilityTree,removeWebviewContent:e?.removeWebviewContent,viewportBounds:i}),context:this.currentContext}},{timeoutMs:15e3})}async getPageSource(){return await ie().startAsyncSpan("EMULATOR_READ_STATE",()=>this.driver.getPageSource(),{name:"Get Android page source",signal:this.aborter.controller?.signal})}async getViewportBounds(){let e=await this.driver.getWindowRect();return{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height}}refreshPromise;refreshInterval;async refreshWebviewsManually(e){if(this.refreshPromise){await this.refreshPromise;return}clearInterval(this.refreshInterval),this.refreshPromise=this.doRefreshWebview(e).catch(t=>{this.logger.warn({err:t},"Error refreshing webviews, continuing...")}).finally(()=>{this.refreshPromise=void 0,this.startWebviewRefreshInterval()})}startWebviewRefreshInterval(){this.refreshInterval||(this.refreshInterval=setInterval(()=>{this.refreshPromise=this.doRefreshWebview("auto refresh").catch(e=>{this.logger.warn({err:e},"Error refreshing webviews, continuing...")}).finally(()=>{this.refreshPromise=void 0})},15e3))}async doRefreshWebview(e){this.logger.info({reason:e},"Refreshing webviews"),await this.getPageSource(),this.throwIfAborted();let t=await this.getCurrentPackage();if(t==="com.android.permissioncontroller")return;let n=await this.getDetailedContexts();if(!n){this.logger.warn("No context details, not proceeding with refreshing webviews");return}let o=Date.now(),i=new Set;for(let a of n){if(this.throwIfAborted(),a.webview==="NATIVE_APP")continue;let s=a.info["Android-Package"];if(t&&s!==t&&this.logger.warn({packageName:s,currentPkgName:t},"Ignoring webview not in the active package"),i.add(a.webview),!this.webviews.has(a.webview)||!this.webviews.get(a.webview)?.active){let c={contextId:a.webview,packageName:s,active:!1,lastSeen:o,socketName:a.proc.startsWith("@")?a.proc.substring(1):a.proc};this.logger.info({contextId:c.contextId,packageName:c.packageName,socketName:c.socketName},"New webview detected"),this.webviews.set(a.webview,c);let l;if(s==="com.android.chrome"?(this.logger.info({webviewInfo:c},`Connecting Playwright to Android Chrome: ${a.webview}`),l=await this.connectPlaywrightToChrome(c),this.logger.info(`Connected Playwright to Android Chrome: ${a.webview}`)):(this.logger.info({webviewInfo:c},`Connecting Playwright to webview: ${a.webview}`),l=await this.connectPlaywrightToWebview(s,c.socketName),l&&this.logger.info(`Connected Playwright to webview ${a.webview}`)),!l)continue;c.browserController=l,c.active=!0}}for(let[a,s]of this.webviews.entries())!i.has(a)&&s.active&&(this.logger.info(`Disconnecting dead webview ${a}`),this.disconnectPlaywrightFromWebview(s),s.active=!1);this.logger.info("Refreshed webviews")}async getActiveWebview(){await this.refreshPromise;let e=await this.driver.execute("mobile: getCurrentPackage"),t=async()=>{e!==void 0&&typeof e!="string"&&this.logger.warn({currentPkg:e},"Unexpected getCurrentPackage result"),this.logger.info({currentPkg:e,allWebviews:Array.from(this.webviews.values()).map(i=>({contextId:i.contextId,packageName:i.packageName,active:i.active}))},"getActiveWebview: filtering webviews");let o=[];for(let i of this.webviews.values())i.packageName===e&&i.active&&o.push(i);return this.logger.info(`getActiveWebview: found ${o.length} matching webviews`),o},n=await t();if(n.length===0&&(await ie().startAsyncSection("Refresh webviews",async()=>{await this.refreshWebviewsManually("no matching webview during getActiveWebview")}),n=await t()),n.length>1)throw new E("UserInfrastructureError","Multiple active webviews in a single package is currently not supported");return n[0]}getDeviceSerial(){let e=this.driver.capabilities,t=n=>{if(!e||typeof e!="object")return;let o=e[n];return typeof o=="string"?o:void 0};return t("deviceUDID")||t("udid")||t("appium:udid")||t("appium:deviceUDID")}async executeRawADBCommand(e){let t=this.getDeviceSerial(),n=e.trim().split(/\s+/).filter(i=>i.length>0);this.logger.info({serial:t,cmdArgs:n},"Executing ADB command");let o=await lt(n,{serial:t,timeoutMs:15e3,throwOnError:!0});return this.logger.info({result:o},"ADB command result"),o}async cleanupWebviews(){this.refreshInterval&&(clearInterval(this.refreshInterval),this.refreshInterval=void 0);for(let[e,t]of this.webviews.entries())this.logger.info(`Disconnecting webview ${e}`),this.disconnectPlaywrightFromWebview(t),t.active=!1}async getDetailedContexts(){return await ie().startAsyncSpan("EMULATOR_READ_STATE",async()=>{let t=await this.driver.execute("mobile: getContexts");this.aborter.controller?.signal.throwIfAborted();let n;try{n=NM.parse(t)}catch(o){throw new E("InternalWebAgentError",`Failed to parse contexts. Original error:
4364
4364
  ${o}
4365
4365
  Raw: ${JSON.stringify(t)}`)}return n.filter(o=>{if(!o.webviewName)return!0;if(!o.info||!o.pages)return!1;let i=o.pages.filter(a=>{if(!a.title)return!1;let s=a.url;return!(!s||s===""||s.startsWith("about:blank")||s.startsWith("chrome-error:"))});return i?!!i:(this.logger.debug({context:o},"Webview has no qualified pages, skipping"),!1)})},{name:"Get available contexts",signal:this.aborter.controller?.signal})}async createBrowserController({context:e}){return await ie().startSection("Run remote Chrome initialization",async(n,o)=>{let i={};o.attributes.timings=i;let a=await ol.fromExistingContext({context:e,logger:this.logger,timingRecorder:i,userBrowserSettings:{...this.options.browserSettings,disableBrowserMonitoring:!0},properties:{isNewHeadless:!0,allowedA11yIgnoreReasonsOverride:[],isAndroid:!0},storage:this.fixtures.storage,enricher:this.fixtures.browserEnricher});return new ud({browser:a,generator:this.fixtures.browserGenerator,logger:this.logger,orgId:this.orgId,storage:this.fixtures.storage,localCodeEvalTools:this.fixtures.localCodeEvalTools,visualDiffScreenshotStorage:new xc})})}async connectPlaywrightToWebview(e,t){return ie().startAsyncSection("Connect headless browser client to webview",async()=>{for(let o=0;o<2;o++)try{return await this.connectPlaywrightToWebviewHelper(e,t)}catch(i){this.logger.warn({err:i},"Failed to connect Playwright to webview, retrying...")}},{signal:this.aborter.controller?.signal,timeoutMs:8e3,timeoutMsg:"Timed out connecting Playwright to the webview"})}extractSocketNameFromWebview(e,t){if("_socketName"in e&&typeof e._socketName=="string")return e._socketName;if("_data"in e&&e._data?.socketName)return e._data.socketName;t.warn({pkg:e.pkg()},"Could not extract socket name from webview")}async connectPlaywrightToWebviewHelper(e,t){let n=this.device.webViews(),o=n.find(l=>!(l.pkg()!==e||this.extractSocketNameFromWebview(l,this.logger)!==t));if(!o){let l=`Could not find webview for ${e} with socket name ${t}`;throw this.logger.warn({webviews:n.map(u=>({pkg:u.pkg,name:this.extractSocketNameFromWebview(u,this.logger)}))},l),new E("InternalWebAgentError",l)}let i=await o.page(),a=i.url();if(a===""||a.startsWith("about:blank")||a.startsWith("chrome-error:")){let l=`Webview ${e} with socket ${t} is not a valid webview`;this.logger.warn({pageUrl:a},l);return}let s=i.context();return await this.createBrowserController({context:s})}async connectPlaywrightToChrome(e){return await ie().startAsyncSpan("EMULATOR_READ_STATE",async()=>this.connectPlaywrightToChromeHelper(e),{name:"Connect headless browser client to Chrome",signal:this.aborter.controller?.signal})}async connectPlaywrightToChromeHelper(e){let{contextId:t,socketName:n}=e;try{this.logger.info({contextId:t,socketName:n},"Connecting to Chrome webview");let o;e.forwardedPort?(o=`http://127.0.0.1:${e.forwardedPort}`,this.logger.info({contextId:t,endpoint:o,socketName:n},"Using existing forwarded port")):(o=`http://127.0.0.1:${await this.forwardDevToolsSocket(e.socketName)}`,this.logger.info({contextId:t,endpoint:o,socketName:n},`Forwarding DevTools socket for ${e.socketName}`)),this.logger.info({endpoint:o,socketName:n},"Connecting to CDP endpoint");let i=await HH.connectOverCDP({endpointURL:o,timeout:8e3}),a=i.contexts()[0];if(!a){this.logger.warn("No browser context available after CDP connection"),await i.close();return}return this.createBrowserController({context:a})}catch(o){this.logger.warn({err:o},`Error connecting Playwright to webview ${e.contextId}, continuing...`);return}}async disconnectPlaywrightFromWebview(e){try{e.browserController&&(this.logger.info(`Disconnecting Playwright from webview: ${e.contextId}`),await e.browserController.browser.cleanup(),e.browserController=void 0),e.forwardedPort&&await this.removeDevToolsForwarding(e.forwardedPort)}catch(t){this.logger.error({err:t},`Error disconnecting Playwright from webview ${e.contextId}:`)}}async forwardDevToolsSocket(e){this.logger.info("Setting up port forwarding for DevTools");let t=1e4+Math.floor(Math.random()*1e4),n=this.getDeviceSerial();this.logger.info({deviceId:n},`Device ID from capabilities: ${n||"not found"}`);let o=e&&e.trim().length>0?`localabstract:${e}`:"localabstract:chrome_devtools_remote";return await this.executeRawADBCommand(`forward tcp:${t} ${o}`),this.logger.info(`Successfully forwarded DevTools socket to port ${t}`),t}async removeDevToolsForwarding(e){await this.executeRawADBCommand(`forward --remove tcp:${e}`),this.logger.info("Successfully removed port forwarding")}throwIfAborted(){this.aborter.controller?.signal.throwIfAborted()}};var UM=5,BM=.8,VH=1,yd=class extends aa{async executeScrollTo(e){let t=e.target.description,n=e.scrollStepPercent??BM,o=await this.tryUseCachedScrollPosition(e,t);return o||this.searchForElement(e,t,n)}async resolveContainer({scrollableElement:e,containerCache:t,aiMetadata:n}){let o=await this.driver.getWindowRect();if(e.type==="CUSTOM_COORDINATES")return{bounds:{left:0,top:0,width:o.width,height:o.height}};if(e.type!=="CUSTOM")return{bounds:await this.getHardcodedScrollableElementBounds(e,o)};let i=ie(),a=e.target.description;if(t){let l=this.getBoundsFromNativeCache(t);return this.logger.info({bounds:l},"Got container bounds from native cache"),{bounds:l,cache:t}}let{resolvedTarget:s}=await this.findElement({description:a,tracer:i,metadata:n});if(s.type!=="NATIVE")throw new Error(`ActionFailureError: Custom scroll container "${a}" resolved to a webview element. Custom containers must be native elements.`);let c=this.getBoundsFromNativeCache(s);return this.logger.info({bounds:c},"Got container bounds from AI"),{bounds:c,cache:s}}async tryUseCachedScrollPosition(e,t){let n=e.cache?.target;return n?n.type==="WEBVIEW"?this.tryUseWebviewCache(e,t):n.scrollDetails?this.tryUseNativeScrollCache(e,t,n):null:null}async tryUseWebviewCache(e,t){let n=ie();try{let{thoughts:o}=await this.wrapTargetingAction({command:e,tracer:n,description:t,action:async i=>{if(i.type==="NATIVE")throw new Error("Expected WEBVIEW target but got NATIVE");await this.scrollWebviewTargetIntoView(i)}});return{success:!0,message:o}}catch(o){return this.logger.warn({err:o},"Failed to use webview cache, falling back to search"),null}}async tryUseNativeScrollCache(e,t,n){let o=n.scrollDetails,i=ie(),a=e.scrollStepPercent??BM,s=o.scrollableElement.type==="CUSTOM"?o.scrollableElement.cache:void 0;await this.scrollByPixelDelta({pixelDelta:o.pixelDelta,scrollableElement:o.scrollableElement,containerCache:s,direction:o.direction,scrollStepPercent:a,aiMetadata:{commandId:e.id}});try{let l=await this.tryFindElement({cmd:e,description:t,tracer:i,scrollDetails:o,useAIIfCacheFails:!1});if(l)return l;this.logger.info("Element not found at cached position, undoing scroll")}catch(l){this.logger.warn({err:l},"Error finding element at cached position, will undo scroll")}let c=o.direction==="down"?"up":"down";return this.logger.info({pixelDelta:o.pixelDelta,originalDirection:o.direction,undoDirection:c,scrollableElementType:o.scrollableElement.type},"Undoing scroll"),await this.scrollByPixelDelta({pixelDelta:o.pixelDelta,scrollableElement:o.scrollableElement,containerCache:s,direction:c,scrollStepPercent:a,aiMetadata:{commandId:e.id}}),null}async tryFindElement({cmd:e,description:t,tracer:n,scrollDetails:o,useAIIfCacheFails:i=!0}){let a,s,c=e.cache?.target;if(c&&c.resolvedDescription===t&&!e.disableCache){let u=await this.stateManager.getDomState({skipFetchingFullWebviewContent:!0,removeWebviewContent:!0});try{let{resolvedTarget:d}=await gd({target:c,domState:u,stateManager:this.stateManager,logger:this.logger});a=d,s="Successfully resolved scroll to target with cache.",this.logger.info("Successfully resolved scroll to target from cache")}catch(d){this.logger.warn({err:d},"Failed to resolve target from cache")}}if(!a&&!i)return null;if(!a)try{let u=await this.findElement({description:t,tracer:n,metadata:{commandId:e.id}});a=u.resolvedTarget,s=u.thoughts}catch(u){if(this.logger.warn({err:u},"Failed to find scroll-to target with AI"),u instanceof E&&u.reason==="NoMatchingElementError")return null;throw u}return a.type==="WEBVIEW"?(await this.scrollWebviewTargetIntoView(a),qo({command:e,updatedCache:hd(a),updatedWithAI:!0,logger:this.logger}),{success:!0,message:s}):(qo({command:e,updatedCache:{...a,scrollDetails:o},updatedWithAI:!0,logger:this.logger}),{success:!0,message:s})}async searchForElement(e,t,n){let o=ie(),i=await this.resolveContainer({scrollableElement:e.scrollableElement,aiMetadata:{commandId:e.id}});return this.scrollAndSearch(e,t,o,n,i)}async scrollAndSearch(e,t,n,o,i){let a=0,s=i.bounds,c=s.height*o,l=!0;for(let u=0;u<UM;u++){this.throwIfAborted();let d=this.buildScrollDetails(e,a,i.cache),m=await this.tryFindElement({cmd:e,description:t,tracer:n,scrollDetails:d});if(m)return m;if(!l)throw new Error(`ActionFailureError: Could not find element "${t}" after scrolling to the end`);this.logger.debug({attempt:u,cumulativePixelDelta:a},"Element not found, scrolling further");let p=WH(e.scrollableElement);l=await this.scrollByPage({direction:e.direction,containerBounds:s,scrollStepPercent:o,rawCoordinates:p}),a+=e.direction==="down"?c:-c}throw new Error(`ActionFailureError: Could not find element "${t}" after ${UM} scroll attempts`)}buildScrollDetails(e,t,n){return e.scrollableElement.type==="CUSTOM"?{pixelDelta:t,scrollableElement:{type:"CUSTOM",target:e.scrollableElement.target,cache:n},direction:e.direction}:e.scrollableElement.type==="CUSTOM_COORDINATES"?{pixelDelta:t,scrollableElement:e.scrollableElement,direction:e.direction}:{pixelDelta:t,scrollableElement:e.scrollableElement,direction:e.direction}}async scrollWebviewTargetIntoView(e){let{controller:t,resolution:n}=e;await t.browser.hover({locator:n.locator})}async scrollByPage({direction:e,containerBounds:t,scrollStepPercent:n,rawCoordinates:o}){return ie().startAsyncSpan("EMULATOR_INTERACTION",async a=>(a.attributes.containerBounds=t,a.attributes.direction=e,this.executeScrollGesture({direction:e,containerBounds:t,scrollStepPercent:n,rawCoordinates:o})),{name:`Scroll ${e} by one page`})}async scrollByPixelDelta({pixelDelta:e,scrollableElement:t,containerCache:n,direction:o,scrollStepPercent:i,aiMetadata:a}){if(e===0)return;let s=ie(),c,l,u;if(t.type==="CUSTOM_COORDINATES")c=t.startX,l=t.startY,u=t.deltaPixels;else{let p=(await this.resolveContainer({scrollableElement:t,containerCache:n,aiMetadata:a})).bounds,g=p.height*i,h=this.calculateSwipeCoordinates({containerBounds:p,direction:o,desiredDelta:g});c=h.startX,l=h.startY,u=h.actualDelta}let d=Math.ceil(Math.abs(e)/u);this.logger.debug({pixelDelta:e,direction:o,scrollableElementType:t.type,startX:c,startY:l,maxScrollPerStep:u,numScrolls:d},"scrollByPixelDelta calculated parameters"),await s.startAsyncSpan("EMULATOR_INTERACTION",async m=>{m.attributes.pixelDelta=e,m.attributes.numScrolls=d,m.attributes.maxScrollPerStep=u,m.attributes.startX=c,m.attributes.startY=l;let p=0;for(let g=0;g<d;g++){this.throwIfAborted();let h=Math.abs(e)-p,f=Math.min(u,h);await this.performRawSwipe({startX:c,startY:l,deltaPixels:f,direction:this.invertDirection(o)}),p+=f}},{name:`Scroll ${o} by ${e}px`})}async executeScrollGesture({direction:e,containerBounds:t,scrollStepPercent:n,diffThresholdPercent:o=VH,rawCoordinates:i}){let a=await this.stateManager.getRawScreenshotBase64(),s,c,l;if(i)s=i.startX,c=i.startY,l=i.deltaPixels;else{let p=t.height*n,g=this.calculateSwipeCoordinates({containerBounds:t,direction:e,desiredDelta:p});s=g.startX,c=g.startY,l=g.actualDelta}await this.performRawSwipe({startX:s,startY:c,deltaPixels:l,direction:this.invertDirection(e)});let u=await this.stateManager.getRawScreenshotBase64(),d=Qh(a,u),m=d>o;return this.logger.debug({diffPercent:d,diffThresholdPercent:o,canScrollMore:m,direction:e,actualDelta:l,rawCoordinates:i},"Scroll gesture visual diff result"),m}};function WH(r){if(r.type==="CUSTOM_COORDINATES")return r}import{randomUUID as jH}from"crypto";import dl from"fs";import{tmpdir as $H}from"os";import sa from"path";var bd=class extends Ze{async doInstallApk(e){return await this.installApkFromUri(e.uri),{success:!0,message:"Installed APK."}}async installApkFromUri(e){let t=await this.resolveUriToLocalApk(e);try{await this.stateManager.executeRawADBCommand(`install ${sa.resolve(t.localPath)}`),this.logger.info({uri:e,localPath:t.localPath},"Installed APK on device")}finally{t.cleanup()}}async resolveUriToLocalApk(e){try{let t=new URL(e);if(t.protocol==="file:"){let n=t.href.slice(7),o;if(dl.existsSync(n))o=n;else if(dl.existsSync(sa.join("/",n)))o=sa.join("/",n);else throw new E("UserConfigurationError",`APK not found at path: ${n}`);return this.assertFileExists(o),{localPath:o,cleanup:()=>{}}}if(t.protocol==="http:"||t.protocol==="https:"){let n=await this.fetchWithTimeout(t);if(!n.ok)throw new E("UserInfrastructureError",`Failed to download APK from ${e} (status ${n.status})`);let o=await n.arrayBuffer(),i=Buffer.from(o),a=await this.writeBufferToTempFile(i,t.pathname);return{localPath:a,cleanup:()=>{try{dl.unlinkSync(a)}catch(s){this.logger.warn({err:s,path:a},"Failed to remove temporary APK file")}}}}throw new E("UserConfigurationError",`Unsupported URI scheme for APK installation: ${t.protocol}`)}catch(t){if(t instanceof TypeError){let n=sa.resolve(e);return this.assertFileExists(n),{localPath:n,cleanup:()=>{}}}throw t}}assertFileExists(e){try{dl.accessSync(e)}catch{throw new E("UserConfigurationError",`APK not found at path: ${e}`)}}async fetchWithTimeout(e){let t=AbortSignal.timeout(9e4);return await fetch(e,{signal:t})}async writeBufferToTempFile(e,t){let n=sa.extname(t)||".apk",o=sa.join($H(),`momentic-apk-${jH()}${n}`);return dl.writeFileSync(o,e),o}};import{existsSync as qH,readFileSync as KH}from"fs";import YH from"zod";var XH=YH.string().url();async function zM(r){if(XH.safeParse(r).success){let e=new AbortController,t=setTimeout(()=>e.abort(),1e4),n;try{n=await fetch(r,{signal:e.signal})}catch(i){throw new E("UserInfrastructureError",`Fetch failed or timed out for URL: ${r}`,{errOptions:{cause:i}})}finally{clearTimeout(t)}if(!n.ok)throw new E("UserInfrastructureError",`Failed to fetch file from URL: ${r}, status: ${n.status}`);let o=await n.arrayBuffer();return Buffer.from(o).toString("base64")}if(!qH(r))throw new E("UserInfrastructureError",`File does not exist at path: ${r}`);return KH(r).toString("base64")}var Ed=class extends Ze{async dragNative(e,t,n){let{left:o,top:i,width:a,height:s}=this.getBoundsFromNativeCache(e),{left:c,top:l,width:u,height:d}=this.getBoundsFromNativeCache(t),m=o+a/2,p=i+s/2,g=c+u/2,h=l+d/2,f=n?.hoverDuration??500,b=n?.dragDuration??1e3;await this.driver.performActions([{type:"pointer",id:"finger1",parameters:{pointerType:"touch"},actions:[{type:"pointerMove",duration:0,x:m,y:p},{type:"pointerDown",button:0},{type:"pause",duration:f},{type:"pointerMove",duration:b,x:g,y:h},{type:"pointerUp",button:0}]}]),await this.driver.releaseActions()}async dragWebview(e,t,n){let{controller:o}=e;if(e.controller!==t.controller)throw new E("UserConfigurationError","Cannot drag and drop between different webviews");let i=n?.dragDuration??1e3,a=n?.hoverDuration??1e3,s;n?.dragDuration&&(s=Math.max(1,Math.floor(i/200))),await o.browser.dragAndDrop(e.resolution.locator,t.resolution.locator,{hoverDurationMs:a,steps:s,dragDurationMs:i})}async executeDragAndDrop({command:e}){let t=ie();if(e.fromTarget.type!=="description"||e.toTarget.type!=="description")throw new E("UserConfigurationError","Drag and drop only supports description targets for now");let n=e.fromTarget.description,{result:o,thoughts:i}=await this.wrapTargetingAction({command:e,tracer:t,description:n,cacheKey:"cache",targetName:"fromTarget",action:async l=>l}),a=e.toTarget.description,{result:s,thoughts:c}=await this.wrapTargetingAction({command:e,tracer:t,description:a,cacheKey:"cache",targetName:"toTarget",action:async l=>l});if(o.type!==s.type)throw new E("UserConfigurationError",`Drag and drop targets must be in the same context (both native or both webview). Found: From=${o.type}, To=${s.type}`);return await t.startAsyncSpan("EMULATOR_INTERACTION",async l=>{o.type==="NATIVE"&&s.type==="NATIVE"?await this.dragNative(o,s,{hoverDuration:e.hoverDuration,dragDuration:e.dragDuration}):o.type==="WEBVIEW"&&s.type==="WEBVIEW"&&(l.withinWebview=!0,await this.dragWebview(o,s,{hoverDuration:e.hoverDuration,dragDuration:e.dragDuration}))},{name:"Drag and drop"}),{success:!0,message:`${i}
4366
4366
  ${c}`}}};import{cloneDeep as GM}from"lodash-es";var Td=class{async getTextContent(e){return await e.textContent()??""}async getAttribute(e,t){return await e.getAttribute(t,{timeout:3e3})??""}async getTagName(e){return await e.evaluate(t=>t.tagName)}async isEditable(e){return await e.isEditable({timeout:kt*1e3})}async isEnabled(e){return await e.isEnabled({timeout:kt*1e3})}async isFocused(e){return await e.evaluate(t=>t===document.activeElement)}async getStyleProperty(e,t){return await e.evaluate((n,o)=>window.getComputedStyle(n).getPropertyValue(o),t)}},vd=class{async getTextContent(e){return sl(e)}async getAttribute(e,t){return e.getAttribute(t)??""}async getTagName(e){return e.tagName}async isEditable(e){throw new Error("Cannot perform editable check on native element")}async isEnabled(e){return e.getAttribute("enabled")==="true"}async isFocused(e){return e.getAttribute("focused")==="true"}async getStyleProperty(e,t){throw new Error("Cannot perform computed style checks on native element")}};var JH=5e3,Ad=class extends Ze{async executeElementCheck(e){let t=Date.now(),n=(e.timeout??kt)*1e3,o=n+1e4,i,a=0,s=500,c=GM(e.cache);if(e.target.type!=="description")throw new E("UserConfigurationError","x/y targets are not supported for the Element Check step");for(;a-t<n;){if(Date.now()-t>o){this.logger.warn("Exceeded max system timeout for element check, exiting...");break}if(this.throwIfAborted(),i=await this.executeElementCheckHelper(e),a=Date.now(),!i.success)e.cache=c,c=GM(c),await q(s,this.abortSignal),s=Math.min(Math.floor(s*1.5),JH);else return i}let l=await this.executeElementCheckHelper(e,{cacheIsInvalidAfterResolution:!0});return l.success||c&&e.cache&&(e.cache=Qs({originalCache:c,newCache:e.cache,targetGetter:u=>u.target}).result),l}async executeElementCheckHelper(e,t){let n=ie();if(e.target.type!=="description")throw new E("UserConfigurationError","x/y targets are not supported for the Element Check step");let o=Lu(e.assertion);try{return(await this.wrapTargetingAction({...t??{},command:e,tracer:n,action:async a=>"type"in a&&a.type==="NATIVE"?await this.executeNativeElementCheck(e,a):await this.executeWebviewElementCheck(e,a),description:e.target.description,skipFetchingFullWebviewContent:!0,removeWebviewContent:!0})).result}catch(i){return o&&(i instanceof E&&i.reason==="NoMatchingElementError"||i instanceof Pn)?{success:!0}:{success:!1,message:`Failed to evaluate element content assertion: ${i instanceof Error?i.message:`${i}`}`}}}async executeNativeElementCheck(e,t){let n=ie(),{assertion:o}=e,i=t.resolvedNode;return await n.startAsyncSpan("ELEMENT_ASSERTION",async a=>{let s=await this.executeElementAssertion({assertion:o,element:i,elementPropertyAccessors:new vd,span:a});return a.result=s,s},{name:"Native element check"})}async executeWebviewElementCheck(e,t){let n=ie(),o=t.resolution.locator,i=e.assertion;return await n.startAsyncSpan("ELEMENT_ASSERTION",async a=>{await t.controller.browser.highlight(o);let s=await this.executeElementAssertion({assertion:i,element:o,elementPropertyAccessors:new Td,span:a});return a.result=s,s},{name:"Webview element check"})}async executeElementAssertion({assertion:e,element:t,elementPropertyAccessors:n,span:o}){switch(e.type){case"ELEMENT_CONTENT":{let i=await n.getTextContent(t)??"";return o.attributes.elementTextContent=Et(i,500,!0),Jr(i,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})?{success:!0}:{success:!1,message:`The content ${yr(e)} '${e.value}': ${i}`}}case"ELEMENT_ATTRIBUTE":{"evaluate"in t&&(o.attributes.elementOuterHtml=Et(await t.evaluate(a=>a.cloneNode(!1).outerHTML),500,!0));let i;try{i=await n.getAttribute(t,e.attr)}catch(a){return{success:!1,message:`The element does not have an attribute named ${e.attr}: ${a}`}}if(!Jr(i,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let a=yr(e);return{success:!1,message:`The attribute ${e.attr} ${a}${e.operation==="EXISTS"?"":` '${e.value}': ${i}`}`}}return{success:!0}}case"ELEMENT_EXISTENCE":{let i=!1;switch(e.condition){case"EDITABLE":i=await n.isEditable(t);break;case"VISIBLE":case"EXISTS":i=!0;break;case"ENABLED":{i=await n.isEnabled(t);break}case"FOCUSED":i=await n.isFocused(t);break;default:throw e.condition,new Error("Unrecognized element condition type")}return i=e.negated?!i:i,i?{success:!0}:{success:!1,message:`The element ${yr(e)}`}}case"ELEMENT_NAME":{let i=await n.getTagName(t);return Jr(i,e.value,e.operation,{negated:!!e.negated,ignoreCase:!0})?{success:!0}:{success:!1,message:`The element tag name ${yr(e)} '${e.value}': ${i}`}}case"ELEMENT_STYLE":{let i=await n.getStyleProperty(t,e.property);if(!Jr(i,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let a=yr(e);return{success:!1,message:`The style property ${e.property} ${a}${e.operation==="EXISTS"?"":` '${e.value}': ${i}`}`}}return{success:!0}}default:throw new Error("Unrecognized element assertion type")}}};var QH=5e3,Rd=class extends Ze{async executeScreenCheck(e){let{timeout:t}=e,n=Date.now(),o=(t??kt)*1e3,i=o+1e4,a=0,s=500;for(;a-n<o;){if(Date.now()-n>i){this.logger.warn("Exceeded max system timeout for screen check, exiting...");break}this.throwIfAborted();let c=await this.executeScreenCheckHelper(e);if(a=Date.now(),!c.success)await q(s,this.abortSignal),s=Math.min(Math.floor(s*1.5),QH);else return c}return await this.executeScreenCheckHelper(e)}async executeScreenCheckHelper(e){return await ie().startAsyncSection("Execute screen check",async(n,o)=>{let[i,a]=await Promise.all([this.executeNativeScreenCheckHelper({span:o,command:e}),this.executeWebviewScreenCheckHelper(e)]);return a?e.assertion.negated?i.success&&a.success?i:i.success?a:i:i.success?i:a:i})}async executeNativeScreenCheckHelper({span:e,command:t}){let{assertion:n}=t;switch(n.type){case"CONTENT":try{let o=(await this.stateManager.getDomState({skipFetchingFullWebviewContent:!0,removeWebviewContent:!0})).graph.document.documentElement?.outerHTML;if(!o)throw new Error("Failed to get screen HTML");let i=o.includes(n.value)===!n.negated;return o.length>1e4&&(o=o.slice(0,1e4)+"...TRUNCATED"),i?{success:!0}:(e.attributes.screenContent=o,{success:!1,message:`The screen ${Qg(n)}.`})}catch(o){return{success:!1,message:`Failed to evaluate screen content assertion: ${o instanceof Error?o.message:`${o}`}`}}default:return n.type,{success:!1,message:`Unsupported screen check assertion type: ${n.type}`}}}async executeWebviewScreenCheckHelper(e){let t=await this.stateManager.getActiveWebview();if(!t||!t.browserController)return;let n=t.browserController.browser;return await cd({assertion:e.assertion,logger:this.logger,browser:n,autoExpandIframes:!!n.userBrowserSettings.autoExpandIframes})}};var wd=class extends Ze{async doUninstallApk(e){return await this.uninstallApkPackage(e.packageName),{success:!0,message:"Uninstalled APK."}}async uninstallApkPackage(e){let t=e.replace(/^package:/,""),n=await this.stateManager.executeRawADBCommand(`shell pm list packages | grep -E "^package:${t}$" || true`);if(!n||n.length===0)throw new E("UserConfigurationError",`Package ${t} not found`);if(n.split(`
4367
4367
  `).filter(i=>!!i).length>1)throw new E("UserConfigurationError",`Multiple packages found for ${t}`);try{await this.stateManager.executeRawADBCommand(`uninstall ${t}`)}catch(i){throw new E("UserInfrastructureError",`Failed to uninstall package ${t}: ${i}`)}}};var la=class r extends Ze{options;appsWithGrantedPermissions=new Set;adbPort;constructor(e){super(e),this.options=e.options??{},this.adbPort=e.adbPort}static async init({driver:e,generator:t,logger:n,fixtures:o,orgId:i,options:a,abortController:s,adbPort:c,limbarClient:l,playwrightDevice:u,aiSettings:d}){let m={controller:s},p=await Sd.init({driver:e,logger:n,fixtures:o,orgId:i,limbarClient:l,options:a?.emulator??{},aborter:m,adbPort:c,playwrightDevice:u}),g=new r({driver:e,generator:t,stateManager:p,logger:n,fixtures:o,options:a,aborter:m,orgId:i,aiSettings:d,adbPort:c});return await g.initializeSettings(),g}async installApp(e){await this.stateManager.executeRawADBCommand(`install ${eV.resolve(e)}`)}async executeCommand(e){let t=["type","a11yData","thoughts","cache","code"],n;try{n=await Pu({obj:e.command,context:this.fixtures.testContext,bannedKeys:t,orgId:this.orgId,logger:this.logger,signal:this.abortSignal,localTools:this.fixtures.localCodeEvalTools})}catch(o){throw this.throwIfAborted(),new E("UserConfigurationError",`Failed to substitute template strings in command: ${o.message}`,{errOptions:{cause:o}})}try{return await this.executeCommandHelper(e)}catch(o){throw o.name!=="AbortError"&&this.logger.error({err:o},"Error thrown in action controller"),o}finally{Ou(e.command,n)}}async executeCommandHelper({command:e}){let t=ie();switch(e.type){case"TAP":return new ia(this.constructPerformerParams()).executeTap({command:e});case"TYPE":return await new fd(this.constructPerformerParams()).doType(e);case"AI_CHECK":{let n=this.shouldUseMemoryForCommand(e),o=15,i=e.timeoutSecs?e.timeoutSecs*1e3:5e3,a=zu(i),s=Date.now(),c=0,l,u=!1,d;for(;c<o&&!u;){this.throwIfAborted(),u||l&&l-s>=i&&(u=!0),c!==0&&await q(a,this.abortSignal),l=Date.now();try{let m="",p="";await t.startAsyncSpan("EMULATOR_READ_STATE",async()=>{m=await this.getEmulatorDomState(),p=await this.getScreenshotBase64()},{name:"Get emulator state"});let g=await t.startAsyncSpan("AI_ASSERTION_CALL",async h=>{let f=await this.generator.evaluateMobileAssertion({assertion:e.assertion,screenXml:m,screenshot:p,memory:n?e.cache?.memory:void 0},{logger:this.logger,loggerTags:Se(this.logger),agentConfigVersion:this.aiSettings.agentConfig?.["mobile-assertion"],useMemory:n});return h.result={thoughts:f.thoughts,result:f.result},f});if(n&&g.updatedMemory){let h={type:"GCS_TRACES",traces:g.updatedMemory};e.cache={...e.cache??{},memory:h}}if(g.result)return{success:g.result,message:g.thoughts};{let h=`AssertionFailureError: ${g.thoughts}`;d=new Error(h)}}catch(m){this.throwIfAborted(),this.logger.info({err:m},`AI check assert attempt ${c} failed, retrying...`),d=m instanceof Error?m:new Error(`${m}`)}finally{c++}}return{success:!1,message:d?.message}}case"SWIPE":return new aa(this.constructPerformerParams()).executeSwipe(e);case"SCREEN_CHECK":return new Rd(this.constructPerformerParams()).executeScreenCheck(e);case"ELEMENT_CHECK":return await new Ad(this.constructPerformerParams()).executeElementCheck(e);case"DRAG_AND_DROP":return await new Ed(this.constructPerformerParams()).executeDragAndDrop({command:e});case"SCROLL_TO":return new yd(this.constructPerformerParams()).executeScrollTo(e);case"JAVASCRIPT":{let n;try{n=await Xr({orgId:this.orgId,code:e.code,fragment:!1,context:this.fixtures.testContext,timeoutMs:e.timeout?e.timeout*1e3:void 0,logger:this.logger,localTools:this.fixtures.localCodeEvalTools,signal:this.abortSignal})}catch(o){throw new E("ActionFailureError",o instanceof E?o.message:`${o}`,{errOptions:{cause:o}})}try{JSON.stringify(n)}catch(o){throw new E("UserConfigurationError",`Return value is not serializable: ${o instanceof Error?o.message:`${o}`}`)}return{success:!0,output:n}}case"REQUEST":{let n;try{n=new URL(e.url).hostname}catch(l){throw new E("UserConfigurationError",`Invalid URL: ${l instanceof Error?l.message:`${l}`}`)}let o=new tV,i=ZH(fetch,o),a=Date.now(),s=await ld({command:e,baseUrl:void 0,logger:this.logger,fetchImplementation:i}),c=hc(o,n);return{output:ka.parse({...s,cookies:c}),success:!0,message:`Successfully executed request in ${Date.now()-a}ms`}}case"OPEN_NOTIFICATION_DRAWER":return await new Zn(this.constructPerformerParams()).doPress({keycode:83}),{success:!0};case"OPEN_APP":{let n=e.activityName;if(!n){let i=["resolve-activity","--brief","-a","android.intent.action.MAIN","-c","android.intent.category.LAUNCHER",e.packageName],a=await z(this.driver.execute("mobile: shell",{command:"pm",args:i}),{signal:this.abortSignal,milliseconds:1e4});if(typeof a!="string")throw new E("UserConfigurationError",`Could not find main activity name for package ${e.packageName}. Unexpected output: ${a}`);if(a.includes("No activity found"))throw new E("UserConfigurationError",`No activity found for package ${e.packageName}.`);if(n=a.trim().split(`
4368
- `).pop()?.replace(/^.*\//,""),!n)throw new E("UserConfigurationError",`Could not parse main activity name for package ${e.packageName}. Raw output: ${a}`)}if(this.options.emulator?.autoGrantPermissions&&!this.appsWithGrantedPermissions.has(e.packageName)){let i={permissions:"all",appPackage:e.packageName,action:"grant"};await this.driver.executeScript("mobile: changePermissions",[i]),this.appsWithGrantedPermissions.add(e.packageName)}let o=["start"];if(e.intentExtras)try{let i=JSON.parse(e.intentExtras);for(let[a,s]of Object.entries(i))o.push("-e",a,typeof s=="string"?s:JSON.stringify(s))}catch(i){throw new E("UserConfigurationError",`Invalid intent extras does not parse as valid JSON: ${i instanceof Error?i.message:`${i}`}`)}return o.push("-n",`${e.packageName}/${n}`),await this.driver.execute("mobile: shell",{command:"am",args:o}),await this.stateManager.waitForPageSourceStability({timeoutMs:5e3,signal:this.abortSignal,reason:"Waiting for stability after app launch"}),this.stateManager.refreshWebviewsManually("new app launch"),{success:!0}}case"PRESS":{let n=new Zn(this.constructPerformerParams());switch(e.key){case"HOME":await n.doPress({keycode:3});break;case"BACK":await n.doPress({keycode:4});break;case"APP_SWITCHER":await n.doPress({keycode:187});break;case"POWER":await n.doPress({keycode:26});break;case"SEARCH":await n.doPress({keycode:84});break;case"VOLUME_UP":await n.doPress({keycode:24});break;case"VOLUME_DOWN":await n.doPress({keycode:25});break;case"VOLUME_MUTE":await n.doPress({keycode:164});break}return{success:!0}}case"PRESS_KEYBOARD":{let n=new Zn(this.constructPerformerParams()),o=i=>n.doPress({keycode:i});switch(e.key){case"CLOSE_KEYBOARD":{let i=Date.now();for(;Date.now()-i<5e3&&(await this.driver.hideKeyboard(),!!await this.driver.isKeyboardShown()););break}case"ENTER":await o(66);break;case"BACKSPACE":await o(67);break;default:{let i=e}}return{success:!0}}case"WAIT":return await q(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"INSTALL_APP":return new bd(this.constructPerformerParams()).doInstallApk(e);case"UNINSTALL_APP":return new wd(this.constructPerformerParams()).doUninstallApk(e);case"ADD_FILE":{let n=await zM(e.file);return await this.driver.pushFile(e.storageLocation,n),await this.driver.execute("mobile: shell",{command:"am",args:["broadcast","-a","android.intent.action.MEDIA_SCANNER_SCAN_FILE","-d",`file://${e.storageLocation}`]}),{success:!0}}case"TOGGLE_SETTINGS":{switch(e.settingsType){case"AIRPLANE_MODE":await this.driver.toggleAirplaneMode();break;case"DATA":await this.driver.toggleData();break;case"WIFI":await this.driver.toggleWiFi();break;case"LOCATION":await this.driver.toggleLocationServices();break;default:throw e.settingsType,new E("UserConfigurationError",`Unknown settings type: ${e.settingsType}`)}return{success:!0}}case"ROTATE_ORIENTATION":return await this.driver.execute("mobile: shell",{command:"settings",args:["put","system","accelerometer_rotation","0"]}),await this.driver.execute("mobile: shell",{command:"settings",args:["put","system","user_rotation",e.orientation==="LANDSCAPE"?"1":"0"]}),{success:!0,output:{newViewportBounds:await this.getViewportBounds()}};case"ADB":{let n=await this.driver.execute(e.command,JSON.parse(e.jsonArgs??"{}"));return this.logger.info({output:n},"ADB command executed successfully"),{success:!0,output:n,message:"ADB command executed successfully"}}case"KILL_APP":{let n=await this.stateManager.getCurrentPackage();if(!n)throw new E("UserConfigurationError","No package is currently active");await this.driver.execute("mobile: shell",{command:"input",args:["keyevent","KEYCODE_HOME"]}),await this.driver.terminateApp(n);try{await bM({packageName:n,driver:this.driver,abortSignal:this.abortSignal,logger:this.logger})}catch(o){this.throwIfAborted(),this.logger.warn({err:o,packageName:n},"Failed to remove package from recents, continuing...")}return{success:!0}}case"STATE":{await this.stateManager.refreshWebviewsManually("debug cmd");let n=await this.stateManager.getDomState(),o=await this.stateManager.getContexts(),i={xml:n.graph.xml,contexts:o};return this.logger.info({result:i},"State debug command output"),{output:i,success:!0}}default:{let n=e;return{success:!0}}}}async initializeSettings(){let{latitude:e,longitude:t}=this.options?.emulator?.geolocation??ql;await this.driver.execute("mobile: shell",{command:"pm",args:["grant","io.appium.settings","android.permission.ACCESS_COARSE_LOCATION"]}),await this.driver.execute("mobile: shell",{command:"pm",args:["grant","io.appium.settings","android.permission.ACCESS_FINE_LOCATION"]}),await this.driver.setGeoLocation({latitude:e,longitude:t})}async getScreenshotBase64(){return this.stateManager.getRawScreenshotBase64()}async getScreenshotPngString(){return this.stateManager.getCurrentScreenshotPngString()}async getEmulatorDomState(){return(await this.stateManager.getDomState({})).graph.xml}async executeRawADBCommand(e){return this.stateManager.executeRawADBCommand(e)}async getViewportBounds(){return this.stateManager.getViewportBounds()}async waitForScreenshotStability(e){return this.stateManager.waitForScreenshotStability({timeoutMs:e.timeoutMs??5e3,reason:e.reason,signal:this.aborter.controller?.signal})}async getMobileFailureRecoveryPlan(e){return this.generator.getMobileFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.abortSignal,loggerTags:Se(this.logger)})}async waitForPageSourceStability(e){return this.stateManager.waitForPageSourceStability({timeoutMs:e.timeoutMs??5e3,reason:e.reason,signal:this.aborter.controller?.signal})}resetAbortController(e){this.aborter.controller=e??new AbortController}isAborted(){return this.aborter.controller?.signal.aborted}abort(){this.aborter.controller?.abort()}async cleanup(){await this.stateManager.cleanupWebviews()}get abortSignal(){return this.aborter.controller?.signal}get context(){return this.fixtures.testContext}get localCodeEvalTools(){return this.fixtures.localCodeEvalTools}};async function VM({socket:r,logger:e,orgId:t,testMetadata:n,globalOrgSettings:o,androidDriverFactory:i,mobileGeneratorFactory:a,browserGeneratorFactory:s,browserEnricherFactory:c,storageFactory:l,localToolsFactory:u,globalStateManager:d,getGitMetadata:m}){let p=r.id,g=await m(),h=r.handshake.query?.fileName,f=h?HM.basename(h,".test.yaml"):"",b=n.id,T=n.settings?.defaultChannel,w=n.settings?.defaultTag;e=e.child({sessionId:p,testId:b,orgId:t,branch:g.gitBranchName});let x=await l(t),R=n.settings?.defaultEnv,O={};R&&(O=(await x.fetchEnvironment(R,e))?.variables??{});let v=Pi.parse(O[Eo]),M=Pi.parse(O[Ya]),G={...o.emulator,...n.settings?.emulator},H=n.settings?.defaultApkFilePath?.trim()||M,W=d.getSession(p);if(W){if(e.info("Reconnecting to existing Android session"),W.local)return r.emit("session",W.metadata),W.softDeleted=!1,W.metadata;throw new Error("Restoring existing remote emulator sessions is not supported. Please reconnect to a new emulator.")}let K;if(G.region==="local"){if(await d.clearSoftDeletedLocalSessions(e),d.hasActiveLocalSession())throw new Error("Another local emulator session is already active. Please close the existing session before creating a new one.");let rr=n.settings?.emulator?.localEmulatorSettings?.avdId?.trim()||v;if(!rr)throw new Error(`AVD ID is required when using a local emulator. Set it on the test (Options \u2192 Emulator \u2192 Local AVD ID) or on the environment via ${Eo}.`);K={avdId:rr,apkToInstall:T?{channel:T,tag:w}:void 0,apkFilePath:H}}else K={region:G.region,apkToInstall:T?{channel:T,tag:w}:void 0,osVersion:G.remoteEmulatorSettings?.androidVersion};let ve=Date.now(),{driver:re,cleanup:B,emulatorName:ce,adbPort:fe,limbarClient:Je,limbarToken:Le,limbarUrl:Lt,playwrightDevice:jt}=await i({socket:r,logger:e,creationOpts:K}),Ne=HM.join(rV(),`logcat-logs-${t}-${b}-${p}.txt`),dt=await Iu({driver:re,onLogs:rr=>{r.emit("logcatLogs",rr)},logFilePath:Ne});e.info({adbPort:fe,apkChannel:T,apkTag:w,duration:Date.now()-ve,emulatorName:ce},"Android emulator session initiated"),e=e.child({emulator:ce});let sn=await a(t,e),Rn=await s(t,e),ti=await c(t,e),wl=u?await u(t):void 0,oo=new xi({variablesFromEnvironment:O,envName:R,testName:f}),wn=await la.init({driver:re,generator:sn,logger:e,limbarClient:Je,playwrightDevice:jt,aiSettings:{...o.ai,useMemory:o.ai?.useMemory!==!1,...n.settings?.ai},options:{emulator:{...G,browserSettings:o.browser}},fixtures:{storage:x,browserEnricher:ti,browserGenerator:Rn,localCodeEvalTools:wl,testContext:oo},orgId:t,adbPort:fe,abortController:new AbortController}),ri=await wn.getViewportBounds();if(!r.connected)throw await wn.cleanup(),await dt(),await B(),new Error("Socket not connected anymore, not proceeding with Android session setup");let Ca=nV({socket:r,testContext:oo}),io=async()=>{clearInterval(Ca);try{await Promise.allSettled([wn.cleanup(),dt(),B()])}catch(rr){e.warn({err:rr},"Failed to clean up emulator in socket server")}},j={sessionId:p,testId:b,orgId:t,emulatorName:ce,testName:f,limbarUrl:Lt,limbarToken:Le,viewportBounds:ri};return d.registerSession(p,{controller:wn,cleanup:io,emulatorName:ce,local:G.region==="local",metadata:j,logFilePath:Ne}),r.emit("session",j),j}function nV({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}import Id from"fs/promises";import{z as dV}from"zod";var k="v1",Zh="mobile-cli",Yo="0.21.1";var oV=9e4,iV=3,aV=1500,sV=15e3,Dr=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function lV(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var ef=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Yo&&(e[Cc]=Yo),Zh&&(e[PE]=Zh),e}async sendRequest(e,t){let{retries:n=iV,requestTimeoutMs:o=oV,initialRetryDelayMs:i=aV,maxRetryDelayMs:a=sV,onFailedRequest:s}=t,c=n,l=n,u,d={path:e,baseUrl:this.baseUrl,method:t.method};for(;c>0;)try{return c--,await this.sendSingleRequestHelper(e,t,o)}catch(m){u=m;try{s?.(u)}catch{}if(m instanceof Dr&&m.status>=400&&m.status<500)throw m;if(m instanceof Error&&m.name==="AbortError"&&(u=new Gn),c===0)throw u;let p=l-c,g=Math.min(i*Math.pow(2,p-1),a);await new Promise(h=>setTimeout(h,g))}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(e,t,n){let o={path:e,baseUrl:this.baseUrl,method:t.method},i=new AbortController,a=setTimeout(()=>i.abort(),n),s=()=>i.abort();t.signal&&t.signal.addEventListener("abort",s,{once:!0});let c=Date.now(),l={...this.getHeaders(),...t.extraHeaders};try{let u=await fetch(`${this.baseUrl}${e}`,{method:t.method,body:t.body?JSON.stringify(t.body):void 0,headers:l,signal:i.signal});if(!u.ok){let p=await lV(u);throw new Dr(u.status,p,`Request to ${t.method} ${e} failed with status ${u.status}: ${p}`)}let d;if(u.status===204)d={};else if(t.responseType==="buffer"){let p=await u.arrayBuffer();d=Buffer.from(p)}else{let p=await u.text();try{d=JSON.parse(p)}catch{d=p}}this.logger&&t.logResponse===!0&&d&&this.logger.debug({result:d,status:u.status,durationMs:Date.now()-c,...o},"Got response from Momentic server");let m=t.responseHeadersObject;return m&&u.headers.forEach((p,g)=>{m[g.toLowerCase()]=p}),d}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",s)}}},on=class extends ef{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[IE]:this.mode??""}}};import{createAnthropic as cV}from"@ai-sdk/anthropic";function uV(r){let{apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o}=r,i={Authorization:`Bearer ${e}`,[Cc]:Yo??"",...t&&{[LE]:t},...n||{}};return o&&(i[OE]=JSON.stringify(o)),i}var Cd=r=>e=>{let t=uV(r);return cV({baseURL:`${r.baseUrl}/v1/llm/anthropic/${e}`,headers:t,apiKey:r.apiKey})(e)};var Xo=class extends on{agentConfig;constructor(e,t){let n={...Ab,...e};super(t),this.agentConfig=n}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:t.abortSignal});return lb.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${k}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Yo,...e},signal:t.abortSignal});return sb.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${k}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return dV.string().parse(t)}async getElementLocation(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.locator},o=await this.sendRequest(`/${k}/web-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return BE.parse(o)}async getAssertionResult(e,t){let n={...e,disableCache:!!t.disableCache,useConsensus:!!t.useConsensus,attemptNumber:t.attemptNumber,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.assertion},o=await this.sendRequest(`/${k}/web-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Im.parse(o)}async getLintStepResult(e,t){let n={...e,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/lint/step`,{method:"POST",body:n,signal:t.abortSignal});return UE.parse(o)}async getLintMcpCopilotMessageResult(e,t){let n={message:e.message,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:t.abortSignal});return DE.parse(o)}async getMcpCopilotConversationEvaluation(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/mcp-copilot-conversation-evaluator`,{method:"POST",body:n,signal:t.abortSignal});return kE.parse(o)}async getMcpCopilotChatSummary(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/mcp-copilot-chat-summary`,{method:"POST",body:n,signal:t.abortSignal});return FE.parse(o)}async getVisualAssertionResult(e,t){let n={...e,disableCache:!!t.disableCache,useConsensus:!!t.useConsensus,attemptNumber:t.attemptNumber,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},o=await this.sendRequest(`/${k}/web-agent/visual-assertion`,{method:"POST",body:n,signal:t.abortSignal});return Im.parse(o)}async getAiActionCommand(e,t){let n=await this.sendRequest(`/${k}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return NE.parse(n)}async getMultiturnAiActionCommand(e,t){return await this.sendRequest(`/${k}/web-agent/ai-action/next-command`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal})}async getMultiturnAiActionEvaluation(e,t){let n=await this.sendRequest(`/${k}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return Dp.parse(n)}async getReverseMappedDescription(e,t){let n=await this.sendRequest(`/${k}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return zE.parse(n)}async getTextExtraction(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${k}/web-agent/text-extraction`,{method:"POST",body:n,signal:t.abortSignal});return Lp.parse(o)}async getPageSummary(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/page-summary`,{method:"POST",body:n,signal:t.abortSignal});return Gy.parse(o)}async getSmartWaitingDecision(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/smart-waiting`,{method:"POST",body:n,signal:t.abortSignal});return Hy.parse(o)}async getTestResultClassification(e,t){let n=await this.sendRequest(`/${k}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return bp.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${k}/web-agent/extract-keywords`,{method:"POST",body:e,signal:t.abortSignal});return vb.parse(n)}async getAutohealingProposal(e,t){let n=await this.sendRequest(`/${k}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return ky.parse(n)}async getFailureRecoveryProposal(e,t){let n=await this.sendRequest(`/${k}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return By.parse(n)}async getFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${k}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Uy.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${k}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return Xf.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return Cd({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as tf}from"zod";var Xt=class extends on{constructor(e){super({...e,mode:void 0})}getAppUrl(){return Es(this.baseUrl)}async getAuthInfo(){let e=await this.sendRequest(`/${k}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3,onFailedRequest:t=>{C.warn(`API key check failed: ${t.message}`)}});return ZE.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${k}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return YE.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${k}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return HE.parse(t)}async updateStepCaches(e,t){await this.sendRequest(`/${k}/cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,t){let n=await this.sendRequest(`/${k}/cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return WE.parse(n)}async updateMobileStepCaches(e,t){await this.sendRequest(`/${k}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,t){let n=await this.sendRequest(`/${k}/mobile-cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return jE.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${k}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return GE.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${k}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return QE.parse(t)}async uploadOnDemandScreenshot(e){return await this.sendRequest(`/${k}/on-demand-screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${k}/on-demand-screenshots/${e.id}`}}async fetchOnDemandScreenshot(e){let t={};return{data:await this.sendRequest(`/${k}/on-demand-screenshots/${encodeURIComponent(e)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:t}),contentType:t["content-type"]??"image/jpeg"}}async getAllEnvironments(){let e=await this.sendRequest(`/${k}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return eT.parse(e)}async acquireCacheLock(e,t){let n=await this.sendRequest(`/${k}/result-cache/lock`,{method:"POST",body:e,signal:t,retries:3,requestTimeoutMs:3e4});return ST.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${k}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${k}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${k}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${k}/result-cache/entry`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(t){if(t instanceof Error&&t.message.includes("404"))return null;throw t}}async queueSuiteRuns(e){let t=await this.sendRequest(`/${k}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return tT.parse(t)}async bulkGetRunGroupStatus(e){let t={runGroupIds:e},n=await this.sendRequest(`/${k}/run-groups/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return nb.array().parse(n)}async uploadProposedSteps(e,t){try{await this.sendRequest(`/${k}/test-fragments/`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4})}catch(n){t.error({err:n},"Failed to upload proposed steps")}}async reportBillableEvents(e,t){try{await this.sendRequest(`/${k}/billing/events`,{method:"POST",body:t,retries:10,requestTimeoutMs:1e4})}catch(n){e.error({err:n},"Failed to report billable event")}}async fetchTestFragment(e){let t=await this.sendRequest(`/${k}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rT.parse(t)}async patchTestFragment(e,t){await this.sendRequest(`/${k}/test-fragments/${e}`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,t){let n=await this.sendRequest(`/${k}/results/tests/${e}`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nT.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${k}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return oT.parse(e)}async startProcessingResultsUpload(e,t){let n=await this.sendRequest(`/${k}/results/uploads/${e}/process`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return iT.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${k}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ET.parse(t)}catch(t){return e.error({err:t},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,t){try{await this.sendRequest(`/${k}/knowledge-base/icons`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(n){t.error({err:n},"Failed to save new icons to icon knowledge base")}}async getMergeBaseCommitFromGithub(e,t,n,o){let i=new URLSearchParams;i.set("base",n),i.set("head",o);let a=await this.sendRequest(`/${k}/git/github/${e}/${t}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(a)}async getCommitFromGithub(e,t,n){let o=await this.sendRequest(`/${k}/git/github/${e}/${t}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(o)}async getMergedBranchFromGithub(e,t,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${k}/git/github/${e}/${t}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Nm.parse(a)}async getMergeBaseCommitFromGitlab(e,t,n){let o=new URLSearchParams;o.set("base",t),o.set("head",n);let i=encodeURIComponent(e),a=await this.sendRequest(`/${k}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bs.parse(a)}async getCommitFromGitlab(e,t){let n=encodeURIComponent(e),o=await this.sendRequest(`/${k}/git/gitlab/${n}/commits/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(o)}async getMergedBranchFromGitlab(e,t,n){let o=encodeURIComponent(t),i=encodeURIComponent(e),a=await this.sendRequest(`/${k}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Nm.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${k}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return tf.record(tf.string(),tf.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${k}/quarantine`,{method:"GET"});return aT.parse(e)}async quarantineTest(e,t,n){await this.sendRequest(`/${k}/quarantine`,{method:"POST",body:{testId:e.id,testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async unquarantineTest(e,t,n){await this.sendRequest(`/${k}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let t=await this.sendRequest(`/${k}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return sT.parse(t)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${k}/limbar/android/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async generateAndroidAssetUrls({channel:e,tag:t,md5:n}){let o={channel:e,tag:t,md5:n},i=await this.sendRequest(`/${k}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return cT.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${k}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${k}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return uT.parse(e)}async getLimbarAssetDownloadUrl(e,t){let n=await this.sendRequest(`/${k}/limbar/assets/${e}/${t}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return dT.parse(n)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${k}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}async createIosEmulator(e){let t=await this.sendRequest(`/${k}/limbar/ios`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return lT.parse(t)}async extendIosEmulatorTtl(e){try{await this.sendRequest(`/${k}/limbar/ios/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async deleteIosEmulator(e){await this.sendRequest(`/${k}/limbar/ios/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async generateMobileLogcatUploadUrl(e){let t=await this.sendRequest(`/${k}/logcat/mobile/upload`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Wb.parse(t)}};async function rf(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return C.debug("Got auth info from API"),n}var xd=class{apiClient;constructor(e){this.apiClient=e}async reportBillableEvents(e,t){await this.apiClient.reportBillableEvents(e,t)}};var ca=class extends on{generator;constructor(e,t){super(e),this.generator=t}async runTemplateMatching(e,t={}){let n=await this.sendRequest(`/${k}/web-agent/template-matching`,{method:"POST",body:e,signal:t?.signal});return Jf.parse(n)}async constructIframeRegex(e,t={}){return this.generator.getIframeRegex(e,{abortSignal:t.signal})}};var ua=class{constructor(e,t){this.client=e;this.orgId=t}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let e=this.getApiServerUrl();return Es(e)}async acquireCacheLock(e,t){return this.client.acquireCacheLock(e,t)}async createOnDemandScreenshot(e,t,n){let{apiServerUrl:o}=await this.client.uploadOnDemandScreenshot({id:e,screenshot:t.toString("base64"),contentType:n});return{apiServerUrl:o,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${e}`,universalHandle:{id:e,contentType:n}}}async fetchOnDemandScreenshot(e){return this.client.fetchOnDemandScreenshot(e.id)}async releaseCacheLock(e){return this.client.releaseCacheLock(e)}async deleteCacheResult(e){return this.client.deleteCacheResult(e)}async setCacheResult(e){return this.client.setCacheResult(e)}async getCacheResult(e){return this.client.getCacheResult(e)}fetchIconKnowledgeBase(e){return this.client.fetchIconKnowledgeBase(e)}saveNewIcons(e,t){return this.client.saveNewIcons(e,t)}};import{Faker as pV,en as mV}from"@faker-js/faker";var da="v1",pa=class{httpClient;fakerInstance;type="API_CLIENT";sms={send:this.sendSms.bind(this),fetchLatest:this.fetchLatestSms.bind(this)};email={send:this.sendEmail.bind(this),fetchLatest:this.fetchLatestEmail.bind(this),fetchAll:this.fetchAllEmails.bind(this)};ai={generate:this.sendAiGenerate.bind(this)};constructor(e){this.httpClient=e.httpClient,e.fakerSeed&&(this.fakerInstance=new pV({locale:mV}),this.fakerInstance.seed(e.fakerSeed))}async sendAiGenerate(e){let t=typeof e=="string"?{input:e}:e;return this.httpClient.sendRequest(`/${da}/tools/ai/generate`,{method:"POST",body:t}).catch(n=>{throw n instanceof Dr?new Error(n.rawError):new Error(`Failed to send AI generation: ${n.message}`)})}async sendSms(e){return this.httpClient.sendRequest(`/${da}/tools/sms/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to send sms: ${t.message}`)})}async fetchLatestSms(e){return this.httpClient.sendRequest(`/${da}/tools/sms/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):t})}async sendEmail(e){return this.httpClient.sendRequest(`/${da}/tools/email/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to send email: ${t.message}`)})}async fetchAllEmails(e){return this.httpClient.sendRequest(`/${da}/tools/email/fetchAll`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to fetch all emails: ${t.message}`)})}async fetchLatestEmail(e){return this.httpClient.sendRequest(`/${da}/tools/email/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to fetch latest emails: ${t.message}`)})}};function WM(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var Md=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await WM(n,"application/zip",t);if(!i.ok)throw new Error(`Failed to upload test results: ${await i.text()}`);let{runGroupId:a}=await this.client.startProcessingResultsUpload(o,{runGroupId:e});return a}};var ma=class extends on{constructor(e){super(e)}async getMobileElementLocation(e,t){let n={...e,disableCache:t.disableCache,useMemory:t.useMemory,agentConfigVersion:t.agentConfigVersion,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return qb.parse(o)}async evaluateMobileAssertion(e,t){let n={...e,disableCache:t.disableCache,useMemory:t.useMemory,agentConfigVersion:t.agentConfigVersion,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Xb.parse(o)}async getMobileFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${k}/mobile-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Qb.parse(n)}getVercelAnthropicModelFactory({loggerTags:e,sessionId:t}){return Cd({baseUrl:this.baseUrl,apiKey:this.apiKey,sessionId:t,loggerTags:e})}};function _d({logger:r,orgId:e,client:t,gitMetadata:n,regenerateCache:o,alwaysSaveCache:i,noCache:a}){return a?new Mc:new nf(r,e,t,n,{alwaysSaveCache:i,regenerateCache:o})}var nf=class{constructor(e,t,n,o,i){this.orgId=t;this.client=n;let{regenerateCache:a,alwaysSaveCache:s}=i,{gitBranchName:c,gitProtectedBranches:l}=o;this.cacheHeaders=Pm(o),this.readCaches=!a,e.info({options:i,gitBranchName:c,gitProtectedBranches:l},"Cache storage initialization options");let u=c&&l.includes(c);s||!u?this.writeCaches=!0:this.writeCaches=!1}cacheHeaders;readCaches;writeCaches;async saveEntries({entries:e,testId:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateMobileStepCaches({entries:e,testId:t},this.cacheHeaders)}catch(o){n.warn({err:o},"Failed to save mobile step cache entries, continuing...")}}async resolveEntries(e){if(!this.readCaches){e.logger.debug("Skipping cache resolution because of regenerate flag");return}let{steps:t}=e.stepLists,n=await this.client.getMobileStepCacheForTest({testId:e.testId},this.cacheHeaders);for(let i of[t])i&&Zg({steps:i,stepCacheEntries:n,logger:e.logger});if(!this.writeCaches){e.logger.info("Skipping mobile cache last used at update because branch is protected");return}let{cachesToSave:o}=await Qr({steps:t,cacheCreationParams:{testId:e.testId,orgId:this.orgId}});this.client.updateMobileStepCaches({entries:o,testId:e.testId},this.cacheHeaders)}};async function jM({socket:r,logger:e,globalStateManager:t,authorization:n}){let o=r.id,i=t.getSession(o);i&&n&&i.logFilePath&&gV({testId:i.metadata.testId,sessionId:o,logFilePath:i.logFilePath,authorization:n,logger:e}),await t.removeSession(o,e)}async function gV({testId:r,sessionId:e,logFilePath:t,authorization:n,logger:o}){try{let i;try{i=await Id.stat(t)}catch{o.debug({logFilePath:t},"No logcat file found to upload");return}if(i.size===0){o.debug({logFilePath:t},"Logcat file is empty, skipping upload"),await Id.unlink(t);return}let a=new Xt(n),{uploadUrl:s}=await a.generateMobileLogcatUploadUrl({testId:r,sessionId:e}),c=await Id.readFile(t),l=await fetch(s,{headers:{"Content-Length":c.length.toString(),"Content-Type":"text/plain"},method:"PUT",body:c});if(l.status!==200)throw new Error(`Failed to upload logcat: ${l.status} ${await l.text()}`);o.info({testId:r,sessionId:e},"Logcat file uploaded successfully")}catch(i){o.warn({err:i,testId:r,sessionId:e},"Failed to upload logcat file")}finally{try{await Id.unlink(t)}catch(i){o.warn({err:i,logFilePath:t},"Failed to delete temp logcat file")}}}var hV=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},$M={event:"cancel",createHandler:hV};var fV=({logger:r,globalStateManager:e,socket:t})=>async(n,o)=>{let i=e.getSession(t.id);if(!i){o({err:"No active Android session found"});return}try{let s=await i.controller.getEmulatorDomState();o({a11yTree:s})}catch(a){r.error({err:a},"Error fetching a11y tree from the session controller"),o({err:a.message})}},qM={event:"fetchA11yTree",createHandler:fV};import{diff as HV}from"deep-object-diff";import{cloneDeep as VV}from"lodash-es";import{cloneDeep as UV}from"lodash-es";import{randomUUID as SV}from"crypto";var yV=3;async function KM(r){let{results:e,fixtures:t,work:n}=r,{logger:o}=t,i=e[e.length-1],a=EV(i,n);if(a)return o.info({failedResult:i,isNotEligible:a},"Skipping failure recovery because of ineligible failure"),{type:"NOT_ELIGIBLE",message:`The failed step is not eligible for failure recovery: ${a}`};o.info({failedResult:i},"Attempting failure recovery"),n.state.failureRecoveryAttempts=(n.state.failureRecoveryAttempts??0)+1;try{return await bV(r)}catch(s){return o.warn({err:s},"Error during failure recovery attempt, continuing..."),null}}async function bV(r){let{fixtures:e,results:t,failedStep:n,nextSteps:o,stepTracer:i,work:a}=r,{controller:s,logger:c}=e,l=i.parentTracer,{testMetadata:u}=r.inputs;if(!t.length)throw new Error("Attempted failure recovery with no failed results");let d=`data:image/jpeg;base64,${await s.getScreenshotBase64()}`,m=await s.getEmulatorDomState(),{results:p}=await hC(c,l,t,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=o.map(M=>Uo(M)),h=u.description.trim(),f=u?.settings?.ai?.failureRecoveryInstructions?.trim()||void 0,{scenario:b,thoughts:T,instructions:w}=await s.getMobileFailureRecoveryPlan({currentScreenshot:d,failedResults:p,currentScreenXml:m,nextStepsSerialized:g,testDescription:h,customInstructions:f});if(b!=="RECOVERABLE")return c.info({scenario:b,thoughts:T,instructions:w},"Failure recovery is not applicable"),{type:"NOT_ELIGIBLE",message:`Momentic's failure recovery agent determined that this failure is not eligible for recovery: ${T}`};if(!w)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let x={id:SV(),type:"MOBILE_AI_ACTION_STEP",text:w},R,O=a.state.failureRecoveryDisabled;O||(a.state.failureRecoveryDisabled=!0),c.info("executing mobile step list");try{R=await r.executeMobileStepList({...r,fixtures:{...r.fixtures},listParams:{steps:[x,n],containerName:"AI-recovered step list",tracer:l}})}finally{O||(a.state.failureRecoveryDisabled=O)}let v=R.results[0];if(v&&v.type==="MOBILE_AI_ACTION_STEP")if(R.status==="SUCCESS"){let M=`The following steps were automatically executed by the failure recovery agent. Analysis: ${T}`;return v.message=M,He.increment("test_event",1,["name:failure_recovery_success","platform:native",`orgId:${r.inputs.orgId}`]),c.info({thoughts:T},"Failure recovery succeeded"),{type:"ATTEMPTED",status:"SUCCESS",result:R,message:M}}else{He.increment("test_event",1,["name:failure_recovery_failure","platform:native",`orgId:${r.inputs.orgId}`]);let M=`The following steps were unsuccessfully attempted by the failure recovery agent. Analysis: ${T}`;return v.message=M,c.info({thoughts:T,aiActionResult:v},"Failure recovery failed"),{type:"ATTEMPTED",status:"FAILED",result:R,message:M}}return null}function EV(r,e){if(!r)return"There is no failed result";if(r.type!=="MOBILE_PRESET_STEP")return"The failed step is not a preset action";let t=r.message;return t?t.includes("AbortError:")?"The user aborted the test":cy.some(n=>t.includes(n))?"The failed step is an irrecoverable configuration error":(e.state.failureRecoveryAttempts??0)>yV?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}async function YM(r){let e=Date.now(),t=r.fixtures.controller;try{return await TV(r)}catch(n){let o=t.isAborted()||n instanceof DOMException&&n.name==="AbortError";return{...r.moduleParams.step,steps:[],type:"MOBILE_MODULE_STEP",startTime:e,endTime:Date.now(),status:o?"CANCELLED":"FAILED",message:o?"Step cancelled.":`${n}`}}}async function TV({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await vV({step:n,params:e}),s={};Object.entries(a).forEach(([m,p])=>{s[m]=JSON.stringify(p)});let c={...n,type:"MOBILE_MODULE_STEP",inputs:s,startTime:t,steps:[],endTime:Date.now(),status:"SUCCESS"},l=await o.startSubSteps(),{status:u,results:d}=await i({...e,listParams:{steps:n.steps,containerName:`module ('${n.name}')`,tracer:l}});return c.steps=d,c.status=u,c.endTime=Date.now(),mC({result:c,...pC(d)}),c}async function vV({step:r,params:e}){let t={},{logger:n,controller:o}=e.fixtures;for(let i of r.parameters?.parameterNames??[]){let a=r.inputs?.[i]??r.parameters?.defaultParameters?.[i];if(!a){n.warn({k:i},"No value found for parameter in module");continue}t[i]=await Xr({orgId:e.inputs.orgId,code:a,fragment:!0,logger:n,context:o.context,localTools:o.localCodeEvalTools})}return t}import{randomUUID as XM}from"crypto";import{diff as AV}from"deep-object-diff";import{cloneDeep as RV}from"lodash-es";async function JM({fixtures:r,step:e,inputs:t,stepTracer:n,work:o}){let i=Date.now(),{logger:a,controller:s}=r,c,l="";if(!t.interactive)if(o.lastScreenshot)c=o.lastScreenshot.screenshot,l=o.lastScreenshot.snapshotId;else{l=XM();try{c=Buffer.from(await s.getScreenshotBase64(),"base64")}catch(m){a.warn({err:m},"Failed to take before screenshot")}}let u="cache"in e.command?RV(e.command.cache??{}):{},d={...e,status:"SUCCESS",startTime:i,endTime:Date.now()};try{let m=await s.executeCommand({command:e.command});d={...e,status:m.success?"SUCCESS":"FAILED",message:m.message,startTime:i,endTime:Date.now(),data:m.output}}catch(m){m instanceof Error&&m.name==="AbortError"||s.isAborted()?d={...e,status:"CANCELLED",message:"Step cancelled.",startTime:i,endTime:Date.now()}:(a.error({err:m},"Failed to execute preset step"),d={...e,status:"FAILED",message:m instanceof Error?m.message:String(m),startTime:i,endTime:Date.now()})}finally{if(!t.interactive){try{let g=XM(),h=await s.getScreenshotBase64();d.afterSnapshot=g;let f=Buffer.from(h,"base64");n.attachAfterScreenshot({logger:a,snapshotId:g,screenshot:f}),o.lastScreenshot={snapshotId:g,screenshot:f}}catch(g){a.warn({err:g},"Failed to take after screenshot"),o.lastScreenshot=void 0}c&&(d.beforeSnapshot=l,n.attachBeforeScreenshot({logger:a,snapshotId:l,screenshot:c}))}let m="cache"in e.command?e.command.cache??{}:{},p=AV(u,m);p&&Object.keys(p).length>0&&a.info({diffs:_i(p)},"Updated cache")}return d}import{streamText as DV}from"ai";import{randomUUID as kV}from"crypto";var Pd=class{controller;logger;rootStep;subStepIndex=0;callbacks;finalState=void 0;results=[];constructor(e){let{controller:t,logger:n,callbacks:o,rootStep:i}=e;this.controller=t,this.logger=n,this.callbacks=o,this.rootStep=i}async createAndExecuteStep(e){this.callbacks.onAiActionEvent?.({type:"SUBSTEP_CREATED",rootStep:this.rootStep,step:e});let t=this.subStepIndex++,n=await this.callbacks.executeStep(e,t);return this.results.push(n),n}recordGenericToolCall(e){this.callbacks.onAiActionEvent?.({type:"GENERIC_TOOL_CALLED",toolName:e,rootStep:this.rootStep})}};import{hasToolCall as LV,stepCountIs as NV}from"ai";var of="get_emulator_state",Od="finish";import QM from"dedent";var CV=QM`
4368
+ `).pop()?.replace(/^.*\//,""),!n)throw new E("UserConfigurationError",`Could not parse main activity name for package ${e.packageName}. Raw output: ${a}`)}if(this.options.emulator?.autoGrantPermissions&&!this.appsWithGrantedPermissions.has(e.packageName)){let i={permissions:"all",appPackage:e.packageName,action:"grant"};await this.driver.executeScript("mobile: changePermissions",[i]),this.appsWithGrantedPermissions.add(e.packageName)}let o=["start"];if(e.intentExtras)try{let i=JSON.parse(e.intentExtras);for(let[a,s]of Object.entries(i))o.push("-e",a,typeof s=="string"?s:JSON.stringify(s))}catch(i){throw new E("UserConfigurationError",`Invalid intent extras does not parse as valid JSON: ${i instanceof Error?i.message:`${i}`}`)}return o.push("-n",`${e.packageName}/${n}`),await this.driver.execute("mobile: shell",{command:"am",args:o}),await this.stateManager.waitForPageSourceStability({timeoutMs:5e3,signal:this.abortSignal,reason:"Waiting for stability after app launch"}),this.stateManager.refreshWebviewsManually("new app launch"),{success:!0}}case"PRESS":{let n=new Zn(this.constructPerformerParams());switch(e.key){case"HOME":await n.doPress({keycode:3});break;case"BACK":await n.doPress({keycode:4});break;case"APP_SWITCHER":await n.doPress({keycode:187});break;case"POWER":await n.doPress({keycode:26});break;case"SEARCH":await n.doPress({keycode:84});break;case"VOLUME_UP":await n.doPress({keycode:24});break;case"VOLUME_DOWN":await n.doPress({keycode:25});break;case"VOLUME_MUTE":await n.doPress({keycode:164});break}return{success:!0}}case"PRESS_KEYBOARD":{let n=new Zn(this.constructPerformerParams()),o=i=>n.doPress({keycode:i});switch(e.key){case"CLOSE_KEYBOARD":{let i=Date.now();for(;Date.now()-i<5e3&&(await this.driver.hideKeyboard(),!!await this.driver.isKeyboardShown()););break}case"ENTER":await o(66);break;case"BACKSPACE":await o(67);break;default:{let i=e}}return{success:!0}}case"WAIT":return await q(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"INSTALL_APP":return new bd(this.constructPerformerParams()).doInstallApk(e);case"UNINSTALL_APP":return new wd(this.constructPerformerParams()).doUninstallApk(e);case"ADD_FILE":{let n=await zM(e.file);return await this.driver.pushFile(e.storageLocation,n),await this.driver.execute("mobile: shell",{command:"am",args:["broadcast","-a","android.intent.action.MEDIA_SCANNER_SCAN_FILE","-d",`file://${e.storageLocation}`]}),{success:!0}}case"TOGGLE_SETTINGS":{switch(e.settingsType){case"AIRPLANE_MODE":await this.driver.toggleAirplaneMode();break;case"DATA":await this.driver.toggleData();break;case"WIFI":await this.driver.toggleWiFi();break;case"LOCATION":await this.driver.toggleLocationServices();break;default:throw e.settingsType,new E("UserConfigurationError",`Unknown settings type: ${e.settingsType}`)}return{success:!0}}case"ROTATE_ORIENTATION":return await this.driver.execute("mobile: shell",{command:"settings",args:["put","system","accelerometer_rotation","0"]}),await this.driver.execute("mobile: shell",{command:"settings",args:["put","system","user_rotation",e.orientation==="LANDSCAPE"?"1":"0"]}),{success:!0,output:{newViewportBounds:await this.getViewportBounds()}};case"ADB":{let n=await this.driver.execute(e.command,JSON.parse(e.jsonArgs??"{}"));return this.logger.info({output:n},"ADB command executed successfully"),{success:!0,output:n,message:"ADB command executed successfully"}}case"KILL_APP":{let n=await this.stateManager.getCurrentPackage();if(!n)throw new E("UserConfigurationError","No package is currently active");await this.driver.execute("mobile: shell",{command:"input",args:["keyevent","KEYCODE_HOME"]}),await this.driver.terminateApp(n);try{await bM({packageName:n,driver:this.driver,abortSignal:this.abortSignal,logger:this.logger})}catch(o){this.throwIfAborted(),this.logger.warn({err:o,packageName:n},"Failed to remove package from recents, continuing...")}return{success:!0}}case"STATE":{await this.stateManager.refreshWebviewsManually("debug cmd");let n=await this.stateManager.getDomState(),o=await this.stateManager.getContexts(),i={xml:n.graph.xml,contexts:o};return this.logger.info({result:i},"State debug command output"),{output:i,success:!0}}default:{let n=e;return{success:!0}}}}async initializeSettings(){let{latitude:e,longitude:t}=this.options?.emulator?.geolocation??ql;await this.driver.execute("mobile: shell",{command:"pm",args:["grant","io.appium.settings","android.permission.ACCESS_COARSE_LOCATION"]}),await this.driver.execute("mobile: shell",{command:"pm",args:["grant","io.appium.settings","android.permission.ACCESS_FINE_LOCATION"]}),await this.driver.setGeoLocation({latitude:e,longitude:t})}async getScreenshotBase64(){return this.stateManager.getRawScreenshotBase64()}async getScreenshotPngString(){return this.stateManager.getCurrentScreenshotPngString()}async getEmulatorDomState(){return(await this.stateManager.getDomState({})).graph.xml}async executeRawADBCommand(e){return this.stateManager.executeRawADBCommand(e)}async getViewportBounds(){return this.stateManager.getViewportBounds()}async waitForScreenshotStability(e){return this.stateManager.waitForScreenshotStability({timeoutMs:e.timeoutMs??5e3,reason:e.reason,signal:this.aborter.controller?.signal})}async getMobileFailureRecoveryPlan(e){return this.generator.getMobileFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.abortSignal,loggerTags:Se(this.logger)})}async waitForPageSourceStability(e){return this.stateManager.waitForPageSourceStability({timeoutMs:e.timeoutMs??5e3,reason:e.reason,signal:this.aborter.controller?.signal})}resetAbortController(e){this.aborter.controller=e??new AbortController}isAborted(){return this.aborter.controller?.signal.aborted}abort(){this.aborter.controller?.abort()}async cleanup(){await this.stateManager.cleanupWebviews()}get abortSignal(){return this.aborter.controller?.signal}get context(){return this.fixtures.testContext}get localCodeEvalTools(){return this.fixtures.localCodeEvalTools}};async function VM({socket:r,logger:e,orgId:t,testMetadata:n,globalOrgSettings:o,androidDriverFactory:i,mobileGeneratorFactory:a,browserGeneratorFactory:s,browserEnricherFactory:c,storageFactory:l,localToolsFactory:u,globalStateManager:d,getGitMetadata:m}){let p=r.id,g=await m(),h=r.handshake.query?.fileName,f=h?HM.basename(h,".test.yaml"):"",b=n.id,T=n.settings?.defaultChannel,w=n.settings?.defaultTag;e=e.child({sessionId:p,testId:b,orgId:t,branch:g.gitBranchName});let x=await l(t),R=n.settings?.defaultEnv,O={};R&&(O=(await x.fetchEnvironment(R,e))?.variables??{});let v=Pi.parse(O[Eo]),M=Pi.parse(O[Ya]),G={...o.emulator,...n.settings?.emulator},H=n.settings?.defaultApkFilePath?.trim()||M,W=d.getSession(p);if(W){if(e.info("Reconnecting to existing Android session"),W.local)return r.emit("session",W.metadata),W.softDeleted=!1,W.metadata;throw new Error("Restoring existing remote emulator sessions is not supported. Please reconnect to a new emulator.")}let K;if(G.region==="local"){if(await d.clearSoftDeletedLocalSessions(e),d.hasActiveLocalSession())throw new Error("Another local emulator session is already active. Please close the existing session before creating a new one.");let rr=n.settings?.emulator?.localEmulatorSettings?.avdId?.trim()||v;if(!rr)throw new Error(`AVD ID is required when using a local emulator. Set it on the test (Options \u2192 Emulator \u2192 Local AVD ID) or on the environment via ${Eo}.`);K={avdId:rr,apkToInstall:T?{channel:T,tag:w}:void 0,apkFilePath:H}}else K={region:G.region,apkToInstall:T?{channel:T,tag:w}:void 0,osVersion:G.remoteEmulatorSettings?.androidVersion};let ve=Date.now(),{driver:re,cleanup:B,emulatorName:ce,adbPort:fe,limbarClient:Je,limbarToken:Le,limbarUrl:Lt,playwrightDevice:jt}=await i({socket:r,logger:e,creationOpts:K}),Ne=HM.join(rV(),`logcat-logs-${t}-${b}-${p}.txt`),dt=await Iu({driver:re,onLogs:rr=>{r.emit("logcatLogs",rr)},logFilePath:Ne});e.info({adbPort:fe,apkChannel:T,apkTag:w,duration:Date.now()-ve,emulatorName:ce},"Android emulator session initiated"),e=e.child({emulator:ce});let sn=await a(t,e),Rn=await s(t,e),ti=await c(t,e),wl=u?await u(t):void 0,oo=new xi({variablesFromEnvironment:O,envName:R,testName:f}),wn=await la.init({driver:re,generator:sn,logger:e,limbarClient:Je,playwrightDevice:jt,aiSettings:{...o.ai,useMemory:o.ai?.useMemory!==!1,...n.settings?.ai},options:{emulator:{...G,browserSettings:o.browser}},fixtures:{storage:x,browserEnricher:ti,browserGenerator:Rn,localCodeEvalTools:wl,testContext:oo},orgId:t,adbPort:fe,abortController:new AbortController}),ri=await wn.getViewportBounds();if(!r.connected)throw await wn.cleanup(),await dt(),await B(),new Error("Socket not connected anymore, not proceeding with Android session setup");let Ca=nV({socket:r,testContext:oo}),io=async()=>{clearInterval(Ca);try{await Promise.allSettled([wn.cleanup(),dt(),B()])}catch(rr){e.warn({err:rr},"Failed to clean up emulator in socket server")}},j={sessionId:p,testId:b,orgId:t,emulatorName:ce,testName:f,limbarUrl:Lt,limbarToken:Le,viewportBounds:ri};return d.registerSession(p,{controller:wn,cleanup:io,emulatorName:ce,local:G.region==="local",metadata:j,logFilePath:Ne}),r.emit("session",j),j}function nV({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}import Id from"fs/promises";import{z as dV}from"zod";var k="v1",Zh="mobile-cli",Yo="0.21.2";var oV=9e4,iV=3,aV=1500,sV=15e3,Dr=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function lV(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var ef=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Yo&&(e[Cc]=Yo),Zh&&(e[PE]=Zh),e}async sendRequest(e,t){let{retries:n=iV,requestTimeoutMs:o=oV,initialRetryDelayMs:i=aV,maxRetryDelayMs:a=sV,onFailedRequest:s}=t,c=n,l=n,u,d={path:e,baseUrl:this.baseUrl,method:t.method};for(;c>0;)try{return c--,await this.sendSingleRequestHelper(e,t,o)}catch(m){u=m;try{s?.(u)}catch{}if(m instanceof Dr&&m.status>=400&&m.status<500)throw m;if(m instanceof Error&&m.name==="AbortError"&&(u=new Gn),c===0)throw u;let p=l-c,g=Math.min(i*Math.pow(2,p-1),a);await new Promise(h=>setTimeout(h,g))}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(e,t,n){let o={path:e,baseUrl:this.baseUrl,method:t.method},i=new AbortController,a=setTimeout(()=>i.abort(),n),s=()=>i.abort();t.signal&&t.signal.addEventListener("abort",s,{once:!0});let c=Date.now(),l={...this.getHeaders(),...t.extraHeaders};try{let u=await fetch(`${this.baseUrl}${e}`,{method:t.method,body:t.body?JSON.stringify(t.body):void 0,headers:l,signal:i.signal});if(!u.ok){let p=await lV(u);throw new Dr(u.status,p,`Request to ${t.method} ${e} failed with status ${u.status}: ${p}`)}let d;if(u.status===204)d={};else if(t.responseType==="buffer"){let p=await u.arrayBuffer();d=Buffer.from(p)}else{let p=await u.text();try{d=JSON.parse(p)}catch{d=p}}this.logger&&t.logResponse===!0&&d&&this.logger.debug({result:d,status:u.status,durationMs:Date.now()-c,...o},"Got response from Momentic server");let m=t.responseHeadersObject;return m&&u.headers.forEach((p,g)=>{m[g.toLowerCase()]=p}),d}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",s)}}},on=class extends ef{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[IE]:this.mode??""}}};import{createAnthropic as cV}from"@ai-sdk/anthropic";function uV(r){let{apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o}=r,i={Authorization:`Bearer ${e}`,[Cc]:Yo??"",...t&&{[LE]:t},...n||{}};return o&&(i[OE]=JSON.stringify(o)),i}var Cd=r=>e=>{let t=uV(r);return cV({baseURL:`${r.baseUrl}/v1/llm/anthropic/${e}`,headers:t,apiKey:r.apiKey})(e)};var Xo=class extends on{agentConfig;constructor(e,t){let n={...Ab,...e};super(t),this.agentConfig=n}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:t.abortSignal});return lb.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${k}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Yo,...e},signal:t.abortSignal});return sb.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${k}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return dV.string().parse(t)}async getElementLocation(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.locator},o=await this.sendRequest(`/${k}/web-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return BE.parse(o)}async getAssertionResult(e,t){let n={...e,disableCache:!!t.disableCache,useConsensus:!!t.useConsensus,attemptNumber:t.attemptNumber,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.assertion},o=await this.sendRequest(`/${k}/web-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Im.parse(o)}async getLintStepResult(e,t){let n={...e,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/lint/step`,{method:"POST",body:n,signal:t.abortSignal});return UE.parse(o)}async getLintMcpCopilotMessageResult(e,t){let n={message:e.message,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:t.abortSignal});return DE.parse(o)}async getMcpCopilotConversationEvaluation(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/mcp-copilot-conversation-evaluator`,{method:"POST",body:n,signal:t.abortSignal});return kE.parse(o)}async getMcpCopilotChatSummary(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/mcp-copilot-chat-summary`,{method:"POST",body:n,signal:t.abortSignal});return FE.parse(o)}async getVisualAssertionResult(e,t){let n={...e,disableCache:!!t.disableCache,useConsensus:!!t.useConsensus,attemptNumber:t.attemptNumber,loggerTags:t.loggerTags,useMemory:t.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},o=await this.sendRequest(`/${k}/web-agent/visual-assertion`,{method:"POST",body:n,signal:t.abortSignal});return Im.parse(o)}async getAiActionCommand(e,t){let n=await this.sendRequest(`/${k}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return NE.parse(n)}async getMultiturnAiActionCommand(e,t){return await this.sendRequest(`/${k}/web-agent/ai-action/next-command`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal})}async getMultiturnAiActionEvaluation(e,t){let n=await this.sendRequest(`/${k}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return Dp.parse(n)}async getReverseMappedDescription(e,t){let n=await this.sendRequest(`/${k}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return zE.parse(n)}async getTextExtraction(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${k}/web-agent/text-extraction`,{method:"POST",body:n,signal:t.abortSignal});return Lp.parse(o)}async getPageSummary(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/page-summary`,{method:"POST",body:n,signal:t.abortSignal});return Gy.parse(o)}async getSmartWaitingDecision(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/web-agent/smart-waiting`,{method:"POST",body:n,signal:t.abortSignal});return Hy.parse(o)}async getTestResultClassification(e,t){let n=await this.sendRequest(`/${k}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return bp.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${k}/web-agent/extract-keywords`,{method:"POST",body:e,signal:t.abortSignal});return vb.parse(n)}async getAutohealingProposal(e,t){let n=await this.sendRequest(`/${k}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return ky.parse(n)}async getFailureRecoveryProposal(e,t){let n=await this.sendRequest(`/${k}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return By.parse(n)}async getFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${k}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Uy.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${k}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return Xf.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return Cd({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as tf}from"zod";var Xt=class extends on{constructor(e){super({...e,mode:void 0})}getAppUrl(){return Es(this.baseUrl)}async getAuthInfo(){let e=await this.sendRequest(`/${k}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3,onFailedRequest:t=>{C.warn(`API key check failed: ${t.message}`)}});return ZE.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${k}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return YE.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${k}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return HE.parse(t)}async updateStepCaches(e,t){await this.sendRequest(`/${k}/cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,t){let n=await this.sendRequest(`/${k}/cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return WE.parse(n)}async updateMobileStepCaches(e,t){await this.sendRequest(`/${k}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,t){let n=await this.sendRequest(`/${k}/mobile-cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return jE.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${k}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return GE.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${k}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return QE.parse(t)}async uploadOnDemandScreenshot(e){return await this.sendRequest(`/${k}/on-demand-screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${k}/on-demand-screenshots/${e.id}`}}async fetchOnDemandScreenshot(e){let t={};return{data:await this.sendRequest(`/${k}/on-demand-screenshots/${encodeURIComponent(e)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:t}),contentType:t["content-type"]??"image/jpeg"}}async getAllEnvironments(){let e=await this.sendRequest(`/${k}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return eT.parse(e)}async acquireCacheLock(e,t){let n=await this.sendRequest(`/${k}/result-cache/lock`,{method:"POST",body:e,signal:t,retries:3,requestTimeoutMs:3e4});return ST.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${k}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${k}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${k}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${k}/result-cache/entry`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(t){if(t instanceof Error&&t.message.includes("404"))return null;throw t}}async queueSuiteRuns(e){let t=await this.sendRequest(`/${k}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return tT.parse(t)}async bulkGetRunGroupStatus(e){let t={runGroupIds:e},n=await this.sendRequest(`/${k}/run-groups/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return nb.array().parse(n)}async uploadProposedSteps(e,t){try{await this.sendRequest(`/${k}/test-fragments/`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4})}catch(n){t.error({err:n},"Failed to upload proposed steps")}}async reportBillableEvents(e,t){try{await this.sendRequest(`/${k}/billing/events`,{method:"POST",body:t,retries:10,requestTimeoutMs:1e4})}catch(n){e.error({err:n},"Failed to report billable event")}}async fetchTestFragment(e){let t=await this.sendRequest(`/${k}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return rT.parse(t)}async patchTestFragment(e,t){await this.sendRequest(`/${k}/test-fragments/${e}`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,t){let n=await this.sendRequest(`/${k}/results/tests/${e}`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nT.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${k}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return oT.parse(e)}async startProcessingResultsUpload(e,t){let n=await this.sendRequest(`/${k}/results/uploads/${e}/process`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return iT.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${k}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ET.parse(t)}catch(t){return e.error({err:t},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,t){try{await this.sendRequest(`/${k}/knowledge-base/icons`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(n){t.error({err:n},"Failed to save new icons to icon knowledge base")}}async getMergeBaseCommitFromGithub(e,t,n,o){let i=new URLSearchParams;i.set("base",n),i.set("head",o);let a=await this.sendRequest(`/${k}/git/github/${e}/${t}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(a)}async getCommitFromGithub(e,t,n){let o=await this.sendRequest(`/${k}/git/github/${e}/${t}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(o)}async getMergedBranchFromGithub(e,t,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${k}/git/github/${e}/${t}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Nm.parse(a)}async getMergeBaseCommitFromGitlab(e,t,n){let o=new URLSearchParams;o.set("base",t),o.set("head",n);let i=encodeURIComponent(e),a=await this.sendRequest(`/${k}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bs.parse(a)}async getCommitFromGitlab(e,t){let n=encodeURIComponent(e),o=await this.sendRequest(`/${k}/git/gitlab/${n}/commits/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return bs.parse(o)}async getMergedBranchFromGitlab(e,t,n){let o=encodeURIComponent(t),i=encodeURIComponent(e),a=await this.sendRequest(`/${k}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Nm.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${k}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return tf.record(tf.string(),tf.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${k}/quarantine`,{method:"GET"});return aT.parse(e)}async quarantineTest(e,t,n){await this.sendRequest(`/${k}/quarantine`,{method:"POST",body:{testId:e.id,testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async unquarantineTest(e,t,n){await this.sendRequest(`/${k}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let t=await this.sendRequest(`/${k}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return sT.parse(t)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${k}/limbar/android/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async generateAndroidAssetUrls({channel:e,tag:t,md5:n}){let o={channel:e,tag:t,md5:n},i=await this.sendRequest(`/${k}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return cT.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${k}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${k}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return uT.parse(e)}async getLimbarAssetDownloadUrl(e,t){let n=await this.sendRequest(`/${k}/limbar/assets/${e}/${t}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return dT.parse(n)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${k}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}async createIosEmulator(e){let t=await this.sendRequest(`/${k}/limbar/ios`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return lT.parse(t)}async extendIosEmulatorTtl(e){try{await this.sendRequest(`/${k}/limbar/ios/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async deleteIosEmulator(e){await this.sendRequest(`/${k}/limbar/ios/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async generateMobileLogcatUploadUrl(e){let t=await this.sendRequest(`/${k}/logcat/mobile/upload`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Wb.parse(t)}};async function rf(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return C.debug("Got auth info from API"),n}var xd=class{apiClient;constructor(e){this.apiClient=e}async reportBillableEvents(e,t){await this.apiClient.reportBillableEvents(e,t)}};var ca=class extends on{generator;constructor(e,t){super(e),this.generator=t}async runTemplateMatching(e,t={}){let n=await this.sendRequest(`/${k}/web-agent/template-matching`,{method:"POST",body:e,signal:t?.signal});return Jf.parse(n)}async constructIframeRegex(e,t={}){return this.generator.getIframeRegex(e,{abortSignal:t.signal})}};var ua=class{constructor(e,t){this.client=e;this.orgId=t}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let e=this.getApiServerUrl();return Es(e)}async acquireCacheLock(e,t){return this.client.acquireCacheLock(e,t)}async createOnDemandScreenshot(e,t,n){let{apiServerUrl:o}=await this.client.uploadOnDemandScreenshot({id:e,screenshot:t.toString("base64"),contentType:n});return{apiServerUrl:o,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${e}`,universalHandle:{id:e,contentType:n}}}async fetchOnDemandScreenshot(e){return this.client.fetchOnDemandScreenshot(e.id)}async releaseCacheLock(e){return this.client.releaseCacheLock(e)}async deleteCacheResult(e){return this.client.deleteCacheResult(e)}async setCacheResult(e){return this.client.setCacheResult(e)}async getCacheResult(e){return this.client.getCacheResult(e)}fetchIconKnowledgeBase(e){return this.client.fetchIconKnowledgeBase(e)}saveNewIcons(e,t){return this.client.saveNewIcons(e,t)}};import{Faker as pV,en as mV}from"@faker-js/faker";var da="v1",pa=class{httpClient;fakerInstance;type="API_CLIENT";sms={send:this.sendSms.bind(this),fetchLatest:this.fetchLatestSms.bind(this)};email={send:this.sendEmail.bind(this),fetchLatest:this.fetchLatestEmail.bind(this),fetchAll:this.fetchAllEmails.bind(this)};ai={generate:this.sendAiGenerate.bind(this)};constructor(e){this.httpClient=e.httpClient,e.fakerSeed&&(this.fakerInstance=new pV({locale:mV}),this.fakerInstance.seed(e.fakerSeed))}async sendAiGenerate(e){let t=typeof e=="string"?{input:e}:e;return this.httpClient.sendRequest(`/${da}/tools/ai/generate`,{method:"POST",body:t}).catch(n=>{throw n instanceof Dr?new Error(n.rawError):new Error(`Failed to send AI generation: ${n.message}`)})}async sendSms(e){return this.httpClient.sendRequest(`/${da}/tools/sms/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to send sms: ${t.message}`)})}async fetchLatestSms(e){return this.httpClient.sendRequest(`/${da}/tools/sms/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):t})}async sendEmail(e){return this.httpClient.sendRequest(`/${da}/tools/email/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to send email: ${t.message}`)})}async fetchAllEmails(e){return this.httpClient.sendRequest(`/${da}/tools/email/fetchAll`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to fetch all emails: ${t.message}`)})}async fetchLatestEmail(e){return this.httpClient.sendRequest(`/${da}/tools/email/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Dr?new Error(t.rawError):new Error(`Failed to fetch latest emails: ${t.message}`)})}};function WM(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var Md=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await WM(n,"application/zip",t);if(!i.ok)throw new Error(`Failed to upload test results: ${await i.text()}`);let{runGroupId:a}=await this.client.startProcessingResultsUpload(o,{runGroupId:e});return a}};var ma=class extends on{constructor(e){super(e)}async getMobileElementLocation(e,t){let n={...e,disableCache:t.disableCache,useMemory:t.useMemory,agentConfigVersion:t.agentConfigVersion,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return qb.parse(o)}async evaluateMobileAssertion(e,t){let n={...e,disableCache:t.disableCache,useMemory:t.useMemory,agentConfigVersion:t.agentConfigVersion,loggerTags:t.loggerTags},o=await this.sendRequest(`/${k}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Xb.parse(o)}async getMobileFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${k}/mobile-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Qb.parse(n)}getVercelAnthropicModelFactory({loggerTags:e,sessionId:t}){return Cd({baseUrl:this.baseUrl,apiKey:this.apiKey,sessionId:t,loggerTags:e})}};function _d({logger:r,orgId:e,client:t,gitMetadata:n,regenerateCache:o,alwaysSaveCache:i,noCache:a}){return a?new Mc:new nf(r,e,t,n,{alwaysSaveCache:i,regenerateCache:o})}var nf=class{constructor(e,t,n,o,i){this.orgId=t;this.client=n;let{regenerateCache:a,alwaysSaveCache:s}=i,{gitBranchName:c,gitProtectedBranches:l}=o;this.cacheHeaders=Pm(o),this.readCaches=!a,e.info({options:i,gitBranchName:c,gitProtectedBranches:l},"Cache storage initialization options");let u=c&&l.includes(c);s||!u?this.writeCaches=!0:this.writeCaches=!1}cacheHeaders;readCaches;writeCaches;async saveEntries({entries:e,testId:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateMobileStepCaches({entries:e,testId:t},this.cacheHeaders)}catch(o){n.warn({err:o},"Failed to save mobile step cache entries, continuing...")}}async resolveEntries(e){if(!this.readCaches){e.logger.debug("Skipping cache resolution because of regenerate flag");return}let{steps:t}=e.stepLists,n=await this.client.getMobileStepCacheForTest({testId:e.testId},this.cacheHeaders);for(let i of[t])i&&Zg({steps:i,stepCacheEntries:n,logger:e.logger});if(!this.writeCaches){e.logger.info("Skipping mobile cache last used at update because branch is protected");return}let{cachesToSave:o}=await Qr({steps:t,cacheCreationParams:{testId:e.testId,orgId:this.orgId}});this.client.updateMobileStepCaches({entries:o,testId:e.testId},this.cacheHeaders)}};async function jM({socket:r,logger:e,globalStateManager:t,authorization:n}){let o=r.id,i=t.getSession(o);i&&n&&i.logFilePath&&gV({testId:i.metadata.testId,sessionId:o,logFilePath:i.logFilePath,authorization:n,logger:e}),await t.removeSession(o,e)}async function gV({testId:r,sessionId:e,logFilePath:t,authorization:n,logger:o}){try{let i;try{i=await Id.stat(t)}catch{o.debug({logFilePath:t},"No logcat file found to upload");return}if(i.size===0){o.debug({logFilePath:t},"Logcat file is empty, skipping upload"),await Id.unlink(t);return}let a=new Xt(n),{uploadUrl:s}=await a.generateMobileLogcatUploadUrl({testId:r,sessionId:e}),c=await Id.readFile(t),l=await fetch(s,{headers:{"Content-Length":c.length.toString(),"Content-Type":"text/plain"},method:"PUT",body:c});if(l.status!==200)throw new Error(`Failed to upload logcat: ${l.status} ${await l.text()}`);o.info({testId:r,sessionId:e},"Logcat file uploaded successfully")}catch(i){o.warn({err:i,testId:r,sessionId:e},"Failed to upload logcat file")}finally{try{await Id.unlink(t)}catch(i){o.warn({err:i,logFilePath:t},"Failed to delete temp logcat file")}}}var hV=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},$M={event:"cancel",createHandler:hV};var fV=({logger:r,globalStateManager:e,socket:t})=>async(n,o)=>{let i=e.getSession(t.id);if(!i){o({err:"No active Android session found"});return}try{let s=await i.controller.getEmulatorDomState();o({a11yTree:s})}catch(a){r.error({err:a},"Error fetching a11y tree from the session controller"),o({err:a.message})}},qM={event:"fetchA11yTree",createHandler:fV};import{diff as HV}from"deep-object-diff";import{cloneDeep as VV}from"lodash-es";import{cloneDeep as UV}from"lodash-es";import{randomUUID as SV}from"crypto";var yV=3;async function KM(r){let{results:e,fixtures:t,work:n}=r,{logger:o}=t,i=e[e.length-1],a=EV(i,n);if(a)return o.info({failedResult:i,isNotEligible:a},"Skipping failure recovery because of ineligible failure"),{type:"NOT_ELIGIBLE",message:`The failed step is not eligible for failure recovery: ${a}`};o.info({failedResult:i},"Attempting failure recovery"),n.state.failureRecoveryAttempts=(n.state.failureRecoveryAttempts??0)+1;try{return await bV(r)}catch(s){return o.warn({err:s},"Error during failure recovery attempt, continuing..."),null}}async function bV(r){let{fixtures:e,results:t,failedStep:n,nextSteps:o,stepTracer:i,work:a}=r,{controller:s,logger:c}=e,l=i.parentTracer,{testMetadata:u}=r.inputs;if(!t.length)throw new Error("Attempted failure recovery with no failed results");let d=`data:image/jpeg;base64,${await s.getScreenshotBase64()}`,m=await s.getEmulatorDomState(),{results:p}=await hC(c,l,t,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=o.map(M=>Uo(M)),h=u.description.trim(),f=u?.settings?.ai?.failureRecoveryInstructions?.trim()||void 0,{scenario:b,thoughts:T,instructions:w}=await s.getMobileFailureRecoveryPlan({currentScreenshot:d,failedResults:p,currentScreenXml:m,nextStepsSerialized:g,testDescription:h,customInstructions:f});if(b!=="RECOVERABLE")return c.info({scenario:b,thoughts:T,instructions:w},"Failure recovery is not applicable"),{type:"NOT_ELIGIBLE",message:`Momentic's failure recovery agent determined that this failure is not eligible for recovery: ${T}`};if(!w)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let x={id:SV(),type:"MOBILE_AI_ACTION_STEP",text:w},R,O=a.state.failureRecoveryDisabled;O||(a.state.failureRecoveryDisabled=!0),c.info("executing mobile step list");try{R=await r.executeMobileStepList({...r,fixtures:{...r.fixtures},listParams:{steps:[x,n],containerName:"AI-recovered step list",tracer:l}})}finally{O||(a.state.failureRecoveryDisabled=O)}let v=R.results[0];if(v&&v.type==="MOBILE_AI_ACTION_STEP")if(R.status==="SUCCESS"){let M=`The following steps were automatically executed by the failure recovery agent. Analysis: ${T}`;return v.message=M,He.increment("test_event",1,["name:failure_recovery_success","platform:native",`orgId:${r.inputs.orgId}`]),c.info({thoughts:T},"Failure recovery succeeded"),{type:"ATTEMPTED",status:"SUCCESS",result:R,message:M}}else{He.increment("test_event",1,["name:failure_recovery_failure","platform:native",`orgId:${r.inputs.orgId}`]);let M=`The following steps were unsuccessfully attempted by the failure recovery agent. Analysis: ${T}`;return v.message=M,c.info({thoughts:T,aiActionResult:v},"Failure recovery failed"),{type:"ATTEMPTED",status:"FAILED",result:R,message:M}}return null}function EV(r,e){if(!r)return"There is no failed result";if(r.type!=="MOBILE_PRESET_STEP")return"The failed step is not a preset action";let t=r.message;return t?t.includes("AbortError:")?"The user aborted the test":cy.some(n=>t.includes(n))?"The failed step is an irrecoverable configuration error":(e.state.failureRecoveryAttempts??0)>yV?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}async function YM(r){let e=Date.now(),t=r.fixtures.controller;try{return await TV(r)}catch(n){let o=t.isAborted()||n instanceof DOMException&&n.name==="AbortError";return{...r.moduleParams.step,steps:[],type:"MOBILE_MODULE_STEP",startTime:e,endTime:Date.now(),status:o?"CANCELLED":"FAILED",message:o?"Step cancelled.":`${n}`}}}async function TV({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await vV({step:n,params:e}),s={};Object.entries(a).forEach(([m,p])=>{s[m]=JSON.stringify(p)});let c={...n,type:"MOBILE_MODULE_STEP",inputs:s,startTime:t,steps:[],endTime:Date.now(),status:"SUCCESS"},l=await o.startSubSteps(),{status:u,results:d}=await i({...e,listParams:{steps:n.steps,containerName:`module ('${n.name}')`,tracer:l}});return c.steps=d,c.status=u,c.endTime=Date.now(),mC({result:c,...pC(d)}),c}async function vV({step:r,params:e}){let t={},{logger:n,controller:o}=e.fixtures;for(let i of r.parameters?.parameterNames??[]){let a=r.inputs?.[i]??r.parameters?.defaultParameters?.[i];if(!a){n.warn({k:i},"No value found for parameter in module");continue}t[i]=await Xr({orgId:e.inputs.orgId,code:a,fragment:!0,logger:n,context:o.context,localTools:o.localCodeEvalTools})}return t}import{randomUUID as XM}from"crypto";import{diff as AV}from"deep-object-diff";import{cloneDeep as RV}from"lodash-es";async function JM({fixtures:r,step:e,inputs:t,stepTracer:n,work:o}){let i=Date.now(),{logger:a,controller:s}=r,c,l="";if(!t.interactive)if(o.lastScreenshot)c=o.lastScreenshot.screenshot,l=o.lastScreenshot.snapshotId;else{l=XM();try{c=Buffer.from(await s.getScreenshotBase64(),"base64")}catch(m){a.warn({err:m},"Failed to take before screenshot")}}let u="cache"in e.command?RV(e.command.cache??{}):{},d={...e,status:"SUCCESS",startTime:i,endTime:Date.now()};try{let m=await s.executeCommand({command:e.command});d={...e,status:m.success?"SUCCESS":"FAILED",message:m.message,startTime:i,endTime:Date.now(),data:m.output}}catch(m){m instanceof Error&&m.name==="AbortError"||s.isAborted()?d={...e,status:"CANCELLED",message:"Step cancelled.",startTime:i,endTime:Date.now()}:(a.error({err:m},"Failed to execute preset step"),d={...e,status:"FAILED",message:m instanceof Error?m.message:String(m),startTime:i,endTime:Date.now()})}finally{if(!t.interactive){try{let g=XM(),h=await s.getScreenshotBase64();d.afterSnapshot=g;let f=Buffer.from(h,"base64");n.attachAfterScreenshot({logger:a,snapshotId:g,screenshot:f}),o.lastScreenshot={snapshotId:g,screenshot:f}}catch(g){a.warn({err:g},"Failed to take after screenshot"),o.lastScreenshot=void 0}c&&(d.beforeSnapshot=l,n.attachBeforeScreenshot({logger:a,snapshotId:l,screenshot:c}))}let m="cache"in e.command?e.command.cache??{}:{},p=AV(u,m);p&&Object.keys(p).length>0&&a.info({diffs:_i(p)},"Updated cache")}return d}import{streamText as DV}from"ai";import{randomUUID as kV}from"crypto";var Pd=class{controller;logger;rootStep;subStepIndex=0;callbacks;finalState=void 0;results=[];constructor(e){let{controller:t,logger:n,callbacks:o,rootStep:i}=e;this.controller=t,this.logger=n,this.callbacks=o,this.rootStep=i}async createAndExecuteStep(e){this.callbacks.onAiActionEvent?.({type:"SUBSTEP_CREATED",rootStep:this.rootStep,step:e});let t=this.subStepIndex++,n=await this.callbacks.executeStep(e,t);return this.results.push(n),n}recordGenericToolCall(e){this.callbacks.onAiActionEvent?.({type:"GENERIC_TOOL_CALLED",toolName:e,rootStep:this.rootStep})}};import{hasToolCall as LV,stepCountIs as NV}from"ai";var of="get_emulator_state",Od="finish";import QM from"dedent";var CV=QM`
4369
4369
  You cannot interact with the user directly. If you feel like you need to ask the user for clarification, or you are stuck, call the "finish" tool with success=false. Never output text without calling a tool.
4370
4370
  `,ZM=r=>QM`
4371
4371
  <background>
@@ -4398,13 +4398,13 @@ Momentic users value the following:
4398
4398
  b) There is a loading state that blocks you from proceeding with generation, and you need to wait until the state changes. In this case, you can generate an AI_CHECK step for the anticipated "done" state (e.g. "There is no loading spinner visible"). Unless explicitly specified by the user, you can generate and retry an assertion up to 3 times with a timeout up to 30 seconds each.
4399
4399
  If the max. allowed retries is exceeded, fail the generation cycle by calling "finish".
4400
4400
  </rules>
4401
- `;import{tool as _V}from"ai";import{randomUUID as IV}from"crypto";import PV from"zod";import{tool as xV}from"ai";import MV from"zod";var e_=r=>{let e=xV({description:"Get the current state of the emulator (XML + screenshot)",inputSchema:MV.object({}),toModelOutput:t=>t,execute:async()=>{let{controller:t,logger:n,contextManager:o}=r;return o.recordGenericToolCall(of),n.info("AI action tool called (get_emulator_state)"),af(t)}});return{name:of,tool:e}};async function af(r){let e=await r.getEmulatorDomState(),t=await r.getScreenshotBase64();return{type:"content",value:[{type:"text",text:"<emulatorXml>"},{type:"text",text:e},{type:"text",text:"</emulatorXml>"},{type:"text",text:"<screenshot>"},{type:"media",data:t,mediaType:"image/png"},{type:"text",text:"</screenshot>"}]}}var t_=r=>({name:"create_execute_step",tool:_V({description:"Create and immediately execute a new Momentic step in the Android emulator, returning the result from the step and the state of the emulator after the step finished executing.",inputSchema:PV.object({step:cm}),toModelOutput:t=>t,execute:async({step:t})=>{let{contextManager:n,logger:o,controller:i}=r;o.info({step:t},"AI action tool called (create_execute_step)");let a=Ib(t),s={id:IV(),type:"MOBILE_PRESET_STEP",command:a},c=await n.createAndExecuteStep(s);c.status==="SUCCESS"&&await i.waitForPageSourceStability({reason:"Waiting for stability after executing AI-generated sub-step"});let l={...c,trace:void 0,beforeSnapshot:void 0,afterSnapshot:void 0},u=await af(i);return{type:"content",value:[{type:"text",text:"<result>"},{type:"text",text:JSON.stringify(l,null,2)},{type:"text",text:"</result>"},{type:"text",text:"<stateAfter>"},...u.value,{type:"text",text:"</stateAfter>"}]}}})});import{tool as OV}from"ai";import sf from"zod";var r_=r=>{let e=OV({description:"Signal that the AI action has reached a terminal state (either success or failure).",inputSchema:sf.object({message:sf.string(),success:sf.boolean()}),toModelOutput:t=>t,execute:async({message:t,success:n})=>{let{contextManager:o,logger:i}=r;return i.info({message:t,success:n},"AI action tool called (finish)"),o.finalState={message:t,status:n?"SUCCESS":"FAILED"},{type:"content",value:[{type:"text",text:"Done"}]}}});return{name:Od,tool:e}};var n_=[t_,e_,r_];function o_(r){let{logger:e,controller:t,contextManager:n,aiActionSessionId:o}=r,i={};for(let c of n_){let l=c({contextManager:n,logger:e,controller:t});i[l.name]=l.tool}let a=t.generator.getVercelAnthropicModelFactory({loggerTags:Se(e),sessionId:o}),s=c=>{let{messages:l}=c,u=!1;for(let d=l.length-1;d>=0;d--){let m=l[d];for(let p of m.content)if(!(typeof p!="object"||!("type"in p))&&!(p.type!=="tool-result"||p.output.type!=="content")&&!(p.output.value.length<3))for(let g=0;g<p.output.value.length;g++){let h=p.output.value[g];if(h.type==="text"&&h.text.includes("<emulatorXml>"))if(u){let f=p.output.value[g+1];f.type==="text"?f.text="TRUNCATED DUE TO CONVERSATION LENGTH":e.warn({msg:f},"Got unexpected part when truncating emulator state message")}else{u=!0;continue}}}return c};return{model:a("claude-haiku-4-5-20251001"),tools:i,prepareStep:s,stopWhen:[NV(15),LV(Od)],system:ZM(!1)}}async function i_(r){let e=Date.now(),{controller:t,logger:n}=r.fixtures;try{return await FV(r)}catch(o){let i=t.isAborted()||o instanceof DOMException&&o.name==="AbortError";return i||n.error({err:o},"Failed to execute mobile AI action"),{...r.aiActionParams.step,steps:[],type:"MOBILE_AI_ACTION_STEP",startTime:e,endTime:Date.now(),status:i?"CANCELLED":"FAILED",message:i?"Step cancelled.":`${o}`}}}async function FV(r){let{step:e,stepTracer:t,executeMobileStepList:n}=r.aiActionParams,{controller:o,logger:i}=r.fixtures,{step:a}=r.callbacks,s=await t.startSubSteps(),c=kV(),l=i.child({stepId:e.id,aiActionSessionId:c}),u=Date.now(),d=async(f,b)=>{let T=await n({...r,listParams:{steps:[f],tracer:s,containerName:`AI action sub-step ${b}`}});if(T.results.length!==1)throw new E("InternalWebAgentError","Expected exactly one result from executeMobileStepList");return T.results[0]},m={stepId:e.id,parentStepIdChain:t.getParentStepIdChain()},p=new Pd({controller:o,callbacks:{onAiActionEvent:a?.onAiActionEvent,executeStep:d},logger:l,rootStep:m}),g=o_({controller:o,logger:l,contextManager:p,aiActionSessionId:c}),h=DV({...g,messages:[{role:"user",content:e.text}],abortSignal:o.abortSignal});for await(let f of h.fullStream)switch(o.throwIfAborted(),f.type){case"text-delta":a?.onAiActionEvent?.({type:"LLM_TEXT_OUTPUT",text:f.text,rootStep:m})}if(await h.response,o.throwIfAborted(),!p.finalState)throw new E("InternalWebAgentError","The AI agent never reached a final state. This could be because the maximum number of steps was reached.");return{...e,status:p.finalState.status,startTime:u,endTime:Date.now(),message:p.finalState.message,steps:p.results}}var BV=60*60*1e3;async function pl(r){let{fixtures:e,inputs:t,listParams:n,work:o}=r,{containerName:i,steps:a,tracer:s}=n,{logger:c,controller:l,usageTracker:u}=e,d=s.getParentStepIdChain(),m=[],p,g="SUCCESS",h,{fromStep:f,toStep:b}=t;for(let T=0;T<a.length;T++){let w=a[T];if(w.skipped)continue;if(o.fastForwardingToStep&&f){let M=JSON.stringify(d);if(w.id===f.fromStepId&&M===JSON.stringify(f.parentStepIdChain))o.fastForwardingToStep=!1;else if(!dC({currentStep:w,currentParentChain:d,desiredStepId:f.fromStepId,desiredStepParentChain:f.parentStepIdChain}))continue}let x=0,R=1,O=Date.now();w.retries&&w.retries>0&&(R+=w.retries);let v=[];for(;x<R&&Date.now()-O<BV;){x++;let M=`Executing step index ${T} in ${i} - ${Uo(w)}`;x!==1&&(M+=` (attempt ${x})`),c.info({step:w},M);let G=Date.now(),H=await s.startStep({logger:c,step:w,attempt:x,parentStepIdChain:d});u.trackStepExecution(w);let W=UV(w),K=await zV({step:w,stepTracer:H,params:r}),{trace:ve}=await H.finish({parentStepIdChain:d,result:K});if(K.trace=ve,M=`Finished step index ${T} in ${i} - ${Uo(w)}`,x!==1&&(M+=` (attempt ${x})`),c.info({step:{id:w.id},trace:K.trace,status:K.status},M),K.status!=="SUCCESS"&&x<R){v.push(K),Date.now()-G<1e3&&await q(1e3-(Date.now()-G));continue}if(v.length>0&&(K.previousAttempts=v),m.push(K),h=await GV({result:K,step:w,originalStep:W,steps:a,currentStepIndex:T,params:r,stepTracer:H,isLastAttempt:x===R,results:m}),K.status!=="SUCCESS"&&h!=="SUCCESS")return g=K.status,p=K,{results:m,status:g,terminalResult:p};if(w.envKey&&l.context.setVariable(w.envKey,K.data),b){let re=JSON.stringify(d);if(w.id===b.toStepId&&re===JSON.stringify(b.parentStepIdChain))return o.shouldStopExecuting=!0,{results:m,status:g,terminalResult:p}}if(o.shouldStopExecuting)return{results:m,status:g,terminalResult:p};break}}return{results:m,status:g,terminalResult:p}}async function zV({step:r,params:e,stepTracer:t}){let{fixtures:n,inputs:o,callbacks:i,work:a}=e,s;switch(r.type){case"MOBILE_PRESET_STEP":{s=await JM({fixtures:n,inputs:o,step:r,stepTracer:t,callbacks:i,work:a});break}case"RESOLVED_MOBILE_MODULE":{s=await YM({...e,moduleParams:{step:r,stepTracer:t,executeMobileStepList:pl}});break}case"MOBILE_AI_ACTION_STEP":{s=await i_({...e,aiActionParams:{step:r,stepTracer:t,executeMobileStepList:pl}});break}}return s}async function GV({result:r,step:e,originalStep:t,steps:n,currentStepIndex:o,params:i,stepTracer:a,isLastAttempt:s,results:c}){let l,u;if(s&&r.status==="FAILED"&&!i.work.state.failureRecoveryDisabled){let d=await KM({...i,stepTracer:a,step:e,steps:n,currentStepIndex:o,isLastAttempt:s,executeMobileStepList:pl,failedStep:t,nextSteps:n.slice(o+1),results:c.concat(r)});d&&(d.type==="ATTEMPTED"?(l=d.result.results,u=d.status):d.type==="NOT_ELIGIBLE"&&(r.message=r.message?`${r.message} ${d.message}`:d.message),r.type==="MOBILE_PRESET_STEP"&&(r.failureRecoveryStatus={type:d.type,message:d.message}))}return l&&c.push(...l),u}async function Ld(r){let{tracer:e,containerName:t}=r,{steps:n,testMetadata:o}=r.inputs,{cacheStorage:i,logger:a,controller:s}=r.fixtures,c=a.child({testId:r.inputs.testMetadata.id,testName:r.inputs.testName});await i.resolveEntries({logger:c,testId:o.id,stepLists:{steps:n}});let l=VV(n);c.info({testMetadata:Mr.parse(o)},"Starting mobile test");let u=await e.startMainStepList(),d=XT(c);c.info({cpu:d?.cpuMetadata,platform:d?.platform},`Starting execution of ${t}`);let{status:m,results:p,terminalResult:g}=await pl({...r,listParams:{containerName:t,tracer:u,steps:l}});if(clearInterval(d?.interval),m==="SUCCESS"){let h=HV(n,l);if(h&&Object.keys(h).length>0){c.info({diffs:_i(h)},"Saving mobile step cache entries post-success");let{cachesToSave:f}=await Qr({steps:l,cacheCreationParams:{orgId:r.inputs.orgId,testId:o.id}});await i.saveEntries({logger:c,testId:o.id,entries:f})}else c.info("No cache entries to update");return{status:"PASSED",results:p,failureRecoveryDetails:r.work.state.failureRecoveryAttempts?{attempts:r.work.state.failureRecoveryAttempts}:void 0}}return m==="FAILED"&&await lC({logger:c,cacheStorage:i,orgId:r.inputs.orgId,testId:o.id,originalStepsWithCaches:n,updatedStepsWithCaches:l}),m==="CANCELLED"?{status:"CANCELLED",results:p}:{status:"FAILED",results:p,terminalResult:g}}var lf=class{parentTracer;socket;step;orgId;interactionTracer;constructor({step:e,socket:t,parentTracer:n,orgId:o}){this.socket=t,this.parentTracer=n,this.step=e,this.orgId=o,this.interactionTracer=new jo,Nr.initializeRootTracerContext(this.interactionTracer)}attachBeforeScreenshot(){}attachAfterScreenshot(){}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;He.distribution("test_step_duration",t,[`type:${o}`,"platform:mobile","executor:editor",`orgId:${this.orgId}`])}async finish(e){this.interactionTracer.finish();let t=this.interactionTracer.getRootSpan(),n={...xT.parse(e),trace:Jt.parse(t)};switch(n.result.status){case"SUCCESS":this.socket.emit("success",n);break;case"FAILED":this.socket.emit("failure",n);break;case"CANCELLED":this.socket.emit("cancelled",n);break}return{trace:t}}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}async startSubSteps(){return new ga({parentStep:this.step,socket:this.socket,parentTracer:this,orgId:this.orgId})}},ga=class{parentTracer;parentStep;socket;orgId;constructor({parentStep:e,socket:t,parentTracer:n,orgId:o}){this.parentTracer=n,this.parentStep=e,this.socket=t,this.orgId=o}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:e.parentStepIdChain,attempt:e.attempt}),new lf({step:e.step,parentTracer:this,socket:this.socket,orgId:this.orgId})}async getScreenshot(e){}},Nd=class{constructor(e,t){this.socket=e;this.orgId=t}appendLogs(){}async finish(){this.socket.emit("finished")}async startBeforeStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}async startMainStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}async startAfterStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}};var WV=({metadata:r,logger:e,globalStateManager:t,socket:n,globalOrgSettings:o,cacheStorageFactory:i,getGitMetadata:a})=>async(s,c)=>{let l=t.getSession(n.id);if(!l)throw new Error("No active Android session found");let u=await a(),d=e.child({testId:s.testMetadata.id,branch:u.gitBranchName}),m=await i(r.orgId,u),p=l.controller;p.resetAbortController();let g=new Nd(n,r.orgId),h=o.ai?.failureRecovery===!1||s.fromStep!==void 0||s.toStep!==void 0||void 0,f=await Ld({work:{fastForwardingToStep:!!s.fromStep,state:{failureRecoveryDisabled:h,failureRecoveryAttempts:0}},fixtures:{controller:p,logger:d,cacheStorage:m,usageTracker:new mc},containerName:"entire test",inputs:{steps:s.steps,fromStep:s.fromStep,toStep:s.toStep,orgId:r.orgId,testName:r.testName,testMetadata:s.testMetadata,interactive:!0},tracer:g,callbacks:{step:{onAiActionEvent:T=>{n.emit("aiActionEvent",T)}}}});await g.finish();let b={results:Ht.array().parse(f.results),status:f.status};c?.(b)},a_={event:"execute",createHandler:WV};import{debounce as jV}from"ts-debounce";var $V=({socket:r,globalStateManager:e,keepSessionAlive:t})=>{let n=jV(t,3e4,{maxWait:6e4});return async()=>{let o=e.getSession(r.id);if(!o)throw new Error("No active Android session found");o.emulatorName&&(o.local||n(o.emulatorName))}},s_={event:"keepalive",createHandler:$V};var l_=[a_,$M,s_,qM];var Dd=class{sessions=new Map;registerSession(e,t){this.sessions.set(e,t)}getSession(e){return this.sessions.get(e)}async clearSoftDeletedLocalSessions(e){for(let t of this.sessions.values())t.softDeleted===!0&&t.local===!0&&await this.removeSession(t.metadata.sessionId,e)}hasActiveLocalSession(){for(let e of this.sessions.values())if(e.local===!0)return!0;return!1}async removeSession(e,t){let n=this.sessions.get(e);if(n)try{await n.cleanup?.(),t.info({sessionId:e,emulatorName:n.emulatorName},"Android emulator cleaned up by removeSession")}catch(o){t.error({err:o},"Error during Android session cleanup")}finally{this.sessions.delete(e)}}async removeAllSessions(e){let t=Array.from(this.sessions.keys());await Promise.all(t.map(n=>this.removeSession(n,e)))}};function c_(r){let{logger:e,baseServer:t,globalStateManager:n,settingsFactory:o,getOrgId:i}=r,a=new qV(t,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0,connectionStateRecovery:{maxDisconnectionDuration:60*60*1e3,skipMiddlewares:!0}}),s=async()=>{await n.removeAllSessions(e)};a.on("connection",async l=>{let u=l.id,d=e.child({sessionId:u});d.info({event:"connection",transport:l.conn.transport.name},"Android websocket connection initiated"),l.on("disconnect",async g=>{if(e.info({reason:g},"Disconnect received"),g.includes("namespace disconnect")){await jM({socket:l,globalStateManager:n,logger:d,authorization:r.authorization});return}let h=n.getSession(u);h&&(h.softDeleted=!0)});let m,p;try{let g=l.handshake.query?.testMetadata,h=Mr.parse(JSON.parse(g??"")),f=h.id,b=await i({testId:f});p=await o(b,e),m=await VM({...r,orgId:b,socket:l,globalStateManager:n,logger:d,globalOrgSettings:p,testMetadata:h})}catch(g){d.error({err:g},"Failed to setup Android connection"),l.emit("error",{message:g instanceof Error?g.message:JSON.stringify(g)}),l.disconnect(!0);return}l_.forEach(g=>c(g,{...r,socket:l,metadata:m,globalOrgSettings:p,logger:d}))});let c=(l,u)=>{let d=l.createHandler(u),m=(...p)=>{l.event!=="keepalive"&&u.logger.debug({event:l.event},`Websocket event (${l.event})`);let g=h=>{u.logger.error({event:l.event,err:h instanceof Error?h:new Error(`${h}`)},"Unhandled exception in socket handler"),u.socket.emit("error",{message:h instanceof Error?h.message:typeof h=="string"?h:JSON.stringify(h)})};try{let h=d.apply(this,p);h&&typeof h.catch=="function"&&h.catch(g)}catch(h){g(h)}};u.socket.on(l.event,m)};return{server:a,dispose:s}}import{randomUUID as t$}from"crypto";import{diff as PHe}from"deep-object-diff";import HHe from"yaml";import{z as WHe}from"zod";import{execSync as KV}from"child_process";function an(r,e){let t=e.hooks?.postSave;if(!t)return;let n;t.includes("$1")?n=t.replaceAll("$1",r):n=`${t} ${r}`,C.debug({postSaveCommand:n},"Executing post-save hook command");try{KV(n,{encoding:"utf-8"})}catch(o){C.warn({err:o,postSaveCommand:n},"Failed to execute post-save hook command, continuing...")}}import{diff as lHe}from"deep-object-diff";import{cloneDeep as uHe}from"lodash-es";import{v4 as vHe}from"uuid";import RHe from"yaml";import YV from"@dotenvx/dotenvx";import XV from"fs";import u_ from"path";function d_(r,e){let t=[];for(let n of r.config.environments??[]){if(n.baseUrl)continue;let o=Jo(n.name,r,e);o.variables[Yl]||t.push(o)}return t}function JV(r){return r.includes("${")?r.replace(/\$\{([^}]+)\}/g,(e,t)=>{let n=t.match(/^([A-Za-z_][A-Za-z0-9_]*)(?:(:-|-)([\s\S]*))?$/);if(!n)return process.env[t]||"";let o=n[1];if(!o)return"";let i=n[2],a=n[3],s=process.env[o];return i===":-"?s&&s!==""?s:a||"":i==="-"?s!==void 0?s:a||"":s||""}):r}function QV(r){let{envVariables:e,project:t}=r;if(!e)return{};let n={};for(let[o,i]of Object.entries(e)){if(typeof i=="string"){let s=JV(i);s&&(n[o]=s);continue}let a;try{a=XV.readFileSync(u_.resolve(t.rootDir,i.fromFile),"utf-8")}catch(s){throw new Error(`Failed to read environment variable '${o}' from file '${i.fromFile}': ${s}`)}if(i.json)try{n[o]=JSON.parse(a)}catch(s){throw new Error(`Failed to parse environment variable '${o}' from file '${i.fromFile}' as JSON: ${s}`)}else n[o]=a}return Object.keys(n).length>0&&C.debug(n,"Set environment variables with interpolation from project configuration"),n}function ZV(r){let{project:e,envFile:t,logger:n}=r,o={};if(!t)return o;let i=YV.config({path:u_.resolve(e.rootDir,t),processEnv:o,logLevel:"error",quiet:!0});if(i.error)throw new Error(`Failed to load .env file: ${i.error.message}`);return n.debug("Set environment variables from .env file"),o}function Jo(r,e,t){let n=(e.config.environments??[]).find(c=>c.name===r);if(!n)throw new Error(`Environment ${r} not found in local project configuration file`);let o={},i=QV({envVariables:n.envVariables,project:e});Object.assign(o,i);let a=ZV({project:e,envFile:n.envFile,logger:t});return Object.assign(o,a),n.inheritFromShell&&(t.debug(process.env,"Inheriting environment variables from shell"),Object.assign(o,process.env)),{name:r,variables:o}}import{existsSync as tW,readFileSync as rW,readdirSync as nW,writeFileSync as oW}from"fs";import{glob as iW}from"glob";import Qo,{dirname as p_}from"path";import{cwd as uf}from"process";import m_ from"yaml";import{z as Pe}from"zod";import eW from"zod";var kd=["**/*.test.yaml","**/*.module.yaml"],cf=eW.string().refine(r=>/^[a-zA-Z0-9-]+$/.test(r)),Fd=15;var ha="momentic.config.yaml",df="momentic.workspace.yaml",aW=Pe.object({projects:Pe.string().array().describe("list of glob patterns to find project (momentic.config.yaml) files")}),sW=Pe.union([Pe.string(),Pe.object({fromFile:Pe.string(),json:Pe.boolean().optional()})]),lW=Pe.object({name:cf,baseUrl:Pe.string().optional().describe("Optional for mobile tests"),envFile:Pe.string().optional().describe("path to a file on disk to read environment variables from. can be relative to project root or absolute."),envVariables:Pe.record(Pe.string(),sW).optional(),inheritFromShell:Pe.boolean().optional().describe("inherit all environment variables from the shell - might be noisy"),browser:yo.optional().describe("NB: most things should use project-level configuration only")}),cW=Pe.object({postSave:Pe.string().optional()}),uW=Pe.object({name:cf,include:Pe.string().array().optional().describe("list of glob patterns that match momentic files (optional)"),exclude:Pe.string().array().optional().describe("opposite of include, takes precedence over include"),goldenFileDir:Pe.string().optional(),reporterDir:Pe.string().optional(),outputDir:Pe.string().optional(),recordVideo:Pe.boolean().optional(),retries:Pe.number().optional().describe("number of retries per test"),parallel:Pe.number().optional().describe("degree of parallelism"),environments:Pe.array(lW).optional(),gitMainBranch:Pe.string().optional().readonly(),gitProtectedBranches:Pe.string().array().optional().readonly(),ai:xm.optional(),browser:yo.optional(),emulator:mm.optional(),advanced:Mm.optional(),displayRoot:Pe.string().optional().describe("relative path from project root to use as the Repository root"),hooks:cW.optional()});function g_(r,e){let t;try{t=rW(r,"utf-8")}catch(o){C.warn(`Could not read possible Momentic ${e} file at ${r}: ${o}`);return}let n;try{if(n=m_.parse(t),typeof n!="object"||n===null)throw new Error(`The ${e} file should parse as a map with key-value pairs, but is type ${typeof n} instead`)}catch(o){C.warn(`Possible Momentic ${e} file at ${r} does not parse as valid YAML: ${o}`);return}return n}function pf(r){let e=g_(r,"project configuration");if(e!==void 0)try{return uW.parse(e)}catch(t){C.warn(`Possible Momentic project configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function dW(r){let e=g_(r,"workspace configuration");if(e!==void 0)try{return aW.parse(e)}catch(t){C.warn(`Possible Momentic workspace configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function pW(){let r=[],e=uf(),t=Qo.parse(e).root,n=15,o=0;for(;o<n;){o++;let i=Qo.basename(e);if(Ec.includes(i))return C.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),r;for(let a of nW(e))if(a.endsWith(ha)){let s=Qo.join(e,a),c=pf(s);c&&r.push({configFilePath:s,config:c,rootDir:p_(s)})}if(r.length)return r;if(e=Qo.dirname(e),e===t)break}return r}async function fa(r={}){let{configFilePath:e,nameFilter:t}=r,n=await gW(e);if(t&&(n=n.filter(o=>o.config.name===t)),n.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
4401
+ `;import{tool as _V}from"ai";import{randomUUID as IV}from"crypto";import PV from"zod";import{tool as xV}from"ai";import MV from"zod";var e_=r=>{let e=xV({description:"Get the current state of the emulator (XML + screenshot)",inputSchema:MV.object({}),toModelOutput:t=>t,execute:async()=>{let{controller:t,logger:n,contextManager:o}=r;return o.recordGenericToolCall(of),n.info("AI action tool called (get_emulator_state)"),af(t)}});return{name:of,tool:e}};async function af(r){let e=await r.getEmulatorDomState(),t=await r.getScreenshotBase64();return{type:"content",value:[{type:"text",text:"<emulatorXml>"},{type:"text",text:e},{type:"text",text:"</emulatorXml>"},{type:"text",text:"<screenshot>"},{type:"media",data:t,mediaType:"image/png"},{type:"text",text:"</screenshot>"}]}}var t_=r=>({name:"create_execute_step",tool:_V({description:"Create and immediately execute a new Momentic step in the Android emulator, returning the result from the step and the state of the emulator after the step finished executing.",inputSchema:PV.object({step:cm}),toModelOutput:t=>t,execute:async({step:t})=>{let{contextManager:n,logger:o,controller:i}=r;o.info({step:t},"AI action tool called (create_execute_step)");let a=Ib(t),s={id:IV(),type:"MOBILE_PRESET_STEP",command:a},c=await n.createAndExecuteStep(s);c.status==="SUCCESS"&&await i.waitForPageSourceStability({reason:"Waiting for stability after executing AI-generated sub-step"});let l={...c,trace:void 0,beforeSnapshot:void 0,afterSnapshot:void 0},u=await af(i);return{type:"content",value:[{type:"text",text:"<result>"},{type:"text",text:JSON.stringify(l,null,2)},{type:"text",text:"</result>"},{type:"text",text:"<stateAfter>"},...u.value,{type:"text",text:"</stateAfter>"}]}}})});import{tool as OV}from"ai";import sf from"zod";var r_=r=>{let e=OV({description:"Signal that the AI action has reached a terminal state (either success or failure).",inputSchema:sf.object({message:sf.string(),success:sf.boolean()}),toModelOutput:t=>t,execute:async({message:t,success:n})=>{let{contextManager:o,logger:i}=r;return i.info({message:t,success:n},"AI action tool called (finish)"),o.finalState={message:t,status:n?"SUCCESS":"FAILED"},{type:"content",value:[{type:"text",text:"Done"}]}}});return{name:Od,tool:e}};var n_=[t_,e_,r_];function o_(r){let{logger:e,controller:t,contextManager:n,aiActionSessionId:o}=r,i={};for(let c of n_){let l=c({contextManager:n,logger:e,controller:t});i[l.name]=l.tool}let a=t.generator.getVercelAnthropicModelFactory({loggerTags:Se(e),sessionId:o}),s=c=>{let{messages:l}=c,u=!1;for(let d=l.length-1;d>=0;d--){let m=l[d];for(let p of m.content)if(!(typeof p!="object"||!("type"in p))&&!(p.type!=="tool-result"||p.output.type!=="content")&&!(p.output.value.length<3))for(let g=0;g<p.output.value.length;g++){let h=p.output.value[g];if(h.type==="text"&&h.text.includes("<emulatorXml>"))if(u){let f=p.output.value[g+1];f.type==="text"?f.text="TRUNCATED DUE TO CONVERSATION LENGTH":e.warn({msg:f},"Got unexpected part when truncating emulator state message")}else{u=!0;continue}}}return c};return{model:a("claude-haiku-4-5-20251001"),tools:i,prepareStep:s,stopWhen:[NV(15),LV(Od)],system:ZM(!1)}}async function i_(r){let e=Date.now(),{controller:t,logger:n}=r.fixtures;try{return await FV(r)}catch(o){let i=t.isAborted()||o instanceof DOMException&&o.name==="AbortError";return i||n.error({err:o},"Failed to execute mobile AI action"),{...r.aiActionParams.step,steps:[],type:"MOBILE_AI_ACTION_STEP",startTime:e,endTime:Date.now(),status:i?"CANCELLED":"FAILED",message:i?"Step cancelled.":`${o}`}}}async function FV(r){let{step:e,stepTracer:t,executeMobileStepList:n}=r.aiActionParams,{controller:o,logger:i}=r.fixtures,{step:a}=r.callbacks,s=await t.startSubSteps(),c=kV(),l=i.child({stepId:e.id,aiActionSessionId:c}),u=Date.now(),d=async(f,b)=>{let T=await n({...r,listParams:{steps:[f],tracer:s,containerName:`AI action sub-step ${b}`}});if(T.results.length!==1)throw new E("InternalWebAgentError","Expected exactly one result from executeMobileStepList");return T.results[0]},m={stepId:e.id,parentStepIdChain:t.getParentStepIdChain()},p=new Pd({controller:o,callbacks:{onAiActionEvent:a?.onAiActionEvent,executeStep:d},logger:l,rootStep:m}),g=o_({controller:o,logger:l,contextManager:p,aiActionSessionId:c}),h=DV({...g,messages:[{role:"user",content:e.text}],abortSignal:o.abortSignal});for await(let f of h.fullStream)switch(o.throwIfAborted(),f.type){case"text-delta":a?.onAiActionEvent?.({type:"LLM_TEXT_OUTPUT",text:f.text,rootStep:m})}if(await h.response,o.throwIfAborted(),!p.finalState)throw new E("InternalWebAgentError","The AI agent never reached a final state. This could be because the maximum number of steps was reached.");return{...e,status:p.finalState.status,startTime:u,endTime:Date.now(),message:p.finalState.message,steps:p.results}}var BV=60*60*1e3;async function pl(r){let{fixtures:e,inputs:t,listParams:n,work:o}=r,{containerName:i,steps:a,tracer:s}=n,{logger:c,controller:l,usageTracker:u}=e,d=s.getParentStepIdChain(),m=[],p,g="SUCCESS",h,{fromStep:f,toStep:b}=t;for(let T=0;T<a.length;T++){let w=a[T];if(w.skipped)continue;if(o.fastForwardingToStep&&f){let M=JSON.stringify(d);if(w.id===f.fromStepId&&M===JSON.stringify(f.parentStepIdChain))o.fastForwardingToStep=!1;else if(!dC({currentStep:w,currentParentChain:d,desiredStepId:f.fromStepId,desiredStepParentChain:f.parentStepIdChain}))continue}let x=0,R=1,O=Date.now();w.retries&&w.retries>0&&(R+=w.retries);let v=[];for(;x<R&&Date.now()-O<BV;){x++;let M=`Executing step index ${T} in ${i} - ${Uo(w)}`;x!==1&&(M+=` (attempt ${x})`),c.info({step:w},M);let G=Date.now(),H=await s.startStep({logger:c,step:w,attempt:x,parentStepIdChain:d});u.trackStepExecution(w);let W=UV(w),K=await zV({step:w,stepTracer:H,params:r}),{trace:ve}=await H.finish({parentStepIdChain:d,result:K});if(K.trace=ve,M=`Finished step index ${T} in ${i} - ${Uo(w)}`,x!==1&&(M+=` (attempt ${x})`),c.info({step:{id:w.id},trace:K.trace,status:K.status},M),K.status!=="SUCCESS"&&x<R){v.push(K),Date.now()-G<1e3&&await q(1e3-(Date.now()-G));continue}if(v.length>0&&(K.previousAttempts=v),m.push(K),h=await GV({result:K,step:w,originalStep:W,steps:a,currentStepIndex:T,params:r,stepTracer:H,isLastAttempt:x===R,results:m}),K.status!=="SUCCESS"&&h!=="SUCCESS")return g=K.status,p=K,{results:m,status:g,terminalResult:p};if(w.envKey&&l.context.setVariable(w.envKey,K.data),b){let re=JSON.stringify(d);if(w.id===b.toStepId&&re===JSON.stringify(b.parentStepIdChain))return o.shouldStopExecuting=!0,{results:m,status:g,terminalResult:p}}if(o.shouldStopExecuting)return{results:m,status:g,terminalResult:p};break}}return{results:m,status:g,terminalResult:p}}async function zV({step:r,params:e,stepTracer:t}){let{fixtures:n,inputs:o,callbacks:i,work:a}=e,s;switch(r.type){case"MOBILE_PRESET_STEP":{s=await JM({fixtures:n,inputs:o,step:r,stepTracer:t,callbacks:i,work:a});break}case"RESOLVED_MOBILE_MODULE":{s=await YM({...e,moduleParams:{step:r,stepTracer:t,executeMobileStepList:pl}});break}case"MOBILE_AI_ACTION_STEP":{s=await i_({...e,aiActionParams:{step:r,stepTracer:t,executeMobileStepList:pl}});break}}return s}async function GV({result:r,step:e,originalStep:t,steps:n,currentStepIndex:o,params:i,stepTracer:a,isLastAttempt:s,results:c}){let l,u;if(s&&r.status==="FAILED"&&!i.work.state.failureRecoveryDisabled){let d=await KM({...i,stepTracer:a,step:e,steps:n,currentStepIndex:o,isLastAttempt:s,executeMobileStepList:pl,failedStep:t,nextSteps:n.slice(o+1),results:c.concat(r)});d&&(d.type==="ATTEMPTED"?(l=d.result.results,u=d.status):d.type==="NOT_ELIGIBLE"&&(r.message=r.message?`${r.message} ${d.message}`:d.message),r.type==="MOBILE_PRESET_STEP"&&(r.failureRecoveryStatus={type:d.type,message:d.message}))}return l&&c.push(...l),u}async function Ld(r){let{tracer:e,containerName:t}=r,{steps:n,testMetadata:o}=r.inputs,{cacheStorage:i,logger:a,controller:s}=r.fixtures,c=a.child({testId:r.inputs.testMetadata.id,testName:r.inputs.testName});await i.resolveEntries({logger:c,testId:o.id,stepLists:{steps:n}});let l=VV(n);c.info({testMetadata:Mr.parse(o)},"Starting mobile test");let u=await e.startMainStepList(),d=XT(c);c.info({cpu:d?.cpuMetadata,platform:d?.platform},`Starting execution of ${t}`);let{status:m,results:p,terminalResult:g}=await pl({...r,listParams:{containerName:t,tracer:u,steps:l}});if(clearInterval(d?.interval),m==="SUCCESS"){let h=HV(n,l);if(h&&Object.keys(h).length>0){c.info({diffs:_i(h)},"Saving mobile step cache entries post-success");let{cachesToSave:f}=await Qr({steps:l,cacheCreationParams:{orgId:r.inputs.orgId,testId:o.id}});await i.saveEntries({logger:c,testId:o.id,entries:f})}else c.info("No cache entries to update");return{status:"PASSED",results:p,failureRecoveryDetails:r.work.state.failureRecoveryAttempts?{attempts:r.work.state.failureRecoveryAttempts}:void 0}}return m==="FAILED"&&await lC({logger:c,cacheStorage:i,orgId:r.inputs.orgId,testId:o.id,originalStepsWithCaches:n,updatedStepsWithCaches:l}),m==="CANCELLED"?{status:"CANCELLED",results:p}:{status:"FAILED",results:p,terminalResult:g}}var lf=class{parentTracer;socket;step;orgId;interactionTracer;constructor({step:e,socket:t,parentTracer:n,orgId:o}){this.socket=t,this.parentTracer=n,this.step=e,this.orgId=o,this.interactionTracer=new jo,Nr.initializeRootTracerContext(this.interactionTracer)}attachBeforeScreenshot(){}attachAfterScreenshot(){}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;He.distribution("test_step_duration",t,[`type:${o}`,"platform:mobile","executor:editor",`orgId:${this.orgId}`])}async finish(e){this.interactionTracer.finish();let t=this.interactionTracer.getRootSpan(),n={...xT.parse(e),trace:Jt.parse(t)};switch(n.result.status){case"SUCCESS":this.socket.emit("success",n);break;case"FAILED":this.socket.emit("failure",n);break;case"CANCELLED":this.socket.emit("cancelled",n);break}return{trace:t}}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}async startSubSteps(){return new ga({parentStep:this.step,socket:this.socket,parentTracer:this,orgId:this.orgId})}},ga=class{parentTracer;parentStep;socket;orgId;constructor({parentStep:e,socket:t,parentTracer:n,orgId:o}){this.parentTracer=n,this.parentStep=e,this.socket=t,this.orgId=o}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:e.parentStepIdChain,attempt:e.attempt}),new lf({step:e.step,parentTracer:this,socket:this.socket,orgId:this.orgId})}async getScreenshot(e){}},Nd=class{constructor(e,t){this.socket=e;this.orgId=t}appendLogs(){}async finish(){this.socket.emit("finished")}async startBeforeStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}async startMainStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}async startAfterStepList(){return new ga({parentStep:null,parentTracer:null,socket:this.socket,orgId:this.orgId})}};var WV=({metadata:r,logger:e,globalStateManager:t,socket:n,cacheStorageFactory:o,getGitMetadata:i})=>async(a,s)=>{let c=t.getSession(n.id);if(!c)throw new Error("No active Android session found");let l=await i(),u=e.child({testId:a.testMetadata.id,branch:l.gitBranchName}),d=await o(r.orgId,l),m=c.controller;m.resetAbortController();let p=new Nd(n,r.orgId),g=await Ld({work:{fastForwardingToStep:!!a.fromStep,state:{failureRecoveryDisabled:!0,failureRecoveryAttempts:0}},fixtures:{controller:m,logger:u,cacheStorage:d,usageTracker:new mc},containerName:"entire test",inputs:{steps:a.steps,fromStep:a.fromStep,toStep:a.toStep,orgId:r.orgId,testName:r.testName,testMetadata:a.testMetadata,interactive:!0},tracer:p,callbacks:{step:{onAiActionEvent:f=>{n.emit("aiActionEvent",f)}}}});await p.finish();let h={results:Ht.array().parse(g.results),status:g.status};s?.(h)},a_={event:"execute",createHandler:WV};import{debounce as jV}from"ts-debounce";var $V=({socket:r,globalStateManager:e,keepSessionAlive:t})=>{let n=jV(t,3e4,{maxWait:6e4});return async()=>{let o=e.getSession(r.id);if(!o)throw new Error("No active Android session found");o.emulatorName&&(o.local||n(o.emulatorName))}},s_={event:"keepalive",createHandler:$V};var l_=[a_,$M,s_,qM];var Dd=class{sessions=new Map;registerSession(e,t){this.sessions.set(e,t)}getSession(e){return this.sessions.get(e)}async clearSoftDeletedLocalSessions(e){for(let t of this.sessions.values())t.softDeleted===!0&&t.local===!0&&await this.removeSession(t.metadata.sessionId,e)}hasActiveLocalSession(){for(let e of this.sessions.values())if(e.local===!0)return!0;return!1}async removeSession(e,t){let n=this.sessions.get(e);if(n)try{await n.cleanup?.(),t.info({sessionId:e,emulatorName:n.emulatorName},"Android emulator cleaned up by removeSession")}catch(o){t.error({err:o},"Error during Android session cleanup")}finally{this.sessions.delete(e)}}async removeAllSessions(e){let t=Array.from(this.sessions.keys());await Promise.all(t.map(n=>this.removeSession(n,e)))}};function c_(r){let{logger:e,baseServer:t,globalStateManager:n,settingsFactory:o,getOrgId:i}=r,a=new qV(t,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0,connectionStateRecovery:{maxDisconnectionDuration:60*60*1e3,skipMiddlewares:!0}}),s=async()=>{await n.removeAllSessions(e)};a.on("connection",async l=>{let u=l.id,d=e.child({sessionId:u});d.info({event:"connection",transport:l.conn.transport.name},"Android websocket connection initiated"),l.on("disconnect",async g=>{if(e.info({reason:g},"Disconnect received"),g.includes("namespace disconnect")){await jM({socket:l,globalStateManager:n,logger:d,authorization:r.authorization});return}let h=n.getSession(u);h&&(h.softDeleted=!0)});let m,p;try{let g=l.handshake.query?.testMetadata,h=Mr.parse(JSON.parse(g??"")),f=h.id,b=await i({testId:f});p=await o(b,e),m=await VM({...r,orgId:b,socket:l,globalStateManager:n,logger:d,globalOrgSettings:p,testMetadata:h})}catch(g){d.error({err:g},"Failed to setup Android connection"),l.emit("error",{message:g instanceof Error?g.message:JSON.stringify(g)}),l.disconnect(!0);return}l_.forEach(g=>c(g,{...r,socket:l,metadata:m,globalOrgSettings:p,logger:d}))});let c=(l,u)=>{let d=l.createHandler(u),m=(...p)=>{l.event!=="keepalive"&&u.logger.debug({event:l.event},`Websocket event (${l.event})`);let g=h=>{u.logger.error({event:l.event,err:h instanceof Error?h:new Error(`${h}`)},"Unhandled exception in socket handler"),u.socket.emit("error",{message:h instanceof Error?h.message:typeof h=="string"?h:JSON.stringify(h)})};try{let h=d.apply(this,p);h&&typeof h.catch=="function"&&h.catch(g)}catch(h){g(h)}};u.socket.on(l.event,m)};return{server:a,dispose:s}}import{randomUUID as t$}from"crypto";import{diff as PHe}from"deep-object-diff";import HHe from"yaml";import{z as WHe}from"zod";import{execSync as KV}from"child_process";function an(r,e){let t=e.hooks?.postSave;if(!t)return;let n;t.includes("$1")?n=t.replaceAll("$1",r):n=`${t} ${r}`,C.debug({postSaveCommand:n},"Executing post-save hook command");try{KV(n,{encoding:"utf-8"})}catch(o){C.warn({err:o,postSaveCommand:n},"Failed to execute post-save hook command, continuing...")}}import{diff as lHe}from"deep-object-diff";import{cloneDeep as uHe}from"lodash-es";import{v4 as vHe}from"uuid";import RHe from"yaml";import YV from"@dotenvx/dotenvx";import XV from"fs";import u_ from"path";function d_(r,e){let t=[];for(let n of r.config.environments??[]){if(n.baseUrl)continue;let o=Jo(n.name,r,e);o.variables[Yl]||t.push(o)}return t}function JV(r){return r.includes("${")?r.replace(/\$\{([^}]+)\}/g,(e,t)=>{let n=t.match(/^([A-Za-z_][A-Za-z0-9_]*)(?:(:-|-)([\s\S]*))?$/);if(!n)return process.env[t]||"";let o=n[1];if(!o)return"";let i=n[2],a=n[3],s=process.env[o];return i===":-"?s&&s!==""?s:a||"":i==="-"?s!==void 0?s:a||"":s||""}):r}function QV(r){let{envVariables:e,project:t}=r;if(!e)return{};let n={};for(let[o,i]of Object.entries(e)){if(typeof i=="string"){let s=JV(i);s&&(n[o]=s);continue}let a;try{a=XV.readFileSync(u_.resolve(t.rootDir,i.fromFile),"utf-8")}catch(s){throw new Error(`Failed to read environment variable '${o}' from file '${i.fromFile}': ${s}`)}if(i.json)try{n[o]=JSON.parse(a)}catch(s){throw new Error(`Failed to parse environment variable '${o}' from file '${i.fromFile}' as JSON: ${s}`)}else n[o]=a}return Object.keys(n).length>0&&C.debug(n,"Set environment variables with interpolation from project configuration"),n}function ZV(r){let{project:e,envFile:t,logger:n}=r,o={};if(!t)return o;let i=YV.config({path:u_.resolve(e.rootDir,t),processEnv:o,logLevel:"error",quiet:!0});if(i.error)throw new Error(`Failed to load .env file: ${i.error.message}`);return n.debug("Set environment variables from .env file"),o}function Jo(r,e,t){let n=(e.config.environments??[]).find(c=>c.name===r);if(!n)throw new Error(`Environment ${r} not found in local project configuration file`);let o={},i=QV({envVariables:n.envVariables,project:e});Object.assign(o,i);let a=ZV({project:e,envFile:n.envFile,logger:t});return Object.assign(o,a),n.inheritFromShell&&(t.debug(process.env,"Inheriting environment variables from shell"),Object.assign(o,process.env)),{name:r,variables:o}}import{existsSync as tW,readFileSync as rW,readdirSync as nW,writeFileSync as oW}from"fs";import{glob as iW}from"glob";import Qo,{dirname as p_}from"path";import{cwd as uf}from"process";import m_ from"yaml";import{z as Pe}from"zod";import eW from"zod";var kd=["**/*.test.yaml","**/*.module.yaml"],cf=eW.string().refine(r=>/^[a-zA-Z0-9-]+$/.test(r)),Fd=15;var ha="momentic.config.yaml",df="momentic.workspace.yaml",aW=Pe.object({projects:Pe.string().array().describe("list of glob patterns to find project (momentic.config.yaml) files")}),sW=Pe.union([Pe.string(),Pe.object({fromFile:Pe.string(),json:Pe.boolean().optional()})]),lW=Pe.object({name:cf,baseUrl:Pe.string().optional().describe("Optional for mobile tests"),envFile:Pe.string().optional().describe("path to a file on disk to read environment variables from. can be relative to project root or absolute."),envVariables:Pe.record(Pe.string(),sW).optional(),inheritFromShell:Pe.boolean().optional().describe("inherit all environment variables from the shell - might be noisy"),browser:yo.optional().describe("NB: most things should use project-level configuration only")}),cW=Pe.object({postSave:Pe.string().optional()}),uW=Pe.object({name:cf,include:Pe.string().array().optional().describe("list of glob patterns that match momentic files (optional)"),exclude:Pe.string().array().optional().describe("opposite of include, takes precedence over include"),goldenFileDir:Pe.string().optional(),reporterDir:Pe.string().optional(),outputDir:Pe.string().optional(),recordVideo:Pe.boolean().optional(),retries:Pe.number().optional().describe("number of retries per test"),parallel:Pe.number().optional().describe("degree of parallelism"),environments:Pe.array(lW).optional(),gitMainBranch:Pe.string().optional().readonly(),gitProtectedBranches:Pe.string().array().optional().readonly(),ai:xm.optional(),browser:yo.optional(),emulator:mm.optional(),advanced:Mm.optional(),displayRoot:Pe.string().optional().describe("relative path from project root to use as the Repository root"),hooks:cW.optional()});function g_(r,e){let t;try{t=rW(r,"utf-8")}catch(o){C.warn(`Could not read possible Momentic ${e} file at ${r}: ${o}`);return}let n;try{if(n=m_.parse(t),typeof n!="object"||n===null)throw new Error(`The ${e} file should parse as a map with key-value pairs, but is type ${typeof n} instead`)}catch(o){C.warn(`Possible Momentic ${e} file at ${r} does not parse as valid YAML: ${o}`);return}return n}function pf(r){let e=g_(r,"project configuration");if(e!==void 0)try{return uW.parse(e)}catch(t){C.warn(`Possible Momentic project configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function dW(r){let e=g_(r,"workspace configuration");if(e!==void 0)try{return aW.parse(e)}catch(t){C.warn(`Possible Momentic workspace configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function pW(){let r=[],e=uf(),t=Qo.parse(e).root,n=15,o=0;for(;o<n;){o++;let i=Qo.basename(e);if(Ec.includes(i))return C.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),r;for(let a of nW(e))if(a.endsWith(ha)){let s=Qo.join(e,a),c=pf(s);c&&r.push({configFilePath:s,config:c,rootDir:p_(s)})}if(r.length)return r;if(e=Qo.dirname(e),e===t)break}return r}async function fa(r={}){let{configFilePath:e,nameFilter:t}=r,n=await gW(e);if(t&&(n=n.filter(o=>o.config.name===t)),n.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
4402
4402
  ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Momentic project file available.");return C.debug(`Found valid project configuration at ${n[0].configFilePath}`),n[0]}async function mW(r){let e=dW(r);if(!e||!e.projects||!e.projects.length)return;let t=e.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${ha}`)),n=AbortSignal.timeout(2e3),o;try{o=await iW(t,{absolute:!1,cwd:uf(),dotRelative:!1,maxDepth:Fd,nodir:!0,signal:n})}catch(a){throw C.error({err:a},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${df} is misconfigured.`),a}let i=[];for(let a of o){let s=Qo.join(uf(),a),c=pf(s);c&&i.push({configFilePath:s,config:c,rootDir:p_(s)})}return i}async function gW(r){if(r){r=Qo.resolve(r);let t=pf(r);return t||(console.error(`No valid Momentic project file found at ${r}.`),process.exit(1)),[{config:t,configFilePath:r,rootDir:Qo.dirname(r)}]}if(tW(df)){let t=await mW(df);if(t)return t}return pW()}function Ud(r,e){let t=m_.stringify(r);oW(e,t)}import f_ from"fs";import{glob as hW}from"glob";import ml from"path";import fW from"yaml";import{z as h_}from"zod";var S_=!1,SW=h_.object({fileType:h_.nativeEnum(De)});async function er(r,e=!1){let t={project:r,tests:{},modules:{},mobileTests:{},mobileModules:{},duplicateEntities:{}},n=r.config.include??kd,o=Array.from(r.config.exclude??[]).concat(Tc),i=AbortSignal.timeout(5e3),a;try{a=await hW(n,{absolute:!1,cwd:r.rootDir,ignore:o,dotRelative:!1,maxDepth:Fd,nodir:!0,signal:i})}catch(s){throw C.error({err:s},"Failed to list all Momentic files in the current directory. This usually indicates the 'include' and 'exclude' globs are misconfigured in your momentic.config.yaml, or that your machine is severely resource constrained."),new Error("Listing Momentic files timed out after 5 seconds.",{cause:s})}for(let s of a){let c=yW(r.rootDir,s,t,e?zn:C);c&&(t.duplicateEntities[c.id]=c.paths)}return S_=!0,t}function yW(r,e,t,n){let o=ml.join(r,e),i=bW(o,n);if(!i)return;let a=EW(i,o,n);if(!a)return;let s=SW.safeParse(a);if(s.success===!1){n.warn(`Possible Momentic file at ${o} does not have a 'fileType', skipping: ${s.error}`);return}let c=s.data.fileType,l=TW(o,n);if(!l)return;let u=vW(e,o,l);switch(c){case De.TEST:try{return AW(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic test metadata: ${d}`);return}case De.MODULE:try{return RW(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic module metadata: ${d}`);return}case De.MOBILE_TEST:try{return CW(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile test metadata: ${d}`);return}case De.MOBILE_MODULE:try{return wW(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile module metadata: ${d}`);return}default:{let d=c;return}}}function bW(r,e){try{return f_.readFileSync(r,"utf-8")}catch(t){e.warn(`Could not read possible Momentic file at ${r}, skipping: ${t}`);return}}function EW(r,e,t){try{let n=fW.parse(r);if(typeof n!="object"||n===null)throw new Error("The YAML document should parse as a map with key-value pairs");return n}catch(n){t.warn(`Could not parse possible Momentic file at ${e}, skipping: ${n}`);return}}function TW(r,e){try{return f_.statSync(r)}catch(t){e.warn(`Skipping path '${r}' because it could not be stat, skipping: ${t}`);return}}function vW(r,e,t){return{relativePath:r,fullFilePath:e,platformSep:ml.sep,fullPathSegments:e.split(ml.sep),relativePathSegments:r.split(ml.sep),fileName:ml.basename(e),lastModified:t.mtime,createdAt:t.birthtime}}function AW(r,e,t,n,o){let i=Mi.parse(r),a;if(e.tests[i.id]){let s=e.tests[i.id].fullFilePath;a={id:i.id,paths:[s,n]}}return e.tests[i.id]={type:De.TEST,name:i.name,id:i.id,description:i.description??void 0,labels:i.labels,...t},a}function RW(r,e,t,n,o){let i=lr.parse(r),a;if(e.modules[i.moduleId]){let c=e.modules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}e.modules[i.moduleId]={type:De.MODULE,name:i.name,id:i.moduleId,description:i.description??void 0,...t};let s=t.fileName.replace(".module.yaml","");return!S_&&wr(i.name)!==s&&o.warn(`The module with ID ${i.moduleId} has a name (${i.name}) that does not match its file name (${s}). We recommend renaming the module or the file to be consistent to avoid confusion and issues with module resolution.`),a}function wW(r,e,t,n,o){let i=us.parse(r),a;if(e.mobileModules[i.moduleId]){let c=e.mobileModules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}let s=t.fileName.replace(".module.yaml","");return e.mobileModules[i.moduleId]={type:De.MOBILE_MODULE,name:s,id:i.moduleId,description:i.description??void 0,...t},a}function CW(r,e,t,n,o){let i=Mr.parse(r),a;if(e.mobileTests[i.id]){let c=e.mobileTests[i.id].fullFilePath;a={id:i.id,paths:[c,n]}}let s=t.fileName.replace(".test.yaml","");return e.mobileTests[i.id]={type:De.MOBILE_TEST,name:s,id:i.id,description:i.description??void 0,labels:i.labels,...t},a}import{z as mf}from"zod";var y_="test-results";var LVe=mf.object({width:mf.number(),height:mf.number()});import{execFile as xW}from"node:child_process";import{promisify as MW}from"node:util";import _W from"simple-git";var Ue=_W(),b_=MW(xW);function Tn(r){if(r)try{let e=new Date(r);return isNaN(e.getTime())?void 0:e}catch{return}}async function IW(r){let e=await Be(r,Ue.raw(["config","--list"])),t={};if(!e)return t;for(let n of e.split(`
4403
4403
  `)){let o=n.indexOf("=");if(o===-1)continue;let i=n.slice(0,o),a=n.slice(o+1).trim();t[i]=a}return t}async function PW(r,e,t){try{let o=t["github.user"]||void 0;if(o)return o}catch{}let n;try{if(e?.startsWith("http://")||e?.startsWith("https://"))n=new URL(e).host;else if(e?.startsWith("git@")){let o=e.indexOf("@"),i=e.indexOf(":",o+1);o!==-1&&i!==-1&&(n=e.slice(o+1,i))}}catch{}if(n=n?.toLowerCase(),!!n){try{if(e?.startsWith("git@")&&n?.includes("github")){let{stdout:o,stderr:i}=await b_("ssh",["-T","-o","BatchMode=yes",`git@${n}`],{timeout:5e3}),s=`${o??""}${i??""}`.trim().match(/Hi\s+([A-Za-z0-9_-]+)!/);if(s?.[1])return s[1]}}catch{}try{let o=n&&n!=="github.com"?["api","--hostname",n,"user","-q",".login"]:["api","user","-q",".login"],{stdout:i}=await b_("gh",o,{timeout:5e3}),a=i?.toString().trim();if(a)return a}catch{}}}async function OW(r,e,t){let n=e?.includes("github.com"),o=e?.includes("gitlab.com");try{if(n)return PW(r,e,t);if(o)return}catch{}}function Bd(r){if(r.startsWith("git@")){let e=r.split(":");if(e.length===2){let t=e[1].replace(".git","").split("/");if(t.length===2){let n=t[0],o=t[1];return`${n}/${o}`}}}else if(r.startsWith("http")||r.startsWith("https")){let t=new URL(r).pathname.split("/").filter(Boolean);if(t.length>=2){let n=t[0],o=t[1].replace(".git","");return`${n}/${o}`}}}async function Be(r,e){try{return(await e).trim()}catch(t){if(t instanceof Error&&t.message.includes("not a git repository"))return;r.error({err:t},"Failed to run git command");return}}function LW(){if(process.env.GITHUB_ACTION)return"GithubActions";if(process.env.GITLAB_CI)return"GitlabCI";if(process.env.CIRCLECI)return"CircleCI";if(process.env.BUILDKITE)return"Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return"AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return"GCPCloudBuild";if(process.env.MOMENTIC_GIT_OVERRIDE)return"Custom"}async function NW(r){let[e,t,n]=await Promise.all([Be(r,Ue.show(["--no-patch","--format=%ci"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"]))]),o=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return{ciProvider:"GithubActions",gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:e?Tn(e):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function DW(r){let[e,t,n]=await Promise.all([Be(r,Ue.listRemote(["--get-url","origin"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"]))]);return{ciProvider:"GitlabCI",gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?Tn(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:e,gitCommitMessage:t,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function kW(r){let[e,t,n,o]=await Promise.all([Be(r,Ue.show(["--no-patch","--format=%ci"])),Be(r,Ue.listRemote(["--get-url","origin"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"]))]),i=process.env.CIRCLE_REPOSITORY_URL??t,a=i?.includes("github.com"),s=i?.includes("gitlab.com"),c=i?Bd(i):void 0;return{ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:e?Tn(e):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:i,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:a?c:void 0,gitlabProjectPath:s?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function FW(r){let[e,t,n]=await Promise.all([Be(r,Ue.show(["--no-patch","--format=%ci"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"]))]),o=process.env.BUILDKITE_REPO,i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Bd(o):void 0;return{ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:e?Tn(e):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`}}async function UW(r){let[e,t,n]=await Promise.all([Be(r,Ue.show(["--no-patch","--format=%ci"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"]))]),o=process.env["Build.Repository.Uri"],i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Bd(o):void 0;return{ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:e?Tn(e):void 0,gitBranchName:process.env["System.PullRequest.SourceBranch"]??process.env["Build.SourceBranchName"],gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function BW(r,e){let[t,n,o,i,a,s,c,l,u]=await Promise.all([Be(r,Ue.revparse(["HEAD"])),Be(r,Ue.revparse(["--short","HEAD"])),Be(r,Ue.revparse(["--abbrev-ref","HEAD"])),Be(r,Ue.listRemote(["--get-url","origin"])),Be(r,Ue.show(["--no-patch","--format=%ci"])),Be(r,Ue.show(["-s","--pretty=%B"])),Be(r,Ue.show(["-s","--pretty=%an"])),e?Be(r,Ue.raw(["merge-base","--fork-point",e])):Promise.resolve(void 0),IW(r)]),d=l?await Be(r,Ue.show(["--no-patch","--format=%ci",l])):void 0,m=i?.includes("github.com"),p=i?.includes("gitlab.com"),g=i?Bd(i):void 0,h=u["user.email"]||void 0,f=u["user.name"]||void 0,b=u["user.username"]||void 0,T=await OW(r,i,u)??b??void 0;return{ciProvider:"none",gitCommitSha:t,gitCommitShaShort:n,gitBranchName:o,gitOriginUrl:i,gitCommitTimestamp:a?Tn(a):void 0,gitCommitMessage:s,gitCommitAuthorName:c,gitLocalUsername:T,gitLocalEmail:h,gitLocalName:f,lastCommitOnMainSha:l,lastCommitOnMainTimestamp:d?Tn(d):void 0,githubRepository:m?g:void 0,gitlabProjectPath:p?g:void 0,pipelineId:void 0}}async function zW(){let r=process.env._HEAD_REPO_URL;return{ciProvider:"GCPCloudBuild",gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:r?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:r?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}function GW(){return{ciProvider:"Custom",gitCommitSha:process.env.GIT_COMMIT_SHA,gitCommitShaShort:process.env.GIT_COMMIT_SHA_SHORT??process.env.GIT_COMMIT_SHA?.slice(0,6),gitCommitTimestamp:Tn(process.env.GIT_COMMIT_TIMESTAMP),gitBranchName:process.env.GIT_BRANCH_NAME,gitOriginUrl:process.env.GIT_ORIGIN_URL,gitCommitAuthorName:process.env.GIT_COMMIT_AUTHOR_NAME,gitCommitMessage:process.env.GIT_COMMIT_MESSAGE,lastCommitOnMainSha:process.env.LAST_COMMIT_ON_MAIN_SHA,lastCommitOnMainTimestamp:Tn(process.env.LAST_COMMIT_ON_MAIN_TIMESTAMP),mergedGitBranchName:process.env.MERGED_GIT_BRANCH_NAME,githubRepository:process.env.GITHUB_REPOSITORY,gitlabProjectPath:process.env.GITLAB_PROJECT_PATH,gitLocalUsername:process.env.GIT_USERNAME,gitLocalEmail:process.env.GIT_EMAIL,gitLocalName:process.env.GIT_NAME}}async function HW(r){let e=[...r.config.gitProtectedBranches??[]];return r.config.gitMainBranch&&e.push(r.config.gitMainBranch),{gitMainBranch:r.config.gitMainBranch,gitProtectedBranches:e}}async function gl(r,e){let t=LW();if(!t)return BW(r,e);switch(t){case"GithubActions":return NW(r);case"GitlabCI":return DW(r);case"CircleCI":return kW(r);case"Buildkite":return FW(r);case"AzureDevOps":return UW(r);case"GCPCloudBuild":return zW();case"Custom":return GW()}}async function VW(r,e,t,n){let o=n;if(!n.gitCommitSha)return o;if(n.gitMainBranch&&(!o.lastCommitOnMainSha||!o.lastCommitOnMainTimestamp))try{let i=await e.getMergeBaseCommitFromGitlab(t,n.gitMainBranch,n.gitCommitSha);o={...o,lastCommitOnMainSha:i.sha,lastCommitOnMainTimestamp:i.committer.date}}catch(i){r.warn({err:i},"Failed to get merge base commit from Gitlab")}if(!o.gitCommitTimestamp||!o.gitCommitAuthorName||!o.gitCommitMessage||!o.gitCommitAuthorName)try{let i=await e.getCommitFromGitlab(t,n.gitCommitSha);i&&(o={...o,gitCommitTimestamp:o.gitCommitTimestamp??i.committer.date,gitCommitAuthorName:o.gitCommitAuthorName??i.author.name,gitCommitMessage:o.gitCommitMessage??i.message})}catch(i){r.warn({err:i},"Failed to get commit from Gitlab")}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!o.mergedGitBranchName)try{let i=await e.getMergedBranchFromGitlab(t,n.gitBranchName??"",n.gitCommitSha);i.mergedBranch&&(o={...o,mergedGitBranchName:i.mergedBranch})}catch(i){r.warn({err:i},"Failed to get merged branch from Gitlab")}return o}async function WW(r,e,t,n,o){let i=o;if(!o.gitCommitSha)return i;if(o.gitMainBranch&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let a=await e.getMergeBaseCommitFromGithub(t,n,o.gitMainBranch,o.gitCommitSha);i={...i,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date}}catch(a){r.warn({err:a},"Failed to get merge base commit from GitHub")}if(!i.gitCommitTimestamp||!i.gitCommitAuthorName||!i.gitCommitMessage||!i.gitCommitAuthorName)try{let a=await e.getCommitFromGithub(t,n,o.gitCommitSha);a&&(i={...i,gitCommitTimestamp:i.gitCommitTimestamp??a.committer.date,gitCommitAuthorName:i.gitCommitAuthorName??a.author.name,gitCommitMessage:i.gitCommitMessage??a.message})}catch(a){r.warn({err:a},"Failed to get commit from GitHub")}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName)try{let a=await e.getMergedBranchFromGithub(t,n,o.gitBranchName??"",o.gitCommitSha);a.mergedBranch&&(i={...i,mergedGitBranchName:a.mergedBranch})}catch(a){r.warn({err:a},"Failed to get merged branch from GitHub")}return i}async function jW(r,e,t){try{if(t.githubRepository){let[n,o]=t.githubRepository.split("/");return await WW(r,e,n,o,t)}else if(t.gitlabProjectPath)return await VW(r,e,t.gitlabProjectPath,t)}catch(n){r.warn({err:n},"Failed to get remote git metadata")}return t}async function Sa(r,e,t){let n=await HW(t),o=await gl(r,n.gitMainBranch),i={...n,...o};(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp)&&i.gitBranchName===n.gitMainBranch&&(i.lastCommitOnMainSha=i.gitCommitSha,i.lastCommitOnMainTimestamp=i.gitCommitTimestamp);let a=await jW(r,e,i);return{...n,...o,...a}}import{diff as E_}from"deep-object-diff";import to from"fs";import{cloneDeep as $W}from"lodash-es";import zd from"path";import{v4 as qW}from"uuid";import hl from"yaml";function T_(r,e){let t=`${wr(e)}.module.yaml`,n=zd.join(zd.dirname(r),t);if(to.existsSync(n))throw new Error(`A conflicting file already exists at the following path: ${n}`);return to.renameSync(r,n),n}function v_({content:r,schemaVersion:e,momenticFiles:t,project:n,forceSaveOnNoDiffs:o}){let i=t.mobileModules[r.moduleId]?.fullFilePath,a=t.mobileModules[r.moduleId]?.name;if(!i||!to.existsSync(i))throw new Error(`Tried to update mobile module ${r.moduleId} that could not be found on disk`);let s=to.readFileSync(i,"utf-8"),c=hl.parse(s),l={...c,...r,schemaVersion:e},u=Fo({fileType:De.MOBILE_MODULE,...us.parse(l),steps:$t.array().parse(r.steps)}),d=!!r.name&&r.name!==a,m=E_(u,c);if(m&&Object.keys(m).length===0&&!o&&!d)return;let p=hl.stringify(u);to.writeFileSync(i,p,"utf-8");let g;d&&(g=T_(i,r.name)),an(g||i,n.config)}function A_({moduleId:r,patch:e,momenticFiles:t,project:n,logger:o}){let i=t.mobileModules[r]?.fullFilePath;if(!i)throw new Error(`Tried to update mobile module ${r} that could not be found on disk`);let a=fl(i,o),s={...a,...e},c=Fo({fileType:De.MOBILE_MODULE,...dc.parse(s)}),l=E_(c,a);if(l&&Object.keys(l).length===0)return;let u=hl.stringify(c);to.writeFileSync(i,u,"utf-8");let d;e.name&&(d=T_(i,e.name)),an(d||i,n.config)}async function R_({name:r,description:e,enabled:t,steps:n,folder:o,project:i}){let a=wr(r),s=zd.join(o,`${a}.module.yaml`),c=qW(),{stepsToSave:l}=await Qr({steps:n}),u={schemaVersion:Ln,moduleId:c,description:e,enabled:t},d={fileType:De.MOBILE_MODULE,...u,steps:l},m=hl.stringify(zb.parse(d));return to.writeFileSync(s,m,"utf-8"),an(s,i.config),{moduleId:c,name:r,description:e||void 0,steps:n}}function fl(r,e){let t=to.readFileSync(r,"utf-8"),n=hl.parse(t);try{return{...dc.parse(n),name:zd.basename(r,".module.yaml")}}catch(o){throw e.error({err:o,moduleFilePath:r,moduleContents:t},`${r} does not parse as a valid Momentic mobile module`),o}}async function gf(r,e,t,n){let o=fl(r.fullFilePath,t),{resolvedSteps:i}=await Uu({rawSteps:o.steps,resolvedModuleCache:n||{},onFetchModule:async s=>{let c=e.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Could not find mobile module with id ${s}`);return fl(c,t)},logger:t,metadata:{id:o.moduleId,schemaVersion:o.schemaVersion}}),a={...o,name:r.name,description:o.description||void 0,steps:i};return n&&(n[r.id]=$W(a)),a}async function w_(r,e){let t={};return await Promise.all(Object.values(r.mobileModules).map(async n=>{await gf(n,r,e,t)})),Array.from(Object.values(t))}import{randomUUID as KW}from"crypto";import vr from"fs";import ro from"path";import ba from"yaml";import ya from"zod";function C_({name:r,description:e="",steps:t=[],settings:n={},folder:o}){let a=`${wr(r)}.test.yaml`,s=ro.join(o,a);if(vr.existsSync(s))throw new Error(`A test named '${r}' already exists at path '${s}'. Choose a different name.`);let c={fileType:De.MOBILE_TEST,id:KW(),description:e,schemaVersion:ho,settings:n,steps:t},l=ba.stringify(c);return vr.writeFileSync(s,l,"utf-8"),{fullPath:s,testId:c.id}}function YW(r){if(!vr.existsSync(r))throw new Error(`Test file not found: ${r}`);let e=vr.readFileSync(r,"utf-8").replace(/\r\n|\r/g,`
4404
4404
  `),t=ba.parse(e);if(!t.steps||!Array.isArray(t.steps))throw new Error(`Test ${r} is missing steps`);return t}async function Gd(r,e,t){let n=YW(r),o;try{o=Mr.parse(n)}catch(s){throw new Error(`Mobile test ${r} is missing metadata or has invalid metadata: ${s}`)}let{resolvedStepLists:i}=await oC({rawStepLists:{steps:n.steps,beforeSteps:n.beforeSteps,afterSteps:n.afterSteps},logger:e,testMetadata:o,onFetchModule:async s=>{let c=t.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Mobile module ${s} not found`);return fl(c,e)}});return{...o,steps:i.steps}}async function x_({filePath:r,steps:e,settings:t,labels:n,folder:o,project:i,momenticFiles:a,schemaVersion:s}){let c=ro.isAbsolute(r)?r:ro.join(o,r);if(!vr.existsSync(c))throw new Error(`Test file not found: ${c}`);let l=vr.readFileSync(c,"utf-8").replace(/\r\n|\r/g,`
4405
4405
  `),u=ba.parse(l),d=pc.extend({steps:ya.record(ya.string(),ya.unknown()).array()}).parse({...u,schemaVersion:s});if(d.fileType!==De.MOBILE_TEST)throw new Error(`File at '${c}' is not a mobile test (fileType=${d.fileType}).`);let m;e&&(m=await Qr({steps:e}));let p={...d,...m?.stepsToSave!==void 0?{steps:m.stepsToSave}:{steps:d.steps},...n!==void 0?{labels:n}:{}};t&&(p.settings=t);let g=ba.stringify(p);for(let h of m?.moduleUpdates??[])v_({content:h,schemaVersion:ho,momenticFiles:a,project:i});vr.writeFileSync(c,g,"utf-8"),an(c,i.config)}function M_(r,e,t){let n=ro.join(t.rootDir,r);if(!vr.existsSync(n))throw new Error(`Test not found at path '${r}' in project '${t.rootDir}'`);let o=vr.readFileSync(n,"utf-8").replace(/\r\n|\r/g,`
4406
4406
  `),i=ba.parse(o),a=pc.extend({steps:ya.record(ya.string(),ya.unknown()).array()}).parse(i),s=ro.basename(r,".test.yaml"),c,l;if(e.name&&e.name!==s){let m=`${wr(e.name)}.test.yaml`;if(c=ro.join(ro.dirname(r),m),l=ro.join(t.rootDir,c),vr.existsSync(l))throw new Error(`Test with name '${e.name}' already exists at path '${l}'`)}let u={...a,...e};if(delete u.name,u.fileType!==De.MOBILE_TEST)throw new Error(`File at '${n}' is not a mobile test (fileType=${u.fileType}).`);let d=ba.stringify(u);return vr.writeFileSync(n,d,"utf-8"),l&&l!==n?(vr.renameSync(n,l),an(l,t.config)):an(n,t.config),{newRelativeTestPath:c}}import{randomUUID as XW}from"crypto";import no from"fs";import Ea from"path";var __=new Set([".DS_Store","__MACOSX"]),I_={status:(r,e)=>{if(r.status===e.status)return r.status;if(r.status==="FAILED"||e.status==="FAILED")return"FAILED";if(r.status==="CANCELLED"||e.status==="CANCELLED")return"CANCELLED";if(r.status==="RETRYING"||e.status==="RETRYING")return"RETRYING";if(r.status==="RUNNING"||e.status==="RUNNING")return"RUNNING";if(r.status==="PENDING"||e.status==="PENDING")return"PENDING";throw new Error(`Invalid run status merge: ${r.status} and ${e.status}`)},startedAt:(r,e)=>r.startedAt<e.startedAt?r.startedAt:e.startedAt,updatedAt:(r,e)=>r.updatedAt>e.updatedAt?r.updatedAt:e.updatedAt,finishedAt:(r,e)=>!r.finishedAt||!e.finishedAt?new Date:r.finishedAt>e.finishedAt?r.finishedAt:e.finishedAt,gitCommitTimestamp:(r,e)=>{if(!(!r&&!e)){if(!r.gitCommitTimestamp||!e.gitCommitTimestamp||r.gitCommitTimestamp.getTime()!==e.gitCommitTimestamp.getTime())throw new Error(`Git commit timestamps must match to be merged: ${r.gitCommitTimestamp} and ${e.gitCommitTimestamp}`);return r.gitCommitTimestamp}},pipelineId:(r,e)=>r.pipelineId===e.pipelineId?r.pipelineId:!r.pipelineId&&e.pipelineId?e.pipelineId:!e.pipelineId&&r.pipelineId?r.pipelineId:r.startedAt<e.startedAt?e.pipelineId:r.pipelineId,labels:(r,e)=>{let t=new Set([...r.labels??[],...e.labels??[]]);return Array.from(t)}};function JW(r,e,t){if(I_[t]){let i=I_[t];return i(r,e)}let n=r[t],o=e[t];if(n!==o)throw new Error(`Metadata values for key "${t}" do not match: "${n}" vs "${o}"`);return n}var hf=class extends Error{constructor(e,t){let n=`${e} contains invalid Momentic results: ${t}. Please ensure that the path points to a folder containing only valid results. If you passed \`--output-dir test-results/results-1\` to the \`run\` command, your results path for merging should be \`test-results\`.`;super(n),this.name="InvalidMomenticResultsPathError"}};function P_(r,e){try{let t=Ea.join(e,"metadata.json");return _c.parse(JSON.parse(no.readFileSync(t,"utf-8")))}catch{throw new hf(r,e)}}function O_(r,e,t){let n=XW(),o=r.child({runGroupId:n});no.rmSync(e,{recursive:!0,force:!0});let i=no.readdirSync(t).filter(c=>!__.has(c)).map(c=>Ea.join(t,c));if(i.length===0)throw new Error(`No run groups found in results path: ${t}`);no.mkdirSync(e,{recursive:!0});let a={...P_(t,i[0]),id:n};for(let c of i){let l=Ea.join(c,"runs");if(!no.existsSync(l))continue;let u=P_(t,c);o.info({oldRunGroupId:u.id},"Merging run groups");for(let m in u){if(m==="id")continue;let p=m;a[p]=JW(a,u,p)}let d=no.readdirSync(l);for(let m of d){if(__.has(m))continue;let p=Ea.join(l,m),g=Ea.join(e,"runs",m);no.cpSync(p,g,{recursive:!0})}}let s=Ea.join(e,"metadata.json");no.writeFileSync(s,JSON.stringify(a,null,2))}import L_ from"adm-zip";import ff from"fs";import Hd from"path";function QW(r){let e=new L_,t=Hd.join(r,"metadata.json"),n=_c.parse(JSON.parse(ff.readFileSync(t,"utf-8")));e.addLocalFile(t);for(let o of ff.readdirSync(Hd.join(r,"runs"))){if(!o.endsWith(".zip"))continue;let i=o.replace(/\.zip$/,""),a=new L_(Hd.join(r,"runs",o));for(let s of a.getEntries())s.isDirectory||e.addFile(Hd.join("runs",i,s.entryName),s.getData())}return{runGroupId:n.id,buffer:e.toBuffer()}}async function Vd(r){let{client:e,consoleLogger:t,resultsPath:n}=r;if(!ff.existsSync(n)){t.warn("Results path does not exist, skipping upload.");return}let o=new Md(e);try{let{runGroupId:i,buffer:a}=QW(n),s=await o.uploadResultsArchive(i,a),c=`${e.getAppUrl()}/run-groups/${s}`;t.success(`Successfully uploaded test results. Once processed, your results can be found at ${c}`);return}catch(i){let a;i instanceof Error?a=i.message:typeof i=="string"?a=i:a="Unknown error",t.error(`Failed to upload test results: ${a}.`);return}}import ZW from"adm-zip";import wt from"fs";import tr from"path";var Sl=class r{constructor(e){this.filePath=e;wt.rmSync(this.filePath,{recursive:!0,force:!0}),wt.mkdirSync(this.filePath,{recursive:!0})}cd(e){return new r(tr.join(this.filePath,e))}cwd(){return this.filePath}mkdir(e){wt.mkdirSync(tr.join(this.filePath,e),{recursive:!0})}readFile(e){let t=tr.join(this.filePath,e);if(wt.existsSync(t))return wt.readFileSync(t)}storeFile(e){let{name:t,contents:n}=e,o=tr.join(this.filePath,t);try{wt.writeFileSync(o,n)}catch{}}createFileStream(e){let t=tr.join(this.filePath,e);return wt.createWriteStream(t)}createRunArchive(e){return new Sf(tr.join(this.filePath,"runs"),e)}},Sf=class{constructor(e,t){this.filePath=e;this.tempPath=tr.join(e,`temp-storage-${t}`),this.finalPath=tr.join(e,`${t}.zip`),wt.rmSync(this.tempPath,{recursive:!0,force:!0}),wt.rmSync(this.finalPath,{recursive:!0,force:!0}),wt.mkdirSync(this.tempPath,{recursive:!0})}tempPath;finalPath;readFile(e){let t=tr.join(this.tempPath,e);if(wt.existsSync(t))return wt.readFileSync(t)}mkdir(e){wt.mkdirSync(tr.join(this.tempPath,e),{recursive:!0})}cd(e){return new Sl(tr.join(this.tempPath,e))}cwd(){return this.tempPath}storeFile(e){let{name:t,contents:n}=e,o=tr.join(this.tempPath,t);wt.writeFileSync(o,n)}createFileStream(e){let t=tr.join(this.tempPath,e);return wt.createWriteStream(t)}close(){let e=new ZW;e.addLocalFolder(this.tempPath,void 0,n=>n!==".DS_Store");let t=e.toBuffer();wt.writeFileSync(this.finalPath,t),wt.rmSync(this.tempPath,{recursive:!0,force:!0})}};import ej from"adm-zip";import{randomUUID as tj}from"crypto";import St from"fs";import Ct from"path";function F_(r){try{return St.existsSync(r)?JSON.parse(St.readFileSync(r,"utf-8")):void 0}catch{return}}function N_(r){return St.existsSync(r)?St.readFileSync(r,"utf-8").split(`
4407
- `).map(t=>t.trim()).filter(t=>t.length>0):[]}function rj(r,e){let t=r.attemptIdToAttemptNumber.get(e);if(t)return Ct.join(r.inflatedPath,"attempts",t);let n=Ct.join(r.inflatedPath,"attempts");if(!St.existsSync(n))return;let o=St.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=Ct.join(n,i,"metadata.json"),s=F_(a);if(typeof s!="object"||s===null)continue;let c=s.id;if(typeof c=="string"&&c===e)return r.attemptIdToAttemptNumber.set(e,i),Ct.join(n,i)}}function D_(r,e,t){let n=Ct.join(r,"attempts");if(!St.existsSync(n))return;let o=St.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=Ct.join(n,i,"assets",`${e}.${t}`);if(St.existsSync(a))return a}}var Wd=class{constructor(e,t,n){this.outputDir=e;this.runId=t;this.runAttemptId=n;this.runsDir=Ct.join(e,"runs"),this.zipPath=Ct.join(this.runsDir,`${t}.zip`)}inflatedByRunId=new Map;zipPath;runsDir;ensureInflatedRun(e){let t=this.inflatedByRunId.get(e);if(t)return t;if(e!==this.runId||!St.existsSync(this.zipPath))return;let n=Ct.join(this.runsDir,`temp-unzipped-${e}-${tj()}`);St.mkdirSync(n,{recursive:!0}),new ej(this.zipPath).extractAllTo(n,!0);let i={runId:e,zipPath:this.zipPath,inflatedPath:n,attemptIdToAttemptNumber:new Map};return this.inflatedByRunId.set(e,i),i}close(){for(let e of this.inflatedByRunId.values())St.rmSync(e.inflatedPath,{recursive:!0,force:!0});this.inflatedByRunId.clear()}getAttemptDir(){let e=this.ensureInflatedRun(this.runId);if(e)return rj(e,this.runAttemptId)}listVideoAssetPaths(){let e=this.getAttemptDir();if(!e)return[];let t=Ct.join(e,"assets");return St.existsSync(t)?St.readdirSync(t,{withFileTypes:!0}).filter(o=>o.isFile()).map(o=>Ct.join(t,o.name)).filter(o=>{let i=Ct.extname(o).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(e,t){let n=this.getAttemptDir();if(!n)return;let o=Ct.join(n,"assets",`${e}.${t}`);if(St.existsSync(o))try{return St.readFileSync(o,"utf-8")}catch{return}}async getConsoleLogsForRunAttempt(e,t,n){if(t!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=F_(Ct.join(o,"console.json")),a=Tm.safeParse(i);return a.success?a.data:void 0}async getNetworkLogsForRunAttempt(e,t,n){if(t!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=Ct.join(o,"assets","har-pages.log"),a=Ct.join(o,"assets","har-entries.log"),s={};for(let u of N_(i)){let d=hs.safeParse(k_(u));d.success&&(s[d.data.id]=d.data)}let c={},l=N_(a);for(let u=0;u<l.length;u++){let d=l[u],m=fs.safeParse(k_(d));if(!m.success)continue;let p=`${m.data.startedDateTime}-${u}`;c[p]=m.data}if(Object.keys(c).length!==0)return Am(s,c)}async getHtmlSnapshot(e,t){let n=this.readAttemptAssetText(t,"html");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=D_(o.inflatedPath,t,"html");if(i)try{return St.readFileSync(i,"utf-8")}catch{return}}async getA11yTreeSnapshot(e,t){let n=this.readAttemptAssetText(t,"xml");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=D_(o.inflatedPath,t,"xml");if(i)try{return St.readFileSync(i,"utf-8")}catch{return}}async getScreenshot(e,t){if(!this.ensureInflatedRun(this.runId))return;let o=this.getAttemptDir(),i=o?Ct.join(o,"assets",`${t}.jpeg`):void 0;if(i)try{return St.readFileSync(i)}catch{return}}};function k_(r){try{return JSON.parse(r)}catch{return}}import Zo from"fs";import rI from"body-parser";import wj from"cors";import Cj from"dedent";import{Router as aj}from"express";import Wt from"fs";import{globSync as sj}from"glob";import Tt from"path";import jd from"fs";import nj from"path";var oj=new xu(30,60*1e3),Tf="https://api.momentic.ai",bf,B_=r=>{Tf=r},vf=()=>Tf;var yl=()=>bf;var Ta,Ef,U_,z_=async r=>{if(bf&&Ta&&U_)return Ta;let e=new Xt({baseUrl:Tf,apiKey:r,logger:C});bf=e;try{let t=await e.getAuthInfo();return Ta=t.orgId,Ef=t.userId,U_=r,Ta}catch(t){throw new Error(`Error checking API key against server: ${t}`)}},va=()=>{if(!Ta)throw new Error("Your organization ID is invalid.");return Ta},$d=()=>{if(!Ef)throw new Error("Your user ID is invalid.");return Ef};var Af,yf,G_=(r,e)=>{Af=r,yf?.abort(),yf=new AbortController;let t=yf.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=nj.resolve(r.rootDir,o.envFile);try{if(jd.lstatSync(i).isSymbolicLink())return;jd.existsSync(i)&&n.push(i)}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`)}});try{ij({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){C.error({err:o},"Failed to start config file watchers")}},Oe=()=>Af;function ij({filesToWatch:r,revalidator:e,signal:t,project:n}){C.debug("Starting watch on the following files:"),r.forEach(o=>{C.debug(`- ${o}`)}),r.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(oj.increment("setLocalProject")&&C.warn(`A file change under the ${n.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`),Af=await Promise.resolve(e(n.configFilePath)))};jd.watchFile(o,{persistent:!1},i);let a=()=>{jd.unwatchFile(o,i),t.removeEventListener("abort",a)};t.addEventListener("abort",a),process.once("SIGUSR2",()=>{a(),process.kill(process.pid,"SIGUSR2")})})}function Me(r){return function(...e){let t=e[e.length-1],n=r(...e);Promise.resolve(n).catch(t)}}var El=aj();function bl(r){let e=Oe(),t=Tt.dirname(e.configFilePath);return Tt.join(t,...r)}function lj(r){let e=Oe(),t=Tt.dirname(e.configFilePath),n=Tt.relative(t,r);return n?n.split(Tt.sep):[]}function cj(r,e){let t=Wt.statSync(r),n=lj(r);return wm.parse({name:e,absolutePath:r,relativePath:n.join(Tt.sep),pathSegments:n,isDirectory:t.isDirectory(),size:t.size,createdAt:t.birthtime,modifiedAt:t.mtime,accessedAt:t.atime})}El.post("/",Me(async(r,e,t)=>{let n;try{n=gE.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=bl(n);if(!Wt.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(Tt.sep)}`});return}if(!Wt.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}let a=Oe(),s=Array.from(a.config.exclude??[]).concat(Tc),l=sj("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let m=Tt.join(o,d);return cj(m,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));El.put("/",Me(async(r,e,t)=>{let n;try{n=hE.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=bl(n);if(Wt.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(Tt.sep)}`,pathSegments:n});return}Wt.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(Tt.sep)}`,pathSegments:n};e.status(201).json(i)}));El.patch("/",Me(async(r,e,t)=>{let n,o;try{let l=fE.parse(r.body);n=l.pathSegments,o=l.newPathSegments}catch(l){e.status(400).json({error:`Failed to parse folder update body: ${l}`});return}let i=bl(n),a=bl(o);if(!Wt.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(Tt.sep)}`});return}if(Wt.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(Tt.sep)}`});return}let s=Tt.dirname(a);Wt.existsSync(s)||Wt.mkdirSync(s,{recursive:!0}),Wt.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(Tt.sep)} to ${o.join(Tt.sep)}`,pathSegments:o};e.status(200).json(c)}));El.delete("/",Me(async(r,e,t)=>{let n,o=!0;try{let c=SE.parse(r.body);n=c.pathSegments,o=c.recursive??!0}catch(c){e.status(400).json({error:`Failed to parse folder delete body: ${c}`});return}let i=bl(n);if(!Wt.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(Tt.sep)}`,pathSegments:n});return}if(!Wt.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}if(o)Wt.rmSync(i,{recursive:!0,force:!0});else{if(Wt.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Wt.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Rf=El;import{Router as pj}from"express";import{hostname as uj}from"os";var dj="0.21.1",Tl=Fi({app:"desktop-server",hostname:uj(),disableConsoleLogs:!0}).child({cliVersion:dj});(async()=>{try{let r=await gl(Tl);r.gitBranchName&&Tl.addBinding("branch",r.gitBranchName)}catch{}})();var H_=pj();H_.get("/",async(r,e)=>{let t=Oe(),n=yl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await Sa(Tl,n,t);e.status(200).json(o)});var wf=H_;import xj from"events";import nI,{Router as Mj}from"express";import _j from"http";import Ij from"path";var qd=new Dd;import{Router as gj}from"express";import{existsSync as hj}from"fs";import fj from"path";import{hostname as mj}from"os";var Cf="0.21.1",ut=Fi({app:"mobile-desktop-server",hostname:mj(),disableConsoleLogs:!0}).child({cliVersion:Cf});(async()=>{try{let r=await gl(ut);r.gitBranchName&&ut.addBinding("branch",r.gitBranchName)}catch{}})();var xf=gj();xf.get("/",Me(async(r,e)=>{let t=yl();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));xf.post("/upload-url",Me(async(r,e)=>{let t;try{t=RE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=yl();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=fj.resolve(t.filePath);if(!hj(o)){e.status(400).json({error:`File not found: ${o}`});return}await _u({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:ut}),e.sendStatus(204)}));var V_=xf;import{Router as bj}from"express";import{Router as Sj}from"express";import W_ from"fs";import yj from"path";var vl=Sj();async function Mf(r){return(await w_(r,ut)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){C.warn(`Found a dangling mobile module with ID ${n.moduleId} that could not be found on disk.`);return}return{...o,content:n}}).filter(n=>n!==void 0)}vl.get("/",Me(async(r,e)=>{let t=Oe(),n=await er(t),o=await Mf(n);e.status(200).json(o)}));vl.get("/:moduleId",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await er(Oe()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await gf(n,t,C);e.json(o)}catch(o){e.status(400).json({err:o})}}));vl.patch("/:moduleId/metadata",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t;try{t=CE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Oe(),o=await er(n);A_({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:C,project:n}),e.status(201).json({message:"ok"})}));vl.post("/",Me(async(r,e)=>{let t;try{t=xE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}try{So(t.name)}catch(c){e.status(400).json({error:`Invalid module name: ${c}`});return}let n=Oe(),i=(await er(n)).mobileModules;if(Object.values(i).find(c=>c.name===t.name)){e.status(400).json({error:`A mobile module with the name "${t.name}" already exists. Please choose a different name.`});return}let a=yj.join(n.rootDir,t.folderPath??"");if(!W_.existsSync(a)||!W_.statSync(a).isDirectory()){e.status(400).json({error:`The folder configured for mobile module creation does not exist: ${a}`});return}let s=await R_({...t,folder:a,project:n});e.status(201).json(s)}));var j_=vl;var $_=bj();$_.get("/",Me(async(r,e)=>{let t=Oe(),n=await er(t),o=await Mf(n),i=new Set;n?.mobileTests&&Object.values(n.mobileTests).forEach(l=>{l.labels?.forEach(u=>i.add(u))});let a=Array.from(i).sort(),s=Object.values(n.mobileTests),c={labels:a,modules:o,tests:s};e.status(200).json(c)}));var q_=$_;import{Router as Ej}from"express";var Kd=Ej();Kd.get("/",Me((r,e)=>{let t=d_(Oe(),ut);e.status(200).json(t)}));Kd.get("/names",Me((r,e)=>{let n=Oe().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));Kd.post("/",Me((r,e)=>{let t;try{t=wE.parse(r.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{So(t.name)}catch(s){e.status(400).json({error:`Invalid environment name: ${s}`});return}let n=Oe();if(n.config.environments?.find(s=>s.name===t.name)){e.status(400).json({error:`An environment with the name "${t.name}" already exists. Please choose a different name.`});return}let i={...n.config,environments:[...n.config.environments??[],{name:t.name}]};n.config=i,Ud(i,n.configFilePath);let a=Jo(t.name,n,ut);e.status(201).json(a)}));var K_=Kd;import{Router as Tj}from"express";var Y_=Tj();Y_.get("/",(r,e)=>{e.status(200).json({userId:$d(),orgId:va(),cliVersion:Cf??"0.0.0"})});var X_=Y_;import{Router as vj}from"express";var J_=vj();J_.get("/",Me(async(r,e)=>{let t=r.query.sessionId;if(!t){e.status(400).json({packages:[]});return}let n=qd.getSession(t);if(!n?.controller){e.status(200).json({packages:[]});return}try{let a=(await n.controller.executeRawADBCommand("shell pm list packages -3"))?.split(`
4407
+ `).map(t=>t.trim()).filter(t=>t.length>0):[]}function rj(r,e){let t=r.attemptIdToAttemptNumber.get(e);if(t)return Ct.join(r.inflatedPath,"attempts",t);let n=Ct.join(r.inflatedPath,"attempts");if(!St.existsSync(n))return;let o=St.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=Ct.join(n,i,"metadata.json"),s=F_(a);if(typeof s!="object"||s===null)continue;let c=s.id;if(typeof c=="string"&&c===e)return r.attemptIdToAttemptNumber.set(e,i),Ct.join(n,i)}}function D_(r,e,t){let n=Ct.join(r,"attempts");if(!St.existsSync(n))return;let o=St.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=Ct.join(n,i,"assets",`${e}.${t}`);if(St.existsSync(a))return a}}var Wd=class{constructor(e,t,n){this.outputDir=e;this.runId=t;this.runAttemptId=n;this.runsDir=Ct.join(e,"runs"),this.zipPath=Ct.join(this.runsDir,`${t}.zip`)}inflatedByRunId=new Map;zipPath;runsDir;ensureInflatedRun(e){let t=this.inflatedByRunId.get(e);if(t)return t;if(e!==this.runId||!St.existsSync(this.zipPath))return;let n=Ct.join(this.runsDir,`temp-unzipped-${e}-${tj()}`);St.mkdirSync(n,{recursive:!0}),new ej(this.zipPath).extractAllTo(n,!0);let i={runId:e,zipPath:this.zipPath,inflatedPath:n,attemptIdToAttemptNumber:new Map};return this.inflatedByRunId.set(e,i),i}close(){for(let e of this.inflatedByRunId.values())St.rmSync(e.inflatedPath,{recursive:!0,force:!0});this.inflatedByRunId.clear()}getAttemptDir(){let e=this.ensureInflatedRun(this.runId);if(e)return rj(e,this.runAttemptId)}listVideoAssetPaths(){let e=this.getAttemptDir();if(!e)return[];let t=Ct.join(e,"assets");return St.existsSync(t)?St.readdirSync(t,{withFileTypes:!0}).filter(o=>o.isFile()).map(o=>Ct.join(t,o.name)).filter(o=>{let i=Ct.extname(o).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(e,t){let n=this.getAttemptDir();if(!n)return;let o=Ct.join(n,"assets",`${e}.${t}`);if(St.existsSync(o))try{return St.readFileSync(o,"utf-8")}catch{return}}async getConsoleLogsForRunAttempt(e,t,n){if(t!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=F_(Ct.join(o,"console.json")),a=Tm.safeParse(i);return a.success?a.data:void 0}async getNetworkLogsForRunAttempt(e,t,n){if(t!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=Ct.join(o,"assets","har-pages.log"),a=Ct.join(o,"assets","har-entries.log"),s={};for(let u of N_(i)){let d=hs.safeParse(k_(u));d.success&&(s[d.data.id]=d.data)}let c={},l=N_(a);for(let u=0;u<l.length;u++){let d=l[u],m=fs.safeParse(k_(d));if(!m.success)continue;let p=`${m.data.startedDateTime}-${u}`;c[p]=m.data}if(Object.keys(c).length!==0)return Am(s,c)}async getHtmlSnapshot(e,t){let n=this.readAttemptAssetText(t,"html");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=D_(o.inflatedPath,t,"html");if(i)try{return St.readFileSync(i,"utf-8")}catch{return}}async getA11yTreeSnapshot(e,t){let n=this.readAttemptAssetText(t,"xml");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=D_(o.inflatedPath,t,"xml");if(i)try{return St.readFileSync(i,"utf-8")}catch{return}}async getScreenshot(e,t){if(!this.ensureInflatedRun(this.runId))return;let o=this.getAttemptDir(),i=o?Ct.join(o,"assets",`${t}.jpeg`):void 0;if(i)try{return St.readFileSync(i)}catch{return}}};function k_(r){try{return JSON.parse(r)}catch{return}}import Zo from"fs";import rI from"body-parser";import wj from"cors";import Cj from"dedent";import{Router as aj}from"express";import Wt from"fs";import{globSync as sj}from"glob";import Tt from"path";import jd from"fs";import nj from"path";var oj=new xu(30,60*1e3),Tf="https://api.momentic.ai",bf,B_=r=>{Tf=r},vf=()=>Tf;var yl=()=>bf;var Ta,Ef,U_,z_=async r=>{if(bf&&Ta&&U_)return Ta;let e=new Xt({baseUrl:Tf,apiKey:r,logger:C});bf=e;try{let t=await e.getAuthInfo();return Ta=t.orgId,Ef=t.userId,U_=r,Ta}catch(t){throw new Error(`Error checking API key against server: ${t}`)}},va=()=>{if(!Ta)throw new Error("Your organization ID is invalid.");return Ta},$d=()=>{if(!Ef)throw new Error("Your user ID is invalid.");return Ef};var Af,yf,G_=(r,e)=>{Af=r,yf?.abort(),yf=new AbortController;let t=yf.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=nj.resolve(r.rootDir,o.envFile);try{if(jd.lstatSync(i).isSymbolicLink())return;jd.existsSync(i)&&n.push(i)}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`)}});try{ij({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){C.error({err:o},"Failed to start config file watchers")}},Oe=()=>Af;function ij({filesToWatch:r,revalidator:e,signal:t,project:n}){C.debug("Starting watch on the following files:"),r.forEach(o=>{C.debug(`- ${o}`)}),r.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(oj.increment("setLocalProject")&&C.warn(`A file change under the ${n.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`),Af=await Promise.resolve(e(n.configFilePath)))};jd.watchFile(o,{persistent:!1},i);let a=()=>{jd.unwatchFile(o,i),t.removeEventListener("abort",a)};t.addEventListener("abort",a),process.once("SIGUSR2",()=>{a(),process.kill(process.pid,"SIGUSR2")})})}function Me(r){return function(...e){let t=e[e.length-1],n=r(...e);Promise.resolve(n).catch(t)}}var El=aj();function bl(r){let e=Oe(),t=Tt.dirname(e.configFilePath);return Tt.join(t,...r)}function lj(r){let e=Oe(),t=Tt.dirname(e.configFilePath),n=Tt.relative(t,r);return n?n.split(Tt.sep):[]}function cj(r,e){let t=Wt.statSync(r),n=lj(r);return wm.parse({name:e,absolutePath:r,relativePath:n.join(Tt.sep),pathSegments:n,isDirectory:t.isDirectory(),size:t.size,createdAt:t.birthtime,modifiedAt:t.mtime,accessedAt:t.atime})}El.post("/",Me(async(r,e,t)=>{let n;try{n=gE.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=bl(n);if(!Wt.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(Tt.sep)}`});return}if(!Wt.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}let a=Oe(),s=Array.from(a.config.exclude??[]).concat(Tc),l=sj("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let m=Tt.join(o,d);return cj(m,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));El.put("/",Me(async(r,e,t)=>{let n;try{n=hE.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=bl(n);if(Wt.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(Tt.sep)}`,pathSegments:n});return}Wt.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(Tt.sep)}`,pathSegments:n};e.status(201).json(i)}));El.patch("/",Me(async(r,e,t)=>{let n,o;try{let l=fE.parse(r.body);n=l.pathSegments,o=l.newPathSegments}catch(l){e.status(400).json({error:`Failed to parse folder update body: ${l}`});return}let i=bl(n),a=bl(o);if(!Wt.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(Tt.sep)}`});return}if(Wt.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(Tt.sep)}`});return}let s=Tt.dirname(a);Wt.existsSync(s)||Wt.mkdirSync(s,{recursive:!0}),Wt.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(Tt.sep)} to ${o.join(Tt.sep)}`,pathSegments:o};e.status(200).json(c)}));El.delete("/",Me(async(r,e,t)=>{let n,o=!0;try{let c=SE.parse(r.body);n=c.pathSegments,o=c.recursive??!0}catch(c){e.status(400).json({error:`Failed to parse folder delete body: ${c}`});return}let i=bl(n);if(!Wt.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(Tt.sep)}`,pathSegments:n});return}if(!Wt.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}if(o)Wt.rmSync(i,{recursive:!0,force:!0});else{if(Wt.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Wt.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Rf=El;import{Router as pj}from"express";import{hostname as uj}from"os";var dj="0.21.2",Tl=Fi({app:"desktop-server",hostname:uj(),disableConsoleLogs:!0}).child({cliVersion:dj});(async()=>{try{let r=await gl(Tl);r.gitBranchName&&Tl.addBinding("branch",r.gitBranchName)}catch{}})();var H_=pj();H_.get("/",async(r,e)=>{let t=Oe(),n=yl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await Sa(Tl,n,t);e.status(200).json(o)});var wf=H_;import xj from"events";import nI,{Router as Mj}from"express";import _j from"http";import Ij from"path";var qd=new Dd;import{Router as gj}from"express";import{existsSync as hj}from"fs";import fj from"path";import{hostname as mj}from"os";var Cf="0.21.2",ut=Fi({app:"mobile-desktop-server",hostname:mj(),disableConsoleLogs:!0}).child({cliVersion:Cf});(async()=>{try{let r=await gl(ut);r.gitBranchName&&ut.addBinding("branch",r.gitBranchName)}catch{}})();var xf=gj();xf.get("/",Me(async(r,e)=>{let t=yl();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));xf.post("/upload-url",Me(async(r,e)=>{let t;try{t=RE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=yl();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=fj.resolve(t.filePath);if(!hj(o)){e.status(400).json({error:`File not found: ${o}`});return}await _u({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:ut}),e.sendStatus(204)}));var V_=xf;import{Router as bj}from"express";import{Router as Sj}from"express";import W_ from"fs";import yj from"path";var vl=Sj();async function Mf(r){return(await w_(r,ut)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){C.warn(`Found a dangling mobile module with ID ${n.moduleId} that could not be found on disk.`);return}return{...o,content:n}}).filter(n=>n!==void 0)}vl.get("/",Me(async(r,e)=>{let t=Oe(),n=await er(t),o=await Mf(n);e.status(200).json(o)}));vl.get("/:moduleId",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await er(Oe()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await gf(n,t,C);e.json(o)}catch(o){e.status(400).json({err:o})}}));vl.patch("/:moduleId/metadata",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t;try{t=CE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Oe(),o=await er(n);A_({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:C,project:n}),e.status(201).json({message:"ok"})}));vl.post("/",Me(async(r,e)=>{let t;try{t=xE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}try{So(t.name)}catch(c){e.status(400).json({error:`Invalid module name: ${c}`});return}let n=Oe(),i=(await er(n)).mobileModules;if(Object.values(i).find(c=>c.name===t.name)){e.status(400).json({error:`A mobile module with the name "${t.name}" already exists. Please choose a different name.`});return}let a=yj.join(n.rootDir,t.folderPath??"");if(!W_.existsSync(a)||!W_.statSync(a).isDirectory()){e.status(400).json({error:`The folder configured for mobile module creation does not exist: ${a}`});return}let s=await R_({...t,folder:a,project:n});e.status(201).json(s)}));var j_=vl;var $_=bj();$_.get("/",Me(async(r,e)=>{let t=Oe(),n=await er(t),o=await Mf(n),i=new Set;n?.mobileTests&&Object.values(n.mobileTests).forEach(l=>{l.labels?.forEach(u=>i.add(u))});let a=Array.from(i).sort(),s=Object.values(n.mobileTests),c={labels:a,modules:o,tests:s};e.status(200).json(c)}));var q_=$_;import{Router as Ej}from"express";var Kd=Ej();Kd.get("/",Me((r,e)=>{let t=d_(Oe(),ut);e.status(200).json(t)}));Kd.get("/names",Me((r,e)=>{let n=Oe().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));Kd.post("/",Me((r,e)=>{let t;try{t=wE.parse(r.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{So(t.name)}catch(s){e.status(400).json({error:`Invalid environment name: ${s}`});return}let n=Oe();if(n.config.environments?.find(s=>s.name===t.name)){e.status(400).json({error:`An environment with the name "${t.name}" already exists. Please choose a different name.`});return}let i={...n.config,environments:[...n.config.environments??[],{name:t.name}]};n.config=i,Ud(i,n.configFilePath);let a=Jo(t.name,n,ut);e.status(201).json(a)}));var K_=Kd;import{Router as Tj}from"express";var Y_=Tj();Y_.get("/",(r,e)=>{e.status(200).json({userId:$d(),orgId:va(),cliVersion:Cf??"0.0.0"})});var X_=Y_;import{Router as vj}from"express";var J_=vj();J_.get("/",Me(async(r,e)=>{let t=r.query.sessionId;if(!t){e.status(400).json({packages:[]});return}let n=qd.getSession(t);if(!n?.controller){e.status(200).json({packages:[]});return}try{let a=(await n.controller.executeRawADBCommand("shell pm list packages -3"))?.split(`
4408
4408
  `).filter(s=>s.trim().startsWith("package:")).map(s=>s.replace("package:","").trim()).filter(s=>s.length>0&&!s.startsWith("io.appium"))||[];e.status(200).json({packages:a})}catch(o){ut.error({err:o},"Error fetching installed packages from the session controller"),e.status(200).json({packages:[]})}}));var Q_=J_;import{Router as Aj}from"express";import Yd from"path";var Al=Aj();Al.patch("/:testPath",Me(async(r,e)=>{let t=r.params.testPath;if(!t){e.status(400).json({error:"Missing testPath in path"});return}let n;try{n=vE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}if(n.steps===void 0&&n.settings===void 0&&n.labels===void 0){e.status(400).json({error:"At least one of steps, settings, or labels is required"});return}let o=Oe(),i=t.endsWith(".test.yaml")?t:`${t}.test.yaml`,a=await er(o);await x_({filePath:i,steps:n.steps,settings:n.settings,labels:n.labels,folder:o.rootDir,project:o,momenticFiles:a,schemaVersion:ho});let s={message:"ok"};e.status(200).json(s)}));Al.post("/",Me((r,e)=>{let t;try{t=TE.parse(r.body)}catch(g){e.status(400).json({error:`Invalid request body: ${g}`});return}let{name:n,description:o,settings:i,pathSegments:a}=t;if(!n||typeof n!="string"){e.status(400).json({error:"Missing or invalid 'name' in body"});return}try{So(n)}catch(g){e.status(400).json({error:g.message});return}let s=Oe(),c=Yd.join(s.rootDir,...a),{fullPath:l,testId:u}=C_({name:n,description:o,steps:[],settings:i,folder:c}),d=Yd.basename(l),m=Yd.relative(s.rootDir,l),p={id:u,fileName:d,fullPath:l,relativeFilePath:m};e.status(201).json(p)}));Al.get("/:fileName",Me(async(r,e)=>{let t=r.params.fileName;if(!t){e.status(400).json({error:"Missing fileName in path"});return}let n=t.endsWith(".test.yaml")?t:`${t}.test.yaml`,o=Yd.basename(n).replace(".test.yaml",""),i=Oe(),a=await er(i),c={...await Gd(n,ut,a),name:o};e.status(200).json(c)}));Al.patch("/:testPath/metadata",Me(async(r,e)=>{let t=r.params.testPath;if(!t){e.status(400).json({error:"Missing testPath in path"});return}let n;try{n=AE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}let o=Oe(),i=t.endsWith(".test.yaml")?t:`${t}.test.yaml`,s={message:"ok",newRelativeTestPath:M_(i,n,o).newRelativeTestPath};e.status(200).json(s)}));var Z_=Al;import{Router as Rj}from"express";var eI=Rj();eI.get("/",Me((r,e)=>{let t=Oe(),n={ai:t.config.ai,displayRoot:t.config.displayRoot};e.status(200).json(n)}));var tI=eI;var Xd=class extends ua{constructor(t,n){super(t,n);this.client=t;this.orgId=n}async fetchEnvironment(t,n){let o=Oe();return Jo(t,o,C)}};var oI="10mb";async function iI(r){let{serverPort:e,apiKey:t,momenticServerUrl:n,staticDir:o,initialProject:i,driverLogLevel:a,regenerateCache:s,alwaysSaveCache:c,noCache:l}=r;n&&B_(n),await z_(t);let u=va(),d=$d(),m=r.logger.child({orgId:u,userId:d});G_(i,v=>fa({configFilePath:v}));let p=nI();p.use(wj()),p.use(rI.json({limit:oI})),p.use(rI.urlencoded({extended:!1,limit:oI}));let g=Mj();if(g.use("/folders",Rf),g.use("/entities",q_),g.use("/identify",X_),g.use("/mobile-tests",Z_),g.use("/mobile-modules",j_),g.use("/assets",V_),g.use("/git",wf),g.use("/environments",K_),g.use("/installed-packages",Q_),g.use("/settings",tI),p.use("/api",g),p.use((v,M,G)=>{C.debug({url:v.url,path:v.path,query:v.query,method:v.method,body:v.body,headers:v.rawHeaders,client:v.ip},"Incoming request on mobile-desktop-server"),M.on("close",()=>{M.statusCode>=400&&(C.error({url:v.url,method:v.method,statusCode:M.statusCode},"Request completed in error on mobile-desktop-server"),ut.error({url:v.url,method:v.method,statusCode:M.statusCode},"Request completed in error on mobile-desktop-server"))}),G()}),p.use((v,M,G,H)=>{if(v instanceof Error&&v.message.includes("BadRequestError: request aborted")){G.status(400).send("Client disconnected");return}C.error({stack:v.stack,msg:v.message,err:v,url:M.url,method:M.method},"Unhandled exception leading to 500 on mobile-desktop-server"),ut.error({stack:v.stack,msg:v.message,err:v,url:M.url,method:M.method},"Unhandled exception leading to 500 on mobile-desktop-server"),G.status(500).send(`Internal Server Error: ${v.message}`)}),o){let v=nI.static(o,{setHeaders:M=>{M.setHeader("Cache-Control","no-cache")},redirect:!1});p.use(v),p.use("*",(M,G)=>{G.sendFile(Ij.join(o,"index.html"))})}let h=_j.createServer(p),f=`http://localhost:${e}`;await new Promise(v=>{try{h.listen(e,()=>{m.info(`Mobile desktop server is running at ${f}`),v()})}catch(M){M.message.includes("EADDRINUSE")?Pj(e):C.error(`An unexpected error occurred while starting the server: ${M.message}`),process.exit(1)}});let T={type:"API_KEY",baseUrl:vf(),apiKey:t,logger:m},w=new Xt(T),x=Oe(),R={...T,mode:"interactive"},{dispose:O}=c_({baseServer:h,logger:m,authorization:T,globalStateManager:qd,getOrgId:()=>va(),getGitMetadata:async()=>await Sa(m,w,x),androidDriverFactory:async({socket:v,logger:M,creationOpts:G})=>{let H=Math.floor(Math.random()*1e4)+4e4,W=await Lc(H,"appium");return Mu({logger:M,driverLogLevel:a,apiClient:w,creationOpts:G,socket:v,appiumPort:W,sessionId:v.id,orgId:va(),callbacks:{onStatusUpdate:K=>{M.info({status:K},"Emulator status update"),v.emit("connectionStatusUpdate",{message:K,type:"info"})},onHeartbeatFailure:()=>{v.emit("connectionStatusUpdate",{message:"Emulator connection lost \u2014 possible ADB tunnel/emulator failure",type:"disconnected"})},onHeartbeatRestored:()=>{v.emit("connectionStatusUpdate",{message:"Emulator connection restored",type:"connected"})},onLimbarConnectionStateChange:K=>{K==="disconnected"?v.emit("connectionStatusUpdate",{message:"Emulator connection lost.",type:"disconnected"}):K==="reconnecting"||K==="connecting"?v.emit("connectionStatusUpdate",{message:"Reconnecting to emulator...",type:K==="reconnecting"?"reconnecting":"connecting"}):K==="connected"&&v.emit("connectionStatusUpdate",{message:"Emulator connection restored",type:"connected"})}}})},mobileGeneratorFactory:async v=>new ma({baseUrl:vf(),apiKey:t,logger:m,mode:"interactive"}),browserGeneratorFactory:async v=>new Xo(x.config.ai?.agentConfig,R),browserEnricherFactory:async v=>new ca(R,new Xo(x.config.ai?.agentConfig,R)),storageFactory:async v=>new Xd(w,v),cacheStorageFactory:async(v,M)=>_d({logger:m,orgId:v,client:w,gitMetadata:M,regenerateCache:s,noCache:l,alwaysSaveCache:c}),localToolsFactory:async()=>new pa({httpClient:w,fakerSeed:x.config.advanced?.fakerConstantSeed?fc:void 0}),keepSessionAlive:v=>w.extendAndroidEmulatorTtl(v),settingsFactory:async()=>({emulator:{},ai:{},browser:{},...x.config})});process.once("SIGUSR2",async()=>{return;try{await O(),await He.flush()}catch(v){C.error({err:v},"Error during session dispose on SIGUSR2")}try{h.close(()=>{process.kill(process.pid,"SIGUSR2")})}catch{process.kill(process.pid,"SIGUSR2")}}),process.once("SIGTERM",async()=>{let v="SIGTERM in Momentic mobile app received";C.info(v),m.info(v);try{await O(),await He.flush()}finally{h.close(()=>process.exit(0))}}),process.once("SIGINT",async()=>{C.info("SIGINT in Momentic mobile app received");try{await O(),await He.flush()}finally{h.close(()=>process.exit(0))}})}xj.setMaxListeners(25);process.on("warning",r=>{ut.warn({err:r},`Node warning received on mobile-desktop-server: ${r.message}`)});process.on("uncaughtException",r=>{ut.error({err:r},"Uncaught exception on mobile-desktop-server"),C.error(`Oh no! The Momentic mobile desktop app encountered a fatal error \u{1F61E}. Error logs: ${r.message}`)});process.on("unhandledRejection",r=>{ut.error({reason:`${r}`,stack:r?.stack},"Uncaught exception on mobile-desktop-server (promise rejection)"),C.error(`Oh no! The Momentic mobile desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${r}`)});function Pj(r){C.error(Cj`Port ${r} is already in use by another process. Please close the other process and try again.
4409
4409
  Using Bash on MacOS or Linux:
4410
4410
  lsof -t -i :58888 | xargs kill -9
@@ -4414,7 +4414,7 @@ ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Moment
4414
4414
  `)}import{Readable as r$}from"node:stream";import n$ from"open";import ei from"path";import{pipeline as o$}from"stream/promises";import{fileURLToPath as i$}from"url";import _f from"fs";import Jd from"path";import{cwd as Oj}from"process";async function If({tests:r,momenticFiles:e,project:t,yes:n,include:o,exclude:i,labels:a,logger:s,quarantinedTestReasons:c}){let l=new Set;if(r&&r.length>0){let d=r.some(p=>_f.existsSync(p)),m=Oj();d?(m!==t.rootDir&&s.warn(`The current working directory ('${m}') is different from the project root directory ('${t.rootDir}'). All test path arguments will be resolved relative to the current working directory and only those tests matched by the project inclusion configuration will be ran. To avoid confusion, Momentic strongly recommends running the CLI from the project root directory or using substring filters rather than file paths.`),s.info(`Reading tests from the following local file paths:
4415
4415
  - ${r.join(`
4416
4416
  - `)}
4417
- `),r.forEach(p=>{if(!_f.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let g,h;try{g=_f.statSync(p),h=g.isDirectory()}catch(b){s.warn({err:b},`Skipping path ${p} because it cannot be read`);return}let f=Jd.resolve(p);Object.values(e.mobileTests).filter(b=>h?b.fullFilePath.startsWith(f):b.fullFilePath===f).forEach(b=>{l.add(b.fullFilePath)})})):(s.info("The arguments provided don't appear to be valid paths. Treating them as substrings instead... "),Object.values(e.mobileTests).forEach(p=>{r.some(g=>p.relativePath.includes(g))&&l.add(p.fullFilePath)}))}else{!n&&!await Ic("No test paths or substrings were provided. Do you want to run all tests?")&&(s.error("Cancelled by user."),process.exit(1));let d=Object.values(e.mobileTests);s.info(`Reading all ${d.length} mobile tests in the project from local disk.`),d.forEach(m=>{l.add(m.fullFilePath)})}for(let d of Array.from(l)){let m=Jd.relative(t.rootDir,d);o&&!o.some(p=>new RegExp(p).test(m))&&l.delete(d),i&&i.some(p=>new RegExp(p).test(m))&&l.delete(d)}return(await Promise.all(Array.from(l).map(async d=>{try{let m=Jd.relative(t.rootDir,d),p=await Gd(d,s,e),g=Jd.basename(d,".test.yaml");if(p.disabled)return null;if(a&&a.length>0){let h=p.labels||[];if(!a.some(b=>h.includes(b)))return null}return{id:p.id,name:g,description:p.description,schemaVersion:p.schemaVersion,settings:p.settings,steps:p.steps,fullFilePath:d,relativeFilePath:m,quarantined:!!c[p.id],quarantinedReason:c[p.id],labels:p.labels}}catch(m){s.error(`Failed to read and resolve mobile test at '${d}': ${m}`),process.exit(1)}}))).filter(d=>!!d)}import{InvalidArgumentError as Qd,Option as Fe}from"@commander-js/extra-typings";import{z as Lj}from"zod";var aI=58890;function Zd(r){let e=parseInt(r,10);if(isNaN(e))throw new Qd("Not a number.");return e}var Aa=new Fe("--api-key <key>","Momentic API key").env("MOMENTIC_API_KEY").argParser(r=>{if(!r)throw new Qd("API key is required.");return r}).makeOptionMandatory(),ep=new Fe("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),Pf=new Fe("-f, --filter <filter>","Run tests within the project that has a name equal to the filter provided. This option cannot be used together with file path or directory arguments, but substring matches are allowed."),Ra=new Fe("--server <server>","Momentic server to use.").env("MOMENTIC_SERVER").default("https://api.momentic.ai").argParser(r=>{try{return Lj.string().url().parse(r),r}catch{throw new Qd("Not a valid URL.")}}),Of=new Fe("-y, --yes","Skip all confirmation prompts.").env("CI"),Lf=new Fe("--regenerate-cache","Regenerate all caches by starting from an empty cache state. This flag is useful for completely regenerating caches after changing configuration options. Warning: using this option will cause all steps to run without any cached data, resulting in significantly longer execution times."),Nf=new Fe("--save-cache","Always save updated step caches after successful test runs. By default, caches are not saved when running on protected branches.").env("CI"),Df=new Fe("--disable-cache","Disable using step caches completely. Using this option may lead to non-deterministic behavior and significantly longer runtimes.").implies({saveCache:!1}),kf=new Fe("--tag <tag>","Tag identifier for the asset."),sI=new Fe("--channel <channel>","Channel name for the asset."),Ff=new Fe("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),lI=new Fe("--tag <tag>","Tag identifier for the asset.").makeOptionMandatory(),cI=new Fe("--env <env>","Environment to run all tests in (overrides test-level configuration)."),uI=new Fe("--local-avd-id <localAvdId>","Force tests to use a specific local Android Virtual Device (AVD) instead of remote emulators."),dI=new Fe("--local-apk-path <localApkPath>","Path to a local APK file to install when running tests with a local emulator. Overrides remote asset configuration."),pI=new Fe("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(Zd),mI=new Fe("--shard-index <shardIndex>","The index of the shard to run tests for. Defaults to 1.").default(1).argParser(r=>{let e=Zd(r);if(e<1)throw new Qd("Shard index must be greater than 0.");return e}),gI=new Fe("--shard-count <shardCount>","The number of shards that tests are being run on. Defaults to 1.").default(1).argParser(Zd),Uf=new Fe("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),Bf=new Fe("--include <includePatterns...>","Only include tests that match the provided regex patterns. Multiple patterns can be provided. The patterns will be matched against the test file paths and the pattern only needs to match a part of the path for the test to be included."),zf=new Fe("--exclude <excludePatterns...>","The inverted version of --include: a test that matches any of the provided exclusion patterns will be excluded from running."),hI=new Fe("--upload-results","Upload test results to Momentic Cloud.").default(!1),Gf=new Fe("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),fI=new Fe("--ignore-quarantine","Run all tests even if they are quarantined. This is useful for validating that quarantined tests are fixed before moving them out of quarantine.").implies({skipQuarantined:!1,onlyQuarantined:!1}),SI=new Fe("--timeout-minutes <timeoutMinutes>","Maximum number of minutes to run tests before stopping. When the timeout is reached, tests will stop and current results will be printed.").argParser(Zd),yI=new Fe("--reporter <reporter>","Output report files in a standardized format to a local directory.").choices(Object.values(es)),bI=new Fe("--reporter-dir <reporterDir>","Output directory to store report files. Relative paths are resolved relative to the project root, which is defined by the detected momentic.config.yaml.").default("reports");import{randomUUID as Jj}from"crypto";import{existsSync as Qj}from"fs";import{randomUUID as Dj}from"crypto";import{existsSync as kj,statSync as Fj}from"fs";import{cloneDeep as Uj}from"lodash-es";import EI from"path";async function TI(r){let{inputs:e,fixtures:t,metadata:n,options:o}=r,{tracer:i,logger:a}=t,{runId:s}=n,{testDefinition:c,project:l}=e,u=new Date,d=await i.startRun({logger:a,testId:c.id,testName:c.name,runId:s,testDescription:c.description,testLabels:c.labels,schemaVersion:c.schemaVersion,originalSteps:{steps:Uj(c.steps),beforeSteps:void 0,afterSteps:void 0},quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}),m=a.child(d.loggerBindings||{}),p=1+(c.settings?.retries??l.config.retries??1);for(let g=0;g<p;g++){let h=new Date,f=await Bj({runTracer:d,testDefinition:c,metadata:n,constants:{attemptNumber:g,totalAttempts:p},fixtures:{...t,logger:m},inputs:e,options:o}),b=new Date;if(f.status!=="FAILED")return await d.finish({logger:a,status:f.status,failureRecoveryDetails:f.failureRecoveryDetails,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,runId:s,attempts:g+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason,status:f.status};if(g!==p-1){a.warn("Retrying failed mobile run");continue}a.error("Mobile test failed after all exhausting attempts");let T={failureReason:f.error?.reason,failureDetails:f.error?{errorMessage:f.error.message,errorStack:f.error.stack}:void 0};return await d.finish({logger:a,status:f.status,...T,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,runId:s,...T,attempts:g+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason,status:f.status}}throw new Error("This code should not be reachable")}async function Bj(r){let{runTracer:e,testDefinition:t,metadata:n,constants:o,fixtures:i,inputs:a,options:s}=r,{attemptNumber:c,totalAttempts:l}=o,{orgId:u,gitMetadata:d}=n,{apiClient:m,logger:p,usageTracker:g}=i,{logUpdate:h,channel:f,tag:b,project:T,envOverride:w}=a,{regenerateCache:x,alwaysSaveCache:R,noCache:O,logLevel:v,localAvdId:M,localApkPath:G}=s;c!==0&&h("RETRY",`attempt ${c}/${l}`);let H={...a.project.config.emulator,...t.settings?.emulator},W={...T.config.ai,useMemory:T.config.ai?.useMemory!==!1,...t.settings?.ai},K=G?EI.resolve(G):void 0;if(K&&(!kj(K)||!Fj(K).isFile()))throw new Error(`Local APK path "${K}" does not exist. Provide a valid file path via --local-apk-path.`);let ve=w||t.settings?.defaultEnv,B=(ve?Jo(ve,T,p):void 0)?.variables??{},ce=typeof B[Eo]=="string"?B[Eo].trim():void 0,fe=typeof B[Ya]=="string"?B[Ya].trim():void 0,Je=_d({logger:p,orgId:u,client:m,gitMetadata:d,regenerateCache:x,alwaysSaveCache:R,noCache:O}),Le=new ua(m,u),Lt={type:"API_KEY",baseUrl:m.baseUrl,apiKey:m.apiKey,logger:p,mode:"runner"},jt=new ma(Lt),Ne=new Xo(W.agentConfig,Lt),dt=new ca(Lt,Ne),sn=new pa({httpClient:m,fakerSeed:T.config.advanced?.fakerConstantSeed?fc:void 0}),Rn=Math.floor(Math.random()*1e4)+4e4,ti=await Lc(Rn,"appium"),wl=H.region==="local"?K??t.settings?.defaultApkFilePath?.trim()??(fe?EI.resolve(fe):void 0):void 0,oo=f&&!wl?{channel:f,tag:b}:void 0,wn,ri;if(M||H.region==="local"){if(ri=M??H.localEmulatorSettings?.avdId??ce,!ri)throw new Error(`An AVD ID is required when using a local region. Provide --local-avd-id, configure a default local AVD ID on the test's settings, or set the ${Eo} key on the environment.`);wn={avdId:ri,apkToInstall:oo,apkFilePath:wl}}else wn={region:H.region,apkToInstall:oo,osVersion:H.remoteEmulatorSettings?.androidVersion??Db};let Ca=Dj(),io=p.child({runAttemptId:Ca}),j;try{j=await Mu({apiClient:m,logger:p,driverLogLevel:v,creationOpts:wn,callbacks:{onStatusUpdate:pt=>{p.debug({status:pt},"Emulator status update")},onHeartbeatFailure:()=>{let pt="Appium heartbeat connection lost \u2014 possible ADB tunnel/emulator failure";C.warn(pt)},onHeartbeatRestored:()=>{let pt="Appium heartbeat connection restored";C.info(pt)},onLimbarConnectionStateChange:pt=>{pt==="disconnected"?C.warn("Emulator websocket connection lost. Emulator may be unavailable."):(pt==="reconnecting"||pt==="connecting")&&C.info("Emulator websocket is reconnecting...")}},appiumPort:ti,orgId:u,sessionId:Ca})}catch(pt){let Yf=`Fatal error creating Android driver, failing test run attempt (runId: ${n.runId})`;return p.error({err:pt},Yf),C.error({err:pt},Yf),{status:"FAILED",results:[],error:new E("UserConfigurationError",`Fatal error creating Android driver: ${pt.message}`)}}let rr=await e.startAttempt({emulatorName:j.emulatorName,runAttemptId:Ca});io=io.child(rr.loggerBindings||{});let xI=await Iu({driver:j.driver,onLogs:pt=>{rr.appendLogs(pt)}}),MI=new xi({variablesFromEnvironment:B,envName:ve,testName:t.name}),Kf=await la.init({driver:j.driver,generator:jt,logger:io,limbarClient:j.limbarClient,playwrightDevice:j.playwrightDevice,orgId:u,adbPort:j.adbPort,options:{emulator:{...H,browserSettings:T.config.browser}},aiSettings:W,fixtures:{storage:Le,browserEnricher:dt,browserGenerator:Ne,localCodeEvalTools:sn,testContext:MI}}),ao;try{ao=await Ld({containerName:`mobile test ${t.name}`,fixtures:{controller:Kf,logger:io,cacheStorage:Je,usageTracker:g},work:{state:{failureRecoveryDisabled:W.failureRecovery===!1,failureRecoveryAttempts:0}},inputs:{testName:t.name,steps:t.steps,orgId:u,testMetadata:t},tracer:rr,callbacks:{}})}finally{await xI(),await j.cleanup(),await Kf.cleanup()}await rr.finish({logger:io,results:ao.results,status:ao.status,assetDetails:{avdId:ri,tag:oo?.tag,channel:oo?.channel}});let op;if(ao.status==="FAILED"&&ao.terminalResult){let pt=ao.terminalResult.message;pt?op=E.fromMessage(pt):op=new E("UnknownError",pt||"Unknown failure")}return{...ao,error:op}}import{existsSync as Vj,mkdirSync as Wj,statSync as jj}from"fs";import $j from"path";import{z as Y2e}from"zod";import zj from"junit-report-builder";import tp from"path";function Gj(r,e){if(e.name(r.testName).className(r.testName).file(tp.relative(".",r.filePath)).property("id",r.testId).property("dd_tags[id]",r.testId),r.labels&&(e.property("labels",r.labels.join(",")),r.labels.forEach(t=>{e.property("dd_tags[label]",t)})),r.baseUrl&&(e.property("base_url",r.baseUrl),e.property("dd_tags[base_url]",r.baseUrl)),r.runId&&(e.property("run_url",`https://app.momentic.ai/runs/${r.runId}`),e.property("dd_tags[run_url]",`https://app.momentic.ai/runs/${r.runId}`)),r.quarantined&&(e.property("quarantined","true"),e.property("dd_tags[quarantined]","true"),r.quarantinedReason&&(e.property("quarantined_reason",r.quarantinedReason),e.property("dd_tags[quarantined_reason]",r.quarantinedReason))),r.setupFailed&&(e.property("setup_failed","true"),e.property("dd_tags[setup_failed]","true")),r.mainFailed&&(e.property("main_failed","true"),e.property("dd_tags[main_failed]","true")),r.teardownFailed&&(e.property("teardown_failed","true"),e.property("dd_tags[teardown_failed]","true")),r.status==="FAILED"){if(r.failureReason){let t=yp[r.failureDetails?.classification?.reason||r.failureReason],n=r.failureDetails?.classification?.summary||Fl[r.failureReason];r.runId&&(n+=` Visit https://app.momentic.ai/runs/${r.runId} for more details.`),e.failure(n,t)}r.failureDetails?.errorStack&&e.stacktrace(r.failureDetails.errorStack)}else r.status==="CANCELLED"&&e.skipped();return e.time((r.finishedAt.getTime()-r.lastAttemptStartedAt.getTime())/1e3).property("started_at",r.lastAttemptStartedAt.toISOString()).property("dd_tags[started_at]",r.lastAttemptStartedAt.toISOString()).property("finished_at",r.finishedAt.toISOString()).property("dd_tags[finished_at]",r.finishedAt.toISOString()),e.property("attempts",r.attempts.toString()).property("dd_tags[attempts]",r.attempts.toString()),r.parameters?.envName&&(e.property("environment",r.parameters.envName),e.property("dd_tags[environment]",r.parameters.envName)),r.parameters?.urlOverride&&e.property("url_override",r.parameters.urlOverride),e}function Hj(r,e,t){let{suiteId:n,suiteName:o,startedAt:i,finishedAt:a,testsToSkip:s,quarantinedTestsToSkip:c,quarantinedTestReasons:l}=e,u=r.testSuite().name(o);n&&u.property("id",n),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",a.toISOString()).time((a.getTime()-i.getTime())/1e3);for(let d of t){let m=u.testCase();Gj(d,m)}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(tp.relative(".",d.relativeFilePath)).property("id",d.id),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(p=>{m.property("dd_tags[label]",p)})),m.skipped()}for(let d of c){let m=u.testCase();m.name(d.name).className(d.name).file(tp.relative(".",d.relativeFilePath)).property("id",d.id).property("quarantined","true");let p=l[d.id];p&&m.property("quarantinedReason",p),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(g=>{m.property("dd_tags[label]",g)})),m.skipped()}return u}function Hf(r,e,t){let n=zj.newBuilder();Hj(n,e,t),n.writeTo(tp.join(r,`${e.suiteName}.xml`))}function qj(r){return{testName:$j.basename(r.filePath,".test.yaml")||r.filePath.split("/").pop()?.replace(".yaml","")||r.filePath,testId:r.testMetadata.id,filePath:r.filePath,labels:r.testMetadata.labels,baseUrl:void 0,runId:r.runId,quarantined:r.quarantined,quarantinedReason:r.quarantinedReason,status:r.status,setupFailed:void 0,mainFailed:void 0,teardownFailed:void 0,failureDetails:r.failureDetails,failureReason:r.failureReason,finishedAt:r.finishedAt,lastAttemptStartedAt:r.lastAttemptStartedAt,attempts:r.attempts,parameters:r.parameters}}async function vI({logger:r,callbacks:e,format:t,params:n,runs:o,folder:i}){switch(Vj(i)?jj(i).isDirectory()||(C.error(`The specified reporter output directory '${i}' exists on disk but is not a folder. Please move or delete the existing object or specify a different reporter path.`),process.exit(1)):(C.info(`Reporter output directory '${i}' does not exist on disk, creating it now...`),Wj(i,{recursive:!0})),t){case"junit":{let a=o.map(qj);Hf(i,n,a);return}case"allure":case"allure-json":C.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;case"playwright-json":C.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;default:throw new Error(`Unknown reporter format requested: '${t}'`)}}import{debounce as Kj}from"ts-debounce";var Rl="0.21.1";function Yj(r){switch(r){case"PASSED":return"SUCCESS";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":case"PENDING":case"RETRYING":case"WAITING_FOR_USER":return"RUNNING"}}function Xj(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Vf=class{constructor(e,t,n,o,i,a){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.parentTracer=i;this.orgId=a;this.interactionTracer=new jo,Nr.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Ts}/${t}.jpeg`,contents:n})}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;He.distribution("test_step_duration",t,[`type:${o}`,"platform:mobile","executor:cli",`orgId:${this.orgId}`])}attachAfterScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Ts}/${t}.jpeg`,contents:n})}async finishInternal(e){this.finished||(this.finished=!0,this.interactionTracer.finish(),await Promise.all(this.children.map(t=>t.finish({status:Xj(e.status),finishedAt:e.finishedAt}))))}async finish(e){return await this.finishInternal({status:e.result.status,finishedAt:new Date(e.result.endTime)}),{trace:this.interactionTracer.getRootSpan()}}async startSubSteps(){let e=new wa(this.keepalive,this.testId,this.testName,this.diskStorage,this.orgId);return this.children.push(e),e}},wa=class{constructor(e,t,n,o,i){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.orgId=i}children=[];finished=!1;async getScreenshot(e){return this.diskStorage.readFile(`${Ts}/${e}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new Vf(this.keepalive,this.testId,this.testName,this.diskStorage,this,this.orgId);return this.children.push(t),t}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(t=>t.finishInternal({status:Yj(e.status),finishedAt:e.finishedAt}))))}},Wf=class{constructor(e,t,n,o,i,a,s){this.keepalive=e;this.testId=t;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;this.orgId=s;this.diskStorage.mkdir("assets"),this.logStream=this.diskStorage.createFileStream("assets/logs.logcat")}finished=!1;children=[];logStream;get loggerBindings(){return{runAttemptId:this.runAttemptId}}appendLogs(e){let t=e.join(`
4417
+ `),r.forEach(p=>{if(!_f.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let g,h;try{g=_f.statSync(p),h=g.isDirectory()}catch(b){s.warn({err:b},`Skipping path ${p} because it cannot be read`);return}let f=Jd.resolve(p);Object.values(e.mobileTests).filter(b=>h?b.fullFilePath.startsWith(f):b.fullFilePath===f).forEach(b=>{l.add(b.fullFilePath)})})):(s.info("The arguments provided don't appear to be valid paths. Treating them as substrings instead... "),Object.values(e.mobileTests).forEach(p=>{r.some(g=>p.relativePath.includes(g))&&l.add(p.fullFilePath)}))}else{!n&&!await Ic("No test paths or substrings were provided. Do you want to run all tests?")&&(s.error("Cancelled by user."),process.exit(1));let d=Object.values(e.mobileTests);s.info(`Reading all ${d.length} mobile tests in the project from local disk.`),d.forEach(m=>{l.add(m.fullFilePath)})}for(let d of Array.from(l)){let m=Jd.relative(t.rootDir,d);o&&!o.some(p=>new RegExp(p).test(m))&&l.delete(d),i&&i.some(p=>new RegExp(p).test(m))&&l.delete(d)}return(await Promise.all(Array.from(l).map(async d=>{try{let m=Jd.relative(t.rootDir,d),p=await Gd(d,s,e),g=Jd.basename(d,".test.yaml");if(p.disabled)return null;if(a&&a.length>0){let h=p.labels||[];if(!a.some(b=>h.includes(b)))return null}return{id:p.id,name:g,description:p.description,schemaVersion:p.schemaVersion,settings:p.settings,steps:p.steps,fullFilePath:d,relativeFilePath:m,quarantined:!!c[p.id],quarantinedReason:c[p.id],labels:p.labels}}catch(m){s.error(`Failed to read and resolve mobile test at '${d}': ${m}`),process.exit(1)}}))).filter(d=>!!d)}import{InvalidArgumentError as Qd,Option as Fe}from"@commander-js/extra-typings";import{z as Lj}from"zod";var aI=58890;function Zd(r){let e=parseInt(r,10);if(isNaN(e))throw new Qd("Not a number.");return e}var Aa=new Fe("--api-key <key>","Momentic API key").env("MOMENTIC_API_KEY").argParser(r=>{if(!r)throw new Qd("API key is required.");return r}).makeOptionMandatory(),ep=new Fe("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),Pf=new Fe("-f, --filter <filter>","Run tests within the project that has a name equal to the filter provided. This option cannot be used together with file path or directory arguments, but substring matches are allowed."),Ra=new Fe("--server <server>","Momentic server to use.").env("MOMENTIC_SERVER").default("https://api.momentic.ai").argParser(r=>{try{return Lj.string().url().parse(r),r}catch{throw new Qd("Not a valid URL.")}}),Of=new Fe("-y, --yes","Skip all confirmation prompts.").env("CI"),Lf=new Fe("--regenerate-cache","Regenerate all caches by starting from an empty cache state. This flag is useful for completely regenerating caches after changing configuration options. Warning: using this option will cause all steps to run without any cached data, resulting in significantly longer execution times."),Nf=new Fe("--save-cache","Always save updated step caches after successful test runs. By default, caches are not saved when running on protected branches.").env("CI"),Df=new Fe("--disable-cache","Disable using step caches completely. Using this option may lead to non-deterministic behavior and significantly longer runtimes.").implies({saveCache:!1}),kf=new Fe("--tag <tag>","Tag identifier for the asset."),sI=new Fe("--channel <channel>","Channel name for the asset."),Ff=new Fe("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),lI=new Fe("--tag <tag>","Tag identifier for the asset.").makeOptionMandatory(),cI=new Fe("--env <env>","Environment to run all tests in (overrides test-level configuration)."),uI=new Fe("--local-avd-id <localAvdId>","Force tests to use a specific local Android Virtual Device (AVD) instead of remote emulators."),dI=new Fe("--local-apk-path <localApkPath>","Path to a local APK file to install when running tests with a local emulator. Overrides remote asset configuration."),pI=new Fe("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(Zd),mI=new Fe("--shard-index <shardIndex>","The index of the shard to run tests for. Defaults to 1.").default(1).argParser(r=>{let e=Zd(r);if(e<1)throw new Qd("Shard index must be greater than 0.");return e}),gI=new Fe("--shard-count <shardCount>","The number of shards that tests are being run on. Defaults to 1.").default(1).argParser(Zd),Uf=new Fe("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),Bf=new Fe("--include <includePatterns...>","Only include tests that match the provided regex patterns. Multiple patterns can be provided. The patterns will be matched against the test file paths and the pattern only needs to match a part of the path for the test to be included."),zf=new Fe("--exclude <excludePatterns...>","The inverted version of --include: a test that matches any of the provided exclusion patterns will be excluded from running."),hI=new Fe("--upload-results","Upload test results to Momentic Cloud.").default(!1),Gf=new Fe("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),fI=new Fe("--ignore-quarantine","Run all tests even if they are quarantined. This is useful for validating that quarantined tests are fixed before moving them out of quarantine.").implies({skipQuarantined:!1,onlyQuarantined:!1}),SI=new Fe("--timeout-minutes <timeoutMinutes>","Maximum number of minutes to run tests before stopping. When the timeout is reached, tests will stop and current results will be printed.").argParser(Zd),yI=new Fe("--reporter <reporter>","Output report files in a standardized format to a local directory.").choices(Object.values(es)),bI=new Fe("--reporter-dir <reporterDir>","Output directory to store report files. Relative paths are resolved relative to the project root, which is defined by the detected momentic.config.yaml.").default("reports");import{randomUUID as Jj}from"crypto";import{existsSync as Qj}from"fs";import{randomUUID as Dj}from"crypto";import{existsSync as kj,statSync as Fj}from"fs";import{cloneDeep as Uj}from"lodash-es";import EI from"path";async function TI(r){let{inputs:e,fixtures:t,metadata:n,options:o}=r,{tracer:i,logger:a}=t,{runId:s}=n,{testDefinition:c,project:l}=e,u=new Date,d=await i.startRun({logger:a,testId:c.id,testName:c.name,runId:s,testDescription:c.description,testLabels:c.labels,schemaVersion:c.schemaVersion,originalSteps:{steps:Uj(c.steps),beforeSteps:void 0,afterSteps:void 0},quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}),m=a.child(d.loggerBindings||{}),p=1+(c.settings?.retries??l.config.retries??1);for(let g=0;g<p;g++){let h=new Date,f=await Bj({runTracer:d,testDefinition:c,metadata:n,constants:{attemptNumber:g,totalAttempts:p},fixtures:{...t,logger:m},inputs:e,options:o}),b=new Date;if(f.status!=="FAILED")return await d.finish({logger:a,status:f.status,failureRecoveryDetails:f.failureRecoveryDetails,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,runId:s,attempts:g+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason,status:f.status};if(g!==p-1){a.warn("Retrying failed mobile run");continue}a.error("Mobile test failed after all exhausting attempts");let T={failureReason:f.error?.reason,failureDetails:f.error?{errorMessage:f.error.message,errorStack:f.error.stack}:void 0};return await d.finish({logger:a,status:f.status,...T,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,runId:s,...T,attempts:g+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason,status:f.status}}throw new Error("This code should not be reachable")}async function Bj(r){let{runTracer:e,testDefinition:t,metadata:n,constants:o,fixtures:i,inputs:a,options:s}=r,{attemptNumber:c,totalAttempts:l}=o,{orgId:u,gitMetadata:d}=n,{apiClient:m,logger:p,usageTracker:g}=i,{logUpdate:h,channel:f,tag:b,project:T,envOverride:w}=a,{regenerateCache:x,alwaysSaveCache:R,noCache:O,logLevel:v,localAvdId:M,localApkPath:G}=s;c!==0&&h("RETRY",`attempt ${c}/${l}`);let H={...a.project.config.emulator,...t.settings?.emulator},W={...T.config.ai,useMemory:T.config.ai?.useMemory!==!1,...t.settings?.ai},K=G?EI.resolve(G):void 0;if(K&&(!kj(K)||!Fj(K).isFile()))throw new Error(`Local APK path "${K}" does not exist. Provide a valid file path via --local-apk-path.`);let ve=w||t.settings?.defaultEnv,B=(ve?Jo(ve,T,p):void 0)?.variables??{},ce=typeof B[Eo]=="string"?B[Eo].trim():void 0,fe=typeof B[Ya]=="string"?B[Ya].trim():void 0,Je=_d({logger:p,orgId:u,client:m,gitMetadata:d,regenerateCache:x,alwaysSaveCache:R,noCache:O}),Le=new ua(m,u),Lt={type:"API_KEY",baseUrl:m.baseUrl,apiKey:m.apiKey,logger:p,mode:"runner"},jt=new ma(Lt),Ne=new Xo(W.agentConfig,Lt),dt=new ca(Lt,Ne),sn=new pa({httpClient:m,fakerSeed:T.config.advanced?.fakerConstantSeed?fc:void 0}),Rn=Math.floor(Math.random()*1e4)+4e4,ti=await Lc(Rn,"appium"),wl=H.region==="local"?K??t.settings?.defaultApkFilePath?.trim()??(fe?EI.resolve(fe):void 0):void 0,oo=f&&!wl?{channel:f,tag:b}:void 0,wn,ri;if(M||H.region==="local"){if(ri=M??H.localEmulatorSettings?.avdId??ce,!ri)throw new Error(`An AVD ID is required when using a local region. Provide --local-avd-id, configure a default local AVD ID on the test's settings, or set the ${Eo} key on the environment.`);wn={avdId:ri,apkToInstall:oo,apkFilePath:wl}}else wn={region:H.region,apkToInstall:oo,osVersion:H.remoteEmulatorSettings?.androidVersion??Db};let Ca=Dj(),io=p.child({runAttemptId:Ca}),j;try{j=await Mu({apiClient:m,logger:p,driverLogLevel:v,creationOpts:wn,callbacks:{onStatusUpdate:pt=>{p.debug({status:pt},"Emulator status update")},onHeartbeatFailure:()=>{let pt="Appium heartbeat connection lost \u2014 possible ADB tunnel/emulator failure";C.warn(pt)},onHeartbeatRestored:()=>{let pt="Appium heartbeat connection restored";C.info(pt)},onLimbarConnectionStateChange:pt=>{pt==="disconnected"?C.warn("Emulator websocket connection lost. Emulator may be unavailable."):(pt==="reconnecting"||pt==="connecting")&&C.info("Emulator websocket is reconnecting...")}},appiumPort:ti,orgId:u,sessionId:Ca})}catch(pt){let Yf=`Fatal error creating Android driver, failing test run attempt (runId: ${n.runId})`;return p.error({err:pt},Yf),C.error({err:pt},Yf),{status:"FAILED",results:[],error:new E("UserConfigurationError",`Fatal error creating Android driver: ${pt.message}`)}}let rr=await e.startAttempt({emulatorName:j.emulatorName,runAttemptId:Ca});io=io.child(rr.loggerBindings||{});let xI=await Iu({driver:j.driver,onLogs:pt=>{rr.appendLogs(pt)}}),MI=new xi({variablesFromEnvironment:B,envName:ve,testName:t.name}),Kf=await la.init({driver:j.driver,generator:jt,logger:io,limbarClient:j.limbarClient,playwrightDevice:j.playwrightDevice,orgId:u,adbPort:j.adbPort,options:{emulator:{...H,browserSettings:T.config.browser}},aiSettings:W,fixtures:{storage:Le,browserEnricher:dt,browserGenerator:Ne,localCodeEvalTools:sn,testContext:MI}}),ao;try{ao=await Ld({containerName:`mobile test ${t.name}`,fixtures:{controller:Kf,logger:io,cacheStorage:Je,usageTracker:g},work:{state:{failureRecoveryDisabled:W.failureRecovery===!1,failureRecoveryAttempts:0}},inputs:{testName:t.name,steps:t.steps,orgId:u,testMetadata:t},tracer:rr,callbacks:{}})}finally{await xI(),await j.cleanup(),await Kf.cleanup()}await rr.finish({logger:io,results:ao.results,status:ao.status,assetDetails:{avdId:ri,tag:oo?.tag,channel:oo?.channel}});let op;if(ao.status==="FAILED"&&ao.terminalResult){let pt=ao.terminalResult.message;pt?op=E.fromMessage(pt):op=new E("UnknownError",pt||"Unknown failure")}return{...ao,error:op}}import{existsSync as Vj,mkdirSync as Wj,statSync as jj}from"fs";import $j from"path";import{z as Y2e}from"zod";import zj from"junit-report-builder";import tp from"path";function Gj(r,e){if(e.name(r.testName).className(r.testName).file(tp.relative(".",r.filePath)).property("id",r.testId).property("dd_tags[id]",r.testId),r.labels&&(e.property("labels",r.labels.join(",")),r.labels.forEach(t=>{e.property("dd_tags[label]",t)})),r.baseUrl&&(e.property("base_url",r.baseUrl),e.property("dd_tags[base_url]",r.baseUrl)),r.runId&&(e.property("run_url",`https://app.momentic.ai/runs/${r.runId}`),e.property("dd_tags[run_url]",`https://app.momentic.ai/runs/${r.runId}`)),r.quarantined&&(e.property("quarantined","true"),e.property("dd_tags[quarantined]","true"),r.quarantinedReason&&(e.property("quarantined_reason",r.quarantinedReason),e.property("dd_tags[quarantined_reason]",r.quarantinedReason))),r.setupFailed&&(e.property("setup_failed","true"),e.property("dd_tags[setup_failed]","true")),r.mainFailed&&(e.property("main_failed","true"),e.property("dd_tags[main_failed]","true")),r.teardownFailed&&(e.property("teardown_failed","true"),e.property("dd_tags[teardown_failed]","true")),r.status==="FAILED"){if(r.failureReason){let t=yp[r.failureDetails?.classification?.reason||r.failureReason],n=r.failureDetails?.classification?.summary||Fl[r.failureReason];r.runId&&(n+=` Visit https://app.momentic.ai/runs/${r.runId} for more details.`),e.failure(n,t)}r.failureDetails?.errorStack&&e.stacktrace(r.failureDetails.errorStack)}else r.status==="CANCELLED"&&e.skipped();return e.time((r.finishedAt.getTime()-r.lastAttemptStartedAt.getTime())/1e3).property("started_at",r.lastAttemptStartedAt.toISOString()).property("dd_tags[started_at]",r.lastAttemptStartedAt.toISOString()).property("finished_at",r.finishedAt.toISOString()).property("dd_tags[finished_at]",r.finishedAt.toISOString()),e.property("attempts",r.attempts.toString()).property("dd_tags[attempts]",r.attempts.toString()),r.parameters?.envName&&(e.property("environment",r.parameters.envName),e.property("dd_tags[environment]",r.parameters.envName)),r.parameters?.urlOverride&&e.property("url_override",r.parameters.urlOverride),e}function Hj(r,e,t){let{suiteId:n,suiteName:o,startedAt:i,finishedAt:a,testsToSkip:s,quarantinedTestsToSkip:c,quarantinedTestReasons:l}=e,u=r.testSuite().name(o);n&&u.property("id",n),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",a.toISOString()).time((a.getTime()-i.getTime())/1e3);for(let d of t){let m=u.testCase();Gj(d,m)}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(tp.relative(".",d.relativeFilePath)).property("id",d.id),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(p=>{m.property("dd_tags[label]",p)})),m.skipped()}for(let d of c){let m=u.testCase();m.name(d.name).className(d.name).file(tp.relative(".",d.relativeFilePath)).property("id",d.id).property("quarantined","true");let p=l[d.id];p&&m.property("quarantinedReason",p),d.baseUrl&&m.property("baseUrl",d.baseUrl),d.labels&&(m.property("labels",d.labels.join(",")),d.labels.forEach(g=>{m.property("dd_tags[label]",g)})),m.skipped()}return u}function Hf(r,e,t){let n=zj.newBuilder();Hj(n,e,t),n.writeTo(tp.join(r,`${e.suiteName}.xml`))}function qj(r){return{testName:$j.basename(r.filePath,".test.yaml")||r.filePath.split("/").pop()?.replace(".yaml","")||r.filePath,testId:r.testMetadata.id,filePath:r.filePath,labels:r.testMetadata.labels,baseUrl:void 0,runId:r.runId,quarantined:r.quarantined,quarantinedReason:r.quarantinedReason,status:r.status,setupFailed:void 0,mainFailed:void 0,teardownFailed:void 0,failureDetails:r.failureDetails,failureReason:r.failureReason,finishedAt:r.finishedAt,lastAttemptStartedAt:r.lastAttemptStartedAt,attempts:r.attempts,parameters:r.parameters}}async function vI({logger:r,callbacks:e,format:t,params:n,runs:o,folder:i}){switch(Vj(i)?jj(i).isDirectory()||(C.error(`The specified reporter output directory '${i}' exists on disk but is not a folder. Please move or delete the existing object or specify a different reporter path.`),process.exit(1)):(C.info(`Reporter output directory '${i}' does not exist on disk, creating it now...`),Wj(i,{recursive:!0})),t){case"junit":{let a=o.map(qj);Hf(i,n,a);return}case"allure":case"allure-json":C.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;case"playwright-json":C.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;default:throw new Error(`Unknown reporter format requested: '${t}'`)}}import{debounce as Kj}from"ts-debounce";var Rl="0.21.2";function Yj(r){switch(r){case"PASSED":return"SUCCESS";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":case"PENDING":case"RETRYING":case"WAITING_FOR_USER":return"RUNNING"}}function Xj(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Vf=class{constructor(e,t,n,o,i,a){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.parentTracer=i;this.orgId=a;this.interactionTracer=new jo,Nr.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Ts}/${t}.jpeg`,contents:n})}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;He.distribution("test_step_duration",t,[`type:${o}`,"platform:mobile","executor:cli",`orgId:${this.orgId}`])}attachAfterScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Ts}/${t}.jpeg`,contents:n})}async finishInternal(e){this.finished||(this.finished=!0,this.interactionTracer.finish(),await Promise.all(this.children.map(t=>t.finish({status:Xj(e.status),finishedAt:e.finishedAt}))))}async finish(e){return await this.finishInternal({status:e.result.status,finishedAt:new Date(e.result.endTime)}),{trace:this.interactionTracer.getRootSpan()}}async startSubSteps(){let e=new wa(this.keepalive,this.testId,this.testName,this.diskStorage,this.orgId);return this.children.push(e),e}},wa=class{constructor(e,t,n,o,i){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.orgId=i}children=[];finished=!1;async getScreenshot(e){return this.diskStorage.readFile(`${Ts}/${e}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new Vf(this.keepalive,this.testId,this.testName,this.diskStorage,this,this.orgId);return this.children.push(t),t}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(t=>t.finishInternal({status:Yj(e.status),finishedAt:e.finishedAt}))))}},Wf=class{constructor(e,t,n,o,i,a,s){this.keepalive=e;this.testId=t;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;this.orgId=s;this.diskStorage.mkdir("assets"),this.logStream=this.diskStorage.createFileStream("assets/logs.logcat")}finished=!1;children=[];logStream;get loggerBindings(){return{runAttemptId:this.runAttemptId}}appendLogs(e){let t=e.join(`
4418
4418
  `);this.logStream.write(t+`
4419
4419
  `)}async finish(e){if(this.finished)return;this.finished=!0;let{logger:t,status:n,results:o,beforeResults:i,afterResults:a}=e,s={...this.metadata,status:n,assetDetails:e.assetDetails,finishedAt:new Date,results:dd(o,t),beforeResults:i?dd(i,t):void 0,afterResults:a?dd(a,t):void 0};await Promise.all(this.children.map(c=>c.finish({status:s.status,finishedAt:s.finishedAt})));try{this.logStream.end()}catch{}this.diskStorage.storeFile({name:"metadata.json",contents:JSON.stringify(s,null,2)})}async startBeforeStepList(){let e=new wa(this.keepalive,this.testId,this.testName,this.diskStorage,this.orgId);return this.children.push(e),e}async startMainStepList(){let e=new wa(this.keepalive,this.testId,this.testName,this.diskStorage,this.orgId);return this.children.push(e),e}async startAfterStepList(){let e=new wa(this.keepalive,this.testId,this.testName,this.diskStorage,this.orgId);return this.children.push(e),e}async getScreenshot(e,t){return this.diskStorage.readFile(`${Ts}/${t}.jpeg`)}},jf=class{constructor(e,t,n,o,i,a,s){this.client=e;this.testId=t;this.testName=n;this.runId=o;this.metadata=i;this.diskStorage=a;this.orgId=s}children=[];finished=!1;get loggerBindings(){return{runId:this.runId}}async finish(e){if(this.finished)return;this.finished=!0;let t={...this.metadata,finishedAt:e.finishedAt||new Date,status:e.status,failureDetails:e.failureDetails,failureReason:e.failureReason,flake:e.isFlake||!1,failureRecoveryDetails:e.failureRecoveryDetails};await Promise.all(this.children.map(n=>n.finish({logger:e.logger,status:t.status,results:[],beforeResults:[],afterResults:[]}))),this.diskStorage.storeFile({name:"metadata.json",contents:JSON.stringify(t,null,2)}),this.diskStorage.close()}async startAttempt(e){let{runAttemptId:t}=e;this.metadata.attempts=this.metadata.attempts+1,this.metadata.status="RUNNING",this.diskStorage.storeFile({name:"metadata.json",contents:JSON.stringify(this.metadata,null,2)});let n=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),o={id:t,schemaVersion:Ln,runAttemptSchemaVersion:MT,startedAt:new Date,status:"RUNNING"};n.storeFile({name:"metadata.json",contents:JSON.stringify(o,null,2)});let i=Kj(async()=>{await this.client.extendAndroidEmulatorTtl(e.emulatorName)},3e4,{maxWait:6e4}),a=new Wf(()=>void i(),this.testId,this.testName,t,o,n,this.orgId);return this.children.push(a),a}},rp=class r{constructor(e,t,n,o,i){this.orgId=e;this.runGroupId=t;this.metadata=n;this.client=o;this.diskStorage=i}children=[];finished=!1;get loggerBindings(){return{orgId:this.orgId,runGroupId:this.runGroupId,branch:this.metadata.gitBranchName}}static async start({orgId:e,runGroupId:t,outputDir:n,client:o,gitMetadata:i,labels:a}){let s={...i,id:t,trigger:dr.CLI,startedAt:new Date,status:"RUNNING",cliVersion:Rl,labels:a??[]},c=new Sl(n);return c.storeFile({name:"metadata.json",contents:JSON.stringify(s,null,2)}),new r(e,t,s,o,c)}async finish(e){if(this.finished)return;this.finished=!0;let{status:t}=e,n={...this.metadata,status:t,updatedAt:new Date,finishedAt:new Date};await Promise.all(this.children.map(o=>o.finish({logger:e.logger,status:n.status,finishedAt:n.finishedAt}))),this.diskStorage.storeFile({name:"metadata.json",contents:JSON.stringify(n,null,2)})}async startRun(e){let t=this.diskStorage.createRunArchive(e.runId),n={stepsSnapshot:e.originalSteps.steps,runGroupId:this.runGroupId,testId:e.testId,testName:e.testName,testDescription:e.testDescription,labels:e.testLabels,trigger:"CLI",status:"RUNNING",environmentName:e.environmentName,cliVersion:Rl,schemaVersion:e.schemaVersion,startedAt:new Date,attempts:0,quarantined:e.quarantined,quarantinedReason:e.quarantinedReason,executionType:"ANDROID"};t.storeFile({name:"metadata.json",contents:JSON.stringify(n,null,2)});let o=new jf(this.client,e.testId,e.testName,e.runId,n,t,this.orgId);return this.children.push(o),o}};async function AI(r,e,t){if(t)return{};try{return(await e.getQuarantinedTests()).quarantined.reduce((o,i)=>(o[i.testId]=i.quarantinedReason,o),{})}catch(n){return r.warn({err:n},"Failed to fetch quarantined tests, proceeding without them."),{}}}async function vn(){try{await z(Promise.all([UT(),He.flush()]),{milliseconds:5e3})}catch{}}async function RI(r){let{options:e,fixtures:t,inputs:n,metadata:o}=r,{project:i,apiClient:a,logger:s}=t,{orgId:c,runGroupId:l,gitMetadata:u}=o,{outputDir:d,parallel:m}=e;Qj(d)&&C.warn(`Output directory ${d} already exists, removing before test execution...`);let p=jT({items:n.testDefinitions,shardIndex:e.shardIndex??1,shardCount:e.shardCount??1,sortKey:W=>W.relativeFilePath}),g=new Set;n.testDefinitions.forEach(W=>{W.labels?.forEach(K=>g.add(K))});let h=s.child({orgId:c,runGroupId:l,branch:u.gitBranchName}),f=await rp.start({logger:h,orgId:c,runGroupId:l,outputDir:d,client:a,gitMetadata:u,labels:Array.from(g)}),b=[],T=new Date,w=new Set,x=async()=>Zj({runResults:b,startTime:T,ranTests:w,apiClient:a,uploadResults:e.uploadResults??!1,outputDir:d}),R=async W=>{C.warn(`${W} Stopping tests and printing latest results.`),await f.finish({logger:h,status:"CANCELLED"}),await x(),await vn(),process.exit(1)},O=async()=>{await R("SIGINT received.")};process.once("SIGINT",O);let v;if(e.timeoutMinutes!==void 0&&e.timeoutMinutes>0){let W=e.timeoutMinutes*60*1e3;v=setTimeout(()=>{R(`Timeout of ${e.timeoutMinutes} minute(s) reached.`)},W)}let M={};for(let W=0;W<p.length;W++){let K=Object.values(M);K.length===m&&await Promise.race(K.map(B=>B.promise));let ve=p[W],re=`test-${W}`;M[re]={done:!1,promise:(async({testDefinition:B})=>{w.add(re);let ce=B.relativeFilePath.includes("..")?B.fullFilePath:B.relativeFilePath;As({status:"START",testLogRef:ce,getRunningTestsCount:()=>w.size,getTotalTestsCount:()=>p.length});let fe=setInterval(()=>As({status:"RUN",testLogRef:ce,getRunningTestsCount:()=>w.size,getTotalTestsCount:()=>p.length}),5*60*1e3),Je=Jj(),Le=h.child({testId:B.id,runId:Je}),Lt=new Vu({logger:Le,reporter:new xd(a),runType:"mobile-test-run",runId:Je,testMetadata:B,suiteMetadata:void 0});try{let jt=await TI({metadata:{...o,runId:Je},fixtures:{...t,tracer:f,logger:Le,usageTracker:Lt},inputs:{...n,project:i,testDefinition:B,channel:n.channel??B.settings?.defaultChannel,tag:n.tag??B.settings?.defaultTag,logUpdate:(Ne,dt)=>As({status:Ne,testLogRef:ce,getRunningTestsCount:()=>w.size,getTotalTestsCount:()=>p.length,additionalText:dt})},options:e});As({status:jt.status,testLogRef:ce,getRunningTestsCount:()=>w.size,getTotalTestsCount:()=>p.length}),b.push(jt)}catch(jt){let Ne=`Encountered unexpected fatal error when running test '${B.name}': ${jt.message}
4420
4420
  ${jt.stack}`;C.error(Ne),Le.error({err:jt},`Encountered unexpected fatal error when running test ${B.name}`),await R("Fatal error occurred.")}finally{clearInterval(fe),M[re].done=!0,delete M[re]}await Lt.flush(s)})({testDefinition:ve})}}await Promise.allSettled(Object.values(M).map(W=>W.promise)),v&&clearTimeout(v);let H=b.some(W=>W.status==="FAILED"&&!W.quarantined)?"FAILED":"PASSED";return await f.finish({logger:h,status:H}),process.off("SIGINT",O),e.reporter&&e.reporterDir&&await vI({logger:h,callbacks:{createDebugDataReaderForRunAttempt:(W,K)=>new Wd(d,W,K)},format:e.reporter,params:{projectConfigPath:i.configFilePath,suiteName:i.config.name,startedAt:T,finishedAt:new Date,testsToSkip:[],quarantinedTestsToSkip:[],quarantinedTestReasons:{}},runs:b,folder:e.reporterDir}),x()}async function Zj({runResults:r,startTime:e,apiClient:t,uploadResults:n,outputDir:o}){let i=t.getAppUrl(),a=BT({results:r,startTime:e.getTime(),onFailed:s=>{},getDisplayLine:s=>{let c=`${zm}- ${s.filePath}`;return s.runId&&(c+=` ( link when uploaded: ${i}/runs/${s.runId} )`),c},entity:"mobile test"});return C.log(""),n?(C.success(`Test results have been saved to the folder ${o}. Uploading to Momentic Cloud...`),await Vd({client:t,consoleLogger:C,resultsPath:o})):C.success(`Test results have been saved to the folder ${o}. Upload them to Momentic Cloud by running 'npx momentic-mobile results upload ${o}'.`),a}async function $f(){mw(),VT("Chromium")||(xo?(await Ic("The Chromium browser is not installed but is required for automating webviews. Install it now?")||process.exit(1),await Oc({rawBrowsers:["chromium"],force:!1,all:!1})):(C.error("The Chromium browser is not installed but is required for automating webviews. Please install it using 'momentic-mobile install-browsers chromium'"),process.exit(1)))}QR({serviceName:"mobile-cli"});Vt.setApp("mobile-cli");var An=new e$;An.name("momentic-mobile").description("Momentic Mobile CLI").version(Rl);var wI=An.command("assets").description("Manage mobile testing assets");wI.command("upload").description("Upload an asset for mobile tests").argument("<file>","Path to the asset file to upload").addOption(Aa).addOption(Ra).addOption(kf).addOption(Ff).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i}=e,a=ei.resolve(r);Zo.existsSync(a)||(C.error(`File not found: ${a}`),process.exit(1));let s=new Xt({baseUrl:n,apiKey:t,logger:C});/\.apk$/i.test(a)||(C.error(`File is not an APK file: ${a}`),process.exit(1)),await _u({tag:o?.toLowerCase(),channel:i.toLowerCase(),filePath:a,apiClient:s,logger:C})});wI.command("download").description("Download an asset for mobile tests").addOption(Aa).addOption(Ra).addOption(Ff).addOption(lI).argument("[path]","Path to download the asset to (file or directory)").action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i}=e,a=new Xt({baseUrl:n,apiKey:t,logger:C}),{downloadUrl:s}=await a.getLimbarAssetDownloadUrl(i,o),c=r?ei.resolve(r):process.cwd(),l=`${i}-${o}.apk`;r?Zo.existsSync(c)&&Zo.statSync(c).isDirectory()&&(c=ei.join(c,l)):c=ei.join(c,l),C.info(`Downloading asset to ${c}...`);let u=await fetch(s);if(!u.ok)throw new Error(`Failed to download asset: ${u.statusText}`);if(!u.body)throw new Error("No response body");await o$(r$.fromWeb(u.body),Zo.createWriteStream(c)),C.success(`Asset downloaded to ${c}`)});An.command("app").addOption(Aa).addOption(Ra).addOption(Of).addOption(ep).addOption(Gf).addOption(Lf).addOption(Nf).addOption(Df).action(async r=>{let{apiKey:e,server:t,yes:n,disableCache:o,saveCache:i,regenerateCache:a}=r;jm({disableCache:o,saveCache:i,regenerateCache:a});let s=Hm(r.logLevel);Vt.setApp("mobile-desktop-server");let c=new Xt({baseUrl:t,apiKey:e,logger:Vt});await rf({client:c,skipPrompts:n}),C.debug("API key check complete");let l=i$(import.meta.url),u=ei.dirname(l),d=ei.resolve(u,"..","static");await $f(),C.debug({appiumHome:Ys},"Resolved resource paths");let m=await fa({configFilePath:r.config}),p=aI;await iI({momenticServerUrl:t,serverPort:p,apiKey:e,staticDir:d,initialProject:m,driverLogLevel:s,logger:Vt,regenerateCache:a??!1,noCache:o??!1,alwaysSaveCache:i??!1});let g=`http://localhost:${p}`;C.info(`Local app started on: ${g}`),await n$(g)});var CI=An.command("results").description("Merge and upload test results.");CI.command("merge").description("Merge test results files.").addOption(Uf).addArgument(new np("<resultsPath>","Path to a directory that contains on or more test results archives.").argRequired()).action(async(r,e)=>{let{outputDir:t}=e;t||(C.error("Output directory is required."),process.exit(1)),Zo.existsSync(r)||(C.warn("Results path does not exist, skipping merge."),process.exit(0)),Zo.existsSync(t)&&C.warn(`Output directory ${t} already exists, removing before merging...`),O_(Vt,t,r),await vn(),process.exit(0)});var a$=new np("<results>","Path to the results archive.").argRequired();CI.command("upload").description("Upload test results to Momentic cloud.").addOption(Aa).addOption(Ra).addArgument(a$).action(async(r,e)=>{let{apiKey:t,server:n}=e,o=Vt,i=new Xt({baseUrl:n,apiKey:t,logger:o});await Vd({consoleLogger:C,resultsPath:r,client:i}),await vn(),process.exit(0)});var s$=An.command("list").description("List mobile test paths");s$.addOption(ep).addOption(Pf).addOption(Bf).addOption(zf).addOption(new qf("--labels <labels...>","Only run tests with the specified label(s).")).addArgument(new np("[tests...]","One or more test file path or folders that exist on the local machine.").argOptional()).action(async(r,e)=>{let t=await fa({configFilePath:e.config,nameFilter:e.filter}),n=await er(t),o=await If({tests:r,momenticFiles:n,yes:!0,include:e.include,exclude:e.exclude,project:t,labels:e.labels,logger:new ys(40,{}),quarantinedTestReasons:{}});C.info(o.map(i=>i.relativeFilePath).join(`