momentic-mobile 0.0.25 → 0.0.27

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
@@ -1,16 +1,20 @@
1
1
  #!/usr/bin/env node
2
- var XR=Object.defineProperty;var ke=(r,e)=>()=>(r&&(e=r(r=0)),e);var JR=(r,e)=>{for(var t in e)XR(r,t,{get:e[t],enumerable:!0})};var qb,Kb=ke(()=>{"use strict";qb=typeof globalThis=="object"?globalThis:global});var Yb=ke(()=>{"use strict";Kb()});var Xb=ke(()=>{"use strict";Yb()});var Hr,rp=ke(()=>{"use strict";Hr="1.9.0"});function FL(r){var e=new Set([r]),t=new Set,n=r.match(Jb);if(!n)return function(){return!1};var o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null)return function(c){return c===r};function i(s){return t.add(s),!1}function a(s){return e.add(s),!0}return function(c){if(e.has(c))return!0;if(t.has(c))return!1;var l=c.match(Jb);if(!l)return i(c);var u={major:+l[1],minor:+l[2],patch:+l[3],prerelease:l[4]};return u.prerelease!=null||o.major!==u.major?i(c):o.major===0?o.minor===u.minor&&o.patch<=u.patch?a(c):i(c):o.minor<=u.minor?a(c):i(c)}}var Jb,Zb,Qb=ke(()=>{"use strict";rp();Jb=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;Zb=FL(Hr)});function qo(r,e,t,n){var o;n===void 0&&(n=!1);var i=ua[ca]=(o=ua[ca])!==null&&o!==void 0?o:{version:Hr};if(!n&&i[r]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+r);return t.error(a.stack||a.message),!1}if(i.version!==Hr){var a=new Error("@opentelemetry/api: Registration of version v"+i.version+" for "+r+" does not match previously registered API v"+Hr);return t.error(a.stack||a.message),!1}return i[r]=e,t.debug("@opentelemetry/api: Registered a global for "+r+" v"+Hr+"."),!0}function Gr(r){var e,t,n=(e=ua[ca])===null||e===void 0?void 0:e.version;if(!(!n||!Zb(n)))return(t=ua[ca])===null||t===void 0?void 0:t[r]}function Ko(r,e){e.debug("@opentelemetry/api: Unregistering a global for "+r+" v"+Hr+".");var t=ua[ca];t&&delete t[r]}var BL,ca,ua,da=ke(()=>{"use strict";Xb();rp();Qb();BL=Hr.split(".")[0],ca=Symbol.for("opentelemetry.js.api."+BL),ua=qb});function pa(r,e,t){var n=Gr("diag");if(n)return t.unshift(e),n[r].apply(n,HL([],zL(t),!1))}var zL,HL,eE,tE=ke(()=>{"use strict";da();zL=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},HL=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))},eE=function(){function r(e){this._namespace=e.namespace||"DiagComponentLogger"}return r.prototype.debug=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return pa("debug",this._namespace,e)},r.prototype.error=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return pa("error",this._namespace,e)},r.prototype.info=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return pa("info",this._namespace,e)},r.prototype.warn=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return pa("warn",this._namespace,e)},r.prototype.verbose=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return pa("verbose",this._namespace,e)},r}()});var Pe,Al=ke(()=>{"use strict";(function(r){r[r.NONE=0]="NONE",r[r.ERROR=30]="ERROR",r[r.WARN=50]="WARN",r[r.INFO=60]="INFO",r[r.DEBUG=70]="DEBUG",r[r.VERBOSE=80]="VERBOSE",r[r.ALL=9999]="ALL"})(Pe||(Pe={}))});function rE(r,e){r<Pe.NONE?r=Pe.NONE:r>Pe.ALL&&(r=Pe.ALL),e=e||{};function t(n,o){var i=e[n];return typeof i=="function"&&r>=o?i.bind(e):function(){}}return{error:t("error",Pe.ERROR),warn:t("warn",Pe.WARN),info:t("info",Pe.INFO),debug:t("debug",Pe.DEBUG),verbose:t("verbose",Pe.VERBOSE)}}var nE=ke(()=>{"use strict";Al()});var GL,jL,VL,_r,ma=ke(()=>{"use strict";tE();nE();Al();da();GL=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},jL=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))},VL="diag",_r=function(){function r(){function e(o){return function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];var s=Gr("diag");if(s)return s[o].apply(s,jL([],GL(i),!1))}}var t=this,n=function(o,i){var a,s,c;if(i===void 0&&(i={logLevel:Pe.INFO}),o===t){var l=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return t.error((a=l.stack)!==null&&a!==void 0?a:l.message),!1}typeof i=="number"&&(i={logLevel:i});var u=Gr("diag"),d=rE((s=i.logLevel)!==null&&s!==void 0?s:Pe.INFO,o);if(u&&!i.suppressOverrideMessage){var p=(c=new Error().stack)!==null&&c!==void 0?c:"<failed to generate stacktrace>";u.warn("Current logger will be overwritten from "+p),d.warn("Current logger will overwrite one already registered from "+p)}return qo("diag",d,t,!0)};t.setLogger=n,t.disable=function(){Ko(VL,t)},t.createComponentLogger=function(o){return new eE(o)},t.verbose=e("verbose"),t.debug=e("debug"),t.info=e("info"),t.warn=e("warn"),t.error=e("error")}return r.instance=function(){return this._instance||(this._instance=new r),this._instance},r}()});var oE,iE=ke(()=>{"use strict";oE=Symbol("BaggageEntryMetadata")});function np(r){return typeof r!="string"&&($L.error("Cannot create baggage metadata from unknown type: "+typeof r),r=""),{__TYPE__:oE,toString:function(){return r}}}var $L,aE=ke(()=>{"use strict";ma();iE();$L=_r.instance()});function op(r){return Symbol.for(r)}var WL,ip,ap=ke(()=>{"use strict";WL=function(){function r(e){var t=this;t._currentContext=e?new Map(e):new Map,t.getValue=function(n){return t._currentContext.get(n)},t.setValue=function(n,o){var i=new r(t._currentContext);return i._currentContext.set(n,o),i},t.deleteValue=function(n){var o=new r(t._currentContext);return o._currentContext.delete(n),o}}return r}(),ip=new WL});function cp(){return lp}var Jn,qL,wl,KL,YL,XL,JL,sp,ZL,QL,eN,lp,tN,rN,nN,oN,iN,aN,sN,up=ke(()=>{"use strict";Jn=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)}}(),qL=function(){function r(){}return r.prototype.createGauge=function(e,t){return rN},r.prototype.createHistogram=function(e,t){return nN},r.prototype.createCounter=function(e,t){return tN},r.prototype.createUpDownCounter=function(e,t){return oN},r.prototype.createObservableGauge=function(e,t){return aN},r.prototype.createObservableCounter=function(e,t){return iN},r.prototype.createObservableUpDownCounter=function(e,t){return sN},r.prototype.addBatchObservableCallback=function(e,t){},r.prototype.removeBatchObservableCallback=function(e){},r}(),wl=function(){function r(){}return r}(),KL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n){},e}(wl),YL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n){},e}(wl),XL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n){},e}(wl),JL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n){},e}(wl),sp=function(){function r(){}return r.prototype.addCallback=function(e){},r.prototype.removeCallback=function(e){},r}(),ZL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(sp),QL=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(sp),eN=function(r){Jn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(sp),lp=new qL,tN=new KL,rN=new XL,nN=new JL,oN=new YL,iN=new ZL,aN=new QL,sN=new eN});var Nt,sE=ke(()=>{"use strict";(function(r){r[r.INT=0]="INT",r[r.DOUBLE=1]="DOUBLE"})(Nt||(Nt={}))});var lN,cN,lE,cE=ke(()=>{"use strict";ap();lN=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},cN=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))},lE=function(){function r(){}return r.prototype.active=function(){return ip},r.prototype.with=function(e,t,n){for(var o=[],i=3;i<arguments.length;i++)o[i-3]=arguments[i];return t.call.apply(t,cN([n],lN(o),!1))},r.prototype.bind=function(e,t){return t},r.prototype.enable=function(){return this},r.prototype.disable=function(){return this},r}()});var uN,dN,dp,pN,uE,dE=ke(()=>{"use strict";cE();da();ma();uN=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},dN=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))},dp="context",pN=new lE,uE=function(){function r(){}return r.getInstance=function(){return this._instance||(this._instance=new r),this._instance},r.prototype.setGlobalContextManager=function(e){return qo(dp,e,_r.instance())},r.prototype.active=function(){return this._getContextManager().active()},r.prototype.with=function(e,t,n){for(var o,i=[],a=3;a<arguments.length;a++)i[a-3]=arguments[a];return(o=this._getContextManager()).with.apply(o,dN([e,t,n],uN(i),!1))},r.prototype.bind=function(e,t){return this._getContextManager().bind(e,t)},r.prototype._getContextManager=function(){return Gr(dp)||pN},r.prototype.disable=function(){this._getContextManager().disable(),Ko(dp,_r.instance())},r}()});var Yo,pE=ke(()=>{"use strict";dE();Yo=uE.getInstance()});var j,mE=ke(()=>{"use strict";ma();j=_r.instance()});var mN,gE,hE=ke(()=>{"use strict";up();mN=function(){function r(){}return r.prototype.getMeter=function(e,t,n){return lp},r}(),gE=new mN});var pp,fE,SE=ke(()=>{"use strict";hE();da();ma();pp="metrics",fE=function(){function r(){}return r.getInstance=function(){return this._instance||(this._instance=new r),this._instance},r.prototype.setGlobalMeterProvider=function(e){return qo(pp,e,_r.instance())},r.prototype.getMeterProvider=function(){return Gr(pp)||gE},r.prototype.getMeter=function(e,t,n){return this.getMeterProvider().getMeter(e,t,n)},r.prototype.disable=function(){Ko(pp,_r.instance())},r}()});var Rl,yE=ke(()=>{"use strict";SE();Rl=fE.getInstance()});var Te=ke(()=>{"use strict";aE();ap();Al();up();sE();pE();mE();yE()});import{Argument as Ag,Command as hz,Option as fz}from"@commander-js/extra-typings";import rC from"appium";import{tmpdir as nC}from"os";import{remote as oC}from"webdriverio";import{createInstanceClient as ZR}from"@limrun/api";import{execSync as QR}from"child_process";import{hostname as eC}from"os";import tC from"path";async function wg(r){let{apiClient:e,logger:t,creationOpts:n,onStatusUpdate:o,logLevel:i}=r,{token:a,webRtcUrl:s,adbUrl:c,name:l,apkDownloadUrl:u,region:d}=await e.createAndroidEmulator({...n,hostname:eC()}),p;try{QR("adb --version"),p="adb"}catch{if(process.env.ANDROID_HOME)p=tC.join(process.env.ANDROID_HOME,"platform-tools","adb");else throw new Error("adb not found in PATH and ANDROID_HOME not set")}t.info({emulatorName:l,apkToInstall:n.apkToInstall,region:d,apkDownloadUrl:u},"Android instance creation ok");let g=await ZR({adbUrl:c,endpointUrl:s,token:a,logLevel:i,adbPath:p}),m=["https://github.com/appium/appium-uiautomator2-server/releases/download/v7.6.2/appium-uiautomator2-server-v7.6.2.apk","https://github.com/appium/appium-uiautomator2-server/releases/download/v7.6.2/appium-uiautomator2-server-debug-androidTest.apk","https://github.com/appium/io.appium.settings/releases/download/v5.14.15/settings_apk-debug.apk"];u&&m.push(u);let h=n.apkToInstall?.channel,f=n.apkToInstall?.tag;o(`Installing APK${h?` with channel ${h}`:""}${f?` and tag ${f}`:""}`),await Promise.all(m.map(E=>g.sendAsset(E))),o("Starting tunnel");let b=await g.startAdbTunnel();return{port:b.address.port,close:b.close,token:a,webRtcUrl:s,emulatorName:l}}async function ns({onStatusUpdate:r,creationOpts:e,apiClient:t,logger:n,driverLogLevel:o,appiumPort:i,socket:a}){let s=Date.now(),{close:c,port:l,limbarToken:u,limbarUrl:d,emulatorName:p}=await sC({apiClient:t,logger:n,creationOpts:e,onStatusUpdate:r}),g=[()=>t.deleteAndroidEmulator(p),c],m=async()=>{for(let f=g.length-1;f>=0;f-=1)try{await g[f]()}catch(b){if(b instanceof Error&&b.message.includes("ECONNREFUSED"))return;n.warn({err:b},"Error running cleanup task")}},h=async()=>{if(a&&!a.connected)throw await m(),new Error("Client disconnected before Appium driver could be started")};await h();try{let f=await iC({logger:n,driverLogLevel:o,appiumPort:i,port:l,limbarStart:s,emulatorName:p,apiClient:t,onStatusUpdate:r,creationOpts:e});return g.push(f.appiumClose),g.push(async()=>f.driver.deleteSession()),await h(),{...f,emulatorName:p,limbarToken:u,limbarUrl:d,adbTunnelPort:l,cleanup:m,appiumPort:i}}catch(f){throw await m(),new Error(`Failed to start Appium driver: ${f}`)}}async function iC({logger:r,driverLogLevel:e="warn",port:t,limbarStart:n,emulatorName:o,appiumPort:i}){let a=Date.now(),{close:s,logFile:c}=await aC({logger:r,logLevel:e,appiumPort:i}),l={platformName:"Android","appium:automationName":"UiAutomator2","appium:deviceName":"Android","appium:udid":`127.0.0.1:${t}`,"appium:adbExecTimeout":3e4,"appium:newCommandTimeout":600,"appium:skipDeviceInitialization":!0,"appium:skipServerInstallation":!0,"appium:androidInstallTimeout":6e4,"appium:autoWebview":!1,"appium:autoWebviewTimeout":0,"appium:clearDeviceLogsOnStart":!0},u={hostname:"localhost",port:i,logLevel:e,capabilities:l,connectionRetryTimeout:3e4,connectionRetryCount:2},d=Date.now(),p=await oC(u);await p.updateSettings({enableMultiWindows:!0});let g=new Map;return p.on("command",m=>{g.set(m.command,Date.now())}),p.on("result",m=>{let h=g.get(m.command);if(!h)return;let f=Date.now()-h;m.result instanceof Error?r.warn({err:m.result,command:m.command,args:m.body,durationMs:f},"Appium cmd failed"):f>1e4&&r.warn({command:m.command,args:m.body,durationMs:f},"Appium cmd took very long"),g.delete(m.command)}),r.info({timings:{limbarDuration:a-n,appiumDuration:d-a,wdioDuration:Date.now()-d},capabilities:l,emulatorName:o},"Started Appium driver"),{driver:p,appiumClose:s,appiumPort:i,appiumLogFile:c}}async function aC({logger:r,logLevel:e,appiumPort:t}){let n=`${nC()}/appium-port-${Date.now()}.log`,o=await rC.main({port:t,address:"localhost",relaxedSecurityEnabled:!0,longStacktrace:e==="debug",logFormat:"json",loglevel:e,logFile:n});return{logFile:n,close:async()=>{await o.close()}}}async function sC({apiClient:r,logger:e,onStatusUpdate:t,creationOpts:n}){let{close:o,port:i,token:a,webRtcUrl:s,emulatorName:c}=await wg({apiClient:r,logger:e,creationOpts:n,onStatusUpdate:t});return{port:i,close:o,limbarToken:a,limbarUrl:s,emulatorName:c}}import Rg from"crypto";import lC from"fs";async function os({tag:r,channel:e,filePath:t,apiClient:n,logger:o}){let i=await lC.promises.readFile(t),a=Rg.createHash("md5").update(i).digest("base64"),s=Rg.createHash("md5").update(i).digest("hex"),c=await n.generateAndroidAssetUrls({channel:e,tag:r??"latest",md5:a});if(c.md5&&(c.md5===a||c.md5===s)){o.info({channel:e,tag:r,md5:a,md5Hex:s},`Asset ${t} already exists on emulator platform`);return}if(c.uploadUrl){o.info({channel:e,tag:r,md5:a,uploadUrl:c.uploadUrl},`Uploading asset ${t} to emulator platform...`);try{let l=await fetch(c.uploadUrl,{headers:{"Content-Length":i.length.toString(),"Content-Type":"application/octet-stream"},method:"PUT",body:i});if(l.status!==200)throw new Error(`Got error response from emulator platform: ${l.status} ${await l.text()}`);o.info({channel:e,tag:r,md5:a},`Asset ${t} was uploaded successfully!`);return}catch(l){try{await n.deleteAndroidAsset(e,r??"latest")}catch(u){o.warn({err:u,tag:r,channel:e},"Failed to cleanup asset metadata for failed upload. Please contact Momentic support.")}throw o.error({err:l},"Failed to upload asset"),l}}throw new Error(`No upload URL was given for asset ${t}`)}import{execSync as OS}from"child_process";import{existsSync as KP}from"fs";import{platform as LS}from"os";import{dirname as YP,join as XP,resolve as JP}from"path";import{z as Cg}from"zod";var zz=Cg.object({input:Cg.string()});import{z as Ye}from"zod";var jz=Ye.object({srcs:Ye.array(Ye.string()),urls:Ye.array(Ye.string()),desiredSrc:Ye.string().optional(),desiredUrl:Ye.string().optional()}),xg=Ye.object({srcRegex:Ye.string().optional(),urlRegex:Ye.string().optional()}),_g=Ye.object({x:Ye.number(),y:Ye.number(),correlation:Ye.number()}),Vz=Ye.object({searchImageBase64String:Ye.string(),pageImageBase64String:Ye.string(),id:Ye.string().uuid(),timeoutMs:Ye.number().max(1e4).min(0).optional()});import{z as O}from"zod";import*as U from"zod";import{extendZodWithOpenApi as cC}from"zod-openapi";cC(U);var Yr=(s=>(s.AI="AI",s.AI_HEALED="AI_HEALED",s.CLICK_TO_FIND="CLICK_TO_FIND",s.XY_PERCENT="XY_PERCENT",s.RECORDING="RECORDING",s.USER_CSS_SELECTOR="USER_CSS_SELECTOR",s.HEURISTIC_HEALED="HEURISTIC_HEALED",s))(Yr||{}),uC=U.object({mPathSelectorTokens:U.string().array(),frameSrcRegex:U.string().optional(),frameUrlRegex:U.string().optional(),indices:U.number().array()}),ou=U.object({result:U.number(),traceId:U.string()}).array(),is=U.object({type:U.literal("GCS_TRACES"),traces:ou}),Mg=U.object({text:U.string().optional(),attributes:U.record(U.string(),U.string()).optional(),boundingBox:U.object({x:U.number(),y:U.number(),width:U.number(),height:U.number()}).optional()}),dC=U.object({selectors:U.string().array(),requirements:Mg.optional()}),Xr=U.object({id:U.number().int(),dataMomenticId:U.number().int().optional(),selector:U.string().optional(),hybridSelector:U.object({textContent:U.string().nullish(),attributes:U.record(U.string(),U.string()),tagName:U.string(),expandShadowRoot:U.boolean().optional(),classNames:U.string().array(),nthChild:U.number()}).array().optional(),generatedSelectors:U.string().array().optional(),requirements:Mg.optional(),additionalElements:dC.array().optional(),role:U.string().optional(),name:U.string().optional(),numChildren:U.number().optional(),content:U.string().optional(),pathFromRoot:U.string().optional(),serializedHtml:U.string().optional().describe("pruned html including 1 neighbor and 1 layer of children. value for text inputs pruned."),nodeOnlySerializedHtml:U.string().optional().describe("outerHtml of the element without any children. value for text inputs pruned."),screenshotUrl:U.string().url().optional(),boundingBox:U.object({x:U.number().optional(),y:U.number().optional(),width:U.number(),height:U.number()}).describe("css pixel bounding box").optional(),frameCache:uC.optional(),inputDescription:U.string().optional().describe("the description that generated this cache"),targetSource:U.nativeEnum(Yr).optional(),targetUpdateTime:U.string().optional(),targetUpdateLoggerTags:U.record(U.string(),U.string()).optional(),cacheResolutionUpdateSource:U.string().optional(),cacheResolutionUpdateTime:U.string().optional(),cacheResolutionUpdateLoggerTags:U.record(U.string(),U.string()).optional(),memory:is.optional()}).openapi({ref:"ElementTargetCache"});function as(r){return!!(r.serializedHtml||r.screenshotUrl||r.generatedSelectors||r.hybridSelector)}var pC=U.object({type:U.literal("description"),elementDescriptor:U.string().describe("Description of the element.")}).openapi({ref:"DescriptionTarget"}),mC=U.object({x:U.number(),y:U.number()}),gC=U.object({type:U.literal("coordinates"),pixels:mC}).openapi({ref:"CoordinatesTarget"});function Jr(r){return r.type==="description"}function Sr(r){return r.type==="coordinates"}var pt=U.discriminatedUnion("type",[pC,gC]).openapi({ref:"ElementTarget"});function iu(r){if(!r)return!1;switch(r.type){case"description":return!!r.elementDescriptor}return!0}function Pg(r){return is.safeParse(r).success}import{v4 as pe}from"uuid";import*as y from"zod";import{extendZodWithOpenApi as vC}from"zod-openapi";import{z as te}from"zod";import{extendZodWithOpenApi as hC}from"zod-openapi";import{z as Ai}from"zod";import Ig from"zod";var vi=Ig.object({updatedAt:Ig.coerce.date().optional()});var au=Ai.object({result:Ai.boolean(),traceId:Ai.string()}).array(),su=Ai.object({type:Ai.literal("GCS_TRACES"),traces:au}),lu=vi.extend({memory:su.optional()});hC(te);var Og=te.object({plan:te.string().optional(),evidence:te.string().optional(),thoughts:te.string(),result:te.boolean(),relevantElements:te.array(te.number()).optional(),updatedMemory:au.optional()}),Zr=(o=>(o.CONTAINS="CONTAINS",o.STARTS_WITH="STARTS_WITH",o.EQUALS="EQUALS",o.EXISTS="EXISTS",o))(Zr||{});var fC=te.object({type:te.literal("ELEMENT_NAME"),negated:te.boolean().optional(),operation:te.nativeEnum(Zr),value:te.string()}).openapi({ref:"ElementNameAssertion"}),SC=te.object({type:te.literal("ELEMENT_STYLE"),negated:te.boolean().optional(),operation:te.nativeEnum(Zr),property:te.string(),value:te.string()}).openapi({ref:"ElementStyleAssertion"}),yC=te.object({type:te.literal("ELEMENT_CONTENT"),negated:te.boolean().optional(),operation:te.nativeEnum(Zr),value:te.string()}).openapi({ref:"ElementContentAssertion"}),bC=te.object({type:te.literal("ELEMENT_ATTRIBUTE"),negated:te.boolean().optional(),operation:te.nativeEnum(Zr),attr:te.string(),value:te.string()}).openapi({ref:"ElementAttributeValueAssertion"}),bo=(i=>(i.EXISTS="EXISTS",i.VISIBLE="VISIBLE",i.ENABLED="ENABLED",i.EDITABLE="EDITABLE",i.FOCUSED="FOCUSED",i))(bo||{}),EC=te.object({type:te.literal("ELEMENT_EXISTENCE"),negated:te.boolean().optional(),condition:te.nativeEnum(bo).describe("Treated as the element exists AND is also ...")}).openapi({ref:"ElementExistenceAssertion"}),Lg=te.discriminatedUnion("type",[yC,bC,EC,fC,SC]).openapi({ref:"ManualElementAssertion"});var TC=te.object({type:te.literal("CONTENT"),negated:te.boolean().optional(),value:te.string()}).openapi({ref:"PageContentAssertion"}),Ng=te.discriminatedUnion("type",[TC]).openapi({ref:"ManualPageAssertion"});import yt from"zod";var cu=yt.discriminatedUnion("type",[yt.object({type:yt.literal("SUBSTRING"),url:yt.string()}),yt.object({type:yt.literal("GLOB"),glob:yt.string()}),yt.object({type:yt.literal("REGEX"),regex:yt.string()}),yt.object({type:yt.literal("DOMAIN"),domain:yt.string()})]),wi=yt.object({urlMatcher:cu,method:yt.string().optional()});import{z as de}from"zod";var Eo=de.object({url:de.string(),method:de.union([de.literal("GET"),de.literal("POST"),de.literal("PUT"),de.literal("DELETE"),de.literal("PATCH")]),headers:de.record(de.string(),de.string()).optional(),params:de.record(de.string(),de.string()).optional(),body:de.string().optional(),timeout:de.number().int().optional().describe("Max seconds to wait for the request to complete")}),kg=de.object({url:de.string(),headers:de.record(de.string(),de.string()).optional(),query:de.string(),variables:de.string().optional(),timeout:de.number().int().optional().describe("Max seconds to wait for the request to complete")}),ss=de.object({code:de.string(),fragment:de.boolean().optional().describe("Agents should not touch this unless explicitly told to"),environment:de.union([de.literal("NODE"),de.literal("BROWSER")]).optional().describe("default NODE, Agents default to using node unless it is necessary to use browser"),timeout:de.number().int().max(60).optional().describe("Max seconds for the code to complete")});var st=(K=>(K.AI_EXTRACT="AI_EXTRACT",K.AI_ASSERTION="AI_ASSERTION",K.AUTH_LOAD="AUTH_LOAD",K.AUTH_SAVE="AUTH_SAVE",K.BLUR="BLUR",K.CAPTCHA="CAPTCHA",K.CLICK="CLICK",K.COOKIE="COOKIE",K.COPY="COPY",K.DIALOG="DIALOG",K.DRAG="DRAG",K.ELEMENT_CHECK="ELEMENT_CHECK",K.FILE_UPLOAD="FILE_UPLOAD",K.FOCUS="FOCUS",K.GO_BACK="GO_BACK",K.GO_FORWARD="GO_FORWARD",K.HOVER="HOVER",K.JAVASCRIPT="JAVASCRIPT",K.LOCAL_STORAGE="LOCAL_STORAGE",K.MOUSE_DRAG="MOUSE_DRAG",K.NAVIGATE="NAVIGATE",K.NEW_TAB="NEW_TAB",K.PAGE_CHECK="PAGE_CHECK",K.PASTE="PASTE",K.PRESS="PRESS",K.KEY_DOWN="KEY_DOWN",K.KEY_UP="KEY_UP",K.REFRESH="REFRESH",K.REQUEST="REQUEST",K.GRAPHQL_REQUEST="GRAPHQL_REQUEST",K.SCROLL_DOWN="SCROLL_DOWN",K.SCROLL_UP="SCROLL_UP",K.SCROLL_LEFT="SCROLL_LEFT",K.SCROLL_RIGHT="SCROLL_RIGHT",K.SELECT_OPTION="SELECT_OPTION",K.SWITCH_TAB="TAB",K.TYPE="TYPE",K.VISUAL_DIFF="VISUAL_DIFF",K.WAIT="WAIT",K.WAIT_FOR_URL="WAIT_FOR_URL",K.REGISTER_REQUEST_LISTENER="REGISTER_REQUEST_LISTENER",K.AWAIT_LISTENER="AWAIT_LISTENER",K.RECORD_REQUESTS="RECORD_REQUESTS",K.GET_RECORDED_REQUESTS="GET_RECORDED_REQUESTS",K.SET_HEADER="SET_HEADER",K.MOCK_ROUTE="MOCK_ROUTE",K.REMOVE_ROUTE_MOCK="REMOVE_ROUTE_MOCK",K.OFFLINE_MODE="OFFLINE_MODE",K.SUCCESS="SUCCESS",K))(st||{});vC(y);var W=y.object({thoughts:y.string().optional(),id:y.string().uuid().describe("unique identifier to this step, used for step cache")}),Ht=y.object({useSelector:y.boolean().optional(),force:y.boolean().optional(),disableCache:y.boolean().optional().describe("disable element caching for this step"),iframeUrl:y.string().optional().describe("url or url regex for the iframe")}).openapi({ref:"CommonTargetingOptions"}),Gt=vi.extend({target:Xr}).optional().openapi({ref:"SingleTargetCache"});function Ug(r){return Gt.safeParse(r).success}var cs=y.object({loadTimeout:y.number().int().max(60).optional().describe("Max seconds for the page to load")}),AC=W.merge(cs).merge(y.object({type:y.literal("NAVIGATE"),url:y.string()})).openapi({ref:"NavigateCommand"}),us=Ht.merge(y.object({cache:Gt})),To=W.merge(us.merge(y.object({target:pt.optional(),type:y.literal("SCROLL_UP"),deltaY:y.number().optional()}))).openapi({ref:"ScrollUpCommand"}),vo=W.merge(us.merge(y.object({target:pt.optional(),type:y.literal("SCROLL_DOWN"),deltaY:y.number().optional()}))).openapi({ref:"ScrollDownCommand"}),Ao=W.merge(us.merge(y.object({target:pt.optional(),type:y.literal("SCROLL_LEFT"),deltaX:y.number().optional()}))).openapi({ref:"ScrollLeftCommand"}),wo=W.merge(us.merge(y.object({target:pt.optional(),type:y.literal("SCROLL_RIGHT"),deltaX:y.number().optional()}))).openapi({ref:"ScrollRightCommand"}),EH=y.discriminatedUnion("type",[To,vo,Ao,wo]).openapi({ref:"AllScrollCommands"}),wC=W.merge(y.object({type:y.literal("DIALOG"),action:y.union([y.literal("ACCEPT"),y.literal("DISMISS")])})).openapi({ref:"DialogCommand"}),RC=W.merge(y.object({type:y.literal("WAIT"),delay:y.number()})).openapi({ref:"WaitCommand"}),CC=y.object({caseInsensitive:y.boolean().optional().describe("Whether to ignore case when matching the URL"),negated:y.boolean().optional().describe("Wait for the URL to NOT match the provided matcher instead."),timeout:y.number().int().optional().describe("Max seconds to wait for the URL to match")}),xC=W.extend({type:y.literal("WAIT_FOR_URL"),matcher:cu}).merge(CC).openapi({ref:"WaitUrlCommand"}),_C=W.merge(cs).merge(y.object({type:y.literal("REFRESH")})).openapi({ref:"RefreshCommand"}),MC=W.merge(y.object({type:y.literal("GO_BACK")})).openapi({ref:"GoBackCommand"}),PC=W.merge(y.object({type:y.literal("GO_FORWARD")})).openapi({ref:"GoForwardCommand"}),IC=W.extend({type:y.literal("AUTH_SAVE")}).openapi({ref:"AuthSaveCommand"}),OC=W.extend({type:y.literal("AUTH_LOAD"),storageState:y.string().describe("JSON string auth state. Leave blank or set to the empty string to clear all existing authentication.")}).openapi({ref:"AuthLoadCommand"}),uu=W.merge(Ht).extend({type:y.literal("CAPTCHA")}).openapi({ref:"CaptchaCommand"}),LC=W.extend({type:y.literal("COPY"),value:y.string()}).openapi({ref:"CopyCommand"}),NC=W.extend({type:y.literal("PASTE")}).openapi({ref:"PasteCommand"}),kC=W.merge(ss).extend({type:y.literal("JAVASCRIPT")}).openapi({ref:"JavaScriptCommand"}),Ri=W.merge(Ht).extend({type:y.literal("CLICK"),target:pt,doubleClick:y.boolean().optional(),rightClick:y.boolean().optional(),waitForDownload:y.boolean().optional().describe("Wait for the click to trigger a file download and for the file download to complete."),delayMs:y.number().optional(),downloadTimeoutMs:y.number().optional(),cache:Gt,relativePosition:y.object({x:y.number(),y:y.number()}).optional()}).openapi({ref:"ClickCommand"}),Fg=vi.extend({fromTarget:Xr.optional(),toTarget:Xr.optional()}),Ci=W.merge(Ht).merge(y.object({type:y.literal("DRAG"),fromTarget:pt,toTarget:pt,steps:y.number().optional(),hoverSeconds:y.number().optional().describe("Seconds to hover the object before dropping"),cache:Fg.optional()})).openapi({ref:"DragCommand"}),xi=W.merge(Ht).merge(y.object({type:y.literal("MOUSE_DRAG"),target:pt.optional(),deltaX:y.string().describe("pixels to move horizontally, can be template"),deltaY:y.string().describe("pixels to move vertically, can be template"),steps:y.number().optional(),cache:Gt})).openapi({ref:"MouseDragCommand"}),_i=W.merge(Ht).merge(y.object({type:y.literal("HOVER"),target:pt,cache:Gt})).openapi({ref:"HoverCommand"}),Mi=W.merge(Ht).merge(y.object({type:y.literal("FOCUS"),target:pt,cache:Gt})).openapi({ref:"FocusCommand"}),Pi=W.merge(Ht).extend({type:y.literal("BLUR"),target:pt.optional(),cache:Gt}).openapi({ref:"BlurCommand"}),DC=y.object({type:y.literal("URL"),url:y.string()}).describe("Accessible link to the file, either public http or local file://").openapi({ref:"UrlSource"}),UC=y.object({type:y.literal("USER_FILE"),name:y.string()}).describe("Accessible link to the file, references the google cloud file").openapi({ref:"UploadedFileSource"}),FC=W.extend({type:y.literal("FILE_UPLOAD"),fileSource:y.discriminatedUnion("type",[DC,UC]),filename:y.string().optional()}).openapi({ref:"FileUploadCommand"}),BC=y.discriminatedUnion("type",[y.object({type:y.literal("VALUE"),value:y.string()}),y.object({type:y.literal("LABEL"),label:y.string()}),y.object({type:y.literal("INDEX"),index:y.coerce.string()})]),Ii=W.merge(Ht).extend({type:y.literal("SELECT_OPTION"),target:pt,cache:Gt,choice:BC.describe("new field for selecting options, optional for backcompat")}).openapi({ref:"SelectOptionCommand"}),du=y.union([y.literal("MULTIMODAL"),y.literal("VISION_ONLY")]),ds=W.merge(y.object({type:y.literal("AI_ASSERTION"),assertion:y.string(),disableCache:y.boolean().optional(),iframeUrl:y.string().optional(),contextChoice:du.optional(),timeout:y.number().int().optional().describe("Max seconds to wait for assertion to be true"),cache:lu.optional()})).openapi({ref:"AIAssertionCommand"}),Qr=5,pu=600,Oi=W.merge(Ht).extend({type:y.literal("ELEMENT_CHECK"),target:pt,assertion:Lg,cache:Gt.or(lu).optional(),timeout:y.number().int().min(0).max(pu).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"ElementAssertionCommand"}),zC=W.extend({type:y.literal("PAGE_CHECK"),assertion:Ng,iframeUrl:y.string().optional().describe("url or url regex for the iframe"),timeout:y.number().int().min(0).max(pu).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"PageAssertionCommand"}),HC=W.merge(y.object({type:y.literal("AI_EXTRACT"),goal:y.string(),schema:y.string().optional(),envKey:y.string().optional(),disableCache:y.boolean().optional(),iframeUrl:y.string().optional()})).openapi({ref:"AIExtractCommand"}),GC=y.object({clearContent:y.boolean().optional(),forceClearContent:y.boolean().optional(),delay:y.number().min(0).max(1e3).optional().describe("Delay between each press in milliseconds."),force:y.boolean().optional(),pressEnter:y.boolean().optional()}),Bg=25,Li=W.merge(Ht).merge(GC).extend({type:y.literal("TYPE"),target:pt.optional(),value:y.string(),cache:Gt}).openapi({ref:"TypeCommand"}),jC=W.merge(y.object({type:y.literal("PRESS"),value:y.string(),repeat:y.number().optional(),convertMeta:y.boolean().optional(),delayMs:y.number().optional()})).openapi({ref:"PressCommand"}),VC=W.merge(y.object({type:y.literal("KEY_DOWN"),value:y.string(),convertMeta:y.boolean().optional()})).openapi({ref:"KeyDownCommand"}),$C=W.merge(y.object({type:y.literal("KEY_UP"),value:y.string(),convertMeta:y.boolean().optional()})).openapi({ref:"KeyUpCommand"}),WC=y.object({type:y.literal("SUBSTRING"),substring:y.string()}),qC=y.object({type:y.literal("REGEX"),pattern:y.string()}),KC=y.object({type:y.literal("INDEX"),index:y.coerce.string()}),YC=y.discriminatedUnion("type",[WC,qC,KC]),XC=W.merge(cs).merge(y.object({type:y.literal("TAB"),action:YC})).openapi({ref:"TabCommand"}),JC=W.merge(cs).merge(y.object({type:y.literal("NEW_TAB"),url:y.string()})).openapi({ref:"NewTabCommand"}),ZC=W.merge(y.object({type:y.literal("COOKIE"),value:y.string()})).openapi({ref:"CookieCommand"}),QC=W.merge(y.object({type:y.literal("LOCAL_STORAGE"),key:y.string(),value:y.string()})).openapi({ref:"LocalStorageCommand"}),ex=W.extend({type:y.literal("REQUEST")}).merge(Eo).openapi({ref:"RequestCommand"}),tx=W.extend({type:y.literal("GRAPHQL_REQUEST")}).merge(kg).openapi({ref:"GraphQLRequestCommand"}),rx=W.merge(y.object({type:y.literal("SUCCESS"),condition:ds.optional()})).openapi({ref:"SuccessCommand"}),nx=W.merge(y.object({type:y.literal("FAILURE")})).openapi({ref:"FailureCommand"}),ox=y.object({data:y.string().describe("location at which to find a jpg"),width:y.number(),height:y.number()}),Ni=W.merge(Ht).merge(y.object({type:y.literal("VISUAL_DIFF"),threshold:y.number().optional().describe("default 0.1"),target:pt.optional(),screenshot:ox.optional(),cache:Gt})).openapi({ref:"VisualDiffCommand"}),ix=W.merge(y.object({type:y.literal("REGISTER_REQUEST_LISTENER"),requestMatcher:wi,key:y.string()})).openapi({ref:"RegisterRequestListenerCommand"}),ax=W.merge(y.object({type:y.literal("AWAIT_LISTENER"),key:y.string(),timeout:y.number().optional().describe("timeout")})).openapi({ref:"WaitForListenerCommand"}),sx=W.merge(y.object({type:y.literal("RECORD_REQUESTS"),requestMatcher:wi,key:y.string()})).openapi({ref:"RecordRequestsCommand"}),lx=W.merge(y.object({type:y.literal("GET_RECORDED_REQUESTS"),key:y.string()})).openapi({ref:"GetRecordedRequestsCommand"}),cx=W.merge(y.object({type:y.literal("SET_HEADER"),name:y.string(),value:y.string(),requestMatcher:wi.optional()})).openapi({ref:"SetHeaderCommand"}),ux=W.merge(y.object({type:y.literal("MOCK_ROUTE"),requestMatcher:wi,responseGenerator:y.string().describe("JavaScript code to generate a response"),fetchOriginalResponse:y.boolean().optional().describe("Whether to fetch the real response and pass it to the response generator. If enabled, the original response will be available as `response` in the code."),key:y.string().optional().describe("Key to reference this mock. This only needs to be set if you plan to remove the mock later in the test.")}).openapi({ref:"MockRouteCommandOptions"})),dx=W.merge(y.object({type:y.literal("REMOVE_ROUTE_MOCK"),key:y.string().optional().describe("Key of the mock to remove. If not set, all route mocks will be removed.")}).openapi({ref:"RemoveRouteMockCommandOptions"})),px=W.merge(y.object({type:y.literal("OFFLINE_MODE"),enable:y.boolean()})).openapi({ref:"OfflineModeCommand"}),zg=y.discriminatedUnion("type",[Ri,Li,jC,VC,$C,Ii,AC,vo,To,ds,_i,RC,rx]),mx=y.discriminatedUnion("type",[HC,OC,IC,uu,ZC,LC,wC,Ci,Oi,FC,MC,PC,kC,QC,xi,JC,zC,NC,_C,ex,tx,Ao,wo,XC,Ni,Mi,Pi,xC,ix,ax,sx,lx,cx,ux,dx,px]),Ro=y.discriminatedUnion("type",[...zg.options,...mx.options]).openapi({ref:"Command"}),ps=y.discriminatedUnion("type",[...zg.options,nx]);function Dr(r){let e;switch(r){case"PASTE":case"AUTH_SAVE":case"VISUAL_DIFF":case"SUCCESS":case"SCROLL_DOWN":case"SCROLL_UP":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"CAPTCHA":case"GO_BACK":case"GO_FORWARD":case"REFRESH":e={id:pe(),type:r};break;case"AUTH_LOAD":{e={id:pe(),type:r,storageState:""};break}case"AI_EXTRACT":e={id:pe(),type:r,goal:""};break;case"DIALOG":e={id:pe(),type:r,action:"DISMISS"};break;case"DRAG":e={id:pe(),type:r,fromTarget:{type:"description",elementDescriptor:""},toTarget:{type:"description",elementDescriptor:""}};break;case"MOUSE_DRAG":e={id:pe(),type:r,deltaX:"0",deltaY:"0",steps:1};break;case"WAIT_FOR_URL":e={id:pe(),type:r,matcher:{type:"SUBSTRING",url:""}};break;case"WAIT":e={id:pe(),type:r,delay:1};break;case"BLUR":e={id:pe(),type:r};break;case"HOVER":case"FOCUS":case"CLICK":e={id:pe(),type:r,target:{type:"description",elementDescriptor:""}};break;case"COOKIE":case"PRESS":case"COPY":case"TYPE":e={id:pe(),type:r,value:"",clearContent:!0};break;case"KEY_DOWN":case"KEY_UP":e={id:pe(),type:r,value:""};break;case"SELECT_OPTION":e={id:pe(),type:r,target:{type:"description",elementDescriptor:""},choice:{type:"VALUE",value:""}};break;case"NAVIGATE":case"NEW_TAB":return{id:pe(),type:r,url:""};case"TAB":e={id:pe(),type:r,action:{type:"SUBSTRING",substring:""}};break;case"REQUEST":e={id:pe(),type:r,url:"",method:"GET"};break;case"GRAPHQL_REQUEST":e={id:pe(),type:r,url:"",query:""};break;case"LOCAL_STORAGE":e={id:pe(),type:r,key:"",value:""};break;case"JAVASCRIPT":e={id:pe(),type:r,code:""};break;case"AI_ASSERTION":e={id:pe(),type:r,assertion:""};break;case"FILE_UPLOAD":{e={id:pe(),type:r,fileSource:{type:"URL",url:""}};break}case"ELEMENT_CHECK":{e={id:pe(),type:r,target:{type:"description",elementDescriptor:""},assertion:{type:"ELEMENT_EXISTENCE",condition:"EXISTS"}};break}case"PAGE_CHECK":{e={id:pe(),type:r,assertion:{type:"CONTENT",value:""}};break}case"REGISTER_REQUEST_LISTENER":{e={id:pe(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"AWAIT_LISTENER":{e={id:pe(),type:r,key:""};break}case"RECORD_REQUESTS":{e={id:pe(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"GET_RECORDED_REQUESTS":{e={id:pe(),type:r,key:""};break}case"SET_HEADER":{e={id:pe(),type:r,name:"",value:""};break}case"MOCK_ROUTE":{e={id:pe(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},responseGenerator:""};break}case"REMOVE_ROUTE_MOCK":{e={id:pe(),type:r};break}case"OFFLINE_MODE":{e={id:pe(),type:r,enable:!0};break}default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}return e}function Hg(r){switch(r.type){case"BLUR":case"CLICK":case"DRAG":case"FOCUS":case"HOVER":case"MOUSE_DRAG":case"PRESS":case"KEY_DOWN":case"KEY_UP":case"SCROLL_DOWN":case"SCROLL_UP":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"TYPE":return!0;case"AUTH_LOAD":case"AUTH_SAVE":case"AWAIT_LISTENER":case"SUCCESS":case"AI_ASSERTION":case"AI_EXTRACT":case"CAPTCHA":case"COOKIE":case"COPY":case"DIALOG":case"ELEMENT_CHECK":case"FILE_UPLOAD":case"GET_RECORDED_REQUESTS":case"GO_BACK":case"GO_FORWARD":case"GRAPHQL_REQUEST":case"JAVASCRIPT":case"LOCAL_STORAGE":case"NAVIGATE":case"NEW_TAB":case"PASTE":case"PAGE_CHECK":case"RECORD_REQUESTS":case"REGISTER_REQUEST_LISTENER":case"REFRESH":case"REQUEST":case"SELECT_OPTION":case"SET_HEADER":case"TAB":case"VISUAL_DIFF":case"WAIT":case"WAIT_FOR_URL":case"OFFLINE_MODE":case"MOCK_ROUTE":case"REMOVE_ROUTE_MOCK":return!1;default:return(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}import{z as gx}from"zod";var RH=gx.discriminatedUnion("type",[Pi,uu,Ri,Ci,Mi,_i,xi,To,vo,Ao,wo,Ii,Li,Ni,Oi]);import{z as hx}from"zod";import{z as en}from"zod";function ki(r){return en.object({key:en.string(),testId:en.string().optional(),moduleId:en.string().optional(),organizationId:en.string(),value:r})}function Di(r){return ki(r).extend({uniqueKey:en.string()})}function ms(r){return en.record(en.string(),Di(r))}var bt={type:!0,cache:!0},Co=hx.discriminatedUnion("type",[ds.pick(bt),Pi.pick(bt),Ri.pick(bt),Ci.pick(bt),Oi.pick(bt),Mi.pick(bt),_i.pick(bt),xi.pick(bt),To.pick(bt),vo.pick(bt),Ao.pick(bt),wo.pick(bt),Ii.pick(bt),Li.pick(bt),Ni.pick(bt)]),mu=Object.values(st).filter(r=>Co.options.some(e=>e.shape.type.safeParse(r).success));Ro.options.forEach(r=>{if("target"in r.shape&&!mu.includes(r.shape.type.value))throw new Error(`Command ${r.shape.type.value} has a target but no cache`)});function Gg(r){return mu.includes(r.type)}var jg=ki(Co),Vg=Di(Co),LH=ms(Co);import{z as gu}from"zod";import{extendZodWithOpenApi as yx}from"zod-openapi";import{z as $g}from"zod";import{extendZodWithOpenApi as fx}from"zod-openapi";import{z as _n}from"zod";var jt=_n.object({index:_n.number().optional().describe("global index within a test (in-order traversal)"),id:_n.string(),skipped:_n.boolean().optional(),envKey:_n.string().optional().describe("key in the environment to save the result of this step to"),aiSuggested:_n.boolean().optional(),retries:_n.number().optional()});fx($g);var Sx=jt.extend({type:$g.literal("PRESET_ACTION")}),Vt=Sx.extend({command:Ro}).openapi({ref:"PresetAction"});yx(gu);var Mn=jt.extend({type:gu.literal("AI_ACTION"),text:gu.string(),steps:Vt.array().optional()}).openapi({ref:"AIAction"});import{z as Et}from"zod";import{z as gs}from"zod";import{extendZodWithOpenApi as bx}from"zod-openapi";bx(gs);var xo=jt.extend({type:gs.literal("AI_ACTION_DYNAMIC"),text:gs.string(),retries:gs.number().optional()}).openapi({ref:"AIActionDynamic"});import{z as Wg}from"zod";var hu=jt.extend({type:Wg.literal("CONDITIONAL"),skipped:Wg.boolean().optional()});import{z as se}from"zod";var Ex=se.object({cacheKey:se.string(),cacheExpiryMs:se.number()}),fu=jt.extend({id:se.string().uuid().describe("ID of the module step itself. Used to 'namespace' step cache entries."),inputs:se.record(se.string()).optional(),cacheConfig:Ex.optional()}),Ur=fu.extend({type:se.literal("MODULE"),moduleId:se.string().uuid()}),Tx=se.union([Ur.pick({type:!0,moduleId:!0}),se.record(se.unknown())]),vx=se.object({type:se.literal("URL_REGEX"),regex:se.string()}),Ax=se.object({type:se.literal("PAGE_CHECK"),substring:se.string()}),Su=se.object({cacheInvalidation:se.discriminatedUnion("type",[Ax,vx]).optional()}),$t=se.object({moduleId:se.string().uuid(),name:se.string(),description:se.string().nullish(),enabled:se.boolean().nullish(),parameters:se.string().array().nullish(),defaultParameters:se.record(se.string(),se.string()).nullish(),parameterEnums:se.record(se.string(),se.string().array()).nullish(),defaultCacheKey:se.string().nullish(),defaultCacheTtl:se.number().nullish(),defaultCacheAllInvocations:se.boolean().nullish(),autoAuth:se.boolean().nullish(),advanced:Su.nullish()});import{z as Wt}from"zod";var qg=(n=>(n.ALWAYS="ALWAYS",n.ON_FAILURE="ON_FAILURE",n.ON_ACTION_FAILURE="ON_ACTION_FAILURE",n))(qg||{});var wx=Wt.discriminatedUnion("type",[Wt.object({type:Wt.literal("NAVIGATE_URL"),url:Wt.string().url()}),Wt.object({type:Wt.literal("GO_TO_SECTION_START")})]),Rx=Wt.object({trigger:Wt.nativeEnum(qg).optional(),attempts:Wt.number().int().optional(),restartBehavior:wx}),Ui=jt.extend({type:Wt.literal("SECTION"),description:Wt.string().describe("user provided goal of what the section should accomplish"),plan:Wt.string().array().optional(),autohealingConfig:Rx.optional()});var Kg=$t.merge(fu).extend({type:Et.literal("RESOLVED_MODULE"),steps:Et.lazy(()=>Je.array())}),Fi=$t.extend({steps:Et.lazy(()=>Je.array())}),yu=Ui.extend({steps:Et.lazy(()=>Tt.array())}),Cx=Ui.extend({steps:Et.lazy(()=>Je.array())}),_o=hu.extend({blocks:Et.object({assertion:Et.lazy(()=>Vt),steps:Et.lazy(()=>Tt.array())}).array(),elseSteps:Et.lazy(()=>Tt.array().optional())}),xx=hu.extend({blocks:Et.object({assertion:Et.lazy(()=>Vt),steps:Et.lazy(()=>Je.array())}).array(),elseSteps:Et.lazy(()=>Je.array().optional())}),Tt=Et.discriminatedUnion("type",[Vt,Mn,xo,Ur,_o,yu]),Je=Et.discriminatedUnion("type",[Vt,Mn,xo,Kg,xx,Cx]);import{z as qt}from"zod";var _x=qt.object({steps:Tt.array(),beforeSteps:Tt.array().nullish(),afterSteps:Tt.array().nullish()}),Mo=qt.object({steps:Je.array(),beforeSteps:Je.array().nullish(),afterSteps:Je.array().nullish()}),Pn=qt.object({steps:qt.record(qt.string(),qt.unknown()).array(),beforeSteps:qt.record(qt.string(),qt.unknown()).array().nullish(),afterSteps:qt.record(qt.string(),qt.unknown()).array().nullish()});var In="1.0.21",bu="0.0.1";var Yg=O.object({phrase:O.string()}),Eu=O.object({thoughts:O.string().optional(),result:O.union([O.literal("NOT_FOUND"),O.string(),O.number(),O.array(O.unknown()),O.record(O.unknown(),O.unknown()),O.unknown()])}),yj=O.object({text:O.string()}),Xg=O.object({attributes:O.array(O.string()).optional(),text:O.boolean().optional(),boundingBox:O.boolean().optional()}),Mx=O.object({id:O.number().int(),requirements:Xg}),Px=Mx.array(),Jg=O.object({thoughts:O.string(),review:O.string().optional(),id:O.number().int(),updatedMemory:ou.optional(),requirements:Xg.optional(),additionalElements:Px.optional()});var Tu=(g=>(g.NO_DESCRIPTION_PROVIDED="NO_DESCRIPTION_PROVIDED",g.FEW_WORDS="FEW_WORDS",g.STYLE_TAG="STYLE_TAG",g.TYPE_IN_DESCRIPTION="TYPE_IN_DESCRIPTION",g.HARDCODED_ATTRIBUTE="HARDCODED_ATTRIBUTE",g.NONE="NONE",g.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",g.AMBIGUOUS_ASSERTION="AMBIGUOUS_ASSERTION",g.PREFER_PAGE_CHECK="PREFER_PAGE_CHECK",g.PREFER_ASSERTION="PREFER_ASSERTION",g.HTML_ELEMENTS="HTML_ELEMENTS",g.MULTIPLE_ELEMENTS_DESCRIPTION="MULTIPLE_ELEMENTS_DESCRIPTION",g.NEEDS_DATE_VARIABLE="NEEDS_DATE_VARIABLE",g))(Tu||{}),Zg=(o=>(o.NONE="NONE",o.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",o.COPILOT_MISUSE="COPILOT_MISUSE",o.IRRELEVANT_MESSAGE="IRRELEVANT_MESSAGE",o))(Zg||{});var Qg=O.object({thoughts:O.string(),category:O.nativeEnum(Tu)}),eh=O.object({thoughts:O.string(),category:O.nativeEnum(Zg)}),Ix=O.discriminatedUnion("op",[O.object({op:O.literal("replace"),path:O.string(),value:O.string()}),O.object({op:O.literal("add"),path:O.string(),value:O.string()}),O.object({op:O.literal("remove"),path:O.string()})]),bj=O.object({thoughts:O.string(),patches:Ix.array()}),Ox=[O.literal("add"),O.literal("replace"),O.literal("remove")],Lx=O.object({op:O.union(Ox),path:O.string(),value:Je.optional()}),th=O.object({patches:Lx.array(),thoughts:O.string()}),rh=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))(rh||{}),nh=O.object({thoughts:O.string(),scenario:O.nativeEnum(rh),instructions:O.string().nullish()}),oh=O.object({reasoning:O.string(),scenario:O.string(),patch:O.null().optional()}),Ej=O.object({thoughts:O.string(),evaluation:O.number().min(0).max(10)}),Tj=O.object({observations:O.string(),reasoning:O.string(),command:ps});var vu=O.object({summary:O.string(),reasoning:O.string(),evaluation:O.discriminatedUnion("type",[O.object({type:O.literal("DONE")}),O.object({type:O.literal("RIGHT_TRACK")}),O.object({type:O.literal("WRONG_TRACK"),feedback:O.string()}),O.object({type:O.literal("IMPOSSIBLE")})])}),Nx=O.object({startId:O.number().int(),endId:O.number().int()}),Au=(n=>(n.SIMPLE_CONTENT_BASED_LOCATOR="SIMPLE_CONTENT_BASED_LOCATOR",n.SIMPLE_CONTENT_BASED_ASSERTION="SIMPLE_CONTENT_BASED_ASSERTION",n.OTHER="OTHER",n))(Au||{}),ih=O.object({categoryThoughts:O.string(),category:O.nativeEnum(Au),relevantSections:Nx.array()});import{z as I}from"zod";import*as re from"zod";var xj=re.object({thoughts:re.string().optional().describe("only provided if a description was provided"),target:Xr.optional().describe("only provided if a description was provided"),pageState:re.string().optional().describe("serialized a11y tree, only provided if a description was provided"),options:re.object({label:re.string(),value:re.string()}).array().optional().describe("list of options, provided for <select> elements only"),screenshot:re.object({data:re.string(),height:re.number().int(),width:re.number().int()}).optional().describe("only provided if returnScreenshot is true")}),ah=re.union([re.literal("ELEMENT_CHECK"),re.literal("NEGATED_CHECK"),re.literal("NEGATED_ELEMENT_VISIBLE_CHECK"),re.literal("SELECT_OPTION"),re.literal("TYPE")]);function Bi(r){if(!("useSelector"in r&&r.useSelector)){if(r.type==="SELECT_OPTION")return"SELECT_OPTION";if(r.type==="TYPE")return"TYPE";if(r.type==="ELEMENT_CHECK"&&r.assertion.type==="ELEMENT_EXISTENCE"&&r.assertion.condition==="EXISTS"&&r.assertion.negated)return"NEGATED_CHECK";if(r.type==="ELEMENT_CHECK"&&r.assertion.type==="ELEMENT_EXISTENCE"&&r.assertion.condition==="VISIBLE"&&r.assertion.negated)return"NEGATED_ELEMENT_VISIBLE_CHECK";if(r.type==="ELEMENT_CHECK")return"ELEMENT_CHECK"}}var zi=(a=>(a.USER_SELECTOR="USER_SELECTOR",a.CSS_SELECTOR="CSS_SELECTOR",a.HYBRID_SELECTOR="HYBRID_SELECTOR",a.HTML_DISTANCE="HTML_DISTANCE",a.TEMPLATE_MATCHING="TEMPLATE_MATCHING",a.AUTO_FRAME="AUTO_FRAME",a))(zi||{}),Po=re.object({matched:re.boolean(),reason:re.string().optional().describe("Human understandable description"),logs:re.string().array().optional().describe("Logs for debugging")}),kx=Po.extend({type:re.literal("USER_SELECTOR")}),Dx=Po.extend({type:re.literal("CSS_SELECTOR"),selectors:re.string().array()}),Ux=Po.extend({type:re.literal("HYBRID_SELECTOR")}),Fx=Po.extend({type:re.literal("HTML_DISTANCE"),distance:re.number().optional(),closestElement:re.string().optional(),savedElement:re.string().optional()}),Bx=Po.extend({type:re.literal("TEMPLATE_MATCHING"),elementImageUrl:re.string().url()}),zx=Po.extend({type:re.literal("AUTO_FRAME"),logs:re.string().array().optional()}),sh=re.discriminatedUnion("type",[kx,Dx,Ux,Fx,Bx,zx]);import{z as Vi}from"zod";import{z as Jx}from"zod";import*as $ from"zod";import{extendZodWithOpenApi as jx}from"zod-openapi";import{cloneDeep as Fj}from"lodash-es";import zj from"truncate-json";import*as Nn from"zod";import{extendZodWithOpenApi as Hx}from"zod-openapi";import{z as mt}from"zod";import{z as ve}from"zod";var wu=ve.object({autoFollowNewTabs:ve.boolean().optional().describe("Deprecated: Auto-follow new tabs that are opened."),showZeroOpacityElements:ve.union([ve.boolean(),ve.literal("inputs-only")]).optional(),ignoreHrefForCaching:ve.boolean().optional(),disableSecondaryCacheResolution:ve.boolean().optional(),hybridSelectorMode:ve.enum(["off","test","prefer"]).optional(),globalLocatorRedirect:ve.boolean().optional(),visualActions:ve.boolean().optional(),autoExpandIframes:ve.boolean().optional(),disableHtmlSnapshots:ve.boolean().optional(),importantAttributes:ve.string().array().optional(),importantClasses:ve.string().array().optional(),importantStyles:ve.string().array().optional()});var lh=1e4,ch=6e4,On=wu.extend({pageLoadTimeoutMs:ve.number().optional().refine(r=>r===void 0||r<=ch&&r>=-1,{message:`Page load timeout must be between 0 and ${ch/1e3} seconds`}).describe("global page load timeout default for all tests in ms, can still be overridden by individual tests"),smartWaitingTimeoutMs:ve.number().optional().refine(r=>r===void 0||r<=lh&&r>=-1,{message:`Smart waiting timeout must be between 0 and ${lh/1e3} seconds`}),localChromeExtensionPaths:ve.string().array().optional(),extraHeaders:ve.record(ve.string(),ve.string()).optional().describe("HTTP headers to be sent on every request"),userAgent:ve.string().optional(),disableGpu:ve.boolean().optional(),bustCacheOnBoundingBoxChange:ve.boolean().optional().describe("Bust the cache if no elements are matched that have the same bounding box and location as the original element. This will improve accuracy on sites that use many same components, at the expense of stability and speed."),allowPartialAccessibilityTree:ve.boolean().optional().describe("Allow fetching the partial accessibility tree if fetching the full tree takes too long."),ignoreHttpsErrors:ve.boolean().optional().describe("Ignore HTTPS errors, such as self-signed certificates and certificate errors. This can be useful for testing sites that use self-signed certificates or certificate errors.")});var Ru="BASE_URL";var Ln="ENV_NAME",Io="TEST_NAME",Lj={[Ru]:"https://www.google.com"},uh=mt.string().describe("Name of the fixture (must be available locally in the fixtures directory)."),dh=mt.object({name:mt.string(),variables:mt.record(mt.string().describe("variable name"),mt.string().describe("variable value"))}),ph=mt.object({name:mt.string(),variables:mt.record(mt.string().describe("variable name"),mt.unknown().describe("variable value")),browser:On.optional()});var Nj=mt.object({name:mt.string(),variables:mt.record(mt.string().describe("variable name"),mt.unknown().describe("variable value"))});Hx(Nn);var Cu=Nn.object({env:Nn.record(Nn.unknown())}).openapi({ref:"TestContextSnapshot"});var Ze=(i=>(i.SUCCESS="SUCCESS",i.FAILED="FAILED",i.RUNNING="RUNNING",i.IDLE="IDLE",i.CANCELLED="CANCELLED",i))(Ze||{}),xu=(n=>(n.SUCCESS="SUCCESS",n.FAILED="FAILED",n.CANCELLED="CANCELLED",n))(xu||{});import{z as yr}from"zod";import{extendZodWithOpenApi as Gx}from"zod-openapi";Gx(yr);var Ee=(p=>(p.AI_PROVIDER="AIProviderError",p.USER_INFRA="UserInfrastructureError",p.ACTION_FAILURE="ActionFailureError",p.ASSERTION_FAILURE="AssertionFailureError",p.CONFIG_ERROR="UserConfigurationError",p.SETUP_FAILURE="SetupFailureError",p.TEARDOWN_FAILURE="TeardownFailureError",p.WEB_AGENT_PLATFORM="InternalWebAgentError",p.UNKNOWN_PLATFORM="InternalPlatformError",p.JOB_TIMEOUT="JobTimeoutError",p.CONCURRENCY_ERROR="ConcurrencyError",p.UNKNOWN="UnknownError",p))(Ee||{});var _u=yr.object({reason:yr.nativeEnum(Ee),previousStepsDescription:yr.array(yr.string()).optional(),summary:yr.string(),rootCause:yr.string().optional()}).openapi({ref:"TestResultClassification"}),hs=yr.object({errorMessage:yr.string(),errorStack:yr.string().optional(),classification:_u.optional()}).openapi({ref:"TestFailureDetails"});jx($);var Mu=$.object({beforeUrl:$.string().optional(),afterUrl:$.string().optional(),message:$.string().optional(),beforeSnapshot:$.string().optional(),afterSnapshot:$.string().optional(),startedAt:$.coerce.date(),finishedAt:$.coerce.date()}),Vx=Mu.extend({viewport:$.object({height:$.number(),width:$.number()}).nullish(),status:$.nativeEnum(xu),message:$.string().optional(),elementInteracted:$.string().optional()}),kn=Mu.extend({status:$.nativeEnum(Ze),message:$.string().optional(),data:$.unknown().optional(),beforeTestContext:Cu.optional(),afterTestContext:Cu.optional(),failureReason:$.nativeEnum(Ee).optional(),details:$.unknown().describe("Parse using StepExecutionLogSchema.array() to get type safety. We don't explicitly type it because it's non-critical information.")}).openapi({ref:"StepResultMetadata"}),mh=(t=>(t.NOT_ELIGIBLE="NOT_ELIGIBLE",t.ATTEMPTED="ATTEMPTED",t))(mh||{}),fs=kn.merge(Vt).extend({results:Vx.array().describe("Command that was executed. Array is just for consistency with other result types. There should only ever be one item."),previousAttempts:$.lazy(()=>tt.array()).optional(),failureRecoveryStatus:$.object({type:$.nativeEnum(mh),message:$.string()}).optional()}),$x=kn.merge(Mn).extend({results:$.lazy(()=>fs.array()),previousAttempts:$.lazy(()=>tt.array()).optional()}),Wx=kn.merge(xo).extend({results:$.lazy(()=>fs.array()),previousAttempts:$.lazy(()=>tt.array()).optional()}),qx=kn.merge(Ur).extend({moduleName:$.string().optional(),results:$.lazy(()=>tt.array()),previousAttempts:$.lazy(()=>tt.array()).optional()}),Kx=kn.merge(_o).extend({assertion:fs.optional(),results:$.lazy(()=>tt.array()).describe("results for the block actually executed"),previousAttempts:$.lazy(()=>tt.array()).optional()}),Yx=kn.merge(Ui).extend({results:$.lazy(()=>tt.array()),healingAttempts:$.lazy(()=>tt.array().array()).optional(),previousAttempts:$.lazy(()=>tt.array()).optional()}),tt=$.discriminatedUnion("type",[$x,Wx,fs,qx,Kx,Yx]),iV=kn.pick({startedAt:!0,finishedAt:!0,status:!0,message:!0,data:!0}),Xx=Mu.extend({index:$.number().optional(),description:$.string(),pageState:$.string().optional(),elementInteracted:$.string().optional(),startedAt:$.coerce.date().or($.string()).optional().catch(void 0),finishedAt:$.coerce.date().or($.string()).optional().catch(void 0)}),Ss=Xx.extend({beforeScreenshot:$.string().optional(),afterScreenshot:$.string().optional()});var Pu=Jx.object({results:tt.array().describe("main results"),beforeResults:tt.array().optional(),afterResults:tt.array().optional()}),Hi=Pu.partial();import{z}from"zod";import{extendZodWithOpenApi as o_}from"zod-openapi";var Oo=(t=>(t.WEB="WEB",t.ANDROID="ANDROID",t))(Oo||{});import{isValidCron as Zx}from"cron-validator";import{z as ne}from"zod";import{z as Iu}from"zod";var tn=(n=>(n.CHROMIUM="Chromium",n.GOOGLE_CHROME="Google Chrome",n.CHROME_FOR_TESTING="Chrome for Testing",n))(tn||{});var ys=Iu.object({width:Iu.number().min(200).max(1e4),height:Iu.number().min(200).max(1e4)}),gh={"Desktop Large":{width:1920,height:1080},"Desktop Small":{width:1280,height:800},iPad:{width:768,height:1024},"Pixel 8":{width:448,height:998},"iPhone 15":{width:393,height:852}},pV=Object.keys(gh);var rn=gh["Desktop Large"],hh="en-us",fh="America/Los_Angeles";var Sh={latitude:37.7749,longitude:-122.4194};var yh=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Araguaina","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"];var bh=2e3,Qx=On.extend({browserType:ne.nativeEnum(tn).optional(),slowMoMs:ne.number().optional().refine(r=>r===void 0||r<=bh&&r>=-1,{message:`Slow motion must be between 0 and ${bh} milliseconds`}),basicAuthorization:ne.object({username:ne.string().optional(),password:ne.string().optional()}).optional(),geolocation:ne.object({latitude:ne.coerce.number().refine(r=>r>=-90&&r<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:ne.coerce.number().refine(r=>r>=-180&&r<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),disableJavaScript:ne.boolean().optional(),locale:ne.string().optional(),timezone:ne.enum(yh).optional(),colorScheme:ne.enum(["light","dark"]).optional()});var Ou=ne.object({useMemory:ne.boolean().optional(),failureRecovery:ne.boolean().optional().describe("undefined means inherit org settings")}),e_=Ou.extend({disableAICaching:ne.boolean().optional(),failureRecoveryInstructions:ne.string().optional()}),t_=ne.object({viewport:ys.optional()}),Gi=t_.merge(e_).merge(Qx),Lo=ne.object({cron:ne.string().refine(r=>Zx(r),{message:"Invalid cron expression."}).default("0 0 */1 * *"),enabled:ne.boolean().default(!1),env:ne.string().optional(),timeZone:ne.string().default("America/Los_Angeles"),jobKey:ne.string().optional()}),No=ne.object({onSuccess:ne.boolean().default(!1),failureMessage:ne.string().optional(),onFailure:ne.boolean().default(!0),successMessage:ne.string().optional()}),r_=ne.object({name:ne.string(),required:ne.boolean().optional(),defaultValue:ne.string().describe("this is not optional because we need a value when the editor is first loaded")}),bs=r_.array(),n_=ne.object({name:ne.string(),value:ne.string()}),Eh=n_.array(),Es=ne.object({name:ne.string(),default:ne.boolean().optional(),fixtures:uh.array().optional()});o_(z);var Kt={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},ye=(s=>(s.PENDING="PENDING",s.RUNNING="RUNNING",s.PASSED="PASSED",s.FAILED="FAILED",s.CANCELLED="CANCELLED",s.RETRYING="RETRYING",s.WAITING_FOR_USER="WAITING_FOR_USER",s))(ye||{}),Ts=(t=>(t.BEFORE_ALL="BEFORE_ALL",t.AFTER_ALL="AFTER_ALL",t))(Ts||{});var je=z.string().pipe(z.coerce.date()).or(z.date()),ji=z.object({id:z.string(),runKey:z.string(),organizationId:z.string(),executionType:z.nativeEnum(Oo).optional().default("WEB"),createdAt:je,createdBy:z.string(),flake:z.boolean().nullish(),scheduledAt:je.or(z.null()),startedAt:je.or(z.null()),updatedAt:je.nullish(),finishedAt:je.or(z.null()),resolvedBaseUrl:z.string().nullish(),environmentName:z.string().nullish(),gitBranchName:z.string().nullish(),githubRepository:z.string().nullish(),gitlabProjectPath:z.string().nullish(),labels:z.array(z.string()).optional(),gitOriginUrl:z.string().nullish(),gitCommitSha:z.string().nullish(),gitCommitShaShort:z.string().nullish(),gitCommitAuthorName:z.string().nullish(),cliVersion:z.string().nullish(),section:z.nativeEnum(Ts).nullish(),status:z.nativeEnum(ye),trigger:z.nativeEnum(Kt),attempts:z.number(),runAttempts:z.array(z.object({id:z.string(),status:z.nativeEnum(ye),startedAt:je.or(z.null()),finishedAt:je.or(z.null())})).optional(),videos:z.array(z.string()).optional(),failureReason:z.nativeEnum(Ee).nullish(),failureDetails:hs.nullish(),failureRecoveryDetails:z.record(z.string(),z.unknown()).nullish(),pipelineId:z.string().nullish(),resolvedInputs:z.record(z.string(),z.string()).nullish(),quarantined:z.boolean().nullish().default(!1),quarantinedReason:z.string().nullish(),localTestId:z.string().nullish(),testId:z.string().nullish(),testName:z.string().nullish(),description:z.string().nullish(),test:z.object({name:z.string(),id:z.string()}).nullish().default(null),suiteId:z.string().nullish()}).openapi({ref:"RunMetadata"}),i_={id:!0,status:!0,testName:!0,localTestId:!0,testId:!0,test:{select:{name:!0,id:!0}},finishedAt:!0,failureReason:!0,failureDetails:!0},vs=ji.pick({...i_,test:!0}),Th=ji.omit({failureReason:!0,failureDetails:!0,test:!0}),Lu=ji.extend({stepsSnapshot:z.array(z.record(z.unknown())).nullish(),resolvedInputs:z.record(z.string(),z.string()).nullish(),test:z.object({name:z.string(),id:z.string(),description:z.string().nullish(),baseUrl:z.string().nullish(),advanced:Gi.nullish()}).nullish()}).merge(Pu);var a_=Vi.object({id:Vi.string().uuid(),startedAt:je.or(Vi.null()),finishedAt:je.or(Vi.null()),status:Vi.nativeEnum(ye)}).merge(Hi),NV=a_.array();import{z as Ve}from"zod";var s_=Ve.object({id:Ve.string(),status:Ve.nativeEnum(ye),trigger:Ve.nativeEnum(Kt),createdAt:je,startedAt:je.nullish(),finishedAt:je.nullish(),gitCommitSha:Ve.string().nullish(),gitCommitShaShort:Ve.string().nullish(),gitCommitTimestamp:je.nullish(),gitBranchName:Ve.string().nullish(),gitOriginUrl:Ve.string().nullish(),gitCommitMessage:Ve.string().nullish(),gitCommitAuthorName:Ve.string().nullish(),githubRepository:Ve.string().nullish(),gitlabProjectPath:Ve.string().nullish(),pipelineId:Ve.string().nullish(),cliVersion:Ve.string().nullish(),labels:Ve.string().array().optional(),suite:Ve.object({id:Ve.string(),name:Ve.string()}).nullish(),runs:Ve.object({status:Ve.nativeEnum(ye)}).array()}).openapi({ref:"RunGroup"}),vh=s_.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0}).extend({runs:vs.array()});import{z as rt}from"zod";var l_=rt.object({type:rt.literal("TARGETING"),name:rt.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:sh.array(),pageState:rt.string().optional(),targetSource:rt.nativeEnum(Yr).optional(),targetUpdateTime:rt.string().optional()}),c_=rt.object({type:rt.literal("AI_LOCATION"),matched:rt.boolean(),pageState:rt.string().optional(),ragUsed:rt.boolean().optional(),thoughts:rt.string().optional()}),u_=rt.object({type:rt.literal("ASSERTION"),relevantElementsSerialized:rt.string().array().optional(),pageState:rt.string().optional(),ragUsed:rt.boolean().optional()}),d_=rt.discriminatedUnion("type",[l_,c_,u_]);import{z as Be}from"zod";var p_=Be.object({id:Be.string(),name:Be.string()}),KV=p_.merge(Be.object({createdAt:je,createdBy:Be.string(),schedule:Lo,notification:No,environment:Be.object({name:Be.string()}).nullish(),beforeTests:Be.object({id:Be.string()}).array().nullish(),afterTests:Be.object({id:Be.string()}).array().nullish()})),Ah=Be.object({id:Be.string().uuid(),orgId:Be.string(),createdAt:je,startedAt:je.or(Be.null()),finishedAt:je.or(Be.null()),status:Be.nativeEnum(ye),trigger:Be.nativeEnum(Kt),suite:Be.object({id:Be.string(),name:Be.string()}).nullish(),runs:ji.array()}),YV=Ah.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0}),wh=Ah.extend({runs:vs.array()});import{z as Yt}from"zod";import{cloneDeep as ZV}from"lodash-es";import{z as me}from"zod";var o$=me.object({thoughts:me.string(),subGoals:me.object({instruction:me.string()}).array()}),i$=me.object({thoughts:me.string(),newPlanMarkdown:me.string()}),a$=me.object({thoughts:me.string(),correct:me.boolean(),failedActionIndex:me.number().optional()}),m_=me.object({type:me.literal("PLANNING"),beforePlan:me.string(),goalDecision:me.string(),thoughts:me.string()}),g_=me.object({type:me.literal("RUNNING"),stepDisplayName:me.string(),status:me.nativeEnum(Ze),results:tt.array()}),h_=me.object({type:me.literal("REVISING"),beforePlan:me.string(),afterPlan:me.string(),errString:me.string(),diffs:me.string(),thoughts:me.string()}),f_=me.object({type:me.literal("SYSTEM"),message:me.string()}),S_=me.discriminatedUnion("type",[m_,g_,h_,f_]),Rh=S_.array();var d$=Yt.object({id:Yt.string(),scheduledAt:Yt.coerce.date().nullable(),startedAt:Yt.coerce.date().nullable(),finishedAt:Yt.coerce.date().nullable(),status:Yt.nativeEnum(ye),history:Rh.nullable(),testPlan:Yt.object({id:Yt.string(),name:Yt.string()}).nullable(),test:Yt.object({id:Yt.string(),name:Yt.string()}).nullable()});import{z as vt}from"zod";var Nu=vt.object({content:vt.string(),ids:vt.string().array(),tokenLength:vt.number()}),y_=vt.object({chunks:Nu.array()}),_$=vt.object({ids:vt.string().array(),score:vt.number(),tokenLength:vt.number()}),M$=y_.extend({description:vt.string().describe("Input to pass to RAG engine"),tokenLimit:vt.number()}),Ch=vt.object({ids:vt.number().array()}),xh=vt.object({indices:vt.number().array()});var gt=I.object({disableCache:I.boolean().optional(),useMemory:I.boolean().optional(),loggerTags:I.record(I.string(),I.string()).optional(),langfuseSessionId:I.string().optional(),agentConfigVersion:I.string().optional()}),U$=gt.extend({chunks:Nu.array(),description:I.string().describe("Input to pass to AI"),type:I.union([I.literal("locator"),I.literal("assertion"),I.literal("ai-action")]),softTokenLimit:I.number(),hardTokenLimit:I.number()}),b_=I.object({screenshotBase64AfterCommand:I.string(),urlAfterCommand:I.string(),serializedCommand:I.string(),elementInteracted:I.string().optional(),thoughts:I.string().optional()}),_h=I.object({goal:I.string(),browserState:I.string(),screenshot:I.string(),source:ah.optional().catch(void 0),memory:I.discriminatedUnion("type",[is,I.object({type:I.literal("RESOLVED_TRACES"),traces:I.unknown().array()})]).optional()}),Mh=I.object({target:I.string().or(I.number()),browserState:I.string().optional(),screenshot:I.string().optional(),boundingBox:I.object({x:I.number(),y:I.number(),height:I.number(),width:I.number()}).optional()}),Ph=I.object({goal:I.string(),browserState:I.string(),screenshot:I.string().optional(),returnSchema:I.string().optional()}),E_=I.literal("NEGATED_CHECK"),Ih=I.object({goal:I.string(),browserState:I.string(),screenshot:I.string(),url:I.string(),contextChoice:du.optional(),memory:I.discriminatedUnion("type",[su,I.object({type:I.literal("RESOLVED_TRACES"),traces:I.unknown().array()})]).optional(),source:E_.optional()}),Oh=I.object({command:Ro}),Lh=I.object({message:I.string()}),ku=I.object({goal:I.string(),browserState:I.string(),startingScreenshot:I.string().optional(),screenshot:I.string(),url:I.string(),history:b_.array(),actionHint:I.string().optional(),lastError:I.string().optional()}),Nh=I.object({results:Ss.array(),errorMessage:I.string(),errorStack:I.string().optional()}),kh=I.object({results:Ss.array(),goal:I.string(),errorMessage:I.string()}),Dh=I.object({failedResults:Ss.array(),nextStepsSerialized:I.string().array(),currentUrl:I.string(),currentPageState:I.string(),currentScreenshot:I.string(),customInstructions:I.string().optional(),testDescription:I.string().optional()}),F$=I.object({description:I.string(),type:I.union([I.literal("locator"),I.literal("assertion"),I.literal("ai-action")]),excerpt:I.string()}),Uh=I.object({type:I.string(),browserContext:I.string(),currentStep:I.string(),screenshot:I.string()});import{z as $i}from"zod";var H$=$i.object({goal:$i.string()}),Fh=$i.object({keywords:$i.array($i.string())});import{z as Du}from"zod";var As=(o=>(o.LOCATOR="locator",o.ASSERTION="assertion",o.VISUAL_ASSERTION="visual-assertion",o.TEXT_EXTRACTION="text-extraction",o))(As||{}),V$=Du.nativeEnum(As),T_=Du.enum(["v1","v2"]),$$=T_.or(Du.string().describe("for people with special configurations"));import{z as Oe}from"zod";var Bh=Oe.object({attributesRequired:Oe.array(Oe.string()).optional(),textRequired:Oe.boolean().optional(),boundsRequired:Oe.boolean().optional()}),zh=Oe.object({id:Oe.number(),thoughts:Oe.string(),inWebview:Oe.boolean().optional(),requirements:Bh.optional(),additionalElements:Oe.object({id:Oe.number(),requirements:Bh}).array().optional()}),Hh=Oe.object({description:Oe.string(),screenXml:Oe.string(),screenshot:Oe.string()}),Gh=Oe.object({assertion:Oe.string(),screenXml:Oe.string(),screenshot:Oe.string()}),jh=Oe.object({thoughts:Oe.string(),result:Oe.boolean(),relevantElements:Oe.array(Oe.number()).optional()});import{z as Dn}from"zod";var Vh=Dn.object({id:Dn.string().uuid(),skipped:Dn.boolean().optional(),envKey:Dn.string().optional().describe("key in the environment to save the result of this step to")}),Uu=Vh.merge(Eo).extend({type:Dn.literal("REQUEST")}),Fu=Vh.merge(ss).extend({type:Dn.literal("JAVASCRIPT")}),Bu=Dn.discriminatedUnion("type",[Fu,Uu]);import{z as Xt}from"zod";import{z as Un}from"zod";var v_=/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/,nn=r=>{let e=r.trim().toLowerCase().replace(/[^a-z0-9]/g,"-");for(;e.includes("--");)e=e.replaceAll("--","-");return e.startsWith("-")&&(e=e.slice(1)),e.endsWith("-")&&(e=e.slice(0,e.length-1)),e};var ws=Un.string().min(1).max(255).superRefine((r,e)=>{try{zu(r)}catch(t){return e.addIssue({code:Un.ZodIssueCode.custom,message:t.message,fatal:!0}),Un.NEVER}});function zu(r){if(r=r.toLowerCase().trim(),r.length===0||r.length>255)throw new Error("Name must be between 1 and 255 characters long");if(/[<>:"/\\|?*]/.test(r))throw new Error('Name contains one of the following invalid characters: <>:"/\\|?*');if(r.endsWith("-")||r.startsWith("-"))throw new Error("Name cannot start or end with a dash.");if(r.includes("\0"))throw new Error("Name cannot contain null characters");if(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i.test(r))throw new Error(`"${r}" is a reserved name on Windows and cannot be used as a filename.`);if(/^\.+$/.test(r)||/^\s|\s$/.test(r))throw new Error("Name cannot start or end with a space or dot.");if(r.endsWith(".yaml"))throw new Error('Name cannot end with ".yaml".');if(r==="none")throw new Error("Name cannot be 'none'.");if(r.match(v_))throw new Error("Name cannot be a UUID. Please choose a different name.")}var Rs=Un.preprocess(r=>r===null?"":r,Un.union([Un.string().url(),Un.literal("")])).optional();var $h=Xt.object({id:Xt.string(),name:ws,description:Xt.string().optional().nullish(),baseUrl:Rs.nullish(),schemaVersion:Xt.string(),advanced:Xt.unknown().optional(),retries:Xt.number(),envs:Xt.array(Es).nullish(),parameters:bs.nullish()}),A_=Xt.object({createdAt:Xt.coerce.date(),updatedAt:Xt.coerce.date(),schedule:Lo.nullish(),notification:No.nullish(),createdBy:Xt.string(),organizationId:Xt.string()}),w_=$h.merge(A_),SW=w_.extend({steps:Bu.array()}),yW=$h.extend({steps:Bu.array()});import{z as xt}from"zod";var Wh=xt.object({startedAt:xt.coerce.date(),finishedAt:xt.coerce.date(),status:xt.nativeEnum(Ze),message:xt.string().optional(),data:xt.unknown().optional()}),R_=Wh.merge(Fu).extend({type:xt.literal("JAVASCRIPT")}),C_=Wh.merge(Uu).extend({type:xt.literal("REQUEST")}),x_=xt.discriminatedUnion("type",[R_,C_]),qh=xt.object({startedAt:xt.coerce.date(),finishedAt:xt.coerce.date().nullish(),status:xt.nativeEnum(ye),results:x_.array(),failureReason:xt.string().nullish(),failureDetails:hs.nullish()});import{z as _t}from"zod";var __=_t.object({id:_t.string(),organizationId:_t.string(),createdAt:_t.coerce.date(),updatedAt:_t.coerce.date(),createdBy:_t.string(),scheduledAt:_t.coerce.date().nullish(),startedAt:_t.coerce.date().nullish(),finishedAt:_t.coerce.date().nullish(),status:_t.nativeEnum(ye),trigger:_t.nativeEnum(Kt),results:qh.array().nullish(),apiTestName:_t.string().nullish(),apiTestPath:_t.string().nullish(),apiTestId:_t.string().nullish()}),_W=__.pick({status:!0,startedAt:!0,finishedAt:!0});var Wi=(o=>(o.TestRun="test-run",o.MobileTestRun="mobile-test-run",o.CreditsUsed="credits-used",o.CreditsUsedV2="credits-used-v2",o))(Wi||{}),Kh=3;function M_(r){return r==="MODULE"||r==="CONDITIONAL"||r==="SECTION"||r==="RESOLVED_MODULE"}function Hu(r){if(!M_(r))switch(r){case"PRESET_ACTION":return 0;case"AI_ACTION":return 3;case"AI_ACTION_DYNAMIC":return 5;default:(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function Gu(r){switch(r.type){case"AI_EXTRACT":case"AI_ASSERTION":return Kh;case"CAPTCHA":return 3;case"CLICK":case"TYPE":case"SELECT_OPTION":case"HOVER":case"ELEMENT_CHECK":case"FOCUS":case"BLUR":case"SCROLL_DOWN":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_UP":case"MOUSE_DRAG":return r.useSelector||!r.target||r.target.type!=="description"?0:1;case"DRAG":return r.useSelector?0:1;case"VISUAL_DIFF":case"TAB":case"JAVASCRIPT":case"NAVIGATE":case"WAIT":case"SUCCESS":case"AUTH_LOAD":case"AUTH_SAVE":case"COOKIE":case"DIALOG":case"FILE_UPLOAD":case"GO_BACK":case"GO_FORWARD":case"LOCAL_STORAGE":case"NEW_TAB":case"PAGE_CHECK":case"PRESS":case"KEY_DOWN":case"KEY_UP":case"COPY":case"PASTE":case"REFRESH":case"REQUEST":case"GRAPHQL_REQUEST":case"WAIT_FOR_URL":case"REGISTER_REQUEST_LISTENER":case"AWAIT_LISTENER":case"RECORD_REQUESTS":case"GET_RECORDED_REQUESTS":case"SET_HEADER":case"MOCK_ROUTE":case"REMOVE_ROUTE_MOCK":case"OFFLINE_MODE":return 0;default:(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}var Cs=class{trackStepExecution(){}async flush(){}};import{parseString as P_,splitCookiesString as I_}from"set-cookie-parser";import{z as fe}from"zod";var ju=fe.object({name:fe.string(),value:fe.string(),url:fe.string().optional(),domain:fe.string().optional(),path:fe.string().optional(),expires:fe.number().default(Date.now()/1e3+60*60*24*365),httpOnly:fe.boolean().optional(),secure:fe.boolean().default(!0),sameSite:fe.union([fe.literal("Strict"),fe.literal("Lax"),fe.literal("None")]).default("None")});function xs(r,e){let t=[],n=I_(r);for(let o of n){let i=P_(o,{decodeValues:!1});if(!i.name)throw new Error("Name missing from cookie");if(!i.value)continue;let a;if(i.sameSite){let u=i.sameSite.trim().toLowerCase();if(u==="strict")a="Strict";else if(u==="lax")a="Lax";else if(u==="none")a="None";else throw new Error(`Invalid sameSite setting in cookie: ${u}`)}i.httpOnly===void 0&&(i.httpOnly=!1),!i.path&&i.domain&&(i.path="/"),!i.domain&&e&&(i.domain=e);let s=ju.parse({...i,expires:i.expires?i.expires.getTime()/1e3:void 0,sameSite:a});t.push(s);let c=[s.name,...Object.keys(s)].map(u=>u.toLowerCase()),l=o.match(/\b(\S+)=([^;]*)/g);if(l)for(let u of l){let[d,p]=u.split("=");if(!d||!p)throw new Error(`Invalid key-value pair in cookie: ${u}`);c.includes(d.toLowerCase())||t.push({...s,name:d,value:p})}}return t}var O_=fe.object({origin:fe.string(),localStorage:fe.array(fe.object({name:fe.string(),value:fe.string()}))}),L_=fe.object({entries:fe.record(fe.string(),fe.array(fe.tuple([fe.unknown(),fe.unknown()]))),version:fe.number().optional()}),Yh=fe.object({cookies:ju.array().optional(),origins:O_.array().optional(),idb:fe.record(fe.string(),L_).optional().describe("key is db name")});function _s(r,e){let t=[];return r.cloneSync()?.serializeSync()?.cookies.forEach(n=>{let o=ju.safeParse({name:n.key,...n});if(!o.success)return;let i=o.data;!i.domain&&!i.url&&(i.domain=e),t.push(i)}),t}import Z_ from"zod";import{v4 as JW}from"uuid";import{z as G}from"zod";import*as Ae from"zod";var Xh=Ae.object({requiredText:Ae.string().optional(),requiredAttributes:Ae.record(Ae.string(),Ae.string()).optional(),requiredBounds:Ae.boolean().optional()}),N_=Ae.object({xPath:Ae.string(),requirements:Xh.optional()}),k_=Ae.object({type:Ae.literal("NATIVE"),bounds:Ae.number().array(),resolvedDescription:Ae.string(),xPath:Ae.string(),elementOnlySerializedXml:Ae.string(),requirements:Xh.optional(),requiredRelatedElements:N_.array().optional()}),D_=Ae.object({type:Ae.literal("WEBVIEW"),resolvedDescription:Ae.string(),xPath:Ae.string(),browserCache:Xr.optional()}),Ms=Ae.discriminatedUnion("type",[k_,D_]);var Fn=(m=>(m.AI_CHECK="AI_CHECK",m.TAP="TAP",m.TYPE="TYPE",m.PRESS="PRESS",m.PRESS_KEYBOARD="PRESS_KEYBOARD",m.OPEN_APP="OPEN_APP",m.OPEN_NOTIFICATION_DRAWER="OPEN_NOTIFICATION_DRAWER",m.SWIPE="SWIPE",m.JAVASCRIPT="JAVASCRIPT",m.REQUEST="REQUEST",m.WAIT="WAIT",m.ADD_FILE="ADD_FILE",m.ADB="ADB",m.STATE="STATE",m))(Fn||{}),Vu=(c=>(c.BACK="BACK",c.HOME="HOME",c.APP_SWITCHER="APP_SWITCHER",c.POWER="POWER",c.SEARCH="SEARCH",c.VOLUME_UP="VOLUME_UP",c.VOLUME_DOWN="VOLUME_DOWN",c.VOLUME_MUTE="VOLUME_MUTE",c))(Vu||{}),$u=(n=>(n.CLOSE_KEYBOARD="CLOSE_KEYBOARD",n.ENTER="ENTER",n.BACKSPACE="BACKSPACE",n))($u||{}),Jh=G.object({type:G.literal("description"),description:G.string()}),U_=G.object({type:G.literal("coordinates"),xPercent:G.number(),yPercent:G.number()}),Zh=G.discriminatedUnion("type",[Jh,U_]),F_=G.object({updatedAt:G.coerce.date().optional()}),Mt=G.object({id:G.string().uuid(),disableCache:G.boolean().optional()}),B_=Mt.extend({type:G.literal("STATE")}),Qh=F_.extend({target:Ms}),z_=Mt.extend({type:G.literal("AI_CHECK"),assertion:G.string(),timeoutSecs:G.number().optional()}),Wu=Mt.extend({type:G.literal("TAP"),target:Zh,cache:Qh.optional(),longPress:G.boolean().optional(),longPressDurationMs:G.number().optional(),doubleTap:G.boolean().optional(),doubleTapDelayMs:G.number().optional(),relativePosition:G.object({x:G.number(),y:G.number()}).optional()}),qu=Mt.extend({type:G.literal("TYPE"),target:Zh.optional(),cache:Qh.optional(),keyPressDelayMs:G.number().optional(),text:G.string(),clearContent:G.boolean().optional()}),H_=Mt.extend({type:G.literal("PRESS"),key:G.nativeEnum(Vu),longPress:G.boolean().optional()}),G_=Mt.extend({type:G.literal("PRESS_KEYBOARD"),key:G.nativeEnum($u)}),j_=Mt.extend({type:G.literal("OPEN_APP"),packageName:G.string(),activityName:G.string().optional()}),V_=Mt.extend({type:G.literal("OPEN_NOTIFICATION_DRAWER")}),$_=G.discriminatedUnion("type",[G.object({type:G.literal("SCREEN")}),G.object({type:G.literal("OPEN_APP")}),G.object({type:G.literal("CUSTOM"),target:Jh})]),W_=Mt.extend({type:G.literal("SWIPE"),direction:G.enum(["up","down","left","right"]),scrollableElement:$_,viewportPercent:G.number().optional(),durationMs:G.number().optional()}),q_=Mt.extend({type:G.literal("JAVASCRIPT"),code:G.string(),timeout:G.number().int().max(60).optional().describe("Max seconds for the code to complete")}),K_=Mt.extend({type:G.literal("REQUEST")}).merge(Eo),Y_=Mt.extend({type:G.literal("WAIT"),timeoutSecs:G.number()}),X_=Mt.extend({type:G.literal("ADB"),command:G.string(),jsonArgs:G.string().optional()}),J_=Mt.extend({type:G.literal("ADD_FILE"),file:G.string(),storageLocation:G.string()}),ef=G.discriminatedUnion("type",[z_,Wu,qu,H_,j_,V_,G_,W_,q_,K_,Y_,J_,X_,B_]);var Ku=r=>{switch(r.type){case"description":return r.description;case"coordinates":return`${r.xPercent}%, ${r.yPercent}%`}};var tf={type:!0,cache:!0},on=Z_.discriminatedUnion("type",[Wu.pick(tf),qu.pick(tf)]),Q_=Object.values(Fn).filter(r=>on.options.some(e=>e.shape.type.safeParse(r).success));function Ps(r){return Q_.includes(r.type)}var rf=ki(on),nf=Di(on),aq=ms(on);import{cloneDeep as qi}from"lodash-es";import of from"truncate-json";var eM="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",tM=[Ln,Io],af=[Ln,Io],ko=class r{env={};varsFromMomenticEnvironment={};constructor(e){this.reset(e)}static dummyContext(e=void 0,t=void 0,n={}){return new r({testName:e,envName:t,variablesFromEnvironment:n})}static fromSnapshot({snapshot:e,environmentVariables:t}){let n=e.env[Ln],o=e.env[Io],i={};for(let[s,c]of Object.entries(e.env))af.includes(s)||(t??{})[s]===void 0&&(i[s]=c);return new r({dynamicVariables:i,envName:n,testName:o,variablesFromEnvironment:t??{}})}setEnvVariables(e){let t=qi(e);this.env=Object.assign(this.env,t)}setInputs(e){e&&this.setEnvVariables(e)}setMomenticSystemVariable(e,t){this.varsFromMomenticEnvironment[e]=t}getVariable(e){return this.env[e]}setVariable(e,t){tM.includes(e)||(this.env[e]=t)}getEnvName(){return this.env[Ln]}toObjectCopy(){let e={env:Object.assign({},this.env,this.varsFromMomenticEnvironment)};return qi(e)}toEditorDisplayCopy(){return this.toObjectCopy()}toRedactedDisplayCopy(){let e=this.toObjectCopy();e.env=Object.fromEntries(Object.entries(e.env).map(([n,o])=>af.includes(n)||this.varsFromMomenticEnvironment[n]===void 0?[n,o]:[n,eM]));for(let[n,o]of Object.entries(e.env)){if(!o){e.env[n]=o;continue}let{jsonString:i}=of(JSON.stringify(o),1e3);try{e.env[n]=JSON.parse(i)}catch{e.env[n]=void 0}}let{jsonString:t}=of(JSON.stringify(e.env),5e3);try{e.env=JSON.parse(t)}catch{e.env={}}return e}reset(e){this.env={},this.varsFromMomenticEnvironment={},this.setEnvVariables(e.dynamicVariables??{}),this.varsFromMomenticEnvironment=qi(e.variablesFromEnvironment),e.envName&&this.setMomenticSystemVariable(Ln,e.envName),e.testName&&this.setMomenticSystemVariable(Io,e.testName)}getDynamicVariablesCopy(){return qi(this.env)}getVariablesFromEnvironmentCopy(){return qi(this.varsFromMomenticEnvironment)}};var Ki=(t=>(t.USWest1="us-west1",t.EUNorth1="eu-north1",t))(Ki||{});import $e from"zod";import{z as sr}from"zod";import{z as Le}from"zod";var ar=Le.object({id:Le.string(),name:ws,baseUrl:Rs,description:Le.string().optional().nullish(),schemaVersion:Le.string(),advanced:Gi,retries:Le.number(),envs:Le.array(Es).nullish(),parameters:bs.nullish(),disabled:Le.boolean().optional(),labels:Le.array(Le.string()).optional().catch([])}),Sq=Le.enum(["INHERIT","ENABLED","DISABLED"]);var rM=Gi.extend({failureRecovery:Le.boolean().or(Le.string()).optional().transform(r=>typeof r=="string"?r:r===void 0?"INHERIT":r?"ENABLED":"DISABLED"),useMemory:Le.boolean().or(Le.string()).optional().transform(r=>typeof r=="string"?r:r===void 0?"INHERIT":r?"ENABLED":"DISABLED")});var yq=ar.pick({name:!0,description:!0,baseUrl:!0,retries:!0,disabled:!0,parameters:!0}).extend({advanced:rM}),bq=ar.pick({name:!0,description:!0,baseUrl:!0,retries:!0,disabled:!0,advanced:!0,parameters:!0}),nM=Le.object({labels:Le.array(Le.string()).optional(),outputs:Eh.nullish()}),Do=ar.merge(nM),oM=Le.object({createdAt:Le.coerce.date(),updatedAt:Le.coerce.date(),updatedBy:Le.string().nullable(),schedule:Lo,notification:No,createdBy:Le.string(),organizationId:Le.string(),folderId:Le.string().nullable().optional()}),iM=ar.merge(oM),Eq=iM.merge(Mo),Is=ar.merge(Mo),Tq=ar.merge(Pn);var aM="test",sM="module",lM="mobile-test",cM="mobile-module";var we=(o=>(o.TEST=`momentic/${aM}`,o.MODULE=`momentic/${sM}`,o.MOBILE_TEST=`momentic/${lM}`,o.MOBILE_MODULE=`momentic/${cM}`,o))(we||{}),_q=ar.merge(Pn),sf=$t.extend({steps:sr.array(sr.record(sr.string(),sr.unknown())),schemaVersion:sr.string()}),Mq=sf.extend({fileType:sr.literal(we.MODULE)}),Pq=sr.object({test:sr.string().describe("YAML for the test, including metadata and steps"),modules:sr.record(sr.string(),sr.string()).describe("Map of module name to YAML for the module")});var Yu=$e.object({parameterNames:$e.string().array(),defaultParameters:$e.record($e.string(),$e.string()).optional(),parameterEnums:$e.record($e.string(),$e.string().array()).optional()}),uM=$e.object({moduleId:$e.string().uuid(),name:$e.string(),description:$e.string().nullish(),parameters:Yu.optional(),enabled:$e.boolean().nullish(),schemaVersion:$e.string()}),Yi=uM.omit({name:!0}),Os=Yi.extend({steps:$e.array($e.record($e.string(),$e.unknown()))}),dM=$e.object({fileType:$e.literal(we.MOBILE_MODULE)}).merge(Os);import Pt from"zod";var lr=(t=>(t.PRESET="MOBILE_PRESET_STEP",t.MODULE="MOBILE_MODULE_STEP",t))(lr||{}),Ls=Pt.object({id:Pt.string().uuid(),envKey:Pt.string().optional(),skipped:Pt.boolean().optional()}),Xi=Ls.extend({type:Pt.literal("MOBILE_PRESET_STEP"),command:ef,keyPressDelayMs:Pt.number().optional()}),Uo=Pt.object({moduleId:Pt.string(),inputs:Pt.record(Pt.string(),Pt.string()).optional(),parameters:Yu.optional()}),Ji=Ls.merge(Uo.extend({type:Pt.literal("MOBILE_MODULE_STEP")})),Fq=Uo.extend({steps:Pt.lazy(()=>cr.array())}),cr=Pt.discriminatedUnion("type",[Xi,Ji]);import We from"zod";import Ns from"zod";var Fr=(e=>(e.MODULE="RESOLVED_MOBILE_MODULE",e))(Fr||{}),pM=Uo.extend({steps:Ns.lazy(()=>Zi.array()),name:Ns.string().describe("name of the module")}),mM=Ls.merge(pM).extend({type:Ns.literal("RESOLVED_MOBILE_MODULE")}),Zi=Ns.discriminatedUnion("type",[mM,Xi]);function lf(r){return Object.values(Fr).includes(r)||Object.values(lr).includes(r)}var gM=We.object({disableMomenticAccessibilityTree:We.boolean().optional(),autoGrantPermissions:We.boolean().optional()}),Xu=gM.extend({region:We.nativeEnum(Ki).optional()}),Qi=We.object({retries:We.number().optional().describe("number of retries to run"),defaultChannel:We.string().optional().describe("default channel to use"),defaultTag:We.string().optional().describe("default tag to use, if not set uses latest"),defaultEnv:We.string().optional(),emulator:Xu.optional()}),br=We.object({id:We.string().uuid(),description:We.string(),schemaVersion:We.string(),settings:Qi.optional()}),hM=br.merge(We.object({steps:We.array(cr)})),ks=We.object({fileType:We.literal(we.MOBILE_TEST)}).merge(hM),Zq=We.object({name:We.string(),steps:We.array(cr).optional(),settings:Qi.optional()}),fM=br.extend({steps:Zi.array()});import ce from"zod";var an=ce.object({startTime:ce.number(),endTime:ce.number().optional(),durationMs:ce.number().optional(),error:ce.string().optional(),result:ce.unknown().optional(),attributes:ce.record(ce.string(),ce.unknown())});var SM=an.extend({type:ce.literal("SECTION"),name:ce.string(),subSpans:ce.lazy(()=>Ju.array())}),yM=an.extend({type:ce.literal("AI_LOCATOR_CALL"),result:ce.object({id:ce.number(),thoughts:ce.string()}).optional()}),bM=an.extend({type:ce.literal("AI_ASSERTION_CALL"),result:ce.object({thoughts:ce.string(),result:ce.boolean()}).optional()}),EM=an.extend({type:ce.literal("TARGET_RESOLUTION"),result:ce.object({serializedElement:ce.string()}).optional()}),TM=an.extend({type:ce.literal("WAIT_FOR_STABILITY"),reason:ce.string()}),vM=an.extend({type:ce.literal("EMULATOR_INTERACTION"),name:ce.string(),withinWebview:ce.boolean().optional()}),AM=an.extend({type:ce.literal("EMULATOR_READ_STATE"),name:ce.string()}),wM=an.extend({type:ce.literal("GENERIC"),name:ce.string()}),Ju=ce.discriminatedUnion("type",[SM,yM,bM,EM,TM,vM,AM,wM]);import ur from"zod";var cf=ur.object({message:ur.string().optional(),startTime:ur.number(),endTime:ur.number(),status:ur.nativeEnum(Ze),trace:ur.unknown(),beforeSnapshot:ur.string().optional(),afterSnapshot:ur.string().optional(),data:ur.unknown().optional().describe("output data from the step")}),RM=cf.merge(Xi),CM=cf.merge(Ji).extend({steps:ur.lazy(()=>dr.array())}),dr=ur.discriminatedUnion("type",[RM,CM]);var x2=new Set(Object.values(st));var xM={AI_ACTION:"AI action",AI_ACTION_DYNAMIC:"AI action",RESOLVED_MODULE:"Module",AI_ASSERTION:"AI check",AI_EXTRACT:"AI extract",CLICK:"Click",TYPE:"Type",JAVASCRIPT:"JavaScript",SELECT_OPTION:"Select",PRESS:"Press",KEY_DOWN:"Key down",KEY_UP:"Key up",NAVIGATE:"Navigate",SCROLL_UP:"Scroll up",SCROLL_DOWN:"Scroll down",SCROLL_LEFT:"Scroll left",SCROLL_RIGHT:"Scroll right",HOVER:"Hover",BLUR:"Blur",FILE_UPLOAD:"File upload",FOCUS:"Focus",GO_BACK:"Go back",GO_FORWARD:"Go forward",WAIT:"Wait",REFRESH:"Refresh",TAB:"Switch tab",NEW_TAB:"New tab",COOKIE:"Cookie",LOCAL_STORAGE:"localStorage",REQUEST:"API request",GRAPHQL_REQUEST:"GraphQL request",CAPTCHA:"CAPTCHA",DRAG:"Drag & drop",VISUAL_DIFF:"Visual diff",DIALOG:"Dialog",MOUSE_DRAG:"Mouse drag",AUTH_LOAD:"Load auth state",AUTH_SAVE:"Save auth state",ELEMENT_CHECK:"Element check",PAGE_CHECK:"Page check",WAIT_FOR_URL:"Wait for URL",COPY:"Copy",PASTE:"Paste",REGISTER_REQUEST_LISTENER:"Register request listener",AWAIT_LISTENER:"Await listener",RECORD_REQUESTS:"Record requests",GET_RECORDED_REQUESTS:"Get recorded requests",SET_HEADER:"Set header",MOCK_ROUTE:"Mock route",REMOVE_ROUTE_MOCK:"Remove route mock",OFFLINE_MODE:"Offline mode",SUCCESS:"Done"},_2={AI_ACTION:["ai","action","agent"],AI_ACTION_DYNAMIC:["ai","action","dynamic","agent"],RESOLVED_MODULE:[],AI_ASSERTION:["ai","check","assert","make sure","ensure"],AI_EXTRACT:["ai","extract","data"],CLICK:["click","press"],TYPE:["type","input","write","press"],JAVASCRIPT:["js","javascript","code","execute"],SELECT_OPTION:["select","option","choose"],PRESS:["keyboard","type","key"],KEY_DOWN:["keyboard","type","key","down","press"],KEY_UP:["keyboard","type","key","up","press"],NAVIGATE:["go to","visit"],SCROLL_UP:[],SCROLL_DOWN:[],SCROLL_LEFT:[],SCROLL_RIGHT:[],HOVER:["scroll into view","go to"],BLUR:[],FILE_UPLOAD:[],FOCUS:[],GO_BACK:[],GO_FORWARD:[],WAIT:[],REFRESH:[],TAB:[],NEW_TAB:[],COOKIE:[],LOCAL_STORAGE:[],REQUEST:[],GRAPHQL_REQUEST:[],CAPTCHA:[],DRAG:[],VISUAL_DIFF:[],DIALOG:[],MOUSE_DRAG:[],AUTH_LOAD:[],AUTH_SAVE:[],ELEMENT_CHECK:[],PAGE_CHECK:[],WAIT_FOR_URL:[],COPY:[],PASTE:[],REGISTER_REQUEST_LISTENER:[],AWAIT_LISTENER:[],RECORD_REQUESTS:[],GET_RECORDED_REQUESTS:[],SET_HEADER:[],MOCK_ROUTE:[],REMOVE_ROUTE_MOCK:[],OFFLINE_MODE:[],SUCCESS:[]},M2={AI_ACTION:"Ask AI achieve a specific goal. Saves the steps for reuse. Please use Dynamic AI action instead.",AI_ACTION_DYNAMIC:"Ask AI achieve a specific goal. Fully dynamic and does not save the steps for reuse. Our most capable AI agent.",RESOLVED_MODULE:"A list of steps that can be reused in multiple tests.",AI_ASSERTION:"Ask AI to verify whether something is true on the page.",CLICK:"Click on an element on the page.",DIALOG:"Specify how native browser dialogs should be handled.",AI_EXTRACT:"Ask AI to extract data from the page.",HOVER:"Hover over an element on the page.",FILE_UPLOAD:"Automatically upload a file when the native file upload dialog is activated.",FOCUS:"Focus an element on the page.",BLUR:"Remove focus from an element on the page.",SELECT_OPTION:"Select an option from an HTML Select <select> element.",TYPE:"Type the specified text into an element.",PRESS:"Press the specified keys using the keyboard. (e.g. Control+A)",KEY_DOWN:"Hold down the specified keys on the keyboard. (e.g. Control+A)",KEY_UP:"Release the specified keys on the keyboard. (e.g. Control+A)",NAVIGATE:"Navigate to the specified URL.",SCROLL_UP:"Scroll up by a specified height.",SCROLL_DOWN:"Scroll down by a specified height.",SCROLL_LEFT:"Scroll left by a specified width.",SCROLL_RIGHT:"Scroll right by a specified width.",GO_BACK:"Go back in browser history.",GO_FORWARD:"Go forward in browser history.",WAIT:"Wait for the specified number of seconds.",REFRESH:"Refresh the page. This will not clear cookies or session data.",TAB:"Switch to different tab in the browser.",NEW_TAB:"Create and switch to a new tab in the browser.",COOKIE:"Set a cookie that will persist throughout the browser session.",LOCAL_STORAGE:"Set a localStorage value that will persist throughout the browser session",CAPTCHA:"Solve CAPTCHAs on the page. This feature is only available on Momentic Cloud and may take up to 60 seconds. Disabling CAPTCHAs in non-production environments is strongly advised.",REQUEST:"Make an API request to a URL.",GRAPHQL_REQUEST:"Make a GraphQL request to a URL.",JAVASCRIPT:"Run JavaScript code in the browser or a Node.js environment.",DRAG:"Click and drag an element to another location.",VISUAL_DIFF:"Compare a screenshot of the page or a specific element to a baseline image.",MOUSE_DRAG:"Click and drag the mouse by a specified distance.",AUTH_LOAD:"Load or clear session state using a JavaScript object including cookies, localStorage, and IndexDB entries.",AUTH_SAVE:"Save authentication state (cookies, localStorage) into a JavaScript object.",ELEMENT_CHECK:"Assert on an element's state using pre-built conditions, including content, visibility, attribute value checks.",PAGE_CHECK:"Assert on the active page's contents using pre-built conditions.",WAIT_FOR_URL:"Wait for the active page's URL to match a target value or pattern.",COPY:"Copy the specified value to the browser clipboard.",PASTE:"Paste the browser clipboard contents.",REGISTER_REQUEST_LISTENER:"Register a listener for network requests.",AWAIT_LISTENER:"Wait for a listener to fire, and return the response data.",RECORD_REQUESTS:"Record network requests that match a given pattern.",GET_RECORDED_REQUESTS:"Get recorded requests that matched the pattern.",SET_HEADER:"Set a header.",MOCK_ROUTE:"Mock network requests to a specific URL.",REMOVE_ROUTE_MOCK:"Remove a previously set route mock.",OFFLINE_MODE:"Configure offline mode.",SUCCESS:"Indicate the entire AI action has succeeded, optionally based on a condition."},P2={AI_CHECK:"AI check",RESOLVED_MOBILE_MODULE:"Module",TAP:"Tap",TYPE:"Type",PRESS:"Press button",PRESS_KEYBOARD:"Press keyboard",SWIPE:"Swipe",OPEN_APP:"Open app",OPEN_NOTIFICATION_DRAWER:"Open notification drawer",JAVASCRIPT:"JavaScript",REQUEST:"API request",WAIT:"Wait",ADD_FILE:"Add file",ADB:"ADB command",STATE:"Debug state"},I2={AI_CHECK:"Ask AI to verify whether something is true on the screen.",RESOLVED_MOBILE_MODULE:"A list of steps that can be reused in multiple tests.",TAP:"Tap on an element on the screen.",TYPE:"Type the specified text into an element.",PRESS:"Press a physical button on the device.",PRESS_KEYBOARD:"Press a special key on the keyboard.",SWIPE:"Swipe on the screen.",OPEN_APP:"Open an app on the device.",OPEN_NOTIFICATION_DRAWER:"Open the notification drawer.",JAVASCRIPT:"Execute JavaScript code in a NodeJS context.",REQUEST:"Make an HTTP request to a URL.",WAIT:"Wait for a specified amount of time.",ADD_FILE:"Add a file to the device's disk.",ADB:"Execute an ADB command on the device.",STATE:"Get the debug state of the device."};import _M from"semver";import{z as MM}from"zod";var k2=MM.string().refine(r=>_M.valid(r),{message:"must be a valid semver string"});import{Faker as F2,en as B2}from"@faker-js/faker";import{z as N}from"zod";var H2=N.object({body:N.string(),to:N.string(),from:N.string()}),G2=N.object({from:N.string().optional(),to:N.string(),timeout:N.number().optional(),beforeDate:N.string().pipe(N.coerce.date()).or(N.date()).optional(),afterDate:N.string().pipe(N.coerce.date()).or(N.date()).optional()}),j2=N.object({to:N.string().email(),from:N.string(),subject:N.string(),body:N.string(),html:N.string().optional()}),V2=N.object({inbox:N.string().transform(r=>r.toLowerCase()),afterDate:N.string().pipe(N.coerce.date()).or(N.date()).optional(),timeout:N.number().optional(),trimWhitespace:N.boolean().optional()}),$2=N.object({inbox:N.string(),limit:N.number().optional(),afterDate:N.string().pipe(N.coerce.date()).or(N.date()).optional(),trimWhitespace:N.boolean().optional()});var Ds=(t=>(t.RAW="RAW",t.RESPONSE="RESPONSE",t))(Ds||{}),uf=N.object({body:N.string().nullish(),status:N.number().optional(),headers:N.array(N.tuple([N.string(),N.string()])).optional()}),PM=N.object({url:N.string(),options:N.object({method:N.string(),body:N.string().nullish(),headers:N.array(N.tuple([N.string(),N.string()])).optional()}).optional()}).optional(),IM=N.object({body:N.string().nullish(),options:N.object({status:N.number(),statusText:N.string().optional(),headers:N.array(N.tuple([N.string(),N.string()])).optional()}).optional()}).optional(),df=N.object({result:N.unknown(),variableUpdates:N.record(N.string(),N.unknown()).optional(),persistentVariableUpdates:N.record(N.string(),N.unknown()).optional(),error:N.string().optional(),success:N.boolean()}),W2=N.object({id:N.string().optional(),orgId:N.string(),momenticLambdaAuthHash:N.string(),code:N.string(),fragment:N.boolean(),state:N.object({env:N.record(N.string(),N.unknown()),request:PM,response:IM,additionalBindings:N.record(N.string(),N.unknown()).optional()}),timeoutMs:N.number().optional(),disallowVariableUpdates:N.boolean().optional(),responseSerialization:N.nativeEnum(Ds).optional()}),sn=15e3;import*as ht from"zod";import{extendZodWithOpenApi as OM}from"zod-openapi";OM(ht);var LM=ht.object({url:ht.string(),lineNumber:ht.number(),columnNumber:ht.number()}).openapi({ref:"CodeLocation"}),Us=ht.object({timestamp:ht.number(),text:ht.string(),type:ht.string(),tabIndex:ht.number(),args:ht.unknown().array().optional(),url:ht.string().optional(),location:LM.optional()}).openapi({ref:"ConsoleLog"}),pf=Us.array(),NM=pf.array();import*as Zu from"zod";import{extendZodWithOpenApi as eP}from"zod-openapi";import{z as M}from"zod";var kM=M.object({name:M.string(),version:M.string(),comment:M.string().optional()}),DM=M.object({name:M.string(),version:M.string(),comment:M.string().optional()}),UM=M.object({onContentLoad:M.number().optional(),onLoad:M.number().optional(),comment:M.string().optional()}),gf=M.object({startedDateTime:M.string(),id:M.string(),title:M.string().optional(),pageTimings:UM,comment:M.string().optional()}),FM=M.array(gf),BM=M.object({name:M.string(),value:M.string(),path:M.string().optional(),domain:M.string().optional(),expires:M.string().optional(),httpOnly:M.boolean().optional(),secure:M.boolean().optional(),comment:M.string().optional()}),hf=M.array(BM),zM=M.object({name:M.string(),value:M.string(),comment:M.string().optional()}),ff=M.array(zM),HM=M.object({name:M.string(),value:M.string(),comment:M.string().optional()}),GM=M.array(HM),jM=M.object({name:M.string(),value:M.string().optional(),fileName:M.string().optional(),contentType:M.string().optional(),comment:M.string().optional()}),VM=M.array(jM),$M=M.object({mimeType:M.string(),params:VM,text:M.string(),comment:M.string().optional()}),WM=M.object({method:M.string(),url:M.string(),httpVersion:M.string().optional(),cookies:hf,headers:ff,queryString:GM,postData:$M.optional(),headersSize:M.number().optional(),bodySize:M.number().optional(),comment:M.string().optional()}),qM=M.object({size:M.number().optional(),compression:M.number().optional(),mimeType:M.string().optional(),text:M.string().optional(),encoding:M.string().optional(),comment:M.string().optional()}),KM=M.object({status:M.number(),statusText:M.string(),httpVersion:M.string().optional(),cookies:hf,headers:ff,content:qM,redirectURL:M.string().optional(),headersSize:M.number().optional(),bodySize:M.number().optional(),comment:M.string().optional(),_mocked:M.boolean().optional()}),mf=M.object({expires:M.string().optional(),lastAccess:M.string(),eTag:M.string(),hitCount:M.number(),comment:M.string().optional()}),YM=M.object({beforeRequest:mf.optional(),afterRequest:mf.optional(),comment:M.string().optional()}),XM=M.object({blocked:M.number().optional(),dns:M.number().optional(),connect:M.number().optional(),send:M.number(),wait:M.number(),receive:M.number(),ssl:M.number().optional(),comment:M.string().optional()}),Sf=M.object({pageref:M.string().optional(),startedDateTime:M.string(),time:M.number().optional(),request:WM,response:KM.optional(),cache:YM.optional(),timings:XM,serverIPAddress:M.string().optional(),connection:M.string().optional(),comment:M.string().optional(),_resourceType:M.string().optional()}),JM=M.array(Sf),ZM=M.object({version:M.string().default("1.1"),creator:kM.optional(),browser:DM.optional(),pages:FM.optional(),entries:JM,comment:M.string().optional()}),QM=M.object({log:ZM}),yf=M.record(M.string(),gf),bf=M.record(M.string(),Sf);eP(Zu);var tP=Zu.object({logsPerPage:Us.array().array(),harPages:yf.optional(),harEntries:bf.optional()}).openapi({ref:"DebugData"});var x=class extends Error{reason;constructor(e,t,n){let o=!1;for(let i of Object.values(Ee))if(t.startsWith(i)){o=!0,e=i;break}if(n?.errOptions?.cause)super(o?t:`${e}: ${t}`,n?.errOptions);else{let i=o?t:`${e}${t?`: ${t}`:""}`;super(i,n?.errOptions)}this.name="TestFailureError",this.stack=this.stack?.slice(this.name.length+2),this.reason=e}toString(){return this.message}toJSON(){return{message:this.message}}},Fo=class extends Error{updatedLocatorMemory;constructor(e,t,n={}){super(e,n),this.updatedLocatorMemory=t,this.name="NoElementsFoundUsingAIError"}},ln=class extends Error{decisions;constructor(e,t,n={}){super(e,n),this.decisions=t,this.name="NoElementsFoundUsingCacheError"}toString(){return`${this.message}
2
+ var yx=Object.defineProperty;var ze=(r,e)=>()=>(r&&(e=r(r=0)),e);var bx=(r,e)=>{for(var t in e)yx(r,t,{get:e[t],enumerable:!0})};var hT,gT=ze(()=>{"use strict";hT=typeof globalThis=="object"?globalThis:global});var fT=ze(()=>{"use strict";gT()});var ST=ze(()=>{"use strict";fT()});var Jr,Dp=ze(()=>{"use strict";Jr="1.9.0"});function O0(r){var e=new Set([r]),t=new Set,n=r.match(yT);if(!n)return function(){return!1};var o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null)return function(c){return c===r};function i(s){return t.add(s),!1}function a(s){return e.add(s),!0}return function(c){if(e.has(c))return!0;if(t.has(c))return!1;var l=c.match(yT);if(!l)return i(c);var u={major:+l[1],minor:+l[2],patch:+l[3],prerelease:l[4]};return u.prerelease!=null||o.major!==u.major?i(c):o.major===0?o.minor===u.minor&&o.patch<=u.patch?a(c):i(c):o.minor<=u.minor?a(c):i(c)}}var yT,bT,ET=ze(()=>{"use strict";Dp();yT=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;bT=O0(Jr)});function ni(r,e,t,n){var o;n===void 0&&(n=!1);var i=wa[Aa]=(o=wa[Aa])!==null&&o!==void 0?o:{version:Jr};if(!n&&i[r]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+r);return t.error(a.stack||a.message),!1}if(i.version!==Jr){var a=new Error("@opentelemetry/api: Registration of version v"+i.version+" for "+r+" does not match previously registered API v"+Jr);return t.error(a.stack||a.message),!1}return i[r]=e,t.debug("@opentelemetry/api: Registered a global for "+r+" v"+Jr+"."),!0}function Zr(r){var e,t,n=(e=wa[Aa])===null||e===void 0?void 0:e.version;if(!(!n||!bT(n)))return(t=wa[Aa])===null||t===void 0?void 0:t[r]}function oi(r,e){e.debug("@opentelemetry/api: Unregistering a global for "+r+" v"+Jr+".");var t=wa[Aa];t&&delete t[r]}var L0,Aa,wa,Ra=ze(()=>{"use strict";ST();Dp();ET();L0=Jr.split(".")[0],Aa=Symbol.for("opentelemetry.js.api."+L0),wa=hT});function Ca(r,e,t){var n=Zr("diag");if(n)return t.unshift(e),n[r].apply(n,k0([],N0(t),!1))}var N0,k0,TT,vT=ze(()=>{"use strict";Ra();N0=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},k0=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))},TT=function(){function r(e){this._namespace=e.namespace||"DiagComponentLogger"}return r.prototype.debug=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ca("debug",this._namespace,e)},r.prototype.error=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ca("error",this._namespace,e)},r.prototype.info=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ca("info",this._namespace,e)},r.prototype.warn=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ca("warn",this._namespace,e)},r.prototype.verbose=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return Ca("verbose",this._namespace,e)},r}()});var Ne,Bl=ze(()=>{"use strict";(function(r){r[r.NONE=0]="NONE",r[r.ERROR=30]="ERROR",r[r.WARN=50]="WARN",r[r.INFO=60]="INFO",r[r.DEBUG=70]="DEBUG",r[r.VERBOSE=80]="VERBOSE",r[r.ALL=9999]="ALL"})(Ne||(Ne={}))});function AT(r,e){r<Ne.NONE?r=Ne.NONE:r>Ne.ALL&&(r=Ne.ALL),e=e||{};function t(n,o){var i=e[n];return typeof i=="function"&&r>=o?i.bind(e):function(){}}return{error:t("error",Ne.ERROR),warn:t("warn",Ne.WARN),info:t("info",Ne.INFO),debug:t("debug",Ne.DEBUG),verbose:t("verbose",Ne.VERBOSE)}}var wT=ze(()=>{"use strict";Bl()});var D0,U0,F0,Dr,xa=ze(()=>{"use strict";vT();wT();Bl();Ra();D0=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},U0=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))},F0="diag",Dr=function(){function r(){function e(o){return function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];var s=Zr("diag");if(s)return s[o].apply(s,U0([],D0(i),!1))}}var t=this,n=function(o,i){var a,s,c;if(i===void 0&&(i={logLevel:Ne.INFO}),o===t){var l=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return t.error((a=l.stack)!==null&&a!==void 0?a:l.message),!1}typeof i=="number"&&(i={logLevel:i});var u=Zr("diag"),d=AT((s=i.logLevel)!==null&&s!==void 0?s:Ne.INFO,o);if(u&&!i.suppressOverrideMessage){var p=(c=new Error().stack)!==null&&c!==void 0?c:"<failed to generate stacktrace>";u.warn("Current logger will be overwritten from "+p),d.warn("Current logger will overwrite one already registered from "+p)}return ni("diag",d,t,!0)};t.setLogger=n,t.disable=function(){oi(F0,t)},t.createComponentLogger=function(o){return new TT(o)},t.verbose=e("verbose"),t.debug=e("debug"),t.info=e("info"),t.warn=e("warn"),t.error=e("error")}return r.instance=function(){return this._instance||(this._instance=new r),this._instance},r}()});var RT,CT=ze(()=>{"use strict";RT=Symbol("BaggageEntryMetadata")});function Up(r){return typeof r!="string"&&(B0.error("Cannot create baggage metadata from unknown type: "+typeof r),r=""),{__TYPE__:RT,toString:function(){return r}}}var B0,xT=ze(()=>{"use strict";xa();CT();B0=Dr.instance()});function Fp(r){return Symbol.for(r)}var z0,Bp,zp=ze(()=>{"use strict";z0=function(){function r(e){var t=this;t._currentContext=e?new Map(e):new Map,t.getValue=function(n){return t._currentContext.get(n)},t.setValue=function(n,o){var i=new r(t._currentContext);return i._currentContext.set(n,o),i},t.deleteValue=function(n){var o=new r(t._currentContext);return o._currentContext.delete(n),o}}return r}(),Bp=new z0});function jp(){return Gp}var so,H0,zl,G0,j0,V0,W0,Hp,$0,q0,K0,Gp,Y0,X0,J0,Z0,Q0,ek,tk,Vp=ze(()=>{"use strict";so=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)}}(),H0=function(){function r(){}return r.prototype.createGauge=function(e,t){return X0},r.prototype.createHistogram=function(e,t){return J0},r.prototype.createCounter=function(e,t){return Y0},r.prototype.createUpDownCounter=function(e,t){return Z0},r.prototype.createObservableGauge=function(e,t){return ek},r.prototype.createObservableCounter=function(e,t){return Q0},r.prototype.createObservableUpDownCounter=function(e,t){return tk},r.prototype.addBatchObservableCallback=function(e,t){},r.prototype.removeBatchObservableCallback=function(e){},r}(),zl=function(){function r(){}return r}(),G0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n){},e}(zl),j0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n){},e}(zl),V0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n){},e}(zl),W0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n){},e}(zl),Hp=function(){function r(){}return r.prototype.addCallback=function(e){},r.prototype.removeCallback=function(e){},r}(),$0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Hp),q0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Hp),K0=function(r){so(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Hp),Gp=new H0,Y0=new G0,X0=new V0,J0=new W0,Z0=new j0,Q0=new $0,ek=new q0,tk=new K0});var zt,_T=ze(()=>{"use strict";(function(r){r[r.INT=0]="INT",r[r.DOUBLE=1]="DOUBLE"})(zt||(zt={}))});var rk,nk,MT,IT=ze(()=>{"use strict";zp();rk=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},nk=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))},MT=function(){function r(){}return r.prototype.active=function(){return Bp},r.prototype.with=function(e,t,n){for(var o=[],i=3;i<arguments.length;i++)o[i-3]=arguments[i];return t.call.apply(t,nk([n],rk(o),!1))},r.prototype.bind=function(e,t){return t},r.prototype.enable=function(){return this},r.prototype.disable=function(){return this},r}()});var ok,ik,Wp,ak,PT,OT=ze(()=>{"use strict";IT();Ra();xa();ok=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},ik=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},Wp="context",ak=new MT,PT=function(){function r(){}return r.getInstance=function(){return this._instance||(this._instance=new r),this._instance},r.prototype.setGlobalContextManager=function(e){return ni(Wp,e,Dr.instance())},r.prototype.active=function(){return this._getContextManager().active()},r.prototype.with=function(e,t,n){for(var o,i=[],a=3;a<arguments.length;a++)i[a-3]=arguments[a];return(o=this._getContextManager()).with.apply(o,ik([e,t,n],ok(i),!1))},r.prototype.bind=function(e,t){return this._getContextManager().bind(e,t)},r.prototype._getContextManager=function(){return Zr(Wp)||ak},r.prototype.disable=function(){this._getContextManager().disable(),oi(Wp,Dr.instance())},r}()});var ii,LT=ze(()=>{"use strict";OT();ii=PT.getInstance()});var V,NT=ze(()=>{"use strict";xa();V=Dr.instance()});var sk,kT,DT=ze(()=>{"use strict";Vp();sk=function(){function r(){}return r.prototype.getMeter=function(e,t,n){return Gp},r}(),kT=new sk});var $p,UT,FT=ze(()=>{"use strict";DT();Ra();xa();$p="metrics",UT=function(){function r(){}return r.getInstance=function(){return this._instance||(this._instance=new r),this._instance},r.prototype.setGlobalMeterProvider=function(e){return ni($p,e,Dr.instance())},r.prototype.getMeterProvider=function(){return Zr($p)||kT},r.prototype.getMeter=function(e,t,n){return this.getMeterProvider().getMeter(e,t,n)},r.prototype.disable=function(){oi($p,Dr.instance())},r}()});var Hl,BT=ze(()=>{"use strict";FT();Hl=UT.getInstance()});var Ce=ze(()=>{"use strict";xT();zp();Bl();Vp();_T();LT();NT();BT()});import{Argument as rg,Command as oG,Option as iG}from"@commander-js/extra-typings";import wx from"appium";import{tmpdir as Rx}from"os";import{remote as Cx}from"webdriverio";import{createInstanceClient as Ex}from"@limrun/api";import{execSync as Tx}from"child_process";import{hostname as vx}from"os";import Ax from"path";async function ng(r){let{apiClient:e,logger:t,creationOpts:n,onStatusUpdate:o,logLevel:i}=r,{token:a,webRtcUrl:s,adbUrl:c,name:l,apkDownloadUrl:u,region:d}=await e.createAndroidEmulator({...n,hostname:vx()}),p;try{Tx("adb --version"),p="adb"}catch{if(process.env.ANDROID_HOME)p=Ax.join(process.env.ANDROID_HOME,"platform-tools","adb");else throw new Error("adb not found in PATH and ANDROID_HOME not set")}t.info({emulatorName:l,apkToInstall:n.apkToInstall,region:d,apkDownloadUrl:u},"Android instance creation ok");let h=await Ex({adbUrl:c,endpointUrl:s,token:a,logLevel:i,adbPath:p}),m=["https://github.com/appium/appium-uiautomator2-server/releases/download/v7.6.2/appium-uiautomator2-server-v7.6.2.apk","https://github.com/appium/appium-uiautomator2-server/releases/download/v7.6.2/appium-uiautomator2-server-debug-androidTest.apk","https://github.com/appium/io.appium.settings/releases/download/v5.14.15/settings_apk-debug.apk"];u&&m.push(u);let g=n.apkToInstall?.channel,f=n.apkToInstall?.tag;o(`Installing APK${g?` with channel ${g}`:""}${f?` and tag ${f}`:""}`),await Promise.all(m.map(S=>h.sendAsset(S))),o("Starting tunnel");let E=await h.startAdbTunnel();return{port:E.address.port,close:E.close,token:a,webRtcUrl:s,emulatorName:l}}async function fs({onStatusUpdate:r,creationOpts:e,apiClient:t,logger:n,driverLogLevel:o,appiumPort:i,socket:a}){let s=Date.now(),{close:c,port:l,limbarToken:u,limbarUrl:d,emulatorName:p}=await Mx({apiClient:t,logger:n,creationOpts:e,onStatusUpdate:r}),h=[()=>t.deleteAndroidEmulator(p),c],m=async()=>{for(let f=h.length-1;f>=0;f-=1)try{await h[f]()}catch(E){if(E instanceof Error&&E.message.includes("ECONNREFUSED"))return;n.warn({err:E},"Error running cleanup task")}},g=async()=>{if(a&&!a.connected)throw await m(),new Error("Client disconnected before Appium driver could be started")};await g();try{let f=await xx({logger:n,driverLogLevel:o,appiumPort:i,port:l,limbarStart:s,emulatorName:p,apiClient:t,onStatusUpdate:r,creationOpts:e});return h.push(f.appiumClose),h.push(async()=>f.driver.deleteSession()),await g(),{...f,emulatorName:p,limbarToken:u,limbarUrl:d,adbTunnelPort:l,cleanup:m,appiumPort:i}}catch(f){throw await m(),new Error(`Failed to start Appium driver: ${f}`)}}async function xx({logger:r,driverLogLevel:e="warn",port:t,limbarStart:n,emulatorName:o,appiumPort:i}){let a=Date.now(),{close:s,logFile:c}=await _x({logger:r,logLevel:e,appiumPort:i}),l={platformName:"Android","appium:automationName":"UiAutomator2","appium:deviceName":"Android","appium:udid":`127.0.0.1:${t}`,"appium:adbExecTimeout":3e4,"appium:newCommandTimeout":600,"appium:skipDeviceInitialization":!0,"appium:skipServerInstallation":!0,"appium:androidInstallTimeout":6e4,"appium:autoWebview":!1,"appium:autoWebviewTimeout":0,"appium:clearDeviceLogsOnStart":!0},u={hostname:"localhost",port:i,logLevel:e,capabilities:l,connectionRetryTimeout:3e4,connectionRetryCount:2},d=Date.now(),p=await Cx(u);await p.updateSettings({enableMultiWindows:!0});let h=new Map;return p.on("command",m=>{h.set(m.command,Date.now())}),p.on("result",m=>{let g=h.get(m.command);if(!g)return;let f=Date.now()-g;m.result instanceof Error?r.warn({err:m.result,command:m.command,args:m.body,durationMs:f},"Appium cmd failed"):f>1e4&&r.warn({command:m.command,args:m.body,durationMs:f},"Appium cmd took very long"),h.delete(m.command)}),r.info({timings:{limbarDuration:a-n,appiumDuration:d-a,wdioDuration:Date.now()-d},capabilities:l,emulatorName:o},"Started Appium driver"),{driver:p,appiumClose:s,appiumPort:i,appiumLogFile:c}}async function _x({logger:r,logLevel:e,appiumPort:t}){let n=`${Rx()}/appium-port-${Date.now()}.log`,o=await wx.main({port:t,address:"localhost",relaxedSecurityEnabled:!0,longStacktrace:e==="debug",logFormat:"json",loglevel:e,logFile:n});return{logFile:n,close:async()=>{await o.close()}}}async function Mx({apiClient:r,logger:e,onStatusUpdate:t,creationOpts:n}){let{close:o,port:i,token:a,webRtcUrl:s,emulatorName:c}=await ng({apiClient:r,logger:e,creationOpts:n,onStatusUpdate:t});return{port:i,close:o,limbarToken:a,limbarUrl:s,emulatorName:c}}import og from"crypto";import Ix from"fs";async function Ss({tag:r,channel:e,filePath:t,apiClient:n,logger:o}){let i=await Ix.promises.readFile(t),a=og.createHash("md5").update(i).digest("base64"),s=og.createHash("md5").update(i).digest("hex"),c=await n.generateAndroidAssetUrls({channel:e,tag:r??"latest",md5:a});if(c.md5&&(c.md5===a||c.md5===s)){o.info({channel:e,tag:r,md5:a,md5Hex:s},`Asset ${t} already exists on emulator platform`);return}if(c.uploadUrl){o.info({channel:e,tag:r,md5:a,uploadUrl:c.uploadUrl},`Uploading asset ${t} to emulator platform...`);try{let l=await fetch(c.uploadUrl,{headers:{"Content-Length":i.length.toString(),"Content-Type":"application/octet-stream"},method:"PUT",body:i});if(l.status!==200)throw new Error(`Got error response from emulator platform: ${l.status} ${await l.text()}`);o.info({channel:e,tag:r,md5:a},`Asset ${t} was uploaded successfully!`);return}catch(l){try{await n.deleteAndroidAsset(e,r??"latest")}catch(u){o.warn({err:u,tag:r,channel:e},"Failed to cleanup asset metadata for failed upload. Please contact Momentic support.")}throw o.error({err:l},"Failed to upload asset"),l}}throw new Error(`No upload URL was given for asset ${t}`)}import{execSync as Xy}from"child_process";import{existsSync as GO}from"fs";import{platform as Jy}from"os";import{dirname as jO,join as VO,resolve as WO}from"path";import{z as ig}from"zod";var MG=ig.object({input:ig.string()});import{z as tt}from"zod";var OG=tt.object({srcs:tt.array(tt.string()),urls:tt.array(tt.string()),desiredSrc:tt.string().optional(),desiredUrl:tt.string().optional()}),ag=tt.object({srcRegex:tt.string().optional(),urlRegex:tt.string().optional()}),sg=tt.object({x:tt.number(),y:tt.number(),correlation:tt.number()}),LG=tt.object({searchImageBase64String:tt.string(),pageImageBase64String:tt.string(),id:tt.string().uuid(),timeoutMs:tt.number().max(1e4).min(0).optional()});import{z as L}from"zod";import*as F from"zod";import{extendZodWithOpenApi as Px}from"zod-openapi";Px(F);var nn=(s=>(s.AI="AI",s.AI_HEALED="AI_HEALED",s.CLICK_TO_FIND="CLICK_TO_FIND",s.XY_PERCENT="XY_PERCENT",s.RECORDING="RECORDING",s.USER_CSS_SELECTOR="USER_CSS_SELECTOR",s.HEURISTIC_HEALED="HEURISTIC_HEALED",s))(nn||{}),Ox=F.object({mPathSelectorTokens:F.string().array(),frameSrcRegex:F.string().optional(),frameUrlRegex:F.string().optional(),indices:F.number().array()}),Eu=F.object({result:F.number(),traceId:F.string()}).array(),ys=F.object({type:F.literal("GCS_TRACES"),traces:Eu}),lg=F.object({text:F.string().optional(),attributes:F.record(F.string(),F.string()).optional(),boundingBox:F.object({x:F.number(),y:F.number(),width:F.number(),height:F.number()}).optional()}),Lx=F.object({selectors:F.string().array(),requirements:lg.optional()}),on=F.object({id:F.number().int(),dataMomenticId:F.number().int().optional(),selector:F.string().optional(),hybridSelector:F.object({textContent:F.string().nullish(),attributes:F.record(F.string(),F.string()),tagName:F.string(),expandShadowRoot:F.boolean().optional(),classNames:F.string().array(),nthChild:F.number()}).array().optional(),generatedSelectors:F.string().array().optional(),requirements:lg.optional(),additionalElements:Lx.array().optional(),role:F.string().optional(),name:F.string().optional(),numChildren:F.number().optional(),content:F.string().optional(),pathFromRoot:F.string().optional(),serializedHtml:F.string().optional().describe("pruned html including 1 neighbor and 1 layer of children. value for text inputs pruned."),nodeOnlySerializedHtml:F.string().optional().describe("outerHtml of the element without any children. value for text inputs pruned."),screenshotUrl:F.string().url().optional(),boundingBox:F.object({x:F.number().optional(),y:F.number().optional(),width:F.number(),height:F.number()}).describe("css pixel bounding box").optional(),frameCache:Ox.optional(),inputDescription:F.string().optional().describe("the description that generated this cache"),targetSource:F.nativeEnum(nn).optional(),targetUpdateTime:F.string().optional(),targetUpdateLoggerTags:F.record(F.string(),F.string()).optional(),cacheResolutionUpdateSource:F.string().optional(),cacheResolutionUpdateTime:F.string().optional(),cacheResolutionUpdateLoggerTags:F.record(F.string(),F.string()).optional(),memory:ys.optional()}).openapi({ref:"ElementTargetCache"});function bs(r){return!!(r.serializedHtml||r.screenshotUrl||r.generatedSelectors||r.hybridSelector)}var Nx=F.object({type:F.literal("description"),elementDescriptor:F.string().describe("Description of the element.")}).openapi({ref:"DescriptionTarget"}),kx=F.object({x:F.number(),y:F.number()}),Dx=F.object({type:F.literal("coordinates"),pixels:kx}).openapi({ref:"CoordinatesTarget"});function an(r){return r.type==="description"}function Rr(r){return r.type==="coordinates"}var ft=F.discriminatedUnion("type",[Nx,Dx]).openapi({ref:"ElementTarget"});function Tu(r){if(!r)return!1;switch(r.type){case"description":return!!r.elementDescriptor}return!0}function cg(r){return ys.safeParse(r).success}import{v4 as Se}from"uuid";import*as b from"zod";import{extendZodWithOpenApi as Vx}from"zod-openapi";import{z as ne}from"zod";import{extendZodWithOpenApi as Ux}from"zod-openapi";import{z as Li}from"zod";import ug from"zod";var Oi=ug.object({updatedAt:ug.coerce.date().optional()});var vu=Li.object({result:Li.boolean(),traceId:Li.string()}).array(),Au=Li.object({type:Li.literal("GCS_TRACES"),traces:vu}),wu=Oi.extend({memory:Au.optional()});Ux(ne);var dg=ne.object({plan:ne.string().optional(),evidence:ne.string().optional(),thoughts:ne.string(),result:ne.boolean(),relevantElements:ne.array(ne.number()).optional(),updatedMemory:vu.optional()}),Vr=(o=>(o.CONTAINS="CONTAINS",o.STARTS_WITH="STARTS_WITH",o.EQUALS="EQUALS",o.EXISTS="EXISTS",o))(Vr||{});var Fx=ne.object({type:ne.literal("ELEMENT_NAME"),negated:ne.boolean().optional(),operation:ne.nativeEnum(Vr),value:ne.string()}).openapi({ref:"ElementNameAssertion"}),Bx=ne.object({type:ne.literal("ELEMENT_STYLE"),negated:ne.boolean().optional(),operation:ne.nativeEnum(Vr),property:ne.string(),value:ne.string()}).openapi({ref:"ElementStyleAssertion"}),zx=ne.object({type:ne.literal("ELEMENT_CONTENT"),negated:ne.boolean().optional(),operation:ne.nativeEnum(Vr),value:ne.string()}).openapi({ref:"ElementContentAssertion"}),Hx=ne.object({type:ne.literal("ELEMENT_ATTRIBUTE"),negated:ne.boolean().optional(),operation:ne.nativeEnum(Vr),attr:ne.string(),value:ne.string()}).openapi({ref:"ElementAttributeValueAssertion"}),Dn=(i=>(i.EXISTS="EXISTS",i.VISIBLE="VISIBLE",i.ENABLED="ENABLED",i.EDITABLE="EDITABLE",i.FOCUSED="FOCUSED",i))(Dn||{}),Gx=ne.object({type:ne.literal("ELEMENT_EXISTENCE"),negated:ne.boolean().optional(),condition:ne.nativeEnum(Dn).describe("Treated as the element exists AND is also ...")}).openapi({ref:"ElementExistenceAssertion"}),pg=ne.discriminatedUnion("type",[zx,Hx,Gx,Fx,Bx]).openapi({ref:"ManualElementAssertion"});var jx=ne.object({type:ne.literal("CONTENT"),negated:ne.boolean().optional(),value:ne.string()}).openapi({ref:"PageContentAssertion"}),mg=ne.discriminatedUnion("type",[jx]).openapi({ref:"ManualPageAssertion"});import At from"zod";var Ru=At.discriminatedUnion("type",[At.object({type:At.literal("SUBSTRING"),url:At.string()}),At.object({type:At.literal("GLOB"),glob:At.string()}),At.object({type:At.literal("REGEX"),regex:At.string()}),At.object({type:At.literal("DOMAIN"),domain:At.string()})]),Ni=At.object({urlMatcher:Ru,method:At.string().optional()});import{z as fe}from"zod";var _o=fe.object({url:fe.string(),method:fe.union([fe.literal("GET"),fe.literal("POST"),fe.literal("PUT"),fe.literal("DELETE"),fe.literal("PATCH")]),headers:fe.record(fe.string(),fe.string()).optional(),params:fe.record(fe.string(),fe.string()).optional(),body:fe.string().optional(),timeout:fe.number().int().optional().describe("Max seconds to wait for the request to complete")}),hg=fe.object({url:fe.string(),headers:fe.record(fe.string(),fe.string()).optional(),query:fe.string(),variables:fe.string().optional(),timeout:fe.number().int().optional().describe("Max seconds to wait for the request to complete")}),Es=fe.object({code:fe.string(),fragment:fe.boolean().optional().describe("Agents should not touch this unless explicitly told to"),environment:fe.union([fe.literal("NODE"),fe.literal("BROWSER")]).optional().describe("default NODE, Agents default to using node unless it is necessary to use browser"),timeout:fe.number().int().max(60).optional().describe("Max seconds for the code to complete")});var rt=(Y=>(Y.AI_EXTRACT="AI_EXTRACT",Y.AI_ASSERTION="AI_ASSERTION",Y.AUTH_LOAD="AUTH_LOAD",Y.AUTH_SAVE="AUTH_SAVE",Y.BLUR="BLUR",Y.CAPTCHA="CAPTCHA",Y.CLICK="CLICK",Y.COOKIE="COOKIE",Y.COPY="COPY",Y.DIALOG="DIALOG",Y.DRAG="DRAG",Y.ELEMENT_CHECK="ELEMENT_CHECK",Y.FILE_UPLOAD="FILE_UPLOAD",Y.FOCUS="FOCUS",Y.GO_BACK="GO_BACK",Y.GO_FORWARD="GO_FORWARD",Y.HOVER="HOVER",Y.JAVASCRIPT="JAVASCRIPT",Y.LOCAL_STORAGE="LOCAL_STORAGE",Y.MOUSE_DRAG="MOUSE_DRAG",Y.NAVIGATE="NAVIGATE",Y.NEW_TAB="NEW_TAB",Y.PAGE_CHECK="PAGE_CHECK",Y.PASTE="PASTE",Y.PRESS="PRESS",Y.KEY_DOWN="KEY_DOWN",Y.KEY_UP="KEY_UP",Y.REFRESH="REFRESH",Y.REQUEST="REQUEST",Y.GRAPHQL_REQUEST="GRAPHQL_REQUEST",Y.SCROLL_DOWN="SCROLL_DOWN",Y.SCROLL_UP="SCROLL_UP",Y.SCROLL_LEFT="SCROLL_LEFT",Y.SCROLL_RIGHT="SCROLL_RIGHT",Y.SELECT_OPTION="SELECT_OPTION",Y.SWITCH_TAB="TAB",Y.TYPE="TYPE",Y.VISUAL_DIFF="VISUAL_DIFF",Y.WAIT="WAIT",Y.WAIT_FOR_URL="WAIT_FOR_URL",Y.REGISTER_REQUEST_LISTENER="REGISTER_REQUEST_LISTENER",Y.AWAIT_LISTENER="AWAIT_LISTENER",Y.RECORD_REQUESTS="RECORD_REQUESTS",Y.GET_RECORDED_REQUESTS="GET_RECORDED_REQUESTS",Y.SET_HEADER="SET_HEADER",Y.MOCK_ROUTE="MOCK_ROUTE",Y.REMOVE_ROUTE_MOCK="REMOVE_ROUTE_MOCK",Y.OFFLINE_MODE="OFFLINE_MODE",Y.SUCCESS="SUCCESS",Y))(rt||{});Vx(b);var q=b.object({thoughts:b.string().optional(),id:b.string().uuid().describe("unique identifier to this step, used for step cache")}),qt=b.object({useSelector:b.boolean().optional(),force:b.boolean().optional(),disableCache:b.boolean().optional().describe("disable element caching for this step"),iframeUrl:b.string().optional().describe("url or url regex for the iframe")}).openapi({ref:"CommonTargetingOptions"}),Kt=Oi.extend({target:on}).optional().openapi({ref:"SingleTargetCache"});function gg(r){return Kt.safeParse(r).success}var Ts=b.object({loadTimeout:b.number().int().max(60).optional().describe("Max seconds for the page to load")}),Wx=q.merge(Ts).merge(b.object({type:b.literal("NAVIGATE"),url:b.string()})).openapi({ref:"NavigateCommand"}),vs=qt.merge(b.object({cache:Kt})),Mo=q.merge(vs.merge(b.object({target:ft.optional(),type:b.literal("SCROLL_UP"),deltaY:b.number().optional()}))).openapi({ref:"ScrollUpCommand"}),Io=q.merge(vs.merge(b.object({target:ft.optional(),type:b.literal("SCROLL_DOWN"),deltaY:b.number().optional()}))).openapi({ref:"ScrollDownCommand"}),Po=q.merge(vs.merge(b.object({target:ft.optional(),type:b.literal("SCROLL_LEFT"),deltaX:b.number().optional()}))).openapi({ref:"ScrollLeftCommand"}),Oo=q.merge(vs.merge(b.object({target:ft.optional(),type:b.literal("SCROLL_RIGHT"),deltaX:b.number().optional()}))).openapi({ref:"ScrollRightCommand"}),cj=b.discriminatedUnion("type",[Mo,Io,Po,Oo]).openapi({ref:"AllScrollCommands"}),$x=q.merge(b.object({type:b.literal("DIALOG"),action:b.union([b.literal("ACCEPT"),b.literal("DISMISS")])})).openapi({ref:"DialogCommand"}),qx=q.merge(b.object({type:b.literal("WAIT"),delay:b.number()})).openapi({ref:"WaitCommand"}),Kx=b.object({caseInsensitive:b.boolean().optional().describe("Whether to ignore case when matching the URL"),negated:b.boolean().optional().describe("Wait for the URL to NOT match the provided matcher instead."),timeout:b.number().int().optional().describe("Max seconds to wait for the URL to match")}),fg=q.extend({type:b.literal("WAIT_FOR_URL"),matcher:Ru}).merge(Kx).openapi({ref:"WaitUrlCommand"}),Yx=q.merge(Ts).merge(b.object({type:b.literal("REFRESH")})).openapi({ref:"RefreshCommand"}),Sg=q.merge(b.object({type:b.literal("GO_BACK")})).openapi({ref:"GoBackCommand"}),Xx=q.merge(b.object({type:b.literal("GO_FORWARD")})).openapi({ref:"GoForwardCommand"}),Jx=q.extend({type:b.literal("AUTH_SAVE")}).openapi({ref:"AuthSaveCommand"}),Zx=q.extend({type:b.literal("AUTH_LOAD"),storageState:b.string().describe("JSON string auth state. Leave blank or set to the empty string to clear all existing authentication.")}).openapi({ref:"AuthLoadCommand"}),xu=q.merge(qt).extend({type:b.literal("CAPTCHA")}).openapi({ref:"CaptchaCommand"}),Qx=q.extend({type:b.literal("COPY"),value:b.string()}).openapi({ref:"CopyCommand"}),e_=q.extend({type:b.literal("PASTE")}).openapi({ref:"PasteCommand"}),yg=q.merge(Es).extend({type:b.literal("JAVASCRIPT")}).openapi({ref:"JavaScriptCommand"}),Di=q.merge(qt).extend({type:b.literal("CLICK"),target:ft,doubleClick:b.boolean().optional(),rightClick:b.boolean().optional(),waitForDownload:b.boolean().optional().describe("Wait for the click to trigger a file download and for the file download to complete."),delayMs:b.number().optional(),downloadTimeoutMs:b.number().optional(),cache:Kt,relativePosition:b.object({x:b.number(),y:b.number()}).optional()}).openapi({ref:"ClickCommand"}),bg=Oi.extend({fromTarget:on.optional(),toTarget:on.optional()}),Ui=q.merge(qt).merge(b.object({type:b.literal("DRAG"),fromTarget:ft,toTarget:ft,steps:b.number().optional(),hoverSeconds:b.number().optional().describe("Seconds to hover the object before dropping"),cache:bg.optional()})).openapi({ref:"DragCommand"}),Fi=q.merge(qt).merge(b.object({type:b.literal("MOUSE_DRAG"),target:ft.optional(),deltaX:b.string().describe("pixels to move horizontally, can be template"),deltaY:b.string().describe("pixels to move vertically, can be template"),steps:b.number().optional(),cache:Kt})).openapi({ref:"MouseDragCommand"}),Bi=q.merge(qt).merge(b.object({type:b.literal("HOVER"),target:ft,cache:Kt})).openapi({ref:"HoverCommand"}),zi=q.merge(qt).merge(b.object({type:b.literal("FOCUS"),target:ft,cache:Kt})).openapi({ref:"FocusCommand"}),Hi=q.merge(qt).extend({type:b.literal("BLUR"),target:ft.optional(),cache:Kt}).openapi({ref:"BlurCommand"}),t_=b.object({type:b.literal("URL"),url:b.string()}).describe("Accessible link to the file, either public http or local file://").openapi({ref:"UrlSource"}),r_=b.object({type:b.literal("USER_FILE"),name:b.string()}).describe("Accessible link to the file, references the google cloud file").openapi({ref:"UploadedFileSource"}),n_=q.extend({type:b.literal("FILE_UPLOAD"),fileSource:b.discriminatedUnion("type",[t_,r_]),filename:b.string().optional()}).openapi({ref:"FileUploadCommand"}),Eg=b.discriminatedUnion("type",[b.object({type:b.literal("VALUE"),value:b.string()}),b.object({type:b.literal("LABEL"),label:b.string()}),b.object({type:b.literal("INDEX"),index:b.coerce.string()})]),Gi=q.merge(qt).extend({type:b.literal("SELECT_OPTION"),target:ft,cache:Kt,choice:Eg.describe("new field for selecting options, optional for backcompat")}).openapi({ref:"SelectOptionCommand"}),_u=b.union([b.literal("MULTIMODAL"),b.literal("VISION_ONLY")]),As=q.merge(b.object({type:b.literal("AI_ASSERTION"),assertion:b.string(),disableCache:b.boolean().optional(),iframeUrl:b.string().optional(),contextChoice:_u.optional(),timeout:b.number().int().optional().describe("Max seconds to wait for assertion to be true"),cache:wu.optional()})).openapi({ref:"AIAssertionCommand"}),sn=5,Mu=600,Lo=q.merge(qt).extend({type:b.literal("ELEMENT_CHECK"),target:ft,assertion:pg,cache:Kt.or(wu).optional(),timeout:b.number().int().min(0).max(Mu).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"ElementAssertionCommand"}),Tg=q.extend({type:b.literal("PAGE_CHECK"),assertion:mg,iframeUrl:b.string().optional().describe("url or url regex for the iframe"),timeout:b.number().int().min(0).max(Mu).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"PageAssertionCommand"}),vg=q.merge(b.object({type:b.literal("AI_EXTRACT"),goal:b.string(),schema:b.string().optional(),envKey:b.string().optional(),disableCache:b.boolean().optional(),iframeUrl:b.string().optional()})).openapi({ref:"AIExtractCommand"}),o_=b.object({clearContent:b.boolean().optional(),forceClearContent:b.boolean().optional(),delay:b.number().min(0).max(1e3).optional().describe("Delay between each press in milliseconds."),force:b.boolean().optional(),pressEnter:b.boolean().optional(),relativePosition:b.object({x:b.number(),y:b.number()}).optional()}),Ag=25,ji=q.merge(qt).merge(o_).extend({type:b.literal("TYPE"),target:ft.optional(),value:b.string(),cache:Kt}).openapi({ref:"TypeCommand"}),i_=q.merge(b.object({type:b.literal("PRESS"),value:b.string(),repeat:b.number().optional(),convertMeta:b.boolean().optional(),delayMs:b.number().optional()})).openapi({ref:"PressCommand"}),a_=q.merge(b.object({type:b.literal("KEY_DOWN"),value:b.string(),convertMeta:b.boolean().optional()})).openapi({ref:"KeyDownCommand"}),s_=q.merge(b.object({type:b.literal("KEY_UP"),value:b.string(),convertMeta:b.boolean().optional()})).openapi({ref:"KeyUpCommand"}),l_=b.object({type:b.literal("SUBSTRING"),substring:b.string()}),c_=b.object({type:b.literal("REGEX"),pattern:b.string()}),u_=b.object({type:b.literal("INDEX"),index:b.coerce.string()}),d_=b.discriminatedUnion("type",[l_,c_,u_]),p_=q.merge(Ts).merge(b.object({type:b.literal("TAB"),action:d_})).openapi({ref:"TabCommand"}),wg=q.merge(Ts).merge(b.object({type:b.literal("NEW_TAB"),url:b.string()})).openapi({ref:"NewTabCommand"}),m_=q.merge(b.object({type:b.literal("COOKIE"),value:b.string()})).openapi({ref:"CookieCommand"}),h_=q.merge(b.object({type:b.literal("LOCAL_STORAGE"),key:b.string(),value:b.string()})).openapi({ref:"LocalStorageCommand"}),g_=q.extend({type:b.literal("REQUEST")}).merge(_o).openapi({ref:"RequestCommand"}),f_=q.extend({type:b.literal("GRAPHQL_REQUEST")}).merge(hg).openapi({ref:"GraphQLRequestCommand"}),S_=q.merge(b.object({type:b.literal("SUCCESS"),condition:As.optional()})).openapi({ref:"SuccessCommand"}),Rg=q.merge(b.object({type:b.literal("FAILURE")})).openapi({ref:"FailureCommand"}),y_=b.object({data:b.string().describe("location at which to find a jpg"),width:b.number(),height:b.number()}),Vi=q.merge(qt).merge(b.object({type:b.literal("VISUAL_DIFF"),threshold:b.number().optional().describe("default 0.1"),target:ft.optional(),screenshot:y_.optional(),cache:Kt})).openapi({ref:"VisualDiffCommand"}),b_=q.merge(b.object({type:b.literal("REGISTER_REQUEST_LISTENER"),requestMatcher:Ni,key:b.string()})).openapi({ref:"RegisterRequestListenerCommand"}),E_=q.merge(b.object({type:b.literal("AWAIT_LISTENER"),key:b.string(),timeout:b.number().optional().describe("timeout")})).openapi({ref:"WaitForListenerCommand"}),T_=q.merge(b.object({type:b.literal("RECORD_REQUESTS"),requestMatcher:Ni,key:b.string()})).openapi({ref:"RecordRequestsCommand"}),v_=q.merge(b.object({type:b.literal("GET_RECORDED_REQUESTS"),key:b.string()})).openapi({ref:"GetRecordedRequestsCommand"}),A_=q.merge(b.object({type:b.literal("SET_HEADER"),name:b.string(),value:b.string(),requestMatcher:Ni.optional()})).openapi({ref:"SetHeaderCommand"}),w_=q.merge(b.object({type:b.literal("MOCK_ROUTE"),requestMatcher:Ni,responseGenerator:b.string().describe("JavaScript code to generate a response"),fetchOriginalResponse:b.boolean().optional().describe("Whether to fetch the real response and pass it to the response generator. If enabled, the original response will be available as `response` in the code."),key:b.string().optional().describe("Key to reference this mock. This only needs to be set if you plan to remove the mock later in the test.")}).openapi({ref:"MockRouteCommandOptions"})),R_=q.merge(b.object({type:b.literal("REMOVE_ROUTE_MOCK"),key:b.string().optional().describe("Key of the mock to remove. If not set, all route mocks will be removed.")}).openapi({ref:"RemoveRouteMockCommandOptions"})),C_=q.merge(b.object({type:b.literal("OFFLINE_MODE"),enable:b.boolean()})).openapi({ref:"OfflineModeCommand"}),x_=b.discriminatedUnion("type",[Di,ji,i_,a_,s_,Gi,Wx,Io,Mo,As,Bi,qx]),Iu=b.discriminatedUnion("type",[...x_.options,S_]),Pu=b.discriminatedUnion("type",[...Iu.options,yg,Lo,Tg,wg,fg,Sg,vg]),__=b.discriminatedUnion("type",[vg,Zx,Jx,xu,m_,Qx,$x,Ui,Lo,n_,Sg,Xx,yg,h_,Fi,wg,Tg,e_,Yx,g_,f_,Po,Oo,p_,Vi,zi,Hi,fg,b_,E_,T_,v_,A_,w_,R_,C_]),No=b.discriminatedUnion("type",[...Iu.options,...__.options]).openapi({ref:"Command"}),ws=b.discriminatedUnion("type",[...Iu.options,Rg]),uj=b.discriminatedUnion("type",[...Pu.options,Rg]);function Wr(r){let e;switch(r){case"PASTE":case"AUTH_SAVE":case"VISUAL_DIFF":case"SUCCESS":case"SCROLL_DOWN":case"SCROLL_UP":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"CAPTCHA":case"GO_BACK":case"GO_FORWARD":case"REFRESH":e={id:Se(),type:r};break;case"AUTH_LOAD":{e={id:Se(),type:r,storageState:""};break}case"AI_EXTRACT":e={id:Se(),type:r,goal:""};break;case"DIALOG":e={id:Se(),type:r,action:"DISMISS"};break;case"DRAG":e={id:Se(),type:r,fromTarget:{type:"description",elementDescriptor:""},toTarget:{type:"description",elementDescriptor:""}};break;case"MOUSE_DRAG":e={id:Se(),type:r,deltaX:"0",deltaY:"0",steps:1};break;case"WAIT_FOR_URL":e={id:Se(),type:r,matcher:{type:"SUBSTRING",url:""}};break;case"WAIT":e={id:Se(),type:r,delay:1};break;case"BLUR":e={id:Se(),type:r};break;case"HOVER":case"FOCUS":case"CLICK":e={id:Se(),type:r,target:{type:"description",elementDescriptor:""}};break;case"COOKIE":case"PRESS":case"COPY":case"TYPE":e={id:Se(),type:r,value:"",clearContent:!0};break;case"KEY_DOWN":case"KEY_UP":e={id:Se(),type:r,value:""};break;case"SELECT_OPTION":e={id:Se(),type:r,target:{type:"description",elementDescriptor:""},choice:{type:"VALUE",value:""}};break;case"NAVIGATE":case"NEW_TAB":return{id:Se(),type:r,url:""};case"TAB":e={id:Se(),type:r,action:{type:"SUBSTRING",substring:""}};break;case"REQUEST":e={id:Se(),type:r,url:"",method:"GET"};break;case"GRAPHQL_REQUEST":e={id:Se(),type:r,url:"",query:""};break;case"LOCAL_STORAGE":e={id:Se(),type:r,key:"",value:""};break;case"JAVASCRIPT":e={id:Se(),type:r,code:""};break;case"AI_ASSERTION":e={id:Se(),type:r,assertion:""};break;case"FILE_UPLOAD":{e={id:Se(),type:r,fileSource:{type:"URL",url:""}};break}case"ELEMENT_CHECK":{e={id:Se(),type:r,target:{type:"description",elementDescriptor:""},assertion:{type:"ELEMENT_EXISTENCE",condition:"EXISTS"}};break}case"PAGE_CHECK":{e={id:Se(),type:r,assertion:{type:"CONTENT",value:""}};break}case"REGISTER_REQUEST_LISTENER":{e={id:Se(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"AWAIT_LISTENER":{e={id:Se(),type:r,key:""};break}case"RECORD_REQUESTS":{e={id:Se(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"GET_RECORDED_REQUESTS":{e={id:Se(),type:r,key:""};break}case"SET_HEADER":{e={id:Se(),type:r,name:"",value:""};break}case"MOCK_ROUTE":{e={id:Se(),type:r,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},responseGenerator:""};break}case"REMOVE_ROUTE_MOCK":{e={id:Se(),type:r};break}case"OFFLINE_MODE":{e={id:Se(),type:r,enable:!0};break}default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}return e}function Cg(r){switch(r.type){case"BLUR":case"CLICK":case"DRAG":case"FOCUS":case"HOVER":case"MOUSE_DRAG":case"PRESS":case"KEY_DOWN":case"KEY_UP":case"SCROLL_DOWN":case"SCROLL_UP":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"TYPE":return!0;case"AUTH_LOAD":case"AUTH_SAVE":case"AWAIT_LISTENER":case"SUCCESS":case"AI_ASSERTION":case"AI_EXTRACT":case"CAPTCHA":case"COOKIE":case"COPY":case"DIALOG":case"ELEMENT_CHECK":case"FILE_UPLOAD":case"GET_RECORDED_REQUESTS":case"GO_BACK":case"GO_FORWARD":case"GRAPHQL_REQUEST":case"JAVASCRIPT":case"LOCAL_STORAGE":case"NAVIGATE":case"NEW_TAB":case"PASTE":case"PAGE_CHECK":case"RECORD_REQUESTS":case"REGISTER_REQUEST_LISTENER":case"REFRESH":case"REQUEST":case"SELECT_OPTION":case"SET_HEADER":case"TAB":case"VISUAL_DIFF":case"WAIT":case"WAIT_FOR_URL":case"OFFLINE_MODE":case"MOCK_ROUTE":case"REMOVE_ROUTE_MOCK":return!1;default:return(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}import{z as M_}from"zod";var gj=M_.discriminatedUnion("type",[Hi,xu,Di,Ui,zi,Bi,Fi,Mo,Io,Po,Oo,Gi,ji,Vi,Lo]);import{z as I_}from"zod";import{z as ln}from"zod";function Wi(r){return ln.object({key:ln.string(),testId:ln.string().optional(),moduleId:ln.string().optional(),organizationId:ln.string(),value:r})}function $i(r){return Wi(r).extend({uniqueKey:ln.string()})}function Rs(r){return ln.record(ln.string(),$i(r))}var wt={type:!0,cache:!0},ko=I_.discriminatedUnion("type",[As.pick(wt),Hi.pick(wt),Di.pick(wt),Ui.pick(wt),Lo.pick(wt),zi.pick(wt),Bi.pick(wt),Fi.pick(wt),Mo.pick(wt),Io.pick(wt),Po.pick(wt),Oo.pick(wt),Gi.pick(wt),ji.pick(wt),Vi.pick(wt)]),Ou=Object.values(rt).filter(r=>ko.options.some(e=>e.shape.type.safeParse(r).success));No.options.forEach(r=>{if("target"in r.shape&&!Ou.includes(r.shape.type.value))throw new Error(`Command ${r.shape.type.value} has a target but no cache`)});function xg(r){return Ou.includes(r.type)}var _g=Wi(ko),Mg=$i(ko),Aj=Rs(ko);import{v4 as A$}from"uuid";import{z as M}from"zod";var Pg=Symbol("Let zodToJsonSchema decide on which parser to use");var Ig={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},Og=r=>typeof r=="string"?{...Ig,name:r}:{...Ig,...r};var Lg=r=>{let e=Og(r),t=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:t,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([n,o])=>[o._def,{def:o._def,path:[...e.basePath,e.definitionPath,n],jsonSchema:void 0}]))}};function Lu(r,e,t,n){n?.errorMessages&&t&&(r.errorMessage={...r.errorMessage,[e]:t})}function ue(r,e,t,n,o){r[e]=t,Lu(r,e,n,o)}var Cs=(r,e)=>{let t=0;for(;t<r.length&&t<e.length&&r[t]===e[t];t++);return[(r.length-t).toString(),...e.slice(t)].join("/")};import{ZodFirstPartyTypeKind as le}from"zod";function De(r){if(r.target!=="openAi")return{};let e=[...r.basePath,r.definitionPath,r.openAiAnyTypeName];return r.flags.hasReferencedOpenAiAnyType=!0,{$ref:r.$refStrategy==="relative"?Cs(e,r.currentPath):e.join("/")}}import{ZodFirstPartyTypeKind as P_}from"zod";function Ng(r,e){let t={type:"array"};return r.type?._def&&r.type?._def?.typeName!==P_.ZodAny&&(t.items=X(r.type._def,{...e,currentPath:[...e.currentPath,"items"]})),r.minLength&&ue(t,"minItems",r.minLength.value,r.minLength.message,e),r.maxLength&&ue(t,"maxItems",r.maxLength.value,r.maxLength.message,e),r.exactLength&&(ue(t,"minItems",r.exactLength.value,r.exactLength.message,e),ue(t,"maxItems",r.exactLength.value,r.exactLength.message,e)),t}function kg(r,e){let t={type:"integer",format:"int64"};if(!r.checks)return t;for(let n of r.checks)switch(n.kind){case"min":e.target==="jsonSchema7"?n.inclusive?ue(t,"minimum",n.value,n.message,e):ue(t,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(t.exclusiveMinimum=!0),ue(t,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?ue(t,"maximum",n.value,n.message,e):ue(t,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(t.exclusiveMaximum=!0),ue(t,"maximum",n.value,n.message,e));break;case"multipleOf":ue(t,"multipleOf",n.value,n.message,e);break}return t}function Dg(){return{type:"boolean"}}function xs(r,e){return X(r.type._def,e)}var Ug=(r,e)=>X(r.innerType._def,e);function Nu(r,e,t){let n=t??e.dateStrategy;if(Array.isArray(n))return{anyOf:n.map((o,i)=>Nu(r,e,o))};switch(n){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return O_(r,e)}}var O_=(r,e)=>{let t={type:"integer",format:"unix-time"};if(e.target==="openApi3")return t;for(let n of r.checks)switch(n.kind){case"min":ue(t,"minimum",n.value,n.message,e);break;case"max":ue(t,"maximum",n.value,n.message,e);break}return t};function Fg(r,e){return{...X(r.innerType._def,e),default:r.defaultValue()}}function Bg(r,e){return e.effectStrategy==="input"?X(r.schema._def,e):De(e)}function zg(r){return{type:"string",enum:Array.from(r.values)}}var L_=r=>"type"in r&&r.type==="string"?!1:"allOf"in r;function Hg(r,e){let t=[X(r.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),X(r.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),n=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,o=[];return t.forEach(i=>{if(L_(i))o.push(...i.allOf),i.unevaluatedProperties===void 0&&(n=void 0);else{let a=i;if("additionalProperties"in i&&i.additionalProperties===!1){let{additionalProperties:s,...c}=i;a=c}else n=void 0;o.push(a)}}),o.length?{allOf:o,...n}:void 0}function Gg(r,e){let t=typeof r.value;return t!=="bigint"&&t!=="number"&&t!=="boolean"&&t!=="string"?{type:Array.isArray(r.value)?"array":"object"}:e.target==="openApi3"?{type:t==="bigint"?"integer":t,enum:[r.value]}:{type:t==="bigint"?"integer":t,const:r.value}}import{ZodFirstPartyTypeKind as qi}from"zod";var ku,pr={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(ku===void 0&&(ku=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),ku),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function _s(r,e){let t={type:"string"};if(r.checks)for(let n of r.checks)switch(n.kind){case"min":ue(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,n.value):n.value,n.message,e);break;case"max":ue(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,n.value):n.value,n.message,e);break;case"email":switch(e.emailStrategy){case"format:email":mr(t,"email",n.message,e);break;case"format:idn-email":mr(t,"idn-email",n.message,e);break;case"pattern:zod":Rt(t,pr.email,n.message,e);break}break;case"url":mr(t,"uri",n.message,e);break;case"uuid":mr(t,"uuid",n.message,e);break;case"regex":Rt(t,n.regex,n.message,e);break;case"cuid":Rt(t,pr.cuid,n.message,e);break;case"cuid2":Rt(t,pr.cuid2,n.message,e);break;case"startsWith":Rt(t,RegExp(`^${Du(n.value,e)}`),n.message,e);break;case"endsWith":Rt(t,RegExp(`${Du(n.value,e)}$`),n.message,e);break;case"datetime":mr(t,"date-time",n.message,e);break;case"date":mr(t,"date",n.message,e);break;case"time":mr(t,"time",n.message,e);break;case"duration":mr(t,"duration",n.message,e);break;case"length":ue(t,"minLength",typeof t.minLength=="number"?Math.max(t.minLength,n.value):n.value,n.message,e),ue(t,"maxLength",typeof t.maxLength=="number"?Math.min(t.maxLength,n.value):n.value,n.message,e);break;case"includes":{Rt(t,RegExp(Du(n.value,e)),n.message,e);break}case"ip":{n.version!=="v6"&&mr(t,"ipv4",n.message,e),n.version!=="v4"&&mr(t,"ipv6",n.message,e);break}case"base64url":Rt(t,pr.base64url,n.message,e);break;case"jwt":Rt(t,pr.jwt,n.message,e);break;case"cidr":{n.version!=="v6"&&Rt(t,pr.ipv4Cidr,n.message,e),n.version!=="v4"&&Rt(t,pr.ipv6Cidr,n.message,e);break}case"emoji":Rt(t,pr.emoji(),n.message,e);break;case"ulid":{Rt(t,pr.ulid,n.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{mr(t,"binary",n.message,e);break}case"contentEncoding:base64":{ue(t,"contentEncoding","base64",n.message,e);break}case"pattern:zod":{Rt(t,pr.base64,n.message,e);break}}break}case"nanoid":Rt(t,pr.nanoid,n.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return t}function Du(r,e){return e.patternStrategy==="escape"?k_(r):r}var N_=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function k_(r){let e="";for(let t=0;t<r.length;t++)N_.has(r[t])||(e+="\\"),e+=r[t];return e}function mr(r,e,t,n){r.format||r.anyOf?.some(o=>o.format)?(r.anyOf||(r.anyOf=[]),r.format&&(r.anyOf.push({format:r.format,...r.errorMessage&&n.errorMessages&&{errorMessage:{format:r.errorMessage.format}}}),delete r.format,r.errorMessage&&(delete r.errorMessage.format,Object.keys(r.errorMessage).length===0&&delete r.errorMessage)),r.anyOf.push({format:e,...t&&n.errorMessages&&{errorMessage:{format:t}}})):ue(r,"format",e,t,n)}function Rt(r,e,t,n){r.pattern||r.allOf?.some(o=>o.pattern)?(r.allOf||(r.allOf=[]),r.pattern&&(r.allOf.push({pattern:r.pattern,...r.errorMessage&&n.errorMessages&&{errorMessage:{pattern:r.errorMessage.pattern}}}),delete r.pattern,r.errorMessage&&(delete r.errorMessage.pattern,Object.keys(r.errorMessage).length===0&&delete r.errorMessage)),r.allOf.push({pattern:jg(e,n),...t&&n.errorMessages&&{errorMessage:{pattern:t}}})):ue(r,"pattern",jg(e,n),t,n)}function jg(r,e){if(!e.applyRegexFlags||!r.flags)return r.source;let t={i:r.flags.includes("i"),m:r.flags.includes("m"),s:r.flags.includes("s")},n=t.i?r.source.toLowerCase():r.source,o="",i=!1,a=!1,s=!1;for(let c=0;c<n.length;c++){if(i){o+=n[c],i=!1;continue}if(t.i){if(a){if(n[c].match(/[a-z]/)){s?(o+=n[c],o+=`${n[c-2]}-${n[c]}`.toUpperCase(),s=!1):n[c+1]==="-"&&n[c+2]?.match(/[a-z]/)?(o+=n[c],s=!0):o+=`${n[c]}${n[c].toUpperCase()}`;continue}}else if(n[c].match(/[a-z]/)){o+=`[${n[c]}${n[c].toUpperCase()}]`;continue}}if(t.m){if(n[c]==="^"){o+=`(^|(?<=[\r
3
+ ]))`;continue}else if(n[c]==="$"){o+=`($|(?=[\r
4
+ ]))`;continue}}if(t.s&&n[c]==="."){o+=a?`${n[c]}\r
5
+ `:`[${n[c]}\r
6
+ ]`;continue}o+=n[c],n[c]==="\\"?i=!0:a&&n[c]==="]"?a=!1:!a&&n[c]==="["&&(a=!0)}try{new RegExp(o)}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),r.source}return o}function Ms(r,e){if(e.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),e.target==="openApi3"&&r.keyType?._def.typeName===qi.ZodEnum)return{type:"object",required:r.keyType._def.values,properties:r.keyType._def.values.reduce((n,o)=>({...n,[o]:X(r.valueType._def,{...e,currentPath:[...e.currentPath,"properties",o]})??De(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let t={type:"object",additionalProperties:X(r.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return t;if(r.keyType?._def.typeName===qi.ZodString&&r.keyType._def.checks?.length){let{type:n,...o}=_s(r.keyType._def,e);return{...t,propertyNames:o}}else{if(r.keyType?._def.typeName===qi.ZodEnum)return{...t,propertyNames:{enum:r.keyType._def.values}};if(r.keyType?._def.typeName===qi.ZodBranded&&r.keyType._def.type._def.typeName===qi.ZodString&&r.keyType._def.type._def.checks?.length){let{type:n,...o}=xs(r.keyType._def,e);return{...t,propertyNames:o}}}return t}function Vg(r,e){if(e.mapStrategy==="record")return Ms(r,e);let t=X(r.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||De(e),n=X(r.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||De(e);return{type:"array",maxItems:125,items:{type:"array",items:[t,n],minItems:2,maxItems:2}}}function Wg(r){let e=r.values,n=Object.keys(r.values).filter(i=>typeof e[e[i]]!="number").map(i=>e[i]),o=Array.from(new Set(n.map(i=>typeof i)));return{type:o.length===1?o[0]==="string"?"string":"number":["string","number"],enum:n}}function $g(r){return r.target==="openAi"?void 0:{not:De({...r,currentPath:[...r.currentPath,"not"]})}}function qg(r){return r.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Ki={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function Yg(r,e){if(e.target==="openApi3")return Kg(r,e);let t=r.options instanceof Map?Array.from(r.options.values()):r.options;if(t.every(n=>n._def.typeName in Ki&&(!n._def.checks||!n._def.checks.length))){let n=t.reduce((o,i)=>{let a=Ki[i._def.typeName];return a&&!o.includes(a)?[...o,a]:o},[]);return{type:n.length>1?n:n[0]}}else if(t.every(n=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=t.reduce((o,i)=>{let a=typeof i._def.value;switch(a){case"string":case"number":case"boolean":return[...o,a];case"bigint":return[...o,"integer"];case"object":if(i._def.value===null)return[...o,"null"];case"symbol":case"undefined":case"function":default:return o}},[]);if(n.length===t.length){let o=n.filter((i,a,s)=>s.indexOf(i)===a);return{type:o.length>1?o:o[0],enum:t.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(t.every(n=>n._def.typeName==="ZodEnum"))return{type:"string",enum:t.reduce((n,o)=>[...n,...o._def.values.filter(i=>!n.includes(i))],[])};return Kg(r,e)}var Kg=(r,e)=>{let t=(r.options instanceof Map?Array.from(r.options.values()):r.options).map((n,o)=>X(n._def,{...e,currentPath:[...e.currentPath,"anyOf",`${o}`]})).filter(n=>!!n&&(!e.strictUnions||typeof n=="object"&&Object.keys(n).length>0));return t.length?{anyOf:t}:void 0};function Xg(r,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(r.innerType._def.typeName)&&(!r.innerType._def.checks||!r.innerType._def.checks.length))return e.target==="openApi3"?{type:Ki[r.innerType._def.typeName],nullable:!0}:{type:[Ki[r.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let n=X(r.innerType._def,{...e,currentPath:[...e.currentPath]});return n&&"$ref"in n?{allOf:[n],nullable:!0}:n&&{...n,nullable:!0}}let t=X(r.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return t&&{anyOf:[t,{type:"null"}]}}function Jg(r,e){let t={type:"number"};if(!r.checks)return t;for(let n of r.checks)switch(n.kind){case"int":t.type="integer",Lu(t,"type",n.message,e);break;case"min":e.target==="jsonSchema7"?n.inclusive?ue(t,"minimum",n.value,n.message,e):ue(t,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(t.exclusiveMinimum=!0),ue(t,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?ue(t,"maximum",n.value,n.message,e):ue(t,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(t.exclusiveMaximum=!0),ue(t,"maximum",n.value,n.message,e));break;case"multipleOf":ue(t,"multipleOf",n.value,n.message,e);break}return t}function Zg(r,e){let t=e.target==="openAi",n={type:"object",properties:{}},o=[],i=r.shape();for(let s in i){let c=i[s];if(c===void 0||c._def===void 0)continue;let l=U_(c);l&&t&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),l=!1);let u=X(c._def,{...e,currentPath:[...e.currentPath,"properties",s],propertyPath:[...e.currentPath,"properties",s]});u!==void 0&&(n.properties[s]=u,l||o.push(s))}o.length&&(n.required=o);let a=D_(r,e);return a!==void 0&&(n.additionalProperties=a),n}function D_(r,e){if(r.catchall._def.typeName!=="ZodNever")return X(r.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(r.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function U_(r){try{return r.isOptional()}catch{return!0}}var Qg=(r,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return X(r.innerType._def,e);let t=X(r.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return t?{anyOf:[{not:De(e)},t]}:De(e)};var ef=(r,e)=>{if(e.pipeStrategy==="input")return X(r.in._def,e);if(e.pipeStrategy==="output")return X(r.out._def,e);let t=X(r.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),n=X(r.out._def,{...e,currentPath:[...e.currentPath,"allOf",t?"1":"0"]});return{allOf:[t,n].filter(o=>o!==void 0)}};function tf(r,e){return X(r.type._def,e)}function rf(r,e){let n={type:"array",uniqueItems:!0,items:X(r.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return r.minSize&&ue(n,"minItems",r.minSize.value,r.minSize.message,e),r.maxSize&&ue(n,"maxItems",r.maxSize.value,r.maxSize.message,e),n}function nf(r,e){return r.rest?{type:"array",minItems:r.items.length,items:r.items.map((t,n)=>X(t._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((t,n)=>n===void 0?t:[...t,n],[]),additionalItems:X(r.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:r.items.length,maxItems:r.items.length,items:r.items.map((t,n)=>X(t._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((t,n)=>n===void 0?t:[...t,n],[])}}function of(r){return{not:De(r)}}function af(r){return De(r)}var sf=(r,e)=>X(r.innerType._def,e);var lf=(r,e,t)=>{switch(e){case le.ZodString:return _s(r,t);case le.ZodNumber:return Jg(r,t);case le.ZodObject:return Zg(r,t);case le.ZodBigInt:return kg(r,t);case le.ZodBoolean:return Dg();case le.ZodDate:return Nu(r,t);case le.ZodUndefined:return of(t);case le.ZodNull:return qg(t);case le.ZodArray:return Ng(r,t);case le.ZodUnion:case le.ZodDiscriminatedUnion:return Yg(r,t);case le.ZodIntersection:return Hg(r,t);case le.ZodTuple:return nf(r,t);case le.ZodRecord:return Ms(r,t);case le.ZodLiteral:return Gg(r,t);case le.ZodEnum:return zg(r);case le.ZodNativeEnum:return Wg(r);case le.ZodNullable:return Xg(r,t);case le.ZodOptional:return Qg(r,t);case le.ZodMap:return Vg(r,t);case le.ZodSet:return rf(r,t);case le.ZodLazy:return()=>r.getter()._def;case le.ZodPromise:return tf(r,t);case le.ZodNaN:case le.ZodNever:return $g(t);case le.ZodEffects:return Bg(r,t);case le.ZodAny:return De(t);case le.ZodUnknown:return af(t);case le.ZodDefault:return Fg(r,t);case le.ZodBranded:return xs(r,t);case le.ZodReadonly:return sf(r,t);case le.ZodCatch:return Ug(r,t);case le.ZodPipeline:return ef(r,t);case le.ZodFunction:case le.ZodVoid:case le.ZodSymbol:return;default:return(n=>{})(e)}};function X(r,e,t=!1){let n=e.seen.get(r);if(e.override){let s=e.override?.(r,e,n,t);if(s!==Pg)return s}if(n&&!t){let s=F_(n,e);if(s!==void 0)return s}let o={def:r,path:e.currentPath,jsonSchema:void 0};e.seen.set(r,o);let i=lf(r,r.typeName,e),a=typeof i=="function"?X(i(),e):i;if(a&&B_(r,e,a),e.postProcess){let s=e.postProcess(a,r,e);return o.jsonSchema=a,s}return o.jsonSchema=a,a}var F_=(r,e)=>{switch(e.$refStrategy){case"root":return{$ref:r.path.join("/")};case"relative":return{$ref:Cs(e.currentPath,r.path)};case"none":case"seen":return r.path.length<e.currentPath.length&&r.path.every((t,n)=>e.currentPath[n]===t)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),De(e)):e.$refStrategy==="seen"?De(e):void 0}},B_=(r,e,t)=>(r.description&&(t.description=r.description,e.markdownDescription&&(t.markdownDescription=r.description)),t);var Un=(r,e)=>{let t=Lg(e),n=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((c,[l,u])=>({...c,[l]:X(u._def,{...t,currentPath:[...t.basePath,t.definitionPath,l]},!0)??De(t)}),{}):void 0,o=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,i=X(r._def,o===void 0?t:{...t,currentPath:[...t.basePath,t.definitionPath,o]},!1)??De(t),a=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;a!==void 0&&(i.title=a),t.flags.hasReferencedOpenAiAnyType&&(n||(n={}),n[t.openAiAnyTypeName]||(n[t.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:t.$refStrategy==="relative"?"1":[...t.basePath,t.definitionPath,t.openAiAnyTypeName].join("/")}}));let s=o===void 0?n?{...i,[t.definitionPath]:n}:i:{$ref:[...t.$refStrategy==="relative"?[]:t.basePath,t.definitionPath,o].join("/"),[t.definitionPath]:{...n,[o]:i}};return t.target==="jsonSchema7"?s.$schema="http://json-schema.org/draft-07/schema#":(t.target==="jsonSchema2019-09"||t.target==="openAi")&&(s.$schema="https://json-schema.org/draft/2019-09/schema#"),t.target==="openAi"&&("anyOf"in s||"oneOf"in s||"allOf"in s||"type"in s&&Array.isArray(s.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),s};import{z as Cr}from"zod";import{extendZodWithOpenApi as z_}from"zod-openapi";z_(Cr);var Re=(p=>(p.AI_PROVIDER="AIProviderError",p.USER_INFRA="UserInfrastructureError",p.ACTION_FAILURE="ActionFailureError",p.ASSERTION_FAILURE="AssertionFailureError",p.CONFIG_ERROR="UserConfigurationError",p.SETUP_FAILURE="SetupFailureError",p.TEARDOWN_FAILURE="TeardownFailureError",p.WEB_AGENT_PLATFORM="InternalWebAgentError",p.UNKNOWN_PLATFORM="InternalPlatformError",p.JOB_TIMEOUT="JobTimeoutError",p.CONCURRENCY_ERROR="ConcurrencyError",p.UNKNOWN="UnknownError",p))(Re||{});var Uu=Cr.object({reason:Cr.nativeEnum(Re),previousStepsDescription:Cr.array(Cr.string()).optional(),summary:Cr.string(),rootCause:Cr.string().optional()}).openapi({ref:"TestResultClassification"}),Is=Cr.object({errorMessage:Cr.string(),errorStack:Cr.string().optional(),classification:Uu.optional()}).openapi({ref:"TestFailureDetails"});var _=class extends Error{reason;constructor(e,t,n){let o=!1;for(let i of Object.values(Re))if(t.startsWith(i)){o=!0,e=i;break}if(n?.errOptions?.cause)super(o?t:`${e}: ${t}`,n?.errOptions);else{let i=o?t:`${e}${t?`: ${t}`:""}`;super(i,n?.errOptions)}this.name="TestFailureError",this.stack=this.stack?.slice(this.name.length+2),this.reason=e}toString(){return this.message}toJSON(){return{message:this.message}}},Do=class extends Error{updatedLocatorMemory;constructor(e,t,n={}){super(e,n),this.updatedLocatorMemory=t,this.name="NoElementsFoundUsingAIError"}},cn=class extends Error{decisions;constructor(e,t,n={}){super(e,n),this.decisions=t,this.name="NoElementsFoundUsingCacheError"}toString(){return`${this.message}
3
7
  Decisions:
4
8
  ${this.decisions.map(e=>e.toString()).join(`
5
- `)}`}};function Ef(r){return r instanceof Error?r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("waiting for locator"):!1}function Qu(r){return!(r instanceof Error)||r.message.includes("locator resolved to visible")?!1:!!(r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("body >")||r.message.includes("Element is not attached to the DOM"))}var Er=class extends Error{retryableWithAI;constructor(e,t,n={}){super(e,n),this.name="CacheAttributesDisqualifyElementError",this.retryableWithAI=t}},Fs=class extends Er{constructor(e,t={}){super(e,!0,t),this.name="BoundingBoxMovedError"}},Bs=class extends Er{constructor(e,t={}){super(e,!1,t),this.name="ZeroOpacityError"}};function ed(r){return r instanceof Error?r.message.includes("Could not find attribute data-momentic-id for object"):!1}function td(r){return r instanceof Error?r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("waiting for locator")&&r.message.includes("data-momentic-id")&&!r.message.includes("locator resolved")&&!r.message.includes("waiting for element to be"):!1}function rd(r){return r instanceof Error?r.message.includes("Protocol error (DOM.resolveNode): No node with given id found")||r.message.includes("Could not resolve backend node"):!1}var ea=class extends Error{constructor(e,t={}){super(e,t),this.name="InsufficientCacheDataError"}};import{cloneDeep as rP}from"lodash-es";import{z as Tr}from"zod";var vf=(c=>(c.DisableClickhouseCaches="disable_clickhouse_caches",c.ShowZeroOpacityElements="show_zero_opacity_elements",c.VisualActions="visual_actions",c.RagV2="rag_v2",c.DisableSecondaryCacheResolution="disable_secondary_cache_resolution",c.GlobalLocatorRedirect="global_locator_redirect",c.FakerConstantSeed="faker_constant_seed",c.AutoExpandIframes="auto_expand_iframes",c))(vf||{});var Tf=Tr.union([Tr.string(),Tr.number(),Tr.boolean(),Tr.null(),Tr.record(Tr.string(),Tr.lazy(()=>Tf)),Tr.array(Tr.lazy(()=>Tf))]),zs=class{flags;payloads;constructor(e,t){this.flags=e,this.payloads=t}isBooleanFlagEnabled(e){return process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${e.toUpperCase()}`]==="true"?!0:process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${e.toUpperCase()}`]==="false"?!1:this.flags[e]===!0}getAllFlags(){let e=rP(this.flags);return Object.entries(e).forEach(([t,n])=>{typeof n=="boolean"&&Object.values(vf).includes(t)&&(e[t]=this.isBooleanFlagEnabled(t))}),e}getFlagPayload(e){let t=this.payloads[e];if(t!==void 0){if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t}}refresh(){throw new Error("Not implemented")}},UK=new zs({},{});var nd={".123":"application/vnd.lotus-1-2-3",".3dml":"text/vnd.in3d.3dml",".3g2":"video/3gpp2",".3gp":"video/3gpp",".a":"application/octet-stream",".aab":"application/x-authorware-bin",".aac":"audio/x-aac",".aam":"application/x-authorware-map",".aas":"application/x-authorware-seg",".abw":"application/x-abiword",".acc":"application/vnd.americandynamics.acc",".ace":"application/x-ace-compressed",".acu":"application/vnd.acucobol",".acutc":"application/vnd.acucorp",".adp":"audio/adpcm",".aep":"application/vnd.audiograph",".afm":"application/x-font-type1",".afp":"application/vnd.ibm.modcap",".ai":"application/postscript",".aif":"audio/x-aiff",".aifc":"audio/x-aiff",".aiff":"audio/x-aiff",".air":"application/vnd.adobe.air-application-installer-package+zip",".ami":"application/vnd.amiga.ami",".apk":"application/vnd.android.package-archive",".application":"application/x-ms-application",".apr":"application/vnd.lotus-approach",".asc":"application/pgp-signature",".asf":"video/x-ms-asf",".asm":"text/x-asm",".aso":"application/vnd.accpac.simply.aso",".asx":"video/x-ms-asf",".atc":"application/vnd.acucorp",".atom":"application/atom+xml",".atomcat":"application/atomcat+xml",".atomsvc":"application/atomsvc+xml",".atx":"application/vnd.antix.game-component",".au":"audio/basic",".avi":"video/x-msvideo",".aw":"application/applixware",".azf":"application/vnd.airzip.filesecure.azf",".azs":"application/vnd.airzip.filesecure.azs",".azw":"application/vnd.amazon.ebook",".bat":"application/x-msdownload",".bcpio":"application/x-bcpio",".bdf":"application/x-font-bdf",".bdm":"application/vnd.syncml.dm+wbxml",".bh2":"application/vnd.fujitsu.oasysprs",".bin":"application/octet-stream",".bmi":"application/vnd.bmi",".bmp":"image/bmp",".book":"application/vnd.framemaker",".box":"application/vnd.previewsystems.box",".boz":"application/x-bzip2",".bpk":"application/octet-stream",".btif":"image/prs.btif",".bz":"application/x-bzip",".bz2":"application/x-bzip2",".c":"text/x-c",".c4d":"application/vnd.clonk.c4group",".c4f":"application/vnd.clonk.c4group",".c4g":"application/vnd.clonk.c4group",".c4p":"application/vnd.clonk.c4group",".c4u":"application/vnd.clonk.c4group",".cab":"application/vnd.ms-cab-compressed",".car":"application/vnd.curl.car",".cat":"application/vnd.ms-pki.seccat",".cc":"text/x-c",".cct":"application/x-director",".ccxml":"application/ccxml+xml",".cdbcmsg":"application/vnd.contact.cmsg",".cdf":"application/x-netcdf",".cdkey":"application/vnd.mediastation.cdkey",".cdx":"chemical/x-cdx",".cdxml":"application/vnd.chemdraw+xml",".cdy":"application/vnd.cinderella",".cer":"application/pkix-cert",".cgm":"image/cgm",".chat":"application/x-chat",".chm":"application/vnd.ms-htmlhelp",".chrt":"application/vnd.kde.kchart",".cif":"chemical/x-cif",".cii":"application/vnd.anser-web-certificate-issue-initiation",".cil":"application/vnd.ms-artgalry",".cla":"application/vnd.claymore",".class":"application/java-vm",".clkk":"application/vnd.crick.clicker.keyboard",".clkp":"application/vnd.crick.clicker.palette",".clkt":"application/vnd.crick.clicker.template",".clkw":"application/vnd.crick.clicker.wordbank",".clkx":"application/vnd.crick.clicker",".clp":"application/x-msclip",".cmc":"application/vnd.cosmocaller",".cmdf":"chemical/x-cmdf",".cml":"chemical/x-cml",".cmp":"application/vnd.yellowriver-custom-menu",".cmx":"image/x-cmx",".cod":"application/vnd.rim.cod",".com":"application/x-msdownload",".conf":"text/plain",".cpio":"application/x-cpio",".cpp":"text/x-c",".cpt":"application/mac-compactpro",".crd":"application/x-mscardfile",".crl":"application/pkix-crl",".crt":"application/x-x509-ca-cert",".csh":"application/x-csh",".csml":"chemical/x-csml",".csp":"application/vnd.commonspace",".css":"text/css",".cst":"application/x-director",".csv":"text/csv",".cu":"application/cu-seeme",".curl":"text/vnd.curl",".cww":"application/prs.cww",".cxt":"application/x-director",".cxx":"text/x-c",".daf":"application/vnd.mobius.daf",".dataless":"application/vnd.fdsn.seed",".davmount":"application/davmount+xml",".dcr":"application/x-director",".dcurl":"text/vnd.curl.dcurl",".dd2":"application/vnd.oma.dd2+xml",".ddd":"application/vnd.fujixerox.ddd",".deb":"application/x-debian-package",".def":"text/plain",".deploy":"application/octet-stream",".der":"application/x-x509-ca-cert",".dfac":"application/vnd.dreamfactory",".dic":"text/x-c",".diff":"text/plain",".dir":"application/x-director",".dis":"application/vnd.mobius.dis",".dist":"application/octet-stream",".distz":"application/octet-stream",".djv":"image/vnd.djvu",".djvu":"image/vnd.djvu",".dll":"application/x-msdownload",".dmg":"application/octet-stream",".dms":"application/octet-stream",".dna":"application/vnd.dna",".doc":"application/msword",".docm":"application/vnd.ms-word.document.macroenabled.12",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".dot":"application/msword",".dotm":"application/vnd.ms-word.template.macroenabled.12",".dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template",".dp":"application/vnd.osgi.dp",".dpg":"application/vnd.dpgraph",".dsc":"text/prs.lines.tag",".dtb":"application/x-dtbook+xml",".dtd":"application/xml-dtd",".dts":"audio/vnd.dts",".dtshd":"audio/vnd.dts.hd",".dump":"application/octet-stream",".dvi":"application/x-dvi",".dwf":"model/vnd.dwf",".dwg":"image/vnd.dwg",".dxf":"image/vnd.dxf",".dxp":"application/vnd.spotfire.dxp",".dxr":"application/x-director",".ecelp4800":"audio/vnd.nuera.ecelp4800",".ecelp7470":"audio/vnd.nuera.ecelp7470",".ecelp9600":"audio/vnd.nuera.ecelp9600",".ecma":"application/ecmascript",".edm":"application/vnd.novadigm.edm",".edx":"application/vnd.novadigm.edx",".efif":"application/vnd.picsel",".ei6":"application/vnd.pg.osasli",".elc":"application/octet-stream",".eml":"message/rfc822",".emma":"application/emma+xml",".eol":"audio/vnd.digital-winds",".eot":"application/vnd.ms-fontobject",".eps":"application/postscript",".epub":"application/epub+zip",".es3":"application/vnd.eszigno3+xml",".esf":"application/vnd.epson.esf",".et3":"application/vnd.eszigno3+xml",".etx":"text/x-setext",".exe":"application/x-msdownload",".ext":"application/vnd.novadigm.ext",".ez":"application/andrew-inset",".ez2":"application/vnd.ezpix-album",".ez3":"application/vnd.ezpix-package",".f":"text/x-fortran",".f4v":"video/x-f4v",".f77":"text/x-fortran",".f90":"text/x-fortran",".fbs":"image/vnd.fastbidsheet",".fdf":"application/vnd.fdf",".fe_launch":"application/vnd.denovo.fcselayout-link",".fg5":"application/vnd.fujitsu.oasysgp",".fgd":"application/x-director",".fh":"image/x-freehand",".fh4":"image/x-freehand",".fh5":"image/x-freehand",".fh7":"image/x-freehand",".fhc":"image/x-freehand",".fig":"application/x-xfig",".fli":"video/x-fli",".flo":"application/vnd.micrografx.flo",".flv":"video/x-flv",".flw":"application/vnd.kde.kivio",".flx":"text/vnd.fmi.flexstor",".fly":"text/vnd.fly",".fm":"application/vnd.framemaker",".fnc":"application/vnd.frogans.fnc",".for":"text/x-fortran",".fpx":"image/vnd.fpx",".frame":"application/vnd.framemaker",".fsc":"application/vnd.fsc.weblaunch",".fst":"image/vnd.fst",".ftc":"application/vnd.fluxtime.clip",".fti":"application/vnd.anser-web-funds-transfer-initiation",".fvt":"video/vnd.fvt",".fzs":"application/vnd.fuzzysheet",".g3":"image/g3fax",".gac":"application/vnd.groove-account",".gdl":"model/vnd.gdl",".geo":"application/vnd.dynageo",".gex":"application/vnd.geometry-explorer",".ggb":"application/vnd.geogebra.file",".ggt":"application/vnd.geogebra.tool",".ghf":"application/vnd.groove-help",".gif":"image/gif",".gim":"application/vnd.groove-identity-message",".gmx":"application/vnd.gmx",".gnumeric":"application/x-gnumeric",".gph":"application/vnd.flographit",".gqf":"application/vnd.grafeq",".gqs":"application/vnd.grafeq",".gram":"application/srgs",".gre":"application/vnd.geometry-explorer",".grv":"application/vnd.groove-injector",".grxml":"application/srgs+xml",".gsf":"application/x-font-ghostscript",".gtar":"application/x-gtar",".gtm":"application/vnd.groove-tool-message",".gtw":"model/vnd.gtw",".gv":"text/vnd.graphviz",".gz":"application/x-gzip",".h":"text/x-c",".h261":"video/h261",".h263":"video/h263",".h264":"video/h264",".hbci":"application/vnd.hbci",".hdf":"application/x-hdf",".hh":"text/x-c",".hlp":"application/winhlp",".hpgl":"application/vnd.hp-hpgl",".hpid":"application/vnd.hp-hpid",".hps":"application/vnd.hp-hps",".hqx":"application/mac-binhex40",".htke":"application/vnd.kenameaapp",".htm":"text/html",".html":"text/html",".hvd":"application/vnd.yamaha.hv-dic",".hvp":"application/vnd.yamaha.hv-voice",".hvs":"application/vnd.yamaha.hv-script",".icc":"application/vnd.iccprofile",".ice":"x-conference/x-cooltalk",".icm":"application/vnd.iccprofile",".ico":"image/x-icon",".ics":"text/calendar",".ief":"image/ief",".ifb":"text/calendar",".ifm":"application/vnd.shana.informed.formdata",".iges":"model/iges",".igl":"application/vnd.igloader",".igs":"model/iges",".igx":"application/vnd.micrografx.igx",".iif":"application/vnd.shana.informed.interchange",".imp":"application/vnd.accpac.simply.imp",".ims":"application/vnd.ms-ims",".in":"text/plain",".ipk":"application/vnd.shana.informed.package",".irm":"application/vnd.ibm.rights-management",".irp":"application/vnd.irepository.package+xml",".iso":"application/octet-stream",".itp":"application/vnd.shana.informed.formtemplate",".ivp":"application/vnd.immervision-ivp",".ivu":"application/vnd.immervision-ivu",".jad":"text/vnd.sun.j2me.app-descriptor",".jam":"application/vnd.jam",".jar":"application/java-archive",".java":"text/x-java-source",".jisp":"application/vnd.jisp",".jlt":"application/vnd.hp-jlyt",".jnlp":"application/x-java-jnlp-file",".joda":"application/vnd.joost.joda-archive",".jpe":"image/jpeg",".jpeg":"image/jpeg",".jpg":"image/jpeg",".jpgm":"video/jpm",".jpgv":"video/jpeg",".jpm":"video/jpm",".js":"application/javascript",".json":"application/json",".kar":"audio/midi",".karbon":"application/vnd.kde.karbon",".kfo":"application/vnd.kde.kformula",".kia":"application/vnd.kidspiration",".kil":"application/x-killustrator",".kml":"application/vnd.google-earth.kml+xml",".kmz":"application/vnd.google-earth.kmz",".kne":"application/vnd.kinar",".knp":"application/vnd.kinar",".kon":"application/vnd.kde.kontour",".kpr":"application/vnd.kde.kpresenter",".kpt":"application/vnd.kde.kpresenter",".ksh":"text/plain",".ksp":"application/vnd.kde.kspread",".ktr":"application/vnd.kahootz",".ktz":"application/vnd.kahootz",".kwd":"application/vnd.kde.kword",".kwt":"application/vnd.kde.kword",".latex":"application/x-latex",".lbd":"application/vnd.llamagraphics.life-balance.desktop",".lbe":"application/vnd.llamagraphics.life-balance.exchange+xml",".les":"application/vnd.hhe.lesson-player",".lha":"application/octet-stream",".link66":"application/vnd.route66.link66+xml",".list":"text/plain",".list3820":"application/vnd.ibm.modcap",".listafp":"application/vnd.ibm.modcap",".log":"text/plain",".lostxml":"application/lost+xml",".lrf":"application/octet-stream",".lrm":"application/vnd.ms-lrm",".ltf":"application/vnd.frogans.ltf",".lvp":"audio/vnd.lucent.voice",".lwp":"application/vnd.lotus-wordpro",".lzh":"application/octet-stream",".m13":"application/x-msmediaview",".m14":"application/x-msmediaview",".m1v":"video/mpeg",".m2a":"audio/mpeg",".m2v":"video/mpeg",".m3a":"audio/mpeg",".m3u":"audio/x-mpegurl",".m4u":"video/vnd.mpegurl",".m4v":"video/x-m4v",".ma":"application/mathematica",".mag":"application/vnd.ecowin.chart",".maker":"application/vnd.framemaker",".man":"text/troff",".mathml":"application/mathml+xml",".mb":"application/mathematica",".mbk":"application/vnd.mobius.mbk",".mbox":"application/mbox",".mc1":"application/vnd.medcalcdata",".mcd":"application/vnd.mcd",".mcurl":"text/vnd.curl.mcurl",".mdb":"application/x-msaccess",".mdi":"image/vnd.ms-modi",".me":"text/troff",".mesh":"model/mesh",".mfm":"application/vnd.mfmp",".mgz":"application/vnd.proteus.magazine",".mht":"message/rfc822",".mhtml":"message/rfc822",".mid":"audio/midi",".midi":"audio/midi",".mif":"application/vnd.mif",".mime":"message/rfc822",".mj2":"video/mj2",".mjp2":"video/mj2",".mkv":"video/x-matroska",".mlp":"application/vnd.dolby.mlp",".mmd":"application/vnd.chipnuts.karaoke-mmd",".mmf":"application/vnd.smaf",".mmr":"image/vnd.fujixerox.edmics-mmr",".mny":"application/x-msmoney",".mobi":"application/x-mobipocket-ebook",".mov":"video/quicktime",".movie":"video/x-sgi-movie",".mp2":"audio/mpeg",".mp2a":"audio/mpeg",".mp3":"audio/mpeg",".mp4":"video/mp4",".mp4a":"audio/mp4",".mp4s":"application/mp4",".mp4v":"video/mp4",".mpa":"video/mpeg",".mpc":"application/vnd.mophun.certificate",".mpe":"video/mpeg",".mpeg":"video/mpeg",".mpg":"video/mpeg",".mpg4":"video/mp4",".mpga":"audio/mpeg",".mpkg":"application/vnd.apple.installer+xml",".mpm":"application/vnd.blueice.multipass",".mpn":"application/vnd.mophun.application",".mpp":"application/vnd.ms-project",".mpt":"application/vnd.ms-project",".mpy":"application/vnd.ibm.minipay",".mqy":"application/vnd.mobius.mqy",".mrc":"application/marc",".ms":"text/troff",".mscml":"application/mediaservercontrol+xml",".mseed":"application/vnd.fdsn.mseed",".mseq":"application/vnd.mseq",".msf":"application/vnd.epson.msf",".msh":"model/mesh",".msi":"application/x-msdownload",".msl":"application/vnd.mobius.msl",".msty":"application/vnd.muvee.style",".mts":"model/vnd.mts",".mus":"application/vnd.musician",".musicxml":"application/vnd.recordare.musicxml+xml",".mvb":"application/x-msmediaview",".mwf":"application/vnd.mfer",".mxf":"application/mxf",".mxl":"application/vnd.recordare.musicxml",".mxml":"application/xv+xml",".mxs":"application/vnd.triscape.mxs",".mxu":"video/vnd.mpegurl",".n-gage":"application/vnd.nokia.n-gage.symbian.install",".nb":"application/mathematica",".nc":"application/x-netcdf",".ncx":"application/x-dtbncx+xml",".ngdat":"application/vnd.nokia.n-gage.data",".nlu":"application/vnd.neurolanguage.nlu",".nml":"application/vnd.enliven",".nnd":"application/vnd.noblenet-directory",".nns":"application/vnd.noblenet-sealer",".nnw":"application/vnd.noblenet-web",".npx":"image/vnd.net-fpx",".nsf":"application/vnd.lotus-notes",".nws":"message/rfc822",".o":"application/octet-stream",".oa2":"application/vnd.fujitsu.oasys2",".oa3":"application/vnd.fujitsu.oasys3",".oas":"application/vnd.fujitsu.oasys",".obd":"application/x-msbinder",".obj":"application/octet-stream",".oda":"application/oda",".odb":"application/vnd.oasis.opendocument.database",".odc":"application/vnd.oasis.opendocument.chart",".odf":"application/vnd.oasis.opendocument.formula",".odft":"application/vnd.oasis.opendocument.formula-template",".odg":"application/vnd.oasis.opendocument.graphics",".odi":"application/vnd.oasis.opendocument.image",".odp":"application/vnd.oasis.opendocument.presentation",".ods":"application/vnd.oasis.opendocument.spreadsheet",".odt":"application/vnd.oasis.opendocument.text",".oga":"audio/ogg",".ogg":"audio/ogg",".ogv":"video/ogg",".ogx":"application/ogg",".onepkg":"application/onenote",".onetmp":"application/onenote",".onetoc":"application/onenote",".onetoc2":"application/onenote",".opf":"application/oebps-package+xml",".oprc":"application/vnd.palm",".org":"application/vnd.lotus-organizer",".osf":"application/vnd.yamaha.openscoreformat",".osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml",".otc":"application/vnd.oasis.opendocument.chart-template",".otf":"application/x-font-otf",".otg":"application/vnd.oasis.opendocument.graphics-template",".oth":"application/vnd.oasis.opendocument.text-web",".oti":"application/vnd.oasis.opendocument.image-template",".otm":"application/vnd.oasis.opendocument.text-master",".otp":"application/vnd.oasis.opendocument.presentation-template",".ots":"application/vnd.oasis.opendocument.spreadsheet-template",".ott":"application/vnd.oasis.opendocument.text-template",".oxt":"application/vnd.openofficeorg.extension",".p":"text/x-pascal",".p10":"application/pkcs10",".p12":"application/x-pkcs12",".p7b":"application/x-pkcs7-certificates",".p7c":"application/pkcs7-mime",".p7m":"application/pkcs7-mime",".p7r":"application/x-pkcs7-certreqresp",".p7s":"application/pkcs7-signature",".pas":"text/x-pascal",".pbd":"application/vnd.powerbuilder6",".pbm":"image/x-portable-bitmap",".pcf":"application/x-font-pcf",".pcl":"application/vnd.hp-pcl",".pclxl":"application/vnd.hp-pclxl",".pct":"image/x-pict",".pcurl":"application/vnd.curl.pcurl",".pcx":"image/x-pcx",".pdb":"application/vnd.palm",".pdf":"application/pdf",".pfa":"application/x-font-type1",".pfb":"application/x-font-type1",".pfm":"application/x-font-type1",".pfr":"application/font-tdpfr",".pfx":"application/x-pkcs12",".pgm":"image/x-portable-graymap",".pgn":"application/x-chess-pgn",".pgp":"application/pgp-encrypted",".pic":"image/x-pict",".pkg":"application/octet-stream",".pki":"application/pkixcmp",".pkipath":"application/pkix-pkipath",".pl":"text/plain",".plb":"application/vnd.3gpp.pic-bw-large",".plc":"application/vnd.mobius.plc",".plf":"application/vnd.pocketlearn",".pls":"application/pls+xml",".pml":"application/vnd.ctc-posml",".png":"image/png",".pnm":"image/x-portable-anymap",".portpkg":"application/vnd.macports.portpkg",".pot":"application/vnd.ms-powerpoint",".potm":"application/vnd.ms-powerpoint.template.macroenabled.12",".potx":"application/vnd.openxmlformats-officedocument.presentationml.template",".ppa":"application/vnd.ms-powerpoint",".ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12",".ppd":"application/vnd.cups-ppd",".ppm":"image/x-portable-pixmap",".pps":"application/vnd.ms-powerpoint",".ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12",".ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow",".ppt":"application/vnd.ms-powerpoint",".pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".pqa":"application/vnd.palm",".prc":"application/x-mobipocket-ebook",".pre":"application/vnd.lotus-freelance",".prf":"application/pics-rules",".ps":"application/postscript",".psb":"application/vnd.3gpp.pic-bw-small",".psd":"image/vnd.adobe.photoshop",".psf":"application/x-font-linux-psf",".ptid":"application/vnd.pvi.ptid1",".pub":"application/x-mspublisher",".pvb":"application/vnd.3gpp.pic-bw-var",".pwn":"application/vnd.3m.post-it-notes",".pwz":"application/vnd.ms-powerpoint",".py":"text/x-python",".pya":"audio/vnd.ms-playready.media.pya",".pyc":"application/x-python-code",".pyo":"application/x-python-code",".pyv":"video/vnd.ms-playready.media.pyv",".qam":"application/vnd.epson.quickanime",".qbo":"application/vnd.intu.qbo",".qfx":"application/vnd.intu.qfx",".qps":"application/vnd.publishare-delta-tree",".qt":"video/quicktime",".qwd":"application/vnd.quark.quarkxpress",".qwt":"application/vnd.quark.quarkxpress",".qxb":"application/vnd.quark.quarkxpress",".qxd":"application/vnd.quark.quarkxpress",".qxl":"application/vnd.quark.quarkxpress",".qxt":"application/vnd.quark.quarkxpress",".ra":"audio/x-pn-realaudio",".ram":"audio/x-pn-realaudio",".rar":"application/x-rar-compressed",".ras":"image/x-cmu-raster",".rcprofile":"application/vnd.ipunplugged.rcprofile",".rdf":"application/rdf+xml",".rdz":"application/vnd.data-vision.rdz",".rep":"application/vnd.businessobjects",".res":"application/x-dtbresource+xml",".rgb":"image/x-rgb",".rif":"application/reginfo+xml",".rl":"application/resource-lists+xml",".rlc":"image/vnd.fujixerox.edmics-rlc",".rld":"application/resource-lists-diff+xml",".rm":"application/vnd.rn-realmedia",".rmi":"audio/midi",".rmp":"audio/x-pn-realaudio-plugin",".rms":"application/vnd.jcp.javame.midlet-rms",".rnc":"application/relax-ng-compact-syntax",".roff":"text/troff",".rpm":"application/x-rpm",".rpss":"application/vnd.nokia.radio-presets",".rpst":"application/vnd.nokia.radio-preset",".rq":"application/sparql-query",".rs":"application/rls-services+xml",".rsd":"application/rsd+xml",".rss":"application/rss+xml",".rtf":"application/rtf",".rtx":"text/richtext",".s":"text/x-asm",".saf":"application/vnd.yamaha.smaf-audio",".sbml":"application/sbml+xml",".sc":"application/vnd.ibm.secure-container",".scd":"application/x-msschedule",".scm":"application/vnd.lotus-screencam",".scq":"application/scvp-cv-request",".scs":"application/scvp-cv-response",".scurl":"text/vnd.curl.scurl",".sda":"application/vnd.stardivision.draw",".sdc":"application/vnd.stardivision.calc",".sdd":"application/vnd.stardivision.impress",".sdkd":"application/vnd.solent.sdkm+xml",".sdkm":"application/vnd.solent.sdkm+xml",".sdp":"application/sdp",".sdw":"application/vnd.stardivision.writer",".see":"application/vnd.seemail",".seed":"application/vnd.fdsn.seed",".sema":"application/vnd.sema",".semd":"application/vnd.semd",".semf":"application/vnd.semf",".ser":"application/java-serialized-object",".setpay":"application/set-payment-initiation",".setreg":"application/set-registration-initiation",".sfd-hdstx":"application/vnd.hydrostatix.sof-data",".sfs":"application/vnd.spotfire.sfs",".sgl":"application/vnd.stardivision.writer-global",".sgm":"text/sgml",".sgml":"text/sgml",".sh":"application/x-sh",".shar":"application/x-shar",".shf":"application/shf+xml",".si":"text/vnd.wap.si",".sic":"application/vnd.wap.sic",".sig":"application/pgp-signature",".silo":"model/mesh",".sis":"application/vnd.symbian.install",".sisx":"application/vnd.symbian.install",".sit":"application/x-stuffit",".sitx":"application/x-stuffitx",".skd":"application/vnd.koan",".skm":"application/vnd.koan",".skp":"application/vnd.koan",".skt":"application/vnd.koan",".sl":"text/vnd.wap.sl",".slc":"application/vnd.wap.slc",".sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12",".sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide",".slt":"application/vnd.epson.salt",".smf":"application/vnd.stardivision.math",".smi":"application/smil+xml",".smil":"application/smil+xml",".snd":"audio/basic",".snf":"application/x-font-snf",".so":"application/octet-stream",".spc":"application/x-pkcs7-certificates",".spf":"application/vnd.yamaha.smaf-phrase",".spl":"application/x-futuresplash",".spot":"text/vnd.in3d.spot",".spp":"application/scvp-vp-response",".spq":"application/scvp-vp-request",".spx":"audio/ogg",".src":"application/x-wais-source",".srx":"application/sparql-results+xml",".sse":"application/vnd.kodak-descriptor",".ssf":"application/vnd.epson.ssf",".ssml":"application/ssml+xml",".stc":"application/vnd.sun.xml.calc.template",".std":"application/vnd.sun.xml.draw.template",".stf":"application/vnd.wt.stf",".sti":"application/vnd.sun.xml.impress.template",".stk":"application/hyperstudio",".stl":"application/vnd.ms-pki.stl",".str":"application/vnd.pg.format",".stw":"application/vnd.sun.xml.writer.template",".sus":"application/vnd.sus-calendar",".susp":"application/vnd.sus-calendar",".sv4cpio":"application/x-sv4cpio",".sv4crc":"application/x-sv4crc",".svd":"application/vnd.svd",".svg":"image/svg+xml",".svgz":"image/svg+xml",".swa":"application/x-director",".swf":"application/x-shockwave-flash",".swi":"application/vnd.arastra.swi",".sxc":"application/vnd.sun.xml.calc",".sxd":"application/vnd.sun.xml.draw",".sxg":"application/vnd.sun.xml.writer.global",".sxi":"application/vnd.sun.xml.impress",".sxm":"application/vnd.sun.xml.math",".sxw":"application/vnd.sun.xml.writer",".t":"text/troff",".tao":"application/vnd.tao.intent-module-archive",".tar":"application/x-tar",".tcap":"application/vnd.3gpp2.tcap",".tcl":"application/x-tcl",".teacher":"application/vnd.smart.teacher",".tex":"application/x-tex",".texi":"application/x-texinfo",".texinfo":"application/x-texinfo",".text":"text/plain",".tfm":"application/x-tex-tfm",".tgz":"application/x-gzip",".tif":"image/tiff",".tiff":"image/tiff",".tmo":"application/vnd.tmobile-livetv",".torrent":"application/x-bittorrent",".tpl":"application/vnd.groove-tool-template",".tpt":"application/vnd.trid.tpt",".tr":"text/troff",".tra":"application/vnd.trueapp",".trm":"application/x-msterminal",".tsv":"text/tab-separated-values",".ttc":"application/x-font-ttf",".ttf":"application/x-font-ttf",".twd":"application/vnd.simtech-mindmapper",".twds":"application/vnd.simtech-mindmapper",".txd":"application/vnd.genomatix.tuxedo",".txf":"application/vnd.mobius.txf",".txt":"text/plain",".u32":"application/x-authorware-bin",".udeb":"application/x-debian-package",".ufd":"application/vnd.ufdl",".ufdl":"application/vnd.ufdl",".umj":"application/vnd.umajin",".unityweb":"application/vnd.unity",".uoml":"application/vnd.uoml+xml",".uri":"text/uri-list",".uris":"text/uri-list",".urls":"text/uri-list",".ustar":"application/x-ustar",".utz":"application/vnd.uiq.theme",".uu":"text/x-uuencode",".vcd":"application/x-cdlink",".vcf":"text/x-vcard",".vcg":"application/vnd.groove-vcard",".vcs":"text/x-vcalendar",".vcx":"application/vnd.vcx",".vis":"application/vnd.visionary",".viv":"video/vnd.vivo",".vor":"application/vnd.stardivision.writer",".vox":"application/x-authorware-bin",".vrml":"model/vrml",".vsd":"application/vnd.visio",".vsf":"application/vnd.vsf",".vss":"application/vnd.visio",".vst":"application/vnd.visio",".vsw":"application/vnd.visio",".vtu":"model/vnd.vtu",".vxml":"application/voicexml+xml",".w3d":"application/x-director",".webm":"video/webm",".wad":"application/x-doom",".wav":"audio/x-wav",".wax":"audio/x-ms-wax",".wbmp":"image/vnd.wap.wbmp",".wbs":"application/vnd.criticaltools.wbs+xml",".wbxml":"application/vnd.wap.wbxml",".wcm":"application/vnd.ms-works",".wdb":"application/vnd.ms-works",".wiz":"application/msword",".wks":"application/vnd.ms-works",".wm":"video/x-ms-wm",".wma":"audio/x-ms-wma",".wmd":"application/x-ms-wmd",".wmf":"application/x-msmetafile",".wml":"text/vnd.wap.wml",".wmlc":"application/vnd.wap.wmlc",".wmls":"text/vnd.wap.wmlscript",".wmlsc":"application/vnd.wap.wmlscriptc",".wmv":"video/x-ms-wmv",".wmx":"video/x-ms-wmx",".wmz":"application/x-ms-wmz",".wpd":"application/vnd.wordperfect",".wpl":"application/vnd.ms-wpl",".wps":"application/vnd.ms-works",".wqd":"application/vnd.wqd",".wri":"application/x-mswrite",".wrl":"model/vrml",".wsdl":"application/wsdl+xml",".wspolicy":"application/wspolicy+xml",".wtb":"application/vnd.webturbo",".wvx":"video/x-ms-wvx",".x32":"application/x-authorware-bin",".x3d":"application/vnd.hzn-3d-crossword",".xap":"application/x-silverlight-app",".xar":"application/vnd.xara",".xbap":"application/x-ms-xbap",".xbd":"application/vnd.fujixerox.docuworks.binder",".xbm":"image/x-xbitmap",".xdm":"application/vnd.syncml.dm+xml",".xdp":"application/vnd.adobe.xdp+xml",".xdw":"application/vnd.fujixerox.docuworks",".xenc":"application/xenc+xml",".xer":"application/patch-ops-error+xml",".xfdf":"application/vnd.adobe.xfdf",".xfdl":"application/vnd.xfdl",".xht":"application/xhtml+xml",".xhtml":"application/xhtml+xml",".xhvml":"application/xv+xml",".xif":"image/vnd.xiff",".xla":"application/vnd.ms-excel",".xlam":"application/vnd.ms-excel.addin.macroenabled.12",".xlb":"application/vnd.ms-excel",".xlc":"application/vnd.ms-excel",".xlm":"application/vnd.ms-excel",".xls":"application/vnd.ms-excel",".xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12",".xlsm":"application/vnd.ms-excel.sheet.macroenabled.12",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".xlt":"application/vnd.ms-excel",".xltm":"application/vnd.ms-excel.template.macroenabled.12",".xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template",".xlw":"application/vnd.ms-excel",".xml":"application/xml",".xo":"application/vnd.olpc-sugar",".xop":"application/xop+xml",".xpdl":"application/xml",".xpi":"application/x-xpinstall",".xpm":"image/x-xpixmap",".xpr":"application/vnd.is-xpr",".xps":"application/vnd.ms-xpsdocument",".xpw":"application/vnd.intercon.formnet",".xpx":"application/vnd.intercon.formnet",".xsl":"application/xml",".xslt":"application/xslt+xml",".xsm":"application/vnd.syncml+xml",".xspf":"application/xspf+xml",".xul":"application/vnd.mozilla.xul+xml",".xvm":"application/xv+xml",".xvml":"application/xv+xml",".xwd":"image/x-xwindowdump",".xyz":"chemical/x-xyz",".zaz":"application/vnd.zzazz.deck+xml",".zip":"application/zip",".zir":"application/vnd.zul",".zirz":"application/vnd.zul",".zmm":"application/vnd.handheld-entertainment+xml"},Af=[".sh",".exe",".app",".bat",".cmd",".msi",".apk",".jar",".py",".js",".cron",".php",".asp"],BK=Object.keys(nd);import*as wf from"zod";var HK=wf.custom().refine(r=>r&&r.length>0).refine(r=>r&&r[0]instanceof File,{message:"Please upload a valid file."});import{z as cn}from"zod";var VK=cn.object({id:cn.string(),name:cn.string(),createdAt:cn.coerce.date(),createdBy:cn.string(),updatedAt:cn.coerce.date(),updatedBy:cn.string().nullable(),organizationId:cn.string()});import{z as L}from"zod";import un from"zod";var Bo=un.object({platformSep:un.string(),fullPathSegments:un.string().array(),relativePathSegments:un.string().array(),relativePath:un.string().describe("path relative to the root test directory, i.e. my-folder/my-test.yaml"),fileName:un.string().describe("base name of the file including the extension, e.g. my-module.module.yaml"),lastModified:un.coerce.date(),createdAt:un.coerce.date()});var nP=L.array(Bo.extend({id:L.string(),name:L.string(),description:L.string().optional(),labels:L.string().array().optional()})),oP=L.array(Bo.extend({id:L.string(),name:L.string(),description:L.string().optional(),content:Fi})),nY=L.object({tests:nP,modules:oP,labels:L.string().array()}),oY=Is.merge(Do),iY=L.object({schemaVersion:L.string(),stepLists:Mo}),aY=Do.partial().merge(ar.pick({id:!0})),iP={name:L.string().min(1).max(255).describe("1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID."),description:L.string().optional(),baseUrl:L.string().url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:L.string().optional().describe("For LLM: Do not include the variable unless the user explicitly asks for it and use the environment lookup tool to get the correct one before passing here."),browserType:L.nativeEnum(tn).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:ys.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:L.string().array().optional().describe("For LLM: Only use if explicitly called for by the user. Used to create the test in the correct folder.")},sY=L.object(iP),lY=Is.merge(L.object({relativeFilePath:L.string().describe("relative to project root")})),cY=L.object({name:L.string()}),uY=L.object({relativeFilePath:L.string()}),dY=L.object({name:L.string()}),pY=L.object({relativeFilePath:L.string()}),mY=L.object({name:L.string(),description:L.string(),enabled:L.boolean(),steps:L.lazy(()=>Je.array()),testFilePath:L.string().describe("relative to the project root"),folderPath:L.string().optional().describe("user selected folder path")}),gY=L.object({name:L.string(),description:L.string(),enabled:L.boolean()}).partial();var hY=L.array(ph),fY=L.object({defaultEnv:L.string().optional().describe("name of the default env, or undefined to unset")}),SY=L.object({configFilePath:L.string().describe("full path on disk")}),yY=L.string().array(),bY=L.object({message:L.string(),newRelativeTestPath:L.string().optional()}),od=L.object({name:L.string(),absolutePath:L.string(),relativePath:L.string(),pathSegments:L.array(L.string()),isDirectory:L.boolean(),size:L.number(),createdAt:L.coerce.date(),modifiedAt:L.coerce.date(),accessedAt:L.coerce.date()}),Rf=L.object({pathSegments:L.array(L.string())}),EY=L.object({absolutePath:L.string(),pathSegments:L.array(L.string()),contents:L.array(od)}),Cf=L.object({pathSegments:L.array(L.string())}),xf=L.object({pathSegments:L.array(L.string()),newPathSegments:L.array(L.string())}),_f=L.object({pathSegments:L.array(L.string()),recursive:L.boolean().optional()}),TY=L.object({success:L.boolean(),message:L.string(),pathSegments:L.array(L.string()).optional()});var Hs=["node_modules","dist","bin",".git",".npm",".next","out",".yarn","__pycache__","build",".env",".venv","venv","env","wheels"],Gs=Hs.map(r=>`**/${r}/**`),Mf=!0,Bn=!1;import vr from"chalk";import aP from"safe-stable-stringify";import sP from"truncate-json";import lP from"zod";var zo=aP.configure({deterministic:!1});function Pf(r){let e=zo(r),{jsonString:t}=sP(e,1e4);return t}var cP=["app","version","env","namespace","host"];function Se(r){let e=r.bindings()??{},t={};for(let n of Object.keys(e)){let o=e[n];!cP.includes(n)&&typeof o=="string"&&(t[n]=o)}return t}var Vs=lP.enum(["debug","info","warn","error"]);var ta={debug:20,info:30,warn:40,error:50},$s={20:"debug",30:"info",40:"warn",50:"error"},id=class r{minLogLevel;logBindings;constructor(e,t){typeof e=="string"?this.minLogLevel=ta[e]:this.minLogLevel=e,this.logBindings=t}logWithLevel(e,t,...n){try{this.logWithLevelHelper(e,t,...n)}catch(o){console.error(`Failed to log to console: ${o}`)}}logWithLevelHelper(e,t,...n){if(e<this.minLogLevel)return;let o;Array.isArray(n[0])?(o=n[0],n=n.slice(1)):typeof n[0]=="object"&&!(n[0]instanceof Error)&&Object.entries(n[0]).length&&(o={...n[0],...this.logBindings},n=n.slice(1));let i=[];if(i.push(...n),console.log(t(...i)),o&&!Array.isArray(o)){let a=Object.entries(o);for(let[s,c]of a){let l=c;c instanceof Error?(l=c.message,console.log(t(` ${s}:`,l)),console.log(t(" stack:",c.stack))):typeof c=="object"?(l=zo(c,void 0,2),l=l.split(`
9
+ `)}`}};function cf(r){return r instanceof Error?r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("waiting for locator"):!1}function Fu(r){return!(r instanceof Error)||r.message.includes("locator resolved to visible")?!1:!!(r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("body >")||r.message.includes("Element is not attached to the DOM"))}var xr=class extends Error{retryableWithAI;constructor(e,t,n={}){super(e,n),this.name="CacheAttributesDisqualifyElementError",this.retryableWithAI=t}},Ps=class extends xr{constructor(e,t={}){super(e,!0,t),this.name="BoundingBoxMovedError"}},Os=class extends xr{constructor(e,t={}){super(e,!1,t),this.name="ZeroOpacityError"}};function Bu(r){return r instanceof Error?r.message.includes("Could not find attribute data-momentic-id for object"):!1}function zu(r){return r instanceof Error?r.message.includes("Timeout")&&r.message.includes("exceeded")&&r.message.includes("waiting for locator")&&r.message.includes("data-momentic-id")&&!r.message.includes("locator resolved")&&!r.message.includes("waiting for element to be"):!1}function Hu(r){return r instanceof Error?r.message.includes("Protocol error (DOM.resolveNode): No node with given id found")||r.message.includes("Could not resolve backend node"):!1}var Yi=class extends Error{constructor(e,t={}){super(e,t),this.name="InsufficientCacheDataError"}};var H_={CLICK:"Click on an element on the page.",TYPE:"Type the specified text into an input on the page.",PRESS:"Press one or more keyboard keys.",KEY_DOWN:"Hold down one or more keyboard keys.",KEY_UP:"Release one or more keyboard keys.",SELECT_OPTION:"Choose an option from a native <select> component. Never use this command for non <select> elements. Instead, use a series of CLICK commands for those.",NAVIGATE:"Go to the specified fully qualified URL.",SCROLL_UP:"Scroll up.",SCROLL_DOWN:"Scroll down.",GO_BACK:"Go back to the previous page.",HOVER:"Hover over an element.",AI_ASSERTION:"Verify a statement about the current page, retrying until it is true. Only generate an assertion if the goal includes language like 'check that', 'verify that', etc..",WAIT:"Wait a fixed amount of seconds."},G_={...H_,JAVASCRIPT:"Execute JavaScript code in NODE or BROWSER environment.",ELEMENT_CHECK:"Perform a manual assertion on a specific element.",PAGE_CHECK:"Perform a manual assertion on the page.",NEW_TAB:"Open a new browser tab with the specified URL.",WAIT_FOR_URL:"Wait for the URL to match a pattern.",AI_EXTRACT:"Extract data from the page and optionally store it in an environment variable."};Pu.options.forEach(r=>{let e=r.shape.type.value;if(e!=="SUCCESS"&&!G_[e])throw new Error(`Command type ${e} is missing a description`)});var j_=M.object({type:M.literal("CLICK"),description:M.string().describe("Description of the element to click in the Current Page. Never click on <select> elements, see SELECT_OPTION."),doubleClick:M.boolean().or(M.null()),rightClick:M.boolean().or(M.null())}),V_=M.object({type:M.literal("TYPE"),description:M.string().describe("Description of the element to type into, which must be an <input>, <textarea>, or contenteditable element."),text:M.string().describe("The text to enter, truncated to 500 characters. If the PM provided text in the goals, use it exactly without modification."),pressEnter:M.boolean().or(M.null()).describe("Press enter after typing (useful for form submissions)."),clearContent:M.boolean().describe("Clear existing content before typing. Disable to append to the existing text.")}),W_=M.object({type:M.literal("GO_BACK")}),$_=M.object({type:M.literal("PRESS"),keys:M.array(M.string()).describe('The keys to press. Only use key names supported by the Playwright press method, such as "a", "ArrowLeft", "Meta", "Control", and "Enter". Multiple keys will be pressed together. Do not suggest platform-specific key combinations, such as CTRL+C.')}),q_=M.object({type:M.literal("SELECT_OPTION"),description:M.string().describe("Description of the <select> element to choose from. Only use this command to interact with native HTML <select> elements. You must use CLICK to select from any other HTML element, such as <input>, <div>, or custom elements."),option:M.discriminatedUnion("type",[M.object({type:M.literal("VALUE"),value:M.string()}),M.object({type:M.literal("LABEL"),label:M.string()}),M.object({type:M.literal("INDEX"),index:M.string().describe("Zero-based index of the option within the select.")})]).describe("Which option to select. Choose 1 of 3 strategies for selecting. By value is exactly matching the 'value' attribute. By label is exactly matching the 'label' attribute. By index is using the zero-based index of the option within the select.")}),K_=M.object({type:M.literal("NAVIGATE"),url:M.string().describe("The URL to navigate to. Only navigate to URLs relevant to the user goal.")}),Y_=M.object({type:M.literal("SCROLL"),y:M.number().describe("Scroll up or down by the specified pixels. Positive values scroll down.")}),X_=M.object({type:M.literal("WAIT"),timeout:M.number().describe("The number of seconds to wait.")}),J_=M.object({type:M.literal("AI_ASSERTION"),assertion:M.string().describe("The assertion to verify. This should be a statement verifiable based on the current page HTML or screenshot. Be specific enough that the assertion is not ambiguous or open to interpretation. Make sure the assertion aligns with what the user intends to verify."),timeout:M.number().describe("The max amount of seconds to wait for the assertion to be true. Respect user wishes but allow no more than 60. If unspecified, choose 5 for quick checks like form status, 10 for page loads, and 30 for actions that explicitly trigger a long time, like image generation.")}),Z_=M.object({type:M.literal("HOVER"),description:M.string().describe("Description of the element to hover over. Prefer elements that have visible bounding boxes according to the screenshot, element class attribute, or child contents.")}),Q_=M.object({type:M.literal("JAVASCRIPT"),code:M.string().describe("JavaScript code to execute. Defaults to NODE environment unless BROWSER is specified."),environment:M.union([M.literal("NODE"),M.literal("BROWSER")]).or(M.null()).describe("Execution environment. Default is NODE."),timeout:M.number().or(M.null()).describe("Max seconds for the code to complete. Max 60 seconds.")}),eM=M.object({type:M.literal("AI_EXTRACT"),goal:M.string().describe("Description of what data to extract from the page. Be specific about what you want to extract and where to find it."),schema:M.string().or(M.null()).describe("JSON schema defining the expected structure of the extracted data."),envKey:M.string().or(M.null()).describe("Environment variable name to store the extracted result in. If provided, the result will be stored and can be referenced later."),iframeUrl:M.string().or(M.null()).describe("URL or URL regex for the iframe to extract data from.")}),tM=M.object({type:M.literal("ELEMENT_CHECK"),description:M.string().describe("Description of the element to check."),assertionType:M.enum(["EXISTS","VISIBLE","CONTENT_CONTAINS","CONTENT_EQUALS"]).describe("The type of assertion. EXISTS checks if element exists, VISIBLE checks if visible, CONTENT_CONTAINS checks if text contains value, CONTENT_EQUALS checks if text equals value."),value:M.string().or(M.null()).describe("The value to check against (required for CONTENT assertions)."),negated:M.boolean().or(M.null()).describe("If true, asserts the opposite (e.g., does NOT exist)."),timeout:M.number().or(M.null()).describe("Max seconds to wait for the assertion to be true.")}),rM=M.object({type:M.literal("PAGE_CHECK"),value:M.string().describe("The text content to check for on the page."),negated:M.boolean().or(M.null()).describe("If true, checks that the content is NOT present."),timeout:M.number().or(M.null()).describe("Max seconds to wait for the assertion to be true.")}),nM=M.object({type:M.literal("NEW_TAB"),url:M.string().describe("The URL to open in the new tab.")}),oM=M.object({type:M.literal("WAIT_FOR_URL"),matcher:M.discriminatedUnion("type",[M.object({type:M.literal("SUBSTRING"),url:M.string()}),M.object({type:M.literal("GLOB"),glob:M.string()}),M.object({type:M.literal("REGEX"),regex:M.string()}),M.object({type:M.literal("DOMAIN"),domain:M.string()})]).describe("How to match the URL."),caseInsensitive:M.boolean().or(M.null()),negated:M.boolean().or(M.null()).describe("Wait for the URL to NOT match instead."),timeout:M.number().or(M.null()).describe("Max seconds to wait for the URL.")}),uf=M.object({type:M.literal("SUCCESS")}),Gu=M.object({type:M.literal("FAILURE")}),Xi=M.discriminatedUnion("type",[j_,V_,$_,q_,K_,Y_,X_,J_,Z_,W_]),P$=Un(Xi),Ls=M.discriminatedUnion("type",[...Xi.options,Q_,tM,rM,nM,oM,eM]),O$=Un(Ls),iM=M.discriminatedUnion("type",[...Xi.options,Gu]).describe("The command that will be executed next. This should naturally follow from your reasoning and be consistent with the goal."),L$=Un(iM),aM=M.discriminatedUnion("type",[...Xi.options,uf,Gu]),N$=Un(aM),k$=M.discriminatedUnion("type",[...Ls.options,uf,Gu]),sM=M.object({command:Xi,thoughts:M.string()}),D$=Un(sM),U$=M.object({command:M.unknown(),thoughts:M.string()});import{z as ju}from"zod";import{extendZodWithOpenApi as uM}from"zod-openapi";import{z as df}from"zod";import{extendZodWithOpenApi as lM}from"zod-openapi";import{z as Fn}from"zod";var Yt=Fn.object({index:Fn.number().optional().describe("global index within a test (in-order traversal)"),id:Fn.string(),skipped:Fn.boolean().optional(),envKey:Fn.string().optional().describe("key in the environment to save the result of this step to"),aiSuggested:Fn.boolean().optional(),retries:Fn.number().optional()});lM(df);var cM=Yt.extend({type:df.literal("PRESET_ACTION")}),Xt=cM.extend({command:No}).openapi({ref:"PresetAction"});uM(ju);var Bn=Yt.extend({type:ju.literal("AI_ACTION"),text:ju.string(),steps:Xt.array().optional()}).openapi({ref:"AIAction"});import{z as Ct}from"zod";import{z as Ns}from"zod";import{extendZodWithOpenApi as dM}from"zod-openapi";dM(Ns);var Uo=Yt.extend({type:Ns.literal("AI_ACTION_DYNAMIC"),text:Ns.string(),retries:Ns.number().optional()}).openapi({ref:"AIActionDynamic"});import{z as pf}from"zod";var Vu=Yt.extend({type:pf.literal("CONDITIONAL"),skipped:pf.boolean().optional()});import{z as de}from"zod";var pM=de.object({cacheKey:de.string(),cacheExpiryMs:de.number()}),Wu=Yt.extend({id:de.string().uuid().describe("ID of the module step itself. Used to 'namespace' step cache entries."),inputs:de.record(de.string()).optional(),cacheConfig:pM.optional()}),$r=Wu.extend({type:de.literal("MODULE"),moduleId:de.string().uuid()}),mM=de.union([$r.pick({type:!0,moduleId:!0}),de.record(de.unknown())]),hM=de.object({type:de.literal("URL_REGEX"),regex:de.string()}),gM=de.object({type:de.literal("PAGE_CHECK"),substring:de.string()}),$u=de.object({cacheInvalidation:de.discriminatedUnion("type",[gM,hM]).optional()}),Jt=de.object({moduleId:de.string().uuid(),name:de.string(),description:de.string().nullish(),enabled:de.boolean().nullish(),parameters:de.string().array().nullish(),defaultParameters:de.record(de.string(),de.string()).nullish(),parameterEnums:de.record(de.string(),de.string().array()).nullish(),defaultCacheKey:de.string().nullish(),defaultCacheTtl:de.number().nullish(),defaultCacheAllInvocations:de.boolean().nullish(),autoAuth:de.boolean().nullish(),advanced:$u.nullish()});import{z as Zt}from"zod";var mf=(n=>(n.ALWAYS="ALWAYS",n.ON_FAILURE="ON_FAILURE",n.ON_ACTION_FAILURE="ON_ACTION_FAILURE",n))(mf||{});var fM=Zt.discriminatedUnion("type",[Zt.object({type:Zt.literal("NAVIGATE_URL"),url:Zt.string().url()}),Zt.object({type:Zt.literal("GO_TO_SECTION_START")})]),SM=Zt.object({trigger:Zt.nativeEnum(mf).optional(),attempts:Zt.number().int().optional(),restartBehavior:fM}),Ji=Yt.extend({type:Zt.literal("SECTION"),description:Zt.string().describe("user provided goal of what the section should accomplish"),plan:Zt.string().array().optional(),autohealingConfig:SM.optional()});var hf=Jt.merge(Wu).extend({type:Ct.literal("RESOLVED_MODULE"),steps:Ct.lazy(()=>nt.array())}),Zi=Jt.extend({steps:Ct.lazy(()=>nt.array())}),qu=Ji.extend({steps:Ct.lazy(()=>xt.array())}),yM=Ji.extend({steps:Ct.lazy(()=>nt.array())}),Fo=Vu.extend({blocks:Ct.object({assertion:Ct.lazy(()=>Xt),steps:Ct.lazy(()=>xt.array())}).array(),elseSteps:Ct.lazy(()=>xt.array().optional())}),bM=Vu.extend({blocks:Ct.object({assertion:Ct.lazy(()=>Xt),steps:Ct.lazy(()=>nt.array())}).array(),elseSteps:Ct.lazy(()=>nt.array().optional())}),xt=Ct.discriminatedUnion("type",[Xt,Bn,Uo,$r,Fo,qu]),nt=Ct.discriminatedUnion("type",[Xt,Bn,Uo,hf,bM,yM]);import{z as Qt}from"zod";var EM=Qt.object({steps:xt.array(),beforeSteps:xt.array().nullish(),afterSteps:xt.array().nullish()}),zn=Qt.object({steps:nt.array(),beforeSteps:nt.array().nullish(),afterSteps:nt.array().nullish()}),Hn=Qt.object({steps:Qt.record(Qt.string(),Qt.unknown()).array(),beforeSteps:Qt.record(Qt.string(),Qt.unknown()).array().nullish(),afterSteps:Qt.record(Qt.string(),Qt.unknown()).array().nullish()});var Gn="1.0.21",Ku="0.0.1";import{z as St}from"zod";import{z as jn}from"zod";var TM=/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/,un=r=>{let e=r.trim().toLowerCase().replace(/[^a-z0-9]/g,"-");for(;e.includes("--");)e=e.replaceAll("--","-");return e.startsWith("-")&&(e=e.slice(1)),e.endsWith("-")&&(e=e.slice(0,e.length-1)),e};var Bo=jn.string().min(1).max(255).superRefine((r,e)=>{try{Yu(r)}catch(t){return e.addIssue({code:jn.ZodIssueCode.custom,message:t.message,fatal:!0}),jn.NEVER}});function Yu(r){if(r=r.toLowerCase().trim(),r.length===0||r.length>255)throw new Error("Name must be between 1 and 255 characters long");if(/[<>:"/\\|?*]/.test(r))throw new Error('Name contains one of the following invalid characters: <>:"/\\|?*');if(r.endsWith("-")||r.startsWith("-"))throw new Error("Name cannot start or end with a dash.");if(r.includes("\0"))throw new Error("Name cannot contain null characters");if(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i.test(r))throw new Error(`"${r}" is a reserved name on Windows and cannot be used as a filename.`);if(/^\.+$/.test(r)||/^\s|\s$/.test(r))throw new Error("Name cannot start or end with a space or dot.");if(r.endsWith(".yaml"))throw new Error('Name cannot end with ".yaml".');if(r==="none")throw new Error("Name cannot be 'none'.");if(r.match(TM))throw new Error("Name cannot be a UUID. Please choose a different name.")}var ks=jn.preprocess(r=>r===null?"":r,jn.union([jn.string().url(),jn.literal("")])).optional();var vM=["AI_EXTRACT","JAVASCRIPT"],AM=St.object({id:St.string().optional().describe("Recommended way of selecting an entity. The id of the entity to resolve."),name:Bo.optional().describe("1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID."),path:St.string().optional().describe("The path of the entity to resolve.")}).describe("A selector for a single entity. Exactly one of id, name, or path must be provided. Id is recommended.").refine(r=>[r.id,r.name,r.path].filter(Boolean).length===1,"Exactly one of id, name, or path must be provided."),wM=St.object({selector:AM,inputs:St.record(St.string()).or(St.null())}),Zq=St.object({type:St.literal("PRESET_ACTION"),action:Ls,envKey:St.string().or(St.null()).describe(`key in the environment to save the result of this step to. Only use this for ${vM.join(" or ")} steps.`)}),Qq=St.object({type:St.literal("MODULE"),module:wM}),e2=St.object({type:St.literal("AI_ACTION_DYNAMIC"),text:St.string().describe("The goal description for the AI action. Supports handlebars templates like {{env.VARIABLE_NAME}}.")});var gf=L.object({phrase:L.string()}),Xu=L.object({thoughts:L.string().optional(),result:L.union([L.literal("NOT_FOUND"),L.string(),L.number(),L.array(L.unknown()),L.record(L.unknown(),L.unknown()),L.unknown()])}),k2=L.object({text:L.string()}),ff=L.object({attributes:L.array(L.string()).optional(),text:L.boolean().optional(),boundingBox:L.boolean().optional()}),RM=L.object({id:L.number().int(),requirements:ff}),CM=RM.array(),Sf=L.object({thoughts:L.string(),review:L.string().optional(),id:L.number().int(),updatedMemory:Eu.optional(),requirements:ff.optional(),additionalElements:CM.optional()});var Ju=(h=>(h.NO_DESCRIPTION_PROVIDED="NO_DESCRIPTION_PROVIDED",h.FEW_WORDS="FEW_WORDS",h.STYLE_TAG="STYLE_TAG",h.TYPE_IN_DESCRIPTION="TYPE_IN_DESCRIPTION",h.HARDCODED_ATTRIBUTE="HARDCODED_ATTRIBUTE",h.NONE="NONE",h.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",h.AMBIGUOUS_ASSERTION="AMBIGUOUS_ASSERTION",h.PREFER_PAGE_CHECK="PREFER_PAGE_CHECK",h.PREFER_ASSERTION="PREFER_ASSERTION",h.HTML_ELEMENTS="HTML_ELEMENTS",h.MULTIPLE_ELEMENTS_DESCRIPTION="MULTIPLE_ELEMENTS_DESCRIPTION",h.NEEDS_DATE_VARIABLE="NEEDS_DATE_VARIABLE",h))(Ju||{}),yf=(o=>(o.NONE="NONE",o.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",o.COPILOT_MISUSE="COPILOT_MISUSE",o.IRRELEVANT_MESSAGE="IRRELEVANT_MESSAGE",o))(yf||{});var bf=L.object({thoughts:L.string(),category:L.nativeEnum(Ju)}),Ef=L.object({thoughts:L.string(),category:L.nativeEnum(yf)}),xM=L.discriminatedUnion("op",[L.object({op:L.literal("replace"),path:L.string(),value:L.string()}),L.object({op:L.literal("add"),path:L.string(),value:L.string()}),L.object({op:L.literal("remove"),path:L.string()})]),D2=L.object({thoughts:L.string(),patches:xM.array()}),_M=[L.literal("add"),L.literal("replace"),L.literal("remove")],MM=L.object({op:L.union(_M),path:L.string(),value:nt.optional()}),Tf=L.object({patches:MM.array(),thoughts:L.string()}),vf=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))(vf||{}),Af=L.object({thoughts:L.string(),scenario:L.nativeEnum(vf),instructions:L.string().nullish()}),wf=L.object({reasoning:L.string(),scenario:L.string(),patch:L.null().optional()}),U2=L.object({thoughts:L.string(),evaluation:L.number().min(0).max(10)}),F2=L.object({observations:L.string(),reasoning:L.string(),command:ws});var Zu=L.object({summary:L.string(),reasoning:L.string(),evaluation:L.discriminatedUnion("type",[L.object({type:L.literal("DONE")}),L.object({type:L.literal("RIGHT_TRACK")}),L.object({type:L.literal("WRONG_TRACK"),feedback:L.string()}),L.object({type:L.literal("IMPOSSIBLE")})])}),IM=L.object({startId:L.number().int(),endId:L.number().int()}),Qu=(n=>(n.SIMPLE_CONTENT_BASED_LOCATOR="SIMPLE_CONTENT_BASED_LOCATOR",n.SIMPLE_CONTENT_BASED_ASSERTION="SIMPLE_CONTENT_BASED_ASSERTION",n.OTHER="OTHER",n))(Qu||{}),Rf=L.object({categoryThoughts:L.string(),category:L.nativeEnum(Qu),relevantSections:IM.array()});import{z as O}from"zod";import*as oe from"zod";var V2=oe.object({thoughts:oe.string().optional().describe("only provided if a description was provided"),target:on.optional().describe("only provided if a description was provided"),pageState:oe.string().optional().describe("serialized a11y tree, only provided if a description was provided"),options:oe.object({label:oe.string(),value:oe.string()}).array().optional().describe("list of options, provided for <select> elements only"),screenshot:oe.object({data:oe.string(),height:oe.number().int(),width:oe.number().int()}).optional().describe("only provided if returnScreenshot is true")}),Cf=oe.union([oe.literal("ELEMENT_CHECK"),oe.literal("NEGATED_CHECK"),oe.literal("NEGATED_ELEMENT_VISIBLE_CHECK"),oe.literal("SELECT_OPTION"),oe.literal("TYPE")]);function Qi(r){if(!("useSelector"in r&&r.useSelector)){if(r.type==="SELECT_OPTION")return"SELECT_OPTION";if(r.type==="TYPE")return"TYPE";if(r.type==="ELEMENT_CHECK"&&r.assertion.type==="ELEMENT_EXISTENCE"&&r.assertion.condition==="EXISTS"&&r.assertion.negated)return"NEGATED_CHECK";if(r.type==="ELEMENT_CHECK"&&r.assertion.type==="ELEMENT_EXISTENCE"&&r.assertion.condition==="VISIBLE"&&r.assertion.negated)return"NEGATED_ELEMENT_VISIBLE_CHECK";if(r.type==="ELEMENT_CHECK")return"ELEMENT_CHECK"}}var ea=(a=>(a.USER_SELECTOR="USER_SELECTOR",a.CSS_SELECTOR="CSS_SELECTOR",a.HYBRID_SELECTOR="HYBRID_SELECTOR",a.HTML_DISTANCE="HTML_DISTANCE",a.TEMPLATE_MATCHING="TEMPLATE_MATCHING",a.AUTO_FRAME="AUTO_FRAME",a))(ea||{}),zo=oe.object({matched:oe.boolean(),reason:oe.string().optional().describe("Human understandable description"),logs:oe.string().array().optional().describe("Logs for debugging")}),PM=zo.extend({type:oe.literal("USER_SELECTOR")}),OM=zo.extend({type:oe.literal("CSS_SELECTOR"),selectors:oe.string().array()}),LM=zo.extend({type:oe.literal("HYBRID_SELECTOR")}),NM=zo.extend({type:oe.literal("HTML_DISTANCE"),distance:oe.number().optional(),closestElement:oe.string().optional(),savedElement:oe.string().optional()}),kM=zo.extend({type:oe.literal("TEMPLATE_MATCHING"),elementImageUrl:oe.string().url()}),DM=zo.extend({type:oe.literal("AUTO_FRAME"),logs:oe.string().array().optional()}),xf=oe.discriminatedUnion("type",[PM,OM,LM,NM,kM,DM]);import{z as oa}from"zod";import{z as $M}from"zod";import*as $ from"zod";import{extendZodWithOpenApi as FM}from"zod-openapi";import{cloneDeep as tK}from"lodash-es";import nK from"truncate-json";import*as $n from"zod";import{extendZodWithOpenApi as UM}from"zod-openapi";import{z as yt}from"zod";import{z as ye}from"zod";var ed=ye.object({autoFollowNewTabs:ye.boolean().optional().describe("Deprecated: Auto-follow new tabs that are opened."),showZeroOpacityElements:ye.union([ye.boolean(),ye.literal("inputs-only")]).optional(),ignoreHrefForCaching:ye.boolean().optional(),disableSecondaryCacheResolution:ye.boolean().optional(),hybridSelectorMode:ye.enum(["off","test","prefer"]).optional(),globalLocatorRedirect:ye.boolean().optional(),visualActions:ye.boolean().optional(),autoExpandIframes:ye.boolean().optional(),disableHtmlSnapshots:ye.boolean().optional(),importantAttributes:ye.string().array().optional(),importantClasses:ye.string().array().optional(),importantStyles:ye.string().array().optional()});var _f=1e4,Mf=6e4,Vn=ed.extend({pageLoadTimeoutMs:ye.number().optional().refine(r=>r===void 0||r<=Mf&&r>=-1,{message:`Page load timeout must be between 0 and ${Mf/1e3} seconds`}).describe("global page load timeout default for all tests in ms, can still be overridden by individual tests"),smartWaitingTimeoutMs:ye.number().optional().refine(r=>r===void 0||r<=_f&&r>=-1,{message:`Smart waiting timeout must be between 0 and ${_f/1e3} seconds`}),localChromeExtensionPaths:ye.string().array().optional(),extraHeaders:ye.record(ye.string(),ye.string()).optional().describe("HTTP headers to be sent on every request"),initialLocalStorage:ye.record(ye.string(),ye.record(ye.string(),ye.string())).optional().describe("Initial local storage key-value pairs to set per domain on browser startup"),userAgent:ye.string().optional(),disableGpu:ye.boolean().optional(),bustCacheOnBoundingBoxChange:ye.boolean().optional().describe("Bust the cache if no elements are matched that have the same bounding box and location as the original element. This will improve accuracy on sites that use many same components, at the expense of stability and speed."),allowPartialAccessibilityTree:ye.boolean().optional().describe("Allow fetching the partial accessibility tree if fetching the full tree takes too long."),ignoreHttpsErrors:ye.boolean().optional().describe("Ignore HTTPS errors, such as self-signed certificates and certificate errors. This can be useful for testing sites that use self-signed certificates or certificate errors.")});var td="BASE_URL";var Wn="ENV_NAME",Ho="TEST_NAME",X2={[td]:"https://www.google.com"},If=yt.string().describe("Name of the fixture (must be available locally in the fixtures directory)."),Pf=yt.object({name:yt.string(),variables:yt.record(yt.string().describe("variable name"),yt.string().describe("variable value"))}),Of=yt.object({name:yt.string(),variables:yt.record(yt.string().describe("variable name"),yt.unknown().describe("variable value")),browser:Vn.optional()});var J2=yt.object({name:yt.string(),variables:yt.record(yt.string().describe("variable name"),yt.unknown().describe("variable value"))});UM($n);var rd=$n.object({env:$n.record($n.unknown())}).openapi({ref:"TestContextSnapshot"});var ot=(i=>(i.SUCCESS="SUCCESS",i.FAILED="FAILED",i.RUNNING="RUNNING",i.IDLE="IDLE",i.CANCELLED="CANCELLED",i))(ot||{}),nd=(n=>(n.SUCCESS="SUCCESS",n.FAILED="FAILED",n.CANCELLED="CANCELLED",n))(nd||{});FM($);var od=$.object({beforeUrl:$.string().optional(),afterUrl:$.string().optional(),message:$.string().optional(),beforeSnapshot:$.string().optional(),afterSnapshot:$.string().optional(),startedAt:$.coerce.date(),finishedAt:$.coerce.date()}),BM=od.extend({viewport:$.object({height:$.number(),width:$.number()}).nullish(),status:$.nativeEnum(nd),message:$.string().optional(),elementInteracted:$.string().optional()}),qn=od.extend({status:$.nativeEnum(ot),message:$.string().optional(),data:$.unknown().optional(),beforeTestContext:rd.optional(),afterTestContext:rd.optional(),failureReason:$.nativeEnum(Re).optional(),details:$.unknown().describe("Parse using StepExecutionLogSchema.array() to get type safety. We don't explicitly type it because it's non-critical information.")}).openapi({ref:"StepResultMetadata"}),Lf=(t=>(t.NOT_ELIGIBLE="NOT_ELIGIBLE",t.ATTEMPTED="ATTEMPTED",t))(Lf||{}),Ds=qn.merge(Xt).extend({results:BM.array().describe("Command that was executed. Array is just for consistency with other result types. There should only ever be one item."),previousAttempts:$.lazy(()=>lt.array()).optional(),failureRecoveryStatus:$.object({type:$.nativeEnum(Lf),message:$.string()}).optional()}),zM=qn.merge(Bn).extend({results:$.lazy(()=>Ds.array()),previousAttempts:$.lazy(()=>lt.array()).optional()}),HM=qn.merge(Uo).extend({results:$.lazy(()=>Ds.array()),previousAttempts:$.lazy(()=>lt.array()).optional()}),GM=qn.merge($r).extend({moduleName:$.string().optional(),results:$.lazy(()=>lt.array()),previousAttempts:$.lazy(()=>lt.array()).optional()}),jM=qn.merge(Fo).extend({assertion:Ds.optional(),results:$.lazy(()=>lt.array()).describe("results for the block actually executed"),previousAttempts:$.lazy(()=>lt.array()).optional()}),VM=qn.merge(Ji).extend({results:$.lazy(()=>lt.array()),healingAttempts:$.lazy(()=>lt.array().array()).optional(),previousAttempts:$.lazy(()=>lt.array()).optional()}),lt=$.discriminatedUnion("type",[zM,HM,Ds,GM,jM,VM]),bK=qn.pick({startedAt:!0,finishedAt:!0,status:!0,message:!0,data:!0}),WM=od.extend({index:$.number().optional(),description:$.string(),pageState:$.string().optional(),elementInteracted:$.string().optional(),startedAt:$.coerce.date().or($.string()).optional().catch(void 0),finishedAt:$.coerce.date().or($.string()).optional().catch(void 0)}),Us=WM.extend({beforeScreenshot:$.string().optional(),afterScreenshot:$.string().optional()});var id=$M.object({results:lt.array().describe("main results"),beforeResults:lt.array().optional(),afterResults:lt.array().optional()}),ta=id.partial();import{z as H}from"zod";import{extendZodWithOpenApi as QM}from"zod-openapi";var Go=(t=>(t.WEB="WEB",t.ANDROID="ANDROID",t))(Go||{});import{isValidCron as qM}from"cron-validator";import{z as ie}from"zod";import{z as ad}from"zod";var dn=(n=>(n.CHROMIUM="Chromium",n.GOOGLE_CHROME="Google Chrome",n.CHROME_FOR_TESTING="Chrome for Testing",n))(dn||{});var Fs=ad.object({width:ad.number().min(200).max(1e4),height:ad.number().min(200).max(1e4)}),Nf={"Desktop Large":{width:1920,height:1080},"Desktop Small":{width:1280,height:800},iPad:{width:768,height:1024},"Pixel 8":{width:448,height:998},"iPhone 15":{width:393,height:852}},CK=Object.keys(Nf);var pn=Nf["Desktop Large"],kf="en-us",Df="America/Los_Angeles";var Uf={latitude:37.7749,longitude:-122.4194};var Ff=["Africa/Abidjan","Africa/Accra","Africa/Algiers","Africa/Bissau","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/El_Aaiun","Africa/Johannesburg","Africa/Juba","Africa/Khartoum","Africa/Lagos","Africa/Maputo","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Sao_Tome","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Araguaina","America/Asuncion","America/Atikokan","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Cayenne","America/Chicago","America/Chihuahua","America/Costa_Rica","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Fort_Nelson","America/Fortaleza","America/Glace_Bay","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Inuvik","America/Iqaluit","America/Jamaica","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/La_Paz","America/Lima","America/Los_Angeles","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Chita","Asia/Choibalsan","Asia/Colombo","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kathmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Riyadh","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ulaanbaatar","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faroe","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/Stanley","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/Perth","Australia/Sydney","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Wake","Pacific/Wallis"];var Bf=2e3,KM=Vn.extend({browserType:ie.nativeEnum(dn).optional(),slowMoMs:ie.number().optional().refine(r=>r===void 0||r<=Bf&&r>=-1,{message:`Slow motion must be between 0 and ${Bf} milliseconds`}),basicAuthorization:ie.object({username:ie.string().optional(),password:ie.string().optional()}).optional(),geolocation:ie.object({latitude:ie.coerce.number().refine(r=>r>=-90&&r<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:ie.coerce.number().refine(r=>r>=-180&&r<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),disableJavaScript:ie.boolean().optional(),locale:ie.string().optional(),timezone:ie.enum(Ff).optional(),colorScheme:ie.enum(["light","dark"]).optional()});var sd=ie.object({useMemory:ie.boolean().optional(),failureRecovery:ie.boolean().optional().describe("undefined means inherit org settings")}),YM=sd.extend({disableAICaching:ie.boolean().optional(),failureRecoveryInstructions:ie.string().optional()}),XM=ie.object({viewport:Fs.optional()}),ra=XM.merge(YM).merge(KM),jo=ie.object({cron:ie.string().refine(r=>qM(r),{message:"Invalid cron expression."}).default("0 0 */1 * *"),enabled:ie.boolean().default(!1),env:ie.string().optional(),timeZone:ie.string().default("America/Los_Angeles"),jobKey:ie.string().optional()}),Vo=ie.object({onSuccess:ie.boolean().default(!1),failureMessage:ie.string().optional(),onFailure:ie.boolean().default(!0),successMessage:ie.string().optional()}),JM=ie.object({name:ie.string(),required:ie.boolean().optional(),defaultValue:ie.string().describe("this is not optional because we need a value when the editor is first loaded")}),Bs=JM.array(),ZM=ie.object({name:ie.string(),value:ie.string()}),zf=ZM.array(),zs=ie.object({name:ie.string(),default:ie.boolean().optional(),fixtures:If.array().optional()});QM(H);var er={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},Ae=(s=>(s.PENDING="PENDING",s.RUNNING="RUNNING",s.PASSED="PASSED",s.FAILED="FAILED",s.CANCELLED="CANCELLED",s.RETRYING="RETRYING",s.WAITING_FOR_USER="WAITING_FOR_USER",s))(Ae||{}),Hs=(t=>(t.BEFORE_ALL="BEFORE_ALL",t.AFTER_ALL="AFTER_ALL",t))(Hs||{});var Ye=H.string().pipe(H.coerce.date()).or(H.date()),na=H.object({id:H.string(),runKey:H.string(),organizationId:H.string(),executionType:H.nativeEnum(Go).optional().default("WEB"),createdAt:Ye,createdBy:H.string(),flake:H.boolean().nullish(),scheduledAt:Ye.or(H.null()),startedAt:Ye.or(H.null()),updatedAt:Ye.nullish(),finishedAt:Ye.or(H.null()),resolvedBaseUrl:H.string().nullish(),environmentName:H.string().nullish(),gitBranchName:H.string().nullish(),githubRepository:H.string().nullish(),gitlabProjectPath:H.string().nullish(),labels:H.array(H.string()).optional(),gitOriginUrl:H.string().nullish(),gitCommitSha:H.string().nullish(),gitCommitShaShort:H.string().nullish(),gitCommitAuthorName:H.string().nullish(),cliVersion:H.string().nullish(),section:H.nativeEnum(Hs).nullish(),status:H.nativeEnum(Ae),trigger:H.nativeEnum(er),attempts:H.number(),runAttempts:H.array(H.object({id:H.string(),status:H.nativeEnum(Ae),startedAt:Ye.or(H.null()),finishedAt:Ye.or(H.null())})).optional(),videos:H.array(H.string()).optional(),failureReason:H.nativeEnum(Re).nullish(),failureDetails:Is.nullish(),failureRecoveryDetails:H.record(H.string(),H.unknown()).nullish(),pipelineId:H.string().nullish(),resolvedInputs:H.record(H.string(),H.string()).nullish(),quarantined:H.boolean().nullish().default(!1),quarantinedReason:H.string().nullish(),localTestId:H.string().nullish(),testId:H.string().nullish(),testName:H.string().nullish(),description:H.string().nullish(),test:H.object({name:H.string(),id:H.string()}).nullish().default(null),suiteId:H.string().nullish()}).openapi({ref:"RunMetadata"}),eI={id:!0,status:!0,testName:!0,localTestId:!0,testId:!0,test:{select:{name:!0,id:!0}},finishedAt:!0,failureReason:!0,failureDetails:!0},Gs=na.pick({...eI,test:!0}),Hf=na.omit({failureReason:!0,failureDetails:!0,test:!0}),ld=na.extend({stepsSnapshot:H.array(H.record(H.unknown())).nullish(),resolvedInputs:H.record(H.string(),H.string()).nullish(),test:H.object({name:H.string(),id:H.string(),description:H.string().nullish(),baseUrl:H.string().nullish(),advanced:ra.nullish()}).nullish()}).merge(id);var tI=oa.object({id:oa.string().uuid(),startedAt:Ye.or(oa.null()),finishedAt:Ye.or(oa.null()),status:oa.nativeEnum(Ae)}).merge(ta),KK=tI.array();import{z as Xe}from"zod";var rI=Xe.object({id:Xe.string(),status:Xe.nativeEnum(Ae),trigger:Xe.nativeEnum(er),createdAt:Ye,startedAt:Ye.nullish(),finishedAt:Ye.nullish(),gitCommitSha:Xe.string().nullish(),gitCommitShaShort:Xe.string().nullish(),gitCommitTimestamp:Ye.nullish(),gitBranchName:Xe.string().nullish(),gitOriginUrl:Xe.string().nullish(),gitCommitMessage:Xe.string().nullish(),gitCommitAuthorName:Xe.string().nullish(),githubRepository:Xe.string().nullish(),gitlabProjectPath:Xe.string().nullish(),pipelineId:Xe.string().nullish(),cliVersion:Xe.string().nullish(),labels:Xe.string().array().optional(),suite:Xe.object({id:Xe.string(),name:Xe.string()}).nullish(),runs:Xe.object({status:Xe.nativeEnum(Ae)}).array()}).openapi({ref:"RunGroup"}),Gf=rI.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0}).extend({runs:Gs.array()});import{z as ct}from"zod";var nI=ct.object({type:ct.literal("TARGETING"),name:ct.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:xf.array(),pageState:ct.string().optional(),targetSource:ct.nativeEnum(nn).optional(),targetUpdateTime:ct.string().optional()}),oI=ct.object({type:ct.literal("AI_LOCATION"),matched:ct.boolean(),pageState:ct.string().optional(),ragUsed:ct.boolean().optional(),thoughts:ct.string().optional()}),iI=ct.object({type:ct.literal("ASSERTION"),relevantElementsSerialized:ct.string().array().optional(),pageState:ct.string().optional(),ragUsed:ct.boolean().optional()}),aI=ct.discriminatedUnion("type",[nI,oI,iI]);import{z as Ve}from"zod";var sI=Ve.object({id:Ve.string(),name:Ve.string()}),lY=sI.merge(Ve.object({createdAt:Ye,createdBy:Ve.string(),schedule:jo,notification:Vo,environment:Ve.object({name:Ve.string()}).nullish(),beforeTests:Ve.object({id:Ve.string()}).array().nullish(),afterTests:Ve.object({id:Ve.string()}).array().nullish()})),jf=Ve.object({id:Ve.string().uuid(),orgId:Ve.string(),createdAt:Ye,startedAt:Ye.or(Ve.null()),finishedAt:Ye.or(Ve.null()),status:Ve.nativeEnum(Ae),trigger:Ve.nativeEnum(er),suite:Ve.object({id:Ve.string(),name:Ve.string()}).nullish(),runs:na.array()}),cY=jf.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0}),Vf=jf.extend({runs:Gs.array()});import{z as tr}from"zod";import{cloneDeep as pY}from"lodash-es";import{z as be}from"zod";var yY=be.object({thoughts:be.string(),subGoals:be.object({instruction:be.string()}).array()}),bY=be.object({thoughts:be.string(),newPlanMarkdown:be.string()}),EY=be.object({thoughts:be.string(),correct:be.boolean(),failedActionIndex:be.number().optional()}),lI=be.object({type:be.literal("PLANNING"),beforePlan:be.string(),goalDecision:be.string(),thoughts:be.string()}),cI=be.object({type:be.literal("RUNNING"),stepDisplayName:be.string(),status:be.nativeEnum(ot),results:lt.array()}),uI=be.object({type:be.literal("REVISING"),beforePlan:be.string(),afterPlan:be.string(),errString:be.string(),diffs:be.string(),thoughts:be.string()}),dI=be.object({type:be.literal("SYSTEM"),message:be.string()}),pI=be.discriminatedUnion("type",[lI,cI,uI,dI]),Wf=pI.array();var RY=tr.object({id:tr.string(),scheduledAt:tr.coerce.date().nullable(),startedAt:tr.coerce.date().nullable(),finishedAt:tr.coerce.date().nullable(),status:tr.nativeEnum(Ae),history:Wf.nullable(),testPlan:tr.object({id:tr.string(),name:tr.string()}).nullable(),test:tr.object({id:tr.string(),name:tr.string()}).nullable()});import{z as _t}from"zod";var cd=_t.object({content:_t.string(),ids:_t.string().array(),tokenLength:_t.number()}),mI=_t.object({chunks:cd.array()}),GY=_t.object({ids:_t.string().array(),score:_t.number(),tokenLength:_t.number()}),jY=mI.extend({description:_t.string().describe("Input to pass to RAG engine"),tokenLimit:_t.number()}),$f=_t.object({ids:_t.number().array()}),qf=_t.object({indices:_t.number().array()});var bt=O.object({disableCache:O.boolean().optional(),useMemory:O.boolean().optional(),loggerTags:O.record(O.string(),O.string()).optional(),langfuseSessionId:O.string().optional(),agentConfigVersion:O.string().optional()}),JY=bt.extend({chunks:cd.array(),description:O.string().describe("Input to pass to AI"),type:O.union([O.literal("locator"),O.literal("assertion"),O.literal("ai-action")]),softTokenLimit:O.number(),hardTokenLimit:O.number(),callId:O.string().optional()}),hI=O.object({screenshotBase64AfterCommand:O.string(),urlAfterCommand:O.string(),serializedCommand:O.string(),elementInteracted:O.string().optional(),thoughts:O.string().optional()}),Kf=O.object({goal:O.string(),browserState:O.string(),screenshot:O.string(),source:Cf.optional().catch(void 0),memory:O.discriminatedUnion("type",[ys,O.object({type:O.literal("RESOLVED_TRACES"),traces:O.unknown().array()})]).optional()}),Yf=O.object({target:O.string().or(O.number()),browserState:O.string().optional(),screenshot:O.string().optional(),boundingBox:O.object({x:O.number(),y:O.number(),height:O.number(),width:O.number()}).optional()}),Xf=O.object({goal:O.string(),browserState:O.string(),screenshot:O.string().optional(),returnSchema:O.string().optional()}),gI=O.literal("NEGATED_CHECK"),Jf=O.object({goal:O.string(),browserState:O.string(),screenshot:O.string(),url:O.string(),contextChoice:_u.optional(),memory:O.discriminatedUnion("type",[Au,O.object({type:O.literal("RESOLVED_TRACES"),traces:O.unknown().array()})]).optional(),source:gI.optional()}),Zf=O.object({command:No}),Qf=O.object({message:O.string()}),ud=O.object({goal:O.string(),browserState:O.string(),startingScreenshot:O.string().optional(),screenshot:O.string(),url:O.string(),history:hI.array(),actionHint:O.string().optional(),lastError:O.string().optional()}),eS=O.object({results:Us.array(),errorMessage:O.string(),errorStack:O.string().optional()}),tS=O.object({results:Us.array(),goal:O.string(),errorMessage:O.string()}),rS=O.object({failedResults:Us.array(),nextStepsSerialized:O.string().array(),currentUrl:O.string(),currentPageState:O.string(),currentScreenshot:O.string(),customInstructions:O.string().optional(),testDescription:O.string().optional()}),ZY=O.object({description:O.string(),type:O.union([O.literal("locator"),O.literal("assertion"),O.literal("ai-action")]),excerpt:O.string()}),nS=O.object({type:O.string(),browserContext:O.string(),currentStep:O.string(),screenshot:O.string()});import{z as ia}from"zod";var t5=ia.object({goal:ia.string()}),oS=ia.object({keywords:ia.array(ia.string())});import{z as dd}from"zod";var js=(o=>(o.LOCATOR="locator",o.ASSERTION="assertion",o.VISUAL_ASSERTION="visual-assertion",o.TEXT_EXTRACTION="text-extraction",o))(js||{}),o5=dd.nativeEnum(js),fI=dd.enum(["v1","v2"]),i5=fI.or(dd.string().describe("for people with special configurations"));import{z as Ue}from"zod";var iS=Ue.object({attributesRequired:Ue.array(Ue.string()).optional(),textRequired:Ue.boolean().optional(),boundsRequired:Ue.boolean().optional()}),aS=Ue.object({id:Ue.number(),thoughts:Ue.string(),inWebview:Ue.boolean().optional(),requirements:iS.optional(),additionalElements:Ue.object({id:Ue.number(),requirements:iS}).array().optional()}),sS=Ue.object({description:Ue.string(),screenXml:Ue.string(),screenshot:Ue.string()}),lS=Ue.object({assertion:Ue.string(),screenXml:Ue.string(),screenshot:Ue.string()}),cS=Ue.object({thoughts:Ue.string(),result:Ue.boolean(),relevantElements:Ue.array(Ue.number()).optional()});import{z as Kn}from"zod";var uS=Kn.object({id:Kn.string().uuid(),skipped:Kn.boolean().optional(),envKey:Kn.string().optional().describe("key in the environment to save the result of this step to")}),pd=uS.merge(_o).extend({type:Kn.literal("REQUEST")}),md=uS.merge(Es).extend({type:Kn.literal("JAVASCRIPT")}),hd=Kn.discriminatedUnion("type",[md,pd]);import{z as rr}from"zod";var dS=rr.object({id:rr.string(),name:Bo,description:rr.string().optional().nullish(),baseUrl:ks.nullish(),schemaVersion:rr.string(),advanced:rr.unknown().optional(),retries:rr.number(),envs:rr.array(zs).nullish(),parameters:Bs.nullish()}),SI=rr.object({createdAt:rr.coerce.date(),updatedAt:rr.coerce.date(),schedule:jo.nullish(),notification:Vo.nullish(),createdBy:rr.string(),organizationId:rr.string()}),yI=dS.merge(SI),M5=yI.extend({steps:hd.array()}),I5=dS.extend({steps:hd.array()});import{z as Lt}from"zod";var pS=Lt.object({startedAt:Lt.coerce.date(),finishedAt:Lt.coerce.date(),status:Lt.nativeEnum(ot),message:Lt.string().optional(),data:Lt.unknown().optional()}),bI=pS.merge(md).extend({type:Lt.literal("JAVASCRIPT")}),EI=pS.merge(pd).extend({type:Lt.literal("REQUEST")}),TI=Lt.discriminatedUnion("type",[bI,EI]),mS=Lt.object({startedAt:Lt.coerce.date(),finishedAt:Lt.coerce.date().nullish(),status:Lt.nativeEnum(Ae),results:TI.array(),failureReason:Lt.string().nullish(),failureDetails:Is.nullish()});import{z as Nt}from"zod";var vI=Nt.object({id:Nt.string(),organizationId:Nt.string(),createdAt:Nt.coerce.date(),updatedAt:Nt.coerce.date(),createdBy:Nt.string(),scheduledAt:Nt.coerce.date().nullish(),startedAt:Nt.coerce.date().nullish(),finishedAt:Nt.coerce.date().nullish(),status:Nt.nativeEnum(Ae),trigger:Nt.nativeEnum(er),results:mS.array().nullish(),apiTestName:Nt.string().nullish(),apiTestPath:Nt.string().nullish(),apiTestId:Nt.string().nullish()}),z5=vI.pick({status:!0,startedAt:!0,finishedAt:!0});var aa=(o=>(o.TestRun="test-run",o.MobileTestRun="mobile-test-run",o.CreditsUsed="credits-used",o.CreditsUsedV2="credits-used-v2",o))(aa||{}),hS=3;function AI(r){return r==="MODULE"||r==="CONDITIONAL"||r==="SECTION"||r==="RESOLVED_MODULE"}function gd(r){if(!AI(r))switch(r){case"PRESET_ACTION":return 0;case"AI_ACTION":return 3;case"AI_ACTION_DYNAMIC":return 5;default:(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function fd(r){switch(r.type){case"AI_EXTRACT":case"AI_ASSERTION":return hS;case"CAPTCHA":return 3;case"CLICK":case"TYPE":case"SELECT_OPTION":case"HOVER":case"ELEMENT_CHECK":case"FOCUS":case"BLUR":case"SCROLL_DOWN":case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_UP":case"MOUSE_DRAG":return r.useSelector||!r.target||r.target.type!=="description"?0:1;case"DRAG":return r.useSelector?0:1;case"VISUAL_DIFF":case"TAB":case"JAVASCRIPT":case"NAVIGATE":case"WAIT":case"SUCCESS":case"AUTH_LOAD":case"AUTH_SAVE":case"COOKIE":case"DIALOG":case"FILE_UPLOAD":case"GO_BACK":case"GO_FORWARD":case"LOCAL_STORAGE":case"NEW_TAB":case"PAGE_CHECK":case"PRESS":case"KEY_DOWN":case"KEY_UP":case"COPY":case"PASTE":case"REFRESH":case"REQUEST":case"GRAPHQL_REQUEST":case"WAIT_FOR_URL":case"REGISTER_REQUEST_LISTENER":case"AWAIT_LISTENER":case"RECORD_REQUESTS":case"GET_RECORDED_REQUESTS":case"SET_HEADER":case"MOCK_ROUTE":case"REMOVE_ROUTE_MOCK":case"OFFLINE_MODE":return 0;default:(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}var Vs=class{trackStepExecution(){}async flush(){}};import{parseString as wI,splitCookiesString as RI}from"set-cookie-parser";import{z as Te}from"zod";var Sd=Te.object({name:Te.string(),value:Te.string(),url:Te.string().optional(),domain:Te.string().optional(),path:Te.string().optional(),expires:Te.number().default(Date.now()/1e3+60*60*24*365),httpOnly:Te.boolean().optional(),secure:Te.boolean().default(!0),sameSite:Te.union([Te.literal("Strict"),Te.literal("Lax"),Te.literal("None")]).default("None")});function Ws(r,e){let t=[],n=RI(r);for(let o of n){let i=wI(o,{decodeValues:!1});if(!i.name)throw new Error("Name missing from cookie");if(!i.value)continue;let a;if(i.sameSite){let u=i.sameSite.trim().toLowerCase();if(u==="strict")a="Strict";else if(u==="lax")a="Lax";else if(u==="none")a="None";else throw new Error(`Invalid sameSite setting in cookie: ${u}`)}i.httpOnly===void 0&&(i.httpOnly=!1),!i.path&&i.domain&&(i.path="/"),!i.domain&&e&&(i.domain=e);let s=Sd.parse({...i,expires:i.expires?i.expires.getTime()/1e3:void 0,sameSite:a});t.push(s);let c=[s.name,...Object.keys(s)].map(u=>u.toLowerCase()),l=o.match(/\b(\S+)=([^;]*)/g);if(l)for(let u of l){let[d,p]=u.split("=");if(!d||!p)throw new Error(`Invalid key-value pair in cookie: ${u}`);c.includes(d.toLowerCase())||t.push({...s,name:d,value:p})}}return t}var CI=Te.object({origin:Te.string(),localStorage:Te.array(Te.object({name:Te.string(),value:Te.string()}))}),xI=Te.object({entries:Te.record(Te.string(),Te.array(Te.tuple([Te.unknown(),Te.unknown()]))),version:Te.number().optional()}),gS=Te.object({cookies:Sd.array().optional(),origins:CI.array().optional(),idb:Te.record(Te.string(),xI).optional().describe("key is db name")});function $s(r,e){let t=[];return r.cloneSync()?.serializeSync()?.cookies.forEach(n=>{let o=Sd.safeParse({name:n.key,...n});if(!o.success)return;let i=o.data;!i.domain&&!i.url&&(i.domain=e),t.push(i)}),t}import $I from"zod";import{v4 as c4}from"uuid";import{z as j}from"zod";import*as xe from"zod";var fS=xe.object({requiredText:xe.string().optional(),requiredAttributes:xe.record(xe.string(),xe.string()).optional(),requiredBounds:xe.boolean().optional()}),_I=xe.object({xPath:xe.string(),requirements:fS.optional()}),MI=xe.object({type:xe.literal("NATIVE"),bounds:xe.number().array(),resolvedDescription:xe.string(),xPath:xe.string(),elementOnlySerializedXml:xe.string(),requirements:fS.optional(),requiredRelatedElements:_I.array().optional()}),II=xe.object({type:xe.literal("WEBVIEW"),resolvedDescription:xe.string(),xPath:xe.string(),browserCache:on.optional()}),qs=xe.discriminatedUnion("type",[MI,II]);var Yn=(m=>(m.AI_CHECK="AI_CHECK",m.TAP="TAP",m.TYPE="TYPE",m.PRESS="PRESS",m.PRESS_KEYBOARD="PRESS_KEYBOARD",m.OPEN_APP="OPEN_APP",m.OPEN_NOTIFICATION_DRAWER="OPEN_NOTIFICATION_DRAWER",m.SWIPE="SWIPE",m.JAVASCRIPT="JAVASCRIPT",m.REQUEST="REQUEST",m.WAIT="WAIT",m.ADD_FILE="ADD_FILE",m.ADB="ADB",m.STATE="STATE",m))(Yn||{}),yd=(c=>(c.BACK="BACK",c.HOME="HOME",c.APP_SWITCHER="APP_SWITCHER",c.POWER="POWER",c.SEARCH="SEARCH",c.VOLUME_UP="VOLUME_UP",c.VOLUME_DOWN="VOLUME_DOWN",c.VOLUME_MUTE="VOLUME_MUTE",c))(yd||{}),bd=(n=>(n.CLOSE_KEYBOARD="CLOSE_KEYBOARD",n.ENTER="ENTER",n.BACKSPACE="BACKSPACE",n))(bd||{}),SS=j.object({type:j.literal("description"),description:j.string()}),PI=j.object({type:j.literal("coordinates"),xPercent:j.number(),yPercent:j.number()}),yS=j.discriminatedUnion("type",[SS,PI]),OI=j.object({updatedAt:j.coerce.date().optional()}),kt=j.object({id:j.string().uuid(),disableCache:j.boolean().optional()}),LI=kt.extend({type:j.literal("STATE")}),bS=OI.extend({target:qs}),NI=kt.extend({type:j.literal("AI_CHECK"),assertion:j.string(),timeoutSecs:j.number().optional()}),Ed=kt.extend({type:j.literal("TAP"),target:yS,cache:bS.optional(),longPress:j.boolean().optional(),longPressDurationMs:j.number().optional(),doubleTap:j.boolean().optional(),doubleTapDelayMs:j.number().optional(),relativePosition:j.object({x:j.number(),y:j.number()}).optional()}),Td=kt.extend({type:j.literal("TYPE"),target:yS.optional(),cache:bS.optional(),keyPressDelayMs:j.number().optional(),text:j.string(),clearContent:j.boolean().optional()}),kI=kt.extend({type:j.literal("PRESS"),key:j.nativeEnum(yd),longPress:j.boolean().optional()}),DI=kt.extend({type:j.literal("PRESS_KEYBOARD"),key:j.nativeEnum(bd)}),UI=kt.extend({type:j.literal("OPEN_APP"),packageName:j.string(),activityName:j.string().optional(),intentExtras:j.string().optional()}),FI=kt.extend({type:j.literal("OPEN_NOTIFICATION_DRAWER")}),BI=j.discriminatedUnion("type",[j.object({type:j.literal("SCREEN")}),j.object({type:j.literal("OPEN_APP")}),j.object({type:j.literal("CUSTOM"),target:SS})]),zI=kt.extend({type:j.literal("SWIPE"),direction:j.enum(["up","down","left","right"]),scrollableElement:BI,viewportPercent:j.number().optional(),durationMs:j.number().optional()}),HI=kt.extend({type:j.literal("JAVASCRIPT"),code:j.string(),timeout:j.number().int().max(60).optional().describe("Max seconds for the code to complete")}),GI=kt.extend({type:j.literal("REQUEST")}).merge(_o),jI=kt.extend({type:j.literal("WAIT"),timeoutSecs:j.number()}),VI=kt.extend({type:j.literal("ADB"),command:j.string(),jsonArgs:j.string().optional()}),WI=kt.extend({type:j.literal("ADD_FILE"),file:j.string(),storageLocation:j.string()}),ES=j.discriminatedUnion("type",[NI,Ed,Td,kI,UI,FI,DI,zI,HI,GI,jI,WI,VI,LI]);var vd=r=>{switch(r.type){case"description":return r.description;case"coordinates":return`${r.xPercent}%, ${r.yPercent}%`}};var TS={type:!0,cache:!0},mn=$I.discriminatedUnion("type",[Ed.pick(TS),Td.pick(TS)]),qI=Object.values(Yn).filter(r=>mn.options.some(e=>e.shape.type.safeParse(r).success));function Ks(r){return qI.includes(r.type)}var vS=Wi(mn),AS=$i(mn),y4=Rs(mn);import{cloneDeep as sa}from"lodash-es";import wS from"truncate-json";var KI="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",YI=[Wn,Ho],RS=[Wn,Ho],Wo=class r{env={};varsFromMomenticEnvironment={};constructor(e){this.reset(e)}static dummyContext(e=void 0,t=void 0,n={}){return new r({testName:e,envName:t,variablesFromEnvironment:n})}static fromSnapshot({snapshot:e,environmentVariables:t}){let n=e.env[Wn],o=e.env[Ho],i={};for(let[s,c]of Object.entries(e.env))RS.includes(s)||(t??{})[s]===void 0&&(i[s]=c);return new r({dynamicVariables:i,envName:n,testName:o,variablesFromEnvironment:t??{}})}setEnvVariables(e){let t=sa(e);this.env=Object.assign(this.env,t)}setInputs(e){e&&this.setEnvVariables(e)}setMomenticSystemVariable(e,t){this.varsFromMomenticEnvironment[e]=t}getVariable(e){return this.env[e]}setVariable(e,t){YI.includes(e)||(this.env[e]=t)}getEnvName(){return this.env[Wn]}toObjectCopy(){let e={env:Object.assign({},this.env,this.varsFromMomenticEnvironment)};return sa(e)}toEditorDisplayCopy(){return this.toObjectCopy()}toRedactedDisplayCopy(){let e=this.toObjectCopy();e.env=Object.fromEntries(Object.entries(e.env).map(([n,o])=>RS.includes(n)||this.varsFromMomenticEnvironment[n]===void 0?[n,o]:[n,KI]));for(let[n,o]of Object.entries(e.env)){if(!o){e.env[n]=o;continue}let{jsonString:i}=wS(JSON.stringify(o),1e3);try{e.env[n]=JSON.parse(i)}catch{e.env[n]=void 0}}let{jsonString:t}=wS(JSON.stringify(e.env),5e3);try{e.env=JSON.parse(t)}catch{e.env={}}return e}reset(e){this.env={},this.varsFromMomenticEnvironment={},this.setEnvVariables(e.dynamicVariables??{}),this.varsFromMomenticEnvironment=sa(e.variablesFromEnvironment),e.envName&&this.setMomenticSystemVariable(Wn,e.envName),e.testName&&this.setMomenticSystemVariable(Ho,e.testName)}getDynamicVariablesCopy(){return sa(this.env)}getVariablesFromEnvironmentCopy(){return sa(this.varsFromMomenticEnvironment)}};var la=(t=>(t.USWest1="us-west1",t.EUNorth1="eu-north1",t))(la||{});import Je from"zod";import{z as gr}from"zod";import{z as Fe}from"zod";var hr=Fe.object({id:Fe.string(),name:Bo,baseUrl:ks,description:Fe.string().optional().nullish(),schemaVersion:Fe.string(),advanced:ra,retries:Fe.number(),envs:Fe.array(zs).nullish(),parameters:Bs.nullish(),disabled:Fe.boolean().optional(),labels:Fe.array(Fe.string()).optional().catch([])}),M4=Fe.enum(["INHERIT","ENABLED","DISABLED"]);var XI=ra.extend({failureRecovery:Fe.boolean().or(Fe.string()).optional().transform(r=>typeof r=="string"?r:r===void 0?"INHERIT":r?"ENABLED":"DISABLED"),useMemory:Fe.boolean().or(Fe.string()).optional().transform(r=>typeof r=="string"?r:r===void 0?"INHERIT":r?"ENABLED":"DISABLED")});var I4=hr.pick({name:!0,description:!0,baseUrl:!0,retries:!0,disabled:!0,parameters:!0}).extend({advanced:XI}),P4=hr.pick({name:!0,description:!0,baseUrl:!0,retries:!0,disabled:!0,advanced:!0,parameters:!0}),JI=Fe.object({labels:Fe.array(Fe.string()).optional(),outputs:zf.nullish()}),$o=hr.merge(JI),ZI=Fe.object({createdAt:Fe.coerce.date(),updatedAt:Fe.coerce.date(),updatedBy:Fe.string().nullable(),schedule:jo,notification:Vo,createdBy:Fe.string(),organizationId:Fe.string(),folderId:Fe.string().nullable().optional()}),QI=hr.merge(ZI),O4=QI.merge(zn),Ys=hr.merge(zn),L4=hr.merge(Hn);var eP="test",tP="module",rP="mobile-test",nP="mobile-module";var _e=(o=>(o.TEST=`momentic/${eP}`,o.MODULE=`momentic/${tP}`,o.MOBILE_TEST=`momentic/${rP}`,o.MOBILE_MODULE=`momentic/${nP}`,o))(_e||{}),z4=hr.merge(Hn),CS=Jt.extend({steps:gr.array(gr.record(gr.string(),gr.unknown())),schemaVersion:gr.string()}),H4=CS.extend({fileType:gr.literal(_e.MODULE)}),G4=gr.object({test:gr.string().describe("YAML for the test, including metadata and steps"),modules:gr.record(gr.string(),gr.string()).describe("Map of module name to YAML for the module")});var Ad=Je.object({parameterNames:Je.string().array(),defaultParameters:Je.record(Je.string(),Je.string()).optional(),parameterEnums:Je.record(Je.string(),Je.string().array()).optional()}),oP=Je.object({moduleId:Je.string().uuid(),name:Je.string(),description:Je.string().nullish(),parameters:Ad.optional(),enabled:Je.boolean().nullish(),schemaVersion:Je.string()}),ca=oP.omit({name:!0}),Xs=ca.extend({steps:Je.array(Je.record(Je.string(),Je.unknown()))}),iP=Je.object({fileType:Je.literal(_e.MOBILE_MODULE)}).merge(Xs);import Dt from"zod";var fr=(t=>(t.PRESET="MOBILE_PRESET_STEP",t.MODULE="MOBILE_MODULE_STEP",t))(fr||{}),Js=Dt.object({id:Dt.string().uuid(),envKey:Dt.string().optional(),skipped:Dt.boolean().optional()}),ua=Js.extend({type:Dt.literal("MOBILE_PRESET_STEP"),command:ES,keyPressDelayMs:Dt.number().optional()}),qo=Dt.object({moduleId:Dt.string(),inputs:Dt.record(Dt.string(),Dt.string()).optional(),parameters:Ad.optional()}),da=Js.merge(qo.extend({type:Dt.literal("MOBILE_MODULE_STEP")})),X4=qo.extend({steps:Dt.lazy(()=>Sr.array())}),Sr=Dt.discriminatedUnion("type",[ua,da]);import Ze from"zod";import Zs from"zod";var qr=(e=>(e.MODULE="RESOLVED_MOBILE_MODULE",e))(qr||{}),aP=qo.extend({steps:Zs.lazy(()=>pa.array()),name:Zs.string().describe("name of the module")}),sP=Js.merge(aP).extend({type:Zs.literal("RESOLVED_MOBILE_MODULE")}),pa=Zs.discriminatedUnion("type",[sP,ua]);function xS(r){return Object.values(qr).includes(r)||Object.values(fr).includes(r)}var lP=Ze.object({disableMomenticAccessibilityTree:Ze.boolean().optional(),autoGrantPermissions:Ze.boolean().optional()}),wd=lP.extend({region:Ze.nativeEnum(la).optional()}),ma=Ze.object({retries:Ze.number().optional().describe("number of retries to run"),defaultChannel:Ze.string().optional().describe("default channel to use"),defaultTag:Ze.string().optional().describe("default tag to use, if not set uses latest"),defaultEnv:Ze.string().optional(),emulator:wd.optional()}),_r=Ze.object({id:Ze.string().uuid(),description:Ze.string(),schemaVersion:Ze.string(),settings:ma.optional()}),cP=_r.merge(Ze.object({steps:Ze.array(Sr)})),Qs=Ze.object({fileType:Ze.literal(_e.MOBILE_TEST)}).merge(cP),u3=Ze.object({name:Ze.string(),steps:Ze.array(Sr).optional(),settings:ma.optional()}),uP=_r.extend({steps:pa.array()});import me from"zod";var hn=me.object({startTime:me.number(),endTime:me.number().optional(),durationMs:me.number().optional(),error:me.string().optional(),result:me.unknown().optional(),attributes:me.record(me.string(),me.unknown())});var dP=hn.extend({type:me.literal("SECTION"),name:me.string(),subSpans:me.lazy(()=>Rd.array())}),pP=hn.extend({type:me.literal("AI_LOCATOR_CALL"),result:me.object({id:me.number(),thoughts:me.string()}).optional()}),mP=hn.extend({type:me.literal("AI_ASSERTION_CALL"),result:me.object({thoughts:me.string(),result:me.boolean()}).optional()}),hP=hn.extend({type:me.literal("TARGET_RESOLUTION"),result:me.object({serializedElement:me.string()}).optional()}),gP=hn.extend({type:me.literal("WAIT_FOR_STABILITY"),reason:me.string()}),fP=hn.extend({type:me.literal("EMULATOR_INTERACTION"),name:me.string(),withinWebview:me.boolean().optional()}),SP=hn.extend({type:me.literal("EMULATOR_READ_STATE"),name:me.string()}),yP=hn.extend({type:me.literal("GENERIC"),name:me.string()}),Rd=me.discriminatedUnion("type",[dP,pP,mP,hP,gP,fP,SP,yP]);import yr from"zod";var _S=yr.object({message:yr.string().optional(),startTime:yr.number(),endTime:yr.number(),status:yr.nativeEnum(ot),trace:yr.unknown(),beforeSnapshot:yr.string().optional(),afterSnapshot:yr.string().optional(),data:yr.unknown().optional().describe("output data from the step")}),bP=_S.merge(ua),EP=_S.merge(da).extend({steps:yr.lazy(()=>br.array())}),br=yr.discriminatedUnion("type",[bP,EP]);var B3=new Set(Object.values(rt));var TP={AI_ACTION:"AI action",AI_ACTION_DYNAMIC:"AI action",RESOLVED_MODULE:"Module",AI_ASSERTION:"AI check",AI_EXTRACT:"AI extract",CLICK:"Click",TYPE:"Type",JAVASCRIPT:"JavaScript",SELECT_OPTION:"Select",PRESS:"Press",KEY_DOWN:"Key down",KEY_UP:"Key up",NAVIGATE:"Navigate",SCROLL_UP:"Scroll up",SCROLL_DOWN:"Scroll down",SCROLL_LEFT:"Scroll left",SCROLL_RIGHT:"Scroll right",HOVER:"Hover",BLUR:"Blur",FILE_UPLOAD:"File upload",FOCUS:"Focus",GO_BACK:"Go back",GO_FORWARD:"Go forward",WAIT:"Wait",REFRESH:"Refresh",TAB:"Switch tab",NEW_TAB:"New tab",COOKIE:"Cookie",LOCAL_STORAGE:"localStorage",REQUEST:"API request",GRAPHQL_REQUEST:"GraphQL request",CAPTCHA:"CAPTCHA",DRAG:"Drag & drop",VISUAL_DIFF:"Visual diff",DIALOG:"Dialog",MOUSE_DRAG:"Mouse drag",AUTH_LOAD:"Load auth state",AUTH_SAVE:"Save auth state",ELEMENT_CHECK:"Element check",PAGE_CHECK:"Page check",WAIT_FOR_URL:"Wait for URL",COPY:"Copy",PASTE:"Paste",REGISTER_REQUEST_LISTENER:"Register request listener",AWAIT_LISTENER:"Await listener",RECORD_REQUESTS:"Record requests",GET_RECORDED_REQUESTS:"Get recorded requests",SET_HEADER:"Set header",MOCK_ROUTE:"Mock route",REMOVE_ROUTE_MOCK:"Remove route mock",OFFLINE_MODE:"Offline mode",SUCCESS:"Done"},z3={AI_ACTION:["ai","action","agent"],AI_ACTION_DYNAMIC:["ai","action","dynamic","agent"],RESOLVED_MODULE:[],AI_ASSERTION:["ai","check","assert","make sure","ensure"],AI_EXTRACT:["ai","extract","data"],CLICK:["click","press"],TYPE:["type","input","write","press"],JAVASCRIPT:["js","javascript","code","execute"],SELECT_OPTION:["select","option","choose"],PRESS:["keyboard","type","key"],KEY_DOWN:["keyboard","type","key","down","press"],KEY_UP:["keyboard","type","key","up","press"],NAVIGATE:["go to","visit"],SCROLL_UP:[],SCROLL_DOWN:[],SCROLL_LEFT:[],SCROLL_RIGHT:[],HOVER:["scroll into view","go to"],BLUR:[],FILE_UPLOAD:[],FOCUS:[],GO_BACK:[],GO_FORWARD:[],WAIT:[],REFRESH:[],TAB:[],NEW_TAB:[],COOKIE:[],LOCAL_STORAGE:[],REQUEST:[],GRAPHQL_REQUEST:[],CAPTCHA:[],DRAG:[],VISUAL_DIFF:[],DIALOG:[],MOUSE_DRAG:[],AUTH_LOAD:[],AUTH_SAVE:[],ELEMENT_CHECK:[],PAGE_CHECK:[],WAIT_FOR_URL:[],COPY:[],PASTE:[],REGISTER_REQUEST_LISTENER:[],AWAIT_LISTENER:[],RECORD_REQUESTS:[],GET_RECORDED_REQUESTS:[],SET_HEADER:[],MOCK_ROUTE:[],REMOVE_ROUTE_MOCK:[],OFFLINE_MODE:[],SUCCESS:[]},H3={AI_ACTION:"Ask AI achieve a specific goal. Saves the steps for reuse. Please use Dynamic AI action instead.",AI_ACTION_DYNAMIC:"Ask AI achieve a specific goal. Fully dynamic and does not save the steps for reuse. Our most capable AI agent.",RESOLVED_MODULE:"A list of steps that can be reused in multiple tests.",AI_ASSERTION:"Ask AI to verify whether something is true on the page.",CLICK:"Click on an element on the page.",DIALOG:"Specify how native browser dialogs should be handled.",AI_EXTRACT:"Ask AI to extract data from the page.",HOVER:"Hover over an element on the page.",FILE_UPLOAD:"Automatically upload a file when the native file upload dialog is activated.",FOCUS:"Focus an element on the page.",BLUR:"Remove focus from an element on the page.",SELECT_OPTION:"Select an option from an HTML Select <select> element.",TYPE:"Type the specified text into an element.",PRESS:"Press the specified keys using the keyboard. (e.g. Control+A)",KEY_DOWN:"Hold down the specified keys on the keyboard. (e.g. Control+A)",KEY_UP:"Release the specified keys on the keyboard. (e.g. Control+A)",NAVIGATE:"Navigate to the specified URL.",SCROLL_UP:"Scroll up by a specified height.",SCROLL_DOWN:"Scroll down by a specified height.",SCROLL_LEFT:"Scroll left by a specified width.",SCROLL_RIGHT:"Scroll right by a specified width.",GO_BACK:"Go back in browser history.",GO_FORWARD:"Go forward in browser history.",WAIT:"Wait for the specified number of seconds.",REFRESH:"Refresh the page. This will not clear cookies or session data.",TAB:"Switch to different tab in the browser.",NEW_TAB:"Create and switch to a new tab in the browser.",COOKIE:"Set a cookie that will persist throughout the browser session.",LOCAL_STORAGE:"Set a localStorage value that will persist throughout the browser session",CAPTCHA:"Solve CAPTCHAs on the page. This feature is only available on Momentic Cloud and may take up to 60 seconds. Disabling CAPTCHAs in non-production environments is strongly advised.",REQUEST:"Make an API request to a URL.",GRAPHQL_REQUEST:"Make a GraphQL request to a URL.",JAVASCRIPT:"Run JavaScript code in the browser or a Node.js environment.",DRAG:"Click and drag an element to another location.",VISUAL_DIFF:"Compare a screenshot of the page or a specific element to a baseline image.",MOUSE_DRAG:"Click and drag the mouse by a specified distance.",AUTH_LOAD:"Load or clear session state using a JavaScript object including cookies, localStorage, and IndexDB entries.",AUTH_SAVE:"Save authentication state (cookies, localStorage) into a JavaScript object.",ELEMENT_CHECK:"Assert on an element's state using pre-built conditions, including content, visibility, attribute value checks.",PAGE_CHECK:"Assert on the active page's contents using pre-built conditions.",WAIT_FOR_URL:"Wait for the active page's URL to match a target value or pattern.",COPY:"Copy the specified value to the browser clipboard.",PASTE:"Paste the browser clipboard contents.",REGISTER_REQUEST_LISTENER:"Register a listener for network requests.",AWAIT_LISTENER:"Wait for a listener to fire, and return the response data.",RECORD_REQUESTS:"Record network requests that match a given pattern.",GET_RECORDED_REQUESTS:"Get recorded requests that matched the pattern.",SET_HEADER:"Set a header.",MOCK_ROUTE:"Mock network requests to a specific URL.",REMOVE_ROUTE_MOCK:"Remove a previously set route mock.",OFFLINE_MODE:"Configure offline mode.",SUCCESS:"Indicate the entire AI action has succeeded, optionally based on a condition."},G3={AI_CHECK:"AI check",RESOLVED_MOBILE_MODULE:"Module",TAP:"Tap",TYPE:"Type",PRESS:"Press button",PRESS_KEYBOARD:"Press keyboard",SWIPE:"Swipe",OPEN_APP:"Open app",OPEN_NOTIFICATION_DRAWER:"Open notification drawer",JAVASCRIPT:"JavaScript",REQUEST:"API request",WAIT:"Wait",ADD_FILE:"Add file",ADB:"ADB command",STATE:"Debug state"},j3={AI_CHECK:"Ask AI to verify whether something is true on the screen.",RESOLVED_MOBILE_MODULE:"A list of steps that can be reused in multiple tests.",TAP:"Tap on an element on the screen.",TYPE:"Type the specified text into an element.",PRESS:"Press a physical button on the device.",PRESS_KEYBOARD:"Press a special key on the keyboard.",SWIPE:"Swipe on the screen.",OPEN_APP:"Open an app on the device.",OPEN_NOTIFICATION_DRAWER:"Open the notification drawer.",JAVASCRIPT:"Execute JavaScript code in a NodeJS context.",REQUEST:"Make an HTTP request to a URL.",WAIT:"Wait for a specified amount of time.",ADD_FILE:"Add a file to the device's disk.",ADB:"Execute an ADB command on the device.",STATE:"Get the debug state of the device."};import vP from"semver";import{z as AP}from"zod";var q3=AP.string().refine(r=>vP.valid(r),{message:"must be a valid semver string"});import{Faker as X3,en as J3}from"@faker-js/faker";import{z as k}from"zod";var Q3=k.object({body:k.string(),to:k.string(),from:k.string()}),eX=k.object({from:k.string().optional(),to:k.string(),timeout:k.number().optional(),beforeDate:k.string().pipe(k.coerce.date()).or(k.date()).optional(),afterDate:k.string().pipe(k.coerce.date()).or(k.date()).optional()}),tX=k.object({to:k.string().email(),from:k.string(),subject:k.string(),body:k.string(),html:k.string().optional()}),rX=k.object({inbox:k.string().transform(r=>r.toLowerCase()),afterDate:k.string().pipe(k.coerce.date()).or(k.date()).optional(),timeout:k.number().optional(),trimWhitespace:k.boolean().optional()}),nX=k.object({inbox:k.string(),limit:k.number().optional(),afterDate:k.string().pipe(k.coerce.date()).or(k.date()).optional(),trimWhitespace:k.boolean().optional()});var el=(t=>(t.RAW="RAW",t.RESPONSE="RESPONSE",t))(el||{}),MS=k.object({body:k.string().nullish(),status:k.number().optional(),headers:k.array(k.tuple([k.string(),k.string()])).optional()}),wP=k.object({url:k.string(),options:k.object({method:k.string(),body:k.string().nullish(),headers:k.array(k.tuple([k.string(),k.string()])).optional()}).optional()}).optional(),RP=k.object({body:k.string().nullish(),options:k.object({status:k.number(),statusText:k.string().optional(),headers:k.array(k.tuple([k.string(),k.string()])).optional()}).optional()}).optional(),IS=k.object({result:k.unknown(),variableUpdates:k.record(k.string(),k.unknown()).optional(),persistentVariableUpdates:k.record(k.string(),k.unknown()).optional(),error:k.string().optional(),success:k.boolean()}),oX=k.object({id:k.string().optional(),orgId:k.string(),momenticLambdaAuthHash:k.string(),code:k.string(),fragment:k.boolean(),state:k.object({env:k.record(k.string(),k.unknown()),request:wP,response:RP,additionalBindings:k.record(k.string(),k.unknown()).optional()}),timeoutMs:k.number().optional(),disallowVariableUpdates:k.boolean().optional(),responseSerialization:k.nativeEnum(el).optional()}),gn=15e3;import*as Et from"zod";import{extendZodWithOpenApi as CP}from"zod-openapi";CP(Et);var xP=Et.object({url:Et.string(),lineNumber:Et.number(),columnNumber:Et.number()}).openapi({ref:"CodeLocation"}),tl=Et.object({timestamp:Et.number(),text:Et.string(),type:Et.string(),tabIndex:Et.number(),args:Et.unknown().array().optional(),url:Et.string().optional(),location:xP.optional()}).openapi({ref:"ConsoleLog"}),PS=tl.array(),_P=PS.array();import*as Cd from"zod";import{extendZodWithOpenApi as KP}from"zod-openapi";import{z as I}from"zod";var MP=I.object({name:I.string(),version:I.string(),comment:I.string().optional()}),IP=I.object({name:I.string(),version:I.string(),comment:I.string().optional()}),PP=I.object({onContentLoad:I.number().optional(),onLoad:I.number().optional(),comment:I.string().optional()}),LS=I.object({startedDateTime:I.string(),id:I.string(),title:I.string().optional(),pageTimings:PP,comment:I.string().optional()}),OP=I.array(LS),LP=I.object({name:I.string(),value:I.string(),path:I.string().optional(),domain:I.string().optional(),expires:I.string().optional(),httpOnly:I.boolean().optional(),secure:I.boolean().optional(),comment:I.string().optional()}),NS=I.array(LP),NP=I.object({name:I.string(),value:I.string(),comment:I.string().optional()}),kS=I.array(NP),kP=I.object({name:I.string(),value:I.string(),comment:I.string().optional()}),DP=I.array(kP),UP=I.object({name:I.string(),value:I.string().optional(),fileName:I.string().optional(),contentType:I.string().optional(),comment:I.string().optional()}),FP=I.array(UP),BP=I.object({mimeType:I.string(),params:FP,text:I.string(),comment:I.string().optional()}),zP=I.object({method:I.string(),url:I.string(),httpVersion:I.string().optional(),cookies:NS,headers:kS,queryString:DP,postData:BP.optional(),headersSize:I.number().optional(),bodySize:I.number().optional(),comment:I.string().optional()}),HP=I.object({size:I.number().optional(),compression:I.number().optional(),mimeType:I.string().optional(),text:I.string().optional(),encoding:I.string().optional(),comment:I.string().optional()}),GP=I.object({status:I.number(),statusText:I.string(),httpVersion:I.string().optional(),cookies:NS,headers:kS,content:HP,redirectURL:I.string().optional(),headersSize:I.number().optional(),bodySize:I.number().optional(),comment:I.string().optional(),_mocked:I.boolean().optional()}),OS=I.object({expires:I.string().optional(),lastAccess:I.string(),eTag:I.string(),hitCount:I.number(),comment:I.string().optional()}),jP=I.object({beforeRequest:OS.optional(),afterRequest:OS.optional(),comment:I.string().optional()}),VP=I.object({blocked:I.number().optional(),dns:I.number().optional(),connect:I.number().optional(),send:I.number(),wait:I.number(),receive:I.number(),ssl:I.number().optional(),comment:I.string().optional()}),DS=I.object({pageref:I.string().optional(),startedDateTime:I.string(),time:I.number().optional(),request:zP,response:GP.optional(),cache:jP.optional(),timings:VP,serverIPAddress:I.string().optional(),connection:I.string().optional(),comment:I.string().optional(),_resourceType:I.string().optional()}),WP=I.array(DS),$P=I.object({version:I.string().default("1.1"),creator:MP.optional(),browser:IP.optional(),pages:OP.optional(),entries:WP,comment:I.string().optional()}),qP=I.object({log:$P}),US=I.record(I.string(),LS),FS=I.record(I.string(),DS);KP(Cd);var YP=Cd.object({logsPerPage:tl.array().array(),harPages:US.optional(),harEntries:FS.optional()}).openapi({ref:"DebugData"});import{cloneDeep as XP}from"lodash-es";import{z as Mr}from"zod";var zS=(c=>(c.DisableClickhouseCaches="disable_clickhouse_caches",c.ShowZeroOpacityElements="show_zero_opacity_elements",c.VisualActions="visual_actions",c.RagV2="rag_v2",c.DisableSecondaryCacheResolution="disable_secondary_cache_resolution",c.GlobalLocatorRedirect="global_locator_redirect",c.FakerConstantSeed="faker_constant_seed",c.AutoExpandIframes="auto_expand_iframes",c))(zS||{});var BS=Mr.union([Mr.string(),Mr.number(),Mr.boolean(),Mr.null(),Mr.record(Mr.string(),Mr.lazy(()=>BS)),Mr.array(Mr.lazy(()=>BS))]),rl=class{flags;payloads;constructor(e,t){this.flags=e,this.payloads=t}isBooleanFlagEnabled(e){return process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${e.toUpperCase()}`]==="true"?!0:process.env&&process.env[`MOMENTIC_FLAG_OVERRIDE_${e.toUpperCase()}`]==="false"?!1:this.flags[e]===!0}getAllFlags(){let e=XP(this.flags);return Object.entries(e).forEach(([t,n])=>{typeof n=="boolean"&&Object.values(zS).includes(t)&&(e[t]=this.isBooleanFlagEnabled(t))}),e}getFlagPayload(e){let t=this.payloads[e];if(t!==void 0){if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t}}refresh(){throw new Error("Not implemented")}},qX=new rl({},{});var xd={".123":"application/vnd.lotus-1-2-3",".3dml":"text/vnd.in3d.3dml",".3g2":"video/3gpp2",".3gp":"video/3gpp",".a":"application/octet-stream",".aab":"application/x-authorware-bin",".aac":"audio/x-aac",".aam":"application/x-authorware-map",".aas":"application/x-authorware-seg",".abw":"application/x-abiword",".acc":"application/vnd.americandynamics.acc",".ace":"application/x-ace-compressed",".acu":"application/vnd.acucobol",".acutc":"application/vnd.acucorp",".adp":"audio/adpcm",".aep":"application/vnd.audiograph",".afm":"application/x-font-type1",".afp":"application/vnd.ibm.modcap",".ai":"application/postscript",".aif":"audio/x-aiff",".aifc":"audio/x-aiff",".aiff":"audio/x-aiff",".air":"application/vnd.adobe.air-application-installer-package+zip",".ami":"application/vnd.amiga.ami",".apk":"application/vnd.android.package-archive",".application":"application/x-ms-application",".apr":"application/vnd.lotus-approach",".asc":"application/pgp-signature",".asf":"video/x-ms-asf",".asm":"text/x-asm",".aso":"application/vnd.accpac.simply.aso",".asx":"video/x-ms-asf",".atc":"application/vnd.acucorp",".atom":"application/atom+xml",".atomcat":"application/atomcat+xml",".atomsvc":"application/atomsvc+xml",".atx":"application/vnd.antix.game-component",".au":"audio/basic",".avi":"video/x-msvideo",".aw":"application/applixware",".azf":"application/vnd.airzip.filesecure.azf",".azs":"application/vnd.airzip.filesecure.azs",".azw":"application/vnd.amazon.ebook",".bat":"application/x-msdownload",".bcpio":"application/x-bcpio",".bdf":"application/x-font-bdf",".bdm":"application/vnd.syncml.dm+wbxml",".bh2":"application/vnd.fujitsu.oasysprs",".bin":"application/octet-stream",".bmi":"application/vnd.bmi",".bmp":"image/bmp",".book":"application/vnd.framemaker",".box":"application/vnd.previewsystems.box",".boz":"application/x-bzip2",".bpk":"application/octet-stream",".btif":"image/prs.btif",".bz":"application/x-bzip",".bz2":"application/x-bzip2",".c":"text/x-c",".c4d":"application/vnd.clonk.c4group",".c4f":"application/vnd.clonk.c4group",".c4g":"application/vnd.clonk.c4group",".c4p":"application/vnd.clonk.c4group",".c4u":"application/vnd.clonk.c4group",".cab":"application/vnd.ms-cab-compressed",".car":"application/vnd.curl.car",".cat":"application/vnd.ms-pki.seccat",".cc":"text/x-c",".cct":"application/x-director",".ccxml":"application/ccxml+xml",".cdbcmsg":"application/vnd.contact.cmsg",".cdf":"application/x-netcdf",".cdkey":"application/vnd.mediastation.cdkey",".cdx":"chemical/x-cdx",".cdxml":"application/vnd.chemdraw+xml",".cdy":"application/vnd.cinderella",".cer":"application/pkix-cert",".cgm":"image/cgm",".chat":"application/x-chat",".chm":"application/vnd.ms-htmlhelp",".chrt":"application/vnd.kde.kchart",".cif":"chemical/x-cif",".cii":"application/vnd.anser-web-certificate-issue-initiation",".cil":"application/vnd.ms-artgalry",".cla":"application/vnd.claymore",".class":"application/java-vm",".clkk":"application/vnd.crick.clicker.keyboard",".clkp":"application/vnd.crick.clicker.palette",".clkt":"application/vnd.crick.clicker.template",".clkw":"application/vnd.crick.clicker.wordbank",".clkx":"application/vnd.crick.clicker",".clp":"application/x-msclip",".cmc":"application/vnd.cosmocaller",".cmdf":"chemical/x-cmdf",".cml":"chemical/x-cml",".cmp":"application/vnd.yellowriver-custom-menu",".cmx":"image/x-cmx",".cod":"application/vnd.rim.cod",".com":"application/x-msdownload",".conf":"text/plain",".cpio":"application/x-cpio",".cpp":"text/x-c",".cpt":"application/mac-compactpro",".crd":"application/x-mscardfile",".crl":"application/pkix-crl",".crt":"application/x-x509-ca-cert",".csh":"application/x-csh",".csml":"chemical/x-csml",".csp":"application/vnd.commonspace",".css":"text/css",".cst":"application/x-director",".csv":"text/csv",".cu":"application/cu-seeme",".curl":"text/vnd.curl",".cww":"application/prs.cww",".cxt":"application/x-director",".cxx":"text/x-c",".daf":"application/vnd.mobius.daf",".dataless":"application/vnd.fdsn.seed",".davmount":"application/davmount+xml",".dcr":"application/x-director",".dcurl":"text/vnd.curl.dcurl",".dd2":"application/vnd.oma.dd2+xml",".ddd":"application/vnd.fujixerox.ddd",".deb":"application/x-debian-package",".def":"text/plain",".deploy":"application/octet-stream",".der":"application/x-x509-ca-cert",".dfac":"application/vnd.dreamfactory",".dic":"text/x-c",".diff":"text/plain",".dir":"application/x-director",".dis":"application/vnd.mobius.dis",".dist":"application/octet-stream",".distz":"application/octet-stream",".djv":"image/vnd.djvu",".djvu":"image/vnd.djvu",".dll":"application/x-msdownload",".dmg":"application/octet-stream",".dms":"application/octet-stream",".dna":"application/vnd.dna",".doc":"application/msword",".docm":"application/vnd.ms-word.document.macroenabled.12",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".dot":"application/msword",".dotm":"application/vnd.ms-word.template.macroenabled.12",".dotx":"application/vnd.openxmlformats-officedocument.wordprocessingml.template",".dp":"application/vnd.osgi.dp",".dpg":"application/vnd.dpgraph",".dsc":"text/prs.lines.tag",".dtb":"application/x-dtbook+xml",".dtd":"application/xml-dtd",".dts":"audio/vnd.dts",".dtshd":"audio/vnd.dts.hd",".dump":"application/octet-stream",".dvi":"application/x-dvi",".dwf":"model/vnd.dwf",".dwg":"image/vnd.dwg",".dxf":"image/vnd.dxf",".dxp":"application/vnd.spotfire.dxp",".dxr":"application/x-director",".ecelp4800":"audio/vnd.nuera.ecelp4800",".ecelp7470":"audio/vnd.nuera.ecelp7470",".ecelp9600":"audio/vnd.nuera.ecelp9600",".ecma":"application/ecmascript",".edm":"application/vnd.novadigm.edm",".edx":"application/vnd.novadigm.edx",".efif":"application/vnd.picsel",".ei6":"application/vnd.pg.osasli",".elc":"application/octet-stream",".eml":"message/rfc822",".emma":"application/emma+xml",".eol":"audio/vnd.digital-winds",".eot":"application/vnd.ms-fontobject",".eps":"application/postscript",".epub":"application/epub+zip",".es3":"application/vnd.eszigno3+xml",".esf":"application/vnd.epson.esf",".et3":"application/vnd.eszigno3+xml",".etx":"text/x-setext",".exe":"application/x-msdownload",".ext":"application/vnd.novadigm.ext",".ez":"application/andrew-inset",".ez2":"application/vnd.ezpix-album",".ez3":"application/vnd.ezpix-package",".f":"text/x-fortran",".f4v":"video/x-f4v",".f77":"text/x-fortran",".f90":"text/x-fortran",".fbs":"image/vnd.fastbidsheet",".fdf":"application/vnd.fdf",".fe_launch":"application/vnd.denovo.fcselayout-link",".fg5":"application/vnd.fujitsu.oasysgp",".fgd":"application/x-director",".fh":"image/x-freehand",".fh4":"image/x-freehand",".fh5":"image/x-freehand",".fh7":"image/x-freehand",".fhc":"image/x-freehand",".fig":"application/x-xfig",".fli":"video/x-fli",".flo":"application/vnd.micrografx.flo",".flv":"video/x-flv",".flw":"application/vnd.kde.kivio",".flx":"text/vnd.fmi.flexstor",".fly":"text/vnd.fly",".fm":"application/vnd.framemaker",".fnc":"application/vnd.frogans.fnc",".for":"text/x-fortran",".fpx":"image/vnd.fpx",".frame":"application/vnd.framemaker",".fsc":"application/vnd.fsc.weblaunch",".fst":"image/vnd.fst",".ftc":"application/vnd.fluxtime.clip",".fti":"application/vnd.anser-web-funds-transfer-initiation",".fvt":"video/vnd.fvt",".fzs":"application/vnd.fuzzysheet",".g3":"image/g3fax",".gac":"application/vnd.groove-account",".gdl":"model/vnd.gdl",".geo":"application/vnd.dynageo",".gex":"application/vnd.geometry-explorer",".ggb":"application/vnd.geogebra.file",".ggt":"application/vnd.geogebra.tool",".ghf":"application/vnd.groove-help",".gif":"image/gif",".gim":"application/vnd.groove-identity-message",".gmx":"application/vnd.gmx",".gnumeric":"application/x-gnumeric",".gph":"application/vnd.flographit",".gqf":"application/vnd.grafeq",".gqs":"application/vnd.grafeq",".gram":"application/srgs",".gre":"application/vnd.geometry-explorer",".grv":"application/vnd.groove-injector",".grxml":"application/srgs+xml",".gsf":"application/x-font-ghostscript",".gtar":"application/x-gtar",".gtm":"application/vnd.groove-tool-message",".gtw":"model/vnd.gtw",".gv":"text/vnd.graphviz",".gz":"application/x-gzip",".h":"text/x-c",".h261":"video/h261",".h263":"video/h263",".h264":"video/h264",".hbci":"application/vnd.hbci",".hdf":"application/x-hdf",".hh":"text/x-c",".hlp":"application/winhlp",".hpgl":"application/vnd.hp-hpgl",".hpid":"application/vnd.hp-hpid",".hps":"application/vnd.hp-hps",".hqx":"application/mac-binhex40",".htke":"application/vnd.kenameaapp",".htm":"text/html",".html":"text/html",".hvd":"application/vnd.yamaha.hv-dic",".hvp":"application/vnd.yamaha.hv-voice",".hvs":"application/vnd.yamaha.hv-script",".icc":"application/vnd.iccprofile",".ice":"x-conference/x-cooltalk",".icm":"application/vnd.iccprofile",".ico":"image/x-icon",".ics":"text/calendar",".ief":"image/ief",".ifb":"text/calendar",".ifm":"application/vnd.shana.informed.formdata",".iges":"model/iges",".igl":"application/vnd.igloader",".igs":"model/iges",".igx":"application/vnd.micrografx.igx",".iif":"application/vnd.shana.informed.interchange",".imp":"application/vnd.accpac.simply.imp",".ims":"application/vnd.ms-ims",".in":"text/plain",".ipk":"application/vnd.shana.informed.package",".irm":"application/vnd.ibm.rights-management",".irp":"application/vnd.irepository.package+xml",".iso":"application/octet-stream",".itp":"application/vnd.shana.informed.formtemplate",".ivp":"application/vnd.immervision-ivp",".ivu":"application/vnd.immervision-ivu",".jad":"text/vnd.sun.j2me.app-descriptor",".jam":"application/vnd.jam",".jar":"application/java-archive",".java":"text/x-java-source",".jisp":"application/vnd.jisp",".jlt":"application/vnd.hp-jlyt",".jnlp":"application/x-java-jnlp-file",".joda":"application/vnd.joost.joda-archive",".jpe":"image/jpeg",".jpeg":"image/jpeg",".jpg":"image/jpeg",".jpgm":"video/jpm",".jpgv":"video/jpeg",".jpm":"video/jpm",".js":"application/javascript",".json":"application/json",".kar":"audio/midi",".karbon":"application/vnd.kde.karbon",".kfo":"application/vnd.kde.kformula",".kia":"application/vnd.kidspiration",".kil":"application/x-killustrator",".kml":"application/vnd.google-earth.kml+xml",".kmz":"application/vnd.google-earth.kmz",".kne":"application/vnd.kinar",".knp":"application/vnd.kinar",".kon":"application/vnd.kde.kontour",".kpr":"application/vnd.kde.kpresenter",".kpt":"application/vnd.kde.kpresenter",".ksh":"text/plain",".ksp":"application/vnd.kde.kspread",".ktr":"application/vnd.kahootz",".ktz":"application/vnd.kahootz",".kwd":"application/vnd.kde.kword",".kwt":"application/vnd.kde.kword",".latex":"application/x-latex",".lbd":"application/vnd.llamagraphics.life-balance.desktop",".lbe":"application/vnd.llamagraphics.life-balance.exchange+xml",".les":"application/vnd.hhe.lesson-player",".lha":"application/octet-stream",".link66":"application/vnd.route66.link66+xml",".list":"text/plain",".list3820":"application/vnd.ibm.modcap",".listafp":"application/vnd.ibm.modcap",".log":"text/plain",".lostxml":"application/lost+xml",".lrf":"application/octet-stream",".lrm":"application/vnd.ms-lrm",".ltf":"application/vnd.frogans.ltf",".lvp":"audio/vnd.lucent.voice",".lwp":"application/vnd.lotus-wordpro",".lzh":"application/octet-stream",".m13":"application/x-msmediaview",".m14":"application/x-msmediaview",".m1v":"video/mpeg",".m2a":"audio/mpeg",".m2v":"video/mpeg",".m3a":"audio/mpeg",".m3u":"audio/x-mpegurl",".m4u":"video/vnd.mpegurl",".m4v":"video/x-m4v",".ma":"application/mathematica",".mag":"application/vnd.ecowin.chart",".maker":"application/vnd.framemaker",".man":"text/troff",".mathml":"application/mathml+xml",".mb":"application/mathematica",".mbk":"application/vnd.mobius.mbk",".mbox":"application/mbox",".mc1":"application/vnd.medcalcdata",".mcd":"application/vnd.mcd",".mcurl":"text/vnd.curl.mcurl",".mdb":"application/x-msaccess",".mdi":"image/vnd.ms-modi",".me":"text/troff",".mesh":"model/mesh",".mfm":"application/vnd.mfmp",".mgz":"application/vnd.proteus.magazine",".mht":"message/rfc822",".mhtml":"message/rfc822",".mid":"audio/midi",".midi":"audio/midi",".mif":"application/vnd.mif",".mime":"message/rfc822",".mj2":"video/mj2",".mjp2":"video/mj2",".mkv":"video/x-matroska",".mlp":"application/vnd.dolby.mlp",".mmd":"application/vnd.chipnuts.karaoke-mmd",".mmf":"application/vnd.smaf",".mmr":"image/vnd.fujixerox.edmics-mmr",".mny":"application/x-msmoney",".mobi":"application/x-mobipocket-ebook",".mov":"video/quicktime",".movie":"video/x-sgi-movie",".mp2":"audio/mpeg",".mp2a":"audio/mpeg",".mp3":"audio/mpeg",".mp4":"video/mp4",".mp4a":"audio/mp4",".mp4s":"application/mp4",".mp4v":"video/mp4",".mpa":"video/mpeg",".mpc":"application/vnd.mophun.certificate",".mpe":"video/mpeg",".mpeg":"video/mpeg",".mpg":"video/mpeg",".mpg4":"video/mp4",".mpga":"audio/mpeg",".mpkg":"application/vnd.apple.installer+xml",".mpm":"application/vnd.blueice.multipass",".mpn":"application/vnd.mophun.application",".mpp":"application/vnd.ms-project",".mpt":"application/vnd.ms-project",".mpy":"application/vnd.ibm.minipay",".mqy":"application/vnd.mobius.mqy",".mrc":"application/marc",".ms":"text/troff",".mscml":"application/mediaservercontrol+xml",".mseed":"application/vnd.fdsn.mseed",".mseq":"application/vnd.mseq",".msf":"application/vnd.epson.msf",".msh":"model/mesh",".msi":"application/x-msdownload",".msl":"application/vnd.mobius.msl",".msty":"application/vnd.muvee.style",".mts":"model/vnd.mts",".mus":"application/vnd.musician",".musicxml":"application/vnd.recordare.musicxml+xml",".mvb":"application/x-msmediaview",".mwf":"application/vnd.mfer",".mxf":"application/mxf",".mxl":"application/vnd.recordare.musicxml",".mxml":"application/xv+xml",".mxs":"application/vnd.triscape.mxs",".mxu":"video/vnd.mpegurl",".n-gage":"application/vnd.nokia.n-gage.symbian.install",".nb":"application/mathematica",".nc":"application/x-netcdf",".ncx":"application/x-dtbncx+xml",".ngdat":"application/vnd.nokia.n-gage.data",".nlu":"application/vnd.neurolanguage.nlu",".nml":"application/vnd.enliven",".nnd":"application/vnd.noblenet-directory",".nns":"application/vnd.noblenet-sealer",".nnw":"application/vnd.noblenet-web",".npx":"image/vnd.net-fpx",".nsf":"application/vnd.lotus-notes",".nws":"message/rfc822",".o":"application/octet-stream",".oa2":"application/vnd.fujitsu.oasys2",".oa3":"application/vnd.fujitsu.oasys3",".oas":"application/vnd.fujitsu.oasys",".obd":"application/x-msbinder",".obj":"application/octet-stream",".oda":"application/oda",".odb":"application/vnd.oasis.opendocument.database",".odc":"application/vnd.oasis.opendocument.chart",".odf":"application/vnd.oasis.opendocument.formula",".odft":"application/vnd.oasis.opendocument.formula-template",".odg":"application/vnd.oasis.opendocument.graphics",".odi":"application/vnd.oasis.opendocument.image",".odp":"application/vnd.oasis.opendocument.presentation",".ods":"application/vnd.oasis.opendocument.spreadsheet",".odt":"application/vnd.oasis.opendocument.text",".oga":"audio/ogg",".ogg":"audio/ogg",".ogv":"video/ogg",".ogx":"application/ogg",".onepkg":"application/onenote",".onetmp":"application/onenote",".onetoc":"application/onenote",".onetoc2":"application/onenote",".opf":"application/oebps-package+xml",".oprc":"application/vnd.palm",".org":"application/vnd.lotus-organizer",".osf":"application/vnd.yamaha.openscoreformat",".osfpvg":"application/vnd.yamaha.openscoreformat.osfpvg+xml",".otc":"application/vnd.oasis.opendocument.chart-template",".otf":"application/x-font-otf",".otg":"application/vnd.oasis.opendocument.graphics-template",".oth":"application/vnd.oasis.opendocument.text-web",".oti":"application/vnd.oasis.opendocument.image-template",".otm":"application/vnd.oasis.opendocument.text-master",".otp":"application/vnd.oasis.opendocument.presentation-template",".ots":"application/vnd.oasis.opendocument.spreadsheet-template",".ott":"application/vnd.oasis.opendocument.text-template",".oxt":"application/vnd.openofficeorg.extension",".p":"text/x-pascal",".p10":"application/pkcs10",".p12":"application/x-pkcs12",".p7b":"application/x-pkcs7-certificates",".p7c":"application/pkcs7-mime",".p7m":"application/pkcs7-mime",".p7r":"application/x-pkcs7-certreqresp",".p7s":"application/pkcs7-signature",".pas":"text/x-pascal",".pbd":"application/vnd.powerbuilder6",".pbm":"image/x-portable-bitmap",".pcf":"application/x-font-pcf",".pcl":"application/vnd.hp-pcl",".pclxl":"application/vnd.hp-pclxl",".pct":"image/x-pict",".pcurl":"application/vnd.curl.pcurl",".pcx":"image/x-pcx",".pdb":"application/vnd.palm",".pdf":"application/pdf",".pfa":"application/x-font-type1",".pfb":"application/x-font-type1",".pfm":"application/x-font-type1",".pfr":"application/font-tdpfr",".pfx":"application/x-pkcs12",".pgm":"image/x-portable-graymap",".pgn":"application/x-chess-pgn",".pgp":"application/pgp-encrypted",".pic":"image/x-pict",".pkg":"application/octet-stream",".pki":"application/pkixcmp",".pkipath":"application/pkix-pkipath",".pl":"text/plain",".plb":"application/vnd.3gpp.pic-bw-large",".plc":"application/vnd.mobius.plc",".plf":"application/vnd.pocketlearn",".pls":"application/pls+xml",".pml":"application/vnd.ctc-posml",".png":"image/png",".pnm":"image/x-portable-anymap",".portpkg":"application/vnd.macports.portpkg",".pot":"application/vnd.ms-powerpoint",".potm":"application/vnd.ms-powerpoint.template.macroenabled.12",".potx":"application/vnd.openxmlformats-officedocument.presentationml.template",".ppa":"application/vnd.ms-powerpoint",".ppam":"application/vnd.ms-powerpoint.addin.macroenabled.12",".ppd":"application/vnd.cups-ppd",".ppm":"image/x-portable-pixmap",".pps":"application/vnd.ms-powerpoint",".ppsm":"application/vnd.ms-powerpoint.slideshow.macroenabled.12",".ppsx":"application/vnd.openxmlformats-officedocument.presentationml.slideshow",".ppt":"application/vnd.ms-powerpoint",".pptm":"application/vnd.ms-powerpoint.presentation.macroenabled.12",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".pqa":"application/vnd.palm",".prc":"application/x-mobipocket-ebook",".pre":"application/vnd.lotus-freelance",".prf":"application/pics-rules",".ps":"application/postscript",".psb":"application/vnd.3gpp.pic-bw-small",".psd":"image/vnd.adobe.photoshop",".psf":"application/x-font-linux-psf",".ptid":"application/vnd.pvi.ptid1",".pub":"application/x-mspublisher",".pvb":"application/vnd.3gpp.pic-bw-var",".pwn":"application/vnd.3m.post-it-notes",".pwz":"application/vnd.ms-powerpoint",".py":"text/x-python",".pya":"audio/vnd.ms-playready.media.pya",".pyc":"application/x-python-code",".pyo":"application/x-python-code",".pyv":"video/vnd.ms-playready.media.pyv",".qam":"application/vnd.epson.quickanime",".qbo":"application/vnd.intu.qbo",".qfx":"application/vnd.intu.qfx",".qps":"application/vnd.publishare-delta-tree",".qt":"video/quicktime",".qwd":"application/vnd.quark.quarkxpress",".qwt":"application/vnd.quark.quarkxpress",".qxb":"application/vnd.quark.quarkxpress",".qxd":"application/vnd.quark.quarkxpress",".qxl":"application/vnd.quark.quarkxpress",".qxt":"application/vnd.quark.quarkxpress",".ra":"audio/x-pn-realaudio",".ram":"audio/x-pn-realaudio",".rar":"application/x-rar-compressed",".ras":"image/x-cmu-raster",".rcprofile":"application/vnd.ipunplugged.rcprofile",".rdf":"application/rdf+xml",".rdz":"application/vnd.data-vision.rdz",".rep":"application/vnd.businessobjects",".res":"application/x-dtbresource+xml",".rgb":"image/x-rgb",".rif":"application/reginfo+xml",".rl":"application/resource-lists+xml",".rlc":"image/vnd.fujixerox.edmics-rlc",".rld":"application/resource-lists-diff+xml",".rm":"application/vnd.rn-realmedia",".rmi":"audio/midi",".rmp":"audio/x-pn-realaudio-plugin",".rms":"application/vnd.jcp.javame.midlet-rms",".rnc":"application/relax-ng-compact-syntax",".roff":"text/troff",".rpm":"application/x-rpm",".rpss":"application/vnd.nokia.radio-presets",".rpst":"application/vnd.nokia.radio-preset",".rq":"application/sparql-query",".rs":"application/rls-services+xml",".rsd":"application/rsd+xml",".rss":"application/rss+xml",".rtf":"application/rtf",".rtx":"text/richtext",".s":"text/x-asm",".saf":"application/vnd.yamaha.smaf-audio",".sbml":"application/sbml+xml",".sc":"application/vnd.ibm.secure-container",".scd":"application/x-msschedule",".scm":"application/vnd.lotus-screencam",".scq":"application/scvp-cv-request",".scs":"application/scvp-cv-response",".scurl":"text/vnd.curl.scurl",".sda":"application/vnd.stardivision.draw",".sdc":"application/vnd.stardivision.calc",".sdd":"application/vnd.stardivision.impress",".sdkd":"application/vnd.solent.sdkm+xml",".sdkm":"application/vnd.solent.sdkm+xml",".sdp":"application/sdp",".sdw":"application/vnd.stardivision.writer",".see":"application/vnd.seemail",".seed":"application/vnd.fdsn.seed",".sema":"application/vnd.sema",".semd":"application/vnd.semd",".semf":"application/vnd.semf",".ser":"application/java-serialized-object",".setpay":"application/set-payment-initiation",".setreg":"application/set-registration-initiation",".sfd-hdstx":"application/vnd.hydrostatix.sof-data",".sfs":"application/vnd.spotfire.sfs",".sgl":"application/vnd.stardivision.writer-global",".sgm":"text/sgml",".sgml":"text/sgml",".sh":"application/x-sh",".shar":"application/x-shar",".shf":"application/shf+xml",".si":"text/vnd.wap.si",".sic":"application/vnd.wap.sic",".sig":"application/pgp-signature",".silo":"model/mesh",".sis":"application/vnd.symbian.install",".sisx":"application/vnd.symbian.install",".sit":"application/x-stuffit",".sitx":"application/x-stuffitx",".skd":"application/vnd.koan",".skm":"application/vnd.koan",".skp":"application/vnd.koan",".skt":"application/vnd.koan",".sl":"text/vnd.wap.sl",".slc":"application/vnd.wap.slc",".sldm":"application/vnd.ms-powerpoint.slide.macroenabled.12",".sldx":"application/vnd.openxmlformats-officedocument.presentationml.slide",".slt":"application/vnd.epson.salt",".smf":"application/vnd.stardivision.math",".smi":"application/smil+xml",".smil":"application/smil+xml",".snd":"audio/basic",".snf":"application/x-font-snf",".so":"application/octet-stream",".spc":"application/x-pkcs7-certificates",".spf":"application/vnd.yamaha.smaf-phrase",".spl":"application/x-futuresplash",".spot":"text/vnd.in3d.spot",".spp":"application/scvp-vp-response",".spq":"application/scvp-vp-request",".spx":"audio/ogg",".src":"application/x-wais-source",".srx":"application/sparql-results+xml",".sse":"application/vnd.kodak-descriptor",".ssf":"application/vnd.epson.ssf",".ssml":"application/ssml+xml",".stc":"application/vnd.sun.xml.calc.template",".std":"application/vnd.sun.xml.draw.template",".stf":"application/vnd.wt.stf",".sti":"application/vnd.sun.xml.impress.template",".stk":"application/hyperstudio",".stl":"application/vnd.ms-pki.stl",".str":"application/vnd.pg.format",".stw":"application/vnd.sun.xml.writer.template",".sus":"application/vnd.sus-calendar",".susp":"application/vnd.sus-calendar",".sv4cpio":"application/x-sv4cpio",".sv4crc":"application/x-sv4crc",".svd":"application/vnd.svd",".svg":"image/svg+xml",".svgz":"image/svg+xml",".swa":"application/x-director",".swf":"application/x-shockwave-flash",".swi":"application/vnd.arastra.swi",".sxc":"application/vnd.sun.xml.calc",".sxd":"application/vnd.sun.xml.draw",".sxg":"application/vnd.sun.xml.writer.global",".sxi":"application/vnd.sun.xml.impress",".sxm":"application/vnd.sun.xml.math",".sxw":"application/vnd.sun.xml.writer",".t":"text/troff",".tao":"application/vnd.tao.intent-module-archive",".tar":"application/x-tar",".tcap":"application/vnd.3gpp2.tcap",".tcl":"application/x-tcl",".teacher":"application/vnd.smart.teacher",".tex":"application/x-tex",".texi":"application/x-texinfo",".texinfo":"application/x-texinfo",".text":"text/plain",".tfm":"application/x-tex-tfm",".tgz":"application/x-gzip",".tif":"image/tiff",".tiff":"image/tiff",".tmo":"application/vnd.tmobile-livetv",".torrent":"application/x-bittorrent",".tpl":"application/vnd.groove-tool-template",".tpt":"application/vnd.trid.tpt",".tr":"text/troff",".tra":"application/vnd.trueapp",".trm":"application/x-msterminal",".tsv":"text/tab-separated-values",".ttc":"application/x-font-ttf",".ttf":"application/x-font-ttf",".twd":"application/vnd.simtech-mindmapper",".twds":"application/vnd.simtech-mindmapper",".txd":"application/vnd.genomatix.tuxedo",".txf":"application/vnd.mobius.txf",".txt":"text/plain",".u32":"application/x-authorware-bin",".udeb":"application/x-debian-package",".ufd":"application/vnd.ufdl",".ufdl":"application/vnd.ufdl",".umj":"application/vnd.umajin",".unityweb":"application/vnd.unity",".uoml":"application/vnd.uoml+xml",".uri":"text/uri-list",".uris":"text/uri-list",".urls":"text/uri-list",".ustar":"application/x-ustar",".utz":"application/vnd.uiq.theme",".uu":"text/x-uuencode",".vcd":"application/x-cdlink",".vcf":"text/x-vcard",".vcg":"application/vnd.groove-vcard",".vcs":"text/x-vcalendar",".vcx":"application/vnd.vcx",".vis":"application/vnd.visionary",".viv":"video/vnd.vivo",".vor":"application/vnd.stardivision.writer",".vox":"application/x-authorware-bin",".vrml":"model/vrml",".vsd":"application/vnd.visio",".vsf":"application/vnd.vsf",".vss":"application/vnd.visio",".vst":"application/vnd.visio",".vsw":"application/vnd.visio",".vtu":"model/vnd.vtu",".vxml":"application/voicexml+xml",".w3d":"application/x-director",".webm":"video/webm",".wad":"application/x-doom",".wav":"audio/x-wav",".wax":"audio/x-ms-wax",".wbmp":"image/vnd.wap.wbmp",".wbs":"application/vnd.criticaltools.wbs+xml",".wbxml":"application/vnd.wap.wbxml",".wcm":"application/vnd.ms-works",".wdb":"application/vnd.ms-works",".wiz":"application/msword",".wks":"application/vnd.ms-works",".wm":"video/x-ms-wm",".wma":"audio/x-ms-wma",".wmd":"application/x-ms-wmd",".wmf":"application/x-msmetafile",".wml":"text/vnd.wap.wml",".wmlc":"application/vnd.wap.wmlc",".wmls":"text/vnd.wap.wmlscript",".wmlsc":"application/vnd.wap.wmlscriptc",".wmv":"video/x-ms-wmv",".wmx":"video/x-ms-wmx",".wmz":"application/x-ms-wmz",".wpd":"application/vnd.wordperfect",".wpl":"application/vnd.ms-wpl",".wps":"application/vnd.ms-works",".wqd":"application/vnd.wqd",".wri":"application/x-mswrite",".wrl":"model/vrml",".wsdl":"application/wsdl+xml",".wspolicy":"application/wspolicy+xml",".wtb":"application/vnd.webturbo",".wvx":"video/x-ms-wvx",".x32":"application/x-authorware-bin",".x3d":"application/vnd.hzn-3d-crossword",".xap":"application/x-silverlight-app",".xar":"application/vnd.xara",".xbap":"application/x-ms-xbap",".xbd":"application/vnd.fujixerox.docuworks.binder",".xbm":"image/x-xbitmap",".xdm":"application/vnd.syncml.dm+xml",".xdp":"application/vnd.adobe.xdp+xml",".xdw":"application/vnd.fujixerox.docuworks",".xenc":"application/xenc+xml",".xer":"application/patch-ops-error+xml",".xfdf":"application/vnd.adobe.xfdf",".xfdl":"application/vnd.xfdl",".xht":"application/xhtml+xml",".xhtml":"application/xhtml+xml",".xhvml":"application/xv+xml",".xif":"image/vnd.xiff",".xla":"application/vnd.ms-excel",".xlam":"application/vnd.ms-excel.addin.macroenabled.12",".xlb":"application/vnd.ms-excel",".xlc":"application/vnd.ms-excel",".xlm":"application/vnd.ms-excel",".xls":"application/vnd.ms-excel",".xlsb":"application/vnd.ms-excel.sheet.binary.macroenabled.12",".xlsm":"application/vnd.ms-excel.sheet.macroenabled.12",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".xlt":"application/vnd.ms-excel",".xltm":"application/vnd.ms-excel.template.macroenabled.12",".xltx":"application/vnd.openxmlformats-officedocument.spreadsheetml.template",".xlw":"application/vnd.ms-excel",".xml":"application/xml",".xo":"application/vnd.olpc-sugar",".xop":"application/xop+xml",".xpdl":"application/xml",".xpi":"application/x-xpinstall",".xpm":"image/x-xpixmap",".xpr":"application/vnd.is-xpr",".xps":"application/vnd.ms-xpsdocument",".xpw":"application/vnd.intercon.formnet",".xpx":"application/vnd.intercon.formnet",".xsl":"application/xml",".xslt":"application/xslt+xml",".xsm":"application/vnd.syncml+xml",".xspf":"application/xspf+xml",".xul":"application/vnd.mozilla.xul+xml",".xvm":"application/xv+xml",".xvml":"application/xv+xml",".xwd":"image/x-xwindowdump",".xyz":"chemical/x-xyz",".zaz":"application/vnd.zzazz.deck+xml",".zip":"application/zip",".zir":"application/vnd.zul",".zirz":"application/vnd.zul",".zmm":"application/vnd.handheld-entertainment+xml"},HS=[".sh",".exe",".app",".bat",".cmd",".msi",".apk",".jar",".py",".js",".cron",".php",".asp"],YX=Object.keys(xd);import*as GS from"zod";var JX=GS.custom().refine(r=>r&&r.length>0).refine(r=>r&&r[0]instanceof File,{message:"Please upload a valid file."});import{z as fn}from"zod";var eJ=fn.object({id:fn.string(),name:fn.string(),createdAt:fn.coerce.date(),createdBy:fn.string(),updatedAt:fn.coerce.date(),updatedBy:fn.string().nullable(),organizationId:fn.string()});import{z as N}from"zod";import Sn from"zod";var Ko=Sn.object({platformSep:Sn.string(),fullPathSegments:Sn.string().array(),relativePathSegments:Sn.string().array(),relativePath:Sn.string().describe("path relative to the root test directory, i.e. my-folder/my-test.yaml"),fileName:Sn.string().describe("base name of the file including the extension, e.g. my-module.module.yaml"),lastModified:Sn.coerce.date(),createdAt:Sn.coerce.date()});var JP=N.array(Ko.extend({id:N.string(),name:N.string(),description:N.string().optional(),labels:N.string().array().optional()})),ZP=N.array(Ko.extend({id:N.string(),name:N.string(),description:N.string().optional(),content:Zi})),mJ=N.object({tests:JP,modules:ZP,labels:N.string().array()}),hJ=Ys.merge($o),gJ=N.object({schemaVersion:N.string(),stepLists:zn}),fJ=$o.partial().merge(hr.pick({id:!0})),QP={name:N.string().min(1).max(255).describe("1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID."),description:N.string().optional(),baseUrl:N.string().url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:N.string().optional().describe("For LLM: Do not include the variable unless the user explicitly asks for it and use the environment lookup tool to get the correct one before passing here."),browserType:N.nativeEnum(dn).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:Fs.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:N.string().array().optional().describe("For LLM: Only use if explicitly called for by the user. Used to create the test in the correct folder.")},SJ=N.object(QP),yJ=Ys.merge(N.object({relativeFilePath:N.string().describe("relative to project root")})),bJ=N.object({name:N.string()}),EJ=N.object({relativeFilePath:N.string()}),TJ=N.object({name:N.string()}),vJ=N.object({relativeFilePath:N.string()}),AJ=N.object({name:N.string(),description:N.string(),enabled:N.boolean(),steps:N.lazy(()=>nt.array()),testFilePath:N.string().describe("relative to the project root"),folderPath:N.string().optional().describe("user selected folder path")}),wJ=N.object({name:N.string(),description:N.string(),enabled:N.boolean()}).partial();var RJ=N.array(Of),CJ=N.object({defaultEnv:N.string().optional().describe("name of the default env, or undefined to unset")}),xJ=N.object({configFilePath:N.string().describe("full path on disk")}),_J=N.string().array(),MJ=N.object({message:N.string(),newRelativeTestPath:N.string().optional()}),_d=N.object({name:N.string(),absolutePath:N.string(),relativePath:N.string(),pathSegments:N.array(N.string()),isDirectory:N.boolean(),size:N.number(),createdAt:N.coerce.date(),modifiedAt:N.coerce.date(),accessedAt:N.coerce.date()}),jS=N.object({pathSegments:N.array(N.string())}),IJ=N.object({absolutePath:N.string(),pathSegments:N.array(N.string()),contents:N.array(_d)}),VS=N.object({pathSegments:N.array(N.string())}),WS=N.object({pathSegments:N.array(N.string()),newPathSegments:N.array(N.string())}),$S=N.object({pathSegments:N.array(N.string()),recursive:N.boolean().optional()}),PJ=N.object({success:N.boolean(),message:N.string(),pathSegments:N.array(N.string()).optional()});var nl=["node_modules","dist","bin",".git",".npm",".next","out",".yarn","__pycache__","build",".env",".venv","venv","env","wheels"],ol=nl.map(r=>`**/${r}/**`),qS=!0,yn=!1;import Ir from"chalk";import eO from"safe-stable-stringify";import tO from"truncate-json";import rO from"zod";var Yo=eO.configure({deterministic:!1});function KS(r){let e=Yo(r),{jsonString:t}=tO(e,1e4);return t}var nO=["app","version","env","namespace","host"];function ve(r){let e=r.bindings()??{},t={};for(let n of Object.keys(e)){let o=e[n];!nO.includes(n)&&typeof o=="string"&&(t[n]=o)}return t}var al=rO.enum(["debug","info","warn","error"]);var ha={debug:20,info:30,warn:40,error:50},sl={20:"debug",30:"info",40:"warn",50:"error"},Md=class r{minLogLevel;logBindings;constructor(e,t){typeof e=="string"?this.minLogLevel=ha[e]:this.minLogLevel=e,this.logBindings=t}logWithLevel(e,t,...n){try{this.logWithLevelHelper(e,t,...n)}catch(o){console.error(`Failed to log to console: ${o}`)}}logWithLevelHelper(e,t,...n){if(e<this.minLogLevel)return;let o;Array.isArray(n[0])?(o=n[0],n=n.slice(1)):typeof n[0]=="object"&&!(n[0]instanceof Error)&&Object.entries(n[0]).length&&(o={...n[0],...this.logBindings},n=n.slice(1));let i=[];if(i.push(...n),console.log(t(...i)),o&&!Array.isArray(o)){let a=Object.entries(o);for(let[s,c]of a){let l=c;c instanceof Error?(l=c.message,console.log(t(` ${s}:`,l)),console.log(t(" stack:",c.stack))):typeof c=="object"?(l=Yo(c,void 0,2),l=l.split(`
6
10
  `).map((u,d)=>d>0?` ${u}`:u).join(`
7
- `),console.log(t(` ${s}:`,l))):console.log(t(` ${s}:`,l))}}else if(o)for(let a of o){let s=a;typeof a=="object"&&(s=zo(a,void 0,2),s=s.split(`
11
+ `),console.log(t(` ${s}:`,l))):console.log(t(` ${s}:`,l))}}else if(o)for(let a of o){let s=a;typeof a=="object"&&(s=Yo(a,void 0,2),s=s.split(`
8
12
  `).map((c,l)=>l>0?` ${c}`:c).join(`
9
- `)),console.log(" ",t(s))}}getLevel(){return $s[this.minLogLevel]}setMinLevel(e){typeof e=="string"?this.minLogLevel=ta[e]:this.minLogLevel=e}log(...e){this.logWithLevel(30,vr.reset,...e)}info(...e){this.logWithLevel(30,vr.white,...e)}debug(...e){this.logWithLevel(20,vr.dim,...e)}warn(...e){this.logWithLevel(40,vr.yellow,...e)}error(...e){this.logWithLevel(50,vr.red,...e)}success(...e){this.logWithLevel(1/0,vr.green,...e)}dimmed(...e){this.logWithLevel(30,vr.dim,...e)}underline(...e){this.logWithLevel(40,vr.underline,...e)}bold(...e){this.logWithLevel(40,vr.bold,...e)}grey(...e){this.logWithLevel(20,vr.grey,...e)}child(e){return new r(this.minLogLevel,{...this.logBindings,...e})}flush(){}bindings(){return this.logBindings}},ad=class{debug(){}info(){}warn(){}error(){}success(){}dimmed(){}underline(){}bold(){}grey(){}child(){return this}getLevel(){return"error"}flush(){}bindings(){return{}}},MY=new ad,uP=typeof window>"u"&&typeof process<"u"&&Vs.safeParse(process?.env?.MOMENTIC_DEV_LOG_LEVEL).success?Vs.parse(process.env.MOMENTIC_DEV_LOG_LEVEL):30,C=new id(uP,{}),zn={info:()=>{},error:()=>{},debug:()=>{},warn:()=>{},child:()=>zn,flush:()=>{},bindings:()=>({}),getLevel:()=>"error"},js={},Ws=({logger:r,logKey:e,maxCount:t,intervalMs:n},o,i,...a)=>{let s=js[e];s?clearTimeout(s.timer):(s={count:0,totalCount:0},js[e]=s),s.totalCount++,s.count<t&&(s.count++,r.debug(o,i,...a)),s.timer=setTimeout(()=>{let c=js[e];c?.totalCount!==c?.count&&r.debug({logKey:e,totalCount:c?.totalCount,count:c?.count},`Debug logs were rate-limited for ${e}`),delete js[e]},n)};import{z as ge}from"zod";var dP=ge.array(Bo.extend({id:ge.string(),name:ge.string(),description:ge.string().optional(),labels:ge.string().array().optional()})),pP=ge.array(Bo.extend({id:ge.string(),name:ge.string(),description:ge.string().optional(),content:Fi})),If=ge.object({name:ge.string(),description:ge.string().optional(),settings:Qi.optional(),pathSegments:ge.string().array()}),kY=ge.object({id:ge.string(),fileName:ge.string(),fullPath:ge.string(),relativeFilePath:ge.string().describe("relative to project root")});var Of=ge.object({steps:Zi.array().optional(),settings:Qi.optional()}),DY=ge.object({message:ge.literal("ok")}),Lf=ge.object({tag:ge.string(),channel:ge.string(),filePath:ge.string()}),UY=ge.object({tests:dP,modules:pP,labels:ge.string().array()}),Nf=ge.object({name:ge.string(),description:ge.string(),enabled:ge.boolean()}).partial();import{z as ze}from"zod";var kf=ze.object({id:ze.string(),createdAt:ze.coerce.date(),createdBy:ze.string(),organizationId:ze.string(),name:ze.string(),description:ze.string().nullish(),enabled:ze.boolean(),schemaVersion:ze.string().describe("Schema version for steps"),parameters:ze.string().array().nullish().describe("Parameter list"),parameterEnums:ze.record(ze.string(),ze.string().array()).nullish(),defaultParameters:ze.record(ze.string(),ze.string()).nullish(),defaultCacheKey:ze.string().nullish(),defaultCacheTtl:ze.number().nullish(),defaultCacheAllInvocations:ze.boolean().nullish(),autoAuth:ze.boolean().nullish(),advanced:Su.nullish()}),WY=kf.extend({steps:ze.lazy(()=>Tt.array())}),qY=5*60*1e3,mP=$t.merge(kf.omit({id:!0,createdAt:!0,createdBy:!0,organizationId:!0,enabled:!0}));import{formatInTimeZone as XY}from"date-fns-tz";import{z as Re}from"zod";var sd=Ou.extend({aiAction:Re.boolean().optional(),stepLintSuggestions:Re.boolean().optional(),agentConfig:Re.record(Re.string(),Re.string()).optional(),aiFailureAnalysis:Re.boolean().optional(),aiPageFiltering:Re.boolean().optional().describe("rag v2 feature flag")}),ld=Re.object({fakerConstantSeed:Re.boolean().optional()}),r5=Re.object({ai:sd.optional(),githubAppInstallationId:Re.number().nullish(),githubAppSummaryMessageEnabled:Re.boolean().nullish(),githubReleaseAppInstallationId:Re.number().nullish(),gitlabAppAccessToken:Re.string().nullish(),gitlabAppBaseUrl:Re.string().nullish(),qaseAccessToken:Re.string().nullish(),testSuggestionsEnabled:Re.boolean().nullish(),browser:wu.optional(),advanced:ld.optional()}),n5=Re.object({globalOverrides:Re.record(Re.string()).optional(),agentConfig:Re.record(Re.string(),Re.string()).optional()}),o5=Re.record(Re.string(),Re.string()).nullish();import*as S from"zod";import{z as Ue}from"zod";var cd=(e=>(e.TEST_REVIEW="TEST_REVIEW",e))(cd||{});var gP=Ue.object({type:Ue.literal("DESCRIPTION_UPDATE"),thoughts:Ue.string()}),qs=Ue.discriminatedUnion("type",[gP]),hP=Ue.object({testId:Ue.string(),name:Ue.string(),orgId:Ue.string(),runId:Ue.string(),steps:Je.array(),purpose:Ue.nativeEnum(cd),details:qs.or(qs.array()).optional()});var l5=hP.pick({name:!0,orgId:!0}),fP=Ue.object({id:Ue.string(),name:Ue.string().nullish(),createdAt:Ue.string().pipe(Ue.coerce.date()).or(Ue.date()),organizationId:Ue.string(),schemaVersion:Ue.string(),runId:Ue.string().nullish(),purpose:Ue.nativeEnum(cd),details:qs.or(qs.array()).optional(),applied:Ue.boolean().nullish(),appliedAt:Ue.coerce.date().nullish()}),Df=fP.extend({steps:Je.array()});var Ks="x-momentic-cli-version",Uf="x-momentic-cli-type",Ff="x-momentic-logger-tags",SP="x-momentic-main-branch-name",yP="x-momentic-branch-name",bP="x-momentic-commit-timestamp",EP="x-momentic-last-commit-on-main",TP="x-momentic-last-commit-on-main-timestamp",vP="x-momentic-merged-branch-name",Bf="x-momentic-session-id",R5=S.object({error:S.boolean(),reason:S.string(),message:S.string()}),C5=gt.merge(ku),zf=ps,x5=gt.merge(ku);var _5=gt.merge(Ih).extend({useConsensus:S.boolean().optional(),attemptNumber:S.number().optional()}),ud=Og,M5=gt.merge(Lh),Hf=eh,P5=gt.merge(Oh),Gf=Qg,I5=gt.merge(_h),jf=Jg,O5=gt.merge(Mh),Vf=Yg,L5=gt.merge(Ph);var N5=gt.merge(Uh),k5=S.object({testPaths:S.string().array().describe("can be either hyphenated, lowercase test names or UUIDs"),env:S.string().optional(),all:S.boolean().optional(),urlOverride:S.string().optional(),customHeaders:S.record(S.string(),S.string()).optional(),testInputMatrix:S.record(S.string(),S.string()).array().optional()}),$f=S.object({queuedTests:S.unknown().array(),runIds:S.string().uuid().array(),runGroupId:S.string().optional()});var D5=S.string().array(),U5=S.union([S.object({paths:S.string().array().describe("run specific test paths (e.g. todo-test)"),all:S.boolean().describe("run all tests").optional()}),S.object({path:S.string().describe("deprecated; present for backcompat")})]),Wf=S.object({tests:S.record(S.string().describe("Test name"),S.string().describe("Test YAML")),modules:S.record(S.string().describe("Module name"),S.string().describe("Module YAML"))}),AP=S.object({test:S.string().describe("test YAML"),modules:S.record(S.string().describe("moduleId"),S.string().describe("module YAML"))}),F5=AP.array(),B5=S.object({testId:S.string(),schemaVersion:S.string()}).merge(Pn);function dd(r){let{gitMainBranch:e,gitBranchName:t,gitCommitTimestamp:n,lastCommitOnMainSha:o,lastCommitOnMainTimestamp:i}=r,a={};return e&&(a[SP]=encodeURIComponent(e)),t&&(a[yP]=encodeURIComponent(t)),n&&(a[bP]=n.toISOString()),o&&(a[EP]=encodeURIComponent(o)),i&&(a[TP]=i.toISOString()),r.mergedGitBranchName&&(a[vP]=encodeURIComponent(r.mergedGitBranchName)),a}var z5=S.object({entries:S.array(jg),testId:S.string()}),H5=S.object({entries:S.array(rf),testId:S.string()}),G5=S.object({testId:S.string()});function qf(r){return S.record(S.unknown()).transform(e=>{let t={};for(let[n,o]of Object.entries(e)){let i=r.safeParse(o);i.success&&(t[n]=i.data)}return t})}var Kf=qf(Vg),Yf=qf(nf),Xf=S.object({trigger:S.nativeEnum(Kt),status:S.nativeEnum(ye),startedAt:S.coerce.date().optional(),gitCommitSha:S.string().optional(),gitCommitShaShort:S.string().optional(),gitCommitTimestamp:S.coerce.date().optional(),gitBranchName:S.string().optional(),gitOriginUrl:S.string().optional(),gitCommitMessage:S.string().optional(),gitCommitAuthorName:S.string().optional(),githubRepository:S.string().optional(),gitlabProjectPath:S.string().optional(),pipelineId:S.string().optional(),cliVersion:S.string().optional()}),j5=S.object({id:S.string()}),Jf=S.object({status:S.nativeEnum(ye),updatedAt:S.coerce.date().optional(),finishedAt:S.coerce.date().optional()}),Zf=S.object({stepsSnapshot:S.array(S.record(S.unknown())).optional(),runGroupId:S.string().optional(),testId:S.string(),testName:S.string(),resolvedBaseUrl:S.string().optional(),environmentName:S.string().optional(),labels:S.array(S.string()).optional(),cliVersion:S.string().optional(),trigger:S.nativeEnum(Kt),schemaVersion:S.string().optional(),section:S.nativeEnum(Ts).optional(),resolvedInputs:S.record(S.string(),S.string()).optional(),quarantined:S.boolean().optional().default(!1),quarantinedReason:S.string().optional()}),V5=S.object({id:S.string()}),wP=Lu.pick({id:!0,status:!0,testName:!0,testId:!0,test:!0,failureReason:!0,failureDetails:!0}),Qf=wP.array(),eS=Lu.pick({startedAt:!0,finishedAt:!0,updatedAt:!0,results:!0,beforeResults:!0,afterResults:!0,status:!0,failureDetails:!0,failureReason:!0,resolvedBaseUrl:!0,environmentName:!0,labels:!0,cliVersion:!0,resolvedInputs:!0,attempts:!0,flake:!0}).partial(),$5=S.object({id:S.string()}),tS=S.object({status:S.nativeEnum(ye),finishedAt:S.coerce.date().optional(),schemaVersion:S.string().optional().default("1.0.19"),results:S.record(S.string(),S.unknown()).array().optional(),beforeResults:S.record(S.string(),S.unknown()).array().optional(),afterResults:S.record(S.string(),S.unknown()).array().optional()}),W5=S.object({screenshot:S.string()}),rS=S.object({key:S.string()}),nS=S.object({orgId:S.string(),userId:S.string()}),oS=S.array(dh),q5=S.record(S.string(),S.union([S.string(),S.boolean()])),K5=S.object({paths:S.string().array(),env:S.string().optional(),urlOverride:S.string().optional(),customHeaders:S.record(S.string(),S.string()).optional()}),iS=S.object({suiteRunIds:S.string().array(),runGroupIds:S.string().array()}),Y5=S.object({suiteRunIds:S.string().array()}),X5=wh.array(),J5=S.object({runGroupIds:S.string().array()}),RP=S.object({uploadUrl:S.string()}),Z5=gt.merge(Nh),Q5=gt.merge(Dh),e4=gt.merge(kh),CP=S.object({testId:S.string().optional().default(""),testName:S.string().optional().default(""),suiteId:S.string().optional().default(""),suiteName:S.string().optional().default(""),creditsUsed:S.number().optional()}),xP=S.object({transactionId:S.string(),timestamp:S.string(),event:S.nativeEnum(Wi),properties:CP}),t4=xP.array(),aS=Df.omit({steps:!0}).extend({steps:S.array(S.record(S.string(),S.unknown())).describe("unparsed ResolvedStep[]")}),r4=S.object({limit:S.number().max(10).optional(),afterTime:S.number().optional()}),sS=Th.array(),n4=S.object({applied:S.boolean().optional(),appliedAt:S.coerce.date().optional()}),lS=RP.extend({id:S.string()}),o4=S.object({runGroupId:S.string().uuid().optional()}),cS=S.object({runGroupId:S.string().uuid()}),uS=S.object({quarantined:S.object({testId:S.string().uuid(),quarantinedAt:S.coerce.date(),quarantinedBy:S.string().optional(),quarantinedReason:S.string()}).array()}),i4=S.object({testId:S.string().uuid(),testName:S.string().optional(),reason:S.string(),gitLocalUsername:S.string().optional(),gitLocalEmail:S.string().optional(),gitLocalName:S.string().optional()}),a4=S.object({testName:S.string().optional(),reason:S.string().optional(),gitLocalUsername:S.string().optional(),gitLocalEmail:S.string().optional(),gitLocalName:S.string().optional()}),s4=gt.merge(Hh),l4=gt.merge(Gh),c4=S.object({apkToInstall:S.object({channel:S.string(),tag:S.string().optional()}).optional(),hostname:S.string().optional(),region:S.nativeEnum(Ki).optional()}),dS=S.object({name:S.string(),webRtcUrl:S.string(),adbUrl:S.string(),token:S.string(),apkDownloadUrl:S.string().optional(),region:S.string().optional()}),u4=S.object({channel:S.string(),tag:S.string(),md5:S.string()}),pS=S.object({id:S.string(),uploadUrl:S.string().optional(),downloadUrl:S.string(),md5:S.string().optional()}),mS=S.object({assets:S.array(S.object({channel:S.string(),tag:S.string(),md5:S.string(),createdAt:S.number().describe("Unix timestamp in milliseconds")}))});import{z as J}from"zod";var _P=3,m4=J.object({localTestId:J.string(),quarantinedAt:J.date(),quarantinedBy:J.string().optional(),quarantinedReason:J.string(),quarantinedByGitEmail:J.string().optional(),quarantinedByGitName:J.string().optional(),quarantinedByGitUsername:J.string().optional()}).or(J.object({cloudTestId:J.string(),quarantinedAt:J.date(),quarantinedBy:J.string().optional(),quarantinedReason:J.string(),quarantinedByGitEmail:J.string().optional(),quarantinedByGitName:J.string().optional(),quarantinedByGitUsername:J.string().optional()})),gS=(t=>(t.QUARANTINE="QUARANTINE",t.UNQUARANTINE="UNQUARANTINE",t))(gS||{});var pd=J.object({name:J.string(),description:J.string().nullish(),effect:J.nativeEnum(gS),labels:J.array(J.string()),githubRepository:J.string().nullish(),gitlabProjectPath:J.string().nullish(),gitBranchName:J.string().nullish()}),MP=J.object({type:J.literal("LAST_N_RUNS"),lastN:J.number().min(_P).max(10)}),PP=J.object({type:J.literal("LAST_N_HOURS"),lastN:J.number().min(1).max(24)}),IP=J.object({type:J.literal("LAST_N_DAYS"),lastN:J.number().min(1).max(7)}),md=J.discriminatedUnion("type",[MP,PP,IP]),OP=J.object({flakeRateThreshold:J.number().min(1).max(100),evaluationWindow:md}),LP=pd.extend({type:J.literal("FLAKE_RATE"),config:OP}),NP=J.object({passRateThreshold:J.number().min(1).max(100),evaluationWindow:md}),kP=pd.extend({type:J.literal("PASS_RATE"),config:NP}),DP=J.object({failureCountThreshold:J.number().min(0),evaluationWindow:md}),UP=pd.extend({type:J.literal("FAILURE_COUNT"),config:DP}),g4=J.discriminatedUnion("type",[LP,kP,UP]);import{z as He}from"zod";var S4=He.object({repositoriesIndexed:He.boolean(),indexingInProgress:He.boolean(),indexesOutdated:He.boolean()}),hS=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(hS||{}),fS=(s=>(s.Success="success",s.Failure="failure",s.Neutral="neutral",s.Cancelled="cancelled",s.Skipped="skipped",s.TimedOut="timed_out",s.ActionRequired="action_required",s))(fS||{}),y4=He.object({name:He.string(),status:He.nativeEnum(hS),conclusion:He.nativeEnum(fS).nullable()}),ra=He.object({sha:He.string(),message:He.string(),author:He.object({name:He.string().optional(),email:He.string().optional(),date:He.coerce.date().optional()}),committer:He.object({name:He.string().optional(),email:He.string().optional(),date:He.coerce.date().optional()})}),gd=He.object({mergedBranch:He.string().optional()});import{z as Ne}from"zod";var SS=Ne.object({orgId:Ne.string(),cacheKeys:Ne.string().array()}),T4=Ne.object({keyParams:SS,clientMetadata:Ne.string(),lockAcquisitionTimeoutMs:Ne.number().optional()}),yS=Ne.object({acquired:Ne.boolean(),acquiredByMetadata:Ne.string(),keyPrefix:Ne.string()}),v4=Ne.object({keyPrefix:Ne.string(),result:Ne.string(),ttlMs:Ne.number()}),A4=Ne.union([Ne.object({keyPrefix:Ne.string()}),SS]),FP=Ne.object({remainingTtlMs:Ne.number(),value:Ne.string().nullish()}),w4=Ne.object({results:Ne.record(Ne.string(),FP),activeLocks:Ne.string().array()});var R4=5*60*1e3;var M4=90*24*60*60*1e3,P4=7*24*60*60*1e3;import{z as bS}from"zod";var L4=bS.object({quarantineNotifications:bS.string().nullish()});import{z as lt}from"zod";var BP=lt.object({version:lt.string(),json:lt.record(lt.unknown()),hash:lt.string()}),ES=lt.record(lt.unknown()),U4=lt.object({newSvgs:lt.array(BP),metadata:ES.optional()}),zP=lt.object({version:lt.string(),json:lt.record(lt.unknown()).nullish(),hash:lt.string(),description:lt.string().nullish(),metadata:ES.nullish()}),TS=lt.record(lt.string().describe("icon hash"),zP);import{z as De}from"zod";var hd=De.object({assertion:De.string().describe("A human readable assertion that evaluates to either true or false depending on the state of the system.")}),HP=De.object({instruction:De.string().describe("Human readable instruction to execute the step. Instructions should only describe concrete actions that need to be taken. Any checks or assertions should be described in the preConditions, postConditions, or expectedResults."),expectedResults:hd.array().optional().describe("Human readable description of the expected results after the step is executed. Each expected result should contain a single assertion that evaluates to true or false.")}),vS=HP.extend({subSteps:De.lazy(()=>vS.array().optional()).describe("More granular steps to be take to achieve the current step's higher level objective.")}),AS=De.object({name:De.string().describe("Short name describing the test plan"),description:De.string().nullish().transform(r=>r??void 0).describe("Longer form description of the high level goal of the test plan")}),wS=AS.extend({id:De.string(),createdAt:De.coerce.date(),updatedAt:De.coerce.date(),updatedBy:De.string(),createdBy:De.string(),test:De.object({id:De.string(),name:De.string()}).nullish().transform(r=>r??void 0)}),H4=wS.extend({testGenRuns:De.tuple([]).or(De.tuple([De.object({id:De.string(),startedAt:De.coerce.date(),status:De.nativeEnum(ye)})]))}),RS=De.object({preConditions:hd.array().nullish().transform(r=>r??[]),postConditions:hd.array().nullish().transform(r=>r??[]),steps:vS.array().nullish().transform(r=>r??[])}),G4=wS.extend({plan:RS.nullish().transform(r=>r??{preConditions:[],postConditions:[],steps:[]})}),GP=AS.extend({plan:RS.nullish().transform(r=>r??{preConditions:[],postConditions:[],steps:[]})}),j4=GP.array().nullish().transform(r=>r??[]);import{validator as jP}from"@exodus/schemasafe";function CS(r){let e;try{e=JSON.parse(r)}catch(t){return`The schema is not valid JSON. ${t}`}try{jP(e)}catch(t){return`The schema is not a valid JSON schema. ${t}`}}var xS=r=>{r.extraHeaders&&(r.extraHeaders=Object.fromEntries(Object.entries(r.extraHeaders).filter(([e,t])=>e.trim()&&t.trim())))};var Ys=class{async prepareGoldenScreenshotForComparison(e,t,n){return n}};import{z as a3}from"zod";var Xs=class{async resolveEntries(){}async saveEntries(){}};import{z as fd}from"zod";var _S=fd.object({parentStepIdChain:fd.array(fd.string()),result:dr});import{z as X}from"zod";var VP=X.object({step:Je,status:X.nativeEnum(Ze),startedAt:X.coerce.date(),finishedAt:X.coerce.date().optional(),healMetadata:X.object({healType:X.nativeEnum(zi).or(X.literal("AI")),healedAt:X.coerce.date()}).optional(),beforeSnapshotId:X.string().uuid().optional(),afterSnapshotId:X.string().uuid().optional(),message:X.string().optional()}),$P=VP.extend({finishedAt:X.coerce.date().optional().transform(r=>r??new Date)}),w3=$P.extend({step:X.unknown()}),MS="1.0.0",Sd=tS.extend({id:X.string().uuid().optional(),startedAt:X.coerce.date(),runAttemptSchemaVersion:X.string().optional(),schemaVersion:X.string().optional().default("1.0.19"),results:X.record(X.string(),X.unknown()).array().optional(),beforeResults:X.record(X.string(),X.unknown()).array().optional(),afterResults:X.record(X.string(),X.unknown()).array().optional()}),PS=Sd.extend({finishedAt:X.coerce.date().optional().transform(r=>r??new Date)}),R3=Sd.merge(Hi),C3=PS.merge(Hi),IS=X.object({results:X.array(dr),beforeResults:X.array(dr).optional(),afterResults:X.array(dr).optional()}),x3=Sd.merge(IS),_3=PS.merge(IS),WP=eS.merge(Zf).extend({executionType:X.nativeEnum(Oo).optional().default("WEB"),testId:X.string().uuid(),testDescription:X.string().optional(),runGroupId:X.string().uuid(),status:X.nativeEnum(ye),startedAt:X.coerce.date(),attempts:X.number(),failureRecoveryDetails:X.record(X.unknown()).optional()}),M3=WP.extend({finishedAt:X.coerce.date().optional().transform(r=>r??new Date)}),qP=Xf.merge(Jf).extend({id:X.string().uuid().optional(),startedAt:X.coerce.date(),cliVersion:X.string(),labels:X.string().array().optional().default([])}),na=qP.extend({updatedAt:X.coerce.date().optional().transform(r=>r??new Date),finishedAt:X.coerce.date().optional().transform(r=>r??new Date)});import{fileURLToPath as ZP}from"url";var NS,QP=ZP(import.meta.url),eI=YP(QP);NS=JP(eI,"..");var oa=NS;C.info(`Setting APPIUM_HOME to ${oa}`);process.env.APPIUM_HOME=oa;var tI="If you do not have Java installed, please download the JDK 24 from https://www.oracle.com/java/technologies/downloads/, move it to your home directory, and then set the JAVA_HOME environment variable in your shell profile to the JDK path.",rI="If you do not have Android Studio installed, please download it first from https://developer.android.com/studio and then follow all setup instructions in the Android Studio app.",nI="Follow the instructions at https://developer.android.com/tools/variables to set the ANDROID_HOME environment variable.",kS="On Mac OS, the SDK is typically installed at /Users/<username>/Library/Android/sdk.",DS="On Windows, the SDK is typically installed at C:\\Users\\<username>\\AppData\\Local\\Android\\Sdk.";function oI(){if(!process.env.JAVA_HOME)C.warn("JAVA_HOME is not set. Some Appium drivers and Android tools may not work as expected.");else{process.platform==="darwin"&&/\.jdk\/?$/.test(process.env.JAVA_HOME)&&C.warn("JAVA_HOME appears to point at a *.jdk bundle, which is incorrect. The correct path should be formatted like '<bundle>/Contents/Home'.");let e=((t,n)=>XP(t,"bin",process.platform==="win32"?`${n}.exe`:n))(process.env.JAVA_HOME,"java");KP(e)||C.warn(`JAVA_HOME does not appear to point to a valid Java installation: expected the 'java' binary to exist at ${e}`)}try{OS("java --version",{stdio:"pipe",encoding:"utf-8"})||(C.error(`Could not find a Java installation. ${tI}`),process.exit(1))}catch(r){C.error(`Got error while checking if the Java JDK is installed: ${r}`),process.exit(1)}}function iI(){process.env.ANDROID_HOME||(C.error(`The ANDROID_HOME environment variable is not set. ${nI} ${LS()==="darwin"?kS:DS}`),process.exit(1))}function aI(){let r=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb";try{OS(`${r} version`,{stdio:"pipe",encoding:"utf-8"})||(C.error(`Could not find the Android Debug Bridge (ADB) tool locally. This tool is included with Android Studio. ${rI} Finally, ensure that the 'adb' command is available in your shell. ${LS()==="darwin"?kS:DS}`),process.exit(1))}catch(e){C.error(`Got error while checking if ADB is installed: ${e}`),process.exit(1)}}function US(){oI(),iI(),aI()}import{create as sI,windowedFiniteBatchScheduler as lI}from"@yornaath/batshit";import cI from"ws";var uI=100,dI=2500,FS=4e3,pI="\u2026";async function Js({driver:r,onLogs:e}){await r.execute("mobile: startLogsBroadcast");let t=sI({fetcher:async l=>{e(l)},resolver:()=>{},scheduler:lI({windowMs:dI,maxBatchSize:uI})}),{hostname:n="localhost",port:o=4723,protocol:i="http"}=r.options,s=`${i==="https"?"wss":"ws"}://${n}:${o}/ws/session/${r.sessionId}/appium/device/logcat`,c=new cI(s);return c.on("message",l=>{let u=l.toString().trim();u.length!==0&&(u.length>FS&&(u=u.slice(0,FS)+pI),t.fetch(u).catch(()=>{}))}),async()=>{try{c.close()}catch{}try{await r.execute("mobile: stopLogsBroadcast")}catch{}}}import{Server as LU}from"socket.io";import{randomUUID as AI}from"crypto";import{faker as mI}from"@faker-js/faker";import gI from"assert";import hI from"axios";import*as fI from"child_process";import SI from"moment";import*as yI from"otpauth";import bI from"pg";var dn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var BS=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 V(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:p}=e;if(p.aborted)return c(BS(p));l=()=>c(BS(p)),p.addEventListener("abort",l,{once:!0})}let u=()=>{if(e.signal&&e.signal.removeEventListener("abort",l),n)try{s(n())}catch(p){c(p)}else{typeof r.cancel=="function"&&Promise.resolve().then(()=>r.cancel()).catch(()=>{});let p=o instanceof Error?o:new dn(o??`Promise timed out after ${t}ms`);c(p)}};a=i.setTimeout(u,t);let d=()=>{i.clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",l)};Promise.resolve(r).then(p=>{d(),s(p)}).catch(p=>{d(),c(p)})})}async function zS(r){let e;try{e=new URL(r.url).hostname}catch{}let t=[];return r.headers.getSetCookie()?.forEach(n=>{let o=xs(n,e);t.push(...o)}),t}function EI(r,e){if(!r&&!e)return;let t;if(r){let{url:o,options:i}=r;t=new Request(o,i)}let n;if(e){let{body:o,options:i}=e;n=new Response(o??null,i)}return{request:t,response:n}}async function TI(r,e){switch(r){case"RAW":return e;case"RESPONSE":if(e instanceof Response){let t=[];return e.headers.forEach((o,i)=>{t.push([i,o])}),{status:e.status,headers:t,body:await e.text()}}else throw new Error("Result is not a Response object")}}var vI=Object.getPrototypeOf(async function(){}).constructor;async function HS(r,e,t){let n=e.code;e.options.fragment&&(n=`return ${e.code}`);let{env:o,additionalBindings:i,request:a,response:s}=e.bindings,c=e.tools,l={},u=(_,v)=>{o[_]=v,l[_]=v},d={},p=(_,v)=>{o[_]=v,d[_]=v},g;n.includes("Octokit")&&(g=(await import("@octokit/rest")).Octokit);let m;n.includes("createAppAuth")&&(m=(await import("@octokit/auth-app")).createAppAuth);let h=async()=>await Promise.resolve(new vI("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","ai","mock",...Object.keys(i??{}),n)(hI,SI,c.fakerInstance??mI,gI,bI,g,m,yI,fI,zS,o,e.options.disallowVariableUpdates?void 0:u,e.options.disallowVariableUpdates?void 0:p,v=>c.sms.send(v),v=>c.sms.fetchLatest(v),c.email,c.sms,c.ai,EI(a,s),...Object.values(i??{}))),f=!0,b,E;try{let _=await V(h(),{milliseconds:e.options.timeoutMs,message:`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`,signal:e.signal});b=await TI(e.options.responseSerialization??"RAW",_)}catch(_){t.error({err:_,env:o,evalCode:n},`[${r}] Error executing code: ${_}`),f=!1,_ instanceof dn?E=`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`:E=_ instanceof Error?_.message:`${_}`}return{result:b,variableUpdates:l,persistentVariableUpdates:d,success:f,error:E}}async function GS({code:r,fragment:e,context:t,localTools:n,logger:o,signal:i,timeoutMs:a=sn,disallowVariableUpdates:s,additionalBindings:c,responseSerialization:l,mock:u}){let d=AI(),p=await HS(d,{code:r,options:{fragment:e,timeoutMs:a,disallowVariableUpdates:s,responseSerialization:l},bindings:{...t.toObjectCopy(),...u,additionalBindings:c},tools:n,signal:i},o);return C.debug(`[${d}] Got execution result: ${JSON.stringify(p)}`),p}import{createHmac as wI,randomUUID as RI}from"crypto";import CI from"fetch-retry";var xI=CI(global.fetch,{retries:3,retryOn:function(r,e,t){return!!(e!==null||t&&t.status>=500)},retryDelay:function(r){return Math.pow(2,r)*500}}),jS=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,VS=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function $S({orgId:r,code:e,fragment:t,context:n,timeoutMs:o=sn,retries:i=2,signal:a,logger:s,additionalBindings:c,disallowVariableUpdates:l,responseSerialization:u,mock:d}){if(!jS)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,g,m=0;if(!VS)throw new Error("Missing lambda auth secret.");let h=wI("sha256",VS).update(r).digest("hex");for(;m<=i;){m++,a?.throwIfAborted();let b={id:RI(),orgId:r,momenticLambdaAuthHash:h,code:e,fragment:t,state:{...n.toObjectCopy(),...d,additionalBindings:c},timeoutMs:o,disallowVariableUpdates:l,responseSerialization:u};try{if(p=await V(xI(jS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),{milliseconds:o,message:`Timeout of ${o}ms exceeded for code execution`,signal:a}),!p)throw new Error("Got empty response from code evaluation server");if(!p.ok)throw new Error(`Code evaluation server returned error code ${p.status}`);g=void 0;break}catch(E){g=E}}if(g)throw s.error({err:g},"Failed to evaluate code remotely"),g;if(!p)throw new Error(`An unexpected code evaluation error occurred${g?`: ${g}`:""}`);let f;try{f=df.parse(await p.json())}catch(b){throw new Error(`Code evaluation server returned invalid response: ${b}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function Ar(r){let e;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)e=await $S(r);else if(r.localTools)e=await GS({...r,localTools:r.localTools});else throw new Error("No code evaluation environment available");if(e.error){let t=`Failed to evaluate code:
13
+ `)),console.log(" ",t(s))}}getLevel(){return sl[this.minLogLevel]}setMinLevel(e){typeof e=="string"?this.minLogLevel=ha[e]:this.minLogLevel=e}log(...e){this.logWithLevel(30,Ir.reset,...e)}info(...e){this.logWithLevel(30,Ir.white,...e)}debug(...e){this.logWithLevel(20,Ir.dim,...e)}warn(...e){this.logWithLevel(40,Ir.yellow,...e)}error(...e){this.logWithLevel(50,Ir.red,...e)}success(...e){this.logWithLevel(1/0,Ir.green,...e)}dimmed(...e){this.logWithLevel(30,Ir.dim,...e)}underline(...e){this.logWithLevel(40,Ir.underline,...e)}bold(...e){this.logWithLevel(40,Ir.bold,...e)}grey(...e){this.logWithLevel(20,Ir.grey,...e)}child(e){return new r(this.minLogLevel,{...this.logBindings,...e})}flush(){}bindings(){return this.logBindings}},Id=class{debug(){}info(){}warn(){}error(){}success(){}dimmed(){}underline(){}bold(){}grey(){}child(){return this}getLevel(){return"error"}flush(){}bindings(){return{}}},BJ=new Id,oO=typeof window>"u"&&typeof process<"u"&&al.safeParse(process?.env?.MOMENTIC_DEV_LOG_LEVEL).success?al.parse(process.env.MOMENTIC_DEV_LOG_LEVEL):30,x=new Md(oO,{}),Xn={info:()=>{},error:()=>{},debug:()=>{},warn:()=>{},child:()=>Xn,flush:()=>{},bindings:()=>({}),getLevel:()=>"error"},il={},ll=({logger:r,logKey:e,maxCount:t,intervalMs:n},o,i,...a)=>{let s=il[e];s?clearTimeout(s.timer):(s={count:0,totalCount:0},il[e]=s),s.totalCount++,s.count<t&&(s.count++,r.debug(o,i,...a)),s.timer=setTimeout(()=>{let c=il[e];c?.totalCount!==c?.count&&r.debug({logKey:e,totalCount:c?.totalCount,count:c?.count},`Debug logs were rate-limited for ${e}`),delete il[e]},n)};import{z as Ee}from"zod";var iO=Ee.array(Ko.extend({id:Ee.string(),name:Ee.string(),description:Ee.string().optional(),labels:Ee.string().array().optional()})),aO=Ee.array(Ko.extend({id:Ee.string(),name:Ee.string(),description:Ee.string().optional(),content:Zi})),YS=Ee.object({name:Ee.string(),description:Ee.string().optional(),settings:ma.optional(),pathSegments:Ee.string().array()}),WJ=Ee.object({id:Ee.string(),fileName:Ee.string(),fullPath:Ee.string(),relativeFilePath:Ee.string().describe("relative to project root")});var XS=Ee.object({steps:pa.array().optional(),settings:ma.optional()}),$J=Ee.object({message:Ee.literal("ok")}),JS=Ee.object({tag:Ee.string(),channel:Ee.string(),filePath:Ee.string()}),qJ=Ee.object({tests:iO,modules:aO,labels:Ee.string().array()}),ZS=Ee.object({name:Ee.string(),description:Ee.string(),enabled:Ee.boolean()}).partial();import{z as We}from"zod";var QS=We.object({id:We.string(),createdAt:We.coerce.date(),createdBy:We.string(),organizationId:We.string(),name:We.string(),description:We.string().nullish(),enabled:We.boolean(),schemaVersion:We.string().describe("Schema version for steps"),parameters:We.string().array().nullish().describe("Parameter list"),parameterEnums:We.record(We.string(),We.string().array()).nullish(),defaultParameters:We.record(We.string(),We.string()).nullish(),defaultCacheKey:We.string().nullish(),defaultCacheTtl:We.number().nullish(),defaultCacheAllInvocations:We.boolean().nullish(),autoAuth:We.boolean().nullish(),advanced:$u.nullish()}),r6=QS.extend({steps:We.lazy(()=>xt.array())}),n6=5*60*1e3,sO=Jt.merge(QS.omit({id:!0,createdAt:!0,createdBy:!0,organizationId:!0,enabled:!0}));import{formatInTimeZone as a6}from"date-fns-tz";import{z as Me}from"zod";var Pd=sd.extend({aiAction:Me.boolean().optional(),stepLintSuggestions:Me.boolean().optional(),agentConfig:Me.record(Me.string(),Me.string()).optional(),aiFailureAnalysis:Me.boolean().optional(),aiPageFiltering:Me.boolean().optional().describe("rag v2 feature flag")}),Od=Me.object({fakerConstantSeed:Me.boolean().optional()}),p6=Me.object({ai:Pd.optional(),githubAppInstallationId:Me.number().nullish(),githubAppSummaryMessageEnabled:Me.boolean().nullish(),githubReleaseAppInstallationId:Me.number().nullish(),gitlabAppAccessToken:Me.string().nullish(),gitlabAppBaseUrl:Me.string().nullish(),qaseAccessToken:Me.string().nullish(),testSuggestionsEnabled:Me.boolean().nullish(),browser:ed.optional(),advanced:Od.optional()}),m6=Me.object({globalOverrides:Me.record(Me.string()).optional(),agentConfig:Me.record(Me.string(),Me.string()).optional()}),h6=Me.record(Me.string(),Me.string()).nullish();import*as y from"zod";import{z as Ge}from"zod";var Ld=(e=>(e.TEST_REVIEW="TEST_REVIEW",e))(Ld||{});var lO=Ge.object({type:Ge.literal("DESCRIPTION_UPDATE"),thoughts:Ge.string()}),cl=Ge.discriminatedUnion("type",[lO]),cO=Ge.object({testId:Ge.string(),name:Ge.string(),orgId:Ge.string(),runId:Ge.string(),steps:nt.array(),purpose:Ge.nativeEnum(Ld),details:cl.or(cl.array()).optional()});var y6=cO.pick({name:!0,orgId:!0}),uO=Ge.object({id:Ge.string(),name:Ge.string().nullish(),createdAt:Ge.string().pipe(Ge.coerce.date()).or(Ge.date()),organizationId:Ge.string(),schemaVersion:Ge.string(),runId:Ge.string().nullish(),purpose:Ge.nativeEnum(Ld),details:cl.or(cl.array()).optional(),applied:Ge.boolean().nullish(),appliedAt:Ge.coerce.date().nullish()}),ey=uO.extend({steps:nt.array()});var ul="x-momentic-cli-version",ty="x-momentic-cli-type",ry="x-momentic-logger-tags",dO="x-momentic-main-branch-name",pO="x-momentic-branch-name",mO="x-momentic-commit-timestamp",hO="x-momentic-last-commit-on-main",gO="x-momentic-last-commit-on-main-timestamp",fO="x-momentic-merged-branch-name",ny="x-momentic-session-id",k6=y.object({error:y.boolean(),reason:y.string(),message:y.string()}),D6=bt.merge(ud),oy=ws,U6=bt.merge(ud);var F6=bt.merge(Jf).extend({useConsensus:y.boolean().optional(),attemptNumber:y.number().optional()}),Nd=dg,B6=bt.merge(Qf),iy=Ef,z6=bt.merge(Zf),ay=bf,H6=bt.merge(Kf),sy=Sf,G6=bt.merge(Yf),ly=gf,j6=bt.merge(Xf);var V6=bt.merge(nS),W6=y.object({testPaths:y.string().array().describe("can be either hyphenated, lowercase test names or UUIDs"),env:y.string().optional(),all:y.boolean().optional(),urlOverride:y.string().optional(),customHeaders:y.record(y.string(),y.string()).optional(),testInputMatrix:y.record(y.string(),y.string()).array().optional()}),cy=y.object({queuedTests:y.unknown().array(),runIds:y.string().uuid().array(),runGroupId:y.string().optional()});var $6=y.string().array(),q6=y.union([y.object({paths:y.string().array().describe("run specific test paths (e.g. todo-test)"),all:y.boolean().describe("run all tests").optional()}),y.object({path:y.string().describe("deprecated; present for backcompat")})]),uy=y.object({tests:y.record(y.string().describe("Test name"),y.string().describe("Test YAML")),modules:y.record(y.string().describe("Module name"),y.string().describe("Module YAML"))}),SO=y.object({test:y.string().describe("test YAML"),modules:y.record(y.string().describe("moduleId"),y.string().describe("module YAML"))}),K6=SO.array(),Y6=y.object({testId:y.string(),schemaVersion:y.string()}).merge(Hn);function kd(r){let{gitMainBranch:e,gitBranchName:t,gitCommitTimestamp:n,lastCommitOnMainSha:o,lastCommitOnMainTimestamp:i}=r,a={};return e&&(a[dO]=encodeURIComponent(e)),t&&(a[pO]=encodeURIComponent(t)),n&&(a[mO]=n.toISOString()),o&&(a[hO]=encodeURIComponent(o)),i&&(a[gO]=i.toISOString()),r.mergedGitBranchName&&(a[fO]=encodeURIComponent(r.mergedGitBranchName)),a}var X6=y.object({entries:y.array(_g),testId:y.string()}),J6=y.object({entries:y.array(vS),testId:y.string()}),Z6=y.object({testId:y.string()});function dy(r){return y.record(y.unknown()).transform(e=>{let t={};for(let[n,o]of Object.entries(e)){let i=r.safeParse(o);i.success&&(t[n]=i.data)}return t})}var py=dy(Mg),my=dy(AS),hy=y.object({trigger:y.nativeEnum(er),status:y.nativeEnum(Ae),startedAt:y.coerce.date().optional(),gitCommitSha:y.string().optional(),gitCommitShaShort:y.string().optional(),gitCommitTimestamp:y.coerce.date().optional(),gitBranchName:y.string().optional(),gitOriginUrl:y.string().optional(),gitCommitMessage:y.string().optional(),gitCommitAuthorName:y.string().optional(),githubRepository:y.string().optional(),gitlabProjectPath:y.string().optional(),pipelineId:y.string().optional(),cliVersion:y.string().optional()}),Q6=y.object({id:y.string()}),gy=y.object({status:y.nativeEnum(Ae),updatedAt:y.coerce.date().optional(),finishedAt:y.coerce.date().optional()}),fy=y.object({stepsSnapshot:y.array(y.record(y.unknown())).optional(),runGroupId:y.string().optional(),testId:y.string(),testName:y.string(),resolvedBaseUrl:y.string().optional(),environmentName:y.string().optional(),labels:y.array(y.string()).optional(),cliVersion:y.string().optional(),trigger:y.nativeEnum(er),schemaVersion:y.string().optional(),section:y.nativeEnum(Hs).optional(),resolvedInputs:y.record(y.string(),y.string()).optional(),quarantined:y.boolean().optional().default(!1),quarantinedReason:y.string().optional()}),e8=y.object({id:y.string()}),yO=ld.pick({id:!0,status:!0,testName:!0,testId:!0,test:!0,failureReason:!0,failureDetails:!0}),Sy=yO.array(),yy=ld.pick({startedAt:!0,finishedAt:!0,updatedAt:!0,results:!0,beforeResults:!0,afterResults:!0,status:!0,failureDetails:!0,failureReason:!0,resolvedBaseUrl:!0,environmentName:!0,labels:!0,cliVersion:!0,resolvedInputs:!0,attempts:!0,flake:!0}).partial(),t8=y.object({id:y.string()}),by=y.object({status:y.nativeEnum(Ae),finishedAt:y.coerce.date().optional(),schemaVersion:y.string().optional().default("1.0.19"),results:y.record(y.string(),y.unknown()).array().optional(),beforeResults:y.record(y.string(),y.unknown()).array().optional(),afterResults:y.record(y.string(),y.unknown()).array().optional()}),r8=y.object({screenshot:y.string()}),Ey=y.object({key:y.string()}),Ty=y.object({orgId:y.string(),userId:y.string()}),vy=y.array(Pf),n8=y.record(y.string(),y.union([y.string(),y.boolean()])),o8=y.object({paths:y.string().array(),env:y.string().optional(),urlOverride:y.string().optional(),customHeaders:y.record(y.string(),y.string()).optional()}),Ay=y.object({suiteRunIds:y.string().array(),runGroupIds:y.string().array()}),i8=y.object({suiteRunIds:y.string().array()}),a8=Vf.array(),s8=y.object({runGroupIds:y.string().array()}),bO=y.object({uploadUrl:y.string()}),l8=bt.merge(eS),c8=bt.merge(rS),u8=bt.merge(tS),EO=y.object({testId:y.string().optional().default(""),testName:y.string().optional().default(""),suiteId:y.string().optional().default(""),suiteName:y.string().optional().default(""),creditsUsed:y.number().optional()}),TO=y.object({transactionId:y.string(),timestamp:y.string(),event:y.nativeEnum(aa),properties:EO}),d8=TO.array(),wy=ey.omit({steps:!0}).extend({steps:y.array(y.record(y.string(),y.unknown())).describe("unparsed ResolvedStep[]")}),p8=y.object({limit:y.number().max(10).optional(),afterTime:y.number().optional()}),Ry=Hf.array(),m8=y.object({applied:y.boolean().optional(),appliedAt:y.coerce.date().optional()}),Cy=bO.extend({id:y.string()}),h8=y.object({runGroupId:y.string().uuid().optional()}),xy=y.object({runGroupId:y.string().uuid()}),_y=y.object({quarantined:y.object({testId:y.string().uuid(),quarantinedAt:y.coerce.date(),quarantinedBy:y.string().optional(),quarantinedReason:y.string()}).array()}),g8=y.object({testId:y.string().uuid(),testName:y.string().optional(),reason:y.string(),gitLocalUsername:y.string().optional(),gitLocalEmail:y.string().optional(),gitLocalName:y.string().optional()}),f8=y.object({testName:y.string().optional(),reason:y.string().optional(),gitLocalUsername:y.string().optional(),gitLocalEmail:y.string().optional(),gitLocalName:y.string().optional()}),S8=bt.merge(sS),y8=bt.merge(lS),b8=y.object({apkToInstall:y.object({channel:y.string(),tag:y.string().optional()}).optional(),hostname:y.string().optional(),region:y.nativeEnum(la).optional()}),My=y.object({name:y.string(),webRtcUrl:y.string(),adbUrl:y.string(),token:y.string(),apkDownloadUrl:y.string().optional(),region:y.string().optional()}),E8=y.object({channel:y.string(),tag:y.string(),md5:y.string()}),Iy=y.object({id:y.string(),uploadUrl:y.string().optional(),downloadUrl:y.string(),md5:y.string().optional()}),Py=y.object({assets:y.array(y.object({channel:y.string(),tag:y.string(),md5:y.string(),createdAt:y.number().describe("Unix timestamp in milliseconds")}))});import{z as Q}from"zod";var vO=3,A8=Q.object({localTestId:Q.string(),quarantinedAt:Q.date(),quarantinedBy:Q.string().optional(),quarantinedReason:Q.string(),quarantinedByGitEmail:Q.string().optional(),quarantinedByGitName:Q.string().optional(),quarantinedByGitUsername:Q.string().optional()}).or(Q.object({cloudTestId:Q.string(),quarantinedAt:Q.date(),quarantinedBy:Q.string().optional(),quarantinedReason:Q.string(),quarantinedByGitEmail:Q.string().optional(),quarantinedByGitName:Q.string().optional(),quarantinedByGitUsername:Q.string().optional()})),Oy=(t=>(t.QUARANTINE="QUARANTINE",t.UNQUARANTINE="UNQUARANTINE",t))(Oy||{});var Dd=Q.object({name:Q.string(),description:Q.string().nullish(),effect:Q.nativeEnum(Oy),labels:Q.array(Q.string()),githubRepository:Q.string().nullish(),gitlabProjectPath:Q.string().nullish(),gitBranchName:Q.string().nullish()}),AO=Q.object({type:Q.literal("LAST_N_RUNS"),lastN:Q.number().min(vO).max(10)}),wO=Q.object({type:Q.literal("LAST_N_HOURS"),lastN:Q.number().min(1).max(24)}),RO=Q.object({type:Q.literal("LAST_N_DAYS"),lastN:Q.number().min(1).max(7)}),Ud=Q.discriminatedUnion("type",[AO,wO,RO]),CO=Q.object({flakeRateThreshold:Q.number().min(1).max(100),evaluationWindow:Ud}),xO=Dd.extend({type:Q.literal("FLAKE_RATE"),config:CO}),_O=Q.object({passRateThreshold:Q.number().min(1).max(100),evaluationWindow:Ud}),MO=Dd.extend({type:Q.literal("PASS_RATE"),config:_O}),IO=Q.object({failureCountThreshold:Q.number().min(0),evaluationWindow:Ud}),PO=Dd.extend({type:Q.literal("FAILURE_COUNT"),config:IO}),w8=Q.discriminatedUnion("type",[xO,MO,PO]);import{z as $e}from"zod";var x8=$e.object({repositoriesIndexed:$e.boolean(),indexingInProgress:$e.boolean(),indexesOutdated:$e.boolean()}),Ly=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(Ly||{}),Ny=(s=>(s.Success="success",s.Failure="failure",s.Neutral="neutral",s.Cancelled="cancelled",s.Skipped="skipped",s.TimedOut="timed_out",s.ActionRequired="action_required",s))(Ny||{}),_8=$e.object({name:$e.string(),status:$e.nativeEnum(Ly),conclusion:$e.nativeEnum(Ny).nullable()}),ga=$e.object({sha:$e.string(),message:$e.string(),author:$e.object({name:$e.string().optional(),email:$e.string().optional(),date:$e.coerce.date().optional()}),committer:$e.object({name:$e.string().optional(),email:$e.string().optional(),date:$e.coerce.date().optional()})}),Fd=$e.object({mergedBranch:$e.string().optional()});import{z as Be}from"zod";var ky=Be.object({orgId:Be.string(),cacheKeys:Be.string().array()}),P8=Be.object({keyParams:ky,clientMetadata:Be.string(),lockAcquisitionTimeoutMs:Be.number().optional()}),Dy=Be.object({acquired:Be.boolean(),acquiredByMetadata:Be.string(),keyPrefix:Be.string()}),O8=Be.object({keyPrefix:Be.string(),result:Be.string(),ttlMs:Be.number()}),L8=Be.union([Be.object({keyPrefix:Be.string()}),ky]),OO=Be.object({remainingTtlMs:Be.number(),value:Be.string().nullish()}),N8=Be.object({results:Be.record(Be.string(),OO),activeLocks:Be.string().array()});var k8=5*60*1e3;var B8=90*24*60*60*1e3,z8=7*24*60*60*1e3;import{z as Uy}from"zod";var j8=Uy.object({quarantineNotifications:Uy.string().nullish()});import{z as mt}from"zod";var LO=mt.object({version:mt.string(),json:mt.record(mt.unknown()),hash:mt.string()}),Fy=mt.record(mt.unknown()),q8=mt.object({newSvgs:mt.array(LO),metadata:Fy.optional()}),NO=mt.object({version:mt.string(),json:mt.record(mt.unknown()).nullish(),hash:mt.string(),description:mt.string().nullish(),metadata:Fy.nullish()}),By=mt.record(mt.string().describe("icon hash"),NO);import{z as He}from"zod";var Bd=He.object({assertion:He.string().describe("A human readable assertion that evaluates to either true or false depending on the state of the system.")}),kO=He.object({instruction:He.string().describe("Human readable instruction to execute the step. Instructions should only describe concrete actions that need to be taken. Any checks or assertions should be described in the preConditions, postConditions, or expectedResults."),expectedResults:Bd.array().optional().describe("Human readable description of the expected results after the step is executed. Each expected result should contain a single assertion that evaluates to true or false.")}),zy=kO.extend({subSteps:He.lazy(()=>zy.array().optional()).describe("More granular steps to be take to achieve the current step's higher level objective.")}),Hy=He.object({name:He.string().describe("Short name describing the test plan"),description:He.string().nullish().transform(r=>r??void 0).describe("Longer form description of the high level goal of the test plan")}),Gy=Hy.extend({id:He.string(),createdAt:He.coerce.date(),updatedAt:He.coerce.date(),updatedBy:He.string(),createdBy:He.string(),test:He.object({id:He.string(),name:He.string()}).nullish().transform(r=>r??void 0)}),J8=Gy.extend({testGenRuns:He.tuple([]).or(He.tuple([He.object({id:He.string(),startedAt:He.coerce.date(),status:He.nativeEnum(Ae)})]))}),jy=He.object({preConditions:Bd.array().nullish().transform(r=>r??[]),postConditions:Bd.array().nullish().transform(r=>r??[]),steps:zy.array().nullish().transform(r=>r??[])}),Z8=Gy.extend({plan:jy.nullish().transform(r=>r??{preConditions:[],postConditions:[],steps:[]})}),DO=Hy.extend({plan:jy.nullish().transform(r=>r??{preConditions:[],postConditions:[],steps:[]})}),Q8=DO.array().nullish().transform(r=>r??[]);import{validator as UO}from"@exodus/schemasafe";function Vy(r){let e;try{e=JSON.parse(r)}catch(t){return`The schema is not valid JSON. ${t}`}try{UO(e)}catch(t){return`The schema is not a valid JSON schema. ${t}`}}var Wy=r=>{r.extraHeaders&&(r.extraHeaders=Object.fromEntries(Object.entries(r.extraHeaders).filter(([e,t])=>e.trim()&&t.trim())))};var dl=class{async prepareGoldenScreenshotForComparison(e,t,n){return n}};import{z as f9}from"zod";var pl=class{async resolveEntries(){}async saveEntries(){}};import{z as zd}from"zod";var $y=zd.object({parentStepIdChain:zd.array(zd.string()),result:br});import{z as Z}from"zod";var FO=Z.object({step:nt,status:Z.nativeEnum(ot),startedAt:Z.coerce.date(),finishedAt:Z.coerce.date().optional(),healMetadata:Z.object({healType:Z.nativeEnum(ea).or(Z.literal("AI")),healedAt:Z.coerce.date()}).optional(),beforeSnapshotId:Z.string().uuid().optional(),afterSnapshotId:Z.string().uuid().optional(),message:Z.string().optional()}),BO=FO.extend({finishedAt:Z.coerce.date().optional().transform(r=>r??new Date)}),N9=BO.extend({step:Z.unknown()}),qy="1.0.0",Hd=by.extend({id:Z.string().uuid().optional(),startedAt:Z.coerce.date(),runAttemptSchemaVersion:Z.string().optional(),schemaVersion:Z.string().optional().default("1.0.19"),results:Z.record(Z.string(),Z.unknown()).array().optional(),beforeResults:Z.record(Z.string(),Z.unknown()).array().optional(),afterResults:Z.record(Z.string(),Z.unknown()).array().optional()}),Ky=Hd.extend({finishedAt:Z.coerce.date().optional().transform(r=>r??new Date)}),k9=Hd.merge(ta),D9=Ky.merge(ta),Yy=Z.object({results:Z.array(br),beforeResults:Z.array(br).optional(),afterResults:Z.array(br).optional()}),U9=Hd.merge(Yy),F9=Ky.merge(Yy),zO=yy.merge(fy).extend({executionType:Z.nativeEnum(Go).optional().default("WEB"),testId:Z.string().uuid(),testDescription:Z.string().optional(),runGroupId:Z.string().uuid(),status:Z.nativeEnum(Ae),startedAt:Z.coerce.date(),attempts:Z.number(),failureRecoveryDetails:Z.record(Z.unknown()).optional()}),B9=zO.extend({finishedAt:Z.coerce.date().optional().transform(r=>r??new Date)}),HO=hy.merge(gy).extend({id:Z.string().uuid().optional(),startedAt:Z.coerce.date(),cliVersion:Z.string(),labels:Z.string().array().optional().default([])}),fa=HO.extend({updatedAt:Z.coerce.date().optional().transform(r=>r??new Date),finishedAt:Z.coerce.date().optional().transform(r=>r??new Date)});import{fileURLToPath as $O}from"url";var Zy,qO=$O(import.meta.url),KO=jO(qO);Zy=WO(KO,"..");var Sa=Zy;x.info(`Setting APPIUM_HOME to ${Sa}`);process.env.APPIUM_HOME=Sa;var YO="If you do not have Java installed, please download the JDK 24 from https://www.oracle.com/java/technologies/downloads/, move it to your home directory, and then set the JAVA_HOME environment variable in your shell profile to the JDK path.",XO="If you do not have Android Studio installed, please download it first from https://developer.android.com/studio and then follow all setup instructions in the Android Studio app.",JO="Follow the instructions at https://developer.android.com/tools/variables to set the ANDROID_HOME environment variable.",Qy="On Mac OS, the SDK is typically installed at /Users/<username>/Library/Android/sdk.",eb="On Windows, the SDK is typically installed at C:\\Users\\<username>\\AppData\\Local\\Android\\Sdk.";function ZO(){if(!process.env.JAVA_HOME)x.warn("JAVA_HOME is not set. Some Appium drivers and Android tools may not work as expected.");else{process.platform==="darwin"&&/\.jdk\/?$/.test(process.env.JAVA_HOME)&&x.warn("JAVA_HOME appears to point at a *.jdk bundle, which is incorrect. The correct path should be formatted like '<bundle>/Contents/Home'.");let e=((t,n)=>VO(t,"bin",process.platform==="win32"?`${n}.exe`:n))(process.env.JAVA_HOME,"java");GO(e)||x.warn(`JAVA_HOME does not appear to point to a valid Java installation: expected the 'java' binary to exist at ${e}`)}try{Xy("java --version",{stdio:"pipe",encoding:"utf-8"})||(x.error(`Could not find a Java installation. ${YO}`),process.exit(1))}catch(r){x.error(`Got error while checking if the Java JDK is installed: ${r}`),process.exit(1)}}function QO(){process.env.ANDROID_HOME||(x.error(`The ANDROID_HOME environment variable is not set. ${JO} ${Jy()==="darwin"?Qy:eb}`),process.exit(1))}function eL(){let r=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb";try{Xy(`${r} version`,{stdio:"pipe",encoding:"utf-8"})||(x.error(`Could not find the Android Debug Bridge (ADB) tool locally. This tool is included with Android Studio. ${XO} Finally, ensure that the 'adb' command is available in your shell. ${Jy()==="darwin"?Qy:eb}`),process.exit(1))}catch(e){x.error(`Got error while checking if ADB is installed: ${e}`),process.exit(1)}}function tb(){ZO(),QO(),eL()}import{create as tL,windowedFiniteBatchScheduler as rL}from"@yornaath/batshit";import nL from"ws";var oL=100,iL=2500,rb=4e3,aL="\u2026";async function ml({driver:r,onLogs:e}){await r.execute("mobile: startLogsBroadcast");let t=tL({fetcher:async l=>{e(l)},resolver:()=>{},scheduler:rL({windowMs:iL,maxBatchSize:oL})}),{hostname:n="localhost",port:o=4723,protocol:i="http"}=r.options,s=`${i==="https"?"wss":"ws"}://${n}:${o}/ws/session/${r.sessionId}/appium/device/logcat`,c=new nL(s);return c.on("message",l=>{let u=l.toString().trim();u.length!==0&&(u.length>rb&&(u=u.slice(0,rb)+aL),t.fetch(u).catch(()=>{}))}),async()=>{try{c.close()}catch{}try{await r.execute("mobile: stopLogsBroadcast")}catch{}}}import{Server as xB}from"socket.io";import{randomUUID as SL}from"crypto";import{faker as sL}from"@faker-js/faker";import lL from"assert";import cL from"axios";import*as uL from"child_process";import dL from"moment";import*as pL from"otpauth";import mL from"pg";var bn=class extends Error{constructor(e){super(e),this.name="TimeoutError"}};var nb=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 W(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:p}=e;if(p.aborted)return c(nb(p));l=()=>c(nb(p)),p.addEventListener("abort",l,{once:!0})}let u=()=>{if(e.signal&&e.signal.removeEventListener("abort",l),n)try{s(n())}catch(p){c(p)}else{typeof r.cancel=="function"&&Promise.resolve().then(()=>r.cancel()).catch(()=>{});let p=o instanceof Error?o:new bn(o??`Promise timed out after ${t}ms`);c(p)}};a=i.setTimeout(u,t);let d=()=>{i.clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",l)};Promise.resolve(r).then(p=>{d(),s(p)}).catch(p=>{d(),c(p)})})}async function ob(r){let e;try{e=new URL(r.url).hostname}catch{}let t=[];return r.headers.getSetCookie()?.forEach(n=>{let o=Ws(n,e);t.push(...o)}),t}function hL(r,e){if(!r&&!e)return;let t;if(r){let{url:o,options:i}=r;t=new Request(o,i)}let n;if(e){let{body:o,options:i}=e;n=new Response(o??null,i)}return{request:t,response:n}}async function gL(r,e){switch(r){case"RAW":return e;case"RESPONSE":if(e instanceof Response){let t=[];return e.headers.forEach((o,i)=>{t.push([i,o])}),{status:e.status,headers:t,body:await e.text()}}else throw new Error("Result is not a Response object")}}var fL=Object.getPrototypeOf(async function(){}).constructor;async function ib(r,e,t){let n=e.code;e.options.fragment&&(n=`return ${e.code}`);let{env:o,additionalBindings:i,request:a,response:s}=e.bindings,c=e.tools,l={},u=(R,A)=>{o[R]=A,l[R]=A},d={},p=(R,A)=>{o[R]=A,d[R]=A},h;n.includes("Octokit")&&(h=(await import("@octokit/rest")).Octokit);let m;n.includes("createAppAuth")&&(m=(await import("@octokit/auth-app")).createAppAuth);let g=async()=>await Promise.resolve(new fL("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","ai","mock",...Object.keys(i??{}),n)(cL,dL,c.fakerInstance??sL,lL,mL,h,m,pL,uL,ob,o,e.options.disallowVariableUpdates?void 0:u,e.options.disallowVariableUpdates?void 0:p,A=>c.sms.send(A),A=>c.sms.fetchLatest(A),c.email,c.sms,c.ai,hL(a,s),...Object.values(i??{}))),f=!0,E,S;try{let R=await W(g(),{milliseconds:e.options.timeoutMs,message:`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`,signal:e.signal});E=await gL(e.options.responseSerialization??"RAW",R)}catch(R){t.error({err:R,env:o,evalCode:n},`[${r}] Error executing code: ${R}`),f=!1,R instanceof bn?S=`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`:S=R instanceof Error?R.message:`${R}`}return{result:E,variableUpdates:l,persistentVariableUpdates:d,success:f,error:S}}async function ab({code:r,fragment:e,context:t,localTools:n,logger:o,signal:i,timeoutMs:a=gn,disallowVariableUpdates:s,additionalBindings:c,responseSerialization:l,mock:u}){let d=SL(),p=await ib(d,{code:r,options:{fragment:e,timeoutMs:a,disallowVariableUpdates:s,responseSerialization:l},bindings:{...t.toObjectCopy(),...u,additionalBindings:c},tools:n,signal:i},o);return x.debug(`[${d}] Got execution result: ${JSON.stringify(p)}`),p}import{createHmac as yL,randomUUID as bL}from"crypto";import EL from"fetch-retry";var TL=EL(global.fetch,{retries:3,retryOn:function(r,e,t){return!!(e!==null||t&&t.status>=500)},retryDelay:function(r){return Math.pow(2,r)*500}}),sb=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,lb=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function cb({orgId:r,code:e,fragment:t,context:n,timeoutMs:o=gn,retries:i=2,signal:a,logger:s,additionalBindings:c,disallowVariableUpdates:l,responseSerialization:u,mock:d}){if(!sb)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,h,m=0;if(!lb)throw new Error("Missing lambda auth secret.");let g=yL("sha256",lb).update(r).digest("hex");for(;m<=i;){m++,a?.throwIfAborted();let E={id:bL(),orgId:r,momenticLambdaAuthHash:g,code:e,fragment:t,state:{...n.toObjectCopy(),...d,additionalBindings:c},timeoutMs:o,disallowVariableUpdates:l,responseSerialization:u};try{if(p=await W(TL(sb,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)}),{milliseconds:o,message:`Timeout of ${o}ms exceeded for code execution`,signal:a}),!p)throw new Error("Got empty response from code evaluation server");if(!p.ok)throw new Error(`Code evaluation server returned error code ${p.status}`);h=void 0;break}catch(S){h=S}}if(h)throw s.error({err:h},"Failed to evaluate code remotely"),h;if(!p)throw new Error(`An unexpected code evaluation error occurred${h?`: ${h}`:""}`);let f;try{f=IS.parse(await p.json())}catch(E){throw new Error(`Code evaluation server returned invalid response: ${E}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function Pr(r){let e;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)e=await cb(r);else if(r.localTools)e=await ab({...r,localTools:r.localTools});else throw new Error("No code evaluation environment available");if(e.error){let t=`Failed to evaluate code:
10
14
  ${e.error}
11
15
  Code received:
12
- ${r.code}`;throw r.logger.error({err:e.error,code:r.code,env:r.context.toObjectCopy()},t),new Error(t)}if(e.variableUpdates)for(let[t,n]of Object.entries(e.variableUpdates))r.context.setVariable(t,n);if(e.persistentVariableUpdates&&Object.keys(e.persistentVariableUpdates).length>0){await r.callbacks?.onPersistentVariableUpdates?.(e.persistentVariableUpdates);for(let[t,n]of Object.entries(e.persistentVariableUpdates))r.context.setVariable(t,n)}return e.result}import{set as _I}from"lodash-es";async function yd(r){let{orgId:e,s:t,context:n,logger:o,signal:i,retries:a=2,timeoutMs:s=sn,allowUndefined:c=!1}=r,l=/{{(.*?)}}/g,u=t.matchAll(l),d=t;for(let p of u){if(p.length<2)continue;let g=p[1].trim(),m;try{m=await Ar({orgId:e,code:g,fragment:!0,context:n,timeoutMs:s,logger:o,retries:a,localTools:r.localTools,signal:i})}catch(f){throw o.error({err:f,value:t},"Error evaluating template string"),f}if(m===void 0&&!c)throw new x("UserConfigurationError",`Template fragment '${g}' evaluated to undefined. Please ensure that the variable name is spelled correctly and it is only referenced after being assigned a value.`);let h=typeof m=="string"?m:`${m}`;h=h.replaceAll(/\$/g,"$$$$"),d=d.replace(p[0],h)}return d}async function Zs(r){return WS(r)}async function WS({obj:r,bannedKeys:e,allowList:t,context:n,prefixPath:o=[],replacements:i=[],...a}){for(let s in r){if(e.includes(s))continue;let c=!1;if(t)if(t.includes(s))c=!0;else continue;let l=r[s],u=[...o,s];if(typeof l=="string"&&l.includes("{{")){let d=await yd({s:l,context:n,...a});if(l===d)continue;i.push({path:u,original:l}),r[s]=d}else typeof l=="object"&&l!==null&&!Array.isArray(l)&&await WS({obj:l,bannedKeys:e,context:n,prefixPath:u,replacements:i,allowList:c?void 0:t,...a})}return i}function Qs(r,e){for(let{path:t,original:n}of e)_I(r,t,n)}import MI from"fetch-retry";var y6=process.env.MAILINATOR_API_KEY,b6=MI(global.fetch,{retryOn:function(r,e,t){return r>3?!1:!!(e!==null||t&&t.status>=400)},retryDelay:function(r){return 500}});import{randomUUID as iU}from"crypto";import aU from"fetch-cookie";import sU from"path";import{diff as II}from"deep-object-diff";import{cloneDeep as V6}from"lodash-es";function qS(r,e){return!r&&!e?!1:!r||!e?!0:Object.keys(II(r,e)).length>0}function bd({steps:r,topLevel:e=!0,...t}){let{stepCacheEntries:n,logger:o,keyPrefix:i}=t,a=[],s=[],c=[],l=0,u=(p,g)=>{try{let m=on.parse(g.value);if(m.type!==p.type){o.warn({parsedCacheEntry:m,command:p},"Not using step cache due to type mismatch"),s.push(g.key);return}p.cache=m.cache,a.push(g.key),c.push(g.uniqueKey)}catch(m){s.push(g.key),o.error({err:m,cacheEntry:g},"Not using step cache due to parsing error")}},d=(p,g)=>{let m=LI(p.id,g),h=m.find(f=>!!n[f]);if(h)u(p,n[h]);else{if(p.type==="AI_CHECK")return;s.push(m[0])}};for(let p of r)switch(p.type){case"MOBILE_PRESET_STEP":{if(!Ps(p.command)||p.command.type==="TYPE"&&!p.command.target||"cache"in p.command&&p.command.cache)continue;l++,d(p.command,i);break}case"RESOLVED_MOBILE_MODULE":{l+=p.steps.length;let{cacheKeysHit:g,cacheKeysMissed:m,uniqueKeysHit:h}=bd({...t,steps:p.steps,keyPrefix:i?`${i}:${p.id}`:p.id,topLevel:!1});a.push(...g),s.push(...m),c.push(...h);break}default:{let g=p}}return e&&l&&s.length>0&&o.warn({totalSteps:l,cacheKeysMissed:s,cacheKeysHit:a,uniqueKeysHit:c,cacheEntries:n.length},"Step cache did not fully resolve"),{cacheKeysHit:a,cacheKeysMissed:s,uniqueKeysHit:c}}function OI(r,e){return e?`${e}:${r}`:r}function LI(r,e){let t=[],n=e?.split(":")??[];for(let o=n.length;o>=0;o--){let i=[...n.slice(o),r];t.push(i.join(":"))}return t.reverse(),t}function Ed(r){let{moduleStepParents:e=[],moduleIdParents:t=[]}=r;if(e.length!==t.length)throw new Error(`Invalid cache entry parent length: ${JSON.stringify(e)}
13
- ${JSON.stringify(t)}`);let n=[];return n.push({key:OI(r.id,e.join(":")),organizationId:r.orgId,value:r.value,testId:r.testId}),n}function el({cmd:r,newTarget:e,key:t,logger:n,updatedWithAI:o}){if(r.type==="DRAG")if(t!=="fromTarget"&&t!=="toTarget")n.error({cmd:r,newTarget:e,key:t},"Attempted to apply invalid cache to DRAG command");else{let i=r.cache?.updatedAt;r.cache={...r.cache,[t]:e,updatedAt:i&&!o?i:new Date}}else if(t==="target"&&Gg(r)){let i=r.cache?.updatedAt;r.cache={...r.cache,target:e,updatedAt:i&&!o?i:new Date}}else n.error({cmd:r,newTarget:e,key:t},"Invalid target cache application")}function tl(r,e,t){let n=r.cache&&"memory"in r.cache?r.cache.memory?.traces:void 0;return qS(n,e)?(t.info({updatedTraces:e,oldCmd:r},"Wrote new memory to assertion command"),r.cache={...r.cache,memory:{type:"GCS_TRACES",traces:e},updatedAt:new Date},{changed:!0}):{changed:!1}}function Td(r){return{...r,serializedHtml:void 0,nodeOnlySerializedHtml:void 0,screenshotUrl:void 0,boundingBox:void 0,selector:void 0,hybridSelector:void 0,generatedSelectors:void 0,id:-1}}function KS(r,e){return r?qS(r.target.memory,e.target.memory)?{target:{...r.target,memory:e.target.memory},updatedAt:e.updatedAt}:r:{target:Td(e.target),updatedAt:e.updatedAt}}function At(r,e,t=!1){return r.length<e?r:r.slice(0,e-3)+(t?"...TRUNCATED...":"[...]")}var Gn={EQUALS:"equals",CONTAINS:"contains",STARTS_WITH:"starts with",EXISTS:"exists"},jn={EQUALS:"does not equal",CONTAINS:"does not contain",STARTS_WITH:"does not start with",EXISTS:"does not exist"},YS={EXISTS:"exists",VISIBLE:"is visible",ENABLED:"is enabled",EDITABLE:"is editable",FOCUSED:"is focused"},XS={EXISTS:"does not exist",VISIBLE:"is not visible",ENABLED:"is disabled",EDITABLE:"is not editable",FOCUSED:"is not focused"};var b8={CONTENT:"The page"};function JS(r){switch(r.type){case"SUBSTRING":return`match substring '${r.url}'`;case"REGEX":return`match regex '${r.regex}'`;case"GLOB":return`match glob '${r.glob}'`;case"DOMAIN":return`match domain '${r.domain}'`;default:return(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function NI(r){return typeof r=="object"&&r!==null}function Hn(r){if(Array.isArray(r))return r.map(Hn);if(NI(r)){let e={};return Object.entries(r).forEach(([t,n])=>{n!==void 0&&(e[t]=Hn(n))}),e}return r}function kI(r){switch(r.type){case"AI_CHECK":return`AI check: ${r.assertion}`;case"TAP":return`Tap on element: ${Ku(r.target)}`;case"TYPE":return`Type ${r.text} ${r.target?`into ${Ku(r.target)}`:""}`;case"PRESS":return`Press the ${r.key} button`;case"PRESS_KEYBOARD":return`Press the ${r.key} key`;case"SWIPE":return r.scrollableElement.type==="CUSTOM"?`Swipe ${r.direction} in container: ${r.scrollableElement.target.description}`:`Swipe ${r.direction} in the ${r.scrollableElement.type.toLowerCase()}`;case"OPEN_APP":return`Open app: ${r.packageName}`;case"OPEN_NOTIFICATION_DRAWER":return"Open notification drawer";case"JAVASCRIPT":return`Execute JavaScript: ${r.code}`;case"REQUEST":return`Make API request to ${r.url}`;case"WAIT":return`Wait ${r.timeoutSecs} seconds`;case"ADD_FILE":return`Add file: ${r.file} to ${r.storageLocation}`;case"ADB":return`ADB command: ${r.command}`;case"STATE":return"Get state";default:{let e=r;throw new Error("If Typescript complains about the line above, you missed a case or break in the switch above")}}}function ZS(r){switch(r.type){case"MOBILE_PRESET_STEP":return kI(r.command);case"MOBILE_MODULE_STEP":return`Module ${r.moduleId}`;case"RESOLVED_MOBILE_MODULE":return`Module ${r.name}`;default:{let e=r;throw new Error("If Typescript complains about the line above, you missed a case or break in the switch above")}}}import{cloneDeep as QS}from"lodash-es";async function ey(r){let e={},{resolvedSteps:t,newSchemaVersion:n}=await rl({rawSteps:r.rawStepLists.steps,onFetchModule:r.onFetchModule,logger:r.logger,metadata:r.testMetadata,resolvedModuleCache:e}),o={steps:t};for(let i of["beforeSteps","afterSteps"]){let a=r.rawStepLists[i];if(!a)continue;let{resolvedSteps:s}=await rl({rawSteps:a,onFetchModule:r.onFetchModule,logger:r.logger,metadata:r.testMetadata,resolvedModuleCache:e});o[i]=s}return{resolvedStepLists:o,moduleIds:Array.from(Object.keys(e))}}async function rl({rawSteps:r,onFetchModule:e,logger:t,metadata:n,resolvedModuleCache:o={}}){let i=[];for(let a of r)i.push(await ty({rawStep:cr.parse(a),onFetchModule:e,logger:t,resolvedModuleCache:o}));return{resolvedSteps:i,newSchemaVersion:n.schemaVersion}}async function ty({rawStep:r,onFetchModule:e,logger:t,resolvedModuleCache:n}){switch(r.type){case"MOBILE_MODULE_STEP":{let o=r.moduleId,i=n[o];if(i)return{...QS(i),...r,type:"RESOLVED_MOBILE_MODULE"};let a=await e(o);if(!a)throw new Error(`Could not find module with id ${o}`);let s;try{s=cr.array().parse(a.steps)}catch(u){throw t.error({err:u,steps:a.steps,moduleId:o},"Module failed to parse (mobile)"),u}let c=await Promise.all(s.map(u=>ty({rawStep:u,onFetchModule:e,logger:t,resolvedModuleCache:n}))),l={...a,steps:c};return n[o]=QS(l),{...l,...r,type:"RESOLVED_MOBILE_MODULE"}}case"MOBILE_PRESET_STEP":return r}}import{cloneDeep as DI}from"lodash-es";import{v4 as vd}from"uuid";async function Vn(r){let e=new Map,t=new Set,n=DI(r.steps),o=await ry({...r,steps:n,moduleStepParents:[],moduleIdParents:[],moduleIdReplacements:e,seenModules:t});return{stepsToSave:o.stepsToSave,cachesToSave:o.cachesToSave,moduleUpdates:o.moduleUpdates}}async function ry({steps:r,...e}){let{seenModules:t,cacheCreationParams:n,moduleIdParents:o,moduleStepParents:i,moduleIdReplacements:a,shouldCreateNewModuleId:s,createNewCacheIds:c}=e,l={cachesToSave:[],stepsToSave:[],moduleUpdates:[]};for(let u of r)switch(u.id=c?vd():u.id,u.type){case"MOBILE_PRESET_STEP":{let d=u.command;d.id=c?vd():d.id,"cache"in d&&d.cache&&(n&&(l.cachesToSave=l.cachesToSave.concat(Ed({id:d.id,orgId:n.orgId,testId:n.testId,value:on.parse(d),moduleIdParents:o,moduleStepParents:i}))),delete d.cache),l.stepsToSave.push({...u,command:d});break}case"RESOLVED_MOBILE_MODULE":{let d=c?vd():u.id,p=u.moduleId;a.has(p)?p=a.get(p):s!==void 0&&(p=await s(u),a.set(u.moduleId,p));let{cachesToSave:g,stepsToSave:m,moduleUpdates:h}=await ry({...e,steps:u.steps,cacheCreationParams:n?{...n}:void 0,createNewCacheIds:!1,moduleStepParents:[...i,d],moduleIdParents:[...o,p],skipCacheIntermediateEntries:c});l.moduleUpdates=l.moduleUpdates.concat(h),l.cachesToSave=l.cachesToSave.concat(g),t.has(p)||(t.add(p),l.moduleUpdates.push({...Uo.parse(u),steps:cr.array().parse(m),moduleId:p}));let f=Ji.parse({...u,type:"MOBILE_MODULE_STEP",moduleId:p,inputs:u.inputs,id:d});l.stepsToSave.push(f);break}default:{let d=u}}return l}function UI(r){let e={parentChain:[]};return ny(r,e),e}function ny(r,e){let{onPreset:t,onModule:n,earlyStop:o}=r;for(let i of r.steps){if(i.type==="RESOLVED_MOBILE_MODULE"){if(n?.(i,e)&&o||(e.parentChain.push(i),ny({...r,steps:i.steps},e)&&o))return!0;e.parentChain.pop();continue}if(t(i,e)&&o)return!0}return!1}function FI(r,e,t=[]){let n,o=[],i=(a,s)=>{let c=JSON.stringify(s.parentChain.map(u=>u.id)),l=t.length===0?!0:JSON.stringify(t)===c;return a.id===e&&l?(n=a,o=s.parentChain,!0):!1};return UI({steps:r,earlyStop:!0,onPreset:i,onModule:i}),{result:n,parentChain:o}}function oy({currentStep:r,currentParentChain:e,desiredStepId:t,desiredStepParentChain:n}){let o=Array.from(e),i=Array.from(n);for(let s=0;s<o.length;s++){if(o[s]!==i[s])return!1;i.shift()}return!!FI([r],t,i).result}function iy(r){let e=r[0],t=r[0],n=!1;for(;!n&&t;)switch(t.type){case"MOBILE_MODULE_STEP":if(!t.steps.length){e=t,n=!0;break}t=t.steps[0];break;case"MOBILE_PRESET_STEP":e=t,n=!0;break;default:{let s=t}}let o=r[r.length-1],i=r[r.length-1],a=!1;for(;!a&&i;)switch(i.type){case"MOBILE_MODULE_STEP":if(!i.steps.length){o=i,a=!0;break}i=i.steps[i.steps.length-1];break;case"MOBILE_PRESET_STEP":o=i,a=!0;break;default:{let s=i}}return{firstMetadata:e,lastMetadata:o}}function ay({result:r,firstMetadata:e,lastMetadata:t}){e&&(r.beforeSnapshot=e.beforeSnapshot),t&&(r.data=t.data,r.afterSnapshot=t.afterSnapshot,t.status!=="SUCCESS"&&(r.message=t.message))}import{cloneDeep as h9}from"lodash-es";import S9 from"truncate-json";import{v4 as C9}from"uuid";import{cloneDeep as i9,unset as a9}from"lodash-es";import{cloneDeep as I9}from"lodash-es";import{cloneDeep as eQ}from"lodash-es";import TZ from"diff-lines";import Ad,{gte as AZ}from"semver";var sy={name:"Migrate to ai step v2",fromVersion:"1.0.4",toVersion:"1.0.5",recursiveKeys:new Set(["results","commands"]),stopOnFailure:!0,execute:async r=>(r=r.filter(e=>!(e.status!==void 0&&e.type==="AI_ACTION")),r=r.map(e=>(e.status===void 0||e.type==="PRESET_ACTION"&&(e.results=e.commands??e.results??[]),e)),r)};var ly={name:"Make sure ai step v2 has done command",fromVersion:"1.0.5",toVersion:"1.0.6",recursiveKeys:new Set(["results","commands"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="AI_ACTION"||e.status!==void 0||!e.commands||!e.commands.length)return e;let t=e.commands,n=t[t.length-1];return n&&n.type!=="SUCCESS"&&t.push({type:"SUCCESS"}),e})};var BI=["target","fromTarget","toTarget"];function cy(r){for(let e of BI){if(r[e]===void 0)continue;let t=r[e];t.elementDescriptor!==void 0?t.type="description":r[e]={type:"description",elementDescriptor:""}}}var uy={name:"Migrate element target to discriminated union",fromVersion:"1.0.6",toVersion:"1.0.7",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":return cy(e.command),e;case"AI_ACTION":{let t=e.commands;for(let n of t??[])cy(n);return e}default:return e}})};import{v4 as zI}from"uuid";var dy={name:"Ensure module steps have ids",fromVersion:"1.0.7",toVersion:"1.0.8",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"MODULE":return e.id||(e.id=zI()),e;default:return e}})};import{v4 as py}from"uuid";var my={name:"Ensure module steps have ids",fromVersion:"1.0.8",toVersion:"1.0.9",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":{if(!e.command)return e;let t=e.command;return t.id=t.id??py(),e}case"AI_ACTION":return e.commands&&(e.steps=e.commands.map(t=>({type:"PRESET_ACTION",command:{...t,id:t.id??py()}})),delete e.commands),e;default:return e}})};var gy={name:"Migrate ai waits to checks",fromVersion:"1.0.9",toVersion:"1.0.10",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":{if(!e.command)return e;let t=e.command;return typeof t.type!="string"||t.type!=="AI_WAIT"||(t.type="AI_ASSERTION",t.timeout||(t.timeout=10)),e}default:return e}})};import{v4 as HI}from"uuid";var hy={name:"Add ids to all steps",fromVersion:"1.0.10",toVersion:"1.0.11",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>("id"in e&&typeof e.id=="string"||(e.id=HI()),e))};import{v4 as fy}from"uuid";var Sy={name:"Add ids to all steps",fromVersion:"1.0.11",toVersion:"1.0.12",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if("id"in e&&typeof e.id=="string")return e;if("condition"in e&&typeof e.condition=="object"&&e.condition){let t=e.condition;t.id||(t.id=fy())}return e.id=fy(),e})};var yy={name:"Move env key to steps",fromVersion:"1.0.12",toVersion:"1.0.13",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||typeof t.envKey!="string"||(e.envKey=t.envKey,delete t.envKey),e})};import{v4 as GI}from"uuid";var by={name:"Redo last two migrations",fromVersion:"1.0.13",toVersion:"1.0.14",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if((!("id"in e)||typeof e.id!="string")&&(e.id=GI()),e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||typeof t.envKey!="string"||(e.envKey=t.envKey,delete t.envKey),e})};var Ey={name:"Migrate select choice",fromVersion:"1.0.14",toVersion:"1.0.15",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="SELECT_OPTION"||e.option===void 0||(e.choice={type:"VALUE",value:t.option},e.option=void 0),e})};var Ty={name:"Migrate select choice",fromVersion:"1.0.15",toVersion:"1.0.16",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return t&&vy(t),e})};function vy(r){r&&Object.keys(r).forEach(e=>{if(typeof r[e]=="object"&&r[e]){vy(r[e]);return}if(typeof r[e]!="string")return;let t=r[e];e==="code"?r[e]=t.replace(/inputs\./g,"env."):t.includes("{{")&&t.includes("}}")&&(r[e]=t.replace(/inputs\./g,"env."))})}var Ay={name:"Migrate switch tab choice",fromVersion:"1.0.16",toVersion:"1.0.17",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="TAB"||t.url===void 0||(t.action={type:"SUBSTRING",substring:t.url},t.url=void 0),e})};var wy={name:"Remove press keys sequentially",fromVersion:"1.0.17",toVersion:"1.0.18",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="TYPE"?e:t.pressKeysSequentially===void 0?(t.delay=0,e):(t.pressKeysSequentially&&(t.pressKeysSequentially=void 0,t.delay=50),e)})};var Ry={name:"Migrate wait for URL to matcher",fromVersion:"1.0.18",toVersion:"1.0.19",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="WAIT_FOR_URL"||t.url===void 0||(t.matcher={type:"GLOB",glob:t.url},t.url=void 0),e})};var Cy={name:"Migrate select choice round 2",fromVersion:"1.0.19",toVersion:"1.0.20",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;if(!t)return e;if(t.type==="SELECT_OPTION"){if(t.option===void 0)return e;t.choice={type:"VALUE",value:t.option},t.option=void 0}else if(t.type==="TAB"){if(t.url===void 0)return e;t.action={type:"SUBSTRING",substring:t.url},t.url=void 0}else if(t.type==="WAIT_FOR_URL"){if(t.url===void 0)return e;t.matcher={type:"GLOB",glob:t.url},t.url=void 0}else t.type==="AI_WAIT"&&(t.type="AI_ASSERTION",t.timeout||(t.timeout=10));return e})};var xy={name:"Migrate ",fromVersion:"1.0.20",toVersion:"1.0.21",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="MOCK_ROUTE"&&t.type!=="SET_HEADER"&&t.type!=="RECORD_REQUESTS"&&t.type!=="REGISTER_REQUEST_LISTENER"||(t.type==="REGISTER_REQUEST_LISTENER"||t.type==="RECORD_REQUESTS"?t.requestMatcher={urlMatcher:{type:"REGEX",regex:t.pattern}}:(t.type==="SET_HEADER"||t.type==="MOCK_ROUTE")&&t.urlPattern&&(t.requestMatcher={urlMatcher:{type:"REGEX",regex:t.urlPattern}})),e})};var _y={name:"Migrate AI checks to preset actions",fromVersion:"1.0.0",toVersion:"1.0.1",recursiveKeys:new Set,execute:async r=>r.map(e=>{if(e.type!=="AI_ASSERTION")return e;let n={type:"PRESET_ACTION",command:{type:"AI_ASSERTION",assertion:e.text,useVision:!1,disableCache:!0}},o={...e,...n};return delete o.text,o}),stopOnFailure:!0};var nl=new Set(["CLICK","TYPE","SELECT_OPTION"]),My={name:"Migrate element descriptor to live in a target object",fromVersion:"1.0.3",toVersion:"1.0.4",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e.command,n=t?.type,o=t?.elementDescriptor;return(o!==void 0||nl.has(n))&&(t.target={elementDescriptor:o??""}),e.commands&&Array.isArray(e.commands)&&e.commands.forEach(a=>{let s=a?.elementDescriptor,c=a?.type;(s!==void 0||nl.has(c))&&(a.target={elementDescriptor:s??""})}),e.results&&Array.isArray(e.results)&&e.results.forEach(a=>{let s=a.command,c=s?.elementDescriptor,l=s?.type;(c!==void 0||nl.has(l))&&(s.target={elementDescriptor:c??""}),a.commands&&Array.isArray(a.commands)&&a.commands.forEach(d=>{let p=d?.elementDescriptor,g=d?.type;(p!==void 0||nl.has(g))&&(d.target={elementDescriptor:p??""})})}),e}),stopOnFailure:!0};var Py={name:"Migrate FAILURE status to FAILED",fromVersion:"1.0.1",toVersion:"1.0.2",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e;return t.status==="FAILURE"&&(t.status="FAILED"),typeof t.commands=="object"&&Array.isArray(t.commands)&&t.commands.forEach(n=>{if(n&&typeof n=="object"){let o=n;o?.status==="FAILURE"&&(o.status="FAILED")}}),t}),stopOnFailure:!0};var Iy={name:"Migrate preset step types to use the same",fromVersion:"1.0.2",toVersion:"1.0.3",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e.command,n=t?.type;return n?.startsWith("PRESET_")&&(t.type=n.slice(7)),e.commands&&Array.isArray(e.commands)&&e.commands.forEach(i=>{let a=i.type;a?.startsWith("PRESET_")&&(i.type=a.slice(7))}),e.results&&Array.isArray(e.results)&&e.results.forEach(i=>{let a=i.command,s=a?.type;s?.startsWith("PRESET_")&&(a.type=s.slice(7)),i.commands&&Array.isArray(i.commands)&&i.commands.forEach(l=>{let u=l.type;u?.startsWith("PRESET_")&&(l.type=u.slice(7))})}),e}),stopOnFailure:!0};var ol=[_y,Py,Iy,My,sy,ly,uy,dy,my,gy,hy,Sy,yy,by,Ey,Ty,Ay,wy,Ry,Cy,xy];if(In!==ol[ol.length-1].toVersion)throw new Error("Please bump LATEST_SCHEMA_VERSION in types package after adding a migration");ol.forEach((r,e)=>{if(!Ad.valid(r.toVersion)||!Ad.valid(r.fromVersion))throw new Error(`Migration '${r.name}' has invalid version`);if(!Ad.gt(r.toVersion,r.fromVersion))throw new Error(`Migration '${r.name}' has toVersion <= fromVersion`);if(e===0)return;if(ol[e-1].toVersion!==r.fromVersion)throw new Error(`Migration '${r.name}' at index ${e} is not contiguous with previous migration`)});import{diff as yQ}from"deep-object-diff";import{cloneDeep as EQ}from"lodash-es";import{v4 as kQ}from"uuid";import{cloneDeep as BQ}from"lodash-es";import{stringify as JQ}from"yaml";async function Z(r,e){if(!(r<=0))return new Promise((t,n)=>{if(e?.aborted){n(e.reason);return}e?.addEventListener("abort",i,{once:!0});let o=setTimeout(()=>{e?.removeEventListener("abort",i),t()},r);function i(){clearTimeout(o),e?.removeEventListener("abort",i),n(e?.reason)}})}async function wd({promiseGenerator:r,signal:e,codePath:t,logger:n}){let i=Date.now(),a=setInterval(()=>{if(e?.aborted){clearInterval(a);return}n?.warn({codePath:t,startTime:i,elapsedMilliseconds:Date.now()-i},`Asynchronous operation is taking a long time (${t})`)},5e3);return new Promise((s,c)=>{function l(){clearInterval(a),e?.removeEventListener("abort",l),c(e?.reason)}if(e?.aborted){c(e?.reason),clearInterval(a);return}e?.addEventListener("abort",l,{once:!0}),(async()=>{try{s(await r())}catch(u){c(u)}finally{clearInterval(a),e?.removeEventListener("abort",l)}})()})}async function $n({promiseGenerator:r,timeoutMs:e,codePath:t,logger:n,signal:o}){let i=!1,a=new AbortController,s=()=>{a.abort()},c=setTimeout(()=>{o?.removeEventListener("abort",s),!i&&a.abort()},e);o?.addEventListener("abort",s,{once:!0});try{return await wd({promiseGenerator:r,signal:a.signal,codePath:t,logger:n})}finally{i=!0,o?.removeEventListener("abort",s),clearTimeout(c)}}function il(r){let e;return r>10*60*1e3?e=2*60*1e3:r>60*1e3?e=20*1e3:r>10*1e3?e=2*1e3:e=1e3,e}import jI from"picomatch";var al=(r,e,t)=>{t?.caseInsensitive&&(r=r.toLowerCase());let n;switch(e.type){case"SUBSTRING":{let o=t?.caseInsensitive?e.url.toLowerCase():e.url;n=r.includes(o);break}case"GLOB":{let o=t?.caseInsensitive?e.glob.toLowerCase():e.glob;n=r===e.glob||jI(o)(r);break}case"REGEX":{n=new RegExp(e.regex).test(r);break}case"DOMAIN":{let o=t?.caseInsensitive?e.domain.toLowerCase():e.domain;n=new URL(r).hostname===o;break}}return t?.negated?!n:n},sl=(r,e)=>{try{let{hostname:t,pathname:n}=new URL(r),{hostname:o,pathname:i}=new URL(e);return t!==o||n!==i}catch{return!1}},Ho=r=>{try{return new URL(r),!0}catch{return!1}},Ly=r=>!r.toLowerCase().startsWith("http"),Go=(r,e)=>{try{return new URL(r,e),!0}catch{return!1}};function Wn(r,e){try{return!!new URL(r).origin.trim()}catch(t){return e?.error({url:r,err:t},"Invalid URL in check"),!1}}import{v4 as Ny}from"uuid";function Rd(r,e){return{...r,testId:e?.testId??"",testName:e?.testName??"",suiteId:e?.suiteId??"",suiteName:e?.suiteName??""}}var ll=class{reporter;asyncWork;metadata;creditsUsedV1=0;creditsUsedV2=0;constructor({logger:e,reporter:t,runType:n,runId:o,testMetadata:i,suiteMetadata:a}){this.reporter=t,this.metadata={testId:i.id,testName:i.name,suiteId:a?.id,suiteName:a?.name},this.asyncWork=[t.reportBillableEvents(e,[{event:n,timestamp:new Date().toISOString(),transactionId:o,properties:Rd({},this.metadata)}]).catch(s=>e.error({err:s},"Failed to report billable event"))]}trackStepExecution(e){if(lf(e.type)){this.creditsUsedV2+=1;return}let t=Hu(e.type);if(this.creditsUsedV1+=t??0,e.type==="PRESET_ACTION"){this.creditsUsedV2+=1;let n=Gu(e.command);this.creditsUsedV1+=n??0}}async flush(e){this.creditsUsedV1>0&&this.asyncWork.push(this.reporter.reportBillableEvents(e,[{event:"credits-used",timestamp:new Date().toISOString(),transactionId:Ny(),properties:Rd({creditsUsed:this.creditsUsedV1},this.metadata)}]).catch(t=>e.error({err:t},"Failed to report credits used"))),this.creditsUsedV2>0&&this.asyncWork.push(this.reporter.reportBillableEvents(e,[{event:"credits-used-v2",timestamp:new Date().toISOString(),transactionId:Ny(),properties:Rd({creditsUsed:this.creditsUsedV2},this.metadata)}]).catch(t=>e.error({err:t},"Failed to report credits used"))),await Promise.allSettled(this.asyncWork)}};import{CookieJar as lU}from"tough-cookie";var ky={vimiumJs:'var D=Object.defineProperty;var P=(t,e,n)=>e in t?D(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var b=(t,e,n)=>(P(t,typeof e!="symbol"?e+"":e,n),n);var y=t=>function(e){return e&&e.isTrusted?t.apply(this,arguments):!0};globalThis.forTrusted==null&&(globalThis.forTrusted=y);var E={create(t,e,n,o){return{bottom:o,top:e,left:t,right:n,width:n-t,height:o-e}},copy(t){return{bottom:t.bottom,top:t.top,left:t.left,right:t.right,width:t.width,height:t.height}},translate(t,e,n){return e==null&&(e=0),n==null&&(n=0),{bottom:t.bottom+n,top:t.top+n,left:t.left+e,right:t.right+e,width:t.width,height:t.height}},subtract(t,e){return e=this.create(Math.max(t.left,e.left),Math.max(t.top,e.top),Math.min(t.right,e.right),Math.min(t.bottom,e.bottom)),e.width<0||e.height<0?[E.copy(t)]:[this.create(t.left,t.top,e.left,e.top),this.create(e.left,t.top,e.right,e.top),this.create(e.right,t.top,t.right,e.top),this.create(t.left,e.top,e.left,e.bottom),this.create(e.right,e.top,t.right,e.bottom),this.create(t.left,e.bottom,e.left,t.bottom),this.create(e.left,e.bottom,e.right,t.bottom),this.create(e.right,e.bottom,t.right,t.bottom)].filter(o=>o.height>0&&o.width>0)},intersects(t,e){return t.right>e.left&&t.left<e.right&&t.bottom>e.top&&t.top<e.bottom},intersectsStrict(t,e){return t.right>=e.left&&t.left<=e.right&&t.bottom>=e.top&&t.top<=e.bottom},equals(t,e){for(let n of["top","bottom","left","right","width","height"])if(t[n]!==e[n])return!1;return!0},intersect(t,e){return this.create(Math.max(t.left,e.left),Math.max(t.top,e.top),Math.min(t.right,e.right),Math.min(t.bottom,e.bottom))}};var T={_browserInfoLoaded:!0,_firefoxVersion:null,_isFirefox:!1,isFirefox(){if(!this._browserInfoLoaded)throw Error("browserInfo has not yet loaded.");return this._isFirefox},firefoxVersion(){if(!this._browserInfoLoaded)throw Error("browserInfo has not yet loaded.");return this._firefoxVersion},isString(t){return typeof t=="string"||t instanceof String}};var f={isReady(){return document.readyState!=="loading"},documentReady:function(){let t=document.readyState!=="loading",e=[];if(!t){let n;globalThis.addEventListener("DOMContentLoaded",n=y(function(){globalThis.removeEventListener("DOMContentLoaded",n,!0),t=!0;for(let o of e)o();e=null}),!0)}return function(n){if(t)return n();e.push(n)}}(),documentComplete:function(){let t=document.readyState==="complete",e=[];if(!t){let n;globalThis.addEventListener("load",n=y(function(o){if(o.target===document){globalThis.removeEventListener("load",n,!0),t=!0;for(let r of e)r();e=null}}),!0)}return function(n){t?n():e.push(n)}}(),createElement(t){let e=document.createElement(t);return e instanceof HTMLElement?(this.createElement=n=>document.createElement(n),e):(this.createElement=n=>document.createElementNS("http://www.w3.org/1999/xhtml",n),this.createElement(t))},addElementsToPage(t,e){let n=this.createElement("div");e.id!=null&&(n.id=e.id),e.className!=null&&(n.className=e.className);for(let o of t)n.appendChild(o);return document.body.appendChild(n),n},removeElement(t){return t.parentNode.removeChild(t)},isTopFrame(){return globalThis.top===globalThis.self},makeXPath(t){let e=[];for(let n of t)e.push(".//"+n,".//xhtml:"+n);return e.join(" | ")},evaluateXPath(t,e){let n=document.webkitIsFullScreen?document.webkitFullscreenElement:document.documentElement,o=function(r){return r==="xhtml"?"http://www.w3.org/1999/xhtml":null};return document.evaluate(t,n,o,e,null)},getVisibleClientRect(t,e){let n;e==null&&(e=!1);let o=(()=>{let i=[];for(n of t.getClientRects())i.push(E.copy(n));return i})(),r=function(){let i=window.getComputedStyle(t,null),h=i.getPropertyValue("display").indexOf("inline")===0&&i.getPropertyValue("font-size")==="0px";return r=()=>h,h};for(n of o){let i;if((n.width===0||n.height===0)&&e)for(let h of Array.from(t.children)){i=window.getComputedStyle(h,null);let m=i.getPropertyValue("position");if(i.getPropertyValue("float")==="none"&&!["absolute","fixed"].includes(m)&&!(n.height===0&&r()&&i.getPropertyValue("display").indexOf("inline")===0))continue;let s=this.getVisibleClientRect(h,!0);if(!(s===null||s.width<3||s.height<3))return s}else{if(n=this.cropRectToVisible(n),n===null||n.width<3||n.height<3||(i=window.getComputedStyle(t,null),i.getPropertyValue("visibility")!=="visible"))continue;return n}}return null},cropRectToVisible(t){let e=E.create(Math.max(t.left,0),Math.max(t.top,0),t.right,t.bottom);return e.top>=window.innerHeight-4||e.left>=window.innerWidth-4?null:e},getClientRectsForAreas(t,e){let n=[];for(let o of e){let r,i,h,m,s=o.coords.split(",").map(l=>parseInt(l,10)),a=o.shape.toLowerCase();if(["rect","rectangle"].includes(a))s.length==4&&([r,h,i,m]=s);else if(["circle","circ"].includes(a)){if(s.length==3){let[l,c,d]=s,p=d/Math.sqrt(2);r=l-p,i=l+p,h=c-p,m=c+p}}else a==="default"?s.length==2&&([r,h,i,m]=[0,0,t.width,t.height]):s.length>=4&&([r,h,i,m]=s);let u=E.translate(E.create(r,h,i,m),t.left,t.top);u=this.cropRectToVisible(u),u&&!isNaN(u.top)&&!isNaN(u.left)&&!isNaN(u.width)&&!isNaN(u.height)&&n.push({element:o,rect:u})}return n},isSelectable(t){if(!(t instanceof Element))return!1;let e=["button","checkbox","color","file","hidden","image","radio","reset","submit"];return t.nodeName.toLowerCase()==="input"&&e.indexOf(t.type)===-1||t.nodeName.toLowerCase()==="textarea"||t.isContentEditable},isEditable(t){return this.isSelectable(t)||(t.nodeName!=null?t.nodeName.toLowerCase():void 0)==="select"},isEmbed(t){let e=t.nodeName!=null?t.nodeName.toLowerCase():null;return["embed","object"].includes(e)},isFocusable(t){return t&&(this.isEditable(t)||this.isEmbed(t))},isDOMDescendant(t,e){let n=e;for(;n!==null;){if(n===t)return!0;n=n.parentNode}return!1},isSelected(t){let e=document.getSelection();if(t.isContentEditable){let n=e.anchorNode;return n&&this.isDOMDescendant(t,n)}else if(f.getSelectionType(e)==="Range"&&e.isCollapsed){let n=e.anchorNode.childNodes[e.anchorOffset];return t===n}else return!1},simulateSelect(t){if(t===document.activeElement&&f.isEditable(document.activeElement))return handlerStack.bubbleEvent("click",{target:t});if(t.focus(),t.tagName.toLowerCase()!=="textarea"||t.value.indexOf(`\n`)<0)try{if(t.selectionStart===0&&t.selectionEnd===0)return t.setSelectionRange(t.value.length,t.value.length)}catch{}},simulateClick(t,e){e==null&&(e={});let n=["mouseover","mousedown","mouseup","click"],o=[];for(let r of n){let i=this.simulateMouseEvent(r,t,e);o.push(i)}return o},simulateMouseEvent(t,e,n){if(n==null&&(n={}),t==="mouseout"){if(e==null&&(e=this.lastHoveredElement),this.lastHoveredElement=void 0,e==null)return}else t==="mouseover"&&(this.simulateMouseEvent("mouseout",void 0,n),this.lastHoveredElement=e);let o=new MouseEvent(t,{bubbles:!0,cancelable:!0,composed:!0,view:window,detail:1,ctrlKey:n.ctrlKey,altKey:n.altKey,shiftKey:n.shiftKey,metaKey:n.metaKey});return e.dispatchEvent(o)},simulateClickDefaultAction(t,e){let n;if(e==null&&(e={}),(t.tagName!=null?t.tagName.toLowerCase():void 0)!=="a"||!t.href)return;let{ctrlKey:o,shiftKey:r,metaKey:i,altKey:h}=e;KeyboardUtils.platform==="Mac"?n=i===!0&&o===!1:n=i===!1&&o===!0,n?chrome.runtime.sendMessage({handler:"openUrlInNewTab",url:t.href,active:r===!0}):r===!0&&i===!1&&o===!1&&h===!1?chrome.runtime.sendMessage({handler:"openUrlInNewWindow",url:t.href}):t.target==="_blank"&&chrome.runtime.sendMessage({handler:"openUrlInNewTab",url:t.href,active:!0})},simulateHover(t,e){return e==null&&(e={}),this.simulateMouseEvent("mouseover",t,e)},simulateUnhover(t,e){return e==null&&(e={}),this.simulateMouseEvent("mouseout",t,e)},addFlashRect(t){let e=this.createElement("div");return e.classList.add("vimiumReset"),e.classList.add("vimiumFlash"),e.style.left=t.left+"px",e.style.top=t.top+"px",e.style.width=t.width+"px",e.style.height=t.height+"px",document.documentElement.appendChild(e),e},getViewportTopLeft(){let t=document.documentElement,e=getComputedStyle(t),n=t.getBoundingClientRect();if(e.position==="static"&&!/content|paint|strict/.test(e.contain||"")){let o=parseInt(e.marginTop),r=parseInt(e.marginLeft);return{top:-n.top+o,left:-n.left+r}}else{let o,r;return T.isFirefox()?(r=parseInt(e.borderTopWidth),o=parseInt(e.borderLeftWidth)):{clientTop:r,clientLeft:o}=t,{top:-n.top-r,left:-n.left-o}}},suppressPropagation(t){t.stopImmediatePropagation()},suppressEvent(t){t.preventDefault(),this.suppressPropagation(t)},consumeKeyup:function(){let t=null;return function(e,n=null,o){if(!e.repeat){t!=null&&handlerStack.remove(t);let{code:r}=e;t=handlerStack.push({_name:"dom_utils/consumeKeyup",keyup(i){return i.code!==r||(this.remove(),o?f.suppressPropagation(i):f.suppressEvent(i)),handlerStack.continueBubbling},blur(i){return i.target===window&&this.remove(),handlerStack.continueBubbling}})}return typeof n=="function"&&n(),o?(f.suppressPropagation(e),handlerStack.suppressPropagation):(f.suppressEvent(e),handlerStack.suppressEvent)}}(),getSelectionType(t){return t==null&&(t=document.getSelection()),t.type?t.type:t.rangeCount===0?"None":t.isCollapsed?"Caret":"Range"},getElementWithFocus(t,e){let n,o=n=t.getRangeAt(0);f.getSelectionType(t)==="Range"&&(o=n.cloneRange(),o.collapse(e)),n=o.startContainer,n.nodeType===1&&(n=n.childNodes[o.startOffset]);let r=n;for(;r&&r.nodeType!==1;)r=r.previousSibling;return n=r||n?.parentNode,n},getSelectionFocusElement(){let t=window.getSelection(),e=t.focusNode;return e==null?null:(e===t.anchorNode&&t.focusOffset===t.anchorOffset&&(e=e.childNodes[t.focusOffset]||e),e.nodeType!==Node.ELEMENT_NODE?e.parentElement:e)},getContainingElement(t){return(typeof t.getDestinationInsertionPoints=="function"?t.getDestinationInsertionPoints()[0]:void 0)||t.parentElement},windowIsTooSmall(){return window.innerWidth<3||window.innerHeight<3},injectUserCss(){let t=document.createElement("style");t.type="text/css",t.textContent=Settings.get("userDefinedLinkHintCss"),document.head.appendChild(t)}};var R={MAX_CONTENT_LENGTH:1e3,MAX_ATTRIBUTE_LENGTH:500,MAX_NUM_DATA_ATTRIBUTES:10,commonAttributes:["id","className","title","aria-label","aria-labelledby"],attributeNamesMapping:new Map([["a",["href","title","rel","target"]],["label",["for"]],["input",["type","name","placeholder","checked","maximumLength"]],["textarea",["placeholder","maximumLength"]],["button",["type"]],["select",["name","multiple"]],["div",["role"]],["iframe",["src"]],["img",["src","alt"]]]),describe(t){let e={};this.addAttributes(t,this.commonAttributes,e);let n=t.tagName.toLowerCase?.()||"";this.attributeNamesMapping.has(n)&&this.addAttributes(t,this.attributeNamesMapping.get(n),e),this.addDataAttrs(t,e);let o=this.getContent(t);return this.additionalHandling(t,{tag:n,attributes:e,...o&&{content:o}})},getContent(t){let e=t.tagName.toLowerCase?.()||"";return["input","textarea"].includes(e)?t.value:["div","iframe","img","body"].includes(e)?null:(["a","button","select","label"].includes(e),t.innerText)},additionalHandling(t,e){if((t.tagName.toLowerCase?.()||"")=="label"&&t.hasAttribute("for")){let o=t.getAttribute("for"),r=document.getElementById(o);r&&(e.target=this.describe(r))}return e},addAttributes(t,e,n){n||(n={});for(let o of e)t.hasAttribute(o)&&(n[o]=t.getAttribute(o).substring(0,this.MAX_ATTRIBUTE_LENGTH));return n},addDataAttrs(t,e){let n=0;for(let o in t.dataset)if(e[`data-${o}`]=t.dataset[o].substring(0,this.MAX_ATTRIBUTE_LENGTH),n++,n>this.MAX_NUM_DATA_ATTRIBUTES)return e;return e}};var C=null,k=()=>j()||document.scrollingElement||document.body,_=function(t){return t?t<0?-1:1:0},F={x:{axisName:"scrollLeft",max:"scrollWidth",viewSize:"clientWidth"},y:{axisName:"scrollTop",max:"scrollHeight",viewSize:"clientHeight"}},O=function(t,e,n){if(T.isString(n)){let o=n;return o==="viewSize"&&t===k()?e==="x"?window.innerWidth:window.innerHeight:t[F[e][o]]}else return n},I=function(t,e,n){let o=F[e].axisName,r=t[o];if(t.scrollBy){let i={behavior:"instant"};i[e==="x"?"left":"top"]=n,t.scrollBy(i)}else t[o]+=n;return t[o]!==r},V=function(t,e){let n=window.getComputedStyle(t);return!(n.getPropertyValue(`overflow-${e}`)==="hidden"||["hidden","collapse"].includes(n.getPropertyValue("visibility"))||n.getPropertyValue("display")==="none")},v=function(t,e,n,o){let r=o*O(t,e,n)||-1;return r=_(r),I(t,e,r)&&I(t,e,-r)},U=function(t,e,n,o){return e==null&&(e="y"),n==null&&(n=1),o==null&&(o=1),v(t,e,n,o)&&V(t,e)},H=function(t=null){let e;if(!t){let n=k();if(v(n,"y",1,1)||v(n,"y",-1,1))return n;t=document.body||k()}if(v(t,"y",1,1)||v(t,"y",-1,1))return t;{let n=Array.from(t.children).map(o=>({element:o,rect:f.getVisibleClientRect(o)})).filter(o=>o.rect);n.map(o=>o.area=o.rect.width*o.rect.height);for(e of n.sort((o,r)=>r.area-o.area)){let o=H(e.element);if(o)return o}return null}},M={init(){C=null},isScrollableElement(t){return C||(C=k()&&H()||k()),t!==C&&U(t)}},j=function(){let t=K[window.location.host];if(t)return document.querySelector(t)},K={"twitter.com":"div.permalink-container div.permalink[role=main]","reddit.com":"#overlayScrollContainer","new.reddit.com":"#overlayScrollContainer","www.reddit.com":"#overlayScrollContainer","web.telegram.org":".MessageList"};window.Scroller=M;var x=function(){let t=null;return f.documentReady(()=>t=document.hasFocus()),globalThis.addEventListener("focus",y(function(e){return e.target===window&&(t=!0),!0}),!0),globalThis.addEventListener("blur",y(function(e){return e.target===window&&(t=!1),!0}),!0),()=>t}();Object.assign(globalThis,{windowIsFocused:x});var L=class{constructor(e){b(this,"element");b(this,"image");b(this,"rect");b(this,"linkText");b(this,"showLinkText");b(this,"reason");b(this,"secondClassCitizen");b(this,"possibleFalsePositive");Object.seal(this),e&&Object.assign(this,e)}},S={getLocalHintsForElement(t){let e=t.tagName.toLowerCase?.()||"",n=!1,o=!1,r=!1,i=[],h=[],m=null;if(e==="img"){let l=t.getAttribute("usemap");if(l){let c=t.getClientRects();l=l.replace(/^#/,"").replace(\'"\',\'\\\\"\');let d=document.querySelector(`map[name="${l}"]`);if(d&&c.length>0){n=!0;let p=d.getElementsByTagName("area"),g=f.getClientRectsForAreas(c[0],p);g=g.map(N=>Object.assign(N,{image:t})),h.push(...g)}}}let s=t.getAttribute("aria-disabled");if(s&&["","true"].includes(s.toLowerCase()))return[];if(this.checkForAngularJs||(this.checkForAngularJs=function(){if(document.getElementsByClassName("ng-scope").length===0)return()=>!1;{let c=[];for(let d of["","data-","x-"])for(let p of["-",":","_"])c.push(`${d}ng${p}click`);return function(d){for(let p of c)if(d.hasAttribute(p))return!0;return!1}}}()),n||(n=this.checkForAngularJs(t)),t.hasAttribute("onclick"))n=!0;else{let l=t.getAttribute("role"),c=["button","tab","link","checkbox","menuitem","menuitemcheckbox","menuitemradio","radio"];if(l!=null&&c.includes(l.toLowerCase()))n=!0;else{let d=t.getAttribute("contentEditable");d!=null&&["","contenteditable","true","plaintext-only"].includes(d.toLowerCase())&&(n=!0)}}if(!n&&t.hasAttribute("jsaction")){let l=t.getAttribute("jsaction").split(";");for(let c of l){let d=c.trim().split(":");if(d.length>=1&&d.length<=2){let[p,g,N]=d.length===1?["click",...d[0].trim().split("."),"_"]:[d[0],...d[1].trim().split("."),"_"];n||(n=p==="click"&&g!=="none"&&N!=="_")}}}switch(e){case"a":n=!0;break;case"textarea":n||=!t.disabled&&!t.readOnly;break;case"input":n||=!(t.getAttribute("type")?.toLowerCase()=="hidden"||t.disabled||t.readOnly&&f.isSelectable(t));break;case"button":case"select":n||=!t.disabled;break;case"object":case"embed":n=!0;break;case"label":n||=t.control!=null&&!t.control.disabled&&this.getLocalHintsForElement(t.control).length===0;break;case"body":n||=t===document.body&&!x()&&window.innerWidth>3&&window.innerHeight>3&&(document.body!=null?document.body.tagName.toLowerCase():void 0)!=="frameset"?m="Frame.":void 0,n||=t===document.body&&x()&&M.isScrollableElement(t)?m="Scroll.":void 0;break;case"img":n||=["zoom-in","zoom-out"].includes(t.style.cursor);break;case"div":case"ol":case"ul":n||=t.clientHeight<t.scrollHeight&&M.isScrollableElement(t)?m="Scroll.":void 0;break;case"details":n=!0,m="Open.";break}let a=t.getAttribute("class");!n&&a?.toLowerCase().includes("button")&&(n=!0,r=!0);let u=t.getAttribute("tabindex"),w=u?parseInt(u):-1;if(!n&&!(w<0)&&!isNaN(w)&&(n=!0,o=!0),n)if(h.length>0){let l=h.map(c=>new L({element:c.element,image:t,rect:c.rect,secondClassCitizen:o,possibleFalsePositive:r,reason:m}));i.push(...l)}else{let l=f.getVisibleClientRect(t,!0);if(l!==null){let c=new L({element:t,rect:l,secondClassCitizen:o,possibleFalsePositive:r,reason:m});i.push(c)}}return i},getElementFromPoint(t,e,n,o){n==null&&(n=document),o==null&&(o=[]);let r=n.elementsFromPoint?n.elementsFromPoint(t,e)[0]:n.elementFromPoint(t,e);return o.includes(r)?r:(o.push(r),r&&r.shadowRoot?S.getElementFromPoint(t,e,r.shadowRoot,o):r)},getLocalHints(t){if(!document.body)return[];let e=(s,a)=>{a==null&&(a=[]);for(let u of Array.from(s.querySelectorAll("*")))a.push(u),u.shadowRoot&&e(u.shadowRoot,a);return a},n=e(document.body),o=[];for(let s of Array.from(n))if(!t||s.href){let a=this.getLocalHintsForElement(s);o.push(...a)}o=o.reverse();let r=[1,2,3];o=o.filter((s,a)=>{if(!s.possibleFalsePositive)return!0;let w=Math.max(0,a-6);for(;w<a;){let l=o[w].element;for(let c of r)if(l=l?.parentElement,l===s.element)return!1;w+=1}return!0});let i=o.filter(s=>{if(s.secondClassCitizen)return!1;let a=s.rect,u=S.getElementFromPoint(a.left+a.width*.5,a.top+a.height*.5);if(u&&(s.element.contains(u)||u.contains(s.element))||s.element.localName=="area"&&u==s.image)return!0;let l=[a.top+.1,a.bottom-.1],c=[a.left+.1,a.right-.1];for(let d of l)for(let p of c){let g=S.getElementFromPoint(p,d);if(g&&(s.element.contains(g)||g.contains(s.element)))return!0}});i.reverse();let{top:h,left:m}=f.getViewportTopLeft();for(let s of i)s.rect.top+=h,s.rect.left+=m;return i}};var A=class{constructor(){this.hints=null;this.hintMarkers=null;this.markersDiv=null;this.enrichedMarkers=null}reset(){this.removeMarkers(),this.hints=null,this.hintMarkers=null,this.markersDiv=null}async capture(){this.reset(),this.createMarkers(),this.displayMarkers()}createMarkers(){this.hints=S.getLocalHints(),this.hintMarkers=new Map,this.hints.forEach((e,n)=>{let o=f.createElement("div"),r=e.element.attributes["data-momentic-id"]?.value??void 0;if(!r){console.warn(`[MOMENTIC] No data-momentic-id found for interactive element ${e.element.outerHTML}`);return}o.style.left=e.rect.left+"px",o.style.top=e.rect.top+"px",o.style.zIndex=214e7+n,o.className="vimiumReset internalVimiumHintMarker vimiumHintMarker",z(o,r),this.hintMarkers.set(r,{hint:e,marker:o})})}enrichMarkers(){if(this.hintMarkers){this.enrichedMarkers=[];for(let[e,n]of this.hintMarkers)this.enrichedMarkers.push(Object.assign(R.describe(n.hint.element),{hintString:e}))}}displayMarkers(){this.hintMarkers&&(this.markersDiv||(this.markersDiv=f.addElementsToPage(Array.from(this.hintMarkers.values()).map(e=>e.marker),{id:"vimiumHintMarkerContainer",className:"vimiumReset"})))}removeMarkers(){this.markersDiv&&(f.removeElement(this.markersDiv),this.markersDiv=null)}toggleMarkers(){this.markersDiv?this.removeMarkers():this.displayMarkers()}},z=(t,e)=>{for(let n of e){let o=document.createElement("span");o.className="vimiumReset",o.textContent=n,t.appendChild(o)}};window.HintManager=A;\n',vimiumCss:'.vimiumReset,a.vimiumReset,a:hover.vimiumReset,a:link.vimiumReset,a:visited.vimiumReset,div.vimiumReset,span.vimiumReset,table.vimiumReset,td.vimiumReset,tr.vimiumReset{background:none;border:none;bottom:auto;box-shadow:none;color:#000;cursor:auto;display:inline;float:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:inherit;font-style:normal;font-variant:normal;font-weight:400;height:auto;left:auto;letter-spacing:0;line-height:100%;margin:0;max-height:none;max-width:none;min-height:0;min-width:0;opacity:1;padding:0;position:static;right:auto;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;top:auto;vertical-align:baseline;white-space:normal;width:auto;z-index:2140000000}tbody.vimiumReset,thead.vimiumReset{display:table-header-group}tbody.vimiumReset{display:table-row-group}div.internalVimiumHintMarker{background:linear-gradient(180deg,#fff785 0,#ffc542);border:1px solid #c38a22;border-radius:3px;box-shadow:0 3px 7px 0 rgba(0,0,0,.3);display:block;font-size:11px;left:-1px;overflow:hidden;padding:1px 3px 0;position:absolute;top:-1px;white-space:nowrap}div.internalVimiumHintMarker span{color:#302505;font-family:Helvetica,Arial,sans-serif;font-size:11px;font-weight:700;text-shadow:0 1px 0 hsla(0,0%,100%,.6)}div.internalVimiumHintMarker>.matchingCharacter{color:#d4ac3a}div>.vimiumActiveHintMarker span{color:#a07555!important}div.internalVimiumInputHint{background-color:rgba(255,247,133,.3);border:1px solid #c38a22;display:block;pointer-events:none;position:absolute}div.internalVimiumSelectedInputHint{background-color:hsla(0,100%,70%,.3);border:1px solid #933!important}div.internalVimiumSelectedInputHint span{color:#fff!important}div.vimiumHighlightedFrame{border:5px solid #ff0;box-sizing:border-box;margin:0;pointer-events:none}div.vimiumHighlightedFrame,iframe.vimiumHelpDialogFrame{height:100%;left:0;padding:0;position:fixed;top:0;width:100%}iframe.vimiumHelpDialogFrame{background-color:hsla(0,0%,4%,.6);border:none;display:block;z-index:2139999997}div#vimiumHelpDialogContainer{background-color:#fff;border:2px solid #b3b3b3;border-radius:6px;margin:50px auto;max-height:calc(100% - 100px);max-width:calc(100% - 100px);opacity:1;overflow-x:auto;overflow-y:auto;width:840px}div#vimiumHelpDialog{min-width:600px;padding:8px 12px}span#vimiumTitle,span#vimiumTitle *,span#vimiumTitle span{font-size:20px}#vimiumTitle{display:block;line-height:130%;white-space:nowrap}td.vimiumHelpDialogTopButtons{text-align:right;width:100%}#helpDialogOptionsPage,#helpDialogWikiPage{font-size:14px;padding-left:5px;padding-right:5px}div.vimiumColumn{float:left;font-size:11px;line-height:130%;width:50%}div.vimiumColumn tr{display:table-row}div.vimiumColumn td{display:table-cell;font-size:11px;line-height:130%}div.vimiumColumn table,div.vimiumColumn td,div.vimiumColumn tr{margin:0;padding:0}div.vimiumColumn table{table-layout:auto;width:100%}div.vimiumColumn td{padding:1px;vertical-align:top}div#vimiumHelpDialog div.vimiumColumn tr>td:first-of-type{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;text-align:right;white-space:nowrap}span.vimiumHelpDialogKey{background-color:#f3f3f3;border:1px solid;border-color:#ccc #ccc #bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb;color:#212121;font-family:monospace;font-size:11px;margin-left:2px;padding:1px 4px}div#vimiumHelpDialog div.vimiumColumn tr>td:nth-of-type(3){width:100%}div#vimiumHelpDialog div.vimiumDivider{background-color:#9a9a9a;display:block;height:1px;margin:10px auto;width:100%}div#vimiumHelpDialog td.vimiumHelpSectionTitle{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:16px;font-weight:700;padding-top:3px}div#vimiumHelpDialog td.vimiumHelpDescription{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px}div#vimiumHelpDialog span.vimiumCopyCommandNameName{cursor:pointer;font-size:12px;font-style:italic}div#vimiumHelpDialog tr.advanced{display:none}div#vimiumHelpDialog.showAdvanced tr.advanced{display:table-row}div#vimiumHelpDialog div.advanced td:nth-of-type(3){color:#555}div#vimiumHelpDialog a.closeButton{color:#555;cursor:pointer;font-family:courier new;font-size:24px;font-weight:700;padding-left:5px;position:relative;text-decoration:none;top:3px}div#vimiumHelpDialog a{text-decoration:underline}div#vimiumHelpDialog a.closeButton:hover{color:#000;-webkit-user-select:none}div#vimiumHelpDialogFooter{display:block;margin-bottom:37px;position:relative}table.helpDialogBottom{width:100%}td.helpDialogBottomRight{float:right;text-align:right;width:100%}td.helpDialogBottomLeft,td.helpDialogBottomRight{padding:0}div#vimiumHelpDialogFooter *{font-size:10px}a#toggleAdvancedCommands,span#help-dialog-tip{font-size:10px;position:relative;top:19px;white-space:nowrap}a#toggleAdvancedCommands,a:active.vimiumHelDialogLink,a:hover.vimiumHelDialogLink,a:link.vimiumHelDialogLink,a:visited.vimiumHelDialogLink{color:#2f508e;cursor:pointer;text-decoration:underline}div.vimiumHUD{background:#f1f1f1;border:1px solid #aaa;border-radius:4px;bottom:8px;box-shadow:0 2px 10px rgba(0,0,0,.8);display:block;left:8px;position:fixed;text-align:left;width:calc(100% - 20px);z-index:2139999999}iframe.vimiumHUDFrame{background-color:transparent;border:none;bottom:-14px;display:block;height:58px;margin:0 0 0 -40%;min-width:300px;opacity:0;overflow:hidden;padding:0;position:fixed;right:20px;width:20%;z-index:2139999998}div.vimiumHUD .vimiumHUDSearchArea{background-color:#f1f1f1;border-radius:4px 4px 0 0;display:block;padding:3px}div.vimiumHUD .vimiumHUDSearchAreaInner{border-radius:3px;box-sizing:border-box;color:#777;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;height:30px;line-height:20px;margin-bottom:0;outline:none;padding:2px 4px;width:100%}div.vimiumHUD .hud-find{background:#fff;border:1px solid #ccc}div.vimiumHUD span#hud-find-input,div.vimiumHUD span#hud-match-count{color:#000;display:inline;outline:none;overflow-y:hidden;white-space:nowrap}div.vimiumHUD span#hud-find-input:before{content:"/"}div.vimiumHUD span#hud-match-count{color:#aaa;font-size:12px}div.vimiumHUD span#hud-find-input br{display:none}div.vimiumHUD span#hud-find-input *{display:inline;white-space:nowrap}body.vimiumFindMode ::selection{background:#ff9632}iframe.vomnibarFrame{background-color:transparent;border:none;display:block;font-family:sans-serif;height:calc(100% - 70px);left:50%;margin:0 0 0 -40%;min-width:400px;overflow:hidden;padding:0;position:fixed;top:70px;width:calc(80% + 20px);z-index:2139999998}div.vimiumFlash{background-color:transparent;box-shadow:0 0 4px 2px #4183c4;padding:1px;position:absolute;z-index:2140000000}iframe.vimiumUIComponentHidden{display:none}iframe.vimiumUIComponentVisible{color-scheme:light dark;display:block}iframe.vimiumUIComponentReactivated{border:5px solid #ff0}iframe.vimiumNonClickable{pointer-events:none}@media (prefers-color-scheme:dark){iframe.reverseDarkReaderFilter{-webkit-filter:invert(100%) hue-rotate(180deg)!important;filter:invert(100%) hue-rotate(180deg)!important}body.vimiumBody{background-color:#292a2d;color:#fff}body.vimiumBody a,body.vimiumBody a:visited{color:#8ab4f8}body.vimiumBody input,body.vimiumBody textarea{background-color:#1d1d1f;border-color:#1d1d1f;color:#e8eaed}body.vimiumBody div.example{color:#9aa0a6}body.vimiumBody div#footer,body.vimiumBody div#state,div#vimiumHelpDialogContainer{background-color:#202124;border-color:hsla(0,0%,100%,.1)}div#vimiumHelpDialog{background-color:#292a2d;color:#fff}div#vimiumHelpDialog td.vimiumHelpDescription{color:#c9cccf}div#vimiumHelpDialog td.vimiumHelpSectionTitle,span#vimiumTitle{color:#fff}#vimiumTitle>span:first-child{color:#8ab4f8!important}div#vimiumHelpDialog a{color:#8ab4f8}div#vimiumHelpDialog div.vimiumDivider{background-color:hsla(0,0%,100%,.1)}span.vimiumHelpDialogKey{background-color:#1d1d1f;border:1px solid #000;box-shadow:none;color:#fff}}',htmlUtilsLibJs:`// src/html/constants.ts
16
+ ${r.code}`;throw r.logger.error({err:e.error,code:r.code,env:r.context.toObjectCopy()},t),new Error(t)}if(e.variableUpdates)for(let[t,n]of Object.entries(e.variableUpdates))r.context.setVariable(t,n);if(e.persistentVariableUpdates&&Object.keys(e.persistentVariableUpdates).length>0){await r.callbacks?.onPersistentVariableUpdates?.(e.persistentVariableUpdates);for(let[t,n]of Object.entries(e.persistentVariableUpdates))r.context.setVariable(t,n)}return e.result}import{set as vL}from"lodash-es";async function Gd(r){let{orgId:e,s:t,context:n,logger:o,signal:i,retries:a=2,timeoutMs:s=gn,allowUndefined:c=!1}=r,l=/{{(.*?)}}/g,u=t.matchAll(l),d=t;for(let p of u){if(p.length<2)continue;let h=p[1].trim(),m;try{m=await Pr({orgId:e,code:h,fragment:!0,context:n,timeoutMs:s,logger:o,retries:a,localTools:r.localTools,signal:i})}catch(f){throw o.error({err:f,value:t},"Error evaluating template string"),f}if(m===void 0&&!c)throw new _("UserConfigurationError",`Template fragment '${h}' evaluated to undefined. Please ensure that the variable name is spelled correctly and it is only referenced after being assigned a value.`);let g=typeof m=="string"?m:`${m}`;g=g.replaceAll(/\$/g,"$$$$"),d=d.replace(p[0],g)}return d}async function hl(r){return ub(r)}async function ub({obj:r,bannedKeys:e,allowList:t,context:n,prefixPath:o=[],replacements:i=[],...a}){for(let s in r){if(e.includes(s))continue;let c=!1;if(t)if(t.includes(s))c=!0;else continue;let l=r[s],u=[...o,s];if(typeof l=="string"&&l.includes("{{")){let d=await Gd({s:l,context:n,...a});if(l===d)continue;i.push({path:u,original:l}),r[s]=d}else typeof l=="object"&&l!==null&&!Array.isArray(l)&&await ub({obj:l,bannedKeys:e,context:n,prefixPath:u,replacements:i,allowList:c?void 0:t,...a})}return i}function gl(r,e){for(let{path:t,original:n}of e)vL(r,t,n)}import AL from"fetch-retry";var _7=process.env.MAILINATOR_API_KEY,M7=AL(global.fetch,{retryOn:function(r,e,t){return r>3?!1:!!(e!==null||t&&t.status>=400)},retryDelay:function(r){return 500}});import{randomUUID as QF}from"crypto";import eB from"fetch-cookie";import tB from"path";import{diff as RL}from"deep-object-diff";import{cloneDeep as eee}from"lodash-es";function db(r,e){return!r&&!e?!1:!r||!e?!0:Object.keys(RL(r,e)).length>0}function jd({steps:r,topLevel:e=!0,...t}){let{stepCacheEntries:n,logger:o,keyPrefix:i}=t,a=[],s=[],c=[],l=0,u=(p,h)=>{try{let m=mn.parse(h.value);if(m.type!==p.type){o.warn({parsedCacheEntry:m,command:p},"Not using step cache due to type mismatch"),s.push(h.key);return}p.cache=m.cache,a.push(h.key),c.push(h.uniqueKey)}catch(m){s.push(h.key),o.error({err:m,cacheEntry:h},"Not using step cache due to parsing error")}},d=(p,h)=>{let m=xL(p.id,h),g=m.find(f=>!!n[f]);if(g)u(p,n[g]);else{if(p.type==="AI_CHECK")return;s.push(m[0])}};for(let p of r)switch(p.type){case"MOBILE_PRESET_STEP":{if(!Ks(p.command)||p.command.type==="TYPE"&&!p.command.target||"cache"in p.command&&p.command.cache)continue;l++,d(p.command,i);break}case"RESOLVED_MOBILE_MODULE":{l+=p.steps.length;let{cacheKeysHit:h,cacheKeysMissed:m,uniqueKeysHit:g}=jd({...t,steps:p.steps,keyPrefix:i?`${i}:${p.id}`:p.id,topLevel:!1});a.push(...h),s.push(...m),c.push(...g);break}default:{let h=p}}return e&&l&&s.length>0&&o.warn({totalSteps:l,cacheKeysMissed:s,cacheKeysHit:a,uniqueKeysHit:c,cacheEntries:n.length},"Step cache did not fully resolve"),{cacheKeysHit:a,cacheKeysMissed:s,uniqueKeysHit:c}}function CL(r,e){return e?`${e}:${r}`:r}function xL(r,e){let t=[],n=e?.split(":")??[];for(let o=n.length;o>=0;o--){let i=[...n.slice(o),r];t.push(i.join(":"))}return t.reverse(),t}function Vd(r){let{moduleStepParents:e=[],moduleIdParents:t=[]}=r;if(e.length!==t.length)throw new Error(`Invalid cache entry parent length: ${JSON.stringify(e)}
17
+ ${JSON.stringify(t)}`);let n=[];return n.push({key:CL(r.id,e.join(":")),organizationId:r.orgId,value:r.value,testId:r.testId}),n}function fl({cmd:r,newTarget:e,key:t,logger:n,updatedWithAI:o}){if(r.type==="DRAG")if(t!=="fromTarget"&&t!=="toTarget")n.error({cmd:r,newTarget:e,key:t},"Attempted to apply invalid cache to DRAG command");else{let i=r.cache?.updatedAt;r.cache={...r.cache,[t]:e,updatedAt:i&&!o?i:new Date}}else if(t==="target"&&xg(r)){let i=r.cache?.updatedAt;r.cache={...r.cache,target:e,updatedAt:i&&!o?i:new Date}}else n.error({cmd:r,newTarget:e,key:t},"Invalid target cache application")}function Sl(r,e,t){let n=r.cache&&"memory"in r.cache?r.cache.memory?.traces:void 0;return db(n,e)?(t.info({updatedTraces:e,oldCmd:r},"Wrote new memory to assertion command"),r.cache={...r.cache,memory:{type:"GCS_TRACES",traces:e},updatedAt:new Date},{changed:!0}):{changed:!1}}function Wd(r){return{...r,serializedHtml:void 0,nodeOnlySerializedHtml:void 0,screenshotUrl:void 0,boundingBox:void 0,selector:void 0,hybridSelector:void 0,generatedSelectors:void 0,id:-1}}function pb(r,e){return r?db(r.target.memory,e.target.memory)?{target:{...r.target,memory:e.target.memory},updatedAt:e.updatedAt}:r:{target:Wd(e.target),updatedAt:e.updatedAt}}function Mt(r,e,t=!1){return r.length<e?r:r.slice(0,e-3)+(t?"...TRUNCATED...":"[...]")}var Zn={EQUALS:"equals",CONTAINS:"contains",STARTS_WITH:"starts with",EXISTS:"exists"},Qn={EQUALS:"does not equal",CONTAINS:"does not contain",STARTS_WITH:"does not start with",EXISTS:"does not exist"},mb={EXISTS:"exists",VISIBLE:"is visible",ENABLED:"is enabled",EDITABLE:"is editable",FOCUSED:"is focused"},hb={EXISTS:"does not exist",VISIBLE:"is not visible",ENABLED:"is disabled",EDITABLE:"is not editable",FOCUSED:"is not focused"};var Mee={CONTENT:"The page"};function gb(r){switch(r.type){case"SUBSTRING":return`match substring '${r.url}'`;case"REGEX":return`match regex '${r.regex}'`;case"GLOB":return`match glob '${r.glob}'`;case"DOMAIN":return`match domain '${r.domain}'`;default:return(t=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}}function _L(r){return typeof r=="object"&&r!==null}function Jn(r){if(Array.isArray(r))return r.map(Jn);if(_L(r)){let e={};return Object.entries(r).forEach(([t,n])=>{n!==void 0&&(e[t]=Jn(n))}),e}return r}function ML(r){switch(r.type){case"AI_CHECK":return`AI check: ${r.assertion}`;case"TAP":return`Tap on element: ${vd(r.target)}`;case"TYPE":return`Type ${r.text} ${r.target?`into ${vd(r.target)}`:""}`;case"PRESS":return`Press the ${r.key} button`;case"PRESS_KEYBOARD":return`Press the ${r.key} key`;case"SWIPE":return r.scrollableElement.type==="CUSTOM"?`Swipe ${r.direction} in container: ${r.scrollableElement.target.description}`:`Swipe ${r.direction} in the ${r.scrollableElement.type.toLowerCase()}`;case"OPEN_APP":return`Open app: ${r.packageName}`;case"OPEN_NOTIFICATION_DRAWER":return"Open notification drawer";case"JAVASCRIPT":return`Execute JavaScript: ${r.code}`;case"REQUEST":return`Make API request to ${r.url}`;case"WAIT":return`Wait ${r.timeoutSecs} seconds`;case"ADD_FILE":return`Add file: ${r.file} to ${r.storageLocation}`;case"ADB":return`ADB command: ${r.command}`;case"STATE":return"Get state";default:{let e=r;throw new Error("If Typescript complains about the line above, you missed a case or break in the switch above")}}}function fb(r){switch(r.type){case"MOBILE_PRESET_STEP":return ML(r.command);case"MOBILE_MODULE_STEP":return`Module ${r.moduleId}`;case"RESOLVED_MOBILE_MODULE":return`Module ${r.name}`;default:{let e=r;throw new Error("If Typescript complains about the line above, you missed a case or break in the switch above")}}}import{cloneDeep as Sb}from"lodash-es";async function yb(r){let e={},{resolvedSteps:t,newSchemaVersion:n}=await yl({rawSteps:r.rawStepLists.steps,onFetchModule:r.onFetchModule,logger:r.logger,metadata:r.testMetadata,resolvedModuleCache:e}),o={steps:t};for(let i of["beforeSteps","afterSteps"]){let a=r.rawStepLists[i];if(!a)continue;let{resolvedSteps:s}=await yl({rawSteps:a,onFetchModule:r.onFetchModule,logger:r.logger,metadata:r.testMetadata,resolvedModuleCache:e});o[i]=s}return{resolvedStepLists:o,moduleIds:Array.from(Object.keys(e))}}async function yl({rawSteps:r,onFetchModule:e,logger:t,metadata:n,resolvedModuleCache:o={}}){let i=[];for(let a of r)i.push(await bb({rawStep:Sr.parse(a),onFetchModule:e,logger:t,resolvedModuleCache:o}));return{resolvedSteps:i,newSchemaVersion:n.schemaVersion}}async function bb({rawStep:r,onFetchModule:e,logger:t,resolvedModuleCache:n}){switch(r.type){case"MOBILE_MODULE_STEP":{let o=r.moduleId,i=n[o];if(i)return{...Sb(i),...r,type:"RESOLVED_MOBILE_MODULE"};let a=await e(o);if(!a)throw new Error(`Could not find module with id ${o}`);let s;try{s=Sr.array().parse(a.steps)}catch(u){throw t.error({err:u,steps:a.steps,moduleId:o},"Module failed to parse (mobile)"),u}let c=await Promise.all(s.map(u=>bb({rawStep:u,onFetchModule:e,logger:t,resolvedModuleCache:n}))),l={...a,steps:c};return n[o]=Sb(l),{...l,...r,type:"RESOLVED_MOBILE_MODULE"}}case"MOBILE_PRESET_STEP":return r}}import{cloneDeep as IL}from"lodash-es";import{v4 as $d}from"uuid";async function eo(r){let e=new Map,t=new Set,n=IL(r.steps),o=await Eb({...r,steps:n,moduleStepParents:[],moduleIdParents:[],moduleIdReplacements:e,seenModules:t});return{stepsToSave:o.stepsToSave,cachesToSave:o.cachesToSave,moduleUpdates:o.moduleUpdates}}async function Eb({steps:r,...e}){let{seenModules:t,cacheCreationParams:n,moduleIdParents:o,moduleStepParents:i,moduleIdReplacements:a,shouldCreateNewModuleId:s,createNewCacheIds:c}=e,l={cachesToSave:[],stepsToSave:[],moduleUpdates:[]};for(let u of r)switch(u.id=c?$d():u.id,u.type){case"MOBILE_PRESET_STEP":{let d=u.command;d.id=c?$d():d.id,"cache"in d&&d.cache&&(n&&(l.cachesToSave=l.cachesToSave.concat(Vd({id:d.id,orgId:n.orgId,testId:n.testId,value:mn.parse(d),moduleIdParents:o,moduleStepParents:i}))),delete d.cache),l.stepsToSave.push({...u,command:d});break}case"RESOLVED_MOBILE_MODULE":{let d=c?$d():u.id,p=u.moduleId;a.has(p)?p=a.get(p):s!==void 0&&(p=await s(u),a.set(u.moduleId,p));let{cachesToSave:h,stepsToSave:m,moduleUpdates:g}=await Eb({...e,steps:u.steps,cacheCreationParams:n?{...n}:void 0,createNewCacheIds:!1,moduleStepParents:[...i,d],moduleIdParents:[...o,p],skipCacheIntermediateEntries:c});l.moduleUpdates=l.moduleUpdates.concat(g),l.cachesToSave=l.cachesToSave.concat(h),t.has(p)||(t.add(p),l.moduleUpdates.push({...qo.parse(u),steps:Sr.array().parse(m),moduleId:p}));let f=da.parse({...u,type:"MOBILE_MODULE_STEP",moduleId:p,inputs:u.inputs,id:d});l.stepsToSave.push(f);break}default:{let d=u}}return l}function PL(r){let e={parentChain:[]};return Tb(r,e),e}function Tb(r,e){let{onPreset:t,onModule:n,earlyStop:o}=r;for(let i of r.steps){if(i.type==="RESOLVED_MOBILE_MODULE"){if(n?.(i,e)&&o||(e.parentChain.push(i),Tb({...r,steps:i.steps},e)&&o))return!0;e.parentChain.pop();continue}if(t(i,e)&&o)return!0}return!1}function OL(r,e,t=[]){let n,o=[],i=(a,s)=>{let c=JSON.stringify(s.parentChain.map(u=>u.id)),l=t.length===0?!0:JSON.stringify(t)===c;return a.id===e&&l?(n=a,o=s.parentChain,!0):!1};return PL({steps:r,earlyStop:!0,onPreset:i,onModule:i}),{result:n,parentChain:o}}function vb({currentStep:r,currentParentChain:e,desiredStepId:t,desiredStepParentChain:n}){let o=Array.from(e),i=Array.from(n);for(let s=0;s<o.length;s++){if(o[s]!==i[s])return!1;i.shift()}return!!OL([r],t,i).result}function Ab(r){let e=r[0],t=r[0],n=!1;for(;!n&&t;)switch(t.type){case"MOBILE_MODULE_STEP":if(!t.steps.length){e=t,n=!0;break}t=t.steps[0];break;case"MOBILE_PRESET_STEP":e=t,n=!0;break;default:{let s=t}}let o=r[r.length-1],i=r[r.length-1],a=!1;for(;!a&&i;)switch(i.type){case"MOBILE_MODULE_STEP":if(!i.steps.length){o=i,a=!0;break}i=i.steps[i.steps.length-1];break;case"MOBILE_PRESET_STEP":o=i,a=!0;break;default:{let s=i}}return{firstMetadata:e,lastMetadata:o}}function wb({result:r,firstMetadata:e,lastMetadata:t}){e&&(r.beforeSnapshot=e.beforeSnapshot),t&&(r.data=t.data,r.afterSnapshot=t.afterSnapshot,t.status!=="SUCCESS"&&(r.message=t.message))}import{cloneDeep as Rte}from"lodash-es";import xte from"truncate-json";import{v4 as Dte}from"uuid";import{cloneDeep as gte,unset as fte}from"lodash-es";import{cloneDeep as Hte}from"lodash-es";import{cloneDeep as une}from"lodash-es";import Pre from"diff-lines";import qd,{gte as Lre}from"semver";var Rb={name:"Migrate to ai step v2",fromVersion:"1.0.4",toVersion:"1.0.5",recursiveKeys:new Set(["results","commands"]),stopOnFailure:!0,execute:async r=>(r=r.filter(e=>!(e.status!==void 0&&e.type==="AI_ACTION")),r=r.map(e=>(e.status===void 0||e.type==="PRESET_ACTION"&&(e.results=e.commands??e.results??[]),e)),r)};var Cb={name:"Make sure ai step v2 has done command",fromVersion:"1.0.5",toVersion:"1.0.6",recursiveKeys:new Set(["results","commands"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="AI_ACTION"||e.status!==void 0||!e.commands||!e.commands.length)return e;let t=e.commands,n=t[t.length-1];return n&&n.type!=="SUCCESS"&&t.push({type:"SUCCESS"}),e})};var LL=["target","fromTarget","toTarget"];function xb(r){for(let e of LL){if(r[e]===void 0)continue;let t=r[e];t.elementDescriptor!==void 0?t.type="description":r[e]={type:"description",elementDescriptor:""}}}var _b={name:"Migrate element target to discriminated union",fromVersion:"1.0.6",toVersion:"1.0.7",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":return xb(e.command),e;case"AI_ACTION":{let t=e.commands;for(let n of t??[])xb(n);return e}default:return e}})};import{v4 as NL}from"uuid";var Mb={name:"Ensure module steps have ids",fromVersion:"1.0.7",toVersion:"1.0.8",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"MODULE":return e.id||(e.id=NL()),e;default:return e}})};import{v4 as Ib}from"uuid";var Pb={name:"Ensure module steps have ids",fromVersion:"1.0.8",toVersion:"1.0.9",recursiveKeys:new Set(["results","steps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":{if(!e.command)return e;let t=e.command;return t.id=t.id??Ib(),e}case"AI_ACTION":return e.commands&&(e.steps=e.commands.map(t=>({type:"PRESET_ACTION",command:{...t,id:t.id??Ib()}})),delete e.commands),e;default:return e}})};var Ob={name:"Migrate ai waits to checks",fromVersion:"1.0.9",toVersion:"1.0.10",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{switch(e.type){case"PRESET_ACTION":{if(!e.command)return e;let t=e.command;return typeof t.type!="string"||t.type!=="AI_WAIT"||(t.type="AI_ASSERTION",t.timeout||(t.timeout=10)),e}default:return e}})};import{v4 as kL}from"uuid";var Lb={name:"Add ids to all steps",fromVersion:"1.0.10",toVersion:"1.0.11",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>("id"in e&&typeof e.id=="string"||(e.id=kL()),e))};import{v4 as Nb}from"uuid";var kb={name:"Add ids to all steps",fromVersion:"1.0.11",toVersion:"1.0.12",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if("id"in e&&typeof e.id=="string")return e;if("condition"in e&&typeof e.condition=="object"&&e.condition){let t=e.condition;t.id||(t.id=Nb())}return e.id=Nb(),e})};var Db={name:"Move env key to steps",fromVersion:"1.0.12",toVersion:"1.0.13",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||typeof t.envKey!="string"||(e.envKey=t.envKey,delete t.envKey),e})};import{v4 as DL}from"uuid";var Ub={name:"Redo last two migrations",fromVersion:"1.0.13",toVersion:"1.0.14",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if((!("id"in e)||typeof e.id!="string")&&(e.id=DL()),e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||typeof t.envKey!="string"||(e.envKey=t.envKey,delete t.envKey),e})};var Fb={name:"Migrate select choice",fromVersion:"1.0.14",toVersion:"1.0.15",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="SELECT_OPTION"||e.option===void 0||(e.choice={type:"VALUE",value:t.option},e.option=void 0),e})};var Bb={name:"Migrate select choice",fromVersion:"1.0.15",toVersion:"1.0.16",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return t&&zb(t),e})};function zb(r){r&&Object.keys(r).forEach(e=>{if(typeof r[e]=="object"&&r[e]){zb(r[e]);return}if(typeof r[e]!="string")return;let t=r[e];e==="code"?r[e]=t.replace(/inputs\./g,"env."):t.includes("{{")&&t.includes("}}")&&(r[e]=t.replace(/inputs\./g,"env."))})}var Hb={name:"Migrate switch tab choice",fromVersion:"1.0.16",toVersion:"1.0.17",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="TAB"||t.url===void 0||(t.action={type:"SUBSTRING",substring:t.url},t.url=void 0),e})};var Gb={name:"Remove press keys sequentially",fromVersion:"1.0.17",toVersion:"1.0.18",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="TYPE"?e:t.pressKeysSequentially===void 0?(t.delay=0,e):(t.pressKeysSequentially&&(t.pressKeysSequentially=void 0,t.delay=50),e)})};var jb={name:"Migrate wait for URL to matcher",fromVersion:"1.0.18",toVersion:"1.0.19",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="WAIT_FOR_URL"||t.url===void 0||(t.matcher={type:"GLOB",glob:t.url},t.url=void 0),e})};var Vb={name:"Migrate select choice round 2",fromVersion:"1.0.19",toVersion:"1.0.20",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!0,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;if(!t)return e;if(t.type==="SELECT_OPTION"){if(t.option===void 0)return e;t.choice={type:"VALUE",value:t.option},t.option=void 0}else if(t.type==="TAB"){if(t.url===void 0)return e;t.action={type:"SUBSTRING",substring:t.url},t.url=void 0}else if(t.type==="WAIT_FOR_URL"){if(t.url===void 0)return e;t.matcher={type:"GLOB",glob:t.url},t.url=void 0}else t.type==="AI_WAIT"&&(t.type="AI_ASSERTION",t.timeout||(t.timeout=10));return e})};var Wb={name:"Migrate ",fromVersion:"1.0.20",toVersion:"1.0.21",recursiveKeys:new Set(["results","steps","blocks","elseSteps"]),stopOnFailure:!1,execute:async r=>r.map(e=>{if(e.type!=="PRESET_ACTION")return e;let t=e.command;return!t||t.type!=="MOCK_ROUTE"&&t.type!=="SET_HEADER"&&t.type!=="RECORD_REQUESTS"&&t.type!=="REGISTER_REQUEST_LISTENER"||(t.type==="REGISTER_REQUEST_LISTENER"||t.type==="RECORD_REQUESTS"?t.requestMatcher={urlMatcher:{type:"REGEX",regex:t.pattern}}:(t.type==="SET_HEADER"||t.type==="MOCK_ROUTE")&&t.urlPattern&&(t.requestMatcher={urlMatcher:{type:"REGEX",regex:t.urlPattern}})),e})};var $b={name:"Migrate AI checks to preset actions",fromVersion:"1.0.0",toVersion:"1.0.1",recursiveKeys:new Set,execute:async r=>r.map(e=>{if(e.type!=="AI_ASSERTION")return e;let n={type:"PRESET_ACTION",command:{type:"AI_ASSERTION",assertion:e.text,useVision:!1,disableCache:!0}},o={...e,...n};return delete o.text,o}),stopOnFailure:!0};var bl=new Set(["CLICK","TYPE","SELECT_OPTION"]),qb={name:"Migrate element descriptor to live in a target object",fromVersion:"1.0.3",toVersion:"1.0.4",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e.command,n=t?.type,o=t?.elementDescriptor;return(o!==void 0||bl.has(n))&&(t.target={elementDescriptor:o??""}),e.commands&&Array.isArray(e.commands)&&e.commands.forEach(a=>{let s=a?.elementDescriptor,c=a?.type;(s!==void 0||bl.has(c))&&(a.target={elementDescriptor:s??""})}),e.results&&Array.isArray(e.results)&&e.results.forEach(a=>{let s=a.command,c=s?.elementDescriptor,l=s?.type;(c!==void 0||bl.has(l))&&(s.target={elementDescriptor:c??""}),a.commands&&Array.isArray(a.commands)&&a.commands.forEach(d=>{let p=d?.elementDescriptor,h=d?.type;(p!==void 0||bl.has(h))&&(d.target={elementDescriptor:p??""})})}),e}),stopOnFailure:!0};var Kb={name:"Migrate FAILURE status to FAILED",fromVersion:"1.0.1",toVersion:"1.0.2",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e;return t.status==="FAILURE"&&(t.status="FAILED"),typeof t.commands=="object"&&Array.isArray(t.commands)&&t.commands.forEach(n=>{if(n&&typeof n=="object"){let o=n;o?.status==="FAILURE"&&(o.status="FAILED")}}),t}),stopOnFailure:!0};var Yb={name:"Migrate preset step types to use the same",fromVersion:"1.0.2",toVersion:"1.0.3",recursiveKeys:new Set,execute:async r=>r.map(e=>{let t=e.command,n=t?.type;return n?.startsWith("PRESET_")&&(t.type=n.slice(7)),e.commands&&Array.isArray(e.commands)&&e.commands.forEach(i=>{let a=i.type;a?.startsWith("PRESET_")&&(i.type=a.slice(7))}),e.results&&Array.isArray(e.results)&&e.results.forEach(i=>{let a=i.command,s=a?.type;s?.startsWith("PRESET_")&&(a.type=s.slice(7)),i.commands&&Array.isArray(i.commands)&&i.commands.forEach(l=>{let u=l.type;u?.startsWith("PRESET_")&&(l.type=u.slice(7))})}),e}),stopOnFailure:!0};var El=[$b,Kb,Yb,qb,Rb,Cb,_b,Mb,Pb,Ob,Lb,kb,Db,Ub,Fb,Bb,Hb,Gb,jb,Vb,Wb];if(Gn!==El[El.length-1].toVersion)throw new Error("Please bump LATEST_SCHEMA_VERSION in types package after adding a migration");El.forEach((r,e)=>{if(!qd.valid(r.toVersion)||!qd.valid(r.fromVersion))throw new Error(`Migration '${r.name}' has invalid version`);if(!qd.gt(r.toVersion,r.fromVersion))throw new Error(`Migration '${r.name}' has toVersion <= fromVersion`);if(e===0)return;if(El[e-1].toVersion!==r.fromVersion)throw new Error(`Migration '${r.name}' at index ${e} is not contiguous with previous migration`)});import{diff as _ne}from"deep-object-diff";import{cloneDeep as Ine}from"lodash-es";import{v4 as Wne}from"uuid";import{cloneDeep as Yne}from"lodash-es";import{stringify as soe}from"yaml";async function te(r,e){if(!(r<=0))return new Promise((t,n)=>{if(e?.aborted){n(e.reason);return}e?.addEventListener("abort",i,{once:!0});let o=setTimeout(()=>{e?.removeEventListener("abort",i),t()},r);function i(){clearTimeout(o),e?.removeEventListener("abort",i),n(e?.reason)}})}async function Kd({promiseGenerator:r,signal:e,codePath:t,logger:n}){let i=Date.now(),a=setInterval(()=>{if(e?.aborted){clearInterval(a);return}n?.warn({codePath:t,startTime:i,elapsedMilliseconds:Date.now()-i},`Asynchronous operation is taking a long time (${t})`)},5e3);return new Promise((s,c)=>{function l(){clearInterval(a),e?.removeEventListener("abort",l),c(e?.reason)}if(e?.aborted){c(e?.reason),clearInterval(a);return}e?.addEventListener("abort",l,{once:!0}),(async()=>{try{s(await r())}catch(u){c(u)}finally{clearInterval(a),e?.removeEventListener("abort",l)}})()})}async function to({promiseGenerator:r,timeoutMs:e,codePath:t,logger:n,signal:o}){let i=!1,a=new AbortController,s=()=>{a.abort()},c=setTimeout(()=>{o?.removeEventListener("abort",s),!i&&a.abort()},e);o?.addEventListener("abort",s,{once:!0});try{return await Kd({promiseGenerator:r,signal:a.signal,codePath:t,logger:n})}finally{i=!0,o?.removeEventListener("abort",s),clearTimeout(c)}}function Tl(r){let e;return r>10*60*1e3?e=2*60*1e3:r>60*1e3?e=20*1e3:r>10*1e3?e=2*1e3:e=1e3,e}import UL from"picomatch";var vl=(r,e,t)=>{t?.caseInsensitive&&(r=r.toLowerCase());let n;switch(e.type){case"SUBSTRING":{let o=t?.caseInsensitive?e.url.toLowerCase():e.url;n=r.includes(o);break}case"GLOB":{let o=t?.caseInsensitive?e.glob.toLowerCase():e.glob;n=r===e.glob||UL(o)(r);break}case"REGEX":{n=new RegExp(e.regex).test(r);break}case"DOMAIN":{let o=t?.caseInsensitive?e.domain.toLowerCase():e.domain;n=new URL(r).hostname===o;break}}return t?.negated?!n:n},Al=(r,e)=>{try{let{hostname:t,pathname:n}=new URL(r),{hostname:o,pathname:i}=new URL(e);return t!==o||n!==i}catch{return!1}},Xo=r=>{try{return new URL(r),!0}catch{return!1}},Jb=r=>!r.toLowerCase().startsWith("http"),Jo=(r,e)=>{try{return new URL(r,e),!0}catch{return!1}};function ro(r,e){try{return!!new URL(r).origin.trim()}catch(t){return e?.error({url:r,err:t},"Invalid URL in check"),!1}}import{v4 as Zb}from"uuid";function Yd(r,e){return{...r,testId:e?.testId??"",testName:e?.testName??"",suiteId:e?.suiteId??"",suiteName:e?.suiteName??""}}var wl=class{reporter;asyncWork;metadata;creditsUsedV1=0;creditsUsedV2=0;constructor({logger:e,reporter:t,runType:n,runId:o,testMetadata:i,suiteMetadata:a}){this.reporter=t,this.metadata={testId:i.id,testName:i.name,suiteId:a?.id,suiteName:a?.name},this.asyncWork=[t.reportBillableEvents(e,[{event:n,timestamp:new Date().toISOString(),transactionId:o,properties:Yd({},this.metadata)}]).catch(s=>e.error({err:s},"Failed to report billable event"))]}trackStepExecution(e){if(xS(e.type)){this.creditsUsedV2+=1;return}let t=gd(e.type);if(this.creditsUsedV1+=t??0,e.type==="PRESET_ACTION"){this.creditsUsedV2+=1;let n=fd(e.command);this.creditsUsedV1+=n??0}}async flush(e){this.creditsUsedV1>0&&this.asyncWork.push(this.reporter.reportBillableEvents(e,[{event:"credits-used",timestamp:new Date().toISOString(),transactionId:Zb(),properties:Yd({creditsUsed:this.creditsUsedV1},this.metadata)}]).catch(t=>e.error({err:t},"Failed to report credits used"))),this.creditsUsedV2>0&&this.asyncWork.push(this.reporter.reportBillableEvents(e,[{event:"credits-used-v2",timestamp:new Date().toISOString(),transactionId:Zb(),properties:Yd({creditsUsed:this.creditsUsedV2},this.metadata)}]).catch(t=>e.error({err:t},"Failed to report credits used"))),await Promise.allSettled(this.asyncWork)}};import{CookieJar as rB}from"tough-cookie";var Qb={vimiumJs:'var D=Object.defineProperty;var P=(t,e,n)=>e in t?D(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var b=(t,e,n)=>(P(t,typeof e!="symbol"?e+"":e,n),n);var y=t=>function(e){return e&&e.isTrusted?t.apply(this,arguments):!0};globalThis.forTrusted==null&&(globalThis.forTrusted=y);var E={create(t,e,n,o){return{bottom:o,top:e,left:t,right:n,width:n-t,height:o-e}},copy(t){return{bottom:t.bottom,top:t.top,left:t.left,right:t.right,width:t.width,height:t.height}},translate(t,e,n){return e==null&&(e=0),n==null&&(n=0),{bottom:t.bottom+n,top:t.top+n,left:t.left+e,right:t.right+e,width:t.width,height:t.height}},subtract(t,e){return e=this.create(Math.max(t.left,e.left),Math.max(t.top,e.top),Math.min(t.right,e.right),Math.min(t.bottom,e.bottom)),e.width<0||e.height<0?[E.copy(t)]:[this.create(t.left,t.top,e.left,e.top),this.create(e.left,t.top,e.right,e.top),this.create(e.right,t.top,t.right,e.top),this.create(t.left,e.top,e.left,e.bottom),this.create(e.right,e.top,t.right,e.bottom),this.create(t.left,e.bottom,e.left,t.bottom),this.create(e.left,e.bottom,e.right,t.bottom),this.create(e.right,e.bottom,t.right,t.bottom)].filter(o=>o.height>0&&o.width>0)},intersects(t,e){return t.right>e.left&&t.left<e.right&&t.bottom>e.top&&t.top<e.bottom},intersectsStrict(t,e){return t.right>=e.left&&t.left<=e.right&&t.bottom>=e.top&&t.top<=e.bottom},equals(t,e){for(let n of["top","bottom","left","right","width","height"])if(t[n]!==e[n])return!1;return!0},intersect(t,e){return this.create(Math.max(t.left,e.left),Math.max(t.top,e.top),Math.min(t.right,e.right),Math.min(t.bottom,e.bottom))}};var T={_browserInfoLoaded:!0,_firefoxVersion:null,_isFirefox:!1,isFirefox(){if(!this._browserInfoLoaded)throw Error("browserInfo has not yet loaded.");return this._isFirefox},firefoxVersion(){if(!this._browserInfoLoaded)throw Error("browserInfo has not yet loaded.");return this._firefoxVersion},isString(t){return typeof t=="string"||t instanceof String}};var f={isReady(){return document.readyState!=="loading"},documentReady:function(){let t=document.readyState!=="loading",e=[];if(!t){let n;globalThis.addEventListener("DOMContentLoaded",n=y(function(){globalThis.removeEventListener("DOMContentLoaded",n,!0),t=!0;for(let o of e)o();e=null}),!0)}return function(n){if(t)return n();e.push(n)}}(),documentComplete:function(){let t=document.readyState==="complete",e=[];if(!t){let n;globalThis.addEventListener("load",n=y(function(o){if(o.target===document){globalThis.removeEventListener("load",n,!0),t=!0;for(let r of e)r();e=null}}),!0)}return function(n){t?n():e.push(n)}}(),createElement(t){let e=document.createElement(t);return e instanceof HTMLElement?(this.createElement=n=>document.createElement(n),e):(this.createElement=n=>document.createElementNS("http://www.w3.org/1999/xhtml",n),this.createElement(t))},addElementsToPage(t,e){let n=this.createElement("div");e.id!=null&&(n.id=e.id),e.className!=null&&(n.className=e.className);for(let o of t)n.appendChild(o);return document.body.appendChild(n),n},removeElement(t){return t.parentNode.removeChild(t)},isTopFrame(){return globalThis.top===globalThis.self},makeXPath(t){let e=[];for(let n of t)e.push(".//"+n,".//xhtml:"+n);return e.join(" | ")},evaluateXPath(t,e){let n=document.webkitIsFullScreen?document.webkitFullscreenElement:document.documentElement,o=function(r){return r==="xhtml"?"http://www.w3.org/1999/xhtml":null};return document.evaluate(t,n,o,e,null)},getVisibleClientRect(t,e){let n;e==null&&(e=!1);let o=(()=>{let i=[];for(n of t.getClientRects())i.push(E.copy(n));return i})(),r=function(){let i=window.getComputedStyle(t,null),h=i.getPropertyValue("display").indexOf("inline")===0&&i.getPropertyValue("font-size")==="0px";return r=()=>h,h};for(n of o){let i;if((n.width===0||n.height===0)&&e)for(let h of Array.from(t.children)){i=window.getComputedStyle(h,null);let m=i.getPropertyValue("position");if(i.getPropertyValue("float")==="none"&&!["absolute","fixed"].includes(m)&&!(n.height===0&&r()&&i.getPropertyValue("display").indexOf("inline")===0))continue;let s=this.getVisibleClientRect(h,!0);if(!(s===null||s.width<3||s.height<3))return s}else{if(n=this.cropRectToVisible(n),n===null||n.width<3||n.height<3||(i=window.getComputedStyle(t,null),i.getPropertyValue("visibility")!=="visible"))continue;return n}}return null},cropRectToVisible(t){let e=E.create(Math.max(t.left,0),Math.max(t.top,0),t.right,t.bottom);return e.top>=window.innerHeight-4||e.left>=window.innerWidth-4?null:e},getClientRectsForAreas(t,e){let n=[];for(let o of e){let r,i,h,m,s=o.coords.split(",").map(l=>parseInt(l,10)),a=o.shape.toLowerCase();if(["rect","rectangle"].includes(a))s.length==4&&([r,h,i,m]=s);else if(["circle","circ"].includes(a)){if(s.length==3){let[l,c,d]=s,p=d/Math.sqrt(2);r=l-p,i=l+p,h=c-p,m=c+p}}else a==="default"?s.length==2&&([r,h,i,m]=[0,0,t.width,t.height]):s.length>=4&&([r,h,i,m]=s);let u=E.translate(E.create(r,h,i,m),t.left,t.top);u=this.cropRectToVisible(u),u&&!isNaN(u.top)&&!isNaN(u.left)&&!isNaN(u.width)&&!isNaN(u.height)&&n.push({element:o,rect:u})}return n},isSelectable(t){if(!(t instanceof Element))return!1;let e=["button","checkbox","color","file","hidden","image","radio","reset","submit"];return t.nodeName.toLowerCase()==="input"&&e.indexOf(t.type)===-1||t.nodeName.toLowerCase()==="textarea"||t.isContentEditable},isEditable(t){return this.isSelectable(t)||(t.nodeName!=null?t.nodeName.toLowerCase():void 0)==="select"},isEmbed(t){let e=t.nodeName!=null?t.nodeName.toLowerCase():null;return["embed","object"].includes(e)},isFocusable(t){return t&&(this.isEditable(t)||this.isEmbed(t))},isDOMDescendant(t,e){let n=e;for(;n!==null;){if(n===t)return!0;n=n.parentNode}return!1},isSelected(t){let e=document.getSelection();if(t.isContentEditable){let n=e.anchorNode;return n&&this.isDOMDescendant(t,n)}else if(f.getSelectionType(e)==="Range"&&e.isCollapsed){let n=e.anchorNode.childNodes[e.anchorOffset];return t===n}else return!1},simulateSelect(t){if(t===document.activeElement&&f.isEditable(document.activeElement))return handlerStack.bubbleEvent("click",{target:t});if(t.focus(),t.tagName.toLowerCase()!=="textarea"||t.value.indexOf(`\n`)<0)try{if(t.selectionStart===0&&t.selectionEnd===0)return t.setSelectionRange(t.value.length,t.value.length)}catch{}},simulateClick(t,e){e==null&&(e={});let n=["mouseover","mousedown","mouseup","click"],o=[];for(let r of n){let i=this.simulateMouseEvent(r,t,e);o.push(i)}return o},simulateMouseEvent(t,e,n){if(n==null&&(n={}),t==="mouseout"){if(e==null&&(e=this.lastHoveredElement),this.lastHoveredElement=void 0,e==null)return}else t==="mouseover"&&(this.simulateMouseEvent("mouseout",void 0,n),this.lastHoveredElement=e);let o=new MouseEvent(t,{bubbles:!0,cancelable:!0,composed:!0,view:window,detail:1,ctrlKey:n.ctrlKey,altKey:n.altKey,shiftKey:n.shiftKey,metaKey:n.metaKey});return e.dispatchEvent(o)},simulateClickDefaultAction(t,e){let n;if(e==null&&(e={}),(t.tagName!=null?t.tagName.toLowerCase():void 0)!=="a"||!t.href)return;let{ctrlKey:o,shiftKey:r,metaKey:i,altKey:h}=e;KeyboardUtils.platform==="Mac"?n=i===!0&&o===!1:n=i===!1&&o===!0,n?chrome.runtime.sendMessage({handler:"openUrlInNewTab",url:t.href,active:r===!0}):r===!0&&i===!1&&o===!1&&h===!1?chrome.runtime.sendMessage({handler:"openUrlInNewWindow",url:t.href}):t.target==="_blank"&&chrome.runtime.sendMessage({handler:"openUrlInNewTab",url:t.href,active:!0})},simulateHover(t,e){return e==null&&(e={}),this.simulateMouseEvent("mouseover",t,e)},simulateUnhover(t,e){return e==null&&(e={}),this.simulateMouseEvent("mouseout",t,e)},addFlashRect(t){let e=this.createElement("div");return e.classList.add("vimiumReset"),e.classList.add("vimiumFlash"),e.style.left=t.left+"px",e.style.top=t.top+"px",e.style.width=t.width+"px",e.style.height=t.height+"px",document.documentElement.appendChild(e),e},getViewportTopLeft(){let t=document.documentElement,e=getComputedStyle(t),n=t.getBoundingClientRect();if(e.position==="static"&&!/content|paint|strict/.test(e.contain||"")){let o=parseInt(e.marginTop),r=parseInt(e.marginLeft);return{top:-n.top+o,left:-n.left+r}}else{let o,r;return T.isFirefox()?(r=parseInt(e.borderTopWidth),o=parseInt(e.borderLeftWidth)):{clientTop:r,clientLeft:o}=t,{top:-n.top-r,left:-n.left-o}}},suppressPropagation(t){t.stopImmediatePropagation()},suppressEvent(t){t.preventDefault(),this.suppressPropagation(t)},consumeKeyup:function(){let t=null;return function(e,n=null,o){if(!e.repeat){t!=null&&handlerStack.remove(t);let{code:r}=e;t=handlerStack.push({_name:"dom_utils/consumeKeyup",keyup(i){return i.code!==r||(this.remove(),o?f.suppressPropagation(i):f.suppressEvent(i)),handlerStack.continueBubbling},blur(i){return i.target===window&&this.remove(),handlerStack.continueBubbling}})}return typeof n=="function"&&n(),o?(f.suppressPropagation(e),handlerStack.suppressPropagation):(f.suppressEvent(e),handlerStack.suppressEvent)}}(),getSelectionType(t){return t==null&&(t=document.getSelection()),t.type?t.type:t.rangeCount===0?"None":t.isCollapsed?"Caret":"Range"},getElementWithFocus(t,e){let n,o=n=t.getRangeAt(0);f.getSelectionType(t)==="Range"&&(o=n.cloneRange(),o.collapse(e)),n=o.startContainer,n.nodeType===1&&(n=n.childNodes[o.startOffset]);let r=n;for(;r&&r.nodeType!==1;)r=r.previousSibling;return n=r||n?.parentNode,n},getSelectionFocusElement(){let t=window.getSelection(),e=t.focusNode;return e==null?null:(e===t.anchorNode&&t.focusOffset===t.anchorOffset&&(e=e.childNodes[t.focusOffset]||e),e.nodeType!==Node.ELEMENT_NODE?e.parentElement:e)},getContainingElement(t){return(typeof t.getDestinationInsertionPoints=="function"?t.getDestinationInsertionPoints()[0]:void 0)||t.parentElement},windowIsTooSmall(){return window.innerWidth<3||window.innerHeight<3},injectUserCss(){let t=document.createElement("style");t.type="text/css",t.textContent=Settings.get("userDefinedLinkHintCss"),document.head.appendChild(t)}};var R={MAX_CONTENT_LENGTH:1e3,MAX_ATTRIBUTE_LENGTH:500,MAX_NUM_DATA_ATTRIBUTES:10,commonAttributes:["id","className","title","aria-label","aria-labelledby"],attributeNamesMapping:new Map([["a",["href","title","rel","target"]],["label",["for"]],["input",["type","name","placeholder","checked","maximumLength"]],["textarea",["placeholder","maximumLength"]],["button",["type"]],["select",["name","multiple"]],["div",["role"]],["iframe",["src"]],["img",["src","alt"]]]),describe(t){let e={};this.addAttributes(t,this.commonAttributes,e);let n=t.tagName.toLowerCase?.()||"";this.attributeNamesMapping.has(n)&&this.addAttributes(t,this.attributeNamesMapping.get(n),e),this.addDataAttrs(t,e);let o=this.getContent(t);return this.additionalHandling(t,{tag:n,attributes:e,...o&&{content:o}})},getContent(t){let e=t.tagName.toLowerCase?.()||"";return["input","textarea"].includes(e)?t.value:["div","iframe","img","body"].includes(e)?null:(["a","button","select","label"].includes(e),t.innerText)},additionalHandling(t,e){if((t.tagName.toLowerCase?.()||"")=="label"&&t.hasAttribute("for")){let o=t.getAttribute("for"),r=document.getElementById(o);r&&(e.target=this.describe(r))}return e},addAttributes(t,e,n){n||(n={});for(let o of e)t.hasAttribute(o)&&(n[o]=t.getAttribute(o).substring(0,this.MAX_ATTRIBUTE_LENGTH));return n},addDataAttrs(t,e){let n=0;for(let o in t.dataset)if(e[`data-${o}`]=t.dataset[o].substring(0,this.MAX_ATTRIBUTE_LENGTH),n++,n>this.MAX_NUM_DATA_ATTRIBUTES)return e;return e}};var C=null,k=()=>j()||document.scrollingElement||document.body,_=function(t){return t?t<0?-1:1:0},F={x:{axisName:"scrollLeft",max:"scrollWidth",viewSize:"clientWidth"},y:{axisName:"scrollTop",max:"scrollHeight",viewSize:"clientHeight"}},O=function(t,e,n){if(T.isString(n)){let o=n;return o==="viewSize"&&t===k()?e==="x"?window.innerWidth:window.innerHeight:t[F[e][o]]}else return n},I=function(t,e,n){let o=F[e].axisName,r=t[o];if(t.scrollBy){let i={behavior:"instant"};i[e==="x"?"left":"top"]=n,t.scrollBy(i)}else t[o]+=n;return t[o]!==r},V=function(t,e){let n=window.getComputedStyle(t);return!(n.getPropertyValue(`overflow-${e}`)==="hidden"||["hidden","collapse"].includes(n.getPropertyValue("visibility"))||n.getPropertyValue("display")==="none")},v=function(t,e,n,o){let r=o*O(t,e,n)||-1;return r=_(r),I(t,e,r)&&I(t,e,-r)},U=function(t,e,n,o){return e==null&&(e="y"),n==null&&(n=1),o==null&&(o=1),v(t,e,n,o)&&V(t,e)},H=function(t=null){let e;if(!t){let n=k();if(v(n,"y",1,1)||v(n,"y",-1,1))return n;t=document.body||k()}if(v(t,"y",1,1)||v(t,"y",-1,1))return t;{let n=Array.from(t.children).map(o=>({element:o,rect:f.getVisibleClientRect(o)})).filter(o=>o.rect);n.map(o=>o.area=o.rect.width*o.rect.height);for(e of n.sort((o,r)=>r.area-o.area)){let o=H(e.element);if(o)return o}return null}},M={init(){C=null},isScrollableElement(t){return C||(C=k()&&H()||k()),t!==C&&U(t)}},j=function(){let t=K[window.location.host];if(t)return document.querySelector(t)},K={"twitter.com":"div.permalink-container div.permalink[role=main]","reddit.com":"#overlayScrollContainer","new.reddit.com":"#overlayScrollContainer","www.reddit.com":"#overlayScrollContainer","web.telegram.org":".MessageList"};window.Scroller=M;var x=function(){let t=null;return f.documentReady(()=>t=document.hasFocus()),globalThis.addEventListener("focus",y(function(e){return e.target===window&&(t=!0),!0}),!0),globalThis.addEventListener("blur",y(function(e){return e.target===window&&(t=!1),!0}),!0),()=>t}();Object.assign(globalThis,{windowIsFocused:x});var L=class{constructor(e){b(this,"element");b(this,"image");b(this,"rect");b(this,"linkText");b(this,"showLinkText");b(this,"reason");b(this,"secondClassCitizen");b(this,"possibleFalsePositive");Object.seal(this),e&&Object.assign(this,e)}},S={getLocalHintsForElement(t){let e=t.tagName.toLowerCase?.()||"",n=!1,o=!1,r=!1,i=[],h=[],m=null;if(e==="img"){let l=t.getAttribute("usemap");if(l){let c=t.getClientRects();l=l.replace(/^#/,"").replace(\'"\',\'\\\\"\');let d=document.querySelector(`map[name="${l}"]`);if(d&&c.length>0){n=!0;let p=d.getElementsByTagName("area"),g=f.getClientRectsForAreas(c[0],p);g=g.map(N=>Object.assign(N,{image:t})),h.push(...g)}}}let s=t.getAttribute("aria-disabled");if(s&&["","true"].includes(s.toLowerCase()))return[];if(this.checkForAngularJs||(this.checkForAngularJs=function(){if(document.getElementsByClassName("ng-scope").length===0)return()=>!1;{let c=[];for(let d of["","data-","x-"])for(let p of["-",":","_"])c.push(`${d}ng${p}click`);return function(d){for(let p of c)if(d.hasAttribute(p))return!0;return!1}}}()),n||(n=this.checkForAngularJs(t)),t.hasAttribute("onclick"))n=!0;else{let l=t.getAttribute("role"),c=["button","tab","link","checkbox","menuitem","menuitemcheckbox","menuitemradio","radio"];if(l!=null&&c.includes(l.toLowerCase()))n=!0;else{let d=t.getAttribute("contentEditable");d!=null&&["","contenteditable","true","plaintext-only"].includes(d.toLowerCase())&&(n=!0)}}if(!n&&t.hasAttribute("jsaction")){let l=t.getAttribute("jsaction").split(";");for(let c of l){let d=c.trim().split(":");if(d.length>=1&&d.length<=2){let[p,g,N]=d.length===1?["click",...d[0].trim().split("."),"_"]:[d[0],...d[1].trim().split("."),"_"];n||(n=p==="click"&&g!=="none"&&N!=="_")}}}switch(e){case"a":n=!0;break;case"textarea":n||=!t.disabled&&!t.readOnly;break;case"input":n||=!(t.getAttribute("type")?.toLowerCase()=="hidden"||t.disabled||t.readOnly&&f.isSelectable(t));break;case"button":case"select":n||=!t.disabled;break;case"object":case"embed":n=!0;break;case"label":n||=t.control!=null&&!t.control.disabled&&this.getLocalHintsForElement(t.control).length===0;break;case"body":n||=t===document.body&&!x()&&window.innerWidth>3&&window.innerHeight>3&&(document.body!=null?document.body.tagName.toLowerCase():void 0)!=="frameset"?m="Frame.":void 0,n||=t===document.body&&x()&&M.isScrollableElement(t)?m="Scroll.":void 0;break;case"img":n||=["zoom-in","zoom-out"].includes(t.style.cursor);break;case"div":case"ol":case"ul":n||=t.clientHeight<t.scrollHeight&&M.isScrollableElement(t)?m="Scroll.":void 0;break;case"details":n=!0,m="Open.";break}let a=t.getAttribute("class");!n&&a?.toLowerCase().includes("button")&&(n=!0,r=!0);let u=t.getAttribute("tabindex"),w=u?parseInt(u):-1;if(!n&&!(w<0)&&!isNaN(w)&&(n=!0,o=!0),n)if(h.length>0){let l=h.map(c=>new L({element:c.element,image:t,rect:c.rect,secondClassCitizen:o,possibleFalsePositive:r,reason:m}));i.push(...l)}else{let l=f.getVisibleClientRect(t,!0);if(l!==null){let c=new L({element:t,rect:l,secondClassCitizen:o,possibleFalsePositive:r,reason:m});i.push(c)}}return i},getElementFromPoint(t,e,n,o){n==null&&(n=document),o==null&&(o=[]);let r=n.elementsFromPoint?n.elementsFromPoint(t,e)[0]:n.elementFromPoint(t,e);return o.includes(r)?r:(o.push(r),r&&r.shadowRoot?S.getElementFromPoint(t,e,r.shadowRoot,o):r)},getLocalHints(t){if(!document.body)return[];let e=(s,a)=>{a==null&&(a=[]);for(let u of Array.from(s.querySelectorAll("*")))a.push(u),u.shadowRoot&&e(u.shadowRoot,a);return a},n=e(document.body),o=[];for(let s of Array.from(n))if(!t||s.href){let a=this.getLocalHintsForElement(s);o.push(...a)}o=o.reverse();let r=[1,2,3];o=o.filter((s,a)=>{if(!s.possibleFalsePositive)return!0;let w=Math.max(0,a-6);for(;w<a;){let l=o[w].element;for(let c of r)if(l=l?.parentElement,l===s.element)return!1;w+=1}return!0});let i=o.filter(s=>{if(s.secondClassCitizen)return!1;let a=s.rect,u=S.getElementFromPoint(a.left+a.width*.5,a.top+a.height*.5);if(u&&(s.element.contains(u)||u.contains(s.element))||s.element.localName=="area"&&u==s.image)return!0;let l=[a.top+.1,a.bottom-.1],c=[a.left+.1,a.right-.1];for(let d of l)for(let p of c){let g=S.getElementFromPoint(p,d);if(g&&(s.element.contains(g)||g.contains(s.element)))return!0}});i.reverse();let{top:h,left:m}=f.getViewportTopLeft();for(let s of i)s.rect.top+=h,s.rect.left+=m;return i}};var A=class{constructor(){this.hints=null;this.hintMarkers=null;this.markersDiv=null;this.enrichedMarkers=null}reset(){this.removeMarkers(),this.hints=null,this.hintMarkers=null,this.markersDiv=null}async capture(){this.reset(),this.createMarkers(),this.displayMarkers()}createMarkers(){this.hints=S.getLocalHints(),this.hintMarkers=new Map,this.hints.forEach((e,n)=>{let o=f.createElement("div"),r=e.element.attributes["data-momentic-id"]?.value??void 0;if(!r){console.warn(`[MOMENTIC] No data-momentic-id found for interactive element ${e.element.outerHTML}`);return}o.style.left=e.rect.left+"px",o.style.top=e.rect.top+"px",o.style.zIndex=214e7+n,o.className="vimiumReset internalVimiumHintMarker vimiumHintMarker",z(o,r),this.hintMarkers.set(r,{hint:e,marker:o})})}enrichMarkers(){if(this.hintMarkers){this.enrichedMarkers=[];for(let[e,n]of this.hintMarkers)this.enrichedMarkers.push(Object.assign(R.describe(n.hint.element),{hintString:e}))}}displayMarkers(){this.hintMarkers&&(this.markersDiv||(this.markersDiv=f.addElementsToPage(Array.from(this.hintMarkers.values()).map(e=>e.marker),{id:"vimiumHintMarkerContainer",className:"vimiumReset"})))}removeMarkers(){this.markersDiv&&(f.removeElement(this.markersDiv),this.markersDiv=null)}toggleMarkers(){this.markersDiv?this.removeMarkers():this.displayMarkers()}},z=(t,e)=>{for(let n of e){let o=document.createElement("span");o.className="vimiumReset",o.textContent=n,t.appendChild(o)}};window.HintManager=A;\n',vimiumCss:'.vimiumReset,a.vimiumReset,a:hover.vimiumReset,a:link.vimiumReset,a:visited.vimiumReset,div.vimiumReset,span.vimiumReset,table.vimiumReset,td.vimiumReset,tr.vimiumReset{background:none;border:none;bottom:auto;box-shadow:none;color:#000;cursor:auto;display:inline;float:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:inherit;font-style:normal;font-variant:normal;font-weight:400;height:auto;left:auto;letter-spacing:0;line-height:100%;margin:0;max-height:none;max-width:none;min-height:0;min-width:0;opacity:1;padding:0;position:static;right:auto;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;top:auto;vertical-align:baseline;white-space:normal;width:auto;z-index:2140000000}tbody.vimiumReset,thead.vimiumReset{display:table-header-group}tbody.vimiumReset{display:table-row-group}div.internalVimiumHintMarker{background:linear-gradient(180deg,#fff785 0,#ffc542);border:1px solid #c38a22;border-radius:3px;box-shadow:0 3px 7px 0 rgba(0,0,0,.3);display:block;font-size:11px;left:-1px;overflow:hidden;padding:1px 3px 0;position:absolute;top:-1px;white-space:nowrap}div.internalVimiumHintMarker span{color:#302505;font-family:Helvetica,Arial,sans-serif;font-size:11px;font-weight:700;text-shadow:0 1px 0 hsla(0,0%,100%,.6)}div.internalVimiumHintMarker>.matchingCharacter{color:#d4ac3a}div>.vimiumActiveHintMarker span{color:#a07555!important}div.internalVimiumInputHint{background-color:rgba(255,247,133,.3);border:1px solid #c38a22;display:block;pointer-events:none;position:absolute}div.internalVimiumSelectedInputHint{background-color:hsla(0,100%,70%,.3);border:1px solid #933!important}div.internalVimiumSelectedInputHint span{color:#fff!important}div.vimiumHighlightedFrame{border:5px solid #ff0;box-sizing:border-box;margin:0;pointer-events:none}div.vimiumHighlightedFrame,iframe.vimiumHelpDialogFrame{height:100%;left:0;padding:0;position:fixed;top:0;width:100%}iframe.vimiumHelpDialogFrame{background-color:hsla(0,0%,4%,.6);border:none;display:block;z-index:2139999997}div#vimiumHelpDialogContainer{background-color:#fff;border:2px solid #b3b3b3;border-radius:6px;margin:50px auto;max-height:calc(100% - 100px);max-width:calc(100% - 100px);opacity:1;overflow-x:auto;overflow-y:auto;width:840px}div#vimiumHelpDialog{min-width:600px;padding:8px 12px}span#vimiumTitle,span#vimiumTitle *,span#vimiumTitle span{font-size:20px}#vimiumTitle{display:block;line-height:130%;white-space:nowrap}td.vimiumHelpDialogTopButtons{text-align:right;width:100%}#helpDialogOptionsPage,#helpDialogWikiPage{font-size:14px;padding-left:5px;padding-right:5px}div.vimiumColumn{float:left;font-size:11px;line-height:130%;width:50%}div.vimiumColumn tr{display:table-row}div.vimiumColumn td{display:table-cell;font-size:11px;line-height:130%}div.vimiumColumn table,div.vimiumColumn td,div.vimiumColumn tr{margin:0;padding:0}div.vimiumColumn table{table-layout:auto;width:100%}div.vimiumColumn td{padding:1px;vertical-align:top}div#vimiumHelpDialog div.vimiumColumn tr>td:first-of-type{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;text-align:right;white-space:nowrap}span.vimiumHelpDialogKey{background-color:#f3f3f3;border:1px solid;border-color:#ccc #ccc #bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb;color:#212121;font-family:monospace;font-size:11px;margin-left:2px;padding:1px 4px}div#vimiumHelpDialog div.vimiumColumn tr>td:nth-of-type(3){width:100%}div#vimiumHelpDialog div.vimiumDivider{background-color:#9a9a9a;display:block;height:1px;margin:10px auto;width:100%}div#vimiumHelpDialog td.vimiumHelpSectionTitle{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:16px;font-weight:700;padding-top:3px}div#vimiumHelpDialog td.vimiumHelpDescription{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px}div#vimiumHelpDialog span.vimiumCopyCommandNameName{cursor:pointer;font-size:12px;font-style:italic}div#vimiumHelpDialog tr.advanced{display:none}div#vimiumHelpDialog.showAdvanced tr.advanced{display:table-row}div#vimiumHelpDialog div.advanced td:nth-of-type(3){color:#555}div#vimiumHelpDialog a.closeButton{color:#555;cursor:pointer;font-family:courier new;font-size:24px;font-weight:700;padding-left:5px;position:relative;text-decoration:none;top:3px}div#vimiumHelpDialog a{text-decoration:underline}div#vimiumHelpDialog a.closeButton:hover{color:#000;-webkit-user-select:none}div#vimiumHelpDialogFooter{display:block;margin-bottom:37px;position:relative}table.helpDialogBottom{width:100%}td.helpDialogBottomRight{float:right;text-align:right;width:100%}td.helpDialogBottomLeft,td.helpDialogBottomRight{padding:0}div#vimiumHelpDialogFooter *{font-size:10px}a#toggleAdvancedCommands,span#help-dialog-tip{font-size:10px;position:relative;top:19px;white-space:nowrap}a#toggleAdvancedCommands,a:active.vimiumHelDialogLink,a:hover.vimiumHelDialogLink,a:link.vimiumHelDialogLink,a:visited.vimiumHelDialogLink{color:#2f508e;cursor:pointer;text-decoration:underline}div.vimiumHUD{background:#f1f1f1;border:1px solid #aaa;border-radius:4px;bottom:8px;box-shadow:0 2px 10px rgba(0,0,0,.8);display:block;left:8px;position:fixed;text-align:left;width:calc(100% - 20px);z-index:2139999999}iframe.vimiumHUDFrame{background-color:transparent;border:none;bottom:-14px;display:block;height:58px;margin:0 0 0 -40%;min-width:300px;opacity:0;overflow:hidden;padding:0;position:fixed;right:20px;width:20%;z-index:2139999998}div.vimiumHUD .vimiumHUDSearchArea{background-color:#f1f1f1;border-radius:4px 4px 0 0;display:block;padding:3px}div.vimiumHUD .vimiumHUDSearchAreaInner{border-radius:3px;box-sizing:border-box;color:#777;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;height:30px;line-height:20px;margin-bottom:0;outline:none;padding:2px 4px;width:100%}div.vimiumHUD .hud-find{background:#fff;border:1px solid #ccc}div.vimiumHUD span#hud-find-input,div.vimiumHUD span#hud-match-count{color:#000;display:inline;outline:none;overflow-y:hidden;white-space:nowrap}div.vimiumHUD span#hud-find-input:before{content:"/"}div.vimiumHUD span#hud-match-count{color:#aaa;font-size:12px}div.vimiumHUD span#hud-find-input br{display:none}div.vimiumHUD span#hud-find-input *{display:inline;white-space:nowrap}body.vimiumFindMode ::selection{background:#ff9632}iframe.vomnibarFrame{background-color:transparent;border:none;display:block;font-family:sans-serif;height:calc(100% - 70px);left:50%;margin:0 0 0 -40%;min-width:400px;overflow:hidden;padding:0;position:fixed;top:70px;width:calc(80% + 20px);z-index:2139999998}div.vimiumFlash{background-color:transparent;box-shadow:0 0 4px 2px #4183c4;padding:1px;position:absolute;z-index:2140000000}iframe.vimiumUIComponentHidden{display:none}iframe.vimiumUIComponentVisible{color-scheme:light dark;display:block}iframe.vimiumUIComponentReactivated{border:5px solid #ff0}iframe.vimiumNonClickable{pointer-events:none}@media (prefers-color-scheme:dark){iframe.reverseDarkReaderFilter{-webkit-filter:invert(100%) hue-rotate(180deg)!important;filter:invert(100%) hue-rotate(180deg)!important}body.vimiumBody{background-color:#292a2d;color:#fff}body.vimiumBody a,body.vimiumBody a:visited{color:#8ab4f8}body.vimiumBody input,body.vimiumBody textarea{background-color:#1d1d1f;border-color:#1d1d1f;color:#e8eaed}body.vimiumBody div.example{color:#9aa0a6}body.vimiumBody div#footer,body.vimiumBody div#state,div#vimiumHelpDialogContainer{background-color:#202124;border-color:hsla(0,0%,100%,.1)}div#vimiumHelpDialog{background-color:#292a2d;color:#fff}div#vimiumHelpDialog td.vimiumHelpDescription{color:#c9cccf}div#vimiumHelpDialog td.vimiumHelpSectionTitle,span#vimiumTitle{color:#fff}#vimiumTitle>span:first-child{color:#8ab4f8!important}div#vimiumHelpDialog a{color:#8ab4f8}div#vimiumHelpDialog div.vimiumDivider{background-color:hsla(0,0%,100%,.1)}span.vimiumHelpDialogKey{background-color:#1d1d1f;border:1px solid #000;box-shadow:none;color:#fff}}',htmlUtilsLibJs:`// src/html/constants.ts
14
18
  var momenticConstants = {
15
19
  bannedClassSubstrings: [
16
20
  "relative",
@@ -3934,67 +3938,67 @@ function registerAllMomenticListeners() {
3934
3938
 
3935
3939
  // src/html/index.ts
3936
3940
  registerAllMomenticListeners();
3937
- `};var Jt={bannedClassSubstrings:["relative","flex","center","justify","auto","sticky","absolute","top","right","left","bottom","items-center","notion-selectable","notion-page-block","notion-collection-item","MuiSvgIcon","css-","rt-"],nonDynamicInputTypes:["button","file","hidden","image","radio","reset","submit"],generalStateAttributes:["aria-expanded","aria-haspopup","aria-checked","aria-pressed","aria-selected","aria-invalid","checked","open","aria-busy"],bannedElementTagNames:["html","head","meta","script","style","path","br","::marker","noscript","polygon","defs"],bannedElementAttributes:["data-momentic-id","aria-keyshortcuts","data-ved","aria-controls","d"],relevantElementAttributes:["name","id","value","type","class","height","width","target","title","href","src","alt","role","headers","scope","checked","required","action","tooltip","min","max","minlength","maxlength","multiple","pattern","placeholder","accept","contenteditable","data-value","data-testid","data-cy","data-pw","data-test-id","data-test","data-role","data-type","data-key","data-action","data-qa","data-aria-hidden","data-hidden","data-automation-id","data-overlay","data-content-editable-leaf","data-wf-icon","data-tns","data-sticky-stack-name","data-popup-origin","data-handleid","data-handlepos","data-col-index","data-row-index","data-row","data-col","col-index","row-index","row","col","data-momentic-description","aria-label","aria-role","aria-selected","aria-disabled","aria-hidden","aria-describedby","aria-labelledby","aria-valuenow","aria-valuemin","aria-valuemax"],alwaysUsefulAttributesForCssSelectorGeneration:["src","href","aria-describedby","aria-labelledby","aria-label"],stronglyIdentifyingAttributes:["aria-label","data-testid","id","name","href","aria-describedby","aria-labelledby","aria-description","data-row","data-col","data-row-index","data-col-index","for","aria-modal"],alwaysInterestingClassNames:["cm-line","cm-activeLine","cm-content"],alwaysInterestingClassPrefixes:["notion-",".w-"],alwaysInterestingTruthyPropertyNames:["contenteditable"],visualAttributesForSvgSerialization:["fill","stroke","color","patternContentUnits","xlink:href","transform","path","d","points","viewBox","preserveAspectRatio","r","rx","ry","cx","cy","x1","y1","x2","y2","font","text-anchor","dominant-baseline","gradient","pattern","stop-color"],bannedAiRequiredCacheAttributes:["id","data-momentic-id","href","name","x","y","width","height","data-momentic-id","aria-keyshortcuts","data-ved","aria-controls","d"],ineligibleElementAttribute:"momentic-ineligible"};var Dy="BoundingBoxMovedError",Uy="ZeroOpacityError",cl="visual_actions",Br="data-momentic-id";function Fy(r,e,t){if(r.length<t)return r;let n=r.indexOf(e);if(n===-1)return r;let o=Math.max(0,n-t/3),i=Math.min(n+t/3,r.length),a=r.indexOf(`
3941
+ `};var nr={bannedClassSubstrings:["relative","flex","center","justify","auto","sticky","absolute","top","right","left","bottom","items-center","notion-selectable","notion-page-block","notion-collection-item","MuiSvgIcon","css-","rt-"],nonDynamicInputTypes:["button","file","hidden","image","radio","reset","submit"],generalStateAttributes:["aria-expanded","aria-haspopup","aria-checked","aria-pressed","aria-selected","aria-invalid","checked","open","aria-busy"],bannedElementTagNames:["html","head","meta","script","style","path","br","::marker","noscript","polygon","defs"],bannedElementAttributes:["data-momentic-id","aria-keyshortcuts","data-ved","aria-controls","d"],relevantElementAttributes:["name","id","value","type","class","height","width","target","title","href","src","alt","role","headers","scope","checked","required","action","tooltip","min","max","minlength","maxlength","multiple","pattern","placeholder","accept","contenteditable","data-value","data-testid","data-cy","data-pw","data-test-id","data-test","data-role","data-type","data-key","data-action","data-qa","data-aria-hidden","data-hidden","data-automation-id","data-overlay","data-content-editable-leaf","data-wf-icon","data-tns","data-sticky-stack-name","data-popup-origin","data-handleid","data-handlepos","data-col-index","data-row-index","data-row","data-col","col-index","row-index","row","col","data-momentic-description","aria-label","aria-role","aria-selected","aria-disabled","aria-hidden","aria-describedby","aria-labelledby","aria-valuenow","aria-valuemin","aria-valuemax"],alwaysUsefulAttributesForCssSelectorGeneration:["src","href","aria-describedby","aria-labelledby","aria-label"],stronglyIdentifyingAttributes:["aria-label","data-testid","id","name","href","aria-describedby","aria-labelledby","aria-description","data-row","data-col","data-row-index","data-col-index","for","aria-modal"],alwaysInterestingClassNames:["cm-line","cm-activeLine","cm-content"],alwaysInterestingClassPrefixes:["notion-",".w-"],alwaysInterestingTruthyPropertyNames:["contenteditable"],visualAttributesForSvgSerialization:["fill","stroke","color","patternContentUnits","xlink:href","transform","path","d","points","viewBox","preserveAspectRatio","r","rx","ry","cx","cy","x1","y1","x2","y2","font","text-anchor","dominant-baseline","gradient","pattern","stop-color"],bannedAiRequiredCacheAttributes:["id","data-momentic-id","href","name","x","y","width","height","data-momentic-id","aria-keyshortcuts","data-ved","aria-controls","d"],ineligibleElementAttribute:"momentic-ineligible"};var eE="BoundingBoxMovedError",tE="ZeroOpacityError",Rl="visual_actions",Kr="data-momentic-id";function rE(r,e,t){if(r.length<t)return r;let n=r.indexOf(e);if(n===-1)return r;let o=Math.max(0,n-t/3),i=Math.min(n+t/3,r.length),a=r.indexOf(`
3938
3942
  `,o);a>0&&a<n&&(o=a);let s=i,c=0;for(;c<1e3&&s>n&&r[s]!==`
3939
3943
  `;)c++,s--;return s>n&&r[s]===`
3940
- `&&(i=s),r.slice(o,i)}function pr(r){let e=typeof r=="string"?r:r.toString();return`[${Br}="${e}"]`}import{execSync as TL}from"child_process";import{randomUUID as Qd}from"crypto";import{diff as ep}from"deep-object-diff";import{existsSync as Xn,mkdirSync as vL,readFileSync as AL,readdirSync as wL,rmSync as RL,statSync as Gb,writeFileSync as CL}from"fs";import{Jimp as jb}from"jimp";import xL from"js-beautify";import{cloneDeep as $o}from"lodash-es";import _L from"mime";import{homedir as Wo,platform as bl}from"os";import{basename as ML,extname as PL,join as xr,resolve as IL}from"path";import{chromium as $b,devices as OL}from"playwright";import{addExtra as LL}from"playwright-extra";import NL from"puppeteer-extra-plugin-recaptcha";import{v4 as kL}from"uuid";import{rmSync as ab}from"fs";import{basename as yO,join as bO}from"path";import{errors as EO}from"playwright-core";var By=new Set(["about:blank","chrome-error://chromewebdata/"]);var Cd=["button","image","generic","graphics-symbol","tab","link","menuitem","group"],xd=1e4,ia=500;import{mkdirSync as $I,rmSync as zy,statSync as WI}from"fs";import*as Id from"node:fs";import qI from"nodejs-file-downloader";import{tmpdir as KI}from"os";import pn,{basename as YI,dirname as XI}from"path";var Od="file://",Pd=pn.join(KI(),"momentic","downloads"),Md=1e4,JI=50*1024*1024;async function Hy(r){let{uri:e}=r;if(e.startsWith(Od))return QI(r);if(e.startsWith("http"))return tO(r);if(Mf)return eO(r);throw new x("UserConfigurationError","The source URI for the file upload step must be a valid URL or a previously downloaded file beginning with 'file://'")}function ZI(r,e){let t=pn.join(Pd,r,e.slice(Od.length)),n=pn.join(Pd,r),o=t.startsWith(n);if(!Id.existsSync(t)||!o)throw new x("UserConfigurationError",`The referenced file (${e}) does not exist. Please make sure that it has been downloaded successfully.`);return t}async function QI({uri:r,orgId:e}){let t=ZI(e,r);return{filePath:t,cleanup:()=>{zy(XI(t),{recursive:!0,force:!0})}}}async function eO({uri:r}){let e=pn.resolve(r);if(!Id.existsSync(e))throw new x("UserConfigurationError",`The referenced file (${r}) does not exist on disk. Please make sure that it has been downloaded successfully.`);return{filePath:e,cleanup:()=>{}}}async function tO({uri:r,logger:e,orgId:t}){let n=new URL(r);n.search&&(n.search="");let o=YI(n.href),i=Nd(o),a=pn.extname(i);if(Af.includes(a))throw new Error(`Downloading files with extension ${a} is not allowed.`);let s=Ld(t),c,l;for(let m=1;m<=3;m++){let h=new qI({url:r,fileName:i,directory:s,maxAttempts:1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"},timeout:Md});try{let{downloadStatus:f,filePath:b}=await V(h.download(),{milliseconds:Md,message:`Download timed out after ${Md}ms`});if(f!=="COMPLETE"||!b)throw new Error(`Download ended in non-success status: ${f}`);c=b;break}catch(f){l=f}}if(!c)throw new Error(`Download failed after 3 attempts. Last error: ${l instanceof Error?l.message:l}`);let u=c,p=WI(u).size;if(p>JI)throw new Error("File size exceeds the maximum limit of 50MB");e.info({fileSizeInBytes:p,filePath:u,fileName:i},"Downloaded file to disk");let g;return{filePath:u,cleanup:()=>{clearTimeout(g),g=setTimeout(()=>zy(s,{recursive:!0,force:!0}),10*60*1e3)}}}function Gy(r,e){return`${Od}${r}/${e}`}function Ld(r){let e=Math.random().toString(36).substring(4),t=pn.join(Pd,r,e);return $I(t,{recursive:!0}),t}function Nd(r){let e=pn.extname(r),t=pn.basename(r,e);return r=(t.length>100?t.slice(t.length-100):t)+e,r=r.trim().replaceAll(" ","_"),r}async function zr(r,e){try{return await r.evaluate(n=>window.serializeElementOnlyWithText?.(n,{truncateToLength:500}),void 0,{timeout:1e3})}catch(t){e.debug({err:t},"Failed to get HTML from locator for Playwright error translation");return}}var ul=class{limit;windowMs;userActions;constructor(e,t){this.limit=e,this.windowMs=t,this.userActions=new Map}_cleanup(e,t="DEFAULT_USER"){let n=Date.now(),o=`${t}:${e}`;if(this.userActions.has(o)){let a=this.userActions.get(o)?.filter(s=>n-s<=this.windowMs)??[];a.length>0?this.userActions.set(o,a):this.userActions.delete(o)}}increment(e,t="DEFAULT_USER"){let n=Date.now(),o=`${t}:${e}`;this._cleanup(t,e),this.userActions.has(o)||this.userActions.set(o,[]);let i=this.userActions.get(o);return i.length>=this.limit?!0:(i.push(n),!1)}};async function jy(r,e){let t=r.evaluate(async()=>{let i=window,a={};try{let s=await indexedDB.databases();for(let c of s){if(!c.name)continue;let l=await i.exportIdbToObject?.(c.name,c.version);l&&(a[c.name]=l)}return[a,void 0]}catch(s){return[void 0,s.message]}}),[n,o]=await V(t,{milliseconds:3e3});return o&&e.warn({err:o},"Failed to fetch indexedDB data"),n}async function Vy(r,e,t){if(e){t.debug("Importing indexedDB data");try{let n=r.evaluate(async o=>{let i=window;for(let[a,s]of Object.entries(o))await i.importObjectToIdb?.(a,s)},e);await V(n,{milliseconds:3e3})}catch(n){t.warn({err:n},"Failed to import indexedDB data")}}}async function $y(r,e){try{let t=r.evaluate(async()=>{window.localStorage.clear(),window.sessionStorage.clear(),await indexedDB.databases().then(n=>{n.forEach(o=>{o.name&&indexedDB.deleteDatabase(o.name)})})});await V(t,{milliseconds:3e3})}catch(t){e.debug({err:t},"Failed clearing index db data, continuing...")}}async function Wy(r,e,t,n,o){try{await rO(r,e,t,n)}catch(i){o.error({err:i,tabIndex:e},"Error handling new console log")}}async function rO(r,e,t,n){let o=n.text();o.length>ia&&(o=o.slice(0,ia)+"...(TRUNCATED)");let i=[];for(let a of n.args())try{let s=await a.jsonValue(),c=JSON.stringify(s);c.length>ia?i.push(c.slice(0,ia)+"...(TRUNCATED)"):(typeof s!="object"||Object.keys(s).length>0)&&i.push(s)}catch{}kd(r,t,e,{url:r.url(),location:n.location(),type:n.type(),text:n.text(),args:i})}function kd(r,e,t,n){let o=Date.now(),i=e.logsPerPage;if(i.length<=t||i[t]===void 0){i[t]=[];for(let a=0;a<t;a++)i[a]===void 0&&(i[a]=[])}i[t].length>xd&&(i[t]=i[t].slice(Math.floor(xd/2)),i[t]?.push({url:r.url(),timestamp:o,type:"warning",text:"[MOMENTIC] Truncated console logs due to buffer overflow",tabIndex:t})),i[t].push({...n,tabIndex:t,timestamp:o})}async function Zt({fn:r,codePath:e,logObject:t,signal:n,logger:o}){n?.throwIfAborted();let i=Date.now(),a=await wd({promiseGenerator:r,signal:n,codePath:e,logger:o}),s=Date.now();return t[e]=s-i,a}import nO from"truncate-json";var oO="[redacted due to size]",qy=5e3,iO=5e3;async function Yy(r,e,t){let n=new Date().toISOString();e.harPages||(e.harPages={}),e.harPages[r]={id:r,startedDateTime:n,title:void 0,pageTimings:{}}}async function Dd(r,e){let t=e.timing(),n=new URL(e.url()),o=[...n.searchParams.entries()].map(([s,c])=>({name:s,value:c})),i={...await Jy(e),url:n.toString(),method:e.method(),queryString:o,postData:await sO(e)};return{pageref:r,_resourceType:e.resourceType(),startedDateTime:new Date().toISOString(),request:i,timings:Zy(t).timings}}async function Xy(r,e,t){await t.finished();let n={};try{n=await dO(t)}catch{}let o={...await Jy(t),status:t.status(),statusText:t.statusText(),content:n,redirectURL:t.headers().location,_mocked:!1};r.response=o;let i;try{i=await e.sizes(),r.request.bodySize=i.requestBodySize,r.request.headersSize=i.requestHeadersSize}catch{}r.response&&i&&(r.response.bodySize=i.responseBodySize,r.response.headersSize=i.responseHeadersSize,r.response.content.size=i.responseBodySize);let a=e.timing();r.startedDateTime=new Date(a.startTime).toISOString();let{timings:s,total:c}=Zy(a);r.time=c,r.timings=s}function aa(r,e,t){r.harEntries||(r.harEntries={}),r.harEntries[t]=e}function Ky(r){try{return new Date(r).toISOString()}catch{return}}function aO(r){let e={name:"",value:""},t=!0;for(let n of r.split(/; */)){let o=n.indexOf("="),i=o!==-1?n.substring(0,o).trim():n.trim(),a=o!==-1?n.substring(o+1,n.length).trim():"";if(t){t=!1,e.name=wr(i),e.value=wr(a);continue}i==="Domain"&&(e.domain=wr(a)),i==="Expires"&&(e.expires=Ky(a)),i==="HttpOnly"&&(e.httpOnly=!0),i==="Max-Age"&&(e.expires=Ky(Date.now()+ +a*1e3)),i==="Path"&&(e.path=wr(a)),i==="Secure"&&(e.secure=!0)}return e}async function Jy(r){let e=await r.allHeaders(),t=e.cookie?.split(";").map(aO)??[];return{headers:Object.entries(e).map(([n,o])=>({name:wr(n),value:wr(o)})),cookies:t}}async function sO(r){let e=r.postData();if(!e)return;let t=await r.headerValue("content-type"),n={mimeType:t??"application/octet-stream",text:wr(e),params:[]};if(t==="application/x-www-form-urlencoded"){let o=new URLSearchParams(e.toString());for(let[i,a]of o.entries())n.params.push({name:wr(i),value:a?wr(a):void 0})}return n}var lO=["text"],cO=["json","xml","html","javascript"];function uO(r){let[e,t]=r.split("/");return e?lO.includes(e)?!0:t?!!cO.some(n=>t?.includes(n)):!1:!1}async function dO(r){let t=((await r.headerValue("content-type"))?.toLowerCase()??void 0)?.split(";")[0]??void 0,n={mimeType:t,encoding:await r.headerValue("content-encoding")??void 0};return t&&uO(t)&&(n.text=wr(await r.text())),n}function wr(r){try{let e=JSON.parse(r),{jsonString:t}=nO(r,iO);return t}catch{return r.length>qy?r.slice(0,qy)+oO:r}}function qn(r){return r<0?0:r}function Zy(r){return{timings:{blocked:qn(r.domainLookupStart),dns:qn(r.domainLookupEnd-r.domainLookupStart),connect:qn(r.connectEnd-r.connectStart),send:qn(r.responseStart-r.requestStart),wait:0,receive:qn(r.responseEnd-r.responseStart),ssl:qn(r.connectEnd-r.secureConnectionStart)},total:qn(r.responseEnd)}}function Qy(){return async r=>{let{fragment:e,code:t,context:n}=r,{env:o}=n||{},i=Object.getPrototypeOf(async function(){}).constructor;return{result:await Promise.resolve(new i("env",e?`return ${t}`:t)(o))}}}async function qe({root:r,fn:e,arg:t,timeout:n,waitForPageLoad:o,codePath:i}){return await o(),await V(r.evaluate(e,t),{milliseconds:n,message:`Timed out ${i} after ${n}ms. This indicates that either the page is unresponsive or your machine is severely resource constrained.`})}function Ud(){return window.lastCursorPos}import{errors as pO}from"playwright-core";async function Kn({func:r,action:e,logger:t,callbacks:n,retryTimeoutMs:o,targetingResult:i}){let a=Date.now(),s;for(;Date.now()-a<o;)try{return await r(i)}catch(c){if(c instanceof pO.TimeoutError)t.warn({err:c,rootUrl:(await n.state.getRoot()).url()},`Encountered Playwright error while performing ${e}`),s=await mO(c,i.locator,n,t);else throw c}throw s instanceof x?s:new x("ActionFailureError",`Failed to interact with targeted element. Error: ${s.message}`,{errOptions:{cause:s}})}async function mO(r,e,t,n){return r.message.includes("attempt #")?gO(r,e,t,n):hO(r)}async function gO(r,e,t,n){let o=r.message.split(/- retrying \w+ action, attempt #\d+/).filter(c=>c.length>0);if(!o.length)return n.warn({err:r},"Failed to parse Playwright error message for translation, returning raw message"),r;let i=o.length>2?o[o.length-2]:o[0];i=i.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"").replaceAll(" - ","").trim().replaceAll(`
3941
- `,";").replace(/\s+/g," ");let a="",s=await zr(e,n);if(s&&(a=`Target element HTML: ${At(s,100,!0)}`),i.includes("element is not enabled"))return new x("ActionFailureError",`The element you attempted to interact with was disabled for the entire timeout duration. Please explicitly wait for the element to be enabled, change the element description to target an interactive element, or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:r}});if(i.includes("intercepts pointer events")){let c="",l=i.match(/<.*?data-momentic-id="(\d+)".*?intercepts pointer events/)?.[1];if(l){let u=(await t.state.getRoot()).locator(pr(l)),d=await zr(u,n);d&&(c=`Covering element HTML: ${At(d,100,!0)}`)}return new x("ActionFailureError",`The element you attempted to interact with was covered by another element such as dropdown, popup, or dialog for the entire timeout duration. Please add a step to hide the covering element or turn on the 'disable stability checks' option. ${a}
3942
- ${c}`,{errOptions:{cause:r}})}if(i.includes("element is not visible")){let c="The element you attempted to interact with has no bounding box or is explicitly hidden.";try{let l=await e.boundingBox({timeout:3e3});l?l.height===0?c="The element you attempted to interact with has zero height.":l.width===0&&(c="The element you attempted to interact with has zero width."):c="The element you attempted to interact with has no bounding box."}catch{}return new x("ActionFailureError",`${c} Please explicitly wait for the element to be visible or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:r}})}return i.includes("element is outside of the viewport")?new x("ActionFailureError",`The element requested was outside of the browser viewport for the entire duration of the action. Please ensure you are not using non-standard zoom settings and the element is visible on the page. ${a}`):r}function hO(r){let e=r.message;if(e.includes("waiting for locator")&&e.includes("data-momentic-id")&&!e.match(/attempting \w+ action/)&&!e.includes("locator.evaluate"))throw new x("ActionFailureError",`Interacting with the element timed out. This is usually caused by the web page itself performing too many CPU-intensive operations or a lack of resources on your machine. Error: ${e}`,{errOptions:{cause:r}});return r}async function eb(r){try{return await fO(r)}catch(e){r.logger.warn({err:e},"Failed to transform locator for Chakra click, continuing...");return}}async function fO({locator:r,logger:e}){let[t,n]=await r.evaluate(c=>[c.id,c.tagName.toLowerCase()],{timeout:1e3}),o=await zr(r,e),i=await r.boundingBox({timeout:1e3});if(i===null){e.warn({elementDisplayString:o},"Attempting to click on element with no bounding box, not performing Chakra redirection");return}if(i.width>5||i.height>5||n!=="input")return;if(t)try{let c=r.page().locator(`label[for=${JSON.stringify(t)}]`);return await c.waitFor({state:"visible",timeout:1e3}),{locator:c,relativePoint:void 0}}catch{}let a=await r.evaluate(c=>{let l=window,u=c.parentElement;if(!u)return{type:"error",error:"Input click target has no parent for redirection"};let d=c.getBoundingClientRect(),p=u.getBoundingClientRect();if(p.width===0||p.height===0)return{type:"error",error:"Parent element has no width or height"};let g={x:Math.min(Math.max(1,d.left-p.left),p.width-1),y:Math.min(Math.max(1,d.top-p.top),p.height-1)},m=l._MOMENTIC_FEATURE_FLAGS?.[cl],h=c.getAttribute(Br),f=!m&&h?pr(h):l.getMPath?.(c)?.join(" >");return f?{type:"result",selector:f,relativePoint:g,serializedForm:u.outerHTML.slice(0,500)}:{type:"error",error:"Could not generate selector for parent element"}},{timeout:1e3});if(a.type==="error")throw new Error(a.error);let s=r.page().locator(a.selector);return await s.waitFor({state:"visible",timeout:1e3}),e.info({parentElementResult:a,originalElementDisplayString:o},`Redirected click to parent element with selector: ${a.selector}`),{locator:s,relativePoint:a.relativePoint}}var rb=["date","datetime-local","month","time","week"],tb={date:/^\d{4}-\d{2}-\d{2}$/,"datetime-local":/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,month:/^\d{4}-\d{2}$/,time:/^\d{2}:\d{2}$/,week:/^\d{4}-W\d{2}$/};async function nb(r){try{await V(SO(r),{milliseconds:3e3})}catch(e){r.logger.warn({err:e},"Failed to transform native datetime input, continuing...")}}async function SO({root:r,text:e,options:t,logger:n,callbacks:o}){let i=(await qe({root:r,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:1e3,arg:void 0,waitForPageLoad:o.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!tb[i])return;tb[i].test(e)&&n.warn(`Detected datetime input (${e}) in normalized format - this may fail to fill correctly as it is not how the user would input the value`),t.clearContent=!1,n.info("Transforming datetime input to use sequential key presses")}import{z as It}from"zod";var ob=It.object({doubleClick:It.boolean().optional(),rightClick:It.boolean().optional(),force:It.boolean().optional(),waitForDownload:It.boolean().optional(),delayMs:It.number().optional(),downloadTimeoutMs:It.number().optional(),relativePosition:It.object({x:It.number(),y:It.number()}).optional()}),mte=It.object({repeat:It.number().optional(),convertMeta:It.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:It.number().optional()});async function dl({locator:r,callbacks:e,logger:t,timeoutMs:n=1e3}){try{await Fd(e,n);let o=r.evaluate(i=>{let a=window;a.momenticIsEligible=d=>{let g=window.getComputedStyle(d,null).getPropertyValue("display");if(g==="none"||g==="contents")return!1;let m=d.getBoundingClientRect();return!(!m.height||!m.width)},a.removeHighlightTimers=a.removeHighlightTimers||[],a.removeHighlightFunctions=a.removeHighlightFunctions||{};let s=0;for(;!a.momenticIsEligible(i)&&s<3;){if(!i.parentElement)throw new Error("No eligible non-empty parent found for highlighting");i=i.parentElement,s++}let c=i.style.getPropertyValue("outline"),l=i.style.getPropertyPriority("outline");i.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let u=`momentic${Math.floor(Math.random()*1e7)}`;a[u]=()=>{i.style.removeProperty("outline"),i.style.setProperty("outline",c,l),i.getAttribute("style")||i.removeAttribute("style")},a.removeHighlightTimers.push(setTimeout(()=>{a[u](),a.removeHighlightFunctions?.[u]&&delete a.removeHighlightFunctions[u]},5e3)),a.removeHighlightFunctions[u]=a[u]},void 0,{timeout:n});return await V(o,{milliseconds:n}),!0}catch(o){return t.debug({err:o},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1}}async function Fd(r,e=1e3){let t=await r.state.getRoot();await qe({root:t,fn:()=>{let o=window,i=o.removeHighlightTimers||[];for(;i.length;){let a=i.pop();clearTimeout(a)}Object.values(o.removeHighlightFunctions??{}).forEach(a=>{a()})},timeout:e,arg:void 0,waitForPageLoad:r.waitForPageLoad,codePath:"removing element highlights"})}async function Bd(r){let e=!!r.browserCallbacks.state.userBrowserSettings.visualActions;return Kn({action:"clicking element",targetingResult:r.targetingResult,logger:r.logger,retryTimeoutMs:r.retryTimeoutMs,callbacks:r.browserCallbacks,func:async t=>sb({...r,targetingResult:t,useVisualClick:e})})}async function TO(r,e){let{redirectionAttempts:t=0}=e;if(t>=2)throw r;try{return await vO(r,e)}catch(n){throw e.redirectionAttempts===0?(e.logger.error({redirectionAttemptError:n,originalError:r},"Error handling click error, rethrowing original error"),r):n}}async function vO(r,e){let{logger:t,redirectionAttempts:n=0}=e,o=e.targetingResult.locator;if(r.message.includes("label")&&r.message.includes("for=")&&r.message.includes("intercepts pointer events")){let i=await o.getAttribute("id",{timeout:1e3});if(!i)throw r;let a=o.page().locator(`[for=${JSON.stringify(i)}]`);return await a.waitFor({state:"visible",timeout:1e3}),t.warn({err:r},"Attempting locator redirection due to input being covered by label"),sb({...e,targetingResult:{locator:a},redirectionAttempts:n+1})}else throw t.error({err:r},"Click error does not match any known recoverable patterns, rethrowing"),r}async function AO(r){let{browserCallbacks:e,logger:t,targetingResult:n,position:o,options:i}=r,a=ob.safeParse(i),s=await e.state.getRoot(),c=s&&s!==n.locator.page()&&"frameElement"in s?await s.frameElement():null,l;try{l=c?await $n({promiseGenerator:async()=>c.boundingBox(),timeoutMs:3e3,logger:t}):null}catch(m){throw new x("UserInfrastructureError",`The frame containing the element Momentic was instructed to interact with was removed. Error: ${m.message}`)}finally{await c?.dispose()}let u=Date.now(),{clickX:d,clickY:p,reason:g}=await CO({frameCoordinates:l,logger:t,targetingResult:n,position:o,options:i});return t.info({frameCoordinates:l,position:o,options:a.success?a.data:void 0,clickLocation:{clickX:d,clickY:p,reason:g},duration:Date.now()-u},"Visual click"),{x:d,y:p}}async function wO(r){let{actionSource:e,targetingResult:t,options:n,logger:o}=r,i=r.targetingResult.locator,a=n?.relativePosition??r.position;if(e==="click"&&!a){let l=await eb({locator:i,logger:o});l&&(i=l.locator,a=l.relativePoint??a)}let s=n?.force||t.hints?.force||!1,c=i.toString();try{o.info({locator:c},"Locator click"),n?.doubleClick?await i.dblclick({button:n.rightClick?"right":"left",timeout:3e3,position:a,delay:n?.delayMs??25,force:s}):await i.click({button:n?.rightClick?"right":"left",timeout:3e3,position:a,delay:n?.delayMs??25,force:s})}catch(l){let u=l;if(_O(u))o.warn({err:u},"Click action timed out while waiting for navigation after completion, continuing...");else return o.error({err:u},"Error clicking on locator, attempting to recover..."),TO(u,{...r,targetingResult:{...i,locator:i}})}return{locatorSource:c}}async function sb(r){let{options:e,logger:t,browserCallbacks:n,controllerCallbacks:o,useVisualClick:i,targetingResult:a}=r,s;e?.waitForDownload&&(s=(async()=>{let u=e.downloadTimeoutMs??3e4;try{return await a.locator.page().waitForEvent("download",{timeout:u})}catch(d){return d instanceof EO.TimeoutError?new x("ActionFailureError",`Download did not complete in ${u}ms`):new x("ActionFailureError",`Download failed: ${d.message}`)}})());try{await dl({locator:a.locator,callbacks:n,logger:t,timeoutMs:1e3})}catch(u){t.warn({err:u},"Error highlighting locator in click, continuing...")}let c,l;if(i?c=await AO(r):l=(await wO(r)).locatorSource,e?.waitForDownload)if(s){if(!o?.createIsolatedFolder)throw new x("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");t.info("Waiting for download to start and complete");let u=await V(s,{milliseconds:e.downloadTimeoutMs??3e4});if(u instanceof Error)throw u;return{downloadedFile:await xO(u,o.createIsolatedFolder,t),coordinates:c,locatorSource:l}}else throw new Error("No download promise or error but the step requested to wait for a download");return{coordinates:c,locatorSource:l}}async function RO(r,e){if(e.hints?.clickableXY){let i=(r?.x??0)+e.hints.clickableXY.x,a=(r?.y??0)+e.hints.clickableXY.y;return[{x:i,y:a},"targeting hint"]}let t=await e.locator.boundingBox({timeout:3e3});if(!t)throw new x("ActionFailureError","Element does not have a bounding box");let n=t.x+t.width/2,o=t.y+t.height/2;return[{x:n,y:o},"halfway point"]}async function CO({frameCoordinates:r,logger:e,options:t,targetingResult:n,position:o}){let i,a,s;if(t?.relativePosition){let d=await n.locator.boundingBox({timeout:3e3}),p=t.relativePosition.x,g=t.relativePosition.y;d?.width&&(p=Math.max(0,Math.min(t.relativePosition.x,d.width))),d?.height&&(g=Math.max(0,Math.min(t.relativePosition.y,d.height))),i=(d?.x??0)+p,a=(d?.y??0)+g,s="relative position from user"}else if(o){let d=await n.locator.boundingBox({timeout:3e3});i=(d?.x??0)+o.x,a=(d?.y??0)+o.y,s="predefined position"}else{let[d,p]=await RO(r,n);i=d.x,a=d.y,s=p}let c=n.locator.page(),l=t?.rightClick?"right":"left",u=t?.delayMs??25;return t?.doubleClick?await c.mouse.dblclick(i,a,{button:l,delay:u}):await c.mouse.click(i,a,{button:l,delay:u}),{clickX:i,clickY:a,reason:s}}async function xO(r,e,t){t.info("Download detected, saving file to disk");let n=await r.path(),o=Nd(r.suggestedFilename()),i=e();await r.saveAs(bO(i,o)),ab(n,{force:!0}),setTimeout(()=>{ab(i,{recursive:!0,force:!0})},5*60*1e3);let a=Gy(yO(i),o);return t.info({uri:a,downloadFolder:i},"Saved download to isolated folder"),a}function _O(r){return r.message.includes("locator.click: Timeout")&&r.message.includes("click action done")}import{platform as MO}from"os";var PO={goToNextWord:{win32:"Control+ArrowRight",darwin:"Alt+ArrowRight",linux:"Control+ArrowRight"},goToPreviousWord:{win32:"Control+ArrowLeft",darwin:"Alt+ArrowLeft",linux:"Control+ArrowLeft"},selectNextWord:{win32:"Control+Shift+ArrowRight",darwin:"Alt+Shift+ArrowRight",linux:"Control+Shift+ArrowRight"},selectPreviousWord:{win32:"Control+Shift+ArrowLeft",darwin:"Alt+Shift+ArrowLeft",linux:"Control+Shift+ArrowLeft"},selectToStartOfLine:{win32:"Shift+Home",darwin:"Meta+Shift+LeftArrow",linux:"Shift+Home"},selectToEndOfLine:{win32:"Shift+End",darwin:"Meta+Shift+RightArrow",linux:"Shift+End"},deleteNextWord:{win32:"Control+Delete",darwin:"Alt+Fn+Delete",linux:"Control+Delete"},deletePreviousWord:{win32:"Control+Backspace",darwin:"Alt+Delete",linux:"Control+Backspace"}};function IO(){let r=MO();return r==="win32"?"win32":r==="darwin"?"darwin":"linux"}function lb(r){return JSON.stringify(r.split("+").sort())}function pl(r){let e=IO(),t=lb(r);for(let n of Object.values(PO))if(Object.values(n).some(o=>lb(o)===t))return n[e];return process.platform==="darwin"?r=r.replaceAll("Control","Meta"):r=r.replaceAll("Meta","Control"),r}async function zd({frame:r,page:e,deltaX:t,directionX:n,deltaY:o,directionY:i,signal:a,callbacks:s,logger:c}){if(!t&&!o)return;let l=n==="left"?-1:1,u=i==="up"?-1:1;if(r)await qe({root:r,fn:([d,p,g,m])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*g,window.scrollY+(p??window.innerHeight)*m),arg:[t,o,l,u],waitForPageLoad:s.waitForPageLoad,timeout:2e3,codePath:"scrolling page"});else{let d=e.viewportSize()||rn,p=await qe({root:e,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:2e3,codePath:"computing page height"}),[g,m,h]=await qe({root:e,fn:()=>{let f=document.activeElement;if(!f)return[void 0,void 0,void 0];let b=f.getBoundingClientRect();return[f.scrollTop,b.x,b.y]},arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:2e3,codePath:"computing active element position"});await e.mouse.wheel((t??d.width)*l,(o??d.height)*u);try{let f=Date.now();for(;Date.now()-f<2e3;){a?.throwIfAborted();let b=await V(e.evaluate(()=>document.body.scrollHeight),{milliseconds:1e3}),[E,_,v]=await V(e.evaluate(()=>{let A=document.activeElement;if(!A)return[void 0,void 0,void 0];let P=A.getBoundingClientRect();return[A.scrollTop,P.x,P.y]}),{milliseconds:1e3});if(b===p&&E===g&&_===m&&v===h)break;p=b,g=E,m=_,h=v,await Z(500)}}catch(f){c.warn({err:f},"Failed to wait for scroll to complete, continuing...")}}}async function Hd(r,e){let t,n;for(let o=0;o<4;o++)try{return t=r.pages(),await Promise.all(t.map(async i=>{let a="";try{a=e?.getTitles?await i.title():""}catch{a="Unknown page"}return{title:a,url:i.url()}}))}catch(i){n=i,await Z(500)}throw new Error(`Failed to get tab titles after all retries: ${n?.message}`)}import{randomUUID as BO}from"crypto";import{cloneDeep as Vd}from"lodash-es";function mn(r,e){let t=r.findIndex(n=>n===e);if(!(t===-1||!r[t+1]))return r[t+1]}import{createHash as OO}from"crypto";var LO="v1";function Gd(r,e){if(r.tagName.toLowerCase()==="svg"&&!kO(r))try{let t=cb(r,e),n=NO(JSON.stringify(t));return{version:LO,json:t,hash:n}}catch{return}}function NO(r){return OO("md5").update(r).digest("hex")}function cb(r,e){let t=r.tagName.toLowerCase(),n=DO(r);if(t==="image"&&n["xlink:href"])throw new Error("Image tags within SVGs are not supported");let o={type:t,props:n,children:[]};for(let i of r.childrenBackendIds){let a=e.backendIdToNode[i];if(a&&a.nodeType===1){let s=cb(a,e);s&&o.children.push(s)}}return o}function kO(r){let e=r.computedStyles.display,t=r.computedStyles.visibility,n=r.computedStyles.opacity;return e==="none"||t==="hidden"||n==="0"}function DO(r){let e={},t=r.attributes;for(let n of Object.keys(t))Jt.visualAttributesForSvgSerialization.includes(n)&&(e[n]=t[n]);return t.id&&r.tagName.toLowerCase()!=="svg"&&(e.id=t.id),e}var Yn={r:147,g:196,b:125,a:.55},db={showRulers:!1,showStyles:!1,showExtensionLines:!1,contrastAlgorithm:"aa",contentColor:Yn,paddingColor:Yn,borderColor:Yn,marginColor:Yn,eventTargetColor:Yn,shapeColor:Yn,shapeMarginColor:Yn,showInfo:!0,showAccessibilityInfo:!0};function pb({snapshot:r,devicePixelRatio:e,computedStylesToFetch:t,logger:n}){let o=r.strings,i=r.documents,a={},s={},c={roots:[],backendIdToNode:a,frameIndexToIframeNode:s};return i.forEach((l,u)=>{let d=UO({allDocuments:i,stringConstants:o,computedStylesToFetch:t,devicePixelRatio:e,frameIndex:u,backendIdToNode:a,frameIndexToIframeNode:s,logger:n});c.roots.push(d)}),c}function UO({allDocuments:r,stringConstants:e,computedStylesToFetch:t,devicePixelRatio:n,frameIndex:o,frameIndexToIframeNode:i,backendIdToNode:a,logger:s}){let c=r[o],l=c.layout,u={};l.nodeIndex.forEach((R,w)=>{u[R]=w});let d=l.styles,p=l.bounds??[],g=c.nodes,m=g.contentDocumentIndex??{index:[],value:[]},h=g.backendNodeId??[],f=g.attributes??[],b=g.parentIndex??[],E=g.nodeName??[],_=g.nodeType??[],v=g.pseudoType??{index:[],value:[]},A=g.inputChecked??{index:[]},P=e[c.frameId];for(let R=0;R<h.length;R++){let w=h[R],B=_[R],D=f[R]??[],k=b[R]!==void 0&&b[R]>=0?b[R]:void 0,Y=k!==void 0?h[k]:void 0,Me=Y!==void 0?a[Y]:void 0,q=v.index.indexOf(R),H=q!==-1?e[v.value[q]]:void 0,ie=u[R],ae;ie?ae=p[ie]??[]:ae=[];let Ie=E[R]!==void 0?e[E[R]]?.toLowerCase():void 0;if(!Ie){s.warn({backendNodeId:w,frameId:P,frameIndex:o,nodeBounds:ae},"DOM node has no tag name");continue}let ue={backendNodeId:w,psuedoType:H,nodeType:B,frameIndex:o,parentFrameId:P,ownedFrameId:void 0,bounds:{x:ae[0]??null,y:ae[1]??null,width:ae[2]??null,height:ae[3]??null},computedStyles:{},attributes:{},parentBackendNodeId:Y??null,tagName:Ie,parent:Me??void 0,childrenBackendIds:[],momenticIgnored:void 0,mPathSelector:void 0};Me&&Me.childrenBackendIds.push(w);let at=m.index.indexOf(R);if(at!==-1){let be=m.value[at];i[be]=ue;let Ke=r[be]?.frameId;ue.ownedFrameId=Ke!==void 0?e[Ke]:void 0}for(let be of Object.keys(ue.bounds)){let Ke=be;ue.bounds[Ke]!==null&&(ue.bounds[Ke]/=n)}let Bt=ie!==void 0?d[ie]??[]:[];for(let be=0;be<Bt.length&&!(be>=t.length);be++){let Ke=Bt[be];if(Ke===void 0||isNaN(Ke))continue;let zt=e[Ke];if(zt===void 0)continue;let yo=t[be];ue.computedStyles[yo]=zt}for(let be=0;be<D.length;be+=2){let Ke=D[be],zt=D[be+1];if(!Ke||!zt)continue;let yo=e[Ke],xn=e[zt];!yo||!xn||(ue.attributes[yo]=xn)}A.index.includes(R)&&(ue.attributes.checked="true"),a[ue.backendNodeId]=ue}return a[h[0]]}function jd(r,e){if(r.mPathSelector)return r.mPathSelector;let t=r.parent,n;if(!t)n=r.tagName;else if(r.tagName==="body")n="body";else{let i=t.childrenBackendIds.filter(c=>e.backendIdToNode[c]?.nodeType===1&&!e.backendIdToNode[c]?.psuedoType).indexOf(r.backendNodeId),a=` > ${r.tagName}:nth-child(${i+1})`;n=`${jd(t,e)}${a}`}return r.mPathSelector=n,n}function ub(r,e){return r.parentBackendNodeId!==null?e.backendIdToNode[r.parentBackendNodeId]:r.frameIndex===0?void 0:e.frameIndexToIframeNode[r.frameIndex]}var FO=["html","#document","#document-fragment"];function mb({node:r,domGraph:e}){let t=[],n=r,o=ub(r,e);if(!o)return[r.tagName];let i=()=>{if(n=o,o=ub(o,e),!o&&n.frameIndex!==0)throw new Error("No parent node but not in main frame")},a=0;for(;o&&a<1e6;){if(a++,FO.includes(n.tagName)){i();continue}if(n.tagName==="body")t.push("body");else{let c=!1,l=1;for(let u=0;u<o.childrenBackendIds.length;u++){let d=o.childrenBackendIds[u],p=e.backendIdToNode[d];if(d===n.backendNodeId){t.push(`${n.tagName}:nth-child(${l})`),c=!0;break}else p?.nodeType===1&&!p.psuedoType&&l++}if(!c)throw new Error(`Could not find child (${n.tagName}) in parent's children list (${o.tagName})`)}i()}return t.reverse()}function gb(r,e){let t=r.locator("html"),n=[];for(let o=0;o<e.length;o++){let i=e[o];if(n.push(i),i.startsWith("iframe")){let a=n.join(" > ");n=[],o<e.length-1?t=t.frameLocator(a):t=t.locator(a)}}if(n.length&&(t=t.locator(n.join(" > "))),"owner"in t)throw new Error("Final locator from mpath is a frame locator");return t}async function hb(r,e){await r.send({method:"DOM.getDocument",params:{depth:0},timeout:2e3});let t=await r.send({method:"DOM.requestNode",params:{objectId:e},timeout:2e3}),o=(await r.send({method:"DOM.getAttributes",params:{nodeId:t.nodeId},timeout:2e3})).attributes,i=mn(o,Br);if(!i)throw new Error(`Could not find attribute ${Br} for object ${e}`);return i}var zO=["focusable","keyshortcuts","controls","live","relevant","orientation"],HO=["selected","readonly","modal","required","invalid"],GO=["id","name","role","content"],fb=["absolute","fixed","sticky"],jO=["i"],VO=["path"],$O=["statictext","textbox","checkbox","combobox","iframe","rootwebarea","table","caption","columnheader","rowheader","gridcell","grid","row","rowgroup","cell","image","graphics-symbol","graphics-document","graphics-object","svgroot","button","link","list","listitem","tablist","tabpanel","tab","searchbox","menu","menubar","form","dialog","alertdialog","banner","navigation","main","menuitem","menuitemcheckbox","menuitemradio","option","radio","progressbar","switch","tree","treeitem","separator"],bb=["ariaHiddenElement","ariaHiddenSubtree","hiddenByChildTree","inertElement","inertSubtree","notRendered","notVisible"],Eb=["activeAriaModalDialog","activeFullscreenElement","activeModalDialog"],WO=["menulistpopup","statictext","inlinetextbox"],qO=80,Sb=100,Tb=50,qd=["StaticText","ListMarker","RootWebArea","LineBreak","emphasis","::before","::after"],KO=["cite"],YO={LabelText:["label"],listitem:["li"],image:["img","svg"],link:["a"],RootWebArea:["#document"],paragraph:["p"],LineBreak:["br"],separator:["hr"],"graphics-symbol":["svg","rect"],gridcell:["td","th"],SvgRoot:["svg"],navigation:["nav"],cell:["td","th"],row:["tr"],list:["ul"],heading:["h1","h2","h3","h4","h5","h6"]},XO={name:!0,value:!0,title:!0,alt:!0,placeholder:!0,checked:!0,selected:!0,contenteditable:!0},yb={indentLevel:0},$d=class r{id;role;name;nameSources;tagName;content;properties;internalProperties;ignoredReasons;dataMomenticId;importantProperties;pathFromRoot;mPathSelector;parent;children;parentFrame;domNode;backendNodeId;ignoredByCDP;flagNotActionableNodes;constructor(e){if(this.id=e.id,this.role=e.role,this.name=e.name,this.nameSources=e.nameSources,this.content=e.content,this.properties={},this.pathFromRoot=e.pathFromRoot,this.children=e.children,this.backendNodeId=e.backendNodeID,this.ignoredByCDP=e.ignoredByCDP,this.internalProperties=e.internalProperties??{},this.parentFrame=e.parentFrame,this.ignoredReasons=e.ignoredReasons,this.importantProperties=e.importantProperties,this.flagNotActionableNodes=e.flagNotActionableNodes,e.properties&&e.properties.forEach(t=>{t.name==="keyshortcuts"?this.dataMomenticId=parseInt(t.value.value):this.properties[t.name]=t.value.value}),e.domNode){this.domNode=e.domNode,this.tagName=e.domNode.tagName||void 0;let t=e.domNode.attributes.id;this.name=this.name||e.domNode.attributes.name||(t&&t.length<Tb?t:""),this.role=this.role||(e.domNode.attributes.role??""),eL(this.properties,e.domNode,e.importantProperties)}rL(this)}getSerializedFormWithContext(){return this.serialize({noId:!0,maxLevel:1,neighbors:1})}getNodeOnlySerializedForm(){return this.serialize({noId:!0,noChildren:!0,noContent:!0})}getLogForm(){return JSON.stringify({id:this.id,name:this.name??"",role:this.role??"",backendNodeId:this.backendNodeId})}isInteresting(e){if(this.domNode&&VO.includes(this.domNode.tagName)||this.domNode?.computedStyles.display==="contents"||this.ignoredReasons.some(n=>Eb.includes(n)))return!1;if(e){if(Object.keys(this.domNode?.attributes??{}).some(o=>Cb(o,e)))return!0;let n=this.domNode?.attributes.class?.split(" ");if(n&&n.length>0&&n.some(o=>xb(o,e))||e.styles?.some(o=>{let i=o.split(":");if(i.length!==2)return!1;let a=i[0]?.trim(),s=i[1]?.trim();if(a===void 0||s===void 0)return!1;let c=this.domNode?.computedStyles[a];return c!==void 0&&(c===s||s==="*")}))return!0}if(this.domNode&&jO.includes(this.domNode.tagName)||$O.includes(this.role.toLowerCase())||this.role.toLowerCase()==="inlinetextbox"&&this.tagName||!this.properties.hidden&&(this.properties.focusable||this.properties.settable)||Jt.alwaysInterestingTruthyPropertyNames.some(n=>!!this.properties[n]))return!0;let t=this.properties.class;return typeof t=="string"&&t.split(" ").some(n=>Rb(n))?!0:this.children.every(n=>n.role==="StaticText")&&this.internalProperties?.inCodeMirrorEditor?!1:this.children.some(n=>n.role==="StaticText")||this.children.length>1&&this.children.some(n=>n.tagName==="input")?!0:this.domNode&&(this.domNode.bounds.x===null||this.domNode.bounds.y===null||!this.domNode.bounds.width||!this.domNode.bounds.height)?!1:!!this.name.trim()||!!this.content||Object.keys(this.properties).some(n=>n.startsWith("data"))}shouldSerializeBounds(){let e=this.domNode?.computedStyles.position;return!!(e&&(e==="absolute"||e==="fixed"||e==="sticky"))}isNotActionable(){return!!(this.domNode?.computedStyles.display==="contents"||this.domNode&&(this.domNode.bounds.x===null||this.domNode.bounds.y===null||!this.domNode.bounds.width||!this.domNode.bounds.height))}serialize(e=yb){let t=Object.assign({},yb,e),{indentLevel:n,noChildren:o,noProperties:i,noId:a,noContent:s,condensedMode:c}=t,l=Vd(this.properties),u=" ".repeat(n),d=this.role||"",p=this.tagName??"unknown",g=this.name;d==="heading"&&g==="heading"&&(g=""),this.nameSources?.find(A=>!A.superseded&&A.type==="contents")&&this.children.length>0&&(g="");let h=this.nameSources?.find(A=>!A.superseded);if(h&&!h.nativeSource&&h.type==="relatedElement"){let A=h.attributeValue?.relatedNodes??[];A.length===1&&A[0].text&&A[0].text===g&&(g="")}let f=qd.includes(this.role)||KO.includes(this.tagName||"");if(this.role==="StaticText"||this.role==="ListMarker")return`${u}${g}
3943
- `;let b=`${u}<${p}`;!a&&!f&&(b+=` id="${this.id}"`);let E=s??!1;if((l.multiline||l.contenteditable)&&this.children.length>0&&(E=!0),d&&d!=="generic"&&d!==p&&!(YO[d]??[]).includes(p)&&(b+=` role=${JSON.stringify(d)}`),g&&(b+=` name=${JSON.stringify(g)}`),this.content&&!E&&(b+=` content=${JSON.stringify(this.content)}`),this.flagNotActionableNodes&&this.tagName!=="#document"&&this.isNotActionable()&&(b+=` ${Jt.ineligibleElementAttribute}`),this.shouldSerializeBounds()&&this.domNode?.bounds){let A=this.domNode.bounds,P=Math.round(A.x??0),R=Math.round(A.y??0),w=Math.round((A.x??0)+(A.width??0)),B=Math.round((A.y??0)+(A.height??0));b+=` bounds=[${P} ${R} ${w} ${B}]`}let _=Date.now();if(Object.keys(l).length>0&&!i){if(Date.now()-_>1e3)throw new Error(`Serialization for the HTML element with tag ${p} and internal ID ${this.id} took too long. Please ensure your machine has enough resources to run Momentic.`);Object.entries(l).forEach(([A,P])=>{if(!zO.includes(A)){{if(HO.includes(A)&&(!P||P==="false"))return;if(A==="value"&&E&&(l.type==="text"||this.role==="textbox"))return;if(A==="level"&&`${P}`=="1")return;if(A==="url"&&l.src&&p==="img")return;if(A==="url"&&l.href&&p==="a")return;if(A==="editable"&&P==="plaintext")return;if(A==="type"&&P===p)return;if(c&&!XO[A])return}typeof P=="string"?b+=` ${A}="${At(P,Sb,!0)}"`:typeof P=="boolean"?P?b+=` ${A}`:b+=` ${A}={false}`:typeof P<"u"&&(b+=` ${A}={${At(JSON.stringify(P),Sb,!0)}}`)}})}if(p==="::before"||p==="::after"){let A="";for(let P of this.children)A+=P.serialize({...e,indentLevel:n,neighbors:0});return A}let v=e.maxLevel!==void 0&&n/2>=e.maxLevel;if(this.children.length===0||o||v)b+=` />
3944
- `;else{let A="";for(let R of this.children)A+=R.serialize({...e,indentLevel:n+2,neighbors:0});let P=A.trim();P.length<=qO&&!P.includes(`
3945
- `)?b+=`>${P}</${p}>
3946
- `:b+=`>
3947
- ${A}${u}</${p}>
3948
- `}if(e.neighbors!==void 0&&e.neighbors>0&&this.parent){let A=this.parent.children.findIndex(w=>w.id===this.id),P=A>0?this.parent.children[A-1]?.serialize({...e,neighbors:0}):"",R=A<this.parent.children.length-1?this.parent.children[A+1]?.serialize({...e,neighbors:0}):"";return`${P||""}
3949
- ${b}
3950
- ${R||""}`}return b}shallowClone(){let e=new r({id:this.id,role:this.role,name:this.name,nameSources:this.nameSources,content:this.content,properties:[],pathFromRoot:this.pathFromRoot,children:[],ignoredReasons:this.ignoredReasons,backendNodeID:this.backendNodeId,ignoredByCDP:this.ignoredByCDP,internalProperties:Vd(this.internalProperties),importantProperties:this.importantProperties,parentFrame:this.parentFrame,flagNotActionableNodes:this.flagNotActionableNodes});return e.tagName=this.tagName,e.dataMomenticId=this.dataMomenticId,e.properties=Vd(this.properties),e}},Wd=class r{constructor(e,t,n,o){this.root=e;this.a11yIdNodeMap=t;this.dataMomenticIdMap=n;this.selectorToNodeMap=o}serialize(e){return this.root.serialize(e)}pruneUsingSummaries(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");let n={},o={},i={},a=c=>{let l=c.shallowClone();if(e[c.id])return l.properties["data-momentic-summary"]=e[c.id],n[c.id]=l,c.dataMomenticId&&(o[c.dataMomenticId]=l),c.mPathSelector&&(i[c.mPathSelector]=l),l;let u=[];for(let d of c.children){let p=a(d);p&&(u.push(p),p.parent=l)}return l.children=u,n[c.id]=l,c.dataMomenticId&&(o[c.dataMomenticId]=l),c.mPathSelector&&(i[c.mPathSelector]=l),l},s=a(t);return new r(s,n,o,i)}pruneUsingRelevantIds(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");function n(i,a=!1){let s=e.has(`${i.id}`)||i.id===t?.id,c=i.shallowClone(),l=i.children,u=!1,d=[];for(let p of l){let g=n(p,s||u);g&&(d.push(g),g.parent=c,u=!0)}if(c.children=d,s||u)return c;if(qd.includes(i.role)&&a)return c}let o=n(t);return new r(o,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap)}pruneToSerializedCharLimit(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");let n=t.shallowClone(),o=()=>n.serialize().length,i=(a,s)=>{s.children=[];for(let c of a.children){let l=c.shallowClone();if(l.parent=s,s.children.push(l),o()>e){s.children.pop();break}if(i(c,l),o()>e){for(;l.children.length>0&&o()>e;)l.children.pop();if(o()>e){s.children.pop();break}}}};for(i(t,n);n.children.length>0&&o()>e;)n.children.pop();return new r(n,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap)}};function JO(r){return r.name?.value?`"${r.name.value}"`:r.role?.value&&r.role.value!=="none"&&r.role.value!=="generic"?`"${r.role.value}"`:`"${r.nodeId}"`}function ZO(r,e,t,n){return r.bounds.x===null||r.bounds.y===null||r.bounds.height===null||r.bounds.width===null||r.bounds.width===0||r.bounds.height===0?!0:r.bounds.x+r.bounds.width<e.leftBound||r.bounds.x>e.rightBound?(Ws({logger:t,logKey:n,maxCount:5,intervalMs:3e3},{domNode:r,logKey:n},"Filtering out node since it is not in the viewport horizontally"),!1):r.bounds.y+r.bounds.height<e.upperBound||r.bounds.y>e.lowerBound?(Ws({logger:t,logKey:n,maxCount:5,intervalMs:3e3},{domNode:r,logKey:n},"Filtering out node since it is not in the viewport vertically"),!1):r.computedStyles.display==="none"?(t.debug({domNode:r},"Filtering out node since it has display none"),!1):!0}async function vb({node:r,parent:e,frameId:t,frameContext:n,axGraph:o,domGraph:i,inputNodeMap:a,flagNotActionableNodes:s,showZeroOpacityElements:c,filterByViewport:l,viewportDetails:u,useMPaths:d,importantProperties:p,allowedA11yIgnoreReasonsOverride:g,cdpClient:m,logger:h,callId:f}){if(!e&&r.parentId)throw new Error(`Got no parent for accessibility node ${r.nodeId}: ${JSON.stringify(r)}`);let b=(H,ie={})=>{},E=r.backendDOMNodeId,_=WO.includes(r.role?.value?.toLowerCase()??"");if(!_&&E===void 0)return b("Filtering out node since it doesn't exist in the DOM"),[];let v=E?i.backendIdToNode[E]:void 0;if(!_&&!v)try{let H=await V(m.send({method:"DOM.describeNode",params:{backendNodeId:E}}),{milliseconds:750,fallback:()=>{h.debug("Timeout getting node from CDP while processing a11y tree")}});if(H&&H.node.nodeName.toLowerCase()==="slot"&&H.node.distributedNodes?.length)h.debug({redirectedDomNode:v,parentAXNode:e?.getNodeOnlySerializedForm(),originalAXNode:r,cdpResult:H},"Redirecting node to assigned slot");else return b("Filtering out node since it doesn't exist in the DOM",{cdpResult:H}),[]}catch(H){return b("Filtering out node since it doesn't exist in the DOM",{err:H}),[]}if(v&&e&&l&&u&&r.backendDOMNodeId&&!ZO(v,u,h,f))return v.momenticIgnored=!0,[];if(v&&v.computedStyles.display==="none")return v.momenticIgnored=!0,[];if(v&&v.computedStyles.opacity==="0"&&c!==!0){if(c==="inputs-only"&&v.tagName.toLowerCase()!=="input")return v.momenticIgnored=!0,[];if(c===!1)return v.momenticIgnored=!0,[]}let A=r.name?.value?typeof r.name.value=="string"?r.name.value:`${r.name.value}`:"",P=r.value?.value?typeof r.value.value=="string"?r.value.value:`${r.value.value}`:"",R=new $d({domNode:v,id:parseInt(r.nodeId),role:r.role?.value||"",name:A,nameSources:r.name?.sources,content:P,properties:r.properties,children:[],ignoredReasons:r.ignoredReasons?.filter(H=>(g??bb).includes(H.name)||Eb.includes(H.name))??[],pathFromRoot:(e?`${e.pathFromRoot} `:"")+JO(r),backendNodeID:r.backendDOMNodeId,ignoredByCDP:r.ignored,internalProperties:{inCodeMirrorEditor:e?.internalProperties?.inCodeMirrorEditor},importantProperties:p,parentFrame:n.type==="root"?void 0:n,flagNotActionableNodes:s}),w=n,B=a[t],D=t;if(v?.tagName.toLowerCase()==="iframe"&&v.ownedFrameId){let H=n.childFrames.find(Ie=>Ie.frameId===v.ownedFrameId),ie=o[H?.frameId??""]?.root,ae=a[H?.frameId??""];if(H&&ie&&ae){r.childIds&&r.childIds.length>0&&h.debug("Replacing existing node's children with children from the iframe");let Ie=ie;r.childIds=Ie.childIds,w=H,B=ae,D=H.frameId}}let k=v?.childrenBackendIds?.length??0,Y=(r.childIds??[]).filter(H=>!!B.get(parseInt(H))).length;if(k>Y){let H=r.childIds?.map(ae=>B.get(parseInt(ae))).filter(Boolean).map(ae=>ae?.backendDOMNodeId).filter(ae=>ae!==void 0)??[],ie=0;for(let ae of v?.childrenBackendIds??[]){if(H.includes(ae)){ie=(r.childIds?.findIndex(be=>B.get(parseInt(be))?.backendDOMNodeId===ae)??0)+1;continue}let Ie=i.backendIdToNode[ae];if(!Ie||Ie?.tagName.toLowerCase()!=="svg")continue;let ue=Math.floor(-1*Math.random()*1e7),at={nodeId:ue.toString(),parentId:r.nodeId,ignored:!1,backendDOMNodeId:ae,frameId:D,role:{type:"string",value:"graphics-symbol"}};B.set(ue,at),r.childIds||(r.childIds=[]),r.childIds.splice(ie,0,ue.toString()),ie++}}if(r.childIds?.length===1&&v){let H=B.get(parseInt(r.childIds[0])),ie=H?.role?.value,ae=v.childrenBackendIds;if(H&&ie==="StaticText"&&ae.length===1){let Ie=i.backendIdToNode[ae[0]];if(Ie?.tagName?.toLowerCase()==="span"){let ue=Math.floor(-1*Math.random()*1e7).toString(),at={nodeId:ue,parentId:r.nodeId,ignored:!1,backendDOMNodeId:Ie.backendNodeId,frameId:D,childIds:[H.nodeId]};H.parentId=ue,B.set(parseInt(ue),at),r.childIds=[ue]}}}for(let H of r.childIds??[]){if(!H)continue;let ie=B.get(parseInt(H));if(!ie)continue;let ae=await vb({node:ie,parent:R,domGraph:i,axGraph:o,frameId:D,frameContext:w,inputNodeMap:a,cdpClient:m,logger:h,callId:f,filterByViewport:l,showZeroOpacityElements:c,importantProperties:p,viewportDetails:u,useMPaths:d,flagNotActionableNodes:s});ae.length&&(R.children=R.children.concat(ae))}if(R.role==="StaticText"&&(R.children=[]),R.children.length===1&&R.children[0].role==="StaticText"){let H=R.name,ie=R.children[0]?.name;(H===ie||!ie)&&(R.children=[])}let Me=[];for(let H=R.children.length-1;H>=0;H--){let ie=R.children[H];if(ie.role!=="StaticText"){Me.push(ie);continue}if(H===0||R.children[H-1].role!=="StaticText"){Me.push(ie);continue}R.children[H-1].name+=ie.name}if(R.children=Me.reverse(),!R.isInteresting(p)&&r.parentId)return v&&(v.momenticIgnored=!0),R.children;for(let H of R.children)H.parent=R;return tL(R),v&&d&&jd(v,i),[R]}function Ab({node:r,a11yIdNodeMap:e,dataMomenticIdMap:t,logger:n,callId:o,domGraph:i,useMPaths:a,selectorToNodeMap:s,iconKnowledgeBase:c,startId:l=1}){r.id=l,l+=1,e[r.id]=r,r.dataMomenticId?t[r.dataMomenticId]=r:qd.includes(r.role);let u=r.backendNodeId,d=u!==void 0?i.backendIdToNode[u]:void 0;if(a&&d&&d.mPathSelector&&(s[d.mPathSelector]=r,r.mPathSelector=d.mPathSelector),c&&d&&d.tagName?.toLowerCase()==="svg"){let p=Gd(d,i),g=p?c[p.hash]:void 0,m=g?g.description:void 0;g&&(r.properties["data-momentic-description"]=m)}for(let p of r.children)l=Ab({node:p,a11yIdNodeMap:e,dataMomenticIdMap:t,logger:n,callId:o,startId:l,useMPaths:a,domGraph:i,selectorToNodeMap:s,iconKnowledgeBase:c});return l}async function wb({rawA11yGraph:r,domGraph:e,startingFrameId:t,logger:n,cdpClient:o,filterByViewport:i,showZeroOpacityElements:a,flagNotActionableNodes:s,importantProperties:c,viewportDetails:l,useMPaths:u,frameContext:d,iconKnowledgeBase:p,allowedA11yIgnoreReasonsOverride:g}){let m=t??"root",h=r[m]?.root;if(!h)throw new Error("A11y tree has no root");let f=BO(),b=R=>{let w=R.allNodes.filter(D=>!D.ignoredReasons?.find(Y=>(g??bb).includes(Y.name))),B=new Map;return w.forEach(D=>{B.set(parseInt(D.nodeId),D)}),B},E={};Object.entries(r).forEach(([R,w])=>{E[R]=b(w)});let _=await vb({node:h,domGraph:e,parent:null,inputNodeMap:E,axGraph:r,frameId:m,frameContext:d,cdpClient:o,logger:n,callId:f,showZeroOpacityElements:a,importantProperties:c,filterByViewport:i,viewportDetails:l,useMPaths:u,flagNotActionableNodes:s,allowedA11yIgnoreReasonsOverride:g});if(_.length>1)throw new Error(`Something went horribly wrong processing the a11y tree, we got: ${JSON.stringify(_)}`);if(_.length===0)throw new Error("There are no accessible elements on this page or frame. Are you sure this website loads properly?");let v={},A={},P={};return Ab({node:_[0],a11yIdNodeMap:v,dataMomenticIdMap:A,selectorToNodeMap:P,domGraph:e,logger:n,callId:f,useMPaths:u,iconKnowledgeBase:p}),new Wd(_[0],v,A,P)}function QO(r,e,t,n){if(r==="class"){if(t.tagName?.toLowerCase()==="svg")return e.split(" ").filter(a=>a.length<Tb&&!Jt.bannedClassSubstrings.some(s=>a.includes(s))).slice(0,3).join(" ");let o=e.split(" "),i=[];for(let a of o)if(Rb(a,n)){i.push(a);continue}return i.length?i.join(" "):null}if(e==="true")return!0;if(e==="false")return!1;try{let o=parseInt(e);if(!isNaN(o))return o}catch{}return r==="src"&&e.includes("base64")?e.slice(0,e.indexOf("base64")+6)+"...":e.length>60?e.slice(0,50)+"...":e}function eL(r,e,t){if(!e)return;Object.entries(e.attributes).forEach(([a,s])=>{let c=r[a]||a.startsWith("aria")||GO.includes(a);if((Jt.relevantElementAttributes.includes(a)||Cb(a,t))&&!c){let u=QO(a,s,e,t);u!==null&&(r[a]=u)}});let n,o=[];if(e.computedStyles.position&&fb.includes(e.computedStyles.position))n=e.computedStyles.position;else if(e.attributes.style){for(let a of fb)if(e.attributes.style.includes(`position: ${a}`)){n=a;break}}n&&o.push(`position: ${n}`);let i;e.computedStyles.opacity&&e.computedStyles.opacity==="0"&&(i="opacity: 0"),i&&o.push(i);for(let a of t?.styles??[]){let s=a.split(":"),c=s[0]?.trim(),l=s[1]?.trim(),u=e.computedStyles[c??""];if(c!==void 0&&l!==void 0&&u!==void 0&&(l==="*"||u===l)){let d=e.computedStyles[c],p=`${c}: ${d}`;o.includes(p)||o.push(p)}}o.length>0&&(r.style=o.join("; "))}function tL(r){let e=r.properties.class;if(typeof e=="string"&&e.includes("cm-content")){r.children.forEach((i,a)=>{i.properties["cm-line-number"]=`${a+1}`});return}if(typeof e=="string"&&e.includes("notion-page-content")){r.children.forEach((i,a)=>{i.properties["block-number"]=`${a+1}`}),r.children.length>0&&(r.children[r.children.length-1].properties.description="This is the last block in the document. Click here to add new text to the end.");return}if(r.tagName==="table"){let i=[],a=r.children.find(c=>c.tagName==="thead");if(a){let c=a.children.find(l=>l.tagName==="tr");if(c){let l=c.children.filter(u=>u.tagName==="th");l.forEach((u,d)=>{u.properties["col-index"]||(u.properties["col-index"]=d+1),i?.push(At(u.name,100,!1))}),i?.length!==l.length&&(i=void 0)}}let s=0;for(let c of r.children)if(c.tagName==="tbody")for(let l=0;l<c.children.length;l++){let u=c.children[l];if(u.tagName!=="tr")continue;if(l===0&&!i?.length){let g=u.children.filter(m=>m.tagName==="th");if(g.length){if(i=g.map(m=>At(m.name,100,!1)),i.length===g.length)continue;i=void 0}}s+=1,u.properties["row-index"]||(u.properties["row-index"]=s);let d=u.children.filter(g=>g.tagName==="td"||g.tagName==="th"),p=d.length===i?.length;d.forEach((g,m)=>{g.tagName!=="th"&&(g.properties["col-index"]||(g.properties["col-index"]=m+1),p&&(g.properties.col||(g.properties.col=i[m])))})}}}function rL(r){let e=r.properties.class,t=typeof e=="string"&&e.includes("cm-content");r.internalProperties.inCodeMirrorEditor=r.internalProperties?.inCodeMirrorEditor||t}function Rb(r,e){if(e&&xb(r,e))return!0;if(Jt.bannedClassSubstrings.some(t=>r.includes(t)))return!1;if(Jt.alwaysInterestingClassNames.includes(r))return!0;for(let t of Jt.alwaysInterestingClassPrefixes)if(r.startsWith(t))return!0;return!1}function Cb(r,e){if(e?.attributes?.includes(r))return!0;for(let t of e?.attributes??[])if(t.endsWith("*")){let n=t.slice(0,-1);if(r.startsWith(n))return!0}return!1}function xb(r,e){if(e?.classes?.includes(r))return!0;for(let t of e?.classes??[])if(t.endsWith("*")){let n=t.slice(0,-1);if(r.startsWith(n))return!0}return!1}var ml=class r{constructor(e,t,n,o,i){this.session=e;this.logger=t;this.contextGetter=n;this.pageGetter=o;this.defaultTimeoutMs=i}cdpInitializingPromise=void 0;cdpCrashDetails=void 0;cdpFullyDead=!1;loadEventLogs=[];static async init({logger:e,contextGetter:t,pageGetter:n,defaultTimeoutMs:o}){let i=t(),a=n(),s,c;for(let u=0;u<2;u++)try{s=await V(i.newCDPSession(a),{milliseconds:o*u,fallback:()=>{throw new x("UserInfrastructureError",`Failed to initialize Chrome session within the page load timeout (${a.url()})`)}});break}catch(d){await Z(500),c=d}if(!s)throw c;let l=new r(s,e,t,n,o);try{await V(l.registerHandlers(s),{milliseconds:o,message:`CDP handler registration timed out after ${o}ms`})}catch(u){throw l.cdpFullyDead=!0,new x("UserInfrastructureError",`Failed to initialize CDP client: ${u}`)}return l}async registerHandlers(e){e.on("Target.attachedToTarget",async()=>{try{await e.send("Runtime.runIfWaitingForDebugger")}catch(t){this.logger.warn({err:t},"Failed to run Runtime.runIfWaitingForDebugger")}}),e.on("Target.targetCrashed",t=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},targetCrashDetails:JSON.stringify(t)},this.logger.error({payload:t},"CDP session crashed, Momentic will likely not function correctly")}),e.on("Inspector.targetCrashed",t=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},inspectorCrashDetails:JSON.stringify(t)},this.logger.error({payload:t},"CDP inspector session crashed, Momentic will likely not function correctly")}),e.on("Page.frameRequestedNavigation",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Frame requested navigation: ${JSON.stringify(t)}`)}),e.on("Page.navigatedWithinDocument",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Navigated within document: ${JSON.stringify(t)}`)}),e.on("Page.lifecycleEvent",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page lifecycle event: ${JSON.stringify(t)}`)}),e.on("Page.loadEventFired",()=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page load event fired`)}),await e.send("Accessibility.enable"),await e.send("Page.enable"),await e.send("DOM.enable"),await e.send("Overlay.enable"),await e.send("DOMSnapshot.enable"),await e.send("CSS.enable")}async send({method:e,params:t,timeout:n=this.defaultTimeoutMs,timeoutMsg:o}){for(;this.cdpInitializingPromise;)await V(this.cdpInitializingPromise,{milliseconds:n});if(this.cdpCrashDetails){if(this.cdpFullyDead)throw new x("UserInfrastructureError",`The browser inspector session encountered a critical crash: ${JSON.stringify(this.cdpCrashDetails)}`);this.logger.warn(`Detected crashed CDP client before method ${e}, reinitializing before proceeding...`),await this.reinitialize()}try{return await V(this.session.send(e,t),{milliseconds:n,message:o??`Chrome command ${e} timed out after ${n}ms. This is likely an infrastructure issue caused by a lack of compute resources or a crash at the browser level.`})}catch(i){throw["Internal error","Target crashed"].some(a=>i.message.includes(a))&&!this.cdpInitializingPromise&&(this.logger.warn({err:i},`CDP crashed during CDP method ${e}, re-initializing client`),await this.reinitialize()),i}}async createRawCDPSession(e=this.defaultTimeoutMs){let t=e,n=this.pageGetter(),o=await V(this.contextGetter().newCDPSession(n),{milliseconds:t,fallback:()=>{throw this.logger.error(`Failed to initialize CDP session within the page load timeout (${n.url()})`),new x("UserInfrastructureError",`Failed to initialize CDP session within the page load timeout (${n.url()})`)}});return this.logger.debug(`Created new CDP session for ${n.url()}`),o}async reinitialize(e=this.defaultTimeoutMs){await this.cdpInitializingPromise,this.cdpInitializingPromise=(async()=>{try{let t=this.session;this.session=await this.createRawCDPSession(e),await V(this.registerHandlers(this.session),{milliseconds:e,message:`Failed to register CDP handlers within ${e}ms`}),this.logger.debug("Successfully reinitialized and attached new handlers to CDP session");try{await V(t.detach(),{milliseconds:1e3})}catch(n){this.logger.warn({err:n},"Failed to detach old CDP session after reinitialization, continuing...")}this.cdpCrashDetails=void 0,this.cdpFullyDead=!1}catch(t){this.cdpCrashDetails={...this.cdpCrashDetails??{},reinitializeError:`${t}`},this.cdpFullyDead=!0}finally{this.cdpInitializingPromise=void 0}})(),await this.cdpInitializingPromise}on(e,t){return this.session.on(e,t),this.session}off(e,t){return this.session.off(e,t),this.session}addListener(e,t){return this.session.addListener(e,t),this.session}removeListener(e,t){return this.session.removeListener(e,t),this.session}};var jo="<empty>";function nL(r){return r.includes("doubleclick.net")||r.includes("googletagmanager.com")||r.includes("googlesyndication.com")||r.includes("s.amazon-adsystem.com")||r.includes("smartadserver.com")||r.includes("omnitagjs.com")||r.includes("x.adroll.com")}function Mb(r){let e=r.adFrameStatus?.adFrameType;return e==="child"||e==="root"||nL(r.url)}async function oL(r,e){let t=await r.send({timeout:3e3,method:"DOM.getFrameOwner",params:{frameId:e}}),o=(await r.send({timeout:3e3,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[t.backendNodeId]}})).nodeIds[0],a=(await r.send({timeout:3e3,method:"DOM.describeNode",params:{backendNodeId:t.backendNodeId}})).node;return a.nodeId=o,a}async function Vo({cdpClient:r,page:e,logger:t}){let n={type:"root",childFrames:[],page:e},o=[],[i,a]=await Promise.all([r.send({timeout:3e3,method:"Page.getFrameTree",params:{}}),r.send({timeout:3e3,method:"DOM.getDocument",params:{depth:0}})]),l=(i.frameTree.childFrames??[]).map(async(d,p)=>{if(Mb(d.frame))return null;try{return await Pb({cdpClient:r,rawFrameTree:d,indices:[p],parent:n,warnings:o,logger:t})}catch(g){return o.push(`Failed to get child frame: ${g}`),null}}),u=await Promise.all(l);return n.childFrames=u.filter(d=>d!==null),o.length&&t?.warn({warnings:o},"Got warnings when fetching frame tree"),n}async function Pb({cdpClient:r,rawFrameTree:e,indices:t,parent:n,warnings:o,logger:i}){let a=e.frame.id,s=await oL(r,a),c=s.attributes??[],l=null,u=[];for(let m of["src","name","id","title","srcdoc","sandbox"]){let h=mn(c,m);h&&(u.push(`${m}=${JSON.stringify(h)}`),m==="src"&&(l=h))}let d={type:"frame",cdpFrame:e.frame,url:e.frame.url,frameId:a,locationData:{indices:t,attributeSelectors:u},src:l,childFrames:[],parent:n,domNode:s},g=(e.childFrames??[]).map(async(m,h)=>{if(Mb(m.frame))return null;try{return await Pb({cdpClient:r,rawFrameTree:m,indices:[...t,h],parent:d,warnings:o,logger:i})}catch(f){return o.push(`Failed to get child frame (child ${h} of frame with url ${e.frame.url}): ${f}`),null}});return d.childFrames=(await Promise.all(g)).filter(m=>m!==null),d}async function iL(r){try{return await r.owner().count()===1}catch{return!1}}async function aL(r){try{return await r.count()===1}catch{return!1}}async function Rr(r,e){let t=[],n=r;for(;n.parent.type==="frame";)t.push(n.parent),n=n.parent;t.reverse();let o=e,i=[];for(let l of t){let u=!1;for(let d of[...l.locationData.attributeSelectors,jo]){let p=o.frameLocator(d===jo?"iframe":`iframe[${d}]`);if(await iL(p)){u=!0,o=p,i.push(d);break}}if(!u)throw new x("ActionFailureError",`Failed to find a unique attribute to identify intermediate frame with url matching '${l.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`)}let a;for(let l of[...r.locationData.attributeSelectors,jo]){let u=o.locator(l===jo?"iframe":`iframe[${l}]`);if(await aL(u)){a=u,i.push(l);break}}if(!a)throw new x("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${r.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let s=await a.evaluateHandle(l=>l,{timeout:1e3}),c=await s.asElement().contentFrame();if(!c)throw new x("InternalWebAgentError",`Failed to load Playwright Frame for iframe with url '${r.url}'`);return await s.dispose(),{frame:c,mPathSelectorTokens:i}}function _b(r,e){let t=[...r],n=[];for(;t.length;){let o=t.shift();e(o)&&n.push(o),t.push(...o.childFrames)}return n}async function Ib({page:r,frameTree:e,cache:t}){let n,o=e.childFrames,i=[];if(t.mPathSelectorTokens.length){let s=o;for(let u=0;u<t.mPathSelectorTokens.length-1;u++){let d=t.mPathSelectorTokens[u];d===jo?s=s.length===1?s[0].childFrames:[]:s=s.filter(p=>p.locationData.attributeSelectors.includes(d)).map(p=>p.childFrames).flat()}let c=[],l=t.mPathSelectorTokens[t.mPathSelectorTokens.length-1];if(l===jo?c=s:c=s.filter(u=>u.locationData.attributeSelectors.includes(l)),c.length===1)return n=c[0],i.push(`Found unique frame with mpath ${t.mPathSelectorTokens.join(" > ")}`),{resolution:{type:"auto",frame:(await Rr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with mpath ${t.mPathSelectorTokens.join(" > ")}`)}if(t.frameSrcRegex){let s=new RegExp(t.frameSrcRegex),c=_b(o,l=>!!l.src&&s.test(l.src));if(c.length===1)return n=c[0],i.push(`Found unique frame with src regex ${t.frameSrcRegex}`),{resolution:{type:"auto",frame:(await Rr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with src regex ${t.frameSrcRegex}`),t.frameSrcRegex=void 0}if(t.frameUrlRegex){let s=new RegExp(t.frameUrlRegex),c=_b(o,l=>!!l.url&&s.test(l.url));if(c.length===1)return n=c[0],i.push(`Found unique frame with url regex ${t.frameUrlRegex}`),{resolution:{type:"auto",frame:(await Rr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with url regex ${t.frameUrlRegex}`),t.frameUrlRegex=void 0}let a=o;for(let s=0;s<t.indices.length-1;s++)a=a[t.indices[s]]?.childFrames??[];if(n=a[t.indices[t.indices.length-1]],n)return i.push(`Found unique frame with indices ${t.indices.join(" > ")}`),{resolution:{type:"auto",frame:(await Rr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};throw i.push(`Found ${a.length} frames with indices ${t.indices}`),new ln("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:!1,logs:i}])}function gl(r){return r.type==="auto"?JSON.stringify({type:"auto",frameId:r.handle.frameId}):JSON.stringify(r)}function Kd(r){for(;r.parent.type==="frame";)r=r.parent;return r.parent}function Ob(r){let e=Kd(r),t=r.src??"",n=r.url??"",o=[],i=[],a=[...e.childFrames];for(;a.length;){let s=a.shift();s.src&&o.push(s.src),s.url&&i.push(s.url),a.push(...s.childFrames)}return{srcs:o,urls:i,desiredSrc:t,desiredUrl:n}}function Lb(r){return r.type==="auto"?{type:"auto",frameId:r.handle.frameId,url:r.handle.url,src:r.handle.src??"",mPathSelectorTokens:r.mPathSelectorTokens.join(" > ")}:{type:"url",url:r.url}}async function Nb({frame:r,logger:e,signal:t}){let n;try{n=await r.frameElement(),await sL({frameElementHandle:n,logger:e,signal:t})}catch(o){n?e.warn({err:o},"Failed to scroll iframe into view, trying with raw JS"):e.warn("Failed to scroll iframe into view - no frame element")}finally{await n?.dispose()}}async function sL({frameElementHandle:r,logger:e,signal:t}){let n=await r.boundingBox();await $n({promiseGenerator:async()=>r.evaluate(async i=>{let a=i.scrollTop;i.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(c=>setTimeout(c,250));let s=Date.now();for(;Date.now()-s<1e3;){let c=i.scrollTop;if(c===a)break;a=c,await new Promise(l=>setTimeout(l,250))}}),timeoutMs:2e3,codePath:"scrollIframeIntoView",signal:t}),e.info({oldBb:n,newBb:await r.boundingBox()},"Successfully scrolled iframe into view")}function kb(r,e){return async(t,n)=>{try{let o=await n.allHeaders();for(let{key:i,value:a,matcher:s}of r)(!s||s.matches({url:n.url(),method:n.method()}))&&(o[i]=a);await t.fallback({headers:o})}catch(o){e.warn({err:o},"Failed to apply custom headers to request, continuing")}}}import{randomUUID as cL}from"crypto";function Db(r,e){for(let t of Object.values(e))if(t.matcher.matches({url:r.url(),method:r.method()}))return t}async function Ub(r){let{route:e,mock:t,entry:n,debugData:o,requestId:i,requestRecorders:a,logger:s}=r,c={url:n.request.url,options:{method:n.request.method,headers:n.request.headers.map(g=>[g.name,g.value]),body:n.request.postData?.text}},l;if(t.fetchOriginalResponse){let g=await e.fetch();l={body:await g.text(),options:{status:g.status(),statusText:g.statusText(),headers:Object.entries(await g.headers())}}}let u=await lL(t,c,l),d={};u.headers.forEach((g,m)=>{d[m]=g});let p={body:await u.text(),contentType:u.headers.get("content-type")||"text/plain",headers:d,status:u.status};await e.fulfill(p);try{n.response={status:p.status,statusText:u.statusText,headers:Object.entries(p.headers).map(([g,m])=>({name:g,value:m})),cookies:[],content:{mimeType:p.contentType,text:p.body},_mocked:!0},aa(o,n,i);for(let g of Object.values(a))g.onRequestComplete(i,n)}catch(g){g.message.includes("has been closed")||s.warn({err:g},"Failed to add response to HAR")}}async function lL(r,e,t){try{return await r.generateResponse(e,t)}catch(n){let o=n instanceof Error?n.message:`${n}`;return new Response(o,{status:500,headers:{"Content-Type":"text/plain"}})}}async function Yd(r){try{await uL(r)}catch(e){r.logger.warn({err:e},"Error handling intercepted request, continuing...")}}async function uL(r){let{pageId:e,route:t,request:n,debugData:o,logger:i,requestRecorders:a,mocks:s}=r,c=cL(),l=await Dd(e,n);try{aa(o,l,c);for(let d of Object.values(a))d.onRequestStart(c,l)}catch(d){i.warn({err:d},"Failed to add request to HAR")}let u=Db(n,s);u?await Ub({logger:i,route:t,mock:u,entry:l,debugData:o,requestId:c,requestRecorders:a}):await dL({route:t,request:n,debugData:o,logger:i,requestRecorders:a,entry:l,requestId:c})}async function dL({route:r,request:e,debugData:t,logger:n,requestRecorders:o,entry:i,requestId:a}){await r.continue();try{let s=await e.response();if(!s||!i)return;await Xy(i,e,s),aa(t,i,a);for(let c of Object.values(o))c.onRequestComplete(a,i)}catch(s){s.message.includes("has been closed")||n.warn({err:s},"Failed to add response to HAR")}}async function pL(r){let e=r.postData();if(e){if((await r.headerValue("content-type"))?.includes("json"))try{return{json:r.postDataJSON()}}catch{return{}}else if((await r.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}async function mL(r){let e=await r.text();if(e){if((await r.headerValue("content-type"))?.includes("json"))try{return{json:await r.json()}}catch{return{}}else if((await r.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}function hl(r){return{request:{url:r.request.url,method:r.request.method,headers:r.request.headers.reduce((e,t)=>({...e,[t.name]:t.value}),{}),...r.request.postData?r.request.postData.mimeType.includes("json")?{json:JSON.parse(r.request.postData.text)}:{text:r.request.postData.text}:{}},response:r.response?{status:r.response.status,headers:r.response.headers.reduce((e,t)=>({...e,[t.name]:t.value}),{}),...r.response.content?r.response.content.mimeType?.includes("json")&&r.response.content.text?{json:JSON.parse(r.response.content.text)}:{text:r.response.content.text}:{}}:void 0}}async function Xd(r){let e=r.request(),t=r.status(),n=r.headers(),o=await mL(r);return{request:{url:e.url(),method:e.method(),headers:e.headers(),...await pL(e)},response:{status:t,headers:n,...o},status:t,headers:n,...o}}var gn=class{requestMatcher;constructor(e){this.requestMatcher=e}matches(e){let{url:t,method:n}=e;return this.requestMatcher.method&&this.requestMatcher.method.toLowerCase()!==n.toLowerCase()?!1:al(t,this.requestMatcher.urlMatcher)}};function fl(r){let e=new URL(r.request().url());return/^127\./.test(e.hostname)||/^192\.168\./.test(e.hostname)||/^10\./.test(e.hostname)||/^172\.(1[6-9]|2\d|3[0-1])\./.test(e.hostname)||e.hostname==="localhost"?r.abort():r.fallback()}async function Fb({event:r,transformer:e,enricher:t,frame:n,lastScreenshotForRecording:o,logger:i}){let{warnings:a,error:s,properties:c}=r.target;if(s){i.error({error:s,warnings:a},"Error while capturing passive click");return}if(a.length&&i.warn({warnings:a},"Warnings while capturing passive click"),!c)return;let l=n.parentFrame()?n.url():void 0,d=n.page().frames().map(m=>m.url());i.debug({frameUrl:l,...r},"Passive click event captured on element");let p,g;if(l)try{let m=await n.frameElement();p=await V(m?.boundingBox(),{milliseconds:3e3})??void 0;let h=await t.constructIframeRegex({urls:d,srcs:[],desiredUrl:l});if(h.urlRegex)g={type:"url",url:`/${h.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(h)}`)}catch(m){i.warn({err:m},"Failed to construct iframe details for recorded action, using hardcoded URL only"),g={type:"url",url:l}}(async()=>{try{await e.recordElementAction({...r,screenshotBase64:o,frameConfig:g,frameBoundingBox:p})}catch(m){i.error({err:m},"Failed to transform passive click action")}})()}import{randomUUID as Cr}from"crypto";import gL from"js-beautify";var hL=["Dead"],Sl=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:e,callbacks:t,generator:n,testId:o,orgId:i,logger:a}){this.signal=e,this.logger=a,this.testId=o,this.orgId=i,this.callbacks={onStepRecorded:(s,c)=>{this.recordedSteps.set(c,{step:s}),t.onStepRecorded(s,c)},onActionReceived:(s,c)=>{this.recordedSteps.set(c,{step:s}),t.onActionReceived?.(s,c)}},this.generator=n}reserveIndexForCommand(e){let t=this.nextStepOffset;return this.recordedSteps.set(t,{step:{id:Cr(),type:"PRESET_ACTION",command:Dr(e)}}),this.nextStepOffset++,t}async recordElementAction(e){let{type:t,target:n,frameConfig:o}=e;if(this.signal.aborted){this.logger.debug("Transformer was already cleaned up, ignoring click...");return}let i,a,s=n.properties.attributes.nodeOnlySerializedHtml.trim(),c=s,l;switch(e.frameConfig?e.frameBoundingBox?l={x:e.frameBoundingBox.x+n.properties.boundingBox.x,y:e.frameBoundingBox.y+n.properties.boundingBox.y,width:n.properties.boundingBox.width,height:n.properties.boundingBox.height}:this.logger.warn(e,"No frame bounding box found, refusing to write bounding box"):l=n.properties.boundingBox,t){case"CLICK":{i="CLICK";let h=Dr(i);a={id:Cr(),type:"PRESET_ACTION",command:{...h,target:{type:"description",elementDescriptor:c},iframeUrl:o?.url,cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:l}}}};break}case"SELECT":{i="SELECT_OPTION";let h=Dr(i);a={id:Cr(),type:"PRESET_ACTION",command:{...h,type:"SELECT_OPTION",iframeUrl:o?.url,target:{type:"description",elementDescriptor:c},cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:l}},choice:{type:"VALUE",value:e.selectedValue??"Unknown option"}}};break}case"MOUSE_DRAG":{i="MOUSE_DRAG";let h=Dr(i);a={id:Cr(),type:"PRESET_ACTION",command:{...h,target:{type:"description",elementDescriptor:c},deltaX:e.deltaX.toString(),deltaY:e.deltaY.toString(),iframeUrl:o?.url,cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),targetUpdateLoggerTags:Se(this.logger),boundingBox:l}}}};break}default:throw new Error(`Unknown action type: ${t}`)}let u;e.offset===void 0?(u=this.nextStepOffset,this.nextStepOffset++):u=e.offset,this.callbacks.onActionReceived?.(a,u);let d=e.target.browserState;try{d=gL.html(d,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),d=Fy(d,"data-momentic-interacted",4e4)}catch{}let p;try{p=(await this.generator.getReverseMappedDescription({target:d,screenshot:e.screenshotBase64?`data:image/jpeg;base64,${e.screenshotBase64}`:void 0,boundingBox:n.properties.boundingBox},{disableCache:!1,loggerTags:{testId:this.testId,...Se(this.logger)}})).phrase}catch(h){this.logger.error({err:h},"Error generating reverse mapping description"),p=s}let g=this.recordedSteps.get(u)?.step??a,m=g?.command;m&&"target"in m&&m.target?(m.target={type:"description",elementDescriptor:p},this.callbacks.onStepRecorded({...g,command:m},u)):this.logger.warn("Could not find existing command to update after description mapping")}recordKeystroke(e){let{key:t,combinable:n}=e;if(hL.includes(t)||this.signal.aborted)return;let o="normal";t.length>1&&(o="special");let i;if(o==="normal"){let d=Dr("TYPE");i={id:Cr(),type:"PRESET_ACTION",command:{...d,target:void 0,value:t,clearContent:!1}}}else{let d=Dr("PRESS");i={id:Cr(),type:"PRESET_ACTION",command:{...d,value:t}}}let a,s=this.nextStepOffset-1,c=this.recordedSteps.get(s),l=c?.step,u=l?.command;if(n){if(u?.type===i.command.type){let d=u.value,p=i.command.value;i={id:Cr(),type:"PRESET_ACTION",command:{...u,value:i.command.type==="PRESS"?`${d}+${p}`:`${d}${p}`}},a=s}else if(u?.type==="CLICK"&&i.command.type==="TYPE")l.command={...i.command,target:u.target,cache:u.cache},i=c.step,a=s;else if(u?.type==="TYPE"&&i.command.type==="PRESS"&&i.command.value==="Backspace"){let d=u.value;i={id:Cr(),type:"PRESET_ACTION",command:{...u,value:d.slice(0,d.length-1)}},a=s}}a===void 0&&(a=this.nextStepOffset,this.nextStepOffset++),this.callbacks.onStepRecorded(i,a)}recordScroll(e){if(this.signal.aborted)return;let t=()=>{let{deltaY:i}=e;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,c;s?.type==="SCROLL_DOWN"&&s.deltaY?(i+=s.deltaY,c=a):s?.type==="SCROLL_UP"&&s.deltaY?(i-=s.deltaY,c=a):(c=this.nextStepOffset,this.nextStepOffset++);let l=i>0?"SCROLL_DOWN":"SCROLL_UP",u=Dr(l);u.deltaY=Math.abs(i);let d={id:Cr(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,c)},n=()=>{let{deltaX:i}=e;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,c;s?.type==="SCROLL_RIGHT"&&s.deltaX?(i+=s.deltaX,c=a):s?.type==="SCROLL_LEFT"&&s.deltaX?(i-=s.deltaX,c=a):(c=this.nextStepOffset,this.nextStepOffset++);let l=i>0?"SCROLL_RIGHT":"SCROLL_LEFT",u=Dr(l);u.deltaX=Math.abs(i);let d={id:Cr(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,c)},o=this.recordedSteps.get(this.nextStepOffset-1);o?.step.command.type==="SCROLL_LEFT"||o?.step.command.type==="SCROLL_RIGHT"?(n(),e.deltaY>=20&&t()):(t(),e.deltaX>=20&&n())}};import{z as Jd}from"zod";var One=Jd.object({type:Jd.literal("url"),url:Jd.string()});var yl=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:e,pageLoadTimeoutMs:t,allowPartialAccessibilityTree:n,logger:o,cdpClient:i,pageGetter:a,abortSignalGetter:s,enricher:c,iconKnowledgeBase:l,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=e,this.pageLoadTimeoutMs=t,this.allowPartialAccessibilityTree=n,this.logger=o,this.cdpClient=i,this.pageGetter=a,this.abortSignalGetter=s,this.enricher=c,this.iconKnowledgeBase=l,this.userBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userBrowserSettings.importantStyles)for(let p of this.userBrowserSettings.importantStyles){let g=p.split(":");if(g.length!==2){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}let m=g[0]?.trim(),h=g[1]?.trim();if(m===void 0||h===void 0){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(m)||this.computedStylesToFetch.push(m)}}get frameConfig(){return this.activeFrameConfig}get domGraph(){return this.lastDomGraph}get selectorToNodeMap(){return this.lastSelectorToNodeMap}get dataMomenticIdToNodeMap(){return this.lastDataMomenticIdToNodeMap}get a11yIdToNodeMap(){return this.lastA11yIdToNodeMap}get a11yTreeRoot(){return this.lastA11yTreeRoot}setActiveFrameConfig(e){e?(this.activeFrameConfig=e,this.activeFrameCache=void 0):(this.activeFrameConfig=void 0,this.activeFrameCache=void 0)}reset(){this.activeFrameCache=void 0,this.activeFrameConfig=void 0,this.lastA11yIdToNodeMap={},this.lastDataMomenticIdToNodeMap={},this.lastSelectorToNodeMap={},this.lastA11yTreeRoot=void 0,this.lastDomGraph=void 0}saveAutoFrameCacheDetails(e){if(!this.activeFrameConfig||this.activeFrameConfig.type!=="auto"||!this.userBrowserSettings.autoExpandIframes)return;let t={...e,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,t),t}async getAutoFrameDetailsFromHandle(e){let t=this.pageGetter(),n=Kd(e),{frame:o,mPathSelectorTokens:i}=await Rr(e,t),a={indices:e.locationData.indices,mPathSelectorTokens:i};return this.constructIframeRegexAsync(e,a),{cache:a,config:{type:"auto",frame:o,handle:e,mPathSelectorTokens:i,frameTree:n,cache:a}}}async resolveAutoFrameCache(e){let t=this.pageGetter(),n=await Vo({cdpClient:this.cdpClient,page:t,logger:this.logger}),{resolution:o,logs:i}=await Ib({page:t,frameTree:n,cache:e});return this.logger.info({logs:i},"Resolved auto frame cache"),{...o,cache:e}}async resolveActiveFrameConfig({logger:e=this.logger,signal:t=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(gl(this.frameConfig)!==this.activeFrameCache.frameIdentifierStringified)this.activeFrameCache=void 0;else if(this.activeFrameCache.frame&&"isDetached"in this.activeFrameCache.frame&&this.activeFrameCache.frame.isDetached())this.activeFrameCache=void 0;else return this.activeFrameCache;let n;return this.frameConfig.type==="url"?n=await this.resolveUrlMatcherFrameConfig({config:this.frameConfig,logger:e,signal:t}):n={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:gl(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await Nb({frame:n.frame,logger:e,signal:t}),this.activeFrameCache=n,n}async executeFunctionInAllFrames(e,t){let n=this.pageGetter(),o=await Vo({cdpClient:this.cdpClient,page:n,logger:this.logger}),i=[V(n.evaluate(e,t),{milliseconds:2e3})],a=Array.from(o.childFrames);for(;a.length>0;){let c=a.shift(),l=c.url;l==="about:blank"||l.startsWith("chrome-error://")||(a.push(...c.childFrames),i.push(Rr(c,n).then(({frame:u})=>V(u.evaluate(e,t),{milliseconds:2e3})).catch(u=>(this.logger.warn({err:u,frameUrl:c.url},"Failed to evaluate function in frame"),"MOMENTIC_FRAME_EVAL_ERROR"))))}return(await Promise.all(i)).filter(c=>c!=="MOMENTIC_FRAME_EVAL_ERROR")}async getAllChildFrameUrls(){let e=this.pageGetter(),t=await Vo({cdpClient:this.cdpClient,page:e,logger:this.logger}),n=Array.from(t.childFrames),o=[];for(;n.length>0;){let i=n.shift();n.push(...i.childFrames),o.push(i.src??i.url)}return o}async getDomGraph({devicePixelRatio:e,signal:t,logger:n}){return this.getDOMTree({devicePixelRatio:e??1,signal:t,logger:n??this.logger})}async getA11yTree(e){let t={},n=e.logger??this.logger,o=e.abortSignal??this.abortSignalGetter(),i=this.pageGetter(),a,s,c=null;if(this.frameConfig?.type==="url"){if(a=await Zt({fn:()=>this.resolveActiveFrameConfig({logger:n,signal:o}),codePath:"getActiveFrameDetails",logObject:t,signal:o,logger:n})??void 0,!a)throw new x("ActionFailureError","Got null frame details despite active frame config");s=a.handle,c=s.frameId}else this.userBrowserSettings.autoExpandIframes?(s=await Zt({fn:()=>Vo({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),codePath:"getMomenticFrameTree",logObject:t,signal:o,logger:n}),c=null):(s={type:"root",page:i,childFrames:[]},c=null);await Zt({fn:async()=>this.addMomenticIds({rootPage:i,childFrames:s.childFrames,frameFilter:a?.frame,logger:n}),codePath:"addIdsToElement",logObject:t,signal:o,logger:n});let l=await Zt({fn:()=>this.getDOMTree({devicePixelRatio:e.devicePixelRatio??1,signal:o,logger:n}),codePath:"domFetch",logObject:t,signal:o,logger:n}),u=await Zt({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:c,childFrames:s.childFrames,logTimings:t,logger:n,signal:o}),codePath:"totalA11yFetch",logObject:t,signal:o,logger:n}),{tree:d}=await Zt({fn:()=>this.composeA11yDomGraph({opts:e,a11yGraph:u,domGraph:l,startingFrameId:c,frameContext:s,logger:n,iconKnowledgeBase:this.iconKnowledgeBase,showZeroOpacityElements:e.showZeroOpacityElements,flagNotActionableNodes:e.flagNotActionableNodes}),codePath:"a11yProcess",logObject:t,signal:o,logger:n});return Object.values(t).some(p=>p>750)&&n.warn({logTimings:t},"A11y tree fetch component took a long time"),this.lastA11yIdToNodeMap=d.a11yIdNodeMap,this.lastDataMomenticIdToNodeMap=d.dataMomenticIdMap,this.lastA11yTreeRoot=d.root,this.lastDomGraph=l,this.lastSelectorToNodeMap=d.selectorToNodeMap,d}async fetchA11yTreeForRecording(e,t){if(await this.getA11yTree({devicePixelRatio:e,abortSignal:t,logger:zn,filterByViewport:!1,flagNotActionableNodes:!1}),Math.random()<.1){let n=this.lastA11yTreeRoot?.serialize();this.logger.debug({tree:n&&n.length>4e5?"REDACTED_DUE_TO_SIZE":n},"Refreshed a11y tree during recording")}}async getLocatorFromA11yNode({page:e,root:t,node:n}){if(n.backendNodeId===void 0)throw new Error(`Node with a11y id ${n.id} has no backend node ID: ${n.getNodeOnlySerializedForm()}`);if(this.userBrowserSettings.visualActions){let o=this.domGraph?.backendIdToNode[n.backendNodeId];if(!o)throw new Error(`Could not find DOM node for backend node ID ${n.backendNodeId}`);let i=mb({node:o,domGraph:this.domGraph});return gb(e,i)}else return this.getLocatorFromBackendId(t,n.backendNodeId)}async getLocatorFromBackendId(e,t){let n=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:t},timeout:2e3});if(!n||!n.object.objectId)throw new Error(`Could not resolve backend node ${t}`);let o;try{o=await hb(this.cdpClient,n.object.objectId)}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(n.object)},"Failed to get ID attribute"),i}return e.locator(pr(o))}getNodeUsingMPathSelector(e){let t=this.selectorToNodeMap[e];if(t)return t;let n=e.split(" > "),o="";for(let i=n.length-1;i>=0;i--){let a=n.slice(i).join(" > ");if(this.selectorToNodeMap[a]){o=a;break}}this.logger.warn({selectorMapSize:Object.keys(this.selectorToNodeMap).length,selector:e,closestSelector:o},"Could not find a11y node using mpath selector")}async resolveUrlMatcherFrameConfig({config:e,signal:t=this.abortSignalGetter(),logger:n=this.logger}){let o=Date.now(),i,a,s,c=0;for(;Date.now()-o<this.smartWaitingTimeoutMs;)try{i=await Vo({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),a=await this.getMatchingFrameByUrlWithCdp(i,e),n.info({frameId:a.handle.frameId,url:a.handle.url,src:a.handle.src,locationData:a.handle.locationData},`Found matching frame using ${a.matchType}`);break}catch(l){if(s=l,l instanceof x&&l.reason==="UserInfrastructureError")throw l;c%3===0&&this.logger.warn({attempt:c,err:l},"Failed to resolve active frame, retrying..."),await Z(500,t)}finally{c++}if(a)return{source:"url",frame:a.frame,handle:a.handle,frameIdentifierStringified:gl(e),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw s}async getMatchingFrameByUrlWithCdp(e,t){let n=t.url,o=this.pageGetter(),i=Array.from(e.childFrames),a=[];for(;i.length>0;){let s=i.shift(),c=s.domNode;i.push(...s.childFrames);let l=mn(c.attributes??[],"src"),u=c.contentDocument?.documentURL;if(!l&&!u){this.logger.debug("Skipping frame with no URL or src");continue}for(let d of[l,u])if(d){if(n.startsWith("/")&&n.endsWith("/")){if(new RegExp(n.slice(1,-1)).test(d)){a.push({handle:s,matchType:"regex",...await Rr(s,o)});break}}else if(n.trim()===d.trim()){a.push({handle:s,matchType:"url",...await Rr(s,o)});break}}}if(a.length===1){let s=a[0];return this.userBrowserSettings.autoExpandIframes||(s.handle.childFrames=[]),s}else throw a.length>1?new Error(`Found multiple frames with src matching '${n}'. Please use a more specific selector.`):new x("ActionFailureError",`Failed to find frame with src matching: ${n}`)}async composeA11yDomGraph({opts:e,a11yGraph:t,domGraph:n,startingFrameId:o,frameContext:i,logger:a,iconKnowledgeBase:s,showZeroOpacityElements:c,flagNotActionableNodes:l}){let u=await wb({rawA11yGraph:t,startingFrameId:o,frameContext:i,domGraph:n,logger:a,cdpClient:this.cdpClient,showZeroOpacityElements:c,flagNotActionableNodes:l,filterByViewport:e.filterByViewport,importantProperties:{attributes:this.userBrowserSettings.importantAttributes,classes:this.userBrowserSettings.importantClasses,styles:this.userBrowserSettings.importantStyles},viewportDetails:void 0,iconKnowledgeBase:s,useMPaths:this.userBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride});if(!u||!u.root)throw new Error("Accessibility tree appears empty");return{tree:u}}async addMomenticIds({rootPage:e,childFrames:t,frameFilter:n,logger:o}){if(this.userBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(n??e,1);if(!this.userBrowserSettings.autoExpandIframes||n)return;let a=Array.from(t),s=[];for(;a.length>0;){let c=a.shift();a.push(...c.childFrames);let l=async()=>{try{let{frame:u}=await Rr(c,e);i=await this.addMomenticIdsHelper(u,i)}catch(u){c.url!=="about:blank"&&o.warn({err:u},"Error adding momentic IDs to child frame, continuing...")}};s.push(l())}await Promise.all(s)}async addMomenticIdsHelper(e,t){if(this.userBrowserSettings.visualActions)return t;let n=this.logger;return await qe({root:e,fn:i=>window.addIdsToElement?.(document.body,i),arg:t,timeout:2e3,waitForPageLoad:async()=>{try{await e.waitForLoadState("domcontentloaded",{timeout:this.smartWaitingTimeoutMs})}catch(i){n.warn({err:i},"Error loading frame root adding momentic ids, continuing...")}},codePath:"adding Momentic element IDs to the page"})??t}getPageDomain(e){try{let t=new URL(e);if(!t.hostname)return null;let n=t.hostname.split("."),o=n.length>2?n.slice(-2).join("."):t.hostname;return`${t.protocol}//${o}`}catch{return null}}async decideChildFrameUnrollEligibility({logger:e,warnings:t,handle:n}){try{let{shouldUnroll:o,reason:i}=await this.decideChildFrameUnrollEligibilityHelper({domNode:n.domNode});return{shouldUnroll:o,reason:i}}catch(o){if(o.message.includes("Could not compute box model"))return{shouldUnroll:!1};let i=`Got error when determining whether to filter frame ${n.frameId} with url ${n.url}, allowing it to be fetched: ${o}`;return t?.push(i),e?.warn({err:o},i),{shouldUnroll:!0}}}async decideChildFrameUnrollEligibilityHelper({domNode:e}){let t=e.attributes??[];if(mn(t,"aria-hidden")==="true")return{shouldUnroll:!1,reason:"aria-hidden"};let n=mn(t,"style");if(n?.includes("display: none")||n?.includes("visibility: hidden"))return{shouldUnroll:!1,reason:"hidden CSS style"};await this.cdpClient.send({timeout:3e3,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[e.backendNodeId]}});let[o,i]=await Promise.all([this.cdpClient.send({timeout:3e3,method:"DOM.getBoxModel",params:{backendNodeId:e.backendNodeId}}),this.cdpClient.send({timeout:3e3,method:"CSS.getComputedStyleForNode",params:{nodeId:e.nodeId}})]);if(!o.model||!o.model.height||!o.model.width)return{shouldUnroll:!1,reason:"no bounding box"};if(o.model.height<10||o.model.width<10)return{shouldUnroll:!1,reason:"small bounding box"};for(let a of i.computedStyle){if(a.name==="display"&&a.value==="none")return{shouldUnroll:!1,reason:"display: none"};if(a.name==="visibility"&&a.value==="hidden")return{shouldUnroll:!1,reason:"visibility: hidden"};if(a.name==="opacity"&&a.value==="0")return{shouldUnroll:!1,reason:"opacity: 0"}}return{shouldUnroll:!0}}async getRawA11yGraph({cdpClient:e,frameId:t,childFrames:n,logTimings:o,logger:i=this.logger,signal:a=this.abortSignalGetter()}){let s=[];try{await this.pageGetter().waitForLoadState("load",{timeout:this.pageLoadTimeoutMs})}catch(g){i.warn({err:g},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),await this.cdpClient.reinitialize()}let c,l;for(let g=0;g<3;g++)try{l=await Zt({fn:()=>this.getRawA11yTreeForFrame({frameId:t,timeoutMs:this.pageLoadTimeoutMs,logTimings:o}),codePath:"a11y-tree-fetch-root",logObject:o,logger:i});break}catch(m){c=m,i.warn({err:m},"Reinitializing CDP client before retrying a11y graph fetch"),await this.cdpClient.reinitialize()}if(!l)throw new Error(`Failed to fetch accessibility tree for root page: ${c}`);let u={};if(u[t??"root"]=l,!this.userBrowserSettings.autoExpandIframes)return u;let d=Array.from(n),p=[];for(;d.length>0;){let g=d.shift();try{let{shouldUnroll:h}=await this.decideChildFrameUnrollEligibility({handle:g,warnings:s});if(!h)continue}catch(h){if(h.message.includes("Could not compute box model"))continue;s.push(`Got error when determining whether to filter frame ${g.frameId} with url ${g.url}, allowing it to be fetched: ${h}`)}d.push(...g.childFrames);let m=async()=>{try{let h=await Zt({fn:()=>this.getRawA11yTreeForFrame({frameId:g.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:o}),codePath:`a11y-tree-fetch-child-${g.frameId}`,logObject:o,logger:i});u[g.frameId]=h}catch(h){i.warn({err:h,url:g.url,src:g.src},`Error getting raw a11y tree for child frame ${g.frameId}, continuing...`)}};p.push(m())}return await Promise.all(p),s.length>0&&this.logger.warn({warnings:s},"Got warnings when fetching the raw a11y graph"),u}async getRawA11yTreeForFrame({frameId:e,timeoutMs:t,logTimings:n}){let o;if(this.allowPartialAccessibilityTree)o=(await Zt({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:e??void 0},timeout:t,timeoutMsg:`Fetching the document tree took over ${t}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes;else{let a=(await Zt({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:e??void 0},timeout:2e3}),codePath:"cdp-get-root-ax-node",logObject:n,logger:this.logger})).node.backendDOMNodeId;o=(await Zt({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:a},timeout:t,timeoutMsg:`Fetching the document tree took over ${t}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes}if(!o||o.length<=1)throw new Error("Document is entirely empty");return{root:o[0],allNodes:o}}async getDOMTree({devicePixelRatio:e,signal:t,logger:n}){let o,i=0,a;for(;!o&&i<3;)try{if(o=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:this.computedStylesToFetch},timeout:3e3}),!o||!o.documents.length)throw new Error("Got empty DOM tree")}catch(s){await Z(500,t),i++,a=s}if(!o||!o.documents.length)throw n.error({err:a},"Fatal error fetching DOM tree"),new x("UserInfrastructureError",`Received an empty HTML snapshot from the browser. This usually indicates the page has crashed due to resource consumption issues or hanging client-side JavaScript code: ${a?.message}`);return pb({snapshot:o,devicePixelRatio:e,computedStylesToFetch:this.computedStylesToFetch,logger:n})}constructIframeRegexAsync(e,t){if(t.frameSrcRegex||t.frameUrlRegex)return;let n=Ob(e);(async()=>{try{let o=await this.enricher?.constructIframeRegex(n);o?.srcRegex&&(t.frameSrcRegex=o.srcRegex),o?.urlRegex&&(t.frameUrlRegex=o.urlRegex),this.logger.debug({result:o,params:n},"Constructed iframe regex for cache")}catch(o){this.logger.warn({err:o},"Failed to construct iframe regex, skipping...")}})()}};function Zd(r){let e=[],t="";for(let n of r)n==="+"&&t?(e.push(t),t=""):t+=n;return e.push(t),e}var tp=xr(Wo(),"momentic","chromium"),DL=xr(Wo(),"video"),El=process.env.TWO_CAPTCHA_KEY,Wb=LL($b);Wb.use(NL({provider:{id:"2captcha",token:El},visualFeedback:!0}));var la=class r{static USER_AGENT=OL["Desktop Chrome"].userAgent;abortSignal=void 0;contextInitialized=!1;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;clientCallbacks;iconKnowledgeBase;lastIconKnowledgeBaseUpdateTime=0;cdpClient;debugData={logsPerPage:[],harPages:{},harEntries:{}};recentFrameNavigations={};requestRecorders={};mocks={};customHeaders=[];enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;originsVisited=new Set;viewport;videos=[];baseUrl;constructor({storage:e,enricher:t,browser:n,context:o,page:i,baseUrl:a,logger:s,userBrowserSettings:c,viewport:l,properties:u,clientCallbacks:d,iconKnowledgeBase:p}){if(xS(c),this.storage=e,this.enricher=t,this.browser=n,this.context=o,this.page=i,this.baseUrl=a,this.logger=s,this.userControlledBrowserSettings=c,this.viewport=l,this.properties=u,this.clientCallbacks=d,u.recordVideo){let g=this.page.video();g&&this.videos.push(g)}this.iconKnowledgeBase=p}registerAbortSignal(e){this.abortSignal=e}async initialize({grantPermissions:e,runInitScripts:t}){if(this.contextInitialized)return;this.userControlledBrowserSettings.extraHeaders&&await this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders),e&&await this.context.grantPermissions(["clipboard-read","clipboard-write","microphone","camera","geolocation"]);let n={[cl]:this.userBrowserSettings.visualActions},o=[this.context.addInitScript({content:ky.htmlUtilsLibJs}),this.context.addInitScript({content:`window._MOMENTIC_BROWSER = true; window._MOMENTIC_FEATURE_FLAGS = ${JSON.stringify(n)}; window.addEventListener('load', (event) => { console.log('[MOMENTIC] Page loaded'); });`})],i=a=>this.handleNewPageEvent(a);this.context.on("page",i),this.handleNewPageEventHelper(this.page),this.context.on("close",()=>{this.context.off("page",i)}),await Promise.all(o),t&&await this.page.reload(),this.properties.systemDevicePixelRatio||(process.env.MOMENTIC_LOCAL_DEV==="1"&&bl()==="darwin"&&TL("system_profiler SPDisplaysDataType").toString().includes("Retina")?(C.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2):this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio)),this.cdpClient=await ml.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout}),await this.initializeScreencast(),this.stateManager=new yl({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??!1,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=!0}async fixViewportForNewHeadless(){this.properties.isNewHeadless&&this.viewport&&await this.cdpClient.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}})}async initializeScreencast(){await this.fixViewportForNewHeadless(),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await this.cdpClient.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),this.cdpClient.on("Page.screencastFrame",e=>{let t=e.sessionId,n=Buffer.from(e.data,"base64");this.lastScreenshotForRecording=n,this.clientCallbacks?.onScreencastFrame?.(n,()=>{(async()=>{try{await this.cdpClient.send({method:"Page.screencastFrameAck",params:{sessionId:t}})}catch{}})()})}))}static async init({baseUrl:e,logger:t,storage:n,enricher:o,userBrowserSettings:i,contextArgs:a,recordVideo:s,iconKnowledgeBase:c,callbacks:l}){r.clearCrashReportsDirs(),process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY="1";let u;switch(i.browserType){case"Google Chrome":u="chrome";break;case"Chrome for Testing":u=void 0;break;case"Chromium":u="chromium";break;default:u="chromium";break}let d={headless:process.env.MOMENTIC_HEADFUL_BROWSER!=="true",handleSIGTERM:!1,chromiumSandbox:!1,channel:u},p={...a??{},geolocation:a?.geolocation||Sh,locale:a?.locale||hh,timezoneId:a?.timezoneId||fh,colorScheme:a?.colorScheme,httpCredentials:i.basicAuthorization?{username:i.basicAuthorization.username??"",password:i.basicAuthorization.password??""}:void 0,javaScriptEnabled:i.disableJavaScript?!1:void 0,ignoreHTTPSErrors:i.ignoreHttpsErrors??!1,userAgent:i.userAgent??r.USER_AGENT,viewport:a?.viewport??rn},g=["--disable-dev-shm-usage","--no-first-run","--renderer-process-limit=3","--browser-test","--disable-site-isolation-for-policy","--disable-site-isolation-trials","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--disable-renderer-backgrounding","--autoplay-policy=user-gesture-required","--disable-add-to-shelf","--disable-desktop-notifications","--use-fake-device-for-media-stream","--use-fake-ui-for-media-stream","--enable-logging=stderr","--log-level=2","--enable-crashpad","--crash-on-hang-threads"];process.env.MOMENTIC_CHROME_EXTRA_ARGS&&g.push(...process.env.MOMENTIC_CHROME_EXTRA_ARGS.split(","));let m=null,h,f,b={systemDevicePixelRatio:a?.deviceScaleFactor,recordVideo:s,isNewHeadless:!1};(u==="chrome"||u==="chromium")&&(b.isNewHeadless=!0,d.headless&&g.push("--headless=new")),process.env.BROWSER_MEMORY_MB&&g.push(`--js-flags=--max_old_space_size=${process.env.BROWSER_MEMORY_MB}`),i.disableGpu&&g.push("--disable-3d-apis","--disable-gpu","--disable-software-rasterizer","--disable-accelerated-2d-canvas","--disable-accelerated-mjpeg-decode","--disable-accelerated-video-decode","--disable-accelerated-video-encode","--disable-gl-drawing-for-tests","--disable-webgl","--disable-audio-input","--disable-audio-output");let E=i.localChromeExtensionPaths?.map(v=>v.startsWith("~")?xr(Wo(),v.slice(1)):v);if(E?.length){if(u===void 0)throw new x("UserConfigurationError","Chrome extensions are only supported on Chromium and Google Chrome.");for(let R of E){let w=xr(R,"manifest.json");if(!Xn(w))throw new x("UserConfigurationError",`Chrome extension path ${w} does not exist.`)}if(Bn)throw new x("UserConfigurationError","Cannot use persistent browser context on Momentic Cloud");let v=xr(tp,`momentic-session-${Date.now()}`);if(!Xn(v))try{vL(v,{recursive:!0})}catch(R){throw new x("UserConfigurationError",`Failed to create browser cache directory. Please make sure you have sufficient permissions to create the ${tp} folder: ${R}`)}let A=[...g],P=E.map(R=>IL(R)).join(",");A.push(`--disable-extensions-except=${P}`),p?.deviceScaleFactor&&A.push(`--force-device-scale-factor=${p.deviceScaleFactor}`,`--device-scale-factor=${p.deviceScaleFactor}`),p.viewport&&A.push(`--window-size=${p.viewport.width},${p.viewport.height}`),h=await $b.launchPersistentContext(xr(tp,`momentic-session-${Date.now()}`),{...d,...p,ignoreDefaultArgs:["--disable-extensions","--disable-component-extensions-with-background-pages"],args:A,baseURL:e}),t.info({sharedContextOptions:p,sharedBrowserOptions:d,userBrowserSettings:i,chromeArgs:A,properties:b,baseUrl:e},"Browser initialization context args (persistent)"),f=h.pages()[0]}else{m=await Wb.launch({...d,args:g});let v={...p,baseURL:e,recordVideo:s?{dir:DL}:void 0};h=await m.newContext(v),t.info({contextArgs:v,sharedBrowserOptions:d,chromeArgs:g,userBrowserSettings:i,properties:b,baseUrl:e},"Browser initialization context args (standard)"),f=await h.newPage()}Bn&&await h.route("**",fl);let _=new r({browser:m,context:h,page:f,baseUrl:e,logger:t,storage:n,enricher:o,userBrowserSettings:i,viewport:p.viewport||rn,properties:b,clientCallbacks:l,iconKnowledgeBase:c});return await _.initialize({grantPermissions:!0,runInitScripts:!1}),_}static async fromExistingContext({context:e,storage:t,enricher:n,userBrowserSettings:o,properties:i,logger:a}){let s=e.pages()[0];if(!s)throw new Error("No page found in existing context");let c=s.viewportSize();c||(c=await s.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})));let l=s?.url(),u=new r({browser:e.browser(),context:e,page:s,baseUrl:l,logger:a,storage:t,enricher:n,userBrowserSettings:o,viewport:c,properties:i,clientCallbacks:void 0,iconKnowledgeBase:null});return await u.initialize({grantPermissions:!1,runInitScripts:!0}),u}async handleAvailableTabsChangeHelper(){try{let e=await Hd(this.context,{getTitles:!0}),t=this.page.url();this.clientCallbacks?.onTabsChange?.(e,t)}catch(e){this.logger.error({err:e},"Error sending available tabs to frontend")}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500)}catch(e){this.logger.warn({err:e},"Error handling available tabs change")}}addToPageLoadPromises(e,t){let n=Qd(),o=`${e}-${n}`,i=Date.now(),a=!1,s=async()=>{try{await V(t(),{signal:this.abortSignal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${e} timed out after ${this.pageLoadTimeout}ms`})}catch(c){c.name!=="AbortError"&&this.logger.error({err:c,promiseKey:o,codePath:e,duration:Date.now()-i},`Page load promise for code path ${e} encountered error`)}finally{delete this.pageLoadPromises[o],a=!0}};this.pageLoadPromises[o]=s().catch(()=>{}),a&&delete this.pageLoadPromises[o]}handlePageClosedEvent(e){if(this.page!==e){this.logger.debug({url:e.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let t=async()=>{if(this.closed)return;this.logger.info({url:e.url()},"Detected active page was closed, switching to another tab");let n=this.context.pages();for(let o=n.length-1;o>=0;o--){let i=n[o];if(!(!i||i.isClosed()||!Wn(i.url()))){this.logger.info(`Automatically switching to tab ${o} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(o)});break}}};this.addToPageLoadPromises("page closed handler",async()=>t())}handleNewPageEvent(e){let t=e.url();if(this.logger.info({url:t},"Detected new page event, registering handlers and waiting for load to complete"),this.properties.recordVideo){let n=e.video();n&&this.videos.push(n)}try{this.handleNewPageEventHelper(e)}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....")}}handleNewPageEventHelper(e){let t=Qd(),n="new-page-load-handler";e.on("close",a=>this.handlePageClosedEvent(a)),e.on("framenavigated",a=>this.handleFrameNavigationEvent(a)),e.on("crash",()=>{this.logger.error("Page crashed at the Playwright level!")});let o=this.context.pages().indexOf(e);e.on("console",a=>{Wy(e,o,this.debugData,a,this.logger)});let i=async()=>{await Yy(t,this.debugData,e),await e.route("**/*",async(a,s)=>{await Yd({pageId:t,route:a,request:s,debugData:this.debugData,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks})}),await e.route("**/*",kb(this.customHeaders,this.logger)),Bn&&await e.route("**/*",fl),await this.loadFrameAndRecordUrl({root:e,codePath:n}),this.handleAvailableTabsChange()};this.addToPageLoadPromises(n,async()=>i())}async handleCollectSvgs(e){}handleFrameNavigationEvent(e){let t=e.url(),n=e.parentFrame()?"has-parent":"no-parent",o=`frame-navigation-handler-${t.slice(0,50)} (${n})`;if(!t||t==="about:blank"||!Wn(t)||this.recentFrameNavigations[o]&&Date.now()-this.recentFrameNavigations[o]<1e3)return;this.recentFrameNavigations[o]=Date.now();let i=async()=>{try{if(e.isDetached())return;await this.loadFrameAndRecordUrl({root:e,codePath:o}),this.handleAvailableTabsChange(),!e.parentFrame()&&!e.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(e)}catch(s){this.logger.warn({err:s},"Failed to collect SVGs on page, continuing...")}})()},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(e))}catch(a){a.name!=="AbortError"&&this.logger.warn({err:a,url:t,codePath:o},"Failed to handle frame navigation event, continuing...")}};this.addToPageLoadPromises(o,async()=>i())}async injectKnowledgeBaseIntoBrowser(e){try{if(!this.iconKnowledgeBase||await e.evaluate(()=>!!window._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let n={};Object.keys(this.iconKnowledgeBase).forEach(o=>{this.iconKnowledgeBase[o]?.description&&(n[o]=this.iconKnowledgeBase[o].description)}),await e.evaluate(o=>{let i=window;i._MOMENTIC_ICON_KNOWLEDGE_BASE=o},n)}catch(t){this.logger.warn({err:t},"Failed to inject icon knowledge base into browser, continuing...")}}getBrowserCallbacks(){return{waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:e=>this.waitForUrl(e),getBrowserState:e=>this.getBrowserState(e),waitForDomStability:e=>this.waitForDOMStability(e),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(e){this.stateManager.setActiveFrameConfig(e)}async reset(e){for(this.abortSignal=void 0,this.debugData.logsPerPage=[],this.debugData.harPages={},this.debugData.harEntries={},this.pageLoadPromises={};this.videos.length>0;)this.videos.pop();await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:e.newUrl??this.baseUrl,initialNavigation:!0,loadTimeoutMs:e.timeout}),this.stateManager.reset()}async clearHighlights(){try{await V(Fd(this.getBrowserCallbacks()),{milliseconds:1e3})}catch(e){this.logger.debug({err:e},"Failed to clear highlights, continuing...")}}async cleanup(){this.abortSignal=void 0;try{this.originsVisited.clear(),await this.context.close(),await this.browser?.close(),this.browser=null}catch(e){this.logger.warn({err:e},"Error cleaning up browser, continuing...")}finally{this.browser=null}}get closed(){return this.context.pages().every(e=>e.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(e,t,n){let o=Date.now(),i=0,a=0;for(;Date.now()-o<8e3;){a++,n?.throwIfAborted();try{if(await qe({fn:()=>{let c=window;return!!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:1e3,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),root:e,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){t.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await Z(500),a%2===0&&t.warn("Still waiting for momentic browser scripts to load...")}throw new Error(`Failed to load momentic browser scripts on page ${e.url()}`)}async html(){let e=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(e,this.logger),qe({root:e,fn:()=>{let t=window;if(!t?.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return t.getFullHtmlTree()},arg:void 0,timeout:3e3,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let e=window,t=[],n=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(o=>{n.set(o,{value:o.style.getPropertyValue("caret-color"),priority:o.style.getPropertyPriority("caret-color")}),o.style.setProperty("caret-color","transparent","important")}),t.push(()=>{for(let[o,i]of n)o.style.setProperty("caret-color",i.value,i.priority)}),e._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let o of t)o();delete e._MOMENTIC_SCREENSHOT_CLEANUP}},void 0,"stabilizing page for screenshot")}catch(e){(!(e instanceof Error)||!e.message.includes("Execution context was destroyed"))&&this.logger.warn({err:e},"Failed to stabilize page before screenshot, continuing...")}}async removeScreenshotStabilization(){try{await this.evaluateFunctionInPage(()=>{window._MOMENTIC_SCREENSHOT_CLEANUP?.()},void 0,"removing screenshot stabilization")}catch{}}async screenshot(e){let{retries:t=1,stabilizeBeforeScreenshot:n=!1}=e,o=this.page.url();n&&await this.stabilizePageForScreenshot();let i=Date.now();try{await this.fixViewportForNewHeadless();let a=await this.screenshotHelper({...e,retries:t});if(a.byteLength>5e6)this.logger.error("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(a.length===0)throw new Error("Got empty screenshot");return a}catch(a){if(t<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:o},"Failed taking screenshot, retrying..."),await Z(250),this.screenshot({...e,retries:t-1})}finally{Date.now()-i>1e3&&this.logger.warn({pageUrl:o,duration:Date.now()-i},"Screenshot took longer than expected"),n&&await this.removeScreenshotStabilization()}}async screenshotHelper({locator:e,quality:t,saveToDiskPath:n,timeout:o,respectActiveFrame:i,clearHighlights:a=!1}){a&&await this.clearHighlights(),i&&this.stateManager.frameConfig&&(e=await(await this.getActivePageOrFrame()).frameElement());let s=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:t,optimizeForSpeed:!0},timeout:o??2e3}),c=Buffer.from(s.data,"base64"),l=await jb.fromBuffer(c),{width:u,height:d}=this.getViewport()??{};if(u&&d&&(l.bitmap.width!==u||l.bitmap.height!==d)&&(c=await l.resize({w:u,h:d}).getBuffer("image/jpeg")),n&&CL(n,c),this.lastScreenshotForRecording=c,!e)return c;let p=await e.boundingBox({timeout:3e3});if(!p)throw new Error("Attempted to screenshot an element that is not visible on the page");let{x:g,y:m,width:h,height:f}=p;if(!h||!f)throw new Error("Attempted to screenshot an element with zero width or height");g=Math.floor(g),m=Math.floor(m),h=Math.floor(h),f=Math.floor(f);try{let b=await jb.fromBuffer(c),E=b.bitmap.width,_=b.bitmap.height;g=Math.max(0,Math.min(g,E-1)),m=Math.max(0,Math.min(m,_-1)),h=Math.max(1,Math.min(h,E-g)),f=Math.max(1,Math.min(f,_-m)),c=await b.crop({x:g,y:m,w:h,h:f}).getBuffer("image/jpeg")}catch(b){throw new Error(`Failed taking element screenshot at coordinates (${g}, ${m}) with size (${h}, ${f}): ${b}`)}finally{"dispose"in e&&await e?.dispose()}return c}getViewport(){if(this.viewport)return this.viewport;let e=this.page.viewportSize();return e||null}async navigate({url:e,initialNavigation:t=!1,loadTimeoutMs:n=this.pageLoadTimeout}){Ly(e)&&(e=new URL(e,this.baseUrl).toString());let o=Date.now();t||(await this.waitForPageLoad(),await this.waitForDOMStability());let i=!1,a;for(let c=0;c<3;c++)try{await this.page.goto(e,{timeout:n,waitUntil:"domcontentloaded"}),i=!0;break}catch(l){if(a=l,this.abortSignal?.throwIfAborted(),this.logger.warn({err:l},`Error occurred during navigation${c===0?", retrying...":" (fatal)"}`),await Z(500),a.message.includes("Timeout")&&a.message.includes("exceeded")||a.message.includes("net::ERR_CONNECTION_REFUSED"))break;await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:1e3})}if(!i)throw new x("UserInfrastructureError",a?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:e},`Navigation complete in ${Math.floor(Date.now()-o)}ms`);let s=this.url();if(By.has(s))throw new x("UserInfrastructureError",`${e} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);if(t)try{await this.exposeRecordingBindings()}catch(c){c instanceof Error&&c.message.includes("already registered")||this.logger.error({err:c},"Failed to install Momentic libraries for action recording")}await this.fixViewportForNewHeadless()}async type(e,t={},n=!1){await this.directTypeHelper(e,t,n)}async getActiveElement(e){try{return await qe({root:e,fn:()=>{let n=document.activeElement?.textContent??void 0;return n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]"),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n}:void 0},arg:void 0,timeout:1e3,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(t){this.logger.warn({err:t},"Failed to get active element");return}}async directTypeHelper(e,t={},n=!1){let o=await this.getActivePageOrFrame();await nb({root:o,text:e,options:t,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(o);if(n){let a=Date.now();for(;Date.now()-a<this.smartWaitingTimeout&&(!i||i.tag==="body");)await Z(250),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(o);i||this.logger.warn("No active element found to type into, attempting anyways")}t.clearContent&&(t.forceClearContent||i?.tag==="input"||i?.tag==="textarea"?(process.platform==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(25)):this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...")),await this.page.keyboard.type(e,{delay:t.delay??Bg}),t.pressEnter&&await this.press("Enter",{})}async scrollIntoViewIfNeeded(e){try{await e.scrollIntoViewIfNeeded({timeout:2e3})}catch(t){this.logger.warn({err:t},"Failed to scroll into view, trying with raw JS");try{await e.evaluate(async n=>{let o=n.scrollTop;n.scrollIntoView(),await new Promise(a=>setTimeout(a,250));let i=Date.now();for(;Date.now()-i<1e3;){let a=n.scrollTop;if(a===o)break;o=a,await new Promise(s=>setTimeout(s,250))}},void 0,{timeout:2e3})}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...")}}}async highlightA11yId(e){try{let{resolution:t}=await this.createTargetFromA11yId({id:e,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(t.locator),!0}catch(t){return this.logger.debug({err:t,id:e},"Failed to highlight target"),!1}}async highlight(e){return dl({locator:e,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(e){try{let t=new URL(e).origin;if(t==="null")return;this.originsVisited.add(t)}catch(t){this.logger.warn({err:t},"Failed to record origin visited")}}async waitForPageLoad(){let e=Date.now(),t=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises),o=-1,i=0;for(;t.length!==0;){if(Date.now()-e>this.pageLoadTimeout&&this.logger.error({outstandingPromiseKeys:n,outstandingPromises:t},"Still waiting on page load promises"),Date.now()-o<20&&(i++,i>2)){this.logger.error({outstandingPromiseKeys:n,outstandingPromises:t},"Synchronous waiting loop detected, exiting page load wait");return}o=Date.now(),await Promise.allSettled(t),t=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises)}}async clearAuthState(e){await this.context.clearCookies();for(let o of this.originsVisited)this.logger.debug({origin:o},`Clearing data using CDP for origin ${o}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:o,storageTypes:"all"},timeout:1e3}),this.originsVisited.delete(o);let t=this.context.pages().indexOf(this.page),n=[...this.context.pages()];for(let o=0;o<n.length;o++){let i=n[o];if(i.isClosed())continue;let a=i.url();try{this.originsVisited.delete(new URL(a).origin)}catch{}await $y(i,this.logger),o!==t&&e.closeNonActiveTabs&&(this.logger.info(`Closing tab ${o} with URL ${a}`),await i.close())}}async loadAuthState(e){await this.waitForPageLoad(),await this.waitForDOMStability(),!e||Object.keys(e).length===0?await this.clearAuthState({closeNonActiveTabs:!1}):await this.loadAuthStateHelper(e),await this.refresh(),await this.waitForDOMStability()}async loadAuthStateHelper(e){let t=[];for(let i of e.cookies??[]){let a=await this.setCookie(i);t=t.concat(a)}this.logger.info(`Loaded ${e.cookies?.length??0} cookies`),await this.cdpClient.send({method:"DOMStorage.enable",params:void 0,timeout:1e3});let n=0;for(let i of e.origins??[])for(let a of i.localStorage)try{await this.cdpClient.send({timeout:1e3,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(i.origin).origin,isLocalStorage:!0},key:a.name,value:a.value}}),n++}catch(s){this.logger.warn({err:s,origin:i},"Failed to set local storage entry, continuing...");break}this.logger.info(`Loaded ${n} local storage entries`);let o=e.idb;o&&Object.keys(o).length>0&&(await Vy(this.page,o,this.logger),this.logger.info(`Loaded ${Object.keys(o??{}).length} indexedDB databases`))}async saveAuthState(){let t=0,n=null;for(;t<=2;)try{await this.waitForPageLoad(),await this.waitForDOMStability();let o=await this.context.storageState();return o.idb=await jy(this.page,this.logger),o}catch(o){if(n=o,t++,t<=2){this.logger.warn({err:o,retryCount:t,maxRetries:2},`Error saving auth state, retrying (${t}/2)...`);let i=Math.pow(2,t)*100;await new Promise(a=>setTimeout(a,i))}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new x("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(e){return Hd(this.context,e)}saveA11yDetailsToCache(e,t){t.content=e.content,t.name=e.name,t.role=e.role,t.numChildren=e.children.length,delete t.serializedForm,delete t.nodeOnlySerializedForm}async updateCacheWithNewNodeDetails({node:e,target:t,locator:n,startingBoundingBox:o,allowNotActionableNodesOverride:i,logger:a=this.logger}){if(e&&this.saveA11yDetailsToCache(e,t),t.frameCache=this.stateManager.saveAutoFrameCacheDetails(t.frameCache),n)try{let s=await this.fetchHtmlAttributes({locator:n,logger:a,startingBoundingBox:o,allowNotActionableNodesOverride:i});s?(t.generatedSelectors=s.generatedSelectors,t.serializedHtml=s.serializedHtml,t.nodeOnlySerializedHtml=s.nodeOnlySerializedHtml,t.hybridSelector=s.hybridSelector):a.warn("Got undefined HTML attributes when trying to update cache")}catch(s){if(s instanceof Er)throw a.warn({err:s},"Cache attributes disqualify found element"),s;a.warn({err:s},"Failed to fetch HTML attributes for target, continuing...")}try{await this.saveElementVisualAttributes({target:t,locator:n,logger:a,boundingBox:o})}catch(s){a.debug({err:s},"Failed to save element visual details, continuing...")}}async saveElementVisualAttributes({target:e,locator:t,logger:n,boundingBox:o}){if(!t)return{scrollPerformed:!1};if(!Cd.includes(e?.role??""))return{scrollPerformed:!1};if(await this.scrollIntoViewIfNeeded(t),o||(o=await t.boundingBox({timeout:3e3})),!o||!o.width||!o.height)return n.debug("Skipping visual attributes saving for element with no bounding box after action"),e.boundingBox=void 0,e.screenshotUrl=void 0,{scrollPerformed:!0};let{x:i=0,y:a=0,width:s=0,height:c=0}=o;if(e.boundingBox&&Math.abs(e.boundingBox.width-s)<1&&Math.abs(e.boundingBox.height-c)<1&&Math.abs((e.boundingBox.x??0)-i)<1&&Math.abs((e.boundingBox.y??0)-a)<1)return{scrollPerformed:!0};e.boundingBox=o;let l=await this.screenshot({locator:t,quality:75,retries:0});return e.screenshotUrl=await this.storage.uploadScreenshot(l),{scrollPerformed:!0}}async resolveAutoFrameCache(e){return this.stateManager.resolveAutoFrameCache(e)}async getElementRequiredValues({locator:e,requirements:t}){let n={};if(t?.boundingBox){let o=await e.boundingBox({timeout:3e3});if(!o||!o.width||!o.height)throw new x("ActionFailureError","Element does not have a bounding box as required");n.boundingBox=o??void 0}if(t?.text){let o=await e.innerText({timeout:3e3});n.text=o?.trim()}if(t?.attributes&&t.attributes.length>0){let o={};for(let i of t.attributes){let a=i.trim().toLowerCase();if(!(!a||Jt.bannedAiRequiredCacheAttributes.includes(a)))try{let s=await e.getAttribute(a,{timeout:3e3});s!==null&&(o[i]=s)}catch(s){this.logger.warn({err:s,attr:i},"Failed to fetch required attribute, continuing...")}}n.attributes=o}return n}async getAdditionalElementDetails({mainLocator:e,additionalElement:t,root:n,logger:o}){let i=this.stateManager.a11yIdToNodeMap[t.id];if(!i)return;let a=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:n,node:i});if(e.contentFrame!==a.contentFrame)return;let s=await this.fetchHtmlAttributes({locator:a,logger:o});if(!s?.generatedSelectors||s.generatedSelectors.length===0)return;let c={selectors:s.generatedSelectors};return t.requirements&&(c.requirements=await this.getElementRequiredValues({locator:a,requirements:t.requirements})),c}async getAdditionalElementsDetails({mainElementId:e,mainLocator:t,additionalElements:n,root:o,logger:i}){let a=new Set,s=[];for(let c of n)try{if(c.id===e||a.has(c.id))continue;let l=await this.getAdditionalElementDetails({mainLocator:t,additionalElement:c,root:o,logger:i});if(a.add(c.id),!l)continue;s.push(l)}catch(l){this.logger.warn({err:l,additionalElement:c},"Failed to fetch additional element details, continuing...")}return s}async updateCacheWithAdditionalRequirements({mainElementId:e,requirements:t,additionalElements:n,target:o,locator:i,root:a,logger:s}){t&&(o.requirements=await this.getElementRequiredValues({locator:i,requirements:t})),n&&(o.additionalElements=await this.getAdditionalElementsDetails({mainElementId:e,mainLocator:i,additionalElements:n,root:a,logger:s}))}async createTargetFromA11yId({id:e,description:t,targetSource:n,skipSaveToCache:o,logger:i=this.logger,requirements:a,additionalElements:s}){if(e<0)throw new x("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let c=this.stateManager.a11yIdToNodeMap[e];if(!c)throw new x("InternalWebAgentError",`Resolving target failed because id ${e} does not exist on the page. This generally indicates an incorrect element was targeted.`);let l=this.stateManager.frameConfig,u,d,p,g;if(this.userBrowserSettings.autoExpandIframes&&!l&&c.parentFrame){let E=c.parentFrame,{cache:_,config:v}=await this.stateManager.getAutoFrameDetailsFromHandle(E);d=_,p=v,u=v.frame,g="auto iframe"}else c.parentFrame&&l?(p=l,u=await this.getActivePageOrFrame(),g="hardcoded url already on the state manager"):(u=await this.getActivePageOrFrame(),g="should not be possible");let m=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:u,node:c}),h={id:e,inputDescription:t??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:Se(i),frameCache:d},f,b=!1;o||(p&&(i.info({frameConfigSource:g,frameConfig:Lb(p)},"A11y node was resolved to a target within an iframe"),f=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(p),b=!0),await this.updateCacheWithNewNodeDetails({node:c,target:h,locator:m,logger:i,allowNotActionableNodesOverride:!0}),await this.updateCacheWithAdditionalRequirements({mainElementId:e,requirements:a,additionalElements:s,target:h,root:u,locator:m,logger:i}));try{return{resolution:{locator:m,a11yNode:c,displayString:c.getNodeOnlySerializedForm(),decisions:[]},target:h,frameConfig:p,frameConfigSource:g}}finally{b&&this.stateManager.setActiveFrameConfig(f)}}async resolveTarget(e,t,n={}){let{targetName:o,logger:i=this.logger,signal:a=this.abortSignal,allowNotActionableNodesOverride:s}=n;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let g,m=!1,h=Date.now();for(;Date.now()-h<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),m=!0;break}catch(f){g=f,await Z(500,a)}if(!m)throw g}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,i,a);let l=Date.now(),u=0,d=0,p;for(;Date.now()-l<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),u++;let g=u===2||Date.now()-l>this.smartWaitingTimeout-2e3&&u%2===0;try{p=await this.resolveTargetHelper({root:c,target:t,primaryOnly:!0,logger:g?i:zn,allowNotActionableNodesOverride:s,signal:a});break}catch(m){if(m instanceof ea)break;if(m instanceof Er){if(d++,d>2)throw i.error({err:m},"Got multiple cache disqualification errors, giving up"),m;i.warn({err:m},"Got cache disqualification error, waiting and retrying resolution"),await Z(500,a)}a?.throwIfAborted(),g&&i.info({err:m},`Could not resolve target using primary cache only (x${u})`),await Z(500,a)}}return p||(p=await this.resolveTargetHelper({root:c,target:t,primaryOnly:!1,logger:i,signal:a,allowNotActionableNodesOverride:s}),t.targetSource="HEURISTIC_HEALED",t.targetUpdateTime=new Date().toISOString(),t.targetUpdateLoggerTags=Se(i),i.info({decisions:p.decisions},"Target resolution succeeded after waiting")),e?.details?.push({type:"TARGETING",name:o,elementLocationDecisions:p?.decisions??[],pageState:void 0,targetSource:t.targetSource,targetUpdateTime:t.targetUpdateTime}),p}async resolveTargetHelper({root:e,target:t,primaryOnly:n,logger:o,signal:i,allowNotActionableNodesOverride:a}){let s=$o(t),c=[],l=(await this.getBrowserState({logger:o,abortSignal:i,skipWait:!0,allowNotActionableNodesOverride:a})).serialize(),u;if(t.generatedSelectors||t.hybridSelector){let d;try{d=await this.resolveTargetWithPrimaryMethods({root:e,target:t,logger:o,allowNotActionableNodesOverride:a})}catch(p){u=p,p instanceof ln&&c.push(...p.decisions)}if(d)return{...d,pageState:void 0,decisions:[...c,...d.decisions]};n||(c.push({type:"CSS_SELECTOR",matched:!1,reason:u?.message,selectors:$o(t.generatedSelectors??[])}),t.generatedSelectors=void 0,t.hybridSelector=void 0)}if(n)throw u;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let d=await this.resolveTargetWithSecondaryMethods({root:e,tree:l,target:t,decisions:c,logger:o,signal:i,allowNotActionableNodesOverride:a});if(d)return d}throw new ln(`Could not find any relevant node given target: ${JSON.stringify(s)}`,c)}async resolveTargetWithPrimaryMethods({root:e,target:t,logger:n,allowNotActionableNodesOverride:o}){if(!t.nodeOnlySerializedHtml)throw new ea("Insufficient data to resolve target using primary methods (missing node HTML)");let i=this.userControlledBrowserSettings.hybridSelectorMode,a={ldistThreshold:.05,requireBoundingBox:!o,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requireMatchingBoundingBox:this.userControlledBrowserSettings.bustCacheOnBoundingBoxChange?t.boundingBox:void 0,requirements:t.requirements,additionalElements:t.additionalElements},{css:s,hybrid:c}=await qe({fn:b=>window.evaluatePrimaryCaches(b),arg:{cssParams:{selectors:t.generatedSelectors??[],cachedElementSerialized:t.nodeOnlySerializedHtml,opts:a},hybridParams:i&&t.hybridSelector?{nodes:t.hybridSelector,cachedElementSerialized:t.nodeOnlySerializedHtml,opts:a}:void 0},root:e,timeout:3e3,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"}),l,u,d=[];if(i==="prefer"&&c?.result){l=c.result;let b={type:"HYBRID_SELECTOR",matched:!0,logs:c.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};d.push(b),u="HYBRID_SELECTOR"}else if(s?.result){l=s.result;let b=`${l.workingSelectors.length} CSS selectors matched the following element: ${l.serializedElement}`,E=l.workingSelectors.slice(0,5);d.push({type:"CSS_SELECTOR",matched:!0,logs:s.logs,reason:b,selectors:E}),n.debug({reason:b,workingSelectors:E},"Resolved with CSS selectors"),u="CSS_SELECTOR"}else throw d.push({type:"CSS_SELECTOR",matched:!1,reason:s.logs.length===1?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:s.logs}),c&&d.push({type:"HYBRID_SELECTOR",matched:!1,reason:c.logs.length===1?"Hybrid evaluation failed":"No hybrid selectors matched",logs:c.logs}),new ln("Cache evaluation failed",d);let p,g,m;if(this.userBrowserSettings.visualActions){let b=l.mPath;if(!b)throw new Error("Found element did not have an mPath despite using visual actions");let E=b.join(" > ");p=e.locator(E),g=this.stateManager.getNodeUsingMPathSelector(E)}else if(l.dataMomenticId!==void 0)m=parseInt(l.dataMomenticId),g=this.stateManager.dataMomenticIdToNodeMap[m],"workingSelectors"in l?p=e.locator(l.workingSelectors[0]):p=e.locator(pr(m));else throw new x("InternalWebAgentError","Received an element resolution result with no identifying attributes");i&&t.hybridSelector&&(c?.logs.length===1?n.warn({hybridResult:c,cssResult:s,hybridMode:i},"Hybrid selector resolution rejected, continuing..."):c?.result?s?.result&&c?.result&&c.result.serializedElement!==s.result.serializedElement&&(this.userBrowserSettings.visualActions&&JSON.stringify(s.result.mPath)!==JSON.stringify(c.result.mPath)?n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i,mode:"visualActions"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing..."):s.result.dataMomenticId!==c.result.dataMomenticId&&n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i,mode:"dataMomenticId"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing...")):n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i},"Hybrid selector resolution returned no eligible elements while CSS resolution did, continuing..."));let h=$o(t);await this.updateCacheWithNewNodeDetails({node:g,target:t,locator:p,logger:n,startingBoundingBox:l.boundingBox,allowNotActionableNodesOverride:o});let f=ep(h,t);return f&&Object.keys(f).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=Se(n),t.cacheResolutionUpdateSource=u,n.debug({diffs:f},"Updated cache")),{a11yNode:g,displayString:l.serializedElement,locator:p,decisions:d}}async resolveHardcodedCssSelector(e){let{ctx:t,selector:n,logger:o=this.logger,signal:i=this.abortSignal,timeoutMs:a=this.smartWaitingTimeout}=e,s=await this.getActivePageOrFrame(),c=Date.now(),l=0,u,d=[];for(;Date.now()-c<a;){i?.throwIfAborted(),l++;let p=s.locator(n),g;try{return await p.waitFor({state:"attached",timeout:1e3}),g=await zr(p,o)??"",d.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),t?.details?.push({type:"TARGETING",name:e.targetName,elementLocationDecisions:d,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toISOString()}),{locator:p,displayString:g,decisions:d}}catch(m){let h=m.message;u=new x("ActionFailureError",`CSS selector '${n}' failed to resolve after ${l} attempts: ${h.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":h}`),await Z(500,i)}}throw u}async resolveTargetWithSecondaryMethods(e){if(!e.target.boundingBox)return;let{x:t,y:n,width:o,height:i}=e.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(e);if(!a)return;let s=await a.locator.boundingBox({timeout:3e3});if(!s){this.logger.debug({proposedNode:a.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:c,y:l,width:u,height:d}=s;if(Math.abs(u-o)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:o,newH:d,oldH:i,proposedNode:a.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!t||!n||!c||!l){this.logger.debug({oldX:t,oldY:n,newX:c,newY:l,proposedNode:a.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(c-t)>100||Math.abs(l-n)>100){this.logger.debug({newX:c,newY:l,oldX:t,oldY:n,proposedNode:a.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return a}async resolveTargetWithSecondaryMethodsHelper({root:e,target:t,decisions:n,logger:o,signal:i,allowNotActionableNodesOverride:a}){if(t.nodeOnlySerializedHtml&&t.nodeOnlySerializedHtml.trim().length<10){let l="Refusing to attempt HTML comparison since the saved element is too short.";n.push({type:"HTML_DISTANCE",matched:!1,reason:l})}else if(t.nodeOnlySerializedHtml&&t.nodeOnlySerializedHtml.length>50)try{let l=await qe({fn:d=>window.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:t.nodeOnlySerializedHtml},timeout:2e3,root:e,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"}),u=Math.floor(.05*t.nodeOnlySerializedHtml.length);if(l&&l.closestDistance&&l.closestDistance>=u){let d=`Closest HTML candidate still has too far distance (${l.closestDistance}) from threshold (${u})`;n.push({type:"HTML_DISTANCE",matched:!1,reason:d,distance:l.closestDistance,closestElement:l.closestNodeSerialized})}else{if(l?.error)throw new Error(l.error);if(l?.dataMomenticId||l?.mPathSelector){let d=l.dataMomenticId?parseInt(l.dataMomenticId):void 0,p,g;if(d)p=this.stateManager.dataMomenticIdToNodeMap[d],g=e.locator(pr(d));else if(l.mPathSelector)p=this.stateManager.getNodeUsingMPathSelector(l.mPathSelector),g=e.locator(l.mPathSelector);else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let m=l.closestNodeSerialized??await zr(g,o)??"unknown element";o.warn({result:l,originalTarget:t,displayString:m},"Resolved cached target to new node with pure html levenshtein distance");let h=$o(t);await this.updateCacheWithNewNodeDetails({node:p,target:t,locator:g,logger:o,startingBoundingBox:l.boundingBox,allowNotActionableNodesOverride:a});let f=ep(h,t);return f&&Object.keys(f).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=Se(o),t.cacheResolutionUpdateSource="HTML_DISTANCE",o.info({diffs:f,result:l},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:`Found an element on the page within ${u} string comparison distance of the saved element.`,logs:l.logs,distance:l.closestDistance,closestElement:m,savedElement:t.nodeOnlySerializedHtml}),{locator:g,a11yNode:p,displayString:m,decisions:n,pageState:void 0}}else throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(l)}`)}}catch(l){o.info({err:l},"Failed to find closest HTML node using levenshtein distance"),n.push({type:"HTML_DISTANCE",matched:!1,reason:`Error finding closest HTML node by string distance: ${l}`})}let s=t.screenshotUrl,c=t.role??"";if(s&&Cd.includes(c))try{let l=await this.resolveTargetWithTemplateMatching({root:e,oldTarget:t,screenshotUrl:s,signal:i,allowNotActionableNodesOverride:a});return{...l,decisions:[...n,...l.decisions],pageState:void 0}}catch(l){i?.throwIfAborted(),n.push({type:"TEMPLATE_MATCHING",matched:!1,reason:`Error finding closest element using saved screenshot: ${l}`,elementImageUrl:s}),o.warn({err:l},"Did not find any close element using saved screenshot")}}async resolveTargetWithTemplateMatching({screenshotUrl:e,oldTarget:t,signal:n,allowNotActionableNodesOverride:o}){let i;if(!this.enricher)throw new Error("Enricher not available for screenshot resolution");let a=await this.screenshot({retries:0}),c=await(await fetch(e)).arrayBuffer(),l=kL(),u=await this.enricher.runTemplateMatching({id:l,searchImageBase64String:Buffer.from(c).toString("base64"),pageImageBase64String:a.toString("base64")},{signal:n}),{target:d,locator:p}=await this.getTargetFromPositionPercentages({percentX:u.x,percentY:u.y,allowNotActionableNodesOverride:o}),g=d.boundingBox?.width,m=d.boundingBox?.height;if(!g||!m)throw i="Rejecting target from screenshot due to no bounding box",new Error(i);let h=d.id,f=this.stateManager.a11yIdToNodeMap[h],b=$o(t);await this.updateCacheWithNewNodeDetails({target:t,node:f,locator:p,allowNotActionableNodesOverride:o});let E=ep(b,t);return E&&Object.keys(E).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=Se(this.logger),t.cacheResolutionUpdateSource="TEMPLATE_MATCHING",this.logger.info({id:l,diffs:E,templateMatch:u},"Updated cache after template matching resolution")),{locator:p,a11yNode:f,displayString:d.nodeOnlySerializedHtml??"",decisions:[{type:"TEMPLATE_MATCHING",matched:!0,reason:"Found element using screenshot",elementImageUrl:e}]}}async typeIntoTarget(e,t,n={}){await this.highlight(t.locator);let o=await t.locator.getAttribute("type",{timeout:1e3})??"",i=rb.some(a=>a===o.toLowerCase());return await Bd({targetingResult:t,options:{force:n.force},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks()}),await this.page.waitForTimeout(150),this.directTypeHelper(e,n)}async click(e,t,n={}){return Bd({targetingResult:e,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:t,browserCallbacks:this.getBrowserCallbacks()})}async waitForUrl({beforeUrl:e,matcher:t},n){let o=n?.timeout??this.pageLoadTimeout,i=Date.now(),a=!1,s=e;for(;Date.now()-i<o;){if(this.abortSignal?.throwIfAborted(),s=this.url(),al(s,t,n)){a=!0;break}await Z(500,this.abortSignal)}if(!a)throw new x("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${JS(t)} in ${o}ms.
3951
- Current tab: ${s}`);try{await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"wait-for-url-step"})}catch(c){this.logger.warn({err:c},"Failed waiting for page load after URL change, continuing...")}}async dragAndDrop(e,t,n={}){await this.hover({locator:e}),await this.page.mouse.down();let o=await t.boundingBox({timeout:3e3});if(!o)throw new x("ActionFailureError","Could not get bounding box of target element");let i=o.x+o.width/2,a=o.y+o.height/2,s=n.steps??5;await this.page.mouse.move(i,a,{steps:s}),await Z(n.hoverSeconds?Math.min(n.hoverSeconds*1e3,2e3):500),await this.page.mouse.up()}async mouseDrag(e,t,n,o){o&&await this.hover({locator:o});let i=await(await this.getActivePageOrFrame()).evaluate(Ud);i||(this.logger.warn("Could not get current mouse position before mouse drag action, defaulting to 0,0"),i={left:0,top:0}),await this.page.mouse.down(),await this.page.mouse.move(e+i.left,t+i.top,{steps:n}),await Z(250),await this.page.mouse.up()}async hover(e){await this.highlight(e.locator),await Kn({func:async t=>{await this.scrollIntoViewIfNeeded(t.locator);let n=await t.locator.boundingBox({timeout:3e3});if(!n)throw new Error("Attempted to hover over element with no bounding box");await this.page.mouse.move(n.x+n.width/2,n.y+n.height/2,{steps:3})},action:"hovering over element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,targetingResult:e,callbacks:this.getBrowserCallbacks()})}async focus(e){await this.highlight(e.locator),await Kn({func:t=>t.locator.focus({timeout:2e3}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async blur(e){if(!e){let t=await this.getActivePageOrFrame();await qe({fn:()=>{let n=document.activeElement;n&&n.nodeType===1&&n.blur()},root:t,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:1e3,codePath:"blurring the active element"});return}await this.highlight(e.locator),await Kn({func:t=>t.locator.blur({timeout:2e3}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async selectOption(e,t,n=!1){await this.highlight(e.locator),await Kn({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async o=>{if(t.type==="INDEX"){let i=Number(t.index);if(isNaN(i))throw new x("UserConfigurationError",`Page index ${t.index} is not a number`)}await o.locator.selectOption({value:t.type==="VALUE"?t.value:void 0,label:t.type==="LABEL"?t.label:void 0,index:t.type==="INDEX"?Number(t.index):void 0},{force:n,timeout:3e3})},targetingResult:e})}async press(e,t){let n=t.repeat??1;if(t.convertMeta){let o=pl(e);o!==e&&(this.logger.info({key:e,convertedKey:o},"Converted platform dependent keys"),e=o)}for(let o=0;o<n;o++)await this.page.keyboard.press(e,{delay:t.delayMs??0})}async keyDown(e,t){if(t.convertMeta){let n=pl(e);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of Zd(e))await this.page.keyboard.down(n)}async keyUp(e,t){if(t.convertMeta){let n=pl(e);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of Zd(e))await this.page.keyboard.up(n)}async refresh(e){let t=e?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let n=0,o=2;for(;n<o;){n++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:t});break}catch(i){this.logger.warn({err:i,attempt:n},`Failed to reload page${n<o?", retrying...":", continuing..."}`)}}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"reload-step"}),await this.waitForDOMStability()}async getBrowserState(e){let{maxAttempts:t=2,logger:n=this.logger,skipWaitForPageLoad:o,allowNotActionableNodesOverride:i}=e,a=e.abortSignal??this.abortSignal,s=!i,c=i?!0:this.userControlledBrowserSettings.showZeroOpacityElements;o||await this.waitForPageLoad(),e.skipWait||await this.waitForDOMStability({logger:n,signal:a});let l=0,u;for(;l<t;){l++;try{return await V(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:a,logger:n,filterByViewport:e.filterByViewport,showZeroOpacityElements:c,flagNotActionableNodes:s}),{milliseconds:this.pageLoadTimeout*l,signal:a,message:"Getting browser state took too long"})}catch(d){if(a?.throwIfAborted(),u=d instanceof Error?d.message:`${d}`,l>=t)throw d;n.warn({err:d,url:this.url()},"Error getting a11y tree, retrying...")}}throw new x("ActionFailureError",`Getting page content failed after ${t} attempts. Error: ${u}`)}async getViewportOffsetDetails(e){let[t,n,o,i,a]=await qe({root:e,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:3e3,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return{upperBound:t,lowerBound:t+i,leftBound:n,rightBound:n+o,width:o,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??a}}async waitForDOMStability(e){let{logger:t=this.logger,timeout:n=this.smartWaitingTimeout,signal:o}=e??{},i={value:Date.now()},a=p=>{i.value=Date.now()},s=()=>a("DOM.documentUpdated");this.cdpClient.addListener("DOM.documentUpdated",s);let c=()=>a("Page.frameDetached");this.cdpClient.addListener("Page.frameDetached",()=>c);let l=()=>a("Page.frameStartedLoading");this.cdpClient.addListener("Page.frameStartedLoading",l);let u=()=>a("Page.navigatedWithinDocument");this.cdpClient.addListener("Page.navigatedWithinDocument",u);let d=()=>a("frameRequestedNavListener");this.cdpClient.addListener("Page.frameRequestedNavigation",d);try{await this.waitForDOMStabilityHelper(i,t,n,o)}finally{this.cdpClient.removeListener("DOM.documentUpdated",s),this.cdpClient.removeListener("Page.frameDetached",c),this.cdpClient.removeListener("Page.frameStartedLoading",l),this.cdpClient.removeListener("Page.navigatedWithinDocument",u),this.cdpClient.removeListener("Page.frameRequestedNavigation",d)}}async waitForDOMStabilityHelper(e,t,n,o){let i=!1,a=Date.now(),s,c={quality:25,retries:0,stabilizeBeforeScreenshot:!0},l=!1,u=0;for(;Date.now()-a<n;){if(o?.throwIfAborted(),await Z(250,this.abortSignal),s)try{let d=await this.screenshot(c);if(!d.equals(s)){s=d,l=!1;continue}l=!0}catch(d){u++,u%3===0&&t.warn({err:d,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}else try{s=await this.screenshot(c)}catch(d){u++,u%3===0&&t.warn({err:d,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}if(!(Date.now()-e.value<250)){i=!0;break}}i||t.warn({duration:Date.now()-a,stable:{a11y:i,screenshot:l}},"A11y wait phase completed due to timeout, continuing...")}async clickUsingVisualCoordinates(e,t){let{x:n,y:o}=e;this.logger.debug({x:n,y:o},"Executing mouse click with visual coordinates"),await this.waitForPageLoad(),await this.page.mouse.click(n,o,{button:t.rightClick?"right":"left",clickCount:t.doubleClick?2:1})}async dragAndDropUsingVisualCoordinates(e,t,n){await this.page.mouse.move(e.x,e.y,{steps:3}),await this.page.mouse.down(),await this.page.mouse.move(t.x,t.y,{steps:3}),await Z(n.hoverSeconds?Math.min(n.hoverSeconds*1e3,8e3):500),await this.page.mouse.up()}async hoverUsingVisualCoordinates(e){await this.page.mouse.move(e.x,e.y)}async mouseDragUsingVisualCoordinates(e,t,n,o){await this.hoverUsingVisualCoordinates(o);let i=await(await this.getActivePageOrFrame()).evaluate(Ud);i||(this.logger.warn("Could not get current mouse position before mouse drag action, defaulting to 0,0"),i={left:0,top:0}),await this.page.mouse.down(),await this.page.mouse.move(e+i.left,t+i.top,{steps:n}),await Z(250),await this.page.mouse.up()}async getElementLocation(e){let t=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:!0,includePaintOrder:!0},timeout:3e3}),n=await V(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:2e3});process.platform==="darwin"&&n===1&&(n=2);let o=t.documents[0],i=o.layout,a=o.nodes,s=a.nodeName||[],c=a.backendNodeId||[],l=i.nodeIndex,u=i.bounds,d=-1;for(let E=0;E<s.length;E++)if(c[E]===e){d=l.indexOf(E);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${e}`);let[p=0,g=0,m=0,h=0]=u[d];p/=n,g/=n,m/=n,h/=n;let f=p+m/2,b=g+h/2;return{centerX:f,centerY:b}}async scrollVertical(e){return zd({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:0,directionX:null,deltaY:e?Math.abs(e):null,directionY:e&&e>0?"down":"up",signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})}async scrollHorizontal(e){return zd({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:e?Math.abs(e):null,directionX:e&&e>0?"right":"left",deltaY:0,directionY:null,signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})}async goForward(){await this.waitForPageLoad(),await this.page.goForward({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-forward"})}async goBack(){await this.waitForPageLoad(),await this.page.goBack({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-back"})}async reinitializeCDPClient(e){await this.cdpClient.reinitialize(e),await this.initializeScreencast()}async stopScreencast(){if(this.clientCallbacks?.onScreencastFrame)try{await this.cdpClient.send({method:"Page.stopScreencast",params:{}})}catch{}}async changeActivePage(e,t){await this.stopScreencast(),this.recordUrlVisited(e.url()),this.page=e,await this.reinitializeCDPClient(t??this.pageLoadTimeout)}async createNewTab(e,t){let n=await this.context.newPage();await this.changeActivePage(n,t?.loadTimeoutMs),await this.navigate({url:e,initialNavigation:!0,...t}),this.handleAvailableTabsChange()}async switchToPage(e,t){let n=!0,o,i=Date.now();for(;n||t?.retry&&Date.now()-i<this.smartWaitingTimeout;){n=!1;try{await this.switchToPageHelper(e,t);return}catch(a){this.logger.warn({err:a},"Error switching to page, retrying..."),o=a,await Z(500)}}throw o}async switchToPageHelper(e,t){let n=this.context.pages().map((i,a)=>({page:i,url:i.url(),index:a})),o;if(e.type==="INDEX"){let i=Number(e.index);if(isNaN(i))throw new x("UserConfigurationError",`Page index ${e.index} is not a number`);if(i<0||i>=n.length)throw new Error(`Page index ${e.index} exceeds the number of available pages: ${JSON.stringify(n.map(a=>a.url))}`);o=n[i]}else{let i=n.filter(a=>e.type==="SUBSTRING"?a.url.includes(e.substring):a.url.match(e.pattern));i.length>1&&this.logger.warn(`More than one page matches the page switch criteria: ${JSON.stringify(i.map(a=>a.url))}`),o=i[i.length-1]}if(!o)throw new Error(`Could not find matching page using criteria: ${JSON.stringify(e)}.
3952
- Available pages:${JSON.stringify(n.map(i=>i.url))}`);if(!Wn(o.url,this.logger)){this.logger.error(`Refusing to switch to page with invalid URL: ${o.url}`);return}this.logger.info(`Switching to tab ${o.index} with url ${o.url}`),await this.changeActivePage(o.page,t?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:o.page,signal:this.abortSignal,codePath:"switch-to-tab-step"}),this.handleAvailableTabsChange()}async setCookie(e){let t;return typeof e=="string"?t=xs(e):t=[e],await this.context.addCookies(t),t}async setLocalStorage(e,t){let n;for(let o=0;o<2;o++)try{await this.evaluateFunctionInPage(([i,a])=>{i&&localStorage.setItem(i,a||"")},[e,t],`setting local storage key ${e}`);return}catch(i){n=i}if(n)throw n}async solveCaptcha(){await this.getBrowserState({allowNotActionableNodesOverride:!0});let e;for(let s of Object.values(this.stateManager.a11yIdToNodeMap))if(s.role==="image"&&s.name.toLowerCase().includes("captcha")){if(!s.backendNodeId)continue;e=await this.stateManager.getLocatorFromBackendId(this.page,s.backendNodeId);break}if(!e){let s=await(await this.getActivePageOrFrame()).solveRecaptchas();if(!s.captchas||!s.captchas.length)throw new Error("No captchas found on the page");return}let t=await e.screenshot({type:"jpeg",animations:"allow",caret:"hide",quality:100,timeout:3e3}),n=await fetch("https://api.2captcha.com/createTask",{method:"POST",body:JSON.stringify({clientKey:El,task:{type:"ImageToTextTask",body:t.toString("base64"),case:!0},languagePool:"en"})});if(!n.ok){let s=`Captcha solver API returned error response: ${n.statusText}`;throw this.logger.error({text:await n.text()},s),new Error(s)}let{taskId:o}=await n.json(),i=Date.now(),a="";for(;Date.now()-i<6e4;){await Z(2500);let s=await fetch("https://api.2captcha.com/getTaskResult",{method:"POST",body:JSON.stringify({clientKey:El,taskId:o})});if(!s.ok){let l=`Captcha solution API returned error response: ${s.statusText}`;throw this.logger.error({text:await s.text()},l),new Error(l)}let c=await s.json();if(c.errorId){let l=`Captcha solution API returned error ID ${c.errorId}`;throw this.logger.error(l),new Error(l)}if(c.status==="ready"){a=c.solution.text;break}}if(!a)throw new Error("Captcha solution timed out");return a}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0,{handle:!1}),await this.context.exposeBinding("captureTargetedEvent",({frame:e},t)=>{this.transformer&&Fb({event:t,frame:e,transformer:this.transformer,enricher:this.enricher,lastScreenshotForRecording:this.lastScreenshotForRecording?.toString("base64"),logger:this.logger})},{handle:!1}),await this.context.exposeBinding("captureKeystroke",async(e,t)=>{this.transformer&&this.transformer.recordKeystroke(t)})}async startRecordingCrons(e){if(e.aborted)return;let t,n=(await this.getOpenPages()).map(c=>c.url),o=0,i=!1,a=async()=>{if(e.aborted||o>8){clearTimeout(t);return}i=!0;let c;try{c=(await this.getOpenPages()).map(u=>u.url),o=0}catch(u){this.logger.debug({err:u},"Failed getting new open pages during recording tab switch cron, skipping..."),o++;return}let l=this.url();for(let u=c.length-1;u>=n.length;u--){let d=c[u];Wn(d,this.logger)&&d!==l&&this.logger.info({lastActivePages:n,currentUrl:l,newOpenPages:c},"Auto-following new tab during recording"),await this.switchToPage({type:"INDEX",index:String(u)});break}n=c};t=setInterval(async()=>{if(!i){i=!0;try{await a()}catch(c){this.logger.error({err:c},"Error while checking pages during recording")}finally{i=!1}}},500);let s=async()=>{clearInterval(t)};e.addEventListener("abort",s,{once:!0})}async startRecording(e,t,n){this.logger.debug({isClickToRecord:n},"Starting recording mode in Chrome browser"),await this.startRecordingCrons(e),await this.page.evaluate(i=>{let a=window;a._MOMENTIC_RECORDING_ACTIVE=!0,a._MOMENTIC_CLICK_RECORD_ACTIVE=i},n),this.transformer=t,await this.injectKnowledgeBaseIntoBrowser(this.page);let o=async()=>{this.transformer=void 0,this.lastScreenshotForRecording=void 0;try{await this.page.evaluate(()=>{let i=window;i._MOMENTIC_RECORDING_ACTIVE=!1,i._MOMENTIC_CLICK_RECORD_ACTIVE=!1})}catch{}};e.addEventListener("abort",o,{once:!0})}async getSelectOptions(e){return await e.evaluate(n=>Array.from(n.querySelectorAll("option")).map(i=>({value:i.value,label:i.label})),void 0,{timeout:1e3})}getActivePage(){return this.page}async getActivePageOrFrame(){let e=await this.stateManager.resolveActiveFrameConfig({});return e?(await this.loadFrameAndRecordUrl({root:e.frame,signal:this.abortSignal,codePath:"get-active-frame-locator"}),e.frame):this.page}async loadFrameAndRecordUrl({root:e,signal:t,codePath:n}){let o=this.pageLoadTimeout,i=e.url();if(!i.includes("chrome-error://")){try{await $n({promiseGenerator:async()=>e.waitForLoadState("domcontentloaded",{timeout:o}),signal:t,codePath:`loadFrameAndRecordUrlDomContentLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){let s=a;if(s.name==="AbortError")throw new x("UserInfrastructureError",`The page with URL ${At(i,50)} did not load within the configured timeout (${o}ms): ${s}`);if(!s.message.includes("detached"))throw s}try{await $n({promiseGenerator:async()=>e.waitForLoadState("load",{timeout:o}),signal:t,codePath:`loadFrameAndRecordUrlPageLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){this.logger.warn({err:a,codePath:n,url:i},"Failed waiting for current frame to load, continuing...")}this.recordUrlVisited(e.url())}}async getCondensedHtml(e){let{skipWait:t=!1}=e??{};return t||(await this.waitForPageLoad(),await this.waitForDOMStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let e=await this.getRawCondensedHtml();return xL.html(e,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1})}async getRawCondensedHtml(){let e=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(e,this.logger,this.abortSignal);let{result:t,error:n}=await qe({fn:()=>window.getCondensedHtmlTree(),root:e,arg:void 0,timeout:2e3,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!t)throw new x("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return t}registerDialogHandler(e){let t=async n=>{try{e==="ACCEPT"?await n.accept():await n.dismiss()}catch(o){this.logger.warn({err:o},"Failed to handle dialog")}};this.page.once("dialog",t)}async evaluateFunctionInAllFrames(e,t){return this.stateManager.executeFunctionInAllFrames(e,t)}async evaluateFunctionInPage(e,t,n,o=2e3){let i=await this.getActivePageOrFrame();return qe({root:i,fn:e,arg:t,timeout:o,waitForPageLoad:()=>this.waitForPageLoad(),codePath:n})}async evaluateCodeInPage({code:e,fragment:t,context:n,timeoutMs:o=sn}){let i=Qy(),a={code:e,fragment:t,context:n},{result:s}=await V(this.page.evaluate(i,a),{milliseconds:o,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new x("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${o/1e3} seconds`)},signal:this.abortSignal});return s}async getDomNodeFromPixelPosition(e,t){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:2e3});let n;try{n=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:e,y:t},timeout:1e3})}catch(o){throw this.logger.error({err:o,x:e,y:t},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return n}async getDomNodeFromPositionPercentages(e,{percentX:t,percentY:n}){if(t<0||t>1||n<0||n>1)throw new x("UserConfigurationError","Invalid percent passed to percentage location");let{width:o,height:i,upperBound:a,leftBound:s}=await this.getViewportOffsetDetails(e),c=Math.round(a),l=Math.round(s),u=Math.ceil(o*t),d=Math.ceil(i*n),p=u+l,g=d+c;return this.getDomNodeFromPixelPosition(p,g)}async highlightFromPositionPercentages(e){let t=await this.getActivePageOrFrame(),n;try{n=await this.getDomNodeFromPositionPercentages(t,e)}catch{}return n?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:1e3,params:{highlightConfig:db,backendNodeId:n.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:1e3,method:"Overlay.hideHighlight",params:{backendNodeId:n?.backendNodeId}})}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:1e3})}catch{}}async getTargetFromPositionPercentages(e){let t=await this.getActivePageOrFrame(),n=await this.getDomNodeFromPositionPercentages(t,e);return this.getTargetFromBackendNodeId({root:t,backendNodeId:n.backendNodeId,allowNotActionableNodesOverride:e.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:e,backendNodeId:t,allowNotActionableNodesOverride:n}){let o=this.stateManager.domGraph?.backendIdToNode[t];if(!o)throw new Error("No DOM node was found with the given backend ID");let i=o?.attributes[Br],a=parseInt(i??"");if(!i||isNaN(a))throw new Error("No data-momentic-id was found on the DOM node");let s=e.locator(pr(a)),c;o.bounds.x!==null&&o.bounds.y!==null&&(c={x:o.bounds.x,y:o.bounds.y,width:o.bounds.width??0,height:o.bounds.height??0});let l=await this.fetchHtmlAttributes({locator:s,logger:this.logger,startingBoundingBox:c,allowNotActionableNodesOverride:n}),u={id:-1,dataMomenticId:a,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...l};return this.logger.debug({target:u},"Tied backend ID to HTML node"),{target:u,locator:s}}async performTargetRedirection(e,t,n){try{return await this.scrollIntoViewIfNeeded(e),await V(this.performTargetRedirectionHelper(e,t,n),{milliseconds:3e3})??{locator:e}}catch(o){return t.warn({err:o},"Error performing target redirection, using original element"),{locator:e}}}async performTargetRedirectionHelper(e,t,n){let o=Date.now(),i=await zr(e,t);if(n===void 0&&(n=await e.boundingBox({timeout:3e3})??void 0),!n){t.error(`Attempted to click on element with no bounding box: ${i}`);return}let{x:a,y:s,width:c,height:l}=n,u=this.getViewport();if(a<0||s<0||!u||a+c>u.width||s+l>u.height){t.info("Skipping locator redirection because the element is outside the viewport");return}let d=await this.getActivePageOrFrame(),{dataMomenticId:p,mPathSelector:g,error:m,serializedElement:h,point:f,force:b,logs:E}=await e.evaluate(v=>{let A=window;if(!A.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return A.performTargetRedirection(v)},void 0,{timeout:1e3}),_=Date.now()-o;if(m){t.warn({error:m,serializedElement:h,duration:_,force:b,logs:E},"Got error from target redirection with bounding box");return}else{if(p)return t.info({newDataMomenticId:p,serializedElement:h,duration:_,force:b,logs:E},"Redirected target to new element with bounding box with data-momentic-id"),{locator:d.locator(pr(p)),hints:{clickableXY:f,force:b}};if(g)return t.info({newMPathSelector:g,serializedElement:h,duration:_,force:b,logs:E},"Redirected target to new element with bounding box with mPath"),{locator:d.locator(g),hints:{clickableXY:f,force:b}};if(f)return t.info({point:f,serializedElement:h,duration:_,force:b,logs:E},"Chose specific visible point on original element"),{locator:e,hints:{clickableXY:f,force:b}};if(b)return t.info({serializedElement:h,duration:_,force:b,logs:E},"Forcing click on original element"),{locator:e,hints:{force:b}}}}async fetchHtmlAttributes({locator:e,logger:t=this.logger,startingBoundingBox:n,allowNotActionableNodesOverride:o}){let{hybridSelectorMode:i,showZeroOpacityElements:a}=this.userControlledBrowserSettings,s=await e.evaluate((c,l)=>{let u=window;return u.generateHtmlCacheAttributes?u.generateHtmlCacheAttributes(c,l):{warnings:[],error:"generateHtmlCacheAttributes is not defined"}},{generateHybridSelector:i==="test"||i==="prefer",startingBoundingBox:n,showZeroOpacityElements:o?!0:a},{timeout:2e3});if("error"in s&&s.error)throw s.error.startsWith(Dy)?new Fs(s.error):s.error.startsWith(Uy)?new Bs(s.error):new Error(s.error);return s.warnings.length&&t.warn(s,"Got warnings while generating HTML attributes for target"),s.attributes}async moveMouseFromPositionPercentages(e,t){let n=this.getViewport();if(!n)throw new Error("Cannot move mouse using percentages without viewport");let o=Math.ceil(n.width*e),i=Math.ceil(n.height*t);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseMoved",x:o,y:i,button:"left",clickCount:0}}),{x:o,y:i}}async clickMouseFromPositionPercentages(e,t,n){let o=this.getViewport();if(!o)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(o.width*t),a=Math.ceil(o.height*n);await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:e==="down"?"mousePressed":"mouseReleased",x:i,y:a,button:"left",clickCount:e==="down"?1:0},timeout:1e3})}async scrollFromPositionPercentages(e,t,n,o){let i=this.getViewport();if(!i)throw new Error("Cannot scroll using percentages without viewport");let a=Math.ceil(i.width*e),s=Math.ceil(i.height*t);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseWheel",deltaX:a,deltaY:s,x:n,y:o}}),{deltaX:a,deltaY:s}}canSolveCaptchas(){return!!El}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(e){setTimeout(()=>{try{e.cleanup()}catch(t){this.logger.debug({err:t,filePath:e.filePath},"Failed cleaning up file after upload")}},3e4),await this.setFileChooserHandlerHelper(e)}logToUserConsole(e,t,n,...o){let i=this.context.pages().indexOf(e);i=i===-1?0:i,kd(e,this.debugData,i,{type:t,text:`[MOMENTIC] ${n}`,args:o})}async setFileChooserHandlerHelper({filePath:e,filename:t}){if(!Xn(e)){let c=`File chooser triggered after the source file ${e} has been cleaned up, ignoring...`;this.logger.error(c),this.logToUserConsole(this.page,"error",c);return}let n=t?.trim()||ML(e),o=AL(e),i=PL(e),a=nd[i];this.page.once("filechooser",async c=>{this.logger.info({filePath:e,fileName:n},"File chooser triggered");try{if(!Xn(e))throw new Error(`File chooser triggered after the source file ${e} has been cleaned up, ignoring...`);await c.setFiles({name:n,buffer:o,mimeType:_L.getType(e)||"application/octet-stream"},{timeout:8e3})}catch(l){this.logger.error({err:l},"Error handling file chooser"),this.logToUserConsole(this.page,"error",l.message)}});let s=o.toString("base64");await this.evaluateFunctionInPage(({fileName:c,base64Data:l,mimeType:u})=>{let d=window;d.momenticFileName=c,d.momenticFileBase64=l;let p=atob(l),g=new Array(p.length);for(let h=0;h<p.length;h++)g[h]=p.charCodeAt(h);let m=new Uint8Array(g);d.MomenticFile=class extends Blob{kind="file";name=d.momenticFileName;constructor(){super([m],{type:u})}isSameEntry(h){return h.name===this.name}queryPermission(h){return console.info("[MOMENTIC] MomenticFile.queryPermission called"),Promise.resolve("granted")}remove(){return console.info("[MOMENTIC] MomenticFile.remove called"),Promise.resolve()}async requestPermission(h){return console.info("[MOMENTIC] MomenticFile.requestPermission called"),Promise.resolve("granted")}async getFile(){console.info("[MOMENTIC] MomenticFile.getFile called");let h=new Blob([m]);return new File([h],d.momenticFileName,{type:u})}async createSyncAccessHandle(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}async createWritable(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}},d.showOpenFilePicker=async()=>(console.info("[MOMENTIC] showOpenFilePicker called"),[new d.MomenticFile])},{fileName:n,base64Data:s,mimeType:a},"set-file-chooser-handler",5e3)}getSerializedFormFromA11yId(e){return this.stateManager.a11yIdToNodeMap[e]?.getNodeOnlySerializedForm()}retrieveAndClearDebugData(){this.cdpClient.loadEventLogs.length>0&&(this.cdpClient.loadEventLogs=[]);let t={...this.debugData};return this.debugData={logsPerPage:[],harPages:{},harEntries:{}},t}async copy(e){try{await this.evaluateFunctionInPage(t=>navigator.clipboard.writeText(t),e,"copying text to clipboard")}catch(t){if(t instanceof Error&&t.message.includes("Document is not focused")){await this.evaluateFunctionInPage(()=>{document.activeElement||document.body.focus()},void 0,"focusing on body element before copying to clipboard"),await this.press("Tab",{}),await this.press("Shift+Tab",{}),await this.evaluateFunctionInPage(n=>navigator.clipboard.writeText(n),e,"copying text to clipboard");return}throw t}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:!0})}async registerRequestListener(e){return this.page.waitForResponse(t=>{let n=t.request();return e.matches({url:n.url(),method:n.method()})})}registerRequestRecorder(e,t,n){this.requestRecorders[e]={onRequestStart:(o,i)=>{t.matches({url:i.request.url,method:i.request.method})&&n.onRequestStart(o,i)},onRequestComplete:(o,i)=>{t.matches({url:i.request.url,method:i.request.method})&&n.onRequestComplete(o,i)}}}removeRequestRecorder(e){delete this.requestRecorders[e]}setHeader(e,t,n){this.customHeaders.push({key:e.toLowerCase(),value:t,matcher:n})}registerMock(e,t,n,o){let i=e??Qd();return this.mocks[i]={matcher:t,generateResponse:n,fetchOriginalResponse:o},i}removeMock(e){if(!e){this.mocks={};return}delete this.mocks[e]}static getPossibleCrashReportsDirs(){let e=[];if(bl()==="linux"){let t=Wo();["chromium","google-chrome","chrome-canary"].forEach(n=>{e.push(xr(t,".config",n,"Crash Reports"))})}else if(bl()==="darwin"){let t=Wo();["Chromium","Google","Chrome for Testing"].forEach(n=>{e.push(xr(t,"Library","Application Support",n,"Crashpad"))})}else if(bl()==="win32"){let t=Wo();["Chromium","Google","Google Chrome Canary"].forEach(n=>{e.push(xr(t,"AppData","Local",n,"User Data","CrashPad","reports"))})}return e}static clearCrashReportsDirs(){try{r.getPossibleCrashReportsDirs().forEach(t=>{Xn(t)&&RL(t,{recursive:!0,force:!0})})}catch{}}async setOfflineMode(e){await this.context.setOffline(e)}get smartWaitingTimeout(){return this.userControlledBrowserSettings.smartWaitingTimeoutMs??5e3}get userBrowserSettings(){return $o(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??8e3}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let e=r.getPossibleCrashReportsDirs();for(let t of e)if(!(!Xn(t)||!Gb(t).isDirectory()||!["new","pending","completed"].some(o=>{let i=xr(t,o);return Xn(i)&&Gb(i).isDirectory()&&wL(i).length>0})))return t}};import AD from"fetch-cookie";import{cloneDeep as SA}from"lodash-es";var Tl=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function UL(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 vl(r,e){let t=UL(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var bE="=",Cl=";",mp=",";var EE=8192;var Xo={};JR(Xo,{getKeyPairs:()=>fN,parseKeyPairsIntoRecord:()=>SN,parsePairKeyValue:()=>TE,serializeKeyPairs:()=>hN});Te();var gN=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 hN(r){return r.reduce(function(e,t){var n=""+e+(e!==""?mp:"")+t;return n.length>EE?e:n},"")}function fN(r){return r.getAllEntries().map(function(e){var t=gN(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Cl+o.metadata.toString()),i})}function TE(r){var e=r.split(Cl);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(bE);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=np(e.join(Cl))),{key:o,value:i,metadata:a}}}}}function SN(r){return typeof r!="string"||r.length===0?{}:r.split(mp).map(function(e){return TE(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,t){return e[t.key]=t.value,e},{})}Te();var xl;(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"})(xl||(xl={}));var yN=",",bN=["OTEL_SDK_DISABLED"];function EN(r){return bN.indexOf(r)>-1}var TN=["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 vN(r){return TN.indexOf(r)>-1}var AN=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function wN(r){return AN.indexOf(r)>-1}var gp=1/0,hp=128,RN=128,CN=128,fp={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:Pe.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:gp,OTEL_ATTRIBUTE_COUNT_LIMIT:hp,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:gp,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:hp,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:gp,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:hp,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:RN,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:CN,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:xl.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 xN(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function _N(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 MN(r,e,t,n){n===void 0&&(n=yN);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var PN={ALL:Pe.ALL,VERBOSE:Pe.VERBOSE,DEBUG:Pe.DEBUG,INFO:Pe.INFO,WARN:Pe.WARN,ERROR:Pe.ERROR,NONE:Pe.NONE};function IN(r,e,t){var n=t[r];if(typeof n=="string"){var o=PN[n.toUpperCase()];o!=null&&(e[r]=o)}}function vE(r){var e={};for(var t in fp){var n=t;switch(n){case"OTEL_LOG_LEVEL":IN(n,e,r);break;default:if(EN(n))xN(n,e,r);else if(vN(n))_N(n,e,r);else if(wN(n))MN(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function ct(){var r=vE(process.env);return Object.assign({},fp,r)}function AE(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function _l(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=AE(r.charCodeAt(n)),i=AE(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var wE="1.25.1";var ON="deployment.environment";var LN="process.runtime.name";var NN="service.name";var kN="service.instance.id";var DN="telemetry.sdk.name",UN="telemetry.sdk.language",FN="telemetry.sdk.version";var RE=ON;var CE=LN;var Ml=NN;var xE=kN;var ha=DN,fa=UN,Sa=FN;var BN="nodejs";var _E=BN;var Jo,Pl=(Jo={},Jo[ha]="opentelemetry",Jo[CE]="node",Jo[fa]=_E,Jo[Sa]=wE,Jo);var zN=9,HN=6,GN=Math.pow(10,HN),jN=Math.pow(10,zN);function ME(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*GN);return[t,n]}function PE(r){return r[0]*jN+r[1]}function ya(r){return r[0]*1e6+r[1]/1e3}var Zn;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Zn||(Zn={}));var IE=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 VN=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},$N=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))},OE=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new IE}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,$N([this._that],VN(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 Qt;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(Qt||(Qt={}));var ft;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(ft||(ft={}));var WN=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 jse=function(r){WN(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function LE(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}Te();var er;(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"})(er||(er={}));var NE=function(){function r(){this.kind=er.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 oe;(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"})(oe||(oe={}));var qN=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 KN(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 Sp=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=KN(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=LE(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 yp=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=er.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Sp(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 Sp(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 Sp(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:ft.HISTOGRAM,dataPoints:n.map(function(i){var a=qN(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===oe.GAUGE||e.type===oe.UP_DOWN_COUNTER||e.type===oe.OBSERVABLE_GAUGE||e.type===oe.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}();Te();var bp=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},Ep=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))},Tp=function(){function r(e,t,n,o){e===void 0&&(e=new YN),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 YN=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,Ep([n,this._counts.length-t],bp(this._counts.slice(t)),!1)),o.splice.apply(o,Ep([0,t],bp(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(Ep([],bp(this._counts),!1))},r}();var kE=52,XN=2146435072,JN=1048575,vp=1023,Il=-vp+1,Ol=vp,ba=Math.pow(2,-1022);function Ll(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&XN)>>20;return n-vp}function Nl(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&JN)*Math.pow(2,32);return o+n}function Ea(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function UE(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var ZN=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){ZN(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var BE=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<ba)return this._minNormalLowerBoundaryIndex();var t=Ll(e),n=this._rightShift(Nl(e)-1,kE);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 Ea(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=Il>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return Ol>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var zE=function(){function r(e){this._scale=e,this._scaleFactor=Ea(Math.LOG2E,e),this._inverseFactor=Ea(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=ba)return this._minNormalLowerBoundaryIndex()-1;if(Nl(e)===0){var t=Ll(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 ba;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 Il<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(Ol+1<<this._scale)-1},r}();var HE=-10,GE=20,QN=Array.from({length:31},function(r,e){return e>10?new zE(e-10):new BE(e-10)});function Ap(r){if(r>GE||r<HE)throw new hn("expected scale >= "+HE+" && <= "+GE+", got: "+r);return QN[r+10]}var e0=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},kl=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}(),t0=20,r0=160,wp=2,n0=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=r0),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 Tp),u===void 0&&(u=new Tp),d===void 0&&(d=Ap(t0)),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<wp&&(j.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+wp),this._maxSize=wp)}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=UE(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=Ap(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=kl.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=kl.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 kl(0,-1);var o=t-n;return new kl(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 jE=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=er.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new n0(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:ft.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=e0(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===oe.GAUGE||e.type===oe.UP_DOWN_COUNTER||e.type===oe.OBSERVABLE_GAUGE||e.type===oe.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 o0=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},Rp=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=ME(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var VE=function(){function r(){this.kind=er.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new Rp(e)},r.prototype.merge=function(e,t){var n=ya(t.sampleTime)>=ya(e.sampleTime)?t:e;return new Rp(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=ya(t.sampleTime)>=ya(e.sampleTime)?t:e;return new Rp(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:ft.GAUGE,dataPoints:n.map(function(i){var a=o0(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var i0=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},Ta=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 Cp=function(){function r(e){this.monotonic=e,this.kind=er.SUM}return r.prototype.createAccumulation=function(e){return new Ta(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new Ta(t.startTime,this.monotonic,o,t.reset):new Ta(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 Ta(t.startTime,this.monotonic,o,!0):new Ta(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:ft.SUM,dataPoints:n.map(function(i){var a=i0(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var Qn=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)}}(),Mr=function(){function r(){}return r.Drop=function(){return ZE},r.Sum=function(){return QE},r.LastValue=function(){return eT},r.Histogram=function(){return tT},r.ExponentialHistogram=function(){return a0},r.Default=function(){return s0},r}();var $E=function(r){Qn(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 NE,e}(Mr);var WE=function(r){Qn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case oe.COUNTER:case oe.OBSERVABLE_COUNTER:case oe.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new Cp(!0),e.NON_MONOTONIC_INSTANCE=new Cp(!1),e}(Mr);var qE=function(r){Qn(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 VE,e}(Mr);var KE=function(r){Qn(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 yp([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Mr);var YE=function(r){Qn(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 yp(this._boundaries,this._recordMinMax)},e}(Mr);var XE=function(r){Qn(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 jE(this._maxSize,this._recordMinMax)},e}(Mr);var JE=function(r){Qn(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case oe.COUNTER:case oe.UP_DOWN_COUNTER:case oe.OBSERVABLE_COUNTER:case oe.OBSERVABLE_UP_DOWN_COUNTER:return QE;case oe.GAUGE:case oe.OBSERVABLE_GAUGE:return eT;case oe.HISTOGRAM:return t.advice.explicitBucketBoundaries?new YE(t.advice.explicitBucketBoundaries):tT}return j.warn("Unable to recognize instrument type: "+t.type),ZE},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Mr);var ZE=new $E,QE=new WE,eT=new qE,tT=new KE,a0=new XE,s0=new JE;Te();function Dl(){return"unknown_service:"+process.argv0}var fn=function(){return fn=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},fn.apply(this,arguments)},l0=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())})},c0=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}}},u0=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},xp=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 j.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[Ml]=Dl(),e[fa]=Pl[fa],e[ha]=Pl[ha],e[Sa]=Pl[Sa],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&j.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 l0(this,void 0,void 0,function(){return c0(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=fn(fn({},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=u0(a,2),l=c[0],u=c[1];return fn(fn(fn(fn({},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 eo;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(eo||(eo={}));Te();var d0=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())})},p0=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}}},_p=function(){return Qt.CUMULATIVE},rT=function(r){switch(r){case oe.COUNTER:case oe.OBSERVABLE_COUNTER:case oe.GAUGE:case oe.HISTOGRAM:case oe.OBSERVABLE_GAUGE:return Qt.DELTA;case oe.UP_DOWN_COUNTER:case oe.OBSERVABLE_UP_DOWN_COUNTER:return Qt.CUMULATIVE}},nT=function(r){switch(r){case oe.COUNTER:case oe.HISTOGRAM:return Qt.DELTA;case oe.GAUGE:case oe.UP_DOWN_COUNTER:case oe.OBSERVABLE_UP_DOWN_COUNTER:case oe.OBSERVABLE_COUNTER:case oe.OBSERVABLE_GAUGE:return Qt.CUMULATIVE}};function m0(){var r=ct(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?_p:e==="delta"?rT:e==="lowmemory"?nT:(j.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."),_p)}function g0(r){return r!=null?r===eo.DELTA?rT:r===eo.LOWMEMORY?nT:_p:m0()}function h0(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return Mr.Default()}}var oT=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=h0(t),this._aggregationTemporalitySelector=g0(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return d0(this,void 0,void 0,function(){return p0(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}();Te();Te();var f0=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},iT=1e4,aT=5,sT=1e3,lT=5e3,cT=1.5;function va(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=f0(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):j.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function Mp(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function Pp(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return j.warn("Could not parse export URL: '"+r+"'"),r}}function Ip(r){return typeof r=="number"?r<=0?Op(r,iT):r:S0()}function S0(){var r,e=Number((r=ct().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:ct().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?Op(e,iT):e}function Op(r,e){return j.warn("Timeout must be greater than 0",r),e}function uT(r){var e=[429,502,503,504];return e.includes(r)}function dT(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 pT=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 OE(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=Ip(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:Zn.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:Zn.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:Zn.SUCCESS})}).catch(function(n){t({code:Zn.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{j.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 j.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();Te();import*as Lp from"url";import*as Fl from"http";import*as Bl from"https";import*as mT from"zlib";import{Readable as b0}from"stream";var Sn;(function(r){r.NONE="none",r.GZIP="gzip"})(Sn||(Sn={}));var y0=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)}}(),Zo=function(r){y0(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 Ul=function(){return Ul=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},Ul.apply(this,arguments)};function Np(r,e,t,n,o){var i=r.timeoutMillis,a=new Lp.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 Zo("Request Timeout");o(h)}else s>=14?l.destroy():l.abort()},i),p={hostname:a.hostname,port:a.port,path:a.pathname,method:"POST",headers:Ul({"Content-Type":t},r.headers),agent:r.agent},g=a.protocol==="http:"?Fl.request:Bl.request,m=function(h,f){switch(h===void 0&&(h=aT),f===void 0&&(f=sT),l=g(p,function(E){var _="";E.on("data",function(v){return _+=v}),E.on("aborted",function(){if(u){var v=new Zo("Request Timeout");o(v)}}),E.on("end",function(){if(u===!1)if(E.statusCode&&E.statusCode<299)j.debug("statusCode: "+E.statusCode,_),n(),clearTimeout(d),clearTimeout(c);else if(E.statusCode&&uT(E.statusCode)&&h>0){var v=void 0;f=cT*f,E.headers["retry-after"]?v=dT(E.headers["retry-after"]):v=Math.round(Math.random()*(lT-f)+f),c=setTimeout(function(){m(h-1,f)},v)}else{var A=new Zo(E.statusMessage,E.statusCode,_);o(A),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(E){if(u){var _=new Zo("Request Timeout",E.code);o(_)}else o(E);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var E=new Zo("Request Timeout");o(E)}clearTimeout(d),clearTimeout(c)}),r.compression){case Sn.GZIP:{l.setHeader("Content-Encoding","gzip");var b=E0(e);b.on("error",o).pipe(mT.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};m()}function E0(r){var e=new b0;return e.push(r),e.push(null),e}function kp(r){if(r.httpAgentOptions&&r.keepAlive===!1){j.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new Lp.URL(r.url),t=e.protocol==="http:"?Fl.Agent:Bl.Agent;return new t(Ul({keepAlive:!0},r.httpAgentOptions))}catch(n){j.error("collector exporter failed to create http agent. err: "+n.message);return}}function Dp(r){if(r)return r;var e=ct().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||ct().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Sn.GZIP?Sn.GZIP:Sn.NONE}Te();var T0=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)}}(),zl=function(r){T0(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&&j.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,va(t.headers),Xo.parseKeyPairsIntoRecord(ct().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=kp(t),i.compression=Dp(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){j.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;Np(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}(pT);function hT(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function v0(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function fT(r){var e=hT(r);return v0(e)}function A0(r){var e=hT(r);return e.toString()}var w0=typeof BigInt<"u"?A0:PE;function gT(r){return r}function ST(r){if(r!==void 0)return _l(r)}var R0={encodeHrTime:fT,encodeSpanContext:_l,encodeOptionalSpanContext:ST};function yT(r){var e,t;if(r===void 0)return R0;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?fT:w0,encodeSpanContext:o?gT:_l,encodeOptionalSpanContext:o?gT:ST}}var C0=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 bT(r){return{name:r.name,version:r.version}}function Qo(r){return Object.keys(r).map(function(e){return ET(e,r[e])})}function ET(r,e){return{key:r,value:TT(e)}}function TT(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(TT)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=C0(t,2),o=n[0],i=n[1];return ET(o,i)})}}:{}}function vT(r){return{attributes:Qo(r.attributes),droppedAttributesCount:0}}Te();function wT(r,e){var t=yT(e);return{resource:vT(r.resource),schemaUrl:void 0,scopeMetrics:x0(r.scopeMetrics,t)}}function x0(r,e){return Array.from(r.map(function(t){return{scope:bT(t.scope),metrics:t.metrics.map(function(n){return _0(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function _0(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=O0(r.aggregationTemporality);switch(r.dataPointType){case ft.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:AT(r,e)};break;case ft.GAUGE:t.gauge={dataPoints:AT(r,e)};break;case ft.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:P0(r,e)};break;case ft.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:I0(r,e)};break}return t}function M0(r,e,t){var n={attributes:Qo(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case Nt.INT:n.asInt=r.value;break;case Nt.DOUBLE:n.asDouble=r.value;break}return n}function AT(r,e){return r.dataPoints.map(function(t){return M0(t,r.descriptor.valueType,e)})}function P0(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:Qo(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 I0(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:Qo(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 O0(r){switch(r){case Qt.DELTA:return 1;case Qt.CUMULATIVE:return 2}}function RT(r,e){return{resourceMetrics:r.map(function(t){return wT(t,e)})}}var Up={serializeRequest:function(r){var e=RT(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 CT="0.52.1";var xT=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)}}(),ei=function(){return ei=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},ei.apply(this,arguments)},_T="v1/metrics",L0="http://localhost:4318/"+_T,N0={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+CT},k0=function(r){xT(e,r);function e(t){var n=r.call(this,t,Up,"application/json")||this;return n.headers=ei(ei(ei(ei({},n.headers),N0),Xo.parseKeyPairsIntoRecord(ct().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),va(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:ct().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?Pp(ct().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):ct().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?Mp(ct().OTEL_EXPORTER_OTLP_ENDPOINT,_T):L0},e}(zl),MT=function(r){xT(e,r);function e(t){return r.call(this,new k0(t),t)||this}return e}(oT);var ti;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(ti||(ti={}));var Pr;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Pr||(Pr={}));Te();var D0=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)}}(),PT=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())})},IT=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}}},U0=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},F0=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))},B0=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 OT(r){return r!=null}function Hl(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function LT(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var Fp=function(r){D0(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function yn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new Fp("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function NT(r){return PT(this,void 0,void 0,function(){var e=this;return IT(this,function(t){return[2,Promise.all(r.map(function(n){return PT(e,void 0,void 0,function(){var o,i;return IT(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 kT(r){return r.status==="rejected"}function Bp(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,F0([],U0(e(n)),!1))}),t}function DT(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=B0(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 UT(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 FT(r,e){return r.toLowerCase()===e.toLowerCase()}Te();var tr;(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"})(tr||(tr={}));var zp=function(){function r(){this.kind=tr.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}();Te();var le;(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"})(le||(le={}));function Ir(r,e,t){var n,o,i,a;return H0(r)||j.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:Nt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function BT(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 zT(r,e){return FT(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var z0=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function H0(r){return r.match(z0)!=null}var G0=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 j0(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 Gl=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=j0(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=UT(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 jl=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=tr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Gl(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 Gl(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 Gl(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:Pr.HISTOGRAM,dataPoints:n.map(function(i){var a=G0(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===le.GAUGE||e.type===le.UP_DOWN_COUNTER||e.type===le.OBSERVABLE_GAUGE||e.type===le.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}();Te();var Hp=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},Gp=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))},jp=function(){function r(e,t,n,o){e===void 0&&(e=new V0),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 V0=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,Gp([n,this._counts.length-t],Hp(this._counts.slice(t)),!1)),o.splice.apply(o,Gp([0,t],Hp(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(Gp([],Hp(this._counts),!1))},r}();var HT=52,$0=2146435072,W0=1048575,Vp=1023,Vl=-Vp+1,$l=Vp,Aa=Math.pow(2,-1022);function Wl(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&$0)>>20;return n-Vp}function ql(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&W0)*Math.pow(2,32);return o+n}function wa(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function jT(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var q0=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)}}(),bn=function(r){q0(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var $T=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Aa)return this._minNormalLowerBoundaryIndex();var t=Wl(e),n=this._rightShift(ql(e)-1,HT);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new bn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new bn("overflow: "+e+" is > maximum lower boundary: "+n);return wa(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=Vl>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return $l>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var WT=function(){function r(e){this._scale=e,this._scaleFactor=wa(Math.LOG2E,e),this._inverseFactor=wa(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Aa)return this._minNormalLowerBoundaryIndex()-1;if(ql(e)===0){var t=Wl(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 bn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Aa;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new bn("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 Vl<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return($l+1<<this._scale)-1},r}();var qT=-10,KT=20,K0=Array.from({length:31},function(r,e){return e>10?new WT(e-10):new $T(e-10)});function $p(r){if(r>KT||r<qT)throw new bn("expected scale >= "+qT+" && <= "+KT+", got: "+r);return K0[r+10]}var Y0=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},Kl=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}(),X0=20,J0=160,Wp=2,YT=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=J0),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 jp),u===void 0&&(u=new jp),d===void 0&&(d=$p(X0)),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<Wp&&(j.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+Wp),this._maxSize=Wp)}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=jT(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=$p(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=Kl.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=Kl.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 Kl(0,-1);var o=t-n;return new Kl(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 qp=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=tr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new YT(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:Pr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=Y0(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===le.GAUGE||e.type===le.UP_DOWN_COUNTER||e.type===le.OBSERVABLE_GAUGE||e.type===le.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}();Te();var Z0=op("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function XT(r){return r.setValue(Z0,!0)}Te();function JT(){return function(r){j.error(Q0(r))}}function Q0(r){return typeof r=="string"?r:JSON.stringify(ek(r))}function ek(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 tk=JT();function Yl(r){try{tk(r)}catch{}}var ZT="1.30.1";var rk="process.runtime.name";var nk="service.name";var ok="telemetry.sdk.name",ik="telemetry.sdk.language",ak="telemetry.sdk.version";var QT=rk;var ev=nk;var Ra=ok,Ca=ik,xa=ak;var sk="nodejs";var tv=sk;var ri,to=(ri={},ri[Ra]="opentelemetry",ri[QT]="node",ri[Ca]=tv,ri[xa]=ZT,ri);function _a(r){r.unref()}var gk=9,hk=6,fk=Math.pow(10,hk),que=Math.pow(10,gk);function ro(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*fk);return[t,n]}function ni(r){return r[0]*1e6+r[1]/1e3}var Ma;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(Ma||(Ma={}));Te();function rv(r,e){return new Promise(function(t){Yo.with(XT(Yo.active()),function(){r.export(e,function(n){t(n)})})})}var nv={_export:rv};var Sk=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},Xl=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=ro(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var Kp=function(){function r(){this.kind=tr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new Xl(e)},r.prototype.merge=function(e,t){var n=ni(t.sampleTime)>=ni(e.sampleTime)?t:e;return new Xl(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=ni(t.sampleTime)>=ni(e.sampleTime)?t:e;return new Xl(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Pr.GAUGE,dataPoints:n.map(function(i){var a=Sk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var yk=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},oi=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 Jl=function(){function r(e){this.monotonic=e,this.kind=tr.SUM}return r.prototype.createAccumulation=function(e){return new oi(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new oi(t.startTime,this.monotonic,o,t.reset):new oi(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 oi(t.startTime,this.monotonic,o,!0):new oi(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Pr.SUM,dataPoints:n.map(function(i){var a=yk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var no=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),rr=function(){function r(){}return r.Drop=function(){return uv},r.Sum=function(){return dv},r.LastValue=function(){return pv},r.Histogram=function(){return mv},r.ExponentialHistogram=function(){return bk},r.Default=function(){return Ek},r}();var ov=function(r){no(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new zp,e}(rr);var iv=function(r){no(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case le.COUNTER:case le.OBSERVABLE_COUNTER:case le.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new Jl(!0),e.NON_MONOTONIC_INSTANCE=new Jl(!1),e}(rr);var av=function(r){no(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Kp,e}(rr);var sv=function(r){no(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new jl([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(rr);var Zl=function(r){no(e,r);function e(t,n){n===void 0&&(n=!0);var o=r.call(this)||this;if(o._recordMinMax=n,t==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");t=t.concat(),t=t.sort(function(s,c){return s-c});var i=t.lastIndexOf(-1/0),a=t.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=t.slice(i+1,a),o}return e.prototype.createAggregator=function(t){return new jl(this._boundaries,this._recordMinMax)},e}(rr);var lv=function(r){no(e,r);function e(t,n){t===void 0&&(t=160),n===void 0&&(n=!0);var o=r.call(this)||this;return o._maxSize=t,o._recordMinMax=n,o}return e.prototype.createAggregator=function(t){return new qp(this._maxSize,this._recordMinMax)},e}(rr);var cv=function(r){no(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case le.COUNTER:case le.UP_DOWN_COUNTER:case le.OBSERVABLE_COUNTER:case le.OBSERVABLE_UP_DOWN_COUNTER:return dv;case le.GAUGE:case le.OBSERVABLE_GAUGE:return pv;case le.HISTOGRAM:return t.advice.explicitBucketBoundaries?new Zl(t.advice.explicitBucketBoundaries):mv}return j.warn("Unable to recognize instrument type: "+t.type),uv},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(rr);var uv=new ov,dv=new iv,pv=new av,mv=new sv,bk=new lv,Ek=new cv;var gv=function(r){return rr.Default()},hv=function(r){return ti.CUMULATIVE};var Yp=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())})},Xp=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}}},fv=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},Tk=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))},Sv=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:gv,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:hv,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 Yp(this,void 0,void 0,function(){var t,n,o,i,a,s;return Xp(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(Tk([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],fv(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=fv.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(Bp(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(Bp(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Yp(this,void 0,void 0,function(){return Xp(this,function(t){switch(t.label){case 0:return this._shutdown?(j.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,yn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Yp(this,void 0,void 0,function(){return Xp(this,function(t){switch(t.label){case 0:return this._shutdown?(j.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,yn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();Te();var vk=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)}}(),Ql=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())})},ec=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}}},Ak=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},wk=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))},Jp=function(r){vk(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 Ql(this,void 0,void 0,function(){var t;return ec(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,yn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof Fp?(j.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(Yl(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return Ql(this,void 0,void 0,function(){var o,i,a,s,c,l;return ec(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=j).error.apply(l,wk(["PeriodicExportingMetricReader: metrics collection errors"],Ak(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(),j.debug("Error while resolving async portion of resource: ",s),Yl(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,nv._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==Ma.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),_a(this._interval)},e.prototype.onForceFlush=function(){return Ql(this,void 0,void 0,function(){return ec(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 Ql(this,void 0,void 0,function(){return ec(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}(Sv);Te();Te();function tc(){return"unknown_service:"+process.argv0}var En=function(){return En=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},En.apply(this,arguments)},Rk=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())})},Ck=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}}},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},rc=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 j.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[ev]=tc(),e[Ca]=to[Ca],e[Ra]=to[Ra],e[xa]=to[xa],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&j.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 Rk(this,void 0,void 0,function(){return Ck(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=En(En({},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=xk(a,2),l=c[0],u=c[1];return En(En(En(En({},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 yv=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}();Te();var oo=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)}}(),nc=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=Yo.active()),typeof e!="number"){j.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===Nt.INT&&!Number.isInteger(e)&&(j.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,ro(Date.now()))},r}();var bv=function(r){oo(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}(nc);var Ev=function(r){oo(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){j.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(nc);var Tv=function(r){oo(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}(nc);var vv=function(r){oo(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){j.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(nc);var oc=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 Av=function(r){oo(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(oc);var wv=function(r){oo(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(oc);var Rv=function(r){oo(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(oc);function Pa(r){return r instanceof oc}var Cv=function(){function r(e){this._meterSharedState=e}return r.prototype.createGauge=function(e,t){var n=Ir(e,le.GAUGE,t),o=this._meterSharedState.registerMetricStorage(n);return new Tv(o,n)},r.prototype.createHistogram=function(e,t){var n=Ir(e,le.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new vv(o,n)},r.prototype.createCounter=function(e,t){var n=Ir(e,le.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new Ev(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Ir(e,le.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new bv(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Ir(e,le.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new wv(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableCounter=function(e,t){var n=Ir(e,le.OBSERVABLE_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new Av(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableUpDownCounter=function(e,t){var n=Ir(e,le.OBSERVABLE_UP_DOWN_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new Rv(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 ic=function(){function r(e){this._instrumentDescriptor=e}return r.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},r.prototype.updateDescription=function(e){this._instrumentDescriptor=Ir(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},r}();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)}}(),xv=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}}},Mk=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 xv(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 xv(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 mr=function(r){_k(e,r);function e(){return r.call(this,Hl)||this}return e}(Mk);var Pk=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},ac=function(){function r(e,t){this._aggregator=e,this._activeCollectionStorage=new mr,this._cumulativeMemoStorage=new mr,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(t??2e3)-1,this._overflowHashCode=Hl(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=Pk(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 p=n._activeCollectionStorage.get(a,c);u=n._aggregator.merge(p,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 mr,e},r}();var Zp=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.")},_v=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},sc=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===ti.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=Ik(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=Zp(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 mr,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=Zp(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=_v(a.value,3),c=s[0],l=s[1],u=s[2];if(e.has(c,u)){var d=e.get(c,u),p=n.merge(d,l);o.set(c,p,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=Zp(e.keys()),s=a.next();!s.done;s=a.next()){var c=_v(s.value,2),l=c[0],u=c[1],d=t.get(l,u);d?.setStartTime(n)}}catch(p){o={error:p}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return t},r}();function Ik(r){return Array.from(r.entries())}var Ok=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)}}(),Lk=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},Mv=function(r){Ok(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 ac(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new sc(n,i),s}return e.prototype.record=function(t,n){var o=this,i=new mr;Array.from(t.entries()).forEach(function(a){var s=Lk(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}(ic);Te();function Qp(r,e){var t="";return r.unit!==e.unit&&(t+=" - Unit '"+r.unit+"' does not match '"+e.unit+`'
3944
+ `&&(i=s),r.slice(o,i)}function Er(r){let e=typeof r=="string"?r:r.toString();return`[${Kr}="${e}"]`}import{execSync as E0}from"child_process";import{randomUUID as Np}from"crypto";import{diff as kp}from"deep-object-diff";import{existsSync as Dl,readFileSync as T0,readdirSync as v0,statSync as dT,writeFileSync as A0}from"fs";import{Jimp as pT}from"jimp";import w0 from"js-beautify";import{cloneDeep as ri}from"lodash-es";import R0 from"mime";import{platform as C0}from"os";import{basename as x0,extname as _0,join as M0}from"path";import{v4 as I0}from"uuid";import{rmSync as kE}from"fs";import{basename as _N,join as MN}from"path";import{errors as IN}from"playwright-core";import{devices as BL}from"playwright-core";var nE=2,Xd=8e3;var Zo=250,it=500;var oE=5e3,iE=250,ee=3e3,he=2e3,re=1e3,Jd=3e4,Zd=8e3,aE=10,Qd=.05;var sE=6e4,lE=new Set(["about:blank","chrome-error://chromewebdata/"]);var ep=["button","image","generic","graphics-symbol","tab","link","menuitem","group"],tp=1e4,ya=500,Cl=BL["Desktop Chrome"].userAgent,Qo=process.env.TWO_CAPTCHA_KEY;import{mkdirSync as zL,rmSync as cE,statSync as HL}from"fs";import*as ip from"node:fs";import GL from"nodejs-file-downloader";import{tmpdir as jL}from"os";import En,{basename as VL,dirname as WL}from"path";var ap="file://",op=En.join(jL(),"momentic","downloads"),np=1e4,$L=50*1024*1024;async function uE(r){let{uri:e}=r;if(e.startsWith(ap))return KL(r);if(e.startsWith("http"))return XL(r);if(qS)return YL(r);throw new _("UserConfigurationError","The source URI for the file upload step must be a valid URL or a previously downloaded file beginning with 'file://'")}function qL(r,e){let t=En.join(op,r,e.slice(ap.length)),n=En.join(op,r),o=t.startsWith(n);if(!ip.existsSync(t)||!o)throw new _("UserConfigurationError",`The referenced file (${e}) does not exist. Please make sure that it has been downloaded successfully.`);return t}async function KL({uri:r,orgId:e}){let t=qL(e,r);return{filePath:t,cleanup:()=>{cE(WL(t),{recursive:!0,force:!0})}}}async function YL({uri:r}){let e=En.resolve(r);if(!ip.existsSync(e))throw new _("UserConfigurationError",`The referenced file (${r}) does not exist on disk. Please make sure that it has been downloaded successfully.`);return{filePath:e,cleanup:()=>{}}}async function XL({uri:r,logger:e,orgId:t}){let n=new URL(r);n.search&&(n.search="");let o=VL(n.href),i=lp(o),a=En.extname(i);if(HS.includes(a))throw new Error(`Downloading files with extension ${a} is not allowed.`);let s=sp(t),c,l;for(let m=1;m<=3;m++){let g=new GL({url:r,fileName:i,directory:s,maxAttempts:1,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"},timeout:np});try{let{downloadStatus:f,filePath:E}=await W(g.download(),{milliseconds:np,message:`Download timed out after ${np}ms`});if(f!=="COMPLETE"||!E)throw new Error(`Download ended in non-success status: ${f}`);c=E;break}catch(f){l=f}}if(!c)throw new Error(`Download failed after 3 attempts. Last error: ${l instanceof Error?l.message:l}`);let u=c,p=HL(u).size;if(p>$L)throw new Error("File size exceeds the maximum limit of 50MB");e.info({fileSizeInBytes:p,filePath:u,fileName:i},"Downloaded file to disk");let h;return{filePath:u,cleanup:()=>{clearTimeout(h),h=setTimeout(()=>cE(s,{recursive:!0,force:!0}),10*60*1e3)}}}function dE(r,e){return`${ap}${r}/${e}`}function sp(r){let e=Math.random().toString(36).substring(4),t=En.join(op,r,e);return zL(t,{recursive:!0}),t}function lp(r){let e=En.extname(r),t=En.basename(r,e);return r=(t.length>100?t.slice(t.length-100):t)+e,r=r.trim().replaceAll(" ","_"),r}async function Yr(r,e){try{return await r.evaluate(n=>window.serializeElementOnlyWithText?.(n,{truncateToLength:500}),void 0,{timeout:re})}catch(t){e.debug({err:t},"Failed to get HTML from locator for Playwright error translation");return}}var no=3.1783027;function JL(r){let e=0;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);!(n>=48&&n<=57)&&!(n>=65&&n<=90)&&!(n>=97&&n<=122)&&e++}return e}function Or(r){return Math.ceil(cp(r)/no)}function cp(r){let e=0;if(typeof r=="string"){let t=r;t=t.replaceAll(`
3945
+ `,""),t=t.replaceAll(" ","");let n=JL(t);return t.length-n+no*n}if(typeof r>"u"||r===null)return 0;if(typeof r=="number")return String(r).length;if(Array.isArray(r))return r.forEach(t=>{e+=cp(t)}),e;if(typeof r=="object"){let t=r;return Object.keys(t).forEach(n=>{e+=String(n).length,n==="image_url"?(t[n]??{}).detail==="high"?e+=1105*no:e+=85*no:e+=cp(t[n])}),e}if(typeof r=="boolean")return r?4:5;throw new Error(`Unsupported type passed to token length calculator '${typeof r}': ${r}`)}var xl=class{limit;windowMs;userActions;constructor(e,t){this.limit=e,this.windowMs=t,this.userActions=new Map}_cleanup(e,t="DEFAULT_USER"){let n=Date.now(),o=`${t}:${e}`;if(this.userActions.has(o)){let a=this.userActions.get(o)?.filter(s=>n-s<=this.windowMs)??[];a.length>0?this.userActions.set(o,a):this.userActions.delete(o)}}increment(e,t="DEFAULT_USER"){let n=Date.now(),o=`${t}:${e}`;this._cleanup(t,e),this.userActions.has(o)||this.userActions.set(o,[]);let i=this.userActions.get(o);return i.length>=this.limit?!0:(i.push(n),!1)}};async function pE(r,e){let t=r.evaluate(async()=>{let i=window,a={};try{let s=await indexedDB.databases();for(let c of s){if(!c.name)continue;let l=await i.exportIdbToObject?.(c.name,c.version);l&&(a[c.name]=l)}return[a,void 0]}catch(s){return[void 0,s.message]}}),[n,o]=await W(t,{milliseconds:ee});return o&&e.warn({err:o},"Failed to fetch indexedDB data"),n}async function mE(r,e,t){if(e){t.debug("Importing indexedDB data");try{let n=r.evaluate(async o=>{let i=window;for(let[a,s]of Object.entries(o))await i.importObjectToIdb?.(a,s)},e);await W(n,{milliseconds:ee})}catch(n){t.warn({err:n},"Failed to import indexedDB data")}}}async function hE(r,e){try{let t=r.evaluate(async()=>{window.localStorage.clear(),window.sessionStorage.clear(),await indexedDB.databases().then(n=>{n.forEach(o=>{o.name&&indexedDB.deleteDatabase(o.name)})})});await W(t,{milliseconds:ee})}catch(t){e.debug({err:t},"Failed clearing index db data, continuing...")}}async function gE(r,e,t,n,o){try{await ZL(r,e,t,n)}catch(i){o.error({err:i,tabIndex:e},"Error handling new console log")}}async function ZL(r,e,t,n){let o=n.text();o.length>ya&&(o=o.slice(0,ya)+"...(TRUNCATED)");let i=[];for(let a of n.args())try{let s=await a.jsonValue(),c=JSON.stringify(s);c.length>ya?i.push(c.slice(0,ya)+"...(TRUNCATED)"):(typeof s!="object"||Object.keys(s).length>0)&&i.push(s)}catch{}up(r,t,e,{url:r.url(),location:n.location(),type:n.type(),text:n.text(),args:i})}function up(r,e,t,n){let o=Date.now(),i=e.logsPerPage;if(i.length<=t||i[t]===void 0){i[t]=[];for(let a=0;a<t;a++)i[a]===void 0&&(i[a]=[])}i[t].length>tp&&(i[t]=i[t].slice(Math.floor(tp/2)),i[t]?.push({url:r.url(),timestamp:o,type:"warning",text:"[MOMENTIC] Truncated console logs due to buffer overflow",tabIndex:t})),i[t].push({...n,tabIndex:t,timestamp:o})}async function or({fn:r,codePath:e,logObject:t,signal:n,logger:o}){n?.throwIfAborted();let i=Date.now(),a=await Kd({promiseGenerator:r,signal:n,codePath:e,logger:o}),s=Date.now();return t[e]=s-i,a}import QL from"truncate-json";var eN="[redacted due to size]",fE=5e3,tN=5e3;async function yE(r,e,t){let n=new Date().toISOString();e.harPages||(e.harPages={}),e.harPages[r]={id:r,startedDateTime:n,title:void 0,pageTimings:{}}}async function dp(r,e){let t=e.timing(),n=new URL(e.url()),o=[...n.searchParams.entries()].map(([s,c])=>({name:s,value:c})),i={...await EE(e),url:n.toString(),method:e.method(),queryString:o,postData:await nN(e)};return{pageref:r,_resourceType:e.resourceType(),startedDateTime:new Date().toISOString(),request:i,timings:TE(t).timings}}async function bE(r,e,t){await t.finished();let n={};try{n=await sN(t)}catch{}let o={...await EE(t),status:t.status(),statusText:t.statusText(),content:n,redirectURL:t.headers().location,_mocked:!1};r.response=o;let i;try{i=await e.sizes(),r.request.bodySize=i.requestBodySize,r.request.headersSize=i.requestHeadersSize}catch{}r.response&&i&&(r.response.bodySize=i.responseBodySize,r.response.headersSize=i.responseHeadersSize,r.response.content.size=i.responseBodySize);let a=e.timing();r.startedDateTime=new Date(a.startTime).toISOString();let{timings:s,total:c}=TE(a);r.time=c,r.timings=s}function ba(r,e,t){r.harEntries||(r.harEntries={}),r.harEntries[t]=e}function SE(r){try{return new Date(r).toISOString()}catch{return}}function rN(r){let e={name:"",value:""},t=!0;for(let n of r.split(/; */)){let o=n.indexOf("="),i=o!==-1?n.substring(0,o).trim():n.trim(),a=o!==-1?n.substring(o+1,n.length).trim():"";if(t){t=!1,e.name=Lr(i),e.value=Lr(a);continue}i==="Domain"&&(e.domain=Lr(a)),i==="Expires"&&(e.expires=SE(a)),i==="HttpOnly"&&(e.httpOnly=!0),i==="Max-Age"&&(e.expires=SE(Date.now()+ +a*1e3)),i==="Path"&&(e.path=Lr(a)),i==="Secure"&&(e.secure=!0)}return e}async function EE(r){let e=await r.allHeaders(),t=e.cookie?.split(";").map(rN)??[];return{headers:Object.entries(e).map(([n,o])=>({name:Lr(n),value:Lr(o)})),cookies:t}}async function nN(r){let e=r.postData();if(!e)return;let t=await r.headerValue("content-type"),n={mimeType:t??"application/octet-stream",text:Lr(e),params:[]};if(t==="application/x-www-form-urlencoded"){let o=new URLSearchParams(e.toString());for(let[i,a]of o.entries())n.params.push({name:Lr(i),value:a?Lr(a):void 0})}return n}var oN=["text"],iN=["json","xml","html","javascript"];function aN(r){let[e,t]=r.split("/");return e?oN.includes(e)?!0:t?!!iN.some(n=>t?.includes(n)):!1:!1}async function sN(r){let t=((await r.headerValue("content-type"))?.toLowerCase()??void 0)?.split(";")[0]??void 0,n={mimeType:t,encoding:await r.headerValue("content-encoding")??void 0};return t&&aN(t)&&(n.text=Lr(await r.text())),n}function Lr(r){try{let e=JSON.parse(r),{jsonString:t}=QL(r,tN);return t}catch{return r.length>fE?r.slice(0,fE)+eN:r}}function oo(r){return r<0?0:r}function TE(r){return{timings:{blocked:oo(r.domainLookupStart),dns:oo(r.domainLookupEnd-r.domainLookupStart),connect:oo(r.connectEnd-r.connectStart),send:oo(r.responseStart-r.requestStart),wait:0,receive:oo(r.responseEnd-r.responseStart),ssl:oo(r.connectEnd-r.secureConnectionStart)},total:oo(r.responseEnd)}}function vE(){return async r=>{let{fragment:e,code:t,context:n}=r,{env:o}=n||{},i=Object.getPrototypeOf(async function(){}).constructor;return{result:await Promise.resolve(new i("env",e?`return ${t}`:t)(o))}}}async function Qe({root:r,fn:e,arg:t,timeout:n,waitForPageLoad:o,codePath:i}){return await o(),await W(r.evaluate(e,t),{milliseconds:n,message:`Timed out ${i} after ${n}ms. This indicates that either the page is unresponsive or your machine is severely resource constrained.`})}function pp(){return window.lastCursorPos}import{errors as lN}from"playwright-core";async function io({func:r,action:e,logger:t,callbacks:n,retryTimeoutMs:o,targetingResult:i}){let a=Date.now(),s;for(;Date.now()-a<o;)try{return await r(i)}catch(c){if(c instanceof lN.TimeoutError)t.warn({err:c,rootUrl:(await n.state.getRoot()).url()},`Encountered Playwright error while performing ${e}`),s=await cN(c,i.locator,n,t);else throw c}throw s instanceof _?s:new _("ActionFailureError",`Failed to interact with targeted element. Error: ${s.message}`,{errOptions:{cause:s}})}async function cN(r,e,t,n){return r.message.includes("attempt #")?uN(r,e,t,n):dN(r)}async function uN(r,e,t,n){let o=r.message.split(/- retrying \w+ action, attempt #\d+/).filter(c=>c.length>0);if(!o.length)return n.warn({err:r},"Failed to parse Playwright error message for translation, returning raw message"),r;let i=o.length>2?o[o.length-2]:o[0];i=i.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"").replaceAll(" - ","").trim().replaceAll(`
3946
+ `,";").replace(/\s+/g," ");let a="",s=await Yr(e,n);if(s&&(a=`Target element HTML: ${Mt(s,100,!0)}`),i.includes("element is not enabled"))return new _("ActionFailureError",`The element you attempted to interact with was disabled for the entire timeout duration. Please explicitly wait for the element to be enabled, change the element description to target an interactive element, or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:r}});if(i.includes("intercepts pointer events")){let c="",l=i.match(/<.*?data-momentic-id="(\d+)".*?intercepts pointer events/)?.[1];if(l){let u=(await t.state.getRoot()).locator(Er(l)),d=await Yr(u,n);d&&(c=`Covering element HTML: ${Mt(d,100,!0)}`)}return new _("ActionFailureError",`The element you attempted to interact with was covered by another element such as dropdown, popup, or dialog for the entire timeout duration. Please add a step to hide the covering element or turn on the 'disable stability checks' option. ${a}
3947
+ ${c}`,{errOptions:{cause:r}})}if(i.includes("element is not visible")){let c="The element you attempted to interact with has no bounding box or is explicitly hidden.";try{let l=await e.boundingBox({timeout:ee});l?l.height===0?c="The element you attempted to interact with has zero height.":l.width===0&&(c="The element you attempted to interact with has zero width."):c="The element you attempted to interact with has no bounding box."}catch{}return new _("ActionFailureError",`${c} Please explicitly wait for the element to be visible or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:r}})}return i.includes("element is outside of the viewport")?new _("ActionFailureError",`The element requested was outside of the browser viewport for the entire duration of the action. Please ensure you are not using non-standard zoom settings and the element is visible on the page. ${a}`):r}function dN(r){let e=r.message;if(e.includes("waiting for locator")&&e.includes("data-momentic-id")&&!e.match(/attempting \w+ action/)&&!e.includes("locator.evaluate"))throw new _("ActionFailureError",`Interacting with the element timed out. This is usually caused by the web page itself performing too many CPU-intensive operations or a lack of resources on your machine. Error: ${e}`,{errOptions:{cause:r}});return r}import{existsSync as Ta,mkdirSync as yp,readdirSync as yN,rmSync as CE}from"fs";import{homedir as Ep}from"os";import{join as Xr,resolve as bN}from"path";import{chromium as xE}from"playwright-core";import{addExtra as EN}from"playwright-extra";import TN from"puppeteer-extra-plugin-recaptcha";function AE(r,e){return async(t,n)=>{try{let o=await n.allHeaders();for(let{key:i,value:a,matcher:s}of r)(!s||s.matches({url:n.url(),method:n.method()}))&&(o[i]=a);await t.fallback({headers:o})}catch(o){e.warn({err:o},"Failed to apply custom headers to request, continuing")}}}import{randomUUID as mN}from"crypto";function wE(r,e){for(let t of Object.values(e))if(t.matcher.matches({url:r.url(),method:r.method()}))return t}async function RE(r){let{route:e,mock:t,entry:n,debugData:o,requestId:i,requestRecorders:a,logger:s}=r,c={url:n.request.url,options:{method:n.request.method,headers:n.request.headers.map(h=>[h.name,h.value]),body:n.request.postData?.text}},l;if(t.fetchOriginalResponse){let h=await e.fetch();l={body:await h.text(),options:{status:h.status(),statusText:h.statusText(),headers:Object.entries(await h.headers())}}}let u=await pN(t,c,l),d={};u.headers.forEach((h,m)=>{d[m]=h});let p={body:await u.text(),contentType:u.headers.get("content-type")||"text/plain",headers:d,status:u.status};await e.fulfill(p);try{n.response={status:p.status,statusText:u.statusText,headers:Object.entries(p.headers).map(([h,m])=>({name:h,value:m})),cookies:[],content:{mimeType:p.contentType,text:p.body},_mocked:!0},ba(o,n,i);for(let h of Object.values(a))h.onRequestComplete(i,n)}catch(h){h.message.includes("has been closed")||s.warn({err:h},"Failed to add response to HAR")}}async function pN(r,e,t){try{return await r.generateResponse(e,t)}catch(n){let o=n instanceof Error?n.message:`${n}`;return new Response(o,{status:500,headers:{"Content-Type":"text/plain"}})}}async function mp(r){try{await hN(r)}catch(e){r.logger.warn({err:e},"Error handling intercepted request, continuing...")}}async function hN(r){let{pageId:e,route:t,request:n,debugData:o,logger:i,requestRecorders:a,mocks:s}=r,c=mN(),l=await dp(e,n);try{ba(o,l,c);for(let d of Object.values(a))d.onRequestStart(c,l)}catch(d){i.warn({err:d},"Failed to add request to HAR")}let u=wE(n,s);u?await RE({logger:i,route:t,mock:u,entry:l,debugData:o,requestId:c,requestRecorders:a}):await gN({route:t,request:n,debugData:o,logger:i,requestRecorders:a,entry:l,requestId:c})}async function gN({route:r,request:e,debugData:t,logger:n,requestRecorders:o,entry:i,requestId:a}){await r.continue();try{let s=await e.response();if(!s||!i)return;await bE(i,e,s),ba(t,i,a);for(let c of Object.values(o))c.onRequestComplete(a,i)}catch(s){s.message.includes("has been closed")||n.warn({err:s},"Failed to add response to HAR")}}async function fN(r){let e=r.postData();if(e){if((await r.headerValue("content-type"))?.includes("json"))try{return{json:r.postDataJSON()}}catch{return{}}else if((await r.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}async function SN(r){let e=await r.text();if(e){if((await r.headerValue("content-type"))?.includes("json"))try{return{json:await r.json()}}catch{return{}}else if((await r.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}function _l(r){return{request:{url:r.request.url,method:r.request.method,headers:r.request.headers.reduce((e,t)=>({...e,[t.name]:t.value}),{}),...r.request.postData?r.request.postData.mimeType.includes("json")?{json:JSON.parse(r.request.postData.text)}:{text:r.request.postData.text}:{}},response:r.response?{status:r.response.status,headers:r.response.headers.reduce((e,t)=>({...e,[t.name]:t.value}),{}),...r.response.content?r.response.content.mimeType?.includes("json")&&r.response.content.text?{json:JSON.parse(r.response.content.text)}:{text:r.response.content.text}:{}}:void 0}}async function hp(r){let e=r.request(),t=r.status(),n=r.headers(),o=await SN(r);return{request:{url:e.url(),method:e.method(),headers:e.headers(),...await fN(e)},response:{status:t,headers:n,...o},status:t,headers:n,...o}}var Tn=class{requestMatcher;constructor(e){this.requestMatcher=e}matches(e){let{url:t,method:n}=e;return this.requestMatcher.method&&this.requestMatcher.method.toLowerCase()!==n.toLowerCase()?!1:vl(t,this.requestMatcher.urlMatcher)}};function Ea(r){let e=new URL(r.request().url());return/^127\./.test(e.hostname)||/^192\.168\./.test(e.hostname)||/^10\./.test(e.hostname)||/^172\.(1[6-9]|2\d|3[0-1])\./.test(e.hostname)||e.hostname==="localhost"?r.abort():r.fallback()}import{homedir as gp,platform as fp}from"os";import{join as Sp}from"path";function Ml(){let r=[];if(fp()==="linux"){let e=gp();["chromium","google-chrome","chrome-canary"].forEach(t=>{r.push(Sp(e,".config",t,"Crash Reports"))})}else if(fp()==="darwin"){let e=gp();["Chromium","Google","Chrome for Testing"].forEach(t=>{r.push(Sp(e,"Library","Application Support",t,"Crashpad"))})}else if(fp()==="win32"){let e=gp();["Chromium","Google","Google Chrome Canary"].forEach(t=>{r.push(Sp(e,"AppData","Local",t,"User Data","Crashpad","reports"))})}return r}var bp=Xr(Ep(),"momentic","chromium"),vN=Xr(Ep(),"video"),_E=EN(xE);_E.use(TN({provider:{id:"2captcha",token:Qo},visualFeedback:!0}));var AN=["--enable-crashpad","--crash-on-hang-threads=UI:18,IO:18"],wN=["--disable-dev-shm-usage","--no-first-run","--renderer-process-limit=3","--browser-test","--disable-site-isolation-for-policy","--disable-site-isolation-trials","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--disable-renderer-backgrounding","--autoplay-policy=user-gesture-required","--disable-add-to-shelf","--disable-desktop-notifications","--use-fake-device-for-media-stream","--use-fake-ui-for-media-stream","--enable-logging=stderr","--log-level=2"],RN=["--disable-3d-apis","--disable-gpu","--disable-software-rasterizer","--disable-accelerated-2d-canvas","--disable-accelerated-mjpeg-decode","--disable-accelerated-video-decode","--disable-accelerated-video-encode","--disable-gl-drawing-for-tests","--disable-webgl","--disable-webgl2","--disable-audio-input","--disable-audio-output"];async function ME({baseUrl:r,logger:e,storage:t,enricher:n,userBrowserSettings:o,contextArgs:i,recordVideo:a,iconKnowledgeBase:s,callbacks:c}){process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY="1";let l;switch(o.browserType){case"Google Chrome":l="chrome";break;case"Chrome for Testing":l=void 0;break;case"Chromium":l="chromium";break;default:l="chromium";break}let u=[...wN],d={headless:process.env.MOMENTIC_HEADFUL_BROWSER!=="true",handleSIGTERM:!1,chromiumSandbox:!1,channel:l},p={...i??{},geolocation:i?.geolocation||Uf,locale:i?.locale||kf,timezoneId:i?.timezoneId||Df,colorScheme:i?.colorScheme,httpCredentials:o.basicAuthorization?{username:o.basicAuthorization.username??"",password:o.basicAuthorization.password??""}:void 0,javaScriptEnabled:o.disableJavaScript?!1:void 0,ignoreHTTPSErrors:o.ignoreHttpsErrors??!1,userAgent:o.userAgent??Cl,viewport:i?.viewport??pn,serviceWorkers:"block"};o.initialLocalStorage&&(p.storageState={cookies:[],origins:Object.entries(o.initialLocalStorage).map(([S,R])=>({origin:S,localStorage:Object.entries(R).map(([A,v])=>({name:A,value:v}))}))}),process.env.MOMENTIC_CHROME_EXTRA_ARGS&&u.push(...process.env.MOMENTIC_CHROME_EXTRA_ARGS.split(","));let h=null,m,g,f={systemDevicePixelRatio:i?.deviceScaleFactor,recordVideo:a,isNewHeadless:!1};(l==="chrome"||l==="chromium")&&(f.isNewHeadless=!0,d.headless&&u.push("--headless=new")),process.env.BROWSER_MEMORY_MB&&u.push(`--js-flags=--max_old_space_size=${process.env.BROWSER_MEMORY_MB}`);try{let S=Ml();S.forEach(R=>{if(!Ta(R))return;["new","pending","completed"].forEach(v=>{let P=Xr(R,v);if(!Ta(P))return;let C=yN(P);for(let w=0;w<C.length;w++){let B=Xr(P,C[w]);CE(B,{force:!0})}})}),S.forEach(R=>{Ta(R)||yp(R,{recursive:!0});let A=Xr(R,`write-test-${Date.now()}`);yp(A,{recursive:!0}),CE(A,{recursive:!0,force:!0})}),u.push(...AN)}catch(S){e.warn({err:S},"Could not create Chrome crash report directory, not enabling crashpad")}o.disableGpu&&u.push(...RN);let E=o.localChromeExtensionPaths?.map(S=>S.startsWith("~")?Xr(Ep(),S.slice(1)):S);if(E?.length){if(l===void 0)throw new _("UserConfigurationError","Chrome extensions are only supported on Chromium and Google Chrome.");for(let v of E){let P=Xr(v,"manifest.json");if(!Ta(P))throw new _("UserConfigurationError",`Chrome extension path ${P} does not exist.`)}if(yn)throw new _("UserConfigurationError","Cannot use persistent browser context on Momentic Cloud");let S=Xr(bp,`momentic-session-${Date.now()}`);if(!Ta(S))try{yp(S,{recursive:!0})}catch(v){throw new _("UserConfigurationError",`Failed to create browser cache directory. Please make sure you have sufficient permissions to create the ${bp} folder: ${v}`)}let R=[...u],A=E.map(v=>bN(v)).join(",");R.push(`--disable-extensions-except=${A}`),p?.deviceScaleFactor&&R.push(`--force-device-scale-factor=${p.deviceScaleFactor}`,`--device-scale-factor=${p.deviceScaleFactor}`),p.viewport&&R.push(`--window-size=${p.viewport.width},${p.viewport.height}`),m=await xE.launchPersistentContext(Xr(bp,`momentic-session-${Date.now()}`),{...d,...p,ignoreDefaultArgs:["--disable-extensions","--disable-component-extensions-with-background-pages"],args:R,baseURL:r}),e.info({sharedContextOptions:p,sharedBrowserOptions:d,userBrowserSettings:o,chromeArgs:R,properties:f,baseUrl:r},"Browser initialization context args (persistent)"),g=m.pages()[0]}else{h=await _E.launch({...d,args:u});let S={...p,baseURL:r,recordVideo:a?{dir:vN}:void 0};m=await h.newContext(S),e.info({contextArgs:S,sharedBrowserOptions:d,chromeArgs:u,userBrowserSettings:o,properties:f,baseUrl:r},"Browser initialization context args (standard)"),g=await m.newPage()}return yn&&await m.route("**",Ea),{browser:h,context:m,page:g,baseUrl:r,logger:e,storage:t,enricher:n,userBrowserSettings:o,viewport:p.viewport||pn,properties:f,clientCallbacks:c,iconKnowledgeBase:s}}async function IE(r){try{return await CN(r)}catch(e){r.logger.warn({err:e},"Failed to transform locator for Chakra click, continuing...");return}}async function CN({locator:r,logger:e}){let[t,n]=await r.evaluate(c=>[c.id,c.tagName.toLowerCase()],{timeout:re}),o=await Yr(r,e),i=await r.boundingBox({timeout:re});if(i===null){e.warn({elementDisplayString:o},"Attempting to click on element with no bounding box, not performing Chakra redirection");return}if(i.width>5||i.height>5||n!=="input")return;if(t)try{let c=r.page().locator(`label[for=${JSON.stringify(t)}]`);return await c.waitFor({state:"visible",timeout:re}),{locator:c,relativePoint:void 0}}catch{}let a=await r.evaluate(c=>{let l=window,u=c.parentElement;if(!u)return{type:"error",error:"Input click target has no parent for redirection"};let d=c.getBoundingClientRect(),p=u.getBoundingClientRect();if(p.width===0||p.height===0)return{type:"error",error:"Parent element has no width or height"};let h={x:Math.min(Math.max(1,d.left-p.left),p.width-1),y:Math.min(Math.max(1,d.top-p.top),p.height-1)},m=l._MOMENTIC_FEATURE_FLAGS?.[Rl],g=c.getAttribute(Kr),f=!m&&g?Er(g):l.getMPath?.(c)?.join(" >");return f?{type:"result",selector:f,relativePoint:h,serializedForm:u.outerHTML.slice(0,500)}:{type:"error",error:"Could not generate selector for parent element"}},{timeout:re});if(a.type==="error")throw new Error(a.error);let s=r.page().locator(a.selector);return await s.waitFor({state:"visible",timeout:re}),e.info({parentElementResult:a,originalElementDisplayString:o},`Redirected click to parent element with selector: ${a.selector}`),{locator:s,relativePoint:a.relativePoint}}var OE=["date","datetime-local","month","time","week"],PE={date:/^\d{4}-\d{2}-\d{2}$/,"datetime-local":/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,month:/^\d{4}-\d{2}$/,time:/^\d{2}:\d{2}$/,week:/^\d{4}-W\d{2}$/};async function LE(r){try{await W(xN(r),{milliseconds:ee})}catch(e){r.logger.warn({err:e},"Failed to transform native datetime input, continuing...")}}async function xN({root:r,text:e,options:t,logger:n,callbacks:o}){let i=(await Qe({root:r,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:re,arg:void 0,waitForPageLoad:o.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!PE[i])return;PE[i].test(e)&&n.warn(`Detected datetime input (${e}) in normalized format - this may fail to fill correctly as it is not how the user would input the value`),t.clearContent=!1,n.info("Transforming datetime input to use sequential key presses")}import{z as Ut}from"zod";var NE=Ut.object({doubleClick:Ut.boolean().optional(),rightClick:Ut.boolean().optional(),force:Ut.boolean().optional(),waitForDownload:Ut.boolean().optional(),delayMs:Ut.number().optional(),downloadTimeoutMs:Ut.number().optional(),relativePosition:Ut.object({x:Ut.number(),y:Ut.number()}).optional()}),fse=Ut.object({repeat:Ut.number().optional(),convertMeta:Ut.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:Ut.number().optional()});async function Il({locator:r,callbacks:e,logger:t,timeoutMs:n=re}){try{await Tp(e,n);let o=r.evaluate(i=>{let a=window;a.momenticIsEligible=d=>{let h=window.getComputedStyle(d,null).getPropertyValue("display");if(h==="none"||h==="contents")return!1;let m=d.getBoundingClientRect();return!(!m.height||!m.width)},a.removeHighlightTimers=a.removeHighlightTimers||[],a.removeHighlightFunctions=a.removeHighlightFunctions||{};let s=0;for(;!a.momenticIsEligible(i)&&s<3;){if(!i.parentElement)throw new Error("No eligible non-empty parent found for highlighting");i=i.parentElement,s++}let c=i.style.getPropertyValue("outline"),l=i.style.getPropertyPriority("outline");i.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let u=`momentic${Math.floor(Math.random()*1e7)}`;a[u]=()=>{i.style.removeProperty("outline"),i.style.setProperty("outline",c,l),i.getAttribute("style")||i.removeAttribute("style")},a.removeHighlightTimers.push(setTimeout(()=>{a[u](),a.removeHighlightFunctions?.[u]&&delete a.removeHighlightFunctions[u]},5e3)),a.removeHighlightFunctions[u]=a[u]},void 0,{timeout:n});return await W(o,{milliseconds:n}),!0}catch(o){return t.debug({err:o},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1}}async function Tp(r,e=re){let t=await r.state.getRoot();await Qe({root:t,fn:()=>{let o=window,i=o.removeHighlightTimers||[];for(;i.length;){let a=i.pop();clearTimeout(a)}Object.values(o.removeHighlightFunctions??{}).forEach(a=>{a()})},timeout:e,arg:void 0,waitForPageLoad:r.waitForPageLoad,codePath:"removing element highlights"})}async function vp(r){let e=!!r.browserCallbacks.state.userBrowserSettings.visualActions;return io({action:"clicking element",targetingResult:r.targetingResult,logger:r.logger,retryTimeoutMs:r.retryTimeoutMs,callbacks:r.browserCallbacks,func:async t=>DE({...r,targetingResult:t,useVisualClick:e})})}async function PN(r,e){let{redirectionAttempts:t=0}=e;if(t>=2)throw r;try{return await ON(r,e)}catch(n){throw e.redirectionAttempts===0?(e.logger.error({redirectionAttemptError:n,originalError:r},"Error handling click error, rethrowing original error"),r):n}}async function ON(r,e){let{logger:t,redirectionAttempts:n=0}=e,o=e.targetingResult.locator;if(r.message.includes("label")&&r.message.includes("for=")&&r.message.includes("intercepts pointer events")){let i=await o.getAttribute("id",{timeout:re});if(!i)throw r;let a=o.page().locator(`[for=${JSON.stringify(i)}]`);return await a.waitFor({state:"visible",timeout:re}),t.warn({err:r},"Attempting locator redirection due to input being covered by label"),DE({...e,targetingResult:{locator:a},redirectionAttempts:n+1})}else throw t.error({err:r},"Click error does not match any known recoverable patterns, rethrowing"),r}async function LN(r){let{browserCallbacks:e,logger:t,targetingResult:n,position:o,options:i}=r,a=NE.safeParse(i),s=await e.state.getRoot(),c=s&&s!==n.locator.page()&&"frameElement"in s?await s.frameElement():null,l;try{l=c?await to({promiseGenerator:async()=>c.boundingBox(),timeoutMs:ee,logger:t}):null}catch(m){throw new _("UserInfrastructureError",`The frame containing the element Momentic was instructed to interact with was removed. Error: ${m.message}`)}finally{await c?.dispose()}let u=Date.now(),{clickX:d,clickY:p,reason:h}=await DN({frameCoordinates:l,logger:t,targetingResult:n,position:o,options:i});return t.info({frameCoordinates:l,position:o,options:a.success?a.data:void 0,clickLocation:{clickX:d,clickY:p,reason:h},duration:Date.now()-u},"Visual click"),{x:d,y:p}}async function NN(r){let{actionSource:e,targetingResult:t,options:n,logger:o}=r,i=r.targetingResult.locator,a=n?.relativePosition??r.position;if(e==="click"&&!a){let l=await IE({locator:i,logger:o});l&&(i=l.locator,a=l.relativePoint??a)}let s=n?.force||t.hints?.force||!1,c=i.toString();try{o.info({locator:c},"Locator click"),n?.doubleClick?await i.dblclick({button:n.rightClick?"right":"left",timeout:ee,position:a,delay:n?.delayMs??25,force:s}):await i.click({button:n?.rightClick?"right":"left",timeout:ee,position:a,delay:n?.delayMs??25,force:s})}catch(l){let u=l;if(FN(u))o.warn({err:u},"Click action timed out while waiting for navigation after completion, continuing...");else return o.error({err:u},"Error clicking on locator, attempting to recover..."),PN(u,{...r,targetingResult:{...i,locator:i}})}return{locatorSource:c}}async function DE(r){let{options:e,logger:t,browserCallbacks:n,controllerCallbacks:o,useVisualClick:i,targetingResult:a}=r,s;e?.waitForDownload&&(s=(async()=>{let u=e.downloadTimeoutMs??Jd;try{return await a.locator.page().waitForEvent("download",{timeout:u})}catch(d){return d instanceof IN.TimeoutError?new _("ActionFailureError",`Download did not complete in ${u}ms`):new _("ActionFailureError",`Download failed: ${d.message}`)}})());try{await Il({locator:a.locator,callbacks:n,logger:t,timeoutMs:re})}catch(u){t.warn({err:u},"Error highlighting locator in click, continuing...")}let c,l;if(i?c=await LN(r):l=(await NN(r)).locatorSource,e?.waitForDownload)if(s){if(!o?.createIsolatedFolder)throw new _("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");t.info("Waiting for download to start and complete");let u=await W(s,{milliseconds:e.downloadTimeoutMs??Jd});if(u instanceof Error)throw u;return{downloadedFile:await UN(u,o.createIsolatedFolder,t),coordinates:c,locatorSource:l}}else throw new Error("No download promise or error but the step requested to wait for a download");return{coordinates:c,locatorSource:l}}async function kN(r,e){if(e.hints?.clickableXY){let i=(r?.x??0)+e.hints.clickableXY.x,a=(r?.y??0)+e.hints.clickableXY.y;return[{x:i,y:a},"targeting hint"]}let t=await e.locator.boundingBox({timeout:ee});if(!t)throw new _("ActionFailureError","Element does not have a bounding box");let n=t.x+t.width/2,o=t.y+t.height/2;return[{x:n,y:o},"halfway point"]}async function DN({frameCoordinates:r,logger:e,options:t,targetingResult:n,position:o}){let i,a,s;if(t?.relativePosition){let d=await n.locator.boundingBox({timeout:ee}),p=t.relativePosition.x,h=t.relativePosition.y;d?.width&&(p=Math.max(0,Math.min(t.relativePosition.x,d.width))),d?.height&&(h=Math.max(0,Math.min(t.relativePosition.y,d.height))),i=(d?.x??0)+p,a=(d?.y??0)+h,s="relative position from user"}else if(o){let d=await n.locator.boundingBox({timeout:ee});i=(d?.x??0)+o.x,a=(d?.y??0)+o.y,s="predefined position"}else{let[d,p]=await kN(r,n);i=d.x,a=d.y,s=p}let c=n.locator.page(),l=t?.rightClick?"right":"left",u=t?.delayMs??25;return t?.doubleClick?await c.mouse.dblclick(i,a,{button:l,delay:u}):await c.mouse.click(i,a,{button:l,delay:u}),{clickX:i,clickY:a,reason:s}}async function UN(r,e,t){t.info("Download detected, saving file to disk");let n=await r.path(),o=lp(r.suggestedFilename()),i=e();await r.saveAs(MN(i,o)),kE(n,{force:!0}),setTimeout(()=>{kE(i,{recursive:!0,force:!0})},5*60*1e3);let a=dE(_N(i),o);return t.info({uri:a,downloadFolder:i},"Saved download to isolated folder"),a}function FN(r){return r.message.includes("locator.click: Timeout")&&r.message.includes("click action done")}import{platform as BN}from"os";var zN={goToNextWord:{win32:"Control+ArrowRight",darwin:"Alt+ArrowRight",linux:"Control+ArrowRight"},goToPreviousWord:{win32:"Control+ArrowLeft",darwin:"Alt+ArrowLeft",linux:"Control+ArrowLeft"},selectNextWord:{win32:"Control+Shift+ArrowRight",darwin:"Alt+Shift+ArrowRight",linux:"Control+Shift+ArrowRight"},selectPreviousWord:{win32:"Control+Shift+ArrowLeft",darwin:"Alt+Shift+ArrowLeft",linux:"Control+Shift+ArrowLeft"},selectToStartOfLine:{win32:"Shift+Home",darwin:"Meta+Shift+LeftArrow",linux:"Shift+Home"},selectToEndOfLine:{win32:"Shift+End",darwin:"Meta+Shift+RightArrow",linux:"Shift+End"},deleteNextWord:{win32:"Control+Delete",darwin:"Alt+Fn+Delete",linux:"Control+Delete"},deletePreviousWord:{win32:"Control+Backspace",darwin:"Alt+Delete",linux:"Control+Backspace"}};function HN(){let r=BN();return r==="win32"?"win32":r==="darwin"?"darwin":"linux"}function UE(r){return JSON.stringify(r.split("+").sort())}function Pl(r){let e=HN(),t=UE(r);for(let n of Object.values(zN))if(Object.values(n).some(o=>UE(o)===t))return n[e];return process.platform==="darwin"?r=r.replaceAll("Control","Meta"):r=r.replaceAll("Meta","Control"),r}async function Ap({frame:r,page:e,deltaX:t,directionX:n,deltaY:o,directionY:i,signal:a,callbacks:s,logger:c}){if(!t&&!o)return;let l=n==="left"?-1:1,u=i==="up"?-1:1;if(r)await Qe({root:r,fn:([d,p,h,m])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*h,window.scrollY+(p??window.innerHeight)*m),arg:[t,o,l,u],waitForPageLoad:s.waitForPageLoad,timeout:he,codePath:"scrolling page"});else{let d=e.viewportSize()||pn,p=await Qe({root:e,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:he,codePath:"computing page height"}),[h,m,g]=await Qe({root:e,fn:()=>{let f=document.activeElement;if(!f)return[void 0,void 0,void 0];let E=f.getBoundingClientRect();return[f.scrollTop,E.x,E.y]},arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:he,codePath:"computing active element position"});await e.mouse.wheel((t??d.width)*l,(o??d.height)*u);try{let f=Date.now();for(;Date.now()-f<he;){a?.throwIfAborted();let E=await W(e.evaluate(()=>document.body.scrollHeight),{milliseconds:re}),[S,R,A]=await W(e.evaluate(()=>{let v=document.activeElement;if(!v)return[void 0,void 0,void 0];let P=v.getBoundingClientRect();return[v.scrollTop,P.x,P.y]}),{milliseconds:re});if(E===p&&S===h&&R===m&&A===g)break;p=E,h=S,m=R,g=A,await te(it)}}catch(f){c.warn({err:f},"Failed to wait for scroll to complete, continuing...")}}}async function wp(r,e){let t,n;for(let o=0;o<4;o++)try{return t=r.pages(),await Promise.all(t.map(async i=>{let a="";try{a=e?.getTitles?await i.title():""}catch{a="Unknown page"}return{title:a,url:i.url()}}))}catch(i){n=i,await te(it)}throw new Error(`Failed to get tab titles after all retries: ${n?.message}`)}import{randomUUID as YN}from"crypto";import{cloneDeep as xp}from"lodash-es";function vn(r,e){let t=r.findIndex(n=>n===e);if(!(t===-1||!r[t+1]))return r[t+1]}import{createHash as GN}from"crypto";var jN="v1";function Rp(r,e){if(r.tagName.toLowerCase()==="svg"&&!WN(r))try{let t=FE(r,e),n=VN(JSON.stringify(t));return{version:jN,json:t,hash:n}}catch{return}}function VN(r){return GN("md5").update(r).digest("hex")}function FE(r,e){let t=r.tagName.toLowerCase(),n=$N(r);if(t==="image"&&n["xlink:href"])throw new Error("Image tags within SVGs are not supported");let o={type:t,props:n,children:[]};for(let i of r.childrenBackendIds){let a=e.backendIdToNode[i];if(a&&a.nodeType===1){let s=FE(a,e);s&&o.children.push(s)}}return o}function WN(r){let e=r.computedStyles.display,t=r.computedStyles.visibility,n=r.computedStyles.opacity;return e==="none"||t==="hidden"||n==="0"}function $N(r){let e={},t=r.attributes;for(let n of Object.keys(t))nr.visualAttributesForSvgSerialization.includes(n)&&(e[n]=t[n]);return t.id&&r.tagName.toLowerCase()!=="svg"&&(e.id=t.id),e}var ao={r:147,g:196,b:125,a:.55},zE={showRulers:!1,showStyles:!1,showExtensionLines:!1,contrastAlgorithm:"aa",contentColor:ao,paddingColor:ao,borderColor:ao,marginColor:ao,eventTargetColor:ao,shapeColor:ao,shapeMarginColor:ao,showInfo:!0,showAccessibilityInfo:!0};function HE({snapshot:r,devicePixelRatio:e,computedStylesToFetch:t,logger:n}){let o=r.strings,i=r.documents,a={},s={},c={roots:[],backendIdToNode:a,frameIndexToIframeNode:s};return i.forEach((l,u)=>{let d=qN({allDocuments:i,stringConstants:o,computedStylesToFetch:t,devicePixelRatio:e,frameIndex:u,backendIdToNode:a,frameIndexToIframeNode:s,logger:n});c.roots.push(d)}),c}function qN({allDocuments:r,stringConstants:e,computedStylesToFetch:t,devicePixelRatio:n,frameIndex:o,frameIndexToIframeNode:i,backendIdToNode:a,logger:s}){let c=r[o],l=c.layout,u={};l.nodeIndex.forEach((C,w)=>{u[C]=w});let d=l.styles,p=l.bounds??[],h=c.nodes,m=h.contentDocumentIndex??{index:[],value:[]},g=h.backendNodeId??[],f=h.attributes??[],E=h.parentIndex??[],S=h.nodeName??[],R=h.nodeType??[],A=h.pseudoType??{index:[],value:[]},v=h.inputChecked??{index:[]},P=e[c.frameId];for(let C=0;C<g.length;C++){let w=g[C],B=R[C],U=f[C]??[],D=E[C]!==void 0&&E[C]>=0?E[C]:void 0,J=D!==void 0?g[D]:void 0,Le=J!==void 0?a[J]:void 0,K=A.index.indexOf(C),G=K!==-1?e[A.value[K]]:void 0,se=u[C],ce;se?ce=p[se]??[]:ce=[];let ke=S[C]!==void 0?e[S[C]]?.toLowerCase():void 0;if(!ke){s.warn({backendNodeId:w,frameId:P,frameIndex:o,nodeBounds:ce},"DOM node has no tag name");continue}let ge={backendNodeId:w,psuedoType:G,nodeType:B,frameIndex:o,parentFrameId:P,ownedFrameId:void 0,bounds:{x:ce[0]??null,y:ce[1]??null,width:ce[2]??null,height:ce[3]??null},computedStyles:{},attributes:{},parentBackendNodeId:J??null,tagName:ke,parent:Le??void 0,childrenBackendIds:[],momenticIgnored:void 0,mPathSelector:void 0};Le&&Le.childrenBackendIds.push(w);let pt=m.index.indexOf(C);if(pt!==-1){let we=m.value[pt];i[we]=ge;let et=r[we]?.frameId;ge.ownedFrameId=et!==void 0?e[et]:void 0}for(let we of Object.keys(ge.bounds)){let et=we;ge.bounds[et]!==null&&(ge.bounds[et]/=n)}let Wt=se!==void 0?d[se]??[]:[];for(let we=0;we<Wt.length&&!(we>=t.length);we++){let et=Wt[we];if(et===void 0||isNaN(et))continue;let $t=e[et];if($t===void 0)continue;let xo=t[we];ge.computedStyles[xo]=$t}for(let we=0;we<U.length;we+=2){let et=U[we],$t=U[we+1];if(!et||!$t)continue;let xo=e[et],kn=e[$t];!xo||!kn||(ge.attributes[xo]=kn)}v.index.includes(C)&&(ge.attributes.checked="true"),a[ge.backendNodeId]=ge}return a[g[0]]}function Cp(r,e){if(r.mPathSelector)return r.mPathSelector;let t=r.parent,n;if(!t)n=r.tagName;else if(r.tagName==="body")n="body";else{let i=t.childrenBackendIds.filter(c=>e.backendIdToNode[c]?.nodeType===1&&!e.backendIdToNode[c]?.psuedoType).indexOf(r.backendNodeId),a=` > ${r.tagName}:nth-child(${i+1})`;n=`${Cp(t,e)}${a}`}return r.mPathSelector=n,n}function BE(r,e){return r.parentBackendNodeId!==null?e.backendIdToNode[r.parentBackendNodeId]:r.frameIndex===0?void 0:e.frameIndexToIframeNode[r.frameIndex]}var KN=["html","#document","#document-fragment"];function GE({node:r,domGraph:e}){let t=[],n=r,o=BE(r,e);if(!o)return[r.tagName];let i=()=>{if(n=o,o=BE(o,e),!o&&n.frameIndex!==0)throw new Error("No parent node but not in main frame")},a=0;for(;o&&a<1e6;){if(a++,KN.includes(n.tagName)){i();continue}if(n.tagName==="body")t.push("body");else{let c=!1,l=1;for(let u=0;u<o.childrenBackendIds.length;u++){let d=o.childrenBackendIds[u],p=e.backendIdToNode[d];if(d===n.backendNodeId){t.push(`${n.tagName}:nth-child(${l})`),c=!0;break}else p?.nodeType===1&&!p.psuedoType&&l++}if(!c)throw new Error(`Could not find child (${n.tagName}) in parent's children list (${o.tagName})`)}i()}return t.reverse()}function jE(r,e){let t=r.locator("html"),n=[];for(let o=0;o<e.length;o++){let i=e[o];if(n.push(i),i.startsWith("iframe")){let a=n.join(" > ");n=[],o<e.length-1?t=t.frameLocator(a):t=t.locator(a)}}if(n.length&&(t=t.locator(n.join(" > "))),"owner"in t)throw new Error("Final locator from mpath is a frame locator");return t}async function VE(r,e){await r.send({method:"DOM.getDocument",params:{depth:0},timeout:he});let t=await r.send({method:"DOM.requestNode",params:{objectId:e},timeout:he}),o=(await r.send({method:"DOM.getAttributes",params:{nodeId:t.nodeId},timeout:he})).attributes,i=vn(o,Kr);if(!i)throw new Error(`Could not find attribute ${Kr} for object ${e}`);return i}var XN=["focusable","keyshortcuts","controls","live","relevant","orientation"],JN=["selected","readonly","modal","required","invalid"],ZN=["id","name","role","content"],WE=["absolute","fixed","sticky"],QN=["i"],e0=["path"],t0=["statictext","textbox","checkbox","combobox","iframe","rootwebarea","table","caption","columnheader","rowheader","gridcell","grid","row","rowgroup","cell","image","graphics-symbol","graphics-document","graphics-object","svgroot","button","link","list","listitem","tablist","tabpanel","tab","searchbox","menu","menubar","form","dialog","alertdialog","banner","navigation","main","menuitem","menuitemcheckbox","menuitemradio","option","radio","progressbar","switch","tree","treeitem","separator"],KE=["ariaHiddenElement","ariaHiddenSubtree","hiddenByChildTree","inertElement","inertSubtree","notRendered","notVisible"],YE=["activeAriaModalDialog","activeFullscreenElement","activeModalDialog"],r0=["menulistpopup","statictext","inlinetextbox"],n0=80,$E=100,XE=50,Ip=["StaticText","ListMarker","RootWebArea","LineBreak","emphasis","::before","::after"],o0=["cite"],i0={LabelText:["label"],listitem:["li"],image:["img","svg"],link:["a"],RootWebArea:["#document"],paragraph:["p"],LineBreak:["br"],separator:["hr"],"graphics-symbol":["svg","rect"],gridcell:["td","th"],SvgRoot:["svg"],navigation:["nav"],cell:["td","th"],row:["tr"],list:["ul"],heading:["h1","h2","h3","h4","h5","h6"]},a0={name:!0,value:!0,title:!0,alt:!0,placeholder:!0,checked:!0,selected:!0,contenteditable:!0},qE={indentLevel:0},_p=class r{id;role;name;nameSources;tagName;content;properties;internalProperties;ignoredReasons;dataMomenticId;importantProperties;pathFromRoot;mPathSelector;parent;children;parentFrame;domNode;backendNodeId;ignoredByCDP;flagNotActionableNodes;constructor(e){if(this.id=e.id,this.role=e.role,this.name=e.name,this.nameSources=e.nameSources,this.content=e.content,this.properties={},this.pathFromRoot=e.pathFromRoot,this.children=e.children,this.backendNodeId=e.backendNodeID,this.ignoredByCDP=e.ignoredByCDP,this.internalProperties=e.internalProperties??{},this.parentFrame=e.parentFrame,this.ignoredReasons=e.ignoredReasons,this.importantProperties=e.importantProperties,this.flagNotActionableNodes=e.flagNotActionableNodes,e.properties&&e.properties.forEach(t=>{t.name==="keyshortcuts"?this.dataMomenticId=parseInt(t.value.value):this.properties[t.name]=t.value.value}),e.domNode){this.domNode=e.domNode,this.tagName=e.domNode.tagName||void 0;let t=e.domNode.attributes.id;this.name=this.name||e.domNode.attributes.name||(t&&t.length<XE?t:""),this.role=this.role||(e.domNode.attributes.role??""),u0(this.properties,e.domNode,e.importantProperties)}p0(this)}getSerializedFormWithContext(){return this.serialize({noId:!0,maxLevel:1,neighbors:1})}getNodeOnlySerializedForm(){return this.serialize({noId:!0,noChildren:!0,noContent:!0})}getLogForm(){return JSON.stringify({id:this.id,name:this.name??"",role:this.role??"",backendNodeId:this.backendNodeId})}isInteresting(e){if(this.domNode&&e0.includes(this.domNode.tagName)||this.domNode?.computedStyles.display==="contents"||this.ignoredReasons.some(n=>YE.includes(n)))return!1;if(e){if(Object.keys(this.domNode?.attributes??{}).some(o=>tT(o,e)))return!0;let n=this.domNode?.attributes.class?.split(" ");if(n&&n.length>0&&n.some(o=>rT(o,e))||e.styles?.some(o=>{let i=o.split(":");if(i.length!==2)return!1;let a=i[0]?.trim(),s=i[1]?.trim();if(a===void 0||s===void 0)return!1;let c=this.domNode?.computedStyles[a];return c!==void 0&&(c===s||s==="*")}))return!0}if(this.domNode&&QN.includes(this.domNode.tagName)||t0.includes(this.role.toLowerCase())||this.role.toLowerCase()==="inlinetextbox"&&this.tagName||!this.properties.hidden&&(this.properties.focusable||this.properties.settable)||nr.alwaysInterestingTruthyPropertyNames.some(n=>!!this.properties[n]))return!0;let t=this.properties.class;return typeof t=="string"&&t.split(" ").some(n=>eT(n))?!0:this.children.every(n=>n.role==="StaticText")&&this.internalProperties?.inCodeMirrorEditor?!1:this.children.some(n=>n.role==="StaticText")||this.children.length>1&&this.children.some(n=>n.tagName==="input")?!0:this.domNode&&(this.domNode.bounds.x===null||this.domNode.bounds.y===null||!this.domNode.bounds.width||!this.domNode.bounds.height)?!1:!!this.name.trim()||!!this.content||Object.keys(this.properties).some(n=>n.startsWith("data"))}shouldSerializeBounds(){let e=this.domNode?.computedStyles.position;return!!(e&&(e==="absolute"||e==="fixed"||e==="sticky"))}isNotActionable(){return!!(this.domNode?.computedStyles.display==="contents"||this.domNode&&(this.domNode.bounds.x===null||this.domNode.bounds.y===null||!this.domNode.bounds.width||!this.domNode.bounds.height))}serialize(e=qE){let t=Object.assign({},qE,e),{indentLevel:n,noChildren:o,noProperties:i,noId:a,noContent:s,condensedMode:c}=t,l=xp(this.properties),u=" ".repeat(n),d=this.role||"",p=this.tagName??"unknown",h=this.name;d==="heading"&&h==="heading"&&(h=""),this.nameSources?.find(v=>!v.superseded&&v.type==="contents")&&this.children.length>0&&(h="");let g=this.nameSources?.find(v=>!v.superseded);if(g&&!g.nativeSource&&g.type==="relatedElement"){let v=g.attributeValue?.relatedNodes??[];v.length===1&&v[0].text&&v[0].text===h&&(h="")}let f=Ip.includes(this.role)||o0.includes(this.tagName||"");if(this.role==="StaticText"||this.role==="ListMarker")return`${u}${h}
3948
+ `;let E=`${u}<${p}`;!a&&!f&&(E+=` id="${this.id}"`);let S=s??!1;if((l.multiline||l.contenteditable)&&this.children.length>0&&(S=!0),d&&d!=="generic"&&d!==p&&!(i0[d]??[]).includes(p)&&(E+=` role=${JSON.stringify(d)}`),h&&(E+=` name=${JSON.stringify(h)}`),this.content&&!S&&(E+=` content=${JSON.stringify(this.content)}`),this.flagNotActionableNodes&&this.tagName!=="#document"&&this.isNotActionable()&&(E+=` ${nr.ineligibleElementAttribute}`),this.shouldSerializeBounds()&&this.domNode?.bounds){let v=this.domNode.bounds,P=Math.round(v.x??0),C=Math.round(v.y??0),w=Math.round((v.x??0)+(v.width??0)),B=Math.round((v.y??0)+(v.height??0));E+=` bounds=[${P} ${C} ${w} ${B}]`}let R=Date.now();if(Object.keys(l).length>0&&!i){if(Date.now()-R>1e3)throw new Error(`Serialization for the HTML element with tag ${p} and internal ID ${this.id} took too long. Please ensure your machine has enough resources to run Momentic.`);Object.entries(l).forEach(([v,P])=>{if(!XN.includes(v)){{if(JN.includes(v)&&(!P||P==="false"))return;if(v==="value"&&S&&(l.type==="text"||this.role==="textbox"))return;if(v==="level"&&`${P}`=="1")return;if(v==="url"&&l.src&&p==="img")return;if(v==="url"&&l.href&&p==="a")return;if(v==="editable"&&P==="plaintext")return;if(v==="type"&&P===p)return;if(c&&!a0[v])return}typeof P=="string"?E+=` ${v}="${Mt(P,$E,!0)}"`:typeof P=="boolean"?P?E+=` ${v}`:E+=` ${v}={false}`:typeof P<"u"&&(E+=` ${v}={${Mt(JSON.stringify(P),$E,!0)}}`)}})}if(p==="::before"||p==="::after"){let v="";for(let P of this.children)v+=P.serialize({...e,indentLevel:n,neighbors:0});return v}let A=e.maxLevel!==void 0&&n/2>=e.maxLevel;if(this.children.length===0||o||A)E+=` />
3949
+ `;else{let v="";for(let C of this.children)v+=C.serialize({...e,indentLevel:n+2,neighbors:0});let P=v.trim();P.length<=n0&&!P.includes(`
3950
+ `)?E+=`>${P}</${p}>
3951
+ `:E+=`>
3952
+ ${v}${u}</${p}>
3953
+ `}if(e.neighbors!==void 0&&e.neighbors>0&&this.parent){let v=this.parent.children.findIndex(w=>w.id===this.id),P=v>0?this.parent.children[v-1]?.serialize({...e,neighbors:0}):"",C=v<this.parent.children.length-1?this.parent.children[v+1]?.serialize({...e,neighbors:0}):"";return`${P||""}
3954
+ ${E}
3955
+ ${C||""}`}return E}shallowClone(){let e=new r({id:this.id,role:this.role,name:this.name,nameSources:this.nameSources,content:this.content,properties:[],pathFromRoot:this.pathFromRoot,children:[],ignoredReasons:this.ignoredReasons,backendNodeID:this.backendNodeId,ignoredByCDP:this.ignoredByCDP,internalProperties:xp(this.internalProperties),importantProperties:this.importantProperties,parentFrame:this.parentFrame,flagNotActionableNodes:this.flagNotActionableNodes});return e.tagName=this.tagName,e.dataMomenticId=this.dataMomenticId,e.properties=xp(this.properties),e}},Mp=class r{constructor(e,t,n,o){this.root=e;this.a11yIdNodeMap=t;this.dataMomenticIdMap=n;this.selectorToNodeMap=o}serialize(e){return this.root.serialize(e)}pruneUsingSummaries(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");let n={},o={},i={},a=c=>{let l=c.shallowClone();if(e[c.id])return l.properties["data-momentic-summary"]=e[c.id],n[c.id]=l,c.dataMomenticId&&(o[c.dataMomenticId]=l),c.mPathSelector&&(i[c.mPathSelector]=l),l;let u=[];for(let d of c.children){let p=a(d);p&&(u.push(p),p.parent=l)}return l.children=u,n[c.id]=l,c.dataMomenticId&&(o[c.dataMomenticId]=l),c.mPathSelector&&(i[c.mPathSelector]=l),l},s=a(t);return new r(s,n,o,i)}pruneUsingRelevantIds(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");function n(i,a=!1){let s=e.has(`${i.id}`)||i.id===t?.id,c=i.shallowClone(),l=i.children,u=!1,d=[];for(let p of l){let h=n(p,s||u);h&&(d.push(h),h.parent=c,u=!0)}if(c.children=d,s||u)return c;if(Ip.includes(i.role)&&a)return c}let o=n(t);return new r(o,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap)}pruneToSerializedCharLimit(e){let t=this.root;if(!t)throw new Error("Cannot prune a11y tree with no root");let n=c=>c.role==="StaticText"||c.role==="ListMarker",o=new WeakMap,i=(c,l)=>{if(o.has(c))return o.get(c);let u=c.serialize({indentLevel:l,noChildren:!0});return o.set(c,u),u},a=(c,l,u)=>{let d=c.shallowClone();d.children=[];let p=i(c,l).length;if(u<=p)return{clone:d,used:p};if(n(c)||c.children.length===0)return{clone:d,used:p};let h=p,m=u-h;for(let g of c.children){let f=l+2,E=i(g,f).length;if(m<E)break;let{clone:S,used:R}=a(g,f,m);if(R>m)break;d.children.push(S),S.parent=d,h+=R,m-=R}return{clone:d,used:h}},{clone:s}=a(t,0,Math.max(1e4,e));return new r(s,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap)}};function s0(r){return r.name?.value?`"${r.name.value}"`:r.role?.value&&r.role.value!=="none"&&r.role.value!=="generic"?`"${r.role.value}"`:`"${r.nodeId}"`}function l0(r,e,t,n){return r.bounds.x===null||r.bounds.y===null||r.bounds.height===null||r.bounds.width===null||r.bounds.width===0||r.bounds.height===0?!0:r.bounds.x+r.bounds.width<e.leftBound||r.bounds.x>e.rightBound?(ll({logger:t,logKey:n,maxCount:5,intervalMs:3e3},{domNode:r,logKey:n},"Filtering out node since it is not in the viewport horizontally"),!1):r.bounds.y+r.bounds.height<e.upperBound||r.bounds.y>e.lowerBound?(ll({logger:t,logKey:n,maxCount:5,intervalMs:3e3},{domNode:r,logKey:n},"Filtering out node since it is not in the viewport vertically"),!1):r.computedStyles.display==="none"?(t.debug({domNode:r},"Filtering out node since it has display none"),!1):!0}async function JE({node:r,parent:e,frameId:t,frameContext:n,axGraph:o,domGraph:i,inputNodeMap:a,flagNotActionableNodes:s,showZeroOpacityElements:c,filterByViewport:l,viewportDetails:u,useMPaths:d,importantProperties:p,allowedA11yIgnoreReasonsOverride:h,cdpClient:m,logger:g,callId:f}){if(!e&&r.parentId)throw new Error(`Got no parent for accessibility node ${r.nodeId}: ${JSON.stringify(r)}`);let E=(G,se={})=>{},S=r.backendDOMNodeId,R=r0.includes(r.role?.value?.toLowerCase()??"");if(!R&&S===void 0)return E("Filtering out node since it doesn't exist in the DOM"),[];let A=S?i.backendIdToNode[S]:void 0;if(!R&&!A)try{let G=await W(m.send({method:"DOM.describeNode",params:{backendNodeId:S}}),{milliseconds:750,fallback:()=>{g.debug("Timeout getting node from CDP while processing a11y tree")}});if(G&&G.node.nodeName.toLowerCase()==="slot"&&G.node.distributedNodes?.length)g.debug({redirectedDomNode:A,parentAXNode:e?.getNodeOnlySerializedForm(),originalAXNode:r,cdpResult:G},"Redirecting node to assigned slot");else return E("Filtering out node since it doesn't exist in the DOM",{cdpResult:G}),[]}catch(G){return E("Filtering out node since it doesn't exist in the DOM",{err:G}),[]}if(A&&e&&l&&u&&r.backendDOMNodeId&&!l0(A,u,g,f))return A.momenticIgnored=!0,[];if(A&&A.computedStyles.display==="none")return A.momenticIgnored=!0,[];if(A&&A.computedStyles.opacity==="0"&&c!==!0){if(c==="inputs-only"&&A.tagName.toLowerCase()!=="input")return A.momenticIgnored=!0,[];if(c===!1)return A.momenticIgnored=!0,[]}let v=r.name?.value?typeof r.name.value=="string"?r.name.value:`${r.name.value}`:"",P=r.value?.value?typeof r.value.value=="string"?r.value.value:`${r.value.value}`:"",C=new _p({domNode:A,id:parseInt(r.nodeId),role:r.role?.value||"",name:v,nameSources:r.name?.sources,content:P,properties:r.properties,children:[],ignoredReasons:r.ignoredReasons?.filter(G=>(h??KE).includes(G.name)||YE.includes(G.name))??[],pathFromRoot:(e?`${e.pathFromRoot} `:"")+s0(r),backendNodeID:r.backendDOMNodeId,ignoredByCDP:r.ignored,internalProperties:{inCodeMirrorEditor:e?.internalProperties?.inCodeMirrorEditor},importantProperties:p,parentFrame:n.type==="root"?void 0:n,flagNotActionableNodes:s}),w=n,B=a[t],U=t;if(A?.tagName.toLowerCase()==="iframe"&&A.ownedFrameId){let G=n.childFrames.find(ke=>ke.frameId===A.ownedFrameId),se=o[G?.frameId??""]?.root,ce=a[G?.frameId??""];if(G&&se&&ce){r.childIds&&r.childIds.length>0&&g.debug("Replacing existing node's children with children from the iframe");let ke=se;r.childIds=ke.childIds,w=G,B=ce,U=G.frameId}}let D=A?.childrenBackendIds?.length??0,J=(r.childIds??[]).filter(G=>!!B.get(parseInt(G))).length;if(D>J){let G=r.childIds?.map(ce=>B.get(parseInt(ce))).filter(Boolean).map(ce=>ce?.backendDOMNodeId).filter(ce=>ce!==void 0)??[],se=0;for(let ce of A?.childrenBackendIds??[]){if(G.includes(ce)){se=(r.childIds?.findIndex(we=>B.get(parseInt(we))?.backendDOMNodeId===ce)??0)+1;continue}let ke=i.backendIdToNode[ce];if(!ke||ke?.tagName.toLowerCase()!=="svg")continue;let ge=Math.floor(-1*Math.random()*1e7),pt={nodeId:ge.toString(),parentId:r.nodeId,ignored:!1,backendDOMNodeId:ce,frameId:U,role:{type:"string",value:"graphics-symbol"}};B.set(ge,pt),r.childIds||(r.childIds=[]),r.childIds.splice(se,0,ge.toString()),se++}}if(r.childIds?.length===1&&A){let G=B.get(parseInt(r.childIds[0])),se=G?.role?.value,ce=A.childrenBackendIds;if(G&&se==="StaticText"&&ce.length===1){let ke=i.backendIdToNode[ce[0]];if(ke?.tagName?.toLowerCase()==="span"){let ge=Math.floor(-1*Math.random()*1e7).toString(),pt={nodeId:ge,parentId:r.nodeId,ignored:!1,backendDOMNodeId:ke.backendNodeId,frameId:U,childIds:[G.nodeId]};G.parentId=ge,B.set(parseInt(ge),pt),r.childIds=[ge]}}}for(let G of r.childIds??[]){if(!G)continue;let se=B.get(parseInt(G));if(!se)continue;let ce=await JE({node:se,parent:C,domGraph:i,axGraph:o,frameId:U,frameContext:w,inputNodeMap:a,cdpClient:m,logger:g,callId:f,filterByViewport:l,showZeroOpacityElements:c,importantProperties:p,viewportDetails:u,useMPaths:d,flagNotActionableNodes:s});ce.length&&(C.children=C.children.concat(ce))}if(C.role==="StaticText"&&(C.children=[]),C.children.length===1&&C.children[0].role==="StaticText"){let G=C.name,se=C.children[0]?.name;(G===se||!se)&&(C.children=[])}let Le=[];for(let G=C.children.length-1;G>=0;G--){let se=C.children[G];if(se.role!=="StaticText"){Le.push(se);continue}if(G===0||C.children[G-1].role!=="StaticText"){Le.push(se);continue}C.children[G-1].name+=se.name}if(C.children=Le.reverse(),!C.isInteresting(p)&&r.parentId)return A&&(A.momenticIgnored=!0),C.children;for(let G of C.children)G.parent=C;return d0(C),A&&d&&Cp(A,i),[C]}function ZE({node:r,a11yIdNodeMap:e,dataMomenticIdMap:t,logger:n,callId:o,domGraph:i,useMPaths:a,selectorToNodeMap:s,iconKnowledgeBase:c,startId:l=1}){r.id=l,l+=1,e[r.id]=r,r.dataMomenticId?t[r.dataMomenticId]=r:Ip.includes(r.role);let u=r.backendNodeId,d=u!==void 0?i.backendIdToNode[u]:void 0;if(a&&d&&d.mPathSelector&&(s[d.mPathSelector]=r,r.mPathSelector=d.mPathSelector),c&&d&&d.tagName?.toLowerCase()==="svg"){let p=Rp(d,i),h=p?c[p.hash]:void 0,m=h?h.description:void 0;h&&(r.properties["data-momentic-description"]=m)}for(let p of r.children)l=ZE({node:p,a11yIdNodeMap:e,dataMomenticIdMap:t,logger:n,callId:o,startId:l,useMPaths:a,domGraph:i,selectorToNodeMap:s,iconKnowledgeBase:c});return l}async function QE({rawA11yGraph:r,domGraph:e,startingFrameId:t,logger:n,cdpClient:o,filterByViewport:i,showZeroOpacityElements:a,flagNotActionableNodes:s,importantProperties:c,viewportDetails:l,useMPaths:u,frameContext:d,iconKnowledgeBase:p,allowedA11yIgnoreReasonsOverride:h}){let m=t??"root",g=r[m]?.root;if(!g)throw new Error("A11y tree has no root");let f=YN(),E=C=>{let w=C.allNodes.filter(U=>!U.ignoredReasons?.find(J=>(h??KE).includes(J.name))),B=new Map;return w.forEach(U=>{B.set(parseInt(U.nodeId),U)}),B},S={};Object.entries(r).forEach(([C,w])=>{S[C]=E(w)});let R=await JE({node:g,domGraph:e,parent:null,inputNodeMap:S,axGraph:r,frameId:m,frameContext:d,cdpClient:o,logger:n,callId:f,showZeroOpacityElements:a,importantProperties:c,filterByViewport:i,viewportDetails:l,useMPaths:u,flagNotActionableNodes:s,allowedA11yIgnoreReasonsOverride:h});if(R.length>1)throw new Error(`Something went horribly wrong processing the a11y tree, we got: ${JSON.stringify(R)}`);if(R.length===0)throw new Error("There are no accessible elements on this page or frame. Are you sure this website loads properly?");let A={},v={},P={};return ZE({node:R[0],a11yIdNodeMap:A,dataMomenticIdMap:v,selectorToNodeMap:P,domGraph:e,logger:n,callId:f,useMPaths:u,iconKnowledgeBase:p}),new Mp(R[0],A,v,P)}function c0(r,e,t,n){if(r==="class"){if(t.tagName?.toLowerCase()==="svg")return e.split(" ").filter(a=>a.length<XE&&!nr.bannedClassSubstrings.some(s=>a.includes(s))).slice(0,3).join(" ");let o=e.split(" "),i=[];for(let a of o)if(eT(a,n)){i.push(a);continue}return i.length?i.join(" "):null}if(e==="true")return!0;if(e==="false")return!1;try{let o=parseInt(e);if(!isNaN(o))return o}catch{}return r==="src"&&e.includes("base64")?e.slice(0,e.indexOf("base64")+6)+"...":e.length>60?e.slice(0,50)+"...":e}function u0(r,e,t){if(!e)return;Object.entries(e.attributes).forEach(([a,s])=>{let c=r[a]||a.startsWith("aria")||ZN.includes(a);if((nr.relevantElementAttributes.includes(a)||tT(a,t))&&!c){let u=c0(a,s,e,t);u!==null&&(r[a]=u)}});let n,o=[];if(e.computedStyles.position&&WE.includes(e.computedStyles.position))n=e.computedStyles.position;else if(e.attributes.style){for(let a of WE)if(e.attributes.style.includes(`position: ${a}`)){n=a;break}}n&&o.push(`position: ${n}`);let i;e.computedStyles.opacity&&e.computedStyles.opacity==="0"&&(i="opacity: 0"),i&&o.push(i);for(let a of t?.styles??[]){let s=a.split(":"),c=s[0]?.trim(),l=s[1]?.trim(),u=e.computedStyles[c??""];if(c!==void 0&&l!==void 0&&u!==void 0&&(l==="*"||u===l)){let d=e.computedStyles[c],p=`${c}: ${d}`;o.includes(p)||o.push(p)}}o.length>0&&(r.style=o.join("; "))}function d0(r){let e=r.properties.class;if(typeof e=="string"&&e.includes("cm-content")){r.children.forEach((i,a)=>{i.properties["cm-line-number"]=`${a+1}`});return}if(typeof e=="string"&&e.includes("notion-page-content")){r.children.forEach((i,a)=>{i.properties["block-number"]=`${a+1}`}),r.children.length>0&&(r.children[r.children.length-1].properties.description="This is the last block in the document. Click here to add new text to the end.");return}if(r.tagName==="table"){let i=[],a=r.children.find(c=>c.tagName==="thead");if(a){let c=a.children.find(l=>l.tagName==="tr");if(c){let l=c.children.filter(u=>u.tagName==="th");l.forEach((u,d)=>{u.properties["col-index"]||(u.properties["col-index"]=d+1),i?.push(Mt(u.name,100,!1))}),i?.length!==l.length&&(i=void 0)}}let s=0;for(let c of r.children)if(c.tagName==="tbody")for(let l=0;l<c.children.length;l++){let u=c.children[l];if(u.tagName!=="tr")continue;if(l===0&&!i?.length){let h=u.children.filter(m=>m.tagName==="th");if(h.length){if(i=h.map(m=>Mt(m.name,100,!1)),i.length===h.length)continue;i=void 0}}s+=1,u.properties["row-index"]||(u.properties["row-index"]=s);let d=u.children.filter(h=>h.tagName==="td"||h.tagName==="th"),p=d.length===i?.length;d.forEach((h,m)=>{h.tagName!=="th"&&(h.properties["col-index"]||(h.properties["col-index"]=m+1),p&&(h.properties.col||(h.properties.col=i[m])))})}}}function p0(r){let e=r.properties.class,t=typeof e=="string"&&e.includes("cm-content");r.internalProperties.inCodeMirrorEditor=r.internalProperties?.inCodeMirrorEditor||t}function eT(r,e){if(e&&rT(r,e))return!0;if(nr.bannedClassSubstrings.some(t=>r.includes(t)))return!1;if(nr.alwaysInterestingClassNames.includes(r))return!0;for(let t of nr.alwaysInterestingClassPrefixes)if(r.startsWith(t))return!0;return!1}function tT(r,e){if(e?.attributes?.includes(r))return!0;for(let t of e?.attributes??[])if(t.endsWith("*")){let n=t.slice(0,-1);if(r.startsWith(n))return!0}return!1}function rT(r,e){if(e?.classes?.includes(r))return!0;for(let t of e?.classes??[])if(t.endsWith("*")){let n=t.slice(0,-1);if(r.startsWith(n))return!0}return!1}var Ol=class r{constructor(e,t,n,o,i){this.session=e;this.logger=t;this.contextGetter=n;this.pageGetter=o;this.defaultTimeoutMs=i}cdpInitializingPromise=void 0;cdpCrashDetails=void 0;cdpFullyDead=!1;loadEventLogs=[];static async init({logger:e,contextGetter:t,pageGetter:n,defaultTimeoutMs:o}){let i=t(),a=n(),s,c;for(let u=0;u<2;u++)try{s=await W(i.newCDPSession(a),{milliseconds:o*u,fallback:()=>{throw new _("UserInfrastructureError",`Failed to initialize Chrome session within the page load timeout (${a.url()})`)}});break}catch(d){await te(it),c=d}if(!s)throw c;let l=new r(s,e,t,n,o);try{await W(l.registerHandlers(s),{milliseconds:o,message:`CDP handler registration timed out after ${o}ms`})}catch(u){throw l.cdpFullyDead=!0,new _("UserInfrastructureError",`Failed to initialize CDP client: ${u}`)}return l}async registerHandlers(e){e.on("Target.attachedToTarget",async()=>{try{await e.send("Runtime.runIfWaitingForDebugger")}catch(t){this.logger.warn({err:t},"Failed to run Runtime.runIfWaitingForDebugger")}}),e.on("Target.targetCrashed",t=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},targetCrashDetails:JSON.stringify(t)},this.logger.error({payload:t},"CDP session crashed, Momentic will likely not function correctly")}),e.on("Inspector.targetCrashed",t=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},inspectorCrashDetails:JSON.stringify(t)},this.logger.error({payload:t},"CDP inspector session crashed, Momentic will likely not function correctly")}),e.on("Page.frameRequestedNavigation",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Frame requested navigation: ${JSON.stringify(t)}`)}),e.on("Page.navigatedWithinDocument",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Navigated within document: ${JSON.stringify(t)}`)}),e.on("Page.lifecycleEvent",t=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page lifecycle event: ${JSON.stringify(t)}`)}),e.on("Page.loadEventFired",()=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page load event fired`)}),await e.send("Accessibility.enable"),await e.send("Page.enable"),await e.send("DOM.enable"),await e.send("Overlay.enable"),await e.send("DOMSnapshot.enable"),await e.send("CSS.enable")}async send({method:e,params:t,timeout:n=this.defaultTimeoutMs,timeoutMsg:o}){for(;this.cdpInitializingPromise;)await W(this.cdpInitializingPromise,{milliseconds:n});if(this.cdpCrashDetails){if(this.cdpFullyDead)throw new _("UserInfrastructureError",`The browser inspector session encountered a critical crash: ${JSON.stringify(this.cdpCrashDetails)}`);this.logger.warn(`Detected crashed CDP client before method ${e}, reinitializing before proceeding...`),await this.reinitialize()}try{return await W(this.session.send(e,t),{milliseconds:n,message:o??`Chrome command ${e} timed out after ${n}ms. This is likely an infrastructure issue caused by a lack of compute resources or a crash at the browser level.`})}catch(i){throw["Internal error","Target crashed"].some(a=>i.message.includes(a))&&!this.cdpInitializingPromise&&(this.logger.warn({err:i},`CDP crashed during CDP method ${e}, re-initializing client`),await this.reinitialize()),i}}async createRawCDPSession(e=this.defaultTimeoutMs){let t=e,n=this.pageGetter(),o=await W(this.contextGetter().newCDPSession(n),{milliseconds:t,fallback:()=>{throw this.logger.error(`Failed to initialize CDP session within the page load timeout (${n.url()})`),new _("UserInfrastructureError",`Failed to initialize CDP session within the page load timeout (${n.url()})`)}});return this.logger.debug(`Created new CDP session for ${n.url()}`),o}async reinitialize(e=this.defaultTimeoutMs){await this.cdpInitializingPromise,this.cdpInitializingPromise=(async()=>{try{let t=this.session;this.session=await this.createRawCDPSession(e),await W(this.registerHandlers(this.session),{milliseconds:e,message:`Failed to register CDP handlers within ${e}ms`}),this.logger.debug("Successfully reinitialized and attached new handlers to CDP session");try{await W(t.detach(),{milliseconds:1e3})}catch(n){this.logger.warn({err:n},"Failed to detach old CDP session after reinitialization, continuing...")}this.cdpCrashDetails=void 0,this.cdpFullyDead=!1}catch(t){this.cdpCrashDetails={...this.cdpCrashDetails??{},reinitializeError:`${t}`},this.cdpFullyDead=!0}finally{this.cdpInitializingPromise=void 0}})(),await this.cdpInitializingPromise}on(e,t){return this.session.on(e,t),this.session}off(e,t){return this.session.off(e,t),this.session}addListener(e,t){return this.session.addListener(e,t),this.session}removeListener(e,t){return this.session.removeListener(e,t),this.session}};var ei="<empty>";function m0(r){return r.includes("doubleclick.net")||r.includes("googletagmanager.com")||r.includes("googlesyndication.com")||r.includes("s.amazon-adsystem.com")||r.includes("smartadserver.com")||r.includes("omnitagjs.com")||r.includes("x.adroll.com")}function oT(r){let e=r.adFrameStatus?.adFrameType;return e==="child"||e==="root"||m0(r.url)}async function h0(r,e){let t=await r.send({timeout:ee,method:"DOM.getFrameOwner",params:{frameId:e}}),o=(await r.send({timeout:ee,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[t.backendNodeId]}})).nodeIds[0],a=(await r.send({timeout:ee,method:"DOM.describeNode",params:{backendNodeId:t.backendNodeId}})).node;return a.nodeId=o,a}async function ti({cdpClient:r,page:e,logger:t}){let n={type:"root",childFrames:[],page:e},o=[],[i,a]=await Promise.all([r.send({timeout:ee,method:"Page.getFrameTree",params:{}}),r.send({timeout:ee,method:"DOM.getDocument",params:{depth:0}})]),l=(i.frameTree.childFrames??[]).map(async(d,p)=>{if(oT(d.frame))return null;try{return await iT({cdpClient:r,rawFrameTree:d,indices:[p],parent:n,warnings:o,logger:t})}catch(h){return o.push(`Failed to get child frame: ${h}`),null}}),u=await Promise.all(l);return n.childFrames=u.filter(d=>d!==null),o.length&&t?.warn({warnings:o},"Got warnings when fetching frame tree"),n}async function iT({cdpClient:r,rawFrameTree:e,indices:t,parent:n,warnings:o,logger:i}){let a=e.frame.id,s=await h0(r,a),c=s.attributes??[],l=null,u=[];for(let m of["src","name","id","title","srcdoc","sandbox"]){let g=vn(c,m);g&&(u.push(`${m}=${JSON.stringify(g)}`),m==="src"&&(l=g))}let d={type:"frame",cdpFrame:e.frame,url:e.frame.url,frameId:a,locationData:{indices:t,attributeSelectors:u},src:l,childFrames:[],parent:n,domNode:s},h=(e.childFrames??[]).map(async(m,g)=>{if(oT(m.frame))return null;try{return await iT({cdpClient:r,rawFrameTree:m,indices:[...t,g],parent:d,warnings:o,logger:i})}catch(f){return o.push(`Failed to get child frame (child ${g} of frame with url ${e.frame.url}): ${f}`),null}});return d.childFrames=(await Promise.all(h)).filter(m=>m!==null),d}async function g0(r){try{return await r.owner().count()===1}catch{return!1}}async function f0(r){try{return await r.count()===1}catch{return!1}}async function Nr(r,e){let t=[],n=r;for(;n.parent.type==="frame";)t.push(n.parent),n=n.parent;t.reverse();let o=e,i=[];for(let l of t){let u=!1;for(let d of[...l.locationData.attributeSelectors,ei]){let p=o.frameLocator(d===ei?"iframe":`iframe[${d}]`);if(await g0(p)){u=!0,o=p,i.push(d);break}}if(!u)throw new _("ActionFailureError",`Failed to find a unique attribute to identify intermediate frame with url matching '${l.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`)}let a;for(let l of[...r.locationData.attributeSelectors,ei]){let u=o.locator(l===ei?"iframe":`iframe[${l}]`);if(await f0(u)){a=u,i.push(l);break}}if(!a)throw new _("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${r.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let s=await a.evaluateHandle(l=>l,{timeout:re}),c=await s.asElement().contentFrame();if(!c)throw new _("InternalWebAgentError",`Failed to load Playwright Frame for iframe with url '${r.url}'`);return await s.dispose(),{frame:c,mPathSelectorTokens:i}}function nT(r,e){let t=[...r],n=[];for(;t.length;){let o=t.shift();e(o)&&n.push(o),t.push(...o.childFrames)}return n}async function aT({page:r,frameTree:e,cache:t}){let n,o=e.childFrames,i=[];if(t.mPathSelectorTokens.length){let s=o;for(let u=0;u<t.mPathSelectorTokens.length-1;u++){let d=t.mPathSelectorTokens[u];d===ei?s=s.length===1?s[0].childFrames:[]:s=s.filter(p=>p.locationData.attributeSelectors.includes(d)).map(p=>p.childFrames).flat()}let c=[],l=t.mPathSelectorTokens[t.mPathSelectorTokens.length-1];if(l===ei?c=s:c=s.filter(u=>u.locationData.attributeSelectors.includes(l)),c.length===1)return n=c[0],i.push(`Found unique frame with mpath ${t.mPathSelectorTokens.join(" > ")}`),{resolution:{type:"auto",frame:(await Nr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with mpath ${t.mPathSelectorTokens.join(" > ")}`)}if(t.frameSrcRegex){let s=new RegExp(t.frameSrcRegex),c=nT(o,l=>!!l.src&&s.test(l.src));if(c.length===1)return n=c[0],i.push(`Found unique frame with src regex ${t.frameSrcRegex}`),{resolution:{type:"auto",frame:(await Nr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with src regex ${t.frameSrcRegex}`),t.frameSrcRegex=void 0}if(t.frameUrlRegex){let s=new RegExp(t.frameUrlRegex),c=nT(o,l=>!!l.url&&s.test(l.url));if(c.length===1)return n=c[0],i.push(`Found unique frame with url regex ${t.frameUrlRegex}`),{resolution:{type:"auto",frame:(await Nr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with url regex ${t.frameUrlRegex}`),t.frameUrlRegex=void 0}let a=o;for(let s=0;s<t.indices.length-1;s++)a=a[t.indices[s]]?.childFrames??[];if(n=a[t.indices[t.indices.length-1]],n)return i.push(`Found unique frame with indices ${t.indices.join(" > ")}`),{resolution:{type:"auto",frame:(await Nr(n,r)).frame,handle:n,mPathSelectorTokens:t.mPathSelectorTokens,frameTree:e},logs:i};throw i.push(`Found ${a.length} frames with indices ${t.indices}`),new cn("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:!1,logs:i}])}function Ll(r){return r.type==="auto"?JSON.stringify({type:"auto",frameId:r.handle.frameId}):JSON.stringify(r)}function Pp(r){for(;r.parent.type==="frame";)r=r.parent;return r.parent}function sT(r){let e=Pp(r),t=r.src??"",n=r.url??"",o=[],i=[],a=[...e.childFrames];for(;a.length;){let s=a.shift();s.src&&o.push(s.src),s.url&&i.push(s.url),a.push(...s.childFrames)}return{srcs:o,urls:i,desiredSrc:t,desiredUrl:n}}function lT(r){return r.type==="auto"?{type:"auto",frameId:r.handle.frameId,url:r.handle.url,src:r.handle.src??"",mPathSelectorTokens:r.mPathSelectorTokens.join(" > ")}:{type:"url",url:r.url}}async function cT({frame:r,logger:e,signal:t}){let n;try{n=await r.frameElement(),await S0({frameElementHandle:n,logger:e,signal:t})}catch(o){n?e.warn({err:o},"Failed to scroll iframe into view, trying with raw JS"):e.warn("Failed to scroll iframe into view - no frame element")}finally{await n?.dispose()}}async function S0({frameElementHandle:r,logger:e,signal:t}){let n=await r.boundingBox();await to({promiseGenerator:async()=>r.evaluate(async i=>{let a=i.scrollTop;i.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(c=>setTimeout(c,250));let s=Date.now();for(;Date.now()-s<1e3;){let c=i.scrollTop;if(c===a)break;a=c,await new Promise(l=>setTimeout(l,250))}}),timeoutMs:he,codePath:"scrollIframeIntoView",signal:t}),e.info({oldBb:n,newBb:await r.boundingBox()},"Successfully scrolled iframe into view")}async function uT({event:r,transformer:e,enricher:t,frame:n,lastScreenshotForRecording:o,logger:i}){let{warnings:a,error:s,properties:c}=r.target;if(s){i.error({error:s,warnings:a},"Error while capturing passive click");return}if(a.length&&i.warn({warnings:a},"Warnings while capturing passive click"),!c)return;let l=n.parentFrame()?n.url():void 0,d=n.page().frames().map(m=>m.url());i.debug({frameUrl:l,...r},"Passive click event captured on element");let p,h;if(l)try{let m=await n.frameElement();p=await W(m?.boundingBox(),{milliseconds:ee})??void 0;let g=await t.constructIframeRegex({urls:d,srcs:[],desiredUrl:l});if(g.urlRegex)h={type:"url",url:`/${g.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(g)}`)}catch(m){i.warn({err:m},"Failed to construct iframe details for recorded action, using hardcoded URL only"),h={type:"url",url:l}}(async()=>{try{await e.recordElementAction({...r,screenshotBase64:o,frameConfig:h,frameBoundingBox:p})}catch(m){i.error({err:m},"Failed to transform passive click action")}})()}import{randomUUID as kr}from"crypto";import y0 from"js-beautify";var b0=["Dead"],Nl=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:e,callbacks:t,generator:n,testId:o,orgId:i,logger:a}){this.signal=e,this.logger=a,this.testId=o,this.orgId=i,this.callbacks={onStepRecorded:(s,c)=>{this.recordedSteps.set(c,{step:s}),t.onStepRecorded(s,c)},onActionReceived:(s,c)=>{this.recordedSteps.set(c,{step:s}),t.onActionReceived?.(s,c)}},this.generator=n}reserveIndexForCommand(e){let t=this.nextStepOffset;return this.recordedSteps.set(t,{step:{id:kr(),type:"PRESET_ACTION",command:Wr(e)}}),this.nextStepOffset++,t}async recordElementAction(e){let{type:t,target:n,frameConfig:o}=e;if(this.signal.aborted){this.logger.debug("Transformer was already cleaned up, ignoring click...");return}let i,a,s=n.properties.attributes.nodeOnlySerializedHtml.trim(),c=s,l;switch(e.frameConfig?e.frameBoundingBox?l={x:e.frameBoundingBox.x+n.properties.boundingBox.x,y:e.frameBoundingBox.y+n.properties.boundingBox.y,width:n.properties.boundingBox.width,height:n.properties.boundingBox.height}:this.logger.warn(e,"No frame bounding box found, refusing to write bounding box"):l=n.properties.boundingBox,t){case"CLICK":{i="CLICK";let g=Wr(i);a={id:kr(),type:"PRESET_ACTION",command:{...g,target:{type:"description",elementDescriptor:c},iframeUrl:o?.url,cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:l}}}};break}case"SELECT":{i="SELECT_OPTION";let g=Wr(i);a={id:kr(),type:"PRESET_ACTION",command:{...g,type:"SELECT_OPTION",iframeUrl:o?.url,target:{type:"description",elementDescriptor:c},cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:l}},choice:{type:"VALUE",value:e.selectedValue??"Unknown option"}}};break}case"MOUSE_DRAG":{i="MOUSE_DRAG";let g=Wr(i);a={id:kr(),type:"PRESET_ACTION",command:{...g,target:{type:"description",elementDescriptor:c},deltaX:e.deltaX.toString(),deltaY:e.deltaY.toString(),iframeUrl:o?.url,cache:{target:{id:-1,...n.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),targetUpdateLoggerTags:ve(this.logger),boundingBox:l}}}};break}default:throw new Error(`Unknown action type: ${t}`)}let u;e.offset===void 0?(u=this.nextStepOffset,this.nextStepOffset++):u=e.offset,this.callbacks.onActionReceived?.(a,u);let d=e.target.browserState;try{d=y0.html(d,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),d=rE(d,"data-momentic-interacted",4e4)}catch{}let p;try{p=(await this.generator.getReverseMappedDescription({target:d,screenshot:e.screenshotBase64?`data:image/jpeg;base64,${e.screenshotBase64}`:void 0,boundingBox:n.properties.boundingBox},{disableCache:!1,loggerTags:{testId:this.testId,...ve(this.logger)}})).phrase}catch(g){this.logger.error({err:g},"Error generating reverse mapping description"),p=s}let h=this.recordedSteps.get(u)?.step??a,m=h?.command;m&&"target"in m&&m.target?(m.target={type:"description",elementDescriptor:p},this.callbacks.onStepRecorded({...h,command:m},u)):this.logger.warn("Could not find existing command to update after description mapping")}recordKeystroke(e){let{key:t,combinable:n}=e;if(b0.includes(t)||this.signal.aborted)return;let o="normal";t.length>1&&(o="special");let i;if(o==="normal"){let d=Wr("TYPE");i={id:kr(),type:"PRESET_ACTION",command:{...d,target:void 0,value:t,clearContent:!1}}}else{let d=Wr("PRESS");i={id:kr(),type:"PRESET_ACTION",command:{...d,value:t}}}let a,s=this.nextStepOffset-1,c=this.recordedSteps.get(s),l=c?.step,u=l?.command;if(n){if(u?.type===i.command.type){let d=u.value,p=i.command.value;i={id:kr(),type:"PRESET_ACTION",command:{...u,value:i.command.type==="PRESS"?`${d}+${p}`:`${d}${p}`}},a=s}else if(u?.type==="CLICK"&&i.command.type==="TYPE")l.command={...i.command,target:u.target,cache:u.cache},i=c.step,a=s;else if(u?.type==="TYPE"&&i.command.type==="PRESS"&&i.command.value==="Backspace"){let d=u.value;i={id:kr(),type:"PRESET_ACTION",command:{...u,value:d.slice(0,d.length-1)}},a=s}}a===void 0&&(a=this.nextStepOffset,this.nextStepOffset++),this.callbacks.onStepRecorded(i,a)}recordScroll(e){if(this.signal.aborted)return;let t=()=>{let{deltaY:i}=e;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,c;s?.type==="SCROLL_DOWN"&&s.deltaY?(i+=s.deltaY,c=a):s?.type==="SCROLL_UP"&&s.deltaY?(i-=s.deltaY,c=a):(c=this.nextStepOffset,this.nextStepOffset++);let l=i>0?"SCROLL_DOWN":"SCROLL_UP",u=Wr(l);u.deltaY=Math.abs(i);let d={id:kr(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,c)},n=()=>{let{deltaX:i}=e;if(!i)return;let a=this.nextStepOffset-1,s=this.recordedSteps.get(a)?.step.command,c;s?.type==="SCROLL_RIGHT"&&s.deltaX?(i+=s.deltaX,c=a):s?.type==="SCROLL_LEFT"&&s.deltaX?(i-=s.deltaX,c=a):(c=this.nextStepOffset,this.nextStepOffset++);let l=i>0?"SCROLL_RIGHT":"SCROLL_LEFT",u=Wr(l);u.deltaX=Math.abs(i);let d={id:kr(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,c)},o=this.recordedSteps.get(this.nextStepOffset-1);o?.step.command.type==="SCROLL_LEFT"||o?.step.command.type==="SCROLL_RIGHT"?(n(),e.deltaY>=20&&t()):(t(),e.deltaX>=20&&n())}};import{z as Op}from"zod";var hce=Op.object({type:Op.literal("url"),url:Op.string()});var kl=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:e,pageLoadTimeoutMs:t,allowPartialAccessibilityTree:n,logger:o,cdpClient:i,pageGetter:a,abortSignalGetter:s,enricher:c,iconKnowledgeBase:l,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=e,this.pageLoadTimeoutMs=t,this.allowPartialAccessibilityTree=n,this.logger=o,this.cdpClient=i,this.pageGetter=a,this.abortSignalGetter=s,this.enricher=c,this.iconKnowledgeBase=l,this.userBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userBrowserSettings.importantStyles)for(let p of this.userBrowserSettings.importantStyles){let h=p.split(":");if(h.length!==2){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}let m=h[0]?.trim(),g=h[1]?.trim();if(m===void 0||g===void 0){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(m)||this.computedStylesToFetch.push(m)}}get frameConfig(){return this.activeFrameConfig}get domGraph(){return this.lastDomGraph}get selectorToNodeMap(){return this.lastSelectorToNodeMap}get dataMomenticIdToNodeMap(){return this.lastDataMomenticIdToNodeMap}get a11yIdToNodeMap(){return this.lastA11yIdToNodeMap}get a11yTreeRoot(){return this.lastA11yTreeRoot}setActiveFrameConfig(e){e?(this.activeFrameConfig=e,this.activeFrameCache=void 0):(this.activeFrameConfig=void 0,this.activeFrameCache=void 0)}reset(){this.activeFrameCache=void 0,this.activeFrameConfig=void 0,this.lastA11yIdToNodeMap={},this.lastDataMomenticIdToNodeMap={},this.lastSelectorToNodeMap={},this.lastA11yTreeRoot=void 0,this.lastDomGraph=void 0}saveAutoFrameCacheDetails(e){if(!this.activeFrameConfig||this.activeFrameConfig.type!=="auto"||!this.userBrowserSettings.autoExpandIframes)return;let t={...e,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,t),t}async getAutoFrameDetailsFromHandle(e){let t=this.pageGetter(),n=Pp(e),{frame:o,mPathSelectorTokens:i}=await Nr(e,t),a={indices:e.locationData.indices,mPathSelectorTokens:i};return this.constructIframeRegexAsync(e,a),{cache:a,config:{type:"auto",frame:o,handle:e,mPathSelectorTokens:i,frameTree:n,cache:a}}}async resolveAutoFrameCache(e){let t=this.pageGetter(),n=await ti({cdpClient:this.cdpClient,page:t,logger:this.logger}),{resolution:o,logs:i}=await aT({page:t,frameTree:n,cache:e});return this.logger.info({logs:i},"Resolved auto frame cache"),{...o,cache:e}}async resolveActiveFrameConfig({logger:e=this.logger,signal:t=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(Ll(this.frameConfig)!==this.activeFrameCache.frameIdentifierStringified)this.activeFrameCache=void 0;else if(this.activeFrameCache.frame&&"isDetached"in this.activeFrameCache.frame&&this.activeFrameCache.frame.isDetached())this.activeFrameCache=void 0;else return this.activeFrameCache;let n;return this.frameConfig.type==="url"?n=await this.resolveUrlMatcherFrameConfig({config:this.frameConfig,logger:e,signal:t}):n={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:Ll(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await cT({frame:n.frame,logger:e,signal:t}),this.activeFrameCache=n,n}async executeFunctionInAllFrames(e,t){let n=this.pageGetter(),o=await ti({cdpClient:this.cdpClient,page:n,logger:this.logger}),i=[W(n.evaluate(e,t),{milliseconds:he})],a=Array.from(o.childFrames);for(;a.length>0;){let c=a.shift(),l=c.url;l==="about:blank"||l.startsWith("chrome-error://")||(a.push(...c.childFrames),i.push(Nr(c,n).then(({frame:u})=>W(u.evaluate(e,t),{milliseconds:he})).catch(u=>(this.logger.warn({err:u,frameUrl:c.url},"Failed to evaluate function in frame"),"MOMENTIC_FRAME_EVAL_ERROR"))))}return(await Promise.all(i)).filter(c=>c!=="MOMENTIC_FRAME_EVAL_ERROR")}async getAllChildFrameUrls(){let e=this.pageGetter(),t=await ti({cdpClient:this.cdpClient,page:e,logger:this.logger}),n=Array.from(t.childFrames),o=[];for(;n.length>0;){let i=n.shift();n.push(...i.childFrames),o.push(i.src??i.url)}return o}async getDomGraph({devicePixelRatio:e,signal:t,logger:n}){return this.getDOMTree({devicePixelRatio:e??1,signal:t,logger:n??this.logger})}async getA11yTree(e){let t={},n=e.logger??this.logger,o=e.abortSignal??this.abortSignalGetter(),i=this.pageGetter(),a,s,c=null;if(this.frameConfig?.type==="url"){if(a=await or({fn:()=>this.resolveActiveFrameConfig({logger:n,signal:o}),codePath:"getActiveFrameDetails",logObject:t,signal:o,logger:n})??void 0,!a)throw new _("ActionFailureError","Got null frame details despite active frame config");s=a.handle,c=s.frameId}else this.userBrowserSettings.autoExpandIframes?(s=await or({fn:()=>ti({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),codePath:"getMomenticFrameTree",logObject:t,signal:o,logger:n}),c=null):(s={type:"root",page:i,childFrames:[]},c=null);await or({fn:async()=>this.addMomenticIds({rootPage:i,childFrames:s.childFrames,frameFilter:a?.frame,logger:n}),codePath:"addIdsToElement",logObject:t,signal:o,logger:n});let l=await or({fn:()=>this.getDOMTree({devicePixelRatio:e.devicePixelRatio??1,signal:o,logger:n}),codePath:"domFetch",logObject:t,signal:o,logger:n}),u=await or({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:c,childFrames:s.childFrames,logTimings:t,logger:n,signal:o}),codePath:"totalA11yFetch",logObject:t,signal:o,logger:n}),{tree:d}=await or({fn:()=>this.composeA11yDomGraph({opts:e,a11yGraph:u,domGraph:l,startingFrameId:c,frameContext:s,logger:n,iconKnowledgeBase:this.iconKnowledgeBase,showZeroOpacityElements:e.showZeroOpacityElements,flagNotActionableNodes:e.flagNotActionableNodes}),codePath:"a11yProcess",logObject:t,signal:o,logger:n});return Object.values(t).some(p=>p>750)&&n.warn({logTimings:t},"A11y tree fetch component took a long time"),this.lastA11yIdToNodeMap=d.a11yIdNodeMap,this.lastDataMomenticIdToNodeMap=d.dataMomenticIdMap,this.lastA11yTreeRoot=d.root,this.lastDomGraph=l,this.lastSelectorToNodeMap=d.selectorToNodeMap,d}async fetchA11yTreeForRecording(e,t){if(await this.getA11yTree({devicePixelRatio:e,abortSignal:t,logger:Xn,filterByViewport:!1,flagNotActionableNodes:!1}),Math.random()<.1){let n=this.lastA11yTreeRoot?.serialize();this.logger.debug({tree:n&&n.length>4e5?"REDACTED_DUE_TO_SIZE":n},"Refreshed a11y tree during recording")}}async getLocatorFromA11yNode({page:e,root:t,node:n}){if(n.backendNodeId===void 0)throw new Error(`Node with a11y id ${n.id} has no backend node ID: ${n.getNodeOnlySerializedForm()}`);if(this.userBrowserSettings.visualActions){let o=this.domGraph?.backendIdToNode[n.backendNodeId];if(!o)throw new Error(`Could not find DOM node for backend node ID ${n.backendNodeId}`);let i=GE({node:o,domGraph:this.domGraph});return jE(e,i)}else return this.getLocatorFromBackendId(t,n.backendNodeId)}async getLocatorFromBackendId(e,t){let n=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:t},timeout:he});if(!n||!n.object.objectId)throw new Error(`Could not resolve backend node ${t}`);let o;try{o=await VE(this.cdpClient,n.object.objectId)}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(n.object)},"Failed to get ID attribute"),i}return e.locator(Er(o))}getNodeUsingMPathSelector(e){let t=this.selectorToNodeMap[e];if(t)return t;let n=e.split(" > "),o="";for(let i=n.length-1;i>=0;i--){let a=n.slice(i).join(" > ");if(this.selectorToNodeMap[a]){o=a;break}}this.logger.warn({selectorMapSize:Object.keys(this.selectorToNodeMap).length,selector:e,closestSelector:o},"Could not find a11y node using mpath selector")}async resolveUrlMatcherFrameConfig({config:e,signal:t=this.abortSignalGetter(),logger:n=this.logger}){let o=Date.now(),i,a,s,c=0;for(;Date.now()-o<this.smartWaitingTimeoutMs;)try{i=await ti({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),a=await this.getMatchingFrameByUrlWithCdp(i,e),n.info({frameId:a.handle.frameId,url:a.handle.url,src:a.handle.src,locationData:a.handle.locationData},`Found matching frame using ${a.matchType}`);break}catch(l){if(s=l,l instanceof _&&l.reason==="UserInfrastructureError")throw l;c%3===0&&this.logger.warn({attempt:c,err:l},"Failed to resolve active frame, retrying..."),await te(it,t)}finally{c++}if(a)return{source:"url",frame:a.frame,handle:a.handle,frameIdentifierStringified:Ll(e),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw s}async getMatchingFrameByUrlWithCdp(e,t){let n=t.url,o=this.pageGetter(),i=Array.from(e.childFrames),a=[];for(;i.length>0;){let s=i.shift(),c=s.domNode;i.push(...s.childFrames);let l=vn(c.attributes??[],"src"),u=c.contentDocument?.documentURL;if(!l&&!u){this.logger.debug("Skipping frame with no URL or src");continue}for(let d of[l,u])if(d){if(n.startsWith("/")&&n.endsWith("/")){if(new RegExp(n.slice(1,-1)).test(d)){a.push({handle:s,matchType:"regex",...await Nr(s,o)});break}}else if(n.trim()===d.trim()){a.push({handle:s,matchType:"url",...await Nr(s,o)});break}}}if(a.length===1){let s=a[0];return this.userBrowserSettings.autoExpandIframes||(s.handle.childFrames=[]),s}else throw a.length>1?new Error(`Found multiple frames with src matching '${n}'. Please use a more specific selector.`):new _("ActionFailureError",`Failed to find frame with src matching: ${n}`)}async composeA11yDomGraph({opts:e,a11yGraph:t,domGraph:n,startingFrameId:o,frameContext:i,logger:a,iconKnowledgeBase:s,showZeroOpacityElements:c,flagNotActionableNodes:l}){let u=await QE({rawA11yGraph:t,startingFrameId:o,frameContext:i,domGraph:n,logger:a,cdpClient:this.cdpClient,showZeroOpacityElements:c,flagNotActionableNodes:l,filterByViewport:e.filterByViewport,importantProperties:{attributes:this.userBrowserSettings.importantAttributes,classes:this.userBrowserSettings.importantClasses,styles:this.userBrowserSettings.importantStyles},viewportDetails:void 0,iconKnowledgeBase:s,useMPaths:this.userBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride});if(!u||!u.root)throw new Error("Accessibility tree appears empty");return{tree:u}}async addMomenticIds({rootPage:e,childFrames:t,frameFilter:n,logger:o}){if(this.userBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(n??e,1);if(!this.userBrowserSettings.autoExpandIframes||n)return;let a=Array.from(t),s=[];for(;a.length>0;){let c=a.shift();a.push(...c.childFrames);let l=async()=>{try{let{frame:u}=await Nr(c,e);i=await this.addMomenticIdsHelper(u,i)}catch(u){c.url!=="about:blank"&&o.warn({err:u},"Error adding momentic IDs to child frame, continuing...")}};s.push(l())}await Promise.all(s)}async addMomenticIdsHelper(e,t){if(this.userBrowserSettings.visualActions)return t;let n=this.logger;return await Qe({root:e,fn:i=>window.addIdsToElement?.(document.body,i),arg:t,timeout:he,waitForPageLoad:async()=>{try{await e.waitForLoadState("domcontentloaded",{timeout:this.smartWaitingTimeoutMs})}catch(i){n.warn({err:i},"Error loading frame root adding momentic ids, continuing...")}},codePath:"adding Momentic element IDs to the page"})??t}getPageDomain(e){try{let t=new URL(e);if(!t.hostname)return null;let n=t.hostname.split("."),o=n.length>2?n.slice(-2).join("."):t.hostname;return`${t.protocol}//${o}`}catch{return null}}async decideChildFrameUnrollEligibility({logger:e,warnings:t,handle:n}){try{let{shouldUnroll:o,reason:i}=await this.decideChildFrameUnrollEligibilityHelper({domNode:n.domNode});return{shouldUnroll:o,reason:i}}catch(o){if(o.message.includes("Could not compute box model"))return{shouldUnroll:!1};let i=`Got error when determining whether to filter frame ${n.frameId} with url ${n.url}, allowing it to be fetched: ${o}`;return t?.push(i),e?.warn({err:o},i),{shouldUnroll:!0}}}async decideChildFrameUnrollEligibilityHelper({domNode:e}){let t=e.attributes??[];if(vn(t,"aria-hidden")==="true")return{shouldUnroll:!1,reason:"aria-hidden"};let n=vn(t,"style");if(n?.includes("display: none")||n?.includes("visibility: hidden"))return{shouldUnroll:!1,reason:"hidden CSS style"};await this.cdpClient.send({timeout:ee,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[e.backendNodeId]}});let[o,i]=await Promise.all([this.cdpClient.send({timeout:ee,method:"DOM.getBoxModel",params:{backendNodeId:e.backendNodeId}}),this.cdpClient.send({timeout:ee,method:"CSS.getComputedStyleForNode",params:{nodeId:e.nodeId}})]);if(!o.model||!o.model.height||!o.model.width)return{shouldUnroll:!1,reason:"no bounding box"};if(o.model.height<10||o.model.width<10)return{shouldUnroll:!1,reason:"small bounding box"};for(let a of i.computedStyle){if(a.name==="display"&&a.value==="none")return{shouldUnroll:!1,reason:"display: none"};if(a.name==="visibility"&&a.value==="hidden")return{shouldUnroll:!1,reason:"visibility: hidden"};if(a.name==="opacity"&&a.value==="0")return{shouldUnroll:!1,reason:"opacity: 0"}}return{shouldUnroll:!0}}async getRawA11yGraph({cdpClient:e,frameId:t,childFrames:n,logTimings:o,logger:i=this.logger,signal:a=this.abortSignalGetter()}){let s=[];try{await this.pageGetter().waitForLoadState("load",{timeout:this.pageLoadTimeoutMs})}catch(h){i.warn({err:h},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),await this.cdpClient.reinitialize()}let c,l;for(let h=0;h<3;h++)try{l=await or({fn:()=>this.getRawA11yTreeForFrame({frameId:t,timeoutMs:this.pageLoadTimeoutMs,logTimings:o}),codePath:"a11y-tree-fetch-root",logObject:o,logger:i});break}catch(m){c=m,i.warn({err:m},"Reinitializing CDP client before retrying a11y graph fetch"),await this.cdpClient.reinitialize()}if(!l)throw new Error(`Failed to fetch accessibility tree for root page: ${c}`);let u={};if(u[t??"root"]=l,!this.userBrowserSettings.autoExpandIframes)return u;let d=Array.from(n),p=[];for(;d.length>0;){let h=d.shift();try{let{shouldUnroll:g}=await this.decideChildFrameUnrollEligibility({handle:h,warnings:s});if(!g)continue}catch(g){if(g.message.includes("Could not compute box model"))continue;s.push(`Got error when determining whether to filter frame ${h.frameId} with url ${h.url}, allowing it to be fetched: ${g}`)}d.push(...h.childFrames);let m=async()=>{try{let g=await or({fn:()=>this.getRawA11yTreeForFrame({frameId:h.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:o}),codePath:`a11y-tree-fetch-child-${h.frameId}`,logObject:o,logger:i});u[h.frameId]=g}catch(g){i.warn({err:g,url:h.url,src:h.src},`Error getting raw a11y tree for child frame ${h.frameId}, continuing...`)}};p.push(m())}return await Promise.all(p),s.length>0&&this.logger.warn({warnings:s},"Got warnings when fetching the raw a11y graph"),u}async getRawA11yTreeForFrame({frameId:e,timeoutMs:t,logTimings:n}){let o;if(this.allowPartialAccessibilityTree)o=(await or({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:e??void 0},timeout:t,timeoutMsg:`Fetching the document tree took over ${t}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes;else{let a=(await or({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:e??void 0},timeout:he}),codePath:"cdp-get-root-ax-node",logObject:n,logger:this.logger})).node.backendDOMNodeId;o=(await or({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:a},timeout:t,timeoutMsg:`Fetching the document tree took over ${t}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:n,logger:this.logger})).nodes}if(!o||o.length<=1)throw new Error("Document is entirely empty");return{root:o[0],allNodes:o}}async getDOMTree({devicePixelRatio:e,signal:t,logger:n}){let o,i=0,a;for(;!o&&i<3;)try{if(o=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:this.computedStylesToFetch},timeout:ee}),!o||!o.documents.length)throw new Error("Got empty DOM tree")}catch(s){await te(it,t),i++,a=s}if(!o||!o.documents.length)throw n.error({err:a},"Fatal error fetching DOM tree"),new _("UserInfrastructureError",`Received an empty HTML snapshot from the browser. This usually indicates the page has crashed due to resource consumption issues or hanging client-side JavaScript code: ${a?.message}`);return HE({snapshot:o,devicePixelRatio:e,computedStylesToFetch:this.computedStylesToFetch,logger:n})}constructIframeRegexAsync(e,t){if(t.frameSrcRegex||t.frameUrlRegex)return;let n=sT(e);(async()=>{try{let o=await this.enricher?.constructIframeRegex(n);o?.srcRegex&&(t.frameSrcRegex=o.srcRegex),o?.urlRegex&&(t.frameUrlRegex=o.urlRegex),this.logger.debug({result:o,params:n},"Constructed iframe regex for cache")}catch(o){this.logger.warn({err:o},"Failed to construct iframe regex, skipping...")}})()}};function Lp(r){let e=[],t="";for(let n of r)n==="+"&&t?(e.push(t),t=""):t+=n;return e.push(t),e}var va=class r{static USER_AGENT=Cl;abortSignal=void 0;contextInitialized=!1;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;clientCallbacks;iconKnowledgeBase;cdpClient;debugData={logsPerPage:[],harPages:{},harEntries:{}};recentFrameNavigations={};requestRecorders={};mocks={};customHeaders=[];enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;originsVisited=new Set;viewport;videos=[];baseUrl;constructor({storage:e,enricher:t,browser:n,context:o,page:i,baseUrl:a,logger:s,userBrowserSettings:c,viewport:l,properties:u,clientCallbacks:d,iconKnowledgeBase:p}){if(Wy(c),this.storage=e,this.enricher=t,this.browser=n,this.context=o,this.page=i,this.baseUrl=a,this.logger=s,this.userControlledBrowserSettings=c,this.viewport=l,this.properties=u,this.clientCallbacks=d,u.recordVideo){let h=this.page.video();h&&this.videos.push(h)}this.iconKnowledgeBase=p}registerAbortSignal(e){this.abortSignal=e}async initialize({grantPermissions:e,runInitScripts:t}){if(this.contextInitialized)return;this.userControlledBrowserSettings.extraHeaders&&await this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders),e&&await this.context.grantPermissions(["clipboard-read","clipboard-write","microphone","camera","geolocation"]);let n={[Rl]:this.userBrowserSettings.visualActions},o=[this.context.addInitScript({content:Qb.htmlUtilsLibJs}),this.context.addInitScript({content:`window._MOMENTIC_BROWSER = true; window._MOMENTIC_FEATURE_FLAGS = ${JSON.stringify(n)}; window.addEventListener('load', (event) => { console.log('[MOMENTIC] Page loaded'); });`})],i=a=>this.handleNewPageEvent(a);this.context.on("page",i),this.handleNewPageEventHelper(this.page),this.context.on("close",()=>{this.context.off("page",i)}),await Promise.all(o),t&&await this.page.reload(),this.properties.systemDevicePixelRatio||(process.env.MOMENTIC_LOCAL_DEV==="1"&&C0()==="darwin"&&E0("system_profiler SPDisplaysDataType").toString().includes("Retina")?(x.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2):this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio)),this.cdpClient=await Ol.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout}),await this.initializeScreencast(),this.stateManager=new kl({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??!1,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=!0}async fixViewportForNewHeadless(){this.properties.isNewHeadless&&this.viewport&&await this.cdpClient.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}})}async initializeScreencast(){await this.fixViewportForNewHeadless(),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await this.cdpClient.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),this.cdpClient.on("Page.screencastFrame",e=>{let t=e.sessionId,n=Buffer.from(e.data,"base64");this.lastScreenshotForRecording=n,this.clientCallbacks?.onScreencastFrame?.(n,()=>{(async()=>{try{await this.cdpClient.send({method:"Page.screencastFrameAck",params:{sessionId:t}})}catch{}})()})}))}static async init(e){let t=await ME(e),n=new r(t);return await n.initialize({grantPermissions:!0,runInitScripts:!1}),n}static async fromExistingContext({context:e,storage:t,enricher:n,userBrowserSettings:o,properties:i,logger:a}){let s=e.pages()[0];if(!s)throw new Error("No page found in existing context");let c=s.viewportSize();c||(c=await s.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})));let l=s?.url(),u=new r({browser:e.browser(),context:e,page:s,baseUrl:l,logger:a,storage:t,enricher:n,userBrowserSettings:o,viewport:c,properties:i,clientCallbacks:void 0,iconKnowledgeBase:null});return await u.initialize({grantPermissions:!1,runInitScripts:!0}),u}async handleAvailableTabsChangeHelper(){try{let e=await wp(this.context,{getTitles:!0}),t=this.page.url();this.clientCallbacks?.onTabsChange?.(e,t)}catch(e){this.logger.error({err:e},"Error sending available tabs to frontend")}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500)}catch(e){this.logger.warn({err:e},"Error handling available tabs change")}}addToPageLoadPromises(e,t){let n=Np(),o=`${e}-${n}`,i=Date.now(),a=!1,s=async()=>{try{await W(t(),{signal:this.abortSignal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${e} timed out after ${this.pageLoadTimeout}ms`})}catch(c){c.name!=="AbortError"&&this.logger.error({err:c,promiseKey:o,codePath:e,duration:Date.now()-i},`Page load promise for code path ${e} encountered error`)}finally{delete this.pageLoadPromises[o],a=!0}};this.pageLoadPromises[o]=s().catch(()=>{}),a&&delete this.pageLoadPromises[o]}handlePageClosedEvent(e){if(this.page!==e){this.logger.debug({url:e.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let t=async()=>{if(this.closed)return;this.logger.info({url:e.url()},"Detected active page was closed, switching to another tab");let n=this.context.pages();for(let o=n.length-1;o>=0;o--){let i=n[o];if(!(!i||i.isClosed()||!ro(i.url()))){this.logger.info(`Automatically switching to tab ${o} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(o)});break}}};this.addToPageLoadPromises("page closed handler",async()=>t())}handleNewPageEvent(e){let t=e.url();if(this.logger.info({url:t},"Detected new page event, registering handlers and waiting for load to complete"),this.properties.recordVideo){let n=e.video();n&&this.videos.push(n)}try{this.handleNewPageEventHelper(e)}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....")}}handleNewPageEventHelper(e){let t=Np(),n="new-page-load-handler";e.on("close",a=>this.handlePageClosedEvent(a)),e.on("framenavigated",a=>this.handleFrameNavigationEvent(a)),e.on("crash",()=>{this.logger.error("Page crashed at the Playwright level!")});let o=this.context.pages().indexOf(e);e.on("console",a=>{gE(e,o,this.debugData,a,this.logger)});let i=async()=>{await yE(t,this.debugData,e),await e.route("**/*",async(a,s)=>{await mp({pageId:t,route:a,request:s,debugData:this.debugData,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks})}),await e.route("**/*",AE(this.customHeaders,this.logger)),yn&&await e.route("**/*",Ea),await this.loadFrameAndRecordUrl({root:e,codePath:n}),this.handleAvailableTabsChange()};this.addToPageLoadPromises(n,async()=>i())}async handleCollectSvgs(e){}handleFrameNavigationEvent(e){let t=e.url(),n=e.parentFrame()?"has-parent":"no-parent",o=`frame-navigation-handler-${t.slice(0,50)} (${n})`;if(!t||t==="about:blank"||!ro(t)||this.recentFrameNavigations[o]&&Date.now()-this.recentFrameNavigations[o]<1e3)return;this.recentFrameNavigations[o]=Date.now();let i=async()=>{try{if(e.isDetached())return;await this.loadFrameAndRecordUrl({root:e,codePath:o}),this.handleAvailableTabsChange(),!e.parentFrame()&&!e.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(e)}catch(s){this.logger.warn({err:s},"Failed to collect SVGs on page, continuing...")}})()},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(e))}catch(a){a.name!=="AbortError"&&this.logger.warn({err:a,url:t,codePath:o},"Failed to handle frame navigation event, continuing...")}};this.addToPageLoadPromises(o,async()=>i())}async injectKnowledgeBaseIntoBrowser(e){try{if(!this.iconKnowledgeBase||await e.evaluate(()=>!!window._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let n={};Object.keys(this.iconKnowledgeBase).forEach(o=>{this.iconKnowledgeBase[o]?.description&&(n[o]=this.iconKnowledgeBase[o].description)}),await e.evaluate(o=>{let i=window;i._MOMENTIC_ICON_KNOWLEDGE_BASE=o},n)}catch(t){this.logger.warn({err:t},"Failed to inject icon knowledge base into browser, continuing...")}}getBrowserCallbacks(){return{waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:e=>this.waitForUrl(e),getBrowserState:e=>this.getBrowserState(e),waitForDomStability:e=>this.waitForDOMStability(e),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(e){this.stateManager.setActiveFrameConfig(e)}async reset(e){for(this.abortSignal=void 0,this.debugData.logsPerPage=[],this.debugData.harPages={},this.debugData.harEntries={},this.pageLoadPromises={};this.videos.length>0;)this.videos.pop();await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:e.newUrl??this.baseUrl,initialNavigation:!0,loadTimeoutMs:e.timeout}),this.stateManager.reset()}async clearHighlights(){try{await W(Tp(this.getBrowserCallbacks()),{milliseconds:re})}catch(e){this.logger.debug({err:e},"Failed to clear highlights, continuing...")}}async cleanup(){this.abortSignal=void 0;try{this.originsVisited.clear(),await this.context.close(),await this.browser?.close(),this.browser=null}catch(e){this.logger.warn({err:e},"Error cleaning up browser, continuing...")}finally{this.browser=null}}get closed(){return this.context.pages().every(e=>e.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(e,t,n){let o=Date.now(),i=0,a=0;for(;Date.now()-o<Xd;){a++,n?.throwIfAborted();try{if(await Qe({fn:()=>{let c=window;return!!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:re,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),root:e,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){t.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await te(it),a%2===0&&t.warn("Still waiting for momentic browser scripts to load...")}throw new Error(`Failed to load momentic browser scripts on page ${e.url()}`)}async html(){let e=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(e,this.logger),Qe({root:e,fn:()=>{let t=window;if(!t?.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return t.getFullHtmlTree()},arg:void 0,timeout:ee,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let e=window,t=[],n=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(o=>{n.set(o,{value:o.style.getPropertyValue("caret-color"),priority:o.style.getPropertyPriority("caret-color")}),o.style.setProperty("caret-color","transparent","important")}),t.push(()=>{for(let[o,i]of n)o.style.setProperty("caret-color",i.value,i.priority)}),e._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let o of t)o();delete e._MOMENTIC_SCREENSHOT_CLEANUP}},void 0,"stabilizing page for screenshot")}catch(e){(!(e instanceof Error)||!e.message.includes("Execution context was destroyed"))&&this.logger.warn({err:e},"Failed to stabilize page before screenshot, continuing...")}}async removeScreenshotStabilization(){try{await this.evaluateFunctionInPage(()=>{window._MOMENTIC_SCREENSHOT_CLEANUP?.()},void 0,"removing screenshot stabilization")}catch{}}async screenshot(e){let{retries:t=1,stabilizeBeforeScreenshot:n=!1}=e,o=this.page.url();n&&await this.stabilizePageForScreenshot();let i=Date.now();try{await this.fixViewportForNewHeadless();let a=await this.screenshotHelper({...e,retries:t});if(a.byteLength>5e6)this.logger.error("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(a.length===0)throw new Error("Got empty screenshot");return a}catch(a){if(t<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:o},"Failed taking screenshot, retrying..."),await te(Zo),this.screenshot({...e,retries:t-1})}finally{Date.now()-i>1e3&&this.logger.warn({pageUrl:o,duration:Date.now()-i},"Screenshot took longer than expected"),n&&await this.removeScreenshotStabilization()}}async screenshotHelper({locator:e,quality:t,saveToDiskPath:n,timeout:o,respectActiveFrame:i,clearHighlights:a=!1}){a&&await this.clearHighlights(),i&&this.stateManager.frameConfig&&(e=await(await this.getActivePageOrFrame()).frameElement());let s=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:t,optimizeForSpeed:!0},timeout:o??he}),c=Buffer.from(s.data,"base64"),l=await pT.fromBuffer(c),{width:u,height:d}=this.getViewport()??{};if(u&&d&&(l.bitmap.width!==u||l.bitmap.height!==d)&&(c=await l.resize({w:u,h:d}).getBuffer("image/jpeg")),n&&A0(n,c),this.lastScreenshotForRecording=c,!e)return c;let p=await e.boundingBox({timeout:ee});if(!p)throw new Error("Attempted to screenshot an element that is not visible on the page");let{x:h,y:m,width:g,height:f}=p;if(!g||!f)throw new Error("Attempted to screenshot an element with zero width or height");h=Math.floor(h),m=Math.floor(m),g=Math.floor(g),f=Math.floor(f);try{let E=await pT.fromBuffer(c),S=E.bitmap.width,R=E.bitmap.height;h=Math.max(0,Math.min(h,S-1)),m=Math.max(0,Math.min(m,R-1)),g=Math.max(1,Math.min(g,S-h)),f=Math.max(1,Math.min(f,R-m)),c=await E.crop({x:h,y:m,w:g,h:f}).getBuffer("image/jpeg")}catch(E){throw new Error(`Failed taking element screenshot at coordinates (${h}, ${m}) with size (${g}, ${f}): ${E}`)}finally{"dispose"in e&&await e?.dispose()}return c}getViewport(){if(this.viewport)return this.viewport;let e=this.page.viewportSize();return e||null}async navigate({url:e,initialNavigation:t=!1,loadTimeoutMs:n=this.pageLoadTimeout}){Jb(e)&&(e=new URL(e,this.baseUrl).toString());let o=Date.now();t||(await this.waitForPageLoad(),await this.waitForDOMStability());let i=!1,a;for(let c=0;c<3;c++)try{await this.page.goto(e,{timeout:n,waitUntil:"domcontentloaded"}),i=!0;break}catch(l){if(a=l,this.abortSignal?.throwIfAborted(),this.logger.warn({err:l},`Error occurred during navigation${c===0?", retrying...":" (fatal)"}`),await te(it),a.message.includes("Timeout")&&a.message.includes("exceeded")||a.message.includes("net::ERR_CONNECTION_REFUSED"))break;await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:re})}if(!i)throw new _("UserInfrastructureError",a?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:e},`Navigation complete in ${Math.floor(Date.now()-o)}ms`);let s=this.url();if(lE.has(s))throw new _("UserInfrastructureError",`${e} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);if(t)try{await W(this.exposeRecordingBindings(),{milliseconds:this.pageLoadTimeout})}catch(c){c instanceof Error&&c.message.includes("already registered")||this.logger.error({err:c},"Failed to install Momentic libraries for action recording")}await this.fixViewportForNewHeadless()}async type(e,t={},n=!1){await this.directTypeHelper(e,t,n)}async getActiveElement(e){try{return await Qe({root:e,fn:()=>{let n=document.activeElement?.textContent??void 0;return n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]"),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n}:void 0},arg:void 0,timeout:re,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(t){this.logger.warn({err:t},"Failed to get active element");return}}async directTypeHelper(e,t={},n=!1){let o=await this.getActivePageOrFrame();await LE({root:o,text:e,options:t,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(o);if(n){let a=Date.now();for(;Date.now()-a<this.smartWaitingTimeout&&(!i||i.tag==="body");)await te(Zo),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(o);i||this.logger.warn("No active element found to type into, attempting anyways")}t.clearContent&&(t.forceClearContent||i?.tag==="input"||i?.tag==="textarea"?(process.platform==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(25)):this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...")),await this.page.keyboard.type(e,{delay:t.delay??Ag}),t.pressEnter&&await this.press("Enter",{})}async scrollIntoViewIfNeeded(e){try{await e.scrollIntoViewIfNeeded({timeout:he})}catch(t){this.logger.warn({err:t},"Failed to scroll into view, trying with raw JS");try{await e.evaluate(async n=>{let o=n.scrollTop;n.scrollIntoView(),await new Promise(a=>setTimeout(a,250));let i=Date.now();for(;Date.now()-i<1e3;){let a=n.scrollTop;if(a===o)break;o=a,await new Promise(s=>setTimeout(s,250))}},void 0,{timeout:he})}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...")}}}async highlightA11yId(e){try{let{resolution:t}=await this.createTargetFromA11yId({id:e,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(t.locator),!0}catch(t){return this.logger.debug({err:t,id:e},"Failed to highlight target"),!1}}async highlight(e){return Il({locator:e,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(e){try{let t=new URL(e).origin;if(t==="null")return;this.originsVisited.add(t)}catch(t){this.logger.warn({err:t},"Failed to record origin visited")}}async waitForPageLoad(){let e=Date.now(),t=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises),o=-1,i=0;for(;t.length!==0;){if(Date.now()-e>this.pageLoadTimeout&&this.logger.error({outstandingPromiseKeys:n,outstandingPromises:t},"Still waiting on page load promises"),Date.now()-o<20&&(i++,i>2)){this.logger.error({outstandingPromiseKeys:n,outstandingPromises:t},"Synchronous waiting loop detected, exiting page load wait");return}o=Date.now(),await Promise.allSettled(t),t=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises)}}async clearAuthState(e){await this.context.clearCookies();for(let o of this.originsVisited)this.logger.debug({origin:o},`Clearing data using CDP for origin ${o}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:o,storageTypes:"all"},timeout:re}),this.originsVisited.delete(o);let t=this.context.pages().indexOf(this.page),n=[...this.context.pages()];for(let o=0;o<n.length;o++){let i=n[o];if(i.isClosed())continue;let a=i.url();try{this.originsVisited.delete(new URL(a).origin)}catch{}await hE(i,this.logger),o!==t&&e.closeNonActiveTabs&&(this.logger.info(`Closing tab ${o} with URL ${a}`),await i.close())}}async loadAuthState(e){await this.waitForPageLoad(),await this.waitForDOMStability(),!e||Object.keys(e).length===0?await this.clearAuthState({closeNonActiveTabs:!1}):await this.loadAuthStateHelper(e),await this.refresh(),await this.waitForDOMStability()}async loadAuthStateHelper(e){let t=[];for(let i of e.cookies??[]){let a=await this.setCookie(i);t=t.concat(a)}this.logger.info(`Loaded ${e.cookies?.length??0} cookies`),await this.cdpClient.send({method:"DOMStorage.enable",params:void 0,timeout:re});let n=0;for(let i of e.origins??[])for(let a of i.localStorage)try{await this.cdpClient.send({timeout:re,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(i.origin).origin,isLocalStorage:!0},key:a.name,value:a.value}}),n++}catch(s){this.logger.warn({err:s,origin:i},"Failed to set local storage entry, continuing...");break}this.logger.info(`Loaded ${n} local storage entries`);let o=e.idb;o&&Object.keys(o).length>0&&(await mE(this.page,o,this.logger),this.logger.info(`Loaded ${Object.keys(o??{}).length} indexedDB databases`))}async saveAuthState(){let t=0,n=null;for(;t<=2;)try{await this.waitForPageLoad(),await this.waitForDOMStability();let o=await this.context.storageState();return o.idb=await pE(this.page,this.logger),o}catch(o){if(n=o,t++,t<=2){this.logger.warn({err:o,retryCount:t,maxRetries:2},`Error saving auth state, retrying (${t}/2)...`);let i=Math.pow(2,t)*100;await new Promise(a=>setTimeout(a,i))}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new _("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(e){return wp(this.context,e)}saveA11yDetailsToCache(e,t){t.content=e.content,t.name=e.name,t.role=e.role,t.numChildren=e.children.length,delete t.serializedForm,delete t.nodeOnlySerializedForm}async updateCacheWithNewNodeDetails({node:e,target:t,locator:n,startingBoundingBox:o,allowNotActionableNodesOverride:i,logger:a=this.logger}){if(e&&this.saveA11yDetailsToCache(e,t),t.frameCache=this.stateManager.saveAutoFrameCacheDetails(t.frameCache),n)try{let s=await this.fetchHtmlAttributes({locator:n,logger:a,startingBoundingBox:o,allowNotActionableNodesOverride:i});s?(t.generatedSelectors=s.generatedSelectors,t.serializedHtml=s.serializedHtml,t.nodeOnlySerializedHtml=s.nodeOnlySerializedHtml,t.hybridSelector=s.hybridSelector):a.warn("Got undefined HTML attributes when trying to update cache")}catch(s){if(s instanceof xr)throw a.warn({err:s},"Cache attributes disqualify found element"),s;a.warn({err:s},"Failed to fetch HTML attributes for target, continuing...")}try{await this.saveElementVisualAttributes({target:t,locator:n,logger:a,boundingBox:o})}catch(s){a.debug({err:s},"Failed to save element visual details, continuing...")}}async saveElementVisualAttributes({target:e,locator:t,logger:n,boundingBox:o}){if(!t)return{scrollPerformed:!1};if(!ep.includes(e?.role??""))return{scrollPerformed:!1};if(await this.scrollIntoViewIfNeeded(t),o||(o=await t.boundingBox({timeout:ee})),!o||!o.width||!o.height)return n.debug("Skipping visual attributes saving for element with no bounding box after action"),e.boundingBox=void 0,e.screenshotUrl=void 0,{scrollPerformed:!0};let{x:i=0,y:a=0,width:s=0,height:c=0}=o;if(e.boundingBox&&Math.abs(e.boundingBox.width-s)<1&&Math.abs(e.boundingBox.height-c)<1&&Math.abs((e.boundingBox.x??0)-i)<1&&Math.abs((e.boundingBox.y??0)-a)<1)return{scrollPerformed:!0};e.boundingBox=o;let l=await this.screenshot({locator:t,quality:75,retries:0});return e.screenshotUrl=await this.storage.uploadScreenshot(l),{scrollPerformed:!0}}async resolveAutoFrameCache(e){return this.stateManager.resolveAutoFrameCache(e)}async getElementRequiredValues({locator:e,requirements:t}){let n={};if(t?.boundingBox){let o=await e.boundingBox({timeout:ee});if(!o||!o.width||!o.height)throw new _("ActionFailureError","Element does not have a bounding box as required");n.boundingBox=o??void 0}if(t?.text){let o=await e.innerText({timeout:ee});n.text=o?.trim()}if(t?.attributes&&t.attributes.length>0){let o={};for(let i of t.attributes){let a=i.trim().toLowerCase();if(!(!a||nr.bannedAiRequiredCacheAttributes.includes(a)))try{let s=await e.getAttribute(a,{timeout:ee});s!==null&&(o[i]=s)}catch(s){this.logger.warn({err:s,attr:i},"Failed to fetch required attribute, continuing...")}}n.attributes=o}return n}async getAdditionalElementDetails({mainLocator:e,additionalElement:t,root:n,logger:o}){let i=this.stateManager.a11yIdToNodeMap[t.id];if(!i)return;let a=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:n,node:i});if(e.contentFrame!==a.contentFrame)return;let s=await this.fetchHtmlAttributes({locator:a,logger:o});if(!s?.generatedSelectors||s.generatedSelectors.length===0)return;let c={selectors:s.generatedSelectors};return t.requirements&&(c.requirements=await this.getElementRequiredValues({locator:a,requirements:t.requirements})),c}async getAdditionalElementsDetails({mainElementId:e,mainLocator:t,additionalElements:n,root:o,logger:i}){let a=new Set,s=[];for(let c of n)try{if(c.id===e||a.has(c.id))continue;let l=await this.getAdditionalElementDetails({mainLocator:t,additionalElement:c,root:o,logger:i});if(a.add(c.id),!l)continue;s.push(l)}catch(l){this.logger.warn({err:l,additionalElement:c},"Failed to fetch additional element details, continuing...")}return s}async updateCacheWithAdditionalRequirements({mainElementId:e,requirements:t,additionalElements:n,target:o,locator:i,root:a,logger:s}){t&&(o.requirements=await this.getElementRequiredValues({locator:i,requirements:t})),n&&(o.additionalElements=await this.getAdditionalElementsDetails({mainElementId:e,mainLocator:i,additionalElements:n,root:a,logger:s}))}async createTargetFromA11yId({id:e,description:t,targetSource:n,skipSaveToCache:o,logger:i=this.logger,requirements:a,additionalElements:s}){if(e<0)throw new _("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let c=this.stateManager.a11yIdToNodeMap[e];if(!c)throw new _("InternalWebAgentError",`Resolving target failed because id ${e} does not exist on the page. This generally indicates an incorrect element was targeted.`);let l=this.stateManager.frameConfig,u,d,p,h;if(this.userBrowserSettings.autoExpandIframes&&!l&&c.parentFrame){let S=c.parentFrame,{cache:R,config:A}=await this.stateManager.getAutoFrameDetailsFromHandle(S);d=R,p=A,u=A.frame,h="auto iframe"}else c.parentFrame&&l?(p=l,u=await this.getActivePageOrFrame(),h="hardcoded url already on the state manager"):(u=await this.getActivePageOrFrame(),h="should not be possible");let m=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:u,node:c}),g={id:e,inputDescription:t??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:ve(i),frameCache:d},f,E=!1;o||(p&&(i.info({frameConfigSource:h,frameConfig:lT(p)},"A11y node was resolved to a target within an iframe"),f=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(p),E=!0),await this.updateCacheWithNewNodeDetails({node:c,target:g,locator:m,logger:i,allowNotActionableNodesOverride:!0}),await this.updateCacheWithAdditionalRequirements({mainElementId:e,requirements:a,additionalElements:s,target:g,root:u,locator:m,logger:i}));try{return{resolution:{locator:m,a11yNode:c,displayString:c.getNodeOnlySerializedForm(),decisions:[]},target:g,frameConfig:p,frameConfigSource:h}}finally{E&&this.stateManager.setActiveFrameConfig(f)}}async resolveTarget(e,t,n={}){let{targetName:o,logger:i=this.logger,signal:a=this.abortSignal,allowNotActionableNodesOverride:s}=n;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let h,m=!1,g=Date.now();for(;Date.now()-g<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),m=!0;break}catch(f){h=f,await te(it,a)}if(!m)throw h}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,i,a);let l=Date.now(),u=0,d=0,p;for(;Date.now()-l<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),u++;let h=u===2||Date.now()-l>this.smartWaitingTimeout-2e3&&u%2===0;try{p=await this.resolveTargetHelper({root:c,target:t,primaryOnly:!0,logger:h?i:Xn,allowNotActionableNodesOverride:s,signal:a});break}catch(m){if(m instanceof Yi)break;if(m instanceof xr){if(d++,d>2)throw i.error({err:m},"Got multiple cache disqualification errors, giving up"),m;i.warn({err:m},"Got cache disqualification error, waiting and retrying resolution"),await te(it,a)}a?.throwIfAborted(),h&&i.info({err:m},`Could not resolve target using primary cache only (x${u})`),await te(it,a)}}return p||(p=await this.resolveTargetHelper({root:c,target:t,primaryOnly:!1,logger:i,signal:a,allowNotActionableNodesOverride:s}),t.targetSource="HEURISTIC_HEALED",t.targetUpdateTime=new Date().toISOString(),t.targetUpdateLoggerTags=ve(i),i.info({decisions:p.decisions},"Target resolution succeeded after waiting")),e?.details?.push({type:"TARGETING",name:o,elementLocationDecisions:p?.decisions??[],pageState:void 0,targetSource:t.targetSource,targetUpdateTime:t.targetUpdateTime}),p}async resolveTargetHelper({root:e,target:t,primaryOnly:n,logger:o,signal:i,allowNotActionableNodesOverride:a}){let s=ri(t),c=[],l=(await this.getBrowserState({logger:o,abortSignal:i,skipWait:!0,allowNotActionableNodesOverride:a})).serialize(),u;if(t.generatedSelectors||t.hybridSelector){let d;try{d=await this.resolveTargetWithPrimaryMethods({root:e,target:t,logger:o,allowNotActionableNodesOverride:a})}catch(p){u=p,p instanceof cn&&c.push(...p.decisions)}if(d)return{...d,pageState:void 0,decisions:[...c,...d.decisions]};n||(c.push({type:"CSS_SELECTOR",matched:!1,reason:u?.message,selectors:ri(t.generatedSelectors??[])}),t.generatedSelectors=void 0,t.hybridSelector=void 0)}if(n)throw u;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let d=await this.resolveTargetWithSecondaryMethods({root:e,tree:l,target:t,decisions:c,logger:o,signal:i,allowNotActionableNodesOverride:a});if(d)return d}throw new cn(`Could not find any relevant node given target: ${JSON.stringify(s)}`,c)}async resolveTargetWithPrimaryMethods({root:e,target:t,logger:n,allowNotActionableNodesOverride:o}){if(!t.nodeOnlySerializedHtml)throw new Yi("Insufficient data to resolve target using primary methods (missing node HTML)");let i=this.userControlledBrowserSettings.hybridSelectorMode,a={ldistThreshold:Qd,requireBoundingBox:!o,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requireMatchingBoundingBox:this.userControlledBrowserSettings.bustCacheOnBoundingBoxChange?t.boundingBox:void 0,requirements:t.requirements,additionalElements:t.additionalElements},{css:s,hybrid:c}=await Qe({fn:E=>window.evaluatePrimaryCaches(E),arg:{cssParams:{selectors:t.generatedSelectors??[],cachedElementSerialized:t.nodeOnlySerializedHtml,opts:a},hybridParams:i&&t.hybridSelector?{nodes:t.hybridSelector,cachedElementSerialized:t.nodeOnlySerializedHtml,opts:a}:void 0},root:e,timeout:ee,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"}),l,u,d=[];if(i==="prefer"&&c?.result){l=c.result;let E={type:"HYBRID_SELECTOR",matched:!0,logs:c.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};d.push(E),u="HYBRID_SELECTOR"}else if(s?.result){l=s.result;let E=`${l.workingSelectors.length} CSS selectors matched the following element: ${l.serializedElement}`,S=l.workingSelectors.slice(0,5);d.push({type:"CSS_SELECTOR",matched:!0,logs:s.logs,reason:E,selectors:S}),n.debug({reason:E,workingSelectors:S},"Resolved with CSS selectors"),u="CSS_SELECTOR"}else throw d.push({type:"CSS_SELECTOR",matched:!1,reason:s.logs.length===1?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:s.logs}),c&&d.push({type:"HYBRID_SELECTOR",matched:!1,reason:c.logs.length===1?"Hybrid evaluation failed":"No hybrid selectors matched",logs:c.logs}),new cn("Cache evaluation failed",d);let p,h,m;if(this.userBrowserSettings.visualActions){let E=l.mPath;if(!E)throw new Error("Found element did not have an mPath despite using visual actions");let S=E.join(" > ");p=e.locator(S),h=this.stateManager.getNodeUsingMPathSelector(S)}else if(l.dataMomenticId!==void 0)m=parseInt(l.dataMomenticId),h=this.stateManager.dataMomenticIdToNodeMap[m],"workingSelectors"in l?p=e.locator(l.workingSelectors[0]):p=e.locator(Er(m));else throw new _("InternalWebAgentError","Received an element resolution result with no identifying attributes");i&&t.hybridSelector&&(c?.logs.length===1?n.warn({hybridResult:c,cssResult:s,hybridMode:i},"Hybrid selector resolution rejected, continuing..."):c?.result?s?.result&&c?.result&&c.result.serializedElement!==s.result.serializedElement&&(this.userBrowserSettings.visualActions&&JSON.stringify(s.result.mPath)!==JSON.stringify(c.result.mPath)?n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i,mode:"visualActions"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing..."):s.result.dataMomenticId!==c.result.dataMomenticId&&n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i,mode:"dataMomenticId"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing...")):n.warn({originalCache:t,hybridResult:c,cssResult:s,hybridMode:i},"Hybrid selector resolution returned no eligible elements while CSS resolution did, continuing..."));let g=ri(t);await this.updateCacheWithNewNodeDetails({node:h,target:t,locator:p,logger:n,startingBoundingBox:l.boundingBox,allowNotActionableNodesOverride:o});let f=kp(g,t);return f&&Object.keys(f).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=ve(n),t.cacheResolutionUpdateSource=u,n.debug({diffs:f},"Updated cache")),{a11yNode:h,displayString:l.serializedElement,locator:p,decisions:d}}async resolveHardcodedCssSelector(e){let{ctx:t,selector:n,logger:o=this.logger,signal:i=this.abortSignal,timeoutMs:a=this.smartWaitingTimeout}=e,s=await this.getActivePageOrFrame(),c=Date.now(),l=0,u,d=[];for(;Date.now()-c<a;){i?.throwIfAborted(),l++;let p=s.locator(n),h;try{return await p.waitFor({state:"attached",timeout:re}),h=await Yr(p,o)??"",d.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),t?.details?.push({type:"TARGETING",name:e.targetName,elementLocationDecisions:d,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toISOString()}),{locator:p,displayString:h,decisions:d}}catch(m){let g=m.message;u=new _("ActionFailureError",`CSS selector '${n}' failed to resolve after ${l} attempts: ${g.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":g}`),await te(it,i)}}throw u}async resolveTargetWithSecondaryMethods(e){if(!e.target.boundingBox)return;let{x:t,y:n,width:o,height:i}=e.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(e);if(!a)return;let s=await a.locator.boundingBox({timeout:ee});if(!s){this.logger.debug({proposedNode:a.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:c,y:l,width:u,height:d}=s;if(Math.abs(u-o)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:o,newH:d,oldH:i,proposedNode:a.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!t||!n||!c||!l){this.logger.debug({oldX:t,oldY:n,newX:c,newY:l,proposedNode:a.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(c-t)>100||Math.abs(l-n)>100){this.logger.debug({newX:c,newY:l,oldX:t,oldY:n,proposedNode:a.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return a}async resolveTargetWithSecondaryMethodsHelper({root:e,target:t,decisions:n,logger:o,signal:i,allowNotActionableNodesOverride:a}){if(t.nodeOnlySerializedHtml&&t.nodeOnlySerializedHtml.trim().length<aE){let l="Refusing to attempt HTML comparison since the saved element is too short.";n.push({type:"HTML_DISTANCE",matched:!1,reason:l})}else if(t.nodeOnlySerializedHtml&&t.nodeOnlySerializedHtml.length>50)try{let l=await Qe({fn:d=>window.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:t.nodeOnlySerializedHtml},timeout:he,root:e,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"}),u=Math.floor(Qd*t.nodeOnlySerializedHtml.length);if(l&&l.closestDistance&&l.closestDistance>=u){let d=`Closest HTML candidate still has too far distance (${l.closestDistance}) from threshold (${u})`;n.push({type:"HTML_DISTANCE",matched:!1,reason:d,distance:l.closestDistance,closestElement:l.closestNodeSerialized})}else{if(l?.error)throw new Error(l.error);if(l?.dataMomenticId||l?.mPathSelector){let d=l.dataMomenticId?parseInt(l.dataMomenticId):void 0,p,h;if(d)p=this.stateManager.dataMomenticIdToNodeMap[d],h=e.locator(Er(d));else if(l.mPathSelector)p=this.stateManager.getNodeUsingMPathSelector(l.mPathSelector),h=e.locator(l.mPathSelector);else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let m=l.closestNodeSerialized??await Yr(h,o)??"unknown element";o.warn({result:l,originalTarget:t,displayString:m},"Resolved cached target to new node with pure html levenshtein distance");let g=ri(t);await this.updateCacheWithNewNodeDetails({node:p,target:t,locator:h,logger:o,startingBoundingBox:l.boundingBox,allowNotActionableNodesOverride:a});let f=kp(g,t);return f&&Object.keys(f).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=ve(o),t.cacheResolutionUpdateSource="HTML_DISTANCE",o.info({diffs:f,result:l},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:`Found an element on the page within ${u} string comparison distance of the saved element.`,logs:l.logs,distance:l.closestDistance,closestElement:m,savedElement:t.nodeOnlySerializedHtml}),{locator:h,a11yNode:p,displayString:m,decisions:n,pageState:void 0}}else throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(l)}`)}}catch(l){o.info({err:l},"Failed to find closest HTML node using levenshtein distance"),n.push({type:"HTML_DISTANCE",matched:!1,reason:`Error finding closest HTML node by string distance: ${l}`})}let s=t.screenshotUrl,c=t.role??"";if(s&&ep.includes(c))try{let l=await this.resolveTargetWithTemplateMatching({root:e,oldTarget:t,screenshotUrl:s,signal:i,allowNotActionableNodesOverride:a});return{...l,decisions:[...n,...l.decisions],pageState:void 0}}catch(l){i?.throwIfAborted(),n.push({type:"TEMPLATE_MATCHING",matched:!1,reason:`Error finding closest element using saved screenshot: ${l}`,elementImageUrl:s}),o.warn({err:l},"Did not find any close element using saved screenshot")}}async resolveTargetWithTemplateMatching({screenshotUrl:e,oldTarget:t,signal:n,allowNotActionableNodesOverride:o}){let i;if(!this.enricher)throw new Error("Enricher not available for screenshot resolution");let a=await this.screenshot({retries:0}),c=await(await fetch(e)).arrayBuffer(),l=I0(),u=await this.enricher.runTemplateMatching({id:l,searchImageBase64String:Buffer.from(c).toString("base64"),pageImageBase64String:a.toString("base64")},{signal:n}),{target:d,locator:p}=await this.getTargetFromPositionPercentages({percentX:u.x,percentY:u.y,allowNotActionableNodesOverride:o}),h=d.boundingBox?.width,m=d.boundingBox?.height;if(!h||!m)throw i="Rejecting target from screenshot due to no bounding box",new Error(i);let g=d.id,f=this.stateManager.a11yIdToNodeMap[g],E=ri(t);await this.updateCacheWithNewNodeDetails({target:t,node:f,locator:p,allowNotActionableNodesOverride:o});let S=kp(E,t);return S&&Object.keys(S).length>0&&(t.cacheResolutionUpdateTime=new Date().toISOString(),t.cacheResolutionUpdateLoggerTags=ve(this.logger),t.cacheResolutionUpdateSource="TEMPLATE_MATCHING",this.logger.info({id:l,diffs:S,templateMatch:u},"Updated cache after template matching resolution")),{locator:p,a11yNode:f,displayString:d.nodeOnlySerializedHtml??"",decisions:[{type:"TEMPLATE_MATCHING",matched:!0,reason:"Found element using screenshot",elementImageUrl:e}]}}async typeIntoTarget(e,t,n={}){await this.highlight(t.locator);let o=await t.locator.getAttribute("type",{timeout:re})??"",i=OE.some(a=>a===o.toLowerCase());return await vp({targetingResult:t,options:{force:n.force,relativePosition:n.relativePosition},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks()}),await this.page.waitForTimeout(150),this.directTypeHelper(e,n)}async click(e,t,n={}){return vp({targetingResult:e,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:t,browserCallbacks:this.getBrowserCallbacks()})}async waitForUrl({beforeUrl:e,matcher:t},n){let o=n?.timeout??this.pageLoadTimeout,i=Date.now(),a=!1,s=e;for(;Date.now()-i<o;){if(this.abortSignal?.throwIfAborted(),s=this.url(),vl(s,t,n)){a=!0;break}await te(it,this.abortSignal)}if(!a)throw new _("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${gb(t)} in ${o}ms.
3956
+ Current tab: ${s}`);try{await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"wait-for-url-step"})}catch(c){this.logger.warn({err:c},"Failed waiting for page load after URL change, continuing...")}}async dragAndDrop(e,t,n={}){await this.hover({locator:e}),await this.page.mouse.down();let o=await t.boundingBox({timeout:ee});if(!o)throw new _("ActionFailureError","Could not get bounding box of target element");let i=o.x+o.width/2,a=o.y+o.height/2,s=n.steps??5;await this.page.mouse.move(i,a,{steps:s}),await te(n.hoverSeconds?Math.min(n.hoverSeconds*1e3,he):500),await this.page.mouse.up()}async mouseDrag(e,t,n,o){o&&await this.hover({locator:o});let i=await(await this.getActivePageOrFrame()).evaluate(pp);i||(this.logger.warn("Could not get current mouse position before mouse drag action, defaulting to 0,0"),i={left:0,top:0}),await this.page.mouse.down(),await this.page.mouse.move(e+i.left,t+i.top,{steps:n}),await te(Zo),await this.page.mouse.up()}async hover(e){await this.highlight(e.locator),await io({func:async t=>{await this.scrollIntoViewIfNeeded(t.locator);let n=await t.locator.boundingBox({timeout:ee});if(!n)throw new Error("Attempted to hover over element with no bounding box");await this.page.mouse.move(n.x+n.width/2,n.y+n.height/2,{steps:3})},action:"hovering over element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,targetingResult:e,callbacks:this.getBrowserCallbacks()})}async focus(e){await this.highlight(e.locator),await io({func:t=>t.locator.focus({timeout:he}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async blur(e){if(!e){let t=await this.getActivePageOrFrame();await Qe({fn:()=>{let n=document.activeElement;n&&n.nodeType===1&&n.blur()},root:t,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:re,codePath:"blurring the active element"});return}await this.highlight(e.locator),await io({func:t=>t.locator.blur({timeout:he}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async selectOption(e,t,n=!1){await this.highlight(e.locator),await io({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async o=>{if(t.type==="INDEX"){let i=Number(t.index);if(isNaN(i))throw new _("UserConfigurationError",`Page index ${t.index} is not a number`)}await o.locator.selectOption({value:t.type==="VALUE"?t.value:void 0,label:t.type==="LABEL"?t.label:void 0,index:t.type==="INDEX"?Number(t.index):void 0},{force:n,timeout:ee})},targetingResult:e})}async press(e,t){let n=t.repeat??1;if(t.convertMeta){let o=Pl(e);o!==e&&(this.logger.info({key:e,convertedKey:o},"Converted platform dependent keys"),e=o)}for(let o=0;o<n;o++)await this.page.keyboard.press(e,{delay:t.delayMs??0})}async keyDown(e,t){if(t.convertMeta){let n=Pl(e);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of Lp(e))await this.page.keyboard.down(n)}async keyUp(e,t){if(t.convertMeta){let n=Pl(e);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of Lp(e))await this.page.keyboard.up(n)}async refresh(e){let t=e?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let n=0,o=2;for(;n<o;){n++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:t});break}catch(i){this.logger.warn({err:i,attempt:n},`Failed to reload page${n<o?", retrying...":", continuing..."}`)}}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"reload-step"}),await this.waitForDOMStability()}async getBrowserState(e){let{maxAttempts:t=2,logger:n=this.logger,skipWaitForPageLoad:o,allowNotActionableNodesOverride:i}=e,a=e.abortSignal??this.abortSignal,s=!i,c=i?!0:this.userControlledBrowserSettings.showZeroOpacityElements;o||await this.waitForPageLoad(),e.skipWait||await this.waitForDOMStability({logger:n,signal:a});let l=0,u;for(;l<t;){l++;try{return await W(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:a,logger:n,filterByViewport:e.filterByViewport,showZeroOpacityElements:c,flagNotActionableNodes:s}),{milliseconds:this.pageLoadTimeout*l,signal:a,message:"Getting browser state took too long"})}catch(d){if(a?.throwIfAborted(),u=d instanceof Error?d.message:`${d}`,l>=t)throw d;n.warn({err:d,url:this.url()},"Error getting a11y tree, retrying...")}}throw new _("ActionFailureError",`Getting page content failed after ${t} attempts. Error: ${u}`)}async getViewportOffsetDetails(e){let[t,n,o,i,a]=await Qe({root:e,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:ee,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return{upperBound:t,lowerBound:t+i,leftBound:n,rightBound:n+o,width:o,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??a}}async waitForDOMStability(e){let{logger:t=this.logger,timeout:n=this.smartWaitingTimeout,signal:o}=e??{},i={value:Date.now()},a=p=>{i.value=Date.now()},s=()=>a("DOM.documentUpdated");this.cdpClient.addListener("DOM.documentUpdated",s);let c=()=>a("Page.frameDetached");this.cdpClient.addListener("Page.frameDetached",()=>c);let l=()=>a("Page.frameStartedLoading");this.cdpClient.addListener("Page.frameStartedLoading",l);let u=()=>a("Page.navigatedWithinDocument");this.cdpClient.addListener("Page.navigatedWithinDocument",u);let d=()=>a("frameRequestedNavListener");this.cdpClient.addListener("Page.frameRequestedNavigation",d);try{await this.waitForDOMStabilityHelper(i,t,n,o)}finally{this.cdpClient.removeListener("DOM.documentUpdated",s),this.cdpClient.removeListener("Page.frameDetached",c),this.cdpClient.removeListener("Page.frameStartedLoading",l),this.cdpClient.removeListener("Page.navigatedWithinDocument",u),this.cdpClient.removeListener("Page.frameRequestedNavigation",d)}}async waitForDOMStabilityHelper(e,t,n,o){let i=!1,a=Date.now(),s,c={quality:25,retries:0,stabilizeBeforeScreenshot:!0},l=!1,u=0;for(;Date.now()-a<n;){if(o?.throwIfAborted(),await te(Zo,this.abortSignal),s)try{let d=await this.screenshot(c);if(!d.equals(s)){s=d,l=!1;continue}l=!0}catch(d){u++,u%3===0&&t.warn({err:d,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}else try{s=await this.screenshot(c)}catch(d){u++,u%3===0&&t.warn({err:d,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}if(!(Date.now()-e.value<iE)){i=!0;break}}i||t.warn({duration:Date.now()-a,stable:{a11y:i,screenshot:l}},"A11y wait phase completed due to timeout, continuing...")}async clickUsingVisualCoordinates(e,t){let{x:n,y:o}=e;this.logger.debug({x:n,y:o},"Executing mouse click with visual coordinates"),await this.waitForPageLoad(),await this.page.mouse.click(n,o,{button:t.rightClick?"right":"left",clickCount:t.doubleClick?2:1})}async dragAndDropUsingVisualCoordinates(e,t,n){await this.page.mouse.move(e.x,e.y,{steps:3}),await this.page.mouse.down(),await this.page.mouse.move(t.x,t.y,{steps:3}),await te(n.hoverSeconds?Math.min(n.hoverSeconds*1e3,Zd):500),await this.page.mouse.up()}async hoverUsingVisualCoordinates(e){await this.page.mouse.move(e.x,e.y)}async mouseDragUsingVisualCoordinates(e,t,n,o){await this.hoverUsingVisualCoordinates(o);let i=await(await this.getActivePageOrFrame()).evaluate(pp);i||(this.logger.warn("Could not get current mouse position before mouse drag action, defaulting to 0,0"),i={left:0,top:0}),await this.page.mouse.down(),await this.page.mouse.move(e+i.left,t+i.top,{steps:n}),await te(Zo),await this.page.mouse.up()}async getElementLocation(e){let t=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:!0,includePaintOrder:!0},timeout:ee}),n=await W(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:he});process.platform==="darwin"&&n===1&&(n=nE);let o=t.documents[0],i=o.layout,a=o.nodes,s=a.nodeName||[],c=a.backendNodeId||[],l=i.nodeIndex,u=i.bounds,d=-1;for(let S=0;S<s.length;S++)if(c[S]===e){d=l.indexOf(S);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${e}`);let[p=0,h=0,m=0,g=0]=u[d];p/=n,h/=n,m/=n,g/=n;let f=p+m/2,E=h+g/2;return{centerX:f,centerY:E}}async scrollVertical(e){return Ap({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:0,directionX:null,deltaY:e?Math.abs(e):null,directionY:e&&e>0?"down":"up",signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})}async scrollHorizontal(e){return Ap({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:e?Math.abs(e):null,directionX:e&&e>0?"right":"left",deltaY:0,directionY:null,signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})}async goForward(){await this.waitForPageLoad(),await this.page.goForward({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-forward"})}async goBack(){await this.waitForPageLoad(),await this.page.goBack({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-back"})}async reinitializeCDPClient(e){await this.cdpClient.reinitialize(e),await this.initializeScreencast()}async stopScreencast(){if(this.clientCallbacks?.onScreencastFrame)try{await this.cdpClient.send({method:"Page.stopScreencast",params:{}})}catch{}}async changeActivePage(e,t){await this.stopScreencast(),this.recordUrlVisited(e.url()),this.page=e,await this.reinitializeCDPClient(t??this.pageLoadTimeout)}async createNewTab(e,t){let n=await this.context.newPage();await this.changeActivePage(n,t?.loadTimeoutMs),await this.navigate({url:e,initialNavigation:!0,...t}),this.handleAvailableTabsChange()}async switchToPage(e,t){let n=!0,o,i=Date.now();for(;n||t?.retry&&Date.now()-i<this.smartWaitingTimeout;){n=!1;try{await this.switchToPageHelper(e,t);return}catch(a){this.logger.warn({err:a},"Error switching to page, retrying..."),o=a,await te(it)}}throw o}async switchToPageHelper(e,t){let n=this.context.pages().map((i,a)=>({page:i,url:i.url(),index:a})),o;if(e.type==="INDEX"){let i=Number(e.index);if(isNaN(i))throw new _("UserConfigurationError",`Page index ${e.index} is not a number`);if(i<0||i>=n.length)throw new Error(`Page index ${e.index} exceeds the number of available pages: ${JSON.stringify(n.map(a=>a.url))}`);o=n[i]}else{let i=n.filter(a=>e.type==="SUBSTRING"?a.url.includes(e.substring):a.url.match(e.pattern));i.length>1&&this.logger.warn(`More than one page matches the page switch criteria: ${JSON.stringify(i.map(a=>a.url))}`),o=i[i.length-1]}if(!o)throw new Error(`Could not find matching page using criteria: ${JSON.stringify(e)}.
3957
+ Available pages:${JSON.stringify(n.map(i=>i.url))}`);if(!ro(o.url,this.logger)){this.logger.error(`Refusing to switch to page with invalid URL: ${o.url}`);return}this.logger.info(`Switching to tab ${o.index} with url ${o.url}`),await this.changeActivePage(o.page,t?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:o.page,signal:this.abortSignal,codePath:"switch-to-tab-step"}),this.handleAvailableTabsChange()}async setCookie(e){let t;return typeof e=="string"?t=Ws(e):t=[e],await this.context.addCookies(t),t}async setLocalStorage(e,t){let n;for(let o=0;o<2;o++)try{await this.evaluateFunctionInPage(([i,a])=>{i&&localStorage.setItem(i,a||"")},[e,t],`setting local storage key ${e}`);return}catch(i){n=i}if(n)throw n}async solveCaptcha(){await this.getBrowserState({allowNotActionableNodesOverride:!0});let e;for(let s of Object.values(this.stateManager.a11yIdToNodeMap))if(s.role==="image"&&s.name.toLowerCase().includes("captcha")){if(!s.backendNodeId)continue;e=await this.stateManager.getLocatorFromBackendId(this.page,s.backendNodeId);break}if(!e){let s=await(await this.getActivePageOrFrame()).solveRecaptchas();if(!s.captchas||!s.captchas.length)throw new Error("No captchas found on the page");return}let t=await e.screenshot({type:"jpeg",animations:"allow",caret:"hide",quality:100,timeout:ee}),n=await fetch("https://api.2captcha.com/createTask",{method:"POST",body:JSON.stringify({clientKey:Qo,task:{type:"ImageToTextTask",body:t.toString("base64"),case:!0},languagePool:"en"})});if(!n.ok){let s=`Captcha solver API returned error response: ${n.statusText}`;throw this.logger.error({text:await n.text()},s),new Error(s)}let{taskId:o}=await n.json(),i=Date.now(),a="";for(;Date.now()-i<sE;){await te(2500);let s=await fetch("https://api.2captcha.com/getTaskResult",{method:"POST",body:JSON.stringify({clientKey:Qo,taskId:o})});if(!s.ok){let l=`Captcha solution API returned error response: ${s.statusText}`;throw this.logger.error({text:await s.text()},l),new Error(l)}let c=await s.json();if(c.errorId){let l=`Captcha solution API returned error ID ${c.errorId}`;throw this.logger.error(l),new Error(l)}if(c.status==="ready"){a=c.solution.text;break}}if(!a)throw new Error("Captcha solution timed out");return a}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0,{handle:!1}),await this.context.exposeBinding("captureTargetedEvent",({frame:e},t)=>{this.transformer&&uT({event:t,frame:e,transformer:this.transformer,enricher:this.enricher,lastScreenshotForRecording:this.lastScreenshotForRecording?.toString("base64"),logger:this.logger})},{handle:!1}),await this.context.exposeBinding("captureKeystroke",async(e,t)=>{this.transformer&&this.transformer.recordKeystroke(t)})}async startRecordingCrons(e){if(e.aborted)return;let t,n=(await this.getOpenPages()).map(c=>c.url),o=0,i=!1,a=async()=>{if(e.aborted||o>8){clearTimeout(t);return}i=!0;let c;try{c=(await this.getOpenPages()).map(u=>u.url),o=0}catch(u){this.logger.debug({err:u},"Failed getting new open pages during recording tab switch cron, skipping..."),o++;return}let l=this.url();for(let u=c.length-1;u>=n.length;u--){let d=c[u];ro(d,this.logger)&&d!==l&&this.logger.info({lastActivePages:n,currentUrl:l,newOpenPages:c},"Auto-following new tab during recording"),await this.switchToPage({type:"INDEX",index:String(u)});break}n=c};t=setInterval(async()=>{if(!i){i=!0;try{await a()}catch(c){this.logger.error({err:c},"Error while checking pages during recording")}finally{i=!1}}},it);let s=async()=>{clearInterval(t)};e.addEventListener("abort",s,{once:!0})}async startRecording(e,t,n){this.logger.debug({isClickToRecord:n},"Starting recording mode in Chrome browser"),await this.startRecordingCrons(e),await this.page.evaluate(i=>{let a=window;a._MOMENTIC_RECORDING_ACTIVE=!0,a._MOMENTIC_CLICK_RECORD_ACTIVE=i},n),this.transformer=t,await this.injectKnowledgeBaseIntoBrowser(this.page);let o=async()=>{this.transformer=void 0,this.lastScreenshotForRecording=void 0;try{await this.page.evaluate(()=>{let i=window;i._MOMENTIC_RECORDING_ACTIVE=!1,i._MOMENTIC_CLICK_RECORD_ACTIVE=!1})}catch{}};e.addEventListener("abort",o,{once:!0})}async getSelectOptions(e){return await e.evaluate(n=>Array.from(n.querySelectorAll("option")).map(i=>({value:i.value,label:i.label})),void 0,{timeout:re})}getActivePage(){return this.page}async getActivePageOrFrame(){let e=await this.stateManager.resolveActiveFrameConfig({});return e?(await this.loadFrameAndRecordUrl({root:e.frame,signal:this.abortSignal,codePath:"get-active-frame-locator"}),e.frame):this.page}async loadFrameAndRecordUrl({root:e,signal:t,codePath:n}){let o=this.pageLoadTimeout,i=e.url();if(!i.includes("chrome-error://")){try{await to({promiseGenerator:async()=>e.waitForLoadState("domcontentloaded",{timeout:o}),signal:t,codePath:`loadFrameAndRecordUrlDomContentLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){let s=a;if(s.name==="AbortError")throw new _("UserInfrastructureError",`The page with URL ${Mt(i,50)} did not load within the configured timeout (${o}ms): ${s}`);if(!s.message.includes("detached"))throw s}try{await to({promiseGenerator:async()=>e.waitForLoadState("load",{timeout:o}),signal:t,codePath:`loadFrameAndRecordUrlPageLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){this.logger.warn({err:a,codePath:n,url:i},"Failed waiting for current frame to load, continuing...")}this.recordUrlVisited(e.url())}}async getCondensedHtml(e){let{skipWait:t=!1}=e??{};return t||(await this.waitForPageLoad(),await this.waitForDOMStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let e=await this.getRawCondensedHtml();return w0.html(e,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1})}async getRawCondensedHtml(){let e=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(e,this.logger,this.abortSignal);let{result:t,error:n}=await Qe({fn:()=>window.getCondensedHtmlTree(),root:e,arg:void 0,timeout:he,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!t)throw new _("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return t}registerDialogHandler(e){let t=async n=>{try{e==="ACCEPT"?await n.accept():await n.dismiss()}catch(o){this.logger.warn({err:o},"Failed to handle dialog")}};this.page.once("dialog",t)}async evaluateFunctionInAllFrames(e,t){return this.stateManager.executeFunctionInAllFrames(e,t)}async evaluateFunctionInPage(e,t,n,o=he){let i=await this.getActivePageOrFrame();return Qe({root:i,fn:e,arg:t,timeout:o,waitForPageLoad:()=>this.waitForPageLoad(),codePath:n})}async evaluateCodeInPage({code:e,fragment:t,context:n,timeoutMs:o=gn}){let i=vE(),a={code:e,fragment:t,context:n},{result:s}=await W(this.page.evaluate(i,a),{milliseconds:o,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new _("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${o/1e3} seconds`)},signal:this.abortSignal});return s}async getDomNodeFromPixelPosition(e,t){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:he});let n;try{n=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:e,y:t},timeout:re})}catch(o){throw this.logger.error({err:o,x:e,y:t},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return n}async getDomNodeFromPositionPercentages(e,{percentX:t,percentY:n}){if(t<0||t>1||n<0||n>1)throw new _("UserConfigurationError","Invalid percent passed to percentage location");let{width:o,height:i,upperBound:a,leftBound:s}=await this.getViewportOffsetDetails(e),c=Math.round(a),l=Math.round(s),u=Math.ceil(o*t),d=Math.ceil(i*n),p=u+l,h=d+c;return this.getDomNodeFromPixelPosition(p,h)}async highlightFromPositionPercentages(e){let t=await this.getActivePageOrFrame(),n;try{n=await this.getDomNodeFromPositionPercentages(t,e)}catch{}return n?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:re,params:{highlightConfig:zE,backendNodeId:n.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:re,method:"Overlay.hideHighlight",params:{backendNodeId:n?.backendNodeId}})}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:re})}catch{}}async getTargetFromPositionPercentages(e){let t=await this.getActivePageOrFrame(),n=await this.getDomNodeFromPositionPercentages(t,e);return this.getTargetFromBackendNodeId({root:t,backendNodeId:n.backendNodeId,allowNotActionableNodesOverride:e.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:e,backendNodeId:t,allowNotActionableNodesOverride:n}){let o=this.stateManager.domGraph?.backendIdToNode[t];if(!o)throw new Error("No DOM node was found with the given backend ID");let i=o?.attributes[Kr],a=parseInt(i??"");if(!i||isNaN(a))throw new Error("No data-momentic-id was found on the DOM node");let s=e.locator(Er(a)),c;o.bounds.x!==null&&o.bounds.y!==null&&(c={x:o.bounds.x,y:o.bounds.y,width:o.bounds.width??0,height:o.bounds.height??0});let l=await this.fetchHtmlAttributes({locator:s,logger:this.logger,startingBoundingBox:c,allowNotActionableNodesOverride:n}),u={id:-1,dataMomenticId:a,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...l};return this.logger.debug({target:u},"Tied backend ID to HTML node"),{target:u,locator:s}}async performTargetRedirection(e,t,n){try{return await this.scrollIntoViewIfNeeded(e),await W(this.performTargetRedirectionHelper(e,t,n),{milliseconds:ee})??{locator:e}}catch(o){return t.warn({err:o},"Error performing target redirection, using original element"),{locator:e}}}async performTargetRedirectionHelper(e,t,n){let o=Date.now(),i=await Yr(e,t);if(n===void 0&&(n=await e.boundingBox({timeout:ee})??void 0),!n){t.error(`Attempted to click on element with no bounding box: ${i}`);return}let{x:a,y:s,width:c,height:l}=n,u=this.getViewport();if(a<0||s<0||!u||a+c>u.width||s+l>u.height){t.info("Skipping locator redirection because the element is outside the viewport");return}let d=await this.getActivePageOrFrame(),{dataMomenticId:p,mPathSelector:h,error:m,serializedElement:g,point:f,force:E,logs:S}=await e.evaluate(A=>{let v=window;if(!v.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return v.performTargetRedirection(A)},void 0,{timeout:re}),R=Date.now()-o;if(m){t.warn({error:m,serializedElement:g,duration:R,force:E,logs:S},"Got error from target redirection with bounding box");return}else{if(p)return t.info({newDataMomenticId:p,serializedElement:g,duration:R,force:E,logs:S},"Redirected target to new element with bounding box with data-momentic-id"),{locator:d.locator(Er(p)),hints:{clickableXY:f,force:E}};if(h)return t.info({newMPathSelector:h,serializedElement:g,duration:R,force:E,logs:S},"Redirected target to new element with bounding box with mPath"),{locator:d.locator(h),hints:{clickableXY:f,force:E}};if(f)return t.info({point:f,serializedElement:g,duration:R,force:E,logs:S},"Chose specific visible point on original element"),{locator:e,hints:{clickableXY:f,force:E}};if(E)return t.info({serializedElement:g,duration:R,force:E,logs:S},"Forcing click on original element"),{locator:e,hints:{force:E}}}}async fetchHtmlAttributes({locator:e,logger:t=this.logger,startingBoundingBox:n,allowNotActionableNodesOverride:o}){let{hybridSelectorMode:i,showZeroOpacityElements:a}=this.userControlledBrowserSettings,s=await e.evaluate((c,l)=>{let u=window;return u.generateHtmlCacheAttributes?u.generateHtmlCacheAttributes(c,l):{warnings:[],error:"generateHtmlCacheAttributes is not defined"}},{generateHybridSelector:i==="test"||i==="prefer",startingBoundingBox:n,showZeroOpacityElements:o?!0:a},{timeout:he});if("error"in s&&s.error)throw s.error.startsWith(eE)?new Ps(s.error):s.error.startsWith(tE)?new Os(s.error):new Error(s.error);return s.warnings.length&&t.warn(s,"Got warnings while generating HTML attributes for target"),s.attributes}async moveMouseFromPositionPercentages(e,t){let n=this.getViewport();if(!n)throw new Error("Cannot move mouse using percentages without viewport");let o=Math.ceil(n.width*e),i=Math.ceil(n.height*t);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseMoved",x:o,y:i,button:"left",clickCount:0}}),{x:o,y:i}}async clickMouseFromPositionPercentages(e,t,n){let o=this.getViewport();if(!o)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(o.width*t),a=Math.ceil(o.height*n);await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:e==="down"?"mousePressed":"mouseReleased",x:i,y:a,button:"left",clickCount:e==="down"?1:0},timeout:re})}async scrollFromPositionPercentages(e,t,n,o){let i=this.getViewport();if(!i)throw new Error("Cannot scroll using percentages without viewport");let a=Math.ceil(i.width*e),s=Math.ceil(i.height*t);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseWheel",deltaX:a,deltaY:s,x:n,y:o}}),{deltaX:a,deltaY:s}}canSolveCaptchas(){return!!Qo}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(e){setTimeout(()=>{try{e.cleanup()}catch(t){this.logger.debug({err:t,filePath:e.filePath},"Failed cleaning up file after upload")}},3e4),await this.setFileChooserHandlerHelper(e)}logToUserConsole(e,t,n,...o){let i=this.context.pages().indexOf(e);i=i===-1?0:i,up(e,this.debugData,i,{type:t,text:`[MOMENTIC] ${n}`,args:o})}async setFileChooserHandlerHelper({filePath:e,filename:t}){if(!Dl(e)){let c=`File chooser triggered after the source file ${e} has been cleaned up, ignoring...`;this.logger.error(c),this.logToUserConsole(this.page,"error",c);return}let n=t?.trim()||x0(e),o=T0(e),i=_0(e),a=xd[i];this.page.once("filechooser",async c=>{this.logger.info({filePath:e,fileName:n},"File chooser triggered");try{if(!Dl(e))throw new Error(`File chooser triggered after the source file ${e} has been cleaned up, ignoring...`);await c.setFiles({name:n,buffer:o,mimeType:R0.getType(e)||"application/octet-stream"},{timeout:Zd})}catch(l){this.logger.error({err:l},"Error handling file chooser"),this.logToUserConsole(this.page,"error",l.message)}});let s=o.toString("base64");await this.evaluateFunctionInPage(({fileName:c,base64Data:l,mimeType:u})=>{let d=window;d.momenticFileName=c,d.momenticFileBase64=l;let p=atob(l),h=new Array(p.length);for(let g=0;g<p.length;g++)h[g]=p.charCodeAt(g);let m=new Uint8Array(h);d.MomenticFile=class extends Blob{kind="file";name=d.momenticFileName;constructor(){super([m],{type:u})}isSameEntry(g){return g.name===this.name}queryPermission(g){return console.info("[MOMENTIC] MomenticFile.queryPermission called"),Promise.resolve("granted")}remove(){return console.info("[MOMENTIC] MomenticFile.remove called"),Promise.resolve()}async requestPermission(g){return console.info("[MOMENTIC] MomenticFile.requestPermission called"),Promise.resolve("granted")}async getFile(){console.info("[MOMENTIC] MomenticFile.getFile called");let g=new Blob([m]);return new File([g],d.momenticFileName,{type:u})}async createSyncAccessHandle(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}async createWritable(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}},d.showOpenFilePicker=async()=>(console.info("[MOMENTIC] showOpenFilePicker called"),[new d.MomenticFile])},{fileName:n,base64Data:s,mimeType:a},"set-file-chooser-handler",5e3)}getSerializedFormFromA11yId(e){return this.stateManager.a11yIdToNodeMap[e]?.getNodeOnlySerializedForm()}retrieveAndClearDebugData(){this.cdpClient.loadEventLogs.length>0&&(this.cdpClient.loadEventLogs=[]);let t={...this.debugData};return this.debugData={logsPerPage:[],harPages:{},harEntries:{}},t}async copy(e){try{await this.evaluateFunctionInPage(t=>navigator.clipboard.writeText(t),e,"copying text to clipboard")}catch(t){if(t instanceof Error&&t.message.includes("Document is not focused")){await this.evaluateFunctionInPage(()=>{document.activeElement||document.body.focus()},void 0,"focusing on body element before copying to clipboard"),await this.press("Tab",{}),await this.press("Shift+Tab",{}),await this.evaluateFunctionInPage(n=>navigator.clipboard.writeText(n),e,"copying text to clipboard");return}throw t}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:!0})}async registerRequestListener(e){return this.page.waitForResponse(t=>{let n=t.request();return e.matches({url:n.url(),method:n.method()})})}registerRequestRecorder(e,t,n){this.requestRecorders[e]={onRequestStart:(o,i)=>{t.matches({url:i.request.url,method:i.request.method})&&n.onRequestStart(o,i)},onRequestComplete:(o,i)=>{t.matches({url:i.request.url,method:i.request.method})&&n.onRequestComplete(o,i)}}}removeRequestRecorder(e){delete this.requestRecorders[e]}setHeader(e,t,n){this.customHeaders.push({key:e.toLowerCase(),value:t,matcher:n})}registerMock(e,t,n,o){let i=e??Np();return this.mocks[i]={matcher:t,generateResponse:n,fetchOriginalResponse:o},i}removeMock(e){if(!e){this.mocks={};return}delete this.mocks[e]}async setOfflineMode(e){await this.context.setOffline(e)}get smartWaitingTimeout(){return this.userControlledBrowserSettings.smartWaitingTimeoutMs??oE}get userBrowserSettings(){return ri(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??Xd}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let e=Ml();for(let t of e)if(!(!Dl(t)||!dT(t).isDirectory()||!["new","pending","completed"].some(o=>{let i=M0(t,o);return Dl(i)&&dT(i).isDirectory()&&v0(i).length>0})))return t}};import SF from"fetch-cookie";import{cloneDeep as Fw}from"lodash-es";var Ul=class{increment(e,t,n){}gauge(e,t){}distribution(e,t,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function P0(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 Fl(r,e){let t=P0(r);return!e||Object.keys(e).length===0?t:{...e,...t}}var zT="=",Gl=";",qp=",";var HT=8192;var ai={};bx(ai,{getKeyPairs:()=>uk,parseKeyPairsIntoRecord:()=>dk,parsePairKeyValue:()=>GT,serializeKeyPairs:()=>ck});Ce();var lk=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 ck(r){return r.reduce(function(e,t){var n=""+e+(e!==""?qp:"")+t;return n.length>HT?e:n},"")}function uk(r){return r.getAllEntries().map(function(e){var t=lk(e,2),n=t[0],o=t[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Gl+o.metadata.toString()),i})}function GT(r){var e=r.split(Gl);if(!(e.length<=0)){var t=e.shift();if(t){var n=t.indexOf(zT);if(!(n<=0)){var o=decodeURIComponent(t.substring(0,n).trim()),i=decodeURIComponent(t.substring(n+1).trim()),a;return e.length>0&&(a=Up(e.join(Gl))),{key:o,value:i,metadata:a}}}}}function dk(r){return typeof r!="string"||r.length===0?{}:r.split(qp).map(function(e){return GT(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,t){return e[t.key]=t.value,e},{})}Ce();var jl;(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"})(jl||(jl={}));var pk=",",mk=["OTEL_SDK_DISABLED"];function hk(r){return mk.indexOf(r)>-1}var gk=["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 fk(r){return gk.indexOf(r)>-1}var Sk=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function yk(r){return Sk.indexOf(r)>-1}var Kp=1/0,Yp=128,bk=128,Ek=128,Xp={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:Ne.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:Kp,OTEL_ATTRIBUTE_COUNT_LIMIT:Yp,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:Kp,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:Yp,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:Kp,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:Yp,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:bk,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:Ek,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:jl.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 Tk(r,e,t){if(!(typeof t[r]>"u")){var n=String(t[r]);e[r]=n.toLowerCase()==="true"}}function vk(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 Ak(r,e,t,n){n===void 0&&(n=pk);var o=t[r];typeof o=="string"&&(e[r]=o.split(n).map(function(i){return i.trim()}))}var wk={ALL:Ne.ALL,VERBOSE:Ne.VERBOSE,DEBUG:Ne.DEBUG,INFO:Ne.INFO,WARN:Ne.WARN,ERROR:Ne.ERROR,NONE:Ne.NONE};function Rk(r,e,t){var n=t[r];if(typeof n=="string"){var o=wk[n.toUpperCase()];o!=null&&(e[r]=o)}}function jT(r){var e={};for(var t in Xp){var n=t;switch(n){case"OTEL_LOG_LEVEL":Rk(n,e,r);break;default:if(hk(n))Tk(n,e,r);else if(fk(n))vk(n,e,r);else if(yk(n))Ak(n,e,r);else{var o=r[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function ht(){var r=jT(process.env);return Object.assign({},Xp,r)}function VT(r){return r>=48&&r<=57?r-48:r>=97&&r<=102?r-87:r-55}function Vl(r){for(var e=new Uint8Array(r.length/2),t=0,n=0;n<r.length;n+=2){var o=VT(r.charCodeAt(n)),i=VT(r.charCodeAt(n+1));e[t++]=o<<4|i}return e}var WT="1.25.1";var Ck="deployment.environment";var xk="process.runtime.name";var _k="service.name";var Mk="service.instance.id";var Ik="telemetry.sdk.name",Pk="telemetry.sdk.language",Ok="telemetry.sdk.version";var $T=Ck;var qT=xk;var Wl=_k;var KT=Mk;var Ma=Ik,Ia=Pk,Pa=Ok;var Lk="nodejs";var YT=Lk;var si,$l=(si={},si[Ma]="opentelemetry",si[qT]="node",si[Ia]=YT,si[Pa]=WT,si);var Nk=9,kk=6,Dk=Math.pow(10,kk),Uk=Math.pow(10,Nk);function XT(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*Dk);return[t,n]}function JT(r){return r[0]*Uk+r[1]}function Oa(r){return r[0]*1e6+r[1]/1e3}var lo;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(lo||(lo={}));var ZT=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 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},Bk=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))},QT=function(){function r(e,t){this._callback=e,this._that=t,this._isCalled=!1,this._deferred=new ZT}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,Bk([this._that],Fk(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 ir;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(ir||(ir={}));var Tt;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Tt||(Tt={}));var zk=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 pme=function(r){zk(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function ev(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}Ce();var ar;(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"})(ar||(ar={}));var tv=function(){function r(){this.kind=ar.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 ae;(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"})(ae||(ae={}));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};function Gk(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 Jp=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=Gk(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=ev(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 Zp=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=ar.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Jp(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 Jp(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 Jp(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:Tt.HISTOGRAM,dataPoints:n.map(function(i){var a=Hk(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ae.GAUGE||e.type===ae.UP_DOWN_COUNTER||e.type===ae.OBSERVABLE_GAUGE||e.type===ae.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}();Ce();var Qp=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},em=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))},tm=function(){function r(e,t,n,o){e===void 0&&(e=new jk),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 jk=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,em([n,this._counts.length-t],Qp(this._counts.slice(t)),!1)),o.splice.apply(o,em([0,t],Qp(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(em([],Qp(this._counts),!1))},r}();var rv=52,Vk=2146435072,Wk=1048575,rm=1023,ql=-rm+1,Kl=rm,La=Math.pow(2,-1022);function Yl(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&Vk)>>20;return n-rm}function Xl(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&Wk)*Math.pow(2,32);return o+n}function Na(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function ov(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}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)}}(),An=function(r){$k(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var av=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<La)return this._minNormalLowerBoundaryIndex();var t=Yl(e),n=this._rightShift(Xl(e)-1,rv);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new An("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new An("overflow: "+e+" is > maximum lower boundary: "+n);return Na(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=ql>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return Kl>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var sv=function(){function r(e){this._scale=e,this._scaleFactor=Na(Math.LOG2E,e),this._inverseFactor=Na(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=La)return this._minNormalLowerBoundaryIndex()-1;if(Xl(e)===0){var t=Yl(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 An("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return La;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new An("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 ql<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(Kl+1<<this._scale)-1},r}();var lv=-10,cv=20,qk=Array.from({length:31},function(r,e){return e>10?new sv(e-10):new av(e-10)});function nm(r){if(r>cv||r<lv)throw new An("expected scale >= "+lv+" && <= "+cv+", got: "+r);return qk[r+10]}var Kk=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},Jl=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}(),Yk=20,Xk=160,om=2,Jk=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=Xk),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 tm),u===void 0&&(u=new tm),d===void 0&&(d=nm(Yk)),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<om&&(V.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+om),this._maxSize=om)}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=ov(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=nm(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=Jl.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=Jl.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 Jl(0,-1);var o=t-n;return new Jl(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 uv=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=ar.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new Jk(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:Tt.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=Kk(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ae.GAUGE||e.type===ae.UP_DOWN_COUNTER||e.type===ae.OBSERVABLE_GAUGE||e.type===ae.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 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},im=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=XT(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var dv=function(){function r(){this.kind=ar.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new im(e)},r.prototype.merge=function(e,t){var n=Oa(t.sampleTime)>=Oa(e.sampleTime)?t:e;return new im(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=Oa(t.sampleTime)>=Oa(e.sampleTime)?t:e;return new im(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Tt.GAUGE,dataPoints:n.map(function(i){var a=Zk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var 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},ka=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 am=function(){function r(e){this.monotonic=e,this.kind=ar.SUM}return r.prototype.createAccumulation=function(e){return new ka(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new ka(t.startTime,this.monotonic,o,t.reset):new ka(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 ka(t.startTime,this.monotonic,o,!0):new ka(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Tt.SUM,dataPoints:n.map(function(i){var a=Qk(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var co=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)}}(),Ur=function(){function r(){}return r.Drop=function(){return bv},r.Sum=function(){return Ev},r.LastValue=function(){return Tv},r.Histogram=function(){return vv},r.ExponentialHistogram=function(){return eD},r.Default=function(){return tD},r}();var pv=function(r){co(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 tv,e}(Ur);var mv=function(r){co(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case ae.COUNTER:case ae.OBSERVABLE_COUNTER:case ae.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new am(!0),e.NON_MONOTONIC_INSTANCE=new am(!1),e}(Ur);var hv=function(r){co(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 dv,e}(Ur);var gv=function(r){co(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 Zp([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(Ur);var fv=function(r){co(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 Zp(this._boundaries,this._recordMinMax)},e}(Ur);var Sv=function(r){co(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 uv(this._maxSize,this._recordMinMax)},e}(Ur);var yv=function(r){co(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case ae.COUNTER:case ae.UP_DOWN_COUNTER:case ae.OBSERVABLE_COUNTER:case ae.OBSERVABLE_UP_DOWN_COUNTER:return Ev;case ae.GAUGE:case ae.OBSERVABLE_GAUGE:return Tv;case ae.HISTOGRAM:return t.advice.explicitBucketBoundaries?new fv(t.advice.explicitBucketBoundaries):vv}return V.warn("Unable to recognize instrument type: "+t.type),bv},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(Ur);var bv=new pv,Ev=new mv,Tv=new hv,vv=new gv,eD=new Sv,tD=new yv;Ce();function Zl(){return"unknown_service:"+process.argv0}var wn=function(){return wn=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},wn.apply(this,arguments)},rD=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())})},nD=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}}},oD=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},sm=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 V.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[Wl]=Zl(),e[Ia]=$l[Ia],e[Ma]=$l[Ma],e[Pa]=$l[Pa],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&V.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 rD(this,void 0,void 0,function(){return nD(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=wn(wn({},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=oD(a,2),l=c[0],u=c[1];return wn(wn(wn(wn({},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 uo;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE",r[r.LOWMEMORY=2]="LOWMEMORY"})(uo||(uo={}));Ce();var iD=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())})},aD=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}}},lm=function(){return ir.CUMULATIVE},Av=function(r){switch(r){case ae.COUNTER:case ae.OBSERVABLE_COUNTER:case ae.GAUGE:case ae.HISTOGRAM:case ae.OBSERVABLE_GAUGE:return ir.DELTA;case ae.UP_DOWN_COUNTER:case ae.OBSERVABLE_UP_DOWN_COUNTER:return ir.CUMULATIVE}},wv=function(r){switch(r){case ae.COUNTER:case ae.HISTOGRAM:return ir.DELTA;case ae.GAUGE:case ae.UP_DOWN_COUNTER:case ae.OBSERVABLE_UP_DOWN_COUNTER:case ae.OBSERVABLE_COUNTER:case ae.OBSERVABLE_GAUGE:return ir.CUMULATIVE}};function sD(){var r=ht(),e=r.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?lm:e==="delta"?Av:e==="lowmemory"?wv:(V.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."),lm)}function lD(r){return r!=null?r===uo.DELTA?Av:r===uo.LOWMEMORY?wv:lm:sD()}function cD(r){return r?.aggregationPreference?r.aggregationPreference:function(e){return Ur.Default()}}var Rv=function(){function r(e,t){this._otlpExporter=e,this._aggregationSelector=cD(t),this._aggregationTemporalitySelector=lD(t?.temporalityPreference)}return r.prototype.export=function(e,t){this._otlpExporter.export([e],t)},r.prototype.shutdown=function(){return iD(this,void 0,void 0,function(){return aD(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}();Ce();Ce();var uD=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},Cv=1e4,xv=5,_v=1e3,Mv=5e3,Iv=1.5;function Da(r){r===void 0&&(r={});var e={};return Object.entries(r).forEach(function(t){var n=uD(t,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):V.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function cm(r,e){return r.endsWith("/")||(r=r+"/"),r+e}function um(r){try{var e=new URL(r);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return V.warn("Could not parse export URL: '"+r+"'"),r}}function dm(r){return typeof r=="number"?r<=0?pm(r,Cv):r:dD()}function dD(){var r,e=Number((r=ht().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&r!==void 0?r:ht().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?pm(e,Cv):e}function pm(r,e){return V.warn("Timeout must be greater than 0",r),e}function Pv(r){var e=[429,502,503,504];return e.includes(r)}function Ov(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 Lv=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 QT(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=dm(e.timeoutMillis),this.onInit(e)}return r.prototype.export=function(e,t){if(this._shutdownOnce.isCalled){t({code:lo.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){t({code:lo.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){t({code:lo.SUCCESS})}).catch(function(n){t({code:lo.FAILED,error:n})})},r.prototype._export=function(e){var t=this;return new Promise(function(n,o){try{V.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 V.debug("shutdown started"),this.onShutdown(),this.forceFlush()},r}();Ce();import*as mm from"url";import*as ec from"http";import*as tc from"https";import*as Nv from"zlib";import{Readable as mD}from"stream";var Rn;(function(r){r.NONE="none",r.GZIP="gzip"})(Rn||(Rn={}));var pD=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)}}(),li=function(r){pD(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 Ql=function(){return Ql=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},Ql.apply(this,arguments)};function hm(r,e,t,n,o){var i=r.timeoutMillis,a=new mm.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 g=new li("Request Timeout");o(g)}else s>=14?l.destroy():l.abort()},i),p={hostname:a.hostname,port:a.port,path:a.pathname,method:"POST",headers:Ql({"Content-Type":t},r.headers),agent:r.agent},h=a.protocol==="http:"?ec.request:tc.request,m=function(g,f){switch(g===void 0&&(g=xv),f===void 0&&(f=_v),l=h(p,function(S){var R="";S.on("data",function(A){return R+=A}),S.on("aborted",function(){if(u){var A=new li("Request Timeout");o(A)}}),S.on("end",function(){if(u===!1)if(S.statusCode&&S.statusCode<299)V.debug("statusCode: "+S.statusCode,R),n(),clearTimeout(d),clearTimeout(c);else if(S.statusCode&&Pv(S.statusCode)&&g>0){var A=void 0;f=Iv*f,S.headers["retry-after"]?A=Ov(S.headers["retry-after"]):A=Math.round(Math.random()*(Mv-f)+f),c=setTimeout(function(){m(g-1,f)},A)}else{var v=new li(S.statusMessage,S.statusCode,R);o(v),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(S){if(u){var R=new li("Request Timeout",S.code);o(R)}else o(S);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var S=new li("Request Timeout");o(S)}clearTimeout(d),clearTimeout(c)}),r.compression){case Rn.GZIP:{l.setHeader("Content-Encoding","gzip");var E=hD(e);E.on("error",o).pipe(Nv.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};m()}function hD(r){var e=new mD;return e.push(r),e.push(null),e}function gm(r){if(r.httpAgentOptions&&r.keepAlive===!1){V.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(r.keepAlive===!1||!r.url))try{var e=new mm.URL(r.url),t=e.protocol==="http:"?ec.Agent:tc.Agent;return new t(Ql({keepAlive:!0},r.httpAgentOptions))}catch(n){V.error("collector exporter failed to create http agent. err: "+n.message);return}}function fm(r){if(r)return r;var e=ht().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||ht().OTEL_EXPORTER_OTLP_COMPRESSION;return e===Rn.GZIP?Rn.GZIP:Rn.NONE}Ce();var gD=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)}}(),rc=function(r){gD(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&&V.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,Da(t.headers),ai.parseKeyPairsIntoRecord(ht().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=gm(t),i.compression=fm(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){V.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;hm(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}(Lv);function Dv(r){var e=BigInt(1e9);return BigInt(r[0])*e+BigInt(r[1])}function fD(r){var e=Number(BigInt.asUintN(32,r)),t=Number(BigInt.asUintN(32,r>>BigInt(32)));return{low:e,high:t}}function Uv(r){var e=Dv(r);return fD(e)}function SD(r){var e=Dv(r);return e.toString()}var yD=typeof BigInt<"u"?SD:JT;function kv(r){return r}function Fv(r){if(r!==void 0)return Vl(r)}var bD={encodeHrTime:Uv,encodeSpanContext:Vl,encodeOptionalSpanContext:Fv};function Bv(r){var e,t;if(r===void 0)return bD;var n=(e=r.useLongBits)!==null&&e!==void 0?e:!0,o=(t=r.useHex)!==null&&t!==void 0?t:!1;return{encodeHrTime:n?Uv:yD,encodeSpanContext:o?kv:Vl,encodeOptionalSpanContext:o?kv:Fv}}var ED=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 zv(r){return{name:r.name,version:r.version}}function ci(r){return Object.keys(r).map(function(e){return Hv(e,r[e])})}function Hv(r,e){return{key:r,value:Gv(e)}}function Gv(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(Gv)}}:e==="object"&&r!=null?{kvlistValue:{values:Object.entries(r).map(function(t){var n=ED(t,2),o=n[0],i=n[1];return Hv(o,i)})}}:{}}function jv(r){return{attributes:ci(r.attributes),droppedAttributesCount:0}}Ce();function Wv(r,e){var t=Bv(e);return{resource:jv(r.resource),schemaUrl:void 0,scopeMetrics:TD(r.scopeMetrics,t)}}function TD(r,e){return Array.from(r.map(function(t){return{scope:zv(t.scope),metrics:t.metrics.map(function(n){return vD(n,e)}),schemaUrl:t.scope.schemaUrl}}))}function vD(r,e){var t={name:r.descriptor.name,description:r.descriptor.description,unit:r.descriptor.unit},n=CD(r.aggregationTemporality);switch(r.dataPointType){case Tt.SUM:t.sum={aggregationTemporality:n,isMonotonic:r.isMonotonic,dataPoints:Vv(r,e)};break;case Tt.GAUGE:t.gauge={dataPoints:Vv(r,e)};break;case Tt.HISTOGRAM:t.histogram={aggregationTemporality:n,dataPoints:wD(r,e)};break;case Tt.EXPONENTIAL_HISTOGRAM:t.exponentialHistogram={aggregationTemporality:n,dataPoints:RD(r,e)};break}return t}function AD(r,e,t){var n={attributes:ci(r.attributes),startTimeUnixNano:t.encodeHrTime(r.startTime),timeUnixNano:t.encodeHrTime(r.endTime)};switch(e){case zt.INT:n.asInt=r.value;break;case zt.DOUBLE:n.asDouble=r.value;break}return n}function Vv(r,e){return r.dataPoints.map(function(t){return AD(t,r.descriptor.valueType,e)})}function wD(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ci(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 RD(r,e){return r.dataPoints.map(function(t){var n=t.value;return{attributes:ci(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 CD(r){switch(r){case ir.DELTA:return 1;case ir.CUMULATIVE:return 2}}function $v(r,e){return{resourceMetrics:r.map(function(t){return Wv(t,e)})}}var Sm={serializeRequest:function(r){var e=$v(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 qv="0.52.1";var Kv=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)}}(),ui=function(){return ui=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},ui.apply(this,arguments)},Yv="v1/metrics",xD="http://localhost:4318/"+Yv,_D={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+qv},MD=function(r){Kv(e,r);function e(t){var n=r.call(this,t,Sm,"application/json")||this;return n.headers=ui(ui(ui(ui({},n.headers),_D),ai.parseKeyPairsIntoRecord(ht().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),Da(t?.headers)),n}return e.prototype.getDefaultUrl=function(t){return typeof t.url=="string"?t.url:ht().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?um(ht().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):ht().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?cm(ht().OTEL_EXPORTER_OTLP_ENDPOINT,Yv):xD},e}(rc),Xv=function(r){Kv(e,r);function e(t){return r.call(this,new MD(t),t)||this}return e}(Rv);var di;(function(r){r[r.DELTA=0]="DELTA",r[r.CUMULATIVE=1]="CUMULATIVE"})(di||(di={}));var Fr;(function(r){r[r.HISTOGRAM=0]="HISTOGRAM",r[r.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",r[r.GAUGE=2]="GAUGE",r[r.SUM=3]="SUM"})(Fr||(Fr={}));Ce();var ID=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)}}(),Jv=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())})},Zv=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}}},PD=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},OD=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))},LD=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 Qv(r){return r!=null}function nc(r){var e=Object.keys(r);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(t){return[t,r[t]]})))}function eA(r){var e,t;return r.name+":"+((e=r.version)!==null&&e!==void 0?e:"")+":"+((t=r.schemaUrl)!==null&&t!==void 0?t:"")}var ym=function(r){ID(e,r);function e(t){var n=r.call(this,t)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function Cn(r,e){var t,n=new Promise(function(i,a){t=setTimeout(function(){a(new ym("Operation timed out."))},e)});return Promise.race([r,n]).then(function(o){return clearTimeout(t),o},function(o){throw clearTimeout(t),o})}function tA(r){return Jv(this,void 0,void 0,function(){var e=this;return Zv(this,function(t){return[2,Promise.all(r.map(function(n){return Jv(e,void 0,void 0,function(){var o,i;return Zv(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 rA(r){return r.status==="rejected"}function bm(r,e){var t=[];return r.forEach(function(n){t.push.apply(t,OD([],PD(e(n)),!1))}),t}function nA(r,e){var t,n;if(r.size!==e.size)return!1;try{for(var o=LD(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 oA(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 iA(r,e){return r.toLowerCase()===e.toLowerCase()}Ce();var sr;(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"})(sr||(sr={}));var Em=function(){function r(){this.kind=sr.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}();Ce();var pe;(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"})(pe||(pe={}));function Br(r,e,t){var n,o,i,a;return kD(r)||V.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:zt.DOUBLE,advice:(a=t?.advice)!==null&&a!==void 0?a:{}}}function aA(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 sA(r,e){return iA(r.name,e.name)&&r.unit===e.unit&&r.type===e.type&&r.valueType===e.valueType}var ND=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function kD(r){return r.match(ND)!=null}var DD=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 UD(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 oc=function(){function r(e,t,n,o){n===void 0&&(n=!0),o===void 0&&(o=UD(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=oA(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 ic=function(){function r(e,t){this._boundaries=e,this._recordMinMax=t,this.kind=sr.HISTOGRAM}return r.prototype.createAccumulation=function(e){return new oc(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 oc(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 oc(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:Fr.HISTOGRAM,dataPoints:n.map(function(i){var a=DD(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===pe.GAUGE||e.type===pe.UP_DOWN_COUNTER||e.type===pe.OBSERVABLE_GAUGE||e.type===pe.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}();Ce();var Tm=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},vm=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))},Am=function(){function r(e,t,n,o){e===void 0&&(e=new FD),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 FD=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,vm([n,this._counts.length-t],Tm(this._counts.slice(t)),!1)),o.splice.apply(o,vm([0,t],Tm(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(vm([],Tm(this._counts),!1))},r}();var lA=52,BD=2146435072,zD=1048575,wm=1023,ac=-wm+1,sc=wm,Ua=Math.pow(2,-1022);function lc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=(t&BD)>>20;return n-wm}function cc(r){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,r);var t=e.getUint32(0),n=e.getUint32(4),o=(t&zD)*Math.pow(2,32);return o+n}function Fa(r,e){return r===0||r===Number.POSITIVE_INFINITY||r===Number.NEGATIVE_INFINITY||Number.isNaN(r)?r:r*Math.pow(2,e)}function uA(r){return r--,r|=r>>1,r|=r>>2,r|=r>>4,r|=r>>8,r|=r>>16,r++,r}var HD=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)}}(),xn=function(r){HD(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Error);var pA=function(){function r(e){this._shift=-e}return r.prototype.mapToIndex=function(e){if(e<Ua)return this._minNormalLowerBoundaryIndex();var t=lc(e),n=this._rightShift(cc(e)-1,lA);return t+n>>this._shift},r.prototype.lowerBoundary=function(e){var t=this._minNormalLowerBoundaryIndex();if(e<t)throw new xn("underflow: "+e+" is < minimum lower boundary: "+t);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new xn("overflow: "+e+" is > maximum lower boundary: "+n);return Fa(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=ac>>this._shift;return this._shift<2&&e--,e},r.prototype._maxNormalLowerBoundaryIndex=function(){return sc>>this._shift},r.prototype._rightShift=function(e,t){return Math.floor(e*Math.pow(2,-t))},r}();var mA=function(){function r(e){this._scale=e,this._scaleFactor=Fa(Math.LOG2E,e),this._inverseFactor=Fa(Math.LN2,-e)}return r.prototype.mapToIndex=function(e){if(e<=Ua)return this._minNormalLowerBoundaryIndex()-1;if(cc(e)===0){var t=lc(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 xn("overflow: "+e+" is > maximum lower boundary: "+t)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return Ua;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new xn("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 ac<<this._scale},r.prototype._maxNormalLowerBoundaryIndex=function(){return(sc+1<<this._scale)-1},r}();var hA=-10,gA=20,GD=Array.from({length:31},function(r,e){return e>10?new mA(e-10):new pA(e-10)});function Rm(r){if(r>gA||r<hA)throw new xn("expected scale >= "+hA+" && <= "+gA+", got: "+r);return GD[r+10]}var jD=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},uc=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}(),VD=20,WD=160,Cm=2,fA=function(){function r(e,t,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),t===void 0&&(t=WD),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 Am),u===void 0&&(u=new Am),d===void 0&&(d=Rm(VD)),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<Cm&&(V.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+Cm),this._maxSize=Cm)}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=uA(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=Rm(t)}},r.prototype._minScale=function(e){var t=Math.min(this.scale,e.scale),n=uc.combine(this._highLowAtScale(this.positive,this.scale,t),this._highLowAtScale(e.positive,e.scale,t)),o=uc.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 uc(0,-1);var o=t-n;return new uc(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 xm=function(){function r(e,t){this._maxSize=e,this._recordMinMax=t,this.kind=sr.EXPONENTIAL_HISTOGRAM}return r.prototype.createAccumulation=function(e){return new fA(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:Fr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=jD(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===pe.GAUGE||e.type===pe.UP_DOWN_COUNTER||e.type===pe.OBSERVABLE_GAUGE||e.type===pe.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}();Ce();var $D=Fp("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function SA(r){return r.setValue($D,!0)}Ce();function yA(){return function(r){V.error(qD(r))}}function qD(r){return typeof r=="string"?r:JSON.stringify(KD(r))}function KD(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 YD=yA();function dc(r){try{YD(r)}catch{}}var bA="1.30.1";var XD="process.runtime.name";var JD="service.name";var ZD="telemetry.sdk.name",QD="telemetry.sdk.language",eU="telemetry.sdk.version";var EA=XD;var TA=JD;var Ba=ZD,za=QD,Ha=eU;var tU="nodejs";var vA=tU;var pi,po=(pi={},pi[Ba]="opentelemetry",pi[EA]="node",pi[za]=vA,pi[Ha]=bA,pi);function Ga(r){r.unref()}var lU=9,cU=6,uU=Math.pow(10,cU),ffe=Math.pow(10,lU);function mo(r){var e=r/1e3,t=Math.trunc(e),n=Math.round(r%1e3*uU);return[t,n]}function mi(r){return r[0]*1e6+r[1]/1e3}var ja;(function(r){r[r.SUCCESS=0]="SUCCESS",r[r.FAILED=1]="FAILED"})(ja||(ja={}));Ce();function AA(r,e){return new Promise(function(t){ii.with(SA(ii.active()),function(){r.export(e,function(n){t(n)})})})}var wA={_export:AA};var dU=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},pc=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=mo(Date.now())},r.prototype.setStartTime=function(e){this.startTime=e},r.prototype.toPointValue=function(){return this._current},r}();var _m=function(){function r(){this.kind=sr.LAST_VALUE}return r.prototype.createAccumulation=function(e){return new pc(e)},r.prototype.merge=function(e,t){var n=mi(t.sampleTime)>=mi(e.sampleTime)?t:e;return new pc(e.startTime,n.toPointValue(),n.sampleTime)},r.prototype.diff=function(e,t){var n=mi(t.sampleTime)>=mi(e.sampleTime)?t:e;return new pc(t.startTime,n.toPointValue(),n.sampleTime)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Fr.GAUGE,dataPoints:n.map(function(i){var a=dU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},r}();var pU=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},hi=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 mc=function(){function r(e){this.monotonic=e,this.kind=sr.SUM}return r.prototype.createAccumulation=function(e){return new hi(e,this.monotonic)},r.prototype.merge=function(e,t){var n=e.toPointValue(),o=t.toPointValue();return t.reset?new hi(t.startTime,this.monotonic,o,t.reset):new hi(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 hi(t.startTime,this.monotonic,o,!0):new hi(t.startTime,this.monotonic,o-n)},r.prototype.toMetricData=function(e,t,n,o){return{descriptor:e,aggregationTemporality:t,dataPointType:Fr.SUM,dataPoints:n.map(function(i){var a=pU(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},r}();var ho=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)}}(),lr=function(){function r(){}return r.Drop=function(){return PA},r.Sum=function(){return OA},r.LastValue=function(){return LA},r.Histogram=function(){return NA},r.ExponentialHistogram=function(){return mU},r.Default=function(){return hU},r}();var RA=function(r){ho(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 Em,e}(lr);var CA=function(r){ho(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.createAggregator=function(t){switch(t.type){case pe.COUNTER:case pe.OBSERVABLE_COUNTER:case pe.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new mc(!0),e.NON_MONOTONIC_INSTANCE=new mc(!1),e}(lr);var xA=function(r){ho(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 _m,e}(lr);var _A=function(r){ho(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 ic([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(lr);var hc=function(r){ho(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 ic(this._boundaries,this._recordMinMax)},e}(lr);var MA=function(r){ho(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 xm(this._maxSize,this._recordMinMax)},e}(lr);var IA=function(r){ho(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype._resolve=function(t){switch(t.type){case pe.COUNTER:case pe.UP_DOWN_COUNTER:case pe.OBSERVABLE_COUNTER:case pe.OBSERVABLE_UP_DOWN_COUNTER:return OA;case pe.GAUGE:case pe.OBSERVABLE_GAUGE:return LA;case pe.HISTOGRAM:return t.advice.explicitBucketBoundaries?new hc(t.advice.explicitBucketBoundaries):NA}return V.warn("Unable to recognize instrument type: "+t.type),PA},e.prototype.createAggregator=function(t){return this._resolve(t).createAggregator(t)},e}(lr);var PA=new RA,OA=new CA,LA=new xA,NA=new _A,mU=new MA,hU=new IA;var kA=function(r){return lr.Default()},DA=function(r){return di.CUMULATIVE};var Mm=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())})},Im=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}}},UA=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},gU=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))},FA=function(){function r(e){var t,n,o;this._shutdown=!1,this._aggregationSelector=(t=e?.aggregationSelector)!==null&&t!==void 0?t:kA,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:DA,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 Mm(this,void 0,void 0,function(){var t,n,o,i,a,s;return Im(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(gU([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],UA(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return t=UA.apply(void 0,[c.sent()]),n=t[0],o=t.slice(1),i=n.errors.concat(bm(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(bm(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},r.prototype.shutdown=function(e){return Mm(this,void 0,void 0,function(){return Im(this,function(t){switch(t.label){case 0:return this._shutdown?(V.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,Cn(this.onShutdown(),e.timeoutMillis)];case 3:t.sent(),t.label=4;case 4:return this._shutdown=!0,[2]}})})},r.prototype.forceFlush=function(e){return Mm(this,void 0,void 0,function(){return Im(this,function(t){switch(t.label){case 0:return this._shutdown?(V.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,Cn(this.onForceFlush(),e.timeoutMillis)];case 3:return t.sent(),[2]}})})},r}();Ce();var fU=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)}}(),gc=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())})},fc=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}}},SU=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(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))},Pm=function(r){fU(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 gc(this,void 0,void 0,function(){var t;return fc(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,Cn(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),t instanceof ym?(V.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(dc(t),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var t,n;return gc(this,void 0,void 0,function(){var o,i,a,s,c,l;return fc(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=V).error.apply(l,yU(["PeriodicExportingMetricReader: metrics collection errors"],SU(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(),V.debug("Error while resolving async portion of resource: ",s),dc(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,wA._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==ja.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),Ga(this._interval)},e.prototype.onForceFlush=function(){return gc(this,void 0,void 0,function(){return fc(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 gc(this,void 0,void 0,function(){return fc(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}(FA);Ce();Ce();function Sc(){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)},bU=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())})},EU=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}}},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},yc=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 V.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[TA]=Sc(),e[za]=po[za],e[Ba]=po[Ba],e[Ha]=po[Ha],e))},Object.defineProperty(r.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&V.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 bU(this,void 0,void 0,function(){return EU(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=TU(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 BA=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}();Ce();var go=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)}}(),bc=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=ii.active()),typeof e!="number"){V.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===zt.INT&&!Number.isInteger(e)&&(V.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,mo(Date.now()))},r}();var zA=function(r){go(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}(bc);var HA=function(r){go(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.add=function(t,n,o){if(t<0){V.warn("negative value provided to counter "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(bc);var GA=function(r){go(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}(bc);var jA=function(r){go(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.record=function(t,n,o){if(t<0){V.warn("negative value provided to histogram "+this._descriptor.name+": "+t);return}this._record(t,n,o)},e}(bc);var Ec=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 VA=function(r){go(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Ec);var WA=function(r){go(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Ec);var $A=function(r){go(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Ec);function Va(r){return r instanceof Ec}var qA=function(){function r(e){this._meterSharedState=e}return r.prototype.createGauge=function(e,t){var n=Br(e,pe.GAUGE,t),o=this._meterSharedState.registerMetricStorage(n);return new GA(o,n)},r.prototype.createHistogram=function(e,t){var n=Br(e,pe.HISTOGRAM,t),o=this._meterSharedState.registerMetricStorage(n);return new jA(o,n)},r.prototype.createCounter=function(e,t){var n=Br(e,pe.COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new HA(o,n)},r.prototype.createUpDownCounter=function(e,t){var n=Br(e,pe.UP_DOWN_COUNTER,t),o=this._meterSharedState.registerMetricStorage(n);return new zA(o,n)},r.prototype.createObservableGauge=function(e,t){var n=Br(e,pe.OBSERVABLE_GAUGE,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new WA(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableCounter=function(e,t){var n=Br(e,pe.OBSERVABLE_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new VA(n,o,this._meterSharedState.observableRegistry)},r.prototype.createObservableUpDownCounter=function(e,t){var n=Br(e,pe.OBSERVABLE_UP_DOWN_COUNTER,t),o=this._meterSharedState.registerAsyncMetricStorage(n);return new $A(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 Tc=function(){function r(e){this._instrumentDescriptor=e}return r.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},r.prototype.updateDescription=function(e){this._instrumentDescriptor=Br(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},r}();var vU=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)}}(),KA=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(){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 KA(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 KA(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 Tr=function(r){vU(e,r);function e(){return r.call(this,nc)||this}return e}(AU);var wU=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},vc=function(){function r(e,t){this._aggregator=e,this._activeCollectionStorage=new Tr,this._cumulativeMemoStorage=new Tr,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(t??2e3)-1,this._overflowHashCode=nc(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=wU(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 p=n._activeCollectionStorage.get(a,c);u=n._aggregator.merge(p,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 Tr,e},r}();var Om=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.")},YA=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},Ac=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===di.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=RU(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=Om(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 Tr,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=Om(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=YA(a.value,3),c=s[0],l=s[1],u=s[2];if(e.has(c,u)){var d=e.get(c,u),p=n.merge(d,l);o.set(c,p,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=Om(e.keys()),s=a.next();!s.done;s=a.next()){var c=YA(s.value,2),l=c[0],u=c[1],d=t.get(l,u);d?.setStartTime(n)}}catch(p){o={error:p}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}return t},r}();function RU(r){return Array.from(r.entries())}var CU=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)}}(),xU=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},XA=function(r){CU(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 vc(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new Ac(n,i),s}return e.prototype.record=function(t,n){var o=this,i=new Tr;Array.from(t.entries()).forEach(function(a){var s=xU(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}(Tc);Ce();function Lm(r,e){var t="";return r.unit!==e.unit&&(t+=" - Unit '"+r.unit+"' does not match '"+e.unit+`'
3953
3958
  `),r.type!==e.type&&(t+=" - Type '"+r.type+"' does not match '"+e.type+`'
3954
3959
  `),r.valueType!==e.valueType&&(t+=" - Value Type '"+r.valueType+"' does not match '"+e.valueType+`'
3955
3960
  `),r.description!==e.description&&(t+=" - Description '"+r.description+"' does not match '"+e.description+`'
3956
- `),t}function Nk(r,e){return" - use valueType '"+r.valueType+"' on instrument creation or use an instrument name other than '"+e.name+"'"}function kk(r,e){return" - use unit '"+r.unit+"' on instrument creation or use an instrument name other than '"+e.name+"'"}function Dk(r,e){var t={name:e.name,type:e.type,unit:e.unit},n=JSON.stringify(t);return" - create a new view with a name other than '"+r.name+"' and InstrumentSelector '"+n+"'"}function Uk(r,e){var t={name:e.name,type:e.type,unit:e.unit},n=JSON.stringify(t);return" - create a new view with a name other than '"+r.name+"' and InstrumentSelector '"+n+`'
3961
+ `),t}function _U(r,e){return" - use valueType '"+r.valueType+"' on instrument creation or use an instrument name other than '"+e.name+"'"}function MU(r,e){return" - use unit '"+r.unit+"' on instrument creation or use an instrument name other than '"+e.name+"'"}function IU(r,e){var t={name:e.name,type:e.type,unit:e.unit},n=JSON.stringify(t);return" - create a new view with a name other than '"+r.name+"' and InstrumentSelector '"+n+"'"}function PU(r,e){var t={name:e.name,type:e.type,unit:e.unit},n=JSON.stringify(t);return" - create a new view with a name other than '"+r.name+"' and InstrumentSelector '"+n+`'
3957
3962
  - OR - create a new view with the name `+r.name+" and description '"+r.description+"' and InstrumentSelector "+n+`
3958
- - OR - create a new view with the name `+e.name+" and description '"+r.description+"' and InstrumentSelector "+n}function em(r,e){return r.valueType!==e.valueType?Nk(r,e):r.unit!==e.unit?kk(r,e):r.type!==e.type?Dk(r,e):r.description!==e.description?Uk(r,e):""}var tm=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.")},Pv=function(){function r(){this._sharedRegistry=new Map,this._perCollectorRegistry=new Map}return r.create=function(){return new r},r.prototype.getStorages=function(e){var t,n,o,i,a=[];try{for(var s=tm(this._sharedRegistry.values()),c=s.next();!c.done;c=s.next()){var l=c.value;a=a.concat(l)}}catch(g){t={error:g}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}var u=this._perCollectorRegistry.get(e);if(u!=null)try{for(var d=tm(u.values()),p=d.next();!p.done;p=d.next()){var l=p.value;a=a.concat(l)}}catch(g){o={error:g}}finally{try{p&&!p.done&&(i=d.return)&&i.call(d)}finally{if(o)throw o.error}}return a},r.prototype.register=function(e){this._registerStorage(e,this._sharedRegistry)},r.prototype.registerForCollector=function(e,t){var n=this._perCollectorRegistry.get(e);n==null&&(n=new Map,this._perCollectorRegistry.set(e,n)),this._registerStorage(t,n)},r.prototype.findOrUpdateCompatibleStorage=function(e){var t=this._sharedRegistry.get(e.name);return t===void 0?null:this._findOrUpdateCompatibleStorage(e,t)},r.prototype.findOrUpdateCompatibleCollectorStorage=function(e,t){var n=this._perCollectorRegistry.get(e);if(n===void 0)return null;var o=n.get(t.name);return o===void 0?null:this._findOrUpdateCompatibleStorage(t,o)},r.prototype._registerStorage=function(e,t){var n=e.getInstrumentDescriptor(),o=t.get(n.name);if(o===void 0){t.set(n.name,[e]);return}o.push(e)},r.prototype._findOrUpdateCompatibleStorage=function(e,t){var n,o,i=null;try{for(var a=tm(t),s=a.next();!s.done;s=a.next()){var c=s.value,l=c.getInstrumentDescriptor();zT(l,e)?(l.description!==e.description&&(e.description.length>l.description.length&&c.updateDescription(e.description),j.warn("A view or instrument with the name ",e.name,` has already been registered, but has a different description and is incompatible with another registered view.
3963
+ - OR - create a new view with the name `+e.name+" and description '"+r.description+"' and InstrumentSelector "+n}function Nm(r,e){return r.valueType!==e.valueType?_U(r,e):r.unit!==e.unit?MU(r,e):r.type!==e.type?IU(r,e):r.description!==e.description?PU(r,e):""}var km=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.")},JA=function(){function r(){this._sharedRegistry=new Map,this._perCollectorRegistry=new Map}return r.create=function(){return new r},r.prototype.getStorages=function(e){var t,n,o,i,a=[];try{for(var s=km(this._sharedRegistry.values()),c=s.next();!c.done;c=s.next()){var l=c.value;a=a.concat(l)}}catch(h){t={error:h}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}var u=this._perCollectorRegistry.get(e);if(u!=null)try{for(var d=km(u.values()),p=d.next();!p.done;p=d.next()){var l=p.value;a=a.concat(l)}}catch(h){o={error:h}}finally{try{p&&!p.done&&(i=d.return)&&i.call(d)}finally{if(o)throw o.error}}return a},r.prototype.register=function(e){this._registerStorage(e,this._sharedRegistry)},r.prototype.registerForCollector=function(e,t){var n=this._perCollectorRegistry.get(e);n==null&&(n=new Map,this._perCollectorRegistry.set(e,n)),this._registerStorage(t,n)},r.prototype.findOrUpdateCompatibleStorage=function(e){var t=this._sharedRegistry.get(e.name);return t===void 0?null:this._findOrUpdateCompatibleStorage(e,t)},r.prototype.findOrUpdateCompatibleCollectorStorage=function(e,t){var n=this._perCollectorRegistry.get(e);if(n===void 0)return null;var o=n.get(t.name);return o===void 0?null:this._findOrUpdateCompatibleStorage(t,o)},r.prototype._registerStorage=function(e,t){var n=e.getInstrumentDescriptor(),o=t.get(n.name);if(o===void 0){t.set(n.name,[e]);return}o.push(e)},r.prototype._findOrUpdateCompatibleStorage=function(e,t){var n,o,i=null;try{for(var a=km(t),s=a.next();!s.done;s=a.next()){var c=s.value,l=c.getInstrumentDescriptor();sA(l,e)?(l.description!==e.description&&(e.description.length>l.description.length&&c.updateDescription(e.description),V.warn("A view or instrument with the name ",e.name,` has already been registered, but has a different description and is incompatible with another registered view.
3959
3964
  `,`Details:
3960
- `,Qp(l,e),`The longer description will be used.
3961
- To resolve the conflict:`,em(l,e))),i=c):j.warn("A view or instrument with the name ",e.name,` has already been registered and is incompatible with another registered view.
3965
+ `,Lm(l,e),`The longer description will be used.
3966
+ To resolve the conflict:`,Nm(l,e))),i=c):V.warn("A view or instrument with the name ",e.name,` has already been registered and is incompatible with another registered view.
3962
3967
  `,`Details:
3963
- `,Qp(l,e),`To resolve the conflict:
3964
- `,em(l,e))}}catch(u){n={error:u}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return i},r}();var Iv=function(){function r(e){this._backingStorages=e}return r.prototype.record=function(e,t,n,o){this._backingStorages.forEach(function(i){i.record(e,t,n,o)})},r}();Te();Te();var Ov=function(){function r(e,t){this._instrumentName=e,this._valueType=t,this._buffer=new mr}return r.prototype.observe=function(e,t){if(t===void 0&&(t={}),typeof e!="number"){j.warn("non-number value provided to metric "+this._instrumentName+": "+e);return}this._valueType===Nt.INT&&!Number.isInteger(e)&&(j.warn("INT value type cannot accept a floating-point value for "+this._instrumentName+", ignoring the fractional digits."),e=Math.trunc(e),!Number.isInteger(e))||this._buffer.set(t,e)},r}();var Lv=function(){function r(){this._buffer=new Map}return r.prototype.observe=function(e,t,n){if(n===void 0&&(n={}),!!Pa(e)){var o=this._buffer.get(e);if(o==null&&(o=new mr,this._buffer.set(e,o)),typeof t!="number"){j.warn("non-number value provided to metric "+e._descriptor.name+": "+t);return}e._descriptor.valueType===Nt.INT&&!Number.isInteger(t)&&(j.warn("INT value type cannot accept a floating-point value for "+e._descriptor.name+", ignoring the fractional digits."),t=Math.trunc(t),!Number.isInteger(t))||o.set(n,t)}},r}();var rm=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())})},nm=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}}},Nv=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},kv=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(){this._callbacks=[],this._batchCallbacks=[]}return r.prototype.addCallback=function(e,t){var n=this._findCallback(e,t);n>=0||this._callbacks.push({callback:e,instrument:t})},r.prototype.removeCallback=function(e,t){var n=this._findCallback(e,t);n<0||this._callbacks.splice(n,1)},r.prototype.addBatchCallback=function(e,t){var n=new Set(t.filter(Pa));if(n.size===0){j.error("BatchObservableCallback is not associated with valid instruments",t);return}var o=this._findBatchCallback(e,n);o>=0||this._batchCallbacks.push({callback:e,instruments:n})},r.prototype.removeBatchCallback=function(e,t){var n=new Set(t.filter(Pa)),o=this._findBatchCallback(e,n);o<0||this._batchCallbacks.splice(o,1)},r.prototype.observe=function(e,t){return rm(this,void 0,void 0,function(){var n,o,i,a;return nm(this,function(s){switch(s.label){case 0:return n=this._observeCallbacks(e,t),o=this._observeBatchCallbacks(e,t),[4,NT(kv(kv([],Nv(n),!1),Nv(o),!1))];case 1:return i=s.sent(),a=i.filter(kT).map(function(c){return c.reason}),[2,a]}})})},r.prototype._observeCallbacks=function(e,t){var n=this;return this._callbacks.map(function(o){var i=o.callback,a=o.instrument;return rm(n,void 0,void 0,function(){var s,c;return nm(this,function(l){switch(l.label){case 0:return s=new Ov(a._descriptor.name,a._descriptor.valueType),c=Promise.resolve(i(s)),t!=null&&(c=yn(c,t)),[4,c];case 1:return l.sent(),a._metricStorages.forEach(function(u){u.record(s._buffer,e)}),[2]}})})})},r.prototype._observeBatchCallbacks=function(e,t){var n=this;return this._batchCallbacks.map(function(o){var i=o.callback,a=o.instruments;return rm(n,void 0,void 0,function(){var s,c;return nm(this,function(l){switch(l.label){case 0:return s=new Lv,c=Promise.resolve(i(s)),t!=null&&(c=yn(c,t)),[4,c];case 1:return l.sent(),a.forEach(function(u){var d=s._buffer.get(u);d!=null&&u._metricStorages.forEach(function(p){p.record(d,e)})}),[2]}})})})},r.prototype._findCallback=function(e,t){return this._callbacks.findIndex(function(n){return n.callback===e&&n.instrument===t})},r.prototype._findBatchCallback=function(e,t){return this._batchCallbacks.findIndex(function(n){return n.callback===e&&DT(n.instruments,t)})},r}();var Fk=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Uv=function(r){Fk(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 ac(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new sc(n,i),s}return e.prototype.record=function(t,n,o,i){n=this._attributesProcessor.process(n,o),this._deltaMetricStorage.record(t,n,o,i)},e.prototype.collect=function(t,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(t,this._instrumentDescriptor,o,n)},e}(ic);var Fv=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)}}(),ii=function(){function r(){}return r.Noop=function(){return zk},r}();var Bk=function(r){Fv(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.process=function(t,n){return t},e}(ii);var Bv=function(r){Fv(e,r);function e(t){var n=r.call(this)||this;return n._allowedAttributeNames=t,n}return e.prototype.process=function(t,n){var o=this,i={};return Object.keys(t).filter(function(a){return o._allowedAttributeNames.includes(a)}).forEach(function(a){return i[a]=t[a]}),i},e}(ii);var zk=new Bk;var Hk=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())})},Gk=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}}},jk=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},zv=function(){function r(e,t){this._meterProviderSharedState=e,this._instrumentationScope=t,this.metricStorageRegistry=new Pv,this.observableRegistry=new Dv,this.meter=new Cv(this)}return r.prototype.registerMetricStorage=function(e){var t=this._registerMetricStorage(e,Uv);return t.length===1?t[0]:new Iv(t)},r.prototype.registerAsyncMetricStorage=function(e){var t=this._registerMetricStorage(e,Mv);return t},r.prototype.collect=function(e,t,n){return Hk(this,void 0,void 0,function(){var o,i,a;return Gk(this,function(s){switch(s.label){case 0:return[4,this.observableRegistry.observe(t,n?.timeoutMillis)];case 1:return o=s.sent(),i=this.metricStorageRegistry.getStorages(e),i.length===0?[2,null]:(a=i.map(function(c){return c.collect(e,t)}).filter(OT),a.length===0?[2,{errors:o}]:[2,{scopeMetrics:{scope:this._instrumentationScope,metrics:a},errors:o}])}})})},r.prototype._registerMetricStorage=function(e,t){var n=this,o=this._meterProviderSharedState.viewRegistry.findViews(e,this._instrumentationScope),i=o.map(function(c){var l=BT(c,e),u=n.metricStorageRegistry.findOrUpdateCompatibleStorage(l);if(u!=null)return u;var d=c.aggregation.createAggregator(l),p=new t(l,d,c.attributesProcessor,n._meterProviderSharedState.metricCollectors,c.aggregationCardinalityLimit);return n.metricStorageRegistry.register(p),p});if(i.length===0){var a=this._meterProviderSharedState.selectAggregations(e.type),s=a.map(function(c){var l=jk(c,2),u=l[0],d=l[1],p=n.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(u,e);if(p!=null)return p;var g=d.createAggregator(e),m=u.selectCardinalityLimit(e.type),h=new t(e,g,ii.Noop(),[u],m);return n.metricStorageRegistry.registerForCollector(u,h),h});i=i.concat(s)}return i},r}();var Vk=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.")},Hv=function(){function r(e){this.resource=e,this.viewRegistry=new yv,this.metricCollectors=[],this.meterSharedStates=new Map}return r.prototype.getMeterSharedState=function(e){var t=LT(e),n=this.meterSharedStates.get(t);return n==null&&(n=new zv(this,e),this.meterSharedStates.set(t,n)),n},r.prototype.selectAggregations=function(e){var t,n,o=[];try{for(var i=Vk(this.metricCollectors),a=i.next();!a.done;a=i.next()){var s=a.value;o.push([s,s.selectAggregation(e)])}}catch(c){t={error:c}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return o},r}();var lc=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())})},cc=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}}},$k=function(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var n=t.call(r),o,i=[],a;try{for(;(e===void 0||e-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(a)throw a.error}}return i},Wk=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))},Gv=function(){function r(e,t){this._sharedState=e,this._metricReader=t}return r.prototype.collect=function(e){return lc(this,void 0,void 0,function(){var t,n,o,i,a=this;return cc(this,function(s){switch(s.label){case 0:return t=ro(Date.now()),n=[],o=[],i=Array.from(this._sharedState.meterSharedStates.values()).map(function(c){return lc(a,void 0,void 0,function(){var l;return cc(this,function(u){switch(u.label){case 0:return[4,c.collect(this,t,e)];case 1:return l=u.sent(),l?.scopeMetrics!=null&&n.push(l.scopeMetrics),l?.errors!=null&&o.push.apply(o,Wk([],$k(l.errors),!1)),[2]}})})}),[4,Promise.all(i)];case 1:return s.sent(),[2,{resourceMetrics:{resource:this._sharedState.resource,scopeMetrics:n},errors:o}]}})})},r.prototype.forceFlush=function(e){return lc(this,void 0,void 0,function(){return cc(this,function(t){switch(t.label){case 0:return[4,this._metricReader.forceFlush(e)];case 1:return t.sent(),[2]}})})},r.prototype.shutdown=function(e){return lc(this,void 0,void 0,function(){return cc(this,function(t){switch(t.label){case 0:return[4,this._metricReader.shutdown(e)];case 1:return t.sent(),[2]}})})},r.prototype.selectAggregationTemporality=function(e){return this._metricReader.selectAggregationTemporality(e)},r.prototype.selectAggregation=function(e){return this._metricReader.selectAggregation(e)},r.prototype.selectCardinalityLimit=function(e){var t,n,o;return(o=(n=(t=this._metricReader).selectCardinalityLimit)===null||n===void 0?void 0:n.call(t,e))!==null&&o!==void 0?o:2e3},r}();var jv=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())})},Vv=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}}},$v=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 qk(r,e){var t=e??rc.empty();return r?rc.default().merge(t):t}var om=function(){function r(e){var t,n,o,i,a;if(this._shutdown=!1,this._sharedState=new Hv(qk((a=e?.mergeResourceWithDefaults)!==null&&a!==void 0?a:!0,e?.resource)),e?.views!=null&&e.views.length>0)try{for(var s=$v(e.views),c=s.next();!c.done;c=s.next()){var l=c.value;this._sharedState.viewRegistry.addView(l)}}catch(g){t={error:g}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}if(e?.readers!=null&&e.readers.length>0)try{for(var u=$v(e.readers),d=u.next();!d.done;d=u.next()){var p=d.value;this.addMetricReader(p)}}catch(g){o={error:g}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}}return r.prototype.getMeter=function(e,t,n){return t===void 0&&(t=""),n===void 0&&(n={}),this._shutdown?(j.warn("A shutdown MeterProvider cannot provide a Meter"),cp()):this._sharedState.getMeterSharedState({name:e,version:t,schemaUrl:n.schemaUrl}).meter},r.prototype.addMetricReader=function(e){var t=new Gv(this._sharedState,e);e.setMetricProducer(t),this._sharedState.metricCollectors.push(t)},r.prototype.shutdown=function(e){return jv(this,void 0,void 0,function(){return Vv(this,function(t){switch(t.label){case 0:return this._shutdown?(j.warn("shutdown may only be called once per MeterProvider"),[2]):(this._shutdown=!0,[4,Promise.all(this._sharedState.metricCollectors.map(function(n){return n.shutdown(e)}))]);case 1:return t.sent(),[2]}})})},r.prototype.forceFlush=function(e){return jv(this,void 0,void 0,function(){return Vv(this,function(t){switch(t.label){case 0:return this._shutdown?(j.warn("invalid attempt to force flush after MeterProvider shutdown"),[2]):[4,Promise.all(this._sharedState.metricCollectors.map(function(n){return n.forceFlush(e)}))];case 1:return t.sent(),[2]}})})},r}();var Kk=/[\^$\\.+?()[\]{}|]/g,uc=function(){function r(e){e==="*"?(this._matchAll=!0,this._regexp=/.*/):(this._matchAll=!1,this._regexp=new RegExp(r.escapePattern(e)))}return r.prototype.match=function(e){return this._matchAll?!0:this._regexp.test(e)},r.escapePattern=function(e){return"^"+e.replace(Kk,"\\$&").replace("*",".*")+"$"},r.hasWildcard=function(e){return e.includes("*")},r}();var ai=function(){function r(e){this._matchAll=e===void 0,this._pattern=e}return r.prototype.match=function(e){return!!(this._matchAll||e===this._pattern)},r}();var Wv=function(){function r(e){var t;this._nameFilter=new uc((t=e?.name)!==null&&t!==void 0?t:"*"),this._type=e?.type,this._unitFilter=new ai(e?.unit)}return r.prototype.getType=function(){return this._type},r.prototype.getNameFilter=function(){return this._nameFilter},r.prototype.getUnitFilter=function(){return this._unitFilter},r}();var qv=function(){function r(e){this._nameFilter=new ai(e?.name),this._versionFilter=new ai(e?.version),this._schemaUrlFilter=new ai(e?.schemaUrl)}return r.prototype.getNameFilter=function(){return this._nameFilter},r.prototype.getVersionFilter=function(){return this._versionFilter},r.prototype.getSchemaUrlFilter=function(){return this._schemaUrlFilter},r}();function Yk(r){return r.instrumentName==null&&r.instrumentType==null&&r.instrumentUnit==null&&r.meterName==null&&r.meterVersion==null&&r.meterSchemaUrl==null}var im=function(){function r(e){var t;if(Yk(e))throw new Error("Cannot create view with no selector arguments supplied");if(e.name!=null&&(e?.instrumentName==null||uc.hasWildcard(e.instrumentName)))throw new Error("Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter.");e.attributeKeys!=null?this.attributesProcessor=new Bv(e.attributeKeys):this.attributesProcessor=ii.Noop(),this.name=e.name,this.description=e.description,this.aggregation=(t=e.aggregation)!==null&&t!==void 0?t:rr.Default(),this.instrumentSelector=new Wv({name:e.instrumentName,type:e.instrumentType,unit:e.instrumentUnit}),this.meterSelector=new qv({name:e.meterName,version:e.meterVersion,schemaUrl:e.meterSchemaUrl}),this.aggregationCardinalityLimit=e.aggregationCardinalityLimit}return r}();var xme=process.env.APP||"unknown";Te();import{v4 as Xk}from"uuid";function Jk(){return new MT({url:"https://us-west.metrics.momentic.ai/v1/metrics",headers:{"x-momentic-metrics-api-key":"c60c6a0f-60da-41a7-a61b-07969a0aa303"},temporalityPreference:eo.DELTA})}var Zk=[new im({instrumentName:"test_operation_duration_ms",instrumentType:le.HISTOGRAM,aggregation:new Zl([100,500,1e3,5e3,1e4,2e4])})],dc=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(e){let t=this.counterCache.get(e);if(t)return t;let n=this.meter.createCounter(e);return this.counterCache.set(e,n),n}getHistogram(e){let t=this.histogramCache.get(e);if(t)return t;let n=this.meter.createHistogram(e);return this.histogramCache.set(e,n),n}ensureObservableGauge(e){let t=this.observableGaugeCache.get(e);if(t)return t;let n=this.meter.createObservableGauge(e);return n.addCallback(o=>{let i=this.gaugeValues.get(e);i!==void 0&&o.observe(i,this.globalAttributes)}),this.observableGaugeCache.set(e,n),n}constructor(e){this.globalAttributes={...e.globalAttributes??{}};let t=typeof process<"u"?"production":"unknown",n=new xp({[Ml]:e.serviceName,[RE]:t,[xE]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:Xk()}),o=Jk(),i=new Jp({exporter:o,exportIntervalMillis:e.exportIntervalMs??15e3});this.provider=new om({resource:n,readers:[i],views:Zk}),Rl.setGlobalMeterProvider(this.provider),this.meter=Rl.getMeter("momentic-serverless")}increment(e,t,n){try{let o=vl(n,this.globalAttributes);this.getCounter(e).add(typeof t=="number"?t:1,o)}catch{}}gauge(e,t){try{this.ensureObservableGauge(e),this.gaugeValues.set(e,t)}catch{}}distribution(e,t,n){try{let o=vl(n,this.globalAttributes);this.getHistogram(e).record(t,o)}catch{}}async flush(){try{await this.provider.forceFlush()}catch{}}async recordDuration({fn:e,name:t,tags:n}){let o=Date.now();try{return await Promise.resolve(e())}finally{this.distribution(t,Date.now()-o,n)}}};var kt=new Tl;function Kv(r){r.disabled||(kt=new dc(r))}import{CookieJar as wD}from"tough-cookie";async function Or({frameConfig:r,action:e,browser:t}){let n=t.getActiveFrameConfig();r?t.setActiveFrameConfig(r):n?.type==="auto"&&t.setActiveFrameConfig(void 0);try{return await e()}finally{t.setActiveFrameConfig(n)}}var Qk=["NAVIGATE","NEW_TAB","TAB","REFRESH","WAIT_FOR_URL"];async function Yv({beforeUrl:r,beforePages:e,browser:t,command:n,logger:o}){if(Qk.includes(n.type))return;let s=("cache"in n&&n.cache&&"target"in n.cache?n.cache.target:void 0)?.nodeOnlySerializedHtml?.includes("<a")??!1?300:3e3,c=Date.now(),l=0;for(;l===0||Date.now()-c<s;){await Z(250),l++;let u=(await t.getOpenPages()).map(p=>p.url),d=t.url();if(u.length!==e.length)for(let p=u.length-1;p>=e.length;p--){let g=u[p];if(Wn(g,o)&&g!==r&&g!==d){o.info({beforePages:e,afterPages:u,beforeUrl:r},"Auto-following new tab after preset action"),await t.switchToPage({type:"INDEX",index:String(p)});break}}}}async function Tn(r,e={}){let t=await r.getBrowserState(e);return{serializedTree:t.serialize(e.serializationOpts),tree:t}}var io=3.1783027;function eD(r){let e=0;for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);!(n>=48&&n<=57)&&!(n>=65&&n<=90)&&!(n>=97&&n<=122)&&e++}return e}function jr(r){return Math.ceil(am(r)/io)}function am(r){let e=0;if(typeof r=="string"){let t=r;t=t.replaceAll(`
3965
- `,""),t=t.replaceAll(" ","");let n=eD(t);return t.length-n+io*n}if(typeof r>"u")return 0;if(typeof r=="number")return String(r).length;if(Array.isArray(r))return r.forEach(t=>{e+=am(t)}),e;if(typeof r=="object"){let t=r;return Object.keys(t).forEach(n=>{e+=String(n).length,n==="image_url"?(t[n]??{}).detail==="high"?e+=1105*io:e+=85*io:e+=am(t[n])}),e}if(typeof r=="boolean")return r?4:5;throw new Error(`Unsupported type passed to token length calculator '${typeof r}': ${r}`)}var Jv={minChunkTokenCount:500,acceptableChunkTokenCount:3e3,maxChunkTokenCount:8e3,maxLineLength:4e3},Zv={minChunkTokenCount:5e3,acceptableChunkTokenCount:15e3,maxChunkTokenCount:5e4,maxLineLength:500},Xv=/<(\S+) id="(\d+)".*?>/g,tD=/(<\/(\S+)>)|(<(\S+).*?\/>)/g,Qv=["h1","h2","section","footer","nav","aside","form","label","dialog"],rD=[...Qv,"span","div","h3"],nD=["table","select","form","ul","ol","menu","pre","code","dialog"],oD=["table","form","dialog","nav","section","ul","select"];function pc(r){return iD(r)}function iD({serializedTree:r,options:e,logger:t}){let{minChunkTokenCount:n,acceptableChunkTokenCount:o,maxChunkTokenCount:i,maxLineLength:a}=e,s=[],c=r.split(`
3966
- `),l=0,u=[],d=0,p=[],g=[],m=!1;for(;l<c.length;){m&&(s.push({ids:p,content:u.join(`
3967
- `),tokenLength:d}),u=[],d=0,p=g.length?[g[g.length-1].id]:[],m=!1);let h=c[l],f=jr(h);d+=f,h.length>a&&(h=h.slice(0,a));let _=Array.from(h.matchAll(Xv)).map(q=>q&&q.length>=3?{tagName:q[1],id:q[2]}:void 0).filter(q=>!!q),A=Array.from(h.matchAll(tD)).map(q=>q&&(q[2]||q[4])).filter(q=>!!q);A.reverse();let P=h.replace(/ id="[0-9]+"/g,"");u.push(P);for(let q of _)p.push(q.id),g.push(q);for(let q of A){let H=g[g.length-1];H&&H.tagName===q&&g.pop()}let R=g.some(q=>nD.includes(q.tagName)),w=c[l+1]??"",B=jr(w),k=Array.from(w.matchAll(Xv)).map(q=>q&&q.length>2?q[1]:void 0).filter(q=>!!q),Y=k.some(q=>Qv.includes(q)),Me=k.some(q=>rD.includes(q));d+B>=i&&(m=!0),d>=n&&(Y&&!R||A.some(q=>oD.includes(q)))&&(m=!0),d>=o&&Me&&!R&&(m=!0),l++}return u.length&&s.push({ids:p,content:u.join(`
3968
- `),tokenLength:d}),s.forEach((h,f)=>{t.debug({chunk:h},`Chunk for page filtering (index ${f+1}/${s.length})`)}),{chunks:s}}var aD=9e5,mc=3e5,sD=5e3;async function ao(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=jr(u);if(d>aD)try{let p=pc({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await cD({...r,tokenLimit:mc-1e4,chunks:p.chunks}),u=l.serialize();let g=jr(u);i.info({oldTokens:d,newTokens:g},"Filtered page using keywords"),d=g}catch(p){i.warn({err:p},"Error filtering page using keyword matching, using naive truncation"),l=l.pruneToSerializedCharLimit(mc*io),u=l.serialize(),i.info("Filtered page using naive truncation")}if(d>mc)try{if(o){let p=pc({serializedTree:u,options:Zv,logger:i});l=await V(lD({...r,chunks:p.chunks}),{milliseconds:12e3}),u=l.serialize();let g=jr(u);i.info({oldTokens:d,newTokens:g},"Filtered page using AI chunk ranking"),d=g}else{let p=pc({serializedTree:u,options:Jv,logger:i});l=await V(uD({...r,chunkResult:p,tokenLimit:4e4}),{milliseconds:12e3,signal:c}),u=l.serialize();let g=jr(u);i.info({oldTokens:d,newTokens:g},"Filtered page using RAG"),d=g}}catch(p){i.warn({err:p},"Error filtering page using RAG/AI, using naive truncation"),l=l.pruneToSerializedCharLimit(mc*io),u=l.serialize(),i.info("Filtered page using naive truncation")}if(o&&d>sD&&r.type==="locator"&&(s==="org_01HMSCJQBCCG51M2ZF65YC5B8W"||s==="org_01HMJTX4GT1KG94KZRCT8MZ6YB"))try{let p=await a.getPageSummary({browserContext:u,currentStep:r.description,screenshot:n,type:r.type},{logger:i,loggerTags:Se(i),abortSignal:c});if(i.info(p,"Got AI summaries"),p.category!=="OTHER"){let g=new Set;for(let h of p.relevantSections){let f=Math.min(h.startId,h.endId),b=Math.max(h.startId,h.endId);for(let E=f;E<=b;E++)g.add(E.toString())}l=l.pruneUsingRelevantIds(g),u=l.serialize();let m=jr(u);i.info({newTokens:m,oldTokens:d},"Filtered page using AI summary"),d=m}}catch(p){i.warn({err:p},"Error filtering page using AI summary, continuing...")}return u}async function lD({type:r,chunks:e,description:t,fixtures:n,tree:o}){let{generator:i,signal:a,logger:s}=n,c=await i.rankChunksWithAi({chunks:e,description:t,type:r,softTokenLimit:4e4,hardTokenLimit:8e4},{abortSignal:a,logger:s,loggerTags:Se(s)}),l=[];return e.forEach((d,p)=>{c.indices.includes(p)&&(l=l.concat(d.ids))}),o.pruneUsingRelevantIds(new Set(l))}async function cD(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(g=>g.content.toLowerCase().includes(c.toLowerCase()));if(!l.length||l.reduce((g,m)=>g+m.tokenLength,0)>r.tokenLimit&&l.length>1)continue;let d=l.flatMap(g=>g.ids);return n.pruneUsingRelevantIds(new Set(d))}throw new Error("No keywords were unique enough for page filtering")}async function uD(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 lm(r,e){if(!r.description)throw new x("UserConfigurationError","Cannot locate element with empty description");return Or({action:async()=>dD(r,e),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:e.browser,logger:r.logger})}async function dD(r,e){let{disableCache:t,testContext:n,filterByViewport:o,skipWait:i,source:a,memory:s,aiPageFiltering:c,logger:l,allowNotActionableNodesOverride:u}=r,{ctx:d,orgId:p,browser:g,localCodeEvalTools:m,generator:h,abortSignal:f}=e,b=r.description,E=r.useMemory&&!t;n&&(b=await yd({orgId:p,s:b,context:n,localTools:m,signal:f,logger:l})),a&&(b=mD(b,a));let{serializedTree:_,tree:v}=await Tn(g,{allowNotActionableNodesOverride:u,filterByViewport:o,abortSignal:f,skipWait:i,logger:l}),A,P=Date.now(),R;for(;!A&&Date.now()-P<3e3;){f.throwIfAborted();try{A=await g.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(ae){R=ae}}if(!A)throw new x("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${R?.message}`);let w=_,B=!1,k=`data:image/jpeg;base64,${A.toString("base64")}`;w=await ao({type:"locator",description:b,screenshot:k,serializedTree:_,options:{aiPageFiltering:c},tree:v,fixtures:{generator:h,signal:f,logger:l,orgId:p}}),w!==_&&(B=!0);let Y=await h.getElementLocation({browserState:w,goal:b,screenshot:k,source:a,memory:E?s:void 0},{disableCache:t,abortSignal:f,loggerTags:Se(l),useMemory:E});l.debug({usedRag:B,result:Y},"Got locator result");let Me=Y.id>0;if(d?.details?.push({type:"AI_LOCATION",matched:Me,pageState:w,ragUsed:B,thoughts:Y.thoughts}),!Me)throw new Fo(`Could not find any relevant element: ${Y.thoughts}`,Y.updatedMemory?{type:"GCS_TRACES",traces:Y.updatedMemory}:void 0);let{resolution:q,target:H,frameConfig:ie}=await g.createTargetFromA11yId({id:Y.id,requirements:Y.requirements,additionalElements:Y.additionalElements,description:b,targetSource:"AI",logger:l});if(q.a11yNode?.properties?.hidden&&q.a11yNode?.properties?.hidden!=="false")throw new x("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: ${q.displayString}`);return E&&(Y.updatedMemory?H.memory={type:"GCS_TRACES",traces:Y.updatedMemory}:s&&(H.memory=s)),{thoughts:Y.thoughts,target:H,resolution:q,frameConfig:ie,screenshot:k}}var pD=["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:"],eA="<select> element:",tA="text input or contenteditable element:",rA="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:",nA="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:",sm=[eA,tA,rA,nA,...pD];function oA(r,e){if(r===e)return!0;for(let t of sm){if(!r.startsWith(t))continue;let n=r.slice(t.length).trim();if(sm.some(o=>e.startsWith(o)&&e.slice(o.length).trim()===n)||n===e.trim())return!0}return!!sm.some(t=>e.startsWith(t)&&e.slice(t.length).trim()===r.trim())}function mD(r,e){if(!r||!e)return r;switch(e){case"SELECT_OPTION":return`${eA} ${r}`;case"TYPE":return`${tA} ${r}`;case"NEGATED_ELEMENT_VISIBLE_CHECK":return`${rA}
3969
- ${r}`;case"ELEMENT_CHECK":return`${nA}
3970
- ${r}`;default:return r}}var gD=15;async function gc({command:r,aiPageFiltering:e,logger:t,fixtures:n,source:o,useMemory:i,maxRetries:a=gD}){if(!r.assertion.trim())throw new x("ActionFailureError","Assertion command is missing the assertion content");let{browser:s}=n,c=r.timeout?r.timeout*1e3:s.smartWaitingTimeout,l=il(c),u=0,d=Date.now(),p,g,m;try{await Or({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<a&&(!h||h-d<c);){n.abortSignal.throwIfAborted(),u!==0&&await Z(l,n.abortSignal),h=Date.now();try{if(p=await Or({action:async()=>{let b=await iA(s,t,n.abortSignal);return g&&g.serializedTree===b.serializedTree&&g.screenshotBuff.equals(b.screenshotBuff)?p:(g=b,aA({command:r,state:b,fixtures:n,useMemory:i,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:t,source:o}))},frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s}),p?.updatedMemory&&tl(r,p.updatedMemory,t),p?.success)break;throw p?.thoughts?new x("AssertionFailureError",p.thoughts):new x("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(f){n.abortSignal.throwIfAborted(),m=f instanceof Error?f:new Error(`${f}`),t.info({err:f},`AI check assert attempt ${u} failed, retrying...`)}finally{u++}}if(!p?.success)try{p=await Or({action:async()=>aA({command:r,state:await iA(s,t,n.abortSignal),fixtures:n,useMemory:i,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(),m=f instanceof Error?f:new Error(`${f}`)}finally{u++}if(!p?.success){let f=`AI check still failing after ${u} attempts.`;throw m&&(f+=` Latest result: ${m.message}`),new x("AssertionFailureError",f)}return{...p,succeedImmediately:!1,urlAfterCommand:s.url()}}async function iA(r,e,t){let[n,o]=await Promise.all([Tn(r,{abortSignal:t,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),r.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function aA({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:p}=t,g={type:"ASSERTION"},{serializedTree:m,tree:h}=e,f=e.screenshotBuff,b=f.toString("base64"),E=u.url(),_=r.contextChoice??"MULTIMODAL",v=m;_!=="VISION_ONLY"&&(v=await ao({type:"assertion",serializedTree:m,tree:h,description:r.assertion,screenshot:b,options:{aiPageFiltering:a},fixtures:{generator:d,signal:p,logger:l,orgId:t.orgId}}),v!==m&&(g.ragUsed=!0),g.pageState=v);let A={goal:r.assertion,url:E,memory:o?r.cache?.memory:void 0,browserState:v,screenshot:b,contextChoice:_,source:c},R=await(_==="VISION_ONLY"?(w,B)=>d.getVisualAssertionResult(w,B):(w,B)=>d.getAssertionResult(w,B))(A,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!r.disableCache,abortSignal:p,logger:l,loggerTags:Se(l)});return(R.result||i)&&R.relevantElements&&(g.relevantElementsSerialized=R.relevantElements.map(w=>u.getSerializedFormFromA11yId(w)).filter(w=>!!w),await hD(R.relevantElements,u,l)),{success:R.result,thoughts:R.thoughts,afterScreenshotOverride:f,updatedMemory:o?R.updatedMemory:void 0}}async function hD(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 V(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}}}import{cloneDeep as lA}from"lodash-es";async function cA(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=Ug(e.cache)?e.cache:void 0,a=lA(i),s=()=>{if(i){let g=KS(a,i);i.target=g.target,i.updatedAt=g.updatedAt}},c=Date.now(),l=0,u,d=500,p=!1;for(;l<2||Date.now()-c<t;){l++,l>1&&await Z(d,o),o?.throwIfAborted();let{result:g,elementWasFound:m}=await sA({cacheToUse:i,params:r});if(u=g,p=m,g.success)break;s(),d=Math.min(d*2,1e4)}if(!u)throw new x("InternalPlatformError",`Failed to evaluate manual element assertion in ${t}ms.`);if(o?.throwIfAborted(),!u.success&&i?.target&&as(i.target)){let g=i?.target?.memory?{target:{id:-1,memory:i.target.memory}}:void 0,{result:m}=await sA({cacheToUse:g,params:r});u=m,u.success||s()}return u.success&&i?.target&&!p&&(i.target=Td(i.target),i.updatedAt=new Date),u}async function sA({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!Jr(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=SD(t.assertion),l,u=!1,d=lA(r);try{let{elementInteractedDisplayString:p,result:g,thoughts:m}=await a({ctx:o.ctx,tracer:i,command:t,target:t.target,cache:d?.target,action:async h=>fD(h.locator,e),options:{...t,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:Bi(t),targetName:"target"}});return l={success:g.success,data:g.data,err:g.err,elementInteractedDisplayString:p,thoughts:m},u=!0,g.success||(s.warn({aiThoughts:m,elementString:p,err:g.err},"Element check found an element but failed"),l={...g,thoughts:m}),{result:l,elementWasFound:u}}catch(p){if(c)return l={success:!0,thoughts:`The element described does not exist on the page: ${p.message}`,err:void 0,data:void 0},{result:l,elementWasFound:u};if(!(p instanceof x)||p.reason!="ActionFailureError")throw p;return l={success:!1,err:p,data:void 0,thoughts:void 0},s.warn({err:p},"Element check did not find an element and failed"),{result:l,elementWasFound:u}}}async function fD(r,{command:e,fixtures:t}){let n=e.assertion;await t.browser.highlight(r);let o=!0,i,a;switch(n.type){case"ELEMENT_CONTENT":{let c=await r.textContent()??"";if(a={elementTextContent:At(c,500,!0)},!hc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Gn[n.operation]:jn[n.operation];o=!1,i=new x("AssertionFailureError",`The content ${l} '${n.value}': ${c}`)}break}case"ELEMENT_ATTRIBUTE":{a={elementOuterHtml:At(await r.evaluate(l=>l.cloneNode(!1).outerHTML),500,!0)};let c;try{c=await r.getAttribute(n.attr,{timeout:3e3})??""}catch(l){i=new x("AssertionFailureError",`The element does not have an attribute named ${n.attr}: ${l}`),o=!1;break}if(!hc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Gn[n.operation]:jn[n.operation];o=!1,n.operation==="EXISTS"?i=new x("AssertionFailureError",`The attribute ${n.attr} ${l}`):i=new x("AssertionFailureError",`The attribute ${n.attr} ${l} '${n.value}': ${c}`)}break}case"ELEMENT_EXISTENCE":{switch(n.condition){case"VISIBLE":{o=await r.evaluate(async(l,u)=>{let d=Date.now();for(;Date.now()-d<u;){await new Promise(g=>setTimeout(g,250));let p=l.getBoundingClientRect();if(!(p.width===0||p.height===0)&&window.getComputedStyle(l).visibility!=="hidden"&&window.getComputedStyle(l).display!=="none")return!0}return!1},Qr*1e3);break}case"EDITABLE":{o=await r.isEditable({timeout:Qr*1e3});break}case"EXISTS":{o=!0;break}case"ENABLED":{o=await r.isEnabled({timeout:Qr*1e3});break}case"FOCUSED":{o=await r.evaluate(l=>l===document.activeElement);break}default:return(l=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n.condition)}if(o=n.negated?!o:o,!o){let c=n.negated?YS[n.condition]:XS[n.condition];i=new x("AssertionFailureError",`The element ${c}`)}break}case"ELEMENT_NAME":{let c=await r.evaluate(l=>l.tagName);if(!hc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Gn[n.operation]:jn[n.operation];o=!1,i=new x("AssertionFailureError",`The element tag name ${l} '${n.value}': ${c}`)}break}case"ELEMENT_STYLE":{let c=await r.evaluate((l,u)=>window.getComputedStyle(l).getPropertyValue(u),n.property);if(!hc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Gn[n.operation]:jn[n.operation];o=!1,n.operation==="EXISTS"?i=new x("AssertionFailureError",`The style property ${n.property} ${l}`):i=new x("AssertionFailureError",`The style property ${n.property} ${l} '${n.value}': ${c}`)}break}default:return(c=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}return{success:o,data:a,err:i}}function hc(r,e,t,n){let o;switch(t){case"CONTAINS":{o=r.includes(e);break}case"EQUALS":{o=r.trim()===e.trim();break}case"STARTS_WITH":{o=r.trim().startsWith(e);break}case"EXISTS":{o=r.trim().length>0;break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}return n?!o:o}function SD(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&(r.condition==="EXISTS"||r.condition==="VISIBLE")}function uA(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as yD}from"jimp";async function Ia(r,e){let t=await r.screenshot(e),n=await yD.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as dA}from"jimp";import cm from"jpeg-js";import bD from"pixelmatch";async function pA({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!Jr(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 k=>Ia(o,{locator:k.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await Ia(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 D=`${l.width}x${l.height}`,k=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${D}) does not match saved screenshot dimensions (${k}) - 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 dA.fromBuffer(l.buffer),p={width:l.width,height:l.height},g=await dA.fromBuffer(u.buffer),m={width:u.width,height:u.height},h,f=p.width*p.height,b=m.width*m.height,E=Math.abs(p.height-m.height),_=Math.abs(p.width-m.width);if(f>b){let D=d.cover({w:m.width,h:m.height});l.buffer=await D.getBuffer("image/jpeg"),h="current",l.width=m.width,l.height=m.height}else if(b>f){let D=g.cover({w:p.width,h:p.height});u.buffer=await D.getBuffer("image/jpeg"),h="saved"}let v={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},A=t.threshold??.1,R=bD(cm.decode(u.buffer).data,cm.decode(l.buffer).data,v.data,l.width,l.height,{threshold:A,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,w=R>A*100,B=`Visual diff of ${R.toFixed(2)}% detected, which is ${w?"over":"under"} the threshold of ${A*100}%.`;if(h&&(B+=` The ${h} screenshot was cropped since it was taller by ${E} pixels and wider by ${_} pixels.`),w)throw new x("ActionFailureError",B);return{fail:w,thoughts:B,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:cm.encode(v,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var ED=3e4;async function fc({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??ED/1e3,i=Object.fromEntries(Object.entries(r.headers||{}).filter(([g,m])=>g&&m)),a=new URLSearchParams;Object.entries(r.params||{}).filter(([g,m])=>g&&m).forEach(([g,m])=>{a.append(g,m)});let s=a.toString(),c;if(Ho(r.url)&&(c=r.url),t&&Go(r.url,t)&&(c=new URL(r.url,t).toString()),!c)throw new x("ActionFailureError",`Invalid URL: ${r.url}`);e.info({url:c,searchParams:s,headers:i,body:r.body,method:r.method},"Making HTTP request");let u=await V((async()=>{let g=s?`${c}?${s}`:c;try{return await n(g,{headers:i,method:r.method,body:r.body})}catch(m){throw e.error({err:m},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${m}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new x("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!u.ok){let g;try{g=await u.text()}catch(m){g=`Failed to read response body: ${m}`}throw new x("ActionFailureError",`Fetch request failed with status ${u.status}: ${g}`)}let d={};u.headers.forEach((g,m)=>{d[m]=g});let p={status:u.status,headers:d};if(u.headers.get("content-type")?.includes("json"))try{p.json=await u.json()}catch{}else u.headers.get("content-type")?.includes("text")&&(p.text=await u.text());return p}var TD=5e3;async function hA({timeout:r=Qr,...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 mA(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 Z(s,e.signal),s=Math.min(Math.floor(s*1.5),TD);else return i}return i=await mA(e),i}async function mA({assertion:r,browser:e,autoExpandIframes:t}){switch(r.type){case"CONTENT":{let o,i=!1,a;try{let s;if(t){let c=await e.evaluateFunctionInAllFrames(gA,{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(gA,{value:r.value,negated:!!r.negated,returnHtml:!0},"checking page content"));if(!i){let c=r.negated?Gn.CONTAINS:jn.CONTAINS;a=new x("AssertionFailureError",`The page ${c} '${r.value}'.`),o=s}}catch(s){a=new x("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.type)}}function gA({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 vD=3e4;async function fA({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??vD/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,p])=>d&&p));a["Content-Type"]="application/json";let s;if(Ho(r.url)&&(s=r.url),t&&Go(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new x("ActionFailureError",`Invalid URL: ${r.url}`);let l=await V((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 x("ActionFailureError",`GraphQL request timed out after ${o} seconds`);if(!l.ok){let d,p=await l.text();try{d=JSON.parse(p)}catch{throw new x("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}throw d?.errors?.length&&d?.errors[0]?.message?new x("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new x("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}let u={};return l.headers.forEach((d,p)=>{u[p]=d}),{status:l.status,headers:u,json:await l.json()}}var Sc=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([Tn(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 ao({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}}),p={url:this.browser.url(),browserState:d,startingScreenshot:t,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(p,{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([Tn(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")}`,p=await ao({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}}),g={url:c,browserState:p,startingScreenshot:t,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(g,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Se(a)},langfuseSessionId:s})}catch(m){throw new x("InternalWebAgentError",`Error generating command: ${m instanceof Error?m.message:m}`,{errOptions:{cause:m}})}}async getBrowserState(e){return Tn(this.browser,e)}async locateElement(e){return await lm({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,t){return Or({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 p=i[d],g=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:p,cache:a[d],action:async m=>m,options:{...c,targetName:o[d]}});u.push(g)}try{let d=await s(...u.map(m=>m.result)),p=m=>m==="fromTarget"?"From Target":m==="toTarget"?"To Target":"Target",g=u.map((m,h)=>m.thoughts?`${p(o[h])}: ${m.thoughts}`:void 0).filter(m=>!!m).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(m=>m.elementInteractedDisplayString),thoughts:g}}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 x("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 Or({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&&Qu(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(td(i)||ed(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(rd(i)){t.warn({err:i},"Invalid backend node id error, retrying element targeting command");continue}if(i instanceof Er&&i.retryableWithAI){t.warn({err:i},"Element cache disqualification error, retrying element targeting command");continue}throw i}throw n instanceof x?n:new x("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 x("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 Z(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:p,source:g}=s,m=this.logger.child({commandId:c.id}),h=this.shouldUseMemory(),f=s.retriesWithAI??1,b=!1,E=SA(e.cache);if((!E||l)&&!iu(o))throw new x("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(e);l&&(m.info("Cache explicitly disabled for this step"),b=!0,E=void 0),E&&this.browser.userBrowserSettings.disableSecondaryCacheResolution&&E.targetSource==="HEURISTIC_HEALED"&&(b=!0,E=void 0),E?.inputDescription&&!oA(o.elementDescriptor,E.inputDescription)&&(m.warn({old:E.inputDescription,new:o.elementDescriptor},"Target cache was generated with a different description, clearing it automatically"),b=!0,E=void 0);let _=A=>!!A&&as(A),v=!0;if(!_(E)){v=!1,m.info({description:o.elementDescriptor,targetHealingInProgress:p,cacheBustedBeforeAction:b,memory:s.memory,useMemory:h},"Prompting AI for an updated element location"),b&&await Z(this.browser.smartWaitingTimeout,this.executeAbortController.signal),f--;let A;try{A=await lm({description:o.elementDescriptor,disableCache:!!s.disableCache,iframeUrl:s.iframeUrl,source:g,useMemory:h,memory:h?s.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,logger:m},this.getControllerFixtures(t))}catch(w){if(w instanceof Fo&&w.updatedLocatorMemory){let B={id:-1,...i,memory:w.updatedLocatorMemory};el({cmd:c,key:d,newTarget:B,logger:m,updatedWithAI:!0})}throw new x("ActionFailureError",w.message)}A.frameConfig&&this.browser.setActiveFrameConfig(A.frameConfig);let P=s.disableGlobalLocatorRedirect?{locator:A.resolution.locator}:await this.attemptLocatorRedirect(A.resolution.locator,m),R=await a(P);return el({cmd:c,key:d,newTarget:A.target,logger:m,updatedWithAI:!0}),p&&(n.recordTargetAutoHeal({healType:"AI"}),A.target.targetSource="AI_HEALED",A.target.targetUpdateTime=new Date().toUTCString(),A.target.targetUpdateLoggerTags=Se(m)),{result:R,elementInteractedDisplayString:A.resolution.displayString,thoughts:A.thoughts}}try{let A=await this.browser.resolveTarget(t,E,{allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,targetName:d,logger:m,signal:this.executeAbortController.signal});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await this.browser.scrollIntoViewIfNeeded(A.locator);let P=s.disableGlobalLocatorRedirect?{locator:A.locator}:await this.attemptLocatorRedirect(A.locator,m),R=await a(P);if(kt.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!E.requirements}`,`hasAdditionalElements:${!!E.additionalElements}`,`orgId:${this.orgId}`]),el({cmd:c,key:d,newTarget:E,logger:m,updatedWithAI:!1}),v){let w=A.decisions.filter(B=>B.matched);if(w.length!==1)m.warn({decisions:A.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let B=w[0].type;n.recordTargetAutoHeal({healType:B})}}return{result:R,elementInteractedDisplayString:A.displayString}}catch(A){this.throwIfClosed(),kt.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!E.requirements}`,`hasAdditionalElements:${!!E.additionalElements}`,`orgId:${this.orgId}`]);let P=!1;if((A instanceof Er||Qu(A)||td(A)||rd(A)||Ef(A)||ed(A))&&(P=!0),A instanceof x&&!P)throw m.error({err:A},"Failed to execute action with cached target (fatal)"),A;if(f>0&&o){m.info({err:A},"Failed to execute action with cached target, retrying with AI");let R;return E.memory&&Pg(E.memory)&&(R=E.memory),this.wrapElementTargetingCommand({ctx:t,tracer:n,command:c,target:o,cache:void 0,originalCache:i,action:a,options:{...s,memory:R,retriesWithAI:f,targetHealingInProgress:!0}})}throw new x("ActionFailureError",A.message,{errOptions:{cause:A}})}}async attemptLocatorRedirect(e,t){return this.browser.userBrowserSettings.globalLocatorRedirect!==!1?this.browser.performTargetRedirection(e,t):{locator:e}}async screenshotWithDimensions(e){return Ia(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await Z(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 x("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&&Hg(n)?await this.browser.waitForDOMStability({timeout:2e3}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:1e3}),this.options?.autoFollowNewTabs&&await Yv({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{Qs(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>Ld(e)}}async resolveCommandTemplateStrings(e,t){return Zs({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()?gc({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 x("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new x("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return gc({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new x("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let f=CS(n.schema);if(f)throw new x("UserConfigurationError",f)}let m=await this.browser.getCondensedHtml(),h=await this.browser.screenshot({retries:2});try{let f=await this.generator.getTextExtraction({goal:n.goal,browserState:m,returnSchema:n.schema,screenshot:`data:image/jpeg;base64,${h.toString("base64")}`},{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:Se(a)});if(f.result==="NOT_FOUND")throw new x("ActionFailureError","No relevant data found for extraction goal on this page");if(f.thoughts?.includes("MaxGenerationLengthExceededError"))throw new x("UserConfigurationError",f.thoughts);return{thoughts:f.thoughts||void 0,data:f.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(f){let b=f.message;throw b.includes("MaxGenerationLengthExceededError")?new x("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."):b.includes("AIProviderError")&&b.includes("time")?new x("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:f}}):f}}case"NAVIGATE":if(!Ho(n.url)&&!Go(n.url,this.browser.baseUrl))throw new x("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":if(!this.browser.canSolveCaptchas())break;let c=await this.browser.solveCaptcha();c&&(await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:"the captcha image solution input"},cache:void 0,action:m=>this.browser.click(m,this.createCallbacksForBrowser(this.orgId),{}),options:{...n,targetName:"target",disableCache:i}}),await this.browser.type(c,{clearContent:!0,pressEnter:!0},!0));break;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 m,h;if(n.target&&Sr(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:E,thoughts:_}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:v=>this.browser.hover(v),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});m=E,h=_}let f=this.browser.getViewport()?.height??rn.height,b=this.browser.getViewport()?.width??rn.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??f));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??f);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??b));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??b);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new x("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let m=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:m},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case"WAIT":if(n.delay>1800)throw new x("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let l=n.delay*1e3;await Z(l,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(Sr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let m=this.browser.url(),{elementInteractedDisplayString:h,result:f,thoughts:b}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:_=>this.browser.click(_,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),E={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:b,data:f.downloadedFile?{downloadedFile:f.downloadedFile}:void 0};return sl(m,E.urlAfterCommand)&&(E.succeedImmediately=!0,E.succeedImmediatelyReason="URL changed"),E}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(Sr(n.fromTarget)&&Sr(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverSeconds:n.hoverSeconds});break}if(Sr(n.fromTarget)||Sr(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:m,thoughts:h}=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:(f,b)=>this.browser.dragAndDrop(f.locator,b.locator,{hoverSeconds:n.hoverSeconds,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m[0],thoughts:h}}case"MOUSE_DRAG":{let m=parseInt(n.deltaX),h=parseInt(n.deltaY),f=n.steps??5;if(isNaN(m)||isNaN(h))throw new x("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Sr(n.target)){await this.browser.mouseDragUsingVisualCoordinates(m,h,f,n.target.pixels,{force:n.force});break}let b,E,_;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:v,result:A,thoughts:P}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async R=>R.locator,options:{disableCache:i,targetName:"target",...n}});b=A,E=v,_=P}return await this.browser.mouseDrag(m,h,f,b,{force:n.force}),{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:E,thoughts:_}}case"SELECT_OPTION":{if(!Jr(n.target))throw new Error("Select with x/y is not supported yet");let m=n.target.elementDescriptor,h=n.choice,{elementInteractedDisplayString:f,thoughts:b}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:m},cache:n.cache?.target,action:E=>this.browser.selectOption(E,h,n.force),options:{...n,targetName:"target",disableCache:i,source:Bi(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:b}}case"TAB":{let m={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:!0};await this.browser.switchToPage(n.action,m);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 u=await this.browser.setCookie(n.value);a.debug({results:u},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let m;try{n.environment==="BROWSER"?(m=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:m},"Executed JavaScript in browser")):m=await Ar({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 h=>{if(!this.options?.scratchPadId){a.warn({updates:h},"Got persistent variable updates but scratch pad is not available");return}await this.storage.savePersistentVariables?.({scratchPadId:this.options?.scratchPadId,orgId:this.orgId,updates:h,logger:a})}}})}catch(h){throw this.throwIfClosed(),new x("ActionFailureError",h instanceof Error?h.message:`${h}`,{errOptions:{cause:h}})}try{JSON.stringify(m)}catch(h){throw new x("ActionFailureError",`Return value is not serializable: ${h instanceof Error?h.message:`${h}`}`,{errOptions:{cause:h}})}return{urlAfterCommand:this.browser.url(),succeedImmediately:!1,data:m}}case"TYPE":{if(n.target&&Sr(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 m=this.browser.url(),h,f,b=SA(n.target);if(b){let{elementInteractedDisplayString:_,thoughts:v}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:b,cache:n.cache?.target,action:A=>this.browser.typeIntoTarget(n.value,A,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter}),options:{...n,targetName:"target",disableCache:i,disableGlobalLocatorRedirect:!0,source:Bi(n)}});h=_,f=v}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let E={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:f};return sl(m,E.urlAfterCommand)&&(E.succeedImmediately=!0,E.succeedImmediatelyReason="URL changed"),E}case"HOVER":{if(Sr(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.hover(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"FOCUS":{if(!Jr(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.focus(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"BLUR":{if(n.target&&!Jr(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:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:f=>this.browser.blur(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"PRESS":let d=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let p={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return sl(d,p.urlAfterCommand)&&(p.succeedImmediately=!0,p.succeedImmediatelyReason="URL changed"),p;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 m=new wD,h=AD(fetch,m),f;try{f=new URL(n.url).hostname}catch{}return{data:{...await fc({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:h}),cookies:_s(m,f)},succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await fA({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return pA({ctx:e,tracer:t,command:n,disableCache:i,browser:this.browser,logger:a,storage:this.storage,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:m=>this.wrapElementTargetingCommand(m)});case"FILE_UPLOAD":{let m,h;if(n.fileSource.type==="URL"?(h=n.fileSource.url,m=await Hy({uri:n.fileSource.url,logger:a,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(h=n.fileSource.name,m=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!m)throw new x("UserConfigurationError",`Attempted to use non-existent file for upload step: ${h}`);await this.browser.setFileChooserHandler({...m,filename:n.filename});break}case"AUTH_SAVE":return{data:await this.browser.saveAuthState(),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AUTH_LOAD":{let m;if(!n.storageState.trim())m=void 0;else if(m=await Ar({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof m!="object")throw new x("ActionFailureError",`Credentials must evaluate to an object (received ${typeof m} instead)`);let h;try{h=Yh.optional().parse(m)}catch(f){throw new x("ActionFailureError",`Credentials provided do not follow the required format: ${f}`)}await this.browser.loadAuthState(h);break}case"ELEMENT_CHECK":{let m=(n.timeout??Qr)*1e3,h=this.generator.getAgentConfig()?.assertion;if(uA(n.assertion)&&!n.useSelector&&n.target.type==="description"&&h&&h!=="v1"){let b={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,cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let E=await gc({command:b,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),source:"NEGATED_CHECK"});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${E.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:E.afterScreenshotOverride}}finally{b.cache?.memory&&tl(n,b.cache?.memory.traces,a)}}let f=await cA({command:n,tracer:t,timeoutMs:m,targetingWrapper:b=>this.wrapElementTargetingCommand(b),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!f.success,data:f.data,elementInteracted:f.elementInteractedDisplayString,thoughts:f.err?.message??f.thoughts??`Element assertion ${f.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let m=await Or({action:async()=>hA({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:!m.success,data:m.data,thoughts:m.success?"Page assertion passed.":m.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:!1}}case"REGISTER_REQUEST_LISTENER":{let m=new gn(n.requestMatcher),h=this.browser.registerRequestListener(m);return this.registeredListeners[n.key]=h.then(async f=>await Xd(f)).catch(f=>{a.error({err:f},"Failed to get request listener response")}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"AWAIT_LISTENER":{let m=this.registeredListeners[n.key];if(!m)throw new x("ActionFailureError",`No listener registered with key: ${n.key}`);let h=n.timeout??10;return{data:await V(m,{milliseconds:h*1e3,message:`Request listener timed out after ${h} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let m=new gn(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,m,{onRequestStart:(h,f)=>{this.recordedRequests[n.key][h]=hl(f)},onRequestComplete:(h,f)=>{this.recordedRequests[n.key][h]=hl(f)}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let m=this.recordedRequests[n.key];if(!m)throw new x("ActionFailureError",`No recorder registered with key: ${n.key}`);return delete this.recordedRequests[n.key],{data:Object.values(m),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"SET_HEADER":{let m;return n.requestMatcher&&(m=new gn(n.requestMatcher)),this.browser.setHeader(n.name,n.value,m),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"MOCK_ROUTE":return{data:{key:this.browser.registerMock(n.key,new gn(n.requestMatcher),async(h,f)=>{let b=await Ar({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:h,response:f},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),E=uf.parse(b);return new Response(E.body,{status:E.status,headers:E.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(m=>{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 Sl({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{mkdirSync as qD}from"fs";import{tmpdir as KD}from"os";import IA from"path";import{cloneDeep as RD}from"lodash-es";import vA from"truncate-json";var yA=1e3,bA=5e6,CD=5*1024*1024;function AA(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=vA(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":EA(n);break;case"MOBILE_MODULE_STEP":EA(n),AA(n.steps,e);break;default:return(()=>{throw new Error("If Typescript complains about the line below, you missed a case or break in the switch above")})()}}}function EA(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function TA(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 yc(r,e){let t=RD(r);if(AA(t,e),t.length>yA)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,yA);let n=TA(t,e);if(n.length>bA)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>bA;)t.pop(),n=TA(t,e);let{jsonString:o}=vA(n,CD);try{return dr.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 xD}from"async_hooks";var Oa=new xD;function _D(r){Oa.enterWith({activeTracers:[r]})}function MD(r,e){let t=Oa.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function PD(r,e){let t=Oa.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return Oa.run({activeTracers:n},e)}var vn={globalAls:Oa,initializeRootTracerContext:_D,withChildTracer:MD,withChildTracerAsync:PD};var so=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 vn.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){let n={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},o=new r(n);this.addSpan(n);try{return await vn.withChildTracerAsync(o,()=>t(o,n))}catch(i){throw n.error=i instanceof Error?i.message:String(i),i}finally{o.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??{}),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:{}},i=n[0]??void 0;Object.assign(o,i??{}),this.addSpan(o);let a;try{a=await 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}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 ot(){let r=vn.globalAls.getStore()?.activeTracers,e;return!r||r.length===0?e=void 0:e=r[r.length-1],e||new so}import{diff as $D}from"deep-object-diff";import{cloneDeep as WD}from"lodash-es";import CA from"fontoxpath";import ID from"@prettier/plugin-xml";import OD from"prettier";import{DOMParser as LD,XMLSerializer as ND}from"slimdom";function um(r){return r.toLowerCase().endsWith("webview")}function kD(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 DD=new Set(["index","package","a11y-important","screen-reader-focusabl"]),UD=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"]),FD=new Set(["text","hint"]),BD=new Set(["live-region","drawing-order"]),zD=new Set(["displayed","enabled"]);function HD(r,e){let t={};for(let[n,o]of Object.entries(e))DD.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||UD.has(n)&&o==="false"||FD.has(n)&&o===""||zD.has(n)&&o==="true"||BD.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function wA(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 p of e.attributes){let g=p.name,m=p.value;m!=null&&(l[g]=String(m))}let u=HD(e.tagName,l);for(let[p,g]of Object.entries(u))t.setAttribute(p,g);if(o.set(c,e),i.set(c,t),um(e.tagName)){let p=s?.injectedWebviewContent??"";if(!s?.disableMomenticAccessibilityTree&&p.trim().length>0){for(;t.firstChild;)t.removeChild(t.firstChild);p.trim().length>0&&t.appendChild(n.createCDATASection(`
3968
+ `,Lm(l,e),`To resolve the conflict:
3969
+ `,Nm(l,e))}}catch(u){n={error:u}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}return i},r}();var ZA=function(){function r(e){this._backingStorages=e}return r.prototype.record=function(e,t,n,o){this._backingStorages.forEach(function(i){i.record(e,t,n,o)})},r}();Ce();Ce();var QA=function(){function r(e,t){this._instrumentName=e,this._valueType=t,this._buffer=new Tr}return r.prototype.observe=function(e,t){if(t===void 0&&(t={}),typeof e!="number"){V.warn("non-number value provided to metric "+this._instrumentName+": "+e);return}this._valueType===zt.INT&&!Number.isInteger(e)&&(V.warn("INT value type cannot accept a floating-point value for "+this._instrumentName+", ignoring the fractional digits."),e=Math.trunc(e),!Number.isInteger(e))||this._buffer.set(t,e)},r}();var ew=function(){function r(){this._buffer=new Map}return r.prototype.observe=function(e,t,n){if(n===void 0&&(n={}),!!Va(e)){var o=this._buffer.get(e);if(o==null&&(o=new Tr,this._buffer.set(e,o)),typeof t!="number"){V.warn("non-number value provided to metric "+e._descriptor.name+": "+t);return}e._descriptor.valueType===zt.INT&&!Number.isInteger(t)&&(V.warn("INT value type cannot accept a floating-point value for "+e._descriptor.name+", ignoring the fractional digits."),t=Math.trunc(t),!Number.isInteger(t))||o.set(n,t)}},r}();var Dm=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())})},Um=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}}},tw=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},rw=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))},nw=function(){function r(){this._callbacks=[],this._batchCallbacks=[]}return r.prototype.addCallback=function(e,t){var n=this._findCallback(e,t);n>=0||this._callbacks.push({callback:e,instrument:t})},r.prototype.removeCallback=function(e,t){var n=this._findCallback(e,t);n<0||this._callbacks.splice(n,1)},r.prototype.addBatchCallback=function(e,t){var n=new Set(t.filter(Va));if(n.size===0){V.error("BatchObservableCallback is not associated with valid instruments",t);return}var o=this._findBatchCallback(e,n);o>=0||this._batchCallbacks.push({callback:e,instruments:n})},r.prototype.removeBatchCallback=function(e,t){var n=new Set(t.filter(Va)),o=this._findBatchCallback(e,n);o<0||this._batchCallbacks.splice(o,1)},r.prototype.observe=function(e,t){return Dm(this,void 0,void 0,function(){var n,o,i,a;return Um(this,function(s){switch(s.label){case 0:return n=this._observeCallbacks(e,t),o=this._observeBatchCallbacks(e,t),[4,tA(rw(rw([],tw(n),!1),tw(o),!1))];case 1:return i=s.sent(),a=i.filter(rA).map(function(c){return c.reason}),[2,a]}})})},r.prototype._observeCallbacks=function(e,t){var n=this;return this._callbacks.map(function(o){var i=o.callback,a=o.instrument;return Dm(n,void 0,void 0,function(){var s,c;return Um(this,function(l){switch(l.label){case 0:return s=new QA(a._descriptor.name,a._descriptor.valueType),c=Promise.resolve(i(s)),t!=null&&(c=Cn(c,t)),[4,c];case 1:return l.sent(),a._metricStorages.forEach(function(u){u.record(s._buffer,e)}),[2]}})})})},r.prototype._observeBatchCallbacks=function(e,t){var n=this;return this._batchCallbacks.map(function(o){var i=o.callback,a=o.instruments;return Dm(n,void 0,void 0,function(){var s,c;return Um(this,function(l){switch(l.label){case 0:return s=new ew,c=Promise.resolve(i(s)),t!=null&&(c=Cn(c,t)),[4,c];case 1:return l.sent(),a.forEach(function(u){var d=s._buffer.get(u);d!=null&&u._metricStorages.forEach(function(p){p.record(d,e)})}),[2]}})})})},r.prototype._findCallback=function(e,t){return this._callbacks.findIndex(function(n){return n.callback===e&&n.instrument===t})},r.prototype._findBatchCallback=function(e,t){return this._batchCallbacks.findIndex(function(n){return n.callback===e&&nA(n.instruments,t)})},r}();var OU=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)}}(),ow=function(r){OU(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 vc(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new Ac(n,i),s}return e.prototype.record=function(t,n,o,i){n=this._attributesProcessor.process(n,o),this._deltaMetricStorage.record(t,n,o,i)},e.prototype.collect=function(t,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(t,this._instrumentDescriptor,o,n)},e}(Tc);var iw=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)}}(),gi=function(){function r(){}return r.Noop=function(){return NU},r}();var LU=function(r){iw(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.process=function(t,n){return t},e}(gi);var aw=function(r){iw(e,r);function e(t){var n=r.call(this)||this;return n._allowedAttributeNames=t,n}return e.prototype.process=function(t,n){var o=this,i={};return Object.keys(t).filter(function(a){return o._allowedAttributeNames.includes(a)}).forEach(function(a){return i[a]=t[a]}),i},e}(gi);var NU=new LU;var kU=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}}},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},sw=function(){function r(e,t){this._meterProviderSharedState=e,this._instrumentationScope=t,this.metricStorageRegistry=new JA,this.observableRegistry=new nw,this.meter=new qA(this)}return r.prototype.registerMetricStorage=function(e){var t=this._registerMetricStorage(e,ow);return t.length===1?t[0]:new ZA(t)},r.prototype.registerAsyncMetricStorage=function(e){var t=this._registerMetricStorage(e,XA);return t},r.prototype.collect=function(e,t,n){return kU(this,void 0,void 0,function(){var o,i,a;return DU(this,function(s){switch(s.label){case 0:return[4,this.observableRegistry.observe(t,n?.timeoutMillis)];case 1:return o=s.sent(),i=this.metricStorageRegistry.getStorages(e),i.length===0?[2,null]:(a=i.map(function(c){return c.collect(e,t)}).filter(Qv),a.length===0?[2,{errors:o}]:[2,{scopeMetrics:{scope:this._instrumentationScope,metrics:a},errors:o}])}})})},r.prototype._registerMetricStorage=function(e,t){var n=this,o=this._meterProviderSharedState.viewRegistry.findViews(e,this._instrumentationScope),i=o.map(function(c){var l=aA(c,e),u=n.metricStorageRegistry.findOrUpdateCompatibleStorage(l);if(u!=null)return u;var d=c.aggregation.createAggregator(l),p=new t(l,d,c.attributesProcessor,n._meterProviderSharedState.metricCollectors,c.aggregationCardinalityLimit);return n.metricStorageRegistry.register(p),p});if(i.length===0){var a=this._meterProviderSharedState.selectAggregations(e.type),s=a.map(function(c){var l=UU(c,2),u=l[0],d=l[1],p=n.metricStorageRegistry.findOrUpdateCompatibleCollectorStorage(u,e);if(p!=null)return p;var h=d.createAggregator(e),m=u.selectCardinalityLimit(e.type),g=new t(e,h,gi.Noop(),[u],m);return n.metricStorageRegistry.registerForCollector(u,g),g});i=i.concat(s)}return i},r}();var FU=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.")},lw=function(){function r(e){this.resource=e,this.viewRegistry=new BA,this.metricCollectors=[],this.meterSharedStates=new Map}return r.prototype.getMeterSharedState=function(e){var t=eA(e),n=this.meterSharedStates.get(t);return n==null&&(n=new sw(this,e),this.meterSharedStates.set(t,n)),n},r.prototype.selectAggregations=function(e){var t,n,o=[];try{for(var i=FU(this.metricCollectors),a=i.next();!a.done;a=i.next()){var s=a.value;o.push([s,s.selectAggregation(e)])}}catch(c){t={error:c}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return o},r}();var wc=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())})},Rc=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}}},BU=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},zU=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))},cw=function(){function r(e,t){this._sharedState=e,this._metricReader=t}return r.prototype.collect=function(e){return wc(this,void 0,void 0,function(){var t,n,o,i,a=this;return Rc(this,function(s){switch(s.label){case 0:return t=mo(Date.now()),n=[],o=[],i=Array.from(this._sharedState.meterSharedStates.values()).map(function(c){return wc(a,void 0,void 0,function(){var l;return Rc(this,function(u){switch(u.label){case 0:return[4,c.collect(this,t,e)];case 1:return l=u.sent(),l?.scopeMetrics!=null&&n.push(l.scopeMetrics),l?.errors!=null&&o.push.apply(o,zU([],BU(l.errors),!1)),[2]}})})}),[4,Promise.all(i)];case 1:return s.sent(),[2,{resourceMetrics:{resource:this._sharedState.resource,scopeMetrics:n},errors:o}]}})})},r.prototype.forceFlush=function(e){return wc(this,void 0,void 0,function(){return Rc(this,function(t){switch(t.label){case 0:return[4,this._metricReader.forceFlush(e)];case 1:return t.sent(),[2]}})})},r.prototype.shutdown=function(e){return wc(this,void 0,void 0,function(){return Rc(this,function(t){switch(t.label){case 0:return[4,this._metricReader.shutdown(e)];case 1:return t.sent(),[2]}})})},r.prototype.selectAggregationTemporality=function(e){return this._metricReader.selectAggregationTemporality(e)},r.prototype.selectAggregation=function(e){return this._metricReader.selectAggregation(e)},r.prototype.selectCardinalityLimit=function(e){var t,n,o;return(o=(n=(t=this._metricReader).selectCardinalityLimit)===null||n===void 0?void 0:n.call(t,e))!==null&&o!==void 0?o:2e3},r}();var uw=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())})},dw=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}}},pw=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 HU(r,e){var t=e??yc.empty();return r?yc.default().merge(t):t}var Fm=function(){function r(e){var t,n,o,i,a;if(this._shutdown=!1,this._sharedState=new lw(HU((a=e?.mergeResourceWithDefaults)!==null&&a!==void 0?a:!0,e?.resource)),e?.views!=null&&e.views.length>0)try{for(var s=pw(e.views),c=s.next();!c.done;c=s.next()){var l=c.value;this._sharedState.viewRegistry.addView(l)}}catch(h){t={error:h}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}if(e?.readers!=null&&e.readers.length>0)try{for(var u=pw(e.readers),d=u.next();!d.done;d=u.next()){var p=d.value;this.addMetricReader(p)}}catch(h){o={error:h}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}}return r.prototype.getMeter=function(e,t,n){return t===void 0&&(t=""),n===void 0&&(n={}),this._shutdown?(V.warn("A shutdown MeterProvider cannot provide a Meter"),jp()):this._sharedState.getMeterSharedState({name:e,version:t,schemaUrl:n.schemaUrl}).meter},r.prototype.addMetricReader=function(e){var t=new cw(this._sharedState,e);e.setMetricProducer(t),this._sharedState.metricCollectors.push(t)},r.prototype.shutdown=function(e){return uw(this,void 0,void 0,function(){return dw(this,function(t){switch(t.label){case 0:return this._shutdown?(V.warn("shutdown may only be called once per MeterProvider"),[2]):(this._shutdown=!0,[4,Promise.all(this._sharedState.metricCollectors.map(function(n){return n.shutdown(e)}))]);case 1:return t.sent(),[2]}})})},r.prototype.forceFlush=function(e){return uw(this,void 0,void 0,function(){return dw(this,function(t){switch(t.label){case 0:return this._shutdown?(V.warn("invalid attempt to force flush after MeterProvider shutdown"),[2]):[4,Promise.all(this._sharedState.metricCollectors.map(function(n){return n.forceFlush(e)}))];case 1:return t.sent(),[2]}})})},r}();var GU=/[\^$\\.+?()[\]{}|]/g,Cc=function(){function r(e){e==="*"?(this._matchAll=!0,this._regexp=/.*/):(this._matchAll=!1,this._regexp=new RegExp(r.escapePattern(e)))}return r.prototype.match=function(e){return this._matchAll?!0:this._regexp.test(e)},r.escapePattern=function(e){return"^"+e.replace(GU,"\\$&").replace("*",".*")+"$"},r.hasWildcard=function(e){return e.includes("*")},r}();var fi=function(){function r(e){this._matchAll=e===void 0,this._pattern=e}return r.prototype.match=function(e){return!!(this._matchAll||e===this._pattern)},r}();var mw=function(){function r(e){var t;this._nameFilter=new Cc((t=e?.name)!==null&&t!==void 0?t:"*"),this._type=e?.type,this._unitFilter=new fi(e?.unit)}return r.prototype.getType=function(){return this._type},r.prototype.getNameFilter=function(){return this._nameFilter},r.prototype.getUnitFilter=function(){return this._unitFilter},r}();var hw=function(){function r(e){this._nameFilter=new fi(e?.name),this._versionFilter=new fi(e?.version),this._schemaUrlFilter=new fi(e?.schemaUrl)}return r.prototype.getNameFilter=function(){return this._nameFilter},r.prototype.getVersionFilter=function(){return this._versionFilter},r.prototype.getSchemaUrlFilter=function(){return this._schemaUrlFilter},r}();function jU(r){return r.instrumentName==null&&r.instrumentType==null&&r.instrumentUnit==null&&r.meterName==null&&r.meterVersion==null&&r.meterSchemaUrl==null}var Bm=function(){function r(e){var t;if(jU(e))throw new Error("Cannot create view with no selector arguments supplied");if(e.name!=null&&(e?.instrumentName==null||Cc.hasWildcard(e.instrumentName)))throw new Error("Views with a specified name must be declared with an instrument selector that selects at most one instrument per meter.");e.attributeKeys!=null?this.attributesProcessor=new aw(e.attributeKeys):this.attributesProcessor=gi.Noop(),this.name=e.name,this.description=e.description,this.aggregation=(t=e.aggregation)!==null&&t!==void 0?t:lr.Default(),this.instrumentSelector=new mw({name:e.instrumentName,type:e.instrumentType,unit:e.instrumentUnit}),this.meterSelector=new hw({name:e.meterName,version:e.meterVersion,schemaUrl:e.meterSchemaUrl}),this.aggregationCardinalityLimit=e.aggregationCardinalityLimit}return r}();var Xye=process.env.APP||"unknown";Ce();import{v4 as VU}from"uuid";function WU(){return new Xv({url:"https://us-west.metrics.momentic.ai/v1/metrics",headers:{"x-momentic-metrics-api-key":"c60c6a0f-60da-41a7-a61b-07969a0aa303"},temporalityPreference:uo.DELTA})}var $U=[new Bm({instrumentName:"test_operation_duration_ms",instrumentType:pe.HISTOGRAM,aggregation:new hc([100,500,1e3,5e3,1e4,2e4])})],xc=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(e){let t=this.counterCache.get(e);if(t)return t;let n=this.meter.createCounter(e);return this.counterCache.set(e,n),n}getHistogram(e){let t=this.histogramCache.get(e);if(t)return t;let n=this.meter.createHistogram(e);return this.histogramCache.set(e,n),n}ensureObservableGauge(e){let t=this.observableGaugeCache.get(e);if(t)return t;let n=this.meter.createObservableGauge(e);return n.addCallback(o=>{let i=this.gaugeValues.get(e);i!==void 0&&o.observe(i,this.globalAttributes)}),this.observableGaugeCache.set(e,n),n}constructor(e){this.globalAttributes={...e.globalAttributes??{}};let t=typeof process<"u"?"production":"unknown",n=new sm({[Wl]:e.serviceName,[$T]:t,[KT]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:VU()}),o=WU(),i=new Pm({exporter:o,exportIntervalMillis:e.exportIntervalMs??15e3});this.provider=new Fm({resource:n,readers:[i],views:$U}),Hl.setGlobalMeterProvider(this.provider),this.meter=Hl.getMeter("momentic-serverless")}increment(e,t,n){try{let o=Fl(n,this.globalAttributes);this.getCounter(e).add(typeof t=="number"?t:1,o)}catch{}}gauge(e,t){try{this.ensureObservableGauge(e),this.gaugeValues.set(e,t)}catch{}}distribution(e,t,n){try{let o=Fl(n,this.globalAttributes);this.getHistogram(e).record(t,o)}catch{}}async flush(){try{await this.provider.forceFlush()}catch{}}async recordDuration({fn:e,name:t,tags:n}){let o=Date.now();try{return await Promise.resolve(e())}finally{this.distribution(t,Date.now()-o,n)}}};var Ht=new Ul;function gw(r){r.disabled||(Ht=new xc(r))}import{CookieJar as yF}from"tough-cookie";async function zr({frameConfig:r,action:e,browser:t}){let n=t.getActiveFrameConfig();r?t.setActiveFrameConfig(r):n?.type==="auto"&&t.setActiveFrameConfig(void 0);try{return await e()}finally{t.setActiveFrameConfig(n)}}var qU=["NAVIGATE","NEW_TAB","TAB","REFRESH","WAIT_FOR_URL"];async function fw({beforeUrl:r,beforePages:e,browser:t,command:n,logger:o}){if(qU.includes(n.type))return;let s=("cache"in n&&n.cache&&"target"in n.cache?n.cache.target:void 0)?.nodeOnlySerializedHtml?.includes("<a")??!1?300:3e3,c=Date.now(),l=0;for(;l===0||Date.now()-c<s;){await te(250),l++;let u=(await t.getOpenPages()).map(p=>p.url),d=t.url();if(u.length!==e.length)for(let p=u.length-1;p>=e.length;p--){let h=u[p];if(ro(h,o)&&h!==r&&h!==d){o.info({beforePages:e,afterPages:u,beforeUrl:r},"Auto-following new tab after preset action"),await t.switchToPage({type:"INDEX",index:String(p)});break}}}}async function Mn(r,e={}){let t=await r.getBrowserState(e);return{serializedTree:t.serialize(e.serializationOpts),tree:t}}import{randomUUID as QU}from"crypto";var yw={minChunkTokenCount:500,acceptableChunkTokenCount:3e3,maxChunkTokenCount:8e3,maxLineLength:4e3},bw={minChunkTokenCount:5e3,acceptableChunkTokenCount:1e4,maxChunkTokenCount:3e4,maxLineLength:500},Sw=/<(\S+) id="(\d+)".*?>/g,KU=/(<\/(\S+)>)|(<(\S+).*?\/>)/g,Ew=["h1","h2","section","footer","nav","aside","form","label","dialog"],YU=[...Ew,"span","div","h3"],XU=["table","select","form","ul","ol","menu","pre","code","dialog"],JU=["table","form","dialog","nav","section","ul","select"];function _c(r){return ZU(r)}function ZU({logger:r,serializedTree:e,options:t}){let{minChunkTokenCount:n,acceptableChunkTokenCount:o,maxChunkTokenCount:i,maxLineLength:a}=t,s=[],c=e.split(`
3970
+ `),l=0,u=[],d=0,p=[],h=[],m=!1;for(;l<c.length;){m&&(s.push({ids:p,content:u.join(`
3971
+ `),tokenLength:d}),u=[],d=0,p=h.length?[h[h.length-1].id]:[],m=!1);let g=c[l],f=Or(g);d+=f,g.length>a&&(g=g.slice(0,a));let R=Array.from(g.matchAll(Sw)).map(K=>K&&K.length>=3?{tagName:K[1],id:K[2]}:void 0).filter(K=>!!K),v=Array.from(g.matchAll(KU)).map(K=>K&&(K[2]||K[4])).filter(K=>!!K);v.reverse();let P=g.replace(/ id="[0-9]+"/g,"");u.push(P);for(let K of R)p.push(K.id),h.push(K);for(let K of v){let G=h[h.length-1];G&&G.tagName===K&&h.pop()}let C=h.some(K=>XU.includes(K.tagName)),w=c[l+1]??"",B=Or(w),D=Array.from(w.matchAll(Sw)).map(K=>K&&K.length>2?K[1]:void 0).filter(K=>!!K),J=D.some(K=>Ew.includes(K)),Le=D.some(K=>YU.includes(K));d+B>=i&&(m=!0),d>=n&&(J&&!C||v.some(K=>JU.includes(K)))&&(m=!0),d>=o&&Le&&!C&&(m=!0),l++}return u.length&&s.push({ids:p,content:u.join(`
3972
+ `),tokenLength:d}),s.forEach((g,f)=>{let E=g.ids[0],S=g.ids[g.ids.length-1];r.debug({tokenLength:g.tokenLength,minId:E,maxId:S},`Chunk for page filtering (index ${f+1}/${s.length})`)}),{chunks:s}}var eF=75e4,Mc=3e5,tF=5e3;async function fo(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=Or(u);if(d>eF)try{let p=_c({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await nF({...r,tokenLimit:Mc-1e4,chunks:p.chunks}),u=l.serialize();let h=Or(u);i.info({oldTokens:d,newTokens:h},"Filtered page using keywords"),d=h}catch(p){i.warn({err:p},"Error filtering page using keyword matching, using naive truncation"),l=l.pruneToSerializedCharLimit(Mc*no),u=l.serialize();let h=Or(u);i.info({oldTokens:d,newTokens:h},"Filtered page using naive truncation"),d=h}if(d>Mc)try{if(o){let p=_c({serializedTree:u,options:bw,logger:i}),h=QU();l=await W(rF({...r,chunks:p.chunks,callId:h}),{milliseconds:12e3,signal:c}),u=l.serialize();let m=Or(u);i.info({oldTokens:d,newTokens:m,langfuseCallId:h},"Filtered page using AI chunk ranking"),d=m}else{let p=_c({serializedTree:u,options:yw,logger:i});l=await W(oF({...r,chunkResult:p,tokenLimit:4e4}),{milliseconds:12e3,signal:c}),u=l.serialize();let h=Or(u);i.info({oldTokens:d,newTokens:h},"Filtered page using RAG"),d=h}}catch(p){i.warn({err:p},"Error filtering page using RAG/AI, using naive truncation"),l=l.pruneToSerializedCharLimit(Mc*no),u=l.serialize(),i.info("Filtered page using naive truncation")}if(o&&d>tF&&r.type==="locator"&&(s==="org_01HMSCJQBCCG51M2ZF65YC5B8W"||s==="org_01HMJTX4GT1KG94KZRCT8MZ6YB"))try{let p=await a.getPageSummary({browserContext:u,currentStep:r.description,screenshot:n,type:r.type},{logger:i,loggerTags:ve(i),abortSignal:c});if(i.info(p,"Got AI summaries"),p.category!=="OTHER"){let h=new Set;for(let g of p.relevantSections){let f=Math.min(g.startId,g.endId),E=Math.max(g.startId,g.endId);for(let S=f;S<=E;S++)h.add(S.toString())}l=l.pruneUsingRelevantIds(h),u=l.serialize();let m=Or(u);i.info({newTokens:m,oldTokens:d},"Filtered page using AI summary"),d=m}}catch(p){i.warn({err:p},"Error filtering page using AI summary, continuing...")}return u}async function rF({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:ve(c)}),u=[];return t.forEach((p,h)=>{l.indices.includes(h)&&(u=u.concat(p.ids))}),i.pruneUsingRelevantIds(new Set(u))}async function nF(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:ve(i),abortSignal:a});i.info({keywordsResult:s},"Got keywords for page filtering");for(let c of s.keywords){let l=r.chunks.filter(h=>h.content.toLowerCase().includes(c.toLowerCase()));if(!l.length||l.reduce((h,m)=>h+m.tokenLength,0)>r.tokenLimit&&l.length>1)continue;let d=l.flatMap(h=>h.ids);return n.pruneUsingRelevantIds(new Set(d))}throw new Error("No keywords were unique enough for page filtering")}async function oF(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:ve(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 Hm(r,e){if(!r.description)throw new _("UserConfigurationError","Cannot locate element with empty description");return zr({action:async()=>iF(r,e),frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,browser:e.browser,logger:r.logger})}async function iF(r,e){let{disableCache:t,testContext:n,filterByViewport:o,skipWait:i,source:a,memory:s,aiPageFiltering:c,logger:l,allowNotActionableNodesOverride:u}=r,{ctx:d,orgId:p,browser:h,localCodeEvalTools:m,generator:g,abortSignal:f}=e,E=r.description,S=r.useMemory&&!t;n&&(E=await Gd({orgId:p,s:E,context:n,localTools:m,signal:f,logger:l})),a&&(E=sF(E,a));let{serializedTree:R,tree:A}=await Mn(h,{allowNotActionableNodesOverride:u,filterByViewport:o,abortSignal:f,skipWait:i,logger:l}),v,P=Date.now(),C;for(;!v&&Date.now()-P<3e3;){f.throwIfAborted();try{v=await h.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(ce){C=ce}}if(!v)throw new _("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${C?.message}`);let w=R,B=!1,D=`data:image/jpeg;base64,${v.toString("base64")}`;w=await fo({type:"locator",description:E,screenshot:D,serializedTree:R,options:{aiPageFiltering:c},tree:A,fixtures:{generator:g,signal:f,logger:l,orgId:p}}),w!==R&&(B=!0);let J=await g.getElementLocation({browserState:w,goal:E,screenshot:D,source:a,memory:S?s:void 0},{disableCache:t,abortSignal:f,loggerTags:ve(l),useMemory:S});l.debug({usedRag:B,result:J},"Got locator result");let Le=J.id>0;if(d?.details?.push({type:"AI_LOCATION",matched:Le,pageState:w,ragUsed:B,thoughts:J.thoughts}),!Le)throw new Do(`Could not find any relevant element: ${J.thoughts}`,J.updatedMemory?{type:"GCS_TRACES",traces:J.updatedMemory}:void 0);let{resolution:K,target:G,frameConfig:se}=await h.createTargetFromA11yId({id:J.id,requirements:J.requirements,additionalElements:J.additionalElements,description:E,targetSource:"AI",logger:l});if(K.a11yNode?.properties?.hidden&&K.a11yNode?.properties?.hidden!=="false")throw new _("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: ${K.displayString}`);return S&&(J.updatedMemory?G.memory={type:"GCS_TRACES",traces:J.updatedMemory}:s&&(G.memory=s)),{thoughts:J.thoughts,target:G,resolution:K,frameConfig:se,screenshot:D}}var aF=["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:"],Tw="<select> element:",vw="text input or contenteditable element:",Aw="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:",ww="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:",zm=[Tw,vw,Aw,ww,...aF];function Rw(r,e){if(r===e)return!0;for(let t of zm){if(!r.startsWith(t))continue;let n=r.slice(t.length).trim();if(zm.some(o=>e.startsWith(o)&&e.slice(o.length).trim()===n)||n===e.trim())return!0}return!!zm.some(t=>e.startsWith(t)&&e.slice(t.length).trim()===r.trim())}function sF(r,e){if(!r||!e)return r;switch(e){case"SELECT_OPTION":return`${Tw} ${r}`;case"TYPE":return`${vw} ${r}`;case"NEGATED_ELEMENT_VISIBLE_CHECK":return`${Aw}
3973
+ ${r}`;case"ELEMENT_CHECK":return`${ww}
3974
+ ${r}`;default:return r}}var lF=15;async function Ic({command:r,aiPageFiltering:e,logger:t,fixtures:n,source:o,useMemory:i,maxRetries:a=lF}){if(!r.assertion.trim())throw new _("ActionFailureError","Assertion command is missing the assertion content");let{browser:s}=n,c=r.timeout?r.timeout*1e3:s.smartWaitingTimeout,l=Tl(c),u=0,d=Date.now(),p,h,m;try{await zr({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 g;for(;u<a&&(!g||g-d<c);){n.abortSignal.throwIfAborted(),u!==0&&await te(l,n.abortSignal),g=Date.now();try{if(p=await zr({action:async()=>{let E=await Cw(s,t,n.abortSignal);return h&&h.serializedTree===E.serializedTree&&h.screenshotBuff.equals(E.screenshotBuff)?p:(h=E,xw({command:r,state:E,fixtures:n,useMemory:i,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:t,source:o}))},frameConfig:r.iframeUrl?{type:"url",url:r.iframeUrl}:void 0,logger:t,browser:s}),p?.updatedMemory&&Sl(r,p.updatedMemory,t),p?.success)break;throw p?.thoughts?new _("AssertionFailureError",p.thoughts):new _("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(f){n.abortSignal.throwIfAborted(),m=f instanceof Error?f:new Error(`${f}`),t.info({err:f},`AI check assert attempt ${u} failed, retrying...`)}finally{u++}}if(!p?.success)try{p=await zr({action:async()=>xw({command:r,state:await Cw(s,t,n.abortSignal),fixtures:n,useMemory:i,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(),m=f instanceof Error?f:new Error(`${f}`)}finally{u++}if(!p?.success){let f=`AI check still failing after ${u} attempts.`;throw m&&(f+=` Latest result: ${m.message}`),new _("AssertionFailureError",f)}return{...p,succeedImmediately:!1,urlAfterCommand:s.url()}}async function Cw(r,e,t){let[n,o]=await Promise.all([Mn(r,{abortSignal:t,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),r.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function xw({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:p}=t,h={type:"ASSERTION"},{serializedTree:m,tree:g}=e,f=e.screenshotBuff,E=f.toString("base64"),S=u.url(),R=r.contextChoice??"MULTIMODAL",A=m;R!=="VISION_ONLY"&&(A=await fo({type:"assertion",serializedTree:m,tree:g,description:r.assertion,screenshot:E,options:{aiPageFiltering:a},fixtures:{generator:d,signal:p,logger:l,orgId:t.orgId}}),A!==m&&(h.ragUsed=!0),h.pageState=A);let v={goal:r.assertion,url:S,memory:o?r.cache?.memory:void 0,browserState:A,screenshot:E,contextChoice:R,source:c},C=await(R==="VISION_ONLY"?(w,B)=>d.getVisualAssertionResult(w,B):(w,B)=>d.getAssertionResult(w,B))(v,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!r.disableCache,abortSignal:p,logger:l,loggerTags:ve(l)});return(C.result||i)&&C.relevantElements&&(h.relevantElementsSerialized=C.relevantElements.map(w=>u.getSerializedFormFromA11yId(w)).filter(w=>!!w),await cF(C.relevantElements,u,l)),{success:C.result,thoughts:C.thoughts,afterScreenshotOverride:f,updatedMemory:o?C.updatedMemory:void 0}}async function cF(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 W(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}}}import{cloneDeep as Mw}from"lodash-es";async function Iw(r){let{command:e,timeoutMs:t,fixtures:n}=r,{abortSignal:o}=n,i=gg(e.cache)?e.cache:void 0,a=Mw(i),s=()=>{if(i){let h=pb(a,i);i.target=h.target,i.updatedAt=h.updatedAt}},c=Date.now(),l=0,u,d=500,p=!1;for(;l<2||Date.now()-c<t;){l++,l>1&&await te(d,o),o?.throwIfAborted();let{result:h,elementWasFound:m}=await _w({cacheToUse:i,params:r});if(u=h,p=m,h.success)break;s(),d=Math.min(d*2,1e4)}if(!u)throw new _("InternalPlatformError",`Failed to evaluate manual element assertion in ${t}ms.`);if(o?.throwIfAborted(),!u.success&&i?.target&&bs(i.target)){let h=i?.target?.memory?{target:{id:-1,memory:i.target.memory}}:void 0,{result:m}=await _w({cacheToUse:h,params:r});u=m,u.success||s()}return u.success&&i?.target&&!p&&(i.target=Wd(i.target),i.updatedAt=new Date),u}async function _w({cacheToUse:r,params:e}){let{command:t,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(t.target&&!an(t.target))throw new Error("Element assertion with x/y is not supported yet");let c=dF(t.assertion),l,u=!1,d=Mw(r);try{let{elementInteractedDisplayString:p,result:h,thoughts:m}=await a({ctx:o.ctx,tracer:i,command:t,target:t.target,cache:d?.target,action:async g=>uF(g.locator,e),options:{...t,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:Qi(t),targetName:"target"}});return l={success:h.success,data:h.data,err:h.err,elementInteractedDisplayString:p,thoughts:m},u=!0,h.success||(s.warn({aiThoughts:m,elementString:p,err:h.err},"Element check found an element but failed"),l={...h,thoughts:m}),{result:l,elementWasFound:u}}catch(p){if(c)return l={success:!0,thoughts:`The element described does not exist on the page: ${p.message}`,err:void 0,data:void 0},{result:l,elementWasFound:u};if(!(p instanceof _)||p.reason!="ActionFailureError")throw p;return l={success:!1,err:p,data:void 0,thoughts:void 0},s.warn({err:p},"Element check did not find an element and failed"),{result:l,elementWasFound:u}}}async function uF(r,{command:e,fixtures:t}){let n=e.assertion;await t.browser.highlight(r);let o=!0,i,a;switch(n.type){case"ELEMENT_CONTENT":{let c=await r.textContent()??"";if(a={elementTextContent:Mt(c,500,!0)},!Pc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Zn[n.operation]:Qn[n.operation];o=!1,i=new _("AssertionFailureError",`The content ${l} '${n.value}': ${c}`)}break}case"ELEMENT_ATTRIBUTE":{a={elementOuterHtml:Mt(await r.evaluate(l=>l.cloneNode(!1).outerHTML),500,!0)};let c;try{c=await r.getAttribute(n.attr,{timeout:3e3})??""}catch(l){i=new _("AssertionFailureError",`The element does not have an attribute named ${n.attr}: ${l}`),o=!1;break}if(!Pc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Zn[n.operation]:Qn[n.operation];o=!1,n.operation==="EXISTS"?i=new _("AssertionFailureError",`The attribute ${n.attr} ${l}`):i=new _("AssertionFailureError",`The attribute ${n.attr} ${l} '${n.value}': ${c}`)}break}case"ELEMENT_EXISTENCE":{switch(n.condition){case"VISIBLE":{o=await r.evaluate(async(l,u)=>{let d=Date.now();for(;Date.now()-d<u;){await new Promise(h=>setTimeout(h,250));let p=l.getBoundingClientRect();if(!(p.width===0||p.height===0)&&window.getComputedStyle(l).visibility!=="hidden"&&window.getComputedStyle(l).display!=="none")return!0}return!1},sn*1e3);break}case"EDITABLE":{o=await r.isEditable({timeout:sn*1e3});break}case"EXISTS":{o=!0;break}case"ENABLED":{o=await r.isEnabled({timeout:sn*1e3});break}case"FOCUSED":{o=await r.evaluate(l=>l===document.activeElement);break}default:return(l=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n.condition)}if(o=n.negated?!o:o,!o){let c=n.negated?mb[n.condition]:hb[n.condition];i=new _("AssertionFailureError",`The element ${c}`)}break}case"ELEMENT_NAME":{let c=await r.evaluate(l=>l.tagName);if(!Pc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Zn[n.operation]:Qn[n.operation];o=!1,i=new _("AssertionFailureError",`The element tag name ${l} '${n.value}': ${c}`)}break}case"ELEMENT_STYLE":{let c=await r.evaluate((l,u)=>window.getComputedStyle(l).getPropertyValue(u),n.property);if(!Pc(c,n.value,n.operation,!!n.negated)){let l=n.negated?Zn[n.operation]:Qn[n.operation];o=!1,n.operation==="EXISTS"?i=new _("AssertionFailureError",`The style property ${n.property} ${l}`):i=new _("AssertionFailureError",`The style property ${n.property} ${l} '${n.value}': ${c}`)}break}default:return(c=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}return{success:o,data:a,err:i}}function Pc(r,e,t,n){let o;switch(t){case"CONTAINS":{o=r.includes(e);break}case"EQUALS":{o=r.trim()===e.trim();break}case"STARTS_WITH":{o=r.trim().startsWith(e);break}case"EXISTS":{o=r.trim().length>0;break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}return n?!o:o}function dF(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&(r.condition==="EXISTS"||r.condition==="VISIBLE")}function Pw(r){return r.type==="ELEMENT_EXISTENCE"&&r.negated&&r.condition==="EXISTS"}import{Jimp as pF}from"jimp";async function Wa(r,e){let t=await r.screenshot(e),n=await pF.fromBuffer(t);return{buffer:t,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as Ow}from"jimp";import Gm from"jpeg-js";import mF from"pixelmatch";async function Lw({ctx:r,tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(t.target&&!an(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 D=>Wa(o,{locator:D.locator,...c}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:!0,memory:t.cache?.target?.memory,targetName:"target"}})).result:l=await Wa(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 U=`${l.width}x${l.height}`,D=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${U}) does not match saved screenshot dimensions (${D}) - 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 Ow.fromBuffer(l.buffer),p={width:l.width,height:l.height},h=await Ow.fromBuffer(u.buffer),m={width:u.width,height:u.height},g,f=p.width*p.height,E=m.width*m.height,S=Math.abs(p.height-m.height),R=Math.abs(p.width-m.width);if(f>E){let U=d.cover({w:m.width,h:m.height});l.buffer=await U.getBuffer("image/jpeg"),g="current",l.width=m.width,l.height=m.height}else if(E>f){let U=h.cover({w:p.width,h:p.height});u.buffer=await U.getBuffer("image/jpeg"),g="saved"}let A={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},v=t.threshold??.1,C=mF(Gm.decode(u.buffer).data,Gm.decode(l.buffer).data,A.data,l.width,l.height,{threshold:v,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,w=C>v*100,B=`Visual diff of ${C.toFixed(2)}% detected, which is ${w?"over":"under"} the threshold of ${v*100}%.`;if(g&&(B+=` The ${g} screenshot was cropped since it was taller by ${S} pixels and wider by ${R} pixels.`),w)throw new _("ActionFailureError",B);return{fail:w,thoughts:B,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:Gm.encode(A,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var hF=3e4;async function Oc({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??hF/1e3,i=Object.fromEntries(Object.entries(r.headers||{}).filter(([h,m])=>h&&m)),a=new URLSearchParams;Object.entries(r.params||{}).filter(([h,m])=>h&&m).forEach(([h,m])=>{a.append(h,m)});let s=a.toString(),c;if(Xo(r.url)&&(c=r.url),t&&Jo(r.url,t)&&(c=new URL(r.url,t).toString()),!c)throw new _("ActionFailureError",`Invalid URL: ${r.url}`);e.info({url:c,searchParams:s,headers:i,body:r.body,method:r.method},"Making HTTP request");let u=await W((async()=>{let h=s?`${c}?${s}`:c;try{return await n(h,{headers:i,method:r.method,body:r.body})}catch(m){throw e.error({err:m},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${m}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new _("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!u.ok){let h;try{h=await u.text()}catch(m){h=`Failed to read response body: ${m}`}throw new _("ActionFailureError",`Fetch request failed with status ${u.status}: ${h}`)}let d={};u.headers.forEach((h,m)=>{d[m]=h});let p={status:u.status,headers:d};if(u.headers.get("content-type")?.includes("json"))try{p.json=await u.json()}catch{}else u.headers.get("content-type")?.includes("text")&&(p.text=await u.text());return p}var gF=5e3;async function Dw({timeout:r=sn,...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 Nw(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 te(s,e.signal),s=Math.min(Math.floor(s*1.5),gF);else return i}return i=await Nw(e),i}async function Nw({assertion:r,browser:e,autoExpandIframes:t}){switch(r.type){case"CONTENT":{let o,i=!1,a;try{let s;if(t){let c=await e.evaluateFunctionInAllFrames(kw,{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(kw,{value:r.value,negated:!!r.negated,returnHtml:!0},"checking page content"));if(!i){let c=r.negated?Zn.CONTAINS:Qn.CONTAINS;a=new _("AssertionFailureError",`The page ${c} '${r.value}'.`),o=s}}catch(s){a=new _("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.type)}}function kw({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 fF=3e4;async function Uw({command:r,logger:e,baseUrl:t,fetchImplementation:n=fetch}){let o=r.timeout??fF/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(r.headers||{}).filter(([d,p])=>d&&p));a["Content-Type"]="application/json";let s;if(Xo(r.url)&&(s=r.url),t&&Jo(r.url,t)&&(s=new URL(r.url,t).toString()),!s)throw new _("ActionFailureError",`Invalid URL: ${r.url}`);let l=await W((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 _("ActionFailureError",`GraphQL request timed out after ${o} seconds`);if(!l.ok){let d,p=await l.text();try{d=JSON.parse(p)}catch{throw new _("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}throw d?.errors?.length&&d?.errors[0]?.message?new _("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new _("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}let u={};return l.headers.forEach((d,p)=>{u[p]=d}),{status:l.status,headers:u,json:await l.json()}}var Lc=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([Mn(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 fo({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}}),p={url:this.browser.url(),browserState:d,startingScreenshot:t,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(p,{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:{...ve(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([Mn(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")}`,p=await fo({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}}),h={url:c,browserState:p,startingScreenshot:t,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(h,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...ve(a)},langfuseSessionId:s})}catch(m){throw new _("InternalWebAgentError",`Error generating command: ${m instanceof Error?m.message:m}`,{errOptions:{cause:m}})}}async getBrowserState(e){return Mn(this.browser,e)}async locateElement(e){return await Hm({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,t){return zr({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 p=i[d],h=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:p,cache:a[d],action:async m=>m,options:{...c,targetName:o[d]}});u.push(h)}try{let d=await s(...u.map(m=>m.result)),p=m=>m==="fromTarget"?"From Target":m==="toTarget"?"To Target":"Target",h=u.map((m,g)=>m.thoughts?`${p(o[g])}: ${m.thoughts}`:void 0).filter(m=>!!m).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(m=>m.elementInteractedDisplayString),thoughts:h}}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 _("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 zr({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&&Fu(i)){t.warn({err:i},"Invalid mpath error, retrying element targeting command");continue}if(!this.browser.userBrowserSettings.visualActions&&(zu(i)||Bu(i))){t.warn({err:i},"Invalid momentic id error, retrying element targeting command");continue}if(Hu(i)){t.warn({err:i},"Invalid backend node id error, retrying element targeting command");continue}if(i instanceof xr&&i.retryableWithAI){t.warn({err:i},"Element cache disqualification error, retrying element targeting command");continue}throw i}throw n instanceof _?n:new _("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 _("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 te(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:p,source:h}=s,m=this.logger.child({commandId:c.id}),g=this.shouldUseMemory(),f=s.retriesWithAI??1,E=!1,S=Fw(e.cache);if((!S||l)&&!Tu(o))throw new _("ActionFailureError","Cannot target element with no cached data or element descriptor");if(u)return this.wrapHardcodedCssTargetingCommandHelper(e);l&&(m.info("Cache explicitly disabled for this step"),E=!0,S=void 0),S&&this.browser.userBrowserSettings.disableSecondaryCacheResolution&&S.targetSource==="HEURISTIC_HEALED"&&(E=!0,S=void 0),S?.inputDescription&&!Rw(o.elementDescriptor,S.inputDescription)&&(m.warn({old:S.inputDescription,new:o.elementDescriptor},"Target cache was generated with a different description, clearing it automatically"),E=!0,S=void 0);let R=v=>!!v&&bs(v),A=!0;if(!R(S)){A=!1,m.info({description:o.elementDescriptor,targetHealingInProgress:p,cacheBustedBeforeAction:E,memory:s.memory,useMemory:g},"Prompting AI for an updated element location"),E&&await te(this.browser.smartWaitingTimeout,this.executeAbortController.signal),f--;let v;try{v=await Hm({description:o.elementDescriptor,disableCache:!!s.disableCache,iframeUrl:s.iframeUrl,source:h,useMemory:g,memory:g?s.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,logger:m},this.getControllerFixtures(t))}catch(w){if(w instanceof Do&&w.updatedLocatorMemory){let B={id:-1,...i,memory:w.updatedLocatorMemory};fl({cmd:c,key:d,newTarget:B,logger:m,updatedWithAI:!0})}throw new _("ActionFailureError",w.message)}v.frameConfig&&this.browser.setActiveFrameConfig(v.frameConfig);let P=s.disableGlobalLocatorRedirect?{locator:v.resolution.locator}:await this.attemptLocatorRedirect(v.resolution.locator,m),C=await a(P);return fl({cmd:c,key:d,newTarget:v.target,logger:m,updatedWithAI:!0}),p&&(n.recordTargetAutoHeal({healType:"AI"}),v.target.targetSource="AI_HEALED",v.target.targetUpdateTime=new Date().toUTCString(),v.target.targetUpdateLoggerTags=ve(m)),{result:C,elementInteractedDisplayString:v.resolution.displayString,thoughts:v.thoughts}}try{let v=await this.browser.resolveTarget(t,S,{allowNotActionableNodesOverride:s.allowNotActionableNodesOverride,targetName:d,logger:m,signal:this.executeAbortController.signal});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await this.browser.scrollIntoViewIfNeeded(v.locator);let P=s.disableGlobalLocatorRedirect?{locator:v.locator}:await this.attemptLocatorRedirect(v.locator,m),C=await a(P);if(Ht.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!S.requirements}`,`hasAdditionalElements:${!!S.additionalElements}`,`orgId:${this.orgId}`]),fl({cmd:c,key:d,newTarget:S,logger:m,updatedWithAI:!1}),A){let w=v.decisions.filter(B=>B.matched);if(w.length!==1)m.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let B=w[0].type;n.recordTargetAutoHeal({healType:B})}}return{result:C,elementInteractedDisplayString:v.displayString}}catch(v){this.throwIfClosed(),Ht.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!S.requirements}`,`hasAdditionalElements:${!!S.additionalElements}`,`orgId:${this.orgId}`]);let P=!1;if((v instanceof xr||Fu(v)||zu(v)||Hu(v)||cf(v)||Bu(v))&&(P=!0),v instanceof _&&!P)throw m.error({err:v},"Failed to execute action with cached target (fatal)"),v;if(f>0&&o){m.info({err:v},"Failed to execute action with cached target, retrying with AI");let C;return S.memory&&cg(S.memory)&&(C=S.memory),this.wrapElementTargetingCommand({ctx:t,tracer:n,command:c,target:o,cache:void 0,originalCache:i,action:a,options:{...s,memory:C,retriesWithAI:f,targetHealingInProgress:!0}})}throw new _("ActionFailureError",v.message,{errOptions:{cause:v}})}}async attemptLocatorRedirect(e,t){return this.browser.userBrowserSettings.globalLocatorRedirect!==!1?this.browser.performTargetRedirection(e,t):{locator:e}}async screenshotWithDimensions(e){return Wa(this.browser,e)}async executePresetCommand(e,t,n,o,i){this.options?.slowMoMs&&await te(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 _("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&&Cg(n)?await this.browser.waitForDOMStability({timeout:he}):!this.browser.userBrowserSettings.visualActions&&["PRESS","TYPE"].includes(n.type)&&await this.browser.waitForDOMStability({timeout:re}),this.options?.autoFollowNewTabs&&await fw({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{gl(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>sp(e)}}async resolveCommandTemplateStrings(e,t){return hl({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()?Ic({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 _("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new _("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return Ic({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new _("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let f=Vy(n.schema);if(f)throw new _("UserConfigurationError",f)}let m=await this.browser.getCondensedHtml(),g=await this.browser.screenshot({retries:2});try{let f=await this.generator.getTextExtraction({goal:n.goal,browserState:m,returnSchema:n.schema,screenshot:`data:image/jpeg;base64,${g.toString("base64")}`},{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:ve(a)});if(f.result==="NOT_FOUND")throw new _("ActionFailureError","No relevant data found for extraction goal on this page");if(f.thoughts?.includes("MaxGenerationLengthExceededError"))throw new _("UserConfigurationError",f.thoughts);return{thoughts:f.thoughts||void 0,data:f.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(f){let E=f.message;throw E.includes("MaxGenerationLengthExceededError")?new _("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."):E.includes("AIProviderError")&&E.includes("time")?new _("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:f}}):f}}case"NAVIGATE":if(!Xo(n.url)&&!Jo(n.url,this.browser.baseUrl))throw new _("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":if(!this.browser.canSolveCaptchas())break;let c=await this.browser.solveCaptcha();c&&(await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:"the captcha image solution input"},cache:void 0,action:m=>this.browser.click(m,this.createCallbacksForBrowser(this.orgId),{}),options:{...n,targetName:"target",disableCache:i}}),await this.browser.type(c,{clearContent:!0,pressEnter:!0},!0));break;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 m,g;if(n.target&&Rr(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:S,thoughts:R}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:A=>this.browser.hover(A),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});m=S,g=R}let f=this.browser.getViewport()?.height??pn.height,E=this.browser.getViewport()?.width??pn.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??f));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??f);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??E));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??E);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:g}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new _("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let m=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:m},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case"WAIT":if(n.delay>1800)throw new _("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let l=n.delay*1e3;await te(l,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(Rr(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let m=this.browser.url(),{elementInteractedDisplayString:g,result:f,thoughts:E}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:R=>this.browser.click(R,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),S={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:E,data:f.downloadedFile?{downloadedFile:f.downloadedFile}:void 0};return Al(m,S.urlAfterCommand)&&(S.succeedImmediately=!0,S.succeedImmediatelyReason="URL changed"),S}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(Rr(n.fromTarget)&&Rr(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverSeconds:n.hoverSeconds});break}if(Rr(n.fromTarget)||Rr(n.toTarget))throw new Error("Drag and drop targets must be both coordinates or both descriptions");let{elementInteractedDisplayStrings:m,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:(f,E)=>this.browser.dragAndDrop(f.locator,E.locator,{hoverSeconds:n.hoverSeconds,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m[0],thoughts:g}}case"MOUSE_DRAG":{let m=parseInt(n.deltaX),g=parseInt(n.deltaY),f=n.steps??5;if(isNaN(m)||isNaN(g))throw new _("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Rr(n.target)){await this.browser.mouseDragUsingVisualCoordinates(m,g,f,n.target.pixels,{force:n.force});break}let E,S,R;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:A,result:v,thoughts:P}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async C=>C.locator,options:{disableCache:i,targetName:"target",...n}});E=v,S=A,R=P}return await this.browser.mouseDrag(m,g,f,E,{force:n.force}),{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:S,thoughts:R}}case"SELECT_OPTION":{if(!an(n.target))throw new Error("Select with x/y is not supported yet");let m=n.target.elementDescriptor,g=n.choice,{elementInteractedDisplayString:f,thoughts:E}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:{type:"description",elementDescriptor:m},cache:n.cache?.target,action:S=>this.browser.selectOption(S,g,n.force),options:{...n,targetName:"target",disableCache:i,source:Qi(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:E}}case"TAB":{let m={loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0,retry:!0};await this.browser.switchToPage(n.action,m);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 u=await this.browser.setCookie(n.value);a.debug({results:u},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let m;try{n.environment==="BROWSER"?(m=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:m},"Executed JavaScript in browser")):m=await Pr({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 _("ActionFailureError",g instanceof Error?g.message:`${g}`,{errOptions:{cause:g}})}try{JSON.stringify(m)}catch(g){throw new _("ActionFailureError",`Return value is not serializable: ${g instanceof Error?g.message:`${g}`}`,{errOptions:{cause:g}})}return{urlAfterCommand:this.browser.url(),succeedImmediately:!1,data:m}}case"TYPE":{if(n.target&&Rr(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 m=this.browser.url(),g,f,E=Fw(n.target);if(E){let{elementInteractedDisplayString:R,thoughts:A}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:E,cache:n.cache?.target,action:v=>this.browser.typeIntoTarget(n.value,v,{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:!0,source:Qi(n)}});g=R,f=A}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let S={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:g,thoughts:f};return Al(m,S.urlAfterCommand)&&(S.succeedImmediately=!0,S.succeedImmediatelyReason="URL changed"),S}case"HOVER":{if(Rr(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:m,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.hover(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:g}}case"FOCUS":{if(!an(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:m,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.focus(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:g}}case"BLUR":{if(n.target&&!an(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:m,thoughts:g}=await this.wrapElementTargetingCommand({ctx:e,tracer:t,target:n.target,command:n,cache:n.cache?.target,action:f=>this.browser.blur(f),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:g}}case"PRESS":let d=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let p={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return Al(d,p.urlAfterCommand)&&(p.succeedImmediately=!0,p.succeedImmediatelyReason="URL changed"),p;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 m=new yF,g=SF(fetch,m),f;try{f=new URL(n.url).hostname}catch{}return{data:{...await Oc({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:g}),cookies:$s(m,f)},succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await Uw({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return Lw({ctx:e,tracer:t,command:n,disableCache:i,browser:this.browser,logger:a,storage:this.storage,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:m=>this.wrapElementTargetingCommand(m)});case"FILE_UPLOAD":{let m,g;if(n.fileSource.type==="URL"?(g=n.fileSource.url,m=await uE({uri:n.fileSource.url,logger:a,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(g=n.fileSource.name,m=await this.uploadedFileStorage?.getFileForUpload(n.fileSource.name,this.orgId)),!m)throw new _("UserConfigurationError",`Attempted to use non-existent file for upload step: ${g}`);await this.browser.setFileChooserHandler({...m,filename:n.filename});break}case"AUTH_SAVE":return{data:await this.browser.saveAuthState(),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"AUTH_LOAD":{let m;if(!n.storageState.trim())m=void 0;else if(m=await Pr({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof m!="object")throw new _("ActionFailureError",`Credentials must evaluate to an object (received ${typeof m} instead)`);let g;try{g=gS.optional().parse(m)}catch(f){throw new _("ActionFailureError",`Credentials provided do not follow the required format: ${f}`)}await this.browser.loadAuthState(g);break}case"ELEMENT_CHECK":{let m=(n.timeout??sn)*1e3,g=this.generator.getAgentConfig()?.assertion;if(Pw(n.assertion)&&!n.useSelector&&n.target.type==="description"&&g&&g!=="v1"){let E={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,cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let S=await Ic({command:E,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),source:"NEGATED_CHECK"});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${S.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:S.afterScreenshotOverride}}finally{E.cache?.memory&&Sl(n,E.cache?.memory.traces,a)}}let f=await Iw({command:n,tracer:t,timeoutMs:m,targetingWrapper:E=>this.wrapElementTargetingCommand(E),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!f.success,data:f.data,elementInteracted:f.elementInteractedDisplayString,thoughts:f.err?.message??f.thoughts??`Element assertion ${f.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let m=await zr({action:async()=>Dw({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:!m.success,data:m.data,thoughts:m.success?"Page assertion passed.":m.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:!1}}case"REGISTER_REQUEST_LISTENER":{let m=new Tn(n.requestMatcher),g=this.browser.registerRequestListener(m);return this.registeredListeners[n.key]=g.then(async f=>await hp(f)).catch(f=>{a.error({err:f},"Failed to get request listener response")}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"AWAIT_LISTENER":{let m=this.registeredListeners[n.key];if(!m)throw new _("ActionFailureError",`No listener registered with key: ${n.key}`);let g=n.timeout??10;return{data:await W(m,{milliseconds:g*1e3,message:`Request listener timed out after ${g} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let m=new Tn(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,m,{onRequestStart:(g,f)=>{this.recordedRequests[n.key][g]=_l(f)},onRequestComplete:(g,f)=>{this.recordedRequests[n.key][g]=_l(f)}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let m=this.recordedRequests[n.key];if(!m)throw new _("ActionFailureError",`No recorder registered with key: ${n.key}`);return delete this.recordedRequests[n.key],{data:Object.values(m),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"SET_HEADER":{let m;return n.requestMatcher&&(m=new Tn(n.requestMatcher)),this.browser.setHeader(n.name,n.value,m),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"MOCK_ROUTE":return{data:{key:this.browser.registerMock(n.key,new Tn(n.requestMatcher),async(g,f)=>{let E=await Pr({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:g,response:f},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),S=MS.parse(E);return new Response(S.body,{status:S.status,headers:S.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(m=>{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:ve(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 Nl({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:ve(this.logger)})}async getFailureRecoveryPlan(e){return this.generator.getFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:ve(this.logger)})}};import{mkdirSync as HF}from"fs";import{tmpdir as GF}from"os";import Zw from"path";import{cloneDeep as bF}from"lodash-es";import jw from"truncate-json";var Bw=1e3,zw=5e6,EF=5*1024*1024;function Vw(r,e){for(let t=0;t<r.length;t++){let n=r[t];try{if(n.data){let{jsonString:o}=jw(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":Hw(n);break;case"MOBILE_MODULE_STEP":Hw(n),Vw(n.steps,e);break;default:return(()=>{throw new Error("If Typescript complains about the line below, you missed a case or break in the switch above")})()}}}function Hw(r){if(r.type==="MOBILE_PRESET_STEP"){let e=r.command;"cache"in e&&e.cache&&(e.cache=void 0)}}function Gw(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 Nc(r,e){let t=bF(r);if(Vw(t,e),t.length>Bw)return e.error("Database content violation: results too long, truncating before insertion"),t.slice(0,Bw);let n=Gw(t,e);if(n.length>zw)for(e.error({serializedLength:n.length,resultsArrayLength:t.length},"Database content violation: results too large, truncating before insertion");n.length>zw;)t.pop(),n=Gw(t,e);let{jsonString:o}=jw(n,EF);try{return br.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 TF}from"async_hooks";var $a=new TF;function vF(r){$a.enterWith({activeTracers:[r]})}function AF(r,e){let t=$a.getStore()?.activeTracers;if(!t)return e();t.push(r);try{return e()}finally{t.pop()}}async function wF(r,e){let t=$a.getStore()?.activeTracers;if(!t)return e();let n=[...t,r];return $a.run({activeTracers:n},e)}var In={globalAls:$a,initializeRootTracerContext:vF,withChildTracer:AF,withChildTracerAsync:wF};var So=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 In.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){let n={type:"SECTION",name:e,startTime:Date.now(),endTime:void 0,subSpans:[],attributes:{}},o=new r(n);this.addSpan(n);try{return await In.withChildTracerAsync(o,()=>t(o,n))}catch(i){throw n.error=i instanceof Error?i.message:String(i),i}finally{o.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??{}),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:{}},i=n[0]??void 0;Object.assign(o,i??{}),this.addSpan(o);let a;try{a=await 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}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 ut(){let r=In.globalAls.getStore()?.activeTracers,e;return!r||r.length===0?e=void 0:e=r[r.length-1],e||new So}import{diff as BF}from"deep-object-diff";import{cloneDeep as zF}from"lodash-es";import qw from"fontoxpath";import RF from"@prettier/plugin-xml";import CF from"prettier";import{DOMParser as xF,XMLSerializer as _F}from"slimdom";function jm(r){return r.toLowerCase().endsWith("webview")}function MF(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 IF=new Set(["index","package","a11y-important","screen-reader-focusabl"]),PF=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"]),OF=new Set(["text","hint"]),LF=new Set(["live-region","drawing-order"]),NF=new Set(["displayed","enabled"]);function kF(r,e){let t={};for(let[n,o]of Object.entries(e))IF.has(n)||n==="class"&&r===o||n==="focusable"&&o==="true"&&e.clickable==="true"||PF.has(n)&&o==="false"||OF.has(n)&&o===""||NF.has(n)&&o==="true"||LF.has(n)&&o==="0"||n!=="id"&&(t[n]=o);return t}function Ww(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 p of e.attributes){let h=p.name,m=p.value;m!=null&&(l[h]=String(m))}let u=kF(e.tagName,l);for(let[p,h]of Object.entries(u))t.setAttribute(p,h);if(o.set(c,e),i.set(c,t),jm(e.tagName)){let p=s?.injectedWebviewContent??"";if(!s?.disableMomenticAccessibilityTree&&p.trim().length>0){for(;t.firstChild;)t.removeChild(t.firstChild);p.trim().length>0&&t.appendChild(n.createCDATASection(`
3971
3975
  ${p}
3972
- `));return}}let d=Array.from(e.childNodes??[]);for(let p of d){let g=p.nodeType;if(g===3){let m=p.nodeValue;m&&m.trim().length>0&&t.appendChild(n.createTextNode(m));continue}if(g===1){let m=p,h=n.createElement(kD(m.tagName));wA(r,m,h),t.appendChild(h)}}}function GD(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;wA(a,e,s);let c=new ND().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function RA(r,e){let t=new LD,n=t.parseFromString(r,"text/xml"),o=new Map,i=n.documentElement;if(!i)throw new Error("No root element found in XML");if(i.tagName!=="hierarchy")throw new Error("No hierarchy element found in XML");let{prunedDocument:a,prunedIdToElement:s,xml:c}=GD(t,i,o,e);return{xml:await OD.format(c,{parser:"xml",plugins:[ID],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function jD(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 bc(r,e){let t=r.idToElement.get(e);if(t)return jD(t)}function dm(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 Ec(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 pm(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function _A({aiResponse:r,description:e,emulatorState:t}){let n=t.graph.idToElement.get(r.id);if(!n)throw new Error(`Could not find node with id: ${r.id}`);let o=Ec(n);if(!o)throw new Error(`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=bc(t.graph,r.id)??"",a=dm(t.graph,r.id)??"",s=t.graph.idToElement.get(r.id),c=pm(s,r.requirements?.attributesRequired),u={requiredText:r.requirements?.textRequired?s?.getAttribute("text")??void 0:void 0,requiredAttributes:c,requiredBounds:r.requirements?.boundsRequired},d=[];r.additionalElements&&(d=r.additionalElements.map(({id:g,requirements:m})=>{let h=t.graph.idToElement.get(g);if(!h)return;let f=bc(t.graph,g);return f?{xPath:f,requirements:{requiredText:m.textRequired?h.getAttribute("text")??void 0:void 0,requiredAttributes:pm(h,m.attributesRequired),requiredBounds:m.boundsRequired}}:void 0}).filter(g=>!!g));let p;return um(n.tagName)&&r.inWebview!==!1?p={type:"WEBVIEW",resolvedDescription:e,xPath:i}:p={type:"NATIVE",bounds:o,resolvedDescription:e,xPath:i,elementOnlySerializedXml:a,requirements:u,requiredRelatedElements:d},p}var xA=(r,e,t)=>{if(!e)return;let{requiredAttributes:n,requiredText:o,requiredBounds:i}=e;if(o!==void 0){let a=r.getAttribute("text")??void 0;if(a!==o)throw new Error(`ActionFailureError: Resolved element text mismatch: expected ${o}, got ${a}`)}if(n)for(let[a,s]of Object.entries(n)){let c=r.getAttribute(a)??void 0;if(c!==s)throw new Error(`ActionFailureError: Attribute ${a} mismatch: expected ${s}, got ${c}`)}if(i&&t){let a=Ec(r);if(!a||a.length!==t.length)throw new Error("ActionFailureError: Resolved element has no bounds or unexpected bounds format");if(!a.every((c,l)=>c===t[l]))throw new Error(`ActionFailureError: Bounds changed from [${t.join(",")} ] to [${a.join(",")} ]`)}};async function MA(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ot();if(e.type==="WEBVIEW")return VD(e,r);let a=CA.evaluateXPathToFirstNode(e.xPath,o,null,null);if(!a)throw new Error(`ActionFailureError: Could not resolve cached target via XPath: ${e.xPath}`);if(e.requiredRelatedElements){let p=e.requiredRelatedElements;i.startSection("Validate related elements are similar enough to past runs",()=>{for(let g of p){let m=CA.evaluateXPathToFirstNode(g.xPath,o);if(!m)throw new Error(`ActionFailureError: Required related element not found for XPath: ${g.xPath}`);xA(m,g.requirements)}})}let s=Ec(a);if(!s)throw new Error("ActionFailureError: Resolved native element has no bounding box");xA(a,e.requirements,e.bounds);let c;for(let[p,g]of n.idToElement.entries())if(g===a){c=p;break}let l=e.elementOnlySerializedXml,u=e.xPath;return c!==void 0&&(l=dm(n,c)??l,u=bc(n,c)??u),{resolvedTarget:{...e,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function VD(r,e){let{stateManager:t,logger:n,signal:o}=e,i=ot(),a=await t.getActiveWebview();if(!a||!a.browserController)throw new Error("No browser controller is attached to the requested webview");let s=a.browserController.browser;if(!r.browserCache)throw new Error("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}));return{resolvedTarget:{...r,controller:a.browserController,resolution:l}}}function mm(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;Ps(e)&&(e[t]={...e[t],[n]:Ms.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date))}function PA(r){return r.type==="WEBVIEW"?{type:"WEBVIEW",resolvedDescription:r.resolvedDescription,xPath:r.xPath,browserCache:r.browserCache}:r}var nr=class{driver;stateManager;generator;logger;fixtures;aborter;orgId;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}async findElement({description:e,tracer:t}){await this.stateManager.waitForScreenshotStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before locating an element with AI"});let n=await t.startAsyncSection("Get emulator state",async c=>{let l=await this.stateManager.getDomState(),u=await c.startAsyncSpan("EMULATOR_READ_STATE",()=>this.stateManager.getCurrentScreenshotPngString(),{name:"Emulator screenshot"});return{emulatorState:l,screenshot:u}}),o;try{o=await t.startAsyncSpan("AI_LOCATOR_CALL",async c=>{let l=await this.generator.getElementLocation({description:e,screenXml:n.emulatorState.graph.xml,screenshot:n.screenshot},{logger:this.logger,loggerTags:Se(this.logger),abortSignal:this.aborter.controller?.signal});return c.result=l,l})}catch(c){throw this.throwIfAborted(),this.logger.error({err:c},"Failed to locate element"),new Error(`ActionFailureError: Failed to locate element: ${c instanceof Error?c.message:c}`)}if(o.id===-1)throw new Error(`ActionFailureError: No matching element found: ${o.thoughts}`);let i=_A({aiResponse:o,description:e,emulatorState:n.emulatorState});if(i.type==="NATIVE")return t.addSpan({type:"TARGET_RESOLUTION",startTime:Date.now(),endTime:Date.now(),result:{serializedElement:i.elementOnlySerializedXml},attributes:{}}),{resolvedTarget:i,thoughts:o.thoughts};let{browserLocateResult:a,browserController:s}=await t.startAsyncSpan("TARGET_RESOLUTION",async c=>{let l=await this.stateManager.getActiveWebview();if(!l||!l.browserController)throw new Error("No browser controller is attached to the requested webview");let u=await l.browserController.locateElement({description:e,disableCache:!1,logger:this.logger});return c.result={serializedElement:u.target.nodeOnlySerializedHtml??"Unknown HTML element in webview"},{browserLocateResult:u,browserController:l.browserController}});return{resolvedTarget:{...i,controller:s,resolution:a.resolution,browserCache:a.target},thoughts:a.thoughts}}async wrapTargetingAction(e){let{action:t,description:n,command:o,cacheKey:i="cache",targetName:a="target",cacheIsInvalidAfterResolution:s,tracer:c}=e,l=i in o&&o[i]&&a in o[i]?o[i][a]:void 0,u=e.retriesWithAI??1,d=!1,p=WD(l),g;if(o.disableCache&&(this.logger.debug({command:o},"Cache explicitly disabled for command"),d=!0,p=void 0),s&&(d=!0,p=void 0),p&&p?.resolvedDescription!==n&&(this.logger.info({cache:p,description:n},"Cache description mismatch, clearing it automatically"),d=!0,p=void 0),!p){u--,this.logger.info({description:n,cacheBustedBeforeAction:d},"Prompting AI for a new element location");let h=await this.findElement({description:n,tracer:c});return g=h.thoughts,mm({command:o,cacheKey:i,targetName:a,updatedCache:h.resolvedTarget,updatedWithAI:!0}),{result:await t(h.resolvedTarget),thoughts:g}}let m;try{await this.stateManager.waitForScreenshotStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before cache resolution"}),m=await c.startAsyncSection("Get emulator XML tree",async()=>await this.stateManager.getDomState());let h=await c.startAsyncSection("Resolve target cache",async(b,E)=>{let{resolvedTarget:_}=await MA({target:p,domState:m,stateManager:this.stateManager,logger:this.logger}),v=PA(_),A=$D(p,v);return this.logger.info({cacheDiffs:A},"Successfully resolved and updated target"),mm({command:o,cacheKey:i,targetName:a,updatedCache:v,updatedWithAI:!1}),E.attributes.serializedElement=_.type==="WEBVIEW"?_.browserCache?.nodeOnlySerializedHtml??"Unknown HTML element in webview":_.elementOnlySerializedXml,_}),f=await t(h);return p.type!=="WEBVIEW"&&kt.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!p.requirements}`,`hasAdditionalElements:${!!p.requiredRelatedElements?.length}`,`orgId:${this.orgId}`]),{result:f,thoughts:"Successfully executed preset action with cache."}}catch(h){if(p.type!=="WEBVIEW"&&kt.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!p.requirements}`,`hasAdditionalElements:${!!p.requiredRelatedElements?.length}`,`orgId:${this.orgId}`]),this.throwIfAborted(),u>0)return this.logger.warn({err:h},"Failed to resolve target cache, retrying with AI"),this.logger.debug({domState:m?.graph.originalXml},"Emulator state"),this.wrapTargetingAction({...e,cacheIsInvalidAfterResolution:!0,retriesWithAI:u-1});throw new Error(`ActionFailureError: ${h instanceof Error?h.message:h}`,{cause:h})}}constructPerformerParams(){return{stateManager:this.stateManager,generator:this.generator,driver:this.driver,logger:this.logger,fixtures:this.fixtures,aborter:this.aborter,orgId:this.orgId}}throwIfAborted(){this.aborter.controller?.signal.throwIfAborted()}};function YD(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 Tc=class extends nr{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,p=o+u;return await this.tapOnAbsoluteCoordinates({x:d,y:p,...t}),{x:d,y:p}}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=IA.join(KD(),"momentic","downloads"),s=IA.join(a,this.orgId,i);return qD(s,{recursive:!0}),s}},{delayMs:t?.longPressDurationMs,relativePosition:t?.relativePosition,doubleClick:t?.doubleTap})).coordinates}async tapOnTarget({target:e,options:t}){return await ot().startAsyncSpan("EMULATOR_INTERACTION",async o=>"type"in e&&e.type==="NATIVE"?this.tapOnNativeTarget(e,t):(o.withinWebview=!0,this.tapOnWebviewTarget(e,t)),{name:"Tap on target"})}async executeTap({command:e,tracer:t}){let n=YD(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 An=class extends nr{async doPress({keycode:e,longPress:t}){await ot().startAsyncSpan("EMULATOR_INTERACTION",async()=>this.driver.executeScript("mobile: pressKey",[{keycode:e,isLongPress:t}]),{name:"Send key events to emulator"})}};var vc=class extends nr{async doType(e){e.clearContent&&await this.clearContent(),await this.doTypeHelper(e)}async doTypeHelper(e){let t=ot(),n=e.keyPressDelayMs;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=ot();try{await e.startAsyncSection("Clearing any content from the focused field",()=>this.clearContentHelper())}catch(t){throw new Error(`Failed to clear content because the select all button was not found: ${t}`)}}async clearContentHelper(){let e=this.driver.$('//android.widget.LinearLayout[@package="app.lawnchair" and @content-desc="Select all" and @clickable="true"]');await e.waitForExist({timeout:750}),await e.click(),await new An(this.constructPerformerParams()).doPress({keycode:67})}};import Dt from"zod";var OA=.9,XD=Dt.object({navigationBar:Dt.object({visible:Dt.boolean(),x:Dt.number(),y:Dt.number(),width:Dt.number(),height:Dt.number()}),statusBar:Dt.object({visible:Dt.boolean(),x:Dt.number(),y:Dt.number(),width:Dt.number(),height:Dt.number()})}),Ac=class extends nr{async executeSwipe(e){let t=ot();if(e.scrollableElement.type!=="CUSTOM"){await this.stateManager.waitForScreenshotStability({timeoutMs:2e3,signal:this.aborter.controller?.signal,reason:"Waiting for screen to stabilize before swiping"});let n=await this.driver.getWindowRect(),o;if(e.scrollableElement.type==="SCREEN")o={left:n.x+25,top:n.y+50,width:n.width-50,height:n.height-100};else try{let i=XD.parse(await this.driver.executeScript("mobile: getSystemBars",[]));o={left:n.x+25,top:n.y+50,width:n.width-50,height:n.height-100},i.navigationBar.visible&&(o.height-=i.navigationBar.height),i.statusBar.visible&&(o.top+=i.statusBar.height,o.height-=i.statusBar.height)}catch(i){this.logger.warn({err:i},"Failed to get system bars, using hardcoded bounds"),o={left:n.x+50,top:n.y+100,width:n.width-100,height:n.height-200}}return await t.startAsyncSpan("EMULATOR_INTERACTION",async i=>{await this.swipeByAbsoluteCoordinates({span:i,direction:e.direction,percent:e.viewportPercent,durationMs:e.durationMs,containerBounds:o})},{name:`Swipe ${e.direction} in the entire ${e.scrollableElement.type.toLowerCase()}`}),{success:!0}}return await this.wrapTargetingAction({command:e,description:e.scrollableElement.target.description,action:async n=>ot().startAsyncSpan("EMULATOR_INTERACTION",async i=>"type"in n&&n.type==="NATIVE"?this.scrollInNativeContainer({span:i,cmd:e,target:n}):(i.withinWebview=!0,this.scrollInWebview({cmd:e,target:n})),{name:`Swipe ${e.direction} in the specified container`}),tracer:t}),{success:!0}}async scrollInNativeContainer({span:e,cmd:t,target:n}){let o=Math.floor(n.bounds[2]*.05),i=Math.floor(n.bounds[3]*.05);await this.swipeByAbsoluteCoordinates({span:e,direction:t.direction,percent:t.viewportPercent,durationMs:t.durationMs,containerBounds:{left:n.bounds[0]+o,top:n.bounds[1]+i,width:n.bounds[2]-n.bounds[0]-o*2,height:n.bounds[3]-n.bounds[1]-i*2}})}async scrollInWebview({cmd:e,target:t}){let{controller:n}=t,o=n.browser.getViewport();if(!o)throw new Error("Failed to get viewport size from webview");if(e.direction==="down"||e.direction==="up"){let i=o.height*(e.viewportPercent??OA)*(e.direction==="down"?1:-1);await n.browser.scrollVertical(i)}else{let i=o.width*(e.viewportPercent??.9)*(e.direction==="right"?1:-1);await n.browser.scrollHorizontal(i)}}async swipeByAbsoluteCoordinates({span:e,direction:t,percent:n=OA,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{existsSync as JD,readFileSync as ZD}from"fs";import QD from"zod";var eU=QD.string().url();async function LA(r){if(eU.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 Error(`Fetch failed or timed out for URL: ${r}`,{cause:i})}finally{clearTimeout(t)}if(!n.ok)throw new Error(`Failed to fetch file from URL: ${r}, status: ${n.status}`);let o=await n.arrayBuffer();return Buffer.from(o).toString("base64")}if(!JD(r))throw new Error(`File does not exist at path: ${r}`);return ZD(r).toString("base64")}import{execSync as kA}from"child_process";import rU from"pixelmatch";import{_android as nU,chromium as oU}from"playwright";import{PNG as DA}from"pngjs";import{z as Fe}from"zod";var NA=Fe.array(Fe.object({proc:Fe.string(),webview:Fe.string(),info:Fe.object({"Android-Package":Fe.string(),Browser:Fe.string(),"Protocol-Version":Fe.string(),"User-Agent":Fe.string(),"V8-Version":Fe.string(),"WebKit-Version":Fe.string(),webSocketDebuggerUrl:Fe.string()}),pages:Fe.array(Fe.object({description:Fe.string(),devtoolsFrontendUrl:Fe.string(),id:Fe.string(),title:Fe.string(),type:Fe.string(),url:Fe.string(),webSocketDebuggerUrl:Fe.string()})),webviewName:Fe.string()}));var wc=class r{driver;device;currentContext;logger;webviews=new Map;fixtures;orgId;options;aborter;constructor({driver:e,context:t,logger:n,device:o,fixtures:i,orgId:a,options:s,aborter:c}){this.driver=e,this.device=o,this.currentContext=t,this.logger=n,this.fixtures=i,this.orgId=a,this.options=s,this.aborter=c;for(let l of["SIGINT","SIGTERM"])process.on(l,async()=>{await this.cleanupWebviews()})}static async init({driver:e,logger:t,fixtures:n,orgId:o,adbPort:i,options:a,aborter:s}){let c=await e.getContext(),l=typeof c=="string"?c:c.id,u=(await nU.devices()).filter(g=>g._initializer?.serial?.endsWith(i.toString()));if(u.length!==1)throw new Error(`Playwright detected ${u.length} Android devices, expected 1. Please stop all other emulators and try again.`);let d=u[0];return new r({driver:e,context:l,logger:t,device:d,fixtures:n,orgId:o,options:a,aborter:s})}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(){return await this.driver.takeScreenshot()}async getCurrentScreenshotPngString(){return`data:image/png;base64,${await this.getRawScreenshotBase64()}`}async waitForScreenshotStability({timeoutMs:e,signal:t,reason:n,tolerancePercent:o=1}){await ot().startAsyncSpan("WAIT_FOR_STABILITY",async i=>{let a=Date.now(),s,c=!1,l=(u,d)=>{let p=Buffer.from(u,"base64"),g=Buffer.from(d,"base64"),m=DA.sync.read(p),h=DA.sync.read(g);if(m.width!==h.width||m.height!==h.height)return 100;let f=m.width,b=m.height,E=Buffer.alloc(f*b*4);return rU(m.data,h.data,E,f,b,{threshold:.01})/(f*b)*100};for(;Date.now()-a<e;){if(t?.throwIfAborted(),!s){s=await this.getRawScreenshotBase64();continue}let u=await this.getRawScreenshotBase64();if(l(s,u)<=o){c=!0;break}s=u,await Z(250,t)}c||(i.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for screenshot stability"))},{reason:n})}async getActiveWebviewContent(){let e=await this.getActiveWebview();if(!e||!e.browserController)return;this.throwIfAborted();let t=e.browserController,n=await ot().startAsyncSpan("EMULATOR_READ_STATE",()=>t.getBrowserState({abortSignal:this.aborter.controller?.signal,serializationOpts:{noId:!0}}),{name:"Get webview content"});return this.throwIfAborted(),n.serializedTree}async getDomState(e){let t=ot(),n;if(!e?.skipWebviews)try{n=await this.getActiveWebviewContent()}catch(a){this.logger.error({err:a},"Could not get webview info to get the nested DOM state")}let o=await t.startAsyncSpan("EMULATOR_READ_STATE",()=>this.driver.getPageSource(),{name:"Get Android page source"});return this.throwIfAborted(),{graph:await RA(o,{injectedWebviewContent:n,disableMomenticAccessibilityTree:this.options.disableMomenticAccessibilityTree}),context:this.currentContext}}async refreshWebviews(){await this.driver.getPageSource(),this.throwIfAborted();let e=await this.getDetailedContexts();if(!e){this.logger.warn("No context details, not proceeding with refreshing webviews");return}let t=Date.now(),n=new Set;for(let o of e){if(this.throwIfAborted(),o.webview==="NATIVE_APP")continue;let i=o.info["Android-Package"];if(n.add(o.webview),!this.webviews.has(o.webview)||!this.webviews.get(o.webview)?.active){let a={contextId:o.webview,packageName:i,active:!1,lastSeen:t,socketName:o.proc.startsWith("@")?o.proc.substring(1):o.proc};this.logger.info({contextId:a.contextId,packageName:a.packageName,socketName:a.socketName},"New webview detected"),this.webviews.set(o.webview,a);let s;if(i==="com.android.chrome"?(s=await this.connectPlaywrightToChrome(a),this.logger.info(`Connected Playwright to Android Chrome: ${o.webview}`)):(this.logger.info(`Attempting to connect Playwright to webview: ${o.webview}`),s=await this.connectPlaywrightToWebview(i,a.socketName),this.logger.info(`Connected Playwright to webview ${o.webview}`)),!s)continue;a.browserController=s,a.active=!0}}for(let[o,i]of this.webviews.entries())!n.has(o)&&i.active&&(this.logger.info(`Disconnecting dead webview ${o}`),this.disconnectPlaywrightFromWebview(i),i.active=!1)}async getActiveWebview(){await ot().startAsyncSection("Refresh webviews",async()=>{await this.refreshWebviews()});let e=await this.driver.execute("mobile: getCurrentPackage");e!==void 0&&typeof e!="string"&&this.logger.warn({currentPkg:e},"Unexpected getCurrentPackage result");let t=[];for(let n of this.webviews.values())n.packageName===e&&n.active&&t.push(n);if(t.length!==0){if(t.length>1)throw new Error("Multiple active webviews in a single package is currently not supported");return t[0]}}async executeRawADBCommand(e){let t=this.driver.capabilities,n=t.deviceUDID||t.udid||t["appium:udid"]||t["appium:deviceUDID"],o=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb",i=n?`-s ${n}`:"",a=`${o} ${i} ${e}`;this.logger.info(`Executing ADB command: ${a}`);let s=kA(a,{encoding:"utf8"});return this.logger.info(`ADB command result: ${s}`),s}async cleanupWebviews(){for(let[e,t]of this.webviews.entries())this.logger.info(`Disconnecting webview ${e}`),this.disconnectPlaywrightFromWebview(t),t.active=!1}async getDetailedContexts(){let e=await this.driver.execute("mobile: getContexts");return this.aborter.controller?.signal.throwIfAborted(),NA.parse(e)}async createBrowserController({context:e}){let t=await la.fromExistingContext({context:e,logger:this.logger,userBrowserSettings:{visualActions:!0},properties:{isNewHeadless:!0,allowedA11yIgnoreReasonsOverride:[]},storage:this.fixtures.storage,enricher:this.fixtures.browserEnricher});await t.getActivePage().waitForLoadState();let n=await t.getBrowserState({skipWait:!0,skipWaitForPageLoad:!0});return new Sc({browser:t,generator:this.fixtures.browserGenerator,logger:this.logger,orgId:this.orgId,storage:this.fixtures.storage,localCodeEvalTools:this.fixtures.localCodeEvalTools,visualDiffScreenshotStorage:new Ys})}async connectPlaywrightToWebview(e,t){let o=this.device.webViews().find(a=>!(a.pkg()!==e||"_socketName"in a&&typeof a._socketName=="string"&&a._socketName!==t));if(!o){this.logger.warn(`[WebviewManager] Could not find webview for ${e} with socket name ${t}`);return}return this.logger.info({packageName:e,socketName:t},"Connecting Playwright to app webview"),await this.createBrowserController({context:(await o.page()).context()})}async connectPlaywrightToChrome(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 oU.connectOverCDP({endpointURL:o,timeout:5e3}),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.error({err:o},`Error connecting Playwright to webview ${e.contextId}`);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.driver.capabilities,o=n.deviceUDID||n.udid||n["appium:udid"]||n["appium:deviceUDID"];this.logger.info({deviceId:o},`Device ID from capabilities: ${o||"not found"}`);let i=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb",a=o?`-s ${o}`:"",s=`${i} ${a} forward tcp:${t} ${`localabstract:${e}`||"localabstract:chrome_devtools_remote"}`;this.logger.info(`Executing command: ${s}`);let c=kA(s,{encoding:"utf8"});return this.logger.info(`ADB command result: ${c}`),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 si=class r extends nr{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}){let l={controller:s},u=await wc.init({driver:e,logger:n,fixtures:o,orgId:i,options:a?.emulator??{},aborter:l,adbPort:c}),d=new r({driver:e,generator:t,stateManager:u,logger:n,fixtures:o,options:a,aborter:l,orgId:i,adbPort:c});return await d.initializeSettings(),d}async installApp(e){await this.stateManager.executeRawADBCommand(`install ${sU.resolve(e)}`)}async executeCommand(e){let t=["type","a11yData","thoughts","cache","code"],n;try{n=await Zs({obj:e.command,context:this.fixtures.testContext,bannedKeys:t,orgId:this.orgId,logger:this.logger,signal:this.aborter.controller?.signal,localTools:this.fixtures.localCodeEvalTools})}catch(o){throw this.throwIfAborted(),new Error(`ActionFailureError: Failed to substitute template strings in command: ${o.message}`,{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{Qs(e.command,n)}}async executeCommandHelper({command:e,tracer:t}){switch(e.type){case"TAP":return new Tc(this.constructPerformerParams()).executeTap({command:e,tracer:t});case"TYPE":{let n;if(e.target){let i={type:"TAP",id:iU(),target:e.target,cache:e.cache,longPress:e.clearContent};try{n=(await this.executeCommand({command:i,tracer:t})).message}finally{e.cache=i.cache}}return await this.stateManager.waitForScreenshotStability({timeoutMs:2e3,signal:this.aborter.controller?.signal,reason:"Waiting for keyboard to appear before typing"}),await new vc(this.constructPerformerParams()).doType(e),{success:!0,message:n}}case"AI_CHECK":{let o=e.timeoutSecs?e.timeoutSecs*1e3:5e3,i=il(o),a=Date.now(),s=0,c,l=!1,u;for(;s<15&&!l;){this.throwIfAborted(),l||c&&c-a>=o&&(l=!0),s!==0&&await Z(i,this.aborter.controller?.signal),c=Date.now();try{let d="",p="";await t.startAsyncSpan("EMULATOR_READ_STATE",async()=>{d=(await this.stateManager.getDomState({})).graph.xml,p=await this.stateManager.getCurrentScreenshotPngString()},{name:"Get emulator state"});let g=await t.startAsyncSpan("AI_ASSERTION_CALL",async m=>{let h=await this.generator.evaluateAssertion({assertion:e.assertion,screenXml:d,screenshot:p},{logger:this.logger,loggerTags:Se(this.logger)});return m.result={thoughts:h.thoughts,result:h.result},h});if(g.result)return{success:g.result,message:g.thoughts};{let m=`AssertionFailureError: ${g.thoughts}`;u=new Error(m)}}catch(d){this.throwIfAborted(),this.logger.info({err:d},`AI check assert attempt ${s} failed, retrying...`),u=d instanceof Error?d:new Error(`${d}`)}finally{s++}}return{success:!1,message:u?.message}}case"SWIPE":return new Ac(this.constructPerformerParams()).executeSwipe(e);case"JAVASCRIPT":{let n=await Ar({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.aborter.controller?.signal});try{JSON.stringify(n)}catch(o){throw new Error(`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 Error(`UserConfigurationError: Invalid URL: ${l}`)}let o=new lU,i=aU(fetch,o),a=Date.now(),s=await fc({command:e,baseUrl:void 0,logger:this.logger,fetchImplementation:i}),c=_s(o,n);return{output:{...s,cookies:c},success:!0,message:`Successfully executed request in ${Date.now()-a}ms`}}case"OPEN_NOTIFICATION_DRAWER":return await new An(this.constructPerformerParams()).doPress({keycode:83}),{success:!0};case"OPEN_APP":{let n=e.activityName;if(!n){let o=await V(this.driver.execute("mobile: shell",{command:"pm",args:["resolve-activity","--brief","-a","android.intent.action.MAIN","-c","android.intent.category.LAUNCHER",e.packageName]}),{signal:this.aborter.controller?.signal,milliseconds:1e4});if(typeof o!="string")throw new Error(`Could not find main activity name for package ${e.packageName}. Unexpected output: ${o}`);if(o.includes("No activity found"))throw new Error(`No activity found for package ${e.packageName}.`);if(n=o.trim().split(`
3973
- `).pop()?.replace(/^.*\//,""),!n)throw new Error(`Could not parse main activity name for package ${e.packageName}. Raw output: ${o}`)}if(this.options.emulator?.autoGrantPermissions&&!this.appsWithGrantedPermissions.has(e.packageName)){let o={permissions:"all",appPackage:e.packageName,action:"grant"};await this.driver.executeScript("mobile: changePermissions",[o]),this.appsWithGrantedPermissions.add(e.packageName)}return await this.driver.execute("mobile: shell",{command:"am",args:["start","-n",`${e.packageName}/${n}`]}),await this.stateManager.waitForScreenshotStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability after app launch"}),{success:!0}}case"PRESS":{let n=new An(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 An(this.constructPerformerParams()),o=i=>n.doPress({keycode:i});switch(e.key){case"CLOSE_KEYBOARD":await this.driver.isKeyboardShown()&&await this.driver.hideKeyboard();break;case"ENTER":await o(66);break;case"BACKSPACE":await o(67);break;default:{let i=e}}return{success:!0}}case"WAIT":return await Z(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"ADD_FILE":{let n=await LA(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"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"STATE":{await this.stateManager.refreshWebviews();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(){}async screenshot(){return this.driver.takeScreenshot()}resetAbortController(e){this.aborter.controller=e??new AbortController}isAborted(){return this.aborter.controller?.signal.aborted}abort(){this.aborter.controller?.abort()}get context(){return this.fixtures.testContext}get localCodeEvalTools(){return this.fixtures.localCodeEvalTools}};async function UA({socket:r,logger:e,androidDriverFactory:t,getOrgId:n,mobileGeneratorFactory:o,browserGeneratorFactory:i,browserEnricherFactory:a,storageFactory:s,localToolsFactory:c,globalStateManager:l,settingsFactory:u}){let d=r.id,p=r.handshake.query?.testMetadata,g=r.handshake.query?.fileName,m=g?.endsWith("test.yaml")?g.slice(0,-"test.yaml".length):g,h=br.parse(JSON.parse(p??"")),f=h.id,b=h.settings?.defaultChannel,E=h.settings?.defaultTag,_=await n({testId:f});e=e.child({sessionId:d,testId:f,orgId:_});let A={...(await u(_,e)).emulator,...h.settings?.emulator},P=Date.now(),{driver:R,cleanup:w,limbarToken:B,limbarUrl:D,emulatorName:k,adbTunnelPort:Y}=await t({socket:r,logger:e,creationOpts:{region:A.region,apkToInstall:b?{channel:b,tag:E}:void 0}}),Me=await Js({driver:R,onLogs:zt=>{r.emit("logcatLogs",zt)}});e.info({adbTunnelPort:Y,apkChannel:b,apkTag:E,duration:Date.now()-P,emulatorName:k},"Android emulator session initiated"),e=e.child({emulator:k});let q=await o(_,e),H=await i(_,e),ie=await a(_,e),ae=await s(_),Ie=c?await c(_):void 0,ue={};h.settings?.defaultEnv&&(ue=(await ae.fetchEnvironment(h.settings?.defaultEnv,e))?.variables??{});let at=new ko({variablesFromEnvironment:ue,envName:h.settings?.defaultEnv,testName:m}),Bt=await si.init({driver:R,generator:q,logger:e,options:{emulator:A},fixtures:{storage:ae,browserEnricher:ie,browserGenerator:H,localCodeEvalTools:Ie,testContext:at},orgId:_,adbPort:Y,abortController:new AbortController});if(!r.connected)throw await Me(),await w(),new Error("Socket not connected anymore, not proceeding with Android session setup");let be=cU({socket:r,testContext:at}),Ke=async()=>{clearInterval(be);try{await Me(),await w()}catch(zt){e.warn({err:zt},"Failed to clean up emulator in socket server")}};return l.registerSession(d,{controller:Bt,cleanup:Ke,emulatorName:k}),r.emit("session",{testId:f,sessionId:d,limbarUrl:D,limbarToken:B}),{sessionId:d,testId:f,orgId:_,emulatorName:k,logger:e}}function cU({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}async function FA({socket:r,logger:e,globalStateManager:t}){await t.removeSession(r.id,e)}var uU=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},BA={event:"cancel",createHandler:uU};import{diff as _U}from"deep-object-diff";import{cloneDeep as MU}from"lodash-es";import Jbe,{multistream as Qbe}from"pino";import tEe from"pino-pretty";import dU from"fetch-retry";import pU from"os";import zA,{multistream as mU}from"pino";import gU from"pino-pretty";import hU from"pino-std-serializers";var ci=new Map,fU=!0,HA="Log throttle exceeded",SU=100,yU=5e3,bU=dU(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}}),hm=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??pU.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=fU?zA(a):zA(a,mU([{stream:gU({colorize:!0})}]))}getLevel(){return $s[this.minLevelValue]}child(e){return new r({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}flush(e){this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush(e)}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 bU(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:zo(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch(t){this.consoleLogger.warn({err:t},"Failed to log to SigNoz")}}shouldAllowLog(e){if(e===HA)return!0;let t=Date.now();return t-this.lastWindowStart>yU&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,HA),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<SU?(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(ta[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=hU.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:Pf({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,ci.set("app",this),ci.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=$s[e]):(this.minLevelValue=ta[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},Rc=({app:r,hostname:e,disableConsoleLogs:t})=>(ci.has(r)||ci.set(r,new hm({bindings:{app:r},hostname:e,disableConsoleLogs:t})),ci.get(r));function GA(){for(let r of ci.values())r.flush()}import{PostHog as SEe}from"posthog-node";import{PostHog as CEe}from"posthog-node";import Na from"os";import EU from"v8";var jA,Lr,TU=Na.platform(),vU=Na.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),{});function VA(r){if(Bn)return;let e=()=>{try{let t=!1,n=AU(),o=wU();n.freeMemory<1e6&&(t=!0),o&&o?.total>70&&(t=!0);let i=EU.getHeapStatistics(),a=i.used_heap_size,s=i.heap_size_limit;a/s>.9&&(t=!0),t?r.warn({memory:n,cpu:o,heapStats:i},"Critical resource usage metrics detected"):r.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}};return e(),{interval:setInterval(e,2e4),cpuMetadata:vU,platform:TU}}function AU(){let r=Na.totalmem(),e=Na.freemem(),t=r-e;return{totalMemory:r,freeMemory:e,usedMemory:t}}function wU(){let r=Na.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,!Lr)return Lr=t,null;let n={user:t.user-Lr.user,nice:t.nice-Lr.nice,sys:t.sys-Lr.sys,idle:t.idle-Lr.idle,irq:t.irq-Lr.irq,total:t.total-Lr.total};return jA={measurementTime:e,intervalMs:e-Lr.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},Lr=t,jA}function $A(r,e,t=1e4,n=5e3){let o=0;async function i(){try{let s=await V(r.driver.execute("mobile: shell",{command:"echo",args:["ping"]}).catch(c=>{throw c}),{milliseconds:n});if(typeof s=="string"&&s.trim()==="ping")o>0&&e.info("Driver heartbeat restored"),o=0;else throw new Error(`Unexpected heartbeat output: ${s}`)}catch(s){o++;let c=s instanceof Error?s.message:`${s}`;e.error({attempt:o,error:c},"Driver heartbeat failed"),o>=3&&e.error("Driver appears unresponsive \u2014 possible ADB tunnel/emulator failure")}}let a=setInterval(()=>{i()},t);return i(),a}async function WA(r){let e=Date.now(),t=r.fixtures.controller;try{return await RU(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 RU({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await CU({step:n,params:e}),s={};Object.entries(a).forEach(([p,g])=>{s[p]=JSON.stringify(g)});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(),ay({result:c,...iy(d)}),c}async function CU({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 Ar({orgId:e.inputs.orgId,code:a,fragment:!0,logger:n,context:o.context,localTools:o.localCodeEvalTools})}return t}import{randomUUID as qA}from"crypto";async function KA({fixtures:r,step:e,inputs:t,stepTracer:n}){let o=Date.now(),{logger:i,controller:a}=r,s=n.interactionTracer,c;if(!t.interactive)try{c=await a.screenshot()}catch(u){i.warn({err:u},"Failed to take before screenshot")}let l={...e,status:"SUCCESS",startTime:o,endTime:Date.now()};try{let u=await a.executeCommand({command:e.command,tracer:s});l={...e,status:u.success?"SUCCESS":"FAILED",message:u.message,startTime:o,endTime:Date.now(),data:u.output}}catch(u){u instanceof Error&&u.name==="AbortError"||a.isAborted()?l={...e,status:"CANCELLED",message:"Step cancelled.",startTime:o,endTime:Date.now()}:(i.error({err:u},"Failed to execute preset step"),l={...e,status:"FAILED",message:u instanceof Error?u.message:String(u),startTime:o,endTime:Date.now()})}finally{if(l.trace=s.getRootSpan(),!t.interactive){try{let u=qA(),d=await a.screenshot();l.afterSnapshot=u,n.attachAfterScreenshot({logger:i,snapshotId:u,screenshot:Buffer.from(d,"base64")})}catch(u){i.warn({err:u},"Failed to take after screenshot")}if(c){let u=qA();l.beforeSnapshot=u,n.attachBeforeScreenshot({logger:i,snapshotId:u,screenshot:Buffer.from(c,"base64")})}}}return l}async function fm(r){let{fixtures:e,inputs:t,listParams:n}=r,{containerName:o,steps:i,tracer:a}=n,{logger:s,controller:c,usageTracker:l}=e,u=a.getParentStepIdChain(),d=[],p,g="SUCCESS",{fromStep:m,toStep:h}=t,f=!!m;for(let b=0;b<i.length;b++){let E=i[b];if(s.info({step:E},`Executing step ${b+1}/${i.length} in ${o}: ${ZS(E)}`),E.skipped){s.debug("Step skipped");continue}if(f&&m){let A=JSON.stringify(u);if(E.id===m.fromStepId&&A===JSON.stringify(m.parentStepIdChain))f=!1;else if(!oy({currentStep:E,currentParentChain:u,desiredStepId:m.fromStepId,desiredStepParentChain:m.parentStepIdChain}))continue}let _=await a.startStep({logger:s,step:E,attempt:1,parentStepIdChain:u});l.trackStepExecution(E);let v=await xU({step:E,stepTracer:_,params:r});if(v.trace&&s.info({step:{id:E.id},trace:v.trace,status:v.status},`Step ${b+1}/${i.length} done (${E.type==="MOBILE_PRESET_STEP"?E.command.type:E.type})`),d.push(v),await _.finish({parentStepIdChain:u,result:v}),v.status!=="SUCCESS"){g=v.status,p=v;break}if(E.envKey&&c.context.setVariable(E.envKey,v.data),h){let A=JSON.stringify([]);if(E.id===h.toStepId&&A===JSON.stringify(h.parentStepIdChain))break}}return{results:d,status:g,terminalResult:p}}async function xU({step:r,stepTracer:e,params:t}){let{fixtures:n,inputs:o}=t,i;switch(r.type){case"MOBILE_PRESET_STEP":{i=await KA({fixtures:n,inputs:o,step:r,stepTracer:e});break}case"RESOLVED_MOBILE_MODULE":{i=await WA({...t,moduleParams:{step:r,stepTracer:e,executeMobileStepList:fm}});break}}return i}async function Cc(r){let{tracer:e,containerName:t}=r,{steps:n,testMetadata:o}=r.inputs,{cacheStorage:i,logger:a,controller:s}=r.fixtures;await i.resolveEntries({logger:a,testId:o.id,stepLists:{steps:n}});let c=MU(n);a.info({testMetadata:br.parse(o)},"Starting mobile test");let l=await e.startMainStepList(),u=VA(a),d=$A(s,a);a.info({cpu:u?.cpuMetadata,platform:u?.platform},`Starting execution of ${t}`);let{status:p,results:g}=await fm({...r,listParams:{containerName:t,tracer:l,steps:c}});if(clearInterval(u?.interval),clearInterval(d),p==="SUCCESS"){let m=_U(c,n);if(m&&Object.keys(m).length>0){a.debug({diffs:m},"Saving mobile step cache entries post-success");let{cachesToSave:h}=await Vn({steps:c,cacheCreationParams:{orgId:r.inputs.orgId,testId:o.id}});await i.saveEntries({logger:a,testId:o.id,entries:h})}return{status:"PASSED",results:g}}return p==="CANCELLED"?{status:"CANCELLED",results:g}:{status:"FAILED",results:g}}var Sm=class{parentTracer=null;socket;step;interactionTracer;constructor({step:e,socket:t,parentTracer:n}){this.socket=t,this.parentTracer=n,this.step=e,this.interactionTracer=new so,vn.initializeRootTracerContext(this.interactionTracer)}attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}async finish(e){this.interactionTracer.finish();let t=this.interactionTracer.getRootSpan(),n={..._S.parse(e),trace:Ju.parse(t)};switch(n.result.status){case"SUCCESS":this.socket.emit("success",n);break;case"FAILED":this.socket.emit("failure",n);break;case"CANCELLED":this.socket.emit("cancelled",n);break}return{trace:t}}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}async startSubSteps(){return new ui({parentStep:this.step,socket:this.socket,parentTracer:this})}},ui=class{parentTracer;parentStep;socket;constructor({parentStep:e,socket:t,parentTracer:n}){this.parentTracer=n,this.parentStep=e,this.socket=t}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:e.parentStepIdChain,attempt:e.attempt}),new Sm({step:e.step,parentTracer:this,socket:this.socket})}},xc=class{constructor(e){this.socket=e}appendLogs(){}async finish(){this.socket.emit("finished")}async startBeforeStepList(){return new ui({parentStep:null,parentTracer:null,socket:this.socket})}async startMainStepList(){return new ui({parentStep:null,parentTracer:null,socket:this.socket})}async startAfterStepList(){return new ui({parentStep:null,parentTracer:null,socket:this.socket})}};var PU=({metadata:r,logger:e,globalStateManager:t,socket:n,cacheStorageFactory:o})=>async(i,a)=>{let s=t.getSession(n.id);if(!s)throw new Error("No active Android session found");let c=await o(r.orgId),l=s.controller;l.resetAbortController();let u=new xc(n),d=await Cc({fixtures:{controller:l,logger:e,cacheStorage:c,usageTracker:new Cs},containerName:"entire test",inputs:{steps:i.steps,fromStep:i.fromStep,toStep:i.toStep,orgId:r.orgId,testMetadata:i.testMetadata,interactive:!0},tracer:u});await u.finish();let p={results:dr.array().parse(d.results),status:d.status};a?.(p)},YA={event:"execute",createHandler:PU};import{debounce as IU}from"ts-debounce";var OU=({socket:r,globalStateManager:e,keepSessionAlive:t})=>{let n=IU(t,3e4,{maxWait:6e4});return async()=>{let o=e.getSession(r.id);if(!o)throw new Error("No active Android session found");o.emulatorName&&n(o.emulatorName)}},XA={event:"keepalive",createHandler:OU};var JA=[YA,BA,XA];function ZA(r){let{logger:e,baseServer:t,globalStateManager:n}=r,o=new LU(t,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0}),i=async()=>{await n.removeAllSessions(e)};o.on("connection",async s=>{e.info({event:"connection",transport:s.conn.transport.name},"Android websocket connection initiated"),s.on("disconnect",async()=>{await FA({socket:s,globalStateManager:n,logger:e})});let c;try{c=await UA({...r,socket:s,globalStateManager:n})}catch(l){e.error({err:l},"Failed to setup Android connection"),s.emit("error",{message:l instanceof Error?l.message:JSON.stringify(l)}),s.disconnect(!0);return}JA.forEach(l=>a(l,{...r,socket:s,metadata:c,logger:e}))});let a=(s,c)=>{let l=s.createHandler(c),u=(...d)=>{s.event!=="keepalive"&&c.logger.debug({event:s.event},`Websocket event (${s.event})`);let p=g=>{c.logger.error({event:s.event,err:g instanceof Error?g:new Error(`${g}`)},"Unhandled exception in socket handler"),c.socket.emit("error",{message:g instanceof Error?g.message:`${g}`})};try{let g=l.apply(this,d);g&&typeof g.catch=="function"&&g.catch(p)}catch(g){p(g)}};c.socket.on(s.event,u)};return{server:o,dispose:i}}var ka=!!process.env.CI||!!process.env.GITHUB_ACTIONS||!!process.env.GITHUB_RUN_ID||!!process.env.GITLAB_CI||!!process.env.CI_COMMIT_SHA||!!process.env.JENKINS_URL||!!process.env.BUILD_NUMBER||!!process.env.JENKINS_HOME||!!process.env.CIRCLECI||!!process.env.CIRCLE_BUILD_NUM||!!process.env.TRAVIS||!!process.env.TRAVIS_BUILD_NUMBER||!!process.env.BITBUCKET_BUILD_NUMBER||!!process.env.BITBUCKET_COMMIT||!!process.env.CODEBUILD_BUILD_ID||!!process.env.TF_BUILD||!!process.env.BUILD_BUILDID||!!process.env.AGENT_ID||!!process.env.BUILDER_SA_EMAIL||!!process.env.HEROKU_TEST_RUN_ID||!!process.env.CI_NODE_INDEX||!!process.env.TEAMCITY_VERSION||!!process.env.BUILD_VCS_NUMBER||!!process.env.BUILDKITE||!!process.env.BUILDKITE_BUILD_NUMBER||!!process.env.APPVEYOR||!!process.env.APPVEYOR_BUILD_NUMBER||!!process.env.DRONE||!!process.env.DRONE_BUILD_NUMBER||!!process.env.SHIPPABLE||!!process.env.BUILD_URL||!!process.env.SEMAPHORE||!!process.env.SEMAPHORE_EXECUTABLE_UUID||!!process.env.WOODPECKER||!!process.env.CI_BUILD_NUMBER||!!process.env.WERCKER_MAIN_PIPELINE_STARTED||!!process.env.BUDDY_EXECUTION_ID;import{confirm as DU,input as UU}from"@inquirer/prompts";import{existsSync as Zve,mkdirSync as Qve,statSync as FU}from"fs";import di,{supportsColor as kU}from"chalk";import{Console as QA}from"console";import{format as Da}from"util";var ym=class extends Error{constructor(e,t,n){let o=Error.stackTraceLimit;n&&(Error.stackTraceLimit=Math.max(n,o||10)),super(e),Error.captureStackTrace&&Error.captureStackTrace(this,t),Error.stackTraceLimit=o}},_c=class r extends QA{_buffer=[];_groupDepth=0;Console=QA;constructor(){super({write:e=>(r.write(this._buffer,"log",e),!0)})}static write(e,t,n,o=2){let i=new ym(void 0,r.write).stack;if(!i)return e;let a=i.split(`
3976
+ `));return}}let d=Array.from(e.childNodes??[]);for(let p of d){let h=p.nodeType;if(h===3){let m=p.nodeValue;m&&m.trim().length>0&&t.appendChild(n.createTextNode(m));continue}if(h===1){let m=p,g=n.createElement(MF(m.tagName));Ww(r,m,g),t.appendChild(g)}}}function DF(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;Ww(a,e,s);let c=new _F().serializeToString(o);return{prunedDocument:o,prunedIdToElement:i,xml:c}}async function $w(r,e){let t=new xF,n=t.parseFromString(r,"text/xml"),o=new Map,i=n.documentElement;if(!i)throw new Error("No root element found in XML");if(i.tagName!=="hierarchy")throw new Error("No hierarchy element found in XML");let{prunedDocument:a,prunedIdToElement:s,xml:c}=DF(t,i,o,e);return{xml:await CF.format(c,{parser:"xml",plugins:[RF],printWidth:120,tabWidth:1,singleAttributePerLine:!1}),originalXml:r,document:n,idToElement:o,prunedDocument:a,prunedIdToElement:s}}function UF(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 kc(r,e){let t=r.idToElement.get(e);if(t)return UF(t)}function Vm(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 Dc(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 Wm(r,e){if(r&&!(!e||e.length===0))return Object.fromEntries(e.map(t=>[t,r.getAttribute(t)]).filter(([,t])=>t!==null))}function Yw({aiResponse:r,description:e,emulatorState:t}){let n=t.graph.idToElement.get(r.id);if(!n)throw new Error(`Could not find node with id: ${r.id}`);let o=Dc(n);if(!o)throw new Error(`Node ${r.id} has no bounding box: ${n.outerHTML}`);let i=kc(t.graph,r.id)??"",a=Vm(t.graph,r.id)??"",s=t.graph.idToElement.get(r.id),c=Wm(s,r.requirements?.attributesRequired),u={requiredText:r.requirements?.textRequired?s?.getAttribute("text")??void 0:void 0,requiredAttributes:c,requiredBounds:r.requirements?.boundsRequired},d=[];r.additionalElements&&(d=r.additionalElements.map(({id:h,requirements:m})=>{let g=t.graph.idToElement.get(h);if(!g)return;let f=kc(t.graph,h);return f?{xPath:f,requirements:{requiredText:m.textRequired?g.getAttribute("text")??void 0:void 0,requiredAttributes:Wm(g,m.attributesRequired),requiredBounds:m.boundsRequired}}:void 0}).filter(h=>!!h));let p;return jm(n.tagName)&&r.inWebview!==!1?p={type:"WEBVIEW",resolvedDescription:e,xPath:i}:p={type:"NATIVE",bounds:o,resolvedDescription:e,xPath:i,elementOnlySerializedXml:a,requirements:u,requiredRelatedElements:d},p}var Kw=(r,e,t)=>{if(!e)return;let{requiredAttributes:n,requiredText:o,requiredBounds:i}=e;if(o!==void 0){let a=r.getAttribute("text")??void 0;if(a!==o)throw new Error(`ActionFailureError: Resolved element text mismatch: expected ${o}, got ${a}`)}if(n)for(let[a,s]of Object.entries(n)){let c=r.getAttribute(a)??void 0;if(c!==s)throw new Error(`ActionFailureError: Attribute ${a} mismatch: expected ${s}, got ${c}`)}if(i&&t){let a=Dc(r);if(!a||a.length!==t.length)throw new Error("ActionFailureError: Resolved element has no bounds or unexpected bounds format");if(!a.every((c,l)=>c===t[l]))throw new Error(`ActionFailureError: Bounds changed from [${t.join(",")} ] to [${a.join(",")} ]`)}};async function Xw(r){let{target:e,domState:t}=r,{graph:n}=t,{document:o}=n,i=ut();if(e.type==="WEBVIEW")return FF(e,r);let a=qw.evaluateXPathToFirstNode(e.xPath,o,null,null);if(!a)throw new Error(`ActionFailureError: Could not resolve cached target via XPath: ${e.xPath}`);if(e.requiredRelatedElements){let p=e.requiredRelatedElements;i.startSection("Validate related elements are similar enough to past runs",()=>{for(let h of p){let m=qw.evaluateXPathToFirstNode(h.xPath,o);if(!m)throw new Error(`ActionFailureError: Required related element not found for XPath: ${h.xPath}`);Kw(m,h.requirements)}})}let s=Dc(a);if(!s)throw new Error("ActionFailureError: Resolved native element has no bounding box");Kw(a,e.requirements,e.bounds);let c;for(let[p,h]of n.idToElement.entries())if(h===a){c=p;break}let l=e.elementOnlySerializedXml,u=e.xPath;return c!==void 0&&(l=Vm(n,c)??l,u=kc(n,c)??u),{resolvedTarget:{...e,bounds:s,elementOnlySerializedXml:l,xPath:u}}}async function FF(r,e){let{stateManager:t,logger:n,signal:o}=e,i=ut(),a=await t.getActiveWebview();if(!a||!a.browserController)throw new Error("No browser controller is attached to the requested webview");let s=a.browserController.browser;if(!r.browserCache)throw new Error("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}));return{resolvedTarget:{...r,controller:a.browserController,resolution:l}}}function $m(r){let{command:e,cacheKey:t="cache",targetName:n="target",updatedCache:o}=r;Ks(e)&&(e[t]={...e[t],[n]:qs.parse(o)},r.updatedWithAI&&(e[t].updatedAt=new Date))}function Jw(r){return r.type==="WEBVIEW"?{type:"WEBVIEW",resolvedDescription:r.resolvedDescription,xPath:r.xPath,browserCache:r.browserCache}:r}var cr=class{driver;stateManager;generator;logger;fixtures;aborter;orgId;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}async findElement({description:e,tracer:t}){await this.stateManager.waitForScreenshotStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before locating an element with AI"});let n=await t.startAsyncSection("Get emulator state",async c=>{let l=await this.stateManager.getDomState(),u=await c.startAsyncSpan("EMULATOR_READ_STATE",()=>this.stateManager.getCurrentScreenshotPngString(),{name:"Emulator screenshot"});return{emulatorState:l,screenshot:u}}),o;try{o=await t.startAsyncSpan("AI_LOCATOR_CALL",async c=>{let l=await this.generator.getElementLocation({description:e,screenXml:n.emulatorState.graph.xml,screenshot:n.screenshot},{logger:this.logger,loggerTags:ve(this.logger),abortSignal:this.aborter.controller?.signal});return c.result=l,l})}catch(c){throw this.throwIfAborted(),this.logger.error({err:c},"Failed to locate element"),new Error(`ActionFailureError: Failed to locate element: ${c instanceof Error?c.message:c}`)}if(o.id===-1)throw new Error(`ActionFailureError: No matching element found: ${o.thoughts}`);let i=Yw({aiResponse:o,description:e,emulatorState:n.emulatorState});if(i.type==="NATIVE")return t.addSpan({type:"TARGET_RESOLUTION",startTime:Date.now(),endTime:Date.now(),result:{serializedElement:i.elementOnlySerializedXml},attributes:{}}),{resolvedTarget:i,thoughts:o.thoughts};let{browserLocateResult:a,browserController:s}=await t.startAsyncSpan("TARGET_RESOLUTION",async c=>{let l=await this.stateManager.getActiveWebview();if(!l||!l.browserController)throw new Error("No browser controller is attached to the requested webview");let u=await l.browserController.locateElement({description:e,disableCache:!1,logger:this.logger});return c.result={serializedElement:u.target.nodeOnlySerializedHtml??"Unknown HTML element in webview"},{browserLocateResult:u,browserController:l.browserController}});return{resolvedTarget:{...i,controller:s,resolution:a.resolution,browserCache:a.target},thoughts:a.thoughts}}async wrapTargetingAction(e){let{action:t,description:n,command:o,cacheKey:i="cache",targetName:a="target",cacheIsInvalidAfterResolution:s,tracer:c}=e,l=i in o&&o[i]&&a in o[i]?o[i][a]:void 0,u=e.retriesWithAI??1,d=!1,p=zF(l),h;if(o.disableCache&&(this.logger.debug({command:o},"Cache explicitly disabled for command"),d=!0,p=void 0),s&&(d=!0,p=void 0),p&&p?.resolvedDescription!==n&&(this.logger.info({cache:p,description:n},"Cache description mismatch, clearing it automatically"),d=!0,p=void 0),!p){u--,this.logger.info({description:n,cacheBustedBeforeAction:d},"Prompting AI for a new element location");let g=await this.findElement({description:n,tracer:c});return h=g.thoughts,$m({command:o,cacheKey:i,targetName:a,updatedCache:g.resolvedTarget,updatedWithAI:!0}),{result:await t(g.resolvedTarget),thoughts:h}}let m;try{await this.stateManager.waitForScreenshotStability({timeoutMs:5e3,signal:this.aborter.controller?.signal,reason:"Waiting for stability before cache resolution"}),m=await c.startAsyncSection("Get emulator XML tree",async()=>await this.stateManager.getDomState());let g=await c.startAsyncSection("Resolve target cache",async(E,S)=>{let{resolvedTarget:R}=await Xw({target:p,domState:m,stateManager:this.stateManager,logger:this.logger}),A=Jw(R),v=BF(p,A);return this.logger.info({cacheDiffs:v},"Successfully resolved and updated target"),$m({command:o,cacheKey:i,targetName:a,updatedCache:A,updatedWithAI:!1}),S.attributes.serializedElement=R.type==="WEBVIEW"?R.browserCache?.nodeOnlySerializedHtml??"Unknown HTML element in webview":R.elementOnlySerializedXml,R}),f=await t(g);return p.type!=="WEBVIEW"&&Ht.increment("cache_target_resolution_v2",1,["outcome:hit","platform:native",`hasRequirements:${!!p.requirements}`,`hasAdditionalElements:${!!p.requiredRelatedElements?.length}`,`orgId:${this.orgId}`]),{result:f,thoughts:"Successfully executed preset action with cache."}}catch(g){if(p.type!=="WEBVIEW"&&Ht.increment("cache_target_resolution_v2",1,["outcome:miss","platform:native",`hasRequirements:${!!p.requirements}`,`hasAdditionalElements:${!!p.requiredRelatedElements?.length}`,`orgId:${this.orgId}`]),this.throwIfAborted(),u>0)return this.logger.warn({err:g},"Failed to resolve target cache, retrying with AI"),this.logger.debug({domState:m?.graph.originalXml},"Emulator state"),this.wrapTargetingAction({...e,cacheIsInvalidAfterResolution:!0,retriesWithAI:u-1});throw new Error(`ActionFailureError: ${g instanceof Error?g.message:g}`,{cause:g})}}constructPerformerParams(){return{stateManager:this.stateManager,generator:this.generator,driver:this.driver,logger:this.logger,fixtures:this.fixtures,aborter:this.aborter,orgId:this.orgId}}throwIfAborted(){this.aborter.controller?.signal.throwIfAborted()}};function jF(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 Uc=class extends cr{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,p=o+u;return await this.tapOnAbsoluteCoordinates({x:d,y:p,...t}),{x:d,y:p}}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=Zw.join(GF(),"momentic","downloads"),s=Zw.join(a,this.orgId,i);return HF(s,{recursive:!0}),s}},{delayMs:t?.longPressDurationMs,relativePosition:t?.relativePosition,doubleClick:t?.doubleTap})).coordinates}async tapOnTarget({target:e,options:t}){return await ut().startAsyncSpan("EMULATOR_INTERACTION",async o=>"type"in e&&e.type==="NATIVE"?this.tapOnNativeTarget(e,t):(o.withinWebview=!0,this.tapOnWebviewTarget(e,t)),{name:"Tap on target"})}async executeTap({command:e,tracer:t}){let n=jF(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 Pn=class extends cr{async doPress({keycode:e,longPress:t}){await ut().startAsyncSpan("EMULATOR_INTERACTION",async()=>this.driver.executeScript("mobile: pressKey",[{keycode:e,isLongPress:t}]),{name:"Send key events to emulator"})}};var Fc=class extends cr{async doType(e){e.clearContent&&await this.clearContent(),await this.doTypeHelper(e)}async doTypeHelper(e){let t=ut(),n=e.keyPressDelayMs;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=ut();try{await e.startAsyncSection("Clearing any content from the focused field",()=>this.clearContentHelper())}catch(t){throw new Error(`Failed to clear content because the select all button was not found: ${t}`)}}async clearContentHelper(){let e=this.driver.$('//android.widget.LinearLayout[@package="app.lawnchair" and @content-desc="Select all" and @clickable="true"]');await e.waitForExist({timeout:750}),await e.click(),await new Pn(this.constructPerformerParams()).doPress({keycode:67})}};import Gt from"zod";var Qw=.9,VF=Gt.object({navigationBar:Gt.object({visible:Gt.boolean(),x:Gt.number(),y:Gt.number(),width:Gt.number(),height:Gt.number()}),statusBar:Gt.object({visible:Gt.boolean(),x:Gt.number(),y:Gt.number(),width:Gt.number(),height:Gt.number()})}),Bc=class extends cr{async executeSwipe(e){let t=ut();if(e.scrollableElement.type!=="CUSTOM"){await this.stateManager.waitForScreenshotStability({timeoutMs:2e3,signal:this.aborter.controller?.signal,reason:"Waiting for screen to stabilize before swiping"});let n=await this.driver.getWindowRect(),o;if(e.scrollableElement.type==="SCREEN")o={left:n.x+25,top:n.y+50,width:n.width-50,height:n.height-100};else try{let i=VF.parse(await this.driver.executeScript("mobile: getSystemBars",[]));o={left:n.x+25,top:n.y+50,width:n.width-50,height:n.height-100},i.navigationBar.visible&&(o.height-=i.navigationBar.height),i.statusBar.visible&&(o.top+=i.statusBar.height,o.height-=i.statusBar.height)}catch(i){this.logger.warn({err:i},"Failed to get system bars, using hardcoded bounds"),o={left:n.x+50,top:n.y+100,width:n.width-100,height:n.height-200}}return await t.startAsyncSpan("EMULATOR_INTERACTION",async i=>{await this.swipeByAbsoluteCoordinates({span:i,direction:e.direction,percent:e.viewportPercent,durationMs:e.durationMs,containerBounds:o})},{name:`Swipe ${e.direction} in the entire ${e.scrollableElement.type.toLowerCase()}`}),{success:!0}}return await this.wrapTargetingAction({command:e,description:e.scrollableElement.target.description,action:async n=>ut().startAsyncSpan("EMULATOR_INTERACTION",async i=>"type"in n&&n.type==="NATIVE"?this.scrollInNativeContainer({span:i,cmd:e,target:n}):(i.withinWebview=!0,this.scrollInWebview({cmd:e,target:n})),{name:`Swipe ${e.direction} in the specified container`}),tracer:t}),{success:!0}}async scrollInNativeContainer({span:e,cmd:t,target:n}){let o=Math.floor(n.bounds[2]*.05),i=Math.floor(n.bounds[3]*.05);await this.swipeByAbsoluteCoordinates({span:e,direction:t.direction,percent:t.viewportPercent,durationMs:t.durationMs,containerBounds:{left:n.bounds[0]+o,top:n.bounds[1]+i,width:n.bounds[2]-n.bounds[0]-o*2,height:n.bounds[3]-n.bounds[1]-i*2}})}async scrollInWebview({cmd:e,target:t}){let{controller:n}=t,o=n.browser.getViewport();if(!o)throw new Error("Failed to get viewport size from webview");if(e.direction==="down"||e.direction==="up"){let i=o.height*(e.viewportPercent??Qw)*(e.direction==="down"?1:-1);await n.browser.scrollVertical(i)}else{let i=o.width*(e.viewportPercent??.9)*(e.direction==="right"?1:-1);await n.browser.scrollHorizontal(i)}}async swipeByAbsoluteCoordinates({span:e,direction:t,percent:n=Qw,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{existsSync as WF,readFileSync as $F}from"fs";import qF from"zod";var KF=qF.string().url();async function eR(r){if(KF.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 Error(`Fetch failed or timed out for URL: ${r}`,{cause:i})}finally{clearTimeout(t)}if(!n.ok)throw new Error(`Failed to fetch file from URL: ${r}, status: ${n.status}`);let o=await n.arrayBuffer();return Buffer.from(o).toString("base64")}if(!WF(r))throw new Error(`File does not exist at path: ${r}`);return $F(r).toString("base64")}import{execSync as rR}from"child_process";import XF from"pixelmatch";import{_android as JF,chromium as ZF}from"playwright";import{PNG as nR}from"pngjs";import{z as je}from"zod";var tR=je.array(je.object({proc:je.string(),webview:je.string(),info:je.object({"Android-Package":je.string(),Browser:je.string(),"Protocol-Version":je.string(),"User-Agent":je.string(),"V8-Version":je.string(),"WebKit-Version":je.string(),webSocketDebuggerUrl:je.string()}),pages:je.array(je.object({description:je.string(),devtoolsFrontendUrl:je.string(),id:je.string(),title:je.string(),type:je.string(),url:je.string(),webSocketDebuggerUrl:je.string()})),webviewName:je.string()}));var zc=class r{driver;device;currentContext;logger;webviews=new Map;fixtures;orgId;options;aborter;constructor({driver:e,context:t,logger:n,device:o,fixtures:i,orgId:a,options:s,aborter:c}){this.driver=e,this.device=o,this.currentContext=t,this.logger=n,this.fixtures=i,this.orgId=a,this.options=s,this.aborter=c;for(let l of["SIGINT","SIGTERM"])process.on(l,async()=>{await this.cleanupWebviews(),setImmediate(()=>{setTimeout(()=>{process.exit(1)},2e3).unref()})})}static async init({driver:e,logger:t,fixtures:n,orgId:o,adbPort:i,options:a,aborter:s}){let c=await e.getContext(),l=typeof c=="string"?c:c.id,u=(await JF.devices()).filter(h=>h._initializer?.serial?.endsWith(i.toString()));if(u.length!==1)throw new Error(`Playwright detected ${u.length} Android devices, expected 1. Please stop all other emulators and try again.`);let d=u[0];return new r({driver:e,context:l,logger:t,device:d,fixtures:n,orgId:o,options:a,aborter:s})}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(){return await this.driver.takeScreenshot()}async getCurrentScreenshotPngString(){return`data:image/png;base64,${await this.getRawScreenshotBase64()}`}async waitForScreenshotStability({timeoutMs:e,signal:t,reason:n,tolerancePercent:o=1}){await ut().startAsyncSpan("WAIT_FOR_STABILITY",async i=>{let a=Date.now(),s,c=!1,l=(u,d)=>{let p=Buffer.from(u,"base64"),h=Buffer.from(d,"base64"),m=nR.sync.read(p),g=nR.sync.read(h);if(m.width!==g.width||m.height!==g.height)return 100;let f=m.width,E=m.height,S=Buffer.alloc(f*E*4);return XF(m.data,g.data,S,f,E,{threshold:.01})/(f*E)*100};for(;Date.now()-a<e;){if(t?.throwIfAborted(),!s){s=await this.getRawScreenshotBase64();continue}let u=await this.getRawScreenshotBase64();if(l(s,u)<=o){c=!0;break}s=u,await te(250,t)}c||(i.attributes.timedOut=!0,this.logger.warn({purpose:n},"Timed out waiting for screenshot stability"))},{reason:n})}async getActiveWebviewContent(){let e=await this.getActiveWebview();if(!e||!e.browserController)return;this.throwIfAborted();let t=e.browserController,n=await ut().startAsyncSpan("EMULATOR_READ_STATE",()=>t.getBrowserState({abortSignal:this.aborter.controller?.signal,serializationOpts:{noId:!0}}),{name:"Get webview content"});return this.throwIfAborted(),n.serializedTree}async getDomState(e){let t=ut(),n;if(!e?.skipWebviews)try{n=await this.getActiveWebviewContent()}catch(a){this.logger.error({err:a},"Could not get webview info to get the nested DOM state")}let o=await t.startAsyncSpan("EMULATOR_READ_STATE",()=>this.driver.getPageSource(),{name:"Get Android page source"});return this.throwIfAborted(),{graph:await $w(o,{injectedWebviewContent:n,disableMomenticAccessibilityTree:this.options.disableMomenticAccessibilityTree}),context:this.currentContext}}async refreshWebviews(){await this.driver.getPageSource(),this.throwIfAborted();let e=await this.getDetailedContexts();if(!e){this.logger.warn("No context details, not proceeding with refreshing webviews");return}let t=Date.now(),n=new Set;for(let o of e){if(this.throwIfAborted(),o.webview==="NATIVE_APP")continue;let i=o.info["Android-Package"];if(n.add(o.webview),!this.webviews.has(o.webview)||!this.webviews.get(o.webview)?.active){let a={contextId:o.webview,packageName:i,active:!1,lastSeen:t,socketName:o.proc.startsWith("@")?o.proc.substring(1):o.proc};this.logger.info({contextId:a.contextId,packageName:a.packageName,socketName:a.socketName},"New webview detected"),this.webviews.set(o.webview,a);let s;if(i==="com.android.chrome"?(s=await this.connectPlaywrightToChrome(a),this.logger.info(`Connected Playwright to Android Chrome: ${o.webview}`)):(this.logger.info(`Attempting to connect Playwright to webview: ${o.webview}`),s=await this.connectPlaywrightToWebview(i,a.socketName),this.logger.info(`Connected Playwright to webview ${o.webview}`)),!s)continue;a.browserController=s,a.active=!0}}for(let[o,i]of this.webviews.entries())!n.has(o)&&i.active&&(this.logger.info(`Disconnecting dead webview ${o}`),this.disconnectPlaywrightFromWebview(i),i.active=!1)}async getActiveWebview(){await ut().startAsyncSection("Refresh webviews",async()=>{await this.refreshWebviews()});let e=await this.driver.execute("mobile: getCurrentPackage");e!==void 0&&typeof e!="string"&&this.logger.warn({currentPkg:e},"Unexpected getCurrentPackage result");let t=[];for(let n of this.webviews.values())n.packageName===e&&n.active&&t.push(n);if(t.length!==0){if(t.length>1)throw new Error("Multiple active webviews in a single package is currently not supported");return t[0]}}async executeRawADBCommand(e){let t=this.driver.capabilities,n=t.deviceUDID||t.udid||t["appium:udid"]||t["appium:deviceUDID"],o=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb",i=n?`-s ${n}`:"",a=`${o} ${i} ${e}`;this.logger.info(`Executing ADB command: ${a}`);let s=rR(a,{encoding:"utf8"});return this.logger.info(`ADB command result: ${s}`),s}async cleanupWebviews(){for(let[e,t]of this.webviews.entries())this.logger.info(`Disconnecting webview ${e}`),this.disconnectPlaywrightFromWebview(t),t.active=!1}async getDetailedContexts(){let e=await this.driver.execute("mobile: getContexts");return this.aborter.controller?.signal.throwIfAborted(),tR.parse(e)}async createBrowserController({context:e}){let t=await va.fromExistingContext({context:e,logger:this.logger,userBrowserSettings:{visualActions:!0},properties:{isNewHeadless:!0,allowedA11yIgnoreReasonsOverride:[]},storage:this.fixtures.storage,enricher:this.fixtures.browserEnricher});await t.getActivePage().waitForLoadState();let n=await t.getBrowserState({skipWait:!0,skipWaitForPageLoad:!0});return new Lc({browser:t,generator:this.fixtures.browserGenerator,logger:this.logger,orgId:this.orgId,storage:this.fixtures.storage,localCodeEvalTools:this.fixtures.localCodeEvalTools,visualDiffScreenshotStorage:new dl})}async connectPlaywrightToWebview(e,t){let o=this.device.webViews().find(a=>!(a.pkg()!==e||"_socketName"in a&&typeof a._socketName=="string"&&a._socketName!==t));if(!o){this.logger.warn(`[WebviewManager] Could not find webview for ${e} with socket name ${t}`);return}return this.logger.info({packageName:e,socketName:t},"Connecting Playwright to app webview"),await this.createBrowserController({context:(await o.page()).context()})}async connectPlaywrightToChrome(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 ZF.connectOverCDP({endpointURL:o,timeout:5e3}),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.error({err:o},`Error connecting Playwright to webview ${e.contextId}`);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.driver.capabilities,o=n.deviceUDID||n.udid||n["appium:udid"]||n["appium:deviceUDID"];this.logger.info({deviceId:o},`Device ID from capabilities: ${o||"not found"}`);let i=process.env.ANDROID_HOME?`${process.env.ANDROID_HOME}/platform-tools/adb`:"adb",a=o?`-s ${o}`:"",s=`${i} ${a} forward tcp:${t} ${`localabstract:${e}`||"localabstract:chrome_devtools_remote"}`;this.logger.info(`Executing command: ${s}`);let c=rR(s,{encoding:"utf8"});return this.logger.info(`ADB command result: ${c}`),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 Si=class r extends cr{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}){let l={controller:s},u=await zc.init({driver:e,logger:n,fixtures:o,orgId:i,options:a?.emulator??{},aborter:l,adbPort:c}),d=new r({driver:e,generator:t,stateManager:u,logger:n,fixtures:o,options:a,aborter:l,orgId:i,adbPort:c});return await d.initializeSettings(),d}async installApp(e){await this.stateManager.executeRawADBCommand(`install ${tB.resolve(e)}`)}async executeCommand(e){let t=["type","a11yData","thoughts","cache","code"],n;try{n=await hl({obj:e.command,context:this.fixtures.testContext,bannedKeys:t,orgId:this.orgId,logger:this.logger,signal:this.aborter.controller?.signal,localTools:this.fixtures.localCodeEvalTools})}catch(o){throw this.throwIfAborted(),new Error(`ActionFailureError: Failed to substitute template strings in command: ${o.message}`,{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{gl(e.command,n)}}async executeCommandHelper({command:e,tracer:t}){switch(e.type){case"TAP":return new Uc(this.constructPerformerParams()).executeTap({command:e,tracer:t});case"TYPE":{let n;if(e.target){let i={type:"TAP",id:QF(),target:e.target,cache:e.cache,longPress:e.clearContent};try{n=(await this.executeCommand({command:i,tracer:t})).message}finally{e.cache=i.cache}}return await this.stateManager.waitForScreenshotStability({timeoutMs:2e3,signal:this.aborter.controller?.signal,reason:"Waiting for keyboard to appear before typing"}),await new Fc(this.constructPerformerParams()).doType(e),{success:!0,message:n}}case"AI_CHECK":{let o=e.timeoutSecs?e.timeoutSecs*1e3:5e3,i=Tl(o),a=Date.now(),s=0,c,l=!1,u;for(;s<15&&!l;){this.throwIfAborted(),l||c&&c-a>=o&&(l=!0),s!==0&&await te(i,this.aborter.controller?.signal),c=Date.now();try{let d="",p="";await t.startAsyncSpan("EMULATOR_READ_STATE",async()=>{d=(await this.stateManager.getDomState({})).graph.xml,p=await this.stateManager.getCurrentScreenshotPngString()},{name:"Get emulator state"});let h=await t.startAsyncSpan("AI_ASSERTION_CALL",async m=>{let g=await this.generator.evaluateAssertion({assertion:e.assertion,screenXml:d,screenshot:p},{logger:this.logger,loggerTags:ve(this.logger)});return m.result={thoughts:g.thoughts,result:g.result},g});if(h.result)return{success:h.result,message:h.thoughts};{let m=`AssertionFailureError: ${h.thoughts}`;u=new Error(m)}}catch(d){this.throwIfAborted(),this.logger.info({err:d},`AI check assert attempt ${s} failed, retrying...`),u=d instanceof Error?d:new Error(`${d}`)}finally{s++}}return{success:!1,message:u?.message}}case"SWIPE":return new Bc(this.constructPerformerParams()).executeSwipe(e);case"JAVASCRIPT":{let n=await Pr({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.aborter.controller?.signal});try{JSON.stringify(n)}catch(o){throw new Error(`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 Error(`UserConfigurationError: Invalid URL: ${l}`)}let o=new rB,i=eB(fetch,o),a=Date.now(),s=await Oc({command:e,baseUrl:void 0,logger:this.logger,fetchImplementation:i}),c=$s(o,n);return{output:{...s,cookies:c},success:!0,message:`Successfully executed request in ${Date.now()-a}ms`}}case"OPEN_NOTIFICATION_DRAWER":return await new Pn(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 W(this.driver.execute("mobile: shell",{command:"pm",args:i}),{signal:this.aborter.controller?.signal,milliseconds:1e4});if(typeof a!="string")throw new Error(`Could not find main activity name for package ${e.packageName}. Unexpected output: ${a}`);if(a.includes("No activity found"))throw new Error(`No activity found for package ${e.packageName}.`);if(n=a.trim().split(`
3977
+ `).pop()?.replace(/^.*\//,""),!n)throw new Error(`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 Error(`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.aborter.controller?.signal,reason:"Waiting for stability after app launch"}),{success:!0}}case"PRESS":{let n=new Pn(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 Pn(this.constructPerformerParams()),o=i=>n.doPress({keycode:i});switch(e.key){case"CLOSE_KEYBOARD":await this.driver.isKeyboardShown()&&await this.driver.hideKeyboard();break;case"ENTER":await o(66);break;case"BACKSPACE":await o(67);break;default:{let i=e}}return{success:!0}}case"WAIT":return await te(e.timeoutSecs*1e3,this.aborter.controller?.signal),{success:!0};case"ADD_FILE":{let n=await eR(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"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"STATE":{await this.stateManager.refreshWebviews();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(){}async screenshot(){return this.driver.takeScreenshot()}resetAbortController(e){this.aborter.controller=e??new AbortController}isAborted(){return this.aborter.controller?.signal.aborted}abort(){this.aborter.controller?.abort()}get context(){return this.fixtures.testContext}get localCodeEvalTools(){return this.fixtures.localCodeEvalTools}};async function oR({socket:r,logger:e,androidDriverFactory:t,getOrgId:n,mobileGeneratorFactory:o,browserGeneratorFactory:i,browserEnricherFactory:a,storageFactory:s,localToolsFactory:c,globalStateManager:l,settingsFactory:u}){let d=r.id,p=r.handshake.query?.testMetadata,h=r.handshake.query?.fileName,m=h?.endsWith("test.yaml")?h.slice(0,-"test.yaml".length):h,g=_r.parse(JSON.parse(p??"")),f=g.id,E=g.settings?.defaultChannel,S=g.settings?.defaultTag,R=await n({testId:f});e=e.child({sessionId:d,testId:f,orgId:R});let v={...(await u(R,e)).emulator,...g.settings?.emulator},P=Date.now(),{driver:C,cleanup:w,limbarToken:B,limbarUrl:U,emulatorName:D,adbTunnelPort:J}=await t({socket:r,logger:e,creationOpts:{region:v.region,apkToInstall:E?{channel:E,tag:S}:void 0}}),Le=await ml({driver:C,onLogs:$t=>{r.emit("logcatLogs",$t)}});e.info({adbTunnelPort:J,apkChannel:E,apkTag:S,duration:Date.now()-P,emulatorName:D},"Android emulator session initiated"),e=e.child({emulator:D});let K=await o(R,e),G=await i(R,e),se=await a(R,e),ce=await s(R),ke=c?await c(R):void 0,ge={};g.settings?.defaultEnv&&(ge=(await ce.fetchEnvironment(g.settings?.defaultEnv,e))?.variables??{});let pt=new Wo({variablesFromEnvironment:ge,envName:g.settings?.defaultEnv,testName:m}),Wt=await Si.init({driver:C,generator:K,logger:e,options:{emulator:v},fixtures:{storage:ce,browserEnricher:se,browserGenerator:G,localCodeEvalTools:ke,testContext:pt},orgId:R,adbPort:J,abortController:new AbortController});if(!r.connected)throw await Le(),await w(),new Error("Socket not connected anymore, not proceeding with Android session setup");let we=nB({socket:r,testContext:pt}),et=async()=>{clearInterval(we);try{await Le(),await w()}catch($t){e.warn({err:$t},"Failed to clean up emulator in socket server")}};return l.registerSession(d,{controller:Wt,cleanup:et,emulatorName:D}),r.emit("session",{testId:f,sessionId:d,limbarUrl:U,limbarToken:B}),{sessionId:d,testId:f,orgId:R,emulatorName:D,logger:e}}function nB({socket:r,testContext:e}){return setInterval(()=>{let t=e.toEditorDisplayCopy();r.emit("emulatorState",{context:t})},3e3)}async function iR({socket:r,logger:e,globalStateManager:t}){await t.removeSession(r.id,e)}var oB=({socket:r,globalStateManager:e})=>async()=>{let t=e.getSession(r.id);if(!t)throw new Error("No active Android session found");t.controller.abort()},aR={event:"cancel",createHandler:oB};import{diff as vB}from"deep-object-diff";import{cloneDeep as AB}from"lodash-es";import yRe,{multistream as ERe}from"pino";import vRe from"pino-pretty";import iB from"fetch-retry";import aB from"os";import sR,{multistream as sB}from"pino";import lB from"pino-pretty";import cB from"pino-std-serializers";var bi=new Map,uB=!0,lR="Log throttle exceeded",dB=100,pB=5e3,mB=iB(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}}),Km=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??aB.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=uB?sR(a):sR(a,sB([{stream:lB({colorize:!0})}]))}getLevel(){return sl[this.minLevelValue]}child(e){return new r({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}flush(e){this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush(e)}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 mB(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:Yo(e),signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`Got error status (${t.statusText}) from SigNoz`)}catch(t){this.consoleLogger.warn({err:t},"Failed to log to SigNoz")}}shouldAllowLog(e){if(e===lR)return!0;let t=Date.now();return t-this.lastWindowStart>pB&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,lR),this.droppedLogsInWindow=!1,this.lastWindowStart=t),this.logsInCurrentWindow<dB?(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(ha[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=cB.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:KS({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,bi.set("app",this),bi.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=sl[e]):(this.minLevelValue=ha[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},Hc=({app:r,hostname:e,disableConsoleLogs:t})=>(bi.has(r)||bi.set(r,new Km({bindings:{app:r},hostname:e,disableConsoleLogs:t})),bi.get(r));function cR(){for(let r of bi.values())r.flush()}import{PostHog as FRe}from"posthog-node";import{PostHog as qRe}from"posthog-node";import Ka from"os";import hB from"v8";var uR,Hr,gB=Ka.platform(),fB=Ka.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),{}),dR=r=>{try{let e=!1,t=SB(),n=yB();t.freeMemory<1e6&&(e=!0),n&&n?.total>70&&(e=!0);let o=hB.getHeapStatistics(),i=o.used_heap_size,a=o.heap_size_limit;if(i/a>.9&&(e=!0),e)for(let s of[r,x])s.warn({memory:t,cpu:n,heapStats:o},"Critical resource usage metrics detected");else r.debug({memory:t,cpu:n},"Got machine resource usage metrics")}catch{}};function pR(r){if(!yn)return dR(r),{interval:setInterval(()=>dR(r),2e4),cpuMetadata:fB,platform:gB}}function SB(){let r=Ka.totalmem(),e=Ka.freemem(),t=r-e;return{totalMemory:r,freeMemory:e,usedMemory:t}}function yB(){let r=Ka.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,!Hr)return Hr=t,null;let n={user:t.user-Hr.user,nice:t.nice-Hr.nice,sys:t.sys-Hr.sys,idle:t.idle-Hr.idle,irq:t.irq-Hr.irq,total:t.total-Hr.total};return uR={measurementTime:e,intervalMs:e-Hr.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},Hr=t,uR}function mR(r,e,t=1e4,n=5e3){let o=0;async function i(){try{let s=await W(r.driver.execute("mobile: shell",{command:"echo",args:["ping"]}).catch(c=>{throw c}),{milliseconds:n});if(typeof s=="string"&&s.trim()==="ping")o>0&&e.info("Driver heartbeat restored"),o=0;else throw new Error(`Unexpected heartbeat output: ${s}`)}catch(s){o++;let c=s instanceof Error?s.message:`${s}`;e.error({attempt:o,error:c},"Driver heartbeat failed"),o>=3&&e.error("Driver appears unresponsive \u2014 possible ADB tunnel/emulator failure")}}let a=setInterval(()=>{i()},t);return i(),a}async function hR(r){let e=Date.now(),t=r.fixtures.controller;try{return await bB(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 bB({moduleParams:r,...e}){let t=Date.now(),{step:n,stepTracer:o,executeMobileStepList:i}=r,a=await EB({step:n,params:e}),s={};Object.entries(a).forEach(([p,h])=>{s[p]=JSON.stringify(h)});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(),wb({result:c,...Ab(d)}),c}async function EB({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 Pr({orgId:e.inputs.orgId,code:a,fragment:!0,logger:n,context:o.context,localTools:o.localCodeEvalTools})}return t}import{randomUUID as gR}from"crypto";async function fR({fixtures:r,step:e,inputs:t,stepTracer:n}){let o=Date.now(),{logger:i,controller:a}=r,s=n.interactionTracer,c;if(!t.interactive)try{c=await a.screenshot()}catch(u){i.warn({err:u},"Failed to take before screenshot")}let l={...e,status:"SUCCESS",startTime:o,endTime:Date.now()};try{let u=await a.executeCommand({command:e.command,tracer:s});l={...e,status:u.success?"SUCCESS":"FAILED",message:u.message,startTime:o,endTime:Date.now(),data:u.output}}catch(u){u instanceof Error&&u.name==="AbortError"||a.isAborted()?l={...e,status:"CANCELLED",message:"Step cancelled.",startTime:o,endTime:Date.now()}:(i.error({err:u},"Failed to execute preset step"),l={...e,status:"FAILED",message:u instanceof Error?u.message:String(u),startTime:o,endTime:Date.now()})}finally{if(l.trace=s.getRootSpan(),!t.interactive){try{let u=gR(),d=await a.screenshot();l.afterSnapshot=u,n.attachAfterScreenshot({logger:i,snapshotId:u,screenshot:Buffer.from(d,"base64")})}catch(u){i.warn({err:u},"Failed to take after screenshot")}if(c){let u=gR();l.beforeSnapshot=u,n.attachBeforeScreenshot({logger:i,snapshotId:u,screenshot:Buffer.from(c,"base64")})}}}return l}async function Ym(r){let{fixtures:e,inputs:t,listParams:n}=r,{containerName:o,steps:i,tracer:a}=n,{logger:s,controller:c,usageTracker:l}=e,u=a.getParentStepIdChain(),d=[],p,h="SUCCESS",{fromStep:m,toStep:g}=t,f=!!m;for(let E=0;E<i.length;E++){let S=i[E];if(s.info({step:S},`Executing step ${E+1}/${i.length} in ${o}: ${fb(S)}`),S.skipped){s.debug("Step skipped");continue}if(f&&m){let v=JSON.stringify(u);if(S.id===m.fromStepId&&v===JSON.stringify(m.parentStepIdChain))f=!1;else if(!vb({currentStep:S,currentParentChain:u,desiredStepId:m.fromStepId,desiredStepParentChain:m.parentStepIdChain}))continue}let R=await a.startStep({logger:s,step:S,attempt:1,parentStepIdChain:u});l.trackStepExecution(S);let A=await TB({step:S,stepTracer:R,params:r});if(A.trace&&s.info({step:{id:S.id},trace:A.trace,status:A.status},`Step ${E+1}/${i.length} done (${S.type==="MOBILE_PRESET_STEP"?S.command.type:S.type})`),d.push(A),await R.finish({parentStepIdChain:u,result:A}),A.status!=="SUCCESS"){h=A.status,p=A;break}if(S.envKey&&c.context.setVariable(S.envKey,A.data),g){let v=JSON.stringify([]);if(S.id===g.toStepId&&v===JSON.stringify(g.parentStepIdChain))break}}return{results:d,status:h,terminalResult:p}}async function TB({step:r,stepTracer:e,params:t}){let{fixtures:n,inputs:o}=t,i;switch(r.type){case"MOBILE_PRESET_STEP":{i=await fR({fixtures:n,inputs:o,step:r,stepTracer:e});break}case"RESOLVED_MOBILE_MODULE":{i=await hR({...t,moduleParams:{step:r,stepTracer:e,executeMobileStepList:Ym}});break}}return i}async function Gc(r){let{tracer:e,containerName:t}=r,{steps:n,testMetadata:o}=r.inputs,{cacheStorage:i,logger:a,controller:s}=r.fixtures;await i.resolveEntries({logger:a,testId:o.id,stepLists:{steps:n}});let c=AB(n);a.info({testMetadata:_r.parse(o)},"Starting mobile test");let l=await e.startMainStepList(),u=pR(a),d=mR(s,a);a.info({cpu:u?.cpuMetadata,platform:u?.platform},`Starting execution of ${t}`);let{status:p,results:h}=await Ym({...r,listParams:{containerName:t,tracer:l,steps:c}});if(clearInterval(u?.interval),clearInterval(d),p==="SUCCESS"){let m=vB(c,n);if(m&&Object.keys(m).length>0){a.debug({diffs:m},"Saving mobile step cache entries post-success");let{cachesToSave:g}=await eo({steps:c,cacheCreationParams:{orgId:r.inputs.orgId,testId:o.id}});await i.saveEntries({logger:a,testId:o.id,entries:g})}return{status:"PASSED",results:h}}return p==="CANCELLED"?{status:"CANCELLED",results:h}:{status:"FAILED",results:h}}var Xm=class{parentTracer=null;socket;step;interactionTracer;constructor({step:e,socket:t,parentTracer:n}){this.socket=t,this.parentTracer=n,this.step=e,this.interactionTracer=new So,In.initializeRootTracerContext(this.interactionTracer)}attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}async finish(e){this.interactionTracer.finish();let t=this.interactionTracer.getRootSpan(),n={...$y.parse(e),trace:Rd.parse(t)};switch(n.result.status){case"SUCCESS":this.socket.emit("success",n);break;case"FAILED":this.socket.emit("failure",n);break;case"CANCELLED":this.socket.emit("cancelled",n);break}return{trace:t}}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}async startSubSteps(){return new Ei({parentStep:this.step,socket:this.socket,parentTracer:this})}},Ei=class{parentTracer;parentStep;socket;constructor({parentStep:e,socket:t,parentTracer:n}){this.parentTracer=n,this.parentStep=e,this.socket=t}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:e.parentStepIdChain,attempt:e.attempt}),new Xm({step:e.step,parentTracer:this,socket:this.socket})}},jc=class{constructor(e){this.socket=e}appendLogs(){}async finish(){this.socket.emit("finished")}async startBeforeStepList(){return new Ei({parentStep:null,parentTracer:null,socket:this.socket})}async startMainStepList(){return new Ei({parentStep:null,parentTracer:null,socket:this.socket})}async startAfterStepList(){return new Ei({parentStep:null,parentTracer:null,socket:this.socket})}};var wB=({metadata:r,logger:e,globalStateManager:t,socket:n,cacheStorageFactory:o})=>async(i,a)=>{let s=t.getSession(n.id);if(!s)throw new Error("No active Android session found");let c=await o(r.orgId),l=s.controller;l.resetAbortController();let u=new jc(n),d=await Gc({fixtures:{controller:l,logger:e,cacheStorage:c,usageTracker:new Vs},containerName:"entire test",inputs:{steps:i.steps,fromStep:i.fromStep,toStep:i.toStep,orgId:r.orgId,testMetadata:i.testMetadata,interactive:!0},tracer:u});await u.finish();let p={results:br.array().parse(d.results),status:d.status};a?.(p)},SR={event:"execute",createHandler:wB};import{debounce as RB}from"ts-debounce";var CB=({socket:r,globalStateManager:e,keepSessionAlive:t})=>{let n=RB(t,3e4,{maxWait:6e4});return async()=>{let o=e.getSession(r.id);if(!o)throw new Error("No active Android session found");o.emulatorName&&n(o.emulatorName)}},yR={event:"keepalive",createHandler:CB};var bR=[SR,aR,yR];function ER(r){let{logger:e,baseServer:t,globalStateManager:n}=r,o=new xB(t,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0}),i=async()=>{await n.removeAllSessions(e)};o.on("connection",async s=>{e.info({event:"connection",transport:s.conn.transport.name},"Android websocket connection initiated"),s.on("disconnect",async()=>{await iR({socket:s,globalStateManager:n,logger:e})});let c;try{c=await oR({...r,socket:s,globalStateManager:n})}catch(l){e.error({err:l},"Failed to setup Android connection"),s.emit("error",{message:l instanceof Error?l.message:JSON.stringify(l)}),s.disconnect(!0);return}bR.forEach(l=>a(l,{...r,socket:s,metadata:c,logger:e}))});let a=(s,c)=>{let l=s.createHandler(c),u=(...d)=>{s.event!=="keepalive"&&c.logger.debug({event:s.event},`Websocket event (${s.event})`);let p=h=>{c.logger.error({event:s.event,err:h instanceof Error?h:new Error(`${h}`)},"Unhandled exception in socket handler"),c.socket.emit("error",{message:h instanceof Error?h.message:`${h}`})};try{let h=l.apply(this,d);h&&typeof h.catch=="function"&&h.catch(p)}catch(h){p(h)}};c.socket.on(s.event,u)};return{server:o,dispose:i}}var Ya=!!process.env.CI||!!process.env.GITHUB_ACTIONS||!!process.env.GITHUB_RUN_ID||!!process.env.GITLAB_CI||!!process.env.CI_COMMIT_SHA||!!process.env.JENKINS_URL||!!process.env.BUILD_NUMBER||!!process.env.JENKINS_HOME||!!process.env.CIRCLECI||!!process.env.CIRCLE_BUILD_NUM||!!process.env.TRAVIS||!!process.env.TRAVIS_BUILD_NUMBER||!!process.env.BITBUCKET_BUILD_NUMBER||!!process.env.BITBUCKET_COMMIT||!!process.env.CODEBUILD_BUILD_ID||!!process.env.TF_BUILD||!!process.env.BUILD_BUILDID||!!process.env.AGENT_ID||!!process.env.BUILDER_SA_EMAIL||!!process.env.HEROKU_TEST_RUN_ID||!!process.env.CI_NODE_INDEX||!!process.env.TEAMCITY_VERSION||!!process.env.BUILD_VCS_NUMBER||!!process.env.BUILDKITE||!!process.env.BUILDKITE_BUILD_NUMBER||!!process.env.APPVEYOR||!!process.env.APPVEYOR_BUILD_NUMBER||!!process.env.DRONE||!!process.env.DRONE_BUILD_NUMBER||!!process.env.SHIPPABLE||!!process.env.BUILD_URL||!!process.env.SEMAPHORE||!!process.env.SEMAPHORE_EXECUTABLE_UUID||!!process.env.WOODPECKER||!!process.env.CI_BUILD_NUMBER||!!process.env.WERCKER_MAIN_PIPELINE_STARTED||!!process.env.BUDDY_EXECUTION_ID;import{confirm as IB,input as PB}from"@inquirer/prompts";import{existsSync as b_e,mkdirSync as E_e,statSync as OB}from"fs";import Ti,{supportsColor as MB}from"chalk";import{Console as TR}from"console";import{format as Xa}from"util";var Jm=class extends Error{constructor(e,t,n){let o=Error.stackTraceLimit;n&&(Error.stackTraceLimit=Math.max(n,o||10)),super(e),Error.captureStackTrace&&Error.captureStackTrace(this,t),Error.stackTraceLimit=o}},Vc=class r extends TR{_buffer=[];_groupDepth=0;Console=TR;constructor(){super({write:e=>(r.write(this._buffer,"log",e),!0)})}static write(e,t,n,o=2){let i=new Jm(void 0,r.write).stack;if(!i)return e;let a=i.split(`
3974
3978
  `).slice(o).filter(Boolean).join(`
3975
- `);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",Da(e,...t))}error(e,...t){this._log("error",Da(e,...t))}info(e,...t){this._log("info",Da(e,...t))}log(e,...t){this._log("log",Da(e,...t))}warn(e,...t){this._log("warn",Da(e,...t))}getBuffer(){return this._buffer.length>0?this._buffer:void 0}};function ew(r){let e=globalThis.console,t=new _c;globalThis.console=t;try{r()}finally{let o=t.getBuffer()?.map(i=>i.message).join(`
3979
+ `);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",Xa(e,...t))}error(e,...t){this._log("error",Xa(e,...t))}info(e,...t){this._log("info",Xa(e,...t))}log(e,...t){this._log("log",Xa(e,...t))}warn(e,...t){this._log("warn",Xa(e,...t))}getBuffer(){return this._buffer.length>0?this._buffer:void 0}};function vR(r){let e=globalThis.console,t=new Vc;globalThis.console=t;try{r()}finally{let o=t.getBuffer()?.map(i=>i.message).join(`
3976
3980
  `);process.stderr.write(`${o}
3977
- `),globalThis.console=e}}var bm=" ".repeat(6);import{hostname as NU}from"os";var Ot=Rc({app:"cli",hostname:NU(),disableConsoleLogs:!0}).child({cliVersion:"0.0.25"});function Em(r){if(!r)return;r=r.toLowerCase();let e=Vs.safeParse(r);if(e.success)return C.setMinLevel(e.data),e.data}function tw({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 ew(()=>{if(c.forEach(u=>{C.log(""),o(u)}),c.length){C.log("");let u=c.length===1?"":"s";C.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{C.dimmed(n(d))})}if(l.length){C.log("");let u=l.length===1?"":"s";C.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{C.dimmed(n(d))})}if(a.length){C.log("");let u=a.length===1?"":"s";C.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{C.dimmed(n(d))})}if(s.length){C.log("");let u=s.length===1?"":"s";C.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{C.dimmed(n(d))})}if(i.length){C.log("");let u=i.length===1?"":"s";C.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{C.dimmed(n(d))})}C.log(""),C.dimmed(`Total time: ${Math.round((Date.now()-e)/1e3)}s`)}),{quarantinedPassed:i.length,passed:a.length,quarantinedFailed:s.length,failed:c.length,cancelled:l.length}}var Ua=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=di.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=di.bgGreen.white("PASS"),a=3):r.includes("START")?(i=di.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=di.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=di.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=di.bgMagenta.white("RUNNING"),a=0):(C.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),kU||(i=`${i}`),C.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};var BU=!1,rw=(()=>{try{return FU("/.dockerenv"),!0}catch{return!1}})();async function Mc(r){return ka||BU||rw?!0:(C.flush(),Ot.flush(),await new Promise(t=>setTimeout(t,500)),await DU({message:r}))}async function nw(r,e){return ka||rw?e:(await UU({message:r,default:e})).trim()||e}import zU from"fs";import{tmpdir as HU}from"os";import GU from"path";import{registry as Fa}from"playwright-core/lib/server";import ow from"proper-lockfile";var iw=GU.join(HU(),"momenticBrowserInstallation");var Tm=["chrome","chromium","chrome-for-testing"],jU={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},aw={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell"};function sw(r){let e=aw[jU[r]??""]??"",t=Fa.findExecutable(e);return!t||t.installType==="none"?!1:vm(t)}function vm(r){let e=r.executablePath();return zU.existsSync(e)}function VU(r,e){let t=aw[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=Fa.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 $U({browser:r,force:e}){let t=VU(r,e);if(!t){C.info(`Browser '${r}' is already installed, skipping...`);return}C.info(`Installing browser '${r}'...`);try{await Fa.installDeps([t],!1),await Fa.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){C.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Fa.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!vm(o);)C.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function Pc({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?Tm:Array.from(new Set(r));try{await ow.lock(iw,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){C.warn(`Failed to acquire lock to install browsers. Please ensure that any other process installing browsers completes within 5 minutes: ${i}. Continuing without installation...`);return}let o;try{for(let i of n)try{await $U({browser:i,force:e})}catch(a){o=a,C.error(`Failed to install the ${i} browser: ${a}`)}}finally{await ow.unlock(iw,{realpath:!1})}if(o)throw o}import{createServer as WU}from"http";async function Ic(r,e){for(let n=0;n<30;n+=1){let o=r+n;if(await qU(o))return o}C.error(`Could not find an available port for ${e} starting from ${r} after 30 attempts`),process.exit(1)}async function qU(r){return new Promise((e,t)=>{let n=WU();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(C.warn({err:o},"Unexpected error checking for open ports, continuing..."),n.close(),e(!0))}),n.once("listening",()=>{n.close(()=>{e(!0)})}),n.listen(r)})}import{randomUUID as Sz}from"crypto";import{diff as ewe}from"deep-object-diff";import dwe from"yaml";import{z as mwe}from"zod";import{execSync as KU}from"child_process";function co(r,e){let t=e.hooks?.postSave;if(!t)return;let n;t.includes("$1")?n=t.replaceAll("$1",r):n=`${t} ${r}`,C.debug({postSaveCommand:n},"Executing post-save hook command");try{KU(n,{encoding:"utf-8"})}catch(o){C.warn({err:o,postSaveCommand:n},"Failed to execute post-save hook command, continuing...")}}import{diff as IAe}from"deep-object-diff";import{cloneDeep as LAe}from"lodash-es";import{v4 as $Ae}from"uuid";import qAe from"yaml";import YU from"@dotenvx/dotenvx";import XU from"fs";import lw from"path";function JU(r){return r.includes("${")?r.replace(/\$\{([^}]+)\}/g,(e,t)=>{let[n,o]=t.split(/:-|-/,2),i=process.env[n];return t.includes(":-")?i&&i!==""?i:o||"":t.includes("-")?i!==void 0?i:o||"":i||""}):r}function ZU(r){let{envVariables:e,project:t}=r;if(!e)return{};let n={};for(let[o,i]of Object.entries(e)){if(typeof i=="string"){let s=JU(i);s&&(n[o]=s);continue}let a;try{a=XU.readFileSync(lw.resolve(t.rootDir,i.fromFile),"utf-8")}catch(s){throw new Error(`Failed to read environment variable '${o}' from file '${i.fromFile}': ${s}`)}if(i.json)try{n[o]=JSON.parse(a)}catch(s){throw new Error(`Failed to parse environment variable '${o}' from file '${i.fromFile}' as JSON: ${s}`)}else n[o]=a}return Object.keys(n).length>0&&C.debug(n,"Set environment variables with interpolation from project configuration"),n}function QU(r){let{project:e,envFile:t,logger:n}=r,o={};if(!t)return o;let i=YU.config({path:lw.resolve(e.rootDir,t),processEnv:o,logLevel:"error",quiet:!0});if(i.error)throw new Error(`Failed to load .env file: ${i.error.message}`);return n.debug(o,"Set environment variables from .env file"),o}function Oc(r,e,t){let n=(e.config.environments??[]).find(c=>c.name===r);if(!n)throw new Error(`Environment ${r} not found in local project configuration file`);let o={},i=ZU({envVariables:n.envVariables,project:e});Object.assign(o,i);let a=QU({project:e,envFile:n.envFile,logger:t});return Object.assign(o,a),n.inheritFromShell&&(t.debug(process.env,"Inheriting environment variables from shell"),Object.assign(o,process.env)),{name:r,variables:o}}import{existsSync as pF,readFileSync as mF,readdirSync as gF,writeFileSync as hF}from"fs";import{glob as fF}from"glob";import uo,{dirname as dw}from"path";import{cwd as xm}from"process";import pw from"yaml";import{z as Ce}from"zod";import cw from"fs";import{glob as eF}from"glob";import Ba from"path";import tF from"yaml";import{z as Am}from"zod";var uw=!1,wm=["**/*.test.yaml","**/*.module.yaml"],Rm=Am.string().refine(r=>/^[a-zA-Z0-9-]+$/.test(r)),Cm=15,rF=Am.object({fileType:Am.nativeEnum(we)});async function gr(r,e=!1){let t={project:r,tests:{},modules:{},mobileTests:{},mobileModules:{},duplicateEntities:{}},n=r.config.include??wm,o=Array.from(r.config.exclude??[]).concat(Gs),i=AbortSignal.timeout(3e3),a;try{a=await eF(n,{absolute:!1,cwd:r.rootDir,ignore:o,dotRelative:!1,maxDepth:Cm,nodir:!0,signal:i})}catch(s){throw C.error({err:s},"Failed to list all Momentic files in the current directory. This usually indicates the 'include' and 'exclude' globs are misconfigured in your momentic.config.yaml."),s}for(let s of a){let c=nF(r.rootDir,s,t,e?zn:C);c&&(t.duplicateEntities[c.id]=c.paths)}return uw=!0,t}function nF(r,e,t,n){let o=Ba.join(r,e),i=oF(o,n);if(!i)return;let a=iF(i,o,n);if(!a)return;let s=rF.safeParse(a);if(s.success===!1){n.warn(`Possible Momentic file at ${o} does not have a 'fileType', skipping: ${s.error}`);return}let c=s.data.fileType,l=aF(o,n);if(!l)return;let u=sF(e,o,l);switch(c){case we.TEST:try{return lF(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic test metadata: ${d}`);return}case we.MODULE:try{return cF(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic module metadata: ${d}`);return}case we.MOBILE_TEST:try{return dF(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile test metadata: ${d}`);return}case we.MOBILE_MODULE:try{return uF(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile module metadata: ${d}`);return}default:{let d=c;return}}}function oF(r,e){try{return cw.readFileSync(r,"utf-8")}catch(t){e.warn(`Could not read possible Momentic file at ${r}, skipping: ${t}`);return}}function iF(r,e,t){try{let n=tF.parse(r);if(typeof n!="object"||n===null)throw new Error("The YAML document should parse as a map with key-value pairs");return n}catch(n){t.warn(`Could not parse possible Momentic file at ${e}, skipping: ${n}`);return}}function aF(r,e){try{return cw.statSync(r)}catch(t){e.warn(`Skipping path '${r}' because it could not be stat, skipping: ${t}`);return}}function sF(r,e,t){return{relativePath:r,fullFilePath:e,platformSep:Ba.sep,fullPathSegments:e.split(Ba.sep),relativePathSegments:r.split(Ba.sep),fileName:Ba.basename(e),lastModified:t.mtime,createdAt:t.birthtime}}function lF(r,e,t,n,o){let i=Do.parse(r),a;if(e.tests[i.id]){let s=e.tests[i.id].fullFilePath;a={id:i.id,paths:[s,n]}}return e.tests[i.id]={type:we.TEST,name:i.name,id:i.id,description:i.description??void 0,labels:i.labels,...t},a}function cF(r,e,t,n,o){let i=$t.parse(r),a;if(e.modules[i.moduleId]){let c=e.modules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}e.modules[i.moduleId]={type:we.MODULE,name:i.name,id:i.moduleId,description:i.description??void 0,...t};let s=t.fileName.replace(".module.yaml","");return!uw&&nn(i.name)!==s&&o.warn(`The module with ID ${i.moduleId} has a name (${i.name}) that does not match its file name (${s}). We recommend renaming the module or the file to be consistent to avoid confusion and issues with module resolution.`),a}function uF(r,e,t,n,o){let i=Yi.parse(r),a;if(e.mobileModules[i.moduleId]){let c=e.mobileModules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}let s=t.fileName.replace(".module.yaml","");return e.mobileModules[i.moduleId]={type:we.MOBILE_MODULE,name:s,id:i.moduleId,description:i.description??void 0,...t},a}function dF(r,e,t,n,o){let i=br.parse(r),a;if(e.mobileTests[i.id]){let c=e.mobileTests[i.id].fullFilePath;a={id:i.id,paths:[c,n]}}let s=t.fileName.replace(".test.yaml","");return e.mobileTests[i.id]={type:we.MOBILE_TEST,name:s,id:i.id,description:i.description??void 0,...t},a}var pi="momentic.config.yaml",_m="momentic.workspace.yaml",SF=Ce.object({projects:Ce.string().array().describe("list of glob patterns to find project (momentic.config.yaml) files")}),yF=Ce.union([Ce.string(),Ce.object({fromFile:Ce.string(),json:Ce.boolean().optional()})]),bF=Ce.object({name:Rm,baseUrl:Ce.string().optional().describe("Optional for mobile tests"),envFile:Ce.string().optional().describe("path to a file on disk to read environment variables from. can be relative to project root or absolute."),envVariables:Ce.record(Ce.string(),yF).optional(),inheritFromShell:Ce.boolean().optional().describe("inherit all environment variables from the shell - might be noisy"),browser:On.optional().describe("deprecated: use project-level configuration only")}),EF=Ce.object({postSave:Ce.string().optional()}),TF=Ce.object({name:Rm,include:Ce.string().array().optional().describe("list of glob patterns that match momentic files (optional)"),exclude:Ce.string().array().optional().describe("opposite of include, takes precedence over include"),goldenFileDir:Ce.string().optional(),reporterDir:Ce.string().optional(),outputDir:Ce.string().optional(),retries:Ce.number().optional().describe("number of retries per test"),parallel:Ce.number().optional().describe("degree of parallelism"),environments:Ce.array(bF).optional(),gitMainBranch:Ce.string().optional(),gitProtectedBranches:Ce.string().array().optional(),ai:sd.optional(),browser:On.optional(),emulator:Xu.optional(),advanced:ld.optional(),hooks:EF.optional()});function mw(r,e){let t;try{t=mF(r,"utf-8")}catch(o){C.warn(`Could not read possible Momentic ${e} file at ${r}: ${o}`);return}let n;try{if(n=pw.parse(t),typeof n!="object"||n===null)throw new Error(`The ${e} file should parse as a map with key-value pairs, but is type ${typeof n} instead`)}catch(o){C.warn(`Possible Momentic ${e} file at ${r} does not parse as valid YAML: ${o}`);return}return n}function Mm(r){let e=mw(r,"project configuration");if(e!==void 0)try{return TF.parse(e)}catch(t){C.warn(`Possible Momentic project configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function vF(r){let e=mw(r,"workspace configuration");if(e!==void 0)try{return SF.parse(e)}catch(t){C.warn(`Possible Momentic workspace configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function AF(){let r=[],e=xm(),t=uo.parse(e).root,n=15,o=0;for(;o<n;){o++;let i=uo.basename(e);if(Hs.includes(i))return C.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),r;for(let a of gF(e))if(a.endsWith(pi)){let s=uo.join(e,a),c=Mm(s);c&&r.push({configFilePath:s,config:c,rootDir:dw(s)})}if(r.length)return r;if(e=uo.dirname(e),e===t)break}return r}async function za(r={}){let{configFilePath:e,nameFilter:t}=r,n=await RF(e);if(t&&(n=n.filter(o=>o.config.name===t)),n.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
3978
- ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Momentic project file available.");return C.debug(`Found valid project configuration at ${n[0].configFilePath}`),n[0]}async function wF(r){let e=vF(r);if(!e||!e.projects||!e.projects.length)return;let t=e.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${pi}`)),n=AbortSignal.timeout(2e3),o;try{o=await fF(t,{absolute:!1,cwd:xm(),dotRelative:!1,maxDepth:Cm,nodir:!0,signal:n})}catch(a){throw C.error({err:a},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${_m} is misconfigured.`),a}let i=[];for(let a of o){let s=uo.join(xm(),a),c=Mm(s);c&&i.push({configFilePath:s,config:c,rootDir:dw(s)})}return i}async function RF(r){if(r){r=uo.resolve(r);let t=Mm(r);return t||(console.error(`No valid Momentic project file found at ${r}.`),process.exit(1)),[{config:t,configFilePath:r,rootDir:uo.dirname(r)}]}if(pF(_m)){let t=await wF(_m);if(t)return t}return AF()}function gw(r,e){let t=pw.stringify(r);hF(e,t)}import{z as Pm}from"zod";var hw="test-results";var Jwe=Pm.object({width:Pm.number(),height:Pm.number()});import{execFile as CF}from"node:child_process";import{promisify as xF}from"node:util";import _F from"simple-git";var xe=_F(),fw=xF(CF);async function MF(r){let e=await _e(r,xe.raw(["config","--list"])),t={};if(!e)return t;for(let n of e.split(`
3979
- `)){let o=n.indexOf("=");if(o===-1)continue;let i=n.slice(0,o),a=n.slice(o+1).trim();t[i]=a}return t}async function PF(r,e,t){try{let o=t["github.user"]||void 0;if(o)return o}catch{}let n;try{if(e?.startsWith("http://")||e?.startsWith("https://"))n=new URL(e).host;else if(e?.startsWith("git@")){let o=e.indexOf("@"),i=e.indexOf(":",o+1);o!==-1&&i!==-1&&(n=e.slice(o+1,i))}}catch{}if(n=n?.toLowerCase(),!!n){try{if(e?.startsWith("git@")&&n?.includes("github")){let{stdout:o,stderr:i}=await fw("ssh",["-T","-o","BatchMode=yes",`git@${n}`],{timeout:5e3}),s=`${o??""}${i??""}`.trim().match(/Hi\s+([A-Za-z0-9_-]+)!/);if(s?.[1])return s[1]}}catch{}try{let o=n&&n!=="github.com"?["api","--hostname",n,"user","-q",".login"]:["api","user","-q",".login"],{stdout:i}=await fw("gh",o,{timeout:5e3}),a=i?.toString().trim();if(a)return a}catch{}}}async function IF(r,e,t){let n=e?.includes("github.com"),o=e?.includes("gitlab.com");try{if(n)return PF(r,e,t);if(o)return}catch{}}function Lc(r){if(r.startsWith("git@")){let e=r.split(":");if(e.length===2){let t=e[1].replace(".git","").split("/");if(t.length===2){let n=t[0],o=t[1];return`${n}/${o}`}}}else if(r.startsWith("http")||r.startsWith("https")){let t=new URL(r).pathname.split("/").filter(Boolean);if(t.length>=2){let n=t[0],o=t[1].replace(".git","");return`${n}/${o}`}}}async function _e(r,e){try{return(await e).trim()}catch(t){r.error({err:t},"Failed to run git command");return}}function OF(){if(process.env.GITHUB_ACTION)return"GithubActions";if(process.env.GITLAB_CI)return"GitlabCI";if(process.env.CIRCLECI)return"CircleCI";if(process.env.BUILDKITE)return"Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return"AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return"GCPCloudBuild"}async function LF(r){let[e,t,n]=await Promise.all([_e(r,xe.show(["--no-patch","--format=%ci"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"]))]),o=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return{gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function NF(r){let[e,t,n]=await Promise.all([_e(r,xe.listRemote(["--get-url","origin"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"]))]);return{gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?new Date(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:e,gitCommitMessage:t,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function kF(r){let[e,t,n,o]=await Promise.all([_e(r,xe.show(["--no-patch","--format=%ci"])),_e(r,xe.listRemote(["--get-url","origin"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"]))]),i=t?.includes("github.com"),a=t?.includes("gitlab.com"),s=t?Lc(t):void 0;return{gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:process.env.CIRCLE_REPOSITORY_URL,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function DF(r){let[e,t,n]=await Promise.all([_e(r,xe.show(["--no-patch","--format=%ci"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"]))]),o=process.env.BUILDKITE_REPO,i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Lc(o):void 0;return{gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`}}async function UF(r){let[e,t,n]=await Promise.all([_e(r,xe.show(["--no-patch","--format=%ci"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"]))]),o=process.env["Build.Repository.Uri"],i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Lc(o):void 0;return{gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env["Build.SourceBranchName"],gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function FF(r,e){let[t,n,o,i,a,s,c,l,u]=await Promise.all([_e(r,xe.revparse(["HEAD"])),_e(r,xe.revparse(["--short","HEAD"])),_e(r,xe.revparse(["--abbrev-ref","HEAD"])),_e(r,xe.listRemote(["--get-url","origin"])),_e(r,xe.show(["--no-patch","--format=%ci"])),_e(r,xe.show(["-s","--pretty=%B"])),_e(r,xe.show(["-s","--pretty=%an"])),e?_e(r,xe.raw(["merge-base","--fork-point",e])):Promise.resolve(void 0),MF(r)]),d=l?await _e(r,xe.show(["--no-patch","--format=%ci",l])):void 0,p=i?.includes("github.com"),g=i?.includes("gitlab.com"),m=i?Lc(i):void 0,h=u["user.email"]||void 0,f=u["user.name"]||void 0,b=u["user.username"]||void 0,E=await IF(r,i,u)??b??void 0;return{gitCommitSha:t,gitCommitShaShort:n,gitBranchName:o,gitOriginUrl:i,gitCommitTimestamp:a?new Date(a):void 0,gitCommitMessage:s,gitCommitAuthorName:c,gitLocalUsername:E,gitLocalEmail:h,gitLocalName:f,lastCommitOnMainSha:l,lastCommitOnMainTimestamp:d?new Date(d):void 0,githubRepository:p?m:void 0,gitlabProjectPath:g?m:void 0,pipelineId:void 0}}async function BF(){let r=process.env._HEAD_REPO_URL;return{gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:r?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:r?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}async function zF(r){let e=r.config.gitProtectedBranches??[];return r.config.gitMainBranch&&e.push(r.config.gitMainBranch),{gitMainBranch:r.config.gitMainBranch,gitProtectedBranches:e}}async function Im(r,e){let t=OF();if(!t)return FF(r,e);switch(t){case"GithubActions":return LF(r);case"GitlabCI":return NF(r);case"CircleCI":return kF(r);case"Buildkite":return DF(r);case"AzureDevOps":return UF(r);case"GCPCloudBuild":return BF()}}async function HF(r,e,t,n){let o=n;if(!n.gitCommitSha)return o;if(n.gitMainBranch&&(!o.lastCommitOnMainSha||!o.lastCommitOnMainTimestamp))try{let i=await e.getMergeBaseCommitFromGitlab(t,n.gitMainBranch,n.gitCommitSha);o={...o,lastCommitOnMainSha:i.sha,lastCommitOnMainTimestamp:i.committer.date}}catch(i){r.warn({err:i},"Failed to get merge base commit from Gitlab")}if(!o.gitCommitTimestamp||!o.gitCommitAuthorName||!o.gitCommitMessage||!o.gitCommitAuthorName)try{let i=await e.getCommitFromGitlab(t,n.gitCommitSha);i&&(o={...o,gitCommitTimestamp:o.gitCommitTimestamp??i.committer.date,gitCommitAuthorName:o.gitCommitAuthorName??i.author.name,gitCommitMessage:o.gitCommitMessage??i.message})}catch(i){r.warn({err:i},"Failed to get commit from Gitlab")}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!o.mergedGitBranchName)try{let i=await e.getMergedBranchFromGitlab(t,n.gitBranchName??"",n.gitCommitSha);i.mergedBranch&&(o={...o,mergedGitBranchName:i.mergedBranch})}catch(i){r.warn({err:i},"Failed to get merged branch from Gitlab")}return o}async function GF(r,e,t,n,o){let i=o;if(!o.gitCommitSha)return i;if(o.gitMainBranch&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let a=await e.getMergeBaseCommitFromGithub(t,n,o.gitMainBranch,o.gitCommitSha);i={...i,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date}}catch(a){r.warn({err:a},"Failed to get merge base commit from GitHub")}if(!i.gitCommitTimestamp||!i.gitCommitAuthorName||!i.gitCommitMessage||!i.gitCommitAuthorName)try{let a=await e.getCommitFromGithub(t,n,o.gitCommitSha);a&&(i={...i,gitCommitTimestamp:i.gitCommitTimestamp??a.committer.date,gitCommitAuthorName:i.gitCommitAuthorName??a.author.name,gitCommitMessage:i.gitCommitMessage??a.message})}catch(a){r.warn({err:a},"Failed to get commit from GitHub")}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName)try{let a=await e.getMergedBranchFromGithub(t,n,o.gitBranchName??"",o.gitCommitSha);a.mergedBranch&&(i={...i,mergedGitBranchName:a.mergedBranch})}catch(a){r.warn({err:a},"Failed to get merged branch from GitHub")}return i}async function jF(r,e,t){try{if(t.githubRepository){let[n,o]=t.githubRepository.split("/");return await GF(r,e,n,o,t)}else if(t.gitlabProjectPath)return await HF(r,e,t.gitlabProjectPath,t)}catch(n){r.warn({err:n},"Failed to get remote git metadata")}return t}async function Nc(r,e,t){let n=await zF(t),o=await Im(r,n.gitMainBranch),i={...n,...o};(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp)&&i.gitBranchName===n.gitMainBranch&&(i.lastCommitOnMainSha=i.gitCommitSha,i.lastCommitOnMainTimestamp=i.gitCommitTimestamp);let a=await jF(r,e,i);return{...n,...o,...a}}import{diff as Sw}from"deep-object-diff";import po from"fs";import{cloneDeep as VF}from"lodash-es";import Om from"path";import{v4 as yRe}from"uuid";import kc from"yaml";function yw({content:r,schemaVersion:e,momenticFiles:t,project:n,forceSaveOnNoDiffs:o}){let i=t.mobileModules[r.moduleId]?.fullFilePath;if(!i||!po.existsSync(i))throw new Error(`Tried to update mobile module ${r.moduleId} that could not be found on disk`);let a=po.readFileSync(i,"utf-8"),s=kc.parse(a),c={...s,...r,schemaVersion:e},l=Hn({fileType:we.MOBILE_MODULE,...Yi.parse(c),steps:cr.array().parse(r.steps)}),u=Sw(l,s);if(u&&Object.keys(u).length===0&&!o)return;let d=kc.stringify(l);po.writeFileSync(i,d,"utf-8"),co(i,n.config)}function bw({moduleId:r,patch:e,momenticFiles:t,project:n,logger:o}){let i=t.mobileModules[r]?.fullFilePath;if(!i)throw new Error(`Tried to update mobile module ${r} that could not be found on disk`);let a=Ha(i,o),s={...a,...e},c=Hn({fileType:we.MOBILE_MODULE,...Os.parse(s)}),l=Sw(c,a);if(l&&Object.keys(l).length===0)return;let u=kc.stringify(c);po.writeFileSync(i,u,"utf-8");let d;if(e.name){let p=`${nn(e.name)}.module.yaml`;if(d=Om.join(Om.dirname(i),p),po.existsSync(d))throw new Error(`A conflicting file already exists at the following path: ${d}`);po.renameSync(i,d)}co(d||i,n.config)}function Ha(r,e){let t=po.readFileSync(r,"utf-8"),n=kc.parse(t);try{return{...Os.parse(n),name:Om.basename(r,".module.yaml")}}catch(o){throw e.error({err:o,moduleFilePath:r,moduleContents:t},`${r} does not parse as a valid Momentic mobile module`),o}}async function Lm(r,e,t,n){let o=Ha(r.fullFilePath,t),{resolvedSteps:i}=await rl({rawSteps:o.steps,resolvedModuleCache:n||{},onFetchModule:async s=>{let c=e.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Could not find mobile module with id ${s}`);return Ha(c,t)},logger:t,metadata:{id:o.moduleId,schemaVersion:o.schemaVersion}}),a={...o,name:r.name,steps:i};return n&&(n[r.id]=VF(a)),a}async function Ew(r,e){let t={};return await Promise.all(Object.values(r.mobileModules).map(async n=>{await Lm(n,r,e,t)})),Array.from(Object.values(t))}import{randomUUID as $F}from"crypto";import mo from"fs";import Nm from"path";import Dc from"yaml";function Tw({name:r,description:e="",steps:t=[],settings:n={},folder:o}){let a=`${nn(r)}.test.yaml`,s=Nm.join(o,a);if(mo.existsSync(s))throw new Error(`A test named '${r}' already exists at path '${s}'. Choose a different name.`);let c={fileType:we.MOBILE_TEST,id:$F(),description:e,schemaVersion:bu,settings:n,steps:t},l=Dc.stringify(c);return mo.writeFileSync(s,l,"utf-8"),{fullPath:s,testId:c.id}}function WF(r){if(!mo.existsSync(r))throw new Error(`Test file not found: ${r}`);let e=mo.readFileSync(r,"utf-8").replace(/\r\n|\r/g,`
3980
- `),t=Dc.parse(e),n=ks.parse(t);if(n.fileType!==we.MOBILE_TEST)throw new Error(`File is not a mobile test (fileType=${n.fileType}): ${r}`);return n}async function Uc(r,e,t){let n=WF(r),o;try{o=br.parse(n)}catch(s){throw new Error(`Mobile test ${r} is missing metadata or has invalid metadata: ${s}`)}let{resolvedStepLists:i}=await ey({rawStepLists:{steps:n.steps,beforeSteps:void 0,afterSteps:void 0},logger:e,testMetadata:o,onFetchModule:async s=>{let c=t.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Mobile module ${s} not found`);return Ha(c,e)}});return{...o,steps:i.steps}}async function vw({filePath:r,steps:e,settings:t,folder:n,project:o,momenticFiles:i}){let a=Nm.isAbsolute(r)?r:Nm.join(n,r);if(!mo.existsSync(a))throw new Error(`Test file not found: ${a}`);let s=mo.readFileSync(a,"utf-8").replace(/\r\n|\r/g,`
3981
- `),c=Dc.parse(s),l=ks.parse(c);if(l.fileType!==we.MOBILE_TEST)throw new Error(`File at '${a}' is not a mobile test (fileType=${l.fileType}).`);let u;e&&(u=await Vn({steps:e}));let d={...l,...u?.stepsToSave!==void 0?{steps:u.stepsToSave}:{},...t!==void 0?{settings:t}:{}},p=Dc.stringify(ks.parse(d));for(let g of u?.moduleUpdates??[])yw({content:g,schemaVersion:bu,momenticFiles:i,project:o});mo.writeFileSync(a,p,"utf-8"),co(a,o.config)}import{randomUUID as qF}from"crypto";import Vr from"fs";import go from"path";var Aw={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 KF(r,e,t){if(Aw[t]){let i=Aw[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 ww=new Set([".DS_Store","__MACOSX"]);function Rw(r,e,t){let n=qF(),o=r.child({runGroupId:n});Vr.rmSync(e,{recursive:!0,force:!0});let i=Vr.readdirSync(t).filter(l=>!ww.has(l)).map(l=>go.join(t,l));if(i.length===0)throw new Error(`No run groups found in results path: ${t}`);Vr.mkdirSync(e,{recursive:!0});let a=go.join(i[0],"metadata.json"),s={...na.parse(JSON.parse(Vr.readFileSync(a,"utf-8"))),id:n};for(let l of i){let u=go.join(l,"runs");if(!Vr.existsSync(u))continue;let d=Vr.readdirSync(u);for(let m of d){if(ww.has(m))continue;let h=go.join(u,m),f=go.join(e,"runs",m);Vr.cpSync(h,f,{recursive:!0})}let p=go.join(l,"metadata.json"),g=na.parse(JSON.parse(Vr.readFileSync(p,"utf-8")));o.info({oldRunGroupId:g.id},"Merging metadata from run groups");for(let m in g){if(m==="id")continue;let h=m;s[h]=KF(s,g,h)}}let c=go.join(e,"metadata.json");Vr.writeFileSync(c,JSON.stringify(s,null,2))}import TR from"adm-zip";import Jm from"fs";import{z as x1}from"zod";var F="v1",km="mobile-cli",ho="0.0.25";var YF=9e4,XF=3,JF=1500,ZF=15e3,hr=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function QF(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var Dm=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return ho&&(e[Ks]=ho),km&&(e[Uf]=km),e}async sendRequest(e,t){let{retries:n=XF,requestTimeoutMs:o=YF,initialRetryDelayMs:i=JF,maxRetryDelayMs:a=ZF}=t,s=n,c=n,l,u={path:e,baseUrl:this.baseUrl,method:t.method};for(;s>0;)try{return s--,await this.sendSingleRequestHelper(e,t,o)}catch(d){if(l=d,d instanceof hr&&d.status>=400&&d.status<500)throw d;if(d instanceof Error&&d.name==="AbortError"&&(l=new dn),s===0)throw l;let p=c-s,g=Math.min(i*Math.pow(2,p-1),a);await new Promise(m=>setTimeout(m,g))}throw this.logger.warn({...u,err:l},"Got fatal error response from Momentic server"),l}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={...this.getHeaders(),...t.extraHeaders};try{let l=await fetch(`${this.baseUrl}${e}`,{method:t.method,body:t.body?JSON.stringify(t.body):void 0,headers:c,signal:i.signal});if(!l.ok){let d=await QF(l);throw new hr(l.status,d,`Request to ${t.method} ${e} failed with status ${l.status}: ${d}`)}let u;if(l.status===204)u={};else{let d=await l.text();try{u=JSON.parse(d)}catch{u=d}}return this.logger&&t.logResponse===!0&&u&&this.logger.debug({result:u,status:l.status,...o},"Got response from Momentic server"),u}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",s)}}},Nr=class extends Dm{apiKey;constructor(e){super(e),this.apiKey=e.apiKey}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`}}};var Cw="vercel.ai.error",eB=Symbol.for(Cw),xw,tB=class _w extends Error{constructor({name:e,message:t,cause:n}){super(t),this[xw]=!0,this.name=e,this.cause=n}static isInstance(e){return _w.hasMarker(e,Cw)}static hasMarker(e,t){let n=Symbol.for(t);return e!=null&&typeof e=="object"&&n in e&&typeof e[n]=="boolean"&&e[n]===!0}};xw=eB;var St=tB,Mw="AI_APICallError",Pw=`vercel.ai.error.${Mw}`,rB=Symbol.for(Pw),Iw,or=class extends St{constructor({message:r,url:e,requestBodyValues:t,statusCode:n,responseHeaders:o,responseBody:i,cause:a,isRetryable:s=n!=null&&(n===408||n===409||n===429||n>=500),data:c}){super({name:Mw,message:r,cause:a}),this[Iw]=!0,this.url=e,this.requestBodyValues=t,this.statusCode=n,this.responseHeaders=o,this.responseBody=i,this.isRetryable=s,this.data=c}static isInstance(r){return St.hasMarker(r,Pw)}};Iw=rB;var Ow="AI_EmptyResponseBodyError",Lw=`vercel.ai.error.${Ow}`,nB=Symbol.for(Lw),Nw,kw=class extends St{constructor({message:r="Empty response body"}={}){super({name:Ow,message:r}),this[Nw]=!0}static isInstance(r){return St.hasMarker(r,Lw)}};Nw=nB;function Dw(r){return r==null?"unknown error":typeof r=="string"?r:r instanceof Error?r.message:JSON.stringify(r)}var Uw="AI_InvalidArgumentError",Fw=`vercel.ai.error.${Uw}`,oB=Symbol.for(Fw),Bw,Fc=class extends St{constructor({message:r,cause:e,argument:t}){super({name:Uw,message:r,cause:e}),this[Bw]=!0,this.argument=t}static isInstance(r){return St.hasMarker(r,Fw)}};Bw=oB;var iB="AI_InvalidPromptError",aB=`vercel.ai.error.${iB}`,sB=Symbol.for(aB),lB;lB=sB;var cB="AI_InvalidResponseDataError",uB=`vercel.ai.error.${cB}`,dB=Symbol.for(uB),pB;pB=dB;var zw="AI_JSONParseError",Hw=`vercel.ai.error.${zw}`,mB=Symbol.for(Hw),Gw,Ga=class extends St{constructor({text:r,cause:e}){super({name:zw,message:`JSON parsing failed: Text: ${r}.
3982
- Error message: ${Dw(e)}`,cause:e}),this[Gw]=!0,this.text=r}static isInstance(r){return St.hasMarker(r,Hw)}};Gw=mB;var jw="AI_LoadAPIKeyError",Vw=`vercel.ai.error.${jw}`,gB=Symbol.for(Vw),$w,ja=class extends St{constructor({message:r}){super({name:jw,message:r}),this[$w]=!0}static isInstance(r){return St.hasMarker(r,Vw)}};$w=gB;var hB="AI_LoadSettingError",fB=`vercel.ai.error.${hB}`,SB=Symbol.for(fB),yB;yB=SB;var bB="AI_NoContentGeneratedError",EB=`vercel.ai.error.${bB}`,TB=Symbol.for(EB),vB;vB=TB;var Ww="AI_NoSuchModelError",qw=`vercel.ai.error.${Ww}`,AB=Symbol.for(qw),Kw,Fm=class extends St{constructor({errorName:r=Ww,modelId:e,modelType:t,message:n=`No such ${t}: ${e}`}){super({name:r,message:n}),this[Kw]=!0,this.modelId=e,this.modelType=t}static isInstance(r){return St.hasMarker(r,qw)}};Kw=AB;var wB="AI_TooManyEmbeddingValuesForCallError",RB=`vercel.ai.error.${wB}`,CB=Symbol.for(RB),xB;xB=CB;var Yw="AI_TypeValidationError",Xw=`vercel.ai.error.${Yw}`,_B=Symbol.for(Xw),Jw,MB=class Um extends St{constructor({value:e,cause:t}){super({name:Yw,message:`Type validation failed: Value: ${JSON.stringify(e)}.
3983
- Error message: ${Dw(t)}`,cause:t}),this[Jw]=!0,this.value=e}static isInstance(e){return St.hasMarker(e,Xw)}static wrap({value:e,cause:t}){return Um.isInstance(t)&&t.value===e?t:new Um({value:e,cause:t})}};Jw=_B;var wn=MB,Zw="AI_UnsupportedFunctionalityError",Qw=`vercel.ai.error.${Zw}`,PB=Symbol.for(Qw),eR,kr=class extends St{constructor({functionality:r,message:e=`'${r}' functionality not supported.`}){super({name:Zw,message:e}),this[eR]=!0,this.functionality=r}static isInstance(r){return St.hasMarker(r,Qw)}};eR=PB;var Bc=class extends Error{constructor(e,t){super(e),this.name="ParseError",this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function Bm(r){}function tR(r){if(typeof r=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:e=Bm,onError:t=Bm,onRetry:n=Bm,onComment:o}=r,i="",a=!0,s,c="",l="";function u(h){let f=a?h.replace(/^\xEF\xBB\xBF/,""):h,[b,E]=IB(`${i}${f}`);for(let _ of b)d(_);i=E,a=!1}function d(h){if(h===""){g();return}if(h.startsWith(":")){o&&o(h.slice(h.startsWith(": ")?2:1));return}let f=h.indexOf(":");if(f!==-1){let b=h.slice(0,f),E=h[f+1]===" "?2:1,_=h.slice(f+E);p(b,_,h);return}p(h,"",h)}function p(h,f,b){switch(h){case"event":l=f;break;case"data":c=`${c}${f}
3984
- `;break;case"id":s=f.includes("\0")?void 0:f;break;case"retry":/^\d+$/.test(f)?n(parseInt(f,10)):t(new Bc(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:b}));break;default:t(new Bc(`Unknown field "${h.length>20?`${h.slice(0,20)}\u2026`:h}"`,{type:"unknown-field",field:h,value:f,line:b}));break}}function g(){c.length>0&&e({id:s,event:l||void 0,data:c.endsWith(`
3985
- `)?c.slice(0,-1):c}),s=void 0,c="",l=""}function m(h={}){i&&h.consume&&d(i),a=!0,s=void 0,c="",l="",i=""}return{feed:u,reset:m}}function IB(r){let e=[],t="",n=0;for(;n<r.length;){let o=r.indexOf("\r",n),i=r.indexOf(`
3981
+ `),globalThis.console=e}}var Zm=" ".repeat(6);import{hostname as _B}from"os";var Ft=Hc({app:"cli",hostname:_B(),disableConsoleLogs:!0}).child({cliVersion:"0.0.27"});function Qm(r){if(!r)return;r=r.toLowerCase();let e=al.safeParse(r);if(e.success)return x.setMinLevel(e.data),e.data}function AR({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 vR(()=>{if(c.forEach(u=>{x.log(""),o(u)}),c.length){x.log("");let u=c.length===1?"":"s";x.error(`${c.length} ${t}${u} failed:`),c.forEach(d=>{x.dimmed(n(d))})}if(l.length){x.log("");let u=l.length===1?"":"s";x.warn(`${l.length} ${t}${u} cancelled:`),l.forEach(d=>{x.dimmed(n(d))})}if(a.length){x.log("");let u=a.length===1?"":"s";x.success(`${a.length} ${t}${u} passed:`),a.forEach(d=>{x.dimmed(n(d))})}if(s.length){x.log("");let u=s.length===1?"":"s";x.warn(`${s.length} quarantined ${t}${u} failed:`),s.forEach(d=>{x.dimmed(n(d))})}if(i.length){x.log("");let u=i.length===1?"":"s";x.warn(`${i.length} quarantined ${t}${u} passed:`),i.forEach(d=>{x.dimmed(n(d))})}x.log(""),x.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 Ja=({status:r,testLogRef:e,getRunningTestsCount:t,getTotalTestsCount:n,additionalText:o})=>{r=r.toUpperCase();let i=r,a;r.includes("FAIL")?(i=Ti.bgRed.white("FAIL"),a=3):r.includes("PASS")?(i=Ti.bgGreen.white("PASS"),a=3):r.includes("START")?(i=Ti.bgBlue.white("START"),a=2):r.includes("CANCEL")?(i=Ti.bgRgb(191,68,11).white("CANCEL"),a=1):r.includes("RETRY")?(i=Ti.bgRgb(191,68,11).white("RETRY"),a=2):r.includes("RUN")||r.includes("PROG")?(i=Ti.bgMagenta.white("RUNNING"),a=0):(x.warn(`Unknown status tried to be logged in run test locally: ${r}`),a=0),MB||(i=`${i}`),x.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${t()}/${n()})`)};var LB=!1,wR=(()=>{try{return OB("/.dockerenv"),!0}catch{return!1}})();async function Wc(r){return Ya||LB||wR?!0:(x.flush(),Ft.flush(),await new Promise(t=>setTimeout(t,500)),await IB({message:r}))}async function RR(r,e){return Ya||wR?e:(await PB({message:r,default:e})).trim()||e}import NB from"fs";import{tmpdir as kB}from"os";import DB from"path";import{registry as Za}from"playwright-core/lib/server";import CR from"proper-lockfile";var xR=DB.join(kB(),"momenticBrowserInstallation");var eh=["chrome","chromium","chrome-for-testing"],UB={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},_R={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell"};function MR(r){let e=_R[UB[r]??""]??"",t=Za.findExecutable(e);return!t||t.installType==="none"?!1:th(t)}function th(r){let e=r.executablePath();return NB.existsSync(e)}function FB(r,e){let t=_R[r];if(!t)throw new Error(`Requested install of unknown browser type ${r}`);let n=Za.findExecutable(t);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${r}`);if(!(!e&&th(n)))return n}async function BB({browser:r,force:e}){let t=FB(r,e);if(!t){x.info(`Browser '${r}' is already installed, skipping...`);return}x.info(`Installing browser '${r}'...`);try{await Za.installDeps([t],!1),await Za.install([t],!1)}catch(n){if(n.message.includes("Lock file is already being held")){x.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Za.findExecutable(r),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!th(o);)x.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function $c({rawBrowsers:r,force:e=!1,all:t=!1}){let n=t?eh:Array.from(new Set(r));try{await CR.lock(xR,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){x.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 BB({browser:i,force:e})}catch(a){o=a,x.error(`Failed to install the ${i} browser: ${a}`)}}finally{await CR.unlock(xR,{realpath:!1})}if(o)throw o}import{createServer as zB}from"http";async function qc(r,e){for(let n=0;n<30;n+=1){let o=r+n;if(await HB(o))return o}x.error(`Could not find an available port for ${e} starting from ${r} after 30 attempts`),process.exit(1)}async function HB(r){return new Promise((e,t)=>{let n=zB();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(x.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 z_e from"blocked-at";import G_e from"why-is-node-running";import{randomUUID as aG}from"crypto";import{diff as xMe}from"deep-object-diff";import FMe from"yaml";import{z as zMe}from"zod";import{execSync as GB}from"child_process";function bo(r,e){let t=e.hooks?.postSave;if(!t)return;let n;t.includes("$1")?n=t.replaceAll("$1",r):n=`${t} ${r}`,x.debug({postSaveCommand:n},"Executing post-save hook command");try{GB(n,{encoding:"utf-8"})}catch(o){x.warn({err:o,postSaveCommand:n},"Failed to execute post-save hook command, continuing...")}}import{diff as oMe}from"deep-object-diff";import{cloneDeep as aMe}from"lodash-es";import{v4 as yMe}from"uuid";import EMe from"yaml";import jB from"@dotenvx/dotenvx";import VB from"fs";import IR from"path";function WB(r){return r.includes("${")?r.replace(/\$\{([^}]+)\}/g,(e,t)=>{let[n,o]=t.split(/:-|-/,2),i=process.env[n];return t.includes(":-")?i&&i!==""?i:o||"":t.includes("-")?i!==void 0?i:o||"":i||""}):r}function $B(r){let{envVariables:e,project:t}=r;if(!e)return{};let n={};for(let[o,i]of Object.entries(e)){if(typeof i=="string"){let s=WB(i);s&&(n[o]=s);continue}let a;try{a=VB.readFileSync(IR.resolve(t.rootDir,i.fromFile),"utf-8")}catch(s){throw new Error(`Failed to read environment variable '${o}' from file '${i.fromFile}': ${s}`)}if(i.json)try{n[o]=JSON.parse(a)}catch(s){throw new Error(`Failed to parse environment variable '${o}' from file '${i.fromFile}' as JSON: ${s}`)}else n[o]=a}return Object.keys(n).length>0&&x.debug(n,"Set environment variables with interpolation from project configuration"),n}function qB(r){let{project:e,envFile:t,logger:n}=r,o={};if(!t)return o;let i=jB.config({path:IR.resolve(e.rootDir,t),processEnv:o,logLevel:"error",quiet:!0});if(i.error)throw new Error(`Failed to load .env file: ${i.error.message}`);return n.debug(o,"Set environment variables from .env file"),o}function Kc(r,e,t){let n=(e.config.environments??[]).find(c=>c.name===r);if(!n)throw new Error(`Environment ${r} not found in local project configuration file`);let o={},i=$B({envVariables:n.envVariables,project:e});Object.assign(o,i);let a=qB({project:e,envFile:n.envFile,logger:t});return Object.assign(o,a),n.inheritFromShell&&(t.debug(process.env,"Inheriting environment variables from shell"),Object.assign(o,process.env)),{name:r,variables:o}}import{existsSync as a1,readFileSync as s1,readdirSync as l1,writeFileSync as c1}from"fs";import{glob as u1}from"glob";import Eo,{dirname as LR}from"path";import{cwd as ah}from"process";import NR from"yaml";import{z as Ie}from"zod";import PR from"fs";import{glob as KB}from"glob";import Qa from"path";import YB from"yaml";import{z as rh}from"zod";var OR=!1,nh=["**/*.test.yaml","**/*.module.yaml"],oh=rh.string().refine(r=>/^[a-zA-Z0-9-]+$/.test(r)),ih=15,XB=rh.object({fileType:rh.nativeEnum(_e)});async function vr(r,e=!1){let t={project:r,tests:{},modules:{},mobileTests:{},mobileModules:{},duplicateEntities:{}},n=r.config.include??nh,o=Array.from(r.config.exclude??[]).concat(ol),i=AbortSignal.timeout(5e3),a;try{a=await KB(n,{absolute:!1,cwd:r.rootDir,ignore:o,dotRelative:!1,maxDepth:ih,nodir:!0,signal:i})}catch(s){throw x.error({err:s},"Failed to list all Momentic files in the current directory. This usually indicates the 'include' and 'exclude' globs are misconfigured in your momentic.config.yaml, or that your machine is severely resource constrained."),new Error("Listing Momentic files timed out after 5 seconds.",{cause:s})}for(let s of a){let c=JB(r.rootDir,s,t,e?Xn:x);c&&(t.duplicateEntities[c.id]=c.paths)}return OR=!0,t}function JB(r,e,t,n){let o=Qa.join(r,e),i=ZB(o,n);if(!i)return;let a=QB(i,o,n);if(!a)return;let s=XB.safeParse(a);if(s.success===!1){n.warn(`Possible Momentic file at ${o} does not have a 'fileType', skipping: ${s.error}`);return}let c=s.data.fileType,l=e1(o,n);if(!l)return;let u=t1(e,o,l);switch(c){case _e.TEST:try{return r1(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic test metadata: ${d}`);return}case _e.MODULE:try{return n1(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic module metadata: ${d}`);return}case _e.MOBILE_TEST:try{return i1(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile test metadata: ${d}`);return}case _e.MOBILE_MODULE:try{return o1(a,t,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile module metadata: ${d}`);return}default:{let d=c;return}}}function ZB(r,e){try{return PR.readFileSync(r,"utf-8")}catch(t){e.warn(`Could not read possible Momentic file at ${r}, skipping: ${t}`);return}}function QB(r,e,t){try{let n=YB.parse(r);if(typeof n!="object"||n===null)throw new Error("The YAML document should parse as a map with key-value pairs");return n}catch(n){t.warn(`Could not parse possible Momentic file at ${e}, skipping: ${n}`);return}}function e1(r,e){try{return PR.statSync(r)}catch(t){e.warn(`Skipping path '${r}' because it could not be stat, skipping: ${t}`);return}}function t1(r,e,t){return{relativePath:r,fullFilePath:e,platformSep:Qa.sep,fullPathSegments:e.split(Qa.sep),relativePathSegments:r.split(Qa.sep),fileName:Qa.basename(e),lastModified:t.mtime,createdAt:t.birthtime}}function r1(r,e,t,n,o){let i=$o.parse(r),a;if(e.tests[i.id]){let s=e.tests[i.id].fullFilePath;a={id:i.id,paths:[s,n]}}return e.tests[i.id]={type:_e.TEST,name:i.name,id:i.id,description:i.description??void 0,labels:i.labels,...t},a}function n1(r,e,t,n,o){let i=Jt.parse(r),a;if(e.modules[i.moduleId]){let c=e.modules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}e.modules[i.moduleId]={type:_e.MODULE,name:i.name,id:i.moduleId,description:i.description??void 0,...t};let s=t.fileName.replace(".module.yaml","");return!OR&&un(i.name)!==s&&o.warn(`The module with ID ${i.moduleId} has a name (${i.name}) that does not match its file name (${s}). We recommend renaming the module or the file to be consistent to avoid confusion and issues with module resolution.`),a}function o1(r,e,t,n,o){let i=ca.parse(r),a;if(e.mobileModules[i.moduleId]){let c=e.mobileModules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}let s=t.fileName.replace(".module.yaml","");return e.mobileModules[i.moduleId]={type:_e.MOBILE_MODULE,name:s,id:i.moduleId,description:i.description??void 0,...t},a}function i1(r,e,t,n,o){let i=_r.parse(r),a;if(e.mobileTests[i.id]){let c=e.mobileTests[i.id].fullFilePath;a={id:i.id,paths:[c,n]}}let s=t.fileName.replace(".test.yaml","");return e.mobileTests[i.id]={type:_e.MOBILE_TEST,name:s,id:i.id,description:i.description??void 0,...t},a}var vi="momentic.config.yaml",sh="momentic.workspace.yaml",d1=Ie.object({projects:Ie.string().array().describe("list of glob patterns to find project (momentic.config.yaml) files")}),p1=Ie.union([Ie.string(),Ie.object({fromFile:Ie.string(),json:Ie.boolean().optional()})]),m1=Ie.object({name:oh,baseUrl:Ie.string().optional().describe("Optional for mobile tests"),envFile:Ie.string().optional().describe("path to a file on disk to read environment variables from. can be relative to project root or absolute."),envVariables:Ie.record(Ie.string(),p1).optional(),inheritFromShell:Ie.boolean().optional().describe("inherit all environment variables from the shell - might be noisy"),browser:Vn.optional().describe("deprecated: use project-level configuration only")}),h1=Ie.object({postSave:Ie.string().optional()}),g1=Ie.object({name:oh,include:Ie.string().array().optional().describe("list of glob patterns that match momentic files (optional)"),exclude:Ie.string().array().optional().describe("opposite of include, takes precedence over include"),goldenFileDir:Ie.string().optional(),reporterDir:Ie.string().optional(),outputDir:Ie.string().optional(),retries:Ie.number().optional().describe("number of retries per test"),parallel:Ie.number().optional().describe("degree of parallelism"),environments:Ie.array(m1).optional(),gitMainBranch:Ie.string().optional(),gitProtectedBranches:Ie.string().array().optional(),ai:Pd.optional(),browser:Vn.optional(),emulator:wd.optional(),advanced:Od.optional(),hooks:h1.optional()});function kR(r,e){let t;try{t=s1(r,"utf-8")}catch(o){x.warn(`Could not read possible Momentic ${e} file at ${r}: ${o}`);return}let n;try{if(n=NR.parse(t),typeof n!="object"||n===null)throw new Error(`The ${e} file should parse as a map with key-value pairs, but is type ${typeof n} instead`)}catch(o){x.warn(`Possible Momentic ${e} file at ${r} does not parse as valid YAML: ${o}`);return}return n}function lh(r){let e=kR(r,"project configuration");if(e!==void 0)try{return g1.parse(e)}catch(t){x.warn(`Possible Momentic project configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function f1(r){let e=kR(r,"workspace configuration");if(e!==void 0)try{return d1.parse(e)}catch(t){x.warn(`Possible Momentic workspace configuration file at ${r} does not adhere to the required schema: ${t}`);return}}function S1(){let r=[],e=ah(),t=Eo.parse(e).root,n=15,o=0;for(;o<n;){o++;let i=Eo.basename(e);if(nl.includes(i))return x.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),r;for(let a of l1(e))if(a.endsWith(vi)){let s=Eo.join(e,a),c=lh(s);c&&r.push({configFilePath:s,config:c,rootDir:LR(s)})}if(r.length)return r;if(e=Eo.dirname(e),e===t)break}return r}async function es(r={}){let{configFilePath:e,nameFilter:t}=r,n=await b1(e);if(t&&(n=n.filter(o=>o.config.name===t)),n.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
3982
+ ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Momentic project file available.");return x.debug(`Found valid project configuration at ${n[0].configFilePath}`),n[0]}async function y1(r){let e=f1(r);if(!e||!e.projects||!e.projects.length)return;let t=e.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${vi}`)),n=AbortSignal.timeout(2e3),o;try{o=await u1(t,{absolute:!1,cwd:ah(),dotRelative:!1,maxDepth:ih,nodir:!0,signal:n})}catch(a){throw x.error({err:a},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${sh} is misconfigured.`),a}let i=[];for(let a of o){let s=Eo.join(ah(),a),c=lh(s);c&&i.push({configFilePath:s,config:c,rootDir:LR(s)})}return i}async function b1(r){if(r){r=Eo.resolve(r);let t=lh(r);return t||(console.error(`No valid Momentic project file found at ${r}.`),process.exit(1)),[{config:t,configFilePath:r,rootDir:Eo.dirname(r)}]}if(a1(sh)){let t=await y1(sh);if(t)return t}return S1()}function DR(r,e){let t=NR.stringify(r);c1(e,t)}import{z as ch}from"zod";var UR="test-results";var wIe=ch.object({width:ch.number(),height:ch.number()});import{execFile as E1}from"node:child_process";import{promisify as T1}from"node:util";import v1 from"simple-git";var Pe=v1(),FR=T1(E1);async function A1(r){let e=await Oe(r,Pe.raw(["config","--list"])),t={};if(!e)return t;for(let n of e.split(`
3983
+ `)){let o=n.indexOf("=");if(o===-1)continue;let i=n.slice(0,o),a=n.slice(o+1).trim();t[i]=a}return t}async function w1(r,e,t){try{let o=t["github.user"]||void 0;if(o)return o}catch{}let n;try{if(e?.startsWith("http://")||e?.startsWith("https://"))n=new URL(e).host;else if(e?.startsWith("git@")){let o=e.indexOf("@"),i=e.indexOf(":",o+1);o!==-1&&i!==-1&&(n=e.slice(o+1,i))}}catch{}if(n=n?.toLowerCase(),!!n){try{if(e?.startsWith("git@")&&n?.includes("github")){let{stdout:o,stderr:i}=await FR("ssh",["-T","-o","BatchMode=yes",`git@${n}`],{timeout:5e3}),s=`${o??""}${i??""}`.trim().match(/Hi\s+([A-Za-z0-9_-]+)!/);if(s?.[1])return s[1]}}catch{}try{let o=n&&n!=="github.com"?["api","--hostname",n,"user","-q",".login"]:["api","user","-q",".login"],{stdout:i}=await FR("gh",o,{timeout:5e3}),a=i?.toString().trim();if(a)return a}catch{}}}async function R1(r,e,t){let n=e?.includes("github.com"),o=e?.includes("gitlab.com");try{if(n)return w1(r,e,t);if(o)return}catch{}}function Yc(r){if(r.startsWith("git@")){let e=r.split(":");if(e.length===2){let t=e[1].replace(".git","").split("/");if(t.length===2){let n=t[0],o=t[1];return`${n}/${o}`}}}else if(r.startsWith("http")||r.startsWith("https")){let t=new URL(r).pathname.split("/").filter(Boolean);if(t.length>=2){let n=t[0],o=t[1].replace(".git","");return`${n}/${o}`}}}async function Oe(r,e){try{return(await e).trim()}catch(t){r.error({err:t},"Failed to run git command");return}}function C1(){if(process.env.GITHUB_ACTION)return"GithubActions";if(process.env.GITLAB_CI)return"GitlabCI";if(process.env.CIRCLECI)return"CircleCI";if(process.env.BUILDKITE)return"Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return"AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return"GCPCloudBuild"}async function x1(r){let[e,t,n]=await Promise.all([Oe(r,Pe.show(["--no-patch","--format=%ci"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"]))]),o=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return{gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function _1(r){let[e,t,n]=await Promise.all([Oe(r,Pe.listRemote(["--get-url","origin"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"]))]);return{gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?new Date(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:e,gitCommitMessage:t,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function M1(r){let[e,t,n,o]=await Promise.all([Oe(r,Pe.show(["--no-patch","--format=%ci"])),Oe(r,Pe.listRemote(["--get-url","origin"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"]))]),i=t?.includes("github.com"),a=t?.includes("gitlab.com"),s=t?Yc(t):void 0;return{gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:process.env.CIRCLE_REPOSITORY_URL,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function I1(r){let[e,t,n]=await Promise.all([Oe(r,Pe.show(["--no-patch","--format=%ci"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"]))]),o=process.env.BUILDKITE_REPO,i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Yc(o):void 0;return{gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`}}async function P1(r){let[e,t,n]=await Promise.all([Oe(r,Pe.show(["--no-patch","--format=%ci"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"]))]),o=process.env["Build.Repository.Uri"],i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?Yc(o):void 0;return{gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:e?new Date(e):void 0,gitBranchName:process.env["Build.SourceBranchName"],gitOriginUrl:o,gitCommitMessage:t,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function O1(r,e){let[t,n,o,i,a,s,c,l,u]=await Promise.all([Oe(r,Pe.revparse(["HEAD"])),Oe(r,Pe.revparse(["--short","HEAD"])),Oe(r,Pe.revparse(["--abbrev-ref","HEAD"])),Oe(r,Pe.listRemote(["--get-url","origin"])),Oe(r,Pe.show(["--no-patch","--format=%ci"])),Oe(r,Pe.show(["-s","--pretty=%B"])),Oe(r,Pe.show(["-s","--pretty=%an"])),e?Oe(r,Pe.raw(["merge-base","--fork-point",e])):Promise.resolve(void 0),A1(r)]),d=l?await Oe(r,Pe.show(["--no-patch","--format=%ci",l])):void 0,p=i?.includes("github.com"),h=i?.includes("gitlab.com"),m=i?Yc(i):void 0,g=u["user.email"]||void 0,f=u["user.name"]||void 0,E=u["user.username"]||void 0,S=await R1(r,i,u)??E??void 0;return{gitCommitSha:t,gitCommitShaShort:n,gitBranchName:o,gitOriginUrl:i,gitCommitTimestamp:a?new Date(a):void 0,gitCommitMessage:s,gitCommitAuthorName:c,gitLocalUsername:S,gitLocalEmail:g,gitLocalName:f,lastCommitOnMainSha:l,lastCommitOnMainTimestamp:d?new Date(d):void 0,githubRepository:p?m:void 0,gitlabProjectPath:h?m:void 0,pipelineId:void 0}}async function L1(){let r=process.env._HEAD_REPO_URL;return{gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:r?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:r?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}async function N1(r){let e=r.config.gitProtectedBranches??[];return r.config.gitMainBranch&&e.push(r.config.gitMainBranch),{gitMainBranch:r.config.gitMainBranch,gitProtectedBranches:e}}async function uh(r,e){let t=C1();if(!t)return O1(r,e);switch(t){case"GithubActions":return x1(r);case"GitlabCI":return _1(r);case"CircleCI":return M1(r);case"Buildkite":return I1(r);case"AzureDevOps":return P1(r);case"GCPCloudBuild":return L1()}}async function k1(r,e,t,n){let o=n;if(!n.gitCommitSha)return o;if(n.gitMainBranch&&(!o.lastCommitOnMainSha||!o.lastCommitOnMainTimestamp))try{let i=await e.getMergeBaseCommitFromGitlab(t,n.gitMainBranch,n.gitCommitSha);o={...o,lastCommitOnMainSha:i.sha,lastCommitOnMainTimestamp:i.committer.date}}catch(i){r.warn({err:i},"Failed to get merge base commit from Gitlab")}if(!o.gitCommitTimestamp||!o.gitCommitAuthorName||!o.gitCommitMessage||!o.gitCommitAuthorName)try{let i=await e.getCommitFromGitlab(t,n.gitCommitSha);i&&(o={...o,gitCommitTimestamp:o.gitCommitTimestamp??i.committer.date,gitCommitAuthorName:o.gitCommitAuthorName??i.author.name,gitCommitMessage:o.gitCommitMessage??i.message})}catch(i){r.warn({err:i},"Failed to get commit from Gitlab")}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!o.mergedGitBranchName)try{let i=await e.getMergedBranchFromGitlab(t,n.gitBranchName??"",n.gitCommitSha);i.mergedBranch&&(o={...o,mergedGitBranchName:i.mergedBranch})}catch(i){r.warn({err:i},"Failed to get merged branch from Gitlab")}return o}async function D1(r,e,t,n,o){let i=o;if(!o.gitCommitSha)return i;if(o.gitMainBranch&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let a=await e.getMergeBaseCommitFromGithub(t,n,o.gitMainBranch,o.gitCommitSha);i={...i,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date}}catch(a){r.warn({err:a},"Failed to get merge base commit from GitHub")}if(!i.gitCommitTimestamp||!i.gitCommitAuthorName||!i.gitCommitMessage||!i.gitCommitAuthorName)try{let a=await e.getCommitFromGithub(t,n,o.gitCommitSha);a&&(i={...i,gitCommitTimestamp:i.gitCommitTimestamp??a.committer.date,gitCommitAuthorName:i.gitCommitAuthorName??a.author.name,gitCommitMessage:i.gitCommitMessage??a.message})}catch(a){r.warn({err:a},"Failed to get commit from GitHub")}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName)try{let a=await e.getMergedBranchFromGithub(t,n,o.gitBranchName??"",o.gitCommitSha);a.mergedBranch&&(i={...i,mergedGitBranchName:a.mergedBranch})}catch(a){r.warn({err:a},"Failed to get merged branch from GitHub")}return i}async function U1(r,e,t){try{if(t.githubRepository){let[n,o]=t.githubRepository.split("/");return await D1(r,e,n,o,t)}else if(t.gitlabProjectPath)return await k1(r,e,t.gitlabProjectPath,t)}catch(n){r.warn({err:n},"Failed to get remote git metadata")}return t}async function Xc(r,e,t){let n=await N1(t),o=await uh(r,n.gitMainBranch),i={...n,...o};(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp)&&i.gitBranchName===n.gitMainBranch&&(i.lastCommitOnMainSha=i.gitCommitSha,i.lastCommitOnMainTimestamp=i.gitCommitTimestamp);let a=await U1(r,e,i);return{...n,...o,...a}}import{diff as BR}from"deep-object-diff";import To from"fs";import{cloneDeep as F1}from"lodash-es";import dh from"path";import{v4 as WIe}from"uuid";import Jc from"yaml";function zR({content:r,schemaVersion:e,momenticFiles:t,project:n,forceSaveOnNoDiffs:o}){let i=t.mobileModules[r.moduleId]?.fullFilePath;if(!i||!To.existsSync(i))throw new Error(`Tried to update mobile module ${r.moduleId} that could not be found on disk`);let a=To.readFileSync(i,"utf-8"),s=Jc.parse(a),c={...s,...r,schemaVersion:e},l=Jn({fileType:_e.MOBILE_MODULE,...ca.parse(c),steps:Sr.array().parse(r.steps)}),u=BR(l,s);if(u&&Object.keys(u).length===0&&!o)return;let d=Jc.stringify(l);To.writeFileSync(i,d,"utf-8"),bo(i,n.config)}function HR({moduleId:r,patch:e,momenticFiles:t,project:n,logger:o}){let i=t.mobileModules[r]?.fullFilePath;if(!i)throw new Error(`Tried to update mobile module ${r} that could not be found on disk`);let a=ts(i,o),s={...a,...e},c=Jn({fileType:_e.MOBILE_MODULE,...Xs.parse(s)}),l=BR(c,a);if(l&&Object.keys(l).length===0)return;let u=Jc.stringify(c);To.writeFileSync(i,u,"utf-8");let d;if(e.name){let p=`${un(e.name)}.module.yaml`;if(d=dh.join(dh.dirname(i),p),To.existsSync(d))throw new Error(`A conflicting file already exists at the following path: ${d}`);To.renameSync(i,d)}bo(d||i,n.config)}function ts(r,e){let t=To.readFileSync(r,"utf-8"),n=Jc.parse(t);try{return{...Xs.parse(n),name:dh.basename(r,".module.yaml")}}catch(o){throw e.error({err:o,moduleFilePath:r,moduleContents:t},`${r} does not parse as a valid Momentic mobile module`),o}}async function ph(r,e,t,n){let o=ts(r.fullFilePath,t),{resolvedSteps:i}=await yl({rawSteps:o.steps,resolvedModuleCache:n||{},onFetchModule:async s=>{let c=e.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Could not find mobile module with id ${s}`);return ts(c,t)},logger:t,metadata:{id:o.moduleId,schemaVersion:o.schemaVersion}}),a={...o,name:r.name,steps:i};return n&&(n[r.id]=F1(a)),a}async function GR(r,e){let t={};return await Promise.all(Object.values(r.mobileModules).map(async n=>{await ph(n,r,e,t)})),Array.from(Object.values(t))}import{randomUUID as B1}from"crypto";import vo from"fs";import mh from"path";import Zc from"yaml";function jR({name:r,description:e="",steps:t=[],settings:n={},folder:o}){let a=`${un(r)}.test.yaml`,s=mh.join(o,a);if(vo.existsSync(s))throw new Error(`A test named '${r}' already exists at path '${s}'. Choose a different name.`);let c={fileType:_e.MOBILE_TEST,id:B1(),description:e,schemaVersion:Ku,settings:n,steps:t},l=Zc.stringify(c);return vo.writeFileSync(s,l,"utf-8"),{fullPath:s,testId:c.id}}function z1(r){if(!vo.existsSync(r))throw new Error(`Test file not found: ${r}`);let e=vo.readFileSync(r,"utf-8").replace(/\r\n|\r/g,`
3984
+ `),t=Zc.parse(e),n=Qs.parse(t);if(n.fileType!==_e.MOBILE_TEST)throw new Error(`File is not a mobile test (fileType=${n.fileType}): ${r}`);return n}async function Qc(r,e,t){let n=z1(r),o;try{o=_r.parse(n)}catch(s){throw new Error(`Mobile test ${r} is missing metadata or has invalid metadata: ${s}`)}let{resolvedStepLists:i}=await yb({rawStepLists:{steps:n.steps,beforeSteps:void 0,afterSteps:void 0},logger:e,testMetadata:o,onFetchModule:async s=>{let c=t.mobileModules[s]?.fullFilePath;if(!c)throw new Error(`Mobile module ${s} not found`);return ts(c,e)}});return{...o,steps:i.steps}}async function VR({filePath:r,steps:e,settings:t,folder:n,project:o,momenticFiles:i}){let a=mh.isAbsolute(r)?r:mh.join(n,r);if(!vo.existsSync(a))throw new Error(`Test file not found: ${a}`);let s=vo.readFileSync(a,"utf-8").replace(/\r\n|\r/g,`
3985
+ `),c=Zc.parse(s),l=Qs.parse(c);if(l.fileType!==_e.MOBILE_TEST)throw new Error(`File at '${a}' is not a mobile test (fileType=${l.fileType}).`);let u;e&&(u=await eo({steps:e}));let d={...l,...u?.stepsToSave!==void 0?{steps:u.stepsToSave}:{},...t!==void 0?{settings:t}:{}},p=Zc.stringify(Qs.parse(d));for(let h of u?.moduleUpdates??[])zR({content:h,schemaVersion:Ku,momenticFiles:i,project:o});vo.writeFileSync(a,p,"utf-8"),bo(a,o.config)}import{randomUUID as H1}from"crypto";import Qr from"fs";import Ao from"path";var WR={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 G1(r,e,t){if(WR[t]){let i=WR[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 $R=new Set([".DS_Store","__MACOSX"]);function qR(r,e,t){let n=H1(),o=r.child({runGroupId:n});Qr.rmSync(e,{recursive:!0,force:!0});let i=Qr.readdirSync(t).filter(l=>!$R.has(l)).map(l=>Ao.join(t,l));if(i.length===0)throw new Error(`No run groups found in results path: ${t}`);Qr.mkdirSync(e,{recursive:!0});let a=Ao.join(i[0],"metadata.json"),s={...fa.parse(JSON.parse(Qr.readFileSync(a,"utf-8"))),id:n};for(let l of i){let u=Ao.join(l,"runs");if(!Qr.existsSync(u))continue;let d=Qr.readdirSync(u);for(let m of d){if($R.has(m))continue;let g=Ao.join(u,m),f=Ao.join(e,"runs",m);Qr.cpSync(g,f,{recursive:!0})}let p=Ao.join(l,"metadata.json"),h=fa.parse(JSON.parse(Qr.readFileSync(p,"utf-8")));o.info({oldRunGroupId:h.id},"Merging metadata from run groups");for(let m in h){if(m==="id")continue;let g=m;s[g]=G1(s,h,g)}}let c=Ao.join(e,"metadata.json");Qr.writeFileSync(c,JSON.stringify(s,null,2))}import jC from"adm-zip";import Ih from"fs";import{z as fH}from"zod";var z="v1",hh="mobile-cli",wo="0.0.27";var j1=9e4,V1=3,W1=1500,$1=15e3,Ar=class extends Error{status;rawError;constructor(e,t,n,o={}){super(n,o),this.status=e,this.rawError=t}};async function q1(r){return r.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var gh=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return wo&&(e[ul]=wo),hh&&(e[ty]=hh),e}async sendRequest(e,t){let{retries:n=V1,requestTimeoutMs:o=j1,initialRetryDelayMs:i=W1,maxRetryDelayMs:a=$1}=t,s=n,c=n,l,u={path:e,baseUrl:this.baseUrl,method:t.method};for(;s>0;)try{return s--,await this.sendSingleRequestHelper(e,t,o)}catch(d){if(l=d,d instanceof Ar&&d.status>=400&&d.status<500)throw d;if(d instanceof Error&&d.name==="AbortError"&&(l=new bn),s===0)throw l;let p=c-s,h=Math.min(i*Math.pow(2,p-1),a);await new Promise(m=>setTimeout(m,h))}throw this.logger.warn({...u,err:l},"Got fatal error response from Momentic server"),l}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={...this.getHeaders(),...t.extraHeaders};try{let l=await fetch(`${this.baseUrl}${e}`,{method:t.method,body:t.body?JSON.stringify(t.body):void 0,headers:c,signal:i.signal});if(!l.ok){let d=await q1(l);throw new Ar(l.status,d,`Request to ${t.method} ${e} failed with status ${l.status}: ${d}`)}let u;if(l.status===204)u={};else{let d=await l.text();try{u=JSON.parse(d)}catch{u=d}}return this.logger&&t.logResponse===!0&&u&&this.logger.debug({result:u,status:l.status,...o},"Got response from Momentic server"),u}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",s)}}},Gr=class extends gh{apiKey;constructor(e){super(e),this.apiKey=e.apiKey}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`}}};var KR="vercel.ai.error",K1=Symbol.for(KR),YR,Y1=class XR extends Error{constructor({name:e,message:t,cause:n}){super(t),this[YR]=!0,this.name=e,this.cause=n}static isInstance(e){return XR.hasMarker(e,KR)}static hasMarker(e,t){let n=Symbol.for(t);return e!=null&&typeof e=="object"&&n in e&&typeof e[n]=="boolean"&&e[n]===!0}};YR=K1;var vt=Y1,JR="AI_APICallError",ZR=`vercel.ai.error.${JR}`,X1=Symbol.for(ZR),QR,ur=class extends vt{constructor({message:r,url:e,requestBodyValues:t,statusCode:n,responseHeaders:o,responseBody:i,cause:a,isRetryable:s=n!=null&&(n===408||n===409||n===429||n>=500),data:c}){super({name:JR,message:r,cause:a}),this[QR]=!0,this.url=e,this.requestBodyValues=t,this.statusCode=n,this.responseHeaders=o,this.responseBody=i,this.isRetryable=s,this.data=c}static isInstance(r){return vt.hasMarker(r,ZR)}};QR=X1;var eC="AI_EmptyResponseBodyError",tC=`vercel.ai.error.${eC}`,J1=Symbol.for(tC),rC,nC=class extends vt{constructor({message:r="Empty response body"}={}){super({name:eC,message:r}),this[rC]=!0}static isInstance(r){return vt.hasMarker(r,tC)}};rC=J1;function oC(r){return r==null?"unknown error":typeof r=="string"?r:r instanceof Error?r.message:JSON.stringify(r)}var iC="AI_InvalidArgumentError",aC=`vercel.ai.error.${iC}`,Z1=Symbol.for(aC),sC,eu=class extends vt{constructor({message:r,cause:e,argument:t}){super({name:iC,message:r,cause:e}),this[sC]=!0,this.argument=t}static isInstance(r){return vt.hasMarker(r,aC)}};sC=Z1;var Q1="AI_InvalidPromptError",ez=`vercel.ai.error.${Q1}`,tz=Symbol.for(ez),rz;rz=tz;var nz="AI_InvalidResponseDataError",oz=`vercel.ai.error.${nz}`,iz=Symbol.for(oz),az;az=iz;var lC="AI_JSONParseError",cC=`vercel.ai.error.${lC}`,sz=Symbol.for(cC),uC,rs=class extends vt{constructor({text:r,cause:e}){super({name:lC,message:`JSON parsing failed: Text: ${r}.
3986
+ Error message: ${oC(e)}`,cause:e}),this[uC]=!0,this.text=r}static isInstance(r){return vt.hasMarker(r,cC)}};uC=sz;var dC="AI_LoadAPIKeyError",pC=`vercel.ai.error.${dC}`,lz=Symbol.for(pC),mC,ns=class extends vt{constructor({message:r}){super({name:dC,message:r}),this[mC]=!0}static isInstance(r){return vt.hasMarker(r,pC)}};mC=lz;var cz="AI_LoadSettingError",uz=`vercel.ai.error.${cz}`,dz=Symbol.for(uz),pz;pz=dz;var mz="AI_NoContentGeneratedError",hz=`vercel.ai.error.${mz}`,gz=Symbol.for(hz),fz;fz=gz;var hC="AI_NoSuchModelError",gC=`vercel.ai.error.${hC}`,Sz=Symbol.for(gC),fC,Sh=class extends vt{constructor({errorName:r=hC,modelId:e,modelType:t,message:n=`No such ${t}: ${e}`}){super({name:r,message:n}),this[fC]=!0,this.modelId=e,this.modelType=t}static isInstance(r){return vt.hasMarker(r,gC)}};fC=Sz;var yz="AI_TooManyEmbeddingValuesForCallError",bz=`vercel.ai.error.${yz}`,Ez=Symbol.for(bz),Tz;Tz=Ez;var SC="AI_TypeValidationError",yC=`vercel.ai.error.${SC}`,vz=Symbol.for(yC),bC,Az=class fh extends vt{constructor({value:e,cause:t}){super({name:SC,message:`Type validation failed: Value: ${JSON.stringify(e)}.
3987
+ Error message: ${oC(t)}`,cause:t}),this[bC]=!0,this.value=e}static isInstance(e){return vt.hasMarker(e,yC)}static wrap({value:e,cause:t}){return fh.isInstance(t)&&t.value===e?t:new fh({value:e,cause:t})}};bC=vz;var On=Az,EC="AI_UnsupportedFunctionalityError",TC=`vercel.ai.error.${EC}`,wz=Symbol.for(TC),vC,jr=class extends vt{constructor({functionality:r,message:e=`'${r}' functionality not supported.`}){super({name:EC,message:e}),this[vC]=!0,this.functionality=r}static isInstance(r){return vt.hasMarker(r,TC)}};vC=wz;var tu=class extends Error{constructor(e,t){super(e),this.name="ParseError",this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function yh(r){}function AC(r){if(typeof r=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:e=yh,onError:t=yh,onRetry:n=yh,onComment:o}=r,i="",a=!0,s,c="",l="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[E,S]=Rz(`${i}${f}`);for(let R of E)d(R);i=S,a=!1}function d(g){if(g===""){h();return}if(g.startsWith(":")){o&&o(g.slice(g.startsWith(": ")?2:1));return}let f=g.indexOf(":");if(f!==-1){let E=g.slice(0,f),S=g[f+1]===" "?2:1,R=g.slice(f+S);p(E,R,g);return}p(g,"",g)}function p(g,f,E){switch(g){case"event":l=f;break;case"data":c=`${c}${f}
3988
+ `;break;case"id":s=f.includes("\0")?void 0:f;break;case"retry":/^\d+$/.test(f)?n(parseInt(f,10)):t(new tu(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:E}));break;default:t(new tu(`Unknown field "${g.length>20?`${g.slice(0,20)}\u2026`:g}"`,{type:"unknown-field",field:g,value:f,line:E}));break}}function h(){c.length>0&&e({id:s,event:l||void 0,data:c.endsWith(`
3989
+ `)?c.slice(0,-1):c}),s=void 0,c="",l=""}function m(g={}){i&&g.consume&&d(i),a=!0,s=void 0,c="",l="",i=""}return{feed:u,reset:m}}function Rz(r){let e=[],t="",n=0;for(;n<r.length;){let o=r.indexOf("\r",n),i=r.indexOf(`
3986
3990
  `,n),a=-1;if(o!==-1&&i!==-1?a=Math.min(o,i):o!==-1?a=o:i!==-1&&(a=i),a===-1){t=r.slice(n);break}else{let s=r.slice(n,a);e.push(s),n=a+1,r[n-1]==="\r"&&r[n]===`
3987
- `&&n++}}return[e,t]}var zc=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n}={}){let o;super({start(i){o=tR({onEvent:a=>{i.enqueue(a)},onError(a){e==="terminate"?i.error(a):typeof e=="function"&&e(a)},onRetry:t,onComment:n})},transform(i){o.feed(i)}})}};import*as uR from"zod/v4";var OB=Symbol("Let zodToJsonSchema decide on which parser to use");import{ZodFirstPartyTypeKind as s_e}from"zod";import{ZodFirstPartyTypeKind as bCe}from"zod";import{ZodFirstPartyTypeKind as $Ce}from"zod";var GCe=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function rR(...r){return r.reduce((e,t)=>({...e,...t??{}}),{})}function Hc(r){return Object.fromEntries([...r.headers])}var UB=({prefix:r,size:e=16,alphabet:t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",separator:n="-"}={})=>{let o=()=>{let i=t.length,a=new Array(e);for(let s=0;s<e;s++)a[s]=t[Math.random()*i|0];return a.join("")};if(r==null)return o;if(t.includes(n))throw new Fc({argument:"separator",message:`The separator "${n}" must not be part of the alphabet "${t}".`});return()=>`${r}${n}${o()}`},Gc=UB();function zm(r){return(r instanceof Error||r instanceof DOMException)&&(r.name==="AbortError"||r.name==="ResponseAborted"||r.name==="TimeoutError")}var FB=["fetch failed","failed to fetch"];function BB({error:r,url:e,requestBodyValues:t}){if(zm(r))return r;if(r instanceof TypeError&&FB.includes(r.message.toLowerCase())){let n=r.cause;if(n!=null)return new or({message:`Cannot connect to API: ${n.message}`,cause:n,url:e,requestBodyValues:t,isRetryable:!0})}return r}function zB(r){return Object.fromEntries(Object.entries(r).filter(([e,t])=>t!=null))}function nR({apiKey:r,environmentVariableName:e,apiKeyParameterName:t="apiKey",description:n}){if(typeof r=="string")return r;if(r!=null)throw new ja({message:`${n} API key must be a string.`});if(typeof process>"u")throw new ja({message:`${n} API key is missing. Pass it using the '${t}' parameter. Environment variables is not supported in this environment.`});if(r=process.env[e],r==null)throw new ja({message:`${n} API key is missing. Pass it using the '${t}' parameter or the ${e} environment variable.`});if(typeof r!="string")throw new ja({message:`${n} API key must be a string. The value of the ${e} environment variable is not a string.`});return r}var HB=/"__proto__"\s*:/,GB=/"constructor"\s*:/;function jB(r){let e=JSON.parse(r);return e===null||typeof e!="object"||HB.test(r)===!1&&GB.test(r)===!1?e:VB(e)}function VB(r){let e=[r];for(;e.length;){let t=e;e=[];for(let n of t){if(Object.prototype.hasOwnProperty.call(n,"__proto__"))throw new SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(n,"constructor")&&Object.prototype.hasOwnProperty.call(n.constructor,"prototype"))throw new SyntaxError("Object contains forbidden prototype property");for(let o in n){let i=n[o];i&&typeof i=="object"&&e.push(i)}}}return r}function oR(r){let{stackTraceLimit:e}=Error;Error.stackTraceLimit=0;try{return jB(r)}finally{Error.stackTraceLimit=e}}var Hm=Symbol.for("vercel.ai.validator");function $B(r){return{[Hm]:!0,validate:r}}function WB(r){return typeof r=="object"&&r!==null&&Hm in r&&r[Hm]===!0&&"validate"in r}function qB(r){return WB(r)?r:KB(r)}function KB(r){return $B(async e=>{let t=await r["~standard"].validate(e);return t.issues==null?{success:!0,value:t.value}:{success:!1,error:new wn({value:e,cause:t.issues})}})}async function YB({value:r,schema:e}){let t=await Gm({value:r,schema:e});if(!t.success)throw wn.wrap({value:r,cause:t.error});return t.value}async function Gm({value:r,schema:e}){let t=qB(e);try{if(t.validate==null)return{success:!0,value:r,rawValue:r};let n=await t.validate(r);return n.success?{success:!0,value:n.value,rawValue:r}:{success:!1,error:wn.wrap({value:r,cause:n.error}),rawValue:r}}catch(n){return{success:!1,error:wn.wrap({value:r,cause:n}),rawValue:r}}}async function XB({text:r,schema:e}){try{let t=oR(r);return e==null?t:YB({value:t,schema:e})}catch(t){throw Ga.isInstance(t)||wn.isInstance(t)?t:new Ga({text:r,cause:t})}}async function iR({text:r,schema:e}){try{let t=oR(r);return e==null?{success:!0,value:t,rawValue:t}:await Gm({value:t,schema:e})}catch(t){return{success:!1,error:Ga.isInstance(t)?t:new Ga({text:r,cause:t}),rawValue:void 0}}}function JB({stream:r,schema:e}){return r.pipeThrough(new TextDecoderStream).pipeThrough(new zc).pipeThrough(new TransformStream({async transform({data:t},n){t!=="[DONE]"&&n.enqueue(await iR({text:t,schema:e}))}}))}async function mi({provider:r,providerOptions:e,schema:t}){if(e?.[r]==null)return;let n=await Gm({value:e[r],schema:t});if(!n.success)throw new Fc({argument:"providerOptions",message:`invalid ${r} provider options`,cause:n.error});return n.value}var ZB=()=>globalThis.fetch,jm=async({url:r,headers:e,body:t,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>QB({url:r,headers:{"Content-Type":"application/json",...e},body:{content:JSON.stringify(t),values:t},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a});var QB=async({url:r,headers:e={},body:t,successfulResponseHandler:n,failedResponseHandler:o,abortSignal:i,fetch:a=ZB()})=>{try{let s=await a(r,{method:"POST",headers:zB(e),body:t.content,signal:i}),c=Hc(s);if(!s.ok){let l;try{l=await o({response:s,url:r,requestBodyValues:t.values})}catch(u){throw zm(u)||or.isInstance(u)?u:new or({message:"Failed to process error response",cause:u,statusCode:s.status,url:r,responseHeaders:c,requestBodyValues:t.values})}throw l.value}try{return await n({response:s,url:r,requestBodyValues:t.values})}catch(l){throw l instanceof Error&&(zm(l)||or.isInstance(l))?l:new or({message:"Failed to process successful response",cause:l,statusCode:s.status,url:r,responseHeaders:c,requestBodyValues:t.values})}}catch(s){throw BB({error:s,url:r,requestBodyValues:t.values})}};function Lt({id:r,name:e,inputSchema:t}){return({execute:n,outputSchema:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:r,name:e,args:l,inputSchema:t,outputSchema:o,execute:n,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}function jc({id:r,name:e,inputSchema:t,outputSchema:n}){return({execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:r,name:e,args:l,inputSchema:t,outputSchema:n,execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}async function aR(r){return typeof r=="function"&&(r=r()),Promise.resolve(r)}var sR=({errorSchema:r,errorToMessage:e,isRetryable:t})=>async({response:n,url:o,requestBodyValues:i})=>{let a=await n.text(),s=Hc(n);if(a.trim()==="")return{responseHeaders:s,value:new or({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:t?.(n)})};try{let c=await XB({text:a,schema:r});return{responseHeaders:s,value:new or({message:e(c),url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,data:c,isRetryable:t?.(n,c)})}}catch{return{responseHeaders:s,value:new or({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:t?.(n)})}}},lR=r=>async({response:e})=>{let t=Hc(e);if(e.body==null)throw new kw({});return{responseHeaders:t,value:JB({stream:e.body,schema:r})}};var cR=r=>async({response:e,url:t,requestBodyValues:n})=>{let o=await e.text(),i=await iR({text:o,schema:r}),a=Hc(e);if(!i.success)throw new or({message:"Invalid JSON response",cause:i.error,statusCode:e.status,responseHeaders:a,responseBody:o,url:t,requestBodyValues:n});return{responseHeaders:a,value:i.value,rawValue:i.rawValue}};var YMe=Symbol.for("vercel.ai.schema");var{btoa:e1,atob:XMe}=globalThis;function t1(r){let e="";for(let t=0;t<r.length;t++)e+=String.fromCodePoint(r[t]);return e1(e)}function Vm(r){return r instanceof Uint8Array?t1(r):r}function dR(r){return r?.replace(/\/$/,"")}import{z as T}from"zod/v4";import{z as $a}from"zod/v4";import{z as Ut}from"zod/v4";import{z as Ge}from"zod/v4";import{z as fo}from"zod/v4";import $m from"zod/v4";import Wm from"zod/v4";import{z as Wa}from"zod/v4";import{z as ir}from"zod/v4";import{z as Wr}from"zod/v4";import{z as qr}from"zod/v4";import{z as Kr}from"zod/v4";var r1=$a.object({type:$a.literal("error"),error:$a.object({type:$a.string(),message:$a.string()})}),pR=sR({errorSchema:r1,errorToMessage:r=>r.error.message}),mR=Ut.object({citations:Ut.object({enabled:Ut.boolean()}).optional(),title:Ut.string().optional(),context:Ut.string().optional()}),n1=Ut.object({sendReasoning:Ut.boolean().optional(),thinking:Ut.object({type:Ut.union([Ut.literal("enabled"),Ut.literal("disabled")]),budgetTokens:Ut.number().optional()}).optional(),disableParallelToolUse:Ut.boolean().optional()});function Rn(r){var e;let t=r?.anthropic;return(e=t?.cacheControl)!=null?e:t?.cache_control}var o1=Ge.object({maxUses:Ge.number().optional(),allowedDomains:Ge.array(Ge.string()).optional(),blockedDomains:Ge.array(Ge.string()).optional(),userLocation:Ge.object({type:Ge.literal("approximate"),city:Ge.string().optional(),region:Ge.string().optional(),country:Ge.string().optional(),timezone:Ge.string().optional()}).optional()}),fR=Ge.array(Ge.object({url:Ge.string(),title:Ge.string(),pageAge:Ge.string().nullable(),encryptedContent:Ge.string(),type:Ge.string()})),i1=jc({id:"anthropic.web_search_20250305",name:"web_search",inputSchema:Ge.object({query:Ge.string()}),outputSchema:fR}),a1=(r={})=>i1(r);function s1(r){return typeof r=="object"&&r!==null&&"type"in r&&r.type==="web_search_20250305"}function l1({tools:r,toolChoice:e,disableParallelToolUse:t}){r=r?.length?r:void 0;let n=[],o=new Set;if(r==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n,betas:o};let i=[];for(let s of r){if(s1(s)){i.push(s);continue}switch(s.type){case"function":let c=Rn(s.providerOptions);i.push({name:s.name,description:s.description,input_schema:s.inputSchema,cache_control:c});break;case"provider-defined":switch(s.id){case"anthropic.computer_20250124":o.add("computer-use-2025-01-24"),i.push({name:"computer",type:"computer_20250124",display_width_px:s.args.displayWidthPx,display_height_px:s.args.displayHeightPx,display_number:s.args.displayNumber});break;case"anthropic.computer_20241022":o.add("computer-use-2024-10-22"),i.push({name:"computer",type:"computer_20241022",display_width_px:s.args.displayWidthPx,display_height_px:s.args.displayHeightPx,display_number:s.args.displayNumber});break;case"anthropic.text_editor_20250124":o.add("computer-use-2025-01-24"),i.push({name:"str_replace_editor",type:"text_editor_20250124"});break;case"anthropic.text_editor_20241022":o.add("computer-use-2024-10-22"),i.push({name:"str_replace_editor",type:"text_editor_20241022"});break;case"anthropic.text_editor_20250429":o.add("computer-use-2025-01-24"),i.push({name:"str_replace_based_edit_tool",type:"text_editor_20250429"});break;case"anthropic.bash_20250124":o.add("computer-use-2025-01-24"),i.push({name:"bash",type:"bash_20250124"});break;case"anthropic.bash_20241022":o.add("computer-use-2024-10-22"),i.push({name:"bash",type:"bash_20241022"});break;case"anthropic.web_search_20250305":{let l=o1.parse(s.args);i.push({type:"web_search_20250305",name:"web_search",max_uses:l.maxUses,allowed_domains:l.allowedDomains,blocked_domains:l.blockedDomains,user_location:l.userLocation});break}case"anthropic.code_execution_20250522":{o.add("code-execution-2025-05-22"),i.push({type:"code_execution_20250522",name:"code_execution"});break}default:n.push({type:"unsupported-tool",tool:s});break}break;default:n.push({type:"unsupported-tool",tool:s});break}}if(e==null)return{tools:i,toolChoice:t?{type:"auto",disable_parallel_tool_use:t}:void 0,toolWarnings:n,betas:o};let a=e.type;switch(a){case"auto":return{tools:i,toolChoice:{type:"auto",disable_parallel_tool_use:t},toolWarnings:n,betas:o};case"required":return{tools:i,toolChoice:{type:"any",disable_parallel_tool_use:t},toolWarnings:n,betas:o};case"none":return{tools:void 0,toolChoice:void 0,toolWarnings:n,betas:o};case"tool":return{tools:i,toolChoice:{type:"tool",name:e.toolName,disable_parallel_tool_use:t},toolWarnings:n,betas:o};default:{let s=a;throw new kr({functionality:`tool choice type: ${s}`})}}}var SR=fo.object({type:fo.literal("code_execution_result"),stdout:fo.string(),stderr:fo.string(),return_code:fo.number()}),c1=jc({id:"anthropic.code_execution_20250522",name:"code_execution",inputSchema:fo.object({code:fo.string()}),outputSchema:SR}),u1=(r={})=>c1(r);function d1(r){if(typeof r=="string")return Buffer.from(r,"base64").toString("utf-8");if(r instanceof Uint8Array)return new TextDecoder().decode(r);throw r instanceof URL?new kr({functionality:"URL-based text documents are not supported for citations"}):new kr({functionality:`unsupported data type for text documents: ${typeof r}`})}async function p1({prompt:r,sendReasoning:e,warnings:t}){var n,o,i,a,s;let c=new Set,l=m1(r),u,d=[];async function p(m){var h,f;let b=await mi({provider:"anthropic",providerOptions:m,schema:mR});return(f=(h=b?.citations)==null?void 0:h.enabled)!=null?f:!1}async function g(m){let h=await mi({provider:"anthropic",providerOptions:m,schema:mR});return{title:h?.title,context:h?.context}}for(let m=0;m<l.length;m++){let h=l[m],f=m===l.length-1,b=h.type;switch(b){case"system":{if(u!=null)throw new kr({functionality:"Multiple system messages that are separated by user/assistant messages"});u=h.messages.map(({content:E,providerOptions:_})=>({type:"text",text:E,cache_control:Rn(_)}));break}case"user":{let E=[];for(let _ of h.messages){let{role:v,content:A}=_;switch(v){case"user":{for(let P=0;P<A.length;P++){let R=A[P],w=P===A.length-1,B=(n=Rn(R.providerOptions))!=null?n:w?Rn(_.providerOptions):void 0;switch(R.type){case"text":{E.push({type:"text",text:R.text,cache_control:B});break}case"file":{if(R.mediaType.startsWith("image/"))E.push({type:"image",source:R.data instanceof URL?{type:"url",url:R.data.toString()}:{type:"base64",media_type:R.mediaType==="image/*"?"image/jpeg":R.mediaType,data:Vm(R.data)},cache_control:B});else if(R.mediaType==="application/pdf"){c.add("pdfs-2024-09-25");let D=await p(R.providerOptions),k=await g(R.providerOptions);E.push({type:"document",source:R.data instanceof URL?{type:"url",url:R.data.toString()}:{type:"base64",media_type:"application/pdf",data:Vm(R.data)},title:(o=k.title)!=null?o:R.filename,...k.context&&{context:k.context},...D&&{citations:{enabled:!0}},cache_control:B})}else if(R.mediaType==="text/plain"){let D=await p(R.providerOptions),k=await g(R.providerOptions);E.push({type:"document",source:R.data instanceof URL?{type:"url",url:R.data.toString()}:{type:"text",media_type:"text/plain",data:d1(R.data)},title:(i=k.title)!=null?i:R.filename,...k.context&&{context:k.context},...D&&{citations:{enabled:!0}},cache_control:B})}else throw new kr({functionality:`media type: ${R.mediaType}`});break}}}break}case"tool":{for(let P=0;P<A.length;P++){let R=A[P],w=P===A.length-1,B=(a=Rn(R.providerOptions))!=null?a:w?Rn(_.providerOptions):void 0,D=R.output,k;switch(D.type){case"content":k=D.value.map(Y=>{switch(Y.type){case"text":return{type:"text",text:Y.text,cache_control:void 0};case"media":{if(Y.mediaType.startsWith("image/"))return{type:"image",source:{type:"base64",media_type:Y.mediaType,data:Y.data},cache_control:void 0};throw new kr({functionality:`media type: ${Y.mediaType}`})}}});break;case"text":case"error-text":k=D.value;break;case"json":case"error-json":default:k=JSON.stringify(D.value);break}E.push({type:"tool_result",tool_use_id:R.toolCallId,content:k,is_error:D.type==="error-text"||D.type==="error-json"?!0:void 0,cache_control:B})}break}default:{let P=v;throw new Error(`Unsupported role: ${P}`)}}}d.push({role:"user",content:E});break}case"assistant":{let E=[];for(let _=0;_<h.messages.length;_++){let v=h.messages[_],A=_===h.messages.length-1,{content:P}=v;for(let R=0;R<P.length;R++){let w=P[R],B=R===P.length-1,D=(s=Rn(w.providerOptions))!=null?s:B?Rn(v.providerOptions):void 0;switch(w.type){case"text":{E.push({type:"text",text:f&&A&&B?w.text.trim():w.text,cache_control:D});break}case"reasoning":{if(e){let k=await mi({provider:"anthropic",providerOptions:w.providerOptions,schema:y1});k!=null?k.signature!=null?E.push({type:"thinking",thinking:w.text,signature:k.signature,cache_control:D}):k.redactedData!=null?E.push({type:"redacted_thinking",data:k.redactedData,cache_control:D}):t.push({type:"other",message:"unsupported reasoning metadata"}):t.push({type:"other",message:"unsupported reasoning metadata"})}else t.push({type:"other",message:"sending reasoning content is disabled for this model"});break}case"tool-call":{if(w.providerExecuted){if(w.toolName==="web_search"){E.push({type:"server_tool_use",id:w.toolCallId,name:"web_search",input:w.input,cache_control:D});break}if(w.toolName==="code_execution"){E.push({type:"server_tool_use",id:w.toolCallId,name:"code_execution",input:w.input,cache_control:D});break}t.push({type:"other",message:`provider executed tool call for tool ${w.toolName} is not supported`});break}E.push({type:"tool_use",id:w.toolCallId,name:w.toolName,input:w.input,cache_control:D});break}case"tool-result":{if(w.toolName==="web_search"){let k=w.output;if(k.type!=="json"){t.push({type:"other",message:`provider executed tool result output type ${k.type} for tool ${w.toolName} is not supported`});break}let Y=fR.parse(k.value);E.push({type:"web_search_tool_result",tool_use_id:w.toolCallId,content:Y.map(Me=>({url:Me.url,title:Me.title,page_age:Me.pageAge,encrypted_content:Me.encryptedContent,type:Me.type})),cache_control:D});break}if(w.toolName==="code_execution"){let k=w.output;if(k.type!=="json"){t.push({type:"other",message:`provider executed tool result output type ${k.type} for tool ${w.toolName} is not supported`});break}let Y=SR.parse(k.value);E.push({type:"code_execution_tool_result",tool_use_id:w.toolCallId,content:{type:Y.type,stdout:Y.stdout,stderr:Y.stderr,return_code:Y.return_code},cache_control:D});break}t.push({type:"other",message:`provider executed tool result for tool ${w.toolName} is not supported`});break}}}}d.push({role:"assistant",content:E});break}default:{let E=b;throw new Error(`content type: ${E}`)}}}return{prompt:{system:u,messages:d},betas:c}}function m1(r){let e=[],t;for(let n of r){let{role:o}=n;switch(o){case"system":{t?.type!=="system"&&(t={type:"system",messages:[]},e.push(t)),t.messages.push(n);break}case"assistant":{t?.type!=="assistant"&&(t={type:"assistant",messages:[]},e.push(t)),t.messages.push(n);break}case"user":{t?.type!=="user"&&(t={type:"user",messages:[]},e.push(t)),t.messages.push(n);break}case"tool":{t?.type!=="user"&&(t={type:"user",messages:[]},e.push(t)),t.messages.push(n);break}default:{let i=o;throw new Error(`Unsupported role: ${i}`)}}}return e}function gR({finishReason:r,isJsonResponseFromTool:e}){switch(r){case"end_turn":case"stop_sequence":return"stop";case"tool_use":return e?"stop":"tool-calls";case"max_tokens":return"length";default:return"unknown"}}var qa={webSearchResult:T.object({type:T.literal("web_search_result_location"),cited_text:T.string(),url:T.string(),title:T.string(),encrypted_index:T.string()}),pageLocation:T.object({type:T.literal("page_location"),cited_text:T.string(),document_index:T.number(),document_title:T.string().nullable(),start_page_number:T.number(),end_page_number:T.number()}),charLocation:T.object({type:T.literal("char_location"),cited_text:T.string(),document_index:T.number(),document_title:T.string().nullable(),start_char_index:T.number(),end_char_index:T.number()})},yR=T.discriminatedUnion("type",[qa.webSearchResult,qa.pageLocation,qa.charLocation]),gPe=T.discriminatedUnion("type",[qa.pageLocation,qa.charLocation]);function hR(r,e,t,n){if(r.type==="page_location"||r.type==="char_location"){let o=g1(r,e,t);o&&n(o)}}function g1(r,e,t){var n;let o=e[r.document_index];if(!o)return null;let i=r.type==="page_location"?{citedText:r.cited_text,startPageNumber:r.start_page_number,endPageNumber:r.end_page_number}:{citedText:r.cited_text,startCharIndex:r.start_char_index,endCharIndex:r.end_char_index};return{type:"source",sourceType:"document",id:t(),mediaType:o.mediaType,title:(n=r.document_title)!=null?n:o.title,filename:o.filename,providerMetadata:{anthropic:i}}}var h1=class{constructor(r,e){this.specificationVersion="v2";var t;this.modelId=r,this.config=e,this.generateId=(t=e.generateId)!=null?t:Gc}supportsUrl(r){return r.protocol==="https:"}get provider(){return this.config.provider}get supportedUrls(){var r,e,t;return(t=(e=(r=this.config).supportedUrls)==null?void 0:e.call(r))!=null?t:{}}async getArgs({prompt:r,maxOutputTokens:e=4096,temperature:t,topP:n,topK:o,frequencyPenalty:i,presencePenalty:a,stopSequences:s,responseFormat:c,seed:l,tools:u,toolChoice:d,providerOptions:p}){var g,m,h;let f=[];i!=null&&f.push({type:"unsupported-setting",setting:"frequencyPenalty"}),a!=null&&f.push({type:"unsupported-setting",setting:"presencePenalty"}),l!=null&&f.push({type:"unsupported-setting",setting:"seed"}),c?.type==="json"&&(c.schema==null?f.push({type:"unsupported-setting",setting:"responseFormat",details:"JSON response format requires a schema. The response format is ignored."}):u!=null&&f.push({type:"unsupported-setting",setting:"tools",details:"JSON response format does not support tools. The provided tools are ignored."}));let b=c?.type==="json"&&c.schema!=null?{type:"function",name:"json",description:"Respond with a JSON object.",inputSchema:c.schema}:void 0,E=await mi({provider:"anthropic",providerOptions:p,schema:n1}),{prompt:_,betas:v}=await p1({prompt:r,sendReasoning:(g=E?.sendReasoning)!=null?g:!0,warnings:f}),A=((m=E?.thinking)==null?void 0:m.type)==="enabled",P=(h=E?.thinking)==null?void 0:h.budgetTokens,R={model:this.modelId,max_tokens:e,temperature:t,top_k:o,top_p:n,stop_sequences:s,...A&&{thinking:{type:"enabled",budget_tokens:P}},system:_.system,messages:_.messages};if(A){if(P==null)throw new kr({functionality:"thinking requires a budget"});R.temperature!=null&&(R.temperature=void 0,f.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported when thinking is enabled"})),o!=null&&(R.top_k=void 0,f.push({type:"unsupported-setting",setting:"topK",details:"topK is not supported when thinking is enabled"})),n!=null&&(R.top_p=void 0,f.push({type:"unsupported-setting",setting:"topP",details:"topP is not supported when thinking is enabled"})),R.max_tokens=e+P}let{tools:w,toolChoice:B,toolWarnings:D,betas:k}=l1(b!=null?{tools:[b],toolChoice:{type:"tool",toolName:b.name},disableParallelToolUse:E?.disableParallelToolUse}:{tools:u??[],toolChoice:d,disableParallelToolUse:E?.disableParallelToolUse});return{args:{...R,tools:w,tool_choice:B},warnings:[...f,...D],betas:new Set([...v,...k]),usesJsonResponseTool:b!=null}}async getHeaders({betas:r,headers:e}){return rR(await aR(this.config.headers),r.size>0?{"anthropic-beta":Array.from(r).join(",")}:{},e)}buildRequestUrl(r){var e,t,n;return(n=(t=(e=this.config).buildRequestUrl)==null?void 0:t.call(e,this.config.baseURL,r))!=null?n:`${this.config.baseURL}/messages`}transformRequestBody(r){var e,t,n;return(n=(t=(e=this.config).transformRequestBody)==null?void 0:t.call(e,r))!=null?n:r}extractCitationDocuments(r){let e=t=>{var n,o;if(t.type!=="file"||t.mediaType!=="application/pdf"&&t.mediaType!=="text/plain")return!1;let i=(n=t.providerOptions)==null?void 0:n.anthropic,a=i?.citations;return(o=a?.enabled)!=null?o:!1};return r.filter(t=>t.role==="user").flatMap(t=>t.content).filter(e).map(t=>{var n;let o=t;return{title:(n=o.filename)!=null?n:"Untitled Document",filename:o.filename,mediaType:o.mediaType}})}async doGenerate(r){var e,t,n,o,i;let{args:a,warnings:s,betas:c,usesJsonResponseTool:l}=await this.getArgs(r),u=this.extractCitationDocuments(r.prompt),{responseHeaders:d,value:p,rawValue:g}=await jm({url:this.buildRequestUrl(!1),headers:await this.getHeaders({betas:c,headers:r.headers}),body:this.transformRequestBody(a),failedResponseHandler:pR,successfulResponseHandler:cR(f1),abortSignal:r.abortSignal,fetch:this.config.fetch}),m=[];for(let h of p.content)switch(h.type){case"text":{if(!l&&(m.push({type:"text",text:h.text}),h.citations))for(let f of h.citations)hR(f,u,this.generateId,b=>m.push(b));break}case"thinking":{m.push({type:"reasoning",text:h.thinking,providerMetadata:{anthropic:{signature:h.signature}}});break}case"redacted_thinking":{m.push({type:"reasoning",text:"",providerMetadata:{anthropic:{redactedData:h.data}}});break}case"tool_use":{m.push(l?{type:"text",text:JSON.stringify(h.input)}:{type:"tool-call",toolCallId:h.id,toolName:h.name,input:JSON.stringify(h.input)});break}case"server_tool_use":{(h.name==="web_search"||h.name==="code_execution")&&m.push({type:"tool-call",toolCallId:h.id,toolName:h.name,input:JSON.stringify(h.input),providerExecuted:!0});break}case"web_search_tool_result":{if(Array.isArray(h.content)){m.push({type:"tool-result",toolCallId:h.tool_use_id,toolName:"web_search",result:h.content.map(f=>{var b;return{url:f.url,title:f.title,pageAge:(b=f.page_age)!=null?b:null,encryptedContent:f.encrypted_content,type:f.type}}),providerExecuted:!0});for(let f of h.content)m.push({type:"source",sourceType:"url",id:this.generateId(),url:f.url,title:f.title,providerMetadata:{anthropic:{pageAge:(e=f.page_age)!=null?e:null}}})}else m.push({type:"tool-result",toolCallId:h.tool_use_id,toolName:"web_search",isError:!0,result:{type:"web_search_tool_result_error",errorCode:h.content.error_code},providerExecuted:!0});break}case"code_execution_tool_result":{h.content.type==="code_execution_result"?m.push({type:"tool-result",toolCallId:h.tool_use_id,toolName:"code_execution",result:{type:h.content.type,stdout:h.content.stdout,stderr:h.content.stderr,return_code:h.content.return_code},providerExecuted:!0}):h.content.type==="code_execution_tool_result_error"&&m.push({type:"tool-result",toolCallId:h.tool_use_id,toolName:"code_execution",isError:!0,result:{type:"code_execution_tool_result_error",errorCode:h.content.error_code},providerExecuted:!0});break}}return{content:m,finishReason:gR({finishReason:p.stop_reason,isJsonResponseFromTool:l}),usage:{inputTokens:p.usage.input_tokens,outputTokens:p.usage.output_tokens,totalTokens:p.usage.input_tokens+p.usage.output_tokens,cachedInputTokens:(t=p.usage.cache_read_input_tokens)!=null?t:void 0},request:{body:a},response:{id:(n=p.id)!=null?n:void 0,modelId:(o=p.model)!=null?o:void 0,headers:d,body:g},warnings:s,providerMetadata:{anthropic:{usage:p.usage,cacheCreationInputTokens:(i=p.usage.cache_creation_input_tokens)!=null?i:null}}}}async doStream(r){let{args:e,warnings:t,betas:n,usesJsonResponseTool:o}=await this.getArgs(r),i=this.extractCitationDocuments(r.prompt),a={...e,stream:!0},{responseHeaders:s,value:c}=await jm({url:this.buildRequestUrl(!0),headers:await this.getHeaders({betas:n,headers:r.headers}),body:this.transformRequestBody(a),failedResponseHandler:pR,successfulResponseHandler:lR(S1),abortSignal:r.abortSignal,fetch:this.config.fetch}),l="unknown",u={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},d={},p,g,m=this.generateId;return{stream:c.pipeThrough(new TransformStream({start(h){h.enqueue({type:"stream-start",warnings:t})},transform(h,f){var b,E,_,v,A,P,R;if(r.includeRawChunks&&f.enqueue({type:"raw",rawValue:h.rawValue}),!h.success){f.enqueue({type:"error",error:h.error});return}let w=h.value;switch(w.type){case"ping":return;case"content_block_start":{let B=w.content_block.type;switch(g=B,B){case"text":{d[w.index]={type:"text"},f.enqueue({type:"text-start",id:String(w.index)});return}case"thinking":{d[w.index]={type:"reasoning"},f.enqueue({type:"reasoning-start",id:String(w.index)});return}case"redacted_thinking":{d[w.index]={type:"reasoning"},f.enqueue({type:"reasoning-start",id:String(w.index),providerMetadata:{anthropic:{redactedData:w.content_block.data}}});return}case"tool_use":{d[w.index]=o?{type:"text"}:{type:"tool-call",toolCallId:w.content_block.id,toolName:w.content_block.name,input:""},f.enqueue(o?{type:"text-start",id:String(w.index)}:{type:"tool-input-start",id:w.content_block.id,toolName:w.content_block.name});return}case"server_tool_use":{(w.content_block.name==="web_search"||w.content_block.name==="code_execution")&&(d[w.index]={type:"tool-call",toolCallId:w.content_block.id,toolName:w.content_block.name,input:"",providerExecuted:!0},f.enqueue({type:"tool-input-start",id:w.content_block.id,toolName:w.content_block.name,providerExecuted:!0}));return}case"web_search_tool_result":{let D=w.content_block;if(Array.isArray(D.content)){f.enqueue({type:"tool-result",toolCallId:D.tool_use_id,toolName:"web_search",result:D.content.map(k=>{var Y;return{url:k.url,title:k.title,pageAge:(Y=k.page_age)!=null?Y:null,encryptedContent:k.encrypted_content,type:k.type}}),providerExecuted:!0});for(let k of D.content)f.enqueue({type:"source",sourceType:"url",id:m(),url:k.url,title:k.title,providerMetadata:{anthropic:{pageAge:(b=k.page_age)!=null?b:null}}})}else f.enqueue({type:"tool-result",toolCallId:D.tool_use_id,toolName:"web_search",isError:!0,result:{type:"web_search_tool_result_error",errorCode:D.content.error_code},providerExecuted:!0});return}case"code_execution_tool_result":{let D=w.content_block;D.content.type==="code_execution_result"?f.enqueue({type:"tool-result",toolCallId:D.tool_use_id,toolName:"code_execution",result:{type:D.content.type,stdout:D.content.stdout,stderr:D.content.stderr,return_code:D.content.return_code},providerExecuted:!0}):D.content.type==="code_execution_tool_result_error"&&f.enqueue({type:"tool-result",toolCallId:D.tool_use_id,toolName:"code_execution",isError:!0,result:{type:"code_execution_tool_result_error",errorCode:D.content.error_code},providerExecuted:!0});return}default:{let D=B;throw new Error(`Unsupported content block type: ${D}`)}}}case"content_block_stop":{if(d[w.index]!=null){let B=d[w.index];switch(B.type){case"text":{f.enqueue({type:"text-end",id:String(w.index)});break}case"reasoning":{f.enqueue({type:"reasoning-end",id:String(w.index)});break}case"tool-call":o||(f.enqueue({type:"tool-input-end",id:B.toolCallId}),f.enqueue(B));break}delete d[w.index]}g=void 0;return}case"content_block_delta":{let B=w.delta.type;switch(B){case"text_delta":{if(o)return;f.enqueue({type:"text-delta",id:String(w.index),delta:w.delta.text});return}case"thinking_delta":{f.enqueue({type:"reasoning-delta",id:String(w.index),delta:w.delta.thinking});return}case"signature_delta":{g==="thinking"&&f.enqueue({type:"reasoning-delta",id:String(w.index),delta:"",providerMetadata:{anthropic:{signature:w.delta.signature}}});return}case"input_json_delta":{let D=d[w.index],k=w.delta.partial_json;if(o){if(D?.type!=="text")return;f.enqueue({type:"text-delta",id:String(w.index),delta:k})}else{if(D?.type!=="tool-call")return;f.enqueue({type:"tool-input-delta",id:D.toolCallId,delta:k}),D.input+=k}return}case"citations_delta":{let D=w.delta.citation;hR(D,i,m,k=>f.enqueue(k));return}default:{let D=B;throw new Error(`Unsupported delta type: ${D}`)}}}case"message_start":{u.inputTokens=w.message.usage.input_tokens,u.cachedInputTokens=(E=w.message.usage.cache_read_input_tokens)!=null?E:void 0,p={anthropic:{usage:w.message.usage,cacheCreationInputTokens:(_=w.message.usage.cache_creation_input_tokens)!=null?_:null}},f.enqueue({type:"response-metadata",id:(v=w.message.id)!=null?v:void 0,modelId:(A=w.message.model)!=null?A:void 0});return}case"message_delta":{u.outputTokens=w.usage.output_tokens,u.totalTokens=((P=u.inputTokens)!=null?P:0)+((R=w.usage.output_tokens)!=null?R:0),l=gR({finishReason:w.delta.stop_reason,isJsonResponseFromTool:o});return}case"message_stop":{f.enqueue({type:"finish",finishReason:l,usage:u,providerMetadata:p});return}case"error":{f.enqueue({type:"error",error:w.error});return}default:{let B=w;throw new Error(`Unsupported chunk type: ${B}`)}}}})),request:{body:a},response:{headers:s}}}},f1=T.object({type:T.literal("message"),id:T.string().nullish(),model:T.string().nullish(),content:T.array(T.discriminatedUnion("type",[T.object({type:T.literal("text"),text:T.string(),citations:T.array(yR).optional()}),T.object({type:T.literal("thinking"),thinking:T.string(),signature:T.string()}),T.object({type:T.literal("redacted_thinking"),data:T.string()}),T.object({type:T.literal("tool_use"),id:T.string(),name:T.string(),input:T.unknown()}),T.object({type:T.literal("server_tool_use"),id:T.string(),name:T.string(),input:T.record(T.string(),T.unknown()).nullish()}),T.object({type:T.literal("web_search_tool_result"),tool_use_id:T.string(),content:T.union([T.array(T.object({type:T.literal("web_search_result"),url:T.string(),title:T.string(),encrypted_content:T.string(),page_age:T.string().nullish()})),T.object({type:T.literal("web_search_tool_result_error"),error_code:T.string()})])}),T.object({type:T.literal("code_execution_tool_result"),tool_use_id:T.string(),content:T.union([T.object({type:T.literal("code_execution_result"),stdout:T.string(),stderr:T.string(),return_code:T.number()}),T.object({type:T.literal("code_execution_tool_result_error"),error_code:T.string()})])})])),stop_reason:T.string().nullish(),usage:T.looseObject({input_tokens:T.number(),output_tokens:T.number(),cache_creation_input_tokens:T.number().nullish(),cache_read_input_tokens:T.number().nullish()})}),S1=T.discriminatedUnion("type",[T.object({type:T.literal("message_start"),message:T.object({id:T.string().nullish(),model:T.string().nullish(),usage:T.looseObject({input_tokens:T.number(),output_tokens:T.number(),cache_creation_input_tokens:T.number().nullish(),cache_read_input_tokens:T.number().nullish()})})}),T.object({type:T.literal("content_block_start"),index:T.number(),content_block:T.discriminatedUnion("type",[T.object({type:T.literal("text"),text:T.string()}),T.object({type:T.literal("thinking"),thinking:T.string()}),T.object({type:T.literal("tool_use"),id:T.string(),name:T.string()}),T.object({type:T.literal("redacted_thinking"),data:T.string()}),T.object({type:T.literal("server_tool_use"),id:T.string(),name:T.string(),input:T.record(T.string(),T.unknown()).nullish()}),T.object({type:T.literal("web_search_tool_result"),tool_use_id:T.string(),content:T.union([T.array(T.object({type:T.literal("web_search_result"),url:T.string(),title:T.string(),encrypted_content:T.string(),page_age:T.string().nullish()})),T.object({type:T.literal("web_search_tool_result_error"),error_code:T.string()})])}),T.object({type:T.literal("code_execution_tool_result"),tool_use_id:T.string(),content:T.union([T.object({type:T.literal("code_execution_result"),stdout:T.string(),stderr:T.string(),return_code:T.number()}),T.object({type:T.literal("code_execution_tool_result_error"),error_code:T.string()})])})])}),T.object({type:T.literal("content_block_delta"),index:T.number(),delta:T.discriminatedUnion("type",[T.object({type:T.literal("input_json_delta"),partial_json:T.string()}),T.object({type:T.literal("text_delta"),text:T.string()}),T.object({type:T.literal("thinking_delta"),thinking:T.string()}),T.object({type:T.literal("signature_delta"),signature:T.string()}),T.object({type:T.literal("citations_delta"),citation:yR})])}),T.object({type:T.literal("content_block_stop"),index:T.number()}),T.object({type:T.literal("error"),error:T.object({type:T.string(),message:T.string()})}),T.object({type:T.literal("message_delta"),delta:T.object({stop_reason:T.string().nullish()}),usage:T.object({output_tokens:T.number()})}),T.object({type:T.literal("message_stop")}),T.object({type:T.literal("ping")})]),y1=T.object({signature:T.string().optional(),redactedData:T.string().optional()}),b1=Lt({id:"anthropic.bash_20241022",name:"bash",inputSchema:$m.object({command:$m.string(),restart:$m.boolean().optional()})}),E1=Lt({id:"anthropic.bash_20250124",name:"bash",inputSchema:Wm.object({command:Wm.string(),restart:Wm.boolean().optional()})}),T1=Lt({id:"anthropic.computer_20241022",name:"computer",inputSchema:Wa.object({action:Wa.enum(["key","type","mouse_move","left_click","left_click_drag","right_click","middle_click","double_click","screenshot","cursor_position"]),coordinate:Wa.array(Wa.number().int()).optional(),text:Wa.string().optional()})}),v1=Lt({id:"anthropic.computer_20250124",name:"computer",inputSchema:ir.object({action:ir.enum(["key","hold_key","type","cursor_position","mouse_move","left_mouse_down","left_mouse_up","left_click","left_click_drag","right_click","middle_click","double_click","triple_click","scroll","wait","screenshot"]),coordinate:ir.tuple([ir.number().int(),ir.number().int()]).optional(),duration:ir.number().optional(),scroll_amount:ir.number().optional(),scroll_direction:ir.enum(["up","down","left","right"]).optional(),start_coordinate:ir.tuple([ir.number().int(),ir.number().int()]).optional(),text:ir.string().optional()})}),A1=Lt({id:"anthropic.text_editor_20241022",name:"str_replace_editor",inputSchema:Wr.object({command:Wr.enum(["view","create","str_replace","insert","undo_edit"]),path:Wr.string(),file_text:Wr.string().optional(),insert_line:Wr.number().int().optional(),new_str:Wr.string().optional(),old_str:Wr.string().optional(),view_range:Wr.array(Wr.number().int()).optional()})}),w1=Lt({id:"anthropic.text_editor_20250124",name:"str_replace_editor",inputSchema:qr.object({command:qr.enum(["view","create","str_replace","insert","undo_edit"]),path:qr.string(),file_text:qr.string().optional(),insert_line:qr.number().int().optional(),new_str:qr.string().optional(),old_str:qr.string().optional(),view_range:qr.array(qr.number().int()).optional()})}),R1=Lt({id:"anthropic.text_editor_20250429",name:"str_replace_based_edit_tool",inputSchema:Kr.object({command:Kr.enum(["view","create","str_replace","insert"]),path:Kr.string(),file_text:Kr.string().optional(),insert_line:Kr.number().int().optional(),new_str:Kr.string().optional(),old_str:Kr.string().optional(),view_range:Kr.array(Kr.number().int()).optional()})}),C1={bash_20241022:b1,bash_20250124:E1,textEditor_20241022:A1,textEditor_20250124:w1,textEditor_20250429:R1,computer_20241022:T1,computer_20250124:v1,webSearch_20250305:a1,codeExecution_20250522:u1};function qm(r={}){var e;let t=(e=dR(r.baseURL))!=null?e:"https://api.anthropic.com/v1",n=()=>({"anthropic-version":"2023-06-01","x-api-key":nR({apiKey:r.apiKey,environmentVariableName:"ANTHROPIC_API_KEY",description:"Anthropic"}),...r.headers}),o=a=>{var s;return new h1(a,{provider:"anthropic.messages",baseURL:t,headers:n,fetch:r.fetch,generateId:(s=r.generateId)!=null?s:Gc,supportedUrls:()=>({"image/*":[/^https?:\/\/.*$/]})})},i=function(a){if(new.target)throw new Error("The Anthropic model function cannot be called with the new keyword.");return o(a)};return i.languageModel=o,i.chat=o,i.messages=o,i.textEmbeddingModel=a=>{throw new Fm({modelId:a,modelType:"textEmbeddingModel"})},i.imageModel=a=>{throw new Fm({modelId:a,modelType:"imageModel"})},i.tools=C1,i}var MPe=qm();var bR=({baseUrl:r,apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o})=>i=>{let a={Authorization:`Bearer ${e}`,[Ks]:ho??"",...t&&{[Bf]:t},...n||{}};return o&&(a[Ff]=JSON.stringify(o)),qm({baseURL:`${r}/v1/llm/anthropic/${i}`,headers:a,apiKey:e})(i)};var So=class extends Nr{agentConfig;constructor(e,t){super(t),this.agentConfig=e}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 xh.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${F}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:ho,...e},signal:t.abortSignal});return Ch.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${F}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return x1.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 jf.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 ud.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 Gf.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 Hf.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 ud.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 zf.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 vu.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 Vf.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 Eu.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 ih.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 _u.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${F}/web-agent/extract-keywords`,{method:"POST",body:{goal:e,disableCache:t.disableCache,context:e},signal:t.abortSignal});return Fh.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 th.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 oh.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 nh.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${F}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return xg.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return bR({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as Km}from"zod";var fr=class extends Nr{constructor(e){super(e)}getAppUrl(){return this.baseUrl==="http://localhost:8000"?"http://localhost:3000":this.baseUrl.replace(/\/\/api/,"//app")}async getAuthInfo(){let e=await this.sendRequest(`/${F}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});return nS.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${F}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Qf.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${F}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return Wf.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 Kf.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,logResponse:!0,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return Yf.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${F}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return $f.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${F}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return rS.parse(t)}async getAllEnvironments(){let e=await this.sendRequest(`/${F}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return oS.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 yS.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 iS.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 vh.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 aS.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 sS.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${F}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return lS.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 cS.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${F}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return TS.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 ra.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 ra.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 gd.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 ra.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 ra.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 gd.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${F}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Km.record(Km.string(),Km.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${F}/quarantine`,{method:"GET"});return uS.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 dS.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 pS.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 mS.parse(e)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${F}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}};async function Ym(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return C.debug("Got auth info from API"),n}var Vc=class{apiClient;constructor(e){this.apiClient=e}async reportBillableEvents(e,t){await this.apiClient.reportBillableEvents(e,t)}};var gi=class extends Nr{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 _g.parse(n)}async constructIframeRegex(e,t={}){return this.generator.getIframeRegex(e,{abortSignal:t.signal})}};var hi=class{constructor(e,t){this.client=e;this.orgId=t}async acquireCacheLock(e,t){return this.client.acquireCacheLock(e,t)}async uploadScreenshot(e){return(await this.client.uploadScreenshot({screenshot:e.toString("base64")})).key}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 _1,en as M1}from"@faker-js/faker";var fi="v1",Si=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 _1({locale:M1}),this.fakerInstance.seed(e.fakerSeed))}async sendAiGenerate(e){let t=typeof e=="string"?{input:e}:e;return this.httpClient.sendRequest(`/${fi}/tools/ai/generate`,{method:"POST",body:t}).catch(n=>{throw n instanceof hr?new Error(n.rawError):new Error(`Failed to send AI generation: ${n.message}`)})}async sendSms(e){return this.httpClient.sendRequest(`/${fi}/tools/sms/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof hr?new Error(t.rawError):new Error(`Failed to send sms: ${t.message}`)})}async fetchLatestSms(e){return this.httpClient.sendRequest(`/${fi}/tools/sms/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof hr?new Error(t.rawError):t})}async sendEmail(e){return this.httpClient.sendRequest(`/${fi}/tools/email/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof hr?new Error(t.rawError):new Error(`Failed to send email: ${t.message}`)})}async fetchAllEmails(e){return this.httpClient.sendRequest(`/${fi}/tools/email/fetchAll`,{method:"POST",body:e}).catch(t=>{throw t instanceof hr?new Error(t.rawError):new Error(`Failed to fetch all emails: ${t.message}`)})}async fetchLatestEmail(e){return this.httpClient.sendRequest(`/${fi}/tools/email/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof hr?new Error(t.rawError):new Error(`Failed to fetch latest emails: ${t.message}`)})}};function ER(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var $c=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await ER(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 yi=class extends Nr{constructor(e){super(e)}async getElementLocation(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return zh.parse(o)}async evaluateAssertion(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${F}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return jh.parse(o)}};function Wc({orgId:r,client:e,gitMetadata:t,alwaysSaveCache:n,noCache:o}){return o?new Xs:new Xm(r,e,t,n)}var Xm=class{constructor(e,t,n,o){this.orgId=e;this.client=t;let{gitBranchName:i,gitProtectedBranches:a}=n;this.cacheHeaders=dd(n),o?this.writeCaches=!0:i?this.writeCaches=!a.includes(i):this.writeCaches=!0}cacheHeaders;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.error({err:o},"Failed to save mobile step cache entries")}}async resolveEntries(e){let{steps:t}=e.stepLists,n=await this.client.getMobileStepCacheForTest({testId:e.testId},this.cacheHeaders);if(!this.writeCaches){e.logger.debug("Skipping mobile cache last used at update because branch is protected");return}for(let i of[t])i&&bd({steps:i,stepCacheEntries:n,logger:e.logger});let{cachesToSave:o}=await Vn({steps:t,cacheCreationParams:{testId:e.testId,orgId:this.orgId}});this.client.updateMobileStepCaches({entries:o,testId:e.testId},this.cacheHeaders)}};import qc from"path";function P1(r){let e=new TR,t=qc.join(r,"metadata.json"),n=na.parse(JSON.parse(Jm.readFileSync(t,"utf-8")));e.addLocalFile(t);for(let o of Jm.readdirSync(qc.join(r,"runs"))){if(!o.endsWith(".zip"))continue;let i=o.replace(/\.zip$/,""),a=new TR(qc.join(r,"runs",o));for(let s of a.getEntries())s.isDirectory||e.addFile(qc.join("runs",i,s.entryName),s.getData())}return{runGroupId:n.id,buffer:e.toBuffer()}}async function Kc(r){let{client:e,consoleLogger:t,resultsPath:n}=r;if(!Jm.existsSync(n)){t.warn("Results path does not exist, skipping upload.");return}let o=new $c(e);try{let{runGroupId:i,buffer:a}=P1(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 I1 from"adm-zip";import dt from"fs";import Ft from"path";var Ka=class r{constructor(e){this.filePath=e;dt.rmSync(this.filePath,{recursive:!0,force:!0}),dt.mkdirSync(this.filePath,{recursive:!0})}cd(e){return new r(Ft.join(this.filePath,e))}mkdir(e){dt.mkdirSync(Ft.join(this.filePath,e),{recursive:!0})}readFile(e){let t=Ft.join(this.filePath,e);if(dt.existsSync(t))return dt.readFileSync(t)}storeFile(e){let{name:t,contents:n}=e,o=Ft.join(this.filePath,t);try{dt.writeFileSync(o,n)}catch{}}createFileStream(e){let t=Ft.join(this.filePath,e);return dt.createWriteStream(t)}createRunArchive(e){return new Zm(Ft.join(this.filePath,"runs"),e)}},Zm=class{constructor(e,t){this.filePath=e;this.tempPath=Ft.join(e,`.${t}`),this.finalPath=Ft.join(e,`${t}.zip`),dt.rmSync(this.tempPath,{recursive:!0,force:!0}),dt.rmSync(this.finalPath,{recursive:!0,force:!0}),dt.mkdirSync(this.tempPath,{recursive:!0})}tempPath;finalPath;readFile(e){let t=Ft.join(this.tempPath,e);if(dt.existsSync(t))return dt.readFileSync(t)}mkdir(e){dt.mkdirSync(Ft.join(this.tempPath,e),{recursive:!0})}cd(e){return new Ka(Ft.join(this.tempPath,e))}storeFile(e){let{name:t,contents:n}=e,o=Ft.join(this.tempPath,t);dt.writeFileSync(o,n)}createFileStream(e){let t=Ft.join(this.tempPath,e);return dt.createWriteStream(t)}close(){let e=new I1;e.addLocalFolder(this.tempPath,void 0,n=>n!==".DS_Store");let t=e.toBuffer();dt.writeFileSync(this.finalPath,t),dt.rmSync(this.tempPath,{recursive:!0,force:!0})}};import ru from"fs";import NR from"body-parser";import Y1 from"cors";import X1 from"dedent";import{Router as k1}from"express";import wt from"fs";import{globSync as D1}from"glob";import it from"path";import eg from"fs";import O1 from"path";var L1=new ul(30,60*1e3),ng="https://api.momentic.ai",tg,AR=r=>{ng=r},og=()=>ng,ig=()=>tg;var bi,rg,vR,wR=async r=>{if(tg&&bi&&vR)return bi;let e=new fr({baseUrl:ng,apiKey:r,logger:C});tg=e;try{let t=await e.getAuthInfo();return bi=t.orgId,rg=t.userId,vR=r,bi}catch(t){throw new Error(`Error checking API key against server: ${t}`)}},Ya=()=>{if(!bi)throw new Error("Your organization ID is invalid.");return bi},Yc=()=>{if(!rg)throw new Error("Your user ID is invalid.");return rg};var ag,Qm,RR=(r,e)=>{ag=r,Qm?.abort(),Qm=new AbortController;let t=Qm.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=O1.resolve(r.rootDir,o.envFile);try{if(eg.lstatSync(i).isSymbolicLink())return;eg.existsSync(i)&&n.push(i)}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`)}});try{N1({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){C.error({err:o},"Failed to start config file watchers")}},Qe=()=>ag;function N1({filesToWatch:r,revalidator:e,signal:t,project:n}){r.forEach(o=>{eg.watch(o,{signal:t,persistent:!1,recursive:!1},async(i,a)=>{a&&(L1.increment("setLocalProject")&&C.warn(`A file change under the ${n.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`),ag=await Promise.resolve(e(n.configFilePath)))})})}function et(r){return function(...e){let t=e[e.length-1],n=r(...e);Promise.resolve(n).catch(t)}}var Ja=k1();function Xa(r){let e=Qe(),t=it.dirname(e.configFilePath);return it.join(t,...r)}function U1(r){let e=Qe(),t=it.dirname(e.configFilePath),n=it.relative(t,r);return n?n.split(it.sep):[]}function F1(r,e){let t=wt.statSync(r),n=U1(r);return od.parse({name:e,absolutePath:r,relativePath:n.join(it.sep),pathSegments:n,isDirectory:t.isDirectory(),size:t.size,createdAt:t.birthtime,modifiedAt:t.mtime,accessedAt:t.atime})}Ja.post("/",et(async(r,e,t)=>{let n;try{n=Rf.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=Xa(n);if(!wt.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(it.sep)}`});return}if(!wt.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(it.sep)}`});return}let a=Qe(),s=Array.from(a.config.exclude??[]).concat(Gs),l=D1("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let p=it.join(o,d);return F1(p,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));Ja.put("/",et(async(r,e,t)=>{let n;try{n=Cf.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=Xa(n);if(wt.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(it.sep)}`,pathSegments:n});return}wt.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(it.sep)}`,pathSegments:n};e.status(201).json(i)}));Ja.patch("/",et(async(r,e,t)=>{let n,o;try{let l=xf.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=Xa(n),a=Xa(o);if(!wt.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(it.sep)}`});return}if(wt.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(it.sep)}`});return}let s=it.dirname(a);wt.existsSync(s)||wt.mkdirSync(s,{recursive:!0}),wt.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(it.sep)} to ${o.join(it.sep)}`,pathSegments:o};e.status(200).json(c)}));Ja.delete("/",et(async(r,e,t)=>{let n,o=!0;try{let c=_f.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=Xa(n);if(!wt.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(it.sep)}`,pathSegments:n});return}if(!wt.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(it.sep)}`});return}if(o)wt.rmSync(i,{recursive:!0,force:!0});else{if(wt.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}wt.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var sg=Ja;import J1 from"events";import kR,{Router as Z1}from"express";import Q1 from"http";import ez from"path";var Xc=class{sessions=new Map;registerSession(e,t){this.sessions.set(e,t)}getSession(e){return this.sessions.get(e)}async removeSession(e,t){let n=this.sessions.get(e);if(n)try{await n.cleanup?.(),t.info({sessionId:e,emulatorName:n.emulatorName},"Android emulator cleaned up")}catch(o){t.error({err:o},"Error during Android session cleanup")}finally{this.sessions.delete(e)}}async removeAllSessions(e){let t=Array.from(this.sessions.keys());await Promise.all(t.map(n=>this.removeSession(n,e)))}};var CR=new Xc;import{Router as H1}from"express";import{existsSync as G1}from"fs";import j1 from"path";import{hostname as B1}from"os";var z1="0.0.25",Rt=Rc({app:"mobile-desktop-server",hostname:B1(),disableConsoleLogs:!0}).child({cliVersion:z1});(async()=>{try{let r=await Im(Rt);r.gitBranchName&&Rt.addBinding("branch",r.gitBranchName)}catch{}})();var lg=H1();lg.get("/",et(async(r,e)=>{let t=ig();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));lg.post("/upload-url",et(async(r,e)=>{let t;try{t=Lf.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=ig();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=j1.resolve(t.filePath);if(!G1(o)){e.status(400).json({error:`File not found: ${o}`});return}await os({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:Rt}),e.sendStatus(204)}));var xR=lg;import{Router as V1}from"express";var _R=V1();_R.get("/",et(async(r,e)=>{let t=Qe(),n=await gr(t),o=new Set;n?.tests&&Object.values(n.tests).forEach(c=>{c.labels?.forEach(l=>o.add(l))});let i=Array.from(o).sort(),a=Object.values(n.mobileTests),s={labels:i,modules:[],tests:a};e.status(200).json(s)}));var MR=_R;import{Router as $1}from"express";var PR=$1();PR.get("/",(r,e)=>{e.status(200).json({userId:Yc(),orgId:Ya()})});var IR=PR;import{Router as W1}from"express";var Jc=W1();async function q1(r){return(await Ew(r,Rt)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){C.warn(`Found a dangling mobile module with ID ${n.moduleId} that could not be found on disk.`);return}return{...o,content:n}}).filter(n=>n!==void 0)}Jc.get("/",et(async(r,e)=>{let t=Qe(),n=await gr(t),o=await q1(n);e.status(200).json(o)}));Jc.get("/:moduleId",et(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await gr(Qe()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await Lm(n,t,C);e.json(o)}catch(o){e.status(400).json({err:o})}}));Jc.patch("/:moduleId/metadata",et(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t;try{t=Nf.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Qe(),o=await gr(n);bw({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:C,project:n}),e.status(201).json({message:"ok"})}));var OR=Jc;import{Router as K1}from"express";import cg from"path";var Zc=K1();Zc.patch("/:testPath",et(async(r,e)=>{let t=r.params.testPath;if(!t){e.status(400).json({error:"Missing testPath in path"});return}let n;try{n=Of.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}if(n.steps===void 0&&n.settings===void 0){e.status(400).json({error:"At least one of steps or settings is required"});return}let o=Qe(),i=t.endsWith(".test.yaml")?t:`${t}.test.yaml`,a=await gr(o);await vw({filePath:i,steps:n.steps,settings:n.settings,folder:o.rootDir,project:o,momenticFiles:a});let s={message:"ok"};e.status(200).json(s)}));Zc.post("/",et((r,e)=>{let t;try{t=If.parse(r.body)}catch(m){e.status(400).json({error:`Invalid request body: ${m}`});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{zu(n)}catch(m){e.status(400).json({error:m.message});return}let s=Qe(),c=cg.join(s.rootDir,...a),{fullPath:l,testId:u}=Tw({name:n,description:o,steps:[],settings:i,folder:c}),d=cg.basename(l),p=cg.relative(s.rootDir,l),g={id:u,fileName:d,fullPath:l,relativeFilePath:p};e.status(201).json(g)}));Zc.get("/:fileName",et(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=Qe(),i=await gr(o),s=await Uc(n,Rt,i);e.status(200).json(s)}));var LR=Zc;var Qc=class extends hi{constructor(t,n){super(t,n);this.client=t;this.orgId=n}async fetchEnvironment(t,n){let o=Qe();return Oc(t,o,C)}};var DR="10mb";async function UR(r){let{serverPort:e,apiKey:t,momenticServerUrl:n,staticDir:o,initialProject:i,driverLogLevel:a,alwaysSaveCache:s,noCache:c}=r;n&&AR(n),await wR(t);let l=Ya(),u=Yc(),d=r.logger.child({orgId:l,userId:u});RR(i,v=>za({configFilePath:v}));let p=kR();p.use(Y1()),p.use(NR.json({limit:DR})),p.use(NR.urlencoded({extended:!1,limit:DR}));let g=Z1();if(g.use("/folders",sg),g.use("/entities",MR),g.use("/identify",IR),g.use("/mobile-tests",LR),g.use("/mobile-modules",OR),g.use("/assets",xR),p.use("/api",g),p.use((v,A,P)=>{C.debug({url:v.url,path:v.path,query:v.query,method:v.method,body:v.body,headers:v.rawHeaders,client:v.ip},"Incoming request on mobile-desktop-server"),A.on("close",()=>{A.statusCode>=400&&(C.error({url:v.url,method:v.method,statusCode:A.statusCode},"Request completed in error on mobile-desktop-server"),Rt.error({url:v.url,method:v.method,statusCode:A.statusCode},"Request completed in error on mobile-desktop-server"))}),P()}),p.use((v,A,P,R)=>{if(v instanceof Error&&v.message.includes("BadRequestError: request aborted")){P.status(400).send("Client disconnected");return}C.error({stack:v.stack,msg:v.message,err:v,url:A.url,method:A.method},"Unhandled exception leading to 500 on mobile-desktop-server"),Rt.error({stack:v.stack,msg:v.message,err:v,url:A.url,method:A.method},"Unhandled exception leading to 500 on mobile-desktop-server"),P.status(500).send(`Internal Server Error: ${v.message}`)}),o){let v=kR.static(o,{setHeaders:A=>{A.setHeader("Cache-Control","no-cache")},redirect:!1});p.use(v),p.use("*",(A,P)=>{P.sendFile(ez.join(o,"index.html"))})}let m=Q1.createServer(p),h=`http://localhost:${e}`;await new Promise(v=>{try{m.listen(e,()=>{d.info(`Mobile desktop server is running at ${h}`),v()})}catch(A){A.message.includes("EADDRINUSE")?tz(e):C.error(`An unexpected error occurred while starting the server: ${A.message}`),process.exit(1)}});let b={type:"API_KEY",baseUrl:og(),apiKey:t,logger:d},E=new fr(b),{dispose:_}=ZA({baseServer:m,logger:d,authorization:b,globalStateManager:CR,getOrgId:()=>Ya(),androidDriverFactory:async({socket:v,logger:A,creationOpts:P})=>{let R=Math.floor(Math.random()*1e4)+4e4,w=await Ic(R,"appium");return ns({logger:A,driverLogLevel:a,apiClient:E,creationOpts:P,socket:v,appiumPort:w,onStatusUpdate:B=>{v.emit("connectionStatusUpdate",{message:B})}})},mobileGeneratorFactory:async v=>new yi({baseUrl:og(),apiKey:t,logger:d}),browserGeneratorFactory:async v=>new So({},b),browserEnricherFactory:async v=>new gi(b,new So({},b)),storageFactory:async v=>new Qc(E,v),cacheStorageFactory:async v=>{let A=Qe(),P=await Nc(d,E,A);return Wc({orgId:v,client:E,gitMetadata:P,noCache:c,alwaysSaveCache:s})},localToolsFactory:async()=>new Si({httpClient:E,fakerSeed:void 0}),keepSessionAlive:v=>E.extendAndroidEmulatorTtl(v),settingsFactory:async()=>({emulator:Qe().config.emulator})});process.once("SIGUSR2",async()=>{return;try{await _(),await kt.flush()}catch(v){C.error({err:v},"Error during session dispose on SIGUSR2")}try{m.close(()=>{process.kill(process.pid,"SIGUSR2")})}catch{process.kill(process.pid,"SIGUSR2")}}),process.once("SIGTERM",async()=>{C.info("SIGTERM in Momentic mobile app received");try{await _(),await kt.flush()}finally{m.close(()=>process.exit(0))}}),process.once("SIGINT",async()=>{C.info("SIGINT in Momentic mobile app received");try{await _(),await kt.flush()}finally{m.close(()=>process.exit(0))}})}J1.setMaxListeners(20);process.on("warning",r=>{Rt.warn({err:r},`Node warning received on mobile-desktop-server: ${r.message}`)});process.on("uncaughtException",r=>{Rt.error({err:r},"Uncaught exception on mobile-desktop-server"),C.error(`Oh no! The Momentic mobile desktop app encountered a fatal error \u{1F61E}. Error logs: ${r.message}`)});process.on("unhandledRejection",r=>{Rt.error({reason:`${r}`,stack:r?.stack},"Uncaught exception on mobile-desktop-server (promise rejection)"),C.error(`Oh no! The Momentic mobile desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${r}`)});function tz(r){C.error(X1`Port ${r} is already in use by another process. Please close the other process and try again.
3991
+ `&&n++}}return[e,t]}var ru=class extends TransformStream{constructor({onError:e,onRetry:t,onComment:n}={}){let o;super({start(i){o=AC({onEvent:a=>{i.enqueue(a)},onError(a){e==="terminate"?i.error(a):typeof e=="function"&&e(a)},onRetry:t,onComment:n})},transform(i){o.feed(i)}})}};import*as OC from"zod/v4";function wC(...r){return r.reduce((e,t)=>({...e,...t??{}}),{})}function nu(r){return Object.fromEntries([...r.headers])}var Cz=({prefix:r,size:e=16,alphabet:t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",separator:n="-"}={})=>{let o=()=>{let i=t.length,a=new Array(e);for(let s=0;s<e;s++)a[s]=t[Math.random()*i|0];return a.join("")};if(r==null)return o;if(t.includes(n))throw new eu({argument:"separator",message:`The separator "${n}" must not be part of the alphabet "${t}".`});return()=>`${r}${n}${o()}`},ou=Cz();function bh(r){return(r instanceof Error||r instanceof DOMException)&&(r.name==="AbortError"||r.name==="ResponseAborted"||r.name==="TimeoutError")}var xz=["fetch failed","failed to fetch"];function _z({error:r,url:e,requestBodyValues:t}){if(bh(r))return r;if(r instanceof TypeError&&xz.includes(r.message.toLowerCase())){let n=r.cause;if(n!=null)return new ur({message:`Cannot connect to API: ${n.message}`,cause:n,url:e,requestBodyValues:t,isRetryable:!0})}return r}function Mz(r){return Object.fromEntries(Object.entries(r).filter(([e,t])=>t!=null))}function RC({apiKey:r,environmentVariableName:e,apiKeyParameterName:t="apiKey",description:n}){if(typeof r=="string")return r;if(r!=null)throw new ns({message:`${n} API key must be a string.`});if(typeof process>"u")throw new ns({message:`${n} API key is missing. Pass it using the '${t}' parameter. Environment variables is not supported in this environment.`});if(r=process.env[e],r==null)throw new ns({message:`${n} API key is missing. Pass it using the '${t}' parameter or the ${e} environment variable.`});if(typeof r!="string")throw new ns({message:`${n} API key must be a string. The value of the ${e} environment variable is not a string.`});return r}var Iz=/"__proto__"\s*:/,Pz=/"constructor"\s*:/;function Oz(r){let e=JSON.parse(r);return e===null||typeof e!="object"||Iz.test(r)===!1&&Pz.test(r)===!1?e:Lz(e)}function Lz(r){let e=[r];for(;e.length;){let t=e;e=[];for(let n of t){if(Object.prototype.hasOwnProperty.call(n,"__proto__"))throw new SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(n,"constructor")&&Object.prototype.hasOwnProperty.call(n.constructor,"prototype"))throw new SyntaxError("Object contains forbidden prototype property");for(let o in n){let i=n[o];i&&typeof i=="object"&&e.push(i)}}}return r}function CC(r){let{stackTraceLimit:e}=Error;Error.stackTraceLimit=0;try{return Oz(r)}finally{Error.stackTraceLimit=e}}var Eh=Symbol.for("vercel.ai.validator");function Nz(r){return{[Eh]:!0,validate:r}}function kz(r){return typeof r=="object"&&r!==null&&Eh in r&&r[Eh]===!0&&"validate"in r}function Dz(r){return kz(r)?r:Uz(r)}function Uz(r){return Nz(async e=>{let t=await r["~standard"].validate(e);return t.issues==null?{success:!0,value:t.value}:{success:!1,error:new On({value:e,cause:t.issues})}})}async function Fz({value:r,schema:e}){let t=await Th({value:r,schema:e});if(!t.success)throw On.wrap({value:r,cause:t.error});return t.value}async function Th({value:r,schema:e}){let t=Dz(e);try{if(t.validate==null)return{success:!0,value:r,rawValue:r};let n=await t.validate(r);return n.success?{success:!0,value:n.value,rawValue:r}:{success:!1,error:On.wrap({value:r,cause:n.error}),rawValue:r}}catch(n){return{success:!1,error:On.wrap({value:r,cause:n}),rawValue:r}}}async function Bz({text:r,schema:e}){try{let t=CC(r);return e==null?t:Fz({value:t,schema:e})}catch(t){throw rs.isInstance(t)||On.isInstance(t)?t:new rs({text:r,cause:t})}}async function xC({text:r,schema:e}){try{let t=CC(r);return e==null?{success:!0,value:t,rawValue:t}:await Th({value:t,schema:e})}catch(t){return{success:!1,error:rs.isInstance(t)?t:new rs({text:r,cause:t}),rawValue:void 0}}}function zz({stream:r,schema:e}){return r.pipeThrough(new TextDecoderStream).pipeThrough(new ru).pipeThrough(new TransformStream({async transform({data:t},n){t!=="[DONE]"&&n.enqueue(await xC({text:t,schema:e}))}}))}async function Ai({provider:r,providerOptions:e,schema:t}){if(e?.[r]==null)return;let n=await Th({value:e[r],schema:t});if(!n.success)throw new eu({argument:"providerOptions",message:`invalid ${r} provider options`,cause:n.error});return n.value}var Hz=()=>globalThis.fetch,vh=async({url:r,headers:e,body:t,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>Gz({url:r,headers:{"Content-Type":"application/json",...e},body:{content:JSON.stringify(t),values:t},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a});var Gz=async({url:r,headers:e={},body:t,successfulResponseHandler:n,failedResponseHandler:o,abortSignal:i,fetch:a=Hz()})=>{try{let s=await a(r,{method:"POST",headers:Mz(e),body:t.content,signal:i}),c=nu(s);if(!s.ok){let l;try{l=await o({response:s,url:r,requestBodyValues:t.values})}catch(u){throw bh(u)||ur.isInstance(u)?u:new ur({message:"Failed to process error response",cause:u,statusCode:s.status,url:r,responseHeaders:c,requestBodyValues:t.values})}throw l.value}try{return await n({response:s,url:r,requestBodyValues:t.values})}catch(l){throw l instanceof Error&&(bh(l)||ur.isInstance(l))?l:new ur({message:"Failed to process successful response",cause:l,statusCode:s.status,url:r,responseHeaders:c,requestBodyValues:t.values})}}catch(s){throw _z({error:s,url:r,requestBodyValues:t.values})}};function Bt({id:r,name:e,inputSchema:t}){return({execute:n,outputSchema:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:r,name:e,args:l,inputSchema:t,outputSchema:o,execute:n,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}function iu({id:r,name:e,inputSchema:t,outputSchema:n}){return({execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:r,name:e,args:l,inputSchema:t,outputSchema:n,execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}async function _C(r){return typeof r=="function"&&(r=r()),Promise.resolve(r)}var MC=({errorSchema:r,errorToMessage:e,isRetryable:t})=>async({response:n,url:o,requestBodyValues:i})=>{let a=await n.text(),s=nu(n);if(a.trim()==="")return{responseHeaders:s,value:new ur({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:t?.(n)})};try{let c=await Bz({text:a,schema:r});return{responseHeaders:s,value:new ur({message:e(c),url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,data:c,isRetryable:t?.(n,c)})}}catch{return{responseHeaders:s,value:new ur({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:t?.(n)})}}},IC=r=>async({response:e})=>{let t=nu(e);if(e.body==null)throw new nC({});return{responseHeaders:t,value:zz({stream:e.body,schema:r})}};var PC=r=>async({response:e,url:t,requestBodyValues:n})=>{let o=await e.text(),i=await xC({text:o,schema:r}),a=nu(e);if(!i.success)throw new ur({message:"Invalid JSON response",cause:i.error,statusCode:e.status,responseHeaders:a,responseBody:o,url:t,requestBodyValues:n});return{responseHeaders:a,value:i.value,rawValue:i.rawValue}};var YPe=Symbol.for("vercel.ai.schema");var{btoa:jz,atob:XPe}=globalThis;function Vz(r){let e="";for(let t=0;t<r.length;t++)e+=String.fromCodePoint(r[t]);return jz(e)}function Ah(r){return r instanceof Uint8Array?Vz(r):r}function LC(r){return r?.replace(/\/$/,"")}import{z as T}from"zod/v4";import{z as os}from"zod/v4";import{z as jt}from"zod/v4";import{z as qe}from"zod/v4";import{z as Ro}from"zod/v4";import wh from"zod/v4";import Rh from"zod/v4";import{z as is}from"zod/v4";import{z as dr}from"zod/v4";import{z as en}from"zod/v4";import{z as tn}from"zod/v4";import{z as rn}from"zod/v4";var Wz=os.object({type:os.literal("error"),error:os.object({type:os.string(),message:os.string()})}),NC=MC({errorSchema:Wz,errorToMessage:r=>r.error.message}),kC=jt.object({citations:jt.object({enabled:jt.boolean()}).optional(),title:jt.string().optional(),context:jt.string().optional()}),$z=jt.object({sendReasoning:jt.boolean().optional(),thinking:jt.object({type:jt.union([jt.literal("enabled"),jt.literal("disabled")]),budgetTokens:jt.number().optional()}).optional(),disableParallelToolUse:jt.boolean().optional()});function Ln(r){var e;let t=r?.anthropic;return(e=t?.cacheControl)!=null?e:t?.cache_control}var qz=qe.object({maxUses:qe.number().optional(),allowedDomains:qe.array(qe.string()).optional(),blockedDomains:qe.array(qe.string()).optional(),userLocation:qe.object({type:qe.literal("approximate"),city:qe.string().optional(),region:qe.string().optional(),country:qe.string().optional(),timezone:qe.string().optional()}).optional()}),FC=qe.array(qe.object({url:qe.string(),title:qe.string(),pageAge:qe.string().nullable(),encryptedContent:qe.string(),type:qe.string()})),Kz=iu({id:"anthropic.web_search_20250305",name:"web_search",inputSchema:qe.object({query:qe.string()}),outputSchema:FC}),Yz=(r={})=>Kz(r);function Xz(r){return typeof r=="object"&&r!==null&&"type"in r&&r.type==="web_search_20250305"}function Jz({tools:r,toolChoice:e,disableParallelToolUse:t}){r=r?.length?r:void 0;let n=[],o=new Set;if(r==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n,betas:o};let i=[];for(let s of r){if(Xz(s)){i.push(s);continue}switch(s.type){case"function":let c=Ln(s.providerOptions);i.push({name:s.name,description:s.description,input_schema:s.inputSchema,cache_control:c});break;case"provider-defined":switch(s.id){case"anthropic.computer_20250124":o.add("computer-use-2025-01-24"),i.push({name:"computer",type:"computer_20250124",display_width_px:s.args.displayWidthPx,display_height_px:s.args.displayHeightPx,display_number:s.args.displayNumber});break;case"anthropic.computer_20241022":o.add("computer-use-2024-10-22"),i.push({name:"computer",type:"computer_20241022",display_width_px:s.args.displayWidthPx,display_height_px:s.args.displayHeightPx,display_number:s.args.displayNumber});break;case"anthropic.text_editor_20250124":o.add("computer-use-2025-01-24"),i.push({name:"str_replace_editor",type:"text_editor_20250124"});break;case"anthropic.text_editor_20241022":o.add("computer-use-2024-10-22"),i.push({name:"str_replace_editor",type:"text_editor_20241022"});break;case"anthropic.text_editor_20250429":o.add("computer-use-2025-01-24"),i.push({name:"str_replace_based_edit_tool",type:"text_editor_20250429"});break;case"anthropic.bash_20250124":o.add("computer-use-2025-01-24"),i.push({name:"bash",type:"bash_20250124"});break;case"anthropic.bash_20241022":o.add("computer-use-2024-10-22"),i.push({name:"bash",type:"bash_20241022"});break;case"anthropic.web_search_20250305":{let l=qz.parse(s.args);i.push({type:"web_search_20250305",name:"web_search",max_uses:l.maxUses,allowed_domains:l.allowedDomains,blocked_domains:l.blockedDomains,user_location:l.userLocation});break}case"anthropic.code_execution_20250522":{o.add("code-execution-2025-05-22"),i.push({type:"code_execution_20250522",name:"code_execution"});break}default:n.push({type:"unsupported-tool",tool:s});break}break;default:n.push({type:"unsupported-tool",tool:s});break}}if(e==null)return{tools:i,toolChoice:t?{type:"auto",disable_parallel_tool_use:t}:void 0,toolWarnings:n,betas:o};let a=e.type;switch(a){case"auto":return{tools:i,toolChoice:{type:"auto",disable_parallel_tool_use:t},toolWarnings:n,betas:o};case"required":return{tools:i,toolChoice:{type:"any",disable_parallel_tool_use:t},toolWarnings:n,betas:o};case"none":return{tools:void 0,toolChoice:void 0,toolWarnings:n,betas:o};case"tool":return{tools:i,toolChoice:{type:"tool",name:e.toolName,disable_parallel_tool_use:t},toolWarnings:n,betas:o};default:{let s=a;throw new jr({functionality:`tool choice type: ${s}`})}}}var BC=Ro.object({type:Ro.literal("code_execution_result"),stdout:Ro.string(),stderr:Ro.string(),return_code:Ro.number()}),Zz=iu({id:"anthropic.code_execution_20250522",name:"code_execution",inputSchema:Ro.object({code:Ro.string()}),outputSchema:BC}),Qz=(r={})=>Zz(r);function eH(r){if(typeof r=="string")return Buffer.from(r,"base64").toString("utf-8");if(r instanceof Uint8Array)return new TextDecoder().decode(r);throw r instanceof URL?new jr({functionality:"URL-based text documents are not supported for citations"}):new jr({functionality:`unsupported data type for text documents: ${typeof r}`})}async function tH({prompt:r,sendReasoning:e,warnings:t}){var n,o,i,a,s;let c=new Set,l=rH(r),u,d=[];async function p(m){var g,f;let E=await Ai({provider:"anthropic",providerOptions:m,schema:kC});return(f=(g=E?.citations)==null?void 0:g.enabled)!=null?f:!1}async function h(m){let g=await Ai({provider:"anthropic",providerOptions:m,schema:kC});return{title:g?.title,context:g?.context}}for(let m=0;m<l.length;m++){let g=l[m],f=m===l.length-1,E=g.type;switch(E){case"system":{if(u!=null)throw new jr({functionality:"Multiple system messages that are separated by user/assistant messages"});u=g.messages.map(({content:S,providerOptions:R})=>({type:"text",text:S,cache_control:Ln(R)}));break}case"user":{let S=[];for(let R of g.messages){let{role:A,content:v}=R;switch(A){case"user":{for(let P=0;P<v.length;P++){let C=v[P],w=P===v.length-1,B=(n=Ln(C.providerOptions))!=null?n:w?Ln(R.providerOptions):void 0;switch(C.type){case"text":{S.push({type:"text",text:C.text,cache_control:B});break}case"file":{if(C.mediaType.startsWith("image/"))S.push({type:"image",source:C.data instanceof URL?{type:"url",url:C.data.toString()}:{type:"base64",media_type:C.mediaType==="image/*"?"image/jpeg":C.mediaType,data:Ah(C.data)},cache_control:B});else if(C.mediaType==="application/pdf"){c.add("pdfs-2024-09-25");let U=await p(C.providerOptions),D=await h(C.providerOptions);S.push({type:"document",source:C.data instanceof URL?{type:"url",url:C.data.toString()}:{type:"base64",media_type:"application/pdf",data:Ah(C.data)},title:(o=D.title)!=null?o:C.filename,...D.context&&{context:D.context},...U&&{citations:{enabled:!0}},cache_control:B})}else if(C.mediaType==="text/plain"){let U=await p(C.providerOptions),D=await h(C.providerOptions);S.push({type:"document",source:C.data instanceof URL?{type:"url",url:C.data.toString()}:{type:"text",media_type:"text/plain",data:eH(C.data)},title:(i=D.title)!=null?i:C.filename,...D.context&&{context:D.context},...U&&{citations:{enabled:!0}},cache_control:B})}else throw new jr({functionality:`media type: ${C.mediaType}`});break}}}break}case"tool":{for(let P=0;P<v.length;P++){let C=v[P],w=P===v.length-1,B=(a=Ln(C.providerOptions))!=null?a:w?Ln(R.providerOptions):void 0,U=C.output,D;switch(U.type){case"content":D=U.value.map(J=>{switch(J.type){case"text":return{type:"text",text:J.text,cache_control:void 0};case"media":{if(J.mediaType.startsWith("image/"))return{type:"image",source:{type:"base64",media_type:J.mediaType,data:J.data},cache_control:void 0};throw new jr({functionality:`media type: ${J.mediaType}`})}}});break;case"text":case"error-text":D=U.value;break;case"json":case"error-json":default:D=JSON.stringify(U.value);break}S.push({type:"tool_result",tool_use_id:C.toolCallId,content:D,is_error:U.type==="error-text"||U.type==="error-json"?!0:void 0,cache_control:B})}break}default:{let P=A;throw new Error(`Unsupported role: ${P}`)}}}d.push({role:"user",content:S});break}case"assistant":{let S=[];for(let R=0;R<g.messages.length;R++){let A=g.messages[R],v=R===g.messages.length-1,{content:P}=A;for(let C=0;C<P.length;C++){let w=P[C],B=C===P.length-1,U=(s=Ln(w.providerOptions))!=null?s:B?Ln(A.providerOptions):void 0;switch(w.type){case"text":{S.push({type:"text",text:f&&v&&B?w.text.trim():w.text,cache_control:U});break}case"reasoning":{if(e){let D=await Ai({provider:"anthropic",providerOptions:w.providerOptions,schema:sH});D!=null?D.signature!=null?S.push({type:"thinking",thinking:w.text,signature:D.signature,cache_control:U}):D.redactedData!=null?S.push({type:"redacted_thinking",data:D.redactedData,cache_control:U}):t.push({type:"other",message:"unsupported reasoning metadata"}):t.push({type:"other",message:"unsupported reasoning metadata"})}else t.push({type:"other",message:"sending reasoning content is disabled for this model"});break}case"tool-call":{if(w.providerExecuted){if(w.toolName==="web_search"){S.push({type:"server_tool_use",id:w.toolCallId,name:"web_search",input:w.input,cache_control:U});break}if(w.toolName==="code_execution"){S.push({type:"server_tool_use",id:w.toolCallId,name:"code_execution",input:w.input,cache_control:U});break}t.push({type:"other",message:`provider executed tool call for tool ${w.toolName} is not supported`});break}S.push({type:"tool_use",id:w.toolCallId,name:w.toolName,input:w.input,cache_control:U});break}case"tool-result":{if(w.toolName==="web_search"){let D=w.output;if(D.type!=="json"){t.push({type:"other",message:`provider executed tool result output type ${D.type} for tool ${w.toolName} is not supported`});break}let J=FC.parse(D.value);S.push({type:"web_search_tool_result",tool_use_id:w.toolCallId,content:J.map(Le=>({url:Le.url,title:Le.title,page_age:Le.pageAge,encrypted_content:Le.encryptedContent,type:Le.type})),cache_control:U});break}if(w.toolName==="code_execution"){let D=w.output;if(D.type!=="json"){t.push({type:"other",message:`provider executed tool result output type ${D.type} for tool ${w.toolName} is not supported`});break}let J=BC.parse(D.value);S.push({type:"code_execution_tool_result",tool_use_id:w.toolCallId,content:{type:J.type,stdout:J.stdout,stderr:J.stderr,return_code:J.return_code},cache_control:U});break}t.push({type:"other",message:`provider executed tool result for tool ${w.toolName} is not supported`});break}}}}d.push({role:"assistant",content:S});break}default:{let S=E;throw new Error(`content type: ${S}`)}}}return{prompt:{system:u,messages:d},betas:c}}function rH(r){let e=[],t;for(let n of r){let{role:o}=n;switch(o){case"system":{t?.type!=="system"&&(t={type:"system",messages:[]},e.push(t)),t.messages.push(n);break}case"assistant":{t?.type!=="assistant"&&(t={type:"assistant",messages:[]},e.push(t)),t.messages.push(n);break}case"user":{t?.type!=="user"&&(t={type:"user",messages:[]},e.push(t)),t.messages.push(n);break}case"tool":{t?.type!=="user"&&(t={type:"user",messages:[]},e.push(t)),t.messages.push(n);break}default:{let i=o;throw new Error(`Unsupported role: ${i}`)}}}return e}function DC({finishReason:r,isJsonResponseFromTool:e}){switch(r){case"end_turn":case"stop_sequence":return"stop";case"tool_use":return e?"stop":"tool-calls";case"max_tokens":return"length";default:return"unknown"}}var as={webSearchResult:T.object({type:T.literal("web_search_result_location"),cited_text:T.string(),url:T.string(),title:T.string(),encrypted_index:T.string()}),pageLocation:T.object({type:T.literal("page_location"),cited_text:T.string(),document_index:T.number(),document_title:T.string().nullable(),start_page_number:T.number(),end_page_number:T.number()}),charLocation:T.object({type:T.literal("char_location"),cited_text:T.string(),document_index:T.number(),document_title:T.string().nullable(),start_char_index:T.number(),end_char_index:T.number()})},zC=T.discriminatedUnion("type",[as.webSearchResult,as.pageLocation,as.charLocation]),hOe=T.discriminatedUnion("type",[as.pageLocation,as.charLocation]);function UC(r,e,t,n){if(r.type==="page_location"||r.type==="char_location"){let o=nH(r,e,t);o&&n(o)}}function nH(r,e,t){var n;let o=e[r.document_index];if(!o)return null;let i=r.type==="page_location"?{citedText:r.cited_text,startPageNumber:r.start_page_number,endPageNumber:r.end_page_number}:{citedText:r.cited_text,startCharIndex:r.start_char_index,endCharIndex:r.end_char_index};return{type:"source",sourceType:"document",id:t(),mediaType:o.mediaType,title:(n=r.document_title)!=null?n:o.title,filename:o.filename,providerMetadata:{anthropic:i}}}var oH=class{constructor(r,e){this.specificationVersion="v2";var t;this.modelId=r,this.config=e,this.generateId=(t=e.generateId)!=null?t:ou}supportsUrl(r){return r.protocol==="https:"}get provider(){return this.config.provider}get supportedUrls(){var r,e,t;return(t=(e=(r=this.config).supportedUrls)==null?void 0:e.call(r))!=null?t:{}}async getArgs({prompt:r,maxOutputTokens:e=4096,temperature:t,topP:n,topK:o,frequencyPenalty:i,presencePenalty:a,stopSequences:s,responseFormat:c,seed:l,tools:u,toolChoice:d,providerOptions:p}){var h,m,g;let f=[];i!=null&&f.push({type:"unsupported-setting",setting:"frequencyPenalty"}),a!=null&&f.push({type:"unsupported-setting",setting:"presencePenalty"}),l!=null&&f.push({type:"unsupported-setting",setting:"seed"}),c?.type==="json"&&(c.schema==null?f.push({type:"unsupported-setting",setting:"responseFormat",details:"JSON response format requires a schema. The response format is ignored."}):u!=null&&f.push({type:"unsupported-setting",setting:"tools",details:"JSON response format does not support tools. The provided tools are ignored."}));let E=c?.type==="json"&&c.schema!=null?{type:"function",name:"json",description:"Respond with a JSON object.",inputSchema:c.schema}:void 0,S=await Ai({provider:"anthropic",providerOptions:p,schema:$z}),{prompt:R,betas:A}=await tH({prompt:r,sendReasoning:(h=S?.sendReasoning)!=null?h:!0,warnings:f}),v=((m=S?.thinking)==null?void 0:m.type)==="enabled",P=(g=S?.thinking)==null?void 0:g.budgetTokens,C={model:this.modelId,max_tokens:e,temperature:t,top_k:o,top_p:n,stop_sequences:s,...v&&{thinking:{type:"enabled",budget_tokens:P}},system:R.system,messages:R.messages};if(v){if(P==null)throw new jr({functionality:"thinking requires a budget"});C.temperature!=null&&(C.temperature=void 0,f.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported when thinking is enabled"})),o!=null&&(C.top_k=void 0,f.push({type:"unsupported-setting",setting:"topK",details:"topK is not supported when thinking is enabled"})),n!=null&&(C.top_p=void 0,f.push({type:"unsupported-setting",setting:"topP",details:"topP is not supported when thinking is enabled"})),C.max_tokens=e+P}let{tools:w,toolChoice:B,toolWarnings:U,betas:D}=Jz(E!=null?{tools:[E],toolChoice:{type:"tool",toolName:E.name},disableParallelToolUse:S?.disableParallelToolUse}:{tools:u??[],toolChoice:d,disableParallelToolUse:S?.disableParallelToolUse});return{args:{...C,tools:w,tool_choice:B},warnings:[...f,...U],betas:new Set([...A,...D]),usesJsonResponseTool:E!=null}}async getHeaders({betas:r,headers:e}){return wC(await _C(this.config.headers),r.size>0?{"anthropic-beta":Array.from(r).join(",")}:{},e)}buildRequestUrl(r){var e,t,n;return(n=(t=(e=this.config).buildRequestUrl)==null?void 0:t.call(e,this.config.baseURL,r))!=null?n:`${this.config.baseURL}/messages`}transformRequestBody(r){var e,t,n;return(n=(t=(e=this.config).transformRequestBody)==null?void 0:t.call(e,r))!=null?n:r}extractCitationDocuments(r){let e=t=>{var n,o;if(t.type!=="file"||t.mediaType!=="application/pdf"&&t.mediaType!=="text/plain")return!1;let i=(n=t.providerOptions)==null?void 0:n.anthropic,a=i?.citations;return(o=a?.enabled)!=null?o:!1};return r.filter(t=>t.role==="user").flatMap(t=>t.content).filter(e).map(t=>{var n;let o=t;return{title:(n=o.filename)!=null?n:"Untitled Document",filename:o.filename,mediaType:o.mediaType}})}async doGenerate(r){var e,t,n,o,i;let{args:a,warnings:s,betas:c,usesJsonResponseTool:l}=await this.getArgs(r),u=this.extractCitationDocuments(r.prompt),{responseHeaders:d,value:p,rawValue:h}=await vh({url:this.buildRequestUrl(!1),headers:await this.getHeaders({betas:c,headers:r.headers}),body:this.transformRequestBody(a),failedResponseHandler:NC,successfulResponseHandler:PC(iH),abortSignal:r.abortSignal,fetch:this.config.fetch}),m=[];for(let g of p.content)switch(g.type){case"text":{if(!l&&(m.push({type:"text",text:g.text}),g.citations))for(let f of g.citations)UC(f,u,this.generateId,E=>m.push(E));break}case"thinking":{m.push({type:"reasoning",text:g.thinking,providerMetadata:{anthropic:{signature:g.signature}}});break}case"redacted_thinking":{m.push({type:"reasoning",text:"",providerMetadata:{anthropic:{redactedData:g.data}}});break}case"tool_use":{m.push(l?{type:"text",text:JSON.stringify(g.input)}:{type:"tool-call",toolCallId:g.id,toolName:g.name,input:JSON.stringify(g.input)});break}case"server_tool_use":{(g.name==="web_search"||g.name==="code_execution")&&m.push({type:"tool-call",toolCallId:g.id,toolName:g.name,input:JSON.stringify(g.input),providerExecuted:!0});break}case"web_search_tool_result":{if(Array.isArray(g.content)){m.push({type:"tool-result",toolCallId:g.tool_use_id,toolName:"web_search",result:g.content.map(f=>{var E;return{url:f.url,title:f.title,pageAge:(E=f.page_age)!=null?E:null,encryptedContent:f.encrypted_content,type:f.type}}),providerExecuted:!0});for(let f of g.content)m.push({type:"source",sourceType:"url",id:this.generateId(),url:f.url,title:f.title,providerMetadata:{anthropic:{pageAge:(e=f.page_age)!=null?e:null}}})}else m.push({type:"tool-result",toolCallId:g.tool_use_id,toolName:"web_search",isError:!0,result:{type:"web_search_tool_result_error",errorCode:g.content.error_code},providerExecuted:!0});break}case"code_execution_tool_result":{g.content.type==="code_execution_result"?m.push({type:"tool-result",toolCallId:g.tool_use_id,toolName:"code_execution",result:{type:g.content.type,stdout:g.content.stdout,stderr:g.content.stderr,return_code:g.content.return_code},providerExecuted:!0}):g.content.type==="code_execution_tool_result_error"&&m.push({type:"tool-result",toolCallId:g.tool_use_id,toolName:"code_execution",isError:!0,result:{type:"code_execution_tool_result_error",errorCode:g.content.error_code},providerExecuted:!0});break}}return{content:m,finishReason:DC({finishReason:p.stop_reason,isJsonResponseFromTool:l}),usage:{inputTokens:p.usage.input_tokens,outputTokens:p.usage.output_tokens,totalTokens:p.usage.input_tokens+p.usage.output_tokens,cachedInputTokens:(t=p.usage.cache_read_input_tokens)!=null?t:void 0},request:{body:a},response:{id:(n=p.id)!=null?n:void 0,modelId:(o=p.model)!=null?o:void 0,headers:d,body:h},warnings:s,providerMetadata:{anthropic:{usage:p.usage,cacheCreationInputTokens:(i=p.usage.cache_creation_input_tokens)!=null?i:null}}}}async doStream(r){let{args:e,warnings:t,betas:n,usesJsonResponseTool:o}=await this.getArgs(r),i=this.extractCitationDocuments(r.prompt),a={...e,stream:!0},{responseHeaders:s,value:c}=await vh({url:this.buildRequestUrl(!0),headers:await this.getHeaders({betas:n,headers:r.headers}),body:this.transformRequestBody(a),failedResponseHandler:NC,successfulResponseHandler:IC(aH),abortSignal:r.abortSignal,fetch:this.config.fetch}),l="unknown",u={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},d={},p,h,m=this.generateId;return{stream:c.pipeThrough(new TransformStream({start(g){g.enqueue({type:"stream-start",warnings:t})},transform(g,f){var E,S,R,A,v,P,C;if(r.includeRawChunks&&f.enqueue({type:"raw",rawValue:g.rawValue}),!g.success){f.enqueue({type:"error",error:g.error});return}let w=g.value;switch(w.type){case"ping":return;case"content_block_start":{let B=w.content_block.type;switch(h=B,B){case"text":{d[w.index]={type:"text"},f.enqueue({type:"text-start",id:String(w.index)});return}case"thinking":{d[w.index]={type:"reasoning"},f.enqueue({type:"reasoning-start",id:String(w.index)});return}case"redacted_thinking":{d[w.index]={type:"reasoning"},f.enqueue({type:"reasoning-start",id:String(w.index),providerMetadata:{anthropic:{redactedData:w.content_block.data}}});return}case"tool_use":{d[w.index]=o?{type:"text"}:{type:"tool-call",toolCallId:w.content_block.id,toolName:w.content_block.name,input:""},f.enqueue(o?{type:"text-start",id:String(w.index)}:{type:"tool-input-start",id:w.content_block.id,toolName:w.content_block.name});return}case"server_tool_use":{(w.content_block.name==="web_search"||w.content_block.name==="code_execution")&&(d[w.index]={type:"tool-call",toolCallId:w.content_block.id,toolName:w.content_block.name,input:"",providerExecuted:!0},f.enqueue({type:"tool-input-start",id:w.content_block.id,toolName:w.content_block.name,providerExecuted:!0}));return}case"web_search_tool_result":{let U=w.content_block;if(Array.isArray(U.content)){f.enqueue({type:"tool-result",toolCallId:U.tool_use_id,toolName:"web_search",result:U.content.map(D=>{var J;return{url:D.url,title:D.title,pageAge:(J=D.page_age)!=null?J:null,encryptedContent:D.encrypted_content,type:D.type}}),providerExecuted:!0});for(let D of U.content)f.enqueue({type:"source",sourceType:"url",id:m(),url:D.url,title:D.title,providerMetadata:{anthropic:{pageAge:(E=D.page_age)!=null?E:null}}})}else f.enqueue({type:"tool-result",toolCallId:U.tool_use_id,toolName:"web_search",isError:!0,result:{type:"web_search_tool_result_error",errorCode:U.content.error_code},providerExecuted:!0});return}case"code_execution_tool_result":{let U=w.content_block;U.content.type==="code_execution_result"?f.enqueue({type:"tool-result",toolCallId:U.tool_use_id,toolName:"code_execution",result:{type:U.content.type,stdout:U.content.stdout,stderr:U.content.stderr,return_code:U.content.return_code},providerExecuted:!0}):U.content.type==="code_execution_tool_result_error"&&f.enqueue({type:"tool-result",toolCallId:U.tool_use_id,toolName:"code_execution",isError:!0,result:{type:"code_execution_tool_result_error",errorCode:U.content.error_code},providerExecuted:!0});return}default:{let U=B;throw new Error(`Unsupported content block type: ${U}`)}}}case"content_block_stop":{if(d[w.index]!=null){let B=d[w.index];switch(B.type){case"text":{f.enqueue({type:"text-end",id:String(w.index)});break}case"reasoning":{f.enqueue({type:"reasoning-end",id:String(w.index)});break}case"tool-call":o||(f.enqueue({type:"tool-input-end",id:B.toolCallId}),f.enqueue(B));break}delete d[w.index]}h=void 0;return}case"content_block_delta":{let B=w.delta.type;switch(B){case"text_delta":{if(o)return;f.enqueue({type:"text-delta",id:String(w.index),delta:w.delta.text});return}case"thinking_delta":{f.enqueue({type:"reasoning-delta",id:String(w.index),delta:w.delta.thinking});return}case"signature_delta":{h==="thinking"&&f.enqueue({type:"reasoning-delta",id:String(w.index),delta:"",providerMetadata:{anthropic:{signature:w.delta.signature}}});return}case"input_json_delta":{let U=d[w.index],D=w.delta.partial_json;if(o){if(U?.type!=="text")return;f.enqueue({type:"text-delta",id:String(w.index),delta:D})}else{if(U?.type!=="tool-call")return;f.enqueue({type:"tool-input-delta",id:U.toolCallId,delta:D}),U.input+=D}return}case"citations_delta":{let U=w.delta.citation;UC(U,i,m,D=>f.enqueue(D));return}default:{let U=B;throw new Error(`Unsupported delta type: ${U}`)}}}case"message_start":{u.inputTokens=w.message.usage.input_tokens,u.cachedInputTokens=(S=w.message.usage.cache_read_input_tokens)!=null?S:void 0,p={anthropic:{usage:w.message.usage,cacheCreationInputTokens:(R=w.message.usage.cache_creation_input_tokens)!=null?R:null}},f.enqueue({type:"response-metadata",id:(A=w.message.id)!=null?A:void 0,modelId:(v=w.message.model)!=null?v:void 0});return}case"message_delta":{u.outputTokens=w.usage.output_tokens,u.totalTokens=((P=u.inputTokens)!=null?P:0)+((C=w.usage.output_tokens)!=null?C:0),l=DC({finishReason:w.delta.stop_reason,isJsonResponseFromTool:o});return}case"message_stop":{f.enqueue({type:"finish",finishReason:l,usage:u,providerMetadata:p});return}case"error":{f.enqueue({type:"error",error:w.error});return}default:{let B=w;throw new Error(`Unsupported chunk type: ${B}`)}}}})),request:{body:a},response:{headers:s}}}},iH=T.object({type:T.literal("message"),id:T.string().nullish(),model:T.string().nullish(),content:T.array(T.discriminatedUnion("type",[T.object({type:T.literal("text"),text:T.string(),citations:T.array(zC).optional()}),T.object({type:T.literal("thinking"),thinking:T.string(),signature:T.string()}),T.object({type:T.literal("redacted_thinking"),data:T.string()}),T.object({type:T.literal("tool_use"),id:T.string(),name:T.string(),input:T.unknown()}),T.object({type:T.literal("server_tool_use"),id:T.string(),name:T.string(),input:T.record(T.string(),T.unknown()).nullish()}),T.object({type:T.literal("web_search_tool_result"),tool_use_id:T.string(),content:T.union([T.array(T.object({type:T.literal("web_search_result"),url:T.string(),title:T.string(),encrypted_content:T.string(),page_age:T.string().nullish()})),T.object({type:T.literal("web_search_tool_result_error"),error_code:T.string()})])}),T.object({type:T.literal("code_execution_tool_result"),tool_use_id:T.string(),content:T.union([T.object({type:T.literal("code_execution_result"),stdout:T.string(),stderr:T.string(),return_code:T.number()}),T.object({type:T.literal("code_execution_tool_result_error"),error_code:T.string()})])})])),stop_reason:T.string().nullish(),usage:T.looseObject({input_tokens:T.number(),output_tokens:T.number(),cache_creation_input_tokens:T.number().nullish(),cache_read_input_tokens:T.number().nullish()})}),aH=T.discriminatedUnion("type",[T.object({type:T.literal("message_start"),message:T.object({id:T.string().nullish(),model:T.string().nullish(),usage:T.looseObject({input_tokens:T.number(),output_tokens:T.number(),cache_creation_input_tokens:T.number().nullish(),cache_read_input_tokens:T.number().nullish()})})}),T.object({type:T.literal("content_block_start"),index:T.number(),content_block:T.discriminatedUnion("type",[T.object({type:T.literal("text"),text:T.string()}),T.object({type:T.literal("thinking"),thinking:T.string()}),T.object({type:T.literal("tool_use"),id:T.string(),name:T.string()}),T.object({type:T.literal("redacted_thinking"),data:T.string()}),T.object({type:T.literal("server_tool_use"),id:T.string(),name:T.string(),input:T.record(T.string(),T.unknown()).nullish()}),T.object({type:T.literal("web_search_tool_result"),tool_use_id:T.string(),content:T.union([T.array(T.object({type:T.literal("web_search_result"),url:T.string(),title:T.string(),encrypted_content:T.string(),page_age:T.string().nullish()})),T.object({type:T.literal("web_search_tool_result_error"),error_code:T.string()})])}),T.object({type:T.literal("code_execution_tool_result"),tool_use_id:T.string(),content:T.union([T.object({type:T.literal("code_execution_result"),stdout:T.string(),stderr:T.string(),return_code:T.number()}),T.object({type:T.literal("code_execution_tool_result_error"),error_code:T.string()})])})])}),T.object({type:T.literal("content_block_delta"),index:T.number(),delta:T.discriminatedUnion("type",[T.object({type:T.literal("input_json_delta"),partial_json:T.string()}),T.object({type:T.literal("text_delta"),text:T.string()}),T.object({type:T.literal("thinking_delta"),thinking:T.string()}),T.object({type:T.literal("signature_delta"),signature:T.string()}),T.object({type:T.literal("citations_delta"),citation:zC})])}),T.object({type:T.literal("content_block_stop"),index:T.number()}),T.object({type:T.literal("error"),error:T.object({type:T.string(),message:T.string()})}),T.object({type:T.literal("message_delta"),delta:T.object({stop_reason:T.string().nullish()}),usage:T.object({output_tokens:T.number()})}),T.object({type:T.literal("message_stop")}),T.object({type:T.literal("ping")})]),sH=T.object({signature:T.string().optional(),redactedData:T.string().optional()}),lH=Bt({id:"anthropic.bash_20241022",name:"bash",inputSchema:wh.object({command:wh.string(),restart:wh.boolean().optional()})}),cH=Bt({id:"anthropic.bash_20250124",name:"bash",inputSchema:Rh.object({command:Rh.string(),restart:Rh.boolean().optional()})}),uH=Bt({id:"anthropic.computer_20241022",name:"computer",inputSchema:is.object({action:is.enum(["key","type","mouse_move","left_click","left_click_drag","right_click","middle_click","double_click","screenshot","cursor_position"]),coordinate:is.array(is.number().int()).optional(),text:is.string().optional()})}),dH=Bt({id:"anthropic.computer_20250124",name:"computer",inputSchema:dr.object({action:dr.enum(["key","hold_key","type","cursor_position","mouse_move","left_mouse_down","left_mouse_up","left_click","left_click_drag","right_click","middle_click","double_click","triple_click","scroll","wait","screenshot"]),coordinate:dr.tuple([dr.number().int(),dr.number().int()]).optional(),duration:dr.number().optional(),scroll_amount:dr.number().optional(),scroll_direction:dr.enum(["up","down","left","right"]).optional(),start_coordinate:dr.tuple([dr.number().int(),dr.number().int()]).optional(),text:dr.string().optional()})}),pH=Bt({id:"anthropic.text_editor_20241022",name:"str_replace_editor",inputSchema:en.object({command:en.enum(["view","create","str_replace","insert","undo_edit"]),path:en.string(),file_text:en.string().optional(),insert_line:en.number().int().optional(),new_str:en.string().optional(),old_str:en.string().optional(),view_range:en.array(en.number().int()).optional()})}),mH=Bt({id:"anthropic.text_editor_20250124",name:"str_replace_editor",inputSchema:tn.object({command:tn.enum(["view","create","str_replace","insert","undo_edit"]),path:tn.string(),file_text:tn.string().optional(),insert_line:tn.number().int().optional(),new_str:tn.string().optional(),old_str:tn.string().optional(),view_range:tn.array(tn.number().int()).optional()})}),hH=Bt({id:"anthropic.text_editor_20250429",name:"str_replace_based_edit_tool",inputSchema:rn.object({command:rn.enum(["view","create","str_replace","insert"]),path:rn.string(),file_text:rn.string().optional(),insert_line:rn.number().int().optional(),new_str:rn.string().optional(),old_str:rn.string().optional(),view_range:rn.array(rn.number().int()).optional()})}),gH={bash_20241022:lH,bash_20250124:cH,textEditor_20241022:pH,textEditor_20250124:mH,textEditor_20250429:hH,computer_20241022:uH,computer_20250124:dH,webSearch_20250305:Yz,codeExecution_20250522:Qz};function Ch(r={}){var e;let t=(e=LC(r.baseURL))!=null?e:"https://api.anthropic.com/v1",n=()=>({"anthropic-version":"2023-06-01","x-api-key":RC({apiKey:r.apiKey,environmentVariableName:"ANTHROPIC_API_KEY",description:"Anthropic"}),...r.headers}),o=a=>{var s;return new oH(a,{provider:"anthropic.messages",baseURL:t,headers:n,fetch:r.fetch,generateId:(s=r.generateId)!=null?s:ou,supportedUrls:()=>({"image/*":[/^https?:\/\/.*$/]})})},i=function(a){if(new.target)throw new Error("The Anthropic model function cannot be called with the new keyword.");return o(a)};return i.languageModel=o,i.chat=o,i.messages=o,i.textEmbeddingModel=a=>{throw new Sh({modelId:a,modelType:"textEmbeddingModel"})},i.imageModel=a=>{throw new Sh({modelId:a,modelType:"imageModel"})},i.tools=gH,i}var MOe=Ch();var HC=({baseUrl:r,apiKey:e,sessionId:t,extraHeaders:n,loggerTags:o})=>i=>{let a={Authorization:`Bearer ${e}`,[ul]:wo??"",...t&&{[ny]:t},...n||{}};return o&&(a[ry]=JSON.stringify(o)),Ch({baseURL:`${r}/v1/llm/anthropic/${i}`,headers:a,apiKey:e})(i)};var Co=class extends Gr{agentConfig;constructor(e,t){super(t),this.agentConfig=e}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:t.abortSignal});return qf.parse(o)}async rankChunksWithRag(e,t){let n=await this.sendRequest(`/${z}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:wo,...e},signal:t.abortSignal});return $f.parse(n)}async getScreenshotFromS3(e){let t=await this.sendRequest(`/${z}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return fH.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(`/${z}/web-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return sy.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(`/${z}/web-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return Nd.parse(o)}async getLintStepResult(e,t){let n={...e,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/web-agent/lint/step`,{method:"POST",body:n,signal:t.abortSignal});return ay.parse(o)}async getLintMcpCopilotMessageResult(e,t){let n={message:e.message,disableCache:!!t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:t.abortSignal});return iy.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(`/${z}/web-agent/visual-assertion`,{method:"POST",body:n,signal:t.abortSignal});return Nd.parse(o)}async getAiActionCommand(e,t){let n=await this.sendRequest(`/${z}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return oy.parse(n)}async getMultiturnAiActionCommand(e,t){return await this.sendRequest(`/${z}/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(`/${z}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return Zu.parse(n)}async getReverseMappedDescription(e,t){let n=await this.sendRequest(`/${z}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:t.disableCache,loggerTags:t.loggerTags},signal:t.abortSignal});return ly.parse(n)}async getTextExtraction(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${z}/web-agent/text-extraction`,{method:"POST",body:n,signal:t.abortSignal});return Xu.parse(o)}async getPageSummary(e,t){let n={...e,disableCache:t.disableCache,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/web-agent/page-summary`,{method:"POST",body:n,signal:t.abortSignal});return Rf.parse(o)}async getTestResultClassification(e,t){let n=await this.sendRequest(`/${z}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Uu.parse(n)}async getExtractedKeywords(e,t){let n=await this.sendRequest(`/${z}/web-agent/extract-keywords`,{method:"POST",body:e,signal:t.abortSignal});return oS.parse(n)}async getAutohealingProposal(e,t){let n=await this.sendRequest(`/${z}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Tf.parse(n)}async getFailureRecoveryProposal(e,t){let n=await this.sendRequest(`/${z}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return wf.parse(n)}async getFailureRecoveryPlan(e,t){let n=await this.sendRequest(`/${z}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:t.loggerTags},signal:t.abortSignal});return Af.parse(n)}async getIframeRegex(e,t){let n=await this.sendRequest(`/${z}/web-agent/iframe-regex`,{method:"POST",body:e,signal:t.abortSignal});return ag.parse(n)}getVercelAnthropicModelFactory({loggerTags:e}){return HC({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:e})}};import{z as xh}from"zod";var wr=class extends Gr{constructor(e){super(e)}getAppUrl(){return this.baseUrl==="http://localhost:8000"?"http://localhost:3000":this.baseUrl.replace(/\/\/api/,"//app")}async getAuthInfo(){let e=await this.sendRequest(`/${z}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});return Ty.parse(e)}async bulkGetRunStatus(e){let t=await this.sendRequest(`/${z}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Sy.parse(t)}async getTestYAMLExport(e){let t=await this.sendRequest(`/${z}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return uy.parse(t)}async updateStepCaches(e,t){await this.sendRequest(`/${z}/cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,t){let n=await this.sendRequest(`/${z}/cache`,{method:"POST",body:e,extraHeaders:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return py.parse(n)}async updateMobileStepCaches(e,t){await this.sendRequest(`/${z}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:t,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,t){let n=await this.sendRequest(`/${z}/mobile-cache`,{method:"POST",body:e,extraHeaders:t,retries:10,logResponse:!0,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return my.parse(n)}async queueTests(e){let t=await this.sendRequest(`/${z}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return cy.parse(t)}async uploadScreenshot(e){let t=await this.sendRequest(`/${z}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return Ey.parse(t)}async getAllEnvironments(){let e=await this.sendRequest(`/${z}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return vy.parse(e)}async acquireCacheLock(e,t){let n=await this.sendRequest(`/${z}/result-cache/lock`,{method:"POST",body:e,signal:t,retries:3,requestTimeoutMs:3e4});return Dy.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${z}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${z}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${z}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${z}/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(`/${z}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return Ay.parse(t)}async bulkGetRunGroupStatus(e){let t={runGroupIds:e},n=await this.sendRequest(`/${z}/run-groups/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Gf.array().parse(n)}async uploadProposedSteps(e,t){try{await this.sendRequest(`/${z}/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(`/${z}/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(`/${z}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return wy.parse(t)}async patchTestFragment(e,t){await this.sendRequest(`/${z}/test-fragments/${e}`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,t){let n=await this.sendRequest(`/${z}/results/tests/${e}`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Ry.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${z}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return Cy.parse(e)}async startProcessingResultsUpload(e,t){let n=await this.sendRequest(`/${z}/results/uploads/${e}/process`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return xy.parse(n)}async fetchIconKnowledgeBase(e){try{let t=await this.sendRequest(`/${z}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return By.parse(t)}catch(t){return e.error({err:t},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,t){try{await this.sendRequest(`/${z}/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(`/${z}/git/github/${e}/${t}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ga.parse(a)}async getCommitFromGithub(e,t,n){let o=await this.sendRequest(`/${z}/git/github/${e}/${t}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ga.parse(o)}async getMergedBranchFromGithub(e,t,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${z}/git/github/${e}/${t}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Fd.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(`/${z}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return ga.parse(a)}async getCommitFromGitlab(e,t){let n=encodeURIComponent(e),o=await this.sendRequest(`/${z}/git/gitlab/${n}/commits/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ga.parse(o)}async getMergedBranchFromGitlab(e,t,n){let o=encodeURIComponent(t),i=encodeURIComponent(e),a=await this.sendRequest(`/${z}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Fd.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${z}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return xh.record(xh.string(),xh.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${z}/quarantine`,{method:"GET"});return _y.parse(e)}async quarantineTest(e,t,n){await this.sendRequest(`/${z}/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(`/${z}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:t,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let t=await this.sendRequest(`/${z}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return My.parse(t)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${z}/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(`/${z}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return Iy.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${z}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${z}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Py.parse(e)}async deleteAndroidAsset(e,t){await this.sendRequest(`/${z}/limbar/assets/${e}/${t}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}};async function _h(r){let e=process.versions.node,t=parseInt(e.split(".")[0]);(isNaN(t)||t<18)&&(x.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),x.debug(`Identified node version ${e}`);let n=await r.client.getAuthInfo();return x.debug("Got auth info from API"),n}var au=class{apiClient;constructor(e){this.apiClient=e}async reportBillableEvents(e,t){await this.apiClient.reportBillableEvents(e,t)}};var wi=class extends Gr{generator;constructor(e,t){super(e),this.generator=t}async runTemplateMatching(e,t={}){let n=await this.sendRequest(`/${z}/web-agent/template-matching`,{method:"POST",body:e,signal:t?.signal});return sg.parse(n)}async constructIframeRegex(e,t={}){return this.generator.getIframeRegex(e,{abortSignal:t.signal})}};var Ri=class{constructor(e,t){this.client=e;this.orgId=t}async acquireCacheLock(e,t){return this.client.acquireCacheLock(e,t)}async uploadScreenshot(e){return(await this.client.uploadScreenshot({screenshot:e.toString("base64")})).key}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 SH,en as yH}from"@faker-js/faker";var Ci="v1",xi=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 SH({locale:yH}),this.fakerInstance.seed(e.fakerSeed))}async sendAiGenerate(e){let t=typeof e=="string"?{input:e}:e;return this.httpClient.sendRequest(`/${Ci}/tools/ai/generate`,{method:"POST",body:t}).catch(n=>{throw n instanceof Ar?new Error(n.rawError):new Error(`Failed to send AI generation: ${n.message}`)})}async sendSms(e){return this.httpClient.sendRequest(`/${Ci}/tools/sms/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Ar?new Error(t.rawError):new Error(`Failed to send sms: ${t.message}`)})}async fetchLatestSms(e){return this.httpClient.sendRequest(`/${Ci}/tools/sms/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Ar?new Error(t.rawError):t})}async sendEmail(e){return this.httpClient.sendRequest(`/${Ci}/tools/email/send`,{method:"POST",body:e}).then(()=>{}).catch(t=>{throw t instanceof Ar?new Error(t.rawError):new Error(`Failed to send email: ${t.message}`)})}async fetchAllEmails(e){return this.httpClient.sendRequest(`/${Ci}/tools/email/fetchAll`,{method:"POST",body:e}).catch(t=>{throw t instanceof Ar?new Error(t.rawError):new Error(`Failed to fetch all emails: ${t.message}`)})}async fetchLatestEmail(e){return this.httpClient.sendRequest(`/${Ci}/tools/email/fetchLatest`,{method:"POST",body:e}).catch(t=>{throw t instanceof Ar?new Error(t.rawError):new Error(`Failed to fetch latest emails: ${t.message}`)})}};function GC(r,e,t){return fetch(r,{method:"PUT",body:t,headers:{"Content-Type":e}})}var su=class{constructor(e){this.client=e}async uploadResultsArchive(e,t){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await GC(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 _i=class extends Gr{constructor(e){super(e)}async getElementLocation(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/mobile-agent/locate-element`,{method:"POST",body:n,signal:t.abortSignal});return aS.parse(o)}async evaluateAssertion(e,t){let n={...e,loggerTags:t.loggerTags},o=await this.sendRequest(`/${z}/mobile-agent/assertion`,{method:"POST",body:n,signal:t.abortSignal});return cS.parse(o)}};function lu({orgId:r,client:e,gitMetadata:t,alwaysSaveCache:n,noCache:o}){return o?new pl:new Mh(r,e,t,n)}var Mh=class{constructor(e,t,n,o){this.orgId=e;this.client=t;let{gitBranchName:i,gitProtectedBranches:a}=n;this.cacheHeaders=kd(n),o?this.writeCaches=!0:i?this.writeCaches=!a.includes(i):this.writeCaches=!0}cacheHeaders;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.error({err:o},"Failed to save mobile step cache entries")}}async resolveEntries(e){let{steps:t}=e.stepLists,n=await this.client.getMobileStepCacheForTest({testId:e.testId},this.cacheHeaders);if(!this.writeCaches){e.logger.debug("Skipping mobile cache last used at update because branch is protected");return}for(let i of[t])i&&jd({steps:i,stepCacheEntries:n,logger:e.logger});let{cachesToSave:o}=await eo({steps:t,cacheCreationParams:{testId:e.testId,orgId:this.orgId}});this.client.updateMobileStepCaches({entries:o,testId:e.testId},this.cacheHeaders)}};import cu from"path";function bH(r){let e=new jC,t=cu.join(r,"metadata.json"),n=fa.parse(JSON.parse(Ih.readFileSync(t,"utf-8")));e.addLocalFile(t);for(let o of Ih.readdirSync(cu.join(r,"runs"))){if(!o.endsWith(".zip"))continue;let i=o.replace(/\.zip$/,""),a=new jC(cu.join(r,"runs",o));for(let s of a.getEntries())s.isDirectory||e.addFile(cu.join("runs",i,s.entryName),s.getData())}return{runGroupId:n.id,buffer:e.toBuffer()}}async function uu(r){let{client:e,consoleLogger:t,resultsPath:n}=r;if(!Ih.existsSync(n)){t.warn("Results path does not exist, skipping upload.");return}let o=new su(e);try{let{runGroupId:i,buffer:a}=bH(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 EH from"adm-zip";import gt from"fs";import Vt from"path";var ss=class r{constructor(e){this.filePath=e;gt.rmSync(this.filePath,{recursive:!0,force:!0}),gt.mkdirSync(this.filePath,{recursive:!0})}cd(e){return new r(Vt.join(this.filePath,e))}mkdir(e){gt.mkdirSync(Vt.join(this.filePath,e),{recursive:!0})}readFile(e){let t=Vt.join(this.filePath,e);if(gt.existsSync(t))return gt.readFileSync(t)}storeFile(e){let{name:t,contents:n}=e,o=Vt.join(this.filePath,t);try{gt.writeFileSync(o,n)}catch{}}createFileStream(e){let t=Vt.join(this.filePath,e);return gt.createWriteStream(t)}createRunArchive(e){return new Ph(Vt.join(this.filePath,"runs"),e)}},Ph=class{constructor(e,t){this.filePath=e;this.tempPath=Vt.join(e,`.${t}`),this.finalPath=Vt.join(e,`${t}.zip`),gt.rmSync(this.tempPath,{recursive:!0,force:!0}),gt.rmSync(this.finalPath,{recursive:!0,force:!0}),gt.mkdirSync(this.tempPath,{recursive:!0})}tempPath;finalPath;readFile(e){let t=Vt.join(this.tempPath,e);if(gt.existsSync(t))return gt.readFileSync(t)}mkdir(e){gt.mkdirSync(Vt.join(this.tempPath,e),{recursive:!0})}cd(e){return new ss(Vt.join(this.tempPath,e))}storeFile(e){let{name:t,contents:n}=e,o=Vt.join(this.tempPath,t);gt.writeFileSync(o,n)}createFileStream(e){let t=Vt.join(this.tempPath,e);return gt.createWriteStream(t)}close(){let e=new EH;e.addLocalFolder(this.tempPath,void 0,n=>n!==".DS_Store");let t=e.toBuffer();gt.writeFileSync(this.finalPath,t),gt.rmSync(this.tempPath,{recursive:!0,force:!0})}};import yu from"fs";import rx from"body-parser";import FH from"cors";import BH from"dedent";import{Router as wH}from"express";import It from"fs";import{globSync as RH}from"glob";import dt from"path";import Lh from"fs";import TH from"path";var vH=new xl(30,60*1e3),Dh="https://api.momentic.ai",Nh,WC=r=>{Dh=r},Uh=()=>Dh,Fh=()=>Nh;var Mi,kh,VC,$C=async r=>{if(Nh&&Mi&&VC)return Mi;let e=new wr({baseUrl:Dh,apiKey:r,logger:x});Nh=e;try{let t=await e.getAuthInfo();return Mi=t.orgId,kh=t.userId,VC=r,Mi}catch(t){throw new Error(`Error checking API key against server: ${t}`)}},ls=()=>{if(!Mi)throw new Error("Your organization ID is invalid.");return Mi},du=()=>{if(!kh)throw new Error("Your user ID is invalid.");return kh};var Bh,Oh,qC=(r,e)=>{Bh=r,Oh?.abort(),Oh=new AbortController;let t=Oh.signal,n=[r.configFilePath];r.config.environments?.forEach(o=>{if(!o.envFile)return;let i=TH.resolve(r.rootDir,o.envFile);try{if(Lh.lstatSync(i).isSymbolicLink())return;Lh.existsSync(i)&&n.push(i)}catch(a){x.warn({err:a},`Failed to check if env file ${i} exists`)}});try{AH({filesToWatch:n,revalidator:e,signal:t,project:r})}catch(o){x.error({err:o},"Failed to start config file watchers")}},at=()=>Bh;function AH({filesToWatch:r,revalidator:e,signal:t,project:n}){r.forEach(o=>{Lh.watch(o,{signal:t,persistent:!1,recursive:!1},async(i,a)=>{a&&(vH.increment("setLocalProject")&&x.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.`),Bh=await Promise.resolve(e(n.configFilePath)))})})}function st(r){return function(...e){let t=e[e.length-1],n=r(...e);Promise.resolve(n).catch(t)}}var us=wH();function cs(r){let e=at(),t=dt.dirname(e.configFilePath);return dt.join(t,...r)}function CH(r){let e=at(),t=dt.dirname(e.configFilePath),n=dt.relative(t,r);return n?n.split(dt.sep):[]}function xH(r,e){let t=It.statSync(r),n=CH(r);return _d.parse({name:e,absolutePath:r,relativePath:n.join(dt.sep),pathSegments:n,isDirectory:t.isDirectory(),size:t.size,createdAt:t.birthtime,modifiedAt:t.mtime,accessedAt:t.atime})}us.post("/",st(async(r,e,t)=>{let n;try{n=jS.parse(r.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=cs(n);if(!It.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(dt.sep)}`});return}if(!It.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(dt.sep)}`});return}let a=at(),s=Array.from(a.config.exclude??[]).concat(ol),l=RH("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let p=dt.join(o,d);return xH(p,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));us.put("/",st(async(r,e,t)=>{let n;try{n=VS.parse(r.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=cs(n);if(It.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(dt.sep)}`,pathSegments:n});return}It.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(dt.sep)}`,pathSegments:n};e.status(201).json(i)}));us.patch("/",st(async(r,e,t)=>{let n,o;try{let l=WS.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=cs(n),a=cs(o);if(!It.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(dt.sep)}`});return}if(It.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(dt.sep)}`});return}let s=dt.dirname(a);It.existsSync(s)||It.mkdirSync(s,{recursive:!0}),It.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(dt.sep)} to ${o.join(dt.sep)}`,pathSegments:o};e.status(200).json(c)}));us.delete("/",st(async(r,e,t)=>{let n,o=!0;try{let c=$S.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=cs(n);if(!It.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(dt.sep)}`,pathSegments:n});return}if(!It.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(dt.sep)}`});return}if(o)It.rmSync(i,{recursive:!0,force:!0});else{if(It.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}It.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var zh=us;import zH from"events";import nx,{Router as HH}from"express";import GH from"http";import jH from"path";var pu=class{sessions=new Map;registerSession(e,t){this.sessions.set(e,t)}getSession(e){return this.sessions.get(e)}async removeSession(e,t){let n=this.sessions.get(e);if(n)try{await n.cleanup?.(),t.info({sessionId:e,emulatorName:n.emulatorName},"Android emulator cleaned up")}catch(o){t.error({err:o},"Error during Android session cleanup")}finally{this.sessions.delete(e)}}async removeAllSessions(e){let t=Array.from(this.sessions.keys());await Promise.all(t.map(n=>this.removeSession(n,e)))}};var KC=new pu;import{Router as IH}from"express";import{existsSync as PH}from"fs";import OH from"path";import{hostname as _H}from"os";var MH="0.0.27",Pt=Hc({app:"mobile-desktop-server",hostname:_H(),disableConsoleLogs:!0}).child({cliVersion:MH});(async()=>{try{let r=await uh(Pt);r.gitBranchName&&Pt.addBinding("branch",r.gitBranchName)}catch{}})();var Hh=IH();Hh.get("/",st(async(r,e)=>{let t=Fh();if(!t){e.status(500).json({message:"API client not initialized"});return}let n=await t.getAndroidAssets();e.status(200).json(n)}));Hh.post("/upload-url",st(async(r,e)=>{let t;try{t=JS.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Fh();if(!n){e.status(500).json({error:"API client not initialized"});return}let o=OH.resolve(t.filePath);if(!PH(o)){e.status(400).json({error:`File not found: ${o}`});return}await Ss({tag:t.tag,channel:t.channel,filePath:o,apiClient:n,logger:Pt}),e.sendStatus(204)}));var YC=Hh;import{Router as LH}from"express";var XC=LH();XC.get("/",st(async(r,e)=>{let t=at(),n=await vr(t),o=new Set;n?.tests&&Object.values(n.tests).forEach(c=>{c.labels?.forEach(l=>o.add(l))});let i=Array.from(o).sort(),a=Object.values(n.mobileTests),s={labels:i,modules:[],tests:a};e.status(200).json(s)}));var JC=XC;import{Router as NH}from"express";var ZC=NH();ZC.get("/",(r,e)=>{e.status(200).json({userId:du(),orgId:ls()})});var QC=ZC;import{Router as kH}from"express";var mu=kH();async function DH(r){return(await GR(r,Pt)).map(n=>{let o=r.mobileModules[n.moduleId];if(!o){x.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)}mu.get("/",st(async(r,e)=>{let t=at(),n=await vr(t),o=await DH(n);e.status(200).json(o)}));mu.get("/:moduleId",st(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t=await vr(at()),n=t.mobileModules[r.params.moduleId];if(!n){e.status(404).json({error:"Mobile module not found."});return}try{let o=await ph(n,t,x);e.json(o)}catch(o){e.status(400).json({err:o})}}));mu.patch("/:moduleId/metadata",st(async(r,e)=>{if(!r.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let t;try{t=ZS.parse(r.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=at(),o=await vr(n);HR({moduleId:r.params.moduleId,patch:t,momenticFiles:o,logger:x,project:n}),e.status(201).json({message:"ok"})}));var ex=mu;import{Router as UH}from"express";import Gh from"path";var hu=UH();hu.patch("/:testPath",st(async(r,e)=>{let t=r.params.testPath;if(!t){e.status(400).json({error:"Missing testPath in path"});return}let n;try{n=XS.parse(r.body)}catch(c){e.status(400).json({error:`Invalid request body: ${c}`});return}if(n.steps===void 0&&n.settings===void 0){e.status(400).json({error:"At least one of steps or settings is required"});return}let o=at(),i=t.endsWith(".test.yaml")?t:`${t}.test.yaml`,a=await vr(o);await VR({filePath:i,steps:n.steps,settings:n.settings,folder:o.rootDir,project:o,momenticFiles:a});let s={message:"ok"};e.status(200).json(s)}));hu.post("/",st((r,e)=>{let t;try{t=YS.parse(r.body)}catch(m){e.status(400).json({error:`Invalid request body: ${m}`});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{Yu(n)}catch(m){e.status(400).json({error:m.message});return}let s=at(),c=Gh.join(s.rootDir,...a),{fullPath:l,testId:u}=jR({name:n,description:o,steps:[],settings:i,folder:c}),d=Gh.basename(l),p=Gh.relative(s.rootDir,l),h={id:u,fileName:d,fullPath:l,relativeFilePath:p};e.status(201).json(h)}));hu.get("/:fileName",st(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=at(),i=await vr(o),s=await Qc(n,Pt,i);e.status(200).json(s)}));var tx=hu;var gu=class extends Ri{constructor(t,n){super(t,n);this.client=t;this.orgId=n}async fetchEnvironment(t,n){let o=at();return Kc(t,o,x)}};var ox="10mb";async function ix(r){let{serverPort:e,apiKey:t,momenticServerUrl:n,staticDir:o,initialProject:i,driverLogLevel:a,alwaysSaveCache:s,noCache:c}=r;n&&WC(n),await $C(t);let l=ls(),u=du(),d=r.logger.child({orgId:l,userId:u});qC(i,A=>es({configFilePath:A}));let p=nx();p.use(FH()),p.use(rx.json({limit:ox})),p.use(rx.urlencoded({extended:!1,limit:ox}));let h=HH();if(h.use("/folders",zh),h.use("/entities",JC),h.use("/identify",QC),h.use("/mobile-tests",tx),h.use("/mobile-modules",ex),h.use("/assets",YC),p.use("/api",h),p.use((A,v,P)=>{x.debug({url:A.url,path:A.path,query:A.query,method:A.method,body:A.body,headers:A.rawHeaders,client:A.ip},"Incoming request on mobile-desktop-server"),v.on("close",()=>{v.statusCode>=400&&(x.error({url:A.url,method:A.method,statusCode:v.statusCode},"Request completed in error on mobile-desktop-server"),Pt.error({url:A.url,method:A.method,statusCode:v.statusCode},"Request completed in error on mobile-desktop-server"))}),P()}),p.use((A,v,P,C)=>{if(A instanceof Error&&A.message.includes("BadRequestError: request aborted")){P.status(400).send("Client disconnected");return}x.error({stack:A.stack,msg:A.message,err:A,url:v.url,method:v.method},"Unhandled exception leading to 500 on mobile-desktop-server"),Pt.error({stack:A.stack,msg:A.message,err:A,url:v.url,method:v.method},"Unhandled exception leading to 500 on mobile-desktop-server"),P.status(500).send(`Internal Server Error: ${A.message}`)}),o){let A=nx.static(o,{setHeaders:v=>{v.setHeader("Cache-Control","no-cache")},redirect:!1});p.use(A),p.use("*",(v,P)=>{P.sendFile(jH.join(o,"index.html"))})}let m=GH.createServer(p),g=`http://localhost:${e}`;await new Promise(A=>{try{m.listen(e,()=>{d.info(`Mobile desktop server is running at ${g}`),A()})}catch(v){v.message.includes("EADDRINUSE")?VH(e):x.error(`An unexpected error occurred while starting the server: ${v.message}`),process.exit(1)}});let E={type:"API_KEY",baseUrl:Uh(),apiKey:t,logger:d},S=new wr(E),{dispose:R}=ER({baseServer:m,logger:d,authorization:E,globalStateManager:KC,getOrgId:()=>ls(),androidDriverFactory:async({socket:A,logger:v,creationOpts:P})=>{let C=Math.floor(Math.random()*1e4)+4e4,w=await qc(C,"appium");return fs({logger:v,driverLogLevel:a,apiClient:S,creationOpts:P,socket:A,appiumPort:w,onStatusUpdate:B=>{A.emit("connectionStatusUpdate",{message:B})}})},mobileGeneratorFactory:async A=>new _i({baseUrl:Uh(),apiKey:t,logger:d}),browserGeneratorFactory:async A=>new Co({},E),browserEnricherFactory:async A=>new wi(E,new Co({},E)),storageFactory:async A=>new gu(S,A),cacheStorageFactory:async A=>{let v=at(),P=await Xc(d,S,v);return lu({orgId:A,client:S,gitMetadata:P,noCache:c,alwaysSaveCache:s})},localToolsFactory:async()=>new xi({httpClient:S,fakerSeed:void 0}),keepSessionAlive:A=>S.extendAndroidEmulatorTtl(A),settingsFactory:async()=>({emulator:at().config.emulator})});process.once("SIGUSR2",async()=>{return;try{await R(),await Ht.flush()}catch(A){x.error({err:A},"Error during session dispose on SIGUSR2")}try{m.close(()=>{process.kill(process.pid,"SIGUSR2")})}catch{process.kill(process.pid,"SIGUSR2")}}),process.once("SIGTERM",async()=>{x.info("SIGTERM in Momentic mobile app received");try{await R(),await Ht.flush()}finally{m.close(()=>process.exit(0))}}),process.once("SIGINT",async()=>{x.info("SIGINT in Momentic mobile app received");try{await R(),await Ht.flush()}finally{m.close(()=>process.exit(0))}})}zH.setMaxListeners(25);process.on("warning",r=>{Pt.warn({err:r},`Node warning received on mobile-desktop-server: ${r.message}`)});process.on("uncaughtException",r=>{Pt.error({err:r},"Uncaught exception on mobile-desktop-server"),x.error(`Oh no! The Momentic mobile desktop app encountered a fatal error \u{1F61E}. Error logs: ${r.message}`)});process.on("unhandledRejection",r=>{Pt.error({reason:`${r}`,stack:r?.stack},"Uncaught exception on mobile-desktop-server (promise rejection)"),x.error(`Oh no! The Momentic mobile desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${r}`)});function VH(r){x.error(BH`Port ${r} is already in use by another process. Please close the other process and try again.
3988
3992
  Using Bash on MacOS or Linux:
3989
3993
  lsof -t -i :58888 | xargs kill -9
3990
3994
 
3991
3995
  Using Command Prompt on Windows:
3992
3996
  for /f "tokens=5" %a in ('netstat -ano ^| findstr :58888') do taskkill /PID %a /F
3993
- `)}import yz from"open";import nu from"path";import{fileURLToPath as bz}from"url";import{InvalidArgumentError as ug,Option as Ct}from"@commander-js/extra-typings";import{z as rz}from"zod";var FR=58890;function nz(r){let e=parseInt(r,10);if(isNaN(e))throw new ug("Not a number.");return e}var Za=new Ct("--api-key <key>","Momentic API key").env("MOMENTIC_API_KEY").argParser(r=>{if(!r)throw new ug("API key is required.");return r}).makeOptionMandatory(),dg=new Ct("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),Qa=new Ct("--server <server>","Momentic server to use.").env("MOMENTIC_SERVER").default("https://api.momentic.ai").argParser(r=>{try{return rz.string().url().parse(r),r}catch{throw new ug("Not a valid URL.")}}),pg=new Ct("-y, --yes","Skip all confirmation prompts.").env("CI"),mg=new Ct("--save-cache","Always save updated step caches after successful test runs. By default, caches are not saved when running on protected branches, which are specified in your momentic.config.yaml.").env("CI"),gg=new Ct("--disable-cache","Disable using step caches completely. Using this option may lead to non-deterministic behavior and significantly longer runtimes."),hg=new Ct("--tag <tag>","Tag identifier for the asset."),BR=new Ct("--channel <channel>","Channel name for the asset."),zR=new Ct("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),HR=new Ct("--env <env>","Environment to run all tests in (overrides test-level configuration)."),GR=new Ct("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(nz),fg=new Ct("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),jR=new Ct("--upload-results","Upload test results to Momentic Cloud.").default(!1),Sg=new Ct("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),VR=new Ct("--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});import{randomUUID as pz}from"crypto";import{existsSync as mz}from"fs";import yg from"fs";import es from"path";import{cwd as iz}from"process";async function $R({tests:r,momenticFiles:e,project:t,yes:n,include:o,exclude:i,logger:a,quarantinedTestReasons:s}){let c=new Set;if(r&&r.length>0){let u=r.some(p=>yg.existsSync(p)),d=iz();u?(d!==t.rootDir&&a.warn(`The current working directory ('${d}') 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.`),a.info(`Reading tests from the following local file paths:
3997
+ `)}import sG from"open";import bu from"path";import{fileURLToPath as lG}from"url";import{InvalidArgumentError as jh,Option as Ot}from"@commander-js/extra-typings";import{z as WH}from"zod";var ax=58890;function $H(r){let e=parseInt(r,10);if(isNaN(e))throw new jh("Not a number.");return e}var ds=new Ot("--api-key <key>","Momentic API key").env("MOMENTIC_API_KEY").argParser(r=>{if(!r)throw new jh("API key is required.");return r}).makeOptionMandatory(),Vh=new Ot("-c, --config <configPath>","Absolute or relative path to a Momentic configuration file."),ps=new Ot("--server <server>","Momentic server to use.").env("MOMENTIC_SERVER").default("https://api.momentic.ai").argParser(r=>{try{return WH.string().url().parse(r),r}catch{throw new jh("Not a valid URL.")}}),Wh=new Ot("-y, --yes","Skip all confirmation prompts.").env("CI"),$h=new Ot("--save-cache","Always save updated step caches after successful test runs. By default, caches are not saved when running on protected branches, which are specified in your momentic.config.yaml.").env("CI"),qh=new Ot("--disable-cache","Disable using step caches completely. Using this option may lead to non-deterministic behavior and significantly longer runtimes."),Kh=new Ot("--tag <tag>","Tag identifier for the asset."),sx=new Ot("--channel <channel>","Channel name for the asset."),lx=new Ot("--channel <channel>","Channel name for the asset.").makeOptionMandatory(),cx=new Ot("--env <env>","Environment to run all tests in (overrides test-level configuration)."),ux=new Ot("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser($H),Yh=new Ot("--output-dir <outputDir>","Output directory to store run artifacts such as screenshots, results, and logs."),dx=new Ot("--upload-results","Upload test results to Momentic Cloud.").default(!1),Xh=new Ot("--log-level <logLevel>","Log level for Momentic and dependent services.").choices(["error","warn","info","debug"]),px=new Ot("--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});import{randomUUID as tG}from"crypto";import{existsSync as rG}from"fs";import Jh from"fs";import ms from"path";import{cwd as KH}from"process";async function mx({tests:r,momenticFiles:e,project:t,yes:n,include:o,exclude:i,logger:a,quarantinedTestReasons:s}){let c=new Set;if(r&&r.length>0){let u=r.some(p=>Jh.existsSync(p)),d=KH();u?(d!==t.rootDir&&a.warn(`The current working directory ('${d}') 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.`),a.info(`Reading tests from the following local file paths:
3994
3998
  - ${r.join(`
3995
3999
  - `)}
3996
- `),r.forEach(p=>{if(!yg.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let g,m;try{g=yg.statSync(p),m=g.isDirectory()}catch(f){a.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let h=es.resolve(p);Object.values(e.mobileTests).filter(f=>m?f.fullFilePath.startsWith(h):f.fullFilePath===h).forEach(f=>{c.add(f.fullFilePath)})})):(a.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))&&c.add(p.fullFilePath)}))}else{!n&&!await Mc("No test paths or substrings were provided. Do you want to run all tests?")&&(a.error("Cancelled by user."),process.exit(1));let u=Object.values(e.mobileTests);a.info(`Reading all ${u.length} mobile tests in the project from local disk.`),u.forEach(d=>{c.add(d.fullFilePath)})}for(let u of Array.from(c)){let d=es.relative(t.rootDir,u);o&&!o.some(p=>new RegExp(p).test(d))&&c.delete(u),i&&i.some(p=>new RegExp(p).test(d))&&c.delete(u)}return(await Promise.all(Array.from(c).map(async u=>{try{let d=es.relative(t.rootDir,u),p=await Uc(u,a,e),g=es.basename(u,es.extname(u));return{id:p.id,name:g,description:p.description,schemaVersion:p.schemaVersion,settings:p.settings,steps:p.steps,fullFilePath:u,relativeFilePath:d,quarantined:!!s[p.id],quarantinedReason:s[p.id]}}catch(d){a.error(`Failed to read and resolve mobile test at '${u}': ${d}`),process.exit(1)}}))).filter(u=>!!u)}import{cloneDeep as az}from"lodash-es";async function WR(r){let{inputs:e,fixtures:t,metadata:n,options:o}=r,{tracer:i,logger:a}=t,{runId:s}=n,{testDefinition:c,runSigIntHandlers:l}=e,u=new Date,d=await i.startRun({logger:a,testId:c.id,testName:c.name,runId:s,testDescription:c.description,schemaVersion:c.schemaVersion,originalSteps:{steps:az(c.steps),beforeSteps:void 0,afterSteps:void 0},quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}),p=a.child(d.loggerBindings||{}),g=1+(c.settings?.retries??1);try{for(let m=0;m<g;m++){let h=new Date,f=await sz({runTracer:d,testDefinition:c,metadata:n,constants:{attemptNumber:m,totalAttempts:g},fixtures:{...t,logger:p},inputs:e,options:o}),b=new Date;if(f.status!=="FAILED")return await d.finish({logger:a,...f,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,attempts:m+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason};if(m!==g-1){a.warn("Retrying failed mobile run");continue}return a.error("Mobile test failed after all exhausting attempts"),await d.finish({logger:a,...f,finishedAt:b}),{...f,startedAt:u,lastAttemptStartedAt:h,finishedAt:b,attempts:m+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}}throw new Error("This code should not be reachable")}finally{l?.pop()}}async function sz(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:p,logger:g,usageTracker:m}=i,{logUpdate:h,channel:f,tag:b,project:E,envOverride:_}=a,{alwaysSaveCache:v,noCache:A,logLevel:P}=s;c!==0&&h("RETRY",`attempt ${c}/${l}`);let R={...a.project.config.emulator,...t.settings?.emulator},w=Wc({orgId:u,client:p,gitMetadata:d,alwaysSaveCache:v,noCache:A}),B=new hi(p,u),D=new yi(p),k={type:"API_KEY",baseUrl:p.baseUrl,apiKey:p.apiKey,logger:g},Y=new So({},k),Me=new gi(k,Y),q=new Si({httpClient:p,fakerSeed:void 0}),H=Math.floor(Math.random()*1e4)+4e4,ie=await Ic(H,"appium"),Ie=await ns({apiClient:p,logger:g,driverLogLevel:P,creationOpts:{apkToInstall:f?{channel:f,tag:b}:void 0,region:R.region},onStatusUpdate:rs=>{g.debug({status:rs},"Limbar emulator status update")},appiumPort:ie}),ue=await e.startAttempt({emulatorName:Ie.emulatorName}),at=g.child(ue.loggerBindings||{}),Bt=await Js({driver:Ie.driver,onLogs:rs=>{ue.appendLogs(rs)}}),be=_||t.settings?.defaultEnv,Ke;be&&(Ke=Oc(be,E,at).variables);let zt=new ko({variablesFromEnvironment:Ke??{},envName:be,testName:t.name}),yo=await si.init({driver:Ie.driver,generator:D,logger:at,orgId:u,adbPort:Ie.adbTunnelPort,options:{emulator:R},fixtures:{storage:B,browserEnricher:Me,browserGenerator:Y,localCodeEvalTools:q,testContext:zt}}),xn;try{xn=await Cc({containerName:"mobile-test",fixtures:{controller:yo,logger:at,cacheStorage:w,usageTracker:m},inputs:{steps:t.steps,orgId:u,testMetadata:t},tracer:ue})}finally{await Bt(),await Ie.cleanup()}return await ue.finish({logger:at,results:xn.results,status:xn.status}),xn}import{randomUUID as lz}from"crypto";import{debounce as cz}from"ts-debounce";var ts="0.0.25";var eu="assets";function uz(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 dz(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var bg=class{constructor(e,t,n,o){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.interactionTracer=new so,vn.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${eu}/${t}.jpeg`,contents:n})}attachAfterScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${eu}/${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:dz(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 Ei(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}},Ei=class{constructor(e,t,n,o){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o}children=[];finished=!1;async getScreenshot(e,t){return this.diskStorage.readFile(`${eu}/${t}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new bg(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(t),t}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(t=>t.finishInternal({status:uz(e.status),finishedAt:e.finishedAt}))))}},Eg=class{constructor(e,t,n,o,i,a){this.keepalive=e;this.testId=t;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;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(`
4000
+ `),r.forEach(p=>{if(!Jh.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h,m;try{h=Jh.statSync(p),m=h.isDirectory()}catch(f){a.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=ms.resolve(p);Object.values(e.mobileTests).filter(f=>m?f.fullFilePath.startsWith(g):f.fullFilePath===g).forEach(f=>{c.add(f.fullFilePath)})})):(a.info("The arguments provided don't appear to be valid paths. Treating them as substrings instead... "),Object.values(e.mobileTests).forEach(p=>{r.some(h=>p.relativePath.includes(h))&&c.add(p.fullFilePath)}))}else{!n&&!await Wc("No test paths or substrings were provided. Do you want to run all tests?")&&(a.error("Cancelled by user."),process.exit(1));let u=Object.values(e.mobileTests);a.info(`Reading all ${u.length} mobile tests in the project from local disk.`),u.forEach(d=>{c.add(d.fullFilePath)})}for(let u of Array.from(c)){let d=ms.relative(t.rootDir,u);o&&!o.some(p=>new RegExp(p).test(d))&&c.delete(u),i&&i.some(p=>new RegExp(p).test(d))&&c.delete(u)}return(await Promise.all(Array.from(c).map(async u=>{try{let d=ms.relative(t.rootDir,u),p=await Qc(u,a,e),h=ms.basename(u,ms.extname(u));return{id:p.id,name:h,description:p.description,schemaVersion:p.schemaVersion,settings:p.settings,steps:p.steps,fullFilePath:u,relativeFilePath:d,quarantined:!!s[p.id],quarantinedReason:s[p.id]}}catch(d){a.error(`Failed to read and resolve mobile test at '${u}': ${d}`),process.exit(1)}}))).filter(u=>!!u)}import{cloneDeep as YH}from"lodash-es";async function hx(r){let{inputs:e,fixtures:t,metadata:n,options:o}=r,{tracer:i,logger:a}=t,{runId:s}=n,{testDefinition:c,runSigIntHandlers:l}=e,u=new Date,d=await i.startRun({logger:a,testId:c.id,testName:c.name,runId:s,testDescription:c.description,schemaVersion:c.schemaVersion,originalSteps:{steps:YH(c.steps),beforeSteps:void 0,afterSteps:void 0},quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}),p=a.child(d.loggerBindings||{}),h=1+(c.settings?.retries??1);try{for(let m=0;m<h;m++){let g=new Date,f=await XH({runTracer:d,testDefinition:c,metadata:n,constants:{attemptNumber:m,totalAttempts:h},fixtures:{...t,logger:p},inputs:e,options:o}),E=new Date;if(f.status!=="FAILED")return await d.finish({logger:a,...f,finishedAt:E}),{...f,startedAt:u,lastAttemptStartedAt:g,finishedAt:E,attempts:m+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason};if(m!==h-1){a.warn("Retrying failed mobile run");continue}return a.error("Mobile test failed after all exhausting attempts"),await d.finish({logger:a,...f,finishedAt:E}),{...f,startedAt:u,lastAttemptStartedAt:g,finishedAt:E,attempts:m+1,testMetadata:c,steps:c.steps,filePath:c.relativeFilePath,quarantined:c.quarantined,quarantinedReason:c.quarantinedReason}}throw new Error("This code should not be reachable")}finally{l?.pop()}}async function XH(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:p,logger:h,usageTracker:m}=i,{logUpdate:g,channel:f,tag:E,project:S,envOverride:R}=a,{alwaysSaveCache:A,noCache:v,logLevel:P}=s;c!==0&&g("RETRY",`attempt ${c}/${l}`);let C={...a.project.config.emulator,...t.settings?.emulator},w=lu({orgId:u,client:p,gitMetadata:d,alwaysSaveCache:A,noCache:v}),B=new Ri(p,u),U=new _i(p),D={type:"API_KEY",baseUrl:p.baseUrl,apiKey:p.apiKey,logger:h},J=new Co({},D),Le=new wi(D,J),K=new xi({httpClient:p,fakerSeed:void 0}),G=Math.floor(Math.random()*1e4)+4e4,se=await qc(G,"appium"),ke=await fs({apiClient:p,logger:h,driverLogLevel:P,creationOpts:{apkToInstall:f?{channel:f,tag:E}:void 0,region:C.region},onStatusUpdate:gs=>{h.debug({status:gs},"Limbar emulator status update")},appiumPort:se}),ge=await e.startAttempt({emulatorName:ke.emulatorName}),pt=h.child(ge.loggerBindings||{}),Wt=await ml({driver:ke.driver,onLogs:gs=>{ge.appendLogs(gs)}}),we=R||t.settings?.defaultEnv,et;we&&(et=Kc(we,S,pt).variables);let $t=new Wo({variablesFromEnvironment:et??{},envName:we,testName:t.name}),xo=await Si.init({driver:ke.driver,generator:U,logger:pt,orgId:u,adbPort:ke.adbTunnelPort,options:{emulator:C},fixtures:{storage:B,browserEnricher:Le,browserGenerator:J,localCodeEvalTools:K,testContext:$t}}),kn;try{kn=await Gc({containerName:"mobile-test",fixtures:{controller:xo,logger:pt,cacheStorage:w,usageTracker:m},inputs:{steps:t.steps,orgId:u,testMetadata:t},tracer:ge})}finally{await Wt(),await ke.cleanup()}return await ge.finish({logger:pt,results:kn.results,status:kn.status}),kn}import{randomUUID as JH}from"crypto";import{debounce as ZH}from"ts-debounce";var hs="0.0.27";var fu="assets";function QH(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 eG(r){switch(r){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Zh=class{constructor(e,t,n,o){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o;this.interactionTracer=new So,In.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${fu}/${t}.jpeg`,contents:n})}attachAfterScreenshot(e){let{snapshotId:t,screenshot:n}=e;this.diskStorage.storeFile({name:`${fu}/${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:eG(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 Ii(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}},Ii=class{constructor(e,t,n,o){this.keepalive=e;this.testId=t;this.testName=n;this.diskStorage=o}children=[];finished=!1;async getScreenshot(e,t){return this.diskStorage.readFile(`${fu}/${t}.jpeg`)}getParentStepIdChain(){return[]}async startStep(e){this.keepalive();let t=new Zh(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(t),t}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(t=>t.finishInternal({status:QH(e.status),finishedAt:e.finishedAt}))))}},Qh=class{constructor(e,t,n,o,i,a){this.keepalive=e;this.testId=t;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;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(`
3997
4001
  `);this.logStream.write(t+`
3998
- `)}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,finishedAt:new Date,results:yc(o,t),beforeResults:i?yc(i,t):void 0,afterResults:a?yc(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 Ei(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async startMainStepList(){let e=new Ei(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async startAfterStepList(){let e=new Ei(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async getScreenshot(e,t){return this.diskStorage.readFile(`${eu}/${t}.jpeg`)}},Tg=class{constructor(e,t,n,o,i,a){this.client=e;this.testId=t;this.testName=n;this.runId=o;this.metadata=i;this.diskStorage=a}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){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 t=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),n=lz(),o={id:n,schemaVersion:In,runAttemptSchemaVersion:MS,startedAt:new Date,status:"RUNNING"};t.storeFile({name:"metadata.json",contents:JSON.stringify(o,null,2)});let i=cz(async()=>{await this.client.extendAndroidEmulatorTtl(e.emulatorName)},3e4,{maxWait:6e4}),a=new Eg(()=>void i(),this.testId,this.testName,n,o,t);return this.children.push(a),a}},tu=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:Kt.CLI,startedAt:new Date,status:"RUNNING",cliVersion:ts,labels:a??[]},c=new Ka(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:ts,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 Tg(this.client,e.testId,e.testName,e.runId,n,t);return this.children.push(o),o}};async function qR(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 KR(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:p}=e;mz(d)&&C.warn(`Output directory ${d} already exists, removing before test execution...`);let g=await qR(s,a,e.ignoreQuarantine),m=await gr(i),h=await $R({tests:n.tests,yes:e.yes,project:i,momenticFiles:m,logger:C,quarantinedTestReasons:g}),f=s.child({orgId:c,runGroupId:l,branch:u.gitBranchName}),b=await tu.start({logger:f,orgId:c,runGroupId:l,outputDir:d,client:a,gitMetadata:u,labels:[]}),E=[],_=new Date,v=new Set,A=async()=>gz({runResults:E,startTime:_,ranTests:v,apiClient:a,uploadResults:e.uploadResults??!1,outputDir:d}),P=[],R=async()=>{C.warn("SIGINT received. Stopping tests and printing latest results..."),await b.finish({logger:f,status:"CANCELLED"}),await A(),await Promise.allSettled(P.map(k=>k())),process.exit(1)};process.once("SIGINT",R);let w={};for(let k=0;k<h.length;k++){let Y=Object.values(w);Y.length===p&&await Promise.race(Y.map(H=>H.promise));let Me=h[k],q=`test-${k}`;w[q]={done:!1,promise:(async({testDefinition:H})=>{v.add(q);let ie=H.relativeFilePath.includes("..")?H.fullFilePath:H.relativeFilePath;Ua({status:"START",testLogRef:ie,getRunningTestsCount:()=>v.size,getTotalTestsCount:()=>h.length});let ae=setInterval(()=>Ua({status:"RUN",testLogRef:ie,getRunningTestsCount:()=>v.size,getTotalTestsCount:()=>h.length}),5*60*1e3),Ie=pz(),ue=f.child({testId:H.id,runId:Ie}),at=new ll({logger:ue,reporter:new Vc(a),runType:"mobile-test-run",runId:Ie,testMetadata:H,suiteMetadata:void 0});try{let Bt=await WR({metadata:{...o,runId:Ie},fixtures:{...t,tracer:b,logger:ue,usageTracker:at},inputs:{...n,project:i,testDefinition:H,channel:n.channel??H.settings?.defaultChannel,tag:n.tag??H.settings?.defaultTag,logUpdate:(be,Ke)=>Ua({status:be,testLogRef:ie,getRunningTestsCount:()=>v.size,getTotalTestsCount:()=>h.length,additionalText:Ke}),runSigIntHandlers:P},options:e});Ua({status:Bt.status,testLogRef:ie,getRunningTestsCount:()=>v.size,getTotalTestsCount:()=>h.length}),E.push(Bt)}catch(Bt){let be=`Encountered unexpected fatal error when running test '${H.name}': ${Bt.message}`;C.error(be),ue.error(be)}finally{clearInterval(ae),w[q].done=!0,delete w[q]}await at.flush(s)})({testDefinition:Me})}}await Promise.allSettled(Object.values(w).map(k=>k.promise));let D=E.some(k=>k.status==="FAILED"&&!k.quarantined)?"FAILED":"PASSED";return await b.finish({logger:f,status:D}),process.off("SIGINT",R),A()}async function gz({runResults:r,startTime:e,ranTests:t,apiClient:n,uploadResults:o,outputDir:i}){let a=n.getAppUrl(),s=tw({results:r,startTime:e.getTime(),onFailed:c=>{},getDisplayLine:c=>{let l=`${bm}- ${c.filePath}`;return c.runId&&(l+=` ( link when uploaded: ${a}/runs/${c.runId} )`),l},entity:"mobile test"});return C.log(""),o?(C.success(`Test results have been saved to the folder ${i}. Uploading to Momentic Cloud...`),await Kc({client:n,consoleLogger:C,resultsPath:i})):C.success(`Test results have been saved to the folder ${i}. Upload them to Momentic Cloud by running 'npx momentic-mobile results upload ${i}'.`),s}async function vg(){US(),sw("Chromium")||(ka?(await Mc("The Chromium browser is not installed but is required for automating webviews. Install it now?")||process.exit(1),await Pc({rawBrowsers:["chromium"],force:!1,all:!1})):(C.error("The Chromium browser is not installed but is required for automating webviews. Please install it using 'momentic-mobile install-browsers chromium'"),process.exit(1)))}Kv({serviceName:"mobile-cli"});Ot.setApp("mobile-cli");var Cn=new hz;Cn.name("momentic-mobile").description("Momentic Mobile CLI").version(ts);var Ez=Cn.command("assets").description("Manage mobile testing assets");Ez.command("upload").description("Upload an asset for mobile tests").argument("<file>","Path to the asset file to upload").addOption(Za).addOption(Qa).addOption(hg).addOption(zR).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i}=e,a=nu.resolve(r);ru.existsSync(a)||(C.error(`File not found: ${a}`),process.exit(1));let s=new fr({baseUrl:n,apiKey:t,logger:C});/\.apk$/i.test(a)||(C.error(`File is not an APK file: ${a}`),process.exit(1)),await os({tag:o?.toLowerCase(),channel:i.toLowerCase(),filePath:a,apiClient:s,logger:C})});Cn.command("app").addOption(Za).addOption(Qa).addOption(pg).addOption(dg).addOption(Sg).addOption(mg).addOption(gg).action(async r=>{let{apiKey:e,server:t,yes:n,disableCache:o,saveCache:i}=r,a=Em(r.logLevel);Ot.setApp("mobile-desktop-server");let s=new fr({baseUrl:t,apiKey:e,logger:Ot});await Ym({client:s,skipPrompts:n}),C.debug("API key check complete");let c=bz(import.meta.url),l=nu.dirname(c),u=nu.resolve(l,"..","static");await vg(),C.debug({appiumHome:oa},"Resolved resource paths");let d=await za({configFilePath:r.config}),p=FR;await UR({momenticServerUrl:t,serverPort:p,apiKey:e,staticDir:u,initialProject:d,driverLogLevel:a,logger:Ot,noCache:o,alwaysSaveCache:i});let g=`http://localhost:${p}`;C.info(`Local app started on: ${g}`),await yz(g)});var YR=Cn.command("results").description("Merge and upload test results.");YR.command("merge").description("Merge test results files.").addOption(fg).addArgument(new Ag("<resultsPath>","Path to a directory that contains on or more test results archives.").argRequired()).action(async(r,e)=>{let{outputDir:t}=e;t||(C.error("Output directory is required."),process.exit(1)),ru.existsSync(r)||(C.warn("Results path does not exist, skipping merge."),process.exit(0)),ru.existsSync(t)&&C.warn(`Output directory ${t} already exists, removing before merging...`),Rw(Ot,t,r),Ti(),process.exit(0)});var Tz=new Ag("<results>","Path to the results archive.").argRequired();YR.command("upload").description("Upload test results to Momentic cloud.").addOption(Za).addOption(Qa).addArgument(Tz).action(async(r,e)=>{let{apiKey:t,server:n}=e,o=Ot,i=new fr({baseUrl:n,apiKey:t,logger:o});await Kc({consoleLogger:C,resultsPath:r,client:i}),Ti(),process.exit(0)});var vz=Cn.command("run").alias("test").description("Run tests on the local machine");vz.addOption(Za).addOption(Qa).addOption(dg).addOption(pg).addOption(GR).addOption(Sg).addOption(mg).addOption(gg).addOption(fg).addOption(jR).addOption(VR).addOption(hg).addOption(BR).addOption(HR).addArgument(new Ag("<tests...>","One or more test file path or folders that exist on the local machine.").argOptional()).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i,outputDir:a}=e,s=Em(e.logLevel);await vg(),C.debug({appiumHome:oa},"Resolved resource paths");let c=await za({configFilePath:e.config}),l=a??c.config.outputDir??hw,u=e.parallel??c.config.parallel??1;C.debug("Checking API key and dependencies");let d=new fr({baseUrl:n,apiKey:t,logger:C}),{orgId:p,userId:g}=await Ym({client:d,skipPrompts:e.yes});C.debug("API key check and browser installation complete");let m=Sz(),h=Ot.child({runGroupId:m,orgId:p,userId:g}),f=await Nc(Ot,d,c);h.debug(f,"Got local git metadata");try{let b=await KR({options:{...e,outputDir:l,parallel:u,logLevel:s,alwaysSaveCache:e.saveCache,noCache:e.disableCache},fixtures:{logger:h,project:c,apiClient:d},inputs:{envOverride:e.env,tag:o,channel:i,tests:r},metadata:{gitMetadata:f,runGroupId:m,orgId:p}});Ti(),b.failed>0?process.exit(1):process.exit(0)}catch(b){C.error("Failed to run tests locally. Please check the error message below or run with the --verbose flag."),C.error(b),Ot.error({err:b},"Failed to run tests locally"),Ti(),process.exit(1)}});Cn.command("init").description("Initialize an empty Momentic project in the current working directory").addOption(new fz("--name <name>","Name of the project")).action(async r=>{C.info(`Welcome to the Momentic Mobile project setup wizard! \u{1F680}
3999
- `),C.info("This wizard will help you bootstrap a new Momentic project."),ru.existsSync(pi)&&(C.error("A momentic.config.yaml file already exists in this directory. Please rename or remove it to initialize a new project."),process.exit(1));let t={name:r.name??await nw("Choose an identifier for your project, such as a service, product, or team name (default: 'app'):","app"),include:wm};gw(t,pi),C.success(`Initialized Momentic project file at ${nu.resolve(pi)}`)});Cn.command("install-browsers").description("Install browser executables onto the local machine.").option("-f, --force","Force reinstallation even if the browser executables already exist on disk.").option("-a, --all","Install all browsers types.").argument("[browsers...]",`Browsers to install. Available choices: ${Tm.join(", ")}.`).action(async(r,e)=>{!e.all&&r.length===0&&(C.error("No browsers specified"),process.exit(1)),await Pc({rawBrowsers:r,force:e.force,all:e.all})});async function Ti(){try{await kt.flush(),GA()}catch{}}async function Az(){try{await Cn.parseAsync(process.argv),Ti()}catch(r){Ot.error({err:r},"Uncaught error in CLI"),C.error(r),Ti(),process.exit(1)}}Az();
4002
+ `)}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,finishedAt:new Date,results:Nc(o,t),beforeResults:i?Nc(i,t):void 0,afterResults:a?Nc(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 Ii(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async startMainStepList(){let e=new Ii(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async startAfterStepList(){let e=new Ii(this.keepalive,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}async getScreenshot(e,t){return this.diskStorage.readFile(`${fu}/${t}.jpeg`)}},eg=class{constructor(e,t,n,o,i,a){this.client=e;this.testId=t;this.testName=n;this.runId=o;this.metadata=i;this.diskStorage=a}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){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 t=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),n=JH(),o={id:n,schemaVersion:Gn,runAttemptSchemaVersion:qy,startedAt:new Date,status:"RUNNING"};t.storeFile({name:"metadata.json",contents:JSON.stringify(o,null,2)});let i=ZH(async()=>{await this.client.extendAndroidEmulatorTtl(e.emulatorName)},3e4,{maxWait:6e4}),a=new Qh(()=>void i(),this.testId,this.testName,n,o,t);return this.children.push(a),a}},Su=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:er.CLI,startedAt:new Date,status:"RUNNING",cliVersion:hs,labels:a??[]},c=new ss(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:hs,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 eg(this.client,e.testId,e.testName,e.runId,n,t);return this.children.push(o),o}};async function gx(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 fx(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:p}=e;rG(d)&&x.warn(`Output directory ${d} already exists, removing before test execution...`);let h=await gx(s,a,e.ignoreQuarantine),m=await vr(i),g=await mx({tests:n.tests,yes:e.yes,project:i,momenticFiles:m,logger:x,quarantinedTestReasons:h}),f=s.child({orgId:c,runGroupId:l,branch:u.gitBranchName}),E=await Su.start({logger:f,orgId:c,runGroupId:l,outputDir:d,client:a,gitMetadata:u,labels:[]}),S=[],R=new Date,A=new Set,v=async()=>nG({runResults:S,startTime:R,ranTests:A,apiClient:a,uploadResults:e.uploadResults??!1,outputDir:d}),P=[],C=async()=>{x.warn("SIGINT received. Stopping tests and printing latest results..."),await E.finish({logger:f,status:"CANCELLED"}),await v(),await Promise.allSettled(P.map(D=>D())),setImmediate(()=>{setTimeout(()=>{process.exit(1)},2e3).unref()})};process.once("SIGINT",C);let w={};for(let D=0;D<g.length;D++){let J=Object.values(w);J.length===p&&await Promise.race(J.map(G=>G.promise));let Le=g[D],K=`test-${D}`;w[K]={done:!1,promise:(async({testDefinition:G})=>{A.add(K);let se=G.relativeFilePath.includes("..")?G.fullFilePath:G.relativeFilePath;Ja({status:"START",testLogRef:se,getRunningTestsCount:()=>A.size,getTotalTestsCount:()=>g.length});let ce=setInterval(()=>Ja({status:"RUN",testLogRef:se,getRunningTestsCount:()=>A.size,getTotalTestsCount:()=>g.length}),5*60*1e3),ke=tG(),ge=f.child({testId:G.id,runId:ke}),pt=new wl({logger:ge,reporter:new au(a),runType:"mobile-test-run",runId:ke,testMetadata:G,suiteMetadata:void 0});try{let Wt=await hx({metadata:{...o,runId:ke},fixtures:{...t,tracer:E,logger:ge,usageTracker:pt},inputs:{...n,project:i,testDefinition:G,channel:n.channel??G.settings?.defaultChannel,tag:n.tag??G.settings?.defaultTag,logUpdate:(we,et)=>Ja({status:we,testLogRef:se,getRunningTestsCount:()=>A.size,getTotalTestsCount:()=>g.length,additionalText:et}),runSigIntHandlers:P},options:e});Ja({status:Wt.status,testLogRef:se,getRunningTestsCount:()=>A.size,getTotalTestsCount:()=>g.length}),S.push(Wt)}catch(Wt){let we=`Encountered unexpected fatal error when running test '${G.name}': ${Wt.message}`;x.error(we),ge.error(we)}finally{clearInterval(ce),w[K].done=!0,delete w[K]}await pt.flush(s)})({testDefinition:Le})}}await Promise.allSettled(Object.values(w).map(D=>D.promise));let U=S.some(D=>D.status==="FAILED"&&!D.quarantined)?"FAILED":"PASSED";return await E.finish({logger:f,status:U}),process.off("SIGINT",C),v()}async function nG({runResults:r,startTime:e,ranTests:t,apiClient:n,uploadResults:o,outputDir:i}){let a=n.getAppUrl(),s=AR({results:r,startTime:e.getTime(),onFailed:c=>{},getDisplayLine:c=>{let l=`${Zm}- ${c.filePath}`;return c.runId&&(l+=` ( link when uploaded: ${a}/runs/${c.runId} )`),l},entity:"mobile test"});return x.log(""),o?(x.success(`Test results have been saved to the folder ${i}. Uploading to Momentic Cloud...`),await uu({client:n,consoleLogger:x,resultsPath:i})):x.success(`Test results have been saved to the folder ${i}. Upload them to Momentic Cloud by running 'npx momentic-mobile results upload ${i}'.`),s}async function tg(){tb(),MR("Chromium")||(Ya?(await Wc("The Chromium browser is not installed but is required for automating webviews. Install it now?")||process.exit(1),await $c({rawBrowsers:["chromium"],force:!1,all:!1})):(x.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)))}gw({serviceName:"mobile-cli"});Ft.setApp("mobile-cli");var Nn=new oG;Nn.name("momentic-mobile").description("Momentic Mobile CLI").version(hs);var cG=Nn.command("assets").description("Manage mobile testing assets");cG.command("upload").description("Upload an asset for mobile tests").argument("<file>","Path to the asset file to upload").addOption(ds).addOption(ps).addOption(Kh).addOption(lx).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i}=e,a=bu.resolve(r);yu.existsSync(a)||(x.error(`File not found: ${a}`),process.exit(1));let s=new wr({baseUrl:n,apiKey:t,logger:x});/\.apk$/i.test(a)||(x.error(`File is not an APK file: ${a}`),process.exit(1)),await Ss({tag:o?.toLowerCase(),channel:i.toLowerCase(),filePath:a,apiClient:s,logger:x})});Nn.command("app").addOption(ds).addOption(ps).addOption(Wh).addOption(Vh).addOption(Xh).addOption($h).addOption(qh).action(async r=>{let{apiKey:e,server:t,yes:n,disableCache:o,saveCache:i}=r,a=Qm(r.logLevel);Ft.setApp("mobile-desktop-server");let s=new wr({baseUrl:t,apiKey:e,logger:Ft});await _h({client:s,skipPrompts:n}),x.debug("API key check complete");let c=lG(import.meta.url),l=bu.dirname(c),u=bu.resolve(l,"..","static");await tg(),x.debug({appiumHome:Sa},"Resolved resource paths");let d=await es({configFilePath:r.config}),p=ax;await ix({momenticServerUrl:t,serverPort:p,apiKey:e,staticDir:u,initialProject:d,driverLogLevel:a,logger:Ft,noCache:o,alwaysSaveCache:i});let h=`http://localhost:${p}`;x.info(`Local app started on: ${h}`),await sG(h)});var Sx=Nn.command("results").description("Merge and upload test results.");Sx.command("merge").description("Merge test results files.").addOption(Yh).addArgument(new rg("<resultsPath>","Path to a directory that contains on or more test results archives.").argRequired()).action(async(r,e)=>{let{outputDir:t}=e;t||(x.error("Output directory is required."),process.exit(1)),yu.existsSync(r)||(x.warn("Results path does not exist, skipping merge."),process.exit(0)),yu.existsSync(t)&&x.warn(`Output directory ${t} already exists, removing before merging...`),qR(Ft,t,r),Pi(),process.exit(0)});var uG=new rg("<results>","Path to the results archive.").argRequired();Sx.command("upload").description("Upload test results to Momentic cloud.").addOption(ds).addOption(ps).addArgument(uG).action(async(r,e)=>{let{apiKey:t,server:n}=e,o=Ft,i=new wr({baseUrl:n,apiKey:t,logger:o});await uu({consoleLogger:x,resultsPath:r,client:i}),Pi(),process.exit(0)});var dG=Nn.command("run").alias("test").description("Run tests on the local machine");dG.addOption(ds).addOption(ps).addOption(Vh).addOption(Wh).addOption(ux).addOption(Xh).addOption($h).addOption(qh).addOption(Yh).addOption(dx).addOption(px).addOption(Kh).addOption(sx).addOption(cx).addArgument(new rg("<tests...>","One or more test file path or folders that exist on the local machine.").argOptional()).action(async(r,e)=>{let{apiKey:t,server:n,tag:o,channel:i,outputDir:a}=e,s=Qm(e.logLevel);await tg(),x.debug({appiumHome:Sa},"Resolved resource paths");let c=await es({configFilePath:e.config}),l=a??c.config.outputDir??UR,u=e.parallel??c.config.parallel??1;x.debug("Checking API key and dependencies");let d=new wr({baseUrl:n,apiKey:t,logger:x}),{orgId:p,userId:h}=await _h({client:d,skipPrompts:e.yes});x.debug("API key check and browser installation complete");let m=aG(),g=Ft.child({runGroupId:m,orgId:p,userId:h}),f=await Xc(Ft,d,c);g.debug(f,"Got local git metadata");try{let E=await fx({options:{...e,outputDir:l,parallel:u,logLevel:s,alwaysSaveCache:e.saveCache,noCache:e.disableCache},fixtures:{logger:g,project:c,apiClient:d},inputs:{envOverride:e.env,tag:o,channel:i,tests:r},metadata:{gitMetadata:f,runGroupId:m,orgId:p}});Pi(),E.failed>0?process.exit(1):process.exit(0)}catch(E){x.error("Failed to run tests locally. Please check the error message below or run with the --verbose flag."),x.error(E),Ft.error({err:E},"Failed to run tests locally"),Pi(),process.exit(1)}});Nn.command("init").description("Initialize an empty Momentic project in the current working directory").addOption(new iG("--name <name>","Name of the project")).action(async r=>{x.info(`Welcome to the Momentic Mobile project setup wizard! \u{1F680}
4003
+ `),x.info("This wizard will help you bootstrap a new Momentic project."),yu.existsSync(vi)&&(x.error("A momentic.config.yaml file already exists in this directory. Please rename or remove it to initialize a new project."),process.exit(1));let t={name:r.name??await RR("Choose an identifier for your project, such as a service, product, or team name (default: 'app'):","app"),include:nh};DR(t,vi),x.success(`Initialized Momentic project file at ${bu.resolve(vi)}`)});Nn.command("install-browsers").description("Install browser executables onto the local machine.").option("-f, --force","Force reinstallation even if the browser executables already exist on disk.").option("-a, --all","Install all browsers types.").argument("[browsers...]",`Browsers to install. Available choices: ${eh.join(", ")}.`).action(async(r,e)=>{!e.all&&r.length===0&&(x.error("No browsers specified"),process.exit(1)),await $c({rawBrowsers:r,force:e.force,all:e.all})});async function Pi(){try{await Ht.flush(),cR()}catch{}}async function pG(){try{await Nn.parseAsync(process.argv),Pi()}catch(r){Ft.error({err:r},"Uncaught error in CLI"),x.error(r),Pi(),process.exit(1)}}pG();
4000
4004
  //# sourceMappingURL=cli.js.map