momentic-mobile 0.20.1 → 0.20.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",Ts(e,...t))}error(e,...t){this._log("error",Ts(e,...t))}info(e,...t){this._log("info",Ts(e,...t))}log(e,...t){this._log("log",Ts(e,...t))}warn(e,...t){this._log("warn",Ts(e,...t))}getBuffer(){return this._buffer.length>0?this._buffer:void 0}};function NT(r){let e=globalThis.console,t=new _c;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 Bm=" ".repeat(6);import KD from"fetch-retry";import YD from"os";import DT,{multistream as XD}from"pino";import JD from"pino-pretty";import QD from"pino-std-serializers";var Di=new Map,ZD=!0,kT="Log throttle exceeded",e0=100,t0=5e3,r0=KD(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}}),zm=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??YD.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=ZD?DT(a):DT(a,XD([{stream:JD({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 r0(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:wo(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===kT)return!0;let t=Date.now();return t-this.lastWindowStart>t0&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,kT),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<e0?(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=QD.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:yE({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,Di.set("app",this),Di.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=bE[e]):(this.minLevelValue=Ss[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},ki=({app:r,hostname:e,disableConsoleLogs:t})=>(Di.has(r)||Di.set(r,new zm({bindings:{app:r},hostname:e,disableConsoleLogs:t})),Di.get(r));async function FT(){await Promise.all([...Di.values()].map(r=>r.flush()))}import{hostname as n0}from"os";var mr=ki({app:"cli",hostname:n0(),disableConsoleLogs:!0}).child({cliVersion:"0.20.1"});function Hm(r){if(!r)return;r=r.toLowerCase();let e=Tc.safeParse(r);if(e.success)return w.setMinLevel(e.data),e.data}function UT({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 NT(()=>{if(c.forEach(u=>{w.log(""),o(u)}),c.length){w.log("");let u=c.length===1?"":"s";w.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{w.dimmed(n(d))})}if(l.length){w.log("");let u=l.length===1?"":"s";w.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{w.dimmed(n(d))})}if(a.length){w.log("");let u=a.length===1?"":"s";w.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{w.dimmed(n(d))})}if(s.length){w.log("");let u=s.length===1?"":"s";w.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{w.dimmed(n(d))})}if(i.length){w.log("");let u=i.length===1?"":"s";w.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{w.dimmed(n(d))})}w.log(""),w.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 vs=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=Fi.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=Fi.bgGreen.white("PASS"),a=3):r.includes("START")?(i=Fi.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=Fi.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=Fi.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=Fi.bgMagenta.white("RUNNING"),a=0):(w.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),o0||(i=`${i}`),w.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};import i0 from"fs";import{tmpdir as a0}from"os";import s0 from"path";import{registry as As}from"playwright-core/lib/server";import BT from"proper-lockfile";var zT=s0.join(a0(),"momenticBrowserInstallation");var Gm=["chrome","chromium","chrome-for-testing","ffmpeg"],l0={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 GT(r){if(r==="Org Default")return!1;let e=HT[l0[r]??""]??"",t=As.findExecutable(e);return!t||t.installType==="none"?!1:Vm(t)}function Vm(r){let e=r.executablePath();return i0.existsSync(e)}function c0(r,e){let t=HT[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=As.findExecutable(t);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${r}`);if(!(!e&&Vm(n)))return n}async function u0({browser:r,force:e}){let t=c0(r,e);if(!t){w.info(`Browser '${r}' is already installed, skipping...`);return}w.info(`Installing browser '${r}'...`);try{await As.installDeps([t],!1),await As.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){w.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=As.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Vm(o);)w.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function Ic({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?Gm:Array.from(new Set(r));try{await BT.lock(zT,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){w.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 u0({browser:i,force:e})}catch(a){o=a,w.error(`Failed to install the ${i} browser: ${a}`)}}finally{await BT.unlock(zT,{realpath:!1})}if(o)throw o}import{createServer as d0}from"http";async function Pc(r,e,t=30){for(let n=0;n<t;n+=1){let o=r+n;if(await Oc(o))return o}w.error(`Could not find an available port for ${e} starting from ${r} after ${t} attempts`),process.exit(1)}async function Oc(r){return new Promise((e,t)=>{let n=d0();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(w.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 zne from"blocked-at";import Gne from"why-is-node-running";function VT(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 p0(r,e,t,n){if(t>r.length&&(w.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 WT(r){let{items:e,shardIndex:t,shardCount:n,sortKey:o}=r;return n>1?p0(e,t,n,o):e}function Wm({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 lB from"fs";import ooe,{multistream as aoe}from"pino";import loe from"pino-pretty";var doe=5*1024,m0="...[truncated]",poe=Buffer.byteLength(m0,"utf8");import{PostHog as voe}from"posthog-node";var zn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var jT=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 H(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(jT(m));l=()=>c(jT(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 zn(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 Poe}from"posthog-node";import{execSync as g0}from"child_process";import Ui from"os";import h0 from"v8";var $T,jr,KT=Ui.platform(),f0=Ui.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),{}),qT=r=>{try{let e={},t=!1,n=S0(),o=y0(),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=h0.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"),Co&&w.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):r.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}};function YT(r){if(!Vr)return qT(r),{interval:setInterval(()=>qT(r),2e4),cpuMetadata:f0,platform:KT}}function S0(){let r=Ui.totalmem(),e=KT==="darwin"?b0():(()=>{let n=Ui.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),t=e.availableMemory/r;return{totalMemory:r,freeMemory:e.availableMemory,freePercentage:t}}function y0(){let r=Ui.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 $T={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,$T}function b0(){try{let r=g0("/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=Ui.freemem();return{availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}var Lc=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function E0(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 Nc(r,e){let t=E0(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var vv="=",Uc=";",rg=",";var Av=8192;var Gi={};_I(Gi,{getKeyPairs:()=>Z0,parseKeyPairsIntoRecord:()=>ek,parsePairKeyValue:()=>Rv,serializeKeyPairs:()=>Q0});ke();var J0=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 Q0(r){return r.reduce(function(e,t){var n=""+e+(e!==""?rg:"")+t;return n.length>Av?e:n},"")}function Z0(r){return r.getAllEntries().map(function(e){var t=J0(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Uc+o.metadata.toString()),i})}function Rv(r){var e=r.split(Uc);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(vv);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=$m(e.join(Uc))),{key:o,value:i,metadata:a}}}}}function ek(r){return typeof r!="string"||r.length===0?{}:r.split(rg).map(function(e){return Rv(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 Bc;(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"})(Bc||(Bc={}));var tk=",",rk=["OTEL_SDK_DISABLED"];function nk(r){return rk.indexOf(r)>-1}var ok=["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 ik(r){return ok.indexOf(r)>-1}var ak=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function sk(r){return ak.indexOf(r)>-1}var ng=1/0,og=128,lk=128,ck=128,ig={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:He.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_ATTRIBUTE_COUNT_LIMIT:og,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:og,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:og,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:lk,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:ck,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Bc.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 uk(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function dk(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 pk(r,e,t,n){n===void 0&&(n=tk);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var mk={ALL:He.ALL,VERBOSE:He.VERBOSE,DEBUG:He.DEBUG,INFO:He.INFO,WARN:He.WARN,ERROR:He.ERROR,NONE:He.NONE};function gk(r,e,t){var n=t[r];if(typeof n=="string"){var o=mk[n.toUpperCase()];o!=null&&(e[r]=o)}}function wv(r){var e={};for(var t in ig){var n=t;switch(n){case"OTEL_LOG_LEVEL":gk(n,e,r);break;default:if(nk(n))uk(n,e,r);else if(ik(n))dk(n,e,r);else if(sk(n))pk(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function Rt(){var r=wv(process.env);return Object.assign({},ig,r)}function Cv(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function zc(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=Cv(r.charCodeAt(n)),i=Cv(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var xv="1.25.1";var hk="deployment.environment";var fk="process.runtime.name";var Sk="service.name";var yk="service.instance.id";var bk="telemetry.sdk.name",Ek="telemetry.sdk.language",Tk="telemetry.sdk.version";var Mv=hk;var _v=fk;var Hc=Sk;var Iv=yk;var Is=bk,Ps=Ek,Os=Tk;var vk="nodejs";var Pv=vk;var Vi,Gc=(Vi={},Vi[Is]="opentelemetry",Vi[_v]="node",Vi[Ps]=Pv,Vi[Os]=xv,Vi);var Ak=9,Rk=6,wk=Math.pow(10,Rk),Ck=Math.pow(10,Ak);function Ov(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*wk);return[t,n]}function Lv(r){return r[0]*Ck+r[1]}function Ls(r){return r[0]*1e6+r[1]/1e3}var Mo;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Mo||(Mo={}));var Nv=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 xk=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},Mk=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))},Dv=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new Nv}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,Mk([this._that],xk(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 _k=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 tse=function(r){_k(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function kv(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 Fv=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 Ik=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 Pk(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 ag=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=Pk(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=kv(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 sg=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=hr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ag(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 ag(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 ag(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=Ik(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 lg=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},cg=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))},ug=function(){function r(e,t,n,o){e===void 0&&(e=new Ok),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 Ok=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,cg([n,this._counts.length-t],lg(this._counts.slice(t)),!1)),o.splice.apply(o,cg([0,t],lg(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(cg([],lg(this._counts),!1))},r}();var Uv=52,Lk=2146435072,Nk=1048575,dg=1023,Vc=-dg+1,Wc=dg,Ns=Math.pow(2,-1022);function jc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&Lk)>>20;return n-dg}function $c(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&Nk)*Math.pow(2,32);return o+n}function Ds(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function zv(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var Dk=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){Dk(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var Gv=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Ns)return this._minNormalLowerBoundaryIndex();var t=jc(e),n=this._rightShift($c(e)-1,Uv);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 Ds(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=Vc>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return Wc>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var Vv=function(){function r(e){this._scale=e,this._scaleFactor=Ds(Math.LOG2E,e),this._inverseFactor=Ds(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Ns)return this._minNormalLowerBoundaryIndex()-1;if($c(e)===0){var t=jc(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 Ns;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 Vc<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(Wc+1<<this._scale)-1},r}();var Wv=-10,jv=20,kk=Array.from({length:31},function(r,e){return e>10?new Vv(e-10):new Gv(e-10)});function pg(r){if(r>jv||r<Wv)throw new Hn("expected scale >= "+Wv+" && <= "+jv+", got: "+r);return kk[r+10]}var Fk=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},qc=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}(),Uk=20,Bk=160,mg=2,zk=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=Bk),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 ug),u===void 0&&(u=new ug),d===void 0&&(d=pg(Uk)),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<mg&&(W.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+mg),this._maxSize=mg)}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=zv(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=pg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=qc.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=qc.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 qc(0,-1);var o=t-n;return new qc(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 $v=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=hr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new zk(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=Fk(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 Hk=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},gg=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=Ov(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var qv=function(){function r(){this.kind=hr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new gg(e)},r.prototype.merge=function(e,t){var n=Ls(t.sampleTime)>=Ls(e.sampleTime)?t:e;return new gg(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Ls(t.sampleTime)>=Ls(e.sampleTime)?t:e;return new gg(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=Hk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var Gk=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},ks=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 hg=function(){function r(e){this.monotonic=e,this.kind=hr.SUM}return r.prototype.createAccumulation=function(e){return new ks(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new ks(t.startTime,this.monotonic,o,t.reset):new ks(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 ks(t.startTime,this.monotonic,o,!0):new ks(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=Gk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var _o=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 tA},r.Sum=function(){return rA},r.LastValue=function(){return nA},r.Histogram=function(){return oA},r.ExponentialHistogram=function(){return Vk},r.Default=function(){return Wk},r}();var Kv=function(r){_o(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 Fv,e}(qr);var Yv=function(r){_o(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 hg(!0),e.NON_MONOTONIC_INSTANCE=new hg(!1),e}(qr);var Xv=function(r){_o(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 qv,e}(qr);var Jv=function(r){_o(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 sg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(qr);var Qv=function(r){_o(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 sg(this._boundaries,this._recordMinMax)},e}(qr);var Zv=function(r){_o(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 $v(this._maxSize,this._recordMinMax)},e}(qr);var eA=function(r){_o(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 rA;case me.GAUGE:case me.OBSERVABLE_GAUGE:return nA;case me.HISTOGRAM:return t.advice.explicitBucketBoundaries?new Qv(t.advice.explicitBucketBoundaries):oA}return W.warn("Unable to recognize instrument type: "+t.type),tA},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(qr);var tA=new Kv,rA=new Yv,nA=new Xv,oA=new Jv,Vk=new Zv,Wk=new eA;ke();function Kc(){return"unknown_service:"+process.argv0}var Gn=function(){return Gn=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},Gn.apply(this,arguments)},jk=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())})},$k=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}}},qk=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},fg=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 W.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[Hc]=Kc(),e[Ps]=Gc[Ps],e[Is]=Gc[Is],e[Os]=Gc[Os],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&W.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 jk(this,void 0,void 0,function(){return $k(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=Gn(Gn({},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=qk(a,2),l=c[0],u=c[1];return Gn(Gn(Gn(Gn({},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 Io;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(Io||(Io={}));ke();var Kk=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())})},Yk=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}}},Sg=function(){return gr.CUMULATIVE},iA=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}},aA=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 Xk(){var r=Rt(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?Sg:e==="delta"?iA:e==="lowmemory"?aA:(W.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."),Sg)}function Jk(r){return r!=null?r===Io.DELTA?iA:r===Io.LOWMEMORY?aA:Sg:Xk()}function Qk(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return qr.Default()}}var sA=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=Qk(t),this._aggregationTemporalitySelector=Jk(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return Kk(this,void 0,void 0,function(){return Yk(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 Zk=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},lA=1e4,cA=5,uA=1e3,dA=5e3,pA=1.5;function Fs(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=Zk(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):W.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function yg(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function bg(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return W.warn("Could not parse export URL: '"+r+"'"),r}}function Eg(r){return typeof r=="number"?r<=0?Tg(r,lA):r:eF()}function eF(){var r,e=Number((r=Rt().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:Rt().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?Tg(e,lA):e}function Tg(r,e){return W.warn("Timeout must be greater than 0",r),e}function mA(r){var e=[429,502,503,504];return e.includes(r)}function gA(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 hA=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 Dv(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=Eg(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:Mo.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:Mo.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:Mo.SUCCESS})}).catch(function(n){t({code:Mo.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{W.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 W.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();ke();import*as vg from"url";import*as Xc from"http";import*as Jc from"https";import*as fA from"zlib";import{Readable as rF}from"stream";var Vn;(function(r){r.NONE="none",r.GZIP="gzip"})(Vn||(Vn={}));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)}}(),Wi=function(r){tF(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 Yc=function(){return Yc=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},Yc.apply(this,arguments)};function Ag(r,e,t,n,o){var i=r.timeoutMillis,a=new vg.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 Wi("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:Yc({"Content-Type":t},r.headers),agent:r.agent},p=a.protocol==="http:"?Xc.request:Jc.request,g=function(h,f){switch(h===void 0&&(h=cA),f===void 0&&(f=uA),l=p(m,function(T){var C="";T.on("data",function(x){return C+=x}),T.on("aborted",function(){if(u){var x=new Wi("Request Timeout");o(x)}}),T.on("end",function(){if(u===!1)if(T.statusCode&&T.statusCode<299)W.debug("statusCode: "+T.statusCode,C),n(),clearTimeout(d),clearTimeout(c);else if(T.statusCode&&mA(T.statusCode)&&h>0){var x=void 0;f=pA*f,T.headers["retry-after"]?x=gA(T.headers["retry-after"]):x=Math.round(Math.random()*(dA-f)+f),c=setTimeout(function(){g(h-1,f)},x)}else{var R=new Wi(T.statusMessage,T.statusCode,C);o(R),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(T){if(u){var C=new Wi("Request Timeout",T.code);o(C)}else o(T);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var T=new Wi("Request Timeout");o(T)}clearTimeout(d),clearTimeout(c)}),r.compression){case Vn.GZIP:{l.setHeader("Content-Encoding","gzip");var b=nF(e);b.on("error",o).pipe(fA.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};g()}function nF(r){var e=new rF;return e.push(r),e.push(null),e}function Rg(r){if(r.httpAgentOptions&&r.keepAlive===!1){W.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new vg.URL(r.url),t=e.protocol==="http:"?Xc.Agent:Jc.Agent;return new t(Yc({keepAlive:!0},r.httpAgentOptions))}catch(n){W.error("collector exporter failed to create http agent. err: "+n.message);return}}function wg(r){if(r)return r;var e=Rt().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||Rt().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Vn.GZIP?Vn.GZIP:Vn.NONE}ke();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)}}(),Qc=function(r){oF(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&&W.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,Fs(t.headers),Gi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=Rg(t),i.compression=wg(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){W.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;Ag(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}(hA);function yA(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function iF(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function bA(r){var e=yA(r);return iF(e)}function aF(r){var e=yA(r);return e.toString()}var sF=typeof BigInt<"u"?aF:Lv;function SA(r){return r}function EA(r){if(r!==void 0)return zc(r)}var lF={encodeHrTime:bA,encodeSpanContext:zc,encodeOptionalSpanContext:EA};function TA(r){var e,t;if(r===void 0)return lF;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?bA:sF,encodeSpanContext:o?SA:zc,encodeOptionalSpanContext:o?SA:EA}}var cF=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 vA(r){return{name:r.name,version:r.version}}function ji(r){return Object.keys(r).map(function(e){return AA(e,r[e])})}function AA(r,e){return{key:r,value:RA(e)}}function RA(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(RA)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=cF(t,2),o=n[0],i=n[1];return AA(o,i)})}}:{}}function wA(r){return{attributes:ji(r.attributes),droppedAttributesCount:0}}ke();function xA(r,e){var t=TA(e);return{resource:wA(r.resource),schemaUrl:void 0,scopeMetrics:uF(r.scopeMetrics,t)}}function uF(r,e){return Array.from(r.map(function(t){return{scope:vA(t.scope),metrics:t.metrics.map(function(n){return dF(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function dF(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=hF(r.aggregationTemporality);switch(r.dataPointType){case Ot.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:CA(r,e)};break;case Ot.GAUGE:t.gauge={dataPoints:CA(r,e)};break;case Ot.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:mF(r,e)};break;case Ot.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:gF(r,e)};break}return t}function pF(r,e,t){var n={attributes:ji(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case Jt.INT:n.asInt=r.value;break;case Jt.DOUBLE:n.asDouble=r.value;break}return n}function CA(r,e){return r.dataPoints.map(function(t){return pF(t,r.descriptor.valueType,e)})}function mF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ji(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 gF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ji(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 hF(r){switch(r){case gr.DELTA:return 1;case gr.CUMULATIVE:return 2}}function MA(r,e){return{resourceMetrics:r.map(function(t){return xA(t,e)})}}var Cg={serializeRequest:function(r){var e=MA(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 _A="0.52.1";var IA=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)}}(),$i=function(){return $i=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},$i.apply(this,arguments)},PA="v1/metrics",fF="http://localhost:4318/"+PA,SF={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+_A},yF=function(r){IA(e,r);function e(t){var n=r.call(this,t,Cg,"application/json")||this;return n.headers=$i($i($i($i({},n.headers),SF),Gi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),Fs(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?bg(Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):Rt().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?yg(Rt().OTEL_EXPORTER_OTLP_ENDPOINT,PA):fF},e}(Qc),OA=function(r){IA(e,r);function e(t){return r.call(this,new yF(t),t)||this}return e}(sA);var qi;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(qi||(qi={}));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 bF=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)}}(),LA=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())})},NA=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}}},EF=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},TF=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))},vF=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 DA(r){return r!=null}function Zc(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function kA(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var xg=function(r){bF(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function Wn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new xg("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function FA(r){return LA(this,void 0,void 0,function(){var e=this;return NA(this,function(t){return[2,Promise.all(r.map(function(n){return LA(e,void 0,void 0,function(){var o,i;return NA(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 UA(r){return r.status==="rejected"}function Mg(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,TF([],EF(e(n)),!1))}),t}function BA(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=vF(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 zA(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 _g=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 RF(r)||W.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:Jt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function GA(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 VA(r,e){return HA(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var AF=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function RF(r){return r.match(AF)!=null}var wF=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 CF(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 eu=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=CF(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=zA(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 tu=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=fr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new eu(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 eu(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 eu(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=wF(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 Ig=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},Pg=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))},Og=function(){function r(e,t,n,o){e===void 0&&(e=new xF),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 xF=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,Pg([n,this._counts.length-t],Ig(this._counts.slice(t)),!1)),o.splice.apply(o,Pg([0,t],Ig(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(Pg([],Ig(this._counts),!1))},r}();var WA=52,MF=2146435072,_F=1048575,Lg=1023,ru=-Lg+1,nu=Lg,Us=Math.pow(2,-1022);function ou(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&MF)>>20;return n-Lg}function iu(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&_F)*Math.pow(2,32);return o+n}function Bs(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function $A(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var IF=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)}}(),jn=function(r){IF(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var KA=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Us)return this._minNormalLowerBoundaryIndex();var t=ou(e),n=this._rightShift(iu(e)-1,WA);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new jn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new jn("overflow: "+e+" is > maximum lower boundary: "+n);return Bs(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=ru>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return nu>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var YA=function(){function r(e){this._scale=e,this._scaleFactor=Bs(Math.LOG2E,e),this._inverseFactor=Bs(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Us)return this._minNormalLowerBoundaryIndex()-1;if(iu(e)===0){var t=ou(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 jn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Us;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new jn("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 ru<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(nu+1<<this._scale)-1},r}();var XA=-10,JA=20,PF=Array.from({length:31},function(r,e){return e>10?new YA(e-10):new KA(e-10)});function Ng(r){if(r>JA||r<XA)throw new jn("expected scale >= "+XA+" && <= "+JA+", got: "+r);return PF[r+10]}var OF=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(){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}(),LF=20,NF=160,Dg=2,QA=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=NF),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 Og),u===void 0&&(u=new Og),d===void 0&&(d=Ng(LF)),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<Dg&&(W.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+Dg),this._maxSize=Dg)}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=$A(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=Ng(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=au.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=au.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 au(0,-1);var o=t-n;return new au(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 kg=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=fr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new QA(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=OF(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 DF=qm("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function ZA(r){return r.setValue(DF,!0)}ke();function eR(){return function(r){W.error(kF(r))}}function kF(r){return typeof r=="string"?r:JSON.stringify(FF(r))}function FF(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 UF=eR();function su(r){try{UF(r)}catch{}}var tR="1.30.1";var BF="process.runtime.name";var zF="service.name";var HF="telemetry.sdk.name",GF="telemetry.sdk.language",VF="telemetry.sdk.version";var rR=BF;var nR=zF;var zs=HF,Hs=GF,Gs=VF;var WF="nodejs";var oR=WF;var Ki,Po=(Ki={},Ki[zs]="opentelemetry",Ki[rR]="node",Ki[Hs]=oR,Ki[Gs]=tR,Ki);function Vs(r){r.unref()}var JF=9,QF=6,ZF=Math.pow(10,QF),iue=Math.pow(10,JF);function Oo(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*ZF);return[t,n]}function Yi(r){return r[0]*1e6+r[1]/1e3}var Ws;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Ws||(Ws={}));ke();function iR(r,e){return new Promise(function(t){Hi.with(ZA(Hi.active()),function(){r.export(e,function(n){t(n)})})})}var aR={_export:iR};var eU=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,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=Oo(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Fg=function(){function r(){this.kind=fr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new lu(e)},r.prototype.merge=function(e,t){var n=Yi(t.sampleTime)>=Yi(e.sampleTime)?t:e;return new lu(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Yi(t.sampleTime)>=Yi(e.sampleTime)?t:e;return new lu(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=eU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var tU=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},Xi=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 cu=function(){function r(e){this.monotonic=e,this.kind=fr.SUM}return r.prototype.createAccumulation=function(e){return new Xi(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Xi(t.startTime,this.monotonic,o,t.reset):new Xi(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 Xi(t.startTime,this.monotonic,o,!0):new Xi(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=tU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var Lo=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 mR},r.Sum=function(){return gR},r.LastValue=function(){return hR},r.Histogram=function(){return fR},r.ExponentialHistogram=function(){return rU},r.Default=function(){return nU},r}();var sR=function(r){Lo(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 _g,e}(Sr);var lR=function(r){Lo(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 cu(!0),e.NON_MONOTONIC_INSTANCE=new cu(!1),e}(Sr);var cR=function(r){Lo(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 Fg,e}(Sr);var uR=function(r){Lo(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 tu([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Sr);var js=function(r){Lo(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 tu(this._boundaries,this._recordMinMax)},e}(Sr);var dR=function(r){Lo(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 kg(this._maxSize,this._recordMinMax)},e}(Sr);var pR=function(r){Lo(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 gR;case Te.GAUGE:case Te.OBSERVABLE_GAUGE:return hR;case Te.HISTOGRAM:return t.advice.explicitBucketBoundaries?new js(t.advice.explicitBucketBoundaries):fR}return W.warn("Unable to recognize instrument type: "+t.type),mR},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Sr);var mR=new sR,gR=new lR,hR=new cR,fR=new uR,rU=new dR,nU=new pR;var SR=function(r){return Sr.Default()},yR=function(r){return qi.CUMULATIVE};var Ug=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())})},Bg=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}}},bR=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},oU=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))},ER=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:SR,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:yR,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 Ug(this,void 0,void 0,function(){var t,n,o,i,a,s;return Bg(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(oU([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],bR(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=bR.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(Mg(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(Mg(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Ug(this,void 0,void 0,function(){return Bg(this,function(t){switch(t.label){case 0:return this._shutdown?(W.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,Wn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Ug(this,void 0,void 0,function(){return Bg(this,function(t){switch(t.label){case 0:return this._shutdown?(W.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,Wn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();ke();var iU=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)}}(),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}}},aU=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},sU=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))},zg=function(r){iU(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 uu(this,void 0,void 0,function(){var t;return du(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,Wn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof xg?(W.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(su(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return uu(this,void 0,void 0,function(){var o,i,a,s,c,l;return du(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=W).error.apply(l,sU(["PeriodicExportingMetricReader: metrics collection errors"],aU(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(),W.debug("Error while resolving async portion of resource: ",s),su(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,aR._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==Ws.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),Vs(this._interval)},e.prototype.onForceFlush=function(){return uu(this,void 0,void 0,function(){return du(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 uu(this,void 0,void 0,function(){return du(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}(ER);ke();ke();function pu(){return"unknown_service:"+process.argv0}var $n=function(){return $n=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},$n.apply(this,arguments)},lU=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())})},cU=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}}},uU=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},mu=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 W.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[nR]=pu(),e[Hs]=Po[Hs],e[zs]=Po[zs],e[Gs]=Po[Gs],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&W.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 lU(this,void 0,void 0,function(){return cU(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=$n($n({},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=uU(a,2),l=c[0],u=c[1];return $n($n($n($n({},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 TR=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 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)}}(),gu=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"){W.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===Jt.INT&&!Number.isInteger(e)&&(W.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,Oo(Date.now()))},r}();var vR=function(r){No(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}(gu);var AR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){W.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(gu);var RR=function(r){No(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}(gu);var wR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){W.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(gu);var hu=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 CR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);var xR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);var MR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);function $s(r){return r instanceof hu}var _R=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 RR(o,n)},r.prototype.createHistogram=function(e,t){var n=Yr(e,Te.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new wR(o,n)},r.prototype.createCounter=function(e,t){var n=Yr(e,Te.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new AR(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Yr(e,Te.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new vR(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Yr(e,Te.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new xR(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 CR(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 MR(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 fu=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 dU=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)}}(),IR=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(){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 IR(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 IR(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){dU(e,r);function e(){return r.call(this,Zc)||this}return e}(pU);var mU=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},Su=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=Zc(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=mU(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.")},PR=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},yu=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===qi.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=gU(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=PR(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=PR(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 gU(r){return Array.from(r.entries())}var hU=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(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},OR=function(r){hU(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 Su(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new yu(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=fU(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}(fu);ke();function Gg(r,e){var t="";return r.unit!==e.unit&&(t+=" - Unit '"+r.unit+"' does not match '"+e.unit+`'
27
+ `),globalThis.console=e}}var Bm=" ".repeat(6);import KD from"fetch-retry";import YD from"os";import DT,{multistream as XD}from"pino";import JD from"pino-pretty";import QD from"pino-std-serializers";var Di=new Map,ZD=!0,kT="Log throttle exceeded",e0=100,t0=5e3,r0=KD(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}}),zm=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??YD.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=ZD?DT(a):DT(a,XD([{stream:JD({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 r0(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:wo(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===kT)return!0;let t=Date.now();return t-this.lastWindowStart>t0&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,kT),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<e0?(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=QD.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:yE({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,Di.set("app",this),Di.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=bE[e]):(this.minLevelValue=Ss[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},ki=({app:r,hostname:e,disableConsoleLogs:t})=>(Di.has(r)||Di.set(r,new zm({bindings:{app:r},hostname:e,disableConsoleLogs:t})),Di.get(r));async function FT(){await Promise.all([...Di.values()].map(r=>r.flush()))}import{hostname as n0}from"os";var mr=ki({app:"cli",hostname:n0(),disableConsoleLogs:!0}).child({cliVersion:"0.20.2"});function Hm(r){if(!r)return;r=r.toLowerCase();let e=Tc.safeParse(r);if(e.success)return w.setMinLevel(e.data),e.data}function UT({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 NT(()=>{if(c.forEach(u=>{w.log(""),o(u)}),c.length){w.log("");let u=c.length===1?"":"s";w.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{w.dimmed(n(d))})}if(l.length){w.log("");let u=l.length===1?"":"s";w.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{w.dimmed(n(d))})}if(a.length){w.log("");let u=a.length===1?"":"s";w.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{w.dimmed(n(d))})}if(s.length){w.log("");let u=s.length===1?"":"s";w.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{w.dimmed(n(d))})}if(i.length){w.log("");let u=i.length===1?"":"s";w.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{w.dimmed(n(d))})}w.log(""),w.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 vs=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=Fi.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=Fi.bgGreen.white("PASS"),a=3):r.includes("START")?(i=Fi.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=Fi.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=Fi.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=Fi.bgMagenta.white("RUNNING"),a=0):(w.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),o0||(i=`${i}`),w.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};import i0 from"fs";import{tmpdir as a0}from"os";import s0 from"path";import{registry as As}from"playwright-core/lib/server";import BT from"proper-lockfile";var zT=s0.join(a0(),"momenticBrowserInstallation");var Gm=["chrome","chromium","chrome-for-testing","ffmpeg"],l0={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 GT(r){if(r==="Org Default")return!1;let e=HT[l0[r]??""]??"",t=As.findExecutable(e);return!t||t.installType==="none"?!1:Vm(t)}function Vm(r){let e=r.executablePath();return i0.existsSync(e)}function c0(r,e){let t=HT[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=As.findExecutable(t);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${r}`);if(!(!e&&Vm(n)))return n}async function u0({browser:r,force:e}){let t=c0(r,e);if(!t){w.info(`Browser '${r}' is already installed, skipping...`);return}w.info(`Installing browser '${r}'...`);try{await As.installDeps([t],!1),await As.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){w.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=As.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Vm(o);)w.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function Ic({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?Gm:Array.from(new Set(r));try{await BT.lock(zT,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){w.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 u0({browser:i,force:e})}catch(a){o=a,w.error(`Failed to install the ${i} browser: ${a}`)}}finally{await BT.unlock(zT,{realpath:!1})}if(o)throw o}import{createServer as d0}from"http";async function Pc(r,e,t=30){for(let n=0;n<t;n+=1){let o=r+n;if(await Oc(o))return o}w.error(`Could not find an available port for ${e} starting from ${r} after ${t} attempts`),process.exit(1)}async function Oc(r){return new Promise((e,t)=>{let n=d0();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(w.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 zne from"blocked-at";import Gne from"why-is-node-running";function VT(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 p0(r,e,t,n){if(t>r.length&&(w.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 WT(r){let{items:e,shardIndex:t,shardCount:n,sortKey:o}=r;return n>1?p0(e,t,n,o):e}function Wm({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 lB from"fs";import ooe,{multistream as aoe}from"pino";import loe from"pino-pretty";var doe=5*1024,m0="...[truncated]",poe=Buffer.byteLength(m0,"utf8");import{PostHog as voe}from"posthog-node";var zn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var jT=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 H(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(jT(m));l=()=>c(jT(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 zn(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 Poe}from"posthog-node";import{execSync as g0}from"child_process";import Ui from"os";import h0 from"v8";var $T,jr,KT=Ui.platform(),f0=Ui.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),{}),qT=r=>{try{let e={},t=!1,n=S0(),o=y0(),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=h0.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"),Co&&w.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):r.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}};function YT(r){if(!Vr)return qT(r),{interval:setInterval(()=>qT(r),2e4),cpuMetadata:f0,platform:KT}}function S0(){let r=Ui.totalmem(),e=KT==="darwin"?b0():(()=>{let n=Ui.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),t=e.availableMemory/r;return{totalMemory:r,freeMemory:e.availableMemory,freePercentage:t}}function y0(){let r=Ui.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 $T={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,$T}function b0(){try{let r=g0("/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=Ui.freemem();return{availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}var Lc=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function E0(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 Nc(r,e){let t=E0(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var vv="=",Uc=";",rg=",";var Av=8192;var Gi={};_I(Gi,{getKeyPairs:()=>Z0,parseKeyPairsIntoRecord:()=>ek,parsePairKeyValue:()=>Rv,serializeKeyPairs:()=>Q0});ke();var J0=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 Q0(r){return r.reduce(function(e,t){var n=""+e+(e!==""?rg:"")+t;return n.length>Av?e:n},"")}function Z0(r){return r.getAllEntries().map(function(e){var t=J0(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Uc+o.metadata.toString()),i})}function Rv(r){var e=r.split(Uc);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(vv);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=$m(e.join(Uc))),{key:o,value:i,metadata:a}}}}}function ek(r){return typeof r!="string"||r.length===0?{}:r.split(rg).map(function(e){return Rv(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 Bc;(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"})(Bc||(Bc={}));var tk=",",rk=["OTEL_SDK_DISABLED"];function nk(r){return rk.indexOf(r)>-1}var ok=["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 ik(r){return ok.indexOf(r)>-1}var ak=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function sk(r){return ak.indexOf(r)>-1}var ng=1/0,og=128,lk=128,ck=128,ig={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:He.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_ATTRIBUTE_COUNT_LIMIT:og,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:og,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:ng,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:og,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:lk,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:ck,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Bc.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 uk(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function dk(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 pk(r,e,t,n){n===void 0&&(n=tk);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var mk={ALL:He.ALL,VERBOSE:He.VERBOSE,DEBUG:He.DEBUG,INFO:He.INFO,WARN:He.WARN,ERROR:He.ERROR,NONE:He.NONE};function gk(r,e,t){var n=t[r];if(typeof n=="string"){var o=mk[n.toUpperCase()];o!=null&&(e[r]=o)}}function wv(r){var e={};for(var t in ig){var n=t;switch(n){case"OTEL_LOG_LEVEL":gk(n,e,r);break;default:if(nk(n))uk(n,e,r);else if(ik(n))dk(n,e,r);else if(sk(n))pk(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function Rt(){var r=wv(process.env);return Object.assign({},ig,r)}function Cv(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function zc(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=Cv(r.charCodeAt(n)),i=Cv(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var xv="1.25.1";var hk="deployment.environment";var fk="process.runtime.name";var Sk="service.name";var yk="service.instance.id";var bk="telemetry.sdk.name",Ek="telemetry.sdk.language",Tk="telemetry.sdk.version";var Mv=hk;var _v=fk;var Hc=Sk;var Iv=yk;var Is=bk,Ps=Ek,Os=Tk;var vk="nodejs";var Pv=vk;var Vi,Gc=(Vi={},Vi[Is]="opentelemetry",Vi[_v]="node",Vi[Ps]=Pv,Vi[Os]=xv,Vi);var Ak=9,Rk=6,wk=Math.pow(10,Rk),Ck=Math.pow(10,Ak);function Ov(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*wk);return[t,n]}function Lv(r){return r[0]*Ck+r[1]}function Ls(r){return r[0]*1e6+r[1]/1e3}var Mo;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Mo||(Mo={}));var Nv=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 xk=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},Mk=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))},Dv=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new Nv}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,Mk([this._that],xk(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 _k=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 tse=function(r){_k(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function kv(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 Fv=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 Ik=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 Pk(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 ag=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=Pk(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=kv(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 sg=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=hr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new ag(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 ag(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 ag(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=Ik(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 lg=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},cg=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))},ug=function(){function r(e,t,n,o){e===void 0&&(e=new Ok),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 Ok=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,cg([n,this._counts.length-t],lg(this._counts.slice(t)),!1)),o.splice.apply(o,cg([0,t],lg(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(cg([],lg(this._counts),!1))},r}();var Uv=52,Lk=2146435072,Nk=1048575,dg=1023,Vc=-dg+1,Wc=dg,Ns=Math.pow(2,-1022);function jc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&Lk)>>20;return n-dg}function $c(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&Nk)*Math.pow(2,32);return o+n}function Ds(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function zv(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var Dk=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){Dk(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var Gv=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Ns)return this._minNormalLowerBoundaryIndex();var t=jc(e),n=this._rightShift($c(e)-1,Uv);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 Ds(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=Vc>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return Wc>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var Vv=function(){function r(e){this._scale=e,this._scaleFactor=Ds(Math.LOG2E,e),this._inverseFactor=Ds(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Ns)return this._minNormalLowerBoundaryIndex()-1;if($c(e)===0){var t=jc(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 Ns;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 Vc<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(Wc+1<<this._scale)-1},r}();var Wv=-10,jv=20,kk=Array.from({length:31},function(r,e){return e>10?new Vv(e-10):new Gv(e-10)});function pg(r){if(r>jv||r<Wv)throw new Hn("expected scale >= "+Wv+" && <= "+jv+", got: "+r);return kk[r+10]}var Fk=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},qc=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}(),Uk=20,Bk=160,mg=2,zk=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=Bk),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 ug),u===void 0&&(u=new ug),d===void 0&&(d=pg(Uk)),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<mg&&(W.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+mg),this._maxSize=mg)}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=zv(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=pg(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=qc.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=qc.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 qc(0,-1);var o=t-n;return new qc(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 $v=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=hr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new zk(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=Fk(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 Hk=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},gg=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=Ov(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var qv=function(){function r(){this.kind=hr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new gg(e)},r.prototype.merge=function(e,t){var n=Ls(t.sampleTime)>=Ls(e.sampleTime)?t:e;return new gg(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Ls(t.sampleTime)>=Ls(e.sampleTime)?t:e;return new gg(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=Hk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var Gk=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},ks=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 hg=function(){function r(e){this.monotonic=e,this.kind=hr.SUM}return r.prototype.createAccumulation=function(e){return new ks(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new ks(t.startTime,this.monotonic,o,t.reset):new ks(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 ks(t.startTime,this.monotonic,o,!0):new ks(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=Gk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var _o=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 tA},r.Sum=function(){return rA},r.LastValue=function(){return nA},r.Histogram=function(){return oA},r.ExponentialHistogram=function(){return Vk},r.Default=function(){return Wk},r}();var Kv=function(r){_o(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 Fv,e}(qr);var Yv=function(r){_o(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 hg(!0),e.NON_MONOTONIC_INSTANCE=new hg(!1),e}(qr);var Xv=function(r){_o(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 qv,e}(qr);var Jv=function(r){_o(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 sg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(qr);var Qv=function(r){_o(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 sg(this._boundaries,this._recordMinMax)},e}(qr);var Zv=function(r){_o(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 $v(this._maxSize,this._recordMinMax)},e}(qr);var eA=function(r){_o(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 rA;case me.GAUGE:case me.OBSERVABLE_GAUGE:return nA;case me.HISTOGRAM:return t.advice.explicitBucketBoundaries?new Qv(t.advice.explicitBucketBoundaries):oA}return W.warn("Unable to recognize instrument type: "+t.type),tA},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(qr);var tA=new Kv,rA=new Yv,nA=new Xv,oA=new Jv,Vk=new Zv,Wk=new eA;ke();function Kc(){return"unknown_service:"+process.argv0}var Gn=function(){return Gn=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},Gn.apply(this,arguments)},jk=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())})},$k=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}}},qk=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},fg=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 W.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[Hc]=Kc(),e[Ps]=Gc[Ps],e[Is]=Gc[Is],e[Os]=Gc[Os],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&W.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 jk(this,void 0,void 0,function(){return $k(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=Gn(Gn({},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=qk(a,2),l=c[0],u=c[1];return Gn(Gn(Gn(Gn({},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 Io;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(Io||(Io={}));ke();var Kk=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())})},Yk=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}}},Sg=function(){return gr.CUMULATIVE},iA=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}},aA=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 Xk(){var r=Rt(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?Sg:e==="delta"?iA:e==="lowmemory"?aA:(W.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."),Sg)}function Jk(r){return r!=null?r===Io.DELTA?iA:r===Io.LOWMEMORY?aA:Sg:Xk()}function Qk(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return qr.Default()}}var sA=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=Qk(t),this._aggregationTemporalitySelector=Jk(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return Kk(this,void 0,void 0,function(){return Yk(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 Zk=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},lA=1e4,cA=5,uA=1e3,dA=5e3,pA=1.5;function Fs(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=Zk(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):W.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function yg(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function bg(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return W.warn("Could not parse export URL: '"+r+"'"),r}}function Eg(r){return typeof r=="number"?r<=0?Tg(r,lA):r:eF()}function eF(){var r,e=Number((r=Rt().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:Rt().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?Tg(e,lA):e}function Tg(r,e){return W.warn("Timeout must be greater than 0",r),e}function mA(r){var e=[429,502,503,504];return e.includes(r)}function gA(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 hA=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 Dv(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=Eg(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:Mo.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:Mo.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:Mo.SUCCESS})}).catch(function(n){t({code:Mo.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{W.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 W.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();ke();import*as vg from"url";import*as Xc from"http";import*as Jc from"https";import*as fA from"zlib";import{Readable as rF}from"stream";var Vn;(function(r){r.NONE="none",r.GZIP="gzip"})(Vn||(Vn={}));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)}}(),Wi=function(r){tF(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 Yc=function(){return Yc=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},Yc.apply(this,arguments)};function Ag(r,e,t,n,o){var i=r.timeoutMillis,a=new vg.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 Wi("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:Yc({"Content-Type":t},r.headers),agent:r.agent},p=a.protocol==="http:"?Xc.request:Jc.request,g=function(h,f){switch(h===void 0&&(h=cA),f===void 0&&(f=uA),l=p(m,function(T){var C="";T.on("data",function(x){return C+=x}),T.on("aborted",function(){if(u){var x=new Wi("Request Timeout");o(x)}}),T.on("end",function(){if(u===!1)if(T.statusCode&&T.statusCode<299)W.debug("statusCode: "+T.statusCode,C),n(),clearTimeout(d),clearTimeout(c);else if(T.statusCode&&mA(T.statusCode)&&h>0){var x=void 0;f=pA*f,T.headers["retry-after"]?x=gA(T.headers["retry-after"]):x=Math.round(Math.random()*(dA-f)+f),c=setTimeout(function(){g(h-1,f)},x)}else{var R=new Wi(T.statusMessage,T.statusCode,C);o(R),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(T){if(u){var C=new Wi("Request Timeout",T.code);o(C)}else o(T);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var T=new Wi("Request Timeout");o(T)}clearTimeout(d),clearTimeout(c)}),r.compression){case Vn.GZIP:{l.setHeader("Content-Encoding","gzip");var b=nF(e);b.on("error",o).pipe(fA.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};g()}function nF(r){var e=new rF;return e.push(r),e.push(null),e}function Rg(r){if(r.httpAgentOptions&&r.keepAlive===!1){W.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new vg.URL(r.url),t=e.protocol==="http:"?Xc.Agent:Jc.Agent;return new t(Yc({keepAlive:!0},r.httpAgentOptions))}catch(n){W.error("collector exporter failed to create http agent. err: "+n.message);return}}function wg(r){if(r)return r;var e=Rt().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||Rt().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Vn.GZIP?Vn.GZIP:Vn.NONE}ke();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)}}(),Qc=function(r){oF(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&&W.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,Fs(t.headers),Gi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=Rg(t),i.compression=wg(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){W.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;Ag(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}(hA);function yA(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function iF(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function bA(r){var e=yA(r);return iF(e)}function aF(r){var e=yA(r);return e.toString()}var sF=typeof BigInt<"u"?aF:Lv;function SA(r){return r}function EA(r){if(r!==void 0)return zc(r)}var lF={encodeHrTime:bA,encodeSpanContext:zc,encodeOptionalSpanContext:EA};function TA(r){var e,t;if(r===void 0)return lF;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?bA:sF,encodeSpanContext:o?SA:zc,encodeOptionalSpanContext:o?SA:EA}}var cF=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 vA(r){return{name:r.name,version:r.version}}function ji(r){return Object.keys(r).map(function(e){return AA(e,r[e])})}function AA(r,e){return{key:r,value:RA(e)}}function RA(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(RA)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=cF(t,2),o=n[0],i=n[1];return AA(o,i)})}}:{}}function wA(r){return{attributes:ji(r.attributes),droppedAttributesCount:0}}ke();function xA(r,e){var t=TA(e);return{resource:wA(r.resource),schemaUrl:void 0,scopeMetrics:uF(r.scopeMetrics,t)}}function uF(r,e){return Array.from(r.map(function(t){return{scope:vA(t.scope),metrics:t.metrics.map(function(n){return dF(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function dF(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=hF(r.aggregationTemporality);switch(r.dataPointType){case Ot.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:CA(r,e)};break;case Ot.GAUGE:t.gauge={dataPoints:CA(r,e)};break;case Ot.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:mF(r,e)};break;case Ot.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:gF(r,e)};break}return t}function pF(r,e,t){var n={attributes:ji(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case Jt.INT:n.asInt=r.value;break;case Jt.DOUBLE:n.asDouble=r.value;break}return n}function CA(r,e){return r.dataPoints.map(function(t){return pF(t,r.descriptor.valueType,e)})}function mF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ji(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 gF(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ji(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 hF(r){switch(r){case gr.DELTA:return 1;case gr.CUMULATIVE:return 2}}function MA(r,e){return{resourceMetrics:r.map(function(t){return xA(t,e)})}}var Cg={serializeRequest:function(r){var e=MA(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 _A="0.52.1";var IA=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)}}(),$i=function(){return $i=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},$i.apply(this,arguments)},PA="v1/metrics",fF="http://localhost:4318/"+PA,SF={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+_A},yF=function(r){IA(e,r);function e(t){var n=r.call(this,t,Cg,"application/json")||this;return n.headers=$i($i($i($i({},n.headers),SF),Gi.parseKeyPairsIntoRecord(Rt().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),Fs(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?bg(Rt().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):Rt().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?yg(Rt().OTEL_EXPORTER_OTLP_ENDPOINT,PA):fF},e}(Qc),OA=function(r){IA(e,r);function e(t){return r.call(this,new yF(t),t)||this}return e}(sA);var qi;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(qi||(qi={}));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 bF=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)}}(),LA=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())})},NA=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}}},EF=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},TF=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))},vF=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 DA(r){return r!=null}function Zc(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function kA(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var xg=function(r){bF(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function Wn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new xg("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function FA(r){return LA(this,void 0,void 0,function(){var e=this;return NA(this,function(t){return[2,Promise.all(r.map(function(n){return LA(e,void 0,void 0,function(){var o,i;return NA(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 UA(r){return r.status==="rejected"}function Mg(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,TF([],EF(e(n)),!1))}),t}function BA(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=vF(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 zA(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 _g=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 RF(r)||W.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:Jt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function GA(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 VA(r,e){return HA(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var AF=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function RF(r){return r.match(AF)!=null}var wF=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 CF(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 eu=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=CF(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=zA(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 tu=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=fr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new eu(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 eu(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 eu(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=wF(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 Ig=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},Pg=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))},Og=function(){function r(e,t,n,o){e===void 0&&(e=new xF),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 xF=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,Pg([n,this._counts.length-t],Ig(this._counts.slice(t)),!1)),o.splice.apply(o,Pg([0,t],Ig(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(Pg([],Ig(this._counts),!1))},r}();var WA=52,MF=2146435072,_F=1048575,Lg=1023,ru=-Lg+1,nu=Lg,Us=Math.pow(2,-1022);function ou(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&MF)>>20;return n-Lg}function iu(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&_F)*Math.pow(2,32);return o+n}function Bs(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function $A(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var IF=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)}}(),jn=function(r){IF(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var KA=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Us)return this._minNormalLowerBoundaryIndex();var t=ou(e),n=this._rightShift(iu(e)-1,WA);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new jn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new jn("overflow: "+e+" is > maximum lower boundary: "+n);return Bs(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=ru>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return nu>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var YA=function(){function r(e){this._scale=e,this._scaleFactor=Bs(Math.LOG2E,e),this._inverseFactor=Bs(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Us)return this._minNormalLowerBoundaryIndex()-1;if(iu(e)===0){var t=ou(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 jn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Us;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new jn("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 ru<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(nu+1<<this._scale)-1},r}();var XA=-10,JA=20,PF=Array.from({length:31},function(r,e){return e>10?new YA(e-10):new KA(e-10)});function Ng(r){if(r>JA||r<XA)throw new jn("expected scale >= "+XA+" && <= "+JA+", got: "+r);return PF[r+10]}var OF=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(){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}(),LF=20,NF=160,Dg=2,QA=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=NF),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 Og),u===void 0&&(u=new Og),d===void 0&&(d=Ng(LF)),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<Dg&&(W.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+Dg),this._maxSize=Dg)}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=$A(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=Ng(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=au.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=au.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 au(0,-1);var o=t-n;return new au(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 kg=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=fr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new QA(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=OF(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 DF=qm("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function ZA(r){return r.setValue(DF,!0)}ke();function eR(){return function(r){W.error(kF(r))}}function kF(r){return typeof r=="string"?r:JSON.stringify(FF(r))}function FF(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 UF=eR();function su(r){try{UF(r)}catch{}}var tR="1.30.1";var BF="process.runtime.name";var zF="service.name";var HF="telemetry.sdk.name",GF="telemetry.sdk.language",VF="telemetry.sdk.version";var rR=BF;var nR=zF;var zs=HF,Hs=GF,Gs=VF;var WF="nodejs";var oR=WF;var Ki,Po=(Ki={},Ki[zs]="opentelemetry",Ki[rR]="node",Ki[Hs]=oR,Ki[Gs]=tR,Ki);function Vs(r){r.unref()}var JF=9,QF=6,ZF=Math.pow(10,QF),iue=Math.pow(10,JF);function Oo(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*ZF);return[t,n]}function Yi(r){return r[0]*1e6+r[1]/1e3}var Ws;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Ws||(Ws={}));ke();function iR(r,e){return new Promise(function(t){Hi.with(ZA(Hi.active()),function(){r.export(e,function(n){t(n)})})})}var aR={_export:iR};var eU=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,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=Oo(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Fg=function(){function r(){this.kind=fr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new lu(e)},r.prototype.merge=function(e,t){var n=Yi(t.sampleTime)>=Yi(e.sampleTime)?t:e;return new lu(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Yi(t.sampleTime)>=Yi(e.sampleTime)?t:e;return new lu(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=eU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var tU=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},Xi=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 cu=function(){function r(e){this.monotonic=e,this.kind=fr.SUM}return r.prototype.createAccumulation=function(e){return new Xi(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Xi(t.startTime,this.monotonic,o,t.reset):new Xi(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 Xi(t.startTime,this.monotonic,o,!0):new Xi(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=tU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var Lo=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 mR},r.Sum=function(){return gR},r.LastValue=function(){return hR},r.Histogram=function(){return fR},r.ExponentialHistogram=function(){return rU},r.Default=function(){return nU},r}();var sR=function(r){Lo(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 _g,e}(Sr);var lR=function(r){Lo(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 cu(!0),e.NON_MONOTONIC_INSTANCE=new cu(!1),e}(Sr);var cR=function(r){Lo(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 Fg,e}(Sr);var uR=function(r){Lo(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 tu([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Sr);var js=function(r){Lo(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 tu(this._boundaries,this._recordMinMax)},e}(Sr);var dR=function(r){Lo(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 kg(this._maxSize,this._recordMinMax)},e}(Sr);var pR=function(r){Lo(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 gR;case Te.GAUGE:case Te.OBSERVABLE_GAUGE:return hR;case Te.HISTOGRAM:return t.advice.explicitBucketBoundaries?new js(t.advice.explicitBucketBoundaries):fR}return W.warn("Unable to recognize instrument type: "+t.type),mR},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Sr);var mR=new sR,gR=new lR,hR=new cR,fR=new uR,rU=new dR,nU=new pR;var SR=function(r){return Sr.Default()},yR=function(r){return qi.CUMULATIVE};var Ug=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())})},Bg=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}}},bR=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},oU=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))},ER=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:SR,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:yR,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 Ug(this,void 0,void 0,function(){var t,n,o,i,a,s;return Bg(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(oU([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],bR(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=bR.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(Mg(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(Mg(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Ug(this,void 0,void 0,function(){return Bg(this,function(t){switch(t.label){case 0:return this._shutdown?(W.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,Wn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Ug(this,void 0,void 0,function(){return Bg(this,function(t){switch(t.label){case 0:return this._shutdown?(W.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,Wn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();ke();var iU=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)}}(),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}}},aU=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},sU=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))},zg=function(r){iU(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 uu(this,void 0,void 0,function(){var t;return du(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,Wn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof xg?(W.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(su(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return uu(this,void 0,void 0,function(){var o,i,a,s,c,l;return du(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=W).error.apply(l,sU(["PeriodicExportingMetricReader: metrics collection errors"],aU(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(),W.debug("Error while resolving async portion of resource: ",s),su(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,aR._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==Ws.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),Vs(this._interval)},e.prototype.onForceFlush=function(){return uu(this,void 0,void 0,function(){return du(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 uu(this,void 0,void 0,function(){return du(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}(ER);ke();ke();function pu(){return"unknown_service:"+process.argv0}var $n=function(){return $n=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},$n.apply(this,arguments)},lU=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())})},cU=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}}},uU=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},mu=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 W.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[nR]=pu(),e[Hs]=Po[Hs],e[zs]=Po[zs],e[Gs]=Po[Gs],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&W.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 lU(this,void 0,void 0,function(){return cU(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=$n($n({},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=uU(a,2),l=c[0],u=c[1];return $n($n($n($n({},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 TR=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 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)}}(),gu=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"){W.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===Jt.INT&&!Number.isInteger(e)&&(W.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,Oo(Date.now()))},r}();var vR=function(r){No(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}(gu);var AR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){W.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(gu);var RR=function(r){No(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}(gu);var wR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){W.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(gu);var hu=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 CR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);var xR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);var MR=function(r){No(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hu);function $s(r){return r instanceof hu}var _R=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 RR(o,n)},r.prototype.createHistogram=function(e,t){var n=Yr(e,Te.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new wR(o,n)},r.prototype.createCounter=function(e,t){var n=Yr(e,Te.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new AR(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Yr(e,Te.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new vR(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Yr(e,Te.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new xR(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 CR(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 MR(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 fu=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 dU=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)}}(),IR=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(){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 IR(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 IR(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){dU(e,r);function e(){return r.call(this,Zc)||this}return e}(pU);var mU=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},Su=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=Zc(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=mU(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.")},PR=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},yu=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===qi.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=gU(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=PR(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=PR(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 gU(r){return Array.from(r.entries())}var hU=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(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},OR=function(r){hU(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 Su(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new yu(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=fU(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}(fu);ke();function Gg(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(!Uo(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 C=Array.from(h.matchAll(Vx)).map(re=>re&&re.length>=3?{tagName:re[1],id:re[2]}:void 0).filter(re=>!!re),R=Array.from(h.matchAll(MH)).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 C)m.push(re.id),p.push(re);for(let re of R){let z=p[p.length-1];z&&z.tagName===re&&p.pop()}let v=p.some(re=>IH.includes(re.tagName)),M=c[l+1]??"",D=Pr(M),J=Array.from(M.matchAll(Vx)).map(re=>re&&re.length>2?re[1]:void 0).filter(re=>!!re),K=J.some(re=>$x.includes(re)),we=J.some(re=>_H.includes(re));d+D>=i&&(g=!0),d>=n&&(K&&!v||R.some(re=>PH.includes(re)))&&(g=!0),d>=o&&we&&!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 NH=75e4,nd=3e5;async function Vo(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>NH)try{let m=rd({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await kH({...r,tokenLimit:nd-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(nd*qn),u=l.serialize();let p=Pr(u);i.info({oldTokens:d,newTokens:p},"Filtered page using naive truncation"),d=p}if(d>nd)try{if(o){let m=rd({serializedTree:u,options:jx,logger:i}),p=LH();l=await H(DH({...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=rd({serializedTree:u,options:Wx,logger:i});l=await H(FH({...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(nd*qn),u=l.serialize(),i.info("Filtered page using naive truncation")}return u}async function DH({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 kH(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 FH(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 qh(r,e){if(!r.description)throw new E("UserConfigurationError","Cannot locate element with empty description");return Tr({action:async()=>UH(r,e),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:e.browser,logger:r.logger})}async function UH(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,C=r.useMemory&&!t;n&&(T=await Ys({orgId:p,s:T,context:n,localTools:h,signal:b,logger:l})),a&&(T=zH(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 D=x,X=!1,K=`data:image/jpeg;base64,${O.toString("base64")}`;D=await Vo({type:"locator",description:T,screenshot:K,serializedTree:x,options:{aiPageFiltering:c},tree:R,fixtures:{generator:f,signal:b,logger:l,orgId:p}}),D!==x&&(X=!0);let we=await f.getElementLocation({browserState:D,goal:T,screenshot:K,source:a,memory:C?s:void 0},{disableCache:t,abortSignal:b,loggerTags:Se(l),useMemory:C});if(l.debug({usedRag:X,result:we},"Got locator result"),!(we.id>0))throw new In(`Could not find any relevant element: ${we.thoughts}`,we.updatedMemory?{type:"GCS_TRACES",traces:we.updatedMemory}:void 0);let{resolution:z,target:ce,frameConfig:fe}=await g.createTargetFromA11yId({id:we.id,requirements:we.requirements,additionalElements:we.additionalElements,description:T,targetSource:"AI",logger:l,skipSavingVisualAttributes:d});if(z.a11yNode?.properties?.hidden&&z.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: ${z.displayString}`);return C&&(we.updatedMemory?ce.memory={type:"GCS_TRACES",traces:we.updatedMemory}:s&&(ce.memory=s)),{thoughts:we.thoughts,target:ce,resolution:z,frameConfig:fe,screenshot:K}}var BH=["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:"],qx="<select> element:",Kx="text input or contenteditable element:",Yx="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:",Xx="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:",$h=[qx,Kx,Yx,Xx,...BH];function Jx(r,e){if(r===e)return!0;for(let t of $h){if(!r.startsWith(t))continue;let n=r.slice(t.length).trim();if($h.some(o=>e.startsWith(o)&&e.slice(o.length).trim()===n)||n===e.trim())return!0}return!!$h.some(t=>e.startsWith(t)&&e.slice(t.length).trim()===r.trim())}function zH(r,e){if(!r||!e)return r;switch(e){case"SELECT_OPTION":return`${qx} ${r}`;case"TYPE":return`${Kx} ${r}`;case"NEGATED_ELEMENT_VISIBLE_CHECK":return`${Yx}
4360
4360
  ${r}`;case"ELEMENT_CHECK":return`${Xx}
4361
- ${r}`;default:return r}}var HH=15;async function od({command:r,aiPageFiltering:e,logger:t,fixtures:n,useMemory:o,maxRetries:i=HH}){if(!r.assertion.trim())throw new E("ActionFailureError","Assertion command is missing the assertion content");let a=$p.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=Uu(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 j(l,n.abortSignal),h=Date.now();let f=!1;try{if(m=await Tr({action:async()=>{let T=await Qx(s,t,n.abortSignal);return p&&p.serializedTree===T.serializedTree&&p.screenshotBuff.equals(T.screenshotBuff)?(f=!0,m):(p=T,Zx({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&&Xs(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()=>Zx({command:r,state:await Qx(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&&Xs(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 Qx(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 Zx({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(),C=r.contextChoice??"MULTIMODAL",x=g;C!=="VISION_ONLY"&&(x=await Vo({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:C,source:c},v=await(C==="VISION_ONLY"?(M,D)=>d.getVisualAssertionResult(M,D):(M,D)=>d.getAssertionResult(M,D))(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 GH(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function GH(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 H(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 VH=1e5,id=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function eM(r,e){let{logger:t}=r,{abortSignal:n,browser:o}=e,i=Date.now();try{await WH(i,r,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof id?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 j(s,n)}finally{t.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function WH(r,e,t){let{abortSignal:n,browser:o}=t;if(o.smartWaitingTimeout<3e3){await j(o.smartWaitingTimeout,n);return}if(!e.description)throw new E("UserConfigurationError","Cannot locate element with empty description");await H(jH(r,e,t),{milliseconds:o.smartWaitingTimeout})}async function jH(r,e,t){let{logger:n,iframeUrl:o}=e,{browser:i}=t;for(;Date.now()-r<i.smartWaitingTimeout;)if(await Tr({action:async()=>$H(e,t),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function $H(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 Ys({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)>VH)throw new id;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 rM}from"lodash-es";async function nM(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=()=>rS(e.cache)?e.cache:void 0,a=i(),s=rM(a),c=(h=!1)=>{if(a=i(),!!a)if(h){let f=Cw(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 j(m,o),o?.throwIfAborted(),a=i();let{result:h,elementWasFound:f}=await tM({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&&Rl(a.target)){let h=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await tM({cacheToUse:h,params:r});d=f,d.success||c(!0)}let g=i();return d.success&&g?.target&&!p&&(g.target=eh(g.target),g.updatedAt=new Date),d}async function tM({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!xn(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=Pu(t.assertion),l,u=!1,d=rM(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=>qH(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 qH(r,{command:e,fixtures:t}){return await t.browser.highlight(r),await KH(r,e.assertion)}async function KH(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 oM(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as YH}from"jimp";async function ol(r,e){let t=await r.screenshot(e),n=await YH.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as iM}from"jimp";import Kh from"jpeg-js";import XH from"pixelmatch";async function aM({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!xn(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 J=>ol(o,{locator:J.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await ol(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 X=`${l.width}x${l.height}`,J=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${X}) does not match saved screenshot dimensions (${J}) - 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 iM.fromBuffer(l.buffer),m={width:l.width,height:l.height},p=await iM.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),C=Math.abs(m.width-g.width);if(f>b){let X=d.cover({w:g.width,h:g.height});l.buffer=await X.getBuffer("image/jpeg"),h="current",l.width=g.width,l.height=g.height}else if(b>f){let X=p.cover({w:m.width,h:m.height});u.buffer=await X.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=XH(Kh.decode(u.buffer).data,Kh.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,D=`Visual diff of ${v.toFixed(2)}% detected, which is ${M?"over":"under"} the threshold of ${R*100}%.`;if(h&&(D+=` The ${h} screenshot was cropped since it was taller by ${T} pixels and wider by ${C} pixels.`),M)throw new E("ActionFailureError",D);return{fail:M,thoughts:D,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:Kh.encode(x,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var JH=3e4;function QH(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 ad({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??JH/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(Zi(r.url)&&(c=r.url),t&&ea(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 H((async()=>{let g=s?`${l}?${s}`:l;try{let h=QH(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 ZH=5e3;async function lM({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 sd(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 j(s,e.signal),s=Math.min(Math.floor(s*1.5),ZH);else return i}return i=await sd(e),i}async function sd({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(sM,{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(sM,{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 sM({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 eG=3e4;async function cM({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??eG/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(Zi(r.url)&&(s=r.url),t&&ea(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=await H((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 ld=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 Vo({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 Vo({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 qh({...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&&yp(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(Tp(i)||bp(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(vp(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 j(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=uM(e.cache);if((!T||l)&&!op(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&&!Jx(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 C=R=>!!R&&Rl(R),x=!0;if(!C(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 eM({description:o.elementDescriptor,iframeUrl:s.iframeUrl,source:p,logger:g,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride},this.getControllerFixtures(t)),f--;let R;try{R=await qh({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 In&&M.updatedLocatorMemory){let D={id:-1,...i,memory:M.updatedLocatorMemory};Lu({cmd:c,key:d,newTarget:D,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 Lu({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(Ge.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.20.1"]),Lu({cmd:c,key:d,newTarget:T,logger:g,updatedWithAI:!1}),x){let M=R.decisions.filter(D=>D.matched);if(M.length!==1)g.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let D=M[0].type;n.recordTargetAutoHeal({healType:D})}}return{result:v,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let O="unknown";R instanceof Br&&R.cacheMissReason&&(O=R.cacheMissReason),Ge.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.20.1",`missReason:${O}`]);let v=!1;if((R instanceof zr||yp(R)||Tp(R)||vp(R)||cy(R)||bp(R)||uy(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&&Qf(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 ol(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await j(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&&xS(n)?await this.browser.waitForDOMStability({timeout:Re}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:le}),this.options?.autoFollowNewTabs&&await Gx({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{Iu(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>yh(e)}}async resolveCommandTemplateStrings(e,t){return _u({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()?od({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 od({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=RT(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(!Zi(n.url)&&!ea(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:C=>this.browser.hover(C),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});p=b,g=T}let h=this.browser.getViewport()?.height??Ln.height,f=this.browser.getViewport()?.width??Ln.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 j(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 zu(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:C}=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=C}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(!xn(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=uM(n.target),b=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:C,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=C,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 zu(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(!xn(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&&!xn(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 zu(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 rG,g=tG(fetch,p),h;try{h=new URL(n.url).hostname}catch{}let f=await ad({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:g});return{data:ka.parse({...f,cookies:mc(p,h)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await cM({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return aM({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 MC({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=nE.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(oM(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 od({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&&Xs(n,f.cache?.memory.traces,a)}}let h=await nM({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()=>lM({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 Yn(n.requestMatcher),g=this.browser.registerRequestListener(p);return this.registeredListeners[n.key]=g.then(async h=>await Ah(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 H(p,{milliseconds:g*1e3,message:`Request listener timed out after ${g} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let p=new Yn(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]=$u(h)},onRequestComplete:(g,h)=>{this.recordedRequests[n.key]?.[g]&&(this.recordedRequests[n.key][g]=$u(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 Yn(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 Yn(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=oE.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 Qu({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 nG}from"lodash-es";import hM from"truncate-json";var dM=1e3,pM=5e6,oG=5*1024*1024;function fM(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=hM(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":mM(n);break;case"MOBILE_AI_ACTION_STEP":case"MOBILE_MODULE_STEP":mM(n),fM(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 mM(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function gM(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 cd(r,e){let t=nG(r);if(fM(t,e),t.length>dM)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,dM);let n=gM(t,e);if(n.length>pM)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>pM;)t.pop(),n=gM(t,e);let{jsonString:o}=hM(n,oG);try{return Gt.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 iG}from"async_hooks";var il=new iG;function aG(r){il.enterWith({activeTracers:[r]})}function sG(r,e){let t=il.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function lG(r,e){let t=il.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return il.run({activeTracers:n},e)}var Nr={globalAls:il,initializeRootTracerContext:aG,withChildTracer:sG,withChildTracerAsync:lG};var SM=["signal","timeoutMs","timeoutMsg"],Wo=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,()=>H(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 SM)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 SM)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,()=>H(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 Wo}async function yM(r){let{driver:e,abortSignal:t,logger:n,packageName:o}=r,i;try{i=await H(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=cG(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 cG(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 al(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=al(i);a.trim()&&e.push(a.trim())}return e.join(" ").trim()}import{mkdirSync as OG}from"fs";import{tmpdir as LG}from"os";import xM from"path";import{diff as PG}from"deep-object-diff";import{cloneDeep as CM}from"lodash-es";import vM from"fontoxpath";import uG from"@prettier/plugin-xml";import dG from"prettier";import{DOMParser as pG,XMLSerializer as mG}from"slimdom";var gG=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 sl(r){let e=r.toLowerCase();return e.endsWith("webview")||gG.has(e)}function hG(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 fG=new Set(["index","package","a11y-important","screen-reader-focusabl"]),SG=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"]),yG=new Set(["text","hint"]),bG=new Set(["live-region","drawing-order"]),EG=new Set(["displayed","enabled"]);function TG(r,e){let t={};for(let[n,o]of Object.entries(e))fG.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||SG.has(n)&&o==="false"||yG.has(n)&&o===""||EG.has(n)&&o==="true"||bG.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function bM(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=TG(e.tagName,l);for(let[m,p]of Object.entries(u))t.setAttribute(m,p);if(o.set(c,e),i.set(c,t),sl(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 HH=15;async function od({command:r,aiPageFiltering:e,logger:t,fixtures:n,useMemory:o,maxRetries:i=HH}){if(!r.assertion.trim())throw new E("ActionFailureError","Assertion command is missing the assertion content");let a=$p.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=Uu(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 j(l,n.abortSignal),h=Date.now();let f=!1;try{if(m=await Tr({action:async()=>{let T=await Qx(s,t,n.abortSignal);return p&&p.serializedTree===T.serializedTree&&p.screenshotBuff.equals(T.screenshotBuff)?(f=!0,m):(p=T,Zx({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&&Xs(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()=>Zx({command:r,state:await Qx(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&&Xs(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 Qx(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 Zx({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(),C=r.contextChoice??"MULTIMODAL",x=g;C!=="VISION_ONLY"&&(x=await Vo({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:C,source:c},v=await(C==="VISION_ONLY"?(M,D)=>d.getVisualAssertionResult(M,D):(M,D)=>d.getAssertionResult(M,D))(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 GH(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function GH(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 H(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 VH=1e5,id=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function eM(r,e){let{logger:t}=r,{abortSignal:n,browser:o}=e,i=Date.now();try{await WH(i,r,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof id?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 j(s,n)}finally{t.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function WH(r,e,t){let{abortSignal:n,browser:o}=t;if(o.smartWaitingTimeout<3e3){await j(o.smartWaitingTimeout,n);return}if(!e.description)throw new E("UserConfigurationError","Cannot locate element with empty description");await H(jH(r,e,t),{milliseconds:o.smartWaitingTimeout})}async function jH(r,e,t){let{logger:n,iframeUrl:o}=e,{browser:i}=t;for(;Date.now()-r<i.smartWaitingTimeout;)if(await Tr({action:async()=>$H(e,t),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function $H(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 Ys({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)>VH)throw new id;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 rM}from"lodash-es";async function nM(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=()=>rS(e.cache)?e.cache:void 0,a=i(),s=rM(a),c=(h=!1)=>{if(a=i(),!!a)if(h){let f=Cw(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 j(m,o),o?.throwIfAborted(),a=i();let{result:h,elementWasFound:f}=await tM({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&&Rl(a.target)){let h=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await tM({cacheToUse:h,params:r});d=f,d.success||c(!0)}let g=i();return d.success&&g?.target&&!p&&(g.target=eh(g.target),g.updatedAt=new Date),d}async function tM({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!xn(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=Pu(t.assertion),l,u=!1,d=rM(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=>qH(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 qH(r,{command:e,fixtures:t}){return await t.browser.highlight(r),await KH(r,e.assertion)}async function KH(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 oM(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as YH}from"jimp";async function ol(r,e){let t=await r.screenshot(e),n=await YH.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as iM}from"jimp";import Kh from"jpeg-js";import XH from"pixelmatch";async function aM({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!xn(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 J=>ol(o,{locator:J.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await ol(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 X=`${l.width}x${l.height}`,J=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${X}) does not match saved screenshot dimensions (${J}) - 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 iM.fromBuffer(l.buffer),m={width:l.width,height:l.height},p=await iM.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),C=Math.abs(m.width-g.width);if(f>b){let X=d.cover({w:g.width,h:g.height});l.buffer=await X.getBuffer("image/jpeg"),h="current",l.width=g.width,l.height=g.height}else if(b>f){let X=p.cover({w:m.width,h:m.height});u.buffer=await X.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=XH(Kh.decode(u.buffer).data,Kh.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,D=`Visual diff of ${v.toFixed(2)}% detected, which is ${M?"over":"under"} the threshold of ${R*100}%.`;if(h&&(D+=` The ${h} screenshot was cropped since it was taller by ${T} pixels and wider by ${C} pixels.`),M)throw new E("ActionFailureError",D);return{fail:M,thoughts:D,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:Kh.encode(x,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var JH=3e4;function QH(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 ad({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??JH/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(Zi(r.url)&&(c=r.url),t&&ea(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 H((async()=>{let g=s?`${l}?${s}`:l;try{let h=QH(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 ZH=5e3;async function lM({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 sd(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 j(s,e.signal),s=Math.min(Math.floor(s*1.5),ZH);else return i}return i=await sd(e),i}async function sd({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(sM,{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(sM,{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 sM({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 eG=3e4;async function cM({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??eG/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(Zi(r.url)&&(s=r.url),t&&ea(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new E("ActionFailureError",`Invalid URL: ${r.url}`);let l=await H((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 ld=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 Vo({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 Vo({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 qh({...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&&yp(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(Tp(i)||bp(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(vp(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 j(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=uM(e.cache);if((!T||l)&&!op(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&&!Jx(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 C=R=>!!R&&Rl(R),x=!0;if(!C(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 eM({description:o.elementDescriptor,iframeUrl:s.iframeUrl,source:p,logger:g,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride},this.getControllerFixtures(t)),f--;let R;try{R=await qh({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 In&&M.updatedLocatorMemory){let D={id:-1,...i,memory:M.updatedLocatorMemory};Lu({cmd:c,key:d,newTarget:D,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 Lu({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(Ge.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.20.2"]),Lu({cmd:c,key:d,newTarget:T,logger:g,updatedWithAI:!1}),x){let M=R.decisions.filter(D=>D.matched);if(M.length!==1)g.warn({decisions:R.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let D=M[0].type;n.recordTargetAutoHeal({healType:D})}}return{result:v,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let O="unknown";R instanceof Br&&R.cacheMissReason&&(O=R.cacheMissReason),Ge.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!T.requirements}`,`hasAdditionalElements:${!!T.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:0.20.2",`missReason:${O}`]);let v=!1;if((R instanceof zr||yp(R)||Tp(R)||vp(R)||cy(R)||bp(R)||uy(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&&Qf(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 ol(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await j(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&&xS(n)?await this.browser.waitForDOMStability({timeout:Re}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:le}),this.options?.autoFollowNewTabs&&await Gx({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{Iu(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>yh(e)}}async resolveCommandTemplateStrings(e,t){return _u({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()?od({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 od({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=RT(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(!Zi(n.url)&&!ea(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:C=>this.browser.hover(C),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});p=b,g=T}let h=this.browser.getViewport()?.height??Ln.height,f=this.browser.getViewport()?.width??Ln.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 j(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 zu(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:C}=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=C}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(!xn(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=uM(n.target),b=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:C,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=C,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 zu(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(!xn(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&&!xn(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 zu(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 rG,g=tG(fetch,p),h;try{h=new URL(n.url).hostname}catch{}let f=await ad({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:g});return{data:ka.parse({...f,cookies:mc(p,h)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await cM({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return aM({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 MC({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=nE.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(oM(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 od({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&&Xs(n,f.cache?.memory.traces,a)}}let h=await nM({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()=>lM({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 Yn(n.requestMatcher),g=this.browser.registerRequestListener(p);return this.registeredListeners[n.key]=g.then(async h=>await Ah(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 H(p,{milliseconds:g*1e3,message:`Request listener timed out after ${g} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let p=new Yn(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]=$u(h)},onRequestComplete:(g,h)=>{this.recordedRequests[n.key]?.[g]&&(this.recordedRequests[n.key][g]=$u(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 Yn(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 Yn(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=oE.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 Qu({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 nG}from"lodash-es";import hM from"truncate-json";var dM=1e3,pM=5e6,oG=5*1024*1024;function fM(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=hM(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":mM(n);break;case"MOBILE_AI_ACTION_STEP":case"MOBILE_MODULE_STEP":mM(n),fM(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 mM(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function gM(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 cd(r,e){let t=nG(r);if(fM(t,e),t.length>dM)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,dM);let n=gM(t,e);if(n.length>pM)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>pM;)t.pop(),n=gM(t,e);let{jsonString:o}=hM(n,oG);try{return Gt.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 iG}from"async_hooks";var il=new iG;function aG(r){il.enterWith({activeTracers:[r]})}function sG(r,e){let t=il.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function lG(r,e){let t=il.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return il.run({activeTracers:n},e)}var Nr={globalAls:il,initializeRootTracerContext:aG,withChildTracer:sG,withChildTracerAsync:lG};var SM=["signal","timeoutMs","timeoutMsg"],Wo=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,()=>H(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 SM)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 SM)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,()=>H(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 Wo}async function yM(r){let{driver:e,abortSignal:t,logger:n,packageName:o}=r,i;try{i=await H(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=cG(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 cG(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 al(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=al(i);a.trim()&&e.push(a.trim())}return e.join(" ").trim()}import{mkdirSync as OG}from"fs";import{tmpdir as LG}from"os";import xM from"path";import{diff as PG}from"deep-object-diff";import{cloneDeep as CM}from"lodash-es";import vM from"fontoxpath";import uG from"@prettier/plugin-xml";import dG from"prettier";import{DOMParser as pG,XMLSerializer as mG}from"slimdom";var gG=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 sl(r){let e=r.toLowerCase();return e.endsWith("webview")||gG.has(e)}function hG(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 fG=new Set(["index","package","a11y-important","screen-reader-focusabl"]),SG=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"]),yG=new Set(["text","hint"]),bG=new Set(["live-region","drawing-order"]),EG=new Set(["displayed","enabled"]);function TG(r,e){let t={};for(let[n,o]of Object.entries(e))fG.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||SG.has(n)&&o==="false"||yG.has(n)&&o===""||EG.has(n)&&o==="true"||bG.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function bM(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=TG(e.tagName,l);for(let[m,p]of Object.entries(u))t.setAttribute(m,p);if(o.set(c,e),i.set(c,t),sl(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(!RG(g,s?.viewportBounds))continue;let h=n.createElement(hG(g.tagName));bM(r,g,h),t.appendChild(h)}}}function vG(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;bM(a,e,s);let c=new mG().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function EM(r,e){let t=new pG,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}=vG(t,i,o,e);return{xml:await dG.format(c,{parser:"xml",plugins:[uG],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function AG(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 ud(r,e){let t=r.idToElement.get(e);if(t)return AG(t)}function Yh(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 jo(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 RG(r,e){if(!e)return!0;let t=jo(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 TM(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function AM({requirements:r,element:e}){let t;if((r?.positionSpecificity||r?.shapeSpecificity)&&(t=jo(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:TM(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 wM({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=jo(n);if(!o)throw new E("InternalWebAgentError",`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=ud(t.graph,r.id)??"",a=Yh(t.graph,r.id)??"",s=AM({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=ud(t.graph,u);return p?{xPath:p,requirements:AM({requirements:d,element:m})}:void 0}).filter(u=>!!u));let l;if(sl(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 Xh(r){return r?.type==="WEBVIEW"?r.browserCache?.memory:void 0}var wG=.1,CG=.25;function dd(r,e,t,n){let o=Math.abs(e-t);switch(r){case"precise":return o<=n;case"narrow":return o<=Math.abs(e)*wG;case"broad":return o<=Math.abs(e)*CG;case"irrelevant":return!0}}function xG(r,e){let t=e.x2-e.x1,n=(e.x1+e.x2)/2,o=(r[0]+r[2])/2;if(!dd(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 dd(e.tolerance,a,s,Math.min(1,i))}function MG(r,e){return dd(e.tolerance,e.width,r[2]-r[0],Math.min(1,e.width))?dd(e.tolerance,e.height,r[3]-r[1],Math.min(1,e.height)):!1}var RM=(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=al(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&&!xG(t.newElementBounds,a))throw new E("ActionFailureError",`Position mismatch: expected ${JSON.stringify(a)}, got ${JSON.stringify(t.newElementBounds)}`);if(s&&t&&!MG(t.newElementBounds,s))throw new E("ActionFailureError",`Shape mismatch: expected ${JSON.stringify(s)}, got ${JSON.stringify(t.newElementBounds)}`)};async function pd(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ie();if(e.type==="WEBVIEW")return _G(e,r);let a=vM.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=vM.evaluateXPathToFirstNode(p.xPath,o);if(!g)throw new E("ActionFailureError",`Required related element not found for XPath: ${p.xPath}`);RM(g,p.requirements)}})}let s=jo(a);if(!s)throw new E("ActionFailureError","Resolved native element has no bounding box");RM(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=Yh(n,c)??l,u=ud(n,c)??u),{resolvedTarget:{...e,resolvedNode:a,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function _G(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 $o(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;ic(e)&&(e[t]={...e[t],[n]:Ai.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date,e[t].updatedAtLoggerTags=Se(r.logger)))}function md(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}=wM({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=CM(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:Xh(d),metadata:m});h=b.thoughts;let T=await t(b.resolvedTarget);return $o({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 pd({target:g,domState:f,stateManager:this.stateManager,logger:this.logger}),O=md(R),v=PG(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}}),C=await t(b);return $o({command:o,cacheKey:i,targetName:a,updatedCache:T,updatedWithAI:!1,logger:this.logger}),g.type!=="WEBVIEW"&&Ge.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.20.1"]),{result:C,thoughts:"Successfully executed preset action with cache"}}catch(b){g.type!=="WEBVIEW"&&Ge.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.20.1"]),this.throwIfAborted(),this.logger.warn({err:b},"Failed to resolve target cache, retrying with AI");let T=this.shouldUseMemoryForCommand(o),C=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:T,memory:g?.memory,webviewMemory:Xh(g),metadata:m});h=C.thoughts;let x=await t(C.resolvedTarget);return $o({command:o,cacheKey:i,targetName:a,updatedCache:C.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 CM(this.aiSettings)}};function NG(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 oa=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=xM.join(LG(),"momentic","downloads"),s=xM.join(a,this.orgId,i);return OG(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=NG(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 Qn=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 MM=25,gd=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??MM};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 oa(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??MM;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 Qn(this.constructPerformerParams()).doPress({keycode:67})}};import Qt from"zod";var _M=.8,Zn=.2,DG=Qt.object({navigationBar:Qt.object({visible:Qt.boolean(),x:Qt.number(),y:Qt.number(),width:Qt.number(),height:Qt.number()}),statusBar:Qt.object({visible:Qt.boolean(),x:Qt.number(),y:Qt.number(),width:Qt.number(),height:Qt.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=DG.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*Zn),n=Math.floor(e.height*Zn);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*Zn),l=Math.floor(s*Zn);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*Zn),s=Math.floor(i*Zn);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*Zn),u=Math.floor(c.height*Zn),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??_M)*(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=_M,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 FG}from"crypto";import UG from"pixelmatch";import{_android as BG,chromium as zG}from"playwright";import{PNG as kM}from"pngjs";import{z as qe}from"zod";var IM=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()}),PM=qe.object({description:qe.string(),devtoolsFrontendUrl:qe.string(),id:qe.string(),title:qe.string(),type:qe.string(),url:qe.string(),webSocketDebuggerUrl:qe.string()}),OM=qe.object({proc:qe.string(),webview:qe.string(),webviewName:qe.string()}),LM=qe.array(OM.extend({info:IM.optional(),pages:qe.array(PM).optional()})),RNe=qe.array(OM.extend({info:IM,pages:qe.array(PM)}));function Jh(r,e,t=.01){let n=Buffer.from(r,"base64"),o=Buffer.from(e,"base64"),i=kM.sync.read(n),a=kM.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 UG(i.data,a.data,l,s,c,{threshold:t})/(s*c)*100}var hd=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 BG.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()=>{let i=this.getDeviceSerial();if(i)try{let a=await ht(["exec-out","screencap","-p"],{serial:i,timeoutMs:3e3,throwOnError:!1,encoding:"buffer"});if(a&&a.length>0){let s=Buffer.from([0,0,0,0,73,69,78,68,174,66,96,130]),c=a.lastIndexOf(s);return c!==-1?a.subarray(0,c+s.length).toString("base64"):a.toString("base64")}}catch(a){this.logger.warn({err:a},"Failed to take screenshot with adb")}if(this.limbarClient){let{dataUri:a}=await this.limbarClient.screenshot();return a.substring(a.indexOf(",")+1)}return 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 j(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,Jh(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 j(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=FG("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");(sl(a.tagName)||n==="com.android.chrome"&&s==="Web View"&&a.tagName.toLowerCase().startsWith("frame"))&&o.push({id:i,originalElement:a,bounds:jo(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 EM(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 ht(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=LM.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(!RG(g,s?.viewportBounds))continue;let h=n.createElement(hG(g.tagName));bM(r,g,h),t.appendChild(h)}}}function vG(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;bM(a,e,s);let c=new mG().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function EM(r,e){let t=new pG,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}=vG(t,i,o,e);return{xml:await dG.format(c,{parser:"xml",plugins:[uG],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function AG(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 ud(r,e){let t=r.idToElement.get(e);if(t)return AG(t)}function Yh(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 jo(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 RG(r,e){if(!e)return!0;let t=jo(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 TM(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function AM({requirements:r,element:e}){let t;if((r?.positionSpecificity||r?.shapeSpecificity)&&(t=jo(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:TM(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 wM({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=jo(n);if(!o)throw new E("InternalWebAgentError",`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=ud(t.graph,r.id)??"",a=Yh(t.graph,r.id)??"",s=AM({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=ud(t.graph,u);return p?{xPath:p,requirements:AM({requirements:d,element:m})}:void 0}).filter(u=>!!u));let l;if(sl(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 Xh(r){return r?.type==="WEBVIEW"?r.browserCache?.memory:void 0}var wG=.1,CG=.25;function dd(r,e,t,n){let o=Math.abs(e-t);switch(r){case"precise":return o<=n;case"narrow":return o<=Math.abs(e)*wG;case"broad":return o<=Math.abs(e)*CG;case"irrelevant":return!0}}function xG(r,e){let t=e.x2-e.x1,n=(e.x1+e.x2)/2,o=(r[0]+r[2])/2;if(!dd(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 dd(e.tolerance,a,s,Math.min(1,i))}function MG(r,e){return dd(e.tolerance,e.width,r[2]-r[0],Math.min(1,e.width))?dd(e.tolerance,e.height,r[3]-r[1],Math.min(1,e.height)):!1}var RM=(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=al(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&&!xG(t.newElementBounds,a))throw new E("ActionFailureError",`Position mismatch: expected ${JSON.stringify(a)}, got ${JSON.stringify(t.newElementBounds)}`);if(s&&t&&!MG(t.newElementBounds,s))throw new E("ActionFailureError",`Shape mismatch: expected ${JSON.stringify(s)}, got ${JSON.stringify(t.newElementBounds)}`)};async function pd(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ie();if(e.type==="WEBVIEW")return _G(e,r);let a=vM.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=vM.evaluateXPathToFirstNode(p.xPath,o);if(!g)throw new E("ActionFailureError",`Required related element not found for XPath: ${p.xPath}`);RM(g,p.requirements)}})}let s=jo(a);if(!s)throw new E("ActionFailureError","Resolved native element has no bounding box");RM(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=Yh(n,c)??l,u=ud(n,c)??u),{resolvedTarget:{...e,resolvedNode:a,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function _G(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 $o(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;ic(e)&&(e[t]={...e[t],[n]:Ai.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date,e[t].updatedAtLoggerTags=Se(r.logger)))}function md(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}=wM({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=CM(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:Xh(d),metadata:m});h=b.thoughts;let T=await t(b.resolvedTarget);return $o({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 pd({target:g,domState:f,stateManager:this.stateManager,logger:this.logger}),O=md(R),v=PG(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}}),C=await t(b);return $o({command:o,cacheKey:i,targetName:a,updatedCache:T,updatedWithAI:!1,logger:this.logger}),g.type!=="WEBVIEW"&&Ge.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.20.2"]),{result:C,thoughts:"Successfully executed preset action with cache"}}catch(b){g.type!=="WEBVIEW"&&Ge.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!g.requirements}`,`hasAdditionalElements:${!!g.requiredRelatedElements?.length}`,`orgId:${this.orgId}`,"cliVersion:0.20.2"]),this.throwIfAborted(),this.logger.warn({err:b},"Failed to resolve target cache, retrying with AI");let T=this.shouldUseMemoryForCommand(o),C=await this.findElement({description:n,tracer:c,skipFetchingFullWebviewContent:l,removeWebviewContent:u,useMemory:T,memory:g?.memory,webviewMemory:Xh(g),metadata:m});h=C.thoughts;let x=await t(C.resolvedTarget);return $o({command:o,cacheKey:i,targetName:a,updatedCache:C.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 CM(this.aiSettings)}};function NG(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 oa=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=xM.join(LG(),"momentic","downloads"),s=xM.join(a,this.orgId,i);return OG(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=NG(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 Qn=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 MM=25,gd=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??MM};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 oa(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??MM;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 Qn(this.constructPerformerParams()).doPress({keycode:67})}};import Qt from"zod";var _M=.8,Zn=.2,DG=Qt.object({navigationBar:Qt.object({visible:Qt.boolean(),x:Qt.number(),y:Qt.number(),width:Qt.number(),height:Qt.number()}),statusBar:Qt.object({visible:Qt.boolean(),x:Qt.number(),y:Qt.number(),width:Qt.number(),height:Qt.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=DG.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*Zn),n=Math.floor(e.height*Zn);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*Zn),l=Math.floor(s*Zn);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*Zn),s=Math.floor(i*Zn);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*Zn),u=Math.floor(c.height*Zn),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??_M)*(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=_M,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 FG}from"crypto";import UG from"pixelmatch";import{_android as BG,chromium as zG}from"playwright";import{PNG as kM}from"pngjs";import{z as qe}from"zod";var IM=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()}),PM=qe.object({description:qe.string(),devtoolsFrontendUrl:qe.string(),id:qe.string(),title:qe.string(),type:qe.string(),url:qe.string(),webSocketDebuggerUrl:qe.string()}),OM=qe.object({proc:qe.string(),webview:qe.string(),webviewName:qe.string()}),LM=qe.array(OM.extend({info:IM.optional(),pages:qe.array(PM).optional()})),RNe=qe.array(OM.extend({info:IM,pages:qe.array(PM)}));function Jh(r,e,t=.01){let n=Buffer.from(r,"base64"),o=Buffer.from(e,"base64"),i=kM.sync.read(n),a=kM.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 UG(i.data,a.data,l,s,c,{threshold:t})/(s*c)*100}var hd=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 BG.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()=>{let i=this.getDeviceSerial();if(i)try{let a=await ht(["exec-out","screencap","-p"],{serial:i,timeoutMs:3e3,throwOnError:!1,encoding:"buffer"});if(a&&a.length>0){let s=Buffer.from([0,0,0,0,73,69,78,68,174,66,96,130]),c=a.lastIndexOf(s);return c!==-1?a.subarray(0,c+s.length).toString("base64"):a.toString("base64")}}catch(a){this.logger.warn({err:a},"Failed to take screenshot with adb")}if(this.limbarClient){let{dataUri:a}=await this.limbarClient.screenshot();return a.substring(a.indexOf(",")+1)}return 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 j(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,Jh(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 j(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=FG("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");(sl(a.tagName)||n==="com.android.chrome"&&s==="Web View"&&a.tagName.toLowerCase().startsWith("frame"))&&o.push({id:i,originalElement:a,bounds:jo(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 EM(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 ht(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=LM.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 nl.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 ld({browser:a,generator:this.fixtures.browserGenerator,logger:this.logger,orgId:this.orgId,storage:this.fixtures.storage,localCodeEvalTools:this.fixtures.localCodeEvalTools,visualDiffScreenshotStorage:new wc})})}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 zG.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 FM=5,UM=.8,HG=1,fd=class extends aa{async executeScrollTo(e){let t=e.target.description,n=e.scrollStepPercent??UM,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??UM,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 pd({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),$o({command:e,updatedCache:md(a),updatedWithAI:!0,logger:this.logger}),{success:!0,message:s}):($o({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<FM;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=GG(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 ${FM} 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=HG,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=Jh(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 GG(r){if(r.type==="CUSTOM_COORDINATES")return r}import{randomUUID as VG}from"crypto";import cl from"fs";import{tmpdir as WG}from"os";import sa from"path";var Sd=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(cl.existsSync(n))o=n;else if(cl.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{cl.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{cl.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(WG(),`momentic-apk-${VG()}${n}`);return cl.writeFileSync(o,e),o}};import{existsSync as jG,readFileSync as $G}from"fs";import qG from"zod";var KG=qG.string().url();async function BM(r){if(KG.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(!jG(r))throw new E("UserInfrastructureError",`File does not exist at path: ${r}`);return $G(r).toString("base64")}var yd=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 zM}from"lodash-es";var bd=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)}},Ed=class{async getTextContent(e){return al(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 YG=5e3,Td=class extends Ze{async executeElementCheck(e){let t=Date.now(),n=(e.timeout??kt)*1e3,o=n+1e4,i,a=0,s=500,c=zM(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=zM(c),await j(s,this.abortSignal),s=Math.min(Math.floor(s*1.5),YG);else return i}let l=await this.executeElementCheckHelper(e,{cacheIsInvalidAfterResolution:!0});return l.success||c&&e.cache&&(e.cache=Js({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=Pu(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 In)?{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 Ed,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 bd,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 XG=5e3,vd=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 j(s,this.abortSignal),s=Math.min(Math.floor(s*1.5),XG);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 ${Jg(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 sd({assertion:e.assertion,logger:this.logger,browser:n,autoExpandIframes:!!n.userBrowserSettings.autoExpandIframes})}};var Ad=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 hd.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 ${QG.resolve(e)}`)}async executeCommand(e){let t=["type","a11yData","thoughts","cache","code"],n;try{n=await _u({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{Iu(e.command,n)}}async executeCommandHelper({command:e}){let t=ie();switch(e.type){case"TAP":return new oa(this.constructPerformerParams()).executeTap({command:e});case"TYPE":return await new gd(this.constructPerformerParams()).doType(e);case"AI_CHECK":{let n=this.shouldUseMemoryForCommand(e),o=15,i=e.timeoutSecs?e.timeoutSecs*1e3:5e3,a=Uu(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 j(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 vd(this.constructPerformerParams()).executeScreenCheck(e);case"ELEMENT_CHECK":return await new Td(this.constructPerformerParams()).executeElementCheck(e);case"DRAG_AND_DROP":return await new yd(this.constructPerformerParams()).executeDragAndDrop({command:e});case"SCROLL_TO":return new fd(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 ZG,i=JG(fetch,o),a=Date.now(),s=await ad({command:e,baseUrl:void 0,logger:this.logger,fetchImplementation:i}),c=mc(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 Qn(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 H(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.waitForScreenshotStability({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 Qn(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 Qn(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 j(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"INSTALL_APP":return new Sd(this.constructPerformerParams()).doInstallApk(e);case"UNINSTALL_APP":return new Ad(this.constructPerformerParams()).doUninstallApk(e);case"ADD_FILE":{let n=await BM(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 yM({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??jl;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 GM({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,C=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=Ii.parse(O[bo]),M=Ii.parse(O[Ya]),D={...o.emulator,...n.settings?.emulator},X=n.settings?.defaultApkFilePath?.trim()||M,J=d.getSession(p);if(J){if(e.info("Reconnecting to existing Android session"),J.local)return r.emit("session",J.metadata),J.softDeleted=!1,J.metadata;throw new Error("Restoring existing remote emulator sessions is not supported. Please reconnect to a new emulator.")}let K;if(D.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 tr=n.settings?.emulator?.localEmulatorSettings?.avdId?.trim()||v;if(!tr)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 ${bo}.`);K={avdId:tr,apkToInstall:T?{channel:T,tag:C}:void 0,apkFilePath:X}}else K={region:D.region,apkToInstall:T?{channel:T,tag:C}:void 0,osVersion:D.remoteEmulatorSettings?.androidVersion};let we=Date.now(),{driver:re,cleanup:z,emulatorName:ce,adbPort:fe,limbarClient:Je,limbarToken:Le,limbarUrl:Lt,playwrightDevice:Wt}=await i({socket:r,logger:e,creationOpts:K}),Ne=HM.join(eV(),`logcat-logs-${t}-${b}-${p}.txt`),ut=await Mu({driver:re,onLogs:tr=>{r.emit("logcatLogs",tr)},logFilePath:Ne});e.info({adbPort:fe,apkChannel:T,apkTag:C,duration:Date.now()-we,emulatorName:ce},"Android emulator session initiated"),e=e.child({emulator:ce});let sn=await a(t,e),An=await s(t,e),ei=await c(t,e),Al=u?await u(t):void 0,no=new Ci({variablesFromEnvironment:O,envName:R,testName:f}),Rn=await la.init({driver:re,generator:sn,logger:e,limbarClient:Je,playwrightDevice:Wt,aiSettings:{...o.ai,useMemory:o.ai?.useMemory!==!1,...n.settings?.ai},options:{emulator:{...D,browserSettings:o.browser}},fixtures:{storage:x,browserEnricher:ei,browserGenerator:An,localCodeEvalTools:Al,testContext:no},orgId:t,adbPort:fe,abortController:new AbortController}),ti=await Rn.getViewportBounds();if(!r.connected)throw await Rn.cleanup(),await ut(),await z(),new Error("Socket not connected anymore, not proceeding with Android session setup");let Ca=tV({socket:r,testContext:no}),oo=async()=>{clearInterval(Ca);try{await Promise.allSettled([Rn.cleanup(),ut(),z()])}catch(tr){e.warn({err:tr},"Failed to clean up emulator in socket server")}},V={sessionId:p,testId:b,orgId:t,emulatorName:ce,testName:f,limbarUrl:Lt,limbarToken:Le,viewportBounds:ti};return d.registerSession(p,{controller:Rn,cleanup:oo,emulatorName:ce,local:D.region==="local",metadata:V,logFilePath:Ne}),r.emit("session",V),V}function tV({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}import Md from"fs/promises";import{z as cV}from"zod";var F="v1",Qh="mobile-cli",Ko="0.20.1";var rV=9e4,nV=3,oV=1500,iV=15e3,Dr=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function aV(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var Zh=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Ko&&(e[Rc]=Ko),Qh&&(e[IE]=Qh),e}async sendRequest(e,t){let{retries:n=nV,requestTimeoutMs:o=rV,initialRetryDelayMs:i=oV,maxRetryDelayMs:a=iV,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 zn),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 aV(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 Zh{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[_E]:this.mode??""}}};import{createAnthropic as sV}from"@ai-sdk/anthropic";function lV(r){let{apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o}=r,i={Authorization:`Bearer ${e}`,[Rc]:Ko??"",...t&&{[OE]:t},...n||{}};return o&&(i[PE]=JSON.stringify(o)),i}var Rd=r=>e=>{let t=lV(r);return sV({baseURL:`${r.baseUrl}/v1/llm/anthropic/${e}`,headers:t,apiKey:r.apiKey})(e)};var Yo=class extends on{agentConfig;constructor(e,t){let n={...vb,...e};super(t),this.agentConfig=n}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:t.abortSignal});return sb.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${F}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Ko,...e},signal:t.abortSignal});return ab.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${F}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return cV.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(`/${F}/web-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return UE.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(`/${F}/web-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return _m.parse(o)}async getLintStepResult(e,t){let n={...e,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/lint/step`,{method:"POST",body:n,signal:t.abortSignal});return FE.parse(o)}async getLintMcpCopilotMessageResult(e,t){let n={message:e.message,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:t.abortSignal});return NE.parse(o)}async getMcpCopilotConversationEvaluation(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/mcp-copilot-conversation-evaluator`,{method:"POST",body:n,signal:t.abortSignal});return DE.parse(o)}async getMcpCopilotChatSummary(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/mcp-copilot-chat-summary`,{method:"POST",body:n,signal:t.abortSignal});return kE.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(`/${F}/web-agent/visual-assertion`,{method:"POST",body:n,signal:t.abortSignal});return _m.parse(o)}async getAiActionCommand(e,t){let n=await this.sendRequest(`/${F}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return LE.parse(n)}async getMultiturnAiActionCommand(e,t){return await this.sendRequest(`/${F}/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(`/${F}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return Lp.parse(n)}async getReverseMappedDescription(e,t){let n=await this.sendRequest(`/${F}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return BE.parse(n)}async getTextExtraction(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${F}/web-agent/text-extraction`,{method:"POST",body:n,signal:t.abortSignal});return Pp.parse(o)}async getPageSummary(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/page-summary`,{method:"POST",body:n,signal:t.abortSignal});return zy.parse(o)}async getSmartWaitingDecision(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/smart-waiting`,{method:"POST",body:n,signal:t.abortSignal});return Hy.parse(o)}async getTestResultClassification(e,t){let n=await this.sendRequest(`/${F}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Sp.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${F}/web-agent/extract-keywords`,{method:"POST",body:e,signal:t.abortSignal});return Tb.parse(n)}async getAutohealingProposal(e,t){let n=await this.sendRequest(`/${F}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Dy.parse(n)}async getFailureRecoveryProposal(e,t){let n=await this.sendRequest(`/${F}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Uy.parse(n)}async getFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${F}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Fy.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${F}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return Yf.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return Rd({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as ef}from"zod";var Yt=class extends on{constructor(e){super({...e,mode:void 0})}getAppUrl(){return bs(this.baseUrl)}async getAuthInfo(){let e=await this.sendRequest(`/${F}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3,onFailedRequest:t=>{w.warn(`API key check failed: ${t.message}`)}});return QE.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${F}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return KE.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${F}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return HE.parse(t)}async updateStepCaches(e,t){await this.sendRequest(`/${F}/cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,t){let n=await this.sendRequest(`/${F}/cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return VE.parse(n)}async updateMobileStepCaches(e,t){await this.sendRequest(`/${F}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,t){let n=await this.sendRequest(`/${F}/mobile-cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return WE.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${F}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return zE.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${F}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return JE.parse(t)}async uploadOnDemandScreenshot(e){return await this.sendRequest(`/${F}/on-demand-screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${F}/on-demand-screenshots/${e.id}`}}async fetchOnDemandScreenshot(e){let t={};return{data:await this.sendRequest(`/${F}/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(`/${F}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ZE.parse(e)}async acquireCacheLock(e,t){let n=await this.sendRequest(`/${F}/result-cache/lock`,{method:"POST",body:e,signal:t,retries:3,requestTimeoutMs:3e4});return fT.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${F}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${F}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${F}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${F}/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(`/${F}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return eT.parse(t)}async bulkGetRunGroupStatus(e){let t={runGroupIds:e},n=await this.sendRequest(`/${F}/run-groups/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return rb.array().parse(n)}async uploadProposedSteps(e,t){try{await this.sendRequest(`/${F}/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(`/${F}/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(`/${F}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return tT.parse(t)}async patchTestFragment(e,t){await this.sendRequest(`/${F}/test-fragments/${e}`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,t){let n=await this.sendRequest(`/${F}/results/tests/${e}`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return rT.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${F}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return nT.parse(e)}async startProcessingResultsUpload(e,t){let n=await this.sendRequest(`/${F}/results/uploads/${e}/process`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return oT.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${F}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bT.parse(t)}catch(t){return e.error({err:t},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,t){try{await this.sendRequest(`/${F}/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(`/${F}/git/github/${e}/${t}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(a)}async getCommitFromGithub(e,t,n){let o=await this.sendRequest(`/${F}/git/github/${e}/${t}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(o)}async getMergedBranchFromGithub(e,t,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${F}/git/github/${e}/${t}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Lm.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(`/${F}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ys.parse(a)}async getCommitFromGitlab(e,t){let n=encodeURIComponent(e),o=await this.sendRequest(`/${F}/git/gitlab/${n}/commits/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(o)}async getMergedBranchFromGitlab(e,t,n){let o=encodeURIComponent(t),i=encodeURIComponent(e),a=await this.sendRequest(`/${F}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Lm.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${F}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ef.record(ef.string(),ef.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${F}/quarantine`,{method:"GET"});return iT.parse(e)}async quarantineTest(e,t,n){await this.sendRequest(`/${F}/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(`/${F}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let t=await this.sendRequest(`/${F}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return aT.parse(t)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${F}/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(`/${F}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return lT.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${F}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${F}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return cT.parse(e)}async getLimbarAssetDownloadUrl(e,t){let n=await this.sendRequest(`/${F}/limbar/assets/${e}/${t}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return uT.parse(n)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${F}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}async createIosEmulator(e){let t=await this.sendRequest(`/${F}/limbar/ios`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return sT.parse(t)}async extendIosEmulatorTtl(e){try{await this.sendRequest(`/${F}/limbar/ios/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async deleteIosEmulator(e){await this.sendRequest(`/${F}/limbar/ios/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async generateMobileLogcatUploadUrl(e){let t=await this.sendRequest(`/${F}/logcat/mobile/upload`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Vb.parse(t)}};async function tf(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(w.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),w.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return w.debug("Got auth info from API"),n}var wd=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(`/${F}/web-agent/template-matching`,{method:"POST",body:e,signal:t?.signal});return Xf.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 bs(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 uV,en as dV}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 uV({locale:dV}),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 VM(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var Cd=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await VM(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(`/${F}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return $b.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(`/${F}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Yb.parse(o)}async getMobileFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${F}/mobile-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Jb.parse(n)}getVercelAnthropicModelFactory({loggerTags:e,sessionId:t}){return Rd({baseUrl:this.baseUrl,apiKey:this.apiKey,sessionId:t,loggerTags:e})}};function xd({logger:r,orgId:e,client:t,gitMetadata:n,regenerateCache:o,alwaysSaveCache:i,noCache:a}){return a?new Cc:new rf(r,e,t,n,{alwaysSaveCache:i,regenerateCache:o})}var rf=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=Im(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&&Qg({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 WM({socket:r,logger:e,globalStateManager:t,authorization:n}){let o=r.id,i=t.getSession(o);i&&n&&i.logFilePath&&pV({testId:i.metadata.testId,sessionId:o,logFilePath:i.logFilePath,authorization:n,logger:e}),await t.removeSession(o,e)}async function pV({testId:r,sessionId:e,logFilePath:t,authorization:n,logger:o}){try{let i;try{i=await Md.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 Md.unlink(t);return}let a=new Yt(n),{uploadUrl:s}=await a.generateMobileLogcatUploadUrl({testId:r,sessionId:e}),c=await Md.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 Md.unlink(t)}catch(i){o.warn({err:i,logFilePath:t},"Failed to delete temp logcat file")}}}var mV=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},jM={event:"cancel",createHandler:mV};var gV=({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})}},$M={event:"fetchA11yTree",createHandler:gV};import{diff as zV}from"deep-object-diff";import{cloneDeep as HV}from"lodash-es";import{cloneDeep as kV}from"lodash-es";import{randomUUID as hV}from"crypto";var fV=3;async function qM(r){let{results:e,fixtures:t,work:n}=r,{logger:o}=t,i=e[e.length-1],a=yV(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 SV(r)}catch(s){return o.warn({err:s},"Error during failure recovery attempt, continuing..."),null}}async function SV(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 gC(c,l,t,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=o.map(M=>Fo(M)),h=u.description.trim(),f=u?.settings?.ai?.failureRecoveryInstructions?.trim()||void 0,{scenario:b,thoughts:T,instructions:C}=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:C},"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(!C)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let x={id:hV(),type:"MOBILE_AI_ACTION_STEP",text:C},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,Ge.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{Ge.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 yV(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":ly.some(n=>t.includes(n))?"The failed step is an irrecoverable configuration error":(e.state.failureRecoveryAttempts??0)>fV?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}async function KM(r){let e=Date.now(),t=r.fixtures.controller;try{return await bV(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 bV({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await EV({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(),pC({result:c,...dC(d)}),c}async function EV({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 YM}from"crypto";import{diff as TV}from"deep-object-diff";import{cloneDeep as vV}from"lodash-es";async function XM({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=YM();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?vV(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=YM(),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=TV(u,m);p&&Object.keys(p).length>0&&a.info({diffs:Mi(p)},"Updated cache")}return d}import{streamText as LV}from"ai";import{randomUUID as NV}from"crypto";var _d=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 PV,stepCountIs as OV}from"ai";var nf="get_emulator_state",Id="finish";import JM from"dedent";var RV=JM`
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.waitForScreenshotStability({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 Qn(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 Qn(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 j(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"INSTALL_APP":return new Sd(this.constructPerformerParams()).doInstallApk(e);case"UNINSTALL_APP":return new Ad(this.constructPerformerParams()).doUninstallApk(e);case"ADD_FILE":{let n=await BM(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 yM({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??jl;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 GM({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,C=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=Ii.parse(O[bo]),M=Ii.parse(O[Ya]),D={...o.emulator,...n.settings?.emulator},X=n.settings?.defaultApkFilePath?.trim()||M,J=d.getSession(p);if(J){if(e.info("Reconnecting to existing Android session"),J.local)return r.emit("session",J.metadata),J.softDeleted=!1,J.metadata;throw new Error("Restoring existing remote emulator sessions is not supported. Please reconnect to a new emulator.")}let K;if(D.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 tr=n.settings?.emulator?.localEmulatorSettings?.avdId?.trim()||v;if(!tr)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 ${bo}.`);K={avdId:tr,apkToInstall:T?{channel:T,tag:C}:void 0,apkFilePath:X}}else K={region:D.region,apkToInstall:T?{channel:T,tag:C}:void 0,osVersion:D.remoteEmulatorSettings?.androidVersion};let we=Date.now(),{driver:re,cleanup:z,emulatorName:ce,adbPort:fe,limbarClient:Je,limbarToken:Le,limbarUrl:Lt,playwrightDevice:Wt}=await i({socket:r,logger:e,creationOpts:K}),Ne=HM.join(eV(),`logcat-logs-${t}-${b}-${p}.txt`),ut=await Mu({driver:re,onLogs:tr=>{r.emit("logcatLogs",tr)},logFilePath:Ne});e.info({adbPort:fe,apkChannel:T,apkTag:C,duration:Date.now()-we,emulatorName:ce},"Android emulator session initiated"),e=e.child({emulator:ce});let sn=await a(t,e),An=await s(t,e),ei=await c(t,e),Al=u?await u(t):void 0,no=new Ci({variablesFromEnvironment:O,envName:R,testName:f}),Rn=await la.init({driver:re,generator:sn,logger:e,limbarClient:Je,playwrightDevice:Wt,aiSettings:{...o.ai,useMemory:o.ai?.useMemory!==!1,...n.settings?.ai},options:{emulator:{...D,browserSettings:o.browser}},fixtures:{storage:x,browserEnricher:ei,browserGenerator:An,localCodeEvalTools:Al,testContext:no},orgId:t,adbPort:fe,abortController:new AbortController}),ti=await Rn.getViewportBounds();if(!r.connected)throw await Rn.cleanup(),await ut(),await z(),new Error("Socket not connected anymore, not proceeding with Android session setup");let Ca=tV({socket:r,testContext:no}),oo=async()=>{clearInterval(Ca);try{await Promise.allSettled([Rn.cleanup(),ut(),z()])}catch(tr){e.warn({err:tr},"Failed to clean up emulator in socket server")}},V={sessionId:p,testId:b,orgId:t,emulatorName:ce,testName:f,limbarUrl:Lt,limbarToken:Le,viewportBounds:ti};return d.registerSession(p,{controller:Rn,cleanup:oo,emulatorName:ce,local:D.region==="local",metadata:V,logFilePath:Ne}),r.emit("session",V),V}function tV({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}import Md from"fs/promises";import{z as cV}from"zod";var F="v1",Qh="mobile-cli",Ko="0.20.2";var rV=9e4,nV=3,oV=1500,iV=15e3,Dr=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function aV(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var Zh=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Ko&&(e[Rc]=Ko),Qh&&(e[IE]=Qh),e}async sendRequest(e,t){let{retries:n=nV,requestTimeoutMs:o=rV,initialRetryDelayMs:i=oV,maxRetryDelayMs:a=iV,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 zn),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 aV(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 Zh{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[_E]:this.mode??""}}};import{createAnthropic as sV}from"@ai-sdk/anthropic";function lV(r){let{apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o}=r,i={Authorization:`Bearer ${e}`,[Rc]:Ko??"",...t&&{[OE]:t},...n||{}};return o&&(i[PE]=JSON.stringify(o)),i}var Rd=r=>e=>{let t=lV(r);return sV({baseURL:`${r.baseUrl}/v1/llm/anthropic/${e}`,headers:t,apiKey:r.apiKey})(e)};var Yo=class extends on{agentConfig;constructor(e,t){let n={...vb,...e};super(t),this.agentConfig=n}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:t.abortSignal});return sb.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${F}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Ko,...e},signal:t.abortSignal});return ab.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${F}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return cV.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(`/${F}/web-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return UE.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(`/${F}/web-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return _m.parse(o)}async getLintStepResult(e,t){let n={...e,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/lint/step`,{method:"POST",body:n,signal:t.abortSignal});return FE.parse(o)}async getLintMcpCopilotMessageResult(e,t){let n={message:e.message,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:t.abortSignal});return NE.parse(o)}async getMcpCopilotConversationEvaluation(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/mcp-copilot-conversation-evaluator`,{method:"POST",body:n,signal:t.abortSignal});return DE.parse(o)}async getMcpCopilotChatSummary(e,t){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/mcp-copilot-chat-summary`,{method:"POST",body:n,signal:t.abortSignal});return kE.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(`/${F}/web-agent/visual-assertion`,{method:"POST",body:n,signal:t.abortSignal});return _m.parse(o)}async getAiActionCommand(e,t){let n=await this.sendRequest(`/${F}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return LE.parse(n)}async getMultiturnAiActionCommand(e,t){return await this.sendRequest(`/${F}/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(`/${F}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return Lp.parse(n)}async getReverseMappedDescription(e,t){let n=await this.sendRequest(`/${F}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return BE.parse(n)}async getTextExtraction(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${F}/web-agent/text-extraction`,{method:"POST",body:n,signal:t.abortSignal});return Pp.parse(o)}async getPageSummary(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/page-summary`,{method:"POST",body:n,signal:t.abortSignal});return zy.parse(o)}async getSmartWaitingDecision(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/web-agent/smart-waiting`,{method:"POST",body:n,signal:t.abortSignal});return Hy.parse(o)}async getTestResultClassification(e,t){let n=await this.sendRequest(`/${F}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Sp.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${F}/web-agent/extract-keywords`,{method:"POST",body:e,signal:t.abortSignal});return Tb.parse(n)}async getAutohealingProposal(e,t){let n=await this.sendRequest(`/${F}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Dy.parse(n)}async getFailureRecoveryProposal(e,t){let n=await this.sendRequest(`/${F}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Uy.parse(n)}async getFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${F}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Fy.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${F}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return Yf.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return Rd({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as ef}from"zod";var Yt=class extends on{constructor(e){super({...e,mode:void 0})}getAppUrl(){return bs(this.baseUrl)}async getAuthInfo(){let e=await this.sendRequest(`/${F}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3,onFailedRequest:t=>{w.warn(`API key check failed: ${t.message}`)}});return QE.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${F}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return KE.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${F}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return HE.parse(t)}async updateStepCaches(e,t){await this.sendRequest(`/${F}/cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,t){let n=await this.sendRequest(`/${F}/cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return VE.parse(n)}async updateMobileStepCaches(e,t){await this.sendRequest(`/${F}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,t){let n=await this.sendRequest(`/${F}/mobile-cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return WE.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${F}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return zE.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${F}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return JE.parse(t)}async uploadOnDemandScreenshot(e){return await this.sendRequest(`/${F}/on-demand-screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${F}/on-demand-screenshots/${e.id}`}}async fetchOnDemandScreenshot(e){let t={};return{data:await this.sendRequest(`/${F}/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(`/${F}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ZE.parse(e)}async acquireCacheLock(e,t){let n=await this.sendRequest(`/${F}/result-cache/lock`,{method:"POST",body:e,signal:t,retries:3,requestTimeoutMs:3e4});return fT.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${F}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${F}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${F}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${F}/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(`/${F}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return eT.parse(t)}async bulkGetRunGroupStatus(e){let t={runGroupIds:e},n=await this.sendRequest(`/${F}/run-groups/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return rb.array().parse(n)}async uploadProposedSteps(e,t){try{await this.sendRequest(`/${F}/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(`/${F}/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(`/${F}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return tT.parse(t)}async patchTestFragment(e,t){await this.sendRequest(`/${F}/test-fragments/${e}`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,t){let n=await this.sendRequest(`/${F}/results/tests/${e}`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return rT.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${F}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return nT.parse(e)}async startProcessingResultsUpload(e,t){let n=await this.sendRequest(`/${F}/results/uploads/${e}/process`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return oT.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${F}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bT.parse(t)}catch(t){return e.error({err:t},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,t){try{await this.sendRequest(`/${F}/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(`/${F}/git/github/${e}/${t}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(a)}async getCommitFromGithub(e,t,n){let o=await this.sendRequest(`/${F}/git/github/${e}/${t}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(o)}async getMergedBranchFromGithub(e,t,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${F}/git/github/${e}/${t}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Lm.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(`/${F}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ys.parse(a)}async getCommitFromGitlab(e,t){let n=encodeURIComponent(e),o=await this.sendRequest(`/${F}/git/gitlab/${n}/commits/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ys.parse(o)}async getMergedBranchFromGitlab(e,t,n){let o=encodeURIComponent(t),i=encodeURIComponent(e),a=await this.sendRequest(`/${F}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Lm.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${F}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ef.record(ef.string(),ef.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${F}/quarantine`,{method:"GET"});return iT.parse(e)}async quarantineTest(e,t,n){await this.sendRequest(`/${F}/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(`/${F}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let t=await this.sendRequest(`/${F}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return aT.parse(t)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${F}/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(`/${F}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return lT.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${F}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${F}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return cT.parse(e)}async getLimbarAssetDownloadUrl(e,t){let n=await this.sendRequest(`/${F}/limbar/assets/${e}/${t}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return uT.parse(n)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${F}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}async createIosEmulator(e){let t=await this.sendRequest(`/${F}/limbar/ios`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return sT.parse(t)}async extendIosEmulatorTtl(e){try{await this.sendRequest(`/${F}/limbar/ios/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async deleteIosEmulator(e){await this.sendRequest(`/${F}/limbar/ios/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async generateMobileLogcatUploadUrl(e){let t=await this.sendRequest(`/${F}/logcat/mobile/upload`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Vb.parse(t)}};async function tf(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(w.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),w.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return w.debug("Got auth info from API"),n}var wd=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(`/${F}/web-agent/template-matching`,{method:"POST",body:e,signal:t?.signal});return Xf.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 bs(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 uV,en as dV}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 uV({locale:dV}),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 VM(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var Cd=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await VM(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(`/${F}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return $b.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(`/${F}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Yb.parse(o)}async getMobileFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${F}/mobile-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Jb.parse(n)}getVercelAnthropicModelFactory({loggerTags:e,sessionId:t}){return Rd({baseUrl:this.baseUrl,apiKey:this.apiKey,sessionId:t,loggerTags:e})}};function xd({logger:r,orgId:e,client:t,gitMetadata:n,regenerateCache:o,alwaysSaveCache:i,noCache:a}){return a?new Cc:new rf(r,e,t,n,{alwaysSaveCache:i,regenerateCache:o})}var rf=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=Im(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&&Qg({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 WM({socket:r,logger:e,globalStateManager:t,authorization:n}){let o=r.id,i=t.getSession(o);i&&n&&i.logFilePath&&pV({testId:i.metadata.testId,sessionId:o,logFilePath:i.logFilePath,authorization:n,logger:e}),await t.removeSession(o,e)}async function pV({testId:r,sessionId:e,logFilePath:t,authorization:n,logger:o}){try{let i;try{i=await Md.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 Md.unlink(t);return}let a=new Yt(n),{uploadUrl:s}=await a.generateMobileLogcatUploadUrl({testId:r,sessionId:e}),c=await Md.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 Md.unlink(t)}catch(i){o.warn({err:i,logFilePath:t},"Failed to delete temp logcat file")}}}var mV=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},jM={event:"cancel",createHandler:mV};var gV=({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})}},$M={event:"fetchA11yTree",createHandler:gV};import{diff as zV}from"deep-object-diff";import{cloneDeep as HV}from"lodash-es";import{cloneDeep as kV}from"lodash-es";import{randomUUID as hV}from"crypto";var fV=3;async function qM(r){let{results:e,fixtures:t,work:n}=r,{logger:o}=t,i=e[e.length-1],a=yV(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 SV(r)}catch(s){return o.warn({err:s},"Error during failure recovery attempt, continuing..."),null}}async function SV(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 gC(c,l,t,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=o.map(M=>Fo(M)),h=u.description.trim(),f=u?.settings?.ai?.failureRecoveryInstructions?.trim()||void 0,{scenario:b,thoughts:T,instructions:C}=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:C},"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(!C)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let x={id:hV(),type:"MOBILE_AI_ACTION_STEP",text:C},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,Ge.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{Ge.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 yV(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":ly.some(n=>t.includes(n))?"The failed step is an irrecoverable configuration error":(e.state.failureRecoveryAttempts??0)>fV?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}async function KM(r){let e=Date.now(),t=r.fixtures.controller;try{return await bV(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 bV({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await EV({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(),pC({result:c,...dC(d)}),c}async function EV({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 YM}from"crypto";import{diff as TV}from"deep-object-diff";import{cloneDeep as vV}from"lodash-es";async function XM({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=YM();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?vV(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=YM(),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=TV(u,m);p&&Object.keys(p).length>0&&a.info({diffs:Mi(p)},"Updated cache")}return d}import{streamText as LV}from"ai";import{randomUUID as NV}from"crypto";var _d=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 PV,stepCountIs as OV}from"ai";var nf="get_emulator_state",Id="finish";import JM from"dedent";var RV=JM`
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
  `,QM=r=>JM`
4371
4371
  <background>
@@ -4404,7 +4404,7 @@ ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Moment
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 Bd(r,e,t){let n=$W(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 nC({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 gl(c,e)}});return{...o,steps:i.steps}}async function C_({filePath:r,steps:e,settings:t,labels:n,folder:o,project:i,momenticFiles:a,schemaVersion:s}){let c=to.isAbsolute(r)?r:to.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=uc.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??[])T_({content:h,schemaVersion:go,momenticFiles:a,project:i});vr.writeFileSync(c,g,"utf-8"),an(c,i.config)}function x_(r,e,t){let n=to.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=uc.extend({steps:ya.record(ya.string(),ya.unknown()).array()}).parse(i),s=to.basename(r,".test.yaml"),c,l;if(e.name&&e.name!==s){let m=`${wr(e.name)}.test.yaml`;if(c=to.join(to.dirname(r),m),l=to.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 qW}from"crypto";import ro from"fs";import Ea from"path";var M_=new Set([".DS_Store","__MACOSX"]),__={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 KW(r,e,t){if(__[t]){let 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 gf=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 I_(r,e){try{let t=Ea.join(e,"metadata.json");return xc.parse(JSON.parse(ro.readFileSync(t,"utf-8")))}catch{throw new gf(r,e)}}function P_(r,e,t){let n=qW(),o=r.child({runGroupId:n});ro.rmSync(e,{recursive:!0,force:!0});let i=ro.readdirSync(t).filter(c=>!M_.has(c)).map(c=>Ea.join(t,c));if(i.length===0)throw new Error(`No run groups found in results path: ${t}`);ro.mkdirSync(e,{recursive:!0});let a={...I_(t,i[0]),id:n};for(let c of i){let l=Ea.join(c,"runs");if(!ro.existsSync(l))continue;let u=I_(t,c);o.info({oldRunGroupId:u.id},"Merging run groups");for(let m in u){if(m==="id")continue;let p=m;a[p]=KW(a,u,p)}let d=ro.readdirSync(l);for(let m of d){if(M_.has(m))continue;let p=Ea.join(l,m),g=Ea.join(e,"runs",m);ro.cpSync(p,g,{recursive:!0})}}let s=Ea.join(e,"metadata.json");ro.writeFileSync(s,JSON.stringify(a,null,2))}import O_ from"adm-zip";import hf from"fs";import zd from"path";function YW(r){let e=new O_,t=zd.join(r,"metadata.json"),n=xc.parse(JSON.parse(hf.readFileSync(t,"utf-8")));e.addLocalFile(t);for(let o of hf.readdirSync(zd.join(r,"runs"))){if(!o.endsWith(".zip"))continue;let i=o.replace(/\.zip$/,""),a=new O_(zd.join(r,"runs",o));for(let s of a.getEntries())s.isDirectory||e.addFile(zd.join("runs",i,s.entryName),s.getData())}return{runGroupId:n.id,buffer:e.toBuffer()}}async function Hd(r){let{client:e,consoleLogger:t,resultsPath:n}=r;if(!hf.existsSync(n)){t.warn("Results path does not exist, skipping upload.");return}let o=new Cd(e);try{let{runGroupId:i,buffer:a}=YW(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 XW from"adm-zip";import wt from"fs";import er from"path";var hl=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(er.join(this.filePath,e))}cwd(){return this.filePath}mkdir(e){wt.mkdirSync(er.join(this.filePath,e),{recursive:!0})}readFile(e){let t=er.join(this.filePath,e);if(wt.existsSync(t))return wt.readFileSync(t)}storeFile(e){let{name:t,contents:n}=e,o=er.join(this.filePath,t);try{wt.writeFileSync(o,n)}catch{}}createFileStream(e){let t=er.join(this.filePath,e);return wt.createWriteStream(t)}createRunArchive(e){return new ff(er.join(this.filePath,"runs"),e)}},ff=class{constructor(e,t){this.filePath=e;this.tempPath=er.join(e,`temp-storage-${t}`),this.finalPath=er.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=er.join(this.tempPath,e);if(wt.existsSync(t))return wt.readFileSync(t)}mkdir(e){wt.mkdirSync(er.join(this.tempPath,e),{recursive:!0})}cd(e){return new hl(er.join(this.tempPath,e))}cwd(){return this.tempPath}storeFile(e){let{name:t,contents:n}=e,o=er.join(this.tempPath,t);wt.writeFileSync(o,n)}createFileStream(e){let t=er.join(this.tempPath,e);return wt.createWriteStream(t)}close(){let e=new XW;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 JW from"adm-zip";import{randomUUID as QW}from"crypto";import St from"fs";import Ct from"path";function k_(r){try{return St.existsSync(r)?JSON.parse(St.readFileSync(r,"utf-8")):void 0}catch{return}}function L_(r){return St.existsSync(r)?St.readFileSync(r,"utf-8").split(`
4407
- `).map(t=>t.trim()).filter(t=>t.length>0):[]}function ZW(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=k_(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 N_(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 Gd=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}-${QW()}`);St.mkdirSync(n,{recursive:!0}),new JW(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 ZW(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=k_(Ct.join(o,"console.json")),a=bm.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 L_(i)){let d=hs.safeParse(D_(u));d.success&&(s[d.data.id]=d.data)}let c={},l=L_(a);for(let u=0;u<l.length;u++){let d=l[u],m=fs.safeParse(D_(d));if(!m.success)continue;let p=`${m.data.startedDateTime}-${u}`;c[p]=m.data}if(Object.keys(c).length!==0)return Tm(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=N_(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=N_(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 D_(r){try{return JSON.parse(r)}catch{return}}import Qo from"fs";import tI from"body-parser";import vj from"cors";import Aj from"dedent";import{Router as nj}from"express";import Vt from"fs";import{globSync as oj}from"glob";import Tt from"path";import Vd from"fs";import ej from"path";var tj=new wu(30,60*1e3),Ef="https://api.momentic.ai",yf,U_=r=>{Ef=r},Tf=()=>Ef;var fl=()=>yf;var Ta,bf,F_,B_=async r=>{if(yf&&Ta&&F_)return Ta;let e=new Yt({baseUrl:Ef,apiKey:r,logger:w});yf=e;try{let t=await e.getAuthInfo();return Ta=t.orgId,bf=t.userId,F_=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},Wd=()=>{if(!bf)throw new Error("Your user ID is invalid.");return bf};var vf,Sf,z_=(r,e)=>{vf=r,Sf?.abort(),Sf=new AbortController;let t=Sf.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=ej.resolve(r.rootDir,o.envFile);try{if(Vd.lstatSync(i).isSymbolicLink())return;Vd.existsSync(i)&&n.push(i)}catch(a){w.warn({err:a},`Failed to check if env file ${i} exists`)}});try{rj({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){w.error({err:o},"Failed to start config file watchers")}},Oe=()=>vf;function rj({filesToWatch:r,revalidator:e,signal:t,project:n}){w.debug("Starting watch on the following files:"),r.forEach(o=>{w.debug(`- ${o}`)}),r.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(tj.increment("setLocalProject")&&w.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.`),vf=await Promise.resolve(e(n.configFilePath)))};Vd.watchFile(o,{persistent:!1},i);let a=()=>{Vd.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 yl=nj();function Sl(r){let e=Oe(),t=Tt.dirname(e.configFilePath);return Tt.join(t,...r)}function ij(r){let e=Oe(),t=Tt.dirname(e.configFilePath),n=Tt.relative(t,r);return n?n.split(Tt.sep):[]}function aj(r,e){let t=Vt.statSync(r),n=ij(r);return Am.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})}yl.post("/",Me(async(r,e,t)=>{let n;try{n=mE.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=Sl(n);if(!Vt.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(Tt.sep)}`});return}if(!Vt.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(bc),l=oj("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let m=Tt.join(o,d);return aj(m,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));yl.put("/",Me(async(r,e,t)=>{let n;try{n=gE.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=Sl(n);if(Vt.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(Tt.sep)}`,pathSegments:n});return}Vt.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(Tt.sep)}`,pathSegments:n};e.status(201).json(i)}));yl.patch("/",Me(async(r,e,t)=>{let n,o;try{let l=hE.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=Sl(n),a=Sl(o);if(!Vt.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(Tt.sep)}`});return}if(Vt.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(Tt.sep)}`});return}let s=Tt.dirname(a);Vt.existsSync(s)||Vt.mkdirSync(s,{recursive:!0}),Vt.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)}));yl.delete("/",Me(async(r,e,t)=>{let n,o=!0;try{let c=fE.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=Sl(n);if(!Vt.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(Tt.sep)}`,pathSegments:n});return}if(!Vt.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}if(o)Vt.rmSync(i,{recursive:!0,force:!0});else{if(Vt.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Vt.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Af=yl;import{Router as cj}from"express";import{hostname as sj}from"os";var lj="0.20.1",bl=ki({app:"desktop-server",hostname:sj(),disableConsoleLogs:!0}).child({cliVersion:lj});(async()=>{try{let r=await pl(bl);r.gitBranchName&&bl.addBinding("branch",r.gitBranchName)}catch{}})();var H_=cj();H_.get("/",async(r,e)=>{let t=Oe(),n=fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await Sa(bl,n,t);e.status(200).json(o)});var Rf=H_;import Rj from"events";import rI,{Router as wj}from"express";import Cj from"http";import xj from"path";var jd=new Ld;import{Router as dj}from"express";import{existsSync as pj}from"fs";import mj from"path";import{hostname as uj}from"os";var wf="0.20.1",ct=ki({app:"mobile-desktop-server",hostname:uj(),disableConsoleLogs:!0}).child({cliVersion:wf});(async()=>{try{let r=await pl(ct);r.gitBranchName&&ct.addBinding("branch",r.gitBranchName)}catch{}})();var Cf=dj();Cf.get("/",Me(async(r,e)=>{let t=fl();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));Cf.post("/upload-url",Me(async(r,e)=>{let t;try{t=AE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=fl();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=mj.resolve(t.filePath);if(!pj(o)){e.status(400).json({error:`File not found: ${o}`});return}await xu({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:ct}),e.sendStatus(204)}));var G_=Cf;import{Router as fj}from"express";import{Router as gj}from"express";import V_ from"fs";import hj from"path";var El=gj();async function xf(r){return(await R_(r,ct)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){w.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)}El.get("/",Me(async(r,e)=>{let t=Oe(),n=await Zt(t),o=await xf(n);e.status(200).json(o)}));El.get("/:moduleId",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await Zt(Oe()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await mf(n,t,w);e.json(o)}catch(o){e.status(400).json({err:o})}}));El.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=wE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Oe(),o=await Zt(n);v_({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:w,project:n}),e.status(201).json({message:"ok"})}));El.post("/",Me(async(r,e)=>{let t;try{t=CE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}try{fo(t.name)}catch(c){e.status(400).json({error:`Invalid module name: ${c}`});return}let n=Oe(),i=(await Zt(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=hj.join(n.rootDir,t.folderPath??"");if(!V_.existsSync(a)||!V_.statSync(a).isDirectory()){e.status(400).json({error:`The folder configured for mobile module creation does not exist: ${a}`});return}let s=await A_({...t,folder:a,project:n});e.status(201).json(s)}));var W_=El;var j_=fj();j_.get("/",Me(async(r,e)=>{let t=Oe(),n=await Zt(t),o=await xf(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 $_=j_;import{Router as Sj}from"express";var $d=Sj();$d.get("/",Me((r,e)=>{let t=u_(Oe(),ct);e.status(200).json(t)}));$d.get("/names",Me((r,e)=>{let n=Oe().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));$d.post("/",Me((r,e)=>{let t;try{t=RE.parse(r.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{fo(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,kd(i,n.configFilePath);let a=Xo(t.name,n,ct);e.status(201).json(a)}));var q_=$d;import{Router as yj}from"express";var K_=yj();K_.get("/",(r,e)=>{e.status(200).json({userId:Wd(),orgId:va(),cliVersion:wf??"0.0.0"})});var Y_=K_;import{Router as bj}from"express";var X_=bj();X_.get("/",Me(async(r,e)=>{let t=r.query.sessionId;if(!t){e.status(400).json({packages:[]});return}let n=jd.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 ZW(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=k_(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 N_(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 Gd=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}-${QW()}`);St.mkdirSync(n,{recursive:!0}),new JW(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 ZW(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=k_(Ct.join(o,"console.json")),a=bm.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 L_(i)){let d=hs.safeParse(D_(u));d.success&&(s[d.data.id]=d.data)}let c={},l=L_(a);for(let u=0;u<l.length;u++){let d=l[u],m=fs.safeParse(D_(d));if(!m.success)continue;let p=`${m.data.startedDateTime}-${u}`;c[p]=m.data}if(Object.keys(c).length!==0)return Tm(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=N_(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=N_(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 D_(r){try{return JSON.parse(r)}catch{return}}import Qo from"fs";import tI from"body-parser";import vj from"cors";import Aj from"dedent";import{Router as nj}from"express";import Vt from"fs";import{globSync as oj}from"glob";import Tt from"path";import Vd from"fs";import ej from"path";var tj=new wu(30,60*1e3),Ef="https://api.momentic.ai",yf,U_=r=>{Ef=r},Tf=()=>Ef;var fl=()=>yf;var Ta,bf,F_,B_=async r=>{if(yf&&Ta&&F_)return Ta;let e=new Yt({baseUrl:Ef,apiKey:r,logger:w});yf=e;try{let t=await e.getAuthInfo();return Ta=t.orgId,bf=t.userId,F_=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},Wd=()=>{if(!bf)throw new Error("Your user ID is invalid.");return bf};var vf,Sf,z_=(r,e)=>{vf=r,Sf?.abort(),Sf=new AbortController;let t=Sf.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=ej.resolve(r.rootDir,o.envFile);try{if(Vd.lstatSync(i).isSymbolicLink())return;Vd.existsSync(i)&&n.push(i)}catch(a){w.warn({err:a},`Failed to check if env file ${i} exists`)}});try{rj({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){w.error({err:o},"Failed to start config file watchers")}},Oe=()=>vf;function rj({filesToWatch:r,revalidator:e,signal:t,project:n}){w.debug("Starting watch on the following files:"),r.forEach(o=>{w.debug(`- ${o}`)}),r.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(tj.increment("setLocalProject")&&w.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.`),vf=await Promise.resolve(e(n.configFilePath)))};Vd.watchFile(o,{persistent:!1},i);let a=()=>{Vd.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 yl=nj();function Sl(r){let e=Oe(),t=Tt.dirname(e.configFilePath);return Tt.join(t,...r)}function ij(r){let e=Oe(),t=Tt.dirname(e.configFilePath),n=Tt.relative(t,r);return n?n.split(Tt.sep):[]}function aj(r,e){let t=Vt.statSync(r),n=ij(r);return Am.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})}yl.post("/",Me(async(r,e,t)=>{let n;try{n=mE.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=Sl(n);if(!Vt.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(Tt.sep)}`});return}if(!Vt.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(bc),l=oj("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let m=Tt.join(o,d);return aj(m,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));yl.put("/",Me(async(r,e,t)=>{let n;try{n=gE.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=Sl(n);if(Vt.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(Tt.sep)}`,pathSegments:n});return}Vt.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(Tt.sep)}`,pathSegments:n};e.status(201).json(i)}));yl.patch("/",Me(async(r,e,t)=>{let n,o;try{let l=hE.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=Sl(n),a=Sl(o);if(!Vt.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(Tt.sep)}`});return}if(Vt.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(Tt.sep)}`});return}let s=Tt.dirname(a);Vt.existsSync(s)||Vt.mkdirSync(s,{recursive:!0}),Vt.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)}));yl.delete("/",Me(async(r,e,t)=>{let n,o=!0;try{let c=fE.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=Sl(n);if(!Vt.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(Tt.sep)}`,pathSegments:n});return}if(!Vt.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(Tt.sep)}`});return}if(o)Vt.rmSync(i,{recursive:!0,force:!0});else{if(Vt.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Vt.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Af=yl;import{Router as cj}from"express";import{hostname as sj}from"os";var lj="0.20.2",bl=ki({app:"desktop-server",hostname:sj(),disableConsoleLogs:!0}).child({cliVersion:lj});(async()=>{try{let r=await pl(bl);r.gitBranchName&&bl.addBinding("branch",r.gitBranchName)}catch{}})();var H_=cj();H_.get("/",async(r,e)=>{let t=Oe(),n=fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await Sa(bl,n,t);e.status(200).json(o)});var Rf=H_;import Rj from"events";import rI,{Router as wj}from"express";import Cj from"http";import xj from"path";var jd=new Ld;import{Router as dj}from"express";import{existsSync as pj}from"fs";import mj from"path";import{hostname as uj}from"os";var wf="0.20.2",ct=ki({app:"mobile-desktop-server",hostname:uj(),disableConsoleLogs:!0}).child({cliVersion:wf});(async()=>{try{let r=await pl(ct);r.gitBranchName&&ct.addBinding("branch",r.gitBranchName)}catch{}})();var Cf=dj();Cf.get("/",Me(async(r,e)=>{let t=fl();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));Cf.post("/upload-url",Me(async(r,e)=>{let t;try{t=AE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=fl();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=mj.resolve(t.filePath);if(!pj(o)){e.status(400).json({error:`File not found: ${o}`});return}await xu({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:ct}),e.sendStatus(204)}));var G_=Cf;import{Router as fj}from"express";import{Router as gj}from"express";import V_ from"fs";import hj from"path";var El=gj();async function xf(r){return(await R_(r,ct)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){w.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)}El.get("/",Me(async(r,e)=>{let t=Oe(),n=await Zt(t),o=await xf(n);e.status(200).json(o)}));El.get("/:moduleId",Me(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await Zt(Oe()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await mf(n,t,w);e.json(o)}catch(o){e.status(400).json({err:o})}}));El.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=wE.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Oe(),o=await Zt(n);v_({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:w,project:n}),e.status(201).json({message:"ok"})}));El.post("/",Me(async(r,e)=>{let t;try{t=CE.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}try{fo(t.name)}catch(c){e.status(400).json({error:`Invalid module name: ${c}`});return}let n=Oe(),i=(await Zt(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=hj.join(n.rootDir,t.folderPath??"");if(!V_.existsSync(a)||!V_.statSync(a).isDirectory()){e.status(400).json({error:`The folder configured for mobile module creation does not exist: ${a}`});return}let s=await A_({...t,folder:a,project:n});e.status(201).json(s)}));var W_=El;var j_=fj();j_.get("/",Me(async(r,e)=>{let t=Oe(),n=await Zt(t),o=await xf(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 $_=j_;import{Router as Sj}from"express";var $d=Sj();$d.get("/",Me((r,e)=>{let t=u_(Oe(),ct);e.status(200).json(t)}));$d.get("/names",Me((r,e)=>{let n=Oe().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));$d.post("/",Me((r,e)=>{let t;try{t=RE.parse(r.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{fo(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,kd(i,n.configFilePath);let a=Xo(t.name,n,ct);e.status(201).json(a)}));var q_=$d;import{Router as yj}from"express";var K_=yj();K_.get("/",(r,e)=>{e.status(200).json({userId:Wd(),orgId:va(),cliVersion:wf??"0.0.0"})});var Y_=K_;import{Router as bj}from"express";var X_=bj();X_.get("/",Me(async(r,e)=>{let t=r.query.sessionId;if(!t){e.status(400).json({packages:[]});return}let n=jd.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){ct.error({err:o},"Error fetching installed packages from the session controller"),e.status(200).json({packages:[]})}}));var J_=X_;import{Router as Ej}from"express";import qd from"path";var Tl=Ej();Tl.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=TE.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 Zt(o);await C_({filePath:i,steps:n.steps,settings:n.settings,labels:n.labels,folder:o.rootDir,project:o,momenticFiles:a,schemaVersion:go});let s={message:"ok"};e.status(200).json(s)}));Tl.post("/",Me((r,e)=>{let t;try{t=EE.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{fo(n)}catch(g){e.status(400).json({error:g.message});return}let s=Oe(),c=qd.join(s.rootDir,...a),{fullPath:l,testId:u}=w_({name:n,description:o,steps:[],settings:i,folder:c}),d=qd.basename(l),m=qd.relative(s.rootDir,l),p={id:u,fileName:d,fullPath:l,relativeFilePath:m};e.status(201).json(p)}));Tl.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=qd.basename(n).replace(".test.yaml",""),i=Oe(),a=await Zt(i),c={...await Bd(n,ct,a),name:o};e.status(200).json(c)}));Tl.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=vE.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:x_(i,n,o).newRelativeTestPath};e.status(200).json(s)}));var Q_=Tl;import{Router as Tj}from"express";var Z_=Tj();Z_.get("/",Me((r,e)=>{let t=Oe(),n={ai:t.config.ai,displayRoot:t.config.displayRoot};e.status(200).json(n)}));var eI=Z_;var Kd=class extends ua{constructor(t,n){super(t,n);this.client=t;this.orgId=n}async fetchEnvironment(t,n){let o=Oe();return Xo(t,o,w)}};var nI="10mb";async function oI(r){let{serverPort:e,apiKey:t,momenticServerUrl:n,staticDir:o,initialProject:i,driverLogLevel:a,regenerateCache:s,alwaysSaveCache:c,noCache:l}=r;n&&U_(n),await B_(t);let u=va(),d=Wd(),m=r.logger.child({orgId:u,userId:d});z_(i,v=>fa({configFilePath:v}));let p=rI();p.use(vj()),p.use(tI.json({limit:nI})),p.use(tI.urlencoded({extended:!1,limit:nI}));let g=wj();if(g.use("/folders",Af),g.use("/entities",$_),g.use("/identify",Y_),g.use("/mobile-tests",Q_),g.use("/mobile-modules",W_),g.use("/assets",G_),g.use("/git",Rf),g.use("/environments",q_),g.use("/installed-packages",J_),g.use("/settings",eI),p.use("/api",g),p.use((v,M,D)=>{w.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&&(w.error({url:v.url,method:v.method,statusCode:M.statusCode},"Request completed in error on mobile-desktop-server"),ct.error({url:v.url,method:v.method,statusCode:M.statusCode},"Request completed in error on mobile-desktop-server"))}),D()}),p.use((v,M,D,X)=>{if(v instanceof Error&&v.message.includes("BadRequestError: request aborted")){D.status(400).send("Client disconnected");return}w.error({stack:v.stack,msg:v.message,err:v,url:M.url,method:M.method},"Unhandled exception leading to 500 on mobile-desktop-server"),ct.error({stack:v.stack,msg:v.message,err:v,url:M.url,method:M.method},"Unhandled exception leading to 500 on mobile-desktop-server"),D.status(500).send(`Internal Server Error: ${v.message}`)}),o){let v=rI.static(o,{setHeaders:M=>{M.setHeader("Cache-Control","no-cache")},redirect:!1});p.use(v),p.use("*",(M,D)=>{D.sendFile(xj.join(o,"index.html"))})}let h=Cj.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")?Mj(e):w.error(`An unexpected error occurred while starting the server: ${M.message}`),process.exit(1)}});let T={type:"API_KEY",baseUrl:Tf(),apiKey:t,logger:m},C=new Yt(T),x=Oe(),R={...T,mode:"interactive"},{dispose:O}=l_({baseServer:h,logger:m,authorization:T,globalStateManager:jd,getOrgId:()=>va(),getGitMetadata:async()=>await Sa(m,C,x),androidDriverFactory:async({socket:v,logger:M,creationOpts:D})=>{let X=Math.floor(Math.random()*1e4)+4e4,J=await Pc(X,"appium");return Cu({logger:M,driverLogLevel:a,apiClient:C,creationOpts:D,socket:v,appiumPort:J,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:Tf(),apiKey:t,logger:m,mode:"interactive"}),browserGeneratorFactory:async v=>new Yo(x.config.ai?.agentConfig,R),browserEnricherFactory:async v=>new ca(R,new Yo(x.config.ai?.agentConfig,R)),storageFactory:async v=>new Kd(C,v),cacheStorageFactory:async(v,M)=>xd({logger:m,orgId:v,client:C,gitMetadata:M,regenerateCache:s,noCache:l,alwaysSaveCache:c}),localToolsFactory:async()=>new pa({httpClient:C,fakerSeed:x.config.advanced?.fakerConstantSeed?gc:void 0}),keepSessionAlive:v=>C.extendAndroidEmulatorTtl(v),settingsFactory:async()=>({emulator:{},ai:{},browser:{},...x.config})});process.once("SIGUSR2",async()=>{return;try{await O(),await Ge.flush()}catch(v){w.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";w.info(v),m.info(v);try{await O(),await Ge.flush()}finally{h.close(()=>process.exit(0))}}),process.once("SIGINT",async()=>{w.info("SIGINT in Momentic mobile app received");try{await O(),await Ge.flush()}finally{h.close(()=>process.exit(0))}})}Rj.setMaxListeners(25);process.on("warning",r=>{ct.warn({err:r},`Node warning received on mobile-desktop-server: ${r.message}`)});process.on("uncaughtException",r=>{ct.error({err:r},"Uncaught exception on mobile-desktop-server"),w.error(`Oh no! The Momentic mobile desktop app encountered a fatal error \u{1F61E}. Error logs: ${r.message}`)});process.on("unhandledRejection",r=>{ct.error({reason:`${r}`,stack:r?.stack},"Uncaught exception on mobile-desktop-server (promise rejection)"),w.error(`Oh no! The Momentic mobile desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${r}`)});function Mj(r){w.error(Aj`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 Zj}from"node:stream";import e$ from"open";import Zo from"path";import{pipeline as t$}from"stream/promises";import{fileURLToPath as r$}from"url";import Mf from"fs";import Yd from"path";import{cwd as _j}from"process";async function _f({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=>Mf.existsSync(p)),m=_j();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(!Mf.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let g,h;try{g=Mf.statSync(p),h=g.isDirectory()}catch(b){s.warn({err:b},`Skipping path ${p} because it cannot be read`);return}let f=Yd.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 Mc("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=Yd.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=Yd.relative(t.rootDir,d),p=await Bd(d,s,e),g=Yd.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 Xd,Option as Fe}from"@commander-js/extra-typings";import{z as Ij}from"zod";var iI=58890;function Jd(r){let e=parseInt(r,10);if(isNaN(e))throw new Xd("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 Xd("API key is required.");return r}).makeOptionMandatory(),Qd=new Fe("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),If=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 Ij.string().url().parse(r),r}catch{throw new Xd("Not a valid URL.")}}),Pf=new Fe("-y, --yes","Skip all confirmation prompts.").env("CI"),Of=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."),Lf=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"),Nf=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}),Df=new Fe("--tag <tag>","Tag identifier for the asset."),aI=new Fe("--channel <channel>","Channel name for the asset."),kf=new Fe("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),sI=new Fe("--tag <tag>","Tag identifier for the asset.").makeOptionMandatory(),lI=new Fe("--env <env>","Environment to run all tests in (overrides test-level configuration)."),cI=new Fe("--local-avd-id <localAvdId>","Force tests to use a specific local Android Virtual Device (AVD) instead of remote emulators."),uI=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."),dI=new Fe("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(Jd),pI=new Fe("--shard-index <shardIndex>","The index of the shard to run tests for. Defaults to 1.").default(1).argParser(r=>{let e=Jd(r);if(e<1)throw new Xd("Shard index must be greater than 0.");return e}),mI=new Fe("--shard-count <shardCount>","The number of shards that tests are being run on. Defaults to 1.").default(1).argParser(Jd),Ff=new Fe("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),Uf=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."),Bf=new Fe("--exclude <excludePatterns...>","The inverted version of --include: a test that matches any of the provided exclusion patterns will be excluded from running."),gI=new Fe("--upload-results","Upload test results to Momentic Cloud.").default(!1),zf=new Fe("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),hI=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}),fI=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(Jd),SI=new Fe("--reporter <reporter>","Output report files in a standardized format to a local directory.").choices(Object.values(es)),yI=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 Kj}from"crypto";import{existsSync as Yj}from"fs";import{randomUUID as Oj}from"crypto";import{existsSync as Lj,statSync as Nj}from"fs";import{cloneDeep as Dj}from"lodash-es";import bI from"path";async function EI(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:Dj(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 kj({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,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 kj(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:C}=a,{regenerateCache:x,alwaysSaveCache:R,noCache:O,logLevel:v,localAvdId:M,localApkPath:D}=s;c!==0&&h("RETRY",`attempt ${c}/${l}`);let X={...a.project.config.emulator,...t.settings?.emulator},J={...T.config.ai,useMemory:T.config.ai?.useMemory!==!1,...t.settings?.ai},K=D?bI.resolve(D):void 0;if(K&&(!Lj(K)||!Nj(K).isFile()))throw new Error(`Local APK path "${K}" does not exist. Provide a valid file path via --local-apk-path.`);let we=C||t.settings?.defaultEnv,z=(we?Xo(we,T,p):void 0)?.variables??{},ce=typeof z[bo]=="string"?z[bo].trim():void 0,fe=typeof z[Ya]=="string"?z[Ya].trim():void 0,Je=xd({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"},Wt=new ma(Lt),Ne=new Yo(J.agentConfig,Lt),ut=new ca(Lt,Ne),sn=new pa({httpClient:m,fakerSeed:T.config.advanced?.fakerConstantSeed?gc:void 0}),An=Math.floor(Math.random()*1e4)+4e4,ei=await Pc(An,"appium"),Al=X.region==="local"?K??t.settings?.defaultApkFilePath?.trim()??(fe?bI.resolve(fe):void 0):void 0,no=f&&!Al?{channel:f,tag:b}:void 0,Rn,ti;if(M||X.region==="local"){if(ti=M??X.localEmulatorSettings?.avdId??ce,!ti)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 ${bo} key on the environment.`);Rn={avdId:ti,apkToInstall:no,apkFilePath:Al}}else Rn={region:X.region,apkToInstall:no,osVersion:X.remoteEmulatorSettings?.androidVersion??Nb};let Ca=Oj(),oo=p.child({runAttemptId:Ca}),V;try{V=await Cu({apiClient:m,logger:p,driverLogLevel:v,creationOpts:Rn,callbacks:{onStatusUpdate:dt=>{p.debug({status:dt},"Emulator status update")},onHeartbeatFailure:()=>{let dt="Appium heartbeat connection lost \u2014 possible ADB tunnel/emulator failure";w.warn(dt)},onHeartbeatRestored:()=>{let dt="Appium heartbeat connection restored";w.info(dt)},onLimbarConnectionStateChange:dt=>{dt==="disconnected"?w.warn("Emulator websocket connection lost. Emulator may be unavailable."):(dt==="reconnecting"||dt==="connecting")&&w.info("Emulator websocket is reconnecting...")}},appiumPort:ei,orgId:u,sessionId:Ca})}catch(dt){let Kf=`Fatal error creating Android driver, failing test run attempt (runId: ${n.runId})`;return p.error({err:dt},Kf),w.error({err:dt},Kf),{status:"FAILED",results:[],error:new E("UserConfigurationError",`Fatal error creating Android driver: ${dt.message}`)}}let tr=await e.startAttempt({emulatorName:V.emulatorName,runAttemptId:Ca});oo=oo.child(tr.loggerBindings||{});let CI=await Mu({driver:V.driver,onLogs:dt=>{tr.appendLogs(dt)}}),xI=new Ci({variablesFromEnvironment:z,envName:we,testName:t.name}),qf=await la.init({driver:V.driver,generator:Wt,logger:oo,limbarClient:V.limbarClient,playwrightDevice:V.playwrightDevice,orgId:u,adbPort:V.adbPort,options:{emulator:{...X,browserSettings:T.config.browser}},aiSettings:J,fixtures:{storage:Le,browserEnricher:ut,browserGenerator:Ne,localCodeEvalTools:sn,testContext:xI}}),io;try{io=await Pd({containerName:`mobile test ${t.name}`,fixtures:{controller:qf,logger:oo,cacheStorage:Je,usageTracker:g},work:{state:{failureRecoveryDisabled:J.failureRecovery===!1,failureRecoveryAttempts:0}},inputs:{testName:t.name,steps:t.steps,orgId:u,testMetadata:t},tracer:tr,callbacks:{}})}finally{await CI(),await V.cleanup(),await qf.cleanup()}await tr.finish({logger:oo,results:io.results,status:io.status,assetDetails:{avdId:ti,tag:no?.tag,channel:no?.channel}});let rp;if(io.status==="FAILED"&&io.terminalResult){let dt=io.terminalResult.message;dt?rp=E.fromMessage(dt):rp=new E("UnknownError",dt||"Unknown failure")}return{...io,error:rp}}import{existsSync as zj,mkdirSync as Hj,statSync as Gj}from"fs";import Vj from"path";import{z as q2e}from"zod";import Fj from"junit-report-builder";import Zd from"path";function Uj(r,e){if(e.name(r.testName).className(r.testName).file(Zd.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=fp[r.failureDetails?.classification?.reason||r.failureReason],n=r.failureDetails?.classification?.summary||Dl[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 Bj(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();Uj(d,m)}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(Zd.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(Zd.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=Fj.newBuilder();Bj(n,e,t),n.writeTo(Zd.join(r,`${e.suiteName}.xml`))}function Wj(r){return{testName:Vj.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 TI({logger:r,callbacks:e,format:t,params:n,runs:o,folder:i}){switch(zj(i)?Gj(i).isDirectory()||(w.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)):(w.info(`Reporter output directory '${i}' does not exist on disk, creating it now...`),Hj(i,{recursive:!0})),t){case"junit":{let a=o.map(Wj);Hf(i,n,a);return}case"allure":case"allure-json":w.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;case"playwright-json":w.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 jj}from"ts-debounce";var vl="0.20.1";function $j(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 qj(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Gf=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 Wo,Nr.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Es}/${t}.jpeg`,contents:n})}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;Ge.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:`${Es}/${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:qj(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(`${Es}/${e}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new Gf(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:$j(e.status),finishedAt:e.finishedAt}))))}},Vf=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(!Mf.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let g,h;try{g=Mf.statSync(p),h=g.isDirectory()}catch(b){s.warn({err:b},`Skipping path ${p} because it cannot be read`);return}let f=Yd.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 Mc("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=Yd.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=Yd.relative(t.rootDir,d),p=await Bd(d,s,e),g=Yd.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 Xd,Option as Fe}from"@commander-js/extra-typings";import{z as Ij}from"zod";var iI=58890;function Jd(r){let e=parseInt(r,10);if(isNaN(e))throw new Xd("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 Xd("API key is required.");return r}).makeOptionMandatory(),Qd=new Fe("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),If=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 Ij.string().url().parse(r),r}catch{throw new Xd("Not a valid URL.")}}),Pf=new Fe("-y, --yes","Skip all confirmation prompts.").env("CI"),Of=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."),Lf=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"),Nf=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}),Df=new Fe("--tag <tag>","Tag identifier for the asset."),aI=new Fe("--channel <channel>","Channel name for the asset."),kf=new Fe("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),sI=new Fe("--tag <tag>","Tag identifier for the asset.").makeOptionMandatory(),lI=new Fe("--env <env>","Environment to run all tests in (overrides test-level configuration)."),cI=new Fe("--local-avd-id <localAvdId>","Force tests to use a specific local Android Virtual Device (AVD) instead of remote emulators."),uI=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."),dI=new Fe("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(Jd),pI=new Fe("--shard-index <shardIndex>","The index of the shard to run tests for. Defaults to 1.").default(1).argParser(r=>{let e=Jd(r);if(e<1)throw new Xd("Shard index must be greater than 0.");return e}),mI=new Fe("--shard-count <shardCount>","The number of shards that tests are being run on. Defaults to 1.").default(1).argParser(Jd),Ff=new Fe("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),Uf=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."),Bf=new Fe("--exclude <excludePatterns...>","The inverted version of --include: a test that matches any of the provided exclusion patterns will be excluded from running."),gI=new Fe("--upload-results","Upload test results to Momentic Cloud.").default(!1),zf=new Fe("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),hI=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}),fI=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(Jd),SI=new Fe("--reporter <reporter>","Output report files in a standardized format to a local directory.").choices(Object.values(es)),yI=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 Kj}from"crypto";import{existsSync as Yj}from"fs";import{randomUUID as Oj}from"crypto";import{existsSync as Lj,statSync as Nj}from"fs";import{cloneDeep as Dj}from"lodash-es";import bI from"path";async function EI(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:Dj(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 kj({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 kj(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:C}=a,{regenerateCache:x,alwaysSaveCache:R,noCache:O,logLevel:v,localAvdId:M,localApkPath:D}=s;c!==0&&h("RETRY",`attempt ${c}/${l}`);let X={...a.project.config.emulator,...t.settings?.emulator},J={...T.config.ai,useMemory:T.config.ai?.useMemory!==!1,...t.settings?.ai},K=D?bI.resolve(D):void 0;if(K&&(!Lj(K)||!Nj(K).isFile()))throw new Error(`Local APK path "${K}" does not exist. Provide a valid file path via --local-apk-path.`);let we=C||t.settings?.defaultEnv,z=(we?Xo(we,T,p):void 0)?.variables??{},ce=typeof z[bo]=="string"?z[bo].trim():void 0,fe=typeof z[Ya]=="string"?z[Ya].trim():void 0,Je=xd({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"},Wt=new ma(Lt),Ne=new Yo(J.agentConfig,Lt),ut=new ca(Lt,Ne),sn=new pa({httpClient:m,fakerSeed:T.config.advanced?.fakerConstantSeed?gc:void 0}),An=Math.floor(Math.random()*1e4)+4e4,ei=await Pc(An,"appium"),Al=X.region==="local"?K??t.settings?.defaultApkFilePath?.trim()??(fe?bI.resolve(fe):void 0):void 0,no=f&&!Al?{channel:f,tag:b}:void 0,Rn,ti;if(M||X.region==="local"){if(ti=M??X.localEmulatorSettings?.avdId??ce,!ti)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 ${bo} key on the environment.`);Rn={avdId:ti,apkToInstall:no,apkFilePath:Al}}else Rn={region:X.region,apkToInstall:no,osVersion:X.remoteEmulatorSettings?.androidVersion??Nb};let Ca=Oj(),oo=p.child({runAttemptId:Ca}),V;try{V=await Cu({apiClient:m,logger:p,driverLogLevel:v,creationOpts:Rn,callbacks:{onStatusUpdate:dt=>{p.debug({status:dt},"Emulator status update")},onHeartbeatFailure:()=>{let dt="Appium heartbeat connection lost \u2014 possible ADB tunnel/emulator failure";w.warn(dt)},onHeartbeatRestored:()=>{let dt="Appium heartbeat connection restored";w.info(dt)},onLimbarConnectionStateChange:dt=>{dt==="disconnected"?w.warn("Emulator websocket connection lost. Emulator may be unavailable."):(dt==="reconnecting"||dt==="connecting")&&w.info("Emulator websocket is reconnecting...")}},appiumPort:ei,orgId:u,sessionId:Ca})}catch(dt){let Kf=`Fatal error creating Android driver, failing test run attempt (runId: ${n.runId})`;return p.error({err:dt},Kf),w.error({err:dt},Kf),{status:"FAILED",results:[],error:new E("UserConfigurationError",`Fatal error creating Android driver: ${dt.message}`)}}let tr=await e.startAttempt({emulatorName:V.emulatorName,runAttemptId:Ca});oo=oo.child(tr.loggerBindings||{});let CI=await Mu({driver:V.driver,onLogs:dt=>{tr.appendLogs(dt)}}),xI=new Ci({variablesFromEnvironment:z,envName:we,testName:t.name}),qf=await la.init({driver:V.driver,generator:Wt,logger:oo,limbarClient:V.limbarClient,playwrightDevice:V.playwrightDevice,orgId:u,adbPort:V.adbPort,options:{emulator:{...X,browserSettings:T.config.browser}},aiSettings:J,fixtures:{storage:Le,browserEnricher:ut,browserGenerator:Ne,localCodeEvalTools:sn,testContext:xI}}),io;try{io=await Pd({containerName:`mobile test ${t.name}`,fixtures:{controller:qf,logger:oo,cacheStorage:Je,usageTracker:g},work:{state:{failureRecoveryDisabled:J.failureRecovery===!1,failureRecoveryAttempts:0}},inputs:{testName:t.name,steps:t.steps,orgId:u,testMetadata:t},tracer:tr,callbacks:{}})}finally{await CI(),await V.cleanup(),await qf.cleanup()}await tr.finish({logger:oo,results:io.results,status:io.status,assetDetails:{avdId:ti,tag:no?.tag,channel:no?.channel}});let rp;if(io.status==="FAILED"&&io.terminalResult){let dt=io.terminalResult.message;dt?rp=E.fromMessage(dt):rp=new E("UnknownError",dt||"Unknown failure")}return{...io,error:rp}}import{existsSync as zj,mkdirSync as Hj,statSync as Gj}from"fs";import Vj from"path";import{z as j2e}from"zod";import Fj from"junit-report-builder";import Zd from"path";function Uj(r,e){if(e.name(r.testName).className(r.testName).file(Zd.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=fp[r.failureDetails?.classification?.reason||r.failureReason],n=r.failureDetails?.classification?.summary||Dl[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 Bj(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();Uj(d,m)}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(Zd.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(Zd.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=Fj.newBuilder();Bj(n,e,t),n.writeTo(Zd.join(r,`${e.suiteName}.xml`))}function Wj(r){return{testName:Vj.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 TI({logger:r,callbacks:e,format:t,params:n,runs:o,folder:i}){switch(zj(i)?Gj(i).isDirectory()||(w.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)):(w.info(`Reporter output directory '${i}' does not exist on disk, creating it now...`),Hj(i,{recursive:!0})),t){case"junit":{let a=o.map(Wj);Hf(i,n,a);return}case"allure":case"allure-json":w.error(`The specified reporter format '${t}' is not supported for mobile tests.`);return;case"playwright-json":w.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 jj}from"ts-debounce";var vl="0.20.2";function $j(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 qj(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Gf=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 Wo,Nr.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${Es}/${t}.jpeg`,contents:n})}recordStepDuration(e){let{durationMs:t,step:n}=e,o=n.type!=="MOBILE_PRESET_STEP"?n.type:n.command.type;Ge.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:`${Es}/${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:qj(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(`${Es}/${e}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new Gf(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:$j(e.status),finishedAt:e.finishedAt}))))}},Vf=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:cd(o,t),beforeResults:i?cd(i,t):void 0,afterResults:a?cd(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(`${Es}/${t}.jpeg`)}},Wf=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:On,runAttemptSchemaVersion:xT,startedAt:new Date,status:"RUNNING"};n.storeFile({name:"metadata.json",contents:JSON.stringify(o,null,2)});let i=jj(async()=>{await this.client.extendAndroidEmulatorTtl(e.emulatorName)},3e4,{maxWait:6e4}),a=new Vf(()=>void i(),this.testId,this.testName,t,o,n,this.orgId);return this.children.push(a),a}},ep=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:ur.CLI,startedAt:new Date,status:"RUNNING",cliVersion:vl,labels:a??[]},c=new hl(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:vl,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 Wf(this.client,e.testId,e.testName,e.runId,n,t,this.orgId);return this.children.push(o),o}};async function vI(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 Tn(){try{await H(Promise.all([FT(),Ge.flush()]),{milliseconds:5e3})}catch{}}async function AI(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;Yj(d)&&w.warn(`Output directory ${d} already exists, removing before test execution...`);let p=WT({items:n.testDefinitions,shardIndex:e.shardIndex??1,shardCount:e.shardCount??1,sortKey:J=>J.relativeFilePath}),g=new Set;n.testDefinitions.forEach(J=>{J.labels?.forEach(K=>g.add(K))});let h=s.child({orgId:c,runGroupId:l,branch:u.gitBranchName}),f=await ep.start({logger:h,orgId:c,runGroupId:l,outputDir:d,client:a,gitMetadata:u,labels:Array.from(g)}),b=[],T=new Date,C=new Set,x=async()=>Xj({runResults:b,startTime:T,ranTests:C,apiClient:a,uploadResults:e.uploadResults??!1,outputDir:d}),R=async J=>{w.warn(`${J} Stopping tests and printing latest results.`),await f.finish({logger:h,status:"CANCELLED"}),await x(),await Tn(),process.exit(1)},O=async()=>{await R("SIGINT received.")};process.once("SIGINT",O);let v;if(e.timeoutMinutes!==void 0&&e.timeoutMinutes>0){let J=e.timeoutMinutes*60*1e3;v=setTimeout(()=>{R(`Timeout of ${e.timeoutMinutes} minute(s) reached.`)},J)}let M={};for(let J=0;J<p.length;J++){let K=Object.values(M);K.length===m&&await Promise.race(K.map(z=>z.promise));let we=p[J],re=`test-${J}`;M[re]={done:!1,promise:(async({testDefinition:z})=>{C.add(re);let ce=z.relativeFilePath.includes("..")?z.fullFilePath:z.relativeFilePath;vs({status:"START",testLogRef:ce,getRunningTestsCount:()=>C.size,getTotalTestsCount:()=>p.length});let fe=setInterval(()=>vs({status:"RUN",testLogRef:ce,getRunningTestsCount:()=>C.size,getTotalTestsCount:()=>p.length}),5*60*1e3),Je=Kj(),Le=h.child({testId:z.id,runId:Je}),Lt=new Hu({logger:Le,reporter:new wd(a),runType:"mobile-test-run",runId:Je,testMetadata:z,suiteMetadata:void 0});try{let Wt=await EI({metadata:{...o,runId:Je},fixtures:{...t,tracer:f,logger:Le,usageTracker:Lt},inputs:{...n,project:i,testDefinition:z,channel:n.channel??z.settings?.defaultChannel,tag:n.tag??z.settings?.defaultTag,logUpdate:(Ne,ut)=>vs({status:Ne,testLogRef:ce,getRunningTestsCount:()=>C.size,getTotalTestsCount:()=>p.length,additionalText:ut})},options:e});vs({status:Wt.status,testLogRef:ce,getRunningTestsCount:()=>C.size,getTotalTestsCount:()=>p.length}),b.push(Wt)}catch(Wt){let Ne=`Encountered unexpected fatal error when running test '${z.name}': ${Wt.message}
4420
4420
  ${Wt.stack}`;w.error(Ne),Le.error({err:Wt},`Encountered unexpected fatal error when running test ${z.name}`),await R("Fatal error occurred.")}finally{clearInterval(fe),M[re].done=!0,delete M[re]}await Lt.flush(s)})({testDefinition:we})}}await Promise.allSettled(Object.values(M).map(J=>J.promise)),v&&clearTimeout(v);let X=b.some(J=>J.status==="FAILED"&&!J.quarantined)?"FAILED":"PASSED";return await f.finish({logger:h,status:X}),process.off("SIGINT",O),e.reporter&&e.reporterDir&&await TI({logger:h,callbacks:{createDebugDataReaderForRunAttempt:(J,K)=>new Gd(d,J,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 Xj({runResults:r,startTime:e,apiClient:t,uploadResults:n,outputDir:o}){let i=t.getAppUrl(),a=UT({results:r,startTime:e.getTime(),onFailed:s=>{},getDisplayLine:s=>{let c=`${Bm}- ${s.filePath}`;return s.runId&&(c+=` ( link when uploaded: ${i}/runs/${s.runId} )`),c},entity:"mobile test"});return w.log(""),n?(w.success(`Test results have been saved to the folder ${o}. Uploading to Momentic Cloud...`),await Hd({client:t,consoleLogger:w,resultsPath:o})):w.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 jf(){pw(),GT("Chromium")||(Co?(await Mc("The Chromium browser is not installed but is required for automating webviews. Install it now?")||process.exit(1),await Ic({rawBrowsers:["chromium"],force:!1,all:!1})):(w.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)))}JR({serviceName:"mobile-cli"});mr.setApp("mobile-cli");var vn=new Jj;vn.name("momentic-mobile").description("Momentic Mobile CLI").version(vl);var RI=vn.command("assets").description("Manage mobile testing assets");RI.command("upload").description("Upload an asset for mobile tests").argument("<file>","Path to the asset file to upload").addOption(Aa).addOption(Ra).addOption(Df).addOption(kf).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i}=e,a=Zo.resolve(r);Qo.existsSync(a)||(w.error(`File not found: ${a}`),process.exit(1));let s=new Yt({baseUrl:n,apiKey:t,logger:w});/\.apk$/i.test(a)||(w.error(`File is not an APK file: ${a}`),process.exit(1)),await xu({tag:o?.toLowerCase(),channel:i.toLowerCase(),filePath:a,apiClient:s,logger:w})});RI.command("download").description("Download an asset for mobile tests").addOption(Aa).addOption(Ra).addOption(kf).addOption(sI).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 Yt({baseUrl:n,apiKey:t,logger:w}),{downloadUrl:s}=await a.getLimbarAssetDownloadUrl(i,o),c=r?Zo.resolve(r):process.cwd(),l=`${i}-${o}.apk`;r?Qo.existsSync(c)&&Qo.statSync(c).isDirectory()&&(c=Zo.join(c,l)):c=Zo.join(c,l),w.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 t$(Zj.fromWeb(u.body),Qo.createWriteStream(c)),w.success(`Asset downloaded to ${c}`)});vn.command("app").addOption(Aa).addOption(Ra).addOption(Pf).addOption(Qd).addOption(zf).addOption(Of).addOption(Lf).addOption(Nf).action(async r=>{let{apiKey:e,server:t,yes:n,disableCache:o,saveCache:i,regenerateCache:a}=r;Wm({disableCache:o,saveCache:i,regenerateCache:a});let s=Hm(r.logLevel);mr.setApp("mobile-desktop-server");let c=new Yt({baseUrl:t,apiKey:e,logger:mr});await tf({client:c,skipPrompts:n}),w.debug("API key check complete");let l=r$(import.meta.url),u=Zo.dirname(l),d=Zo.resolve(u,"..","static");await jf(),w.debug({appiumHome:Ks},"Resolved resource paths");let m=await fa({configFilePath:r.config}),p=iI;await oI({momenticServerUrl:t,serverPort:p,apiKey:e,staticDir:d,initialProject:m,driverLogLevel:s,logger:mr,regenerateCache:a??!1,noCache:o??!1,alwaysSaveCache:i??!1});let g=`http://localhost:${p}`;w.info(`Local app started on: ${g}`),await e$(g)});var wI=vn.command("results").description("Merge and upload test results.");wI.command("merge").description("Merge test results files.").addOption(Ff).addArgument(new tp("<resultsPath>","Path to a directory that contains on or more test results archives.").argRequired()).action(async(r,e)=>{let{outputDir:t}=e;t||(w.error("Output directory is required."),process.exit(1)),Qo.existsSync(r)||(w.warn("Results path does not exist, skipping merge."),process.exit(0)),Qo.existsSync(t)&&w.warn(`Output directory ${t} already exists, removing before merging...`),P_(mr,t,r),await Tn(),process.exit(0)});var n$=new tp("<results>","Path to the results archive.").argRequired();wI.command("upload").description("Upload test results to Momentic cloud.").addOption(Aa).addOption(Ra).addArgument(n$).action(async(r,e)=>{let{apiKey:t,server:n}=e,o=mr,i=new Yt({baseUrl:n,apiKey:t,logger:o});await Hd({consoleLogger:w,resultsPath:r,client:i}),await Tn(),process.exit(0)});var o$=vn.command("list").description("List mobile test paths");o$.addOption(Qd).addOption(If).addOption(Uf).addOption(Bf).addOption(new $f("--labels <labels...>","Only run tests with the specified label(s).")).addArgument(new tp("[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 Zt(t),o=await _f({tests:r,momenticFiles:n,yes:!0,include:e.include,exclude:e.exclude,project:t,labels:e.labels,logger:w,quarantinedTestReasons:{}});w.info(o.map(i=>i.relativeFilePath).join(`