momentic 2.45.2 → 2.45.3

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,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="31a1fe79-70aa-54bd-a4ff-26563f076f99")}catch(e){}}();
4
- var TB=Object.defineProperty;var Mt=(t,e)=>()=>(t&&(e=t(t=0)),e);var vB=(t,e)=>{for(var r in e)TB(t,r,{get:e[r],enumerable:!0})};var qO,KO=Mt(()=>{"use strict";qO=typeof globalThis=="object"?globalThis:global});var YO=Mt(()=>{"use strict";KO()});var XO=Mt(()=>{"use strict";YO()});var ci,LE=Mt(()=>{"use strict";ci="1.9.0"});function w5(t){var e=new Set([t]),r=new Set,n=t.match(JO);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===t};function i(s){return r.add(s),!1}function a(s){return e.add(s),!0}return function(c){if(e.has(c))return!0;if(r.has(c))return!1;var l=c.match(JO);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 JO,ZO,QO=Mt(()=>{"use strict";LE();JO=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;ZO=w5(ci)});function jl(t,e,r,n){var o;n===void 0&&(n=!1);var i=Qu[Zu]=(o=Qu[Zu])!==null&&o!==void 0?o:{version:ci};if(!n&&i[t]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+t);return r.error(a.stack||a.message),!1}if(i.version!==ci){var a=new Error("@opentelemetry/api: Registration of version v"+i.version+" for "+t+" does not match previously registered API v"+ci);return r.error(a.stack||a.message),!1}return i[t]=e,r.debug("@opentelemetry/api: Registered a global for "+t+" v"+ci+"."),!0}function ui(t){var e,r,n=(e=Qu[Zu])===null||e===void 0?void 0:e.version;if(!(!n||!ZO(n)))return(r=Qu[Zu])===null||r===void 0?void 0:r[t]}function Gl(t,e){e.debug("@opentelemetry/api: Unregistering a global for "+t+" v"+ci+".");var r=Qu[Zu];r&&delete r[t]}var x5,Zu,Qu,ed=Mt(()=>{"use strict";XO();LE();QO();x5=ci.split(".")[0],Zu=Symbol.for("opentelemetry.js.api."+x5),Qu=qO});function td(t,e,r){var n=ui("diag");if(n)return r.unshift(e),n[t].apply(n,I5([],_5(r),!1))}var _5,I5,eL,tL=Mt(()=>{"use strict";ed();_5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},I5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},eL=function(){function t(e){this._namespace=e.namespace||"DiagComponentLogger"}return t.prototype.debug=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("debug",this._namespace,e)},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("error",this._namespace,e)},t.prototype.info=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("info",this._namespace,e)},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("warn",this._namespace,e)},t.prototype.verbose=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("verbose",this._namespace,e)},t}()});var Ct,Pg=Mt(()=>{"use strict";(function(t){t[t.NONE=0]="NONE",t[t.ERROR=30]="ERROR",t[t.WARN=50]="WARN",t[t.INFO=60]="INFO",t[t.DEBUG=70]="DEBUG",t[t.VERBOSE=80]="VERBOSE",t[t.ALL=9999]="ALL"})(Ct||(Ct={}))});function rL(t,e){t<Ct.NONE?t=Ct.NONE:t>Ct.ALL&&(t=Ct.ALL),e=e||{};function r(n,o){var i=e[n];return typeof i=="function"&&t>=o?i.bind(e):function(){}}return{error:r("error",Ct.ERROR),warn:r("warn",Ct.WARN),info:r("info",Ct.INFO),debug:r("debug",Ct.DEBUG),verbose:r("verbose",Ct.VERBOSE)}}var nL=Mt(()=>{"use strict";Pg()});var P5,M5,O5,Lo,rd=Mt(()=>{"use strict";tL();nL();Pg();ed();P5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},M5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},O5="diag",Lo=function(){function t(){function e(o){return function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];var s=ui("diag");if(s)return s[o].apply(s,M5([],P5(i),!1))}}var r=this,n=function(o,i){var a,s,c;if(i===void 0&&(i={logLevel:Ct.INFO}),o===r){var l=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return r.error((a=l.stack)!==null&&a!==void 0?a:l.message),!1}typeof i=="number"&&(i={logLevel:i});var u=ui("diag"),d=rL((s=i.logLevel)!==null&&s!==void 0?s:Ct.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 jl("diag",d,r,!0)};r.setLogger=n,r.disable=function(){Gl(O5,r)},r.createComponentLogger=function(o){return new eL(o)},r.verbose=e("verbose"),r.debug=e("debug"),r.info=e("info"),r.warn=e("warn"),r.error=e("error")}return t.instance=function(){return this._instance||(this._instance=new t),this._instance},t}()});var oL,iL=Mt(()=>{"use strict";oL=Symbol("BaggageEntryMetadata")});function NE(t){return typeof t!="string"&&(L5.error("Cannot create baggage metadata from unknown type: "+typeof t),t=""),{__TYPE__:oL,toString:function(){return t}}}var L5,aL=Mt(()=>{"use strict";rd();iL();L5=Lo.instance()});function DE(t){return Symbol.for(t)}var N5,kE,UE=Mt(()=>{"use strict";N5=function(){function t(e){var r=this;r._currentContext=e?new Map(e):new Map,r.getValue=function(n){return r._currentContext.get(n)},r.setValue=function(n,o){var i=new t(r._currentContext);return i._currentContext.set(n,o),i},r.deleteValue=function(n){var o=new t(r._currentContext);return o._currentContext.delete(n),o}}return t}(),kE=new N5});function zE(){return BE}var as,D5,Mg,k5,U5,F5,B5,FE,z5,H5,j5,BE,G5,V5,$5,W5,q5,K5,Y5,HE=Mt(()=>{"use strict";as=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),D5=function(){function t(){}return t.prototype.createGauge=function(e,r){return V5},t.prototype.createHistogram=function(e,r){return $5},t.prototype.createCounter=function(e,r){return G5},t.prototype.createUpDownCounter=function(e,r){return W5},t.prototype.createObservableGauge=function(e,r){return K5},t.prototype.createObservableCounter=function(e,r){return q5},t.prototype.createObservableUpDownCounter=function(e,r){return Y5},t.prototype.addBatchObservableCallback=function(e,r){},t.prototype.removeBatchObservableCallback=function(e){},t}(),Mg=function(){function t(){}return t}(),k5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n){},e}(Mg),U5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n){},e}(Mg),F5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n){},e}(Mg),B5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n){},e}(Mg),FE=function(){function t(){}return t.prototype.addCallback=function(e){},t.prototype.removeCallback=function(e){},t}(),z5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),H5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),j5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),BE=new D5,G5=new k5,V5=new F5,$5=new B5,W5=new U5,q5=new z5,K5=new H5,Y5=new j5});var gn,sL=Mt(()=>{"use strict";(function(t){t[t.INT=0]="INT",t[t.DOUBLE=1]="DOUBLE"})(gn||(gn={}))});var X5,J5,lL,cL=Mt(()=>{"use strict";UE();X5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},J5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},lL=function(){function t(){}return t.prototype.active=function(){return kE},t.prototype.with=function(e,r,n){for(var o=[],i=3;i<arguments.length;i++)o[i-3]=arguments[i];return r.call.apply(r,J5([n],X5(o),!1))},t.prototype.bind=function(e,r){return r},t.prototype.enable=function(){return this},t.prototype.disable=function(){return this},t}()});var Z5,Q5,jE,e3,uL,dL=Mt(()=>{"use strict";cL();ed();rd();Z5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},Q5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},jE="context",e3=new lL,uL=function(){function t(){}return t.getInstance=function(){return this._instance||(this._instance=new t),this._instance},t.prototype.setGlobalContextManager=function(e){return jl(jE,e,Lo.instance())},t.prototype.active=function(){return this._getContextManager().active()},t.prototype.with=function(e,r,n){for(var o,i=[],a=3;a<arguments.length;a++)i[a-3]=arguments[a];return(o=this._getContextManager()).with.apply(o,Q5([e,r,n],Z5(i),!1))},t.prototype.bind=function(e,r){return this._getContextManager().bind(e,r)},t.prototype._getContextManager=function(){return ui(jE)||e3},t.prototype.disable=function(){this._getContextManager().disable(),Gl(jE,Lo.instance())},t}()});var Vl,pL=Mt(()=>{"use strict";dL();Vl=uL.getInstance()});var Z,mL=Mt(()=>{"use strict";rd();Z=Lo.instance()});var t3,gL,hL=Mt(()=>{"use strict";HE();t3=function(){function t(){}return t.prototype.getMeter=function(e,r,n){return BE},t}(),gL=new t3});var GE,fL,SL=Mt(()=>{"use strict";hL();ed();rd();GE="metrics",fL=function(){function t(){}return t.getInstance=function(){return this._instance||(this._instance=new t),this._instance},t.prototype.setGlobalMeterProvider=function(e){return jl(GE,e,Lo.instance())},t.prototype.getMeterProvider=function(){return ui(GE)||gL},t.prototype.getMeter=function(e,r,n){return this.getMeterProvider().getMeter(e,r,n)},t.prototype.disable=function(){Gl(GE,Lo.instance())},t}()});var Og,yL=Mt(()=>{"use strict";SL();Og=fL.getInstance()});var bt=Mt(()=>{"use strict";aL();UE();Pg();HE();sL();pL();mL();yL()});var Ac=(t,e)=>{},If=!1;try{let t=await import("@sentry/node");Ac=t.captureException,t.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:"production",release:process.env.SENTRY_RELEASE_NAME,tracesSampleRate:0}),If=!0}catch{}import{Argument as LQ,Command as NQ,Option as Nr}from"@commander-js/extra-typings";import{execSync as DQ}from"child_process";import{existsSync as nV,statSync as oV}from"fs";import{z as Pf}from"zod";var WQ=Pf.object({input:Pf.string(),agentConfigVersion:Pf.string().optional()}),Qd="finish";import{z as Jt}from"zod";var YQ=Jt.object({srcs:Jt.array(Jt.string()),urls:Jt.array(Jt.string()),desiredSrc:Jt.string().optional(),desiredUrl:Jt.string().optional()}),Jv=Jt.object({srcRegex:Jt.string().optional(),urlRegex:Jt.string().optional()}),Zv=Jt.object({x:Jt.number(),y:Jt.number(),correlation:Jt.number()}),XQ=Jt.object({searchImageBase64String:Jt.string(),pageImageBase64String:Jt.string(),id:Jt.string().uuid(),timeoutMs:Jt.number().max(1e4).min(0).optional()});import{z as D}from"zod";import*as j from"zod";import{extendZodWithOpenApi as AB}from"zod-openapi";import Rc from"zod";var Cc=Rc.object({updatedAt:Rc.coerce.date().optional()}),ya=Rc.object({contentType:Rc.enum(["image/jpeg","image/png"]),id:Rc.string()});AB(j);var jo=(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))(jo||{}),RB=j.object({mPathSelectorTokens:j.string().array(),frameSrcRegex:j.string().optional(),frameUrlRegex:j.string().optional(),indices:j.number().array()}),wc=j.object({result:j.number(),traceId:j.string()}).array(),Go=j.object({type:j.literal("GCS_TRACES"),traces:wc}),Xr=(o=>(o.PRECISE="precise",o.NARROW="narrow",o.BROAD="broad",o.IRRELEVANT="irrelevant",o))(Xr||{}),Qv=j.object({attributes:j.record(j.string(),j.string()).optional(),text:j.string().optional(),position:j.object({x1:j.number(),y1:j.number(),x2:j.number(),y2:j.number(),tolerance:j.nativeEnum(Xr)}).optional(),shape:j.object({width:j.number(),height:j.number(),tolerance:j.nativeEnum(Xr)}).optional(),boundingBox:j.object({x:j.number(),y:j.number(),width:j.number(),height:j.number()}).optional()}),CB=j.object({selectors:j.string().array(),requirements:Qv.optional(),relativeAngleRadians:j.number().min(0).max(2*Math.PI).optional(),relativeDistance:j.number().optional()}),Ei=j.object({id:j.number().int(),dataMomenticId:j.number().int().optional(),selector:j.string().optional(),hybridSelector:j.object({textContent:j.string().nullish(),attributes:j.record(j.string(),j.string().optional()),tagName:j.string(),expandShadowRoot:j.boolean().optional(),classNames:j.string().array(),nthChild:j.number()}).array().optional(),generatedSelectors:j.string().array().optional(),requirements:Qv.optional(),additionalElements:CB.array().optional(),role:j.string().optional(),name:j.string().optional(),numChildren:j.number().optional(),content:j.string().optional(),pathFromRoot:j.string().optional(),serializedHtml:j.string().optional().describe("pruned html including 1 neighbor and 1 layer of children. value for text inputs pruned."),nodeOnlySerializedHtml:j.string().optional().describe("outerHtml of the element without any children. value for text inputs pruned."),screenshotUrl:j.string().url().optional().or(ya.optional()),boundingBox:j.object({x:j.number().optional(),y:j.number().optional(),width:j.number(),height:j.number()}).describe("css pixel bounding box").optional(),frameCache:RB.optional(),inputDescription:j.string().optional().describe("the description that generated this cache"),targetSource:j.nativeEnum(jo).optional(),targetUpdateTime:j.string().optional(),targetUpdateLoggerTags:j.record(j.string(),j.string()).optional(),cacheResolutionUpdateSource:j.string().optional(),cacheResolutionUpdateTime:j.string().optional(),cacheResolutionUpdateLoggerTags:j.record(j.string(),j.string()).optional(),memory:Go.optional()}).openapi({ref:"ElementTargetCache"});function Ms(t){return!!(t.serializedHtml||t.screenshotUrl||t.generatedSelectors||t.hybridSelector)}var wB=j.object({type:j.literal("description"),elementDescriptor:j.string().describe("Description of the element.")}).openapi({ref:"DescriptionTarget"}),xB=j.object({x:j.number(),y:j.number()}),_B=j.object({type:j.literal("coordinates"),pixels:xB}).openapi({ref:"CoordinatesTarget"});function Ti(t){return t.type==="description"}function uo(t){return t.type==="coordinates"}var Tr=j.discriminatedUnion("type",[wB,_B]).openapi({ref:"ElementTarget"});function Mf(t){if(!t)return!1;switch(t.type){case"description":return!!t.elementDescriptor}return!0}function vr(t){if(!t)return"";switch(t.type){case"description":return t.elementDescriptor;case"coordinates":return`x: ${t.pixels.x}, y: ${t.pixels.y}`}}function ep(t){return Go.safeParse(t).success}import{v4 as nt}from"uuid";import*as C from"zod";import{extendZodWithOpenApi as BB}from"zod-openapi";import{z as Ue}from"zod";import{extendZodWithOpenApi as IB}from"zod-openapi";import{z as xc}from"zod";var _c=xc.object({result:xc.boolean(),traceId:xc.string()}).array(),ba=xc.object({type:xc.literal("GCS_TRACES"),traces:_c}),Of=Cc.extend({memory:ba.optional()});IB(Ue);var eA=Ue.object({thoughts:Ue.string(),result:Ue.boolean(),relevantElements:Ue.array(Ue.number()).optional(),updatedMemory:_c.optional()}),Wn=(o=>(o.CONTAINS="CONTAINS",o.STARTS_WITH="STARTS_WITH",o.EQUALS="EQUALS",o.EXISTS="EXISTS",o))(Wn||{});var PB=Ue.object({type:Ue.literal("ELEMENT_NAME"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),value:Ue.string()}).openapi({ref:"ElementNameAssertion"}),MB=Ue.object({type:Ue.literal("ELEMENT_STYLE"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),property:Ue.string(),value:Ue.string()}).openapi({ref:"ElementStyleAssertion"}),OB=Ue.object({type:Ue.literal("ELEMENT_CONTENT"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),value:Ue.string()}).openapi({ref:"ElementContentAssertion"}),LB=Ue.object({type:Ue.literal("ELEMENT_ATTRIBUTE"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),attr:Ue.string(),value:Ue.string()}).openapi({ref:"ElementAttributeValueAssertion"}),Vo=(i=>(i.EXISTS="EXISTS",i.VISIBLE="VISIBLE",i.ENABLED="ENABLED",i.EDITABLE="EDITABLE",i.FOCUSED="FOCUSED",i))(Vo||{});var NB=Ue.object({type:Ue.literal("ELEMENT_EXISTENCE"),negated:Ue.boolean().optional(),condition:Ue.nativeEnum(Vo).describe("Treated as the element exists AND is also ...")}).openapi({ref:"ElementExistenceAssertion"}),tp=Ue.discriminatedUnion("type",[OB,LB,NB,PB,MB]).openapi({ref:"ManualElementAssertion"});var DB=Ue.object({type:Ue.literal("CONTENT"),negated:Ue.boolean().optional(),value:Ue.string()}).openapi({ref:"PageContentAssertion"}),tA=Ue.discriminatedUnion("type",[DB]).openapi({ref:"ManualPageAssertion"});import Dr from"zod";var Lf=Dr.discriminatedUnion("type",[Dr.object({type:Dr.literal("SUBSTRING"),url:Dr.string()}),Dr.object({type:Dr.literal("GLOB"),glob:Dr.string()}),Dr.object({type:Dr.literal("REGEX"),regex:Dr.string()}),Dr.object({type:Dr.literal("DOMAIN"),domain:Dr.string()})]),Ic=Dr.object({urlMatcher:Lf,method:Dr.string().optional()});import{z as Pe}from"zod";var kB=Pe.object({type:Pe.literal("json"),content:Pe.string().describe("The JSON content to send in the request body")}),UB=Pe.object({type:Pe.literal("form-urlencoded"),content:Pe.record(Pe.string(),Pe.string()).describe("The form fields to send in the request body")}),FB=Pe.discriminatedUnion("type",[kB,UB]),Ea=Pe.object({url:Pe.string(),method:Pe.union([Pe.literal("GET"),Pe.literal("POST"),Pe.literal("PUT"),Pe.literal("DELETE"),Pe.literal("PATCH")]),headers:Pe.record(Pe.string(),Pe.string()).optional(),params:Pe.record(Pe.string(),Pe.string()).optional(),body:FB.optional(),timeout:Pe.number().int().optional().describe("Max seconds to wait for the request to complete")}),rA=Pe.object({url:Pe.string(),headers:Pe.record(Pe.string(),Pe.string()).optional(),query:Pe.string(),variables:Pe.string().optional(),timeout:Pe.number().int().optional().describe("Max seconds to wait for the request to complete")}),rp=Pe.object({code:Pe.string(),fragment:Pe.boolean().optional().describe("Agents should not touch this unless explicitly told to"),environment:Pe.union([Pe.literal("NODE"),Pe.literal("BROWSER")]).optional().describe("default NODE, Agents default to using node unless it is necessary to use browser"),timeout:Pe.number().int().max(60).optional().describe("Max seconds for the code to complete")});var ct=(ee=>(ee.AI_EXTRACT="AI_EXTRACT",ee.AI_ASSERTION="AI_ASSERTION",ee.AUTH_LOAD="AUTH_LOAD",ee.AUTH_SAVE="AUTH_SAVE",ee.BLUR="BLUR",ee.CAPTCHA="CAPTCHA",ee.CLICK="CLICK",ee.COOKIE="COOKIE",ee.COPY="COPY",ee.DIALOG="DIALOG",ee.DRAG="DRAG",ee.ELEMENT_CHECK="ELEMENT_CHECK",ee.FILE_UPLOAD="FILE_UPLOAD",ee.FOCUS="FOCUS",ee.GO_BACK="GO_BACK",ee.GO_FORWARD="GO_FORWARD",ee.HOVER="HOVER",ee.JAVASCRIPT="JAVASCRIPT",ee.LOCAL_STORAGE="LOCAL_STORAGE",ee.MOUSE_DRAG="MOUSE_DRAG",ee.NAVIGATE="NAVIGATE",ee.NEW_TAB="NEW_TAB",ee.PAGE_CHECK="PAGE_CHECK",ee.PASTE="PASTE",ee.PRESS="PRESS",ee.KEY_DOWN="KEY_DOWN",ee.KEY_UP="KEY_UP",ee.REFRESH="REFRESH",ee.REQUEST="REQUEST",ee.GRAPHQL_REQUEST="GRAPHQL_REQUEST",ee.SCROLL_DOWN="SCROLL_DOWN",ee.SCROLL_UP="SCROLL_UP",ee.SCROLL_LEFT="SCROLL_LEFT",ee.SCROLL_RIGHT="SCROLL_RIGHT",ee.SELECT_OPTION="SELECT_OPTION",ee.SWITCH_TAB="TAB",ee.TYPE="TYPE",ee.VISUAL_DIFF="VISUAL_DIFF",ee.WAIT="WAIT",ee.WAIT_FOR_URL="WAIT_FOR_URL",ee.REGISTER_REQUEST_LISTENER="REGISTER_REQUEST_LISTENER",ee.AWAIT_LISTENER="AWAIT_LISTENER",ee.RECORD_REQUESTS="RECORD_REQUESTS",ee.GET_RECORDED_REQUESTS="GET_RECORDED_REQUESTS",ee.SET_HEADER="SET_HEADER",ee.MOCK_ROUTE="MOCK_ROUTE",ee.REMOVE_ROUTE_MOCK="REMOVE_ROUTE_MOCK",ee.OFFLINE_MODE="OFFLINE_MODE",ee.SUCCESS="SUCCESS",ee))(ct||{});BB(C);var ue=C.object({thoughts:C.string().optional(),id:C.string().uuid().describe("unique identifier to this step, used for step cache")}),En=C.object({useSelector:C.boolean().optional(),force:C.boolean().optional(),disableCache:C.boolean().optional().describe("disable element caching for this step"),iframeUrl:C.string().optional().describe("url or url regex for the iframe")}).openapi({ref:"CommonTargetingOptions"}),an=Cc.extend({target:Ei}).optional().openapi({ref:"SingleTargetCache"});function op(t){return!!t&&an.safeParse(t).success}var ip=C.object({loadTimeout:C.number().int().max(60).optional().describe("Max seconds for the page to load")}),nA=ue.merge(ip).merge(C.object({type:C.literal("NAVIGATE"),url:C.string()})).openapi({ref:"NavigateCommand"}),ap=En.merge(C.object({cache:an})),Ta=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_UP"),deltaY:C.number().optional()}))).openapi({ref:"ScrollUpCommand"}),va=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_DOWN"),deltaY:C.number().optional()}))).openapi({ref:"ScrollDownCommand"}),Os=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_LEFT"),deltaX:C.number().optional()}))).openapi({ref:"ScrollLeftCommand"}),Ls=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_RIGHT"),deltaX:C.number().optional()}))).openapi({ref:"ScrollRightCommand"}),M7=C.discriminatedUnion("type",[Ta,va,Os,Ls]).openapi({ref:"AllScrollCommands"}),zB=ue.merge(C.object({type:C.literal("DIALOG"),action:C.union([C.literal("ACCEPT"),C.literal("DISMISS")])})).openapi({ref:"DialogCommand"}),oA=ue.merge(C.object({type:C.literal("WAIT"),delay:C.number()})).openapi({ref:"WaitCommand"}),HB=C.object({caseInsensitive:C.boolean().optional().describe("Whether to ignore case when matching the URL"),negated:C.boolean().optional().describe("Wait for the URL to NOT match the provided matcher instead."),timeout:C.number().int().optional().describe("Max seconds to wait for the URL to match")}),iA=ue.extend({type:C.literal("WAIT_FOR_URL"),matcher:Lf}).merge(HB).openapi({ref:"WaitUrlCommand"}),aA=ue.merge(ip).merge(C.object({type:C.literal("REFRESH")})).openapi({ref:"RefreshCommand"}),sA=ue.merge(C.object({type:C.literal("GO_BACK")})).openapi({ref:"GoBackCommand"}),lA=ue.merge(C.object({type:C.literal("GO_FORWARD")})).openapi({ref:"GoForwardCommand"}),jB=ue.extend({type:C.literal("AUTH_SAVE")}).openapi({ref:"AuthSaveCommand"}),GB=ue.extend({type:C.literal("AUTH_LOAD"),storageState:C.string().describe("JSON string auth state. Leave blank or set to the empty string to clear all existing authentication.")}).openapi({ref:"AuthLoadCommand"}),Nf=ue.merge(En).extend({type:C.literal("CAPTCHA")}).openapi({ref:"CaptchaCommand"}),cA=ue.extend({type:C.literal("COPY"),value:C.string()}).openapi({ref:"CopyCommand"}),uA=ue.extend({type:C.literal("PASTE")}).openapi({ref:"PasteCommand"}),dA=ue.merge(rp).extend({type:C.literal("JAVASCRIPT")}).openapi({ref:"JavaScriptCommand"}),Ns=ue.merge(En).extend({type:C.literal("CLICK"),target:Tr,doubleClick:C.boolean().optional(),rightClick:C.boolean().optional(),waitForDownload:C.boolean().optional().describe("Wait for the click to trigger a file download and for the file download to complete."),delayMs:C.number().optional(),downloadTimeoutMs:C.number().optional(),cache:an,relativePosition:C.object({x:C.number(),y:C.number()}).optional()}).openapi({ref:"ClickCommand"}),Df=Cc.extend({fromTarget:Ei.optional(),toTarget:Ei.optional()}),Ds=ue.merge(En).merge(C.object({type:C.literal("DRAG"),fromTarget:Tr,toTarget:Tr,steps:C.number().optional(),hoverSeconds:C.number().optional().describe("Seconds to hover the object before dropping"),cache:Df.optional()})).openapi({ref:"DragCommand"}),ks=ue.merge(En).merge(C.object({type:C.literal("MOUSE_DRAG"),target:Tr.optional(),deltaX:C.string().describe("pixels to move horizontally, can be template"),deltaY:C.string().describe("pixels to move vertically, can be template"),steps:C.number().optional(),cache:an})).openapi({ref:"MouseDragCommand"}),Us=ue.merge(En).merge(C.object({type:C.literal("HOVER"),target:Tr,cache:an})).openapi({ref:"HoverCommand"}),Pc=ue.merge(En).merge(C.object({type:C.literal("FOCUS"),target:Tr,cache:an})).openapi({ref:"FocusCommand"}),Mc=ue.merge(En).extend({type:C.literal("BLUR"),target:Tr.optional(),cache:an}).openapi({ref:"BlurCommand"}),VB=C.object({type:C.literal("URL"),url:C.string()}).describe("Accessible link to the file, either public http or local file://").openapi({ref:"UrlSource"}),$B=C.object({type:C.literal("USER_FILE"),name:C.string()}).describe("Accessible link to the file, references the google cloud file").openapi({ref:"UploadedFileSource"}),WB=ue.extend({type:C.literal("FILE_UPLOAD"),fileSource:C.discriminatedUnion("type",[VB,$B]),filename:C.string().optional()}).openapi({ref:"FileUploadCommand"}),kf=C.discriminatedUnion("type",[C.object({type:C.literal("VALUE"),value:C.string()}),C.object({type:C.literal("LABEL"),label:C.string()}),C.object({type:C.literal("INDEX"),index:C.coerce.string()})]),Fs=ue.merge(En).extend({type:C.literal("SELECT_OPTION"),target:Tr,cache:an,choice:kf.describe("new field for selecting options, optional for backcompat")}).openapi({ref:"SelectOptionCommand"}),Uf=C.union([C.literal("MULTIMODAL"),C.literal("VISION_ONLY")]),Oc=ue.merge(C.object({type:C.literal("AI_ASSERTION"),assertion:C.string(),disableCache:C.boolean().optional(),iframeUrl:C.string().optional(),contextChoice:Uf.optional(),timeout:C.number().int().optional().describe("Max seconds to wait for assertion to be true"),cache:Of.optional(),source:C.string().optional()})).openapi({ref:"AIAssertionCommand"}),po=5,Aa=600,Bs=ue.merge(En).extend({type:C.literal("ELEMENT_CHECK"),target:Tr,assertion:tp,cache:an.or(Of).optional(),timeout:C.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"ElementAssertionCommand"}),pA=ue.extend({type:C.literal("PAGE_CHECK"),assertion:tA,iframeUrl:C.string().optional().describe("url or url regex for the iframe"),timeout:C.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"PageAssertionCommand"}),mA=ue.merge(C.object({type:C.literal("AI_EXTRACT"),goal:C.string(),schema:C.string().optional(),envKey:C.string().optional(),disableCache:C.boolean().optional(),iframeUrl:C.string().optional()})).openapi({ref:"AIExtractCommand"}),qB=C.object({clearContent:C.boolean().optional(),forceClearContent:C.boolean().optional(),delay:C.number().min(0).max(1e3).optional().describe("Delay between each press in milliseconds."),force:C.boolean().optional(),pressEnter:C.boolean().optional(),relativePosition:C.object({x:C.number(),y:C.number()}).optional()}),gA=25,zs=ue.merge(En).merge(qB).extend({type:C.literal("TYPE"),target:Tr.optional(),value:C.string(),cache:an}).openapi({ref:"TypeCommand"}),hA=ue.merge(C.object({type:C.literal("PRESS"),value:C.string(),repeat:C.number().optional(),convertMeta:C.boolean().optional(),delayMs:C.number().optional()})).openapi({ref:"PressCommand"}),fA=ue.merge(C.object({type:C.literal("KEY_DOWN"),value:C.string(),convertMeta:C.boolean().optional()})).openapi({ref:"KeyDownCommand"}),SA=ue.merge(C.object({type:C.literal("KEY_UP"),value:C.string(),convertMeta:C.boolean().optional()})).openapi({ref:"KeyUpCommand"}),KB=C.object({type:C.literal("SUBSTRING"),substring:C.string()}),YB=C.object({type:C.literal("REGEX"),pattern:C.string()}),XB=C.object({type:C.literal("INDEX"),index:C.coerce.string()}),JB=C.discriminatedUnion("type",[KB,YB,XB]),ZB=ue.merge(ip).merge(C.object({type:C.literal("TAB"),action:JB})).openapi({ref:"TabCommand"}),yA=ue.merge(ip).merge(C.object({type:C.literal("NEW_TAB"),url:C.string()})).openapi({ref:"NewTabCommand"}),QB=ue.merge(C.object({type:C.literal("COOKIE"),value:C.string()})).openapi({ref:"CookieCommand"}),bA=ue.merge(C.object({type:C.literal("LOCAL_STORAGE"),key:C.string(),value:C.string()})).openapi({ref:"LocalStorageCommand"}),EA=ue.extend({type:C.literal("REQUEST")}).merge(Ea).openapi({ref:"RequestCommand"}),Lc=C.object({status:C.number().optional(),headers:C.record(C.string(),C.string()),json:C.unknown().optional(),text:C.string().optional(),cookies:C.record(C.string(),C.unknown()).array().optional(),request:C.object({url:C.string(),method:C.string(),headers:C.record(C.string(),C.string()),json:C.unknown().optional()})}),TA=ue.extend({type:C.literal("GRAPHQL_REQUEST")}).merge(rA).openapi({ref:"GraphQLRequestCommand"}),vA=ue.merge(C.object({type:C.literal("SUCCESS"),condition:Oc.optional()})).openapi({ref:"SuccessCommand"}),AA=ue.merge(C.object({type:C.literal("FAILURE")})).openapi({ref:"FailureCommand"}),ez=C.object({data:C.union([C.string().describe("location at which to find a jpg - public URL or local"),ya]),width:C.number(),height:C.number()});function RA(t){return t?ya.safeParse(t).success:!1}var Nc=ue.merge(En).merge(C.object({type:C.literal("VISUAL_DIFF"),threshold:C.number().optional().describe("default 0.1"),target:Tr.optional(),screenshot:ez.optional(),cache:an})).openapi({ref:"VisualDiffCommand"}),tz=ue.merge(C.object({type:C.literal("REGISTER_REQUEST_LISTENER"),requestMatcher:Ic,key:C.string()})).openapi({ref:"RegisterRequestListenerCommand"}),rz=ue.merge(C.object({type:C.literal("AWAIT_LISTENER"),key:C.string(),timeout:C.number().optional().describe("timeout")})).openapi({ref:"WaitForListenerCommand"}),nz=ue.merge(C.object({type:C.literal("RECORD_REQUESTS"),requestMatcher:Ic,key:C.string()})).openapi({ref:"RecordRequestsCommand"}),oz=ue.merge(C.object({type:C.literal("GET_RECORDED_REQUESTS"),key:C.string()})).openapi({ref:"GetRecordedRequestsCommand"}),iz=ue.merge(C.object({type:C.literal("SET_HEADER"),name:C.string(),value:C.string(),requestMatcher:Ic.optional()})).openapi({ref:"SetHeaderCommand"}),az=ue.merge(C.object({type:C.literal("MOCK_ROUTE"),requestMatcher:Ic,responseGenerator:C.string().describe("JavaScript code to generate a response"),fetchOriginalResponse:C.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:C.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"})),sz=ue.merge(C.object({type:C.literal("REMOVE_ROUTE_MOCK"),key:C.string().optional().describe("Key of the mock to remove. If not set, all route mocks will be removed.")}).openapi({ref:"RemoveRouteMockCommandOptions"})),lz=ue.merge(C.object({type:C.literal("OFFLINE_MODE"),enable:C.boolean()})).openapi({ref:"OfflineModeCommand"}),cz=["CLICK","TYPE","PRESS","KEY_DOWN","KEY_UP","SELECT_OPTION","NAVIGATE","SCROLL_DOWN","SCROLL_UP","AI_ASSERTION","GO_BACK","HOVER","WAIT"],O7=[...cz,"DRAG"],uz=C.discriminatedUnion("type",[Ns,zs,hA,fA,SA,Fs,nA,va,Ta,Oc,sA,Us,oA]),dz=C.discriminatedUnion("type",[...uz.options,Ds]),pz=C.discriminatedUnion("type",[...dz.options]),CA=C.discriminatedUnion("type",[...pz.options,vA]),Ff=C.discriminatedUnion("type",[vA,Ns,zs,hA,fA,SA,Fs,nA,va,Ta,Oc,sA,Us,oA,dA,Bs,pA,yA,iA,mA,cA,lA,bA,Ds,ks,uA,aA,EA,TA]),mz=C.discriminatedUnion("type",[mA,GB,jB,Nf,QB,cA,zB,Bs,WB,lA,dA,bA,ks,yA,pA,uA,aA,EA,TA,Os,Ls,ZB,Nc,Pc,Mc,iA,tz,rz,nz,oz,iz,az,sz,lz]),Hs=C.discriminatedUnion("type",[...CA.options,...mz.options]).openapi({ref:"Command"}),sp=C.discriminatedUnion("type",[...CA.options,AA]),L7=C.discriminatedUnion("type",[...Ff.options,AA]);function $o(t){let e;switch(t){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:nt(),type:t};break;case"AUTH_LOAD":{e={id:nt(),type:t,storageState:""};break}case"AI_EXTRACT":e={id:nt(),type:t,goal:""};break;case"DIALOG":e={id:nt(),type:t,action:"DISMISS"};break;case"DRAG":e={id:nt(),type:t,fromTarget:{type:"description",elementDescriptor:""},toTarget:{type:"description",elementDescriptor:""}};break;case"MOUSE_DRAG":e={id:nt(),type:t,deltaX:"0",deltaY:"0",steps:1};break;case"WAIT_FOR_URL":e={id:nt(),type:t,matcher:{type:"SUBSTRING",url:""}};break;case"WAIT":e={id:nt(),type:t,delay:1};break;case"BLUR":e={id:nt(),type:t};break;case"HOVER":case"FOCUS":case"CLICK":e={id:nt(),type:t,target:{type:"description",elementDescriptor:""}};break;case"COOKIE":case"PRESS":case"COPY":case"TYPE":e={id:nt(),type:t,value:"",clearContent:!0};break;case"KEY_DOWN":case"KEY_UP":e={id:nt(),type:t,value:""};break;case"SELECT_OPTION":e={id:nt(),type:t,target:{type:"description",elementDescriptor:""},choice:{type:"VALUE",value:""}};break;case"NAVIGATE":case"NEW_TAB":return{id:nt(),type:t,url:""};case"TAB":e={id:nt(),type:t,action:{type:"SUBSTRING",substring:""}};break;case"REQUEST":e={id:nt(),type:t,url:"",method:"GET"};break;case"GRAPHQL_REQUEST":e={id:nt(),type:t,url:"",query:""};break;case"LOCAL_STORAGE":e={id:nt(),type:t,key:"",value:""};break;case"JAVASCRIPT":e={id:nt(),type:t,code:""};break;case"AI_ASSERTION":e={id:nt(),type:t,assertion:""};break;case"FILE_UPLOAD":{e={id:nt(),type:t,fileSource:{type:"URL",url:""}};break}case"ELEMENT_CHECK":{e={id:nt(),type:t,target:{type:"description",elementDescriptor:""},assertion:{type:"ELEMENT_EXISTENCE",condition:"EXISTS"}};break}case"PAGE_CHECK":{e={id:nt(),type:t,assertion:{type:"CONTENT",value:""}};break}case"REGISTER_REQUEST_LISTENER":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"AWAIT_LISTENER":{e={id:nt(),type:t,key:""};break}case"RECORD_REQUESTS":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"GET_RECORDED_REQUESTS":{e={id:nt(),type:t,key:""};break}case"SET_HEADER":{e={id:nt(),type:t,name:"",value:""};break}case"MOCK_ROUTE":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},responseGenerator:""};break}case"REMOVE_ROUTE_MOCK":{e={id:nt(),type:t};break}case"OFFLINE_MODE":{e={id:nt(),type:t,enable:!0};break}default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}return e}var k7={AI_ASSERTION:"AI Check",JAVASCRIPT:"JavaScript",PAGE_CHECK:"Page Check"};import{z as gz}from"zod";var H7=gz.discriminatedUnion("type",[Mc,Nf,Ns,Ds,Pc,Us,ks,Ta,va,Os,Ls,Fs,zs,Nc,Bs]);function wA(t){return["AI_ASSERTION","ELEMENT_CHECK","PAGE_CHECK"].includes(t)}import{z as hz}from"zod";import{z as Ai}from"zod";function Dc(t){return Ai.object({key:Ai.string(),testId:Ai.string().optional(),moduleId:Ai.string().optional(),organizationId:Ai.string(),value:t})}function kc(t){return Dc(t).extend({uniqueKey:Ai.string()})}function lp(t){return Ai.record(Ai.string(),kc(t))}var kr={type:!0,cache:!0},Wo=hz.discriminatedUnion("type",[Oc.pick(kr),Mc.pick(kr),Ns.pick(kr),Ds.pick(kr),Bs.pick(kr),Pc.pick(kr),Us.pick(kr),ks.pick(kr),Ta.pick(kr),va.pick(kr),Os.pick(kr),Ls.pick(kr),Fs.pick(kr),zs.pick(kr),Nc.pick(kr)]),cp=Object.values(ct).filter(t=>Wo.options.some(e=>e.shape.type.safeParse(t).success));Hs.options.forEach(t=>{if("target"in t.shape&&!cp.includes(t.shape.type.value))throw new Error(`Command ${t.shape.type.value} has a target but no cache`)});function up(t){return cp.includes(t.type)}var xA=Dc(Wo),_A=kc(Wo),Y7=lp(Wo);import{v4 as ht}from"uuid";import{z as I}from"zod";var PA=Symbol("Let zodToJsonSchema decide on which parser to use");var IA={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"},MA=t=>typeof t=="string"?{...IA,name:t}:{...IA,...t};var OA=t=>{let e=MA(t),r=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:r,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 Bf(t,e,r,n){n?.errorMessages&&r&&(t.errorMessage={...t.errorMessage,[e]:r})}function Ge(t,e,r,n,o){t[e]=r,Bf(t,e,n,o)}var dp=(t,e)=>{let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];r++);return[(t.length-r).toString(),...e.slice(r)].join("/")};import{ZodFirstPartyTypeKind as ze}from"zod";function wt(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?dp(e,t.currentPath):e.join("/")}}import{ZodFirstPartyTypeKind as fz}from"zod";function LA(t,e){let r={type:"array"};return t.type?._def&&t.type?._def?.typeName!==fz.ZodAny&&(r.items=pe(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&Ge(r,"minItems",t.minLength.value,t.minLength.message,e),t.maxLength&&Ge(r,"maxItems",t.maxLength.value,t.maxLength.message,e),t.exactLength&&(Ge(r,"minItems",t.exactLength.value,t.exactLength.message,e),Ge(r,"maxItems",t.exactLength.value,t.exactLength.message,e)),r}function NA(t,e){let r={type:"integer",format:"int64"};if(!t.checks)return r;for(let n of t.checks)switch(n.kind){case"min":e.target==="jsonSchema7"?n.inclusive?Ge(r,"minimum",n.value,n.message,e):Ge(r,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(r.exclusiveMinimum=!0),Ge(r,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?Ge(r,"maximum",n.value,n.message,e):Ge(r,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(r.exclusiveMaximum=!0),Ge(r,"maximum",n.value,n.message,e));break;case"multipleOf":Ge(r,"multipleOf",n.value,n.message,e);break}return r}function DA(){return{type:"boolean"}}function pp(t,e){return pe(t.type._def,e)}var kA=(t,e)=>pe(t.innerType._def,e);function zf(t,e,r){let n=r??e.dateStrategy;if(Array.isArray(n))return{anyOf:n.map((o,i)=>zf(t,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 Sz(t,e)}}var Sz=(t,e)=>{let r={type:"integer",format:"unix-time"};if(e.target==="openApi3")return r;for(let n of t.checks)switch(n.kind){case"min":Ge(r,"minimum",n.value,n.message,e);break;case"max":Ge(r,"maximum",n.value,n.message,e);break}return r};function UA(t,e){return{...pe(t.innerType._def,e),default:t.defaultValue()}}function FA(t,e){return e.effectStrategy==="input"?pe(t.schema._def,e):wt(e)}function BA(t){return{type:"string",enum:Array.from(t.values)}}var yz=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function zA(t,e){let r=[pe(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),pe(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),n=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,o=[];return r.forEach(i=>{if(yz(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 HA(t,e){let r=typeof t.value;return r!=="bigint"&&r!=="number"&&r!=="boolean"&&r!=="string"?{type:Array.isArray(t.value)?"array":"object"}:e.target==="openApi3"?{type:r==="bigint"?"integer":r,enum:[t.value]}:{type:r==="bigint"?"integer":r,const:t.value}}import{ZodFirstPartyTypeKind as Uc}from"zod";var Hf,qn={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:()=>(Hf===void 0&&(Hf=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Hf),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 mp(t,e){let r={type:"string"};if(t.checks)for(let n of t.checks)switch(n.kind){case"min":Ge(r,"minLength",typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,n.message,e);break;case"max":Ge(r,"maxLength",typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value,n.message,e);break;case"email":switch(e.emailStrategy){case"format:email":Kn(r,"email",n.message,e);break;case"format:idn-email":Kn(r,"idn-email",n.message,e);break;case"pattern:zod":Ur(r,qn.email,n.message,e);break}break;case"url":Kn(r,"uri",n.message,e);break;case"uuid":Kn(r,"uuid",n.message,e);break;case"regex":Ur(r,n.regex,n.message,e);break;case"cuid":Ur(r,qn.cuid,n.message,e);break;case"cuid2":Ur(r,qn.cuid2,n.message,e);break;case"startsWith":Ur(r,RegExp(`^${jf(n.value,e)}`),n.message,e);break;case"endsWith":Ur(r,RegExp(`${jf(n.value,e)}$`),n.message,e);break;case"datetime":Kn(r,"date-time",n.message,e);break;case"date":Kn(r,"date",n.message,e);break;case"time":Kn(r,"time",n.message,e);break;case"duration":Kn(r,"duration",n.message,e);break;case"length":Ge(r,"minLength",typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,n.message,e),Ge(r,"maxLength",typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value,n.message,e);break;case"includes":{Ur(r,RegExp(jf(n.value,e)),n.message,e);break}case"ip":{n.version!=="v6"&&Kn(r,"ipv4",n.message,e),n.version!=="v4"&&Kn(r,"ipv6",n.message,e);break}case"base64url":Ur(r,qn.base64url,n.message,e);break;case"jwt":Ur(r,qn.jwt,n.message,e);break;case"cidr":{n.version!=="v6"&&Ur(r,qn.ipv4Cidr,n.message,e),n.version!=="v4"&&Ur(r,qn.ipv6Cidr,n.message,e);break}case"emoji":Ur(r,qn.emoji(),n.message,e);break;case"ulid":{Ur(r,qn.ulid,n.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{Kn(r,"binary",n.message,e);break}case"contentEncoding:base64":{Ge(r,"contentEncoding","base64",n.message,e);break}case"pattern:zod":{Ur(r,qn.base64,n.message,e);break}}break}case"nanoid":Ur(r,qn.nanoid,n.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return r}function jf(t,e){return e.patternStrategy==="escape"?Ez(t):t}var bz=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Ez(t){let e="";for(let r=0;r<t.length;r++)bz.has(t[r])||(e+="\\"),e+=t[r];return e}function Kn(t,e,r,n){t.format||t.anyOf?.some(o=>o.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format,...t.errorMessage&&n.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage&&(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.anyOf.push({format:e,...r&&n.errorMessages&&{errorMessage:{format:r}}})):Ge(t,"format",e,r,n)}function Ur(t,e,r,n){t.pattern||t.allOf?.some(o=>o.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern,...t.errorMessage&&n.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage&&(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.allOf.push({pattern:jA(e,n),...r&&n.errorMessages&&{errorMessage:{pattern:r}}})):Ge(t,"pattern",jA(e,n),r,n)}function jA(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let r={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},n=r.i?t.source.toLowerCase():t.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(r.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(r.m){if(n[c]==="^"){o+=`(^|(?<=[\r
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7d2e4c2f-6dc7-5ef0-9f60-cbcd40cc40e7")}catch(e){}}();
4
+ var TB=Object.defineProperty;var Mt=(t,e)=>()=>(t&&(e=t(t=0)),e);var vB=(t,e)=>{for(var r in e)TB(t,r,{get:e[r],enumerable:!0})};var qO,KO=Mt(()=>{"use strict";qO=typeof globalThis=="object"?globalThis:global});var YO=Mt(()=>{"use strict";KO()});var XO=Mt(()=>{"use strict";YO()});var ci,LE=Mt(()=>{"use strict";ci="1.9.0"});function w5(t){var e=new Set([t]),r=new Set,n=t.match(JO);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===t};function i(s){return r.add(s),!1}function a(s){return e.add(s),!0}return function(c){if(e.has(c))return!0;if(r.has(c))return!1;var l=c.match(JO);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 JO,ZO,QO=Mt(()=>{"use strict";LE();JO=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;ZO=w5(ci)});function jl(t,e,r,n){var o;n===void 0&&(n=!1);var i=Qu[Zu]=(o=Qu[Zu])!==null&&o!==void 0?o:{version:ci};if(!n&&i[t]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+t);return r.error(a.stack||a.message),!1}if(i.version!==ci){var a=new Error("@opentelemetry/api: Registration of version v"+i.version+" for "+t+" does not match previously registered API v"+ci);return r.error(a.stack||a.message),!1}return i[t]=e,r.debug("@opentelemetry/api: Registered a global for "+t+" v"+ci+"."),!0}function ui(t){var e,r,n=(e=Qu[Zu])===null||e===void 0?void 0:e.version;if(!(!n||!ZO(n)))return(r=Qu[Zu])===null||r===void 0?void 0:r[t]}function Gl(t,e){e.debug("@opentelemetry/api: Unregistering a global for "+t+" v"+ci+".");var r=Qu[Zu];r&&delete r[t]}var x5,Zu,Qu,ed=Mt(()=>{"use strict";XO();LE();QO();x5=ci.split(".")[0],Zu=Symbol.for("opentelemetry.js.api."+x5),Qu=qO});function td(t,e,r){var n=ui("diag");if(n)return r.unshift(e),n[t].apply(n,I5([],_5(r),!1))}var _5,I5,eL,tL=Mt(()=>{"use strict";ed();_5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},I5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},eL=function(){function t(e){this._namespace=e.namespace||"DiagComponentLogger"}return t.prototype.debug=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("debug",this._namespace,e)},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("error",this._namespace,e)},t.prototype.info=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("info",this._namespace,e)},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("warn",this._namespace,e)},t.prototype.verbose=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return td("verbose",this._namespace,e)},t}()});var Ct,Pg=Mt(()=>{"use strict";(function(t){t[t.NONE=0]="NONE",t[t.ERROR=30]="ERROR",t[t.WARN=50]="WARN",t[t.INFO=60]="INFO",t[t.DEBUG=70]="DEBUG",t[t.VERBOSE=80]="VERBOSE",t[t.ALL=9999]="ALL"})(Ct||(Ct={}))});function rL(t,e){t<Ct.NONE?t=Ct.NONE:t>Ct.ALL&&(t=Ct.ALL),e=e||{};function r(n,o){var i=e[n];return typeof i=="function"&&t>=o?i.bind(e):function(){}}return{error:r("error",Ct.ERROR),warn:r("warn",Ct.WARN),info:r("info",Ct.INFO),debug:r("debug",Ct.DEBUG),verbose:r("verbose",Ct.VERBOSE)}}var nL=Mt(()=>{"use strict";Pg()});var P5,M5,O5,Lo,rd=Mt(()=>{"use strict";tL();nL();Pg();ed();P5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},M5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},O5="diag",Lo=function(){function t(){function e(o){return function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];var s=ui("diag");if(s)return s[o].apply(s,M5([],P5(i),!1))}}var r=this,n=function(o,i){var a,s,c;if(i===void 0&&(i={logLevel:Ct.INFO}),o===r){var l=new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return r.error((a=l.stack)!==null&&a!==void 0?a:l.message),!1}typeof i=="number"&&(i={logLevel:i});var u=ui("diag"),d=rL((s=i.logLevel)!==null&&s!==void 0?s:Ct.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 jl("diag",d,r,!0)};r.setLogger=n,r.disable=function(){Gl(O5,r)},r.createComponentLogger=function(o){return new eL(o)},r.verbose=e("verbose"),r.debug=e("debug"),r.info=e("info"),r.warn=e("warn"),r.error=e("error")}return t.instance=function(){return this._instance||(this._instance=new t),this._instance},t}()});var oL,iL=Mt(()=>{"use strict";oL=Symbol("BaggageEntryMetadata")});function NE(t){return typeof t!="string"&&(L5.error("Cannot create baggage metadata from unknown type: "+typeof t),t=""),{__TYPE__:oL,toString:function(){return t}}}var L5,aL=Mt(()=>{"use strict";rd();iL();L5=Lo.instance()});function DE(t){return Symbol.for(t)}var N5,kE,UE=Mt(()=>{"use strict";N5=function(){function t(e){var r=this;r._currentContext=e?new Map(e):new Map,r.getValue=function(n){return r._currentContext.get(n)},r.setValue=function(n,o){var i=new t(r._currentContext);return i._currentContext.set(n,o),i},r.deleteValue=function(n){var o=new t(r._currentContext);return o._currentContext.delete(n),o}}return t}(),kE=new N5});function zE(){return BE}var as,D5,Mg,k5,U5,F5,B5,FE,z5,H5,j5,BE,G5,V5,$5,W5,q5,K5,Y5,HE=Mt(()=>{"use strict";as=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),D5=function(){function t(){}return t.prototype.createGauge=function(e,r){return V5},t.prototype.createHistogram=function(e,r){return $5},t.prototype.createCounter=function(e,r){return G5},t.prototype.createUpDownCounter=function(e,r){return W5},t.prototype.createObservableGauge=function(e,r){return K5},t.prototype.createObservableCounter=function(e,r){return q5},t.prototype.createObservableUpDownCounter=function(e,r){return Y5},t.prototype.addBatchObservableCallback=function(e,r){},t.prototype.removeBatchObservableCallback=function(e){},t}(),Mg=function(){function t(){}return t}(),k5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n){},e}(Mg),U5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n){},e}(Mg),F5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n){},e}(Mg),B5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n){},e}(Mg),FE=function(){function t(){}return t.prototype.addCallback=function(e){},t.prototype.removeCallback=function(e){},t}(),z5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),H5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),j5=function(t){as(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(FE),BE=new D5,G5=new k5,V5=new F5,$5=new B5,W5=new U5,q5=new z5,K5=new H5,Y5=new j5});var gn,sL=Mt(()=>{"use strict";(function(t){t[t.INT=0]="INT",t[t.DOUBLE=1]="DOUBLE"})(gn||(gn={}))});var X5,J5,lL,cL=Mt(()=>{"use strict";UE();X5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},J5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},lL=function(){function t(){}return t.prototype.active=function(){return kE},t.prototype.with=function(e,r,n){for(var o=[],i=3;i<arguments.length;i++)o[i-3]=arguments[i];return r.call.apply(r,J5([n],X5(o),!1))},t.prototype.bind=function(e,r){return r},t.prototype.enable=function(){return this},t.prototype.disable=function(){return this},t}()});var Z5,Q5,jE,e3,uL,dL=Mt(()=>{"use strict";cL();ed();rd();Z5=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},Q5=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},jE="context",e3=new lL,uL=function(){function t(){}return t.getInstance=function(){return this._instance||(this._instance=new t),this._instance},t.prototype.setGlobalContextManager=function(e){return jl(jE,e,Lo.instance())},t.prototype.active=function(){return this._getContextManager().active()},t.prototype.with=function(e,r,n){for(var o,i=[],a=3;a<arguments.length;a++)i[a-3]=arguments[a];return(o=this._getContextManager()).with.apply(o,Q5([e,r,n],Z5(i),!1))},t.prototype.bind=function(e,r){return this._getContextManager().bind(e,r)},t.prototype._getContextManager=function(){return ui(jE)||e3},t.prototype.disable=function(){this._getContextManager().disable(),Gl(jE,Lo.instance())},t}()});var Vl,pL=Mt(()=>{"use strict";dL();Vl=uL.getInstance()});var Z,mL=Mt(()=>{"use strict";rd();Z=Lo.instance()});var t3,gL,hL=Mt(()=>{"use strict";HE();t3=function(){function t(){}return t.prototype.getMeter=function(e,r,n){return BE},t}(),gL=new t3});var GE,fL,SL=Mt(()=>{"use strict";hL();ed();rd();GE="metrics",fL=function(){function t(){}return t.getInstance=function(){return this._instance||(this._instance=new t),this._instance},t.prototype.setGlobalMeterProvider=function(e){return jl(GE,e,Lo.instance())},t.prototype.getMeterProvider=function(){return ui(GE)||gL},t.prototype.getMeter=function(e,r,n){return this.getMeterProvider().getMeter(e,r,n)},t.prototype.disable=function(){Gl(GE,Lo.instance())},t}()});var Og,yL=Mt(()=>{"use strict";SL();Og=fL.getInstance()});var bt=Mt(()=>{"use strict";aL();UE();Pg();HE();sL();pL();mL();yL()});var Ac=(t,e)=>{},If=!1;try{let t=await import("@sentry/node");Ac=t.captureException,t.init({dsn:"https://89e980855f7b9c6e56fc6c7e7143888b@o4506426201800704.ingest.us.sentry.io/4508343221354497",environment:"production",release:process.env.SENTRY_RELEASE_NAME,tracesSampleRate:0}),If=!0}catch{}import{Argument as LQ,Command as NQ,Option as Nr}from"@commander-js/extra-typings";import{execSync as DQ}from"child_process";import{existsSync as nV,statSync as oV}from"fs";import{z as Pf}from"zod";var WQ=Pf.object({input:Pf.string(),agentConfigVersion:Pf.string().optional()}),Qd="finish";import{z as Jt}from"zod";var YQ=Jt.object({srcs:Jt.array(Jt.string()),urls:Jt.array(Jt.string()),desiredSrc:Jt.string().optional(),desiredUrl:Jt.string().optional()}),Jv=Jt.object({srcRegex:Jt.string().optional(),urlRegex:Jt.string().optional()}),Zv=Jt.object({x:Jt.number(),y:Jt.number(),correlation:Jt.number()}),XQ=Jt.object({searchImageBase64String:Jt.string(),pageImageBase64String:Jt.string(),id:Jt.string().uuid(),timeoutMs:Jt.number().max(1e4).min(0).optional()});import{z as D}from"zod";import*as j from"zod";import{extendZodWithOpenApi as AB}from"zod-openapi";import Rc from"zod";var Cc=Rc.object({updatedAt:Rc.coerce.date().optional()}),ya=Rc.object({contentType:Rc.enum(["image/jpeg","image/png"]),id:Rc.string()});AB(j);var jo=(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))(jo||{}),RB=j.object({mPathSelectorTokens:j.string().array(),frameSrcRegex:j.string().optional(),frameUrlRegex:j.string().optional(),indices:j.number().array()}),wc=j.object({result:j.number(),traceId:j.string()}).array(),Go=j.object({type:j.literal("GCS_TRACES"),traces:wc}),Xr=(o=>(o.PRECISE="precise",o.NARROW="narrow",o.BROAD="broad",o.IRRELEVANT="irrelevant",o))(Xr||{}),Qv=j.object({attributes:j.record(j.string(),j.string()).optional(),text:j.string().optional(),position:j.object({x1:j.number(),y1:j.number(),x2:j.number(),y2:j.number(),tolerance:j.nativeEnum(Xr)}).optional(),shape:j.object({width:j.number(),height:j.number(),tolerance:j.nativeEnum(Xr)}).optional(),boundingBox:j.object({x:j.number(),y:j.number(),width:j.number(),height:j.number()}).optional()}),CB=j.object({selectors:j.string().array(),requirements:Qv.optional(),relativeAngleRadians:j.number().min(0).max(2*Math.PI).optional(),relativeDistance:j.number().optional()}),Ei=j.object({id:j.number().int(),dataMomenticId:j.number().int().optional(),selector:j.string().optional(),hybridSelector:j.object({textContent:j.string().nullish(),attributes:j.record(j.string(),j.string().optional()),tagName:j.string(),expandShadowRoot:j.boolean().optional(),classNames:j.string().array(),nthChild:j.number()}).array().optional(),generatedSelectors:j.string().array().optional(),requirements:Qv.optional(),additionalElements:CB.array().optional(),role:j.string().optional(),name:j.string().optional(),numChildren:j.number().optional(),content:j.string().optional(),pathFromRoot:j.string().optional(),serializedHtml:j.string().optional().describe("pruned html including 1 neighbor and 1 layer of children. value for text inputs pruned."),nodeOnlySerializedHtml:j.string().optional().describe("outerHtml of the element without any children. value for text inputs pruned."),screenshotUrl:j.string().url().optional().or(ya.optional()),boundingBox:j.object({x:j.number().optional(),y:j.number().optional(),width:j.number(),height:j.number()}).describe("css pixel bounding box").optional(),frameCache:RB.optional(),inputDescription:j.string().optional().describe("the description that generated this cache"),targetSource:j.nativeEnum(jo).optional(),targetUpdateTime:j.string().optional(),targetUpdateLoggerTags:j.record(j.string(),j.string()).optional(),cacheResolutionUpdateSource:j.string().optional(),cacheResolutionUpdateTime:j.string().optional(),cacheResolutionUpdateLoggerTags:j.record(j.string(),j.string()).optional(),memory:Go.optional()}).openapi({ref:"ElementTargetCache"});function Ms(t){return!!(t.serializedHtml||t.screenshotUrl||t.generatedSelectors||t.hybridSelector)}var wB=j.object({type:j.literal("description"),elementDescriptor:j.string().describe("Description of the element.")}).openapi({ref:"DescriptionTarget"}),xB=j.object({x:j.number(),y:j.number()}),_B=j.object({type:j.literal("coordinates"),pixels:xB}).openapi({ref:"CoordinatesTarget"});function Ti(t){return t.type==="description"}function uo(t){return t.type==="coordinates"}var Tr=j.discriminatedUnion("type",[wB,_B]).openapi({ref:"ElementTarget"});function Mf(t){if(!t)return!1;switch(t.type){case"description":return!!t.elementDescriptor}return!0}function vr(t){if(!t)return"";switch(t.type){case"description":return t.elementDescriptor;case"coordinates":return`x: ${t.pixels.x}, y: ${t.pixels.y}`}}function ep(t){return Go.safeParse(t).success}import{v4 as nt}from"uuid";import*as C from"zod";import{extendZodWithOpenApi as BB}from"zod-openapi";import{z as Ue}from"zod";import{extendZodWithOpenApi as IB}from"zod-openapi";import{z as xc}from"zod";var _c=xc.object({result:xc.boolean(),traceId:xc.string()}).array(),ba=xc.object({type:xc.literal("GCS_TRACES"),traces:_c}),Of=Cc.extend({memory:ba.optional()});IB(Ue);var eA=Ue.object({thoughts:Ue.string(),result:Ue.boolean(),relevantElements:Ue.array(Ue.number()).optional(),updatedMemory:_c.optional()}),Wn=(o=>(o.CONTAINS="CONTAINS",o.STARTS_WITH="STARTS_WITH",o.EQUALS="EQUALS",o.EXISTS="EXISTS",o))(Wn||{});var PB=Ue.object({type:Ue.literal("ELEMENT_NAME"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),value:Ue.string()}).openapi({ref:"ElementNameAssertion"}),MB=Ue.object({type:Ue.literal("ELEMENT_STYLE"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),property:Ue.string(),value:Ue.string()}).openapi({ref:"ElementStyleAssertion"}),OB=Ue.object({type:Ue.literal("ELEMENT_CONTENT"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),value:Ue.string()}).openapi({ref:"ElementContentAssertion"}),LB=Ue.object({type:Ue.literal("ELEMENT_ATTRIBUTE"),negated:Ue.boolean().optional(),operation:Ue.nativeEnum(Wn),attr:Ue.string(),value:Ue.string()}).openapi({ref:"ElementAttributeValueAssertion"}),Vo=(i=>(i.EXISTS="EXISTS",i.VISIBLE="VISIBLE",i.ENABLED="ENABLED",i.EDITABLE="EDITABLE",i.FOCUSED="FOCUSED",i))(Vo||{});var NB=Ue.object({type:Ue.literal("ELEMENT_EXISTENCE"),negated:Ue.boolean().optional(),condition:Ue.nativeEnum(Vo).describe("Treated as the element exists AND is also ...")}).openapi({ref:"ElementExistenceAssertion"}),tp=Ue.discriminatedUnion("type",[OB,LB,NB,PB,MB]).openapi({ref:"ManualElementAssertion"});var DB=Ue.object({type:Ue.literal("CONTENT"),negated:Ue.boolean().optional(),value:Ue.string()}).openapi({ref:"PageContentAssertion"}),tA=Ue.discriminatedUnion("type",[DB]).openapi({ref:"ManualPageAssertion"});import Dr from"zod";var Lf=Dr.discriminatedUnion("type",[Dr.object({type:Dr.literal("SUBSTRING"),url:Dr.string()}),Dr.object({type:Dr.literal("GLOB"),glob:Dr.string()}),Dr.object({type:Dr.literal("REGEX"),regex:Dr.string()}),Dr.object({type:Dr.literal("DOMAIN"),domain:Dr.string()})]),Ic=Dr.object({urlMatcher:Lf,method:Dr.string().optional()});import{z as Pe}from"zod";var kB=Pe.object({type:Pe.literal("json"),content:Pe.string().describe("The JSON content to send in the request body")}),UB=Pe.object({type:Pe.literal("form-urlencoded"),content:Pe.record(Pe.string(),Pe.string()).describe("The form fields to send in the request body")}),FB=Pe.discriminatedUnion("type",[kB,UB]),Ea=Pe.object({url:Pe.string(),method:Pe.union([Pe.literal("GET"),Pe.literal("POST"),Pe.literal("PUT"),Pe.literal("DELETE"),Pe.literal("PATCH")]),headers:Pe.record(Pe.string(),Pe.string()).optional(),params:Pe.record(Pe.string(),Pe.string()).optional(),body:FB.optional(),timeout:Pe.number().int().optional().describe("Max seconds to wait for the request to complete")}),rA=Pe.object({url:Pe.string(),headers:Pe.record(Pe.string(),Pe.string()).optional(),query:Pe.string(),variables:Pe.string().optional(),timeout:Pe.number().int().optional().describe("Max seconds to wait for the request to complete")}),rp=Pe.object({code:Pe.string(),fragment:Pe.boolean().optional().describe("Agents should not touch this unless explicitly told to"),environment:Pe.union([Pe.literal("NODE"),Pe.literal("BROWSER")]).optional().describe("default NODE, Agents default to using node unless it is necessary to use browser"),timeout:Pe.number().int().max(60).optional().describe("Max seconds for the code to complete")});var ct=(ee=>(ee.AI_EXTRACT="AI_EXTRACT",ee.AI_ASSERTION="AI_ASSERTION",ee.AUTH_LOAD="AUTH_LOAD",ee.AUTH_SAVE="AUTH_SAVE",ee.BLUR="BLUR",ee.CAPTCHA="CAPTCHA",ee.CLICK="CLICK",ee.COOKIE="COOKIE",ee.COPY="COPY",ee.DIALOG="DIALOG",ee.DRAG="DRAG",ee.ELEMENT_CHECK="ELEMENT_CHECK",ee.FILE_UPLOAD="FILE_UPLOAD",ee.FOCUS="FOCUS",ee.GO_BACK="GO_BACK",ee.GO_FORWARD="GO_FORWARD",ee.HOVER="HOVER",ee.JAVASCRIPT="JAVASCRIPT",ee.LOCAL_STORAGE="LOCAL_STORAGE",ee.MOUSE_DRAG="MOUSE_DRAG",ee.NAVIGATE="NAVIGATE",ee.NEW_TAB="NEW_TAB",ee.PAGE_CHECK="PAGE_CHECK",ee.PASTE="PASTE",ee.PRESS="PRESS",ee.KEY_DOWN="KEY_DOWN",ee.KEY_UP="KEY_UP",ee.REFRESH="REFRESH",ee.REQUEST="REQUEST",ee.GRAPHQL_REQUEST="GRAPHQL_REQUEST",ee.SCROLL_DOWN="SCROLL_DOWN",ee.SCROLL_UP="SCROLL_UP",ee.SCROLL_LEFT="SCROLL_LEFT",ee.SCROLL_RIGHT="SCROLL_RIGHT",ee.SELECT_OPTION="SELECT_OPTION",ee.SWITCH_TAB="TAB",ee.TYPE="TYPE",ee.VISUAL_DIFF="VISUAL_DIFF",ee.WAIT="WAIT",ee.WAIT_FOR_URL="WAIT_FOR_URL",ee.REGISTER_REQUEST_LISTENER="REGISTER_REQUEST_LISTENER",ee.AWAIT_LISTENER="AWAIT_LISTENER",ee.RECORD_REQUESTS="RECORD_REQUESTS",ee.GET_RECORDED_REQUESTS="GET_RECORDED_REQUESTS",ee.SET_HEADER="SET_HEADER",ee.MOCK_ROUTE="MOCK_ROUTE",ee.REMOVE_ROUTE_MOCK="REMOVE_ROUTE_MOCK",ee.OFFLINE_MODE="OFFLINE_MODE",ee.SUCCESS="SUCCESS",ee))(ct||{});BB(C);var ue=C.object({thoughts:C.string().optional(),id:C.string().uuid().describe("unique identifier to this step, used for step cache")}),En=C.object({useSelector:C.boolean().optional(),force:C.boolean().optional(),disableCache:C.boolean().optional().describe("disable element caching for this step"),iframeUrl:C.string().optional().describe("url or url regex for the iframe")}).openapi({ref:"CommonTargetingOptions"}),an=Cc.extend({target:Ei}).optional().openapi({ref:"SingleTargetCache"});function op(t){return!!t&&an.safeParse(t).success}var ip=C.object({loadTimeout:C.number().int().max(60).optional().describe("Max seconds for the page to load")}),nA=ue.merge(ip).merge(C.object({type:C.literal("NAVIGATE"),url:C.string()})).openapi({ref:"NavigateCommand"}),ap=En.merge(C.object({cache:an})),Ta=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_UP"),deltaY:C.number().optional()}))).openapi({ref:"ScrollUpCommand"}),va=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_DOWN"),deltaY:C.number().optional()}))).openapi({ref:"ScrollDownCommand"}),Os=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_LEFT"),deltaX:C.number().optional()}))).openapi({ref:"ScrollLeftCommand"}),Ls=ue.merge(ap.merge(C.object({target:Tr.optional(),type:C.literal("SCROLL_RIGHT"),deltaX:C.number().optional()}))).openapi({ref:"ScrollRightCommand"}),M7=C.discriminatedUnion("type",[Ta,va,Os,Ls]).openapi({ref:"AllScrollCommands"}),zB=ue.merge(C.object({type:C.literal("DIALOG"),action:C.union([C.literal("ACCEPT"),C.literal("DISMISS")])})).openapi({ref:"DialogCommand"}),oA=ue.merge(C.object({type:C.literal("WAIT"),delay:C.number()})).openapi({ref:"WaitCommand"}),HB=C.object({caseInsensitive:C.boolean().optional().describe("Whether to ignore case when matching the URL"),negated:C.boolean().optional().describe("Wait for the URL to NOT match the provided matcher instead."),timeout:C.number().int().optional().describe("Max seconds to wait for the URL to match")}),iA=ue.extend({type:C.literal("WAIT_FOR_URL"),matcher:Lf}).merge(HB).openapi({ref:"WaitUrlCommand"}),aA=ue.merge(ip).merge(C.object({type:C.literal("REFRESH")})).openapi({ref:"RefreshCommand"}),sA=ue.merge(C.object({type:C.literal("GO_BACK")})).openapi({ref:"GoBackCommand"}),lA=ue.merge(C.object({type:C.literal("GO_FORWARD")})).openapi({ref:"GoForwardCommand"}),jB=ue.extend({type:C.literal("AUTH_SAVE")}).openapi({ref:"AuthSaveCommand"}),GB=ue.extend({type:C.literal("AUTH_LOAD"),storageState:C.string().describe("JSON string auth state. Leave blank or set to the empty string to clear all existing authentication.")}).openapi({ref:"AuthLoadCommand"}),Nf=ue.merge(En).extend({type:C.literal("CAPTCHA")}).openapi({ref:"CaptchaCommand"}),cA=ue.extend({type:C.literal("COPY"),value:C.string()}).openapi({ref:"CopyCommand"}),uA=ue.extend({type:C.literal("PASTE")}).openapi({ref:"PasteCommand"}),dA=ue.merge(rp).extend({type:C.literal("JAVASCRIPT")}).openapi({ref:"JavaScriptCommand"}),Ns=ue.merge(En).extend({type:C.literal("CLICK"),target:Tr,doubleClick:C.boolean().optional(),rightClick:C.boolean().optional(),waitForDownload:C.boolean().optional().describe("Wait for the click to trigger a file download and for the file download to complete."),delayMs:C.number().optional(),downloadTimeoutMs:C.number().optional(),cache:an,relativePosition:C.object({x:C.number(),y:C.number()}).optional()}).openapi({ref:"ClickCommand"}),Df=Cc.extend({fromTarget:Ei.optional(),toTarget:Ei.optional()}),Ds=ue.merge(En).merge(C.object({type:C.literal("DRAG"),fromTarget:Tr,toTarget:Tr,steps:C.number().optional(),hoverSeconds:C.number().optional().describe("Seconds to hover the object before dropping"),cache:Df.optional()})).openapi({ref:"DragCommand"}),ks=ue.merge(En).merge(C.object({type:C.literal("MOUSE_DRAG"),target:Tr.optional(),deltaX:C.string().describe("pixels to move horizontally, can be template"),deltaY:C.string().describe("pixels to move vertically, can be template"),steps:C.number().optional(),cache:an})).openapi({ref:"MouseDragCommand"}),Us=ue.merge(En).merge(C.object({type:C.literal("HOVER"),target:Tr,cache:an})).openapi({ref:"HoverCommand"}),Pc=ue.merge(En).merge(C.object({type:C.literal("FOCUS"),target:Tr,cache:an})).openapi({ref:"FocusCommand"}),Mc=ue.merge(En).extend({type:C.literal("BLUR"),target:Tr.optional(),cache:an}).openapi({ref:"BlurCommand"}),VB=C.object({type:C.literal("URL"),url:C.string()}).describe("Accessible link to the file, either public http or local file://").openapi({ref:"UrlSource"}),$B=C.object({type:C.literal("USER_FILE"),name:C.string()}).describe("Accessible link to the file, references the google cloud file").openapi({ref:"UploadedFileSource"}),WB=ue.extend({type:C.literal("FILE_UPLOAD"),fileSource:C.discriminatedUnion("type",[VB,$B]),filename:C.string().optional()}).openapi({ref:"FileUploadCommand"}),kf=C.discriminatedUnion("type",[C.object({type:C.literal("VALUE"),value:C.string()}),C.object({type:C.literal("LABEL"),label:C.string()}),C.object({type:C.literal("INDEX"),index:C.coerce.string()})]),Fs=ue.merge(En).extend({type:C.literal("SELECT_OPTION"),target:Tr,cache:an,choice:kf.describe("new field for selecting options, optional for backcompat")}).openapi({ref:"SelectOptionCommand"}),Uf=C.union([C.literal("MULTIMODAL"),C.literal("VISION_ONLY")]),Oc=ue.merge(C.object({type:C.literal("AI_ASSERTION"),assertion:C.string(),disableCache:C.boolean().optional(),iframeUrl:C.string().optional(),contextChoice:Uf.optional(),timeout:C.number().int().optional().describe("Max seconds to wait for assertion to be true"),cache:Of.optional(),source:C.string().optional()})).openapi({ref:"AIAssertionCommand"}),po=5,Aa=600,Bs=ue.merge(En).extend({type:C.literal("ELEMENT_CHECK"),target:Tr,assertion:tp,cache:an.or(Of).optional(),timeout:C.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"ElementAssertionCommand"}),pA=ue.extend({type:C.literal("PAGE_CHECK"),assertion:tA,iframeUrl:C.string().optional().describe("url or url regex for the iframe"),timeout:C.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")}).openapi({ref:"PageAssertionCommand"}),mA=ue.merge(C.object({type:C.literal("AI_EXTRACT"),goal:C.string(),schema:C.string().optional(),envKey:C.string().optional(),disableCache:C.boolean().optional(),iframeUrl:C.string().optional()})).openapi({ref:"AIExtractCommand"}),qB=C.object({clearContent:C.boolean().optional(),forceClearContent:C.boolean().optional(),delay:C.number().min(0).max(1e3).optional().describe("Delay between each press in milliseconds."),force:C.boolean().optional(),pressEnter:C.boolean().optional(),relativePosition:C.object({x:C.number(),y:C.number()}).optional()}),gA=25,zs=ue.merge(En).merge(qB).extend({type:C.literal("TYPE"),target:Tr.optional(),value:C.string(),cache:an}).openapi({ref:"TypeCommand"}),hA=ue.merge(C.object({type:C.literal("PRESS"),value:C.string(),repeat:C.number().optional(),convertMeta:C.boolean().optional(),delayMs:C.number().optional()})).openapi({ref:"PressCommand"}),fA=ue.merge(C.object({type:C.literal("KEY_DOWN"),value:C.string(),convertMeta:C.boolean().optional()})).openapi({ref:"KeyDownCommand"}),SA=ue.merge(C.object({type:C.literal("KEY_UP"),value:C.string(),convertMeta:C.boolean().optional()})).openapi({ref:"KeyUpCommand"}),KB=C.object({type:C.literal("SUBSTRING"),substring:C.string()}),YB=C.object({type:C.literal("REGEX"),pattern:C.string()}),XB=C.object({type:C.literal("INDEX"),index:C.coerce.string()}),JB=C.discriminatedUnion("type",[KB,YB,XB]),ZB=ue.merge(ip).merge(C.object({type:C.literal("TAB"),action:JB})).openapi({ref:"TabCommand"}),yA=ue.merge(ip).merge(C.object({type:C.literal("NEW_TAB"),url:C.string()})).openapi({ref:"NewTabCommand"}),QB=ue.merge(C.object({type:C.literal("COOKIE"),value:C.string()})).openapi({ref:"CookieCommand"}),bA=ue.merge(C.object({type:C.literal("LOCAL_STORAGE"),key:C.string(),value:C.string()})).openapi({ref:"LocalStorageCommand"}),EA=ue.extend({type:C.literal("REQUEST")}).merge(Ea).openapi({ref:"RequestCommand"}),Lc=C.object({status:C.number().optional(),headers:C.record(C.string(),C.string()),json:C.unknown().optional(),text:C.string().optional(),cookies:C.record(C.string(),C.unknown()).array().optional(),request:C.object({url:C.string(),method:C.string(),headers:C.record(C.string(),C.string()),json:C.unknown().optional()})}),TA=ue.extend({type:C.literal("GRAPHQL_REQUEST")}).merge(rA).openapi({ref:"GraphQLRequestCommand"}),vA=ue.merge(C.object({type:C.literal("SUCCESS"),condition:Oc.optional()})).openapi({ref:"SuccessCommand"}),AA=ue.merge(C.object({type:C.literal("FAILURE")})).openapi({ref:"FailureCommand"}),ez=C.object({data:C.union([C.string().describe("location at which to find a jpg - public URL or local"),ya]),width:C.number(),height:C.number()});function RA(t){return t?ya.safeParse(t).success:!1}var Nc=ue.merge(En).merge(C.object({type:C.literal("VISUAL_DIFF"),threshold:C.number().optional().describe("default 0.1"),target:Tr.optional(),screenshot:ez.optional(),cache:an})).openapi({ref:"VisualDiffCommand"}),tz=ue.merge(C.object({type:C.literal("REGISTER_REQUEST_LISTENER"),requestMatcher:Ic,key:C.string()})).openapi({ref:"RegisterRequestListenerCommand"}),rz=ue.merge(C.object({type:C.literal("AWAIT_LISTENER"),key:C.string(),timeout:C.number().optional().describe("timeout")})).openapi({ref:"WaitForListenerCommand"}),nz=ue.merge(C.object({type:C.literal("RECORD_REQUESTS"),requestMatcher:Ic,key:C.string()})).openapi({ref:"RecordRequestsCommand"}),oz=ue.merge(C.object({type:C.literal("GET_RECORDED_REQUESTS"),key:C.string()})).openapi({ref:"GetRecordedRequestsCommand"}),iz=ue.merge(C.object({type:C.literal("SET_HEADER"),name:C.string(),value:C.string(),requestMatcher:Ic.optional()})).openapi({ref:"SetHeaderCommand"}),az=ue.merge(C.object({type:C.literal("MOCK_ROUTE"),requestMatcher:Ic,responseGenerator:C.string().describe("JavaScript code to generate a response"),fetchOriginalResponse:C.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:C.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"})),sz=ue.merge(C.object({type:C.literal("REMOVE_ROUTE_MOCK"),key:C.string().optional().describe("Key of the mock to remove. If not set, all route mocks will be removed.")}).openapi({ref:"RemoveRouteMockCommandOptions"})),lz=ue.merge(C.object({type:C.literal("OFFLINE_MODE"),enable:C.boolean()})).openapi({ref:"OfflineModeCommand"}),cz=["CLICK","TYPE","PRESS","KEY_DOWN","KEY_UP","SELECT_OPTION","NAVIGATE","SCROLL_DOWN","SCROLL_UP","AI_ASSERTION","GO_BACK","HOVER","WAIT"],O7=[...cz,"DRAG"],uz=C.discriminatedUnion("type",[Ns,zs,hA,fA,SA,Fs,nA,va,Ta,Oc,sA,Us,oA]),dz=C.discriminatedUnion("type",[...uz.options,Ds]),pz=C.discriminatedUnion("type",[...dz.options]),CA=C.discriminatedUnion("type",[...pz.options,vA]),Ff=C.discriminatedUnion("type",[vA,Ns,zs,hA,fA,SA,Fs,nA,va,Ta,Oc,sA,Us,oA,dA,Bs,pA,yA,iA,mA,cA,lA,bA,Ds,ks,uA,aA,EA,TA]),mz=C.discriminatedUnion("type",[mA,GB,jB,Nf,QB,cA,zB,Bs,WB,lA,dA,bA,ks,yA,pA,uA,aA,EA,TA,Os,Ls,ZB,Nc,Pc,Mc,iA,tz,rz,nz,oz,iz,az,sz,lz]),Hs=C.discriminatedUnion("type",[...CA.options,...mz.options]).openapi({ref:"Command"}),sp=C.discriminatedUnion("type",[...CA.options,AA]),L7=C.discriminatedUnion("type",[...Ff.options,AA]);function $o(t){let e;switch(t){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:nt(),type:t};break;case"AUTH_LOAD":{e={id:nt(),type:t,storageState:""};break}case"AI_EXTRACT":e={id:nt(),type:t,goal:""};break;case"DIALOG":e={id:nt(),type:t,action:"DISMISS"};break;case"DRAG":e={id:nt(),type:t,fromTarget:{type:"description",elementDescriptor:""},toTarget:{type:"description",elementDescriptor:""}};break;case"MOUSE_DRAG":e={id:nt(),type:t,deltaX:"0",deltaY:"0",steps:1};break;case"WAIT_FOR_URL":e={id:nt(),type:t,matcher:{type:"SUBSTRING",url:""}};break;case"WAIT":e={id:nt(),type:t,delay:1};break;case"BLUR":e={id:nt(),type:t};break;case"HOVER":case"FOCUS":case"CLICK":e={id:nt(),type:t,target:{type:"description",elementDescriptor:""}};break;case"COOKIE":case"PRESS":case"COPY":case"TYPE":e={id:nt(),type:t,value:"",clearContent:!0};break;case"KEY_DOWN":case"KEY_UP":e={id:nt(),type:t,value:""};break;case"SELECT_OPTION":e={id:nt(),type:t,target:{type:"description",elementDescriptor:""},choice:{type:"VALUE",value:""}};break;case"NAVIGATE":case"NEW_TAB":return{id:nt(),type:t,url:""};case"TAB":e={id:nt(),type:t,action:{type:"SUBSTRING",substring:""}};break;case"REQUEST":e={id:nt(),type:t,url:"",method:"GET"};break;case"GRAPHQL_REQUEST":e={id:nt(),type:t,url:"",query:""};break;case"LOCAL_STORAGE":e={id:nt(),type:t,key:"",value:""};break;case"JAVASCRIPT":e={id:nt(),type:t,code:""};break;case"AI_ASSERTION":e={id:nt(),type:t,assertion:""};break;case"FILE_UPLOAD":{e={id:nt(),type:t,fileSource:{type:"URL",url:""}};break}case"ELEMENT_CHECK":{e={id:nt(),type:t,target:{type:"description",elementDescriptor:""},assertion:{type:"ELEMENT_EXISTENCE",condition:"EXISTS"}};break}case"PAGE_CHECK":{e={id:nt(),type:t,assertion:{type:"CONTENT",value:""}};break}case"REGISTER_REQUEST_LISTENER":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"AWAIT_LISTENER":{e={id:nt(),type:t,key:""};break}case"RECORD_REQUESTS":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},key:""};break}case"GET_RECORDED_REQUESTS":{e={id:nt(),type:t,key:""};break}case"SET_HEADER":{e={id:nt(),type:t,name:"",value:""};break}case"MOCK_ROUTE":{e={id:nt(),type:t,requestMatcher:{urlMatcher:{type:"REGEX",regex:""}},responseGenerator:""};break}case"REMOVE_ROUTE_MOCK":{e={id:nt(),type:t};break}case"OFFLINE_MODE":{e={id:nt(),type:t,enable:!0};break}default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}return e}var k7={AI_ASSERTION:"AI Check",JAVASCRIPT:"JavaScript",PAGE_CHECK:"Page Check"};import{z as gz}from"zod";var H7=gz.discriminatedUnion("type",[Mc,Nf,Ns,Ds,Pc,Us,ks,Ta,va,Os,Ls,Fs,zs,Nc,Bs]);function wA(t){return["AI_ASSERTION","ELEMENT_CHECK","PAGE_CHECK"].includes(t)}import{z as hz}from"zod";import{z as Ai}from"zod";function Dc(t){return Ai.object({key:Ai.string(),testId:Ai.string().optional(),moduleId:Ai.string().optional(),organizationId:Ai.string(),value:t})}function kc(t){return Dc(t).extend({uniqueKey:Ai.string()})}function lp(t){return Ai.record(Ai.string(),kc(t))}var kr={type:!0,cache:!0},Wo=hz.discriminatedUnion("type",[Oc.pick(kr),Mc.pick(kr),Ns.pick(kr),Ds.pick(kr),Bs.pick(kr),Pc.pick(kr),Us.pick(kr),ks.pick(kr),Ta.pick(kr),va.pick(kr),Os.pick(kr),Ls.pick(kr),Fs.pick(kr),zs.pick(kr),Nc.pick(kr)]),cp=Object.values(ct).filter(t=>Wo.options.some(e=>e.shape.type.safeParse(t).success));Hs.options.forEach(t=>{if("target"in t.shape&&!cp.includes(t.shape.type.value))throw new Error(`Command ${t.shape.type.value} has a target but no cache`)});function up(t){return cp.includes(t.type)}var xA=Dc(Wo),_A=kc(Wo),Y7=lp(Wo);import{v4 as ht}from"uuid";import{z as I}from"zod";var PA=Symbol("Let zodToJsonSchema decide on which parser to use");var IA={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"},MA=t=>typeof t=="string"?{...IA,name:t}:{...IA,...t};var OA=t=>{let e=MA(t),r=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:r,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 Bf(t,e,r,n){n?.errorMessages&&r&&(t.errorMessage={...t.errorMessage,[e]:r})}function Ge(t,e,r,n,o){t[e]=r,Bf(t,e,n,o)}var dp=(t,e)=>{let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];r++);return[(t.length-r).toString(),...e.slice(r)].join("/")};import{ZodFirstPartyTypeKind as Be}from"zod";function wt(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?dp(e,t.currentPath):e.join("/")}}import{ZodFirstPartyTypeKind as fz}from"zod";function LA(t,e){let r={type:"array"};return t.type?._def&&t.type?._def?.typeName!==fz.ZodAny&&(r.items=pe(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&Ge(r,"minItems",t.minLength.value,t.minLength.message,e),t.maxLength&&Ge(r,"maxItems",t.maxLength.value,t.maxLength.message,e),t.exactLength&&(Ge(r,"minItems",t.exactLength.value,t.exactLength.message,e),Ge(r,"maxItems",t.exactLength.value,t.exactLength.message,e)),r}function NA(t,e){let r={type:"integer",format:"int64"};if(!t.checks)return r;for(let n of t.checks)switch(n.kind){case"min":e.target==="jsonSchema7"?n.inclusive?Ge(r,"minimum",n.value,n.message,e):Ge(r,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(r.exclusiveMinimum=!0),Ge(r,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?Ge(r,"maximum",n.value,n.message,e):Ge(r,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(r.exclusiveMaximum=!0),Ge(r,"maximum",n.value,n.message,e));break;case"multipleOf":Ge(r,"multipleOf",n.value,n.message,e);break}return r}function DA(){return{type:"boolean"}}function pp(t,e){return pe(t.type._def,e)}var kA=(t,e)=>pe(t.innerType._def,e);function zf(t,e,r){let n=r??e.dateStrategy;if(Array.isArray(n))return{anyOf:n.map((o,i)=>zf(t,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 Sz(t,e)}}var Sz=(t,e)=>{let r={type:"integer",format:"unix-time"};if(e.target==="openApi3")return r;for(let n of t.checks)switch(n.kind){case"min":Ge(r,"minimum",n.value,n.message,e);break;case"max":Ge(r,"maximum",n.value,n.message,e);break}return r};function UA(t,e){return{...pe(t.innerType._def,e),default:t.defaultValue()}}function FA(t,e){return e.effectStrategy==="input"?pe(t.schema._def,e):wt(e)}function BA(t){return{type:"string",enum:Array.from(t.values)}}var yz=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function zA(t,e){let r=[pe(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),pe(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),n=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,o=[];return r.forEach(i=>{if(yz(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 HA(t,e){let r=typeof t.value;return r!=="bigint"&&r!=="number"&&r!=="boolean"&&r!=="string"?{type:Array.isArray(t.value)?"array":"object"}:e.target==="openApi3"?{type:r==="bigint"?"integer":r,enum:[t.value]}:{type:r==="bigint"?"integer":r,const:t.value}}import{ZodFirstPartyTypeKind as Uc}from"zod";var Hf,qn={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:()=>(Hf===void 0&&(Hf=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Hf),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 mp(t,e){let r={type:"string"};if(t.checks)for(let n of t.checks)switch(n.kind){case"min":Ge(r,"minLength",typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,n.message,e);break;case"max":Ge(r,"maxLength",typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value,n.message,e);break;case"email":switch(e.emailStrategy){case"format:email":Kn(r,"email",n.message,e);break;case"format:idn-email":Kn(r,"idn-email",n.message,e);break;case"pattern:zod":Ur(r,qn.email,n.message,e);break}break;case"url":Kn(r,"uri",n.message,e);break;case"uuid":Kn(r,"uuid",n.message,e);break;case"regex":Ur(r,n.regex,n.message,e);break;case"cuid":Ur(r,qn.cuid,n.message,e);break;case"cuid2":Ur(r,qn.cuid2,n.message,e);break;case"startsWith":Ur(r,RegExp(`^${jf(n.value,e)}`),n.message,e);break;case"endsWith":Ur(r,RegExp(`${jf(n.value,e)}$`),n.message,e);break;case"datetime":Kn(r,"date-time",n.message,e);break;case"date":Kn(r,"date",n.message,e);break;case"time":Kn(r,"time",n.message,e);break;case"duration":Kn(r,"duration",n.message,e);break;case"length":Ge(r,"minLength",typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,n.message,e),Ge(r,"maxLength",typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value,n.message,e);break;case"includes":{Ur(r,RegExp(jf(n.value,e)),n.message,e);break}case"ip":{n.version!=="v6"&&Kn(r,"ipv4",n.message,e),n.version!=="v4"&&Kn(r,"ipv6",n.message,e);break}case"base64url":Ur(r,qn.base64url,n.message,e);break;case"jwt":Ur(r,qn.jwt,n.message,e);break;case"cidr":{n.version!=="v6"&&Ur(r,qn.ipv4Cidr,n.message,e),n.version!=="v4"&&Ur(r,qn.ipv6Cidr,n.message,e);break}case"emoji":Ur(r,qn.emoji(),n.message,e);break;case"ulid":{Ur(r,qn.ulid,n.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{Kn(r,"binary",n.message,e);break}case"contentEncoding:base64":{Ge(r,"contentEncoding","base64",n.message,e);break}case"pattern:zod":{Ur(r,qn.base64,n.message,e);break}}break}case"nanoid":Ur(r,qn.nanoid,n.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return r}function jf(t,e){return e.patternStrategy==="escape"?Ez(t):t}var bz=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Ez(t){let e="";for(let r=0;r<t.length;r++)bz.has(t[r])||(e+="\\"),e+=t[r];return e}function Kn(t,e,r,n){t.format||t.anyOf?.some(o=>o.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format,...t.errorMessage&&n.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage&&(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.anyOf.push({format:e,...r&&n.errorMessages&&{errorMessage:{format:r}}})):Ge(t,"format",e,r,n)}function Ur(t,e,r,n){t.pattern||t.allOf?.some(o=>o.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern,...t.errorMessage&&n.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage&&(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.allOf.push({pattern:jA(e,n),...r&&n.errorMessages&&{errorMessage:{pattern:r}}})):Ge(t,"pattern",jA(e,n),r,n)}function jA(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let r={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},n=r.i?t.source.toLowerCase():t.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(r.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(r.m){if(n[c]==="^"){o+=`(^|(?<=[\r
5
5
  ]))`;continue}else if(n[c]==="$"){o+=`($|(?=[\r
6
6
  ]))`;continue}}if(r.s&&n[c]==="."){o+=a?`${n[c]}\r
7
7
  `:`[${n[c]}\r
8
- ]`;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`),t.source}return o}function gp(t,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"&&t.keyType?._def.typeName===Uc.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((n,o)=>({...n,[o]:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",o]})??wt(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let r={type:"object",additionalProperties:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return r;if(t.keyType?._def.typeName===Uc.ZodString&&t.keyType._def.checks?.length){let{type:n,...o}=mp(t.keyType._def,e);return{...r,propertyNames:o}}else{if(t.keyType?._def.typeName===Uc.ZodEnum)return{...r,propertyNames:{enum:t.keyType._def.values}};if(t.keyType?._def.typeName===Uc.ZodBranded&&t.keyType._def.type._def.typeName===Uc.ZodString&&t.keyType._def.type._def.checks?.length){let{type:n,...o}=pp(t.keyType._def,e);return{...r,propertyNames:o}}}return r}function GA(t,e){if(e.mapStrategy==="record")return gp(t,e);let r=pe(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||wt(e),n=pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||wt(e);return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function VA(t){let e=t.values,n=Object.keys(t.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 $A(t){return t.target==="openAi"?void 0:{not:wt({...t,currentPath:[...t.currentPath,"not"]})}}function WA(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Fc={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function KA(t,e){if(e.target==="openApi3")return qA(t,e);let r=t.options instanceof Map?Array.from(t.options.values()):t.options;if(r.every(n=>n._def.typeName in Fc&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,i)=>{let a=Fc[i._def.typeName];return a&&!o.includes(a)?[...o,a]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every(n=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.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===r.length){let o=n.filter((i,a,s)=>s.indexOf(i)===a);return{type:o.length>1?o:o[0],enum:r.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(r.every(n=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter(i=>!n.includes(i))],[])};return qA(t,e)}var qA=(t,e)=>{let r=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((n,o)=>pe(n._def,{...e,currentPath:[...e.currentPath,"anyOf",`${o}`]})).filter(n=>!!n&&(!e.strictUnions||typeof n=="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function YA(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return e.target==="openApi3"?{type:Fc[t.innerType._def.typeName],nullable:!0}:{type:[Fc[t.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let n=pe(t.innerType._def,{...e,currentPath:[...e.currentPath]});return n&&"$ref"in n?{allOf:[n],nullable:!0}:n&&{...n,nullable:!0}}let r=pe(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function XA(t,e){let r={type:"number"};if(!t.checks)return r;for(let n of t.checks)switch(n.kind){case"int":r.type="integer",Bf(r,"type",n.message,e);break;case"min":e.target==="jsonSchema7"?n.inclusive?Ge(r,"minimum",n.value,n.message,e):Ge(r,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(r.exclusiveMinimum=!0),Ge(r,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?Ge(r,"maximum",n.value,n.message,e):Ge(r,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(r.exclusiveMaximum=!0),Ge(r,"maximum",n.value,n.message,e));break;case"multipleOf":Ge(r,"multipleOf",n.value,n.message,e);break}return r}function JA(t,e){let r=e.target==="openAi",n={type:"object",properties:{}},o=[],i=t.shape();for(let s in i){let c=i[s];if(c===void 0||c._def===void 0)continue;let l=vz(c);l&&r&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),l=!1);let u=pe(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=Tz(t,e);return a!==void 0&&(n.additionalProperties=a),n}function Tz(t,e){if(t.catchall._def.typeName!=="ZodNever")return pe(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function vz(t){try{return t.isOptional()}catch{return!0}}var ZA=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return pe(t.innerType._def,e);let r=pe(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return r?{anyOf:[{not:wt(e)},r]}:wt(e)};var QA=(t,e)=>{if(e.pipeStrategy==="input")return pe(t.in._def,e);if(e.pipeStrategy==="output")return pe(t.out._def,e);let r=pe(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),n=pe(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter(o=>o!==void 0)}};function eR(t,e){return pe(t.type._def,e)}function tR(t,e){let n={type:"array",uniqueItems:!0,items:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&Ge(n,"minItems",t.minSize.value,t.minSize.message,e),t.maxSize&&Ge(n,"maxItems",t.maxSize.value,t.maxSize.message,e),n}function rR(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((r,n)=>pe(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:pe(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((r,n)=>pe(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function nR(t){return{not:wt(t)}}function oR(t){return wt(t)}var iR=(t,e)=>pe(t.innerType._def,e);var aR=(t,e,r)=>{switch(e){case ze.ZodString:return mp(t,r);case ze.ZodNumber:return XA(t,r);case ze.ZodObject:return JA(t,r);case ze.ZodBigInt:return NA(t,r);case ze.ZodBoolean:return DA();case ze.ZodDate:return zf(t,r);case ze.ZodUndefined:return nR(r);case ze.ZodNull:return WA(r);case ze.ZodArray:return LA(t,r);case ze.ZodUnion:case ze.ZodDiscriminatedUnion:return KA(t,r);case ze.ZodIntersection:return zA(t,r);case ze.ZodTuple:return rR(t,r);case ze.ZodRecord:return gp(t,r);case ze.ZodLiteral:return HA(t,r);case ze.ZodEnum:return BA(t);case ze.ZodNativeEnum:return VA(t);case ze.ZodNullable:return YA(t,r);case ze.ZodOptional:return ZA(t,r);case ze.ZodMap:return GA(t,r);case ze.ZodSet:return tR(t,r);case ze.ZodLazy:return()=>t.getter()._def;case ze.ZodPromise:return eR(t,r);case ze.ZodNaN:case ze.ZodNever:return $A(r);case ze.ZodEffects:return FA(t,r);case ze.ZodAny:return wt(r);case ze.ZodUnknown:return oR(r);case ze.ZodDefault:return UA(t,r);case ze.ZodBranded:return pp(t,r);case ze.ZodReadonly:return iR(t,r);case ze.ZodCatch:return kA(t,r);case ze.ZodPipeline:return QA(t,r);case ze.ZodFunction:case ze.ZodVoid:case ze.ZodSymbol:return;default:return(n=>{})(e)}};function pe(t,e,r=!1){let n=e.seen.get(t);if(e.override){let s=e.override?.(t,e,n,r);if(s!==PA)return s}if(n&&!r){let s=Az(n,e);if(s!==void 0)return s}let o={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,o);let i=aR(t,t.typeName,e),a=typeof i=="function"?pe(i(),e):i;if(a&&Rz(t,e,a),e.postProcess){let s=e.postProcess(a,t,e);return o.jsonSchema=a,s}return o.jsonSchema=a,a}var Az=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:dp(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((r,n)=>e.currentPath[n]===r)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),wt(e)):e.$refStrategy==="seen"?wt(e):void 0}},Rz=(t,e,r)=>(t.description&&(r.description=t.description,e.markdownDescription&&(r.markdownDescription=t.description)),r);var Bc=(t,e)=>{let r=OA(e),n=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((c,[l,u])=>({...c,[l]:pe(u._def,{...r,currentPath:[...r.basePath,r.definitionPath,l]},!0)??wt(r)}),{}):void 0,o=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,i=pe(t._def,o===void 0?r:{...r,currentPath:[...r.basePath,r.definitionPath,o]},!1)??wt(r),a=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;a!==void 0&&(i.title=a),r.flags.hasReferencedOpenAiAnyType&&(n||(n={}),n[r.openAiAnyTypeName]||(n[r.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:r.$refStrategy==="relative"?"1":[...r.basePath,r.definitionPath,r.openAiAnyTypeName].join("/")}}));let s=o===void 0?n?{...i,[r.definitionPath]:n}:i:{$ref:[...r.$refStrategy==="relative"?[]:r.basePath,r.definitionPath,o].join("/"),[r.definitionPath]:{...n,[o]:i}};return r.target==="jsonSchema7"?s.$schema="http://json-schema.org/draft-07/schema#":(r.target==="jsonSchema2019-09"||r.target==="openAi")&&(s.$schema="https://json-schema.org/draft/2019-09/schema#"),r.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 mo}from"zod";import{extendZodWithOpenApi as Cz}from"zod-openapi";Cz(mo);var Me=(m=>(m.AI_PROVIDER="AIProviderError",m.USER_INFRA="UserInfrastructureError",m.ACTION_FAILURE="ActionFailureError",m.NO_MATCHING_ELEMENT="NoMatchingElementError",m.ASSERTION_FAILURE="AssertionFailureError",m.CONFIG_ERROR="UserConfigurationError",m.SETUP_FAILURE="SetupFailureError",m.TEARDOWN_FAILURE="TeardownFailureError",m.WEB_AGENT_PLATFORM="InternalWebAgentError",m.UNKNOWN_PLATFORM="InternalPlatformError",m.JOB_TIMEOUT="JobTimeoutError",m.CONCURRENCY_ERROR="ConcurrencyError",m.UNKNOWN="UnknownError",m))(Me||{});var sR=["JobTimeoutError","UserConfigurationError","UserInfrastructureError"],hp={ActionFailureError:"Action failure",NoMatchingElementError:"No matching element",AssertionFailureError:"Assertion failure",SetupFailureError:"Setup failure",TeardownFailureError:"Teardown failure",UserInfrastructureError:"Infrastructure failure",UserConfigurationError:"Configuration error",AIProviderError:"AI provider error",InternalWebAgentError:"Momentic AI agent error",JobTimeoutError:"Job timeout",InternalPlatformError:"Unknown Momentic platform error",UnknownError:"Unknown error",ConcurrencyError:"Concurrency error"},js={ActionFailureError:"A browser action such as a click or type failed to execute because of the underlying page state is incorrect, suggesting a bug in the application itself.",NoMatchingElementError:"The AI agent failed to find a matching element for the given description.",AssertionFailureError:"An AI check failed for a legitimate reason, such as a missing element, a change in the page structure, or an unexpected state (e.g. loading state).",SetupFailureError:"A setup step failed to execute, preventing the main test from running. This indicates an issue with test preparation, prerequisite steps, or initial state. This can only apply to failures that occur before teardown.",TeardownFailureError:"A teardown step failed to execute after the main test completed. This indicates an issue with cleanup or post-test operations or an uncaught error in the test. This can only apply to failures that occur after setup.",AIProviderError:"The AI provider failed to return a response or returned a malformed response.",UserInfrastructureError:"The user's web application exhibited an infrastructure failure, such as a page load timeout, a 5XX status code, maintenance page, or session crash.",UserConfigurationError:"The error message suggests a user-caused misconfiguration in the test, such as an undefined variable, a missing base URL, an empty test/module input parameter, or an invalid step option",JobTimeoutError:"The test took too long to complete, suggesting a problem with the test itself.",InternalWebAgentError:"The AI testing framework failed to find the correct element or evaluate the assertion correctly, even though the test steps and application state look valid. In other words, the AI agent failed to understand the page.",ConcurrencyError:"The AI test executed correctly, but the application state did not match expectations because another process modified the same resource concurrently. This failure is due to a concurrency error, such as a race condition or deadlock. Commonly caused by tests running simultaneously when using constants rather than random values, or underlying operations that allow for race conditions. For example, in Notion, if multiple tests are running at the same time where one creates a page and enters text to check if it renders, but another test deletes all pages before it can validate the render, this would be a concurrency error.",UnknownError:"An unknown error occurred. Please refer to the failure details in the run for more information or reach out to Momentic Support for assistance.",InternalPlatformError:"An unknown error occurred with the Momentic platform."},Gf=mo.object({reason:mo.nativeEnum(Me),previousStepsDescription:mo.array(mo.string()).optional(),summary:mo.string(),rootCause:mo.string().optional()}).openapi({ref:"TestResultClassification"}),fp=mo.object({errorMessage:mo.string(),errorStack:mo.string().optional(),classification:Gf.optional()}).openapi({ref:"TestFailureDetails"});var At=class extends Error{constructor(e,r={}){super(e,r),this.name="ValidationError"}};var zc=class extends Error{constructor(e,r,n,o={}){super(`The ${n} with id ${r} is invalid: ${e}`,o),this.name="InvalidEntityError"}};var Ra=class extends zc{zodIssues;constructor(e,r,n,o,i={}){super(e,r,n,i),this.zodIssues=o,this.name="SchemaValidationError"}};function lR(t){for(let e of Object.values(Me))if(t.includes(e))return e}var M=class t extends Error{reason;constructor(e,r,n){let o=!1;for(let i of Object.values(Me))if(r.startsWith(i)){o=!0,e=i;break}if(n?.errOptions?.cause)super(o?r:`${e}: ${r}`,n?.errOptions);else{let i=o?r:`${e}${r?`: ${r}`:""}`;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,stack:this.stack,reason:this.reason}}static fromMessage(e){let r,n=e;for(let o of Object.values(Me))if(e.startsWith(o)){r=o,e.startsWith(`${o}: `)?n=e.slice(`${o}: `.length):e===o&&(n="");break}return r||(r="UnknownError"),new t(r,n)}},Gs=class extends Error{updatedLocatorMemory;constructor(e,r,n={}){super(e,n),this.updatedLocatorMemory=r,this.name="NoElementsFoundUsingAIError"}},Tn=class extends Error{decisions;cacheMissReason;constructor(e,r=[],n,o={}){super(e,o),this.decisions=r,this.name="NoElementsFoundUsingCacheError",this.cacheMissReason=n}toString(){return`${this.message}
8
+ ]`;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`),t.source}return o}function gp(t,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"&&t.keyType?._def.typeName===Uc.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((n,o)=>({...n,[o]:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",o]})??wt(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let r={type:"object",additionalProperties:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return r;if(t.keyType?._def.typeName===Uc.ZodString&&t.keyType._def.checks?.length){let{type:n,...o}=mp(t.keyType._def,e);return{...r,propertyNames:o}}else{if(t.keyType?._def.typeName===Uc.ZodEnum)return{...r,propertyNames:{enum:t.keyType._def.values}};if(t.keyType?._def.typeName===Uc.ZodBranded&&t.keyType._def.type._def.typeName===Uc.ZodString&&t.keyType._def.type._def.checks?.length){let{type:n,...o}=pp(t.keyType._def,e);return{...r,propertyNames:o}}}return r}function GA(t,e){if(e.mapStrategy==="record")return gp(t,e);let r=pe(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||wt(e),n=pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||wt(e);return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function VA(t){let e=t.values,n=Object.keys(t.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 $A(t){return t.target==="openAi"?void 0:{not:wt({...t,currentPath:[...t.currentPath,"not"]})}}function WA(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Fc={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function KA(t,e){if(e.target==="openApi3")return qA(t,e);let r=t.options instanceof Map?Array.from(t.options.values()):t.options;if(r.every(n=>n._def.typeName in Fc&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,i)=>{let a=Fc[i._def.typeName];return a&&!o.includes(a)?[...o,a]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every(n=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.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===r.length){let o=n.filter((i,a,s)=>s.indexOf(i)===a);return{type:o.length>1?o:o[0],enum:r.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(r.every(n=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter(i=>!n.includes(i))],[])};return qA(t,e)}var qA=(t,e)=>{let r=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((n,o)=>pe(n._def,{...e,currentPath:[...e.currentPath,"anyOf",`${o}`]})).filter(n=>!!n&&(!e.strictUnions||typeof n=="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function YA(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return e.target==="openApi3"?{type:Fc[t.innerType._def.typeName],nullable:!0}:{type:[Fc[t.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let n=pe(t.innerType._def,{...e,currentPath:[...e.currentPath]});return n&&"$ref"in n?{allOf:[n],nullable:!0}:n&&{...n,nullable:!0}}let r=pe(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function XA(t,e){let r={type:"number"};if(!t.checks)return r;for(let n of t.checks)switch(n.kind){case"int":r.type="integer",Bf(r,"type",n.message,e);break;case"min":e.target==="jsonSchema7"?n.inclusive?Ge(r,"minimum",n.value,n.message,e):Ge(r,"exclusiveMinimum",n.value,n.message,e):(n.inclusive||(r.exclusiveMinimum=!0),Ge(r,"minimum",n.value,n.message,e));break;case"max":e.target==="jsonSchema7"?n.inclusive?Ge(r,"maximum",n.value,n.message,e):Ge(r,"exclusiveMaximum",n.value,n.message,e):(n.inclusive||(r.exclusiveMaximum=!0),Ge(r,"maximum",n.value,n.message,e));break;case"multipleOf":Ge(r,"multipleOf",n.value,n.message,e);break}return r}function JA(t,e){let r=e.target==="openAi",n={type:"object",properties:{}},o=[],i=t.shape();for(let s in i){let c=i[s];if(c===void 0||c._def===void 0)continue;let l=vz(c);l&&r&&(c._def.typeName==="ZodOptional"&&(c=c._def.innerType),c.isNullable()||(c=c.nullable()),l=!1);let u=pe(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=Tz(t,e);return a!==void 0&&(n.additionalProperties=a),n}function Tz(t,e){if(t.catchall._def.typeName!=="ZodNever")return pe(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function vz(t){try{return t.isOptional()}catch{return!0}}var ZA=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return pe(t.innerType._def,e);let r=pe(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return r?{anyOf:[{not:wt(e)},r]}:wt(e)};var QA=(t,e)=>{if(e.pipeStrategy==="input")return pe(t.in._def,e);if(e.pipeStrategy==="output")return pe(t.out._def,e);let r=pe(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),n=pe(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter(o=>o!==void 0)}};function eR(t,e){return pe(t.type._def,e)}function tR(t,e){let n={type:"array",uniqueItems:!0,items:pe(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&Ge(n,"minItems",t.minSize.value,t.minSize.message,e),t.maxSize&&Ge(n,"maxItems",t.maxSize.value,t.maxSize.message,e),n}function rR(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((r,n)=>pe(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:pe(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((r,n)=>pe(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function nR(t){return{not:wt(t)}}function oR(t){return wt(t)}var iR=(t,e)=>pe(t.innerType._def,e);var aR=(t,e,r)=>{switch(e){case Be.ZodString:return mp(t,r);case Be.ZodNumber:return XA(t,r);case Be.ZodObject:return JA(t,r);case Be.ZodBigInt:return NA(t,r);case Be.ZodBoolean:return DA();case Be.ZodDate:return zf(t,r);case Be.ZodUndefined:return nR(r);case Be.ZodNull:return WA(r);case Be.ZodArray:return LA(t,r);case Be.ZodUnion:case Be.ZodDiscriminatedUnion:return KA(t,r);case Be.ZodIntersection:return zA(t,r);case Be.ZodTuple:return rR(t,r);case Be.ZodRecord:return gp(t,r);case Be.ZodLiteral:return HA(t,r);case Be.ZodEnum:return BA(t);case Be.ZodNativeEnum:return VA(t);case Be.ZodNullable:return YA(t,r);case Be.ZodOptional:return ZA(t,r);case Be.ZodMap:return GA(t,r);case Be.ZodSet:return tR(t,r);case Be.ZodLazy:return()=>t.getter()._def;case Be.ZodPromise:return eR(t,r);case Be.ZodNaN:case Be.ZodNever:return $A(r);case Be.ZodEffects:return FA(t,r);case Be.ZodAny:return wt(r);case Be.ZodUnknown:return oR(r);case Be.ZodDefault:return UA(t,r);case Be.ZodBranded:return pp(t,r);case Be.ZodReadonly:return iR(t,r);case Be.ZodCatch:return kA(t,r);case Be.ZodPipeline:return QA(t,r);case Be.ZodFunction:case Be.ZodVoid:case Be.ZodSymbol:return;default:return(n=>{})(e)}};function pe(t,e,r=!1){let n=e.seen.get(t);if(e.override){let s=e.override?.(t,e,n,r);if(s!==PA)return s}if(n&&!r){let s=Az(n,e);if(s!==void 0)return s}let o={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,o);let i=aR(t,t.typeName,e),a=typeof i=="function"?pe(i(),e):i;if(a&&Rz(t,e,a),e.postProcess){let s=e.postProcess(a,t,e);return o.jsonSchema=a,s}return o.jsonSchema=a,a}var Az=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:dp(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((r,n)=>e.currentPath[n]===r)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),wt(e)):e.$refStrategy==="seen"?wt(e):void 0}},Rz=(t,e,r)=>(t.description&&(r.description=t.description,e.markdownDescription&&(r.markdownDescription=t.description)),r);var Bc=(t,e)=>{let r=OA(e),n=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((c,[l,u])=>({...c,[l]:pe(u._def,{...r,currentPath:[...r.basePath,r.definitionPath,l]},!0)??wt(r)}),{}):void 0,o=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,i=pe(t._def,o===void 0?r:{...r,currentPath:[...r.basePath,r.definitionPath,o]},!1)??wt(r),a=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;a!==void 0&&(i.title=a),r.flags.hasReferencedOpenAiAnyType&&(n||(n={}),n[r.openAiAnyTypeName]||(n[r.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:r.$refStrategy==="relative"?"1":[...r.basePath,r.definitionPath,r.openAiAnyTypeName].join("/")}}));let s=o===void 0?n?{...i,[r.definitionPath]:n}:i:{$ref:[...r.$refStrategy==="relative"?[]:r.basePath,r.definitionPath,o].join("/"),[r.definitionPath]:{...n,[o]:i}};return r.target==="jsonSchema7"?s.$schema="http://json-schema.org/draft-07/schema#":(r.target==="jsonSchema2019-09"||r.target==="openAi")&&(s.$schema="https://json-schema.org/draft/2019-09/schema#"),r.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 mo}from"zod";import{extendZodWithOpenApi as Cz}from"zod-openapi";Cz(mo);var Me=(m=>(m.AI_PROVIDER="AIProviderError",m.USER_INFRA="UserInfrastructureError",m.ACTION_FAILURE="ActionFailureError",m.NO_MATCHING_ELEMENT="NoMatchingElementError",m.ASSERTION_FAILURE="AssertionFailureError",m.CONFIG_ERROR="UserConfigurationError",m.SETUP_FAILURE="SetupFailureError",m.TEARDOWN_FAILURE="TeardownFailureError",m.WEB_AGENT_PLATFORM="InternalWebAgentError",m.UNKNOWN_PLATFORM="InternalPlatformError",m.JOB_TIMEOUT="JobTimeoutError",m.CONCURRENCY_ERROR="ConcurrencyError",m.UNKNOWN="UnknownError",m))(Me||{});var sR=["JobTimeoutError","UserConfigurationError","UserInfrastructureError"],hp={ActionFailureError:"Action failure",NoMatchingElementError:"No matching element",AssertionFailureError:"Assertion failure",SetupFailureError:"Setup failure",TeardownFailureError:"Teardown failure",UserInfrastructureError:"Infrastructure failure",UserConfigurationError:"Configuration error",AIProviderError:"AI provider error",InternalWebAgentError:"Momentic AI agent error",JobTimeoutError:"Job timeout",InternalPlatformError:"Unknown Momentic platform error",UnknownError:"Unknown error",ConcurrencyError:"Concurrency error"},js={ActionFailureError:"A browser action such as a click or type failed to execute because of the underlying page state is incorrect, suggesting a bug in the application itself.",NoMatchingElementError:"The AI agent failed to find a matching element for the given description.",AssertionFailureError:"An AI check failed for a legitimate reason, such as a missing element, a change in the page structure, or an unexpected state (e.g. loading state).",SetupFailureError:"A setup step failed to execute, preventing the main test from running. This indicates an issue with test preparation, prerequisite steps, or initial state. This can only apply to failures that occur before teardown.",TeardownFailureError:"A teardown step failed to execute after the main test completed. This indicates an issue with cleanup or post-test operations or an uncaught error in the test. This can only apply to failures that occur after setup.",AIProviderError:"The AI provider failed to return a response or returned a malformed response.",UserInfrastructureError:"The user's web application exhibited an infrastructure failure, such as a page load timeout, a 5XX status code, maintenance page, or session crash.",UserConfigurationError:"The error message suggests a user-caused misconfiguration in the test, such as an undefined variable, a missing base URL, an empty test/module input parameter, or an invalid step option",JobTimeoutError:"The test took too long to complete, suggesting a problem with the test itself.",InternalWebAgentError:"The AI testing framework failed to find the correct element or evaluate the assertion correctly, even though the test steps and application state look valid. In other words, the AI agent failed to understand the page.",ConcurrencyError:"The AI test executed correctly, but the application state did not match expectations because another process modified the same resource concurrently. This failure is due to a concurrency error, such as a race condition or deadlock. Commonly caused by tests running simultaneously when using constants rather than random values, or underlying operations that allow for race conditions. For example, in Notion, if multiple tests are running at the same time where one creates a page and enters text to check if it renders, but another test deletes all pages before it can validate the render, this would be a concurrency error.",UnknownError:"An unknown error occurred. Please refer to the failure details in the run for more information or reach out to Momentic Support for assistance.",InternalPlatformError:"An unknown error occurred with the Momentic platform."},Gf=mo.object({reason:mo.nativeEnum(Me),previousStepsDescription:mo.array(mo.string()).optional(),summary:mo.string(),rootCause:mo.string().optional()}).openapi({ref:"TestResultClassification"}),fp=mo.object({errorMessage:mo.string(),errorStack:mo.string().optional(),classification:Gf.optional()}).openapi({ref:"TestFailureDetails"});var At=class extends Error{constructor(e,r={}){super(e,r),this.name="ValidationError"}};var zc=class extends Error{constructor(e,r,n,o={}){super(`The ${n} with id ${r} is invalid: ${e}`,o),this.name="InvalidEntityError"}};var Ra=class extends zc{zodIssues;constructor(e,r,n,o,i={}){super(e,r,n,i),this.zodIssues=o,this.name="SchemaValidationError"}};function lR(t){for(let e of Object.values(Me))if(t.includes(e))return e}var M=class t extends Error{reason;constructor(e,r,n){let o=!1;for(let i of Object.values(Me))if(r.startsWith(i)){o=!0,e=i;break}if(n?.errOptions?.cause)super(o?r:`${e}: ${r}`,n?.errOptions);else{let i=o?r:`${e}${r?`: ${r}`:""}`;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,stack:this.stack,reason:this.reason}}static fromMessage(e){let r,n=e;for(let o of Object.values(Me))if(e.startsWith(o)){r=o,e.startsWith(`${o}: `)?n=e.slice(`${o}: `.length):e===o&&(n="");break}return r||(r="UnknownError"),new t(r,n)}},Gs=class extends Error{updatedLocatorMemory;constructor(e,r,n={}){super(e,n),this.updatedLocatorMemory=r,this.name="NoElementsFoundUsingAIError"}},Tn=class extends Error{decisions;cacheMissReason;constructor(e,r=[],n,o={}){super(e,o),this.decisions=r,this.name="NoElementsFoundUsingCacheError",this.cacheMissReason=n}toString(){return`${this.message}
9
9
  Decisions:
10
10
  ${this.decisions.map(e=>e.toString()).join(`
11
11
  `)}`}};function cR(t){return t instanceof Error?t.message.includes("Timeout")&&t.message.includes("exceeded")&&t.message.includes("waiting for locator"):!1}function uR(t){return!(t instanceof Error)||t.message.includes("locator resolved to visible")?!1:!!(t.message.includes("Timeout")&&t.message.includes("exceeded")&&t.message.includes("body >")||t.message.includes("Element is not attached to the DOM"))}var Vs=class extends Error{constructor(e,r={}){super(e,r),this.name="CacheAttributesDisqualifyElementError"}},qo=class extends Vs{constructor(e,r={}){super(e,r),this.name="ElementMovedError"}},Sp=class extends Vs{constructor(e,r={}){super(e,r),this.name="ZeroOpacityError"}},Hc=class extends Error{constructor(e,r={}){super(e,r),this.name="IsInvalidMomenticIdError"}};function dR(t){return t instanceof Error?t.message.includes("Could not find attribute data-momentic-id for object"):!1}var Vf="Element to be clicked has no bounding box";function pR(t){return t instanceof Error?t.message.startsWith(Vf):!1}function mR(t){return t instanceof Error?t instanceof Hc?!0:t.message.includes("Timeout")&&t.message.includes("exceeded")&&t.message.includes("waiting for locator")&&t.message.includes("data-momentic-id")&&!t.message.includes("locator resolved")&&!t.message.includes("waiting for element to be"):!1}function gR(t){return t instanceof Error?t.message.includes("Protocol error (DOM.resolveNode): No node with given id found")||t.message.includes("Could not resolve backend node"):!1}var jc=class extends Error{constructor(e,r={}){super(e,r),this.name="InsufficientCacheDataError"}};var $f={CLICK:"Click on an element on the page.",TYPE:"Focus the element then 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.",DRAG:"Drag an element from one location and drop it onto another element.",JAVASCRIPT:"Execute JavaScript code in NODE or BROWSER environment.",ELEMENT_CHECK:"Perform a manual assertion on a specific element.",PAGE_CHECK:"Perform a manual case sensitive assertion on the page's html.",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.",COPY:"Copy the specified text value to the browser clipboard.",GO_FORWARD:"Navigate forward to the next page in the browser history (if available). Only use this after having navigated back with GO_BACK. Do not use this to navigate to a different page - use NAVIGATE instead.",LOCAL_STORAGE:"Set or get a value in the browser's localStorage. Use this to store data that persists across page reloads or to read stored values.",MOUSE_DRAG:"Drag the mouse from a starting point (or element) in a specific direction by pixel amounts. Prefer using DRAG (drag and drop between elements) instead unless the user explicitly requests dragging in a direction or by pixels. Use this when dragging needs to move a specific distance rather than to a target element.",PASTE:"Paste the contents of the browser clipboard into the currently focused element. Use this after copying text with COPY or when pasting content that was previously copied.",REFRESH:"Reload the current page. Use this to refresh the page content or retry a failed operation.",REQUEST:"Make an HTTP API request to a specified URL. Use this to interact with REST APIs, send data to a server, or retrieve data from an endpoint. Supports GET, POST, PUT, DELETE, and PATCH methods with custom headers, query parameters, and request body.",GRAPHQL_REQUEST:"Make a GraphQL request to a specified URL. Provide the GraphQL query (or mutation), optional variables JSON, and any required headers. Use this for GraphQL APIs instead of REQUEST."};Ff.options.forEach(t=>{let e=t.shape.type.value;if(e!=="SUCCESS"&&!$f[e])throw new Error(`Command type ${e} is missing a description`)});var hR=I.object({type:I.literal("CLICK"),description:I.string().describe("Description of the element to click in the Current Page. Never click on <select> elements, see SELECT_OPTION."),doubleClick:I.boolean().or(I.null()),rightClick:I.boolean().or(I.null()),waitForDownload:I.boolean().or(I.null()).describe("Wait for the click to trigger a file download and for the download to complete."),downloadTimeoutMs:I.number().int().or(I.null()).describe("Max milliseconds to wait for a download to start and complete when waitForDownload is enabled."),delayMs:I.number().int().or(I.null()).describe("Delay before performing the click, in milliseconds.")}),fR=I.object({type:I.literal("TYPE"),description:I.string().describe("Description of the element to type into, which must be an <input>, <textarea>, or contenteditable element."),text:I.string().describe("The text to enter, truncated to 500 characters. If the PM provided text in the goals, use it exactly without modification."),pressEnter:I.boolean().or(I.null()).describe("Press enter after typing (useful for form submissions)."),clearContent:I.boolean().describe("Clear existing content before typing. Disable to append to the existing text.")}),SR=I.object({type:I.literal("GO_BACK")}),wz=I.object({type:I.literal("GO_FORWARD")}),xz=I.object({type:I.literal("LOCAL_STORAGE"),key:I.string().describe("The localStorage key to set or get."),value:I.string().describe("The value to store in localStorage. If reading, this can be empty.")}),yR=I.object({type:I.literal("PRESS"),keys:I.array(I.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.')}),bR=I.object({type:I.literal("SELECT_OPTION"),description:I.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:I.discriminatedUnion("type",[I.object({type:I.literal("VALUE"),value:I.string()}),I.object({type:I.literal("LABEL"),label:I.string()}),I.object({type:I.literal("INDEX"),index:I.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.")}),ER=I.object({type:I.literal("NAVIGATE"),url:I.string().describe("The URL to navigate to. Only navigate to URLs relevant to the user goal.")}),TR=I.object({type:I.literal("SCROLL"),y:I.number().describe("Scroll up or down by the specified pixels. Positive values scroll down.")}),vR=I.object({type:I.literal("WAIT"),timeout:I.number().describe("The number of seconds to wait.")}),AR=I.object({type:I.literal("AI_ASSERTION"),assertion:I.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:I.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.")}),RR=I.object({type:I.literal("HOVER"),description:I.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.")}),_z=I.object({type:I.literal("COPY"),value:I.string().describe("The text value to copy to the browser clipboard. This should be the exact text that needs to be copied.")}),Iz=I.object({type:I.literal("PASTE")}),Pz=I.object({type:I.literal("REFRESH")}),Mz=I.object({type:I.literal("REQUEST"),url:I.string().describe("The URL to send the HTTP request to. Can be a full URL or relative path."),method:I.enum(["GET","POST","PUT","DELETE","PATCH"]).describe("The HTTP method to use. GET for retrieving data, POST for creating resources, PUT for updating resources, DELETE for removing resources, PATCH for partial updates."),headers:I.record(I.string(),I.string()).or(I.null()).describe("Optional HTTP headers as key-value pairs. Common headers include 'Content-Type', 'Authorization', 'Accept', etc."),params:I.record(I.string(),I.string()).or(I.null()).describe("Optional URL query parameters as key-value pairs. These will be appended to the URL as ?key1=value1&key2=value2."),body:I.string().or(I.null()).describe("Optional request body as a string. For JSON data, stringify the object. Typically used with POST, PUT, or PATCH requests."),timeout:I.number().int().or(I.null()).describe("Optional maximum number of seconds to wait for the request to complete. Defaults to 30 seconds if not specified.")}),Oz=I.object({type:I.literal("GRAPHQL_REQUEST"),url:I.string().describe("The URL of the GraphQL endpoint. Can be a full URL or relative path."),headers:I.record(I.string(),I.string()).or(I.null()).describe("Optional HTTP headers as key-value pairs. Common headers include 'Content-Type', 'Authorization', 'Accept', etc."),query:I.string().describe("The GraphQL query or mutation string. Include any required fields and arguments."),variables:I.string().or(I.null()).describe("Optional JSON string of variables to pass with the GraphQL request."),timeout:I.number().int().or(I.null()).describe("Optional maximum number of seconds to wait for the request to complete. Defaults to 30 seconds if not specified.")}),CR=I.object({type:I.literal("DRAG"),fromDescription:I.string().describe("Description of the element to drag. Prefer precise identifiers or text that clearly distinguishes the element."),toDescription:I.string().describe("Description of the element to drop onto. Ensure the drop target is interactable and visible."),steps:I.number().int().positive().or(I.null()).describe("Optional number of intermediate mouse move steps during the drag. Do not use this unless the user tells you to."),hoverSeconds:I.number().positive().or(I.null()).describe("Optional seconds to hover over the destination before releasing the drag.")}),Lz=I.object({type:I.literal("MOUSE_DRAG"),description:I.string().or(I.null()).describe("Optional description of the element to start the drag from. If not provided, starts from current mouse position."),deltaX:I.number().describe("Number of pixels to move horizontally (positive = right, negative = left)."),deltaY:I.number().describe("Number of pixels to move vertically (positive = down, negative = up)."),steps:I.number().int().positive().or(I.null()).describe("Optional number of intermediate mouse move steps during the drag.")}),Nz=I.object({type:I.literal("JAVASCRIPT"),code:I.string().describe("JavaScript code to execute. Defaults to NODE environment unless BROWSER is specified."),environment:I.union([I.literal("NODE"),I.literal("BROWSER")]).or(I.null()).describe("Execution environment. Default is NODE."),timeout:I.number().or(I.null()).describe("Max seconds for the code to complete. Max 60 seconds.")}),Dz=I.object({type:I.literal("AI_EXTRACT"),goal:I.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:I.string().or(I.null()).describe("JSON schema defining the expected structure of the extracted data."),envKey:I.string().or(I.null()).describe("Environment variable name to store the extracted result in. If provided, the result will be stored and can be referenced later."),iframeUrl:I.string().or(I.null()).describe("URL or URL regex for the iframe to extract data from.")}),kz=I.object({type:I.literal("ELEMENT_CHECK"),description:I.string().describe("Description of the element to check."),assertionType:I.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:I.string().or(I.null()).describe("The value to check against (required for CONTENT assertions)."),negated:I.boolean().or(I.null()).describe("If true, asserts the opposite (e.g., does NOT exist)."),timeout:I.number().or(I.null()).describe("Max seconds to wait for the assertion to be true.")}),Uz=I.object({type:I.literal("PAGE_CHECK"),value:I.string().describe("The text content to check for on the page."),negated:I.boolean().or(I.null()).describe("If true, checks that the content is NOT present."),timeout:I.number().or(I.null()).describe("Max seconds to wait for the assertion to be true.")}),Fz=I.object({type:I.literal("NEW_TAB"),url:I.string().describe("The URL to open in the new tab.")}),Bz=I.object({type:I.literal("WAIT_FOR_URL"),matcher:I.discriminatedUnion("type",[I.object({type:I.literal("SUBSTRING"),url:I.string()}),I.object({type:I.literal("GLOB"),glob:I.string()}),I.object({type:I.literal("REGEX"),regex:I.string()}),I.object({type:I.literal("DOMAIN"),domain:I.string()})]).describe("How to match the URL."),caseInsensitive:I.boolean().or(I.null()),negated:I.boolean().or(I.null()).describe("Wait for the URL to NOT match instead."),timeout:I.number().or(I.null()).describe("Max seconds to wait for the URL.")}),Wf=I.object({type:I.literal("SUCCESS")}),qf=I.object({type:I.literal("FAILURE")}),wR=I.discriminatedUnion("type",[hR,fR,yR,bR,ER,TR,vR,AR,RR,SR]),zz=I.discriminatedUnion("type",[...wR.options,CR]),Ca=I.discriminatedUnion("type",[hR,fR,yR,bR,ER,TR,vR,AR,RR,SR,CR,Nz,kz,Uz,Fz,Bz,Dz,_z,wz,xz,Lz,Iz,Pz,Mz,Oz]),ine=Bc(Ca),Hz=I.discriminatedUnion("type",[...Ca.options,Wf,qf]),ane=Bc(I.discriminatedUnion("type",[...wR.options,Wf,qf])),sne=Bc(I.discriminatedUnion("type",[...zz.options,Wf,qf])),lne=I.object({command:I.unknown(),thoughts:I.string()});var $s=t=>{let e=Hz.parse(t);switch(e.type){case"CLICK":return{id:ht(),type:"CLICK",doubleClick:e.doubleClick??void 0,rightClick:e.rightClick??void 0,waitForDownload:e.waitForDownload??void 0,downloadTimeoutMs:e.waitForDownload===!0?e.downloadTimeoutMs??void 0:void 0,delayMs:e.delayMs??void 0,target:{type:"description",elementDescriptor:e.description}};case"TYPE":return{id:ht(),type:"TYPE",value:e.text,target:{type:"description",elementDescriptor:e.description},pressEnter:e.pressEnter??void 0,clearContent:e.clearContent};case"PRESS":return{id:ht(),type:"PRESS",value:e.keys.join("+")};case"SELECT_OPTION":return{id:ht(),type:"SELECT_OPTION",target:{type:"description",elementDescriptor:`<select> element matching description: ${e.description}`},choice:kf.parse(e.option)};case"NAVIGATE":return{id:ht(),type:"NAVIGATE",url:e.url};case"SCROLL":return e.y>0?{id:ht(),type:"SCROLL_DOWN",deltaY:e.y}:{id:ht(),type:"SCROLL_UP",deltaY:-e.y};case"WAIT":return{id:ht(),type:"WAIT",delay:e.timeout};case"AI_ASSERTION":return{id:ht(),type:"AI_ASSERTION",assertion:e.assertion,timeout:e.timeout};case"HOVER":return{id:ht(),type:"HOVER",target:{type:"description",elementDescriptor:e.description}};case"DRAG":return{id:ht(),type:"DRAG",fromTarget:{type:"description",elementDescriptor:e.fromDescription},toTarget:{type:"description",elementDescriptor:e.toDescription},steps:e.steps??void 0,hoverSeconds:e.hoverSeconds??void 0};case"JAVASCRIPT":return{id:ht(),type:"JAVASCRIPT",code:e.code,environment:e.environment??void 0,timeout:e.timeout??void 0};case"AI_EXTRACT":return{id:ht(),type:"AI_EXTRACT",goal:e.goal,schema:e.schema??void 0,envKey:e.envKey??void 0,iframeUrl:e.iframeUrl??void 0};case"COPY":return{id:ht(),type:"COPY",value:e.value};case"PASTE":return{id:ht(),type:"PASTE"};case"REFRESH":return{id:ht(),type:"REFRESH"};case"GO_FORWARD":return{id:ht(),type:"GO_FORWARD"};case"LOCAL_STORAGE":return{id:ht(),type:"LOCAL_STORAGE",key:e.key,value:e.value};case"MOUSE_DRAG":return{id:ht(),type:"MOUSE_DRAG",target:e.description?{type:"description",elementDescriptor:e.description}:void 0,deltaX:e.deltaX.toString(),deltaY:e.deltaY.toString(),steps:e.steps??void 0};case"ELEMENT_CHECK":{let r;switch(e.assertionType){case"EXISTS":r={type:"ELEMENT_EXISTENCE",condition:"EXISTS",negated:e.negated??void 0};break;case"VISIBLE":r={type:"ELEMENT_EXISTENCE",condition:"VISIBLE",negated:e.negated??void 0};break;case"CONTENT_CONTAINS":r={type:"ELEMENT_CONTENT",operation:"CONTAINS",value:e.value??"",negated:e.negated??void 0};break;case"CONTENT_EQUALS":r={type:"ELEMENT_CONTENT",operation:"EQUALS",value:e.value??"",negated:e.negated??void 0};break;default:return(o=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e.assertionType)}return{id:ht(),type:"ELEMENT_CHECK",target:{type:"description",elementDescriptor:e.description},assertion:r,timeout:e.timeout??void 0}}case"PAGE_CHECK":return{id:ht(),type:"PAGE_CHECK",assertion:{type:"CONTENT",value:e.value??void 0,negated:e.negated??void 0},timeout:e.timeout??void 0};case"NEW_TAB":return{id:ht(),type:"NEW_TAB",url:e.url};case"WAIT_FOR_URL":return{id:ht(),type:"WAIT_FOR_URL",matcher:e.matcher,caseInsensitive:e.caseInsensitive??void 0,negated:e.negated??void 0,timeout:e.timeout??void 0};case"GO_BACK":return{id:ht(),type:"GO_BACK"};case"REQUEST":return{id:ht(),type:"REQUEST",url:e.url,method:e.method,headers:e.headers??void 0,params:e.params??void 0,body:e.body?{type:"json",content:e.body}:void 0,timeout:e.timeout??void 0};case"GRAPHQL_REQUEST":return{id:ht(),type:"GRAPHQL_REQUEST",url:e.url,headers:e.headers??void 0,query:e.query,variables:e.variables??void 0,timeout:e.timeout??void 0};case"SUCCESS":case"FAILURE":return{id:ht(),type:e.type};default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}},Gc=I.object({type:I.literal("PRESET_ACTION"),command:Ca}),bp=I.object({type:I.literal("AI_ACTION_DYNAMIC"),text:I.string().describe("The goal description for the AI action. Supports handlebars templates (ex: {{env.PASSWORD}})")});import{z as Kf}from"zod";import{extendZodWithOpenApi as Vz}from"zod-openapi";import{z as xR}from"zod";import{extendZodWithOpenApi as jz}from"zod-openapi";import{z as Ri}from"zod";var vn=Ri.object({index:Ri.number().optional().describe("global index within a test (in-order traversal)"),id:Ri.string(),skipped:Ri.boolean().optional(),comment:Ri.string().optional(),envKey:Ri.string().optional().describe("key in the environment to save the result of this step to"),aiSuggested:Ri.boolean().optional(),retries:Ri.number().optional()});jz(xR);var Gz=vn.extend({type:xR.literal("PRESET_ACTION")}),sn=Gz.extend({command:Hs}).openapi({ref:"PresetAction"});Vz(Kf);var wa=vn.extend({type:Kf.literal("AI_ACTION"),text:Kf.string(),steps:sn.array().optional()}).openapi({ref:"AIAction"});import{z as Fr}from"zod";import{z as Vc}from"zod";import{extendZodWithOpenApi as $z}from"zod-openapi";$z(Vc);var Yf=(r=>(r.V2="2",r.V3="3",r))(Yf||{}),Wz=Vc.nativeEnum(Yf),Ws=vn.extend({type:Vc.literal("AI_ACTION_DYNAMIC"),text:Vc.string(),retries:Vc.number().optional(),version:Wz.optional()}).openapi({ref:"AIActionDynamic"});import{z as _R}from"zod";var Xf=vn.extend({type:_R.literal("CONDITIONAL"),skipped:_R.boolean().optional()});import{z as Ve}from"zod";var qz=Ve.object({cacheKey:Ve.string(),cacheExpiryMs:Ve.number()}),Jf=vn.extend({id:Ve.string().uuid().describe("ID of the module step itself. Used to 'namespace' step cache entries."),inputs:Ve.record(Ve.string()).optional(),cacheConfig:qz.optional()}),Yn=Jf.extend({type:Ve.literal("MODULE"),moduleId:Ve.string().uuid()}),Kz=Ve.union([Yn.pick({type:!0,moduleId:!0}),Ve.record(Ve.unknown())]),Yz=Ve.object({type:Ve.literal("URL_REGEX"),regex:Ve.string()}),Xz=Ve.object({type:Ve.literal("PAGE_CHECK"),substring:Ve.string()}),Zf=Ve.object({cacheInvalidation:Ve.discriminatedUnion("type",[Xz,Yz]).optional()}),Jr=Ve.object({moduleId:Ve.string().uuid(),name:Ve.string(),description:Ve.string().nullish(),enabled:Ve.boolean().nullish(),parameters:Ve.string().array().nullish(),defaultParameters:Ve.record(Ve.string(),Ve.string()).nullish(),parameterEnums:Ve.record(Ve.string(),Ve.string().array()).nullish(),defaultCacheKey:Ve.string().nullish(),defaultCacheTtl:Ve.number().nullish(),defaultCacheAllInvocations:Ve.boolean().nullish(),autoAuth:Ve.boolean().nullish(),advanced:Zf.nullish()});var Qf=t=>t.type==="RESOLVED_MODULE",eS=t=>t.type==="AI_ACTION"||t.type==="AI_ACTION_DYNAMIC"||t.type==="CONDITIONAL"||t.type==="PRESET_ACTION";import{z as An}from"zod";var tS=(n=>(n.ALWAYS="ALWAYS",n.ON_FAILURE="ON_FAILURE",n.ON_ACTION_FAILURE="ON_ACTION_FAILURE",n))(tS||{});var Jz=An.discriminatedUnion("type",[An.object({type:An.literal("NAVIGATE_URL"),url:An.string().url()}),An.object({type:An.literal("GO_TO_SECTION_START")})]),Zz=An.object({trigger:An.nativeEnum(tS).optional(),attempts:An.number().int().optional(),restartBehavior:Jz}),$c=vn.extend({type:An.literal("SECTION"),description:An.string().describe("user provided goal of what the section should accomplish"),plan:An.string().array().optional(),autohealingConfig:Zz.optional()});var IR=Jr.merge(Jf).extend({type:Fr.literal("RESOLVED_MODULE"),steps:Fr.lazy(()=>Ut.array())}),rS=Jr.extend({steps:Fr.lazy(()=>Ut.array())}),nS=$c.extend({steps:Fr.lazy(()=>Et.array())}),Qz=$c.extend({steps:Fr.lazy(()=>Ut.array())}),xa=Xf.extend({blocks:Fr.object({assertion:Fr.lazy(()=>sn),steps:Fr.lazy(()=>Et.array())}).array(),elseSteps:Fr.lazy(()=>Et.array().optional())}),e1=Xf.extend({blocks:Fr.object({assertion:Fr.lazy(()=>sn),steps:Fr.lazy(()=>Ut.array())}).array(),elseSteps:Fr.lazy(()=>Ut.array().optional())}),Et=Fr.discriminatedUnion("type",[sn,wa,Ws,Yn,xa,nS]),Ut=Fr.discriminatedUnion("type",[sn,wa,Ws,IR,e1,Qz]);import{z as Rn}from"zod";var t1=Rn.object({steps:Et.array(),beforeSteps:Et.array().nullish(),afterSteps:Et.array().nullish()}),Ci=Rn.object({steps:Ut.array(),beforeSteps:Ut.array().nullish(),afterSteps:Ut.array().nullish()}),_a=Rn.object({steps:Rn.record(Rn.string(),Rn.unknown()).array(),beforeSteps:Rn.record(Rn.string(),Rn.unknown()).array().nullish(),afterSteps:Rn.record(Rn.string(),Rn.unknown()).array().nullish()});var Ze="1.0.22",oS="0.0.3";import{z as rr}from"zod";import{z as Ia}from"zod";var r1=/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/,at=t=>{let e=t.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 Ko=Ia.string().min(1).max(255).superRefine((t,e)=>{try{wi(t)}catch(r){return e.addIssue({code:Ia.ZodIssueCode.custom,message:r.message,fatal:!0}),Ia.NEVER}});function wi(t){if(t=t.toLowerCase().trim(),t.length===0||t.length>255)throw new Error("Name must be between 1 and 255 characters long");if(/[<>:"/\\|?*]/.test(t))throw new Error('Name contains one of the following invalid characters: <>:"/\\|?*');if(t.endsWith("-")||t.startsWith("-"))throw new Error("Name cannot start or end with a dash.");if(t.includes("\0"))throw new Error("Name cannot contain null characters");if(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i.test(t))throw new Error(`"${t}" is a reserved name on Windows and cannot be used as a filename.`);if(/^\.+$/.test(t)||/^\s|\s$/.test(t))throw new Error("Name cannot start or end with a space or dot.");if(t.endsWith(".yaml"))throw new Error('Name cannot end with ".yaml".');if(t==="none")throw new Error("Name cannot be 'none'.");if(t.match(r1))throw new Error("Name cannot be a UUID. Please choose a different name.")}var Ep=Ia.preprocess(t=>t===null?"":t,Ia.union([Ia.string().url(),Ia.literal("")])).optional();var Pa=rr.enum(["setup","teardown","main"]).describe("Test section to modify: 'setup' corresponds to beforeSteps (steps that run before the test), 'teardown' corresponds to afterSteps (steps that run after the test), 'main' is synonymous with steps (the main test steps)"),iS=["AI_EXTRACT","JAVASCRIPT","REQUEST","GRAPHQL_REQUEST","AUTH_SAVE","COPY"],xi=rr.object({id:rr.string().optional().describe("Recommended way of selecting an entity. The id of the entity to resolve."),name:Ko.optional().describe("1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID."),path:rr.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(t=>[t.id,t.name,t.path].filter(Boolean).length===1,"Exactly one of id, name, or path must be provided."),n1=rr.object({selector:xi,inputs:rr.record(rr.string()).or(rr.null())}),Tp=rr.object({type:rr.literal("PRESET_ACTION"),action:Ca,envKey:rr.string().or(rr.null()).describe(`key in the environment to save the result of this step to. Only use this for ${iS.join(" or ")} steps.`)}),vp=rr.object({type:rr.literal("MODULE"),module:n1}),aS=rr.object({type:rr.literal("AI_ACTION_DYNAMIC"),text:rr.string().describe("The goal description for the AI action. Supports handlebars templates like {{env.VARIABLE_NAME}}.")}),PR=rr.discriminatedUnion("type",[Tp,vp,aS]);function MR(t,e){let r=e.parameters??[],n=e.defaultParameters??{},o=e.parameterEnums??{},i=t??{},a=new Set([...r,...Object.keys(n)]),s=Object.keys(i).filter(u=>!a.has(u));if(s.length>0){let u=a.size>0?Array.from(a).join(", "):"none";throw new Error(`Module "${e.name}" received unknown parameters: ${s.join(", ")}. Valid parameters are: ${u}`)}let l=r.filter(u=>!(u in n)).filter(u=>!(u in i));if(l.length>0)throw new Error(`Module "${e.name}" is missing required parameters: ${l.join(", ")}. Please call momentic_module_get to inspect the module's parameter requirements.`);for(let[u,d]of Object.entries(i))if(u in o){let p=o[u];if(p&&!p.includes(d))throw new Error(`Module "${e.name}" parameter "${u}" must be one of: ${p.join(", ")}. Received: "${d}"`)}}var OR=D.object({phrase:D.string()}),sS=D.object({thoughts:D.string().optional(),result:D.union([D.literal("NOT_FOUND"),D.string(),D.number(),D.array(D.unknown()),D.record(D.unknown(),D.unknown()),D.unknown()])}),rie=D.object({text:D.string()}),o1=D.boolean().or(D.nativeEnum(Xr)).transform(t=>!(!t||t==="irrelevant")),LR=D.object({attributes:D.array(D.string()).nullish(),text:o1.nullish(),position:D.nativeEnum(Xr).nullish(),shape:D.nativeEnum(Xr).nullish()}),i1=D.object({id:D.number().int(),requirements:LR}),a1=i1.array(),Ap=D.object({thoughts:D.string(),review:D.string().optional(),id:D.number().int(),updatedMemory:wc.optional(),requirements:LR.nullish().transform(t=>{if(t!==null)return t}),additionalElements:a1.nullish().transform(t=>{if(t!==null)return t})});var NR=(m=>(m.NO_DESCRIPTION_PROVIDED="NO_DESCRIPTION_PROVIDED",m.FEW_WORDS="FEW_WORDS",m.STYLE_TAG="STYLE_TAG",m.TYPE_IN_DESCRIPTION="TYPE_IN_DESCRIPTION",m.HARDCODED_ATTRIBUTE="HARDCODED_ATTRIBUTE",m.NONE="NONE",m.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",m.AMBIGUOUS_ASSERTION="AMBIGUOUS_ASSERTION",m.PREFER_PAGE_CHECK="PREFER_PAGE_CHECK",m.PREFER_ASSERTION="PREFER_ASSERTION",m.HTML_ELEMENTS="HTML_ELEMENTS",m.MULTIPLE_ELEMENTS_DESCRIPTION="MULTIPLE_ELEMENTS_DESCRIPTION",m.NEEDS_DATE_VARIABLE="NEEDS_DATE_VARIABLE",m))(NR||{}),lS=(o=>(o.NONE="NONE",o.AMBIGUOUS_DESCRIPTION="AMBIGUOUS_DESCRIPTION",o.COPILOT_MISUSE="COPILOT_MISUSE",o.IRRELEVANT_MESSAGE="IRRELEVANT_MESSAGE",o))(lS||{});var DR=D.object({thoughts:D.string(),category:D.nativeEnum(NR)}),kR=D.object({thoughts:D.string(),category:D.nativeEnum(lS)}),UR=D.object({anyUntestedSteps:D.boolean().describe("True if any steps (especially new/edited) were not fully run (preview + add) or if their immediately following step, if any, was not run."),possibleErrors:D.object({error:D.string(),solutionFound:D.object({description:D.string(),passedSuccessfully:D.boolean().describe("Whether the solution passed successfully")})}).array().describe("Information about any errors we encountered and how we solved them"),safeToContinue:D.boolean().describe("Whether it is safe to continue or if we are stuck and need intervention"),finalReport:D.string().describe("A final summary report of the session, are we stuck, can we go forward, do we need help, or are we good to go?")}),FR=D.object({summary:D.string().describe("Single large block of text summary of the full chat thread; high-signal only."),errorsRanInto:D.array(D.object({error:D.string(),workAround:D.string()})).default([]).describe("List of encountered errors and mitigations."),untestedSteps:D.array(D.string()).default([]).describe("Steps added/discussed but not validated.")}),s1=D.discriminatedUnion("op",[D.object({op:D.literal("replace"),path:D.string(),value:D.string()}),D.object({op:D.literal("add"),path:D.string(),value:D.string()}),D.object({op:D.literal("remove"),path:D.string()})]),nie=D.object({thoughts:D.string(),patches:s1.array()}),l1=[D.literal("add"),D.literal("replace"),D.literal("remove")],c1=D.object({op:D.union(l1),path:D.string(),value:Ut.optional()}),BR=D.object({patches:c1.array(),thoughts:D.string()}),cS=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))(cS||{}),zR=D.object({thoughts:D.string(),scenario:D.nativeEnum(cS),instructions:D.string().nullish()}),HR=D.object({reasoning:D.string(),scenario:D.string(),patch:D.null().optional()}),oie=D.object({thoughts:D.string(),evaluation:D.number().min(0).max(10)}),iie=D.object({observations:D.string(),reasoning:D.string(),command:sp});var uS=D.object({summary:D.string(),reasoning:D.string(),evaluation:D.discriminatedUnion("type",[D.object({type:D.literal("DONE")}),D.object({type:D.literal("RIGHT_TRACK")}),D.object({type:D.literal("WRONG_TRACK"),feedback:D.string()}),D.object({type:D.literal("IMPOSSIBLE")})])}),u1=D.object({startId:D.number().int(),endId:D.number().int()}),jR=(n=>(n.SIMPLE_CONTENT_BASED_LOCATOR="SIMPLE_CONTENT_BASED_LOCATOR",n.SIMPLE_CONTENT_BASED_ASSERTION="SIMPLE_CONTENT_BASED_ASSERTION",n.OTHER="OTHER",n))(jR||{}),GR=D.object({categoryThoughts:D.string(),category:D.nativeEnum(jR),relevantSections:u1.array()}),Yo=D.boolean().nullish().transform(t=>t??!1),VR=D.object({thoughts:D.string().optional(),isPageReady:Yo,descriptionLabels:D.object({usesTextContent:Yo,usesAppearance:Yo,usesPosition:Yo,usesRelativeElements:Yo,usesSingleQuotes:Yo,isAmbiguous:Yo,targetDoesNotExist:Yo,usesIcon:Yo}).optional()});import{z as U}from"zod";import*as Oe from"zod";var pie=Oe.object({thoughts:Oe.string().optional().describe("only provided if a description was provided"),target:Ei.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().or(ya),height:Oe.number().int(),width:Oe.number().int()}).optional().describe("only provided if returnScreenshot is true")}),$R=Oe.union([Oe.literal("ELEMENT_CHECK"),Oe.literal("NEGATED_CHECK"),Oe.literal("NEGATED_ELEMENT_VISIBLE_CHECK"),Oe.literal("SELECT_OPTION"),Oe.literal("TYPE")]);function Ma(t){if(!("useSelector"in t&&t.useSelector)){if(t.type==="SELECT_OPTION")return"SELECT_OPTION";if(t.type==="TYPE")return"TYPE";if(t.type==="ELEMENT_CHECK"&&t.assertion.type==="ELEMENT_EXISTENCE"&&t.assertion.condition==="EXISTS"&&t.assertion.negated)return"NEGATED_CHECK";if(t.type==="ELEMENT_CHECK"&&t.assertion.type==="ELEMENT_EXISTENCE"&&t.assertion.condition==="VISIBLE"&&t.assertion.negated)return"NEGATED_ELEMENT_VISIBLE_CHECK";if(t.type==="ELEMENT_CHECK")return"ELEMENT_CHECK"}}var Wc=(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))(Wc||{}),qs=Oe.object({matched:Oe.boolean(),reason:Oe.string().optional().describe("Human understandable description"),logs:Oe.string().array().optional().describe("Logs for debugging")}),d1=qs.extend({type:Oe.literal("USER_SELECTOR")}),p1=qs.extend({type:Oe.literal("CSS_SELECTOR"),selectors:Oe.string().array()}),m1=qs.extend({type:Oe.literal("HYBRID_SELECTOR")}),g1=qs.extend({type:Oe.literal("HTML_DISTANCE"),distance:Oe.number().optional(),closestElement:Oe.string().optional(),savedElement:Oe.string().optional()}),h1=qs.extend({type:Oe.literal("TEMPLATE_MATCHING")}),f1=qs.extend({type:Oe.literal("AUTO_FRAME"),logs:Oe.string().array().optional()}),WR=Oe.discriminatedUnion("type",[d1,p1,m1,g1,h1,f1]);import{z as Yc}from"zod";import{z as P1}from"zod";import*as ne from"zod";import{extendZodWithOpenApi as v1}from"zod-openapi";import{cloneDeep as qc}from"lodash-es";import QR from"truncate-json";import*as Na from"zod";import{extendZodWithOpenApi as b1}from"zod-openapi";import{z as Rr}from"zod";import{z as Ae}from"zod";import{z as dS}from"zod";var go=(o=>(o.CHROMIUM="Chromium",o.GOOGLE_CHROME="Google Chrome",o.CHROME_FOR_TESTING="Chrome for Testing",o.ORG_DEFAULT="Org Default",o))(go||{});var Rp=dS.object({width:dS.number().min(200).max(1e4),height:dS.number().min(200).max(1e4)}),qR={"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}},hie=Object.keys(qR);var Ar=qR["Desktop Large"],_i="en-us",Ii="America/Los_Angeles",S1="Chromium",Pi={latitude:37.7749,longitude:-122.4194};function Cp({browserType:t,orgDefaultBrowserType:e}){return t==="Org Default"&&e?e:t??S1}var wp=(a=>(a.ClipboardRead="clipboard-read",a.ClipboardWrite="clipboard-write",a.Microphone="microphone",a.Camera="camera",a.Geolocation="geolocation",a.LocalNetworkAccess="local-network-access",a))(wp||{});var pS=Ae.object({autoFollowNewTabs:Ae.boolean().optional().describe("Deprecated: Auto-follow new tabs that are opened."),showZeroOpacityElements:Ae.union([Ae.boolean(),Ae.literal("inputs-only")]).optional(),ignoreHrefForCaching:Ae.boolean().optional(),disableSecondaryCacheResolution:Ae.boolean().optional(),hybridSelectorMode:Ae.enum(["off","test","prefer"]).optional(),globalLocatorRedirect:Ae.union([Ae.boolean(),Ae.literal("always")]).optional(),visualActions:Ae.boolean().optional(),autoExpandIframes:Ae.boolean().optional(),disableHtmlSnapshots:Ae.boolean().optional(),defaultBrowserType:Ae.nativeEnum(go).optional(),importantAttributes:Ae.string().array().optional(),importantClasses:Ae.string().array().optional(),importantStyles:Ae.string().array().optional()});var KR=1e4,YR=6e4,y1=Ae.object({server:Ae.string(),username:Ae.string().optional(),password:Ae.string().optional()}),Oa=pS.extend({pageLoadTimeoutMs:Ae.number().optional().refine(t=>t===void 0||t<=YR&&t>=-1,{message:`Page load timeout must be between 0 and ${YR/1e3} seconds`}).describe("global page load timeout default for all tests in ms, can still be overridden by individual tests"),smartWaitingTimeoutMs:Ae.number().optional().refine(t=>t===void 0||t<=KR&&t>=-1,{message:`Smart waiting timeout must be between 0 and ${KR/1e3} seconds`}),localChromeExtensionPaths:Ae.string().array().optional(),extraHeaders:Ae.record(Ae.string(),Ae.string()).optional().describe("HTTP headers to be sent on every request"),initialLocalStorage:Ae.record(Ae.string(),Ae.record(Ae.string(),Ae.string())).optional().describe("Initial local storage key-value pairs to set per domain on browser startup"),userAgent:Ae.string().optional(),disableGpu:Ae.boolean().optional(),disableBrowserMonitoring:Ae.boolean().optional().describe("Disable console logs and network request recording, which power the console and network tab in the run viewer"),disableConsoleLogs:Ae.boolean().optional().describe("Disable console log recording in the run viewer."),disableNetworkLogs:Ae.boolean().optional().describe("Disable network request recording in the run viewer."),bustCacheOnBoundingBoxChange:Ae.boolean().optional().describe("This setting is deprecated. 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:Ae.boolean().optional().describe("Allow fetching the partial accessibility tree if fetching the full tree takes too long."),ignoreHttpsErrors:Ae.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."),proxy:y1.optional().describe("HTTP proxy server to use for the entire browser. This can dramatically increase network latency."),disableFullStory:Ae.boolean().optional().describe("Disable FullStory, a third-party analytics tool that can significantly impact browser performance. This can be useful for testing sites that use FullStory."),grantedPermissions:Ae.nativeEnum(wp).array().optional().describe("List of permissions to grant to sites. If not provided, all permissions are granted.")});var nr="BASE_URL",xp="CURRENT_URL",La="ENV_NAME",Ks="TEST_NAME",Rie={[nr]:"https://www.google.com"},XR=Rr.string().describe("Name of the fixture (must be available locally in the fixtures directory)."),JR=Rr.object({name:Rr.string(),variables:Rr.record(Rr.string().describe("variable name"),Rr.string().describe("variable value"))}),ZR=Rr.object({name:Rr.string(),variables:Rr.record(Rr.string().describe("variable name"),Rr.unknown().describe("variable value")),browser:Oa.optional()});var Cie=Rr.object({name:Rr.string(),variables:Rr.record(Rr.string().describe("variable name"),Rr.unknown().describe("variable value"))});b1(Na);var mS=Na.object({env:Na.record(Na.unknown())}).openapi({ref:"TestContextSnapshot"}),E1="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",T1=[nr,La,Ks],eC=[xp,nr,La,Ks],Br=class t{env={};varsFromMomenticEnvironment={};constructor(e){this.reset(e)}static dummyContext(e=void 0,r=void 0,n={}){return new t({baseUrl:"about:blank",currentUrl:"about:blank",testName:e,envName:r,variablesFromEnvironment:n})}static fromSnapshot({snapshot:e,environmentVariables:r}){let n=e.env[nr]??"about:blank",o=e.env[xp]??"about:blank",i=e.env[La],a=e.env[Ks],s={};for(let[l,u]of Object.entries(e.env))eC.includes(l)||(r??{})[l]===void 0&&(s[l]=u);return new t({baseUrl:n,currentUrl:o,dynamicVariables:s,envName:i,testName:a,variablesFromEnvironment:r??{}})}setEnvVariables(e){let r=qc(e);this.env=Object.assign(this.env,r)}setInputs(e){e&&this.setEnvVariables(e)}setMomenticSystemVariable(e,r){this.varsFromMomenticEnvironment[e]=r}getVariable(e){return this.env[e]}setVariable(e,r){T1.includes(e)||(this.env[e]=r)}getEnvName(){return this.env[La]}toObjectCopy(){let e={env:Object.assign({},this.env,this.varsFromMomenticEnvironment)};return qc(e)}toEditorDisplayCopy(){return this.toObjectCopy()}toRedactedDisplayCopy(){let e=this.toObjectCopy();e.env=Object.fromEntries(Object.entries(e.env).map(([n,o])=>eC.includes(n)||this.varsFromMomenticEnvironment[n]===void 0?[n,o]:[n,E1]));for(let[n,o]of Object.entries(e.env)){if(!o){e.env[n]=o;continue}let{jsonString:i}=QR(JSON.stringify(o),5e3);try{e.env[n]=JSON.parse(i)}catch{e.env[n]=void 0}}let{jsonString:r}=QR(JSON.stringify(e.env),25e3);try{e.env=JSON.parse(r)}catch{e.env={}}return e}setCurrentUrl(e){this.env[xp]=e}reset(e){this.env={},this.varsFromMomenticEnvironment={},this.setEnvVariables(e.dynamicVariables??{}),this.setCurrentUrl(e.currentUrl),this.varsFromMomenticEnvironment=qc(e.variablesFromEnvironment),this.setMomenticSystemVariable(nr,e.baseUrl),e.envName&&this.setMomenticSystemVariable(La,e.envName),e.testName&&this.setMomenticSystemVariable(Ks,e.testName)}getDynamicVariablesCopy(){return qc(this.env)}getVariablesFromEnvironmentCopy(){return qc(this.varsFromMomenticEnvironment)}};var Ye=(i=>(i.SUCCESS="SUCCESS",i.FAILED="FAILED",i.RUNNING="RUNNING",i.IDLE="IDLE",i.CANCELLED="CANCELLED",i))(Ye||{}),_p=(n=>(n.SUCCESS="SUCCESS",n.FAILED="FAILED",n.CANCELLED="CANCELLED",n))(_p||{});v1(ne);var gS=ne.object({beforeUrl:ne.string().optional(),afterUrl:ne.string().optional(),message:ne.string().optional(),beforeSnapshot:ne.string().optional(),afterSnapshot:ne.string().optional(),startedAt:ne.coerce.date(),finishedAt:ne.coerce.date()}),A1=gS.extend({viewport:ne.object({height:ne.number(),width:ne.number()}).nullish(),status:ne.nativeEnum(_p),message:ne.string().optional(),elementInteracted:ne.string().optional()}),Da=gS.extend({status:ne.nativeEnum(Ye),message:ne.string().optional(),data:ne.unknown().optional(),beforeTestContext:mS.optional(),afterTestContext:mS.optional(),failureReason:ne.nativeEnum(Me).optional(),details:ne.unknown().describe("Parse using StepExecutionLogSchema.array() to get type safety. We don't explicitly type it because it's non-critical information."),trace:ne.unknown().optional().describe("Web interaction trace from step execution (WebSectionSpan)")}).openapi({ref:"StepResultMetadata"}),hS=(r=>(r.NOT_ELIGIBLE="NOT_ELIGIBLE",r.ATTEMPTED="ATTEMPTED",r))(hS||{}),Ip=Da.merge(sn).extend({results:A1.array().describe("Command that was executed. Array is just for consistency with other result types. There should only ever be one item."),previousAttempts:ne.lazy(()=>Zt.array()).optional(),failureRecoveryStatus:ne.object({type:ne.nativeEnum(hS),message:ne.string()}).optional()}),R1=Da.merge(wa).extend({results:ne.lazy(()=>Ip.array()),previousAttempts:ne.lazy(()=>Zt.array()).optional()}),C1=Da.merge(Ws).extend({results:ne.lazy(()=>Ip.array()),previousAttempts:ne.lazy(()=>Zt.array()).optional()}),w1=Da.merge(Yn).extend({moduleName:ne.string().optional(),results:ne.lazy(()=>Zt.array()),previousAttempts:ne.lazy(()=>Zt.array()).optional()}),x1=Da.merge(xa).extend({assertionResult:Ip.optional(),results:ne.lazy(()=>Zt.array()).describe("results for the block actually executed"),previousAttempts:ne.lazy(()=>Zt.array()).optional()}),_1=Da.merge($c).extend({results:ne.lazy(()=>Zt.array()),healingAttempts:ne.lazy(()=>Zt.array().array()).optional(),previousAttempts:ne.lazy(()=>Zt.array()).optional()}),Zt=ne.discriminatedUnion("type",[R1,C1,Ip,w1,x1,_1]),Pp=Da.pick({startedAt:!0,finishedAt:!0,status:!0,message:!0,data:!0}),I1=gS.extend({index:ne.number().optional(),userFacingStepReference:ne.string().optional(),description:ne.string(),pageState:ne.string().optional(),elementInteracted:ne.string().optional(),startedAt:ne.coerce.date().or(ne.string()).optional().catch(void 0),finishedAt:ne.coerce.date().or(ne.string()).optional().catch(void 0)}),Mp=I1.extend({beforeScreenshot:ne.string().optional(),afterScreenshot:ne.string().optional()});var fS=P1.object({results:Zt.array().describe("main results"),beforeResults:Zt.array().optional(),afterResults:Zt.array().optional()}),Kc=fS.partial();import{z as Y}from"zod";import{extendZodWithOpenApi as U1}from"zod-openapi";import M1 from"zod";var Mi=(r=>(r.ANDROID="ANDROID",r.IOS="IOS",r))(Mi||{}),Yie=M1.nativeEnum(Mi);var Ys=(r=>(r.WEB="WEB",r[r.ANDROID="ANDROID"]="ANDROID",r))(Ys||{});import{z as mt}from"zod";import{isValidCron as O1}from"cron-validator";import{z as Le}from"zod";var tC=["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 rC=1e4,Xs=Oa.extend({browserType:Le.nativeEnum(go).optional(),slowMoMs:Le.number().optional().refine(t=>t===void 0||t<=rC&&t>=-1,{message:`Slow motion must be between 0 and ${rC} milliseconds`}),basicAuthorization:Le.object({username:Le.string().optional(),password:Le.string().optional()}).optional(),geolocation:Le.object({latitude:Le.coerce.number().refine(t=>t>=-90&&t<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:Le.coerce.number().refine(t=>t>=-180&&t<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),disableJavaScript:Le.boolean().optional(),locale:Le.string().optional(),timezone:Le.enum(tC).optional(),colorScheme:Le.enum(["light","dark"]).optional()}),nC=["extraHeaders","basicAuthorization","localChromeExtensionPaths","proxy"],SS=Le.object({useMemory:Le.boolean().optional(),failureRecovery:Le.boolean().optional().describe("undefined means inherit org settings")}),yS=SS.extend({disableAICaching:Le.boolean().optional(),failureRecoveryInstructions:Le.string().optional()}),L1=Le.object({viewport:Rp.optional()}),ka=L1.merge(yS).merge(Xs),Js=Le.object({cron:Le.string().refine(t=>O1(t),{message:"Invalid cron expression."}).default("0 0 */1 * *"),enabled:Le.boolean().default(!1),env:Le.string().optional(),timeZone:Le.string().default("America/Los_Angeles"),jobKey:Le.string().optional()}),Zs=Le.object({onSuccess:Le.boolean().default(!1),failureMessage:Le.string().optional(),onFailure:Le.boolean().default(!0),successMessage:Le.string().optional()}),N1=Le.object({name:Le.string(),required:Le.boolean().optional(),defaultValue:Le.string().describe("this is not optional because we need a value when the editor is first loaded")}),Op=N1.array(),D1=Le.object({name:Le.string(),value:Le.string()}),oC=D1.array(),Lp=Le.object({name:Le.string(),default:Le.boolean().optional(),fixtures:XR.array().optional()});var Xo=SS.extend({aiAction:mt.boolean().optional(),agentConfig:mt.record(mt.string(),mt.string()).optional(),aiFailureAnalysis:mt.boolean().optional(),aiPageFiltering:mt.boolean().optional().describe("rag v2 feature flag")}),k1=mt.object({cliOnly:mt.boolean().optional(),neverShowUsageBanner:mt.boolean().optional()}),bS=mt.object({fakerConstantSeed:mt.boolean().optional()}),iC=mt.object({ai:Xo.optional(),githubAppInstallationId:mt.number().nullish(),githubAppSummaryMessageEnabled:mt.boolean().nullish(),githubReleaseAppInstallationId:mt.number().nullish(),gitlabAppAccessToken:mt.string().nullish(),gitlabAppBaseUrl:mt.string().nullish(),qaseAccessToken:mt.string().nullish(),testSuggestionsEnabled:mt.boolean().nullish(),browser:pS.optional(),internal:k1.optional(),advanced:bS.optional()}),uae=mt.object({globalOverrides:mt.record(mt.string()).optional(),agentConfig:mt.record(mt.string(),mt.string()).optional()}),dae=mt.record(mt.string(),mt.string()).nullish();U1(Y);var Zr={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},$e=(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))($e||{}),Np=(r=>(r.BEFORE_ALL="BEFORE_ALL",r.AFTER_ALL="AFTER_ALL",r))(Np||{});var F1=Y.object({attempts:Y.number().int().nonnegative()}),qt=Y.string().pipe(Y.coerce.date()).or(Y.date()),Ua=Y.object({id:Y.string(),runKey:Y.string(),organizationId:Y.string(),executionType:Y.nativeEnum(Ys).optional().default("WEB"),createdAt:qt,createdBy:Y.string(),flake:Y.boolean().nullish(),scheduledAt:qt.or(Y.null()),startedAt:qt.or(Y.null()),updatedAt:qt.nullish(),finishedAt:qt.or(Y.null()),resolvedBaseUrl:Y.string().nullish(),environmentName:Y.string().nullish(),gitBranchName:Y.string().nullish(),githubRepository:Y.string().nullish(),gitlabProjectPath:Y.string().nullish(),labels:Y.array(Y.string()).optional(),gitOriginUrl:Y.string().nullish(),gitCommitSha:Y.string().nullish(),gitCommitShaShort:Y.string().nullish(),gitCommitAuthorName:Y.string().nullish(),cliVersion:Y.string().nullish(),section:Y.nativeEnum(Np).nullish(),status:Y.nativeEnum($e),trigger:Y.nativeEnum(Zr),attempts:Y.number(),runAttempts:Y.array(Y.object({id:Y.string(),status:Y.nativeEnum($e),startedAt:qt.or(Y.null()),finishedAt:qt.or(Y.null())})).optional(),videos:Y.array(Y.string()).optional(),failureReason:Y.nativeEnum(Me).nullish(),failureDetails:fp.nullish(),failureRecoveryDetails:F1.nullish(),pipelineId:Y.string().nullish(),resolvedInputs:Y.record(Y.string(),Y.string()).nullish(),quarantined:Y.boolean().nullish().default(!1),quarantinedReason:Y.string().nullish(),localTestId:Y.string().nullish(),testId:Y.string().nullish(),testName:Y.string().nullish(),description:Y.string().nullish(),directory:Y.string().nullish(),test:Y.object({name:Y.string(),id:Y.string()}).nullish().default(null),suiteId:Y.string().nullish(),aiSettings:Xo.nullish()}).openapi({ref:"RunMetadata"}),B1={id:!0,status:!0,testName:!0,localTestId:!0,testId:!0,test:{select:{name:!0,id:!0}},finishedAt:!0,failureReason:!0,failureDetails:!0},Dp=Ua.pick({...B1,test:!0}),aC=Ua.omit({failureReason:!0,failureDetails:!0,test:!0}),ES=Ua.extend({stepsSnapshot:Y.array(Y.record(Y.unknown())).nullish(),resolvedInputs:Y.record(Y.string(),Y.string()).nullish(),test:Y.object({name:Y.string(),id:Y.string(),description:Y.string().nullish(),baseUrl:Y.string().nullish(),advanced:ka.nullish()}).nullish()}).merge(fS),sC=t=>t.includes("PASSED")&&t.includes("FAILED");var z1=Yc.object({id:Yc.string().uuid(),startedAt:qt.or(Yc.null()),finishedAt:qt.or(Yc.null()),status:Yc.nativeEnum($e)}).merge(Kc),wae=z1.array();var kp=(o=>(o.JUNIT="junit",o.ALLURE="allure",o.ALLURE_JSON="allure-json",o.PLAYWRIGHT_JSON="playwright-json",o))(kp||{});import{z as jt}from"zod";var lC=jt.object({id:jt.string(),status:jt.nativeEnum($e),trigger:jt.nativeEnum(Zr),createdAt:qt,startedAt:qt.nullish(),finishedAt:qt.nullish(),gitCommitSha:jt.string().nullish(),gitCommitShaShort:jt.string().nullish(),gitCommitTimestamp:qt.nullish(),gitBranchName:jt.string().nullish(),gitOriginUrl:jt.string().nullish(),gitCommitMessage:jt.string().nullish(),gitCommitAuthorName:jt.string().nullish(),githubRepository:jt.string().nullish(),gitlabProjectPath:jt.string().nullish(),pipelineId:jt.string().nullish(),cliVersion:jt.string().nullish(),labels:jt.string().array().optional(),localSuiteName:jt.string().optional(),suite:jt.object({id:jt.string(),name:jt.string()}).nullish(),runs:jt.object({status:jt.nativeEnum($e)}).array()}).openapi({ref:"RunGroup"}),cC=lC.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0,localSuiteName:!0}).extend({runs:Dp.array()}),Oae=lC.extend({runs:Ua.array()});import{z as or}from"zod";var H1=or.object({type:or.literal("TARGETING"),name:or.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:WR.array(),pageState:or.string().optional(),targetSource:or.nativeEnum(jo).optional(),targetUpdateTime:or.string().optional()}),j1=or.object({type:or.literal("AI_LOCATION"),matched:or.boolean(),pageState:or.string().optional(),ragUsed:or.boolean().optional(),thoughts:or.string().optional()}),G1=or.object({type:or.literal("ASSERTION"),relevantElementsSerialized:or.string().array().optional(),pageState:or.string().optional(),ragUsed:or.boolean().optional()}),uC=or.discriminatedUnion("type",[H1,j1,G1]);function Up(){return{details:[]}}import{z as Gt}from"zod";var V1=Gt.object({id:Gt.string(),name:Gt.string()}),Hae=V1.merge(Gt.object({createdAt:qt,createdBy:Gt.string(),schedule:Js,notification:Zs,environment:Gt.object({name:Gt.string()}).nullish(),beforeTests:Gt.object({id:Gt.string()}).array().nullish(),afterTests:Gt.object({id:Gt.string()}).array().nullish()})),dC=Gt.object({id:Gt.string().uuid(),orgId:Gt.string(),createdAt:qt,startedAt:qt.or(Gt.null()),finishedAt:qt.or(Gt.null()),status:Gt.nativeEnum($e),trigger:Gt.nativeEnum(Zr),suite:Gt.object({id:Gt.string(),name:Gt.string()}).nullish(),runs:Ua.array()}),jae=dC.pick({id:!0,createdAt:!0,startedAt:!0,finishedAt:!0,status:!0,trigger:!0,suite:!0}),pC=dC.extend({runs:Dp.array()});import{z as Cn}from"zod";import{cloneDeep as $ae}from"lodash-es";import{z as ot}from"zod";var Jae=ot.object({thoughts:ot.string(),subGoals:ot.object({instruction:ot.string()}).array()}),Zae=ot.object({thoughts:ot.string(),newPlanMarkdown:ot.string()}),Qae=ot.object({thoughts:ot.string(),correct:ot.boolean(),failedActionIndex:ot.number().optional()}),$1=ot.object({type:ot.literal("PLANNING"),beforePlan:ot.string(),goalDecision:ot.string(),thoughts:ot.string()}),W1=ot.object({type:ot.literal("RUNNING"),stepDisplayName:ot.string(),status:ot.nativeEnum(Ye),results:Zt.array()}),q1=ot.object({type:ot.literal("REVISING"),beforePlan:ot.string(),afterPlan:ot.string(),errString:ot.string(),diffs:ot.string(),thoughts:ot.string()}),K1=ot.object({type:ot.literal("SYSTEM"),message:ot.string()}),Y1=ot.discriminatedUnion("type",[$1,W1,q1,K1]),mC=Y1.array();var ose=Cn.object({id:Cn.string(),scheduledAt:Cn.coerce.date().nullable(),startedAt:Cn.coerce.date().nullable(),finishedAt:Cn.coerce.date().nullable(),status:Cn.nativeEnum($e),history:mC.nullable(),testPlan:Cn.object({id:Cn.string(),name:Cn.string()}).nullable(),test:Cn.object({id:Cn.string(),name:Cn.string()}).nullable()});import{z as zr}from"zod";var TS=zr.object({content:zr.string(),ids:zr.string().array(),tokenLength:zr.number()}),X1=zr.object({chunks:TS.array()}),Tse=zr.object({ids:zr.string().array(),score:zr.number(),tokenLength:zr.number()}),vse=X1.extend({description:zr.string().describe("Input to pass to RAG engine"),tokenLimit:zr.number()}),gC=zr.object({ids:zr.number().array()}),hC=zr.object({indices:zr.number().array()});var Kt=U.object({disableCache:U.boolean().optional(),useMemory:U.boolean().optional(),clientMode:U.enum(["interactive","runner"]).optional(),loggerTags:U.record(U.string(),U.string()).optional(),langfuseSessionId:U.string().optional(),agentConfigVersion:U.string().optional()}),Mse=Kt.extend({chunks:TS.array(),description:U.string().describe("Input to pass to AI"),type:U.union([U.literal("locator"),U.literal("assertion"),U.literal("ai-action")]),softTokenLimit:U.number(),hardTokenLimit:U.number(),callId:U.string().optional()}),J1=U.object({screenshotBase64AfterCommand:U.string(),urlAfterCommand:U.string(),serializedCommand:U.string(),elementInteracted:U.string().optional(),thoughts:U.string().optional()}),fC=U.object({goal:U.string(),browserState:U.string(),screenshot:U.string(),source:$R.optional().catch(void 0),isTieBreakerCall:U.boolean().optional(),memory:U.discriminatedUnion("type",[Go,U.object({type:U.literal("RESOLVED_TRACES"),traces:U.unknown().array()})]).optional(),firstPassModelResults:Ap.array().optional()}),SC=U.object({target:U.string().or(U.number()),browserState:U.string().optional(),screenshot:U.string().optional(),boundingBox:U.object({x:U.number(),y:U.number(),height:U.number(),width:U.number()}).optional()}),yC=U.object({goal:U.string(),browserState:U.string(),screenshot:U.string().optional(),returnSchema:U.string().optional()}),vS=U.union([U.literal("NEGATED_CHECK"),U.literal("CONDITIONAL_CHECK")]),bC=U.object({goal:U.string(),browserState:U.string(),screenshot:U.string(),url:U.string(),contextChoice:Uf.optional(),memory:U.discriminatedUnion("type",[ba,U.object({type:U.literal("RESOLVED_TRACES"),traces:U.unknown().array()})]).optional(),source:vS.optional()}),EC=U.object({command:Hs}),TC=U.object({message:U.string()}),vC=U.object({messagesAndToolCalls:U.array(U.string())}),AC=U.object({messagesAndToolCalls:U.array(U.string()).describe("Chat history to condense for summarization")}),AS=U.object({goal:U.string(),browserState:U.string(),startingScreenshot:U.string().optional(),screenshot:U.string(),url:U.string(),history:J1.array(),actionHint:U.string().optional(),lastError:U.string().optional()}),RC=U.object({results:Mp.array(),errorMessage:U.string(),errorStack:U.string().optional()}),CC=U.object({results:Mp.array(),goal:U.string(),errorMessage:U.string()}),wC=U.object({failedResults:Mp.array(),nextStepsSerialized:U.string().array(),currentUrl:U.string(),currentPageState:U.string(),currentScreenshot:U.string(),customInstructions:U.string().optional(),testDescription:U.string().optional()}),Ose=U.object({description:U.string(),type:U.union([U.literal("locator"),U.literal("assertion"),U.literal("ai-action")]),excerpt:U.string()}),xC=U.object({type:U.string(),browserContext:U.string(),currentStep:U.string(),screenshot:U.string()}),_C=U.object({description:U.string(),browserState:U.string(),screenshot:U.string()});import{z as Xc}from"zod";var Dse=Xc.object({goal:Xc.string()}),IC=Xc.object({keywords:Xc.array(Xc.string())});import{z as Qs}from"zod";var Jc=(o=>(o.LOCATOR="locator",o.ASSERTION="assertion",o.VISUAL_ASSERTION="visual-assertion",o.TEXT_EXTRACTION="text-extraction",o))(Jc||{}),Fse=Qs.nativeEnum(Jc),Bse=new Set(Object.values(Jc));var Z1=Qs.enum(["v1","v2","v3","v4"]),Q1=Qs.string().regex(/^v\d+\.\d+$/).describe("pinned sub-version like v3.1"),zse=Qs.union([Z1,Q1,Qs.string().describe("for people with special configurations")]),Fp={locator:"v3",assertion:"v3","visual-assertion":"v3","text-extraction":"v3"};var PC=(o=>(o.ANDROID_LOCATOR="android-locator",o.IOS_LOCATOR="ios-locator",o.ANDROID_ASSERTION="android-assertion",o.IOS_ASSERTION="ios-assertion",o))(PC||{}),Hse=Qs.nativeEnum(PC);import{z as Ee}from"zod";import mu from"zod";import pr from"zod";import Qt from"zod";import{v4 as qce}from"uuid";import hH from"zod";import*as K from"zod";var RS=K.discriminatedUnion("type",[K.object({type:K.literal("SCREEN")}),K.object({type:K.literal("OPEN_APP")}),K.object({type:K.literal("OPEN_WEBVIEW")})]),Oi=K.object({type:K.literal("description"),description:K.string()}),MC=K.object({type:K.literal("CUSTOM_COORDINATES"),startX:K.number().describe("Starting X coordinate in pixels"),startY:K.number().describe("Starting Y coordinate in pixels"),deltaPixels:K.number().describe("Number of pixels to scroll in the specified direction")}),Bp=K.discriminatedUnion("type",[...RS.options,K.object({type:K.literal("CUSTOM"),target:Oi}),MC]);var eH=K.object({type:K.literal("coordinates"),xPercent:K.number(),yPercent:K.number()}),el=K.discriminatedUnion("type",[Oi,eH]),OC=K.object({requiredText:K.string().optional(),requiredAttributes:K.record(K.string(),K.string()).optional(),requiredBounds:K.boolean().optional(),position:K.object({x1:K.number(),y1:K.number(),x2:K.number(),y2:K.number(),tolerance:K.nativeEnum(Xr),preciseTolerance:K.boolean().optional()}).optional(),shape:K.object({width:K.number(),height:K.number(),tolerance:K.nativeEnum(Xr),preciseTolerance:K.boolean().optional()}).optional()}),tH=K.object({xPath:K.string(),requirements:OC.optional()}),rH=K.object({type:K.literal("CUSTOM"),target:Oi,cache:K.lazy(()=>LC).optional()}),nH=K.object({pixelDelta:K.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:K.union([RS,rH,MC]),direction:K.enum(["up","down"])}),LC=K.object({type:K.literal("NATIVE"),bounds:K.number().array().optional(),resolvedDescription:K.string().optional(),xPath:K.string().optional(),elementOnlySerializedXml:K.string().optional(),scrollDetails:nH.optional(),requirements:OC.optional(),requiredRelatedElements:tH.array().optional(),memory:Go.optional()}),oH=K.object({type:K.literal("WEBVIEW"),resolvedDescription:K.string().optional(),xPath:K.string().optional(),browserCache:Ei.optional(),memory:Go.optional()}),zp=K.union([LC,oH]);var iH=K.object({left:K.number(),top:K.number(),right:K.number(),bottom:K.number()}),$se=K.object({newViewportBounds:iH});import CS from"zod";import Li from"zod";var Xe=(v=>(v.AI_CHECK="AI_CHECK",v.TAP="TAP",v.TYPE="TYPE",v.PRESS="PRESS",v.PRESS_KEYBOARD="PRESS_KEYBOARD",v.OPEN_APP="OPEN_APP",v.KILL_APP="KILL_APP",v.OPEN_NOTIFICATION_DRAWER="OPEN_NOTIFICATION_DRAWER",v.SWIPE="SWIPE",v.SCROLL_TO="SCROLL_TO",v.SCREEN_CHECK="SCREEN_CHECK",v.ELEMENT_CHECK="ELEMENT_CHECK",v.DRAG_AND_DROP="DRAG_AND_DROP",v.JAVASCRIPT="JAVASCRIPT",v.REQUEST="REQUEST",v.WAIT="WAIT",v.ADD_FILE="ADD_FILE",v.INSTALL_APP="INSTALL_APP",v.UNINSTALL_APP="UNINSTALL_APP",v.TOGGLE_SETTINGS="TOGGLE_SETTINGS",v.ROTATE_ORIENTATION="ROTATE_ORIENTATION",v.ADB="ADB",v.STATE="STATE",v))(Xe||{}),he=Li.object({id:Li.string().uuid(),disableCache:Li.boolean().optional()}),Hp=Li.object({updatedAt:Li.coerce.date().optional(),updatedAtLoggerTags:Li.record(Li.string(),Li.string()).optional()}),wn=Hp.extend({target:zp}),jp=Hp.extend({fromTarget:zp,toTarget:zp});var wS=he.extend({type:CS.literal("ADB"),command:CS.string(),jsonArgs:CS.string().optional()});import xS from"zod";var _S=he.extend({type:xS.literal("ADD_FILE"),file:xS.string(),storageLocation:xS.string()});import IS from"zod";var Zc=he.extend({type:IS.literal("DRAG_AND_DROP"),fromTarget:Oi,toTarget:Oi,cache:jp.optional(),hoverDuration:IS.number().optional(),dragDuration:IS.number().optional()});import NC from"zod";var Qc=he.extend({type:NC.literal("ELEMENT_CHECK"),target:el,cache:wn.optional(),assertion:tp,timeout:NC.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")});import DC from"zod";var aH=DC.string().trim(),PS=he.extend({type:DC.literal("INSTALL_APP"),uri:aH});import sH from"zod";var MS=he.extend({type:sH.literal("KILL_APP")});import lH from"zod";var OS=he.extend({type:lH.literal("OPEN_NOTIFICATION_DRAWER")});import LS from"zod";var eu=he.extend({type:LS.literal("SCROLL_TO"),target:Oi,direction:LS.enum(["down","up"]),scrollableElement:Bp,scrollStepPercent:LS.number().min(.1).max(1).optional().describe("How much of the container height to scroll at each step (0.1 to 1.0). Default is 0.8 (80%)."),cache:wn.optional()});import Gp from"zod";var tu=he.extend({type:Gp.literal("SWIPE"),direction:Gp.enum(["up","down","left","right"]),scrollableElement:Bp,cache:wn.optional(),viewportPercent:Gp.number().optional(),durationMs:Gp.number().optional()});import kC from"zod";var ru=(o=>(o.AIRPLANE_MODE="AIRPLANE_MODE",o.DATA="DATA",o.WIFI="WIFI",o.LOCATION="LOCATION",o))(ru||{}),NS=he.extend({type:kC.literal("TOGGLE_SETTINGS"),settingsType:kC.nativeEnum(ru)});import UC from"zod";var DS=he.extend({type:UC.literal("UNINSTALL_APP"),packageName:UC.string()});import HC from"zod";import kS from"zod";var nu=he.extend({type:kS.literal("AI_CHECK"),assertion:kS.string(),timeoutSecs:kS.number().optional(),cache:Hp.extend({memory:ba.optional()}).optional()});import US from"zod";var FS=he.extend({type:US.literal("JAVASCRIPT"),code:US.string(),timeout:US.number().int().max(60).optional().describe("Max seconds for the code to complete")});import FC from"zod";var Vp=(n=>(n.CLOSE_KEYBOARD="CLOSE_KEYBOARD",n.ENTER="ENTER",n.BACKSPACE="BACKSPACE",n))(Vp||{}),BS=he.extend({type:FC.literal("PRESS_KEYBOARD"),key:FC.nativeEnum(Vp)});import ou from"zod";var $p=(r=>(r.HOME="HOME",r.POWER="POWER",r))($p||{}),tl=(a=>(a.BACK="BACK",a.APP_SWITCHER="APP_SWITCHER",a.SEARCH="SEARCH",a.VOLUME_UP="VOLUME_UP",a.VOLUME_DOWN="VOLUME_DOWN",a.VOLUME_MUTE="VOLUME_MUTE",a))(tl||{}),iu=he.extend({type:ou.literal("PRESS"),key:ou.nativeEnum($p),longPress:ou.boolean().optional()}),zS=iu.extend({key:ou.nativeEnum(tl).or(ou.nativeEnum($p))}),HS=iu;import cH from"zod";var jS=he.extend({type:cH.literal("REQUEST")}).merge(Ea);import BC from"zod";var Wp=(r=>(r.PORTRAIT="PORTRAIT",r.LANDSCAPE="LANDSCAPE",r))(Wp||{}),GS=he.extend({type:BC.literal("ROTATE_ORIENTATION"),orientation:BC.nativeEnum(Wp)});import uH from"zod";var VS=he.extend({type:uH.literal("STATE")});import ho from"zod";var au=he.extend({type:ho.literal("TAP"),target:el,cache:wn.optional(),longPress:ho.boolean().optional(),longPressDurationMs:ho.number().optional(),iterations:ho.number().optional(),tapDelayMs:ho.number().optional(),relativePosition:ho.object({x:ho.number(),y:ho.number()}).optional(),doubleTap:ho.boolean().optional(),doubleTapDelayMs:ho.number().optional()});import su from"zod";var lu=he.extend({type:su.literal("TYPE"),target:el.optional(),cache:wn.optional(),keyPressDelayMs:su.number().optional(),text:su.string(),clearContent:su.boolean().optional(),forceClearContent:su.boolean().optional()});import zC from"zod";var $S=he.extend({type:zC.literal("WAIT"),timeoutSecs:zC.number()});var cu=HC.discriminatedUnion("type",[VS,nu,au,lu,BS,FS,$S,jS,GS]),dH=HC.discriminatedUnion("type",[...cu.options,iu]);import rl from"zod";var WS=he.extend({type:rl.literal("OPEN_APP"),packageName:rl.string(),activityName:rl.string().optional(),intentExtras:rl.string().optional()}),qS=he.extend({type:rl.literal("OPEN_APP"),bundleId:rl.string()});import nl from"zod";var pH=nl.object({type:nl.literal("CONTENT"),negated:nl.boolean().optional(),value:nl.string()}),KS=he.extend({type:nl.literal("SCREEN_CHECK"),assertion:pH,timeout:nl.number().int().min(0).max(Aa).optional().describe("max seconds to wait for the assertion to be true")});var XS=hH.discriminatedUnion("type",[...cu.options,MS,zS,DS,PS,_S,wS,Zc,KS,OS,eu,tu,NS,Qc,WS]);import fH from"zod";var JS=fH.discriminatedUnion("type",[...cu.options,HS,qS]);var ln=(n=>(n.PRESET="MOBILE_PRESET_STEP",n.MODULE="MOBILE_MODULE_STEP",n.AI_ACTION="MOBILE_AI_ACTION_STEP",n))(ln||{}),ol=Qt.object({id:Qt.string().uuid(),envKey:Qt.string().optional(),skipped:Qt.boolean().optional(),retries:Qt.number().optional()}),jC=ol.extend({type:Qt.literal("MOBILE_PRESET_STEP"),keyPressDelayMs:Qt.number().optional()}),uu=jC.extend({command:XS}),ZS=jC.extend({command:JS}),il=Qt.object({moduleId:Qt.string(),inputs:Qt.record(Qt.string(),Qt.string()).optional()}),du=ol.merge(il.extend({type:Qt.literal("MOBILE_MODULE_STEP")})),Ade=il.extend({steps:Qt.lazy(()=>Jo.array())}),Rde=il.extend({steps:Qt.lazy(()=>qp.array())}),Fa=ol.extend({type:Qt.literal("MOBILE_AI_ACTION_STEP"),text:Qt.string()}),Jo=Qt.discriminatedUnion("type",[uu,du,Fa]),qp=Qt.discriminatedUnion("type",[ZS,du,Fa]);var pu=pr.object({message:pr.string().optional(),startTime:pr.number(),endTime:pr.number(),status:pr.nativeEnum(Ye),trace:pr.unknown(),beforeSnapshot:pr.string().optional(),afterSnapshot:pr.string().optional(),data:pr.unknown().optional().describe("output data from the step"),aiSuggested:pr.boolean().optional()}),yH=pu.merge(uu).extend({previousAttempts:pr.lazy(()=>Xn.array()).optional()}),bH=pu.merge(du).extend({steps:pr.lazy(()=>Xn.array()),name:pr.string().optional(),previousAttempts:pr.lazy(()=>Xn.array()).optional()}),EH=pu.merge(Fa).extend({steps:pr.lazy(()=>Xn.array()),previousAttempts:pr.lazy(()=>Xn.array()).optional()}),Xn=pr.discriminatedUnion("type",[yH,bH,EH]);var TH=pu.extend({index:mu.number().optional(),userFacingStepReference:mu.string().optional(),description:mu.string()}),GC=TH.extend({beforeScreenshot:mu.string().optional(),afterScreenshot:mu.string().optional()});var VC=Ee.object({attributesRequired:Ee.array(Ee.string()).optional(),textRequired:Ee.boolean().optional(),boundsRequired:Ee.boolean().optional(),positionSpecificity:Ee.nativeEnum(Xr).optional(),shapeSpecificity:Ee.nativeEnum(Xr).optional()}),vH=Ee.object({thoughts:Ee.string(),id:Ee.number(),updatedMemory:wc.optional(),inWebview:Ee.boolean().optional(),requirements:VC.optional(),additionalElements:Ee.object({id:Ee.number(),requirements:VC}).array().optional()}),$C=Ee.object({description:Ee.string(),screenXml:Ee.string(),screenshot:Ee.string(),memory:Ee.discriminatedUnion("type",[Go,Ee.object({type:Ee.literal("RESOLVED_TRACES"),traces:Ee.unknown().array()})]).optional()}),WC=Ee.object({assertion:Ee.string(),screenXml:Ee.string(),screenshot:Ee.string(),memory:Ee.discriminatedUnion("type",[ba,Ee.object({type:Ee.literal("RESOLVED_TRACES"),traces:Ee.unknown().array()})]).optional()}),AH=Ee.object({thoughts:Ee.string(),result:Ee.boolean(),relevantElements:Ee.array(Ee.number()).optional(),updatedMemory:_c.optional()}),qC=Ee.object({failedResults:GC.array(),nextStepsSerialized:Ee.string().array(),currentScreenXml:Ee.string(),currentScreenshot:Ee.string(),customInstructions:Ee.string().optional(),testDescription:Ee.string()}),KC=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))(KC||{}),RH=Ee.object({thoughts:Ee.string(),scenario:Ee.nativeEnum(KC),instructions:Ee.string().nullish()});var YC=t=>!(!t.org_id||!t.user_id||!t.platform);import{z as Ba}from"zod";var XC=Ba.object({id:Ba.string().uuid(),skipped:Ba.boolean().optional(),envKey:Ba.string().optional().describe("key in the environment to save the result of this step to")}),QS=XC.merge(Ea).extend({type:Ba.literal("REQUEST")}),ey=XC.merge(rp).extend({type:Ba.literal("JAVASCRIPT")}),ty=Ba.discriminatedUnion("type",[ey,QS]);import{z as xn}from"zod";var JC=xn.object({id:xn.string(),name:Ko,description:xn.string().optional().nullish(),baseUrl:Ep.nullish(),schemaVersion:xn.string(),advanced:xn.unknown().optional(),retries:xn.number(),envs:xn.array(Lp).nullish(),parameters:Op.nullish()}),CH=xn.object({createdAt:xn.coerce.date(),updatedAt:xn.coerce.date(),schedule:Js.nullish(),notification:Zs.nullish(),createdBy:xn.string(),organizationId:xn.string()}),wH=JC.merge(CH),ape=wH.extend({steps:ty.array()}),spe=JC.extend({steps:ty.array()});import{z as Qr}from"zod";var ZC=Qr.object({startedAt:Qr.coerce.date(),finishedAt:Qr.coerce.date(),status:Qr.nativeEnum(Ye),message:Qr.string().optional(),data:Qr.unknown().optional()}),xH=ZC.merge(ey).extend({type:Qr.literal("JAVASCRIPT")}),_H=ZC.merge(QS).extend({type:Qr.literal("REQUEST")}),IH=Qr.discriminatedUnion("type",[xH,_H]),QC=Qr.object({startedAt:Qr.coerce.date(),finishedAt:Qr.coerce.date().nullish(),status:Qr.nativeEnum($e),results:IH.array(),failureReason:Qr.string().nullish(),failureDetails:fp.nullish()});import{z as en}from"zod";var PH=en.object({id:en.string(),organizationId:en.string(),createdAt:en.coerce.date(),updatedAt:en.coerce.date(),createdBy:en.string(),scheduledAt:en.coerce.date().nullish(),startedAt:en.coerce.date().nullish(),finishedAt:en.coerce.date().nullish(),status:en.nativeEnum($e),trigger:en.nativeEnum(Zr),results:QC.array().nullish(),apiTestName:en.string().nullish(),apiTestPath:en.string().nullish(),apiTestId:en.string().nullish()}),Spe=PH.pick({status:!0,startedAt:!0,finishedAt:!0});var gu=(o=>(o.TestRun="test-run",o.MobileTestRun="mobile-test-run",o.CreditsUsed="credits-used",o.CreditsUsedV2="credits-used-v2",o))(gu||{}),ew=3;function MH(t){return t==="MODULE"||t==="CONDITIONAL"||t==="SECTION"||t==="RESOLVED_MODULE"}function ry(t){if(!MH(t))switch(t){case"PRESET_ACTION":return 0;case"AI_ACTION":return 3;case"AI_ACTION_DYNAMIC":return 5;default:(r=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}}function ny(t){switch(t.type){case"AI_EXTRACT":case"AI_ASSERTION":return ew;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 t.useSelector||!t.target||t.target.type!=="description"?0:1;case"DRAG":return t.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:(r=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(t)}}var al=class{trackStepExecution(){}async flush(){}};import{parseString as OH,splitCookiesString as LH}from"set-cookie-parser";import{z as Je}from"zod";var oy=Je.object({name:Je.string(),value:Je.string(),url:Je.string().optional(),domain:Je.string().optional(),path:Je.string().optional(),expires:Je.number().default(Date.now()/1e3+60*60*24*365),httpOnly:Je.boolean().optional(),secure:Je.boolean().default(!0),sameSite:Je.union([Je.literal("Strict"),Je.literal("Lax"),Je.literal("None")]).default("None")});function Kp(t,e){let r=[],n=LH(t);for(let o of n){let i=OH(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=oy.parse({...i,expires:i.expires?i.expires.getTime()/1e3:void 0,sameSite:a});r.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())||r.push({...s,name:d,value:p})}}return r}var NH=Je.object({origin:Je.string(),localStorage:Je.array(Je.object({name:Je.string(),value:Je.string()})),sessionStorage:Je.array(Je.object({name:Je.string(),value:Je.string()})).optional()}),DH=Je.object({entries:Je.record(Je.string(),Je.array(Je.tuple([Je.unknown(),Je.unknown()]))),version:Je.number().optional()}),Yp=Je.object({cookies:oy.array().optional(),origins:NH.array().optional(),idb:Je.record(Je.string(),DH).optional().describe("key is db name")});function tw(t,e){let r=[];return t.cloneSync()?.serializeSync()?.cookies.forEach(n=>{let o=oy.safeParse({name:n.key,...n});if(!o.success)return;let i=o.data;!i.domain&&!i.url&&(i.domain=e),r.push(i)}),r}import{v4 as Fpe}from"uuid";import Ne from"zod";var kH=["SCREEN","OPEN_APP","OPEN_WEBVIEW","CUSTOM"],rw=Ne.object({type:Ne.enum(kH).describe("Where to interact. SCREEN = entire device (use for system surfaces like the notification bar or quick settings), OPEN_APP = current foreground app, OPEN_WEBVIEW = active webview (only if a webview is present and there is high confidence that the element is inside it), CUSTOM = explicitly describe the container if and only if NONE of the above fit."),description:Ne.string().or(Ne.null()).describe("Description of the container to interact with. This is only used if the container type is CUSTOM.")}),UH=Ne.object({type:Ne.literal("TAP"),description:Ne.string().describe("Description of the element to tap."),longPress:Ne.boolean().describe("Whether to hold the tap down before releasing. Useful for triggering context menus."),iterations:Ne.null().or(Ne.number()).describe("Number of times to tap the element, useful for selecting text, selecting a row, or opening a menu. If null, tap once."),relativePosition:Ne.null().or(Ne.object({x:Ne.number(),y:Ne.number()})).describe("Specific position to tap within the bounding box of the element, specified in pixels. E.g. 0,0 is the top left corner.")}).describe(`
@@ -28,7 +28,7 @@ ${this.decisions.map(e=>e.toString()).join(`
28
28
  `);process.stderr.write(`${o}
29
29
  `),globalThis.console=e}}var It=" ".repeat(6);function i_(t,e="",r=!1){let n=process.stdout?.columns||process.stderr?.columns||80,o=Math.max(n-e.length,20),i=t.split(`
30
30
  `),a=[];for(let s of i)if(r){let c=s;for(;c.length>o;){let u=c.slice(0,o+1).lastIndexOf(" "),d=u>-1?u:o;a.push(e+c.slice(0,d)),c=c.slice(d).trimStart()}a.push(e+c)}else{let c=s.split(" "),l="";for(let u of c){if(!l.length){l=u;continue}let d=`${l} ${u}`;d.length<=o?l=d:(a.push(e+l),l=u)}a.push(e+l)}return a.join(`
31
- `)}import pV from"fetch-retry";import mV from"os";import a_,{multistream as gV}from"pino";import hV from"pino-pretty";import fV from"pino-std-serializers";var gl=new Map,SV=!0,s_="Log throttle exceeded",yV=100,bV=5e3,EV=pV(global.fetch,{retries:2,retryOn:function(t,e,r){return!!(e!==null||r&&r.status>=500)},retryDelay:function(t){return Math.pow(2,t)*500}}),By=class t{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:r,disableConsoleLogs:n,flushIntervalMs:o,maxBatchSize:i}){this.hostname=r??mV.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=SV?a_(a):a_(a,gV([{stream:hV({colorize:!0})}]))}child(e){return new t({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}async flush(){await this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush()}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushBuffer()},this.flushIntervalMs))}async flushBuffer(){if(this.buffer.length===0)return;let e=this.buffer;this.buffer=[];try{let r=await EV(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:ja(e),signal:AbortSignal.timeout(5e3)});if(!r.ok)throw new Error(`Got error status (${r.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===s_)return!0;let r=Date.now();return r-this.lastWindowStart>bV&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,s_),this.droppedLogsInWindow=!1,this.lastWindowStart=r),this.logsInCurrentWindow<yV?(this.logsInCurrentWindow++,!0):(this.droppedLogsInWindow=!0,!1)}log(e,r,n,...o){try{this.logHelper(e,r,n,...o)}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`)}}logHelper(e,r,n,...o){if(Ru[e]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof r=="string"&&!n&&(r={message:r}),typeof r=="object"&&r&&"err"in r&&r.err instanceof Error&&(r.err=fV.err(r.err));let i={...this.bindingAttributes,...r&&typeof r=="object"?r:{},...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:Gw({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 r=this.bindingAttributes.app;this.bindingAttributes.app=e,gl.set("app",this),gl.delete(r)}debug(e,r,...n){this.log("debug",e,r,...n)}info(e,r,...n){this.log("info",e,r,...n)}warn(e,r,...n){this.log("warn",e,r,...n)}error(e,r,...n){this.log("error",e,r,...n)}bindings(){return this.bindingAttributes}addBinding(e,r){this.bindingAttributes[e]=r}setMinLevel(e){typeof e=="number"?(this.minLevelValue=e,this.consoleLogger.level=Vw[e]):(this.minLevelValue=Ru[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},hl=({app:t,hostname:e,disableConsoleLogs:r})=>(gl.has(t)||gl.set(t,new By({bindings:{app:t},hostname:e,disableConsoleLogs:r})),gl.get(t));async function c_(){await Promise.all([...gl.values()].map(t=>t.flush()))}import{hostname as TV}from"os";var J=hl({app:"cli",hostname:TV(),disableConsoleLogs:!0}).child({cliVersion:"2.45.2"});var AV=5;async function pm({getResults:t,checkDone:e,name:r,timeoutMs:n=18e5}){let o=Date.now(),i=0;for(;Date.now()-o<n;){let a;i>AV&&(A.error(`Failed to fetch ${r} status too many times.`),process.exit(1));try{a=await t(),i=0}catch(l){i++,J.warn({err:l},"Failed to fetch run status, retrying..."),A.warn({err:l},"Failed to fetch run status, retrying..."),await new Promise(u=>setTimeout(u,1500*i));continue}if(e(a))return a;let c=Math.max(1e4,Math.floor(n/100));await new Promise(l=>setTimeout(l,c))}A.error(`Timeout elapsed waiting for ${r} to complete (${Math.floor(n/1e3)}s).`),process.exit(1)}function fl({results:t,startTime:e,entity:r,getDisplayLine:n,onFailed:o}){let i=t.filter(u=>u.status==="PASSED"&&u.quarantined),a=t.filter(u=>u.status==="PASSED"&&!u.quarantined),s=t.filter(u=>u.status==="FAILED"&&u.quarantined),c=t.filter(u=>u.status==="FAILED"&&!u.quarantined),l=t.filter(u=>u.status==="CANCELLED");return o_(()=>{if(c.forEach(u=>{A.log(""),o(u)}),c.length){A.log("");let u=c.length===1?"":"s";A.error(`${c.length} ${r}${u} failed:`),c.forEach(d=>{A.dimmed(n(d))})}if(l.length){A.log("");let u=l.length===1?"":"s";A.warn(`${l.length} ${r}${u} cancelled:`),l.forEach(d=>{A.dimmed(n(d))})}if(a.length){A.log("");let u=a.length===1?"":"s";A.success(`${a.length} ${r}${u} passed:`),a.forEach(d=>{A.dimmed(n(d))})}if(s.length){A.log("");let u=s.length===1?"":"s";A.warn(`${s.length} quarantined ${r}${u} failed:`),s.forEach(d=>{A.dimmed(n(d))})}if(i.length){A.log("");let u=i.length===1?"":"s";A.warn(`${i.length} quarantined ${r}${u} passed:`),i.forEach(d=>{A.dimmed(n(d))})}A.log(""),A.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 mm=(t,e)=>{if(!t.failureDetails||!t.failureReason)return;let r=hp[t.failureDetails?.classification?.reason||t.failureReason],n=t.failureDetails?.classification?.summary||js[t.failureReason],o=t.failureDetails.classification?.rootCause;if(A.error(e),o){A.log(`${It}- Error type: ${To.dim(r)}`);let i="- Root cause analysis:",a=i_(`${i} ${o}`,`${It} `,!1),s=a.indexOf(":");A.log(`${It}${i} ${To.dim(a.slice(s+1))}`)}else A.log(`${It}Reason: ${To.red(r)}`),A.log(`${It}Description: ${To.red(n)}`)},_u=({status:t,testLogRef:e,getRunningTestsCount:r,getTotalTestsCount:n,additionalText:o})=>{t=t.toUpperCase();let i=t,a;t.includes("FAIL")?(i=To.bgRed.white("FAIL"),a=3):t.includes("PASS")?(i=To.bgGreen.white("PASS"),a=3):t.includes("START")?(i=To.bgBlue.white("START"),a=2):t.includes("CANCEL")?(i=To.bgRgb(191,68,11).white("CANCEL"),a=1):t.includes("RETRY")?(i=To.bgRgb(191,68,11).white("RETRY"),a=2):t.includes("RUN")||t.includes("PROG")?(i=To.bgMagenta.white("RUNNING"),a=0):(A.warn(`Unknown status tried to be logged in run test locally: ${t}`),a=0),vV||(i=`${i}`),A.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${r()}/${n()})`)};import RV from"fs";import{platform as CV,tmpdir as wV}from"os";import xV from"path";import{program as _V}from"playwright-core/lib/cli/program";import{registry as Iu}from"playwright-core/lib/server";import u_ from"proper-lockfile";var d_=xV.join(wV(),"momenticBrowserInstallation");var zy=["chrome","chromium","chrome-for-testing","ffmpeg"],IV={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},p_={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell",ffmpeg:"ffmpeg"};function m_(t){if(t==="Org Default")return!1;let e=p_[IV[t]??""]??"",r=Iu.findExecutable(e);return!r||r.installType==="none"?!1:Hy(r)}function Hy(t){let e=t.executablePath();return RV.existsSync(e)}function PV(t,e){let r=p_[t];if(!r)throw new Error(`Requested install of unknown browser type ${t}`);let n=Iu.findExecutable(r);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${t}`);if(!(!e&&Hy(n)))return n}async function MV({browser:t,force:e}){let r=PV(t,e);if(!r){A.info(`Browser '${t}' is already installed, skipping...`);return}A.info(`Installing browser '${t}'...`);try{await Iu.installDeps([r],!1),await Iu.install([r],!1)}catch(n){if(n.message.includes("Lock file is already being held")){A.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Iu.findExecutable(t),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Hy(o);)A.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function OV(){if(CV()==="win32"){A.info("Installing Windows dependencies for Playwright...");try{await _V.parseAsync(["","","install","winldd"])}catch(t){A.warn(`Failed to install Windows dependencies: ${t}. Continuing with browser installation...`)}}}async function g_({rawBrowsers:t,force:e=!1,all:r=!1}){await OV();let n=r?zy:Array.from(new Set(t));try{await u_.lock(d_,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){A.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 MV({browser:i,force:e})}catch(a){o=a,A.error(`Failed to install the ${i} browser: ${a}`)}}finally{await u_.unlock(d_,{realpath:!1})}if(o)throw o}import{createServer as LV}from"http";async function h_(t,e,r=30){for(let n=0;n<r;n+=1){let o=t+n;if(await NV(o))return o}A.error(`Could not find an available port for ${e} starting from ${t} after ${r} attempts`),process.exit(1)}async function NV(t){return new Promise((e,r)=>{let n=LV();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(A.warn({err:o},"Unexpected error checking for open ports, continuing..."),n.close(),e(!0))}),n.once("listening",()=>{n.close(()=>{e(!0)})}),n.listen(t)})}import DV from"blocked-at";import kV from"why-is-node-running";function f_(t){UV(t),FV()}function UV(t){DV((e,r)=>{console.warn(`Detected the NodeJS event loop was blocked for ${e.toFixed(0)}ms. This can cause the CLI to hang.`);let n=r.join(`
31
+ `)}import pV from"fetch-retry";import mV from"os";import a_,{multistream as gV}from"pino";import hV from"pino-pretty";import fV from"pino-std-serializers";var gl=new Map,SV=!0,s_="Log throttle exceeded",yV=100,bV=5e3,EV=pV(global.fetch,{retries:2,retryOn:function(t,e,r){return!!(e!==null||r&&r.status>=500)},retryDelay:function(t){return Math.pow(2,t)*500}}),By=class t{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:r,disableConsoleLogs:n,flushIntervalMs:o,maxBatchSize:i}){this.hostname=r??mV.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=SV?a_(a):a_(a,gV([{stream:hV({colorize:!0})}]))}child(e){return new t({bindings:{...this.bindingAttributes,...e},hostname:this.hostname,disableConsoleLogs:this.disableConsoleLogs,flushIntervalMs:this.flushIntervalMs,maxBatchSize:this.maxBatchSize})}async flush(){await this.flushBuffer(),this.disableConsoleLogs||this.consoleLogger.flush()}scheduleFlush(){this.flushTimer||(this.flushTimer=setTimeout(()=>{this.flushTimer=void 0,this.flushBuffer()},this.flushIntervalMs))}async flushBuffer(){if(this.buffer.length===0)return;let e=this.buffer;this.buffer=[];try{let r=await EV(this.site,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":"CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih"},body:ja(e),signal:AbortSignal.timeout(5e3)});if(!r.ok)throw new Error(`Got error status (${r.statusText}) from SigNoz`)}catch{}}shouldAllowLog(e){if(e===s_)return!0;let r=Date.now();return r-this.lastWindowStart>bV&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,s_),this.droppedLogsInWindow=!1,this.lastWindowStart=r),this.logsInCurrentWindow<yV?(this.logsInCurrentWindow++,!0):(this.droppedLogsInWindow=!0,!1)}log(e,r,n,...o){try{this.logHelper(e,r,n,...o)}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`)}}logHelper(e,r,n,...o){if(Ru[e]<this.minLevelValue||!this.shouldAllowLog(n))return;typeof r=="string"&&!n&&(r={message:r}),typeof r=="object"&&r&&"err"in r&&r.err instanceof Error&&(r.err=fV.err(r.err));let i={...this.bindingAttributes,...r&&typeof r=="object"?r:{},...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:Gw({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 r=this.bindingAttributes.app;this.bindingAttributes.app=e,gl.set("app",this),gl.delete(r)}debug(e,r,...n){this.log("debug",e,r,...n)}info(e,r,...n){this.log("info",e,r,...n)}warn(e,r,...n){this.log("warn",e,r,...n)}error(e,r,...n){this.log("error",e,r,...n)}bindings(){return this.bindingAttributes}addBinding(e,r){this.bindingAttributes[e]=r}setMinLevel(e){typeof e=="number"?(this.minLevelValue=e,this.consoleLogger.level=Vw[e]):(this.minLevelValue=Ru[e],this.consoleLogger.level=e)}enableConsoleLogs(){this.disableConsoleLogs=!1}},hl=({app:t,hostname:e,disableConsoleLogs:r})=>(gl.has(t)||gl.set(t,new By({bindings:{app:t},hostname:e,disableConsoleLogs:r})),gl.get(t));async function c_(){await Promise.all([...gl.values()].map(t=>t.flush()))}import{hostname as TV}from"os";var J=hl({app:"cli",hostname:TV(),disableConsoleLogs:!0}).child({cliVersion:"2.45.3"});var AV=5;async function pm({getResults:t,checkDone:e,name:r,timeoutMs:n=18e5}){let o=Date.now(),i=0;for(;Date.now()-o<n;){let a;i>AV&&(A.error(`Failed to fetch ${r} status too many times.`),process.exit(1));try{a=await t(),i=0}catch(l){i++,J.warn({err:l},"Failed to fetch run status, retrying..."),A.warn({err:l},"Failed to fetch run status, retrying..."),await new Promise(u=>setTimeout(u,1500*i));continue}if(e(a))return a;let c=Math.max(1e4,Math.floor(n/100));await new Promise(l=>setTimeout(l,c))}A.error(`Timeout elapsed waiting for ${r} to complete (${Math.floor(n/1e3)}s).`),process.exit(1)}function fl({results:t,startTime:e,entity:r,getDisplayLine:n,onFailed:o}){let i=t.filter(u=>u.status==="PASSED"&&u.quarantined),a=t.filter(u=>u.status==="PASSED"&&!u.quarantined),s=t.filter(u=>u.status==="FAILED"&&u.quarantined),c=t.filter(u=>u.status==="FAILED"&&!u.quarantined),l=t.filter(u=>u.status==="CANCELLED");return o_(()=>{if(c.forEach(u=>{A.log(""),o(u)}),c.length){A.log("");let u=c.length===1?"":"s";A.error(`${c.length} ${r}${u} failed:`),c.forEach(d=>{A.dimmed(n(d))})}if(l.length){A.log("");let u=l.length===1?"":"s";A.warn(`${l.length} ${r}${u} cancelled:`),l.forEach(d=>{A.dimmed(n(d))})}if(a.length){A.log("");let u=a.length===1?"":"s";A.success(`${a.length} ${r}${u} passed:`),a.forEach(d=>{A.dimmed(n(d))})}if(s.length){A.log("");let u=s.length===1?"":"s";A.warn(`${s.length} quarantined ${r}${u} failed:`),s.forEach(d=>{A.dimmed(n(d))})}if(i.length){A.log("");let u=i.length===1?"":"s";A.warn(`${i.length} quarantined ${r}${u} passed:`),i.forEach(d=>{A.dimmed(n(d))})}A.log(""),A.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 mm=(t,e)=>{if(!t.failureDetails||!t.failureReason)return;let r=hp[t.failureDetails?.classification?.reason||t.failureReason],n=t.failureDetails?.classification?.summary||js[t.failureReason],o=t.failureDetails.classification?.rootCause;if(A.error(e),o){A.log(`${It}- Error type: ${To.dim(r)}`);let i="- Root cause analysis:",a=i_(`${i} ${o}`,`${It} `,!1),s=a.indexOf(":");A.log(`${It}${i} ${To.dim(a.slice(s+1))}`)}else A.log(`${It}Reason: ${To.red(r)}`),A.log(`${It}Description: ${To.red(n)}`)},_u=({status:t,testLogRef:e,getRunningTestsCount:r,getTotalTestsCount:n,additionalText:o})=>{t=t.toUpperCase();let i=t,a;t.includes("FAIL")?(i=To.bgRed.white("FAIL"),a=3):t.includes("PASS")?(i=To.bgGreen.white("PASS"),a=3):t.includes("START")?(i=To.bgBlue.white("START"),a=2):t.includes("CANCEL")?(i=To.bgRgb(191,68,11).white("CANCEL"),a=1):t.includes("RETRY")?(i=To.bgRgb(191,68,11).white("RETRY"),a=2):t.includes("RUN")||t.includes("PROG")?(i=To.bgMagenta.white("RUNNING"),a=0):(A.warn(`Unknown status tried to be logged in run test locally: ${t}`),a=0),vV||(i=`${i}`),A.log(`${i}${" ".repeat(a)} ${e} ${o?`${o} `:""}(${r()}/${n()})`)};import RV from"fs";import{platform as CV,tmpdir as wV}from"os";import xV from"path";import{program as _V}from"playwright-core/lib/cli/program";import{registry as Iu}from"playwright-core/lib/server";import u_ from"proper-lockfile";var d_=xV.join(wV(),"momenticBrowserInstallation");var zy=["chrome","chromium","chrome-for-testing","ffmpeg"],IV={Chromium:"chromium","Google Chrome":"chrome","Chrome for Testing":"chrome-for-testing"},p_={chrome:"chrome",chromium:"chromium","chrome-for-testing":"chromium-headless-shell",ffmpeg:"ffmpeg"};function m_(t){if(t==="Org Default")return!1;let e=p_[IV[t]??""]??"",r=Iu.findExecutable(e);return!r||r.installType==="none"?!1:Hy(r)}function Hy(t){let e=t.executablePath();return RV.existsSync(e)}function PV(t,e){let r=p_[t];if(!r)throw new Error(`Requested install of unknown browser type ${t}`);let n=Iu.findExecutable(r);if(!n||n.installType==="none")throw new Error(`Requested install of unknown browser type ${t}`);if(!(!e&&Hy(n)))return n}async function MV({browser:t,force:e}){let r=PV(t,e);if(!r){A.info(`Browser '${t}' is already installed, skipping...`);return}A.info(`Installing browser '${t}'...`);try{await Iu.installDeps([r],!1),await Iu.install([r],!1)}catch(n){if(n.message.includes("Lock file is already being held")){A.warn("Another process is installing Playwright browsers. Waiting for completion before proceeding..");let o=Iu.findExecutable(t),i=5*60*1e3,a=Date.now();for(;Date.now()-a<i&&!Hy(o);)A.info("Waiting for browser to finish installing..."),await new Promise(s=>setTimeout(s,5e3))}else throw n}}async function OV(){if(CV()==="win32"){A.info("Installing Windows dependencies for Playwright...");try{await _V.parseAsync(["","","install","winldd"])}catch(t){A.warn(`Failed to install Windows dependencies: ${t}. Continuing with browser installation...`)}}}async function g_({rawBrowsers:t,force:e=!1,all:r=!1}){await OV();let n=r?zy:Array.from(new Set(t));try{await u_.lock(d_,{stale:1e3*60*5,update:1e3*60,realpath:!1,retries:{retries:30,factor:2,maxTimeout:15e3,minTimeout:500}})}catch(i){A.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 MV({browser:i,force:e})}catch(a){o=a,A.error(`Failed to install the ${i} browser: ${a}`)}}finally{await u_.unlock(d_,{realpath:!1})}if(o)throw o}import{createServer as LV}from"http";async function h_(t,e,r=30){for(let n=0;n<r;n+=1){let o=t+n;if(await NV(o))return o}A.error(`Could not find an available port for ${e} starting from ${t} after ${r} attempts`),process.exit(1)}async function NV(t){return new Promise((e,r)=>{let n=LV();n.once("error",o=>{o.code==="EADDRINUSE"?e(!1):(A.warn({err:o},"Unexpected error checking for open ports, continuing..."),n.close(),e(!0))}),n.once("listening",()=>{n.close(()=>{e(!0)})}),n.listen(t)})}import DV from"blocked-at";import kV from"why-is-node-running";function f_(t){UV(t),FV()}function UV(t){DV((e,r)=>{console.warn(`Detected the NodeJS event loop was blocked for ${e.toFixed(0)}ms. This can cause the CLI to hang.`);let n=r.join(`
32
32
  `);console.warn(n),t.warn({stack:n,time:e},"NodeJS event loop blocked")},{threshold:1e3,trimFalsePositives:!0})}function FV(){process.on("SIGINT",()=>{if("_getActiveHandles"in process){let t=process._getActiveHandles();console.log("Active handles:",t.map(e=>e.constructor?.name))}kV(),setImmediate(()=>{setTimeout(()=>{process.exit(1)},2e3).unref()})})}function S_(t){let e=t?.shardIndex??1,r=t?.shardCount??1;if(e<1)throw new Error("Shard index must be greater than 0.");if(r<1)throw new Error("Shard count must be greater than 0.");if(e>r)throw new Error("Shard index cannot be greater than shard count")}function BV(t,e,r,n){if(r>t.length&&(A.warn(`Shard count ${r} is greater than the number of tests ${t.length}! Some workers won't have any tests to run.`),r=Math.max(r,t.length),e>r))return[];let o=Math.floor((e-1)*(t.length/r)),i=Math.floor(e*(t.length/r));return(n?[...t].sort((s,c)=>n(s).localeCompare(n(c))):[...t].sort()).filter((s,c)=>c>=o&&c<i)}function y_(t){let{items:e,shardIndex:r,shardCount:n,sortKey:o}=t;return n>1?BV(e,r,n,o):e}function jy({regenerateCache:t,saveCache:e,disableCache:r}){if(r){if(t)throw new Error("--disable-cache and --regenerate-cache cannot be used together.");if(e)throw new Error("--disable-cache and --save-cache cannot be used together.")}}function Gy(t,e,r){return t instanceof Ra?(t.zodIssues.forEach(n=>{r.push({file:e,stepIndex:typeof n.path[0]=="number"?n.path[0]:void 0,field:n.path.slice(1).join(".")||n.path.join("."),issue:n.message})}),!0):!1}function Sl({parsingErrors:t,parsingErrorDetails:e,failedTestFilePaths:r,failedModuleFilePaths:n}){if(A.error(`
33
33
  Found ${t} file(s) with validation errors that must be fixed manually:
34
34
  `),e.length>0){let o=new Map;e.forEach(i=>{let a=o.get(i.file)||[];a.push(i),o.set(i.file,a)}),o.forEach((i,a)=>{A.error(` ${a}`),i.forEach(({stepIndex:s,field:c,issue:l})=>{let u=s!==void 0?`Step ${s}`:"File",d=c?`, field "${c}"`:"";A.error(` ${u}${d}:`),A.error(` \u2192 ${l}`)})})}else r.size>0&&A.error(`Failed test files:
@@ -56,15 +56,15 @@ ${o}`:o)(Qy(t))}function g$(t,{unflattenedIndex:e,parentStep:r}){if(!(e===void 0
56
56
  ${n}`}function C$(t){let e=R$(t);return Mn({steps:e,earlyStop:!1,onPresetAction:(r,n)=>{let o=r;o.parentStepIdChain=n.parentChain.map(s=>s.id),nb(r);let i;if(up(r.command)&&r.command.cache!==void 0){let s=x$(r.command.cache);s&&"target"in s&&(i=s.target)}let a=r.command;return i!==void 0?a.cache=i:delete a.cache,a.thoughts&&delete a.thoughts,delete a.id,"index"in r&&delete r.index,!1},onConditional:(r,n)=>{let o=r;return o.parentStepIdChain=n.parentChain.map(i=>i.id),nb(r),!1},onSimpleStepContainer:(r,n)=>{let o=n.parentChain.map(a=>a.id);if(r.type==="AI_ACTION"){let a=r,s=r.text,c=r.id;return Object.keys(a).forEach(l=>{delete a[l]}),a.type="AI_ACTION_DYNAMIC",a.text=s,a.id=c,a.parentStepIdChain=o,!1}let i=r;if(i.parentStepIdChain=o,nb(r),r.type==="RESOLVED_MODULE"){let a=r;delete a.cacheConfig,delete a.enabled,delete a.defaultCacheKey,delete a.defaultCacheTtl,delete a.defaultCacheAllInvocations,delete a.autoAuth,delete a.advanced}return!1}}),e}function nb(t){let e=t;delete e.aiSuggested,delete e.retries,delete e.skipped}function w$(t){return t.selector?t.selector:t.generatedSelectors?.[0]}function ob(t){let e=w$(t),r=t.nodeOnlySerializedHtml,n={};return e&&(n.selector=e),r&&(n.nodeOnlySerializedHtml=r),Object.keys(n).length?n:void 0}function x$(t){if(!t)return;let e={};if("target"in t)return{target:ob(t.target)};if("fromTarget"in t||"toTarget"in t){let r=t.fromTarget?ob(t.fromTarget):void 0,n=t.toTarget?ob(t.toTarget):void 0;return r&&(e.fromTarget=r),n&&(e.toTarget=n),Object.keys(e).length?e:void 0}}import _l from"yaml";import{z as DI}from"zod";import{execSync as _$}from"child_process";function oi(t,e){let r=e.hooks?.postSave;if(!r)return;let n;r.includes("$1")?n=r.replaceAll("$1",t):n=`${r} ${t}`,A.debug({postSaveCommand:n},"Executing post-save hook command");try{_$(n,{encoding:"utf-8"})}catch(o){A.warn({err:o,postSaveCommand:n},"Failed to execute post-save hook command, continuing...")}}import{diff as LI}from"deep-object-diff";import vo from"fs";import{cloneDeep as I$}from"lodash-es";import Bu from"path";import{v4 as P$}from"uuid";import zu from"yaml";function On({content:t,schemaVersion:e,momenticFiles:r,project:n,forceSaveOnNoDiffs:o}){let i=r.modules[t.moduleId]?.fullFilePath;if(!i||!vo.existsSync(i))throw new Error(`Tried to update module ${t.moduleId} that could not be found on disk`);let a=vo.readFileSync(i,"utf-8"),s=zu.parse(a),c;if(t.name&&t.name!==s.name){let m=`${at(t.name)}.module.yaml`;if(c=Bu.join(Bu.dirname(i),m),vo.existsSync(c))throw new Error(`A conflicting file '${t.name}' already exists at path '${c}'`)}let l={...t,schemaVersion:e},u=Zn({fileType:De.MODULE,...Ay.parse(l),steps:Et.array().parse(t.steps)}),d=LI(u,s);if(d&&Object.keys(d).length===0&&!o){A.debug(`Skipping save for module ${t.moduleId} since there are no changes`);return}let p=zu.stringify(u);vo.writeFileSync(i,p,"utf-8"),c&&vo.renameSync(i,c),oi(c||i,n.config)}function NI({moduleId:t,content:e,momenticFiles:r,project:n,logger:o}){let i=r.modules[t]?.fullFilePath;if(!i)throw new Error(`Tried to update module ${t} that could not be found on disk`);let a=ii(i,o),s={...a,...e},c=Zn({fileType:De.MODULE,...Ay.parse(s),steps:a.steps}),l=LI(c,a);if(l&&Object.keys(l).length===0){A.debug(`Skipping save for module ${t} since there are no changes`);return}let u=zu.stringify(c);vo.writeFileSync(i,u,"utf-8");let d;if(e.name){let p=`${at(e.name)}.module.yaml`;if(d=Bu.join(Bu.dirname(i),p),vo.existsSync(d))throw new Error(`Module with name '${e.name}' already exists at path '${d}'`);vo.renameSync(i,d)}oi(d||i,n.config)}async function Dm({name:t,description:e,enabled:r,steps:n,folder:o,project:i}){let a=at(t),s=Bu.join(o,`${a}.module.yaml`),c=P$(),{stepsToSave:l}=await Pt({stepLists:{steps:n}}),u={fileType:De.MODULE,schemaVersion:Ze,moduleId:c,name:t,description:e,enabled:r,steps:l.steps},d=zu.stringify(u);return vo.writeFileSync(s,d,"utf-8"),oi(s,i.config),{moduleId:c,name:t,description:e,enabled:r,steps:n}}function ii(t,e){let r=vo.readFileSync(t,"utf-8"),n=zu.parse(r);try{return ay.parse(n)}catch(o){throw e.error({err:o,moduleFilePath:t,moduleContents:r},`${t} does not parse as a valid Momentic module`),o}}async function Qn(t,e,r,n){let o=ii(t.fullFilePath,r),{resolvedSteps:i}=await _m({rawSteps:o.steps,migrationMetadata:{id:o.moduleId,schemaVersion:o.schemaVersion},resolvedModuleCache:n,logger:r,callbacks:{onFetchModule:async({id:s})=>{let c=e.modules[s]?.fullFilePath;if(c)return ii(c,r)}}}),a={...o,steps:i};return n&&(n[t.id]=I$(a)),a}async function km(t,e){let r={};return await Promise.all(Object.values(t.modules).map(async n=>{await Qn(n,t,e,r)})),Array.from(Object.values(r))}async function kI({test:t,name:e,folder:r}){let n=await xI({test:t});if(Object.keys(n.modules).length)throw new Error("A brand new test should not contain any modules in it");let i=`${at(e)}.test.yaml`,a=Ka.join(r,i);return eo.writeFileSync(a,n.test,"utf-8"),a}function ib(t,e,r){let n=Ka.join(r.rootDir,t);if(!eo.existsSync(n))throw new Error(`Test not found at path '${t}' in project '${r.rootDir}'`);let o=eo.readFileSync(n,"utf-8"),i=_l.parse(o),a,s;if(e.name&&e.name!==i.name){let p=`${at(e.name)}.test.yaml`;if(a=Ka.join(Ka.dirname(t),p),s=Ka.join(r.rootDir,a),eo.existsSync(s))throw new Error(`Test with name '${e.name}' already exists at path '${s}'`)}let c={...i,...e},l=_n.parse(c),u=Zn({fileType:De.TEST,..._n.parse(l),beforeSteps:i.beforeSteps??void 0,steps:i.steps,afterSteps:i.afterSteps??void 0,retries:l.retries??void 0}),d=_l.stringify(u);return eo.writeFileSync(n,d,"utf-8"),s&&eo.renameSync(n,s),oi(n,r.config),{newRelativeTestPath:a}}function cn({relativeTestPath:t,steps:e,schemaVersion:r,project:n,forceSaveOnNoDiffs:o}){let i=Ka.join(n.rootDir,t);if(!eo.existsSync(i))throw new Error(`Test not found at path '${t}' in project '${n.rootDir}'`);let a=eo.readFileSync(i,"utf-8"),s=_l.parse(a),c=_n.parse({...s,schemaVersion:r}),l=Et.array().or(DI.undefined()).parse(e.beforeSteps),u=Et.array().parse(e.steps),d=Et.array().or(DI.undefined()).parse(e.afterSteps),p=Zn({fileType:De.TEST,...c,beforeSteps:l&&l.length>0?l:void 0,steps:u,afterSteps:d&&d.length>0?d:void 0}),m=M$(p,s);if(m&&Object.keys(m).length===0&&!o){A.debug(`Skipping save for test ${c.name} since there are no changes`);return}let h=_l.stringify(p);eo.writeFileSync(i,h,"utf-8"),A.debug(`Saving test ${c.name} to ${i}`),oi(i,n.config)}function Hu(t,e){let r=Ka.join(e.rootDir,t);if(!r)throw new Error(`Could not find test with path ${t} in Momentic project (${e.rootDir})`);let n;try{n=eo.readFileSync(r,"utf8"),n=n.replace(/\r\n|\r/g,`
57
57
  `)}catch(i){throw new Error(`Could not read test file ${r}: ${i}`)}let o;try{o=_l.parse(n)}catch(i){throw new Error(`Could not parse test file ${r} as YAML: ${i}`)}return Cr.parse(o)}function Ya(t,e,r){let n=r.project.rootDir,o;try{o=eo.readFileSync(t,"utf-8")}catch(a){throw e.error({err:a,projectRoot:n},a.message),new Error(a.message)}let i=_l.parse(o);if(!i.steps||!Array.isArray(i.steps))throw new Error(`Test ${t} is missing steps`);return i}async function ft(t,e,r){let n=Ya(t,e,r),o;try{o=_n.parse(n)}catch(a){throw new Error(`Test ${t} is missing metadata or has invalid metadata: ${a}`)}let{resolvedTest:i}=await CI({rawSteps:{steps:n.steps,beforeSteps:n.beforeSteps,afterSteps:n.afterSteps},metadata:o,logger:e,callbacks:{onFetchModule:async({id:a,logger:s})=>{let c=r.modules[a]?.fullFilePath;if(c)return ii(c,s)}}});return i}import O$ from"@dotenvx/dotenvx";import L$ from"fs";import UI from"path";function Um(t,e){return(t.config.environments??[]).map(r=>Xa(r.name,t,e))}function FI(t){return t.includes("${")?t.replace(/\$\{([^}]+)\}/g,(e,r)=>{let n=r.match(/^([A-Za-z_][A-Za-z0-9_]*)(?:(:-|-)([\s\S]*))?$/);if(!n)return process.env[r]||"";let o=n[1];if(!o)return"";let i=n[2],a=n[3],s=process.env[o];return i===":-"?s&&s!==""?s:a||"":i==="-"?s!==void 0?s:a||"":s||""}):t}function N$(t){let{envVariables:e,project:r}=t;if(!e)return{};let n={};for(let[o,i]of Object.entries(e)){if(typeof i=="string"){let s=FI(i);s&&(n[o]=s);continue}let a;try{a=L$.readFileSync(UI.resolve(r.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&&A.debug(n,"Set environment variables with interpolation from project configuration"),n}function D$(t){let{project:e,envFile:r,logger:n}=t,o={};if(!r)return o;let i=O$.config({path:UI.resolve(e.rootDir,r),processEnv:o,logLevel:"error",quiet:!0});if(i.error)throw new Error(`Failed to load .env file: ${i.error.message}`);return n.debug("Set environment variables from .env file"),o}function Xa(t,e,r){let n=(e.config.environments??[]).find(c=>c.name===t);if(!n)throw new Error(`Environment ${t} not found in local project configuration file`);if(!n.baseUrl)throw new Error(`Browser environment ${t} does not have a baseUrl configured`);let o={[nr]:FI(n.baseUrl)},i=N$({envVariables:n.envVariables,project:e});Object.assign(o,i);let a=D$({project:e,envFile:n.envFile,logger:r});return Object.assign(o,a),n.inheritFromShell&&(r.debug(process.env,"Inheriting environment variables from shell"),Object.assign(o,process.env)),{name:t,variables:o,browser:n.browser}}import{existsSync as U$,readFileSync as F$,readdirSync as B$,writeFileSync as z$}from"fs";import{glob as H$}from"glob";import Ja,{dirname as BI}from"path";import{cwd as sb}from"process";import zI from"yaml";import{z as gt}from"zod";import k$ from"zod";var Fm=["**/*.test.yaml","**/*.module.yaml"],ab=k$.string().refine(t=>/^[a-zA-Z0-9-]+$/.test(t)),Bm=15;var Il="momentic.config.yaml",lb="momentic.workspace.yaml",j$=gt.object({projects:gt.string().array().describe("list of glob patterns to find project (momentic.config.yaml) files")}),G$=gt.union([gt.string(),gt.object({fromFile:gt.string(),json:gt.boolean().optional()})]),V$=gt.object({name:ab,baseUrl:gt.string().optional().describe("Optional for mobile tests"),envFile:gt.string().optional().describe("path to a file on disk to read environment variables from. can be relative to project root or absolute."),envVariables:gt.record(gt.string(),G$).optional(),inheritFromShell:gt.boolean().optional().describe("inherit all environment variables from the shell - might be noisy"),browser:Oa.optional().describe("NB: most things should use project-level configuration only")}),$$=gt.object({postSave:gt.string().optional()}),W$=gt.object({name:ab,include:gt.string().array().optional().describe("list of glob patterns that match momentic files (optional)"),exclude:gt.string().array().optional().describe("opposite of include, takes precedence over include"),goldenFileDir:gt.string().optional(),reporterDir:gt.string().optional(),outputDir:gt.string().optional(),recordVideo:gt.boolean().optional(),retries:gt.number().optional().describe("number of retries per test"),parallel:gt.number().optional().describe("degree of parallelism"),environments:gt.array(V$).optional(),gitMainBranch:gt.string().optional().readonly(),gitProtectedBranches:gt.string().array().optional().readonly(),ai:Xo.optional(),browser:Oa.optional(),emulator:dy.optional(),advanced:bS.optional(),displayRoot:gt.string().optional().describe("relative path from project root to use as the Repository root"),hooks:$$.optional()});function HI(t,e){let r;try{r=F$(t,"utf-8")}catch(o){A.warn(`Could not read possible Momentic ${e} file at ${t}: ${o}`);return}let n;try{if(n=zI.parse(r),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){A.warn(`Possible Momentic ${e} file at ${t} does not parse as valid YAML: ${o}`);return}return n}function cb(t){let e=HI(t,"project configuration");if(e!==void 0)try{return W$.parse(e)}catch(r){A.warn(`Possible Momentic project configuration file at ${t} does not adhere to the required schema: ${r}`);return}}function q$(t){let e=HI(t,"workspace configuration");if(e!==void 0)try{return j$.parse(e)}catch(r){A.warn(`Possible Momentic workspace configuration file at ${t} does not adhere to the required schema: ${r}`);return}}function K$(){let t=[],e=sb(),r=Ja.parse(e).root,n=15,o=0;for(;o<n;){o++;let i=Ja.basename(e);if(rm.includes(i))return A.warn(`Stopping search for Momentic projects since the current directory name (${i}) is likely a system artifact folder.`),t;for(let a of B$(e))if(a.endsWith(Il)){let s=Ja.join(e,a),c=cb(s);c&&t.push({configFilePath:s,config:c,rootDir:BI(s)})}if(t.length)return t;if(e=Ja.dirname(e),e===r)break}return t}async function Dt(t={}){let{configFilePath:e,nameFilter:r}=t,n=await ub(e);if(r&&(n=n.filter(o=>o.config.name===r)),n.length>1)throw new Error(`Multiple valid projects were found in the same directory. Please use the '-c / --config' flag to disambiguate:
58
58
  ${n.map(o=>o.configFilePath)}`);if(n.length===0)throw new Error("No valid Momentic project file available.");return A.debug(`Found valid project configuration at ${n[0].configFilePath}`),n[0]}async function Y$(t){let e=q$(t);if(!e||!e.projects||!e.projects.length)return;let r=e.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${Il}`)),n=AbortSignal.timeout(2e3),o;try{o=await H$(r,{absolute:!1,cwd:sb(),dotRelative:!1,maxDepth:Bm,nodir:!0,signal:n})}catch(a){throw A.error({err:a},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${lb} is misconfigured.`),a}let i=[];for(let a of o){let s=Ja.join(sb(),a),c=cb(s);c&&i.push({configFilePath:s,config:c,rootDir:BI(s)})}return i}async function ub(t){if(t){t=Ja.resolve(t);let r=cb(t);return r||(console.error(`No valid Momentic project file found at ${t}.`),process.exit(1)),[{config:r,configFilePath:t,rootDir:Ja.dirname(t)}]}if(U$(lb)){let r=await Y$(lb);if(r)return r}return K$()}function ji(t,e){let r=zI.stringify(t);z$(e,r)}import GI from"fs";import{glob as X$}from"glob";import ju from"path";import J$ from"yaml";import{z as jI}from"zod";var VI=!1,Z$=jI.object({fileType:jI.nativeEnum(De)});async function le(t,e=!1){let r={project:t,tests:{},modules:{},mobileTests:{},mobileModules:{},duplicateEntities:{}},n=t.config.include??Fm,o=Array.from(t.config.exclude??[]).concat(nm),i=AbortSignal.timeout(5e3),a;try{a=await X$(n,{absolute:!1,cwd:t.rootDir,ignore:o,dotRelative:!1,maxDepth:Bm,nodir:!0,signal:i})}catch(s){throw A.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=Q$(t.rootDir,s,r,e?Eo:A);c&&(r.duplicateEntities[c.id]=c.paths)}return VI=!0,r}function Q$(t,e,r,n){let o=ju.join(t,e),i=eW(o,n);if(!i)return;let a=tW(i,o,n);if(!a)return;let s=Z$.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=rW(o,n);if(!l)return;let u=nW(e,o,l);switch(c){case De.TEST:try{return oW(a,r,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic test metadata: ${d}`);return}case De.MODULE:try{return iW(a,r,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic module metadata: ${d}`);return}case De.MOBILE_TEST:try{return sW(a,r,u,o,n)}catch(d){n.warn(`Skipping file '${o}' because it is missing Momentic mobile test metadata: ${d}`);return}case De.MOBILE_MODULE:try{return aW(a,r,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 eW(t,e){try{return GI.readFileSync(t,"utf-8")}catch(r){e.warn(`Could not read possible Momentic file at ${t}, skipping: ${r}`);return}}function tW(t,e,r){try{let n=J$.parse(t);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){r.warn(`Could not parse possible Momentic file at ${e}, skipping: ${n}`);return}}function rW(t,e){try{return GI.statSync(t)}catch(r){e.warn(`Skipping path '${t}' because it could not be stat, skipping: ${r}`);return}}function nW(t,e,r){return{relativePath:t,fullFilePath:e,platformSep:ju.sep,fullPathSegments:e.split(ju.sep),relativePathSegments:t.split(ju.sep),fileName:ju.basename(e),lastModified:r.mtime,createdAt:r.birthtime}}function oW(t,e,r,n,o){let i=_n.parse(t),a;if(e.tests[i.id]){let s=e.tests[i.id].fullFilePath;a={id:i.id,paths:[s,n]}}return e.tests[i.id]={type:De.TEST,name:i.name,id:i.id,description:i.description??void 0,labels:i.labels,...r},a}function iW(t,e,r,n,o){let i=Jr.parse(t),a;if(e.modules[i.moduleId]){let c=e.modules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}e.modules[i.moduleId]={type:De.MODULE,name:i.name,id:i.moduleId,description:i.description??void 0,...r};let s=r.fileName.replace(".module.yaml","");return!VI&&at(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 aW(t,e,r,n,o){let i=Qp.parse(t),a;if(e.mobileModules[i.moduleId]){let c=e.mobileModules[i.moduleId].fullFilePath;a={id:i.moduleId,paths:[c,n]}}let s=r.fileName.replace(".module.yaml","");return e.mobileModules[i.moduleId]={type:De.MOBILE_MODULE,name:s,id:i.moduleId,description:i.description??void 0,...r},a}function sW(t,e,r,n,o){let i=py.parse(t),a;if(e.mobileTests[i.id]){let c=e.mobileTests[i.id].fullFilePath;a={id:i.id,paths:[c,n]}}let s=r.fileName.replace(".test.yaml","");return e.mobileTests[i.id]={type:De.MOBILE_TEST,name:s,id:i.id,description:i.description??void 0,labels:i.labels,...r},a}import Pl from"fs";import db from"path";import{z as pb}from"zod";var $I="golden/visual-diff",WI="reports",qI="test-results";var lW=pb.object({width:pb.number(),height:pb.number()}),Ml=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(e,r,n){let o=db.join(e.rootDir,e.config.goldenFileDir??$I);this.defaultGoldenScreenshotDir=o,this.regenerateGoldenFiles=n,this.apiClient=r}async prepareGoldenScreenshotForComparison(e,r,n){if(RA(r.screenshot?.data))return{buffer:(await this.apiClient.fetchOnDemandScreenshot(r.screenshot.data.id)).data,width:r.screenshot.width,height:r.screenshot.height};if(r.screenshot?.data?.startsWith("https://")){let a=await fetch(r.screenshot.data);return{buffer:Buffer.from(await a.arrayBuffer()),width:r.screenshot.width,height:r.screenshot.height}}let o=r.screenshot?.data;o||(o=db.join(this.defaultGoldenScreenshotDir,`${r.id}.jpg`));let i=`${o}.metadata.json`;if(this.regenerateGoldenFiles)return Pl.mkdirSync(db.dirname(o),{recursive:!0}),Pl.writeFileSync(o,n.buffer),Pl.writeFileSync(i,JSON.stringify({width:n.width,height:n.height})),{buffer:Buffer.from(n.buffer),width:n.width,height:n.height};if(Pl.existsSync(o)){let a=Pl.readFileSync(o),s=lW.parse(JSON.parse(Pl.readFileSync(i,"utf-8")));return{buffer:a,width:s.width,height:s.height}}else throw new M("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${o}`)}};import{execFile as cW}from"node:child_process";import{promisify as uW}from"node:util";import dW from"simple-git";var St=dW(),KI=uW(cW);function ai(t){if(t)try{let e=new Date(t);return isNaN(e.getTime())?void 0:e}catch{return}}async function pW(t){let e=await vt(t,St.raw(["config","--list"])),r={};if(!e)return r;for(let n of e.split(`
59
- `)){let o=n.indexOf("=");if(o===-1)continue;let i=n.slice(0,o),a=n.slice(o+1).trim();r[i]=a}return r}async function mW(t,e,r){try{let o=r["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 KI("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 KI("gh",o,{timeout:5e3}),a=i?.toString().trim();if(a)return a}catch{}}}async function gW(t,e,r){let n=e?.includes("github.com"),o=e?.includes("gitlab.com");try{if(n)return mW(t,e,r);if(o)return}catch{}}function zm(t){if(t.startsWith("git@")){let e=t.split(":");if(e.length===2){let r=e[1].replace(".git","").split("/");if(r.length===2){let n=r[0],o=r[1];return`${n}/${o}`}}}else if(t.startsWith("http")||t.startsWith("https")){let r=new URL(t).pathname.split("/").filter(Boolean);if(r.length>=2){let n=r[0],o=r[1].replace(".git","");return`${n}/${o}`}}}async function vt(t,e){try{return(await e).trim()}catch(r){if(r instanceof Error&&r.message.includes("not a git repository"))return;t.error({err:r},"Failed to run git command");return}}function hW(){if(process.env.GITHUB_ACTION)return"GithubActions";if(process.env.GITLAB_CI)return"GitlabCI";if(process.env.CIRCLECI)return"CircleCI";if(process.env.BUILDKITE)return"Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return"AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return"GCPCloudBuild";if(process.env.MOMENTIC_GIT_OVERRIDE)return"Custom"}async function fW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return{ciProvider:"GithubActions",gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:o,gitCommitMessage:r,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function SW(t){let[e,r,n]=await Promise.all([vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]);return{ciProvider:"GitlabCI",gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?ai(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:e,gitCommitMessage:r,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function yW(t){let[e,r,n,o]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),i=process.env.CIRCLE_REPOSITORY_URL??r,a=i?.includes("github.com"),s=i?.includes("gitlab.com"),c=i?zm(i):void 0;return{ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:i,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:a?c:void 0,gitlabProjectPath:s?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function bW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env.BUILDKITE_REPO,i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?zm(o):void 0;return{ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:o,gitCommitMessage:r,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 EW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env["Build.Repository.Uri"],i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?zm(o):void 0;return{ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env["System.PullRequest.SourceBranch"]??process.env["Build.SourceBranchName"],gitOriginUrl:o,gitCommitMessage:r,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function TW(t,e){let[r,n,o,i,a,s,c,l,u]=await Promise.all([vt(t,St.revparse(["HEAD"])),vt(t,St.revparse(["--short","HEAD"])),vt(t,St.revparse(["--abbrev-ref","HEAD"])),vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"])),e?vt(t,St.raw(["merge-base","--fork-point",e])):Promise.resolve(void 0),pW(t)]),d=l?await vt(t,St.show(["--no-patch","--format=%ci",l])):void 0,p=i?.includes("github.com"),m=i?.includes("gitlab.com"),h=i?zm(i):void 0,g=u["user.email"]||void 0,f=u["user.name"]||void 0,S=u["user.username"]||void 0,b=await gW(t,i,u)??S??void 0;return{ciProvider:"none",gitCommitSha:r,gitCommitShaShort:n,gitBranchName:o,gitOriginUrl:i,gitCommitTimestamp:a?ai(a):void 0,gitCommitMessage:s,gitCommitAuthorName:c,gitLocalUsername:b,gitLocalEmail:g,gitLocalName:f,lastCommitOnMainSha:l,lastCommitOnMainTimestamp:d?ai(d):void 0,githubRepository:p?h:void 0,gitlabProjectPath:m?h:void 0,pipelineId:void 0}}async function vW(){let t=process.env._HEAD_REPO_URL;return{ciProvider:"GCPCloudBuild",gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:t?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:t?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}function AW(){return{ciProvider:"Custom",gitCommitSha:process.env.GIT_COMMIT_SHA,gitCommitShaShort:process.env.GIT_COMMIT_SHA_SHORT??process.env.GIT_COMMIT_SHA?.slice(0,6),gitCommitTimestamp:ai(process.env.GIT_COMMIT_TIMESTAMP),gitBranchName:process.env.GIT_BRANCH_NAME,gitOriginUrl:process.env.GIT_ORIGIN_URL,gitCommitAuthorName:process.env.GIT_COMMIT_AUTHOR_NAME,gitCommitMessage:process.env.GIT_COMMIT_MESSAGE,lastCommitOnMainSha:process.env.LAST_COMMIT_ON_MAIN_SHA,lastCommitOnMainTimestamp:ai(process.env.LAST_COMMIT_ON_MAIN_TIMESTAMP),mergedGitBranchName:process.env.MERGED_GIT_BRANCH_NAME,githubRepository:process.env.GITHUB_REPOSITORY,gitlabProjectPath:process.env.GITLAB_PROJECT_PATH,gitLocalUsername:process.env.GIT_USERNAME,gitLocalEmail:process.env.GIT_EMAIL,gitLocalName:process.env.GIT_NAME}}async function RW(t){let e=[...t.config.gitProtectedBranches??[]];return t.config.gitMainBranch&&e.push(t.config.gitMainBranch),{gitMainBranch:t.config.gitMainBranch,gitProtectedBranches:e}}async function si(t,e){let r=hW();if(!r)return TW(t,e);switch(r){case"GithubActions":return fW(t);case"GitlabCI":return SW(t);case"CircleCI":return yW(t);case"Buildkite":return bW(t);case"AzureDevOps":return EW(t);case"GCPCloudBuild":return vW();case"Custom":return AW()}}async function CW(t,e,r,n){let o=n;if(!n.gitCommitSha)return o;if(n.gitMainBranch&&(!o.lastCommitOnMainSha||!o.lastCommitOnMainTimestamp))try{let i=await e.getMergeBaseCommitFromGitlab(r,n.gitMainBranch,n.gitCommitSha);o={...o,lastCommitOnMainSha:i.sha,lastCommitOnMainTimestamp:i.committer.date}}catch(i){t.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(r,n.gitCommitSha);i&&(o={...o,gitCommitTimestamp:o.gitCommitTimestamp??i.committer.date,gitCommitAuthorName:o.gitCommitAuthorName??i.author.name,gitCommitMessage:o.gitCommitMessage??i.message})}catch(i){t.warn({err:i},"Failed to get commit from Gitlab")}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!o.mergedGitBranchName)try{let i=await e.getMergedBranchFromGitlab(r,n.gitBranchName??"",n.gitCommitSha);i.mergedBranch&&(o={...o,mergedGitBranchName:i.mergedBranch})}catch(i){t.warn({err:i},"Failed to get merged branch from Gitlab")}return o}async function wW(t,e,r,n,o){let i=o;if(!o.gitCommitSha)return i;if(o.gitMainBranch&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let a=await e.getMergeBaseCommitFromGithub(r,n,o.gitMainBranch,o.gitCommitSha);i={...i,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date}}catch(a){t.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(r,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){t.warn({err:a},"Failed to get commit from GitHub")}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName)try{let a=await e.getMergedBranchFromGithub(r,n,o.gitBranchName??"",o.gitCommitSha);a.mergedBranch&&(i={...i,mergedGitBranchName:a.mergedBranch})}catch(a){t.warn({err:a},"Failed to get merged branch from GitHub")}return i}async function xW(t,e,r){try{if(r.githubRepository){let[n,o]=r.githubRepository.split("/");return await wW(t,e,n,o,r)}else if(r.gitlabProjectPath)return await CW(t,e,r.gitlabProjectPath,r)}catch(n){t.warn({err:n},"Failed to get remote git metadata")}return r}async function _r(t,e,r){let n=await RW(r),o=await si(t,n.gitMainBranch),i={...n,...o};(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp)&&i.gitBranchName===n.gitMainBranch&&(i.lastCommitOnMainSha=i.gitCommitSha,i.lastCommitOnMainTimestamp=i.gitCommitTimestamp);let a=await xW(t,e,i);return{...n,...o,...a}}async function YI(){try{return!!(await St.show(["--no-patch","--format=%ci"])).trim()}catch{return null}}import{diff as dOe}from"deep-object-diff";import{cloneDeep as mOe}from"lodash-es";import{v4 as COe}from"uuid";import xOe from"yaml";import WOe from"yaml";import KOe from"zod";import{randomUUID as IW}from"crypto";import Gi from"fs";import Ol from"path";var XI=new Set([".DS_Store","__MACOSX"]),JI={status:(t,e)=>{if(t.status===e.status)return t.status;if(t.status==="FAILED"||e.status==="FAILED")return"FAILED";if(t.status==="CANCELLED"||e.status==="CANCELLED")return"CANCELLED";if(t.status==="RETRYING"||e.status==="RETRYING")return"RETRYING";if(t.status==="RUNNING"||e.status==="RUNNING")return"RUNNING";if(t.status==="PENDING"||e.status==="PENDING")return"PENDING";throw new Error(`Invalid run status merge: ${t.status} and ${e.status}`)},startedAt:(t,e)=>t.startedAt<e.startedAt?t.startedAt:e.startedAt,updatedAt:(t,e)=>t.updatedAt>e.updatedAt?t.updatedAt:e.updatedAt,finishedAt:(t,e)=>!t.finishedAt||!e.finishedAt?new Date:t.finishedAt>e.finishedAt?t.finishedAt:e.finishedAt,gitCommitTimestamp:(t,e)=>{if(!(!t&&!e)){if(!t.gitCommitTimestamp||!e.gitCommitTimestamp||t.gitCommitTimestamp.getTime()!==e.gitCommitTimestamp.getTime())throw new Error(`Git commit timestamps must match to be merged: ${t.gitCommitTimestamp} and ${e.gitCommitTimestamp}`);return t.gitCommitTimestamp}},pipelineId:(t,e)=>t.pipelineId===e.pipelineId?t.pipelineId:!t.pipelineId&&e.pipelineId?e.pipelineId:!e.pipelineId&&t.pipelineId?t.pipelineId:t.startedAt<e.startedAt?e.pipelineId:t.pipelineId,labels:(t,e)=>{let r=new Set([...t.labels??[],...e.labels??[]]);return Array.from(r)}};function PW(t,e,r){if(JI[r]){let i=JI[r];return i(t,e)}let n=t[r],o=e[r];if(n!==o)throw new Error(`Metadata values for key "${r}" do not match: "${n}" vs "${o}"`);return n}var mb=class extends Error{constructor(e,r){let n=`${e} contains invalid Momentic results: ${r}. Please ensure that the path points to a folder containing only valid results. If you passed \`--output-dir test-results/results-1\` to the \`run\` command, your results path for merging should be \`test-results\`.`;super(n),this.name="InvalidMomenticResultsPathError"}};function ZI(t,e){try{let r=Ol.join(e,"metadata.json");return ml.parse(JSON.parse(Gi.readFileSync(r,"utf-8")))}catch{throw new mb(t,e)}}function QI(t,e,r){let n=IW(),o=t.child({runGroupId:n});Gi.rmSync(e,{recursive:!0,force:!0});let i=Gi.readdirSync(r).filter(c=>!XI.has(c)).map(c=>Ol.join(r,c));if(i.length===0)throw new Error(`No run groups found in results path: ${r}`);Gi.mkdirSync(e,{recursive:!0});let a={...ZI(r,i[0]),id:n};for(let c of i){let l=Ol.join(c,"runs");if(!Gi.existsSync(l))continue;let u=ZI(r,c);o.info({oldRunGroupId:u.id},"Merging run groups");for(let p in u){if(p==="id")continue;let m=p;a[m]=PW(a,u,m)}let d=Gi.readdirSync(l);for(let p of d){if(XI.has(p))continue;let m=Ol.join(l,p),h=Ol.join(e,"runs",p);Gi.cpSync(m,h,{recursive:!0})}}let s=Ol.join(e,"metadata.json");Gi.writeFileSync(s,JSON.stringify(a,null,2))}import UP from"adm-zip";import kb from"fs";import{z as SK}from"zod";var q="v1",gb="cli",Za="2.45.2";var MW=9e4,OW=3,LW=1500,NW=15e3,to=class extends Error{status;rawError;constructor(e,r,n,o={}){super(n,o),this.status=e,this.rawError=r}};async function DW(t){return t.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var hb=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Za&&(e[lm]=Za),gb&&(e[Yw]=gb),e}async sendRequest(e,r){let{retries:n=OW,requestTimeoutMs:o=MW,initialRetryDelayMs:i=LW,maxRetryDelayMs:a=NW,onFailedRequest:s}=r,c=n,l=n,u,d={path:e,baseUrl:this.baseUrl,method:r.method};for(;c>0;)try{return c--,await this.sendSingleRequestHelper(e,r,o)}catch(p){u=p;try{s?.(u)}catch{}if(p instanceof to&&p.status>=400&&p.status<500)throw p;if(p instanceof Error&&p.name==="AbortError"&&(u=new Bi),c===0)throw u;let m=l-c,h=Math.min(i*Math.pow(2,m-1),a);await new Promise(g=>setTimeout(g,h))}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(e,r,n){let o={path:e,baseUrl:this.baseUrl,method:r.method},i=new AbortController,a=setTimeout(()=>i.abort(),n),s=()=>i.abort();r.signal&&r.signal.addEventListener("abort",s,{once:!0});let c=Date.now(),l={...this.getHeaders(),...r.extraHeaders};try{let u=await fetch(`${this.baseUrl}${e}`,{method:r.method,body:r.body?JSON.stringify(r.body):void 0,headers:l,signal:i.signal});if(!u.ok){let m=await DW(u);throw new to(u.status,m,`Request to ${r.method} ${e} failed with status ${u.status}: ${m}`)}let d;if(u.status===204)d={};else if(r.responseType==="buffer"){let m=await u.arrayBuffer();d=Buffer.from(m)}else{let m=await u.text();try{d=JSON.parse(m)}catch{d=m}}this.logger&&r.logResponse===!0&&d&&this.logger.debug({result:d,status:u.status,durationMs:Date.now()-c,...o},"Got response from Momentic server");let p=r.responseHeadersObject;return p&&u.headers.forEach((m,h)=>{p[h.toLowerCase()]=m}),d}finally{clearTimeout(a),r.signal&&r.signal.removeEventListener("abort",s)}}},hr=class extends hb{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[Kw]:this.mode??""}}};import{createAnthropic as fK}from"@ai-sdk/anthropic";import{InvalidArgumentError as UW}from"@ai-sdk/provider";import{APICallError as bLe}from"@ai-sdk/provider";import{APICallError as BW}from"@ai-sdk/provider";import{LoadAPIKeyError as Gm}from"@ai-sdk/provider";import{LoadSettingError as ALe}from"@ai-sdk/provider";import{JSONParseError as qm,TypeValidationError as $W}from"@ai-sdk/provider";import{TypeValidationError as Eb}from"@ai-sdk/provider";import{TypeValidationError as YW}from"@ai-sdk/provider";var Hm=class extends Error{constructor(e,r){super(e),this.name="ParseError",this.type=r.type,this.field=r.field,this.value=r.value,this.line=r.line}};function fb(t){}function eP(t){if(typeof t=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:e=fb,onError:r=fb,onRetry:n=fb,onComment:o}=t,i="",a=!0,s,c="",l="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[S,b]=kW(`${i}${f}`);for(let y of S)d(y);i=b,a=!1}function d(g){if(g===""){m();return}if(g.startsWith(":")){o&&o(g.slice(g.startsWith(": ")?2:1));return}let f=g.indexOf(":");if(f!==-1){let S=g.slice(0,f),b=g[f+1]===" "?2:1,y=g.slice(f+b);p(S,y,g);return}p(g,"",g)}function p(g,f,S){switch(g){case"event":l=f;break;case"data":c=`${c}${f}
59
+ `)){let o=n.indexOf("=");if(o===-1)continue;let i=n.slice(0,o),a=n.slice(o+1).trim();r[i]=a}return r}async function mW(t,e,r){try{let o=r["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 KI("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 KI("gh",o,{timeout:5e3}),a=i?.toString().trim();if(a)return a}catch{}}}async function gW(t,e,r){let n=e?.includes("github.com"),o=e?.includes("gitlab.com");try{if(n)return mW(t,e,r);if(o)return}catch{}}function zm(t){if(t.startsWith("git@")){let e=t.split(":");if(e.length===2){let r=e[1].replace(".git","").split("/");if(r.length===2){let n=r[0],o=r[1];return`${n}/${o}`}}}else if(t.startsWith("http")||t.startsWith("https")){let r=new URL(t).pathname.split("/").filter(Boolean);if(r.length>=2){let n=r[0],o=r[1].replace(".git","");return`${n}/${o}`}}}async function vt(t,e){try{return(await e).trim()}catch(r){if(r instanceof Error&&r.message.includes("not a git repository"))return;t.error({err:r},"Failed to run git command");return}}function hW(){if(process.env.GITHUB_ACTION)return"GithubActions";if(process.env.GITLAB_CI)return"GitlabCI";if(process.env.CIRCLECI)return"CircleCI";if(process.env.BUILDKITE)return"Buildkite";if(process.env["System.CollectionUri"]?.includes("azure"))return"AzureDevOps";if(process.env.PROJECT_ID&&process.env.BUILD_ID)return"GCPCloudBuild";if(process.env.MOMENTIC_GIT_OVERRIDE)return"Custom"}async function fW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env.GITHUB_SERVER_URL&&process.env.GITHUB_REPOSITORY?`${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}`:void 0;return{ciProvider:"GithubActions",gitCommitSha:process.env.GITHUB_SHA,gitCommitShaShort:process.env.GITHUB_SHA?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:o,gitCommitMessage:r,gitCommitAuthorName:n,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID}}async function SW(t){let[e,r,n]=await Promise.all([vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]);return{ciProvider:"GitlabCI",gitCommitSha:process.env.CI_COMMIT_SHA,gitCommitShaShort:process.env.CI_COMMIT_SHORT_SHA,gitCommitTimestamp:process.env.CI_COMMIT_TIMESTAMP?ai(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:e,gitCommitMessage:r,gitCommitAuthorName:n,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`}}async function yW(t){let[e,r,n,o]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),i=process.env.CIRCLE_REPOSITORY_URL??r,a=i?.includes("github.com"),s=i?.includes("gitlab.com"),c=i?zm(i):void 0;return{ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:i,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:a?c:void 0,gitlabProjectPath:s?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID}}async function bW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env.BUILDKITE_REPO,i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?zm(o):void 0;return{ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:o,gitCommitMessage:r,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 EW(t){let[e,r,n]=await Promise.all([vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"]))]),o=process.env["Build.Repository.Uri"],i=o?.includes("github.com"),a=o?.includes("gitlab.com"),s=o?zm(o):void 0;return{ciProvider:"AzureDevOps",gitCommitSha:process.env["Build.SourceVersion"],gitCommitShaShort:process.env["Build.SourceVersion"]?.slice(0,6),gitCommitTimestamp:e?ai(e):void 0,gitBranchName:process.env["System.PullRequest.SourceBranch"]??process.env["Build.SourceBranchName"],gitOriginUrl:o,gitCommitMessage:r,gitCommitAuthorName:n,githubRepository:i?s:void 0,gitlabProjectPath:a?s:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function TW(t,e){let[r,n,o,i,a,s,c,l,u]=await Promise.all([vt(t,St.revparse(["HEAD"])),vt(t,St.revparse(["--short","HEAD"])),vt(t,St.revparse(["--abbrev-ref","HEAD"])),vt(t,St.listRemote(["--get-url","origin"])),vt(t,St.show(["--no-patch","--format=%ci"])),vt(t,St.show(["-s","--pretty=%B"])),vt(t,St.show(["-s","--pretty=%an"])),e?vt(t,St.raw(["merge-base","--fork-point",e])):Promise.resolve(void 0),pW(t)]),d=l?await vt(t,St.show(["--no-patch","--format=%ci",l])):void 0,p=i?.includes("github.com"),m=i?.includes("gitlab.com"),h=i?zm(i):void 0,g=u["user.email"]||void 0,f=u["user.name"]||void 0,S=u["user.username"]||void 0,b=await gW(t,i,u)??S??void 0;return{ciProvider:"none",gitCommitSha:r,gitCommitShaShort:n,gitBranchName:o,gitOriginUrl:i,gitCommitTimestamp:a?ai(a):void 0,gitCommitMessage:s,gitCommitAuthorName:c,gitLocalUsername:b,gitLocalEmail:g,gitLocalName:f,lastCommitOnMainSha:l,lastCommitOnMainTimestamp:d?ai(d):void 0,githubRepository:p?h:void 0,gitlabProjectPath:m?h:void 0,pipelineId:void 0}}async function vW(){let t=process.env._HEAD_REPO_URL;return{ciProvider:"GCPCloudBuild",gitCommitSha:process.env.COMMIT_SHA,gitCommitShaShort:process.env.COMMIT_SHA?.slice(0,6),gitBranchName:process.env.BRANCH_NAME,gitOriginUrl:t?process.env._HEAD_REPO_URL:void 0,gitCommitTimestamp:void 0,gitCommitMessage:void 0,gitCommitAuthorName:void 0,githubRepository:t?process.env.REPO_FULL_NAME:void 0,pipelineId:`${process.env.PROJECT_ID}:${process.env.BUILD_ID}`}}function AW(){return{ciProvider:"Custom",gitCommitSha:process.env.GIT_COMMIT_SHA,gitCommitShaShort:process.env.GIT_COMMIT_SHA_SHORT??process.env.GIT_COMMIT_SHA?.slice(0,6),gitCommitTimestamp:ai(process.env.GIT_COMMIT_TIMESTAMP),gitBranchName:process.env.GIT_BRANCH_NAME,gitOriginUrl:process.env.GIT_ORIGIN_URL,gitCommitAuthorName:process.env.GIT_COMMIT_AUTHOR_NAME,gitCommitMessage:process.env.GIT_COMMIT_MESSAGE,lastCommitOnMainSha:process.env.LAST_COMMIT_ON_MAIN_SHA,lastCommitOnMainTimestamp:ai(process.env.LAST_COMMIT_ON_MAIN_TIMESTAMP),mergedGitBranchName:process.env.MERGED_GIT_BRANCH_NAME,githubRepository:process.env.GITHUB_REPOSITORY,gitlabProjectPath:process.env.GITLAB_PROJECT_PATH,gitLocalUsername:process.env.GIT_USERNAME,gitLocalEmail:process.env.GIT_EMAIL,gitLocalName:process.env.GIT_NAME}}async function RW(t){let e=[...t.config.gitProtectedBranches??[]];return t.config.gitMainBranch&&e.push(t.config.gitMainBranch),{gitMainBranch:t.config.gitMainBranch,gitProtectedBranches:e}}async function si(t,e){let r=hW();if(!r)return TW(t,e);switch(r){case"GithubActions":return fW(t);case"GitlabCI":return SW(t);case"CircleCI":return yW(t);case"Buildkite":return bW(t);case"AzureDevOps":return EW(t);case"GCPCloudBuild":return vW();case"Custom":return AW()}}async function CW(t,e,r,n){let o=n;if(!n.gitCommitSha)return o;if(n.gitMainBranch&&(!o.lastCommitOnMainSha||!o.lastCommitOnMainTimestamp))try{let i=await e.getMergeBaseCommitFromGitlab(r,n.gitMainBranch,n.gitCommitSha);o={...o,lastCommitOnMainSha:i.sha,lastCommitOnMainTimestamp:i.committer.date}}catch(i){t.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(r,n.gitCommitSha);i&&(o={...o,gitCommitTimestamp:o.gitCommitTimestamp??i.committer.date,gitCommitAuthorName:o.gitCommitAuthorName??i.author.name,gitCommitMessage:o.gitCommitMessage??i.message})}catch(i){t.warn({err:i},"Failed to get commit from Gitlab")}if(n.gitBranchName&&n.gitBranchName===n.gitMainBranch&&!o.mergedGitBranchName)try{let i=await e.getMergedBranchFromGitlab(r,n.gitBranchName??"",n.gitCommitSha);i.mergedBranch&&(o={...o,mergedGitBranchName:i.mergedBranch})}catch(i){t.warn({err:i},"Failed to get merged branch from Gitlab")}return o}async function wW(t,e,r,n,o){let i=o;if(!o.gitCommitSha)return i;if(o.gitMainBranch&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let a=await e.getMergeBaseCommitFromGithub(r,n,o.gitMainBranch,o.gitCommitSha);i={...i,lastCommitOnMainSha:a.sha,lastCommitOnMainTimestamp:a.committer.date}}catch(a){t.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(r,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){t.warn({err:a},"Failed to get commit from GitHub")}if(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName)try{let a=await e.getMergedBranchFromGithub(r,n,o.gitBranchName??"",o.gitCommitSha);a.mergedBranch&&(i={...i,mergedGitBranchName:a.mergedBranch})}catch(a){t.warn({err:a},"Failed to get merged branch from GitHub")}return i}async function xW(t,e,r){try{if(r.githubRepository){let[n,o]=r.githubRepository.split("/");return await wW(t,e,n,o,r)}else if(r.gitlabProjectPath)return await CW(t,e,r.gitlabProjectPath,r)}catch(n){t.warn({err:n},"Failed to get remote git metadata")}return r}async function _r(t,e,r){let n=await RW(r),o=await si(t,n.gitMainBranch),i={...n,...o};(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp)&&i.gitBranchName===n.gitMainBranch&&(i.lastCommitOnMainSha=i.gitCommitSha,i.lastCommitOnMainTimestamp=i.gitCommitTimestamp);let a=await xW(t,e,i);return{...n,...o,...a}}async function YI(){try{return!!(await St.show(["--no-patch","--format=%ci"])).trim()}catch{return null}}import{diff as dOe}from"deep-object-diff";import{cloneDeep as mOe}from"lodash-es";import{v4 as COe}from"uuid";import xOe from"yaml";import WOe from"yaml";import KOe from"zod";import{randomUUID as IW}from"crypto";import Gi from"fs";import Ol from"path";var XI=new Set([".DS_Store","__MACOSX"]),JI={status:(t,e)=>{if(t.status===e.status)return t.status;if(t.status==="FAILED"||e.status==="FAILED")return"FAILED";if(t.status==="CANCELLED"||e.status==="CANCELLED")return"CANCELLED";if(t.status==="RETRYING"||e.status==="RETRYING")return"RETRYING";if(t.status==="RUNNING"||e.status==="RUNNING")return"RUNNING";if(t.status==="PENDING"||e.status==="PENDING")return"PENDING";throw new Error(`Invalid run status merge: ${t.status} and ${e.status}`)},startedAt:(t,e)=>t.startedAt<e.startedAt?t.startedAt:e.startedAt,updatedAt:(t,e)=>t.updatedAt>e.updatedAt?t.updatedAt:e.updatedAt,finishedAt:(t,e)=>!t.finishedAt||!e.finishedAt?new Date:t.finishedAt>e.finishedAt?t.finishedAt:e.finishedAt,gitCommitTimestamp:(t,e)=>{if(!(!t&&!e)){if(!t.gitCommitTimestamp||!e.gitCommitTimestamp||t.gitCommitTimestamp.getTime()!==e.gitCommitTimestamp.getTime())throw new Error(`Git commit timestamps must match to be merged: ${t.gitCommitTimestamp} and ${e.gitCommitTimestamp}`);return t.gitCommitTimestamp}},pipelineId:(t,e)=>t.pipelineId===e.pipelineId?t.pipelineId:!t.pipelineId&&e.pipelineId?e.pipelineId:!e.pipelineId&&t.pipelineId?t.pipelineId:t.startedAt<e.startedAt?e.pipelineId:t.pipelineId,labels:(t,e)=>{let r=new Set([...t.labels??[],...e.labels??[]]);return Array.from(r)}};function PW(t,e,r){if(JI[r]){let i=JI[r];return i(t,e)}let n=t[r],o=e[r];if(n!==o)throw new Error(`Metadata values for key "${r}" do not match: "${n}" vs "${o}"`);return n}var mb=class extends Error{constructor(e,r){let n=`${e} contains invalid Momentic results: ${r}. Please ensure that the path points to a folder containing only valid results. If you passed \`--output-dir test-results/results-1\` to the \`run\` command, your results path for merging should be \`test-results\`.`;super(n),this.name="InvalidMomenticResultsPathError"}};function ZI(t,e){try{let r=Ol.join(e,"metadata.json");return ml.parse(JSON.parse(Gi.readFileSync(r,"utf-8")))}catch{throw new mb(t,e)}}function QI(t,e,r){let n=IW(),o=t.child({runGroupId:n});Gi.rmSync(e,{recursive:!0,force:!0});let i=Gi.readdirSync(r).filter(c=>!XI.has(c)).map(c=>Ol.join(r,c));if(i.length===0)throw new Error(`No run groups found in results path: ${r}`);Gi.mkdirSync(e,{recursive:!0});let a={...ZI(r,i[0]),id:n};for(let c of i){let l=Ol.join(c,"runs");if(!Gi.existsSync(l))continue;let u=ZI(r,c);o.info({oldRunGroupId:u.id},"Merging run groups");for(let p in u){if(p==="id")continue;let m=p;a[m]=PW(a,u,m)}let d=Gi.readdirSync(l);for(let p of d){if(XI.has(p))continue;let m=Ol.join(l,p),h=Ol.join(e,"runs",p);Gi.cpSync(m,h,{recursive:!0})}}let s=Ol.join(e,"metadata.json");Gi.writeFileSync(s,JSON.stringify(a,null,2))}import UP from"adm-zip";import kb from"fs";import{z as SK}from"zod";var q="v1",gb="cli",Za="2.45.3";var MW=9e4,OW=3,LW=1500,NW=15e3,to=class extends Error{status;rawError;constructor(e,r,n,o={}){super(n,o),this.status=e,this.rawError=r}};async function DW(t){return t.text().then(e=>{try{return JSON.parse(e).error}catch{return e}})}var hb=class{baseUrl;logger;constructor(e){this.baseUrl=e.baseUrl,this.logger=e.logger}getHeaders(){let e={"Content-Type":"application/json"};return Za&&(e[lm]=Za),gb&&(e[Yw]=gb),e}async sendRequest(e,r){let{retries:n=OW,requestTimeoutMs:o=MW,initialRetryDelayMs:i=LW,maxRetryDelayMs:a=NW,onFailedRequest:s}=r,c=n,l=n,u,d={path:e,baseUrl:this.baseUrl,method:r.method};for(;c>0;)try{return c--,await this.sendSingleRequestHelper(e,r,o)}catch(p){u=p;try{s?.(u)}catch{}if(p instanceof to&&p.status>=400&&p.status<500)throw p;if(p instanceof Error&&p.name==="AbortError"&&(u=new Bi),c===0)throw u;let m=l-c,h=Math.min(i*Math.pow(2,m-1),a);await new Promise(g=>setTimeout(g,h))}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(e,r,n){let o={path:e,baseUrl:this.baseUrl,method:r.method},i=new AbortController,a=setTimeout(()=>i.abort(),n),s=()=>i.abort();r.signal&&r.signal.addEventListener("abort",s,{once:!0});let c=Date.now(),l={...this.getHeaders(),...r.extraHeaders};try{let u=await fetch(`${this.baseUrl}${e}`,{method:r.method,body:r.body?JSON.stringify(r.body):void 0,headers:l,signal:i.signal});if(!u.ok){let m=await DW(u);throw new to(u.status,m,`Request to ${r.method} ${e} failed with status ${u.status}: ${m}`)}let d;if(u.status===204)d={};else if(r.responseType==="buffer"){let m=await u.arrayBuffer();d=Buffer.from(m)}else{let m=await u.text();try{d=JSON.parse(m)}catch{d=m}}this.logger&&r.logResponse===!0&&d&&this.logger.debug({result:d,status:u.status,durationMs:Date.now()-c,...o},"Got response from Momentic server");let p=r.responseHeadersObject;return p&&u.headers.forEach((m,h)=>{p[h.toLowerCase()]=m}),d}finally{clearTimeout(a),r.signal&&r.signal.removeEventListener("abort",s)}}},hr=class extends hb{apiKey;mode;constructor(e){super(e),this.apiKey=e.apiKey,this.mode=e.mode}getHeaders(){return{...super.getHeaders(),Authorization:`Bearer ${this.apiKey}`,[Kw]:this.mode??""}}};import{createAnthropic as fK}from"@ai-sdk/anthropic";import{InvalidArgumentError as UW}from"@ai-sdk/provider";import{APICallError as bLe}from"@ai-sdk/provider";import{APICallError as BW}from"@ai-sdk/provider";import{LoadAPIKeyError as Gm}from"@ai-sdk/provider";import{LoadSettingError as ALe}from"@ai-sdk/provider";import{JSONParseError as qm,TypeValidationError as $W}from"@ai-sdk/provider";import{TypeValidationError as Eb}from"@ai-sdk/provider";import{TypeValidationError as YW}from"@ai-sdk/provider";var Hm=class extends Error{constructor(e,r){super(e),this.name="ParseError",this.type=r.type,this.field=r.field,this.value=r.value,this.line=r.line}};function fb(t){}function eP(t){if(typeof t=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:e=fb,onError:r=fb,onRetry:n=fb,onComment:o}=t,i="",a=!0,s,c="",l="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[S,b]=kW(`${i}${f}`);for(let y of S)d(y);i=b,a=!1}function d(g){if(g===""){m();return}if(g.startsWith(":")){o&&o(g.slice(g.startsWith(": ")?2:1));return}let f=g.indexOf(":");if(f!==-1){let S=g.slice(0,f),b=g[f+1]===" "?2:1,y=g.slice(f+b);p(S,y,g);return}p(g,"",g)}function p(g,f,S){switch(g){case"event":l=f;break;case"data":c=`${c}${f}
60
60
  `;break;case"id":s=f.includes("\0")?void 0:f;break;case"retry":/^\d+$/.test(f)?n(parseInt(f,10)):r(new Hm(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:S}));break;default:r(new Hm(`Unknown field "${g.length>20?`${g.slice(0,20)}\u2026`:g}"`,{type:"unknown-field",field:g,value:f,line:S}));break}}function m(){c.length>0&&e({id:s,event:l||void 0,data:c.endsWith(`
61
61
  `)?c.slice(0,-1):c}),s=void 0,c="",l=""}function h(g={}){i&&g.consume&&d(i),a=!0,s=void 0,c="",l="",i=""}return{feed:u,reset:h}}function kW(t){let e=[],r="",n=0;for(;n<t.length;){let o=t.indexOf("\r",n),i=t.indexOf(`
62
62
  `,n),a=-1;if(o!==-1&&i!==-1?a=Math.min(o,i):o!==-1?a=o:i!==-1&&(a=i),a===-1){r=t.slice(n);break}else{let s=t.slice(n,a);e.push(s),n=a+1,t[n-1]==="\r"&&t[n]===`
63
- `&&n++}}return[e,r]}var jm=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n}={}){let o;super({start(i){o=eP({onEvent:a=>{i.enqueue(a)},onError(a){e==="terminate"?i.error(a):typeof e=="function"&&e(a)},onRetry:r,onComment:n})},transform(i){o.feed(i)}})}};import{InvalidArgumentError as rq}from"@ai-sdk/provider";import{APICallError as Vm}from"@ai-sdk/provider";import{APICallError as Ll,EmptyResponseBodyError as oq}from"@ai-sdk/provider";import*as Ym from"zod/v4";import{ZodFirstPartyTypeKind as He}from"zod/v3";import{ZodFirstPartyTypeKind as lq}from"zod/v3";import{ZodFirstPartyTypeKind as $m}from"zod/v3";function fr(...t){return t.reduce((e,r)=>({...e,...r??{}}),{})}function Gu(t){return Object.fromEntries([...t.headers])}var FW=({prefix:t,size:e=16,alphabet:r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",separator:n="-"}={})=>{let o=()=>{let i=r.length,a=new Array(e);for(let s=0;s<e;s++)a[s]=r[Math.random()*i|0];return a.join("")};if(t==null)return o;if(r.includes(n))throw new UW({argument:"separator",message:`The separator "${n}" must not be part of the alphabet "${r}".`});return()=>`${t}${n}${o()}`},dn=FW();function bb(t){return(t instanceof Error||t instanceof DOMException)&&(t.name==="AbortError"||t.name==="ResponseAborted"||t.name==="TimeoutError")}var zW=["fetch failed","failed to fetch"];function HW({error:t,url:e,requestBodyValues:r}){if(bb(t))return t;if(t instanceof TypeError&&zW.includes(t.message.toLowerCase())){let n=t.cause;if(n!=null)return new BW({message:`Cannot connect to API: ${n.message}`,cause:n,url:e,requestBodyValues:r,isRetryable:!0})}return t}function jW(t=globalThis){var e,r,n;return t.window?"runtime/browser":(e=t.navigator)!=null&&e.userAgent?`runtime/${t.navigator.userAgent.toLowerCase()}`:(n=(r=t.process)==null?void 0:r.versions)!=null&&n.node?`runtime/node.js/${t.process.version.substring(0)}`:t.EdgeRuntime?"runtime/vercel-edge":"runtime/unknown"}function GW(t){if(t==null)return{};let e={};if(t instanceof Headers)t.forEach((r,n)=>{e[n.toLowerCase()]=r});else{Array.isArray(t)||(t=Object.entries(t));for(let[r,n]of t)n!=null&&(e[r.toLowerCase()]=n)}return e}function vb(t,...e){let r=new Headers(GW(t)),n=r.get("user-agent")||"";return r.set("user-agent",[n,...e].filter(Boolean).join(" ")),Object.fromEntries(r.entries())}var VW="3.0.20";function oP({apiKey:t,environmentVariableName:e,apiKeyParameterName:r="apiKey",description:n}){if(typeof t=="string")return t;if(t!=null)throw new Gm({message:`${n} API key must be a string.`});if(typeof process>"u")throw new Gm({message:`${n} API key is missing. Pass it using the '${r}' parameter. Environment variables is not supported in this environment.`});if(t=process.env[e],t==null)throw new Gm({message:`${n} API key is missing. Pass it using the '${r}' parameter or the ${e} environment variable.`});if(typeof t!="string")throw new Gm({message:`${n} API key must be a string. The value of the ${e} environment variable is not a string.`});return t}function iP({settingValue:t,environmentVariableName:e}){if(typeof t=="string")return t;if(!(t!=null||typeof process>"u")&&(t=process.env[e],!(t==null||typeof t!="string")))return t}function aP(t){var e;let[r,n=""]=t.toLowerCase().split("/");return(e={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[n])!=null?e:n}var WW=/"__proto__"\s*:/,qW=/"constructor"\s*:/;function tP(t){let e=JSON.parse(t);return e===null||typeof e!="object"||WW.test(t)===!1&&qW.test(t)===!1?e:KW(e)}function KW(t){let e=[t];for(;e.length;){let r=e;e=[];for(let n of r){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 t}function Ab(t){let{stackTraceLimit:e}=Error;try{Error.stackTraceLimit=0}catch{return tP(t)}try{return tP(t)}finally{Error.stackTraceLimit=e}}var Km=Symbol.for("vercel.ai.validator");function XW(t){return{[Km]:!0,validate:t}}function JW(t){return typeof t=="object"&&t!==null&&Km in t&&t[Km]===!0&&"validate"in t}function yt(t){let e;return()=>(e==null&&(e=t()),e)}function ZW(t){return JW(t)?t:typeof t=="function"?t():QW(t)}function QW(t){return XW(async e=>{let r=await t["~standard"].validate(e);return r.issues==null?{success:!0,value:r.value}:{success:!1,error:new YW({value:e,cause:r.issues})}})}async function Ao({value:t,schema:e}){let r=await Rb({value:t,schema:e});if(!r.success)throw Eb.wrap({value:t,cause:r.error});return r.value}async function Rb({value:t,schema:e}){let r=ZW(e);try{if(r.validate==null)return{success:!0,value:t,rawValue:t};let n=await r.validate(t);return n.success?{success:!0,value:n.value,rawValue:t}:{success:!1,error:Eb.wrap({value:t,cause:n.error}),rawValue:t}}catch(n){return{success:!1,error:Eb.wrap({value:t,cause:n}),rawValue:t}}}async function eq({text:t,schema:e}){try{let r=Ab(t);return e==null?r:Ao({value:r,schema:e})}catch(r){throw qm.isInstance(r)||$W.isInstance(r)?r:new qm({text:t,cause:r})}}async function sP({text:t,schema:e}){try{let r=Ab(t);return e==null?{success:!0,value:r,rawValue:r}:await Rb({value:r,schema:e})}catch(r){return{success:!1,error:qm.isInstance(r)?r:new qm({text:t,cause:r}),rawValue:void 0}}}function Cb(t){try{return Ab(t),!0}catch{return!1}}function tq({stream:t,schema:e}){return t.pipeThrough(new TextDecoderStream).pipeThrough(new jm).pipeThrough(new TransformStream({async transform({data:r},n){r!=="[DONE]"&&n.enqueue(await sP({text:r,schema:e}))}}))}async function jr({provider:t,providerOptions:e,schema:r}){if(e?.[t]==null)return;let n=await Rb({value:e[t],schema:r});if(!n.success)throw new rq({argument:"providerOptions",message:`invalid ${t} provider options`,cause:n.error});return n.value}var nq=()=>globalThis.fetch,Gr=async({url:t,headers:e,body:r,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>cP({url:t,headers:{"Content-Type":"application/json",...e},body:{content:JSON.stringify(r),values:r},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a}),lP=async({url:t,headers:e,formData:r,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>cP({url:t,headers:e,body:{content:r,values:Object.fromEntries(r.entries())},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a}),cP=async({url:t,headers:e={},body:r,successfulResponseHandler:n,failedResponseHandler:o,abortSignal:i,fetch:a=nq()})=>{try{let s=await a(t,{method:"POST",headers:vb(e,`ai-sdk/provider-utils/${VW}`,jW()),body:r.content,signal:i}),c=Gu(s);if(!s.ok){let l;try{l=await o({response:s,url:t,requestBodyValues:r.values})}catch(u){throw bb(u)||Vm.isInstance(u)?u:new Vm({message:"Failed to process error response",cause:u,statusCode:s.status,url:t,responseHeaders:c,requestBodyValues:r.values})}throw l.value}try{return await n({response:s,url:t,requestBodyValues:r.values})}catch(l){throw l instanceof Error&&(bb(l)||Vm.isInstance(l))?l:new Vm({message:"Failed to process successful response",cause:l,statusCode:s.status,url:t,responseHeaders:c,requestBodyValues:r.values})}}catch(s){throw HW({error:s,url:t,requestBodyValues:r.values})}};function Ln({id:t,name:e,inputSchema:r,outputSchema:n}){return({execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:t,name:e,args:l,inputSchema:r,outputSchema:n,execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}var uP=({errorSchema:t,errorToMessage:e,isRetryable:r})=>async({response:n,url:o,requestBodyValues:i})=>{let a=await n.text(),s=Gu(n);if(a.trim()==="")return{responseHeaders:s,value:new Ll({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:r?.(n)})};try{let c=await eq({text:a,schema:t});return{responseHeaders:s,value:new Ll({message:e(c),url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,data:c,isRetryable:r?.(n,c)})}}catch{return{responseHeaders:s,value:new Ll({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:r?.(n)})}}},Nl=t=>async({response:e})=>{let r=Gu(e);if(e.body==null)throw new oq({});return{responseHeaders:r,value:tq({stream:e.body,schema:t})}};var Nn=t=>async({response:e,url:r,requestBodyValues:n})=>{let o=await e.text(),i=await sP({text:o,schema:t}),a=Gu(e);if(!i.success)throw new Ll({message:"Invalid JSON response",cause:i.error,statusCode:e.status,responseHeaders:a,responseBody:o,url:r,requestBodyValues:n});return{responseHeaders:a,value:i.value,rawValue:i.rawValue}},dP=()=>async({response:t,url:e,requestBodyValues:r})=>{let n=Gu(t);if(!t.body)throw new Ll({message:"Response body is empty",url:e,requestBodyValues:r,statusCode:t.status,responseHeaders:n,responseBody:void 0});try{let o=await t.arrayBuffer();return{responseHeaders:n,value:new Uint8Array(o)}}catch(o){throw new Ll({message:"Failed to read response as array buffer",url:e,requestBodyValues:r,statusCode:t.status,responseHeaders:n,responseBody:void 0,cause:o})}};function Wm(t){if(t.type==="object"){t.additionalProperties=!1;let e=t.properties;if(e!=null)for(let r in e)e[r]=Wm(e[r])}return t.type==="array"&&t.items!=null&&(Array.isArray(t.items)?t.items=t.items.map(e=>Wm(e)):t.items=Wm(t.items)),t}var iq=(t,e)=>{let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];r++);return[(t.length-r).toString(),...e.slice(r)].join("/")},aq=Symbol("Let zodToJsonSchema decide on which parser to use"),rP={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",strictUnions:!1,definitions:{},errorMessages:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref"},sq=t=>typeof t=="string"?{...rP,name:t}:{...rP,...t};function un(){return{}}function cq(t,e){var r,n,o;let i={type:"array"};return(r=t.type)!=null&&r._def&&((o=(n=t.type)==null?void 0:n._def)==null?void 0:o.typeName)!==lq.ZodAny&&(i.items=ut(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&(i.minItems=t.minLength.value),t.maxLength&&(i.maxItems=t.maxLength.value),t.exactLength&&(i.minItems=t.exactLength.value,i.maxItems=t.exactLength.value),i}function uq(t){let e={type:"integer",format:"int64"};if(!t.checks)return e;for(let r of t.checks)switch(r.kind){case"min":r.inclusive?e.minimum=r.value:e.exclusiveMinimum=r.value;break;case"max":r.inclusive?e.maximum=r.value:e.exclusiveMaximum=r.value;break;case"multipleOf":e.multipleOf=r.value;break}return e}function dq(){return{type:"boolean"}}function pP(t,e){return ut(t.type._def,e)}var pq=(t,e)=>ut(t.innerType._def,e);function mP(t,e,r){let n=r??e.dateStrategy;if(Array.isArray(n))return{anyOf:n.map((o,i)=>mP(t,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 mq(t)}}var mq=t=>{let e={type:"integer",format:"unix-time"};for(let r of t.checks)switch(r.kind){case"min":e.minimum=r.value;break;case"max":e.maximum=r.value;break}return e};function gq(t,e){return{...ut(t.innerType._def,e),default:t.defaultValue()}}function hq(t,e){return e.effectStrategy==="input"?ut(t.schema._def,e):un()}function fq(t){return{type:"string",enum:Array.from(t.values)}}var Sq=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function yq(t,e){let r=[ut(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),ut(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(o=>!!o),n=[];return r.forEach(o=>{if(Sq(o))n.push(...o.allOf);else{let i=o;if("additionalProperties"in o&&o.additionalProperties===!1){let{additionalProperties:a,...s}=o;i=s}n.push(i)}}),n.length?{allOf:n}:void 0}function bq(t){let e=typeof t.value;return e!=="bigint"&&e!=="number"&&e!=="boolean"&&e!=="string"?{type:Array.isArray(t.value)?"array":"object"}:{type:e==="bigint"?"integer":e,const:t.value}}var Sb=void 0,ro={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:()=>(Sb===void 0&&(Sb=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Sb),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 gP(t,e){let r={type:"string"};if(t.checks)for(let n of t.checks)switch(n.kind){case"min":r.minLength=typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value;break;case"max":r.maxLength=typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value;break;case"email":switch(e.emailStrategy){case"format:email":no(r,"email",n.message,e);break;case"format:idn-email":no(r,"idn-email",n.message,e);break;case"pattern:zod":Hr(r,ro.email,n.message,e);break}break;case"url":no(r,"uri",n.message,e);break;case"uuid":no(r,"uuid",n.message,e);break;case"regex":Hr(r,n.regex,n.message,e);break;case"cuid":Hr(r,ro.cuid,n.message,e);break;case"cuid2":Hr(r,ro.cuid2,n.message,e);break;case"startsWith":Hr(r,RegExp(`^${yb(n.value,e)}`),n.message,e);break;case"endsWith":Hr(r,RegExp(`${yb(n.value,e)}$`),n.message,e);break;case"datetime":no(r,"date-time",n.message,e);break;case"date":no(r,"date",n.message,e);break;case"time":no(r,"time",n.message,e);break;case"duration":no(r,"duration",n.message,e);break;case"length":r.minLength=typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,r.maxLength=typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value;break;case"includes":{Hr(r,RegExp(yb(n.value,e)),n.message,e);break}case"ip":{n.version!=="v6"&&no(r,"ipv4",n.message,e),n.version!=="v4"&&no(r,"ipv6",n.message,e);break}case"base64url":Hr(r,ro.base64url,n.message,e);break;case"jwt":Hr(r,ro.jwt,n.message,e);break;case"cidr":{n.version!=="v6"&&Hr(r,ro.ipv4Cidr,n.message,e),n.version!=="v4"&&Hr(r,ro.ipv6Cidr,n.message,e);break}case"emoji":Hr(r,ro.emoji(),n.message,e);break;case"ulid":{Hr(r,ro.ulid,n.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{no(r,"binary",n.message,e);break}case"contentEncoding:base64":{r.contentEncoding="base64";break}case"pattern:zod":{Hr(r,ro.base64,n.message,e);break}}break}case"nanoid":Hr(r,ro.nanoid,n.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return r}function yb(t,e){return e.patternStrategy==="escape"?Tq(t):t}var Eq=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Tq(t){let e="";for(let r=0;r<t.length;r++)Eq.has(t[r])||(e+="\\"),e+=t[r];return e}function no(t,e,r,n){var o;t.format||(o=t.anyOf)!=null&&o.some(i=>i.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format}),delete t.format),t.anyOf.push({format:e,...r&&n.errorMessages&&{errorMessage:{format:r}}})):t.format=e}function Hr(t,e,r,n){var o;t.pattern||(o=t.allOf)!=null&&o.some(i=>i.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern}),delete t.pattern),t.allOf.push({pattern:nP(e,n),...r&&n.errorMessages&&{errorMessage:{pattern:r}}})):t.pattern=nP(e,n)}function nP(t,e){var r;if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,i="",a=!1,s=!1,c=!1;for(let l=0;l<o.length;l++){if(a){i+=o[l],a=!1;continue}if(n.i){if(s){if(o[l].match(/[a-z]/)){c?(i+=o[l],i+=`${o[l-2]}-${o[l]}`.toUpperCase(),c=!1):o[l+1]==="-"&&((r=o[l+2])!=null&&r.match(/[a-z]/))?(i+=o[l],c=!0):i+=`${o[l]}${o[l].toUpperCase()}`;continue}}else if(o[l].match(/[a-z]/)){i+=`[${o[l]}${o[l].toUpperCase()}]`;continue}}if(n.m){if(o[l]==="^"){i+=`(^|(?<=[\r
63
+ `&&n++}}return[e,r]}var jm=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n}={}){let o;super({start(i){o=eP({onEvent:a=>{i.enqueue(a)},onError(a){e==="terminate"?i.error(a):typeof e=="function"&&e(a)},onRetry:r,onComment:n})},transform(i){o.feed(i)}})}};import{InvalidArgumentError as rq}from"@ai-sdk/provider";import{APICallError as Vm}from"@ai-sdk/provider";import{APICallError as Ll,EmptyResponseBodyError as oq}from"@ai-sdk/provider";import*as Ym from"zod/v4";import{ZodFirstPartyTypeKind as ze}from"zod/v3";import{ZodFirstPartyTypeKind as lq}from"zod/v3";import{ZodFirstPartyTypeKind as $m}from"zod/v3";function fr(...t){return t.reduce((e,r)=>({...e,...r??{}}),{})}function Gu(t){return Object.fromEntries([...t.headers])}var FW=({prefix:t,size:e=16,alphabet:r="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",separator:n="-"}={})=>{let o=()=>{let i=r.length,a=new Array(e);for(let s=0;s<e;s++)a[s]=r[Math.random()*i|0];return a.join("")};if(t==null)return o;if(r.includes(n))throw new UW({argument:"separator",message:`The separator "${n}" must not be part of the alphabet "${r}".`});return()=>`${t}${n}${o()}`},dn=FW();function bb(t){return(t instanceof Error||t instanceof DOMException)&&(t.name==="AbortError"||t.name==="ResponseAborted"||t.name==="TimeoutError")}var zW=["fetch failed","failed to fetch"];function HW({error:t,url:e,requestBodyValues:r}){if(bb(t))return t;if(t instanceof TypeError&&zW.includes(t.message.toLowerCase())){let n=t.cause;if(n!=null)return new BW({message:`Cannot connect to API: ${n.message}`,cause:n,url:e,requestBodyValues:r,isRetryable:!0})}return t}function jW(t=globalThis){var e,r,n;return t.window?"runtime/browser":(e=t.navigator)!=null&&e.userAgent?`runtime/${t.navigator.userAgent.toLowerCase()}`:(n=(r=t.process)==null?void 0:r.versions)!=null&&n.node?`runtime/node.js/${t.process.version.substring(0)}`:t.EdgeRuntime?"runtime/vercel-edge":"runtime/unknown"}function GW(t){if(t==null)return{};let e={};if(t instanceof Headers)t.forEach((r,n)=>{e[n.toLowerCase()]=r});else{Array.isArray(t)||(t=Object.entries(t));for(let[r,n]of t)n!=null&&(e[r.toLowerCase()]=n)}return e}function vb(t,...e){let r=new Headers(GW(t)),n=r.get("user-agent")||"";return r.set("user-agent",[n,...e].filter(Boolean).join(" ")),Object.fromEntries(r.entries())}var VW="3.0.20";function oP({apiKey:t,environmentVariableName:e,apiKeyParameterName:r="apiKey",description:n}){if(typeof t=="string")return t;if(t!=null)throw new Gm({message:`${n} API key must be a string.`});if(typeof process>"u")throw new Gm({message:`${n} API key is missing. Pass it using the '${r}' parameter. Environment variables is not supported in this environment.`});if(t=process.env[e],t==null)throw new Gm({message:`${n} API key is missing. Pass it using the '${r}' parameter or the ${e} environment variable.`});if(typeof t!="string")throw new Gm({message:`${n} API key must be a string. The value of the ${e} environment variable is not a string.`});return t}function iP({settingValue:t,environmentVariableName:e}){if(typeof t=="string")return t;if(!(t!=null||typeof process>"u")&&(t=process.env[e],!(t==null||typeof t!="string")))return t}function aP(t){var e;let[r,n=""]=t.toLowerCase().split("/");return(e={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[n])!=null?e:n}var WW=/"__proto__"\s*:/,qW=/"constructor"\s*:/;function tP(t){let e=JSON.parse(t);return e===null||typeof e!="object"||WW.test(t)===!1&&qW.test(t)===!1?e:KW(e)}function KW(t){let e=[t];for(;e.length;){let r=e;e=[];for(let n of r){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 t}function Ab(t){let{stackTraceLimit:e}=Error;try{Error.stackTraceLimit=0}catch{return tP(t)}try{return tP(t)}finally{Error.stackTraceLimit=e}}var Km=Symbol.for("vercel.ai.validator");function XW(t){return{[Km]:!0,validate:t}}function JW(t){return typeof t=="object"&&t!==null&&Km in t&&t[Km]===!0&&"validate"in t}function yt(t){let e;return()=>(e==null&&(e=t()),e)}function ZW(t){return JW(t)?t:typeof t=="function"?t():QW(t)}function QW(t){return XW(async e=>{let r=await t["~standard"].validate(e);return r.issues==null?{success:!0,value:r.value}:{success:!1,error:new YW({value:e,cause:r.issues})}})}async function Ao({value:t,schema:e}){let r=await Rb({value:t,schema:e});if(!r.success)throw Eb.wrap({value:t,cause:r.error});return r.value}async function Rb({value:t,schema:e}){let r=ZW(e);try{if(r.validate==null)return{success:!0,value:t,rawValue:t};let n=await r.validate(t);return n.success?{success:!0,value:n.value,rawValue:t}:{success:!1,error:Eb.wrap({value:t,cause:n.error}),rawValue:t}}catch(n){return{success:!1,error:Eb.wrap({value:t,cause:n}),rawValue:t}}}async function eq({text:t,schema:e}){try{let r=Ab(t);return e==null?r:Ao({value:r,schema:e})}catch(r){throw qm.isInstance(r)||$W.isInstance(r)?r:new qm({text:t,cause:r})}}async function sP({text:t,schema:e}){try{let r=Ab(t);return e==null?{success:!0,value:r,rawValue:r}:await Rb({value:r,schema:e})}catch(r){return{success:!1,error:qm.isInstance(r)?r:new qm({text:t,cause:r}),rawValue:void 0}}}function Cb(t){try{return Ab(t),!0}catch{return!1}}function tq({stream:t,schema:e}){return t.pipeThrough(new TextDecoderStream).pipeThrough(new jm).pipeThrough(new TransformStream({async transform({data:r},n){r!=="[DONE]"&&n.enqueue(await sP({text:r,schema:e}))}}))}async function jr({provider:t,providerOptions:e,schema:r}){if(e?.[t]==null)return;let n=await Rb({value:e[t],schema:r});if(!n.success)throw new rq({argument:"providerOptions",message:`invalid ${t} provider options`,cause:n.error});return n.value}var nq=()=>globalThis.fetch,Gr=async({url:t,headers:e,body:r,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>cP({url:t,headers:{"Content-Type":"application/json",...e},body:{content:JSON.stringify(r),values:r},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a}),lP=async({url:t,headers:e,formData:r,failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a})=>cP({url:t,headers:e,body:{content:r,values:Object.fromEntries(r.entries())},failedResponseHandler:n,successfulResponseHandler:o,abortSignal:i,fetch:a}),cP=async({url:t,headers:e={},body:r,successfulResponseHandler:n,failedResponseHandler:o,abortSignal:i,fetch:a=nq()})=>{try{let s=await a(t,{method:"POST",headers:vb(e,`ai-sdk/provider-utils/${VW}`,jW()),body:r.content,signal:i}),c=Gu(s);if(!s.ok){let l;try{l=await o({response:s,url:t,requestBodyValues:r.values})}catch(u){throw bb(u)||Vm.isInstance(u)?u:new Vm({message:"Failed to process error response",cause:u,statusCode:s.status,url:t,responseHeaders:c,requestBodyValues:r.values})}throw l.value}try{return await n({response:s,url:t,requestBodyValues:r.values})}catch(l){throw l instanceof Error&&(bb(l)||Vm.isInstance(l))?l:new Vm({message:"Failed to process successful response",cause:l,statusCode:s.status,url:t,responseHeaders:c,requestBodyValues:r.values})}}catch(s){throw HW({error:s,url:t,requestBodyValues:r.values})}};function Ln({id:t,name:e,inputSchema:r,outputSchema:n}){return({execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c,...l})=>({type:"provider-defined",id:t,name:e,args:l,inputSchema:r,outputSchema:n,execute:o,toModelOutput:i,onInputStart:a,onInputDelta:s,onInputAvailable:c})}var uP=({errorSchema:t,errorToMessage:e,isRetryable:r})=>async({response:n,url:o,requestBodyValues:i})=>{let a=await n.text(),s=Gu(n);if(a.trim()==="")return{responseHeaders:s,value:new Ll({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:r?.(n)})};try{let c=await eq({text:a,schema:t});return{responseHeaders:s,value:new Ll({message:e(c),url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,data:c,isRetryable:r?.(n,c)})}}catch{return{responseHeaders:s,value:new Ll({message:n.statusText,url:o,requestBodyValues:i,statusCode:n.status,responseHeaders:s,responseBody:a,isRetryable:r?.(n)})}}},Nl=t=>async({response:e})=>{let r=Gu(e);if(e.body==null)throw new oq({});return{responseHeaders:r,value:tq({stream:e.body,schema:t})}};var Nn=t=>async({response:e,url:r,requestBodyValues:n})=>{let o=await e.text(),i=await sP({text:o,schema:t}),a=Gu(e);if(!i.success)throw new Ll({message:"Invalid JSON response",cause:i.error,statusCode:e.status,responseHeaders:a,responseBody:o,url:r,requestBodyValues:n});return{responseHeaders:a,value:i.value,rawValue:i.rawValue}},dP=()=>async({response:t,url:e,requestBodyValues:r})=>{let n=Gu(t);if(!t.body)throw new Ll({message:"Response body is empty",url:e,requestBodyValues:r,statusCode:t.status,responseHeaders:n,responseBody:void 0});try{let o=await t.arrayBuffer();return{responseHeaders:n,value:new Uint8Array(o)}}catch(o){throw new Ll({message:"Failed to read response as array buffer",url:e,requestBodyValues:r,statusCode:t.status,responseHeaders:n,responseBody:void 0,cause:o})}};function Wm(t){if(t.type==="object"){t.additionalProperties=!1;let e=t.properties;if(e!=null)for(let r in e)e[r]=Wm(e[r])}return t.type==="array"&&t.items!=null&&(Array.isArray(t.items)?t.items=t.items.map(e=>Wm(e)):t.items=Wm(t.items)),t}var iq=(t,e)=>{let r=0;for(;r<t.length&&r<e.length&&t[r]===e[r];r++);return[(t.length-r).toString(),...e.slice(r)].join("/")},aq=Symbol("Let zodToJsonSchema decide on which parser to use"),rP={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",strictUnions:!1,definitions:{},errorMessages:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref"},sq=t=>typeof t=="string"?{...rP,name:t}:{...rP,...t};function un(){return{}}function cq(t,e){var r,n,o;let i={type:"array"};return(r=t.type)!=null&&r._def&&((o=(n=t.type)==null?void 0:n._def)==null?void 0:o.typeName)!==lq.ZodAny&&(i.items=ut(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&(i.minItems=t.minLength.value),t.maxLength&&(i.maxItems=t.maxLength.value),t.exactLength&&(i.minItems=t.exactLength.value,i.maxItems=t.exactLength.value),i}function uq(t){let e={type:"integer",format:"int64"};if(!t.checks)return e;for(let r of t.checks)switch(r.kind){case"min":r.inclusive?e.minimum=r.value:e.exclusiveMinimum=r.value;break;case"max":r.inclusive?e.maximum=r.value:e.exclusiveMaximum=r.value;break;case"multipleOf":e.multipleOf=r.value;break}return e}function dq(){return{type:"boolean"}}function pP(t,e){return ut(t.type._def,e)}var pq=(t,e)=>ut(t.innerType._def,e);function mP(t,e,r){let n=r??e.dateStrategy;if(Array.isArray(n))return{anyOf:n.map((o,i)=>mP(t,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 mq(t)}}var mq=t=>{let e={type:"integer",format:"unix-time"};for(let r of t.checks)switch(r.kind){case"min":e.minimum=r.value;break;case"max":e.maximum=r.value;break}return e};function gq(t,e){return{...ut(t.innerType._def,e),default:t.defaultValue()}}function hq(t,e){return e.effectStrategy==="input"?ut(t.schema._def,e):un()}function fq(t){return{type:"string",enum:Array.from(t.values)}}var Sq=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function yq(t,e){let r=[ut(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),ut(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(o=>!!o),n=[];return r.forEach(o=>{if(Sq(o))n.push(...o.allOf);else{let i=o;if("additionalProperties"in o&&o.additionalProperties===!1){let{additionalProperties:a,...s}=o;i=s}n.push(i)}}),n.length?{allOf:n}:void 0}function bq(t){let e=typeof t.value;return e!=="bigint"&&e!=="number"&&e!=="boolean"&&e!=="string"?{type:Array.isArray(t.value)?"array":"object"}:{type:e==="bigint"?"integer":e,const:t.value}}var Sb=void 0,ro={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:()=>(Sb===void 0&&(Sb=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),Sb),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 gP(t,e){let r={type:"string"};if(t.checks)for(let n of t.checks)switch(n.kind){case"min":r.minLength=typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value;break;case"max":r.maxLength=typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value;break;case"email":switch(e.emailStrategy){case"format:email":no(r,"email",n.message,e);break;case"format:idn-email":no(r,"idn-email",n.message,e);break;case"pattern:zod":Hr(r,ro.email,n.message,e);break}break;case"url":no(r,"uri",n.message,e);break;case"uuid":no(r,"uuid",n.message,e);break;case"regex":Hr(r,n.regex,n.message,e);break;case"cuid":Hr(r,ro.cuid,n.message,e);break;case"cuid2":Hr(r,ro.cuid2,n.message,e);break;case"startsWith":Hr(r,RegExp(`^${yb(n.value,e)}`),n.message,e);break;case"endsWith":Hr(r,RegExp(`${yb(n.value,e)}$`),n.message,e);break;case"datetime":no(r,"date-time",n.message,e);break;case"date":no(r,"date",n.message,e);break;case"time":no(r,"time",n.message,e);break;case"duration":no(r,"duration",n.message,e);break;case"length":r.minLength=typeof r.minLength=="number"?Math.max(r.minLength,n.value):n.value,r.maxLength=typeof r.maxLength=="number"?Math.min(r.maxLength,n.value):n.value;break;case"includes":{Hr(r,RegExp(yb(n.value,e)),n.message,e);break}case"ip":{n.version!=="v6"&&no(r,"ipv4",n.message,e),n.version!=="v4"&&no(r,"ipv6",n.message,e);break}case"base64url":Hr(r,ro.base64url,n.message,e);break;case"jwt":Hr(r,ro.jwt,n.message,e);break;case"cidr":{n.version!=="v6"&&Hr(r,ro.ipv4Cidr,n.message,e),n.version!=="v4"&&Hr(r,ro.ipv6Cidr,n.message,e);break}case"emoji":Hr(r,ro.emoji(),n.message,e);break;case"ulid":{Hr(r,ro.ulid,n.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{no(r,"binary",n.message,e);break}case"contentEncoding:base64":{r.contentEncoding="base64";break}case"pattern:zod":{Hr(r,ro.base64,n.message,e);break}}break}case"nanoid":Hr(r,ro.nanoid,n.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return r}function yb(t,e){return e.patternStrategy==="escape"?Tq(t):t}var Eq=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function Tq(t){let e="";for(let r=0;r<t.length;r++)Eq.has(t[r])||(e+="\\"),e+=t[r];return e}function no(t,e,r,n){var o;t.format||(o=t.anyOf)!=null&&o.some(i=>i.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format}),delete t.format),t.anyOf.push({format:e,...r&&n.errorMessages&&{errorMessage:{format:r}}})):t.format=e}function Hr(t,e,r,n){var o;t.pattern||(o=t.allOf)!=null&&o.some(i=>i.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern}),delete t.pattern),t.allOf.push({pattern:nP(e,n),...r&&n.errorMessages&&{errorMessage:{pattern:r}}})):t.pattern=nP(e,n)}function nP(t,e){var r;if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,i="",a=!1,s=!1,c=!1;for(let l=0;l<o.length;l++){if(a){i+=o[l],a=!1;continue}if(n.i){if(s){if(o[l].match(/[a-z]/)){c?(i+=o[l],i+=`${o[l-2]}-${o[l]}`.toUpperCase(),c=!1):o[l+1]==="-"&&((r=o[l+2])!=null&&r.match(/[a-z]/))?(i+=o[l],c=!0):i+=`${o[l]}${o[l].toUpperCase()}`;continue}}else if(o[l].match(/[a-z]/)){i+=`[${o[l]}${o[l].toUpperCase()}]`;continue}}if(n.m){if(o[l]==="^"){i+=`(^|(?<=[\r
64
64
  ]))`;continue}else if(o[l]==="$"){i+=`($|(?=[\r
65
65
  ]))`;continue}}if(n.s&&o[l]==="."){i+=s?`${o[l]}\r
66
66
  `:`[${o[l]}\r
67
- ]`;continue}i+=o[l],o[l]==="\\"?a=!0:s&&o[l]==="]"?s=!1:!s&&o[l]==="["&&(s=!0)}try{new RegExp(i)}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`),t.source}return i}function hP(t,e){var r,n,o,i,a,s;let c={type:"object",additionalProperties:(r=ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]}))!=null?r:e.allowedAdditionalProperties};if(((n=t.keyType)==null?void 0:n._def.typeName)===$m.ZodString&&((o=t.keyType._def.checks)!=null&&o.length)){let{type:l,...u}=gP(t.keyType._def,e);return{...c,propertyNames:u}}else{if(((i=t.keyType)==null?void 0:i._def.typeName)===$m.ZodEnum)return{...c,propertyNames:{enum:t.keyType._def.values}};if(((a=t.keyType)==null?void 0:a._def.typeName)===$m.ZodBranded&&t.keyType._def.type._def.typeName===$m.ZodString&&((s=t.keyType._def.type._def.checks)!=null&&s.length)){let{type:l,...u}=pP(t.keyType._def,e);return{...c,propertyNames:u}}}return c}function vq(t,e){if(e.mapStrategy==="record")return hP(t,e);let r=ut(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||un(),n=ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||un();return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function Aq(t){let e=t.values,n=Object.keys(t.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 Rq(){return{not:un()}}function Cq(){return{type:"null"}}var Tb={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function wq(t,e){let r=t.options instanceof Map?Array.from(t.options.values()):t.options;if(r.every(n=>n._def.typeName in Tb&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,i)=>{let a=Tb[i._def.typeName];return a&&!o.includes(a)?[...o,a]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every(n=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.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===r.length){let o=n.filter((i,a,s)=>s.indexOf(i)===a);return{type:o.length>1?o:o[0],enum:r.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(r.every(n=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter(i=>!n.includes(i))],[])};return xq(t,e)}var xq=(t,e)=>{let r=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((n,o)=>ut(n._def,{...e,currentPath:[...e.currentPath,"anyOf",`${o}`]})).filter(n=>!!n&&(!e.strictUnions||typeof n=="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function _q(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return{type:[Tb[t.innerType._def.typeName],"null"]};let r=ut(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function Iq(t){let e={type:"number"};if(!t.checks)return e;for(let r of t.checks)switch(r.kind){case"int":e.type="integer";break;case"min":r.inclusive?e.minimum=r.value:e.exclusiveMinimum=r.value;break;case"max":r.inclusive?e.maximum=r.value:e.exclusiveMaximum=r.value;break;case"multipleOf":e.multipleOf=r.value;break}return e}function Pq(t,e){let r={type:"object",properties:{}},n=[],o=t.shape();for(let a in o){let s=o[a];if(s===void 0||s._def===void 0)continue;let c=Oq(s),l=ut(s._def,{...e,currentPath:[...e.currentPath,"properties",a],propertyPath:[...e.currentPath,"properties",a]});l!==void 0&&(r.properties[a]=l,c||n.push(a))}n.length&&(r.required=n);let i=Mq(t,e);return i!==void 0&&(r.additionalProperties=i),r}function Mq(t,e){if(t.catchall._def.typeName!=="ZodNever")return ut(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function Oq(t){try{return t.isOptional()}catch{return!0}}var Lq=(t,e)=>{var r;if(e.currentPath.toString()===((r=e.propertyPath)==null?void 0:r.toString()))return ut(t.innerType._def,e);let n=ut(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:un()},n]}:un()},Nq=(t,e)=>{if(e.pipeStrategy==="input")return ut(t.in._def,e);if(e.pipeStrategy==="output")return ut(t.out._def,e);let r=ut(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),n=ut(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter(o=>o!==void 0)}};function Dq(t,e){return ut(t.type._def,e)}function kq(t,e){let n={type:"array",uniqueItems:!0,items:ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&(n.minItems=t.minSize.value),t.maxSize&&(n.maxItems=t.maxSize.value),n}function Uq(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((r,n)=>ut(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:ut(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((r,n)=>ut(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function Fq(){return{not:un()}}function Bq(){return un()}var zq=(t,e)=>ut(t.innerType._def,e),Hq=(t,e,r)=>{switch(e){case He.ZodString:return gP(t,r);case He.ZodNumber:return Iq(t);case He.ZodObject:return Pq(t,r);case He.ZodBigInt:return uq(t);case He.ZodBoolean:return dq();case He.ZodDate:return mP(t,r);case He.ZodUndefined:return Fq();case He.ZodNull:return Cq();case He.ZodArray:return cq(t,r);case He.ZodUnion:case He.ZodDiscriminatedUnion:return wq(t,r);case He.ZodIntersection:return yq(t,r);case He.ZodTuple:return Uq(t,r);case He.ZodRecord:return hP(t,r);case He.ZodLiteral:return bq(t);case He.ZodEnum:return fq(t);case He.ZodNativeEnum:return Aq(t);case He.ZodNullable:return _q(t,r);case He.ZodOptional:return Lq(t,r);case He.ZodMap:return vq(t,r);case He.ZodSet:return kq(t,r);case He.ZodLazy:return()=>t.getter()._def;case He.ZodPromise:return Dq(t,r);case He.ZodNaN:case He.ZodNever:return Rq();case He.ZodEffects:return hq(t,r);case He.ZodAny:return un();case He.ZodUnknown:return Bq();case He.ZodDefault:return gq(t,r);case He.ZodBranded:return pP(t,r);case He.ZodReadonly:return zq(t,r);case He.ZodCatch:return pq(t,r);case He.ZodPipeline:return Nq(t,r);case He.ZodFunction:case He.ZodVoid:case He.ZodSymbol:return;default:return(n=>{})(e)}};function ut(t,e,r=!1){var n;let o=e.seen.get(t);if(e.override){let c=(n=e.override)==null?void 0:n.call(e,t,e,o,r);if(c!==aq)return c}if(o&&!r){let c=jq(o,e);if(c!==void 0)return c}let i={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,i);let a=Hq(t,t.typeName,e),s=typeof a=="function"?ut(a(),e):a;if(s&&Gq(t,e,s),e.postProcess){let c=e.postProcess(s,t,e);return i.jsonSchema=s,c}return i.jsonSchema=s,s}var jq=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:iq(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((r,n)=>e.currentPath[n]===r)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),un()):e.$refStrategy==="seen"?un():void 0}},Gq=(t,e,r)=>(t.description&&(r.description=t.description),r),Vq=t=>{let e=sq(t),r=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,currentPath:r,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}]))}},$q=(t,e)=>{var r;let n=Vq(e),o=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((l,[u,d])=>{var p;return{...l,[u]:(p=ut(d._def,{...n,currentPath:[...n.basePath,n.definitionPath,u]},!0))!=null?p:un()}},{}):void 0,i=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,a=(r=ut(t._def,i===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,i]},!1))!=null?r:un(),s=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;s!==void 0&&(a.title=s);let c=i===void 0?o?{...a,[n.definitionPath]:o}:a:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,i].join("/"),[n.definitionPath]:{...o,[i]:a}};return c.$schema="http://json-schema.org/draft-07/schema#",c},Wq=$q;function qq(t,e){var r;let n=(r=e?.useReferences)!=null?r:!1;return fP(()=>Wq(t,{$refStrategy:n?"root":"none"}),{validate:async o=>{let i=await t.safeParseAsync(o);return i.success?{success:!0,value:i.data}:{success:!1,error:i.error}}})}function Kq(t,e){var r;let n=(r=e?.useReferences)!=null?r:!1;return fP(()=>Wm(Ym.toJSONSchema(t,{target:"draft-7",io:"input",reused:n?"ref":"inline"})),{validate:async o=>{let i=await Ym.safeParseAsync(t,o);return i.success?{success:!0,value:i.data}:{success:!1,error:i.error}}})}function Yq(t){return"_zod"in t}function me(t,e){return Yq(t)?Kq(t,e):qq(t,e)}var Xq=Symbol.for("vercel.ai.schema");function Bt(t){let e;return()=>(e==null&&(e=t()),e)}function fP(t,{validate:e}={}){return{[Xq]:!0,_type:void 0,[Km]:!0,get jsonSchema(){return typeof t=="function"&&(t=t()),t},validate:e}}var{btoa:Jq,atob:Zq}=globalThis;function SP(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=Zq(e);return Uint8Array.from(r,n=>n.codePointAt(0))}function Qq(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCodePoint(t[r]);return Jq(e)}function Vi(t){return t instanceof Uint8Array?Qq(t):t}function yP(t){return t?.replace(/\/$/,"")}import{InvalidResponseDataError as wb}from"@ai-sdk/provider";import{z as $i}from"zod/v4";import{UnsupportedFunctionalityError as Xm}from"@ai-sdk/provider";import{z}from"zod/v4";import{z as Rt}from"zod/v4";import{UnsupportedFunctionalityError as o2}from"@ai-sdk/provider";import{InvalidPromptError as s2,UnsupportedFunctionalityError as EP}from"@ai-sdk/provider";import{z as Te}from"zod/v4";import{z as Ro}from"zod/v4";import{TooManyEmbeddingValuesForCallError as p2}from"@ai-sdk/provider";import{z as _b}from"zod/v4";import{z as Qa}from"zod/v4";import{z as Sr}from"zod/v4";import{z as ir}from"zod/v4";import{z as qe}from"zod/v4";import{z as Ir}from"zod/v4";import{z as pn}from"zod/v4";import{z as et}from"zod/v4";import{z as Wt}from"zod/v4";import{APICallError as V2}from"@ai-sdk/provider";import{UnsupportedFunctionalityError as $2}from"@ai-sdk/provider";import{z as Ib}from"zod/v4";import{z as E}from"zod/v4";import{z as kt}from"zod/v4";import{UnsupportedFunctionalityError as Z2}from"@ai-sdk/provider";import{z as Pb}from"zod/v4";import{z as zt}from"zod/v4";import{z as Wi}from"zod/v4";var Mb=$i.object({error:$i.object({message:$i.string(),type:$i.string().nullish(),param:$i.any().nullish(),code:$i.union([$i.string(),$i.number()]).nullish()})}),Co=uP({errorSchema:Mb,errorToMessage:t=>t.error.message});function IP(t){let e=t.startsWith("o3")||t.startsWith("o4-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-chat"),r=t.startsWith("gpt-4")||t.startsWith("gpt-5-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-nano")&&!t.startsWith("gpt-5-chat")||t.startsWith("o3")||t.startsWith("o4-mini"),n=!(t.startsWith("gpt-3")||t.startsWith("gpt-4")||t.startsWith("chatgpt-4o")||t.startsWith("gpt-5-chat")),o=t.startsWith("gpt-5.1")||t.startsWith("gpt-5.2");return{supportsFlexProcessing:e,supportsPriorityProcessing:r,isReasoningModel:n,systemMessageMode:n?"developer":"system",supportsNonReasoningParameters:o}}function e2({prompt:t,systemMessageMode:e="system"}){let r=[],n=[];for(let{role:o,content:i}of t)switch(o){case"system":{switch(e){case"system":{r.push({role:"system",content:i});break}case"developer":{r.push({role:"developer",content:i});break}case"remove":{n.push({type:"other",message:"system messages are removed for this model"});break}default:{let a=e;throw new Error(`Unsupported system message mode: ${a}`)}}break}case"user":{if(i.length===1&&i[0].type==="text"){r.push({role:"user",content:i[0].text});break}r.push({role:"user",content:i.map((a,s)=>{var c,l,u;switch(a.type){case"text":return{type:"text",text:a.text};case"file":if(a.mediaType.startsWith("image/")){let d=a.mediaType==="image/*"?"image/jpeg":a.mediaType;return{type:"image_url",image_url:{url:a.data instanceof URL?a.data.toString():`data:${d};base64,${Vi(a.data)}`,detail:(l=(c=a.providerOptions)==null?void 0:c.openai)==null?void 0:l.imageDetail}}}else if(a.mediaType.startsWith("audio/")){if(a.data instanceof URL)throw new Xm({functionality:"audio file parts with URLs"});switch(a.mediaType){case"audio/wav":return{type:"input_audio",input_audio:{data:Vi(a.data),format:"wav"}};case"audio/mp3":case"audio/mpeg":return{type:"input_audio",input_audio:{data:Vi(a.data),format:"mp3"}};default:throw new Xm({functionality:`audio content parts with media type ${a.mediaType}`})}}else if(a.mediaType==="application/pdf"){if(a.data instanceof URL)throw new Xm({functionality:"PDF file parts with URLs"});return{type:"file",file:typeof a.data=="string"&&a.data.startsWith("file-")?{file_id:a.data}:{filename:(u=a.filename)!=null?u:`part-${s}.pdf`,file_data:`data:application/pdf;base64,${Vi(a.data)}`}}}else throw new Xm({functionality:`file part media type ${a.mediaType}`})}})});break}case"assistant":{let a="",s=[];for(let c of i)switch(c.type){case"text":{a+=c.text;break}case"tool-call":{s.push({id:c.toolCallId,type:"function",function:{name:c.toolName,arguments:JSON.stringify(c.input)}});break}}r.push({role:"assistant",content:a,tool_calls:s.length>0?s:void 0});break}case"tool":{for(let a of i){let s=a.output,c;switch(s.type){case"text":case"error-text":c=s.value;break;case"content":case"json":case"error-json":c=JSON.stringify(s.value);break}r.push({role:"tool",tool_call_id:a.toolCallId,content:c})}break}default:{let a=o;throw new Error(`Unsupported role: ${a}`)}}return{messages:r,warnings:n}}function xb({id:t,model:e,created:r}){return{id:t??void 0,modelId:e??void 0,timestamp:r?new Date(r*1e3):void 0}}function bP(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"unknown"}}var t2=yt(()=>me(z.object({id:z.string().nullish(),created:z.number().nullish(),model:z.string().nullish(),choices:z.array(z.object({message:z.object({role:z.literal("assistant").nullish(),content:z.string().nullish(),tool_calls:z.array(z.object({id:z.string().nullish(),type:z.literal("function"),function:z.object({name:z.string(),arguments:z.string()})})).nullish(),annotations:z.array(z.object({type:z.literal("url_citation"),url_citation:z.object({start_index:z.number(),end_index:z.number(),url:z.string(),title:z.string()})})).nullish()}),index:z.number(),logprobs:z.object({content:z.array(z.object({token:z.string(),logprob:z.number(),top_logprobs:z.array(z.object({token:z.string(),logprob:z.number()}))})).nullish()}).nullish(),finish_reason:z.string().nullish()})),usage:z.object({prompt_tokens:z.number().nullish(),completion_tokens:z.number().nullish(),total_tokens:z.number().nullish(),prompt_tokens_details:z.object({cached_tokens:z.number().nullish()}).nullish(),completion_tokens_details:z.object({reasoning_tokens:z.number().nullish(),accepted_prediction_tokens:z.number().nullish(),rejected_prediction_tokens:z.number().nullish()}).nullish()}).nullish()}))),r2=yt(()=>me(z.union([z.object({id:z.string().nullish(),created:z.number().nullish(),model:z.string().nullish(),choices:z.array(z.object({delta:z.object({role:z.enum(["assistant"]).nullish(),content:z.string().nullish(),tool_calls:z.array(z.object({index:z.number(),id:z.string().nullish(),type:z.literal("function").nullish(),function:z.object({name:z.string().nullish(),arguments:z.string().nullish()})})).nullish(),annotations:z.array(z.object({type:z.literal("url_citation"),url_citation:z.object({start_index:z.number(),end_index:z.number(),url:z.string(),title:z.string()})})).nullish()}).nullish(),logprobs:z.object({content:z.array(z.object({token:z.string(),logprob:z.number(),top_logprobs:z.array(z.object({token:z.string(),logprob:z.number()}))})).nullish()}).nullish(),finish_reason:z.string().nullish(),index:z.number()})),usage:z.object({prompt_tokens:z.number().nullish(),completion_tokens:z.number().nullish(),total_tokens:z.number().nullish(),prompt_tokens_details:z.object({cached_tokens:z.number().nullish()}).nullish(),completion_tokens_details:z.object({reasoning_tokens:z.number().nullish(),accepted_prediction_tokens:z.number().nullish(),rejected_prediction_tokens:z.number().nullish()}).nullish()}).nullish()}),Mb]))),n2=yt(()=>me(Rt.object({logitBias:Rt.record(Rt.coerce.number(),Rt.number()).optional(),logprobs:Rt.union([Rt.boolean(),Rt.number()]).optional(),parallelToolCalls:Rt.boolean().optional(),user:Rt.string().optional(),reasoningEffort:Rt.enum(["none","minimal","low","medium","high","xhigh"]).optional(),maxCompletionTokens:Rt.number().optional(),store:Rt.boolean().optional(),metadata:Rt.record(Rt.string().max(64),Rt.string().max(512)).optional(),prediction:Rt.record(Rt.string(),Rt.any()).optional(),structuredOutputs:Rt.boolean().optional(),serviceTier:Rt.enum(["auto","flex","priority","default"]).optional(),strictJsonSchema:Rt.boolean().optional(),textVerbosity:Rt.enum(["low","medium","high"]).optional(),promptCacheKey:Rt.string().optional(),promptCacheRetention:Rt.enum(["in_memory","24h"]).optional(),safetyIdentifier:Rt.string().optional()})));function i2({tools:t,toolChoice:e,structuredOutputs:r,strictJsonSchema:n}){t=t?.length?t:void 0;let o=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:o};let i=[];for(let s of t)switch(s.type){case"function":i.push({type:"function",function:{name:s.name,description:s.description,parameters:s.inputSchema,strict:r?n:void 0}});break;default:o.push({type:"unsupported-tool",tool:s});break}if(e==null)return{tools:i,toolChoice:void 0,toolWarnings:o};let a=e.type;switch(a){case"auto":case"none":case"required":return{tools:i,toolChoice:a,toolWarnings:o};case"tool":return{tools:i,toolChoice:{type:"function",function:{name:e.toolName}},toolWarnings:o};default:{let s=a;throw new o2({functionality:`tool choice type: ${s}`})}}}var a2=class{constructor(t,e){this.specificationVersion="v2",this.supportedUrls={"image/*":[/^https?:\/\/.*$/]},this.modelId=t,this.config=e}get provider(){return this.config.provider}async getArgs({prompt:t,maxOutputTokens:e,temperature:r,topP:n,topK:o,frequencyPenalty:i,presencePenalty:a,stopSequences:s,responseFormat:c,seed:l,tools:u,toolChoice:d,providerOptions:p}){var m,h,g,f;let S=[],b=(m=await jr({provider:"openai",providerOptions:p,schema:n2}))!=null?m:{},y=(h=b.structuredOutputs)!=null?h:!0,T=IP(this.modelId);o!=null&&S.push({type:"unsupported-setting",setting:"topK"}),c?.type==="json"&&c.schema!=null&&!y&&S.push({type:"unsupported-setting",setting:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{messages:w,warnings:P}=e2({prompt:t,systemMessageMode:T.systemMessageMode});S.push(...P);let v=(g=b.strictJsonSchema)!=null?g:!1,x={model:this.modelId,logit_bias:b.logitBias,logprobs:b.logprobs===!0||typeof b.logprobs=="number"?!0:void 0,top_logprobs:typeof b.logprobs=="number"?b.logprobs:typeof b.logprobs=="boolean"&&b.logprobs?0:void 0,user:b.user,parallel_tool_calls:b.parallelToolCalls,max_tokens:e,temperature:r,top_p:n,frequency_penalty:i,presence_penalty:a,response_format:c?.type==="json"?y&&c.schema!=null?{type:"json_schema",json_schema:{schema:c.schema,strict:v,name:(f=c.name)!=null?f:"response",description:c.description}}:{type:"json_object"}:void 0,stop:s,seed:l,verbosity:b.textVerbosity,max_completion_tokens:b.maxCompletionTokens,store:b.store,metadata:b.metadata,prediction:b.prediction,reasoning_effort:b.reasoningEffort,service_tier:b.serviceTier,prompt_cache_key:b.promptCacheKey,prompt_cache_retention:b.promptCacheRetention,safety_identifier:b.safetyIdentifier,messages:w};T.isReasoningModel?((b.reasoningEffort!=="none"||!T.supportsNonReasoningParameters)&&(x.temperature!=null&&(x.temperature=void 0,S.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported for reasoning models"})),x.top_p!=null&&(x.top_p=void 0,S.push({type:"unsupported-setting",setting:"topP",details:"topP is not supported for reasoning models"})),x.logprobs!=null&&(x.logprobs=void 0,S.push({type:"other",message:"logprobs is not supported for reasoning models"}))),x.frequency_penalty!=null&&(x.frequency_penalty=void 0,S.push({type:"unsupported-setting",setting:"frequencyPenalty",details:"frequencyPenalty is not supported for reasoning models"})),x.presence_penalty!=null&&(x.presence_penalty=void 0,S.push({type:"unsupported-setting",setting:"presencePenalty",details:"presencePenalty is not supported for reasoning models"})),x.logit_bias!=null&&(x.logit_bias=void 0,S.push({type:"other",message:"logitBias is not supported for reasoning models"})),x.top_logprobs!=null&&(x.top_logprobs=void 0,S.push({type:"other",message:"topLogprobs is not supported for reasoning models"})),x.max_tokens!=null&&(x.max_completion_tokens==null&&(x.max_completion_tokens=x.max_tokens),x.max_tokens=void 0)):(this.modelId.startsWith("gpt-4o-search-preview")||this.modelId.startsWith("gpt-4o-mini-search-preview"))&&x.temperature!=null&&(x.temperature=void 0,S.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported for the search preview models and has been removed."})),b.serviceTier==="flex"&&!T.supportsFlexProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"flex processing is only available for o3, o4-mini, and gpt-5 models"}),x.service_tier=void 0),b.serviceTier==="priority"&&!T.supportsPriorityProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported"}),x.service_tier=void 0);let{tools:O,toolChoice:L,toolWarnings:N}=i2({tools:u,toolChoice:d,structuredOutputs:y,strictJsonSchema:v});return{args:{...x,tools:O,tool_choice:L},warnings:[...S,...N]}}async doGenerate(t){var e,r,n,o,i,a,s,c,l,u,d,p,m,h;let{args:g,warnings:f}=await this.getArgs(t),{responseHeaders:S,value:b,rawValue:y}=await Gr({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:g,failedResponseHandler:Co,successfulResponseHandler:Nn(t2),abortSignal:t.abortSignal,fetch:this.config.fetch}),T=b.choices[0],w=[],P=T.message.content;P!=null&&P.length>0&&w.push({type:"text",text:P});for(let L of(e=T.message.tool_calls)!=null?e:[])w.push({type:"tool-call",toolCallId:(r=L.id)!=null?r:dn(),toolName:L.function.name,input:L.function.arguments});for(let L of(n=T.message.annotations)!=null?n:[])w.push({type:"source",sourceType:"url",id:dn(),url:L.url_citation.url,title:L.url_citation.title});let v=(o=b.usage)==null?void 0:o.completion_tokens_details,x=(i=b.usage)==null?void 0:i.prompt_tokens_details,O={openai:{}};return v?.accepted_prediction_tokens!=null&&(O.openai.acceptedPredictionTokens=v?.accepted_prediction_tokens),v?.rejected_prediction_tokens!=null&&(O.openai.rejectedPredictionTokens=v?.rejected_prediction_tokens),((a=T.logprobs)==null?void 0:a.content)!=null&&(O.openai.logprobs=T.logprobs.content),{content:w,finishReason:bP(T.finish_reason),usage:{inputTokens:(c=(s=b.usage)==null?void 0:s.prompt_tokens)!=null?c:void 0,outputTokens:(u=(l=b.usage)==null?void 0:l.completion_tokens)!=null?u:void 0,totalTokens:(p=(d=b.usage)==null?void 0:d.total_tokens)!=null?p:void 0,reasoningTokens:(m=v?.reasoning_tokens)!=null?m:void 0,cachedInputTokens:(h=x?.cached_tokens)!=null?h:void 0},request:{body:g},response:{...xb(b),headers:S,body:y},warnings:f,providerMetadata:O}}async doStream(t){let{args:e,warnings:r}=await this.getArgs(t),n={...e,stream:!0,stream_options:{include_usage:!0}},{responseHeaders:o,value:i}=await Gr({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:n,failedResponseHandler:Co,successfulResponseHandler:Nl(r2),abortSignal:t.abortSignal,fetch:this.config.fetch}),a=[],s="unknown",c={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},l=!1,u=!1,d={openai:{}};return{stream:i.pipeThrough(new TransformStream({start(p){p.enqueue({type:"stream-start",warnings:r})},transform(p,m){var h,g,f,S,b,y,T,w,P,v,x,O,L,N,F,W,H,de,$,B,ae,ce,_e,be;if(t.includeRawChunks&&m.enqueue({type:"raw",rawValue:p.rawValue}),!p.success){s="error",m.enqueue({type:"error",error:p.error});return}let se=p.value;if("error"in se){s="error",m.enqueue({type:"error",error:se.error});return}if(!l){let Re=xb(se);Object.values(Re).some(Boolean)&&(l=!0,m.enqueue({type:"response-metadata",...xb(se)}))}se.usage!=null&&(c.inputTokens=(h=se.usage.prompt_tokens)!=null?h:void 0,c.outputTokens=(g=se.usage.completion_tokens)!=null?g:void 0,c.totalTokens=(f=se.usage.total_tokens)!=null?f:void 0,c.reasoningTokens=(b=(S=se.usage.completion_tokens_details)==null?void 0:S.reasoning_tokens)!=null?b:void 0,c.cachedInputTokens=(T=(y=se.usage.prompt_tokens_details)==null?void 0:y.cached_tokens)!=null?T:void 0,((w=se.usage.completion_tokens_details)==null?void 0:w.accepted_prediction_tokens)!=null&&(d.openai.acceptedPredictionTokens=(P=se.usage.completion_tokens_details)==null?void 0:P.accepted_prediction_tokens),((v=se.usage.completion_tokens_details)==null?void 0:v.rejected_prediction_tokens)!=null&&(d.openai.rejectedPredictionTokens=(x=se.usage.completion_tokens_details)==null?void 0:x.rejected_prediction_tokens));let Q=se.choices[0];if(Q?.finish_reason!=null&&(s=bP(Q.finish_reason)),((O=Q?.logprobs)==null?void 0:O.content)!=null&&(d.openai.logprobs=Q.logprobs.content),Q?.delta==null)return;let ve=Q.delta;if(ve.content!=null&&(u||(m.enqueue({type:"text-start",id:"0"}),u=!0),m.enqueue({type:"text-delta",id:"0",delta:ve.content})),ve.tool_calls!=null)for(let Re of ve.tool_calls){let _=Re.index;if(a[_]==null){if(Re.type!=="function")throw new wb({data:Re,message:"Expected 'function' type."});if(Re.id==null)throw new wb({data:Re,message:"Expected 'id' to be a string."});if(((L=Re.function)==null?void 0:L.name)==null)throw new wb({data:Re,message:"Expected 'function.name' to be a string."});m.enqueue({type:"tool-input-start",id:Re.id,toolName:Re.function.name}),a[_]={id:Re.id,type:"function",function:{name:Re.function.name,arguments:(N=Re.function.arguments)!=null?N:""},hasFinished:!1};let ge=a[_];((F=ge.function)==null?void 0:F.name)!=null&&((W=ge.function)==null?void 0:W.arguments)!=null&&(ge.function.arguments.length>0&&m.enqueue({type:"tool-input-delta",id:ge.id,delta:ge.function.arguments}),Cb(ge.function.arguments)&&(m.enqueue({type:"tool-input-end",id:ge.id}),m.enqueue({type:"tool-call",toolCallId:(H=ge.id)!=null?H:dn(),toolName:ge.function.name,input:ge.function.arguments}),ge.hasFinished=!0));continue}let oe=a[_];oe.hasFinished||(((de=Re.function)==null?void 0:de.arguments)!=null&&(oe.function.arguments+=(B=($=Re.function)==null?void 0:$.arguments)!=null?B:""),m.enqueue({type:"tool-input-delta",id:oe.id,delta:(ae=Re.function.arguments)!=null?ae:""}),((ce=oe.function)==null?void 0:ce.name)!=null&&((_e=oe.function)==null?void 0:_e.arguments)!=null&&Cb(oe.function.arguments)&&(m.enqueue({type:"tool-input-end",id:oe.id}),m.enqueue({type:"tool-call",toolCallId:(be=oe.id)!=null?be:dn(),toolName:oe.function.name,input:oe.function.arguments}),oe.hasFinished=!0))}if(ve.annotations!=null)for(let Re of ve.annotations)m.enqueue({type:"source",sourceType:"url",id:dn(),url:Re.url_citation.url,title:Re.url_citation.title})},flush(p){u&&p.enqueue({type:"text-end",id:"0"}),p.enqueue({type:"finish",finishReason:s,usage:c,...d!=null?{providerMetadata:d}:{}})}})),request:{body:n},response:{headers:o}}}};function l2({prompt:t,user:e="user",assistant:r="assistant"}){let n="";t[0].role==="system"&&(n+=`${t[0].content}
67
+ ]`;continue}i+=o[l],o[l]==="\\"?a=!0:s&&o[l]==="]"?s=!1:!s&&o[l]==="["&&(s=!0)}try{new RegExp(i)}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`),t.source}return i}function hP(t,e){var r,n,o,i,a,s;let c={type:"object",additionalProperties:(r=ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]}))!=null?r:e.allowedAdditionalProperties};if(((n=t.keyType)==null?void 0:n._def.typeName)===$m.ZodString&&((o=t.keyType._def.checks)!=null&&o.length)){let{type:l,...u}=gP(t.keyType._def,e);return{...c,propertyNames:u}}else{if(((i=t.keyType)==null?void 0:i._def.typeName)===$m.ZodEnum)return{...c,propertyNames:{enum:t.keyType._def.values}};if(((a=t.keyType)==null?void 0:a._def.typeName)===$m.ZodBranded&&t.keyType._def.type._def.typeName===$m.ZodString&&((s=t.keyType._def.type._def.checks)!=null&&s.length)){let{type:l,...u}=pP(t.keyType._def,e);return{...c,propertyNames:u}}}return c}function vq(t,e){if(e.mapStrategy==="record")return hP(t,e);let r=ut(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||un(),n=ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||un();return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function Aq(t){let e=t.values,n=Object.keys(t.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 Rq(){return{not:un()}}function Cq(){return{type:"null"}}var Tb={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function wq(t,e){let r=t.options instanceof Map?Array.from(t.options.values()):t.options;if(r.every(n=>n._def.typeName in Tb&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,i)=>{let a=Tb[i._def.typeName];return a&&!o.includes(a)?[...o,a]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every(n=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.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===r.length){let o=n.filter((i,a,s)=>s.indexOf(i)===a);return{type:o.length>1?o:o[0],enum:r.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(r.every(n=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter(i=>!n.includes(i))],[])};return xq(t,e)}var xq=(t,e)=>{let r=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((n,o)=>ut(n._def,{...e,currentPath:[...e.currentPath,"anyOf",`${o}`]})).filter(n=>!!n&&(!e.strictUnions||typeof n=="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function _q(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return{type:[Tb[t.innerType._def.typeName],"null"]};let r=ut(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function Iq(t){let e={type:"number"};if(!t.checks)return e;for(let r of t.checks)switch(r.kind){case"int":e.type="integer";break;case"min":r.inclusive?e.minimum=r.value:e.exclusiveMinimum=r.value;break;case"max":r.inclusive?e.maximum=r.value:e.exclusiveMaximum=r.value;break;case"multipleOf":e.multipleOf=r.value;break}return e}function Pq(t,e){let r={type:"object",properties:{}},n=[],o=t.shape();for(let a in o){let s=o[a];if(s===void 0||s._def===void 0)continue;let c=Oq(s),l=ut(s._def,{...e,currentPath:[...e.currentPath,"properties",a],propertyPath:[...e.currentPath,"properties",a]});l!==void 0&&(r.properties[a]=l,c||n.push(a))}n.length&&(r.required=n);let i=Mq(t,e);return i!==void 0&&(r.additionalProperties=i),r}function Mq(t,e){if(t.catchall._def.typeName!=="ZodNever")return ut(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function Oq(t){try{return t.isOptional()}catch{return!0}}var Lq=(t,e)=>{var r;if(e.currentPath.toString()===((r=e.propertyPath)==null?void 0:r.toString()))return ut(t.innerType._def,e);let n=ut(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:un()},n]}:un()},Nq=(t,e)=>{if(e.pipeStrategy==="input")return ut(t.in._def,e);if(e.pipeStrategy==="output")return ut(t.out._def,e);let r=ut(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),n=ut(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter(o=>o!==void 0)}};function Dq(t,e){return ut(t.type._def,e)}function kq(t,e){let n={type:"array",uniqueItems:!0,items:ut(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&(n.minItems=t.minSize.value),t.maxSize&&(n.maxItems=t.maxSize.value),n}function Uq(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((r,n)=>ut(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:ut(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((r,n)=>ut(r._def,{...e,currentPath:[...e.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function Fq(){return{not:un()}}function Bq(){return un()}var zq=(t,e)=>ut(t.innerType._def,e),Hq=(t,e,r)=>{switch(e){case ze.ZodString:return gP(t,r);case ze.ZodNumber:return Iq(t);case ze.ZodObject:return Pq(t,r);case ze.ZodBigInt:return uq(t);case ze.ZodBoolean:return dq();case ze.ZodDate:return mP(t,r);case ze.ZodUndefined:return Fq();case ze.ZodNull:return Cq();case ze.ZodArray:return cq(t,r);case ze.ZodUnion:case ze.ZodDiscriminatedUnion:return wq(t,r);case ze.ZodIntersection:return yq(t,r);case ze.ZodTuple:return Uq(t,r);case ze.ZodRecord:return hP(t,r);case ze.ZodLiteral:return bq(t);case ze.ZodEnum:return fq(t);case ze.ZodNativeEnum:return Aq(t);case ze.ZodNullable:return _q(t,r);case ze.ZodOptional:return Lq(t,r);case ze.ZodMap:return vq(t,r);case ze.ZodSet:return kq(t,r);case ze.ZodLazy:return()=>t.getter()._def;case ze.ZodPromise:return Dq(t,r);case ze.ZodNaN:case ze.ZodNever:return Rq();case ze.ZodEffects:return hq(t,r);case ze.ZodAny:return un();case ze.ZodUnknown:return Bq();case ze.ZodDefault:return gq(t,r);case ze.ZodBranded:return pP(t,r);case ze.ZodReadonly:return zq(t,r);case ze.ZodCatch:return pq(t,r);case ze.ZodPipeline:return Nq(t,r);case ze.ZodFunction:case ze.ZodVoid:case ze.ZodSymbol:return;default:return(n=>{})(e)}};function ut(t,e,r=!1){var n;let o=e.seen.get(t);if(e.override){let c=(n=e.override)==null?void 0:n.call(e,t,e,o,r);if(c!==aq)return c}if(o&&!r){let c=jq(o,e);if(c!==void 0)return c}let i={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,i);let a=Hq(t,t.typeName,e),s=typeof a=="function"?ut(a(),e):a;if(s&&Gq(t,e,s),e.postProcess){let c=e.postProcess(s,t,e);return i.jsonSchema=s,c}return i.jsonSchema=s,s}var jq=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:iq(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((r,n)=>e.currentPath[n]===r)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),un()):e.$refStrategy==="seen"?un():void 0}},Gq=(t,e,r)=>(t.description&&(r.description=t.description),r),Vq=t=>{let e=sq(t),r=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,currentPath:r,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}]))}},$q=(t,e)=>{var r;let n=Vq(e),o=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((l,[u,d])=>{var p;return{...l,[u]:(p=ut(d._def,{...n,currentPath:[...n.basePath,n.definitionPath,u]},!0))!=null?p:un()}},{}):void 0,i=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,a=(r=ut(t._def,i===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,i]},!1))!=null?r:un(),s=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;s!==void 0&&(a.title=s);let c=i===void 0?o?{...a,[n.definitionPath]:o}:a:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,i].join("/"),[n.definitionPath]:{...o,[i]:a}};return c.$schema="http://json-schema.org/draft-07/schema#",c},Wq=$q;function qq(t,e){var r;let n=(r=e?.useReferences)!=null?r:!1;return fP(()=>Wq(t,{$refStrategy:n?"root":"none"}),{validate:async o=>{let i=await t.safeParseAsync(o);return i.success?{success:!0,value:i.data}:{success:!1,error:i.error}}})}function Kq(t,e){var r;let n=(r=e?.useReferences)!=null?r:!1;return fP(()=>Wm(Ym.toJSONSchema(t,{target:"draft-7",io:"input",reused:n?"ref":"inline"})),{validate:async o=>{let i=await Ym.safeParseAsync(t,o);return i.success?{success:!0,value:i.data}:{success:!1,error:i.error}}})}function Yq(t){return"_zod"in t}function me(t,e){return Yq(t)?Kq(t,e):qq(t,e)}var Xq=Symbol.for("vercel.ai.schema");function Bt(t){let e;return()=>(e==null&&(e=t()),e)}function fP(t,{validate:e}={}){return{[Xq]:!0,_type:void 0,[Km]:!0,get jsonSchema(){return typeof t=="function"&&(t=t()),t},validate:e}}var{btoa:Jq,atob:Zq}=globalThis;function SP(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=Zq(e);return Uint8Array.from(r,n=>n.codePointAt(0))}function Qq(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCodePoint(t[r]);return Jq(e)}function Vi(t){return t instanceof Uint8Array?Qq(t):t}function yP(t){return t?.replace(/\/$/,"")}import{InvalidResponseDataError as wb}from"@ai-sdk/provider";import{z as $i}from"zod/v4";import{UnsupportedFunctionalityError as Xm}from"@ai-sdk/provider";import{z}from"zod/v4";import{z as Rt}from"zod/v4";import{UnsupportedFunctionalityError as o2}from"@ai-sdk/provider";import{InvalidPromptError as s2,UnsupportedFunctionalityError as EP}from"@ai-sdk/provider";import{z as Te}from"zod/v4";import{z as Ro}from"zod/v4";import{TooManyEmbeddingValuesForCallError as p2}from"@ai-sdk/provider";import{z as _b}from"zod/v4";import{z as Qa}from"zod/v4";import{z as Sr}from"zod/v4";import{z as ir}from"zod/v4";import{z as qe}from"zod/v4";import{z as Ir}from"zod/v4";import{z as pn}from"zod/v4";import{z as et}from"zod/v4";import{z as Wt}from"zod/v4";import{APICallError as V2}from"@ai-sdk/provider";import{UnsupportedFunctionalityError as $2}from"@ai-sdk/provider";import{z as Ib}from"zod/v4";import{z as E}from"zod/v4";import{z as kt}from"zod/v4";import{UnsupportedFunctionalityError as Z2}from"@ai-sdk/provider";import{z as Pb}from"zod/v4";import{z as zt}from"zod/v4";import{z as Wi}from"zod/v4";var Mb=$i.object({error:$i.object({message:$i.string(),type:$i.string().nullish(),param:$i.any().nullish(),code:$i.union([$i.string(),$i.number()]).nullish()})}),Co=uP({errorSchema:Mb,errorToMessage:t=>t.error.message});function IP(t){let e=t.startsWith("o3")||t.startsWith("o4-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-chat"),r=t.startsWith("gpt-4")||t.startsWith("gpt-5-mini")||t.startsWith("gpt-5")&&!t.startsWith("gpt-5-nano")&&!t.startsWith("gpt-5-chat")||t.startsWith("o3")||t.startsWith("o4-mini"),n=!(t.startsWith("gpt-3")||t.startsWith("gpt-4")||t.startsWith("chatgpt-4o")||t.startsWith("gpt-5-chat")),o=t.startsWith("gpt-5.1")||t.startsWith("gpt-5.2");return{supportsFlexProcessing:e,supportsPriorityProcessing:r,isReasoningModel:n,systemMessageMode:n?"developer":"system",supportsNonReasoningParameters:o}}function e2({prompt:t,systemMessageMode:e="system"}){let r=[],n=[];for(let{role:o,content:i}of t)switch(o){case"system":{switch(e){case"system":{r.push({role:"system",content:i});break}case"developer":{r.push({role:"developer",content:i});break}case"remove":{n.push({type:"other",message:"system messages are removed for this model"});break}default:{let a=e;throw new Error(`Unsupported system message mode: ${a}`)}}break}case"user":{if(i.length===1&&i[0].type==="text"){r.push({role:"user",content:i[0].text});break}r.push({role:"user",content:i.map((a,s)=>{var c,l,u;switch(a.type){case"text":return{type:"text",text:a.text};case"file":if(a.mediaType.startsWith("image/")){let d=a.mediaType==="image/*"?"image/jpeg":a.mediaType;return{type:"image_url",image_url:{url:a.data instanceof URL?a.data.toString():`data:${d};base64,${Vi(a.data)}`,detail:(l=(c=a.providerOptions)==null?void 0:c.openai)==null?void 0:l.imageDetail}}}else if(a.mediaType.startsWith("audio/")){if(a.data instanceof URL)throw new Xm({functionality:"audio file parts with URLs"});switch(a.mediaType){case"audio/wav":return{type:"input_audio",input_audio:{data:Vi(a.data),format:"wav"}};case"audio/mp3":case"audio/mpeg":return{type:"input_audio",input_audio:{data:Vi(a.data),format:"mp3"}};default:throw new Xm({functionality:`audio content parts with media type ${a.mediaType}`})}}else if(a.mediaType==="application/pdf"){if(a.data instanceof URL)throw new Xm({functionality:"PDF file parts with URLs"});return{type:"file",file:typeof a.data=="string"&&a.data.startsWith("file-")?{file_id:a.data}:{filename:(u=a.filename)!=null?u:`part-${s}.pdf`,file_data:`data:application/pdf;base64,${Vi(a.data)}`}}}else throw new Xm({functionality:`file part media type ${a.mediaType}`})}})});break}case"assistant":{let a="",s=[];for(let c of i)switch(c.type){case"text":{a+=c.text;break}case"tool-call":{s.push({id:c.toolCallId,type:"function",function:{name:c.toolName,arguments:JSON.stringify(c.input)}});break}}r.push({role:"assistant",content:a,tool_calls:s.length>0?s:void 0});break}case"tool":{for(let a of i){let s=a.output,c;switch(s.type){case"text":case"error-text":c=s.value;break;case"content":case"json":case"error-json":c=JSON.stringify(s.value);break}r.push({role:"tool",tool_call_id:a.toolCallId,content:c})}break}default:{let a=o;throw new Error(`Unsupported role: ${a}`)}}return{messages:r,warnings:n}}function xb({id:t,model:e,created:r}){return{id:t??void 0,modelId:e??void 0,timestamp:r?new Date(r*1e3):void 0}}function bP(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"unknown"}}var t2=yt(()=>me(z.object({id:z.string().nullish(),created:z.number().nullish(),model:z.string().nullish(),choices:z.array(z.object({message:z.object({role:z.literal("assistant").nullish(),content:z.string().nullish(),tool_calls:z.array(z.object({id:z.string().nullish(),type:z.literal("function"),function:z.object({name:z.string(),arguments:z.string()})})).nullish(),annotations:z.array(z.object({type:z.literal("url_citation"),url_citation:z.object({start_index:z.number(),end_index:z.number(),url:z.string(),title:z.string()})})).nullish()}),index:z.number(),logprobs:z.object({content:z.array(z.object({token:z.string(),logprob:z.number(),top_logprobs:z.array(z.object({token:z.string(),logprob:z.number()}))})).nullish()}).nullish(),finish_reason:z.string().nullish()})),usage:z.object({prompt_tokens:z.number().nullish(),completion_tokens:z.number().nullish(),total_tokens:z.number().nullish(),prompt_tokens_details:z.object({cached_tokens:z.number().nullish()}).nullish(),completion_tokens_details:z.object({reasoning_tokens:z.number().nullish(),accepted_prediction_tokens:z.number().nullish(),rejected_prediction_tokens:z.number().nullish()}).nullish()}).nullish()}))),r2=yt(()=>me(z.union([z.object({id:z.string().nullish(),created:z.number().nullish(),model:z.string().nullish(),choices:z.array(z.object({delta:z.object({role:z.enum(["assistant"]).nullish(),content:z.string().nullish(),tool_calls:z.array(z.object({index:z.number(),id:z.string().nullish(),type:z.literal("function").nullish(),function:z.object({name:z.string().nullish(),arguments:z.string().nullish()})})).nullish(),annotations:z.array(z.object({type:z.literal("url_citation"),url_citation:z.object({start_index:z.number(),end_index:z.number(),url:z.string(),title:z.string()})})).nullish()}).nullish(),logprobs:z.object({content:z.array(z.object({token:z.string(),logprob:z.number(),top_logprobs:z.array(z.object({token:z.string(),logprob:z.number()}))})).nullish()}).nullish(),finish_reason:z.string().nullish(),index:z.number()})),usage:z.object({prompt_tokens:z.number().nullish(),completion_tokens:z.number().nullish(),total_tokens:z.number().nullish(),prompt_tokens_details:z.object({cached_tokens:z.number().nullish()}).nullish(),completion_tokens_details:z.object({reasoning_tokens:z.number().nullish(),accepted_prediction_tokens:z.number().nullish(),rejected_prediction_tokens:z.number().nullish()}).nullish()}).nullish()}),Mb]))),n2=yt(()=>me(Rt.object({logitBias:Rt.record(Rt.coerce.number(),Rt.number()).optional(),logprobs:Rt.union([Rt.boolean(),Rt.number()]).optional(),parallelToolCalls:Rt.boolean().optional(),user:Rt.string().optional(),reasoningEffort:Rt.enum(["none","minimal","low","medium","high","xhigh"]).optional(),maxCompletionTokens:Rt.number().optional(),store:Rt.boolean().optional(),metadata:Rt.record(Rt.string().max(64),Rt.string().max(512)).optional(),prediction:Rt.record(Rt.string(),Rt.any()).optional(),structuredOutputs:Rt.boolean().optional(),serviceTier:Rt.enum(["auto","flex","priority","default"]).optional(),strictJsonSchema:Rt.boolean().optional(),textVerbosity:Rt.enum(["low","medium","high"]).optional(),promptCacheKey:Rt.string().optional(),promptCacheRetention:Rt.enum(["in_memory","24h"]).optional(),safetyIdentifier:Rt.string().optional()})));function i2({tools:t,toolChoice:e,structuredOutputs:r,strictJsonSchema:n}){t=t?.length?t:void 0;let o=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:o};let i=[];for(let s of t)switch(s.type){case"function":i.push({type:"function",function:{name:s.name,description:s.description,parameters:s.inputSchema,strict:r?n:void 0}});break;default:o.push({type:"unsupported-tool",tool:s});break}if(e==null)return{tools:i,toolChoice:void 0,toolWarnings:o};let a=e.type;switch(a){case"auto":case"none":case"required":return{tools:i,toolChoice:a,toolWarnings:o};case"tool":return{tools:i,toolChoice:{type:"function",function:{name:e.toolName}},toolWarnings:o};default:{let s=a;throw new o2({functionality:`tool choice type: ${s}`})}}}var a2=class{constructor(t,e){this.specificationVersion="v2",this.supportedUrls={"image/*":[/^https?:\/\/.*$/]},this.modelId=t,this.config=e}get provider(){return this.config.provider}async getArgs({prompt:t,maxOutputTokens:e,temperature:r,topP:n,topK:o,frequencyPenalty:i,presencePenalty:a,stopSequences:s,responseFormat:c,seed:l,tools:u,toolChoice:d,providerOptions:p}){var m,h,g,f;let S=[],b=(m=await jr({provider:"openai",providerOptions:p,schema:n2}))!=null?m:{},y=(h=b.structuredOutputs)!=null?h:!0,T=IP(this.modelId);o!=null&&S.push({type:"unsupported-setting",setting:"topK"}),c?.type==="json"&&c.schema!=null&&!y&&S.push({type:"unsupported-setting",setting:"responseFormat",details:"JSON response format schema is only supported with structuredOutputs"});let{messages:w,warnings:P}=e2({prompt:t,systemMessageMode:T.systemMessageMode});S.push(...P);let v=(g=b.strictJsonSchema)!=null?g:!1,x={model:this.modelId,logit_bias:b.logitBias,logprobs:b.logprobs===!0||typeof b.logprobs=="number"?!0:void 0,top_logprobs:typeof b.logprobs=="number"?b.logprobs:typeof b.logprobs=="boolean"&&b.logprobs?0:void 0,user:b.user,parallel_tool_calls:b.parallelToolCalls,max_tokens:e,temperature:r,top_p:n,frequency_penalty:i,presence_penalty:a,response_format:c?.type==="json"?y&&c.schema!=null?{type:"json_schema",json_schema:{schema:c.schema,strict:v,name:(f=c.name)!=null?f:"response",description:c.description}}:{type:"json_object"}:void 0,stop:s,seed:l,verbosity:b.textVerbosity,max_completion_tokens:b.maxCompletionTokens,store:b.store,metadata:b.metadata,prediction:b.prediction,reasoning_effort:b.reasoningEffort,service_tier:b.serviceTier,prompt_cache_key:b.promptCacheKey,prompt_cache_retention:b.promptCacheRetention,safety_identifier:b.safetyIdentifier,messages:w};T.isReasoningModel?((b.reasoningEffort!=="none"||!T.supportsNonReasoningParameters)&&(x.temperature!=null&&(x.temperature=void 0,S.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported for reasoning models"})),x.top_p!=null&&(x.top_p=void 0,S.push({type:"unsupported-setting",setting:"topP",details:"topP is not supported for reasoning models"})),x.logprobs!=null&&(x.logprobs=void 0,S.push({type:"other",message:"logprobs is not supported for reasoning models"}))),x.frequency_penalty!=null&&(x.frequency_penalty=void 0,S.push({type:"unsupported-setting",setting:"frequencyPenalty",details:"frequencyPenalty is not supported for reasoning models"})),x.presence_penalty!=null&&(x.presence_penalty=void 0,S.push({type:"unsupported-setting",setting:"presencePenalty",details:"presencePenalty is not supported for reasoning models"})),x.logit_bias!=null&&(x.logit_bias=void 0,S.push({type:"other",message:"logitBias is not supported for reasoning models"})),x.top_logprobs!=null&&(x.top_logprobs=void 0,S.push({type:"other",message:"topLogprobs is not supported for reasoning models"})),x.max_tokens!=null&&(x.max_completion_tokens==null&&(x.max_completion_tokens=x.max_tokens),x.max_tokens=void 0)):(this.modelId.startsWith("gpt-4o-search-preview")||this.modelId.startsWith("gpt-4o-mini-search-preview"))&&x.temperature!=null&&(x.temperature=void 0,S.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported for the search preview models and has been removed."})),b.serviceTier==="flex"&&!T.supportsFlexProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"flex processing is only available for o3, o4-mini, and gpt-5 models"}),x.service_tier=void 0),b.serviceTier==="priority"&&!T.supportsPriorityProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported"}),x.service_tier=void 0);let{tools:O,toolChoice:L,toolWarnings:N}=i2({tools:u,toolChoice:d,structuredOutputs:y,strictJsonSchema:v});return{args:{...x,tools:O,tool_choice:L},warnings:[...S,...N]}}async doGenerate(t){var e,r,n,o,i,a,s,c,l,u,d,p,m,h;let{args:g,warnings:f}=await this.getArgs(t),{responseHeaders:S,value:b,rawValue:y}=await Gr({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:g,failedResponseHandler:Co,successfulResponseHandler:Nn(t2),abortSignal:t.abortSignal,fetch:this.config.fetch}),T=b.choices[0],w=[],P=T.message.content;P!=null&&P.length>0&&w.push({type:"text",text:P});for(let L of(e=T.message.tool_calls)!=null?e:[])w.push({type:"tool-call",toolCallId:(r=L.id)!=null?r:dn(),toolName:L.function.name,input:L.function.arguments});for(let L of(n=T.message.annotations)!=null?n:[])w.push({type:"source",sourceType:"url",id:dn(),url:L.url_citation.url,title:L.url_citation.title});let v=(o=b.usage)==null?void 0:o.completion_tokens_details,x=(i=b.usage)==null?void 0:i.prompt_tokens_details,O={openai:{}};return v?.accepted_prediction_tokens!=null&&(O.openai.acceptedPredictionTokens=v?.accepted_prediction_tokens),v?.rejected_prediction_tokens!=null&&(O.openai.rejectedPredictionTokens=v?.rejected_prediction_tokens),((a=T.logprobs)==null?void 0:a.content)!=null&&(O.openai.logprobs=T.logprobs.content),{content:w,finishReason:bP(T.finish_reason),usage:{inputTokens:(c=(s=b.usage)==null?void 0:s.prompt_tokens)!=null?c:void 0,outputTokens:(u=(l=b.usage)==null?void 0:l.completion_tokens)!=null?u:void 0,totalTokens:(p=(d=b.usage)==null?void 0:d.total_tokens)!=null?p:void 0,reasoningTokens:(m=v?.reasoning_tokens)!=null?m:void 0,cachedInputTokens:(h=x?.cached_tokens)!=null?h:void 0},request:{body:g},response:{...xb(b),headers:S,body:y},warnings:f,providerMetadata:O}}async doStream(t){let{args:e,warnings:r}=await this.getArgs(t),n={...e,stream:!0,stream_options:{include_usage:!0}},{responseHeaders:o,value:i}=await Gr({url:this.config.url({path:"/chat/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:n,failedResponseHandler:Co,successfulResponseHandler:Nl(r2),abortSignal:t.abortSignal,fetch:this.config.fetch}),a=[],s="unknown",c={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},l=!1,u=!1,d={openai:{}};return{stream:i.pipeThrough(new TransformStream({start(p){p.enqueue({type:"stream-start",warnings:r})},transform(p,m){var h,g,f,S,b,y,T,w,P,v,x,O,L,N,F,W,H,de,$,B,ae,ce,_e,be;if(t.includeRawChunks&&m.enqueue({type:"raw",rawValue:p.rawValue}),!p.success){s="error",m.enqueue({type:"error",error:p.error});return}let se=p.value;if("error"in se){s="error",m.enqueue({type:"error",error:se.error});return}if(!l){let Re=xb(se);Object.values(Re).some(Boolean)&&(l=!0,m.enqueue({type:"response-metadata",...xb(se)}))}se.usage!=null&&(c.inputTokens=(h=se.usage.prompt_tokens)!=null?h:void 0,c.outputTokens=(g=se.usage.completion_tokens)!=null?g:void 0,c.totalTokens=(f=se.usage.total_tokens)!=null?f:void 0,c.reasoningTokens=(b=(S=se.usage.completion_tokens_details)==null?void 0:S.reasoning_tokens)!=null?b:void 0,c.cachedInputTokens=(T=(y=se.usage.prompt_tokens_details)==null?void 0:y.cached_tokens)!=null?T:void 0,((w=se.usage.completion_tokens_details)==null?void 0:w.accepted_prediction_tokens)!=null&&(d.openai.acceptedPredictionTokens=(P=se.usage.completion_tokens_details)==null?void 0:P.accepted_prediction_tokens),((v=se.usage.completion_tokens_details)==null?void 0:v.rejected_prediction_tokens)!=null&&(d.openai.rejectedPredictionTokens=(x=se.usage.completion_tokens_details)==null?void 0:x.rejected_prediction_tokens));let Q=se.choices[0];if(Q?.finish_reason!=null&&(s=bP(Q.finish_reason)),((O=Q?.logprobs)==null?void 0:O.content)!=null&&(d.openai.logprobs=Q.logprobs.content),Q?.delta==null)return;let ve=Q.delta;if(ve.content!=null&&(u||(m.enqueue({type:"text-start",id:"0"}),u=!0),m.enqueue({type:"text-delta",id:"0",delta:ve.content})),ve.tool_calls!=null)for(let Re of ve.tool_calls){let _=Re.index;if(a[_]==null){if(Re.type!=="function")throw new wb({data:Re,message:"Expected 'function' type."});if(Re.id==null)throw new wb({data:Re,message:"Expected 'id' to be a string."});if(((L=Re.function)==null?void 0:L.name)==null)throw new wb({data:Re,message:"Expected 'function.name' to be a string."});m.enqueue({type:"tool-input-start",id:Re.id,toolName:Re.function.name}),a[_]={id:Re.id,type:"function",function:{name:Re.function.name,arguments:(N=Re.function.arguments)!=null?N:""},hasFinished:!1};let ge=a[_];((F=ge.function)==null?void 0:F.name)!=null&&((W=ge.function)==null?void 0:W.arguments)!=null&&(ge.function.arguments.length>0&&m.enqueue({type:"tool-input-delta",id:ge.id,delta:ge.function.arguments}),Cb(ge.function.arguments)&&(m.enqueue({type:"tool-input-end",id:ge.id}),m.enqueue({type:"tool-call",toolCallId:(H=ge.id)!=null?H:dn(),toolName:ge.function.name,input:ge.function.arguments}),ge.hasFinished=!0));continue}let oe=a[_];oe.hasFinished||(((de=Re.function)==null?void 0:de.arguments)!=null&&(oe.function.arguments+=(B=($=Re.function)==null?void 0:$.arguments)!=null?B:""),m.enqueue({type:"tool-input-delta",id:oe.id,delta:(ae=Re.function.arguments)!=null?ae:""}),((ce=oe.function)==null?void 0:ce.name)!=null&&((_e=oe.function)==null?void 0:_e.arguments)!=null&&Cb(oe.function.arguments)&&(m.enqueue({type:"tool-input-end",id:oe.id}),m.enqueue({type:"tool-call",toolCallId:(be=oe.id)!=null?be:dn(),toolName:oe.function.name,input:oe.function.arguments}),oe.hasFinished=!0))}if(ve.annotations!=null)for(let Re of ve.annotations)m.enqueue({type:"source",sourceType:"url",id:dn(),url:Re.url_citation.url,title:Re.url_citation.title})},flush(p){u&&p.enqueue({type:"text-end",id:"0"}),p.enqueue({type:"finish",finishReason:s,usage:c,...d!=null?{providerMetadata:d}:{}})}})),request:{body:n},response:{headers:o}}}};function l2({prompt:t,user:e="user",assistant:r="assistant"}){let n="";t[0].role==="system"&&(n+=`${t[0].content}
68
68
 
69
69
  `,t=t.slice(1));for(let{role:o,content:i}of t)switch(o){case"system":throw new s2({message:"Unexpected system message in prompt: ${content}",prompt:t});case"user":{let a=i.map(s=>{switch(s.type){case"text":return s.text}}).filter(Boolean).join("");n+=`${e}:
70
70
  ${a}
@@ -75,7 +75,7 @@ ${a}
75
75
  `;break}case"tool":throw new EP({functionality:"tool messages"});default:{let a=o;throw new Error(`Unsupported role: ${a}`)}}return n+=`${r}:
76
76
  `,{prompt:n,stopSequences:[`
77
77
  ${e}:`]}}function TP({id:t,model:e,created:r}){return{id:t??void 0,modelId:e??void 0,timestamp:r!=null?new Date(r*1e3):void 0}}function vP(t){switch(t){case"stop":return"stop";case"length":return"length";case"content_filter":return"content-filter";case"function_call":case"tool_calls":return"tool-calls";default:return"unknown"}}var c2=yt(()=>me(Te.object({id:Te.string().nullish(),created:Te.number().nullish(),model:Te.string().nullish(),choices:Te.array(Te.object({text:Te.string(),finish_reason:Te.string(),logprobs:Te.object({tokens:Te.array(Te.string()),token_logprobs:Te.array(Te.number()),top_logprobs:Te.array(Te.record(Te.string(),Te.number())).nullish()}).nullish()})),usage:Te.object({prompt_tokens:Te.number(),completion_tokens:Te.number(),total_tokens:Te.number()}).nullish()}))),u2=yt(()=>me(Te.union([Te.object({id:Te.string().nullish(),created:Te.number().nullish(),model:Te.string().nullish(),choices:Te.array(Te.object({text:Te.string(),finish_reason:Te.string().nullish(),index:Te.number(),logprobs:Te.object({tokens:Te.array(Te.string()),token_logprobs:Te.array(Te.number()),top_logprobs:Te.array(Te.record(Te.string(),Te.number())).nullish()}).nullish()})),usage:Te.object({prompt_tokens:Te.number(),completion_tokens:Te.number(),total_tokens:Te.number()}).nullish()}),Mb]))),AP=yt(()=>me(Ro.object({echo:Ro.boolean().optional(),logitBias:Ro.record(Ro.string(),Ro.number()).optional(),suffix:Ro.string().optional(),user:Ro.string().optional(),logprobs:Ro.union([Ro.boolean(),Ro.number()]).optional()}))),d2=class{constructor(t,e){this.specificationVersion="v2",this.supportedUrls={},this.modelId=t,this.config=e}get providerOptionsName(){return this.config.provider.split(".")[0].trim()}get provider(){return this.config.provider}async getArgs({prompt:t,maxOutputTokens:e,temperature:r,topP:n,topK:o,frequencyPenalty:i,presencePenalty:a,stopSequences:s,responseFormat:c,tools:l,toolChoice:u,seed:d,providerOptions:p}){let m=[],h={...await jr({provider:"openai",providerOptions:p,schema:AP}),...await jr({provider:this.providerOptionsName,providerOptions:p,schema:AP})};o!=null&&m.push({type:"unsupported-setting",setting:"topK"}),l?.length&&m.push({type:"unsupported-setting",setting:"tools"}),u!=null&&m.push({type:"unsupported-setting",setting:"toolChoice"}),c!=null&&c.type!=="text"&&m.push({type:"unsupported-setting",setting:"responseFormat",details:"JSON response format is not supported."});let{prompt:g,stopSequences:f}=l2({prompt:t}),S=[...f??[],...s??[]];return{args:{model:this.modelId,echo:h.echo,logit_bias:h.logitBias,logprobs:h?.logprobs===!0?0:h?.logprobs===!1?void 0:h?.logprobs,suffix:h.suffix,user:h.user,max_tokens:e,temperature:r,top_p:n,frequency_penalty:i,presence_penalty:a,seed:d,prompt:g,stop:S.length>0?S:void 0},warnings:m}}async doGenerate(t){var e,r,n;let{args:o,warnings:i}=await this.getArgs(t),{responseHeaders:a,value:s,rawValue:c}=await Gr({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:o,failedResponseHandler:Co,successfulResponseHandler:Nn(c2),abortSignal:t.abortSignal,fetch:this.config.fetch}),l=s.choices[0],u={openai:{}};return l.logprobs!=null&&(u.openai.logprobs=l.logprobs),{content:[{type:"text",text:l.text}],usage:{inputTokens:(e=s.usage)==null?void 0:e.prompt_tokens,outputTokens:(r=s.usage)==null?void 0:r.completion_tokens,totalTokens:(n=s.usage)==null?void 0:n.total_tokens},finishReason:vP(l.finish_reason),request:{body:o},response:{...TP(s),headers:a,body:c},providerMetadata:u,warnings:i}}async doStream(t){let{args:e,warnings:r}=await this.getArgs(t),n={...e,stream:!0,stream_options:{include_usage:!0}},{responseHeaders:o,value:i}=await Gr({url:this.config.url({path:"/completions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:n,failedResponseHandler:Co,successfulResponseHandler:Nl(u2),abortSignal:t.abortSignal,fetch:this.config.fetch}),a="unknown",s={openai:{}},c={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},l=!0;return{stream:i.pipeThrough(new TransformStream({start(u){u.enqueue({type:"stream-start",warnings:r})},transform(u,d){if(t.includeRawChunks&&d.enqueue({type:"raw",rawValue:u.rawValue}),!u.success){a="error",d.enqueue({type:"error",error:u.error});return}let p=u.value;if("error"in p){a="error",d.enqueue({type:"error",error:p.error});return}l&&(l=!1,d.enqueue({type:"response-metadata",...TP(p)}),d.enqueue({type:"text-start",id:"0"})),p.usage!=null&&(c.inputTokens=p.usage.prompt_tokens,c.outputTokens=p.usage.completion_tokens,c.totalTokens=p.usage.total_tokens);let m=p.choices[0];m?.finish_reason!=null&&(a=vP(m.finish_reason)),m?.logprobs!=null&&(s.openai.logprobs=m.logprobs),m?.text!=null&&m.text.length>0&&d.enqueue({type:"text-delta",id:"0",delta:m.text})},flush(u){l||u.enqueue({type:"text-end",id:"0"}),u.enqueue({type:"finish",finishReason:a,providerMetadata:s,usage:c})}})),request:{body:n},response:{headers:o}}}},m2=yt(()=>me(_b.object({dimensions:_b.number().optional(),user:_b.string().optional()}))),g2=yt(()=>me(Qa.object({data:Qa.array(Qa.object({embedding:Qa.array(Qa.number())})),usage:Qa.object({prompt_tokens:Qa.number()}).nullish()}))),h2=class{constructor(t,e){this.specificationVersion="v2",this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0,this.modelId=t,this.config=e}get provider(){return this.config.provider}async doEmbed({values:t,headers:e,abortSignal:r,providerOptions:n}){var o;if(t.length>this.maxEmbeddingsPerCall)throw new p2({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values:t});let i=(o=await jr({provider:"openai",providerOptions:n,schema:m2}))!=null?o:{},{responseHeaders:a,value:s,rawValue:c}=await Gr({url:this.config.url({path:"/embeddings",modelId:this.modelId}),headers:fr(this.config.headers(),e),body:{model:this.modelId,input:t,encoding_format:"float",dimensions:i.dimensions,user:i.user},failedResponseHandler:Co,successfulResponseHandler:Nn(g2),abortSignal:r,fetch:this.config.fetch});return{embeddings:s.data.map(l=>l.embedding),usage:s.usage?{tokens:s.usage.prompt_tokens}:void 0,response:{headers:a,body:c}}}},f2=yt(()=>me(Sr.object({created:Sr.number().nullish(),data:Sr.array(Sr.object({b64_json:Sr.string(),revised_prompt:Sr.string().nullish()})),background:Sr.string().nullish(),output_format:Sr.string().nullish(),size:Sr.string().nullish(),quality:Sr.string().nullish(),usage:Sr.object({input_tokens:Sr.number().nullish(),output_tokens:Sr.number().nullish(),total_tokens:Sr.number().nullish(),input_tokens_details:Sr.object({image_tokens:Sr.number().nullish(),text_tokens:Sr.number().nullish()}).nullish()}).nullish()}))),S2={"dall-e-3":1,"dall-e-2":10,"gpt-image-1":10,"gpt-image-1-mini":10,"gpt-image-1.5":10},y2=new Set(["gpt-image-1","gpt-image-1-mini","gpt-image-1.5"]),b2=class{constructor(t,e){this.modelId=t,this.config=e,this.specificationVersion="v2"}get maxImagesPerCall(){var t;return(t=S2[this.modelId])!=null?t:1}get provider(){return this.config.provider}async doGenerate({prompt:t,n:e,size:r,aspectRatio:n,seed:o,providerOptions:i,headers:a,abortSignal:s}){var c,l,u,d;let p=[];n!=null&&p.push({type:"unsupported-setting",setting:"aspectRatio",details:"This model does not support aspect ratio. Use `size` instead."}),o!=null&&p.push({type:"unsupported-setting",setting:"seed"});let m=(u=(l=(c=this.config._internal)==null?void 0:c.currentDate)==null?void 0:l.call(c))!=null?u:new Date,{value:h,responseHeaders:g}=await Gr({url:this.config.url({path:"/images/generations",modelId:this.modelId}),headers:fr(this.config.headers(),a),body:{model:this.modelId,prompt:t,n:e,size:r,...(d=i.openai)!=null?d:{},...y2.has(this.modelId)?{}:{response_format:"b64_json"}},failedResponseHandler:Co,successfulResponseHandler:Nn(f2),abortSignal:s,fetch:this.config.fetch});return{images:h.data.map(f=>f.b64_json),warnings:p,response:{timestamp:m,modelId:this.modelId,headers:g},providerMetadata:{openai:{images:h.data.map(f=>({...f.revised_prompt?{revisedPrompt:f.revised_prompt}:{},...h.created!=null?{created:h.created}:{},...h.size!=null?{size:h.size}:{},...h.quality!=null?{quality:h.quality}:{},...h.background!=null?{background:h.background}:{},...h.output_format!=null?{outputFormat:h.output_format}:{}}))}}}}},E2=Bt(()=>me(ir.object({code:ir.string().nullish(),containerId:ir.string()}))),T2=Bt(()=>me(ir.object({outputs:ir.array(ir.discriminatedUnion("type",[ir.object({type:ir.literal("logs"),logs:ir.string()}),ir.object({type:ir.literal("image"),url:ir.string()})])).nullish()}))),v2=Bt(()=>me(ir.object({container:ir.union([ir.string(),ir.object({fileIds:ir.array(ir.string()).optional()})]).optional()}))),A2=Ln({id:"openai.code_interpreter",name:"code_interpreter",inputSchema:E2,outputSchema:T2}),R2=(t={})=>A2(t),PP=qe.object({key:qe.string(),type:qe.enum(["eq","ne","gt","gte","lt","lte","in","nin"]),value:qe.union([qe.string(),qe.number(),qe.boolean(),qe.array(qe.string())])}),MP=qe.object({type:qe.enum(["and","or"]),filters:qe.array(qe.union([PP,qe.lazy(()=>MP)]))}),C2=Bt(()=>me(qe.object({vectorStoreIds:qe.array(qe.string()),maxNumResults:qe.number().optional(),ranking:qe.object({ranker:qe.string().optional(),scoreThreshold:qe.number().optional()}).optional(),filters:qe.union([PP,MP]).optional()}))),w2=Bt(()=>me(qe.object({queries:qe.array(qe.string()),results:qe.array(qe.object({attributes:qe.record(qe.string(),qe.unknown()),fileId:qe.string(),filename:qe.string(),score:qe.number(),text:qe.string()})).nullable()}))),x2=Ln({id:"openai.file_search",name:"file_search",inputSchema:qe.object({}),outputSchema:w2}),_2=Bt(()=>me(Ir.object({background:Ir.enum(["auto","opaque","transparent"]).optional(),inputFidelity:Ir.enum(["low","high"]).optional(),inputImageMask:Ir.object({fileId:Ir.string().optional(),imageUrl:Ir.string().optional()}).optional(),model:Ir.string().optional(),moderation:Ir.enum(["auto"]).optional(),outputCompression:Ir.number().int().min(0).max(100).optional(),outputFormat:Ir.enum(["png","jpeg","webp"]).optional(),partialImages:Ir.number().int().min(0).max(3).optional(),quality:Ir.enum(["auto","low","medium","high"]).optional(),size:Ir.enum(["1024x1024","1024x1536","1536x1024","auto"]).optional()}).strict())),I2=Bt(()=>me(Ir.object({}))),P2=Bt(()=>me(Ir.object({result:Ir.string()}))),M2=Ln({id:"openai.image_generation",name:"image_generation",inputSchema:I2,outputSchema:P2}),O2=(t={})=>M2(t),OP=Bt(()=>me(pn.object({action:pn.object({type:pn.literal("exec"),command:pn.array(pn.string()),timeoutMs:pn.number().optional(),user:pn.string().optional(),workingDirectory:pn.string().optional(),env:pn.record(pn.string(),pn.string()).optional()})}))),LP=Bt(()=>me(pn.object({output:pn.string()}))),L2=Ln({id:"openai.local_shell",name:"local_shell",inputSchema:OP,outputSchema:LP}),N2=Bt(()=>me(et.object({externalWebAccess:et.boolean().optional(),filters:et.object({allowedDomains:et.array(et.string()).optional()}).optional(),searchContextSize:et.enum(["low","medium","high"]).optional(),userLocation:et.object({type:et.literal("approximate"),country:et.string().optional(),city:et.string().optional(),region:et.string().optional(),timezone:et.string().optional()}).optional()}))),D2=Bt(()=>me(et.object({}))),k2=Bt(()=>me(et.object({action:et.discriminatedUnion("type",[et.object({type:et.literal("search"),query:et.string().optional()}),et.object({type:et.literal("openPage"),url:et.string().nullish()}),et.object({type:et.literal("findInPage"),url:et.string().nullish(),pattern:et.string().nullish()})]),sources:et.array(et.discriminatedUnion("type",[et.object({type:et.literal("url"),url:et.string()}),et.object({type:et.literal("api"),name:et.string()})])).optional()}))),U2=Ln({id:"openai.web_search",name:"web_search",inputSchema:D2,outputSchema:k2}),F2=(t={})=>U2(t),B2=Bt(()=>me(Wt.object({searchContextSize:Wt.enum(["low","medium","high"]).optional(),userLocation:Wt.object({type:Wt.literal("approximate"),country:Wt.string().optional(),city:Wt.string().optional(),region:Wt.string().optional(),timezone:Wt.string().optional()}).optional()}))),z2=Bt(()=>me(Wt.object({}))),H2=Bt(()=>me(Wt.object({action:Wt.discriminatedUnion("type",[Wt.object({type:Wt.literal("search"),query:Wt.string().optional()}),Wt.object({type:Wt.literal("openPage"),url:Wt.string().nullish()}),Wt.object({type:Wt.literal("findInPage"),url:Wt.string().nullish(),pattern:Wt.string().nullish()})])}))),j2=Ln({id:"openai.web_search_preview",name:"web_search_preview",inputSchema:z2,outputSchema:H2}),G2={codeInterpreter:R2,fileSearch:x2,imageGeneration:O2,localShell:L2,webSearchPreview:j2,webSearch:F2};function RP(t,e){return e?e.some(r=>t.startsWith(r)):!1}async function W2({prompt:t,systemMessageMode:e,fileIdPrefixes:r,store:n,hasLocalShellTool:o=!1}){var i,a,s,c;let l=[],u=[];for(let{role:d,content:p}of t)switch(d){case"system":{switch(e){case"system":{l.push({role:"system",content:p});break}case"developer":{l.push({role:"developer",content:p});break}case"remove":{u.push({type:"other",message:"system messages are removed for this model"});break}default:{let m=e;throw new Error(`Unsupported system message mode: ${m}`)}}break}case"user":{l.push({role:"user",content:p.map((m,h)=>{var g,f,S;switch(m.type){case"text":return{type:"input_text",text:m.text};case"file":if(m.mediaType.startsWith("image/")){let b=m.mediaType==="image/*"?"image/jpeg":m.mediaType;return{type:"input_image",...m.data instanceof URL?{image_url:m.data.toString()}:typeof m.data=="string"&&RP(m.data,r)?{file_id:m.data}:{image_url:`data:${b};base64,${Vi(m.data)}`},detail:(f=(g=m.providerOptions)==null?void 0:g.openai)==null?void 0:f.imageDetail}}else{if(m.mediaType==="application/pdf")return m.data instanceof URL?{type:"input_file",file_url:m.data.toString()}:{type:"input_file",...typeof m.data=="string"&&RP(m.data,r)?{file_id:m.data}:{filename:(S=m.filename)!=null?S:`part-${h}.pdf`,file_data:`data:application/pdf;base64,${Vi(m.data)}`}};throw new $2({functionality:`file part media type ${m.mediaType}`})}}})});break}case"assistant":{let m={},h={};for(let g of p)switch(g.type){case"text":{let f=(a=(i=g.providerOptions)==null?void 0:i.openai)==null?void 0:a.itemId;if(n&&f!=null){l.push({type:"item_reference",id:f});break}l.push({role:"assistant",content:[{type:"output_text",text:g.text}],id:f});break}case"tool-call":{if(h[g.toolCallId]=g,g.providerExecuted)break;let f=(c=(s=g.providerOptions)==null?void 0:s.openai)==null?void 0:c.itemId;if(n&&f!=null){l.push({type:"item_reference",id:f});break}if(o&&g.toolName==="local_shell"){let S=await Ao({value:g.input,schema:OP});l.push({type:"local_shell_call",call_id:g.toolCallId,id:f,action:{type:"exec",command:S.action.command,timeout_ms:S.action.timeoutMs,user:S.action.user,working_directory:S.action.workingDirectory,env:S.action.env}});break}l.push({type:"function_call",call_id:g.toolCallId,name:g.toolName,arguments:JSON.stringify(g.input),id:f});break}case"tool-result":{n?l.push({type:"item_reference",id:g.toolCallId}):u.push({type:"other",message:`Results for OpenAI tool ${g.toolName} are not sent to the API when store is false`});break}case"reasoning":{let f=await jr({provider:"openai",providerOptions:g.providerOptions,schema:q2}),S=f?.itemId;if(S!=null){let b=m[S];if(n)b===void 0&&(l.push({type:"item_reference",id:S}),m[S]={type:"reasoning",id:S,summary:[]});else{let y=[];g.text.length>0?y.push({type:"summary_text",text:g.text}):b!==void 0&&u.push({type:"other",message:`Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(g)}.`}),b===void 0?(m[S]={type:"reasoning",id:S,encrypted_content:f?.reasoningEncryptedContent,summary:y},l.push(m[S])):(b.summary.push(...y),f?.reasoningEncryptedContent!=null&&(b.encrypted_content=f.reasoningEncryptedContent))}}else u.push({type:"other",message:`Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(g)}.`});break}}break}case"tool":{for(let m of p){let h=m.output;if(o&&m.toolName==="local_shell"&&h.type==="json"){let f=await Ao({value:h.value,schema:LP});l.push({type:"local_shell_call_output",call_id:m.toolCallId,output:f.output});break}let g;switch(h.type){case"text":case"error-text":g=h.value;break;case"json":case"error-json":g=JSON.stringify(h.value);break;case"content":g=h.value.map(f=>{switch(f.type){case"text":return{type:"input_text",text:f.text};case"media":return f.mediaType.startsWith("image/")?{type:"input_image",image_url:`data:${f.mediaType};base64,${f.data}`}:{type:"input_file",filename:"data",file_data:`data:${f.mediaType};base64,${f.data}`}}});break}l.push({type:"function_call_output",call_id:m.toolCallId,output:g})}break}default:{let m=d;throw new Error(`Unsupported role: ${m}`)}}return{input:l,warnings:u}}var q2=Ib.object({itemId:Ib.string().nullish(),reasoningEncryptedContent:Ib.string().nullish()});function CP({finishReason:t,hasFunctionCall:e}){switch(t){case void 0:case null:return e?"tool-calls":"stop";case"max_output_tokens":return"length";case"content_filter":return"content-filter";default:return e?"tool-calls":"unknown"}}var K2=yt(()=>me(E.union([E.object({type:E.literal("response.output_text.delta"),item_id:E.string(),delta:E.string(),logprobs:E.array(E.object({token:E.string(),logprob:E.number(),top_logprobs:E.array(E.object({token:E.string(),logprob:E.number()}))})).nullish()}),E.object({type:E.enum(["response.completed","response.incomplete"]),response:E.object({incomplete_details:E.object({reason:E.string()}).nullish(),usage:E.object({input_tokens:E.number(),input_tokens_details:E.object({cached_tokens:E.number().nullish()}).nullish(),output_tokens:E.number(),output_tokens_details:E.object({reasoning_tokens:E.number().nullish()}).nullish()}),service_tier:E.string().nullish()})}),E.object({type:E.literal("response.created"),response:E.object({id:E.string(),created_at:E.number(),model:E.string(),service_tier:E.string().nullish()})}),E.object({type:E.literal("response.output_item.added"),output_index:E.number(),item:E.discriminatedUnion("type",[E.object({type:E.literal("message"),id:E.string()}),E.object({type:E.literal("reasoning"),id:E.string(),encrypted_content:E.string().nullish()}),E.object({type:E.literal("function_call"),id:E.string(),call_id:E.string(),name:E.string(),arguments:E.string()}),E.object({type:E.literal("web_search_call"),id:E.string(),status:E.string()}),E.object({type:E.literal("computer_call"),id:E.string(),status:E.string()}),E.object({type:E.literal("file_search_call"),id:E.string()}),E.object({type:E.literal("image_generation_call"),id:E.string()}),E.object({type:E.literal("code_interpreter_call"),id:E.string(),container_id:E.string(),code:E.string().nullable(),outputs:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("logs"),logs:E.string()}),E.object({type:E.literal("image"),url:E.string()})])).nullable(),status:E.string()})])}),E.object({type:E.literal("response.output_item.done"),output_index:E.number(),item:E.discriminatedUnion("type",[E.object({type:E.literal("message"),id:E.string()}),E.object({type:E.literal("reasoning"),id:E.string(),encrypted_content:E.string().nullish()}),E.object({type:E.literal("function_call"),id:E.string(),call_id:E.string(),name:E.string(),arguments:E.string(),status:E.literal("completed")}),E.object({type:E.literal("code_interpreter_call"),id:E.string(),code:E.string().nullable(),container_id:E.string(),outputs:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("logs"),logs:E.string()}),E.object({type:E.literal("image"),url:E.string()})])).nullable()}),E.object({type:E.literal("image_generation_call"),id:E.string(),result:E.string()}),E.object({type:E.literal("web_search_call"),id:E.string(),status:E.string(),action:E.discriminatedUnion("type",[E.object({type:E.literal("search"),query:E.string().nullish(),sources:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("url"),url:E.string()}),E.object({type:E.literal("api"),name:E.string()})])).nullish()}),E.object({type:E.literal("open_page"),url:E.string().nullish()}),E.object({type:E.literal("find_in_page"),url:E.string().nullish(),pattern:E.string().nullish()})])}),E.object({type:E.literal("file_search_call"),id:E.string(),queries:E.array(E.string()),results:E.array(E.object({attributes:E.record(E.string(),E.unknown()),file_id:E.string(),filename:E.string(),score:E.number(),text:E.string()})).nullish()}),E.object({type:E.literal("local_shell_call"),id:E.string(),call_id:E.string(),action:E.object({type:E.literal("exec"),command:E.array(E.string()),timeout_ms:E.number().optional(),user:E.string().optional(),working_directory:E.string().optional(),env:E.record(E.string(),E.string()).optional()})}),E.object({type:E.literal("computer_call"),id:E.string(),status:E.literal("completed")})])}),E.object({type:E.literal("response.function_call_arguments.delta"),item_id:E.string(),output_index:E.number(),delta:E.string()}),E.object({type:E.literal("response.image_generation_call.partial_image"),item_id:E.string(),output_index:E.number(),partial_image_b64:E.string()}),E.object({type:E.literal("response.code_interpreter_call_code.delta"),item_id:E.string(),output_index:E.number(),delta:E.string()}),E.object({type:E.literal("response.code_interpreter_call_code.done"),item_id:E.string(),output_index:E.number(),code:E.string()}),E.object({type:E.literal("response.output_text.annotation.added"),annotation:E.discriminatedUnion("type",[E.object({type:E.literal("url_citation"),start_index:E.number(),end_index:E.number(),url:E.string(),title:E.string()}),E.object({type:E.literal("file_citation"),file_id:E.string(),filename:E.string().nullish(),index:E.number().nullish(),start_index:E.number().nullish(),end_index:E.number().nullish(),quote:E.string().nullish()})])}),E.object({type:E.literal("response.reasoning_summary_part.added"),item_id:E.string(),summary_index:E.number()}),E.object({type:E.literal("response.reasoning_summary_text.delta"),item_id:E.string(),summary_index:E.number(),delta:E.string()}),E.object({type:E.literal("response.reasoning_summary_part.done"),item_id:E.string(),summary_index:E.number()}),E.object({type:E.literal("error"),sequence_number:E.number(),error:E.object({type:E.string(),code:E.string(),message:E.string(),param:E.string().nullish()})}),E.object({type:E.string()}).loose().transform(t=>({type:"unknown_chunk",message:t.type}))]))),Y2=yt(()=>me(E.object({id:E.string().optional(),created_at:E.number().optional(),error:E.object({message:E.string(),type:E.string(),param:E.string().nullish(),code:E.string()}).nullish(),model:E.string().optional(),output:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("message"),role:E.literal("assistant"),id:E.string(),content:E.array(E.object({type:E.literal("output_text"),text:E.string(),logprobs:E.array(E.object({token:E.string(),logprob:E.number(),top_logprobs:E.array(E.object({token:E.string(),logprob:E.number()}))})).nullish(),annotations:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("url_citation"),start_index:E.number(),end_index:E.number(),url:E.string(),title:E.string()}),E.object({type:E.literal("file_citation"),file_id:E.string(),filename:E.string().nullish(),index:E.number().nullish(),start_index:E.number().nullish(),end_index:E.number().nullish(),quote:E.string().nullish()}),E.object({type:E.literal("container_file_citation"),container_id:E.string(),file_id:E.string(),filename:E.string().nullish(),start_index:E.number().nullish(),end_index:E.number().nullish(),index:E.number().nullish()}),E.object({type:E.literal("file_path"),file_id:E.string(),index:E.number().nullish()})]))}))}),E.object({type:E.literal("web_search_call"),id:E.string(),status:E.string(),action:E.discriminatedUnion("type",[E.object({type:E.literal("search"),query:E.string().nullish(),sources:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("url"),url:E.string()}),E.object({type:E.literal("api"),name:E.string()})])).nullish()}),E.object({type:E.literal("open_page"),url:E.string().nullish()}),E.object({type:E.literal("find_in_page"),url:E.string().nullish(),pattern:E.string().nullish()})])}),E.object({type:E.literal("file_search_call"),id:E.string(),queries:E.array(E.string()),results:E.array(E.object({attributes:E.record(E.string(),E.union([E.string(),E.number(),E.boolean()])),file_id:E.string(),filename:E.string(),score:E.number(),text:E.string()})).nullish()}),E.object({type:E.literal("code_interpreter_call"),id:E.string(),code:E.string().nullable(),container_id:E.string(),outputs:E.array(E.discriminatedUnion("type",[E.object({type:E.literal("logs"),logs:E.string()}),E.object({type:E.literal("image"),url:E.string()})])).nullable()}),E.object({type:E.literal("image_generation_call"),id:E.string(),result:E.string()}),E.object({type:E.literal("local_shell_call"),id:E.string(),call_id:E.string(),action:E.object({type:E.literal("exec"),command:E.array(E.string()),timeout_ms:E.number().optional(),user:E.string().optional(),working_directory:E.string().optional(),env:E.record(E.string(),E.string()).optional()})}),E.object({type:E.literal("function_call"),call_id:E.string(),name:E.string(),arguments:E.string(),id:E.string()}),E.object({type:E.literal("computer_call"),id:E.string(),status:E.string().optional()}),E.object({type:E.literal("reasoning"),id:E.string(),encrypted_content:E.string().nullish(),summary:E.array(E.object({type:E.literal("summary_text"),text:E.string()}))})])).optional(),service_tier:E.string().nullish(),incomplete_details:E.object({reason:E.string()}).nullish(),usage:E.object({input_tokens:E.number(),input_tokens_details:E.object({cached_tokens:E.number().nullish()}).nullish(),output_tokens:E.number(),output_tokens_details:E.object({reasoning_tokens:E.number().nullish()}).nullish()}).optional()}))),NP=20,X2=["o1","o1-2024-12-17","o3","o3-2025-04-16","o3-deep-research","o3-deep-research-2025-06-26","o3-mini","o3-mini-2025-01-31","o4-mini","o4-mini-2025-04-16","o4-mini-deep-research","o4-mini-deep-research-2025-06-26","codex-mini-latest","computer-use-preview","gpt-5","gpt-5-2025-08-07","gpt-5-codex","gpt-5-mini","gpt-5-mini-2025-08-07","gpt-5-nano","gpt-5-nano-2025-08-07","gpt-5-pro","gpt-5-pro-2025-10-06","gpt-5.1","gpt-5.1-chat-latest","gpt-5.1-codex-mini","gpt-5.1-codex","gpt-5.1-codex-max","gpt-5.2","gpt-5.2-chat-latest","gpt-5.2-pro"],PNe=["gpt-4.1","gpt-4.1-2025-04-14","gpt-4.1-mini","gpt-4.1-mini-2025-04-14","gpt-4.1-nano","gpt-4.1-nano-2025-04-14","gpt-4o","gpt-4o-2024-05-13","gpt-4o-2024-08-06","gpt-4o-2024-11-20","gpt-4o-audio-preview","gpt-4o-audio-preview-2024-10-01","gpt-4o-audio-preview-2024-12-17","gpt-4o-search-preview","gpt-4o-search-preview-2025-03-11","gpt-4o-mini-search-preview","gpt-4o-mini-search-preview-2025-03-11","gpt-4o-mini","gpt-4o-mini-2024-07-18","gpt-4-turbo","gpt-4-turbo-2024-04-09","gpt-4-turbo-preview","gpt-4-0125-preview","gpt-4-1106-preview","gpt-4","gpt-4-0613","gpt-4.5-preview","gpt-4.5-preview-2025-02-27","gpt-3.5-turbo-0125","gpt-3.5-turbo","gpt-3.5-turbo-1106","chatgpt-4o-latest","gpt-5-chat-latest",...X2],J2=yt(()=>me(kt.object({conversation:kt.string().nullish(),include:kt.array(kt.enum(["reasoning.encrypted_content","file_search_call.results","message.output_text.logprobs"])).nullish(),instructions:kt.string().nullish(),logprobs:kt.union([kt.boolean(),kt.number().min(1).max(NP)]).optional(),maxToolCalls:kt.number().nullish(),metadata:kt.any().nullish(),parallelToolCalls:kt.boolean().nullish(),previousResponseId:kt.string().nullish(),promptCacheKey:kt.string().nullish(),promptCacheRetention:kt.enum(["in_memory","24h"]).nullish(),reasoningEffort:kt.string().nullish(),reasoningSummary:kt.string().nullish(),safetyIdentifier:kt.string().nullish(),serviceTier:kt.enum(["auto","flex","priority","default"]).nullish(),store:kt.boolean().nullish(),strictJsonSchema:kt.boolean().nullish(),textVerbosity:kt.enum(["low","medium","high"]).nullish(),truncation:kt.enum(["auto","disabled"]).nullish(),user:kt.string().nullish()})));async function Q2({tools:t,toolChoice:e,strictJsonSchema:r}){t=t?.length?t:void 0;let n=[];if(t==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n};let o=[];for(let a of t)switch(a.type){case"function":o.push({type:"function",name:a.name,description:a.description,parameters:a.inputSchema,strict:r});break;case"provider-defined":{switch(a.id){case"openai.file_search":{let s=await Ao({value:a.args,schema:C2});o.push({type:"file_search",vector_store_ids:s.vectorStoreIds,max_num_results:s.maxNumResults,ranking_options:s.ranking?{ranker:s.ranking.ranker,score_threshold:s.ranking.scoreThreshold}:void 0,filters:s.filters});break}case"openai.local_shell":{o.push({type:"local_shell"});break}case"openai.web_search_preview":{let s=await Ao({value:a.args,schema:B2});o.push({type:"web_search_preview",search_context_size:s.searchContextSize,user_location:s.userLocation});break}case"openai.web_search":{let s=await Ao({value:a.args,schema:N2});o.push({type:"web_search",filters:s.filters!=null?{allowed_domains:s.filters.allowedDomains}:void 0,external_web_access:s.externalWebAccess,search_context_size:s.searchContextSize,user_location:s.userLocation});break}case"openai.code_interpreter":{let s=await Ao({value:a.args,schema:v2});o.push({type:"code_interpreter",container:s.container==null?{type:"auto",file_ids:void 0}:typeof s.container=="string"?s.container:{type:"auto",file_ids:s.container.fileIds}});break}case"openai.image_generation":{let s=await Ao({value:a.args,schema:_2});o.push({type:"image_generation",background:s.background,input_fidelity:s.inputFidelity,input_image_mask:s.inputImageMask?{file_id:s.inputImageMask.fileId,image_url:s.inputImageMask.imageUrl}:void 0,model:s.model,size:s.size,quality:s.quality,moderation:s.moderation,output_format:s.outputFormat,output_compression:s.outputCompression});break}}break}default:n.push({type:"unsupported-tool",tool:a});break}if(e==null)return{tools:o,toolChoice:void 0,toolWarnings:n};let i=e.type;switch(i){case"auto":case"none":case"required":return{tools:o,toolChoice:i,toolWarnings:n};case"tool":return{tools:o,toolChoice:e.toolName==="code_interpreter"||e.toolName==="file_search"||e.toolName==="image_generation"||e.toolName==="web_search_preview"||e.toolName==="web_search"?{type:e.toolName}:{type:"function",name:e.toolName},toolWarnings:n};default:{let a=i;throw new Z2({functionality:`tool choice type: ${a}`})}}}var eK=class{constructor(t,e){this.specificationVersion="v2",this.supportedUrls={"image/*":[/^https?:\/\/.*$/],"application/pdf":[/^https?:\/\/.*$/]},this.modelId=t,this.config=e}get provider(){return this.config.provider}async getArgs({maxOutputTokens:t,temperature:e,stopSequences:r,topP:n,topK:o,presencePenalty:i,frequencyPenalty:a,seed:s,prompt:c,providerOptions:l,tools:u,toolChoice:d,responseFormat:p}){var m,h,g,f;let S=[],b=IP(this.modelId);o!=null&&S.push({type:"unsupported-setting",setting:"topK"}),s!=null&&S.push({type:"unsupported-setting",setting:"seed"}),i!=null&&S.push({type:"unsupported-setting",setting:"presencePenalty"}),a!=null&&S.push({type:"unsupported-setting",setting:"frequencyPenalty"}),r!=null&&S.push({type:"unsupported-setting",setting:"stopSequences"});let y=await jr({provider:"openai",providerOptions:l,schema:J2});y?.conversation&&y?.previousResponseId&&S.push({type:"unsupported-setting",setting:"conversation",details:"conversation and previousResponseId cannot be used together"});let{input:T,warnings:w}=await W2({prompt:c,systemMessageMode:b.systemMessageMode,fileIdPrefixes:this.config.fileIdPrefixes,store:(m=y?.store)!=null?m:!0,hasLocalShellTool:O("openai.local_shell")});S.push(...w);let P=(h=y?.strictJsonSchema)!=null?h:!1,v=y?.include;function x(B){v==null?v=[B]:v.includes(B)||(v=[...v,B])}function O(B){return u?.find(ae=>ae.type==="provider-defined"&&ae.id===B)!=null}let L=typeof y?.logprobs=="number"?y?.logprobs:y?.logprobs===!0?NP:void 0;L&&x("message.output_text.logprobs");let N=(g=u?.find(B=>B.type==="provider-defined"&&(B.id==="openai.web_search"||B.id==="openai.web_search_preview")))==null?void 0:g.name;N&&x("web_search_call.action.sources"),O("openai.code_interpreter")&&x("code_interpreter_call.outputs");let F=y?.store;F===!1&&b.isReasoningModel&&x("reasoning.encrypted_content");let W={model:this.modelId,input:T,temperature:e,top_p:n,max_output_tokens:t,...(p?.type==="json"||y?.textVerbosity)&&{text:{...p?.type==="json"&&{format:p.schema!=null?{type:"json_schema",strict:P,name:(f=p.name)!=null?f:"response",description:p.description,schema:p.schema}:{type:"json_object"}},...y?.textVerbosity&&{verbosity:y.textVerbosity}}},conversation:y?.conversation,max_tool_calls:y?.maxToolCalls,metadata:y?.metadata,parallel_tool_calls:y?.parallelToolCalls,previous_response_id:y?.previousResponseId,store:F,user:y?.user,instructions:y?.instructions,service_tier:y?.serviceTier,include:v,prompt_cache_key:y?.promptCacheKey,prompt_cache_retention:y?.promptCacheRetention,safety_identifier:y?.safetyIdentifier,top_logprobs:L,truncation:y?.truncation,...b.isReasoningModel&&(y?.reasoningEffort!=null||y?.reasoningSummary!=null)&&{reasoning:{...y?.reasoningEffort!=null&&{effort:y.reasoningEffort},...y?.reasoningSummary!=null&&{summary:y.reasoningSummary}}}};b.isReasoningModel?y?.reasoningEffort==="none"&&b.supportsNonReasoningParameters||(W.temperature!=null&&(W.temperature=void 0,S.push({type:"unsupported-setting",setting:"temperature",details:"temperature is not supported for reasoning models"})),W.top_p!=null&&(W.top_p=void 0,S.push({type:"unsupported-setting",setting:"topP",details:"topP is not supported for reasoning models"}))):(y?.reasoningEffort!=null&&S.push({type:"unsupported-setting",setting:"reasoningEffort",details:"reasoningEffort is not supported for non-reasoning models"}),y?.reasoningSummary!=null&&S.push({type:"unsupported-setting",setting:"reasoningSummary",details:"reasoningSummary is not supported for non-reasoning models"})),y?.serviceTier==="flex"&&!b.supportsFlexProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"flex processing is only available for o3, o4-mini, and gpt-5 models"}),delete W.service_tier),y?.serviceTier==="priority"&&!b.supportsPriorityProcessing&&(S.push({type:"unsupported-setting",setting:"serviceTier",details:"priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported"}),delete W.service_tier);let{tools:H,toolChoice:de,toolWarnings:$}=await Q2({tools:u,toolChoice:d,strictJsonSchema:P});return{webSearchToolName:N,args:{...W,tools:H,tool_choice:de},warnings:[...S,...$],store:F}}async doGenerate(t){var e,r,n,o,i,a,s,c,l,u,d,p,m,h,g,f,S,b,y,T,w,P,v,x,O,L,N,F;let{args:W,warnings:H,webSearchToolName:de}=await this.getArgs(t),$=this.config.url({path:"/responses",modelId:this.modelId}),B=this.config.provider.replace(".responses",""),{responseHeaders:ae,value:ce,rawValue:_e}=await Gr({url:$,headers:fr(this.config.headers(),t.headers),body:W,failedResponseHandler:Co,successfulResponseHandler:Nn(Y2),abortSignal:t.abortSignal,fetch:this.config.fetch});if(ce.error)throw new V2({message:ce.error.message,url:$,requestBodyValues:W,statusCode:400,responseHeaders:ae,responseBody:_e,isRetryable:!1});let be=[],se=[],Q=!1;for(let _ of ce.output)switch(_.type){case"reasoning":{_.summary.length===0&&_.summary.push({type:"summary_text",text:""});for(let oe of _.summary)be.push({type:"reasoning",text:oe.text,providerMetadata:{[B]:{itemId:_.id,reasoningEncryptedContent:(e=_.encrypted_content)!=null?e:null}}});break}case"image_generation_call":{be.push({type:"tool-call",toolCallId:_.id,toolName:"image_generation",input:"{}",providerExecuted:!0}),be.push({type:"tool-result",toolCallId:_.id,toolName:"image_generation",result:{result:_.result},providerExecuted:!0});break}case"local_shell_call":{be.push({type:"tool-call",toolCallId:_.call_id,toolName:"local_shell",input:JSON.stringify({action:_.action}),providerMetadata:{[B]:{itemId:_.id}}});break}case"message":{for(let oe of _.content){(n=(r=t.providerOptions)==null?void 0:r.openai)!=null&&n.logprobs&&oe.logprobs&&se.push(oe.logprobs),be.push({type:"text",text:oe.text,providerMetadata:{[B]:{itemId:_.id}}});for(let ge of oe.annotations)ge.type==="url_citation"?be.push({type:"source",sourceType:"url",id:(a=(i=(o=this.config).generateId)==null?void 0:i.call(o))!=null?a:dn(),url:ge.url,title:ge.title}):ge.type==="file_citation"?be.push({type:"source",sourceType:"document",id:(l=(c=(s=this.config).generateId)==null?void 0:c.call(s))!=null?l:dn(),mediaType:"text/plain",title:(d=(u=ge.quote)!=null?u:ge.filename)!=null?d:"Document",filename:(p=ge.filename)!=null?p:ge.file_id,...ge.file_id?{providerMetadata:{[B]:{fileId:ge.file_id}}}:{}}):ge.type==="container_file_citation"?be.push({type:"source",sourceType:"document",id:(g=(h=(m=this.config).generateId)==null?void 0:h.call(m))!=null?g:dn(),mediaType:"text/plain",title:(S=(f=ge.filename)!=null?f:ge.file_id)!=null?S:"Document",filename:(b=ge.filename)!=null?b:ge.file_id,providerMetadata:{[B]:{fileId:ge.file_id,containerId:ge.container_id,...ge.index!=null?{index:ge.index}:{}}}}):ge.type==="file_path"&&be.push({type:"source",sourceType:"document",id:(w=(T=(y=this.config).generateId)==null?void 0:T.call(y))!=null?w:dn(),mediaType:"application/octet-stream",title:ge.file_id,filename:ge.file_id,providerMetadata:{[B]:{fileId:ge.file_id,...ge.index!=null?{index:ge.index}:{}}}})}break}case"function_call":{Q=!0,be.push({type:"tool-call",toolCallId:_.call_id,toolName:_.name,input:_.arguments,providerMetadata:{[B]:{itemId:_.id}}});break}case"web_search_call":{be.push({type:"tool-call",toolCallId:_.id,toolName:de??"web_search",input:JSON.stringify({}),providerExecuted:!0}),be.push({type:"tool-result",toolCallId:_.id,toolName:de??"web_search",result:xP(_.action),providerExecuted:!0});break}case"computer_call":{be.push({type:"tool-call",toolCallId:_.id,toolName:"computer_use",input:"",providerExecuted:!0}),be.push({type:"tool-result",toolCallId:_.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:_.status||"completed"},providerExecuted:!0});break}case"file_search_call":{be.push({type:"tool-call",toolCallId:_.id,toolName:"file_search",input:"{}",providerExecuted:!0}),be.push({type:"tool-result",toolCallId:_.id,toolName:"file_search",result:{queries:_.queries,results:(v=(P=_.results)==null?void 0:P.map(oe=>({attributes:oe.attributes,fileId:oe.file_id,filename:oe.filename,score:oe.score,text:oe.text})))!=null?v:null},providerExecuted:!0});break}case"code_interpreter_call":{be.push({type:"tool-call",toolCallId:_.id,toolName:"code_interpreter",input:JSON.stringify({code:_.code,containerId:_.container_id}),providerExecuted:!0}),be.push({type:"tool-result",toolCallId:_.id,toolName:"code_interpreter",result:{outputs:_.outputs},providerExecuted:!0});break}}let ve={[B]:{...ce.id!=null?{responseId:ce.id}:{}}};se.length>0&&(ve[B].logprobs=se),typeof ce.service_tier=="string"&&(ve[B].serviceTier=ce.service_tier);let Re=ce.usage;return{content:be,finishReason:CP({finishReason:(x=ce.incomplete_details)==null?void 0:x.reason,hasFunctionCall:Q}),usage:{inputTokens:Re.input_tokens,outputTokens:Re.output_tokens,totalTokens:Re.input_tokens+Re.output_tokens,reasoningTokens:(L=(O=Re.output_tokens_details)==null?void 0:O.reasoning_tokens)!=null?L:void 0,cachedInputTokens:(F=(N=Re.input_tokens_details)==null?void 0:N.cached_tokens)!=null?F:void 0},request:{body:W},response:{id:ce.id,timestamp:new Date(ce.created_at*1e3),modelId:ce.model,headers:ae,body:_e},providerMetadata:ve,warnings:H}}async doStream(t){let{args:e,warnings:r,webSearchToolName:n,store:o}=await this.getArgs(t),{responseHeaders:i,value:a}=await Gr({url:this.config.url({path:"/responses",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:{...e,stream:!0},failedResponseHandler:Co,successfulResponseHandler:Nl(K2),abortSignal:t.abortSignal,fetch:this.config.fetch}),s=this,c=this.config.provider.replace(".responses",""),l="unknown",u={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},d=[],p=null,m={},h=[],g=!1,f={},S;return{stream:a.pipeThrough(new TransformStream({start(b){b.enqueue({type:"stream-start",warnings:r})},transform(b,y){var T,w,P,v,x,O,L,N,F,W,H,de,$,B,ae,ce,_e,be,se,Q,ve,Re;if(t.includeRawChunks&&y.enqueue({type:"raw",rawValue:b.rawValue}),!b.success){l="error",y.enqueue({type:"error",error:b.error});return}let _=b.value;if(wP(_))_.item.type==="function_call"?(m[_.output_index]={toolName:_.item.name,toolCallId:_.item.call_id},y.enqueue({type:"tool-input-start",id:_.item.call_id,toolName:_.item.name})):_.item.type==="web_search_call"?(m[_.output_index]={toolName:n??"web_search",toolCallId:_.item.id},y.enqueue({type:"tool-input-start",id:_.item.id,toolName:n??"web_search",providerExecuted:!0}),y.enqueue({type:"tool-input-end",id:_.item.id}),y.enqueue({type:"tool-call",toolCallId:_.item.id,toolName:n??"web_search",input:JSON.stringify({}),providerExecuted:!0})):_.item.type==="computer_call"?(m[_.output_index]={toolName:"computer_use",toolCallId:_.item.id},y.enqueue({type:"tool-input-start",id:_.item.id,toolName:"computer_use",providerExecuted:!0})):_.item.type==="code_interpreter_call"?(m[_.output_index]={toolName:"code_interpreter",toolCallId:_.item.id,codeInterpreter:{containerId:_.item.container_id}},y.enqueue({type:"tool-input-start",id:_.item.id,toolName:"code_interpreter",providerExecuted:!0}),y.enqueue({type:"tool-input-delta",id:_.item.id,delta:`{"containerId":"${_.item.container_id}","code":"`})):_.item.type==="file_search_call"?y.enqueue({type:"tool-call",toolCallId:_.item.id,toolName:"file_search",input:"{}",providerExecuted:!0}):_.item.type==="image_generation_call"?y.enqueue({type:"tool-call",toolCallId:_.item.id,toolName:"image_generation",input:"{}",providerExecuted:!0}):_.item.type==="message"?(h.splice(0,h.length),y.enqueue({type:"text-start",id:_.item.id,providerMetadata:{[c]:{itemId:_.item.id}}})):wP(_)&&_.item.type==="reasoning"&&(f[_.item.id]={encryptedContent:_.item.encrypted_content,summaryParts:{0:"active"}},y.enqueue({type:"reasoning-start",id:`${_.item.id}:0`,providerMetadata:{[c]:{itemId:_.item.id,reasoningEncryptedContent:(T=_.item.encrypted_content)!=null?T:null}}}));else if(rK(_)){if(_.item.type==="message")y.enqueue({type:"text-end",id:_.item.id,providerMetadata:{[c]:{itemId:_.item.id,...h.length>0&&{annotations:h}}}});else if(_.item.type==="function_call")m[_.output_index]=void 0,g=!0,y.enqueue({type:"tool-input-end",id:_.item.call_id}),y.enqueue({type:"tool-call",toolCallId:_.item.call_id,toolName:_.item.name,input:_.item.arguments,providerMetadata:{[c]:{itemId:_.item.id}}});else if(_.item.type==="web_search_call")m[_.output_index]=void 0,y.enqueue({type:"tool-result",toolCallId:_.item.id,toolName:n??"web_search",result:xP(_.item.action),providerExecuted:!0});else if(_.item.type==="computer_call")m[_.output_index]=void 0,y.enqueue({type:"tool-input-end",id:_.item.id}),y.enqueue({type:"tool-call",toolCallId:_.item.id,toolName:"computer_use",input:"",providerExecuted:!0}),y.enqueue({type:"tool-result",toolCallId:_.item.id,toolName:"computer_use",result:{type:"computer_use_tool_result",status:_.item.status||"completed"},providerExecuted:!0});else if(_.item.type==="file_search_call")m[_.output_index]=void 0,y.enqueue({type:"tool-result",toolCallId:_.item.id,toolName:"file_search",result:{queries:_.item.queries,results:(P=(w=_.item.results)==null?void 0:w.map(oe=>({attributes:oe.attributes,fileId:oe.file_id,filename:oe.filename,score:oe.score,text:oe.text})))!=null?P:null},providerExecuted:!0});else if(_.item.type==="code_interpreter_call")m[_.output_index]=void 0,y.enqueue({type:"tool-result",toolCallId:_.item.id,toolName:"code_interpreter",result:{outputs:_.item.outputs},providerExecuted:!0});else if(_.item.type==="image_generation_call")y.enqueue({type:"tool-result",toolCallId:_.item.id,toolName:"image_generation",result:{result:_.item.result},providerExecuted:!0});else if(_.item.type==="local_shell_call")m[_.output_index]=void 0,y.enqueue({type:"tool-call",toolCallId:_.item.call_id,toolName:"local_shell",input:JSON.stringify({action:{type:"exec",command:_.item.action.command,timeoutMs:_.item.action.timeout_ms,user:_.item.action.user,workingDirectory:_.item.action.working_directory,env:_.item.action.env}}),providerMetadata:{[c]:{itemId:_.item.id}}});else if(_.item.type==="reasoning"){let oe=f[_.item.id],ge=Object.entries(oe.summaryParts).filter(([Yr,Er])=>Er==="active"||Er==="can-conclude").map(([Yr])=>Yr);for(let Yr of ge)y.enqueue({type:"reasoning-end",id:`${_.item.id}:${Yr}`,providerMetadata:{[c]:{itemId:_.item.id,reasoningEncryptedContent:(v=_.item.encrypted_content)!=null?v:null}}});delete f[_.item.id]}}else if(iK(_)){let oe=m[_.output_index];oe!=null&&y.enqueue({type:"tool-input-delta",id:oe.toolCallId,delta:_.delta})}else if(aK(_)){let oe=m[_.output_index];oe!=null&&y.enqueue({type:"tool-input-delta",id:oe.toolCallId,delta:JSON.stringify(_.delta).slice(1,-1)})}else if(sK(_)){let oe=m[_.output_index];oe!=null&&(y.enqueue({type:"tool-input-delta",id:oe.toolCallId,delta:'"}'}),y.enqueue({type:"tool-input-end",id:oe.toolCallId}),y.enqueue({type:"tool-call",toolCallId:oe.toolCallId,toolName:"code_interpreter",input:JSON.stringify({code:_.code,containerId:oe.codeInterpreter.containerId}),providerExecuted:!0}))}else if(oK(_))p=_.response.id,y.enqueue({type:"response-metadata",id:_.response.id,timestamp:new Date(_.response.created_at*1e3),modelId:_.response.model});else if(tK(_))y.enqueue({type:"text-delta",id:_.item_id,delta:_.delta}),(O=(x=t.providerOptions)==null?void 0:x.openai)!=null&&O.logprobs&&_.logprobs&&d.push(_.logprobs);else if(_.type==="response.reasoning_summary_part.added"){if(_.summary_index>0){let oe=f[_.item_id];oe.summaryParts[_.summary_index]="active";for(let ge of Object.keys(oe.summaryParts))oe.summaryParts[ge]==="can-conclude"&&(y.enqueue({type:"reasoning-end",id:`${_.item_id}:${ge}`,providerMetadata:{[c]:{itemId:_.item_id}}}),oe.summaryParts[ge]="concluded");y.enqueue({type:"reasoning-start",id:`${_.item_id}:${_.summary_index}`,providerMetadata:{[c]:{itemId:_.item_id,reasoningEncryptedContent:(N=(L=f[_.item_id])==null?void 0:L.encryptedContent)!=null?N:null}}})}}else _.type==="response.reasoning_summary_text.delta"?y.enqueue({type:"reasoning-delta",id:`${_.item_id}:${_.summary_index}`,delta:_.delta,providerMetadata:{[c]:{itemId:_.item_id}}}):_.type==="response.reasoning_summary_part.done"?o?(y.enqueue({type:"reasoning-end",id:`${_.item_id}:${_.summary_index}`,providerMetadata:{[c]:{itemId:_.item_id}}}),f[_.item_id].summaryParts[_.summary_index]="concluded"):f[_.item_id].summaryParts[_.summary_index]="can-conclude":nK(_)?(l=CP({finishReason:(F=_.response.incomplete_details)==null?void 0:F.reason,hasFunctionCall:g}),u.inputTokens=_.response.usage.input_tokens,u.outputTokens=_.response.usage.output_tokens,u.totalTokens=_.response.usage.input_tokens+_.response.usage.output_tokens,u.reasoningTokens=(H=(W=_.response.usage.output_tokens_details)==null?void 0:W.reasoning_tokens)!=null?H:void 0,u.cachedInputTokens=($=(de=_.response.usage.input_tokens_details)==null?void 0:de.cached_tokens)!=null?$:void 0,typeof _.response.service_tier=="string"&&(S=_.response.service_tier)):lK(_)?(h.push(_.annotation),_.annotation.type==="url_citation"?y.enqueue({type:"source",sourceType:"url",id:(ce=(ae=(B=s.config).generateId)==null?void 0:ae.call(B))!=null?ce:dn(),url:_.annotation.url,title:_.annotation.title}):_.annotation.type==="file_citation"&&y.enqueue({type:"source",sourceType:"document",id:(se=(be=(_e=s.config).generateId)==null?void 0:be.call(_e))!=null?se:dn(),mediaType:"text/plain",title:(ve=(Q=_.annotation.quote)!=null?Q:_.annotation.filename)!=null?ve:"Document",filename:(Re=_.annotation.filename)!=null?Re:_.annotation.file_id,..._.annotation.file_id?{providerMetadata:{[c]:{fileId:_.annotation.file_id}}}:{}})):cK(_)&&y.enqueue({type:"error",error:_})},flush(b){let y={[c]:{responseId:p}};d.length>0&&(y[c].logprobs=d),S!==void 0&&(y[c].serviceTier=S),b.enqueue({type:"finish",finishReason:l,usage:u,providerMetadata:y})}})),request:{body:e},response:{headers:i}}}};function tK(t){return t.type==="response.output_text.delta"}function rK(t){return t.type==="response.output_item.done"}function nK(t){return t.type==="response.completed"||t.type==="response.incomplete"}function oK(t){return t.type==="response.created"}function iK(t){return t.type==="response.function_call_arguments.delta"}function aK(t){return t.type==="response.code_interpreter_call_code.delta"}function sK(t){return t.type==="response.code_interpreter_call_code.done"}function wP(t){return t.type==="response.output_item.added"}function lK(t){return t.type==="response.output_text.annotation.added"}function cK(t){return t.type==="error"}function xP(t){var e;switch(t.type){case"search":return{action:{type:"search",query:(e=t.query)!=null?e:void 0},...t.sources!=null&&{sources:t.sources}};case"open_page":return{action:{type:"openPage",url:t.url}};case"find_in_page":return{action:{type:"findInPage",url:t.url,pattern:t.pattern}}}}var uK=yt(()=>me(Pb.object({instructions:Pb.string().nullish(),speed:Pb.number().min(.25).max(4).default(1).nullish()}))),dK=class{constructor(t,e){this.modelId=t,this.config=e,this.specificationVersion="v2"}get provider(){return this.config.provider}async getArgs({text:t,voice:e="alloy",outputFormat:r="mp3",speed:n,instructions:o,language:i,providerOptions:a}){let s=[],c=await jr({provider:"openai",providerOptions:a,schema:uK}),l={model:this.modelId,input:t,voice:e,response_format:"mp3",speed:n,instructions:o};if(r&&(["mp3","opus","aac","flac","wav","pcm"].includes(r)?l.response_format=r:s.push({type:"unsupported-setting",setting:"outputFormat",details:`Unsupported output format: ${r}. Using mp3 instead.`})),c){let u={};for(let d in u){let p=u[d];p!==void 0&&(l[d]=p)}}return i&&s.push({type:"unsupported-setting",setting:"language",details:`OpenAI speech models do not support language selection. Language parameter "${i}" was ignored.`}),{requestBody:l,warnings:s}}async doGenerate(t){var e,r,n;let o=(n=(r=(e=this.config._internal)==null?void 0:e.currentDate)==null?void 0:r.call(e))!=null?n:new Date,{requestBody:i,warnings:a}=await this.getArgs(t),{value:s,responseHeaders:c,rawValue:l}=await Gr({url:this.config.url({path:"/audio/speech",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),body:i,failedResponseHandler:Co,successfulResponseHandler:dP(),abortSignal:t.abortSignal,fetch:this.config.fetch});return{audio:s,warnings:a,request:{body:JSON.stringify(i)},response:{timestamp:o,modelId:this.modelId,headers:c,body:l}}}},pK=yt(()=>me(zt.object({text:zt.string(),language:zt.string().nullish(),duration:zt.number().nullish(),words:zt.array(zt.object({word:zt.string(),start:zt.number(),end:zt.number()})).nullish(),segments:zt.array(zt.object({id:zt.number(),seek:zt.number(),start:zt.number(),end:zt.number(),text:zt.string(),tokens:zt.array(zt.number()),temperature:zt.number(),avg_logprob:zt.number(),compression_ratio:zt.number(),no_speech_prob:zt.number()})).nullish()}))),mK=yt(()=>me(Wi.object({include:Wi.array(Wi.string()).optional(),language:Wi.string().optional(),prompt:Wi.string().optional(),temperature:Wi.number().min(0).max(1).default(0).optional(),timestampGranularities:Wi.array(Wi.enum(["word","segment"])).default(["segment"]).optional()}))),_P={afrikaans:"af",arabic:"ar",armenian:"hy",azerbaijani:"az",belarusian:"be",bosnian:"bs",bulgarian:"bg",catalan:"ca",chinese:"zh",croatian:"hr",czech:"cs",danish:"da",dutch:"nl",english:"en",estonian:"et",finnish:"fi",french:"fr",galician:"gl",german:"de",greek:"el",hebrew:"he",hindi:"hi",hungarian:"hu",icelandic:"is",indonesian:"id",italian:"it",japanese:"ja",kannada:"kn",kazakh:"kk",korean:"ko",latvian:"lv",lithuanian:"lt",macedonian:"mk",malay:"ms",marathi:"mr",maori:"mi",nepali:"ne",norwegian:"no",persian:"fa",polish:"pl",portuguese:"pt",romanian:"ro",russian:"ru",serbian:"sr",slovak:"sk",slovenian:"sl",spanish:"es",swahili:"sw",swedish:"sv",tagalog:"tl",tamil:"ta",thai:"th",turkish:"tr",ukrainian:"uk",urdu:"ur",vietnamese:"vi",welsh:"cy"},gK=class{constructor(t,e){this.modelId=t,this.config=e,this.specificationVersion="v2"}get provider(){return this.config.provider}async getArgs({audio:t,mediaType:e,providerOptions:r}){let n=[],o=await jr({provider:"openai",providerOptions:r,schema:mK}),i=new FormData,a=t instanceof Uint8Array?new Blob([t]):new Blob([SP(t)]);i.append("model",this.modelId);let s=aP(e);if(i.append("file",new File([a],"audio",{type:e}),`audio.${s}`),o){let c={include:o.include,language:o.language,prompt:o.prompt,response_format:["gpt-4o-transcribe","gpt-4o-mini-transcribe"].includes(this.modelId)?"json":"verbose_json",temperature:o.temperature,timestamp_granularities:o.timestampGranularities};for(let[l,u]of Object.entries(c))if(u!=null)if(Array.isArray(u))for(let d of u)i.append(`${l}[]`,String(d));else i.append(l,String(u))}return{formData:i,warnings:n}}async doGenerate(t){var e,r,n,o,i,a,s,c;let l=(n=(r=(e=this.config._internal)==null?void 0:e.currentDate)==null?void 0:r.call(e))!=null?n:new Date,{formData:u,warnings:d}=await this.getArgs(t),{value:p,responseHeaders:m,rawValue:h}=await lP({url:this.config.url({path:"/audio/transcriptions",modelId:this.modelId}),headers:fr(this.config.headers(),t.headers),formData:u,failedResponseHandler:Co,successfulResponseHandler:Nn(pK),abortSignal:t.abortSignal,fetch:this.config.fetch}),g=p.language!=null&&p.language in _P?_P[p.language]:void 0;return{text:p.text,segments:(s=(a=(o=p.segments)==null?void 0:o.map(f=>({text:f.text,startSecond:f.start,endSecond:f.end})))!=null?a:(i=p.words)==null?void 0:i.map(f=>({text:f.word,startSecond:f.start,endSecond:f.end})))!=null?s:[],language:g,durationInSeconds:(c=p.duration)!=null?c:void 0,warnings:d,response:{timestamp:l,modelId:this.modelId,headers:m,body:h}}}},hK="2.0.89";function Ob(t={}){var e,r;let n=(e=yP(iP({settingValue:t.baseURL,environmentVariableName:"OPENAI_BASE_URL"})))!=null?e:"https://api.openai.com/v1",o=(r=t.name)!=null?r:"openai",i=()=>vb({Authorization:`Bearer ${oP({apiKey:t.apiKey,environmentVariableName:"OPENAI_API_KEY",description:"OpenAI"})}`,"OpenAI-Organization":t.organization,"OpenAI-Project":t.project,...t.headers},`ai-sdk/openai/${hK}`),a=g=>new a2(g,{provider:`${o}.chat`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),s=g=>new d2(g,{provider:`${o}.completion`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),c=g=>new h2(g,{provider:`${o}.embedding`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),l=g=>new b2(g,{provider:`${o}.image`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),u=g=>new gK(g,{provider:`${o}.transcription`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),d=g=>new dK(g,{provider:`${o}.speech`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch}),p=g=>{if(new.target)throw new Error("The OpenAI model function cannot be called with the new keyword.");return m(g)},m=g=>new eK(g,{provider:`${o}.responses`,url:({path:f})=>`${n}${f}`,headers:i,fetch:t.fetch,fileIdPrefixes:["file-"]}),h=function(g){return p(g)};return h.languageModel=p,h.chat=a,h.completion=s,h.responses=m,h.embedding=c,h.textEmbedding=c,h.textEmbeddingModel=c,h.image=l,h.imageModel=l,h.transcription=u,h.transcriptionModel=u,h.speech=d,h.speechModel=d,h.tools=G2,h}var HNe=Ob();function DP(t){let{apiKey:e,sessionId:r,extraHeaders:n,loggerTags:o}=t,i={Authorization:`Bearer ${e}`,[lm]:Za??"",...r&&{[Jw]:r},...n||{}};return o&&(i[Xw]=JSON.stringify(o)),i}var Vu=t=>e=>{let r=DP(t);return fK({baseURL:`${t.baseUrl}/v1/llm/anthropic/${e}`,headers:r,apiKey:t.apiKey})(e)},Lb=t=>e=>{let r=DP(t);return Ob({baseURL:`${t.baseUrl}/v1/llm/openai/${e}`,headers:r,apiKey:t.apiKey})(e)};var wo=class extends hr{agentConfig;constructor(e,r){let n={...Fp,...e};super(r),this.agentConfig=n}getAgentConfig(){return this.agentConfig}async rankChunksWithAi(e,r){let n={...e,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/recommend-chunks-ai`,{method:"POST",body:n,signal:r.abortSignal});return hC.parse(o)}async rankChunksWithRag(e,r){let n=await this.sendRequest(`/${q}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Za,...e},signal:r.abortSignal});return gC.parse(n)}async getScreenshotFromS3(e){let r=await this.sendRequest(`/${q}/s3/visual-diff-screenshot`,{method:"POST",body:{url:e}});return SK.string().parse(r)}async getElementLocation(e,r){let n={...e,disableCache:r.disableCache,loggerTags:r.loggerTags,useMemory:r.useMemory,agentConfigVersion:this.agentConfig?.locator},o=await this.sendRequest(`/${q}/web-agent/locate-element`,{method:"POST",body:n,signal:r.abortSignal});return nx.parse(o)}async getAssertionResult(e,r){let n={...e,disableCache:!!r.disableCache,useConsensus:!!r.useConsensus,attemptNumber:r.attemptNumber,loggerTags:r.loggerTags,useMemory:r.useMemory,agentConfigVersion:this.agentConfig?.assertion},o=await this.sendRequest(`/${q}/web-agent/assertion`,{method:"POST",body:n,signal:r.abortSignal});return Cy.parse(o)}async getLintStepResult(e,r){let n={...e,disableCache:!!r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/lint/step`,{method:"POST",body:n,signal:r.abortSignal});return rx.parse(o)}async getLintMcpCopilotMessageResult(e,r){let n={message:e.message,disableCache:!!r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/lint/mcp-copilot`,{method:"POST",body:n,signal:r.abortSignal});return Qw.parse(o)}async getMcpCopilotConversationEvaluation(e,r){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/mcp-copilot-conversation-evaluator`,{method:"POST",body:n,signal:r.abortSignal});return ex.parse(o)}async getMcpCopilotChatSummary(e,r){let n={messagesAndToolCalls:e.messagesAndToolCalls,disableCache:!!r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/mcp-copilot-chat-summary`,{method:"POST",body:n,signal:r.abortSignal});return tx.parse(o)}async getVisualAssertionResult(e,r){let n={...e,disableCache:!!r.disableCache,useConsensus:!!r.useConsensus,attemptNumber:r.attemptNumber,loggerTags:r.loggerTags,useMemory:r.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},o=await this.sendRequest(`/${q}/web-agent/visual-assertion`,{method:"POST",body:n,signal:r.abortSignal});return Cy.parse(o)}async getAiActionCommand(e,r){let n=await this.sendRequest(`/${q}/web-agent/next-command-dynamic`,{method:"POST",body:{...e,disableCache:r.disableCache,loggerTags:r.loggerTags},signal:r.abortSignal});return Zw.parse(n)}async getMultiturnAiActionCommand(e,r){return await this.sendRequest(`/${q}/web-agent/ai-action/next-command`,{method:"POST",body:{...e,disableCache:r.disableCache,loggerTags:r.loggerTags},signal:r.abortSignal})}async getMultiturnAiActionEvaluation(e,r){let n=await this.sendRequest(`/${q}/web-agent/ai-action/evaluate`,{method:"POST",body:{...e,disableCache:r.disableCache,loggerTags:r.loggerTags},signal:r.abortSignal});return uS.parse(n)}async getReverseMappedDescription(e,r){let n=await this.sendRequest(`/${q}/web-agent/reverse-mapped-description`,{method:"POST",body:{...e,disableCache:r.disableCache,loggerTags:r.loggerTags},signal:r.abortSignal});return ox.parse(n)}async getTextExtraction(e,r){let n={...e,disableCache:r.disableCache,loggerTags:r.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},o=await this.sendRequest(`/${q}/web-agent/text-extraction`,{method:"POST",body:n,signal:r.abortSignal});return sS.parse(o)}async getPageSummary(e,r){let n={...e,disableCache:r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/page-summary`,{method:"POST",body:n,signal:r.abortSignal});return GR.parse(o)}async getSmartWaitingDecision(e,r){let n={...e,disableCache:r.disableCache,loggerTags:r.loggerTags},o=await this.sendRequest(`/${q}/web-agent/smart-waiting`,{method:"POST",body:n,signal:r.abortSignal});return VR.parse(o)}async getTestResultClassification(e,r){let n=await this.sendRequest(`/${q}/web-agent/result-classification`,{method:"POST",body:{...e,loggerTags:r.loggerTags},signal:r.abortSignal});return Gf.parse(n)}async getExtractedKeywords(e,r){let n=await this.sendRequest(`/${q}/web-agent/extract-keywords`,{method:"POST",body:e,signal:r.abortSignal});return IC.parse(n)}async getAutohealingProposal(e,r){let n=await this.sendRequest(`/${q}/web-agent/autoheal-section`,{method:"POST",body:{...e,loggerTags:r.loggerTags},signal:r.abortSignal});return BR.parse(n)}async getFailureRecoveryProposal(e,r){let n=await this.sendRequest(`/${q}/web-agent/failure-recovery`,{method:"POST",body:{...e,loggerTags:r.loggerTags},signal:r.abortSignal});return HR.parse(n)}async getFailureRecoveryPlan(e,r){let n=await this.sendRequest(`/${q}/web-agent/failure-recovery-plan`,{method:"POST",body:{...e,loggerTags:r.loggerTags},signal:r.abortSignal});return zR.parse(n)}async getIframeRegex(e,r){let n=await this.sendRequest(`/${q}/web-agent/iframe-regex`,{method:"POST",body:e,signal:r.abortSignal});return Jv.parse(n)}getVercelAnthropicModelFactory(e){let{sessionId:r,logger:n}=e;return Vu({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Qe(n),sessionId:r})}getVercelOpenAIModelFactory(e){let{sessionId:r,logger:n}=e;return Lb({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Qe(n),sessionId:r})}};import{z as Nb}from"zod";var dt=class extends hr{constructor(e){super({...e,mode:void 0})}getAppUrl(){return pl(this.baseUrl)}async getAuthInfo(){let e=await this.sendRequest(`/${q}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3,onFailedRequest:r=>{A.warn(`API key check failed: ${r.message}`)}});return Sx.parse(e)}async bulkGetRunStatus(e){let r=await this.sendRequest(`/${q}/runs/status`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return mx.parse(r)}async getTestYAMLExport(e){let r=await this.sendRequest(`/${q}/tests/export`,{method:"POST",body:e,retries:3,requestTimeoutMs:3e4});return ax.parse(r)}async updateStepCaches(e,r){await this.sendRequest(`/${q}/cache`,{method:"PATCH",body:e,extraHeaders:r,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getStepCacheForTest(e,r){let n=await this.sendRequest(`/${q}/cache`,{method:"POST",body:e,extraHeaders:r,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return lx.parse(n)}async getWebStepCacheMemoryTraces(e){let r=await this.sendRequest(`/${q}/cache/traces`,{method:"POST",body:e,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return xy.parse(r)}async getMobileStepCacheMemoryTraces(e){let r=await this.sendRequest(`/${q}/mobile-cache/traces`,{method:"POST",body:e,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return xy.parse(r)}async updateMobileStepCaches(e,r){await this.sendRequest(`/${q}/mobile-cache`,{method:"PATCH",body:e,extraHeaders:r,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3})}async getMobileStepCacheForTest(e,r){let n=await this.sendRequest(`/${q}/mobile-cache`,{method:"POST",body:e,extraHeaders:r,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return cx.parse(n)}async queueTests(e){let r=await this.sendRequest(`/${q}/tests/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return ix.parse(r)}async uploadScreenshot(e){let r=await this.sendRequest(`/${q}/screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return fx.parse(r)}async uploadOnDemandScreenshot(e){return await this.sendRequest(`/${q}/on-demand-screenshots`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${q}/on-demand-screenshots/${e.id}`}}async fetchOnDemandScreenshot(e){let r={};return{data:await this.sendRequest(`/${q}/on-demand-screenshots/${encodeURIComponent(e)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:r}),contentType:r["content-type"]??"image/jpeg"}}async getAllEnvironments(){let e=await this.sendRequest(`/${q}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return yx.parse(e)}async acquireCacheLock(e,r){let n=await this.sendRequest(`/${q}/result-cache/lock`,{method:"POST",body:e,signal:r,retries:3,requestTimeoutMs:3e4});return kx.parse(n)}async releaseCacheLock(e){await this.sendRequest(`/${q}/result-cache/lock`,{method:"DELETE",body:{key:e},retries:3,requestTimeoutMs:5e3})}async deleteCacheResult(e){await this.sendRequest(`/${q}/result-cache/entry`,{method:"DELETE",body:e,retries:3,requestTimeoutMs:5e3})}async setCacheResult(e){await this.sendRequest(`/${q}/result-cache/entry`,{method:"PATCH",body:e,retries:3,requestTimeoutMs:5e3})}async getCacheResult(e){try{return await this.sendRequest(`/${q}/result-cache/entry`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(r){if(r instanceof Error&&r.message.includes("404"))return null;throw r}}async queueSuiteRuns(e){let r=await this.sendRequest(`/${q}/suites/queue`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3});return bx.parse(r)}async bulkGetRunGroupStatus(e){let r={runGroupIds:e},n=await this.sendRequest(`/${q}/run-groups/status`,{method:"POST",body:r,retries:3,requestTimeoutMs:5e3});return cC.array().parse(n)}async uploadProposedSteps(e,r){try{await this.sendRequest(`/${q}/test-fragments/`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4})}catch(n){r.error({err:n},"Failed to upload proposed steps")}}async reportBillableEvents(e,r){try{await this.sendRequest(`/${q}/billing/events`,{method:"POST",body:r,retries:10,requestTimeoutMs:1e4})}catch(n){e.error({err:n},"Failed to report billable event")}}async fetchTestFragment(e){let r=await this.sendRequest(`/${q}/test-fragments/${e}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ex.parse(r)}async patchTestFragment(e,r){await this.sendRequest(`/${q}/test-fragments/${e}`,{method:"PATCH",body:r,retries:3,requestTimeoutMs:1e4})}async getPastTestResults(e,r){let n=await this.sendRequest(`/${q}/results/tests/${e}`,{method:"POST",body:r,retries:3,requestTimeoutMs:1e4});return Tx.parse(n)}async generateTestResultsUploadUrl(){let e=await this.sendRequest(`/${q}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return vx.parse(e)}async startProcessingResultsUpload(e,r){let n=await this.sendRequest(`/${q}/results/uploads/${e}/process`,{method:"POST",body:r,retries:3,requestTimeoutMs:1e4});return Ax.parse(n)}async fetchIconKnowledgeBase(e){try{let r=await this.sendRequest(`/${q}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Hx.parse(r)}catch(r){return e.error({err:r},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(e,r){try{await this.sendRequest(`/${q}/knowledge-base/icons`,{method:"POST",body:e,retries:3,requestTimeoutMs:5e3})}catch(n){r.error({err:n},"Failed to save new icons to icon knowledge base")}}async getMergeBaseCommitFromGithub(e,r,n,o){let i=new URLSearchParams;i.set("base",n),i.set("head",o);let a=await this.sendRequest(`/${q}/git/github/${e}/${r}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Cu.parse(a)}async getCommitFromGithub(e,r,n){let o=await this.sendRequest(`/${q}/git/github/${e}/${r}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Cu.parse(o)}async getMergedBranchFromGithub(e,r,n,o){let i=encodeURIComponent(n),a=await this.sendRequest(`/${q}/git/github/${e}/${r}/${i}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Py.parse(a)}async getMergeBaseCommitFromGitlab(e,r,n){let o=new URLSearchParams;o.set("base",r),o.set("head",n);let i=encodeURIComponent(e),a=await this.sendRequest(`/${q}/git/gitlab/${i}/merge-base-commit?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Cu.parse(a)}async getCommitFromGitlab(e,r){let n=encodeURIComponent(e),o=await this.sendRequest(`/${q}/git/gitlab/${n}/commits/${r}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Cu.parse(o)}async getMergedBranchFromGitlab(e,r,n){let o=encodeURIComponent(r),i=encodeURIComponent(e),a=await this.sendRequest(`/${q}/git/gitlab/${i}/${o}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Py.parse(a)}async getAgentConfig(){let e=await this.sendRequest(`/${q}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Nb.record(Nb.string(),Nb.string()).parse(e)}async getQuarantinedTests(){let e=await this.sendRequest(`/${q}/quarantine`,{method:"GET"});return Rx.parse(e)}async quarantineTest(e,r,n){await this.sendRequest(`/${q}/quarantine`,{method:"POST",body:{testId:e.id,testName:e.name,reason:r,...n??{}},retries:3,requestTimeoutMs:1e4})}async unquarantineTest(e,r,n){await this.sendRequest(`/${q}/quarantine/${e.id}`,{method:"DELETE",body:{testName:e.name,reason:r,...n??{}},retries:3,requestTimeoutMs:1e4})}async createAndroidEmulator(e){let r=await this.sendRequest(`/${q}/limbar/android`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Cx.parse(r)}async extendAndroidEmulatorTtl(e){try{await this.sendRequest(`/${q}/limbar/android/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async generateAndroidAssetUrls({channel:e,tag:r,md5:n}){let o={channel:e,tag:r,md5:n},i=await this.sendRequest(`/${q}/limbar/android/upload-url`,{method:"POST",retries:3,body:o,requestTimeoutMs:15e3,logResponse:!0});return xx.parse(i)}async deleteAndroidEmulator(e){await this.sendRequest(`/${q}/limbar/android/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async getAndroidAssets(){let e=await this.sendRequest(`/${q}/limbar/assets`,{method:"GET",retries:3,requestTimeoutMs:1e4});return _x.parse(e)}async getLimbarAssetDownloadUrl(e,r){let n=await this.sendRequest(`/${q}/limbar/assets/${e}/${r}/download-url`,{method:"GET",retries:2,requestTimeoutMs:3e4});return Ix.parse(n)}async deleteAndroidAsset(e,r){await this.sendRequest(`/${q}/limbar/assets/${e}/${r}`,{method:"DELETE",retries:3,requestTimeoutMs:1e4})}async createIosEmulator(e){let r=await this.sendRequest(`/${q}/limbar/ios`,{method:"POST",retries:3,body:e,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return wx.parse(r)}async extendIosEmulatorTtl(e){try{await this.sendRequest(`/${q}/limbar/ios/${e}/keepalive`,{method:"POST",retries:3,requestTimeoutMs:15e3})}catch{}}async deleteIosEmulator(e){await this.sendRequest(`/${q}/limbar/ios/${e}`,{method:"DELETE",retries:3,requestTimeoutMs:3e4})}async generateMobileLogcatUploadUrl(e){let r=await this.sendRequest(`/${q}/logcat/mobile/upload`,{method:"POST",body:e,retries:3,requestTimeoutMs:1e4});return Sw.parse(r)}};async function Jm(t){let e=process.versions.node,r=parseInt(e.split(".")[0]);(isNaN(r)||r<18)&&(A.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),A.debug(`Identified node version ${e}`);let n=await t.client.getAuthInfo();return A.debug("Got auth info from API"),n}var Zm=class{apiClient;constructor(e){this.apiClient=e}async reportBillableEvents(e,r){await this.apiClient.reportBillableEvents(e,r)}};var qi=class extends hr{generator;constructor(e,r){super(e),this.generator=r}async runTemplateMatching(e,r={}){let n=await this.sendRequest(`/${q}/web-agent/template-matching`,{method:"POST",body:e,signal:r?.signal});return Zv.parse(n)}async constructIframeRegex(e,r={}){return this.generator.getIframeRegex(e,{abortSignal:r.signal})}};var Dl=class{constructor(e,r){this.client=e;this.orgId=r}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let e=this.getApiServerUrl();return pl(e)}async acquireCacheLock(e,r){return this.client.acquireCacheLock(e,r)}async createOnDemandScreenshot(e,r,n){let{apiServerUrl:o}=await this.client.uploadOnDemandScreenshot({id:e,screenshot:r.toString("base64"),contentType:n});return{apiServerUrl:o,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${e}`,universalHandle:{id:e,contentType:n}}}async fetchOnDemandScreenshot(e){return this.client.fetchOnDemandScreenshot(e.id)}async releaseCacheLock(e){return this.client.releaseCacheLock(e)}async deleteCacheResult(e){return this.client.deleteCacheResult(e)}async setCacheResult(e){return this.client.setCacheResult(e)}async getCacheResult(e){return this.client.getCacheResult(e)}fetchIconKnowledgeBase(e){return this.client.fetchIconKnowledgeBase(e)}saveNewIcons(e,r){return this.client.saveNewIcons(e,r)}};import{Faker as yK,en as bK}from"@faker-js/faker";var kl="v1",xo=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 yK({locale:bK}),this.fakerInstance.seed(e.fakerSeed))}async sendAiGenerate(e){let r=typeof e=="string"?{input:e}:e;return this.httpClient.sendRequest(`/${kl}/tools/ai/generate`,{method:"POST",body:r}).catch(n=>{throw n instanceof to?new Error(n.rawError):new Error(`Failed to send AI generation: ${n.message}`)})}async sendSms(e){return this.httpClient.sendRequest(`/${kl}/tools/sms/send`,{method:"POST",body:e}).then(()=>{}).catch(r=>{throw r instanceof to?new Error(r.rawError):new Error(`Failed to send sms: ${r.message}`)})}async fetchLatestSms(e){return this.httpClient.sendRequest(`/${kl}/tools/sms/fetchLatest`,{method:"POST",body:e}).catch(r=>{throw r instanceof to?new Error(r.rawError):r})}async sendEmail(e){return this.httpClient.sendRequest(`/${kl}/tools/email/send`,{method:"POST",body:e}).then(()=>{}).catch(r=>{throw r instanceof to?new Error(r.rawError):new Error(`Failed to send email: ${r.message}`)})}async fetchAllEmails(e){return this.httpClient.sendRequest(`/${kl}/tools/email/fetchAll`,{method:"POST",body:e}).catch(r=>{throw r instanceof to?new Error(r.rawError):new Error(`Failed to fetch all emails: ${r.message}`)})}async fetchLatestEmail(e){return this.httpClient.sendRequest(`/${kl}/tools/email/fetchLatest`,{method:"POST",body:e}).catch(r=>{throw r instanceof to?new Error(r.rawError):new Error(`Failed to fetch latest emails: ${r.message}`)})}};function kP(t,e,r){return fetch(t,{method:"PUT",body:r,headers:{"Content-Type":e}})}var Qm=class{constructor(e){this.client=e}async uploadResultsArchive(e,r){let{uploadUrl:n,id:o}=await this.client.generateTestResultsUploadUrl(),i=await kP(n,"application/zip",r);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}};function _o({logger:t,orgId:e,client:r,gitMetadata:n,regenerateCache:o,alwaysSaveCache:i,noCache:a,bustOldestCachePercentage:s}){return a?new cm:new Db(t,e,r,n,{regenerateCache:o,alwaysSaveCache:i,bustOldestCachePercentage:s})}var Db=class{constructor(e,r,n,o,i){this.orgId=r;this.client=n;let{regenerateCache:a,alwaysSaveCache:s,bustOldestCachePercentage:c}=i,{gitBranchName:l,gitProtectedBranches:u}=o;e.info({options:i,gitBranchName:l,gitProtectedBranches:u},"Cache storage initialization options"),this.cacheHeaders=wy(o),this.readCaches=!a;let d=l&&u.includes(l);s||!d?this.writeCaches=!0:this.writeCaches=!1,d||(this.bustOldestCachePercentage=c)}cacheHeaders;readCaches;writeCaches;bustOldestCachePercentage;async saveStepCacheEntries({entries:e,testId:r,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:e,testId:r},this.cacheHeaders)}catch(o){n.error({err:o},"Failed to save step cache entries")}}async resolveStepCacheEntries(e){if(!this.readCaches){e.logger.debug("Skipping cache resolution because of regenerate flag");return}let{steps:r,beforeSteps:n,afterSteps:o}=e.stepLists,i=await this.client.getStepCacheForTest({testId:e.testId},this.cacheHeaders);if(this.bustOldestCachePercentage!==void 0){let s=Object.entries(i).map(([u,d])=>({key:u,time:d.value.cache?.updatedAt?.getTime()??0}));s.sort((u,d)=>u.time-d.time);let c=s.length,l=Math.max(1,Math.floor(c*this.bustOldestCachePercentage/100));s.slice(0,l).forEach(({key:u})=>{delete i[u]}),e.logger.info({nCachesToBust:l,bustOldestCachePercentage:this.bustOldestCachePercentage,totalCaches:c},"Busted oldest caches")}for(let s of[r,n,o])s&&El({steps:s,stepCacheEntries:i,logger:e.logger});if(!this.writeCaches){e.logger.debug("Skipping cache last used at update because branch is protected");return}let{cachesToSave:a}=await Pt({stepLists:e.stepLists,cacheCreationParams:{testId:e.testId,orgId:this.orgId}});this.client.updateStepCaches({entries:a,testId:e.testId},this.cacheHeaders)}};import eg from"path";function EK(t){let e=new UP,r=eg.join(t,"metadata.json"),n=ml.parse(JSON.parse(kb.readFileSync(r,"utf-8")));e.addLocalFile(r);for(let o of kb.readdirSync(eg.join(t,"runs"))){if(!o.endsWith(".zip"))continue;let i=o.replace(/\.zip$/,""),a=new UP(eg.join(t,"runs",o));for(let s of a.getEntries())s.isDirectory||e.addFile(eg.join("runs",i,s.entryName),s.getData())}return{runGroupId:n.id,buffer:e.toBuffer()}}async function tg(t){let{client:e,consoleLogger:r,resultsPath:n}=t;if(!kb.existsSync(n)){r.warn("Results path does not exist, skipping upload.");return}let o=new Qm(e);try{let{runGroupId:i,buffer:a}=EK(n),s=await o.uploadResultsArchive(i,a),c=`${e.getAppUrl()}/run-groups/${s}`;r.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",r.error(`Failed to upload test results: ${a}.`);return}}import TK from"adm-zip";import Pr from"fs";import Dn from"path";var $u=class t{constructor(e){this.filePath=e;Pr.rmSync(this.filePath,{recursive:!0,force:!0}),Pr.mkdirSync(this.filePath,{recursive:!0})}children=[];streams=[];close(){for(let e of this.children)e.close();for(let e of this.streams)e.end()}cd(e){let r=new t(Dn.join(this.filePath,e));return this.children.push(r),r}cwd(){return this.filePath}mkdir(e){Pr.mkdirSync(Dn.join(this.filePath,e),{recursive:!0})}readFile(e){let r=Dn.join(this.filePath,e);if(Pr.existsSync(r))return Pr.readFileSync(r)}storeFile(e){let{name:r,contents:n}=e,o=Dn.join(this.filePath,r);try{Pr.writeFileSync(o,n)}catch{}}createFileStream(e){let r=Dn.join(this.filePath,e),n=Pr.createWriteStream(r);return this.streams.push(n),n}createRunArchive(e){let r=new Ub(Dn.join(this.filePath,"runs"),e);return this.children.push(r),r}},Ub=class{children=[];tempPath;finalPath;constructor(e,r){this.tempPath=Dn.join(e,`temp-storage-${r}`),this.finalPath=Dn.join(e,`${r}.zip`),Pr.rmSync(this.tempPath,{recursive:!0,force:!0}),Pr.rmSync(this.finalPath,{recursive:!0,force:!0}),Pr.mkdirSync(this.tempPath,{recursive:!0})}readFile(e){let r=Dn.join(this.tempPath,e);if(Pr.existsSync(r))return Pr.readFileSync(r)}mkdir(e){Pr.mkdirSync(Dn.join(this.tempPath,e),{recursive:!0})}cd(e){let r=new $u(Dn.join(this.tempPath,e));return this.children.push(r),r}cwd(){return this.tempPath}storeFile(e){let{name:r,contents:n}=e,o=Dn.join(this.tempPath,r);Pr.writeFileSync(o,n)}close(){for(let n of this.children)n.close();let e=new TK;e.addLocalFolder(this.tempPath,void 0,n=>n!==".DS_Store");let r=e.toBuffer();Pr.writeFileSync(this.finalPath,r),Pr.rmSync(this.tempPath,{recursive:!0,force:!0})}};import vK from"adm-zip";import{randomUUID as AK}from"crypto";import er from"fs";import yr from"path";function HP(t){try{return er.existsSync(t)?JSON.parse(er.readFileSync(t,"utf-8")):void 0}catch{return}}function FP(t){return er.existsSync(t)?er.readFileSync(t,"utf-8").split(`
78
- `).map(r=>r.trim()).filter(r=>r.length>0):[]}function RK(t,e){let r=t.attemptIdToAttemptNumber.get(e);if(r)return yr.join(t.inflatedPath,"attempts",r);let n=yr.join(t.inflatedPath,"attempts");if(!er.existsSync(n))return;let o=er.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=yr.join(n,i,"metadata.json"),s=HP(a);if(typeof s!="object"||s===null)continue;let c=s.id;if(typeof c=="string"&&c===e)return t.attemptIdToAttemptNumber.set(e,i),yr.join(n,i)}}function BP(t,e,r){let n=yr.join(t,"attempts");if(!er.existsSync(n))return;let o=er.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=yr.join(n,i,"assets",`${e}.${r}`);if(er.existsSync(a))return a}}var rg=class{constructor(e,r,n){this.outputDir=e;this.runId=r;this.runAttemptId=n;this.runsDir=yr.join(e,"runs"),this.zipPath=yr.join(this.runsDir,`${r}.zip`)}inflatedByRunId=new Map;zipPath;runsDir;ensureInflatedRun(e){let r=this.inflatedByRunId.get(e);if(r)return r;if(e!==this.runId||!er.existsSync(this.zipPath))return;let n=yr.join(this.runsDir,`temp-unzipped-${e}-${AK()}`);er.mkdirSync(n,{recursive:!0}),new vK(this.zipPath).extractAllTo(n,!0);let i={runId:e,zipPath:this.zipPath,inflatedPath:n,attemptIdToAttemptNumber:new Map};return this.inflatedByRunId.set(e,i),i}close(){for(let e of this.inflatedByRunId.values())er.rmSync(e.inflatedPath,{recursive:!0,force:!0});this.inflatedByRunId.clear()}getAttemptDir(){let e=this.ensureInflatedRun(this.runId);if(e)return RK(e,this.runAttemptId)}listVideoAssetPaths(){let e=this.getAttemptDir();if(!e)return[];let r=yr.join(e,"assets");return er.existsSync(r)?er.readdirSync(r,{withFileTypes:!0}).filter(o=>o.isFile()).map(o=>yr.join(r,o.name)).filter(o=>{let i=yr.extname(o).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(e,r){let n=this.getAttemptDir();if(!n)return;let o=yr.join(n,"assets",`${e}.${r}`);if(er.existsSync(o))try{return er.readFileSync(o,"utf-8")}catch{return}}async getConsoleLogsForRunAttempt(e,r,n){if(r!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=HP(yr.join(o,"console.json")),a=hy.safeParse(i);return a.success?a.data:void 0}async getNetworkLogsForRunAttempt(e,r,n){if(r!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=yr.join(o,"assets","har-pages.log"),a=yr.join(o,"assets","har-entries.log"),s={};for(let u of FP(i)){let d=Eu.safeParse(zP(u));d.success&&(s[d.data.id]=d.data)}let c={},l=FP(a);for(let u=0;u<l.length;u++){let d=l[u],p=Tu.safeParse(zP(d));if(!p.success)continue;let m=`${p.data.startedDateTime}-${u}`;c[m]=p.data}if(Object.keys(c).length!==0)return Sy(s,c)}async getHtmlSnapshot(e,r){let n=this.readAttemptAssetText(r,"html");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=BP(o.inflatedPath,r,"html");if(i)try{return er.readFileSync(i,"utf-8")}catch{return}}async getA11yTreeSnapshot(e,r){let n=this.readAttemptAssetText(r,"xml");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=BP(o.inflatedPath,r,"xml");if(i)try{return er.readFileSync(i,"utf-8")}catch{return}}async getScreenshot(e,r){if(!this.ensureInflatedRun(this.runId))return;let o=this.getAttemptDir(),i=o?yr.join(o,"assets",`${r}.jpeg`):void 0;if(i)try{return er.readFileSync(i)}catch{return}}};function zP(t){try{return JSON.parse(t)}catch{return}}function ng({test:t,envNameOverride:e,urlOverride:r,resolveEnv:n}){let o=e??CK(t),i,a={};if(o){try{i=n(o)}catch(c){throw new Error(`Failed to resolve environment ${o} for test ${t.name}: ${String(c)}`)}a=i.variables}let s=t.baseUrl;if(r)s=r;else if(!s){let c=a[nr];typeof c=="string"&&(s=c)}if(!s)throw new Error(`Cannot run test with no base URL and no ${nr} variable defined in its environment`);return{envName:o,resolvedEnv:i,environmentVariables:a,baseUrl:s}}function CK(t){for(let e of t.envs??[])if(e.default)return e.name}import og from"fs";import wK from"path";var xK=new Am(30,60*1e3),ag="https://api.momentic.ai",Bb,jP,sg=t=>{ag=t},ar=()=>ag,GP=()=>pl(ag),VP=t=>{jP=t},$P=()=>jP,Fl=()=>Bb;var Ul,zb,ig,lg=async t=>{if(Bb&&Ul&&ig)return Ul;let e=new dt({baseUrl:ag,apiKey:t,logger:A});Bb=e;try{let r=await e.getAuthInfo();return Ul=r.orgId,zb=r.userId,ig=t,Ul}catch(r){throw new Error(`Error checking API key against server: ${r}`)}},Ht=()=>{if(!Ul)throw new Error("Your organization ID is invalid.");return Ul},Io=()=>{if(!zb)throw new Error("Your user ID is invalid.");return zb},tn=()=>{if(!ig)throw new Error("Your API key is invalid.");return ig},Hb,Fb,cg=(t,e)=>{Hb=t,Fb?.abort(),Fb=new AbortController;let r=Fb.signal,n=[t.configFilePath];t.config.environments?.forEach(o=>{if(!o.envFile)return;let i=wK.resolve(t.rootDir,o.envFile);try{if(og.lstatSync(i).isSymbolicLink())return;og.existsSync(i)&&n.push(i)}catch(a){A.warn({err:a},`Failed to check if env file ${i} exists`)}});try{_K({filesToWatch:n,revalidator:e,signal:r,project:t})}catch(o){A.error({err:o},"Failed to start config file watchers")}},Se=()=>Hb;function _K({filesToWatch:t,revalidator:e,signal:r,project:n}){A.debug("Starting watch on the following files:"),t.forEach(o=>{A.debug(`- ${o}`)}),t.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(xK.increment("setLocalProject")&&A.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.`),Hb=await Promise.resolve(e(n.configFilePath)))};og.watchFile(o,{persistent:!1},i);let a=()=>{og.unwatchFile(o,i),r.removeEventListener("abort",a)};r.addEventListener("abort",a),process.once("SIGUSR2",()=>{a(),process.kill(process.pid,"SIGUSR2")})})}function Be(t){return function(...e){let r=e[e.length-1],n=t(...e);Promise.resolve(n).catch(r)}}import{hostname as IK}from"os";var PK="2.45.2",es=hl({app:"desktop-server",hostname:IK(),disableConsoleLogs:!0}).child({cliVersion:PK});(async()=>{try{let t=await si(es);t.gitBranchName&&es.addBinding("branch",t.gitBranchName)}catch{}})();var WP=MK();WP.get("/",async(t,e)=>{let r=Se(),n=Fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await _r(es,n,r),i=o?.gitProtectedBranches&&o?.gitBranchName&&o.gitProtectedBranches.includes(o.gitBranchName),{noCache:a,alwaysSaveCache:s}=$P(),c=!a&&(s||!i);e.status(200).json({saveCaches:c,checkedOutBranch:o?.gitBranchName})});var jb=WP;import{Router as OK}from"express";import Vr from"fs";import{globSync as LK}from"glob";import sr from"path";var qu=OK();function Wu(t){let e=Se(),r=sr.dirname(e.configFilePath);return sr.join(r,...t)}function NK(t){let e=Se(),r=sr.dirname(e.configFilePath),n=sr.relative(r,t);return n?n.split(sr.sep):[]}function DK(t,e){let r=Vr.statSync(t),n=NK(t);return Ey.parse({name:e,absolutePath:t,relativePath:n.join(sr.sep),pathSegments:n,isDirectory:r.isDirectory(),size:r.size,createdAt:r.birthtime,modifiedAt:r.mtime,accessedAt:r.atime})}qu.post("/",Be(async(t,e,r)=>{let n;try{n=Uw.parse(t.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=Wu(n);if(!Vr.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(sr.sep)}`});return}if(!Vr.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(sr.sep)}`});return}let a=Se(),s=Array.from(a.config.exclude??[]).concat(nm),l=LK("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let p=sr.join(o,d);return DK(p,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));qu.put("/",Be(async(t,e,r)=>{let n;try{n=Fw.parse(t.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=Wu(n);if(Vr.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(sr.sep)}`,pathSegments:n});return}Vr.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(sr.sep)}`,pathSegments:n};e.status(201).json(i)}));qu.patch("/",Be(async(t,e,r)=>{let n,o;try{let l=Bw.parse(t.body);n=l.pathSegments,o=l.newPathSegments}catch(l){e.status(400).json({error:`Failed to parse folder update body: ${l}`});return}let i=Wu(n),a=Wu(o);if(!Vr.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(sr.sep)}`});return}if(Vr.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(sr.sep)}`});return}let s=sr.dirname(a);Vr.existsSync(s)||Vr.mkdirSync(s,{recursive:!0}),Vr.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(sr.sep)} to ${o.join(sr.sep)}`,pathSegments:o};e.status(200).json(c)}));qu.delete("/",Be(async(t,e,r)=>{let n,o=!0;try{let c=zw.parse(t.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=Wu(n);if(!Vr.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(sr.sep)}`,pathSegments:n});return}if(!Vr.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(sr.sep)}`});return}if(o)Vr.rmSync(i,{recursive:!0,force:!0});else{if(Vr.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Vr.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Gb=qu;import{Router as kK}from"express";var qP=kK();qP.get("/",async(t,e)=>{let r=Se(),n=Fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await _r(es,n,r);e.status(200).json(o)});var Vb=qP;import fZ from"events";import KU,{Router as SZ}from"express";import yZ from"http";import bZ from"path";import{Server as E8}from"socket.io";var UK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async()=>{e.info({sessionId:n},"Cancel event received");let o=r.getSession(n);if(!o)throw new Error("No active session found");try{o.controller.setClosed()}catch{}}},KP={event:"cancel",createHandler:UK};var FK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async(o,i)=>{let a=r.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let l=(await s.getBrowserState({skipWait:!0})).serialize();e.debug({a11yTree:l},"Fetched a11y tree from the browser"),i({a11yTree:l})}catch(c){e.error({err:c},"Error fetching a11y tree from the browser"),i({err:c.message})}}},YP={event:"fetchA11yTree",createHandler:FK};var BK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async(o,i)=>{let a=r.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let c=await s.html();i({html:c})}catch(c){e.error({err:c},"Error fetching DOM from the browser"),c.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:c.message})}}},XP={event:"fetchDom",createHandler:BK};var zK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return o=>{e.info({sessionId:n,reason:o},`Disconnect event received (${o})`),r.removeSession(n,e)}},JP={event:"disconnect",createHandler:zK};function kn(t){let{result:e,nestedResults:r}=t;if(!t.nestedResults.length)return;let{firstMetadata:n,lastMetadata:o}=HK(r);jK(e,n,o);let i=[...t.asyncTasks];t.asyncTasks.push((async()=>{try{await GK(i,e,n,o)}catch(a){t.logger.error({result:t.result,err:a},"Error hoisting scalar result metadata")}})())}function HK(t){let e=t[0],r;for(;;){switch(e.type){case"PRESET_ACTION":{r=e;break}case"CONDITIONAL":r=t[0];break;case"AI_ACTION_DYNAMIC":case"AI_ACTION":case"MODULE":case"SECTION":if(!e.results.length){r=e;break}e=e.results[0];break;default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}if(r)break}let n=t[t.length-1],o;for(;;){switch(n.type){case"PRESET_ACTION":{o=n;break}case"AI_ACTION_DYNAMIC":case"CONDITIONAL":case"AI_ACTION":case"MODULE":case"SECTION":if(!n.results.length){o=n;break}n=n.results[n.results.length-1];break;default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}if(o)break}return{firstMetadata:r,lastMetadata:o}}function jK(t,e,r){e&&(t.beforeUrl=e.beforeUrl),r&&(t.afterUrl=r.afterUrl,t.data=r.data,r.status!=="SUCCESS"&&(t.message=r.message))}async function GK(t,e,r,n){await Promise.allSettled(t),r&&(e.beforeSnapshot=r.beforeSnapshot),n&&(e.afterSnapshot=n.afterSnapshot)}import{randomUUID as eY}from"crypto";import{faker as VK}from"@faker-js/faker";import $K from"assert";import WK from"axios";import*as qK from"child_process";import KK from"moment";import*as YK from"otpauth";import XK from"pg";async function ZP(t){let e;try{e=new URL(t.url).hostname}catch{}let r=[];return t.headers.getSetCookie()?.forEach(n=>{let o=Kp(n,e);r.push(...o)}),r}function JK(t,e){if(!t&&!e)return;let r;if(t){let{url:o,options:i}=t;r=new Request(o,i)}let n;if(e){let{body:o,options:i}=e;n=new Response(o??null,i)}return{request:r,response:n}}async function ZK(t,e){switch(t){case"RAW":return e;case"RESPONSE":if(e instanceof Response){let r=[];return e.headers.forEach((o,i)=>{r.push([i,o])}),{status:e.status,headers:r,body:await e.text()}}else throw new Error("Result is not a Response object")}}var QK=Object.getPrototypeOf(async function(){}).constructor;async function QP(t,e,r){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=(y,T)=>{o[y]=T,l[y]=T},d={},p=(y,T)=>{o[y]=T,d[y]=T},m;n.includes("Octokit")&&(m=(await import("@octokit/rest")).Octokit);let h;n.includes("createAppAuth")&&(h=(await import("@octokit/auth-app")).createAppAuth);let g=async()=>await Promise.resolve(new QK("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","ai","mock",...Object.keys(i??{}),n)(WK,KK,c.fakerInstance??VK,$K,XK,m,h,YK,qK,ZP,o,e.options.disallowVariableUpdates?void 0:u,e.options.disallowVariableUpdates?void 0:p,T=>c.sms.send(T),T=>c.sms.fetchLatest(T),c.email,c.sms,c.ai,JK(a,s),...Object.values(i??{}))),f=!0,S,b;try{let y=await X(g(),{milliseconds:e.options.timeoutMs,message:`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`,signal:e.signal});S=await ZK(e.options.responseSerialization??"RAW",y)}catch(y){r.error({err:y,env:o,evalCode:n},`[${t}] Error executing code: ${y}`),f=!1,y instanceof Bi?b=`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`:b=y instanceof Error?y.message:`${y}`}return{result:S,variableUpdates:l,persistentVariableUpdates:d,success:f,error:b}}async function eM({code:t,fragment:e,context:r,localTools:n,logger:o,signal:i,timeoutMs:a=Di,disallowVariableUpdates:s,additionalBindings:c,responseSerialization:l,mock:u}){let d=eY(),p=await QP(d,{code:t,options:{fragment:e,timeoutMs:a,disallowVariableUpdates:s,responseSerialization:l},bindings:{...r.toObjectCopy(),...u,additionalBindings:c},tools:n,signal:i},o);return A.debug(`[${d}] Got execution result: ${JSON.stringify(p)}`),p}import{createHmac as tY,randomUUID as rY}from"crypto";import nY from"fetch-retry";var oY=nY(global.fetch,{retries:3,retryOn:function(t,e,r){return!!(e!==null||r&&r.status>=500)},retryDelay:function(t){return Math.pow(2,t)*500}}),tM=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,rM=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function nM({orgId:t,code:e,fragment:r,context:n,timeoutMs:o=Di,retries:i=2,signal:a,logger:s,additionalBindings:c,disallowVariableUpdates:l,responseSerialization:u,mock:d}){if(!tM)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,m,h=0;if(!rM)throw new Error("Missing lambda auth secret.");let g=tY("sha256",rM).update(t).digest("hex");for(;h<=i;){h++,a?.throwIfAborted();let S={id:rY(),orgId:t,momenticLambdaAuthHash:g,code:e,fragment:r,state:{...n.toObjectCopy(),...d,additionalBindings:c},timeoutMs:o,disallowVariableUpdates:l,responseSerialization:u};try{if(p=await X(oY(tM,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)}),{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}`);m=void 0;break}catch(b){m=b}}if(m)throw s.error({err:m},"Failed to evaluate code remotely"),m;if(!p)throw new Error(`An unexpected code evaluation error occurred${m?`: ${m}`:""}`);let f;try{f=bw.parse(await p.json())}catch(S){throw new Error(`Code evaluation server returned invalid response: ${S}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function Ki(t){let e;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)e=await nM(t);else if(t.localTools)e=await eM({...t,localTools:t.localTools});else throw new Error("No code evaluation environment available");if(e.error){let r=`Failed to evaluate code:
78
+ `).map(r=>r.trim()).filter(r=>r.length>0):[]}function RK(t,e){let r=t.attemptIdToAttemptNumber.get(e);if(r)return yr.join(t.inflatedPath,"attempts",r);let n=yr.join(t.inflatedPath,"attempts");if(!er.existsSync(n))return;let o=er.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=yr.join(n,i,"metadata.json"),s=HP(a);if(typeof s!="object"||s===null)continue;let c=s.id;if(typeof c=="string"&&c===e)return t.attemptIdToAttemptNumber.set(e,i),yr.join(n,i)}}function BP(t,e,r){let n=yr.join(t,"attempts");if(!er.existsSync(n))return;let o=er.readdirSync(n,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name);for(let i of o){let a=yr.join(n,i,"assets",`${e}.${r}`);if(er.existsSync(a))return a}}var rg=class{constructor(e,r,n){this.outputDir=e;this.runId=r;this.runAttemptId=n;this.runsDir=yr.join(e,"runs"),this.zipPath=yr.join(this.runsDir,`${r}.zip`)}inflatedByRunId=new Map;zipPath;runsDir;ensureInflatedRun(e){let r=this.inflatedByRunId.get(e);if(r)return r;if(e!==this.runId||!er.existsSync(this.zipPath))return;let n=yr.join(this.runsDir,`temp-unzipped-${e}-${AK()}`);er.mkdirSync(n,{recursive:!0}),new vK(this.zipPath).extractAllTo(n,!0);let i={runId:e,zipPath:this.zipPath,inflatedPath:n,attemptIdToAttemptNumber:new Map};return this.inflatedByRunId.set(e,i),i}close(){for(let e of this.inflatedByRunId.values())er.rmSync(e.inflatedPath,{recursive:!0,force:!0});this.inflatedByRunId.clear()}getAttemptDir(){let e=this.ensureInflatedRun(this.runId);if(e)return RK(e,this.runAttemptId)}listVideoAssetPaths(){let e=this.getAttemptDir();if(!e)return[];let r=yr.join(e,"assets");return er.existsSync(r)?er.readdirSync(r,{withFileTypes:!0}).filter(o=>o.isFile()).map(o=>yr.join(r,o.name)).filter(o=>{let i=yr.extname(o).toLowerCase();return i===".webm"||i===".mp4"}):[]}readAttemptAssetText(e,r){let n=this.getAttemptDir();if(!n)return;let o=yr.join(n,"assets",`${e}.${r}`);if(er.existsSync(o))try{return er.readFileSync(o,"utf-8")}catch{return}}async getConsoleLogsForRunAttempt(e,r,n){if(r!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=HP(yr.join(o,"console.json")),a=hy.safeParse(i);return a.success?a.data:void 0}async getNetworkLogsForRunAttempt(e,r,n){if(r!==this.runId||n!==this.runAttemptId)return;let o=this.getAttemptDir();if(!o)return;let i=yr.join(o,"assets","har-pages.log"),a=yr.join(o,"assets","har-entries.log"),s={};for(let u of FP(i)){let d=Eu.safeParse(zP(u));d.success&&(s[d.data.id]=d.data)}let c={},l=FP(a);for(let u=0;u<l.length;u++){let d=l[u],p=Tu.safeParse(zP(d));if(!p.success)continue;let m=`${p.data.startedDateTime}-${u}`;c[m]=p.data}if(Object.keys(c).length!==0)return Sy(s,c)}async getHtmlSnapshot(e,r){let n=this.readAttemptAssetText(r,"html");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=BP(o.inflatedPath,r,"html");if(i)try{return er.readFileSync(i,"utf-8")}catch{return}}async getA11yTreeSnapshot(e,r){let n=this.readAttemptAssetText(r,"xml");if(n)return n;let o=this.ensureInflatedRun(this.runId);if(!o)return;let i=BP(o.inflatedPath,r,"xml");if(i)try{return er.readFileSync(i,"utf-8")}catch{return}}async getScreenshot(e,r){if(!this.ensureInflatedRun(this.runId))return;let o=this.getAttemptDir(),i=o?yr.join(o,"assets",`${r}.jpeg`):void 0;if(i)try{return er.readFileSync(i)}catch{return}}};function zP(t){try{return JSON.parse(t)}catch{return}}function ng({test:t,envNameOverride:e,urlOverride:r,resolveEnv:n}){let o=e??CK(t),i,a={};if(o){try{i=n(o)}catch(c){throw new Error(`Failed to resolve environment ${o} for test ${t.name}: ${String(c)}`)}a=i.variables}let s=t.baseUrl;if(r)s=r;else if(!s){let c=a[nr];typeof c=="string"&&(s=c)}if(!s)throw new Error(`Cannot run test with no base URL and no ${nr} variable defined in its environment`);return{envName:o,resolvedEnv:i,environmentVariables:a,baseUrl:s}}function CK(t){for(let e of t.envs??[])if(e.default)return e.name}import og from"fs";import wK from"path";var xK=new Am(30,60*1e3),ag="https://api.momentic.ai",Bb,jP,sg=t=>{ag=t},ar=()=>ag,GP=()=>pl(ag),VP=t=>{jP=t},$P=()=>jP,Fl=()=>Bb;var Ul,zb,ig,lg=async t=>{if(Bb&&Ul&&ig)return Ul;let e=new dt({baseUrl:ag,apiKey:t,logger:A});Bb=e;try{let r=await e.getAuthInfo();return Ul=r.orgId,zb=r.userId,ig=t,Ul}catch(r){throw new Error(`Error checking API key against server: ${r}`)}},Ht=()=>{if(!Ul)throw new Error("Your organization ID is invalid.");return Ul},Io=()=>{if(!zb)throw new Error("Your user ID is invalid.");return zb},tn=()=>{if(!ig)throw new Error("Your API key is invalid.");return ig},Hb,Fb,cg=(t,e)=>{Hb=t,Fb?.abort(),Fb=new AbortController;let r=Fb.signal,n=[t.configFilePath];t.config.environments?.forEach(o=>{if(!o.envFile)return;let i=wK.resolve(t.rootDir,o.envFile);try{if(og.lstatSync(i).isSymbolicLink())return;og.existsSync(i)&&n.push(i)}catch(a){A.warn({err:a},`Failed to check if env file ${i} exists`)}});try{_K({filesToWatch:n,revalidator:e,signal:r,project:t})}catch(o){A.error({err:o},"Failed to start config file watchers")}},Se=()=>Hb;function _K({filesToWatch:t,revalidator:e,signal:r,project:n}){A.debug("Starting watch on the following files:"),t.forEach(o=>{A.debug(`- ${o}`)}),t.forEach(o=>{let i=async(s,c)=>{s.mtime.getTime()!==c.mtime.getTime()&&(xK.increment("setLocalProject")&&A.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.`),Hb=await Promise.resolve(e(n.configFilePath)))};og.watchFile(o,{persistent:!1},i);let a=()=>{og.unwatchFile(o,i),r.removeEventListener("abort",a)};r.addEventListener("abort",a),process.once("SIGUSR2",()=>{a(),process.kill(process.pid,"SIGUSR2")})})}function Fe(t){return function(...e){let r=e[e.length-1],n=t(...e);Promise.resolve(n).catch(r)}}import{hostname as IK}from"os";var PK="2.45.3",es=hl({app:"desktop-server",hostname:IK(),disableConsoleLogs:!0}).child({cliVersion:PK});(async()=>{try{let t=await si(es);t.gitBranchName&&es.addBinding("branch",t.gitBranchName)}catch{}})();var WP=MK();WP.get("/",async(t,e)=>{let r=Se(),n=Fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await _r(es,n,r),i=o?.gitProtectedBranches&&o?.gitBranchName&&o.gitProtectedBranches.includes(o.gitBranchName),{noCache:a,alwaysSaveCache:s}=$P(),c=!a&&(s||!i);e.status(200).json({saveCaches:c,checkedOutBranch:o?.gitBranchName})});var jb=WP;import{Router as OK}from"express";import Vr from"fs";import{globSync as LK}from"glob";import sr from"path";var qu=OK();function Wu(t){let e=Se(),r=sr.dirname(e.configFilePath);return sr.join(r,...t)}function NK(t){let e=Se(),r=sr.dirname(e.configFilePath),n=sr.relative(r,t);return n?n.split(sr.sep):[]}function DK(t,e){let r=Vr.statSync(t),n=NK(t);return Ey.parse({name:e,absolutePath:t,relativePath:n.join(sr.sep),pathSegments:n,isDirectory:r.isDirectory(),size:r.size,createdAt:r.birthtime,modifiedAt:r.mtime,accessedAt:r.atime})}qu.post("/",Fe(async(t,e,r)=>{let n;try{n=Uw.parse(t.body).pathSegments}catch(d){e.status(400).json({error:`Failed to parse folder read body: ${d}`});return}let o=Wu(n);if(!Vr.existsSync(o)){e.status(404).json({error:`Path not found: ${n.join(sr.sep)}`});return}if(!Vr.statSync(o).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(sr.sep)}`});return}let a=Se(),s=Array.from(a.config.exclude??[]).concat(nm),l=LK("*",{absolute:!1,cwd:o,ignore:s,dotRelative:!1,maxDepth:1,nodir:!1}).map(d=>{let p=sr.join(o,d);return DK(p,d)}),u={absolutePath:o,pathSegments:n,contents:l};e.status(200).json(u)}));qu.put("/",Fe(async(t,e,r)=>{let n;try{n=Fw.parse(t.body).pathSegments}catch(a){e.status(400).json({error:`Failed to parse folder create body: ${a}`});return}let o=Wu(n);if(Vr.existsSync(o)){e.status(200).json({success:!0,message:`Folder already exists: ${n.join(sr.sep)}`,pathSegments:n});return}Vr.mkdirSync(o,{recursive:!0});let i={success:!0,message:`Folder created: ${n.join(sr.sep)}`,pathSegments:n};e.status(201).json(i)}));qu.patch("/",Fe(async(t,e,r)=>{let n,o;try{let l=Bw.parse(t.body);n=l.pathSegments,o=l.newPathSegments}catch(l){e.status(400).json({error:`Failed to parse folder update body: ${l}`});return}let i=Wu(n),a=Wu(o);if(!Vr.existsSync(i)){e.status(400).json({error:`Folder not found: ${n.join(sr.sep)}`});return}if(Vr.existsSync(a)){e.status(400).json({error:`Destination already exists: ${o.join(sr.sep)}`});return}let s=sr.dirname(a);Vr.existsSync(s)||Vr.mkdirSync(s,{recursive:!0}),Vr.renameSync(i,a);let c={success:!0,message:`Folder moved from ${n.join(sr.sep)} to ${o.join(sr.sep)}`,pathSegments:o};e.status(200).json(c)}));qu.delete("/",Fe(async(t,e,r)=>{let n,o=!0;try{let c=zw.parse(t.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=Wu(n);if(!Vr.existsSync(i)){e.status(200).json({success:!0,message:`Folder not found: ${n.join(sr.sep)}`,pathSegments:n});return}if(!Vr.statSync(i).isDirectory()){e.status(400).json({error:`Path is not a directory: ${n.join(sr.sep)}`});return}if(o)Vr.rmSync(i,{recursive:!0,force:!0});else{if(Vr.readdirSync(i).length>0){e.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${n.join("/")}`});return}Vr.rmdirSync(i)}let s={success:!0,message:`Folder deleted: ${n.join("/")}`,pathSegments:n};e.status(200).json(s)}));var Gb=qu;import{Router as kK}from"express";var qP=kK();qP.get("/",async(t,e)=>{let r=Se(),n=Fl();if(!n){e.status(500).json({message:"API client not initialized"});return}let o=await _r(es,n,r);e.status(200).json(o)});var Vb=qP;import fZ from"events";import KU,{Router as SZ}from"express";import yZ from"http";import bZ from"path";import{Server as E8}from"socket.io";var UK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async()=>{e.info({sessionId:n},"Cancel event received");let o=r.getSession(n);if(!o)throw new Error("No active session found");try{o.controller.setClosed()}catch{}}},KP={event:"cancel",createHandler:UK};var FK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async(o,i)=>{let a=r.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let l=(await s.getBrowserState({skipWait:!0})).serialize();e.debug({a11yTree:l},"Fetched a11y tree from the browser"),i({a11yTree:l})}catch(c){e.error({err:c},"Error fetching a11y tree from the browser"),i({err:c.message})}}},YP={event:"fetchA11yTree",createHandler:FK};var BK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async(o,i)=>{let a=r.getSession(n);if(!a)throw new Error("No active session found");a.controller.setOpen();let s=a.controller.browser;try{let c=await s.html();i({html:c})}catch(c){e.error({err:c},"Error fetching DOM from the browser"),c.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:c.message})}}},XP={event:"fetchDom",createHandler:BK};var zK=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return o=>{e.info({sessionId:n,reason:o},`Disconnect event received (${o})`),r.removeSession(n,e)}},JP={event:"disconnect",createHandler:zK};function kn(t){let{result:e,nestedResults:r}=t;if(!t.nestedResults.length)return;let{firstMetadata:n,lastMetadata:o}=HK(r);jK(e,n,o);let i=[...t.asyncTasks];t.asyncTasks.push((async()=>{try{await GK(i,e,n,o)}catch(a){t.logger.error({result:t.result,err:a},"Error hoisting scalar result metadata")}})())}function HK(t){let e=t[0],r;for(;;){switch(e.type){case"PRESET_ACTION":{r=e;break}case"CONDITIONAL":r=t[0];break;case"AI_ACTION_DYNAMIC":case"AI_ACTION":case"MODULE":case"SECTION":if(!e.results.length){r=e;break}e=e.results[0];break;default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}if(r)break}let n=t[t.length-1],o;for(;;){switch(n.type){case"PRESET_ACTION":{o=n;break}case"AI_ACTION_DYNAMIC":case"CONDITIONAL":case"AI_ACTION":case"MODULE":case"SECTION":if(!n.results.length){o=n;break}n=n.results[n.results.length-1];break;default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(n)}if(o)break}return{firstMetadata:r,lastMetadata:o}}function jK(t,e,r){e&&(t.beforeUrl=e.beforeUrl),r&&(t.afterUrl=r.afterUrl,t.data=r.data,r.status!=="SUCCESS"&&(t.message=r.message))}async function GK(t,e,r,n){await Promise.allSettled(t),r&&(e.beforeSnapshot=r.beforeSnapshot),n&&(e.afterSnapshot=n.afterSnapshot)}import{randomUUID as eY}from"crypto";import{faker as VK}from"@faker-js/faker";import $K from"assert";import WK from"axios";import*as qK from"child_process";import KK from"moment";import*as YK from"otpauth";import XK from"pg";async function ZP(t){let e;try{e=new URL(t.url).hostname}catch{}let r=[];return t.headers.getSetCookie()?.forEach(n=>{let o=Kp(n,e);r.push(...o)}),r}function JK(t,e){if(!t&&!e)return;let r;if(t){let{url:o,options:i}=t;r=new Request(o,i)}let n;if(e){let{body:o,options:i}=e;n=new Response(o??null,i)}return{request:r,response:n}}async function ZK(t,e){switch(t){case"RAW":return e;case"RESPONSE":if(e instanceof Response){let r=[];return e.headers.forEach((o,i)=>{r.push([i,o])}),{status:e.status,headers:r,body:await e.text()}}else throw new Error("Result is not a Response object")}}var QK=Object.getPrototypeOf(async function(){}).constructor;async function QP(t,e,r){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=(y,T)=>{o[y]=T,l[y]=T},d={},p=(y,T)=>{o[y]=T,d[y]=T},m;n.includes("Octokit")&&(m=(await import("@octokit/rest")).Octokit);let h;n.includes("createAppAuth")&&(h=(await import("@octokit/auth-app")).createAppAuth);let g=async()=>await Promise.resolve(new QK("axios","moment","faker","assert","pg","Octokit","createAppAuth","OTPAuth","child_process","extractCookiesFromResponse","env","setVariable","setPersistentVariable","sendSms","waitForLatestSms","email","sms","ai","mock",...Object.keys(i??{}),n)(WK,KK,c.fakerInstance??VK,$K,XK,m,h,YK,qK,ZP,o,e.options.disallowVariableUpdates?void 0:u,e.options.disallowVariableUpdates?void 0:p,T=>c.sms.send(T),T=>c.sms.fetchLatest(T),c.email,c.sms,c.ai,JK(a,s),...Object.values(i??{}))),f=!0,S,b;try{let y=await X(g(),{milliseconds:e.options.timeoutMs,message:`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`,signal:e.signal});S=await ZK(e.options.responseSerialization??"RAW",y)}catch(y){r.error({err:y,env:o,evalCode:n},`[${t}] Error executing code: ${y}`),f=!1,y instanceof Bi?b=`Timeout of ${e.options.timeoutMs}ms exceeded for code execution`:b=y instanceof Error?y.message:`${y}`}return{result:S,variableUpdates:l,persistentVariableUpdates:d,success:f,error:b}}async function eM({code:t,fragment:e,context:r,localTools:n,logger:o,signal:i,timeoutMs:a=Di,disallowVariableUpdates:s,additionalBindings:c,responseSerialization:l,mock:u}){let d=eY(),p=await QP(d,{code:t,options:{fragment:e,timeoutMs:a,disallowVariableUpdates:s,responseSerialization:l},bindings:{...r.toObjectCopy(),...u,additionalBindings:c},tools:n,signal:i},o);return A.debug(`[${d}] Got execution result: ${JSON.stringify(p)}`),p}import{createHmac as tY,randomUUID as rY}from"crypto";import nY from"fetch-retry";var oY=nY(global.fetch,{retries:3,retryOn:function(t,e,r){return!!(e!==null||r&&r.status>=500)},retryDelay:function(t){return Math.pow(2,t)*500}}),tM=process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT,rM=process.env.MOMENTIC_LAMBDA_AUTH_SECRET;async function nM({orgId:t,code:e,fragment:r,context:n,timeoutMs:o=Di,retries:i=2,signal:a,logger:s,additionalBindings:c,disallowVariableUpdates:l,responseSerialization:u,mock:d}){if(!tM)throw new Error("GCP_JS_EVAL_FUNCTION_ENDPOINT environment variable not set");let p,m,h=0;if(!rM)throw new Error("Missing lambda auth secret.");let g=tY("sha256",rM).update(t).digest("hex");for(;h<=i;){h++,a?.throwIfAborted();let S={id:rY(),orgId:t,momenticLambdaAuthHash:g,code:e,fragment:r,state:{...n.toObjectCopy(),...d,additionalBindings:c},timeoutMs:o,disallowVariableUpdates:l,responseSerialization:u};try{if(p=await X(oY(tM,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)}),{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}`);m=void 0;break}catch(b){m=b}}if(m)throw s.error({err:m},"Failed to evaluate code remotely"),m;if(!p)throw new Error(`An unexpected code evaluation error occurred${m?`: ${m}`:""}`);let f;try{f=bw.parse(await p.json())}catch(S){throw new Error(`Code evaluation server returned invalid response: ${S}`)}if(f.error)throw new Error(`Code evaluation error: ${f.error}`);return f}async function Ki(t){let e;if(process.env.GCP_JS_EVAL_FUNCTION_ENDPOINT)e=await nM(t);else if(t.localTools)e=await eM({...t,localTools:t.localTools});else throw new Error("No code evaluation environment available");if(e.error){let r=`Failed to evaluate code:
79
79
  ${e.error}
80
80
  Code received:
81
81
  ${t.code}`;throw t.logger.error({err:e.error,code:t.code,env:t.context.toObjectCopy()},r),new Error(r)}if(e.variableUpdates)for(let[r,n]of Object.entries(e.variableUpdates))t.context.setVariable(r,n);if(e.persistentVariableUpdates&&Object.keys(e.persistentVariableUpdates).length>0){await t.callbacks?.onPersistentVariableUpdates?.(e.persistentVariableUpdates);for(let[r,n]of Object.entries(e.persistentVariableUpdates))t.context.setVariable(r,n)}return e.result}import{set as iY}from"lodash-es";async function $r(t){let{orgId:e,s:r,context:n,logger:o,signal:i,retries:a=2,timeoutMs:s=Di,allowUndefined:c=!1}=t,l=/{{(.*?)}}/g,u=r.matchAll(l),d=r;for(let p of u){if(p.length<2)continue;let m=p[1].trim(),h;try{h=await Ki({orgId:e,code:m,fragment:!0,context:n,timeoutMs:s,logger:o,retries:a,localTools:t.localTools,signal:i})}catch(f){throw o.error({err:f,value:r},"Error evaluating template string"),f}if(h===void 0&&!c)throw new M("UserConfigurationError",`Template fragment '${m}' 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 h=="string"?h:`${h}`;g=g.replaceAll(/\$/g,"$$$$"),d=d.replace(p[0],g)}return d}async function ug(t){return oM(t)}async function oM({obj:t,bannedKeys:e,allowList:r,context:n,prefixPath:o=[],replacements:i=[],...a}){for(let s in t){if(e.includes(s))continue;let c=!1;if(r)if(r.includes(s))c=!0;else continue;let l=t[s],u=[...o,s];if(typeof l=="string"&&l.includes("{{")){let d=await $r({s:l,context:n,...a});if(l===d)continue;i.push({path:u,original:l}),t[s]=d}else typeof l=="object"&&l!==null&&!Array.isArray(l)&&await oM({obj:l,bannedKeys:e,context:n,prefixPath:u,replacements:i,allowList:c?void 0:r,...a})}return i}function iM(t,e){for(let{path:r,original:n}of e)iY(t,r,n)}import aY from"fetch-retry";var Ize=process.env.MAILINATOR_API_KEY,Pze=aY(global.fetch,{retryOn:function(t,e,r){return t>3?!1:!!(e!==null||r&&r.status>=400)},retryDelay:function(t){return 500}});import{hostname as y6}from"os";var $b={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
@@ -4558,9 +4558,9 @@ registerAllMomenticListeners();
4558
4558
  `};var mn={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","for","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-index","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:["data-test-id","data-testid","id","name","href","aria-describedby","aria-labelledby","aria-description","data-row","data-col","data-index","data-row-index","data-col-index","for","title","alt","aria-label","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","aria-keyshortcuts","data-ved","aria-controls","d"],ineligibleElementAttribute:"momentic-ineligible",momenticStrictRequirementTag:"(strict requirement)",serializedElementForCachingTruncateLength:500,serializedElementForLoggingTruncateLength:150};var aM="ElementMovedError",sM="ZeroOpacityError",lM="visual_actions",ts="data-momentic-id";function cM(t,e,r){if(t.length<r)return t;let n=t.indexOf(e);if(n===-1)return t;let o=Math.max(0,n-r/3),i=Math.min(n+r/3,t.length),a=t.indexOf(`
4559
4559
  `,o);a>0&&a<n&&(o=a);let s=i,c=0;for(;c<1e3&&s>n&&t[s]!==`
4560
4560
  `;)c++,s--;return s>n&&t[s]===`
4561
- `&&(i=s),t.slice(o,i)}function li(t){let e=typeof t=="string"?t:t.toString();return`[${ts}="${e}"]`}import{execSync as n5}from"child_process";import{randomUUID as vg}from"crypto";import{diff as ME}from"deep-object-diff";import{existsSync as Ag,readFileSync as o5,readdirSync as i5,statSync as kO,writeFileSync as a5}from"fs";import{Jimp as UO}from"jimp";import s5 from"js-beautify";import{cloneDeep as Ju}from"lodash-es";import l5 from"mime";import{platform as c5}from"os";import{basename as FO,extname as u5,join as d5}from"path";import{v4 as p5}from"uuid";import{rmSync as eO}from"fs";import{basename as o4,join as i4}from"path";import{errors as a4}from"playwright-core";import{devices as lY}from"playwright-core";var uM=2,Bl=8e3;var Yi=250,lr=500;var dM=5e3,Wb=250,ie=3e3,tt=2e3,Fe=1e3,qb=3e4,dg=8e3,pM=10,mM=.05;var gM=new Set(["about:blank","chrome-error://chromewebdata/"]);var Kb=["button","image","generic","graphics-symbol","tab","link","menuitem","group"],Yb=1e4,Ku=500,pg=lY["Desktop Chrome"].userAgent,hM=process.env.TWO_CAPTCHA_KEY;function Jb(t){return t.tagName?.toLowerCase()!=="input"?!1:t.width<=5||t.height<=5}function fM(t){return t.width===null||t.width===void 0||t.height===null||t.height===void 0?!1:Jb({tagName:t.tagName,width:t.width,height:t.height})}async function SM(t){try{return await cY(t)}catch(e){t.logger.warn({err:e},"Failed to transform locator for Chakra click, continuing...");return}}async function cY({targetingResult:t,logger:e}){let{originalElementLocationResult:r,locator:n}=t,o,i,a,s;if(r?(o=r.importantAttributes?.id,i=r.tagName.toLowerCase(),a=r.serializedElement,s=r.boundingBox):[o,i,a,s]=await n.evaluate(c=>[c.id,c.tagName.toLowerCase(),window.serializeElementOnlyWithText?.(c,{truncateToLength:100}),c.getBoundingClientRect()],void 0,{timeout:Fe}),!!Jb({tagName:i,width:s.width,height:s.height})){if(o)try{let c=n.page().locator(`label[for=${JSON.stringify(o)}]`);await c.waitFor({state:"visible",timeout:Fe});let l=await c.getAttribute("id",{timeout:Fe});return e.info({redirectedFromId:o,redirectedToId:l},"Redirected tiny input click from input id to label id"),{locator:c,relativePoint:void 0}}catch{}e.error({originalElementDisplayString:a},"Tiny input did not have a visible linked label, skipping Chakra redirection")}}import{mkdirSync as uY,rmSync as yM,statSync as dY}from"fs";import*as eE from"node:fs";import pY from"nodejs-file-downloader";import{tmpdir as mY}from"os";import Xi,{basename as gY,dirname as hY}from"path";var tE="file://",Qb=Xi.join(mY(),"momentic","downloads"),Zb=1e4,fY=50*1024*1024;async function bM(t){let{uri:e}=t;if(e.startsWith(tE))return yY(t);if(e.startsWith("http"))return EY(t);if(Hw)return bY(t);throw new M("UserConfigurationError","The source URI for the file upload step must be a valid URL or a previously downloaded file beginning with 'file://'")}function SY(t,e){let r=Xi.join(Qb,t,e.slice(tE.length)),n=Xi.join(Qb,t),o=r.startsWith(n);if(!eE.existsSync(r)||!o)throw new M("UserConfigurationError",`The referenced file (${e}) does not exist. Please make sure that it has been downloaded successfully.`);return r}async function yY({uri:t,orgId:e}){let r=SY(e,t);return{filePath:r,cleanup:()=>{yM(hY(r),{recursive:!0,force:!0})}}}async function bY({uri:t}){let e=Xi.resolve(t);if(!eE.existsSync(e))throw new M("UserConfigurationError",`The referenced file (${t}) does not exist on disk. Please make sure that it has been downloaded successfully.`);return{filePath:e,cleanup:()=>{}}}async function EY({uri:t,logger:e,orgId:r}){let n=new URL(t);n.search&&(n.search="");let o=gY(n.href),i=nE(o),a=Xi.extname(i);if(xw.includes(a))throw new Error(`Downloading files with extension ${a} is not allowed.`);let s=rE(r),c,l;for(let h=1;h<=3;h++){let g=new pY({url:t,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:Zb});try{let{downloadStatus:f,filePath:S}=await X(g.download(),{milliseconds:Zb,message:`Download timed out after ${Zb}ms`});if(f!=="COMPLETE"||!S)throw new Error(`Download ended in non-success status: ${f}`);c=S;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=dY(u).size;if(p>fY)throw new Error("File size exceeds the maximum limit of 50MB");e.info({fileSizeInBytes:p,filePath:u,fileName:i},"Downloaded file to disk");let m;return{filePath:u,cleanup:()=>{clearTimeout(m),m=setTimeout(()=>yM(s,{recursive:!0,force:!0}),10*60*1e3)}}}function EM(t,e){return`${tE}${t}/${e}`}function rE(t){let e=Math.random().toString(36).substring(4),r=Xi.join(Qb,t,e);return uY(r,{recursive:!0}),r}function nE(t){let e=Xi.extname(t),r=Xi.basename(t,e);return t=(r.length>100?r.slice(r.length-100):r)+e,t=t.trim().replaceAll(" ","_"),t}async function TM(t,e){let r=t.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 X(r,{milliseconds:ie});return o&&e.warn({err:o},"Failed to fetch indexedDB data"),n}async function vM(t,e,r){if(e){r.debug("Importing indexedDB data");try{let n=t.evaluate(async o=>{let i=window;for(let[a,s]of Object.entries(o))await i.importObjectToIdb?.(a,s)},e);await X(n,{milliseconds:ie})}catch(n){r.warn({err:n},"Failed to import indexedDB data")}}}async function AM(t,e){try{let r=t.evaluate(async()=>{window.localStorage.clear(),window.sessionStorage.clear(),await indexedDB.databases().then(n=>{n.forEach(o=>{o.name&&indexedDB.deleteDatabase(o.name)})})});await X(r,{milliseconds:ie})}catch(r){e.debug({err:r},"Failed clearing index db data, continuing...")}}async function RM(t,e,r,n,o){try{await TY(t,e,r,n)}catch(i){o.error({err:i,tabIndex:e},"Error handling new console log")}}async function TY(t,e,r,n){let o=n.text();o.length>Ku&&(o=o.slice(0,Ku)+"...(TRUNCATED)");let i=[];for(let a of n.args())try{let s=await a.jsonValue(),c=JSON.stringify(s);c.length>Ku?i.push(c.slice(0,Ku)+"...(TRUNCATED)"):(typeof s!="object"||Object.keys(s).length>0)&&i.push(s)}catch{}oE(t,r,e,{url:t.url(),location:n.location(),type:n.type(),text:n.text(),args:i})}function oE(t,e,r,n){let o=Date.now(),i=e.logsPerPage;if(i.length<=r||i[r]===void 0){i[r]=[];for(let a=0;a<r;a++)i[a]===void 0&&(i[a]=[])}i[r].length>Yb&&(i[r]=i[r].slice(Math.floor(Yb/2)),i[r]?.push({url:t.url(),timestamp:o,type:"warning",text:"[MOMENTIC] Truncated console logs due to buffer overflow",tabIndex:r})),i[r].push({...n,tabIndex:r,timestamp:o})}async function Un({fn:t,codePath:e,logObject:r,signal:n,logger:o}){n?.throwIfAborted();let i=Date.now(),a=await Uu({promiseGenerator:t,signal:n,codePath:e,logger:o}),s=Date.now();return r[e]=s-i,a}import vY from"truncate-json";var AY="[redacted due to size]",RY=5e3,CY=1e6,wM=1e3;function xM(t,e,r,n){try{r?.({id:e,startedDateTime:new Date().toISOString(),title:void 0,pageTimings:{}})}catch(o){t.warn({err:o},"Unexpected error in onHarPage callback")}}async function iE(t,e){let r=e.timing(),n=new URL(e.url()),o=[...n.searchParams.entries()].map(([s,c])=>({name:s,value:c})),i={...await IM(e),url:n.toString(),method:e.method(),queryString:o};return{pageref:t,_resourceType:e.resourceType(),startedDateTime:new Date().toISOString(),request:i,timings:PM(r).timings}}async function _M(t,e,r,n,o){let i={},s=((await r.headerValue("content-type"))?.toLowerCase()??void 0)?.split(";")[0]??void 0;if(n)try{i=await OY({response:r,mimeType:s,sizes:n,neverRedact:o})}catch{}let c={...await IM(r),status:r.status(),statusText:r.statusText(),content:i,redirectURL:r.headers().location,_mocked:!1};t.response=c,t.response&&n&&(t.response.bodySize=n.responseBodySize,t.response.headersSize=n.responseHeadersSize,t.response.content.size=n.responseBodySize);let l=e.timing();t.startedDateTime=new Date(l.startTime).toISOString();let{timings:u,total:d}=PM(l);t.time=d,t.timings=u}function CM(t){try{return new Date(t).toISOString()}catch{return}}function wY(t){let e={name:"",value:""},r=!0;for(let n of t.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(r){r=!1,e.name=Po(i,!1),e.value=Po(a,!1);continue}i==="Domain"&&(e.domain=Po(a,!1)),i==="Expires"&&(e.expires=CM(a)),i==="HttpOnly"&&(e.httpOnly=!0),i==="Max-Age"&&(e.expires=CM(Date.now()+ +a*1e3)),i==="Path"&&(e.path=Po(a,!1)),i==="Secure"&&(e.secure=!0)}return e}async function IM(t){let e=await t.allHeaders(),r=e.cookie?.split(";").map(wY)??[];return{headers:Object.entries(e).map(([n,o])=>({name:Po(n,!1),value:Po(o,!1)})),cookies:r}}async function mg(t,e,r,n){let o=await t.headerValue("content-type")??"application/octet-stream";if(r&&(e.request.bodySize=r.requestBodySize,e.request.headersSize=r.requestHeadersSize),!n&&r&&r.requestBodySize>wM){e.request.postData={mimeType:o,text:"",params:[],_redactedReason:"Request body redacted due to size"};return}let i=t.postData();if(!i)return;let a={mimeType:o,text:Po(i,n),params:[]};if(o==="application/x-www-form-urlencoded"){let s=new URLSearchParams(i.toString());for(let[c,l]of s.entries())a.params.push({name:Po(c,n),value:l?Po(l,n):void 0})}e.request.postData=a}var xY=["image","font","video","audio"],_Y=["javascript"],IY=["text"],PY=["json","xml","html"];function MY(t){let[e,r]=t.split("/");return e&&xY.includes(e)||r&&_Y.some(n=>r.includes(n))?!1:!!(e&&IY.includes(e)||r&&PY.some(n=>r.includes(n)))}async function OY({response:t,mimeType:e,sizes:r,neverRedact:n}){let o={mimeType:e,encoding:await t.headerValue("content-encoding")??void 0};return!n&&(!e||!MY(e))?o._redactedReason="Body redacted because it's not a viewable MIME type":!n&&r.responseBodySize>=wM?o._redactedReason="Response body redacted due to size":o.text=Po(await t.text(),n),o}function Po(t,e){let r=e?CY:RY;try{let n=JSON.parse(t),{jsonString:o}=vY(t,r);return o}catch{return t.length>r?t.slice(0,r)+AY:t}}function rs(t){return t<0?0:t}function PM(t){return{timings:{blocked:rs(t.domainLookupStart),dns:rs(t.domainLookupEnd-t.domainLookupStart),connect:rs(t.connectEnd-t.connectStart),send:rs(t.responseStart-t.requestStart),wait:0,receive:rs(t.responseEnd-t.responseStart),ssl:rs(t.connectEnd-t.secureConnectionStart)},total:rs(t.responseEnd)}}function MM(){return async t=>{let{fragment:e,code:r,context:n}=t,{env:o}=n||{},i=Object.getPrototypeOf(async function(){}).constructor;return{result:await Promise.resolve(new i("env",e?`return ${r}`:r)(o))}}}async function Yt({root:t,fn:e,arg:r,timeout:n,waitForPageLoad:o,codePath:i}){return await o(),await X(t.evaluate(e,r),{milliseconds:n,message:`Timed out ${i} after ${n}ms. This indicates that either the page is unresponsive or your machine is severely resource constrained.`})}import{errors as LY}from"playwright-core";async function ns({func:t,action:e,logger:r,callbacks:n,retryTimeoutMs:o,targetingResult:i}){let a=Date.now(),s;for(;Date.now()-a<o;)try{return await t(i)}catch(c){if(c instanceof LY.TimeoutError)r.warn({err:c,rootUrl:(await n.state.getRoot()).url()},`Encountered Playwright error while performing ${e}`),s=await NY(c,i.locator,n,r);else throw c}throw s instanceof M?s:new M("ActionFailureError",`Failed to interact with targeted element. Error: ${s.message}`,{errOptions:{cause:s}})}async function NY(t,e,r,n){return t.message.includes("attempt #")?DY(t,e,r,n):kY(t)}async function DY(t,e,r,n){let o=t.message.split(/- retrying \w+ action, attempt #\d+/).filter(c=>c.length>0);if(!o.length)return n.warn({err:t},"Failed to parse Playwright error message for translation, returning raw message"),t;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(`
4561
+ `&&(i=s),t.slice(o,i)}function li(t){let e=typeof t=="string"?t:t.toString();return`[${ts}="${e}"]`}import{execSync as n5}from"child_process";import{randomUUID as vg}from"crypto";import{diff as ME}from"deep-object-diff";import{existsSync as Ag,readFileSync as o5,readdirSync as i5,statSync as kO,writeFileSync as a5}from"fs";import{Jimp as UO}from"jimp";import s5 from"js-beautify";import{cloneDeep as Ju}from"lodash-es";import l5 from"mime";import{platform as c5}from"os";import{basename as FO,extname as u5,join as d5}from"path";import{v4 as p5}from"uuid";import{rmSync as eO}from"fs";import{basename as o4,join as i4}from"path";import{errors as a4}from"playwright-core";import{devices as lY}from"playwright-core";var uM=2,Bl=8e3;var Yi=250,lr=500;var dM=5e3,Wb=250,ie=3e3,tt=2e3,He=1e3,qb=3e4,dg=8e3,pM=10,mM=.05;var gM=new Set(["about:blank","chrome-error://chromewebdata/"]);var Kb=["button","image","generic","graphics-symbol","tab","link","menuitem","group"],Yb=1e4,Ku=500,pg=lY["Desktop Chrome"].userAgent,hM=process.env.TWO_CAPTCHA_KEY;function Jb(t){return t.tagName?.toLowerCase()!=="input"?!1:t.width<=5||t.height<=5}function fM(t){return t.width===null||t.width===void 0||t.height===null||t.height===void 0?!1:Jb({tagName:t.tagName,width:t.width,height:t.height})}async function SM(t){try{return await cY(t)}catch(e){t.logger.warn({err:e},"Failed to transform locator for Chakra click, continuing...");return}}async function cY({targetingResult:t,logger:e}){let{originalElementLocationResult:r,locator:n}=t,o,i,a,s;if(r?(o=r.importantAttributes?.id,i=r.tagName.toLowerCase(),a=r.serializedElement,s=r.boundingBox):[o,i,a,s]=await n.evaluate(c=>[c.id,c.tagName.toLowerCase(),window.serializeElementOnlyWithText?.(c,{truncateToLength:100}),c.getBoundingClientRect()],void 0,{timeout:He}),!!Jb({tagName:i,width:s.width,height:s.height})){if(o)try{let c=n.page().locator(`label[for=${JSON.stringify(o)}]`);return await c.waitFor({state:"visible",timeout:ie}),e.info({redirectedFromId:o},"Redirected tiny input click from input id to its label"),{locator:c,relativePoint:void 0}}catch(c){e.warn({err:c},"Failed to redirect tiny input click from input id to label, skipping Chakra redirection")}e.error({originalElementDisplayString:a},"Tiny input did not have a visible linked label, skipping Chakra redirection")}}import{mkdirSync as uY,rmSync as yM,statSync as dY}from"fs";import*as eE from"node:fs";import pY from"nodejs-file-downloader";import{tmpdir as mY}from"os";import Xi,{basename as gY,dirname as hY}from"path";var tE="file://",Qb=Xi.join(mY(),"momentic","downloads"),Zb=1e4,fY=50*1024*1024;async function bM(t){let{uri:e}=t;if(e.startsWith(tE))return yY(t);if(e.startsWith("http"))return EY(t);if(Hw)return bY(t);throw new M("UserConfigurationError","The source URI for the file upload step must be a valid URL or a previously downloaded file beginning with 'file://'")}function SY(t,e){let r=Xi.join(Qb,t,e.slice(tE.length)),n=Xi.join(Qb,t),o=r.startsWith(n);if(!eE.existsSync(r)||!o)throw new M("UserConfigurationError",`The referenced file (${e}) does not exist. Please make sure that it has been downloaded successfully.`);return r}async function yY({uri:t,orgId:e}){let r=SY(e,t);return{filePath:r,cleanup:()=>{yM(hY(r),{recursive:!0,force:!0})}}}async function bY({uri:t}){let e=Xi.resolve(t);if(!eE.existsSync(e))throw new M("UserConfigurationError",`The referenced file (${t}) does not exist on disk. Please make sure that it has been downloaded successfully.`);return{filePath:e,cleanup:()=>{}}}async function EY({uri:t,logger:e,orgId:r}){let n=new URL(t);n.search&&(n.search="");let o=gY(n.href),i=nE(o),a=Xi.extname(i);if(xw.includes(a))throw new Error(`Downloading files with extension ${a} is not allowed.`);let s=rE(r),c,l;for(let h=1;h<=3;h++){let g=new pY({url:t,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:Zb});try{let{downloadStatus:f,filePath:S}=await X(g.download(),{milliseconds:Zb,message:`Download timed out after ${Zb}ms`});if(f!=="COMPLETE"||!S)throw new Error(`Download ended in non-success status: ${f}`);c=S;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=dY(u).size;if(p>fY)throw new Error("File size exceeds the maximum limit of 50MB");e.info({fileSizeInBytes:p,filePath:u,fileName:i},"Downloaded file to disk");let m;return{filePath:u,cleanup:()=>{clearTimeout(m),m=setTimeout(()=>yM(s,{recursive:!0,force:!0}),10*60*1e3)}}}function EM(t,e){return`${tE}${t}/${e}`}function rE(t){let e=Math.random().toString(36).substring(4),r=Xi.join(Qb,t,e);return uY(r,{recursive:!0}),r}function nE(t){let e=Xi.extname(t),r=Xi.basename(t,e);return t=(r.length>100?r.slice(r.length-100):r)+e,t=t.trim().replaceAll(" ","_"),t}async function TM(t,e){let r=t.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 X(r,{milliseconds:ie});return o&&e.warn({err:o},"Failed to fetch indexedDB data"),n}async function vM(t,e,r){if(e){r.debug("Importing indexedDB data");try{let n=t.evaluate(async o=>{let i=window;for(let[a,s]of Object.entries(o))await i.importObjectToIdb?.(a,s)},e);await X(n,{milliseconds:ie})}catch(n){r.warn({err:n},"Failed to import indexedDB data")}}}async function AM(t,e){try{let r=t.evaluate(async()=>{window.localStorage.clear(),window.sessionStorage.clear(),await indexedDB.databases().then(n=>{n.forEach(o=>{o.name&&indexedDB.deleteDatabase(o.name)})})});await X(r,{milliseconds:ie})}catch(r){e.debug({err:r},"Failed clearing index db data, continuing...")}}async function RM(t,e,r,n,o){try{await TY(t,e,r,n)}catch(i){o.error({err:i,tabIndex:e},"Error handling new console log")}}async function TY(t,e,r,n){let o=n.text();o.length>Ku&&(o=o.slice(0,Ku)+"...(TRUNCATED)");let i=[];for(let a of n.args())try{let s=await a.jsonValue(),c=JSON.stringify(s);c.length>Ku?i.push(c.slice(0,Ku)+"...(TRUNCATED)"):(typeof s!="object"||Object.keys(s).length>0)&&i.push(s)}catch{}oE(t,r,e,{url:t.url(),location:n.location(),type:n.type(),text:n.text(),args:i})}function oE(t,e,r,n){let o=Date.now(),i=e.logsPerPage;if(i.length<=r||i[r]===void 0){i[r]=[];for(let a=0;a<r;a++)i[a]===void 0&&(i[a]=[])}i[r].length>Yb&&(i[r]=i[r].slice(Math.floor(Yb/2)),i[r]?.push({url:t.url(),timestamp:o,type:"warning",text:"[MOMENTIC] Truncated console logs due to buffer overflow",tabIndex:r})),i[r].push({...n,tabIndex:r,timestamp:o})}async function Un({fn:t,codePath:e,logObject:r,signal:n,logger:o}){n?.throwIfAborted();let i=Date.now(),a=await Uu({promiseGenerator:t,signal:n,codePath:e,logger:o}),s=Date.now();return r[e]=s-i,a}import vY from"truncate-json";var AY="[redacted due to size]",RY=5e3,CY=1e6,wM=1e3;function xM(t,e,r,n){try{r?.({id:e,startedDateTime:new Date().toISOString(),title:void 0,pageTimings:{}})}catch(o){t.warn({err:o},"Unexpected error in onHarPage callback")}}async function iE(t,e){let r=e.timing(),n=new URL(e.url()),o=[...n.searchParams.entries()].map(([s,c])=>({name:s,value:c})),i={...await IM(e),url:n.toString(),method:e.method(),queryString:o};return{pageref:t,_resourceType:e.resourceType(),startedDateTime:new Date().toISOString(),request:i,timings:PM(r).timings}}async function _M(t,e,r,n,o){let i={},s=((await r.headerValue("content-type"))?.toLowerCase()??void 0)?.split(";")[0]??void 0;if(n)try{i=await OY({response:r,mimeType:s,sizes:n,neverRedact:o})}catch{}let c={...await IM(r),status:r.status(),statusText:r.statusText(),content:i,redirectURL:r.headers().location,_mocked:!1};t.response=c,t.response&&n&&(t.response.bodySize=n.responseBodySize,t.response.headersSize=n.responseHeadersSize,t.response.content.size=n.responseBodySize);let l=e.timing();t.startedDateTime=new Date(l.startTime).toISOString();let{timings:u,total:d}=PM(l);t.time=d,t.timings=u}function CM(t){try{return new Date(t).toISOString()}catch{return}}function wY(t){let e={name:"",value:""},r=!0;for(let n of t.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(r){r=!1,e.name=Po(i,!1),e.value=Po(a,!1);continue}i==="Domain"&&(e.domain=Po(a,!1)),i==="Expires"&&(e.expires=CM(a)),i==="HttpOnly"&&(e.httpOnly=!0),i==="Max-Age"&&(e.expires=CM(Date.now()+ +a*1e3)),i==="Path"&&(e.path=Po(a,!1)),i==="Secure"&&(e.secure=!0)}return e}async function IM(t){let e=await t.allHeaders(),r=e.cookie?.split(";").map(wY)??[];return{headers:Object.entries(e).map(([n,o])=>({name:Po(n,!1),value:Po(o,!1)})),cookies:r}}async function mg(t,e,r,n){let o=await t.headerValue("content-type")??"application/octet-stream";if(r&&(e.request.bodySize=r.requestBodySize,e.request.headersSize=r.requestHeadersSize),!n&&r&&r.requestBodySize>wM){e.request.postData={mimeType:o,text:"",params:[],_redactedReason:"Request body redacted due to size"};return}let i=t.postData();if(!i)return;let a={mimeType:o,text:Po(i,n),params:[]};if(o==="application/x-www-form-urlencoded"){let s=new URLSearchParams(i.toString());for(let[c,l]of s.entries())a.params.push({name:Po(c,n),value:l?Po(l,n):void 0})}e.request.postData=a}var xY=["image","font","video","audio"],_Y=["javascript"],IY=["text"],PY=["json","xml","html"];function MY(t){let[e,r]=t.split("/");return e&&xY.includes(e)||r&&_Y.some(n=>r.includes(n))?!1:!!(e&&IY.includes(e)||r&&PY.some(n=>r.includes(n)))}async function OY({response:t,mimeType:e,sizes:r,neverRedact:n}){let o={mimeType:e,encoding:await t.headerValue("content-encoding")??void 0};return!n&&(!e||!MY(e))?o._redactedReason="Body redacted because it's not a viewable MIME type":!n&&r.responseBodySize>=wM?o._redactedReason="Response body redacted due to size":o.text=Po(await t.text(),n),o}function Po(t,e){let r=e?CY:RY;try{let n=JSON.parse(t),{jsonString:o}=vY(t,r);return o}catch{return t.length>r?t.slice(0,r)+AY:t}}function rs(t){return t<0?0:t}function PM(t){return{timings:{blocked:rs(t.domainLookupStart),dns:rs(t.domainLookupEnd-t.domainLookupStart),connect:rs(t.connectEnd-t.connectStart),send:rs(t.responseStart-t.requestStart),wait:0,receive:rs(t.responseEnd-t.responseStart),ssl:rs(t.connectEnd-t.secureConnectionStart)},total:rs(t.responseEnd)}}function MM(){return async t=>{let{fragment:e,code:r,context:n}=t,{env:o}=n||{},i=Object.getPrototypeOf(async function(){}).constructor;return{result:await Promise.resolve(new i("env",e?`return ${r}`:r)(o))}}}async function Yt({root:t,fn:e,arg:r,timeout:n,waitForPageLoad:o,codePath:i}){return await o(),await X(t.evaluate(e,r),{milliseconds:n,message:`Timed out ${i} after ${n}ms. This indicates that either the page is unresponsive or your machine is severely resource constrained.`})}import{errors as LY}from"playwright-core";async function ns({func:t,action:e,logger:r,callbacks:n,retryTimeoutMs:o,targetingResult:i}){let a=Date.now(),s;for(;Date.now()-a<o;)try{return await t(i)}catch(c){if(c instanceof LY.TimeoutError)r.warn({err:c,rootUrl:(await n.state.getRoot()).url()},`Encountered Playwright error while performing ${e}`),s=await NY(c,i.locator,n,r);else throw c}throw s instanceof M?s:new M("ActionFailureError",`Failed to interact with targeted element. Error: ${s.message}`,{errOptions:{cause:s}})}async function NY(t,e,r,n){return t.message.includes("attempt #")?DY(t,e,r,n):kY(t)}async function DY(t,e,r,n){let o=t.message.split(/- retrying \w+ action, attempt #\d+/).filter(c=>c.length>0);if(!o.length)return n.warn({err:t},"Failed to parse Playwright error message for translation, returning raw message"),t;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(`
4562
4562
  `,";").replace(/\s+/g," ");let a="",s=await OM(e,n,150);if(s&&(a=`Target element HTML: ${Tt(s,100,!0)}`),i.includes("element is not enabled"))return new M("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:t}});if(i.includes("intercepts pointer events")){let c="",l=i.match(/<.*?data-momentic-id="(\d+)".*?intercepts pointer events/)?.[1];if(l){let u=(await r.state.getRoot()).locator(li(l)),d=await OM(u,n,150);d&&(c=`Covering element HTML: ${Tt(d,100,!0)}`)}return new M("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}
4563
- ${c}`,{errOptions:{cause:t}})}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:ie});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 M("ActionFailureError",`${c} Please explicitly wait for the element to be visible or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:t}})}return i.includes("element is outside of the viewport")?new M("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}`):t}function kY(t){let e=t.message;if(e.includes("waiting for locator")&&e.includes("data-momentic-id")&&!e.match(/attempting \w+ action/)&&!e.includes("locator.evaluate"))throw new Hc(`Interacting with the element using the data-momentic-id attribute timed out. This is caused by the web page performing too many CPU-intensive operations, or constant re-rendering of the element that destroys Momentic's ID attributes. Error: ${e}`,{cause:t});return t}async function OM(t,e,r){try{return await t.evaluate((o,{truncateToLength:i})=>window.serializeElementOnlyWithText?.(o,{truncateToLength:i}),{truncateToLength:r},{timeout:Fe})}catch(n){e.debug({err:n},"Failed to get HTML from locator for Playwright error translation");return}}import{execSync as GY}from"child_process";import UM from"dedent";import{existsSync as Xu,mkdirSync as dE,readdirSync as VY,rmSync as FM}from"fs";import{homedir as zM}from"os";import{basename as $Y,join as Zi,resolve as WY}from"path";import{chromium as BM}from"playwright-core";function LM(t,e){return async(r,n)=>{try{let o=await n.allHeaders();for(let{key:i,value:a,matcher:s}of t)(!s||s.matches({url:n.url(),method:n.method()}))&&(o[i]=a);await r.fallback({headers:o})}catch(o){e.warn({err:o},"Failed to apply custom headers to request, continuing")}}}import{randomUUID as FY}from"crypto";function NM(t,e){for(let r of Object.values(e))if(r.matcher.matches({url:t.url(),method:t.method()}))return r}async function DM(t){let{route:e,mock:r,entry:n,onHarEntry:o,request:i,requestId:a,requestRecorders:s,logger:c,isBrowserClosed:l}=t;await mg(i,n,void 0,!0);let u={url:n.request.url,options:{method:n.request.method,headers:n.request.headers.map(g=>[g.name,g.value]),body:n.request.postData?.text}},d;if(r.fetchOriginalResponse){let g=await e.fetch();d={body:await g.text(),options:{status:g.status(),statusText:g.statusText(),headers:Object.entries(await g.headers())}}}let p=await UY(r,u,d),m={};p.headers.forEach((g,f)=>{m[f]=g});let h={body:await p.text(),contentType:p.headers.get("content-type")||"text/plain",headers:m,status:p.status};await e.fulfill(h);try{n.response={status:h.status,statusText:p.statusText,headers:Object.entries(h.headers).map(([g,f])=>({name:g,value:f})),cookies:[],content:{mimeType:h.contentType,text:h.body},_mocked:!0},o?.(a,n);for(let g of Object.values(s))g.matches(n)&&g.onRequestComplete(a,n)}catch(g){!g.message.includes("has been closed")&&!l&&c.warn({err:g},"Failed to add response to HAR")}}async function UY(t,e,r){try{return await t.generateResponse(e,r)}catch(n){let o=n instanceof Error?n.message:`${n}`;return new Response(o,{status:500,headers:{"Content-Type":"text/plain"}})}}async function aE(t){try{await BY(t)}catch(e){t.logger.warn({err:e},"Error handling intercepted request, continuing...")}}async function BY(t){let{pageId:e,route:r,request:n,onHarEntry:o,logger:i,requestRecorders:a,mocks:s,isBrowserClosed:c}=t,l=FY(),u=!1,d=await iE(e,n);try{o?.(l,d);for(let m of Object.values(a))m.matches(d)&&(u=!0,m.onRequestStart(l,d))}catch(m){c()||i.warn({err:m},"Failed to add request to HAR")}let p=NM(n,s);p?await DM({logger:i,route:r,mock:p,entry:d,onHarEntry:o,request:n,requestId:l,requestRecorders:a,isBrowserClosed:c}):await zY({route:r,request:n,onHarEntry:o,logger:i,requestRecorders:a,entry:d,requestId:l,neverRedact:u,isBrowserClosed:c})}async function zY({route:t,request:e,onHarEntry:r,logger:n,requestRecorders:o,entry:i,requestId:a,neverRedact:s,isBrowserClosed:c}){await t.continue();try{let l=await e.response(),u;try{await l?.finished()}catch{}try{u=await e.sizes()}catch{}if(i&&await mg(e,i,u,s),!l||!i)return;await _M(i,e,l,u,s),r?.(a,i);for(let d of Object.values(o))d.matches(i)&&d.onRequestComplete(a,i)}catch(l){!l.message.includes("has been closed")&&!c()&&n.warn({err:l},"Failed to add response to HAR")}}async function HY(t){let e=t.postData();if(e){if((await t.headerValue("content-type"))?.includes("json"))try{return{json:t.postDataJSON()}}catch{return{}}else if((await t.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}async function jY(t){let e=await t.text();if(e){if((await t.headerValue("content-type"))?.includes("json"))try{return{json:await t.json()}}catch{return{}}else if((await t.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}function gg(t){return{request:{url:t.request.url,method:t.request.method,headers:t.request.headers.reduce((e,r)=>({...e,[r.name]:r.value}),{}),...t.request.postData?t.request.postData.mimeType.includes("json")?{json:JSON.parse(t.request.postData.text)}:{text:t.request.postData.text}:{}},response:t.response?{status:t.response.status,headers:t.response.headers.reduce((e,r)=>({...e,[r.name]:r.value}),{}),...t.response.content?t.response.content.mimeType?.includes("json")&&t.response.content.text?{json:JSON.parse(t.response.content.text)}:{text:t.response.content.text}:{}}:void 0}}async function sE(t){let e=t.request(),r=t.status(),n=t.headers(),o=await jY(t);return{request:{url:e.url(),method:e.method(),headers:e.headers(),...await HY(e)},response:{status:r,headers:n,...o},status:r,headers:n,...o}}var Ji=class{requestMatcher;constructor(e){this.requestMatcher=e}matches(e){let{url:r,method:n}=e;return this.requestMatcher.method&&this.requestMatcher.method.toLowerCase()!==n.toLowerCase()?!1:Mm(r,this.requestMatcher.urlMatcher)}};function Yu(t){let e=new URL(t.request().url());if(/^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"||e.hostname==="0.0.0.0")return t.abort();if(e.hostname.startsWith("[")&&e.hostname.endsWith("]")){let r=e.hostname.slice(1,-1).toLowerCase();if(r==="::1"||r.startsWith("fe80:")||r.startsWith("fc")||r.startsWith("fd"))return t.abort()}return t.fallback()}import{homedir as lE,platform as cE}from"os";import{join as uE}from"path";function hg(){let t=[];if(cE()==="linux"){let e=lE();["chromium","google-chrome","chrome-canary"].forEach(r=>{t.push(uE(e,".config",r,"Crash Reports"))})}else if(cE()==="darwin"){let e=lE();["Chromium","Google","Chrome for Testing"].forEach(r=>{t.push(uE(e,"Library","Application Support",r,"Crashpad"))})}else if(cE()==="win32"){let e=lE();["Chromium","Google","Google Chrome Canary"].forEach(r=>{t.push(uE(e,"AppData","Local",r,"User Data","Crashpad","reports"))})}return t}function kM(){return[{name:"fs_optout",value:"1",domain:".fullstory.com",path:"/",expires:Date.now()/1e3+365*24*60*60,httpOnly:!1,secure:!0,sameSite:"None"}]}var pE=Zi(zM(),"momentic","chromium"),qY=["--enable-crashpad","--crash-on-hang-threads=UI:18,IO:18"],KY=["--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"],YY=["--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 HM({baseUrl:t,logger:e,storage:r,enricher:n,userBrowserSettings:o,contextArgs:i,headfulOverride:a,iconKnowledgeBase:s,callbacks:c,videoOptions:l}){process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY="1";let u;switch(o.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=[...KY];!Pn&&JY()&&d.push("--disable-dev-shm-usage");let m={headless:!(a??process.env.MOMENTIC_HEADFUL_BROWSER==="true"),handleSIGTERM:!1,chromiumSandbox:!1,channel:u},h={...i??{},geolocation:i?.geolocation||Pi,locale:i?.locale||_i,timezoneId:i?.timezoneId||Ii,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??pg,viewport:i?.viewport??Ar,serviceWorkers:"block",storageState:{cookies:[...kM()],origins:[]},proxy:o.proxy};o.initialLocalStorage&&(h.storageState.origins=Object.entries(o.initialLocalStorage).map(([T,w])=>({origin:T,localStorage:Object.entries(w).map(([P,v])=>({name:P,value:v}))}))),process.env.MOMENTIC_CHROME_EXTRA_ARGS&&d.push(...process.env.MOMENTIC_CHROME_EXTRA_ARGS.split(","));let g=null,f,S,b={systemDevicePixelRatio:i?.deviceScaleFactor,isNewHeadless:!1};(u==="chrome"||u==="chromium")&&(b.isNewHeadless=!0,m.headless&&d.push("--headless=new")),process.env.BROWSER_MEMORY_MB&&d.push(`--js-flags=--max_old_space_size=${process.env.BROWSER_MEMORY_MB}`);try{let T=hg();T.forEach(w=>{if(!Xu(w))return;["new","pending","completed"].forEach(v=>{let x=Zi(w,v);if(!Xu(x))return;let O=VY(x);for(let L=0;L<O.length;L++){let N=Zi(x,O[L]);FM(N,{force:!0})}})}),T.forEach(w=>{Xu(w)||dE(w,{recursive:!0});let P=Zi(w,`write-test-${Date.now()}`);dE(P,{recursive:!0}),FM(P,{recursive:!0,force:!0})}),d.push(...qY)}catch(T){e.warn({err:T},"Could not create Chrome crash report directory, not enabling crashpad")}o.disableGpu&&d.push(...YY);let y=o.localChromeExtensionPaths?.map(T=>T.startsWith("~")?Zi(zM(),T.slice(1)):T);if(y?.length){if(u===void 0)throw new M("UserConfigurationError","Chrome extensions are only supported on Chromium and Google Chrome.");for(let v of y){let x=Zi(v,"manifest.json");if(!Xu(x))throw new M("UserConfigurationError",`Chrome extension path ${x} does not exist.`)}if(Pn)throw new M("UserConfigurationError","Cannot use persistent browser context on Momentic Cloud");let T=Zi(pE,`momentic-session-${Date.now()}`);if(!Xu(T))try{dE(T,{recursive:!0})}catch(v){throw new M("UserConfigurationError",`Failed to create browser cache directory. Please make sure you have sufficient permissions to create the ${pE} folder: ${v}`)}let w=[...d],P=y.map(v=>WY(v)).join(",");w.push(`--disable-extensions-except=${P}`),h?.deviceScaleFactor&&w.push(`--force-device-scale-factor=${h.deviceScaleFactor}`,`--device-scale-factor=${h.deviceScaleFactor}`),h.viewport&&w.push(`--window-size=${h.viewport.width},${h.viewport.height}`),f=await BM.launchPersistentContext(Zi(pE,`momentic-session-${Date.now()}`),{...m,...h,ignoreDefaultArgs:["--disable-extensions","--disable-component-extensions-with-background-pages"],args:w,baseURL:t}),e.info({sharedContextOptions:h,sharedBrowserOptions:m,userBrowserSettings:o,chromeArgs:w,properties:b,baseUrl:t},"Browser initialization context args (persistent)"),S=f.pages()[0]}else{g=await BM.launch({...m,args:d});let T={...h,baseURL:t,recordVideo:l?{dir:l.videoOutputPath}:void 0};f=await g.newContext(T),e.info({contextArgs:T,sharedBrowserOptions:m,chromeArgs:d,userBrowserSettings:o,properties:b,baseUrl:t},"Browser initialization context args (standard)"),S=await f.newPage()}if(l){let T=await S.video()?.path();if(T){let w=$Y(T);l.onVideoPageChange({videoName:w})}}Pn&&await f.route("**",Yu);try{let T=g?.version();e.info({browserVersion:T},"Got browser version")}catch(T){e.warn({err:T},"Could not get browser version string")}return{browser:g,context:f,page:S,baseUrl:t,logger:e,storage:r,enricher:n,userBrowserSettings:o,viewport:h.viewport||Ar,properties:b,clientCallbacks:c,iconKnowledgeBase:s,onVideoPageChange:l?.onVideoPageChange}}function XY(){if(process.platform!=="linux")return null;try{let e=GY("df -k /dev/shm",{encoding:"utf8"}).trim().split(/\r?\n/),n=e[e.length-1]?.trim().split(/\s+/)??[];if(!n||n.length<2)return null;let o=parseInt(n[1],10);return Number.isNaN(o)||o<=0?null:o/1024}catch{return null}}function JY(){let e=process.env.BROWSER_ENABLE_DEV_SHM;if(e==="1")return!1;if(e==="0")return!0;let r=XY();return r==null?!1:r<128}function mE(t,e=!1){let r=UM`window._MOMENTIC_BROWSER = true;
4563
+ ${c}`,{errOptions:{cause:t}})}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:ie});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 M("ActionFailureError",`${c} Please explicitly wait for the element to be visible or turn on the 'disable stability checks' option. ${a}`,{errOptions:{cause:t}})}return i.includes("element is outside of the viewport")?new M("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}`):t}function kY(t){let e=t.message;if(e.includes("waiting for locator")&&e.includes("data-momentic-id")&&!e.match(/attempting \w+ action/)&&!e.includes("locator.evaluate"))throw new Hc(`Interacting with the element using the data-momentic-id attribute timed out. This is caused by the web page performing too many CPU-intensive operations, or constant re-rendering of the element that destroys Momentic's ID attributes. Error: ${e}`,{cause:t});return t}async function OM(t,e,r){try{return await t.evaluate((o,{truncateToLength:i})=>window.serializeElementOnlyWithText?.(o,{truncateToLength:i}),{truncateToLength:r},{timeout:He})}catch(n){e.debug({err:n},"Failed to get HTML from locator for Playwright error translation");return}}import{execSync as GY}from"child_process";import UM from"dedent";import{existsSync as Xu,mkdirSync as dE,readdirSync as VY,rmSync as FM}from"fs";import{homedir as zM}from"os";import{basename as $Y,join as Zi,resolve as WY}from"path";import{chromium as BM}from"playwright-core";function LM(t,e){return async(r,n)=>{try{let o=await n.allHeaders();for(let{key:i,value:a,matcher:s}of t)(!s||s.matches({url:n.url(),method:n.method()}))&&(o[i]=a);await r.fallback({headers:o})}catch(o){e.warn({err:o},"Failed to apply custom headers to request, continuing")}}}import{randomUUID as FY}from"crypto";function NM(t,e){for(let r of Object.values(e))if(r.matcher.matches({url:t.url(),method:t.method()}))return r}async function DM(t){let{route:e,mock:r,entry:n,onHarEntry:o,request:i,requestId:a,requestRecorders:s,logger:c,isBrowserClosed:l}=t;await mg(i,n,void 0,!0);let u={url:n.request.url,options:{method:n.request.method,headers:n.request.headers.map(g=>[g.name,g.value]),body:n.request.postData?.text}},d;if(r.fetchOriginalResponse){let g=await e.fetch();d={body:await g.text(),options:{status:g.status(),statusText:g.statusText(),headers:Object.entries(await g.headers())}}}let p=await UY(r,u,d),m={};p.headers.forEach((g,f)=>{m[f]=g});let h={body:await p.text(),contentType:p.headers.get("content-type")||"text/plain",headers:m,status:p.status};await e.fulfill(h);try{n.response={status:h.status,statusText:p.statusText,headers:Object.entries(h.headers).map(([g,f])=>({name:g,value:f})),cookies:[],content:{mimeType:h.contentType,text:h.body},_mocked:!0},o?.(a,n);for(let g of Object.values(s))g.matches(n)&&g.onRequestComplete(a,n)}catch(g){!g.message.includes("has been closed")&&!l&&c.warn({err:g},"Failed to add response to HAR")}}async function UY(t,e,r){try{return await t.generateResponse(e,r)}catch(n){let o=n instanceof Error?n.message:`${n}`;return new Response(o,{status:500,headers:{"Content-Type":"text/plain"}})}}async function aE(t){try{await BY(t)}catch(e){t.logger.warn({err:e},"Error handling intercepted request, continuing...")}}async function BY(t){let{pageId:e,route:r,request:n,onHarEntry:o,logger:i,requestRecorders:a,mocks:s,isBrowserClosed:c}=t,l=FY(),u=!1,d=await iE(e,n);try{o?.(l,d);for(let m of Object.values(a))m.matches(d)&&(u=!0,m.onRequestStart(l,d))}catch(m){c()||i.warn({err:m},"Failed to add request to HAR")}let p=NM(n,s);p?await DM({logger:i,route:r,mock:p,entry:d,onHarEntry:o,request:n,requestId:l,requestRecorders:a,isBrowserClosed:c}):await zY({route:r,request:n,onHarEntry:o,logger:i,requestRecorders:a,entry:d,requestId:l,neverRedact:u,isBrowserClosed:c})}async function zY({route:t,request:e,onHarEntry:r,logger:n,requestRecorders:o,entry:i,requestId:a,neverRedact:s,isBrowserClosed:c}){await t.continue();try{let l=await e.response(),u;try{await l?.finished()}catch{}try{u=await e.sizes()}catch{}if(i&&await mg(e,i,u,s),!l||!i)return;await _M(i,e,l,u,s),r?.(a,i);for(let d of Object.values(o))d.matches(i)&&d.onRequestComplete(a,i)}catch(l){!l.message.includes("has been closed")&&!c()&&n.warn({err:l},"Failed to add response to HAR")}}async function HY(t){let e=t.postData();if(e){if((await t.headerValue("content-type"))?.includes("json"))try{return{json:t.postDataJSON()}}catch{return{}}else if((await t.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}async function jY(t){let e=await t.text();if(e){if((await t.headerValue("content-type"))?.includes("json"))try{return{json:await t.json()}}catch{return{}}else if((await t.headerValue("content-type"))?.includes("text"))return{text:e}}return{}}function gg(t){return{request:{url:t.request.url,method:t.request.method,headers:t.request.headers.reduce((e,r)=>({...e,[r.name]:r.value}),{}),...t.request.postData?t.request.postData.mimeType.includes("json")?{json:JSON.parse(t.request.postData.text)}:{text:t.request.postData.text}:{}},response:t.response?{status:t.response.status,headers:t.response.headers.reduce((e,r)=>({...e,[r.name]:r.value}),{}),...t.response.content?t.response.content.mimeType?.includes("json")&&t.response.content.text?{json:JSON.parse(t.response.content.text)}:{text:t.response.content.text}:{}}:void 0}}async function sE(t){let e=t.request(),r=t.status(),n=t.headers(),o=await jY(t);return{request:{url:e.url(),method:e.method(),headers:e.headers(),...await HY(e)},response:{status:r,headers:n,...o},status:r,headers:n,...o}}var Ji=class{requestMatcher;constructor(e){this.requestMatcher=e}matches(e){let{url:r,method:n}=e;return this.requestMatcher.method&&this.requestMatcher.method.toLowerCase()!==n.toLowerCase()?!1:Mm(r,this.requestMatcher.urlMatcher)}};function Yu(t){let e=new URL(t.request().url());if(/^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"||e.hostname==="0.0.0.0")return t.abort();if(e.hostname.startsWith("[")&&e.hostname.endsWith("]")){let r=e.hostname.slice(1,-1).toLowerCase();if(r==="::1"||r.startsWith("fe80:")||r.startsWith("fc")||r.startsWith("fd"))return t.abort()}return t.fallback()}import{homedir as lE,platform as cE}from"os";import{join as uE}from"path";function hg(){let t=[];if(cE()==="linux"){let e=lE();["chromium","google-chrome","chrome-canary"].forEach(r=>{t.push(uE(e,".config",r,"Crash Reports"))})}else if(cE()==="darwin"){let e=lE();["Chromium","Google","Chrome for Testing"].forEach(r=>{t.push(uE(e,"Library","Application Support",r,"Crashpad"))})}else if(cE()==="win32"){let e=lE();["Chromium","Google","Google Chrome Canary"].forEach(r=>{t.push(uE(e,"AppData","Local",r,"User Data","Crashpad","reports"))})}return t}function kM(){return[{name:"fs_optout",value:"1",domain:".fullstory.com",path:"/",expires:Date.now()/1e3+365*24*60*60,httpOnly:!1,secure:!0,sameSite:"None"}]}var pE=Zi(zM(),"momentic","chromium"),qY=["--enable-crashpad","--crash-on-hang-threads=UI:18,IO:18"],KY=["--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"],YY=["--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 HM({baseUrl:t,logger:e,storage:r,enricher:n,userBrowserSettings:o,contextArgs:i,headfulOverride:a,iconKnowledgeBase:s,callbacks:c,videoOptions:l}){process.env.PW_TEST_SCREENSHOT_NO_FONTS_READY="1";let u;switch(o.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=[...KY];!Pn&&JY()&&d.push("--disable-dev-shm-usage");let m={headless:!(a??process.env.MOMENTIC_HEADFUL_BROWSER==="true"),handleSIGTERM:!1,chromiumSandbox:!1,channel:u},h={...i??{},geolocation:i?.geolocation||Pi,locale:i?.locale||_i,timezoneId:i?.timezoneId||Ii,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??pg,viewport:i?.viewport??Ar,serviceWorkers:"block",storageState:{cookies:[...kM()],origins:[]},proxy:o.proxy};o.initialLocalStorage&&(h.storageState.origins=Object.entries(o.initialLocalStorage).map(([T,w])=>({origin:T,localStorage:Object.entries(w).map(([P,v])=>({name:P,value:v}))}))),process.env.MOMENTIC_CHROME_EXTRA_ARGS&&d.push(...process.env.MOMENTIC_CHROME_EXTRA_ARGS.split(","));let g=null,f,S,b={systemDevicePixelRatio:i?.deviceScaleFactor,isNewHeadless:!1};(u==="chrome"||u==="chromium")&&(b.isNewHeadless=!0,m.headless&&d.push("--headless=new")),process.env.BROWSER_MEMORY_MB&&d.push(`--js-flags=--max_old_space_size=${process.env.BROWSER_MEMORY_MB}`);try{let T=hg();T.forEach(w=>{if(!Xu(w))return;["new","pending","completed"].forEach(v=>{let x=Zi(w,v);if(!Xu(x))return;let O=VY(x);for(let L=0;L<O.length;L++){let N=Zi(x,O[L]);FM(N,{force:!0})}})}),T.forEach(w=>{Xu(w)||dE(w,{recursive:!0});let P=Zi(w,`write-test-${Date.now()}`);dE(P,{recursive:!0}),FM(P,{recursive:!0,force:!0})}),d.push(...qY)}catch(T){e.warn({err:T},"Could not create Chrome crash report directory, not enabling crashpad")}o.disableGpu&&d.push(...YY);let y=o.localChromeExtensionPaths?.map(T=>T.startsWith("~")?Zi(zM(),T.slice(1)):T);if(y?.length){if(u===void 0)throw new M("UserConfigurationError","Chrome extensions are only supported on Chromium and Google Chrome.");for(let v of y){let x=Zi(v,"manifest.json");if(!Xu(x))throw new M("UserConfigurationError",`Chrome extension path ${x} does not exist.`)}if(Pn)throw new M("UserConfigurationError","Cannot use persistent browser context on Momentic Cloud");let T=Zi(pE,`momentic-session-${Date.now()}`);if(!Xu(T))try{dE(T,{recursive:!0})}catch(v){throw new M("UserConfigurationError",`Failed to create browser cache directory. Please make sure you have sufficient permissions to create the ${pE} folder: ${v}`)}let w=[...d],P=y.map(v=>WY(v)).join(",");w.push(`--disable-extensions-except=${P}`),h?.deviceScaleFactor&&w.push(`--force-device-scale-factor=${h.deviceScaleFactor}`,`--device-scale-factor=${h.deviceScaleFactor}`),h.viewport&&w.push(`--window-size=${h.viewport.width},${h.viewport.height}`),f=await BM.launchPersistentContext(Zi(pE,`momentic-session-${Date.now()}`),{...m,...h,ignoreDefaultArgs:["--disable-extensions","--disable-component-extensions-with-background-pages"],args:w,baseURL:t}),e.info({sharedContextOptions:h,sharedBrowserOptions:m,userBrowserSettings:o,chromeArgs:w,properties:b,baseUrl:t},"Browser initialization context args (persistent)"),S=f.pages()[0]}else{g=await BM.launch({...m,args:d});let T={...h,baseURL:t,recordVideo:l?{dir:l.videoOutputPath}:void 0};f=await g.newContext(T),e.info({contextArgs:T,sharedBrowserOptions:m,chromeArgs:d,userBrowserSettings:o,properties:b,baseUrl:t},"Browser initialization context args (standard)"),S=await f.newPage()}if(l){let T=await S.video()?.path();if(T){let w=$Y(T);l.onVideoPageChange({videoName:w})}}Pn&&await f.route("**",Yu);try{let T=g?.version();e.info({browserVersion:T},"Got browser version")}catch(T){e.warn({err:T},"Could not get browser version string")}return{browser:g,context:f,page:S,baseUrl:t,logger:e,storage:r,enricher:n,userBrowserSettings:o,viewport:h.viewport||Ar,properties:b,clientCallbacks:c,iconKnowledgeBase:s,onVideoPageChange:l?.onVideoPageChange}}function XY(){if(process.platform!=="linux")return null;try{let e=GY("df -k /dev/shm",{encoding:"utf8"}).trim().split(/\r?\n/),n=e[e.length-1]?.trim().split(/\s+/)??[];if(!n||n.length<2)return null;let o=parseInt(n[1],10);return Number.isNaN(o)||o<=0?null:o/1024}catch{return null}}function JY(){let e=process.env.BROWSER_ENABLE_DEV_SHM;if(e==="1")return!1;if(e==="0")return!0;let r=XY();return r==null?!1:r<128}function mE(t,e=!1){let r=UM`window._MOMENTIC_BROWSER = true;
4564
4564
  window._MOMENTIC_FEATURE_FLAGS = ${JSON.stringify(t)};
4565
4565
  window.addEventListener('load', (event) => { console.log('[MOMENTIC] Page loaded'); });`;return e&&(r+=UM`
4566
4566
  window._fs_namespace = window._fs_namespace || 'FS';
@@ -4571,7 +4571,7 @@ ${c}`,{errOptions:{cause:t}})}if(i.includes("element is not visible")){let c="Th
4571
4571
  writable: false,
4572
4572
  configurable: false,
4573
4573
  });`),`${r}
4574
- //# sourceURL=momentic-injected/extra-scripts.js`}function gE(t){let e=[],r="";for(let n of t)n==="+"&&r?(e.push(r),r=""):r+=n;return e.push(r),e}var ZY=["clipboard-read","clipboard-write","microphone","camera","geolocation","local-network-access"],QY=["local-network-access"];function jM(t){return Pn?t.filter(e=>!QY.includes(e)):t}function GM(t){return jM(t||ZY)}var hE="__momentic_session_storage_initialized";function VM(t){return t.parentFrame!==void 0}async function $M(t,e,r){try{let n=await e4(t);if(n.entries.length===0)return;let o=e.origins?.find(i=>i.origin===n.origin);o?o.sessionStorage=n.entries:(e.origins=e.origins??[],e.origins.push({origin:n.origin,localStorage:[],sessionStorage:n.entries})),r.info(`Saved ${n.entries.length} session storage entries`)}catch(n){r.warn({err:n},"Failed to extract session storage, continuing...")}}async function e4(t){return t.evaluate(e=>{let r=[];for(let n=0;n<window.sessionStorage.length;n++){let o=window.sessionStorage.key(n);if(o&&o!==e){let i=window.sessionStorage.getItem(o);i!==null&&r.push({name:o,value:i})}}return{origin:window.location.origin,entries:r}},hE)}function WM(t,e){if(!t||!e)return;let r=t.x+t.width/2,n=t.y+t.height/2,o=e.x+e.width/2,i=e.y+e.height/2,a=o-r,s=i-n,c=Math.atan2(s,a);return c<0?c+2*Math.PI:c}function qM(t,e){if(!t||!e)return;let r=t.x+t.width/2,n=t.y+t.height/2,o=e.x+e.width/2,i=e.y+e.height/2,a=o-r,s=i-n;return Math.sqrt(a*a+s*s)}async function t4(t){let{initialLocationResult:e,cacheEvaluationParams:r,locator:n}=t;return n.evaluate((o,i)=>{let a=window,{initialLocationResult:s,cacheEvaluationParams:c}=i;if(!a.momenticConstants)throw new Error("Momentic constants not found");if(o.tagName.toLowerCase()!==s.tagName.toLowerCase())return"Tag name mismatch";let l=(o.textContent??"").slice(0,a.momenticConstants.serializedElementForCachingTruncateLength),u=(s.textContent??"").slice(0,a.momenticConstants.serializedElementForCachingTruncateLength);if(l!==u)return"Text content mismatch";for(let[m,h]of Object.entries(s.importantAttributes))if(o.getAttribute(m)!==h)return`Attribute ${m} mismatch`;let d=s.boundingBox.width*s.boundingBox.height,p=o.getBoundingClientRect().width*o.getBoundingClientRect().height;if(d===0||p===0){if(d!==p)return"Area mismatch"}else if(Math.abs(d-p)/d>.05)return"Area mismatch";if(s.identityHash&&a?.getElementIdentityHash&&s.identityHash!==a.getElementIdentityHash(o))return"Identity hash mismatch";if(c&&a.evaluatePrimaryCaches){let{css:m,hybrid:h}=a.evaluatePrimaryCaches(c);if(h?.result&&h.result.mPath&&s.mPath&&JSON.stringify(h.result.mPath)!==JSON.stringify(s.mPath))return"Hybrid selector returned a different element than the original";if(!h&&m&&m.result&&m.result.dataMomenticId!==s.dataMomenticId)return"CSS selector returned a different element than the original"}},{initialLocationResult:e,cacheEvaluationParams:r},{timeout:ie})}async function fE(t){let{logger:e}=t;try{let r=await t4(t);if(!r)return;throw e.warn({failReason:r},"Locator no longer matches cache, re-triggering evaluation"),new qo("Locator no longer matches cache")}catch(r){if(r instanceof qo)throw r;e.warn({err:r},"Failed to check whether locator has drifted from cache")}}import KM from"jpeg-js";import r4 from"pixelmatch";function YM(t,e,r=.01){if(t.equals(e))return 0;let n=KM.decode(t),o=KM.decode(e);if(n.width!==o.width||n.height!==o.height)return 100;let i=n.width,a=n.height,s=Buffer.alloc(i*a*4);return r4(n.data,o.data,s,i,a,{threshold:r})/(i*a)*100}var JM=["date","datetime-local","month","time","week"],XM={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 ZM(t){try{await X(n4(t),{milliseconds:ie})}catch(e){t.logger.warn({err:e},"Failed to transform native datetime input, continuing...")}}async function n4({root:t,text:e,options:r,logger:n,callbacks:o}){let i=(await Yt({root:t,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:Fe,arg:void 0,waitForPageLoad:o.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!XM[i])return;XM[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`),r.clearContent=!1,n.info("Transforming datetime input to use sequential key presses")}import{z as Wr}from"zod";var QM=Wr.object({doubleClick:Wr.boolean().optional(),rightClick:Wr.boolean().optional(),force:Wr.boolean().optional(),waitForDownload:Wr.boolean().optional(),delayMs:Wr.number().optional(),downloadTimeoutMs:Wr.number().optional(),relativePosition:Wr.object({x:Wr.number(),y:Wr.number()}).optional(),iterations:Wr.number().optional()}),jHe=Wr.object({repeat:Wr.number().optional(),convertMeta:Wr.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:Wr.number().optional()});async function fg({locator:t,callbacks:e,logger:r,timeoutMs:n=Fe}){try{await SE(e,n);let o=t.evaluate(a=>{let s=window;s.momenticIsEligible=p=>{let h=window.getComputedStyle(p,null).getPropertyValue("display");if(h==="none"||h==="contents")return!1;let g=p.getBoundingClientRect();return!(!g.height||!g.width)},s.removeHighlightTimers=s.removeHighlightTimers||[],s.removeHighlightFunctions=s.removeHighlightFunctions||{};let c=0;for(;!s.momenticIsEligible(a)&&c<3;){if(!a.parentElement)throw new Error("No eligible non-empty parent found for highlighting");a=a.parentElement,c++}let l=a.style.getPropertyValue("outline"),u=a.style.getPropertyPriority("outline");a.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let d=`momentic${Math.floor(Math.random()*1e7)}`;s[d]=()=>{a.style.removeProperty("outline"),a.style.setProperty("outline",l,u),a.getAttribute("style")||a.removeAttribute("style")},s.removeHighlightTimers.push(setTimeout(()=>{s[d](),s.removeHighlightFunctions?.[d]&&delete s.removeHighlightFunctions[d]},5e3)),s.removeHighlightFunctions[d]=s[d]},void 0,{timeout:n}).then(()=>!0).catch(a=>(r.debug({err:a},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1));return await X(o,{milliseconds:n})}catch(o){return r.debug({err:o},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1}}async function SE(t,e=Fe){let r=await t.state.getRoot();await Yt({root:r,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:t.waitForPageLoad,codePath:"removing element highlights"})}async function yE(t){let e=!!t.browserCallbacks.state.userBrowserSettings.visualActions;return ns({action:"clicking element",targetingResult:t.targetingResult,logger:t.logger,retryTimeoutMs:t.retryTimeoutMs,callbacks:t.browserCallbacks,func:async r=>tO({...t,targetingResult:r,useVisualClick:e})})}async function s4({actionSource:t,position:e,targetingResult:r,logger:n}){let{locator:o}=r;if(t!=="click"||e)return{locator:o,position:e,redirected:!1};let i=await SM({targetingResult:r,logger:n});return i?{locator:i.locator,position:i.relativePoint,redirected:!0}:{locator:o,position:e,redirected:!1}}async function l4(t,e){try{return await c4(t,e)}catch(r){throw e.logger.error({redirectionAttemptError:r,originalError:t},"Error handling click error, rethrowing original error"),t}}async function c4(t,e){let{logger:r,redirectionAttempts:n=0}=e,o=e.targetingResult.locator;if(t.message.includes("label")&&t.message.includes("for=")&&t.message.includes("intercepts pointer events")){let i=await o.getAttribute("id",{timeout:Fe});if(!i)throw t;let a=o.page().locator(`[for=${JSON.stringify(i)}]`),s=await a.boundingBox({timeout:Fe});if(!s||s.width===0||s.height===0)throw r.warn("Label element has no bounding box, throwing original error..."),t;return r.warn({err:t},"Attempting locator redirection due to input being covered by label"),tO({...e,targetingResult:{locator:a,originalElementLocationResult:void 0,serverSideBoundingBox:s},redirectionAttempts:n+1})}else throw r.error({err:t},"Click error does not match any known recoverable patterns, rethrowing"),t}async function u4(t){let{logger:e,targetingResult:r,position:n,options:o}=t,i=QM.safeParse(o),a=Date.now(),{clickX:s,clickY:c,reason:l}=await m4({targetingResult:r,position:n,options:o,logger:e,isAndroid:t.isAndroid});return e.info({position:n,options:i.success?i.data:void 0,clickLocation:{clickX:s,clickY:c,reason:l},duration:Date.now()-a},"Visual click"),{x:s,y:c}}async function d4(t){let{actionSource:e,targetingResult:r,options:n,logger:o}=t,i=t.targetingResult.locator,a=n?.relativePosition??t.position;({locator:i,position:a}=await s4({actionSource:e,position:a,targetingResult:r,logger:o}));let s=n?.force||r.hints?.force||!1;s&&!a&&r.hints?.relativeXYToLocator&&(a=r.hints.relativeXYToLocator);let c=i.toString();o.info({locator:c,position:a},"Locator click");try{n?.doubleClick?await i.dblclick({button:n.rightClick?"right":"left",timeout:ie,position:a,delay:n?.delayMs??25,force:s}):await i.click({button:n?.rightClick?"right":"left",timeout:ie,position:a,delay:n?.delayMs??25,force:s,clickCount:n?.iterations})}catch(l){if(h4(l))o.warn({err:l},"Click action timed out while waiting for navigation after completion, continuing...");else{if((t.redirectionAttempts??0)<1)return o.error({err:l},"Error clicking on locator, attempting to recover..."),l4(l,{...t,targetingResult:r});throw l}}return{locatorSource:c}}async function tO(t){let{options:e,logger:r,browserCallbacks:n,controllerCallbacks:o,useVisualClick:i,targetingResult:a}=t,s;e?.waitForDownload&&(s=(async()=>{let u=e.downloadTimeoutMs??qb;try{return await a.locator.page().waitForEvent("download",{timeout:u})}catch(d){return d instanceof a4.TimeoutError?new M("ActionFailureError",`Download did not complete in ${u}ms`):new M("ActionFailureError",`Download failed: ${d.message}`)}})());try{await fg({locator:a.locator,callbacks:n,logger:r,timeoutMs:Fe})}catch(u){r.warn({err:u},"Error highlighting locator in click, continuing...")}let c,l;if(i?c=await u4(t):l=(await d4(t)).locatorSource,e?.waitForDownload)if(s){if(!o?.createIsolatedFolder)throw new M("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");r.info("Waiting for download to start and complete");let u=await X(s,{milliseconds:e.downloadTimeoutMs??qb});if(u instanceof Error)throw u;return{downloadedFile:await g4(u,o.createIsolatedFolder,r),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 p4(t,e){let r=t.serverSideBoundingBox??await t.locator.boundingBox({timeout:ie});if(!r){let i=t.originalElementLocationResult?.serializedElement;throw new M("ActionFailureError",`${Vf}${i?`: ${i}`:""}`)}if(t.hints?.relativeXYToLocator){let i=r.x+t.hints.relativeXYToLocator.x,a=r.y+t.hints.relativeXYToLocator.y;return[{x:i,y:a},"targeting hint"]}let n=r.x+r.width/2,o=r.y+r.height/2;return[{x:n,y:o},"halfway point"]}async function m4({options:t,targetingResult:e,position:r,logger:n}){let o,i,a;if(t?.relativePosition){let u=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ie}),d=t.relativePosition.x,p=t.relativePosition.y;u?.width&&(d=Math.max(0,Math.min(t.relativePosition.x,u.width))),u?.height&&(p=Math.max(0,Math.min(t.relativePosition.y,u.height))),o=(u?.x??0)+d,i=(u?.y??0)+p,a="relative position from user"}else if(r){let u=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ie});o=(u?.x??0)+r.x,i=(u?.y??0)+r.y,a="predefined position"}else{let[u,d]=await p4(e,n);o=u.x,i=u.y,a=d}let s=e.locator.page(),c=t?.rightClick?"right":"left",l=t?.delayMs??25;return t?.doubleClick?await s.mouse.dblclick(o,i,{button:c,delay:l}):await s.mouse.click(o,i,{button:c,delay:l,clickCount:t?.iterations}),{clickX:o,clickY:i,reason:a}}async function g4(t,e,r){r.info("Download detected, saving file to disk");let n=await t.path(),o=nE(t.suggestedFilename()),i=e();await t.saveAs(i4(i,o)),eO(n,{force:!0}),setTimeout(()=>{eO(i,{recursive:!0,force:!0})},5*60*1e3);let a=EM(o4(i),o);return r.info({uri:a,downloadFolder:i},"Saved download to isolated folder"),a}function h4(t){return t.message.includes("locator.click: Timeout")&&t.message.includes("click action done")}import{platform as f4}from"os";var S4={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 y4(){let t=f4();return t==="win32"?"win32":t==="darwin"?"darwin":"linux"}function rO(t){return JSON.stringify(t.split("+").sort())}function Sg(t,e){let r=y4(),n=rO(t);for(let o of Object.values(S4))if(Object.values(o).some(i=>rO(i)===n))return o[r];return process.platform==="darwin"&&!e?t=t.replaceAll("Control","Meta"):t=t.replaceAll("Meta","Control"),t}async function bE({frame:t,page:e,deltaX:r,directionX:n,deltaY:o,directionY:i,signal:a,callbacks:s,logger:c}){if(!r&&!o)return;let l=n==="left"?-1:1,u=i==="up"?-1:1;if(t)await Yt({root:t,fn:([d,p,m,h])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*m,window.scrollY+(p??window.innerHeight)*h),arg:[r,o,l,u],waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"scrolling page"});else{let d=e.viewportSize()||Ar,p=await Yt({root:e,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"computing page height"}),[m,h,g]=await Yt({root:e,fn:()=>{let f=document.activeElement;if(!f)return[void 0,void 0,void 0];let S=f.getBoundingClientRect();return[f.scrollTop,S.x,S.y]},arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"computing active element position"});await e.mouse.wheel((r??d.width)*l,(o??d.height)*u);try{let f=Date.now();for(;Date.now()-f<tt;){a?.throwIfAborted();let S=await X(e.evaluate(()=>document.body.scrollHeight),{milliseconds:Fe}),[b,y,T]=await X(e.evaluate(()=>{let w=document.activeElement;if(!w)return[void 0,void 0,void 0];let P=w.getBoundingClientRect();return[w.scrollTop,P.x,P.y]}),{milliseconds:Fe});if(S===p&&b===m&&y===h&&T===g)break;p=S,m=b,h=y,g=T,await ye(lr)}}catch(f){c.warn({err:f},"Failed to wait for scroll to complete, continuing...")}}}async function EE(t,e){let r,n;for(let o=0;o<4;o++)try{return r=t.pages(),await Promise.all(r.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 ye(lr)}throw new Error(`Failed to get tab titles after all retries: ${n?.message}`)}async function TE(t){let{page:e,deltaX:r,deltaY:n,steps:o,visualTarget:i,isAndroid:a,hoverDurationMs:s}=t;if(a){await b4(t);return}await e.mouse.move(i.x,i.y),await e.mouse.down(),await e.mouse.move(r+i.x,n+i.y,{steps:o}),await ye(s??Yi),await e.mouse.up()}async function nO({page:t,fromLocator:e,toLocator:r,stepCount:n,dragDurationMs:o,hoverDurationMs:i}){let a=await r.boundingBox({timeout:ie});if(!a)throw new M("ActionFailureError","Could not get bounding box of 'to' target element");let s=await e.boundingBox({timeout:ie});if(!s)throw new M("ActionFailureError","Could not get bounding box of 'from' target element");let c=a.x+a.width/2,l=a.y+a.height/2,u=s.x+s.width/2,d=s.y+s.height/2;await TE({page:t,deltaX:c-u,deltaY:l-d,steps:n,dragDurationMs:o,hoverDurationMs:i,visualTarget:{x:u,y:d},isAndroid:!0})}async function oO(t,e,r,n){await t.mouse.move(e.x,e.y,{steps:3}),await t.mouse.down(),await t.mouse.move(r.x,r.y,{steps:3}),await ye(Math.min(n.hoverDurationMs??500,dg)),await t.mouse.up()}async function b4(t){let{page:e,deltaX:r,deltaY:n,steps:o,visualTarget:i,dragDurationMs:a,hoverDurationMs:s}=t,c=Math.max(1,o??1),l=i.x,u=i.y,d=i.x+r,p=i.y+n;await e.evaluate(async({startX:m,startY:h,endX:g,endY:f,stepCount:S,dragDurationMs:b,hoverDurationMs:y})=>{let T=document.elementFromPoint(m,h)??document.body??document.documentElement,P=window._momenticMobileUtilities.dispatchTouch;P(T,"touchstart",m,h);for(let v=1;v<=S;v+=1){let x=m+(g-m)*v/S,O=h+(f-h)*v/S;P(T,"touchmove",x,O),await new Promise(L=>setTimeout(L,Math.floor((b??500)/S)))}y&&await new Promise(v=>setTimeout(v,y)),P(T,"touchend",g,f)},{startX:l,startY:u,endX:d,endY:p,stepCount:c,dragDurationMs:a,hoverDurationMs:s})}import{randomUUID as x4}from"crypto";import{cloneDeep as RE}from"lodash-es";function Qi(t,e){let r=t.findIndex(n=>n===e);if(!(r===-1||!t[r+1]))return t[r+1]}import{createHash as E4}from"crypto";var T4="v1";function vE(t,e){if(t.tagName.toLowerCase()==="svg"&&!A4(t))try{let r=iO(t,e),n=v4(JSON.stringify(r));return{version:T4,json:r,hash:n}}catch{return}}function v4(t){return E4("md5").update(t).digest("hex")}function iO(t,e){let r=t.tagName.toLowerCase(),n=R4(t);if(r==="image"&&n["xlink:href"])throw new Error("Image tags within SVGs are not supported");let o={type:r,props:n,children:[]};for(let i of t.childrenBackendIds){let a=e.backendIdToNode[i];if(a&&a.nodeType===1){let s=iO(a,e);s&&o.children.push(s)}}return o}function A4(t){let e=t.computedStyles.display,r=t.computedStyles.visibility,n=t.computedStyles.opacity;return e==="none"||r==="hidden"||n==="0"}function R4(t){let e={},r=t.attributes;for(let n of Object.keys(r))mn.visualAttributesForSvgSerialization.includes(n)&&(e[n]=r[n]);return r.id&&t.tagName.toLowerCase()!=="svg"&&(e.id=r.id),e}var os={r:147,g:196,b:125,a:.55},sO={showRulers:!1,showStyles:!1,showExtensionLines:!1,contrastAlgorithm:"aa",contentColor:os,paddingColor:os,borderColor:os,marginColor:os,eventTargetColor:os,shapeColor:os,shapeMarginColor:os,showInfo:!0,showAccessibilityInfo:!0};function lO({snapshot:t,devicePixelRatio:e,computedStylesToFetch:r,logger:n}){let o=t.strings,i=t.documents,a={},s={},c={roots:[],backendIdToNode:a,frameIndexToIframeNode:s};return i.forEach((l,u)=>{let d=C4({allDocuments:i,stringConstants:o,computedStylesToFetch:r,devicePixelRatio:e,frameIndex:u,backendIdToNode:a,frameIndexToIframeNode:s,logger:n});c.roots.push(d)}),c}function C4({allDocuments:t,stringConstants:e,computedStylesToFetch:r,devicePixelRatio:n,frameIndex:o,frameIndexToIframeNode:i,backendIdToNode:a,logger:s}){let c=t[o],l=c.layout,u={};l.nodeIndex.forEach((v,x)=>{u[v]=x});let d=l.styles,p=l.bounds??[],m=c.nodes,h=m.contentDocumentIndex??{index:[],value:[]},g=m.backendNodeId??[],f=m.attributes??[],S=m.parentIndex??[],b=m.nodeName??[],y=m.nodeType??[],T=m.pseudoType??{index:[],value:[]},w=m.inputChecked??{index:[]},P=e[c.frameId];for(let v=0;v<g.length;v++){let x=g[v],O=y[v],L=f[v]??[],N=S[v]!==void 0&&S[v]>=0?S[v]:void 0,F=N!==void 0?g[N]:void 0,W=F!==void 0?a[F]:void 0,H=T.index.indexOf(v),de=H!==-1?e[T.value[H]]:void 0,$=u[v],B;$?B=p[$]??[]:B=[];let ae=b[v]!==void 0?e[b[v]]?.toLowerCase():void 0;if(!ae){s.warn({backendNodeId:x,frameId:P,frameIndex:o,nodeBounds:B},"DOM node has no tag name");continue}let ce={backendNodeId:x,psuedoType:de,nodeType:O,frameIndex:o,parentFrameId:P,ownedFrameId:void 0,bounds:{x:B[0]??null,y:B[1]??null,width:B[2]??null,height:B[3]??null},computedStyles:{},attributes:{},parentBackendNodeId:F??null,tagName:ae,parent:W??void 0,childrenBackendIds:[],momenticIgnored:void 0,mPathSelector:void 0};W&&W.childrenBackendIds.push(x);let _e=h.index.indexOf(v);if(_e!==-1){let se=h.value[_e];i[se]=ce;let Q=t[se]?.frameId;ce.ownedFrameId=Q!==void 0?e[Q]:void 0}for(let se of Object.keys(ce.bounds)){let Q=se;ce.bounds[Q]!==null&&(ce.bounds[Q]/=n)}let be=$!==void 0?d[$]??[]:[];for(let se=0;se<be.length&&!(se>=r.length);se++){let Q=be[se];if(Q===void 0||isNaN(Q))continue;let ve=e[Q];if(ve===void 0)continue;let Re=r[se];ce.computedStyles[Re]=ve}for(let se=0;se<L.length;se+=2){let Q=L[se],ve=L[se+1];if(!Q||!ve)continue;let Re=e[Q],_=e[ve];!Re||!_||(ce.attributes[Re]=_)}w.index.includes(v)&&(ce.attributes.checked="true"),a[ce.backendNodeId]=ce}return a[g[0]]}function AE(t,e){if(t.mPathSelector)return t.mPathSelector;let r=t.parent,n;if(!r)n=t.tagName;else if(t.tagName==="body")n="body";else{let i=r.childrenBackendIds.filter(c=>e.backendIdToNode[c]?.nodeType===1&&!e.backendIdToNode[c]?.psuedoType).indexOf(t.backendNodeId),a=` > ${t.tagName}:nth-child(${i+1})`;n=`${AE(r,e)}${a}`}return t.mPathSelector=n,n}function aO(t,e){return t.parentBackendNodeId!==null?e.backendIdToNode[t.parentBackendNodeId]:t.frameIndex===0?void 0:e.frameIndexToIframeNode[t.frameIndex]}var w4=["html","#document","#document-fragment"];function cO({node:t,domGraph:e}){let r=[],n=t,o=aO(t,e);if(!o)return[t.tagName];let i=()=>{if(n=o,o=aO(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++,w4.includes(n.tagName)){i();continue}if(n.tagName==="body")r.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){r.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 r.reverse()}function uO(t,e){let r=t.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?r=r.frameLocator(a):r=r.locator(a)}}if(n.length&&(r=r.locator(n.join(" > "))),"owner"in r)throw new Error("Final locator from mpath is a frame locator");return r}async function dO(t,e){await t.send({method:"DOM.getDocument",params:{depth:0},timeout:tt});let r=await t.send({method:"DOM.requestNode",params:{objectId:e},timeout:tt}),o=(await t.send({method:"DOM.getAttributes",params:{nodeId:r.nodeId},timeout:tt})).attributes,i=Qi(o,ts);if(!i)throw new Error(`Could not find attribute ${ts} for object ${e}`);return i}var _4=["focusable","keyshortcuts","controls","live","relevant","orientation"],I4=["selected","readonly","modal","required","invalid"],P4=["id","name","role","content"],pO=["absolute","fixed","sticky"],M4=["i","label"],O4=["path"],L4=["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","LabelText"],hO=["ariaHiddenElement","ariaHiddenSubtree","hiddenByChildTree","inertElement","inertSubtree","notRendered","notVisible"],fO=["activeAriaModalDialog","activeFullscreenElement","activeModalDialog"],N4=["menulistpopup","statictext","inlinetextbox"],D4=80,mO=100,SO=50,xE=["StaticText","ListMarker","RootWebArea","LineBreak","::before","::after"],k4=["cite"],U4={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"],emphasis:["em"]},F4={name:!0,value:!0,title:!0,alt:!0,placeholder:!0,checked:!0,selected:!0,contenteditable:!0},gO={indentLevel:0},CE=class t{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(r=>{r.name==="keyshortcuts"?this.dataMomenticId=parseInt(r.value.value):this.properties[r.name]=r.value.value}),e.domNode){this.domNode=e.domNode,this.tagName=e.domNode.tagName||void 0;let r=e.domNode.attributes.id;this.name=this.name||e.domNode.attributes.name||(r&&r.length<SO?r:""),this.role=this.role||(e.domNode.attributes.role??""),j4(this.properties,e.domNode,e.importantProperties)}V4(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&&O4.includes(this.domNode.tagName)&&!this.domNode.attributes["aria-label"]||this.ignoredReasons.some(n=>fO.includes(n)))return!1;if(e){if(Object.keys(this.domNode?.attributes??{}).some(o=>vO(o,e)))return!0;let n=this.domNode?.attributes.class?.split(" ");if(n&&n.length>0&&n.some(o=>AO(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&&M4.includes(this.domNode.tagName)||L4.includes(this.role.toLowerCase())||this.domNode?.computedStyles["background-image"]&&this.domNode?.computedStyles["background-image"]!=="none"&&this.children.length===0||this.role.toLowerCase()==="inlinetextbox"&&this.tagName||!this.properties.hidden&&(this.properties.focusable||this.properties.settable)||mn.alwaysInterestingTruthyPropertyNames.some(n=>!!this.properties[n]))return!0;let r=this.properties.class;return typeof r=="string"&&r.split(" ").some(n=>TO(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")||this.children.some(n=>n.isIneligible())?!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"))}isIneligible(){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))}canRedirectFromIneligibleTag(){if(!this.domNode)return!1;let e=this.internalProperties.hasExplicitPointingLabel===!0;return fM({tagName:this.domNode.tagName,width:this.domNode.bounds.width,height:this.domNode.bounds.height})&&e}serialize(e=gO){let r=Object.assign({},gO,e),{indentLevel:n,noChildren:o,noProperties:i,noId:a,noContent:s,condensedMode:c}=r,l=RE(this.properties),u=" ".repeat(n),d=this.role||"",p=this.tagName??"unknown",m=this.name;d==="heading"&&m==="heading"&&(m=""),this.nameSources?.find(v=>!v.superseded&&v.type==="contents")&&this.children.length>0&&(m="");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===m&&(m="")}let f=xE.includes(this.role)||k4.includes(this.tagName||"");if(this.role==="StaticText")return`${u}${m}
4574
+ //# sourceURL=momentic-injected/extra-scripts.js`}function gE(t){let e=[],r="";for(let n of t)n==="+"&&r?(e.push(r),r=""):r+=n;return e.push(r),e}var ZY=["clipboard-read","clipboard-write","microphone","camera","geolocation","local-network-access"],QY=["local-network-access"];function jM(t){return Pn?t.filter(e=>!QY.includes(e)):t}function GM(t){return jM(t||ZY)}var hE="__momentic_session_storage_initialized";function VM(t){return t.parentFrame!==void 0}async function $M(t,e,r){try{let n=await e4(t);if(n.entries.length===0)return;let o=e.origins?.find(i=>i.origin===n.origin);o?o.sessionStorage=n.entries:(e.origins=e.origins??[],e.origins.push({origin:n.origin,localStorage:[],sessionStorage:n.entries})),r.info(`Saved ${n.entries.length} session storage entries`)}catch(n){r.warn({err:n},"Failed to extract session storage, continuing...")}}async function e4(t){return t.evaluate(e=>{let r=[];for(let n=0;n<window.sessionStorage.length;n++){let o=window.sessionStorage.key(n);if(o&&o!==e){let i=window.sessionStorage.getItem(o);i!==null&&r.push({name:o,value:i})}}return{origin:window.location.origin,entries:r}},hE)}function WM(t,e){if(!t||!e)return;let r=t.x+t.width/2,n=t.y+t.height/2,o=e.x+e.width/2,i=e.y+e.height/2,a=o-r,s=i-n,c=Math.atan2(s,a);return c<0?c+2*Math.PI:c}function qM(t,e){if(!t||!e)return;let r=t.x+t.width/2,n=t.y+t.height/2,o=e.x+e.width/2,i=e.y+e.height/2,a=o-r,s=i-n;return Math.sqrt(a*a+s*s)}async function t4(t){let{initialLocationResult:e,cacheEvaluationParams:r,locator:n}=t;return n.evaluate((o,i)=>{let a=window,{initialLocationResult:s,cacheEvaluationParams:c}=i;if(!a.momenticConstants)throw new Error("Momentic constants not found");if(o.tagName.toLowerCase()!==s.tagName.toLowerCase())return"Tag name mismatch";let l=(o.textContent??"").slice(0,a.momenticConstants.serializedElementForCachingTruncateLength),u=(s.textContent??"").slice(0,a.momenticConstants.serializedElementForCachingTruncateLength);if(l!==u)return"Text content mismatch";for(let[m,h]of Object.entries(s.importantAttributes))if(o.getAttribute(m)!==h)return`Attribute ${m} mismatch`;let d=s.boundingBox.width*s.boundingBox.height,p=o.getBoundingClientRect().width*o.getBoundingClientRect().height;if(d===0||p===0){if(d!==p)return"Area mismatch"}else if(Math.abs(d-p)/d>.05)return"Area mismatch";if(s.identityHash&&a?.getElementIdentityHash&&s.identityHash!==a.getElementIdentityHash(o))return"Identity hash mismatch";if(c&&a.evaluatePrimaryCaches){let{css:m,hybrid:h}=a.evaluatePrimaryCaches(c);if(h?.result&&h.result.mPath&&s.mPath&&JSON.stringify(h.result.mPath)!==JSON.stringify(s.mPath))return"Hybrid selector returned a different element than the original";if(!h&&m&&m.result&&m.result.dataMomenticId!==s.dataMomenticId)return"CSS selector returned a different element than the original"}},{initialLocationResult:e,cacheEvaluationParams:r},{timeout:ie})}async function fE(t){let{logger:e}=t;try{let r=await t4(t);if(!r)return;throw e.warn({failReason:r},"Locator no longer matches cache, re-triggering evaluation"),new qo("Locator no longer matches cache")}catch(r){if(r instanceof qo)throw r;e.warn({err:r},"Failed to check whether locator has drifted from cache")}}import KM from"jpeg-js";import r4 from"pixelmatch";function YM(t,e,r=.01){if(t.equals(e))return 0;let n=KM.decode(t),o=KM.decode(e);if(n.width!==o.width||n.height!==o.height)return 100;let i=n.width,a=n.height,s=Buffer.alloc(i*a*4);return r4(n.data,o.data,s,i,a,{threshold:r})/(i*a)*100}var JM=["date","datetime-local","month","time","week"],XM={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 ZM(t){try{await X(n4(t),{milliseconds:ie})}catch(e){t.logger.warn({err:e},"Failed to transform native datetime input, continuing...")}}async function n4({root:t,text:e,options:r,logger:n,callbacks:o}){let i=(await Yt({root:t,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:He,arg:void 0,waitForPageLoad:o.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!XM[i])return;XM[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`),r.clearContent=!1,n.info("Transforming datetime input to use sequential key presses")}import{z as Wr}from"zod";var QM=Wr.object({doubleClick:Wr.boolean().optional(),rightClick:Wr.boolean().optional(),force:Wr.boolean().optional(),waitForDownload:Wr.boolean().optional(),delayMs:Wr.number().optional(),downloadTimeoutMs:Wr.number().optional(),relativePosition:Wr.object({x:Wr.number(),y:Wr.number()}).optional(),iterations:Wr.number().optional()}),jHe=Wr.object({repeat:Wr.number().optional(),convertMeta:Wr.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:Wr.number().optional()});async function fg({locator:t,callbacks:e,logger:r,timeoutMs:n=He}){try{await SE(e,n);let o=t.evaluate(a=>{let s=window;s.momenticIsEligible=p=>{let h=window.getComputedStyle(p,null).getPropertyValue("display");if(h==="none"||h==="contents")return!1;let g=p.getBoundingClientRect();return!(!g.height||!g.width)},s.removeHighlightTimers=s.removeHighlightTimers||[],s.removeHighlightFunctions=s.removeHighlightFunctions||{};let c=0;for(;!s.momenticIsEligible(a)&&c<3;){if(!a.parentElement)throw new Error("No eligible non-empty parent found for highlighting");a=a.parentElement,c++}let l=a.style.getPropertyValue("outline"),u=a.style.getPropertyPriority("outline");a.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let d=`momentic${Math.floor(Math.random()*1e7)}`;s[d]=()=>{a.style.removeProperty("outline"),a.style.setProperty("outline",l,u),a.getAttribute("style")||a.removeAttribute("style")},s.removeHighlightTimers.push(setTimeout(()=>{s[d](),s.removeHighlightFunctions?.[d]&&delete s.removeHighlightFunctions[d]},5e3)),s.removeHighlightFunctions[d]=s[d]},void 0,{timeout:n}).then(()=>!0).catch(a=>(r.debug({err:a},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1));return await X(o,{milliseconds:n})}catch(o){return r.debug({err:o},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1}}async function SE(t,e=He){let r=await t.state.getRoot();await Yt({root:r,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:t.waitForPageLoad,codePath:"removing element highlights"})}async function yE(t){let e=!!t.browserCallbacks.state.userBrowserSettings.visualActions;return ns({action:"clicking element",targetingResult:t.targetingResult,logger:t.logger,retryTimeoutMs:t.retryTimeoutMs,callbacks:t.browserCallbacks,func:async r=>tO({...t,targetingResult:r,useVisualClick:e})})}async function s4({actionSource:t,position:e,targetingResult:r,logger:n}){let{locator:o}=r;if(t!=="click"||e)return{locator:o,position:e,redirected:!1};let i=await SM({targetingResult:r,logger:n});return i?{locator:i.locator,position:i.relativePoint,redirected:!0}:{locator:o,position:e,redirected:!1}}async function l4(t,e){try{return await c4(t,e)}catch(r){throw e.logger.error({redirectionAttemptError:r,originalError:t},"Error handling click error, rethrowing original error"),t}}async function c4(t,e){let{logger:r,redirectionAttempts:n=0}=e,o=e.targetingResult.locator;if(t.message.includes("label")&&t.message.includes("for=")&&t.message.includes("intercepts pointer events")){let i=await o.getAttribute("id",{timeout:He});if(!i)throw t;let a=o.page().locator(`[for=${JSON.stringify(i)}]`),s=await a.boundingBox({timeout:He});if(!s||s.width===0||s.height===0)throw r.warn("Label element has no bounding box, throwing original error..."),t;return r.warn({err:t},"Attempting locator redirection due to input being covered by label"),tO({...e,targetingResult:{locator:a,originalElementLocationResult:void 0,serverSideBoundingBox:s},redirectionAttempts:n+1})}else throw r.error({err:t},"Click error does not match any known recoverable patterns, rethrowing"),t}async function u4(t){let{logger:e,targetingResult:r,position:n,options:o}=t,i=QM.safeParse(o),a=Date.now(),{clickX:s,clickY:c,reason:l}=await m4({targetingResult:r,position:n,options:o,logger:e,isAndroid:t.isAndroid});return e.info({position:n,options:i.success?i.data:void 0,clickLocation:{clickX:s,clickY:c,reason:l},duration:Date.now()-a},"Visual click"),{x:s,y:c}}async function d4(t){let{actionSource:e,targetingResult:r,options:n,logger:o}=t,i=t.targetingResult.locator,a=n?.relativePosition??t.position;({locator:i,position:a}=await s4({actionSource:e,position:a,targetingResult:r,logger:o}));let s=n?.force||r.hints?.force||!1;s&&!a&&r.hints?.relativeXYToLocator&&(a=r.hints.relativeXYToLocator);let c=i.toString();o.info({locator:c,position:a},"Locator click");try{n?.doubleClick?await i.dblclick({button:n.rightClick?"right":"left",timeout:ie,position:a,delay:n?.delayMs??25,force:s}):await i.click({button:n?.rightClick?"right":"left",timeout:ie,position:a,delay:n?.delayMs??25,force:s,clickCount:n?.iterations})}catch(l){if(h4(l))o.warn({err:l},"Click action timed out while waiting for navigation after completion, continuing...");else{if((t.redirectionAttempts??0)<1)return o.error({err:l},"Error clicking on locator, attempting to recover..."),l4(l,{...t,targetingResult:r});throw l}}return{locatorSource:c}}async function tO(t){let{options:e,logger:r,browserCallbacks:n,controllerCallbacks:o,useVisualClick:i,targetingResult:a}=t,s;e?.waitForDownload&&(s=(async()=>{let u=e.downloadTimeoutMs??qb;try{return await a.locator.page().waitForEvent("download",{timeout:u})}catch(d){return d instanceof a4.TimeoutError?new M("ActionFailureError",`Download did not complete in ${u}ms`):new M("ActionFailureError",`Download failed: ${d.message}`)}})());try{await fg({locator:a.locator,callbacks:n,logger:r,timeoutMs:He})}catch(u){r.warn({err:u},"Error highlighting locator in click, continuing...")}let c,l;if(i?c=await u4(t):l=(await d4(t)).locatorSource,e?.waitForDownload)if(s){if(!o?.createIsolatedFolder)throw new M("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");r.info("Waiting for download to start and complete");let u=await X(s,{milliseconds:e.downloadTimeoutMs??qb});if(u instanceof Error)throw u;return{downloadedFile:await g4(u,o.createIsolatedFolder,r),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 p4(t,e){let r=t.serverSideBoundingBox??await t.locator.boundingBox({timeout:ie});if(!r){let i=t.originalElementLocationResult?.serializedElement;throw new M("ActionFailureError",`${Vf}${i?`: ${i}`:""}`)}if(t.hints?.relativeXYToLocator){let i=r.x+t.hints.relativeXYToLocator.x,a=r.y+t.hints.relativeXYToLocator.y;return[{x:i,y:a},"targeting hint"]}let n=r.x+r.width/2,o=r.y+r.height/2;return[{x:n,y:o},"halfway point"]}async function m4({options:t,targetingResult:e,position:r,logger:n}){let o,i,a;if(t?.relativePosition){let u=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ie}),d=t.relativePosition.x,p=t.relativePosition.y;u?.width&&(d=Math.max(0,Math.min(t.relativePosition.x,u.width))),u?.height&&(p=Math.max(0,Math.min(t.relativePosition.y,u.height))),o=(u?.x??0)+d,i=(u?.y??0)+p,a="relative position from user"}else if(r){let u=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:ie});o=(u?.x??0)+r.x,i=(u?.y??0)+r.y,a="predefined position"}else{let[u,d]=await p4(e,n);o=u.x,i=u.y,a=d}let s=e.locator.page(),c=t?.rightClick?"right":"left",l=t?.delayMs??25;return t?.doubleClick?await s.mouse.dblclick(o,i,{button:c,delay:l}):await s.mouse.click(o,i,{button:c,delay:l,clickCount:t?.iterations}),{clickX:o,clickY:i,reason:a}}async function g4(t,e,r){r.info("Download detected, saving file to disk");let n=await t.path(),o=nE(t.suggestedFilename()),i=e();await t.saveAs(i4(i,o)),eO(n,{force:!0}),setTimeout(()=>{eO(i,{recursive:!0,force:!0})},5*60*1e3);let a=EM(o4(i),o);return r.info({uri:a,downloadFolder:i},"Saved download to isolated folder"),a}function h4(t){return t.message.includes("locator.click: Timeout")&&t.message.includes("click action done")}import{platform as f4}from"os";var S4={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 y4(){let t=f4();return t==="win32"?"win32":t==="darwin"?"darwin":"linux"}function rO(t){return JSON.stringify(t.split("+").sort())}function Sg(t,e){let r=y4(),n=rO(t);for(let o of Object.values(S4))if(Object.values(o).some(i=>rO(i)===n))return o[r];return process.platform==="darwin"&&!e?t=t.replaceAll("Control","Meta"):t=t.replaceAll("Meta","Control"),t}async function bE({frame:t,page:e,deltaX:r,directionX:n,deltaY:o,directionY:i,signal:a,callbacks:s,logger:c}){if(!r&&!o)return;let l=n==="left"?-1:1,u=i==="up"?-1:1;if(t)await Yt({root:t,fn:([d,p,m,h])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*m,window.scrollY+(p??window.innerHeight)*h),arg:[r,o,l,u],waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"scrolling page"});else{let d=e.viewportSize()||Ar,p=await Yt({root:e,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"computing page height"}),[m,h,g]=await Yt({root:e,fn:()=>{let f=document.activeElement;if(!f)return[void 0,void 0,void 0];let S=f.getBoundingClientRect();return[f.scrollTop,S.x,S.y]},arg:void 0,waitForPageLoad:s.waitForPageLoad,timeout:tt,codePath:"computing active element position"});await e.mouse.wheel((r??d.width)*l,(o??d.height)*u);try{let f=Date.now();for(;Date.now()-f<tt;){a?.throwIfAborted();let S=await X(e.evaluate(()=>document.body.scrollHeight),{milliseconds:He}),[b,y,T]=await X(e.evaluate(()=>{let w=document.activeElement;if(!w)return[void 0,void 0,void 0];let P=w.getBoundingClientRect();return[w.scrollTop,P.x,P.y]}),{milliseconds:He});if(S===p&&b===m&&y===h&&T===g)break;p=S,m=b,h=y,g=T,await ye(lr)}}catch(f){c.warn({err:f},"Failed to wait for scroll to complete, continuing...")}}}async function EE(t,e){let r,n;for(let o=0;o<4;o++)try{return r=t.pages(),await Promise.all(r.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 ye(lr)}throw new Error(`Failed to get tab titles after all retries: ${n?.message}`)}async function TE(t){let{page:e,deltaX:r,deltaY:n,steps:o,visualTarget:i,isAndroid:a,hoverDurationMs:s}=t;if(a){await b4(t);return}await e.mouse.move(i.x,i.y),await e.mouse.down(),await e.mouse.move(r+i.x,n+i.y,{steps:o}),await ye(s??Yi),await e.mouse.up()}async function nO({page:t,fromLocator:e,toLocator:r,stepCount:n,dragDurationMs:o,hoverDurationMs:i}){let a=await r.boundingBox({timeout:ie});if(!a)throw new M("ActionFailureError","Could not get bounding box of 'to' target element");let s=await e.boundingBox({timeout:ie});if(!s)throw new M("ActionFailureError","Could not get bounding box of 'from' target element");let c=a.x+a.width/2,l=a.y+a.height/2,u=s.x+s.width/2,d=s.y+s.height/2;await TE({page:t,deltaX:c-u,deltaY:l-d,steps:n,dragDurationMs:o,hoverDurationMs:i,visualTarget:{x:u,y:d},isAndroid:!0})}async function oO(t,e,r,n){await t.mouse.move(e.x,e.y,{steps:3}),await t.mouse.down(),await t.mouse.move(r.x,r.y,{steps:3}),await ye(Math.min(n.hoverDurationMs??500,dg)),await t.mouse.up()}async function b4(t){let{page:e,deltaX:r,deltaY:n,steps:o,visualTarget:i,dragDurationMs:a,hoverDurationMs:s}=t,c=Math.max(1,o??1),l=i.x,u=i.y,d=i.x+r,p=i.y+n;await e.evaluate(async({startX:m,startY:h,endX:g,endY:f,stepCount:S,dragDurationMs:b,hoverDurationMs:y})=>{let T=document.elementFromPoint(m,h)??document.body??document.documentElement,P=window._momenticMobileUtilities.dispatchTouch;P(T,"touchstart",m,h);for(let v=1;v<=S;v+=1){let x=m+(g-m)*v/S,O=h+(f-h)*v/S;P(T,"touchmove",x,O),await new Promise(L=>setTimeout(L,Math.floor((b??500)/S)))}y&&await new Promise(v=>setTimeout(v,y)),P(T,"touchend",g,f)},{startX:l,startY:u,endX:d,endY:p,stepCount:c,dragDurationMs:a,hoverDurationMs:s})}import{randomUUID as x4}from"crypto";import{cloneDeep as RE}from"lodash-es";function Qi(t,e){let r=t.findIndex(n=>n===e);if(!(r===-1||!t[r+1]))return t[r+1]}import{createHash as E4}from"crypto";var T4="v1";function vE(t,e){if(t.tagName.toLowerCase()==="svg"&&!A4(t))try{let r=iO(t,e),n=v4(JSON.stringify(r));return{version:T4,json:r,hash:n}}catch{return}}function v4(t){return E4("md5").update(t).digest("hex")}function iO(t,e){let r=t.tagName.toLowerCase(),n=R4(t);if(r==="image"&&n["xlink:href"])throw new Error("Image tags within SVGs are not supported");let o={type:r,props:n,children:[]};for(let i of t.childrenBackendIds){let a=e.backendIdToNode[i];if(a&&a.nodeType===1){let s=iO(a,e);s&&o.children.push(s)}}return o}function A4(t){let e=t.computedStyles.display,r=t.computedStyles.visibility,n=t.computedStyles.opacity;return e==="none"||r==="hidden"||n==="0"}function R4(t){let e={},r=t.attributes;for(let n of Object.keys(r))mn.visualAttributesForSvgSerialization.includes(n)&&(e[n]=r[n]);return r.id&&t.tagName.toLowerCase()!=="svg"&&(e.id=r.id),e}var os={r:147,g:196,b:125,a:.55},sO={showRulers:!1,showStyles:!1,showExtensionLines:!1,contrastAlgorithm:"aa",contentColor:os,paddingColor:os,borderColor:os,marginColor:os,eventTargetColor:os,shapeColor:os,shapeMarginColor:os,showInfo:!0,showAccessibilityInfo:!0};function lO({snapshot:t,devicePixelRatio:e,computedStylesToFetch:r,logger:n}){let o=t.strings,i=t.documents,a={},s={},c={roots:[],backendIdToNode:a,frameIndexToIframeNode:s};return i.forEach((l,u)=>{let d=C4({allDocuments:i,stringConstants:o,computedStylesToFetch:r,devicePixelRatio:e,frameIndex:u,backendIdToNode:a,frameIndexToIframeNode:s,logger:n});c.roots.push(d)}),c}function C4({allDocuments:t,stringConstants:e,computedStylesToFetch:r,devicePixelRatio:n,frameIndex:o,frameIndexToIframeNode:i,backendIdToNode:a,logger:s}){let c=t[o],l=c.layout,u={};l.nodeIndex.forEach((v,x)=>{u[v]=x});let d=l.styles,p=l.bounds??[],m=c.nodes,h=m.contentDocumentIndex??{index:[],value:[]},g=m.backendNodeId??[],f=m.attributes??[],S=m.parentIndex??[],b=m.nodeName??[],y=m.nodeType??[],T=m.pseudoType??{index:[],value:[]},w=m.inputChecked??{index:[]},P=e[c.frameId];for(let v=0;v<g.length;v++){let x=g[v],O=y[v],L=f[v]??[],N=S[v]!==void 0&&S[v]>=0?S[v]:void 0,F=N!==void 0?g[N]:void 0,W=F!==void 0?a[F]:void 0,H=T.index.indexOf(v),de=H!==-1?e[T.value[H]]:void 0,$=u[v],B;$?B=p[$]??[]:B=[];let ae=b[v]!==void 0?e[b[v]]?.toLowerCase():void 0;if(!ae){s.warn({backendNodeId:x,frameId:P,frameIndex:o,nodeBounds:B},"DOM node has no tag name");continue}let ce={backendNodeId:x,psuedoType:de,nodeType:O,frameIndex:o,parentFrameId:P,ownedFrameId:void 0,bounds:{x:B[0]??null,y:B[1]??null,width:B[2]??null,height:B[3]??null},computedStyles:{},attributes:{},parentBackendNodeId:F??null,tagName:ae,parent:W??void 0,childrenBackendIds:[],momenticIgnored:void 0,mPathSelector:void 0};W&&W.childrenBackendIds.push(x);let _e=h.index.indexOf(v);if(_e!==-1){let se=h.value[_e];i[se]=ce;let Q=t[se]?.frameId;ce.ownedFrameId=Q!==void 0?e[Q]:void 0}for(let se of Object.keys(ce.bounds)){let Q=se;ce.bounds[Q]!==null&&(ce.bounds[Q]/=n)}let be=$!==void 0?d[$]??[]:[];for(let se=0;se<be.length&&!(se>=r.length);se++){let Q=be[se];if(Q===void 0||isNaN(Q))continue;let ve=e[Q];if(ve===void 0)continue;let Re=r[se];ce.computedStyles[Re]=ve}for(let se=0;se<L.length;se+=2){let Q=L[se],ve=L[se+1];if(!Q||!ve)continue;let Re=e[Q],_=e[ve];!Re||!_||(ce.attributes[Re]=_)}w.index.includes(v)&&(ce.attributes.checked="true"),a[ce.backendNodeId]=ce}return a[g[0]]}function AE(t,e){if(t.mPathSelector)return t.mPathSelector;let r=t.parent,n;if(!r)n=t.tagName;else if(t.tagName==="body")n="body";else{let i=r.childrenBackendIds.filter(c=>e.backendIdToNode[c]?.nodeType===1&&!e.backendIdToNode[c]?.psuedoType).indexOf(t.backendNodeId),a=` > ${t.tagName}:nth-child(${i+1})`;n=`${AE(r,e)}${a}`}return t.mPathSelector=n,n}function aO(t,e){return t.parentBackendNodeId!==null?e.backendIdToNode[t.parentBackendNodeId]:t.frameIndex===0?void 0:e.frameIndexToIframeNode[t.frameIndex]}var w4=["html","#document","#document-fragment"];function cO({node:t,domGraph:e}){let r=[],n=t,o=aO(t,e);if(!o)return[t.tagName];let i=()=>{if(n=o,o=aO(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++,w4.includes(n.tagName)){i();continue}if(n.tagName==="body")r.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){r.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 r.reverse()}function uO(t,e){let r=t.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?r=r.frameLocator(a):r=r.locator(a)}}if(n.length&&(r=r.locator(n.join(" > "))),"owner"in r)throw new Error("Final locator from mpath is a frame locator");return r}async function dO(t,e){await t.send({method:"DOM.getDocument",params:{depth:0},timeout:tt});let r=await t.send({method:"DOM.requestNode",params:{objectId:e},timeout:tt}),o=(await t.send({method:"DOM.getAttributes",params:{nodeId:r.nodeId},timeout:tt})).attributes,i=Qi(o,ts);if(!i)throw new Error(`Could not find attribute ${ts} for object ${e}`);return i}var _4=["focusable","keyshortcuts","controls","live","relevant","orientation"],I4=["selected","readonly","modal","required","invalid"],P4=["id","name","role","content"],pO=["absolute","fixed","sticky"],M4=["i","label"],O4=["path"],L4=["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","LabelText"],hO=["ariaHiddenElement","ariaHiddenSubtree","hiddenByChildTree","inertElement","inertSubtree","notRendered","notVisible"],fO=["activeAriaModalDialog","activeFullscreenElement","activeModalDialog"],N4=["menulistpopup","statictext","inlinetextbox"],D4=80,mO=100,SO=50,xE=["StaticText","ListMarker","RootWebArea","LineBreak","::before","::after"],k4=["cite"],U4={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"],emphasis:["em"]},F4={name:!0,value:!0,title:!0,alt:!0,placeholder:!0,checked:!0,selected:!0,contenteditable:!0},gO={indentLevel:0},CE=class t{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(r=>{r.name==="keyshortcuts"?this.dataMomenticId=parseInt(r.value.value):this.properties[r.name]=r.value.value}),e.domNode){this.domNode=e.domNode,this.tagName=e.domNode.tagName||void 0;let r=e.domNode.attributes.id;this.name=this.name||e.domNode.attributes.name||(r&&r.length<SO?r:""),this.role=this.role||(e.domNode.attributes.role??""),j4(this.properties,e.domNode,e.importantProperties)}V4(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&&O4.includes(this.domNode.tagName)&&!this.domNode.attributes["aria-label"]||this.ignoredReasons.some(n=>fO.includes(n)))return!1;if(e){if(Object.keys(this.domNode?.attributes??{}).some(o=>vO(o,e)))return!0;let n=this.domNode?.attributes.class?.split(" ");if(n&&n.length>0&&n.some(o=>AO(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&&M4.includes(this.domNode.tagName)||L4.includes(this.role.toLowerCase())||this.domNode?.computedStyles["background-image"]&&this.domNode?.computedStyles["background-image"]!=="none"&&this.children.length===0||this.role.toLowerCase()==="inlinetextbox"&&this.tagName||!this.properties.hidden&&(this.properties.focusable||this.properties.settable)||mn.alwaysInterestingTruthyPropertyNames.some(n=>!!this.properties[n]))return!0;let r=this.properties.class;return typeof r=="string"&&r.split(" ").some(n=>TO(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")||this.children.some(n=>n.isIneligible())?!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"))}isIneligible(){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))}canRedirectFromIneligibleTag(){if(!this.domNode)return!1;let e=this.internalProperties.hasExplicitPointingLabel===!0;return fM({tagName:this.domNode.tagName,width:this.domNode.bounds.width,height:this.domNode.bounds.height})&&e}serialize(e=gO){let r=Object.assign({},gO,e),{indentLevel:n,noChildren:o,noProperties:i,noId:a,noContent:s,condensedMode:c}=r,l=RE(this.properties),u=" ".repeat(n),d=this.role||"",p=this.tagName??"unknown",m=this.name;d==="heading"&&m==="heading"&&(m=""),this.nameSources?.find(v=>!v.superseded&&v.type==="contents")&&this.children.length>0&&(m="");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===m&&(m="")}let f=xE.includes(this.role)||k4.includes(this.tagName||"");if(this.role==="StaticText")return`${u}${m}
4575
4575
  `;let S=`${u}<${p}`;!a&&!f&&(S+=` id="${this.id}"`);let b=s??!1;(l.multiline||l.contenteditable)&&this.children.length>0&&(b=!0),d&&d!=="generic"&&d!==p&&!(U4[d]??[]).includes(p)&&(S+=` role=${JSON.stringify(d)}`),m&&(S+=` name=${JSON.stringify(m)}`),this.content&&!b&&(S+=` content=${JSON.stringify(this.content)}`);let y=this.isIneligible(),T=y&&this.canRedirectFromIneligibleTag();if(this.flagNotActionableNodes&&this.tagName!=="#document"&&y&&!T&&(S+=` ${mn.ineligibleElementAttribute}`),this.shouldSerializeBounds()&&this.domNode?.bounds){let v=this.domNode.bounds,x=Math.round(v.x??0),O=Math.round(v.y??0),L=Math.round((v.x??0)+(v.width??0)),N=Math.round((v.y??0)+(v.height??0));S+=` bounds=[${x} ${O} ${L} ${N}]`}let w=Date.now();if(Object.keys(l).length>0&&!i){if(Date.now()-w>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,x])=>{if(!_4.includes(v)){{if(I4.includes(v)&&(!x||x==="false"))return;if(v==="value"&&b&&(l.type==="text"||this.role==="textbox"))return;if(v==="level"&&`${x}`=="1")return;if(v==="url"&&l.src&&p==="img")return;if(v==="url"&&l.href&&p==="a")return;if(v==="editable"&&x==="plaintext")return;if(v==="type"&&x===p)return;if(c&&!F4[v])return}typeof x=="string"?S+=` ${v}="${Tt(x,mO,!0)}"`:typeof x=="boolean"?x?S+=` ${v}`:S+=` ${v}={false}`:typeof x<"u"&&(S+=` ${v}={${Tt(JSON.stringify(x),mO,!0)}}`)}})}if(p==="::before"||p==="::after"){let v="";for(let x of this.children)v+=x.serialize({...e,indentLevel:n,neighbors:0});return v}let P=e.maxLevel!==void 0&&n/2>=e.maxLevel;if(this.children.length===0||o||P)S+=` />
4576
4576
  `;else{let v="";for(let O of this.children)v+=O.serialize({...e,indentLevel:n+2,neighbors:0});let x=v.trim();x.length<=D4&&!x.includes(`
4577
4577
  `)?S+=`>${x}</${p}>
@@ -4579,11 +4579,11 @@ ${c}`,{errOptions:{cause:t}})}if(i.includes("element is not visible")){let c="Th
4579
4579
  ${v}${u}</${p}>
4580
4580
  `}if(e.neighbors!==void 0&&e.neighbors>0&&this.parent){let v=this.parent.children.findIndex(L=>L.id===this.id),x=v>0?this.parent.children[v-1]?.serialize({...e,neighbors:0}):"",O=v<this.parent.children.length-1?this.parent.children[v+1]?.serialize({...e,neighbors:0}):"";return`${x||""}
4581
4581
  ${S}
4582
- ${O||""}`}return S}shallowClone(){let e=new t({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:RE(this.internalProperties),importantProperties:this.importantProperties,parentFrame:this.parentFrame,flagNotActionableNodes:this.flagNotActionableNodes});return e.tagName=this.tagName,e.dataMomenticId=this.dataMomenticId,e.properties=RE(this.properties),e}},wE=class t{constructor(e,r,n,o,i={}){this.root=e;this.a11yIdNodeMap=r;this.dataMomenticIdMap=n;this.selectorToNodeMap=o;this.nodeIdHasPointingLabelMap=i}serialize(e){return this.root.serialize(e)}pruneUsingSummaries(e){let r=this.root;if(!r)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(r);return new t(s,n,o,i,this.nodeIdHasPointingLabelMap)}pruneUsingRelevantIds(e){let r=this.root;if(!r)throw new Error("Cannot prune a11y tree with no root");function n(i,a=!1){let s=e.has(`${i.id}`)||i.id===r?.id,c=i.shallowClone(),l=i.children,u=!1,d=[];for(let p of l){let m=n(p,s||u);m&&(d.push(m),m.parent=c,u=!0)}if(c.children=d,s||u)return c;if(xE.includes(i.role)&&a)return c}let o=n(r);return new t(o,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap,this.nodeIdHasPointingLabelMap)}pruneToSerializedCharLimit(e){let r=this.root;if(!r)throw new Error("Cannot prune a11y tree with no root");let n=new WeakMap,o=(s,c)=>{if(n.has(s))return n.get(s);let l=s.serialize({indentLevel:c,noChildren:!0});return n.set(s,l),l},i=(s,c,l)=>{let u=s.shallowClone();u.children=[];let d=o(s,c).length;if(l<=d)return{clone:u,used:d};if(s.role==="StaticText"||s.children.length===0)return{clone:u,used:d};let p=d,m=l-p;for(let h of s.children){let g=c+2,f=o(h,g).length;if(m<f)break;let{clone:S,used:b}=i(h,g,m);if(b>m)break;u.children.push(S),S.parent=u,p+=b,m-=b}return{clone:u,used:p}},{clone:a}=i(r,0,Math.max(1e4,e));return new t(a,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap,this.nodeIdHasPointingLabelMap)}};function B4(t){return t.name?.value?`"${t.name.value}"`:t.role?.value&&t.role.value!=="none"&&t.role.value!=="generic"?`"${t.role.value}"`:`"${t.nodeId}"`}function z4(t,e,r,n){return t.bounds.x===null||t.bounds.y===null||t.bounds.height===null||t.bounds.width===null||t.bounds.width===0||t.bounds.height===0?!0:t.bounds.x+t.bounds.width<e.leftBound||t.bounds.x>e.rightBound?(am({logger:r,logKey:n,maxCount:5,intervalMs:3e3},{domNode:t,logKey:n},"Filtering out node since it is not in the viewport horizontally"),!1):t.bounds.y+t.bounds.height<e.upperBound||t.bounds.y>e.lowerBound?(am({logger:r,logKey:n,maxCount:5,intervalMs:3e3},{domNode:t,logKey:n},"Filtering out node since it is not in the viewport vertically"),!1):t.computedStyles.display==="none"?(r.debug({domNode:t},"Filtering out node since it has display none"),!1):!0}async function yO({node:t,parent:e,frameId:r,frameContext:n,axGraph:o,domGraph:i,inputNodeMap:a,explicitLabelTargetDomIds:s,flagNotActionableNodes:c,showZeroOpacityElements:l,filterByViewport:u,viewportDetails:d,useMPaths:p,importantProperties:m,allowedA11yIgnoreReasonsOverride:h,cdpClient:g,logger:f,callId:S}){if(!e&&t.parentId)throw new Error(`Got no parent for accessibility node ${t.nodeId}: ${JSON.stringify(t)}`);let b=($,B={})=>{},y=t.backendDOMNodeId,T=N4.includes(t.role?.value?.toLowerCase()??"");if(!T&&y===void 0)return b("Filtering out node since it doesn't exist in the DOM"),[];let w=y?i.backendIdToNode[y]:void 0;if(!T&&!w)try{let $=await X(g.send({method:"DOM.describeNode",params:{backendNodeId:y}}),{milliseconds:750,fallback:()=>{f.debug("Timeout getting node from CDP while processing a11y tree")}});if($&&$.node.nodeName.toLowerCase()==="slot"&&$.node.distributedNodes?.length)f.debug({parentAXNode:e?.getNodeOnlySerializedForm(),originalAXNodeName:t.name?.value},"Redirecting node to assigned slot");else return b("Filtering out node since it doesn't exist in the DOM",{cdpResult:$?.node.name??$?.node.nodeName}),[]}catch($){return b("Filtering out node since it doesn't exist in the DOM",{err:$}),[]}if(w&&e&&u&&d&&t.backendDOMNodeId&&!z4(w,d,f,S))return w.momenticIgnored=!0,[];if(w&&w.computedStyles.display==="none")return w.momenticIgnored=!0,[];if(w&&w.computedStyles.opacity==="0"&&l!==!0){if(l==="inputs-only"&&w.tagName.toLowerCase()!=="input")return w.momenticIgnored=!0,[];if(l===!1)return w.momenticIgnored=!0,[]}let P=t.name?.value?typeof t.name.value=="string"?t.name.value:`${t.name.value}`:"",v=t.value?.value?typeof t.value.value=="string"?t.value.value:`${t.value.value}`:"",x=new CE({domNode:w,id:parseInt(t.nodeId),role:t.role?.value||"",name:P,nameSources:t.name?.sources,content:v,properties:t.properties,children:[],ignoredReasons:t.ignoredReasons?.filter($=>(h??hO).includes($.name)||fO.includes($.name))??[],pathFromRoot:(e?`${e.pathFromRoot} `:"")+B4(t),backendNodeID:t.backendDOMNodeId,ignoredByCDP:t.ignored,internalProperties:{inCodeMirrorEditor:e?.internalProperties?.inCodeMirrorEditor},importantProperties:m,parentFrame:n.type==="root"?void 0:n,flagNotActionableNodes:c}),O=n,L=a[r],N=r;if(w?.tagName.toLowerCase()==="iframe"&&w.ownedFrameId){let $=n.childFrames.find(ce=>ce.frameId===w.ownedFrameId),B=o[$?.frameId??""]?.root,ae=a[$?.frameId??""];if($&&B&&ae){t.childIds&&t.childIds.length>0&&f.debug("Replacing existing node's children with children from the iframe");let ce=B;t.childIds=ce.childIds,O=$,L=ae,N=$.frameId}}let F=w?.childrenBackendIds?.length??0,W=(t.childIds??[]).filter($=>!!L.get(parseInt($))).length;if(F>W){let $=t.childIds?.map(ae=>L.get(parseInt(ae))).filter(Boolean).map(ae=>ae?.backendDOMNodeId).filter(ae=>ae!==void 0)??[],B=0;for(let ae of w?.childrenBackendIds??[]){if($.includes(ae)){B=(t.childIds?.findIndex(Q=>L.get(parseInt(Q))?.backendDOMNodeId===ae)??0)+1;continue}let ce=i.backendIdToNode[ae];if(!ce||ce?.tagName.toLowerCase()!=="svg")continue;let _e=Math.floor(-1*Math.random()*1e7),be={nodeId:_e.toString(),parentId:t.nodeId,ignored:!1,backendDOMNodeId:ae,frameId:N,role:{type:"string",value:"graphics-symbol"}};L.set(_e,be),t.childIds||(t.childIds=[]),t.childIds.splice(B,0,_e.toString()),B++}}if(t.childIds?.length===1&&w){let $=L.get(parseInt(t.childIds[0])),B=$?.role?.value,ae=w.childrenBackendIds;if($&&B==="StaticText"&&ae.length===1){let ce=i.backendIdToNode[ae[0]];if(ce?.tagName?.toLowerCase()==="span"){let _e=Math.floor(-1*Math.random()*1e7).toString(),be={nodeId:_e,parentId:t.nodeId,ignored:!1,backendDOMNodeId:ce.backendNodeId,frameId:N,childIds:[$.nodeId]};$.parentId=_e,L.set(parseInt(_e),be),t.childIds=[_e]}}}if(w?.tagName.toLowerCase()==="label"){let $=w.attributes.for?.trim();$&&s.add($)}for(let $ of t.childIds??[]){if(!$)continue;let B=L.get(parseInt($));if(!B)continue;let ae=await yO({node:B,parent:x,domGraph:i,explicitLabelTargetDomIds:s,axGraph:o,frameId:N,frameContext:O,inputNodeMap:a,cdpClient:g,logger:f,callId:S,filterByViewport:u,showZeroOpacityElements:l,importantProperties:m,viewportDetails:d,useMPaths:p,flagNotActionableNodes:c});ae.length&&(x.children=x.children.concat(ae))}if(x.role==="StaticText"&&(x.children=[]),x.role==="ListMarker")if(x.children.length!==1||x.children[0].role!=="StaticText")f.debug({childLen:x.children.length,childRoles:x.children.map($=>$.role),childTags:x.children.map($=>$.tagName),currentTag:x.tagName,currentName:x.name},"Unexpected ListMarker structure (processA11yTreeDFS)");else return x.children;if(x.children.length===1&&x.children[0].role==="StaticText"){let $=x.name,ae=x.children[0].name;($===ae||!ae)&&(x.name="")}let H=[];for(let $=x.children.length-1;$>=0;$--){let B=x.children[$];if(B.role!=="StaticText"){H.push(B);continue}if($===0||x.children[$-1].role!=="StaticText"){H.push(B);continue}x.children[$-1].name+=B.name}if(x.children=H.reverse(),!x.isInteresting(m)&&t.parentId)return w&&(w.momenticIgnored=!0),x.children;for(let $ of x.children)$.parent=x;return G4(x),w&&p&&AE(w,i),[x]}function bO({node:t,a11yIdNodeMap:e,dataMomenticIdMap:r,logger:n,callId:o,domGraph:i,useMPaths:a,selectorToNodeMap:s,nodeIdHasPointingLabelMap:c,explicitLabelTargetDomIds:l,iconKnowledgeBase:u,startId:d=1}){t.id=d,d+=1,e[t.id]=t,t.dataMomenticId?r[t.dataMomenticId]=t:xE.includes(t.role);let p=t.backendNodeId,m=p!==void 0?i.backendIdToNode[p]:void 0;a&&m&&m.mPathSelector&&(s[m.mPathSelector]=t,t.mPathSelector=m.mPathSelector);let h=m?.attributes.id?.trim();if(h&&l.has(h)&&(t.internalProperties.hasExplicitPointingLabel=!0,c[t.id]=!0),u&&m&&m.tagName?.toLowerCase()==="svg"){let g=vE(m,i),f=g?u[g.hash]:void 0,S=f?f.description:void 0;f&&(t.properties["data-momentic-description"]=S)}for(let g of t.children)d=bO({node:g,a11yIdNodeMap:e,dataMomenticIdMap:r,logger:n,callId:o,startId:d,useMPaths:a,domGraph:i,selectorToNodeMap:s,nodeIdHasPointingLabelMap:c,explicitLabelTargetDomIds:l,iconKnowledgeBase:u});return d}async function EO({rawA11yGraph:t,domGraph:e,startingFrameId:r,logger:n,cdpClient:o,filterByViewport:i,showZeroOpacityElements:a,flagNotActionableNodes:s,importantProperties:c,viewportDetails:l,useMPaths:u,frameContext:d,iconKnowledgeBase:p,allowedA11yIgnoreReasonsOverride:m}){let h=r??"root",g=t[h]?.root;if(!g)throw new Error("A11y tree has no root");let f=x4(),S=new Set,b=O=>{let L=O.allNodes.filter(F=>!F.ignoredReasons?.find(H=>(m??hO).includes(H.name))),N=new Map;return L.forEach(F=>{N.set(parseInt(F.nodeId),F)}),N},y={};Object.entries(t).forEach(([O,L])=>{y[O]=b(L)});let T=await yO({node:g,domGraph:e,explicitLabelTargetDomIds:S,parent:null,inputNodeMap:y,axGraph:t,frameId:h,frameContext:d,cdpClient:o,logger:n,callId:f,showZeroOpacityElements:a,importantProperties:c,filterByViewport:i,viewportDetails:l,useMPaths:u,flagNotActionableNodes:s,allowedA11yIgnoreReasonsOverride:m});if(T.length>1)throw new Error(`Something went horribly wrong processing the a11y tree, we got: ${JSON.stringify(T)}`);if(T.length===0)throw new Error("There are no accessible elements on this page or frame. Are you sure this website loads properly?");let w={},P={},v={},x={};return bO({node:T[0],a11yIdNodeMap:w,dataMomenticIdMap:P,selectorToNodeMap:v,nodeIdHasPointingLabelMap:x,explicitLabelTargetDomIds:S,domGraph:e,logger:n,callId:f,useMPaths:u,iconKnowledgeBase:p}),new wE(T[0],w,P,v,x)}function H4(t,e,r,n){if(t==="class"){if(r.tagName?.toLowerCase()==="svg")return e.split(" ").filter(a=>a.length<SO&&!mn.bannedClassSubstrings.some(s=>a.includes(s))).slice(0,3).join(" ");let o=e.split(" "),i=[];for(let a of o)if(TO(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=Number(e);if(!Number.isNaN(o))return o}catch{}return t==="src"&&e.includes("base64")?e.slice(0,e.indexOf("base64")+6)+"...":e.length>60?e.slice(0,50)+"...":e}function j4(t,e,r){if(!e)return;Object.entries(e.attributes).forEach(([a,s])=>{let c=t[a]||a.startsWith("aria")||P4.includes(a);if((mn.relevantElementAttributes.includes(a)||vO(a,r))&&!c){let u=H4(a,s,e,r);u!==null&&(t[a]=u)}});let n,o=[];if(e.computedStyles.position&&pO.includes(e.computedStyles.position))n=e.computedStyles.position;else if(e.attributes.style){for(let a of pO)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 r?.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&&(t.style=o.join("; "))}function G4(t){let e=t.properties.class;if(typeof e=="string"&&e.includes("cm-content")){t.children.forEach((i,a)=>{i.properties["cm-line-number"]=`${a+1}`});return}if(typeof e=="string"&&e.includes("notion-page-content")){t.children.forEach((i,a)=>{i.properties["block-number"]=`${a+1}`}),t.children.length>0&&(t.children[t.children.length-1].properties.description="This is the last block in the document. Click here to add new text to the end.");return}if(t.tagName==="table"){let i=[],a=t.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(Tt(u.name,100,!1))}),i?.length!==l.length&&(i=void 0)}}let s=0;for(let c of t.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 m=u.children.filter(h=>h.tagName==="th");if(m.length){if(i=m.map(h=>Tt(h.name,100,!1)),i.length===m.length)continue;i=void 0}}s+=1,u.properties["row-index"]||(u.properties["row-index"]=s);let d=u.children.filter(m=>m.tagName==="td"||m.tagName==="th"),p=d.length===i?.length;d.forEach((m,h)=>{m.tagName!=="th"&&(m.properties["col-index"]||(m.properties["col-index"]=h+1),p&&(m.properties.col||(m.properties.col=i[h])))})}}}function V4(t){let e=t.properties.class,r=typeof e=="string"&&e.includes("cm-content");t.internalProperties.inCodeMirrorEditor=t.internalProperties?.inCodeMirrorEditor||r}function TO(t,e){if(e&&AO(t,e))return!0;if(mn.bannedClassSubstrings.some(r=>t.includes(r)))return!1;if(mn.alwaysInterestingClassNames.includes(t))return!0;for(let r of mn.alwaysInterestingClassPrefixes)if(t.startsWith(r))return!0;return!1}function vO(t,e){if(e?.attributes?.includes(t))return!0;for(let r of e?.attributes??[])if(r.endsWith("*")){let n=r.slice(0,-1);if(t.startsWith(n))return!0}return!1}function AO(t,e){if(e?.classes?.includes(t))return!0;for(let r of e?.classes??[])if(r.endsWith("*")){let n=r.slice(0,-1);if(t.startsWith(n))return!0}return!1}var yg=class t{constructor(e,r,n,o,i){this.session=e;this.logger=r;this.contextGetter=n;this.pageGetter=o;this.defaultTimeoutMs=i}cdpInitializingPromise=void 0;cdpCrashDetails=void 0;cdpFullyDead=!1;loadEventLogs=[];static async init({logger:e,contextGetter:r,pageGetter:n,defaultTimeoutMs:o}){let i=r(),a=n(),s,c;for(let u=0;u<2;u++)try{s=await X(i.newCDPSession(a),{milliseconds:o*u,fallback:()=>{throw new M("UserInfrastructureError",`Failed to initialize Chrome session within the page load timeout (${a.url()})`)}});break}catch(d){await ye(lr),c=d}if(!s)throw c;let l=new t(s,e,r,n,o);try{await X(l.registerHandlers(s),{milliseconds:o,message:`CDP handler registration timed out after ${o}ms`})}catch(u){throw l.cdpFullyDead=!0,new M("UserInfrastructureError",`Failed to initialize CDP client: ${u}`)}return l}async registerHandlers(e){e.on("Target.attachedToTarget",async()=>{try{await e.send("Runtime.runIfWaitingForDebugger")}catch(r){this.logger.warn({err:r},"Failed to run Runtime.runIfWaitingForDebugger")}}),e.on("Target.targetCrashed",r=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},targetCrashDetails:JSON.stringify(r)},this.logger.error({payload:r},"CDP session crashed, Momentic will likely not function correctly")}),e.on("Inspector.targetCrashed",r=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},inspectorCrashDetails:JSON.stringify(r)},this.logger.error({payload:r},"CDP inspector session crashed, Momentic will likely not function correctly")}),e.on("Page.frameRequestedNavigation",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Frame requested navigation: ${JSON.stringify(r)}`)}),e.on("Page.navigatedWithinDocument",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Navigated within document: ${JSON.stringify(r)}`)}),e.on("Page.lifecycleEvent",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page lifecycle event: ${JSON.stringify(r)}`)}),e.on("Page.loadEventFired",()=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page load event fired`)}),await Promise.all([e.send("Accessibility.enable"),e.send("Page.enable"),e.send("DOM.enable"),e.send("Overlay.enable"),e.send("DOMSnapshot.enable"),e.send("CSS.enable")])}async send({method:e,params:r,timeout:n=this.defaultTimeoutMs,timeoutMsg:o}){for(;this.cdpInitializingPromise;)await X(this.cdpInitializingPromise,{milliseconds:n});if(this.cdpCrashDetails){if(this.cdpFullyDead)throw new M("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 X(this.session.send(e,r),{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 r=e,n=this.pageGetter(),o=await X(this.contextGetter().newCDPSession(n),{milliseconds:r,fallback:()=>{throw this.logger.error(`Failed to initialize CDP session within the page load timeout (${n.url()})`),new M("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 r=this.session;this.session=await this.createRawCDPSession(e),await X(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 X(r.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(r){this.cdpCrashDetails={...this.cdpCrashDetails??{},reinitializeError:`${r}`},this.cdpFullyDead=!0}finally{this.cdpInitializingPromise=void 0}})(),await this.cdpInitializingPromise}on(e,r){return this.session.on(e,r),this.session}off(e,r){return this.session.off(e,r),this.session}addListener(e,r){return this.session.addListener(e,r),this.session}removeListener(e,r){return this.session.removeListener(e,r),this.session}};var zl="<empty>";function $4(t){return t.includes("doubleclick.net")||t.includes("googletagmanager.com")||t.includes("googlesyndication.com")||t.includes("s.amazon-adsystem.com")||t.includes("smartadserver.com")||t.includes("omnitagjs.com")||t.includes("x.adroll.com")}function wO(t){let e=t.adFrameStatus?.adFrameType;return e==="child"||e==="root"||$4(t.url)}async function W4(t,e){let r=await t.send({timeout:ie,method:"DOM.getFrameOwner",params:{frameId:e}}),o=(await t.send({timeout:ie,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[r.backendNodeId]}})).nodeIds[0],a=(await t.send({timeout:ie,method:"DOM.describeNode",params:{backendNodeId:r.backendNodeId}})).node;return a.nodeId=o,a}async function Hl({cdpClient:t,page:e,logger:r}){let n={type:"root",childFrames:[],page:e},o=[],[i,a]=await Promise.all([t.send({timeout:Bl,method:"Page.getFrameTree",params:{}}),t.send({timeout:Bl,method:"DOM.getDocument",params:{depth:0}})]),l=(i.frameTree.childFrames??[]).map(async(d,p)=>{if(wO(d.frame))return null;try{return await xO({cdpClient:t,rawFrameTree:d,indices:[p],parent:n,warnings:o,logger:r})}catch(m){return o.push(`Failed to get child frame: ${m}`),null}}),u=await Promise.all(l);return n.childFrames=u.filter(d=>d!==null),o.length&&r?.warn({warnings:o},"Got warnings when fetching frame tree"),n}async function xO({cdpClient:t,rawFrameTree:e,indices:r,parent:n,warnings:o,logger:i}){let a=e.frame.id,s=await W4(t,a),c=s.attributes??[],l=null,u=[];for(let h of["src","name","id","title","srcdoc","sandbox"]){let g=Qi(c,h);g&&(u.push(`${h}=${JSON.stringify(g)}`),h==="src"&&(l=g))}let d={type:"frame",cdpFrame:e.frame,url:e.frame.url,frameId:a,locationData:{indices:r,attributeSelectors:u},src:l,childFrames:[],parent:n,domNode:s},m=(e.childFrames??[]).map(async(h,g)=>{if(wO(h.frame))return null;try{return await xO({cdpClient:t,rawFrameTree:h,indices:[...r,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(m)).filter(h=>h!==null),d}async function q4(t){try{return await t.owner().count()===1}catch{return!1}}async function K4(t){try{return await t.count()===1}catch{return!1}}async function Mo(t,e){let r=[],n=t;for(;n.parent.type==="frame";)r.push(n.parent),n=n.parent;r.reverse();let o=e,i=[];for(let l of r){let u=!1;for(let d of[...l.locationData.attributeSelectors,zl]){let p=o.frameLocator(d===zl?"iframe":`iframe[${d}]`);if(await q4(p)){u=!0,o=p,i.push(d);break}}if(!u)throw new M("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[...t.locationData.attributeSelectors,zl]){let u=o.locator(l===zl?"iframe":`iframe[${l}]`);if(await K4(u)){a=u,i.push(l);break}}if(!a)throw new M("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${t.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let s=await a.evaluateHandle(l=>l,{timeout:Fe}),c=await s.asElement().contentFrame();if(!c)throw new M("InternalWebAgentError",`Failed to load Playwright Frame for iframe with url '${t.url}'`);return await s.dispose(),{frame:c,mPathSelectorTokens:i}}function RO(t,e){let r=[...t],n=[];for(;r.length;){let o=r.shift();e(o)&&n.push(o),r.push(...o.childFrames)}return n}async function _O({page:t,frameTree:e,cache:r}){let n,o=e.childFrames,i=[];if(r.mPathSelectorTokens.length){let s=o;for(let u=0;u<r.mPathSelectorTokens.length-1;u++){let d=r.mPathSelectorTokens[u];d===zl?s=s.length===1?s[0].childFrames:[]:s=s.filter(p=>p.locationData.attributeSelectors.includes(d)).map(p=>p.childFrames).flat()}let c=[],l=r.mPathSelectorTokens[r.mPathSelectorTokens.length-1];if(l===zl?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 ${r.mPathSelectorTokens.join(" > ")}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with mpath ${r.mPathSelectorTokens.join(" > ")}`)}if(r.frameSrcRegex){let s=new RegExp(r.frameSrcRegex),c=RO(o,l=>!!l.src&&s.test(l.src));if(c.length===1)return n=c[0],i.push(`Found unique frame with src regex ${r.frameSrcRegex}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with src regex ${r.frameSrcRegex}`),r.frameSrcRegex=void 0}if(r.frameUrlRegex){let s=new RegExp(r.frameUrlRegex),c=RO(o,l=>!!l.url&&s.test(l.url));if(c.length===1)return n=c[0],i.push(`Found unique frame with url regex ${r.frameUrlRegex}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with url regex ${r.frameUrlRegex}`),r.frameUrlRegex=void 0}let a=o;for(let s=0;s<r.indices.length-1;s++)a=a[r.indices[s]]?.childFrames??[];if(n=a[r.indices[r.indices.length-1]],n)return i.push(`Found unique frame with indices ${r.indices.join(" > ")}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};throw i.push(`Found ${a.length} frames with indices ${r.indices}`),new Tn("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:!1,logs:i}],"could-not-find-iframe")}function bg(t){return t.type==="auto"?JSON.stringify({type:"auto",frameId:t.handle.frameId}):JSON.stringify(t)}function _E(t){for(;t.parent.type==="frame";)t=t.parent;return t.parent}function IO(t){let e=_E(t),r=t.src??"",n=t.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:r,desiredUrl:n}}function PO(t){return t.type==="auto"?{type:"auto",frameId:t.handle.frameId,url:t.handle.url,src:t.handle.src??"",mPathSelectorTokens:t.mPathSelectorTokens.join(" > ")}:{type:"url",url:t.url}}async function MO({frame:t,logger:e,signal:r}){let n;try{n=await t.frameElement(),await Y4({frameElementHandle:n,logger:e,signal:r})}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 Y4({frameElementHandle:t,logger:e,signal:r}){let n=await t.boundingBox(),i=await Fu({promiseGenerator:async()=>t.evaluate(async a=>{let s=a.scrollTop,c=a.getBoundingClientRect(),l=0,u=0,d=window.innerWidth,p=window.innerHeight;if(c.top>=l&&c.left>=u&&c.bottom<=p&&c.right<=d)return{didScroll:!1,reason:"already-fully-visible"};a.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(S=>setTimeout(S,250));let h=Date.now();for(;Date.now()-h<1e3;){let S=a.scrollTop;if(S===s)break;s=S,await new Promise(b=>setTimeout(b,250))}let g=a.getBoundingClientRect();return g.top!==c.top||g.left!==c.left||g.right!==c.right||g.bottom!==c.bottom?{didScroll:!0,reason:"scrolled",afterRect:g}:{didScroll:!1,reason:"no-more-scroll-possible",afterRect:g}}),timeoutMs:tt,codePath:"scrollIframeIntoView",signal:r});i.didScroll&&e.info({oldBb:n,newBb:await t.boundingBox(),evalResult:i},"Successfully scrolled iframe into view")}var IE=()=>{let t,e,r=new Promise((n,o)=>{t=n,e=o});return{resolve:t,reject:e,value:r}};var OO=(t,e)=>{let r=t.name??`batcher:${Math.random().toString(16).slice(2)})`,n=t.scheduler??X4(10),o=globalThis.__BATSHIT_DEVTOOLS__?.for(r),i=e??{seq:0,batch:new Set,currentRequest:IE(),timer:void 0,start:null,latest:null,abortController:new AbortController};o?.create({seq:i.seq});let a=()=>{i.batch=new Set,i.currentRequest=IE(),i.timer=void 0,i.start=null,i.latest=null,i.abortController=new AbortController},s=()=>{let d=i.seq,p=t.fetcher([...i.batch],i.abortController.signal),m=i.currentRequest;return o?.fetch({seq:d,batch:[...i.batch]}),a(),p.then(h=>{o?.data({seq:d,data:h}),m.resolve(h)}).catch(h=>{o?.error({seq:d,error:h}),m.reject(h)}),i.seq++,p};return{fetch:d=>{i.start||(i.start=Date.now()),i.latest=Date.now(),i.batch.add(d),clearTimeout(i.timer);let p=n(i.start,i.latest,i.batch.size);if(o?.queue({seq:i.seq,query:d,batch:[...i.batch],scheduled:p,latest:i.latest,start:i.start}),p==="immediate"){let m=i.currentRequest;return s(),m.value.then(h=>t.resolver(h,d))}else return p==="never"?i.currentRequest.value.then(m=>t.resolver(m,d)):(i.timer=setTimeout(s,p),i.currentRequest.value.then(m=>t.resolver(m,d)))},next:()=>{s()},abort:()=>{i.abortController.abort(),i.currentRequest.reject(new DOMException("Aborted","AbortError")),a()}}};var X4=t=>(e,r)=>{let n=r-e;return t-n};var LO=({windowMs:t,maxBatchSize:e})=>(r,n,o)=>{if(o>=e)return"immediate";let i=n-r;return t-i};import{reduce as J4}from"lodash-es";var Z4=100,Q4=2e3;function NO(t){return OO({fetcher:async r=>{t(J4(r,(n,o)=>({...n,...o}),{}))},resolver:()=>{},scheduler:LO({windowMs:Q4,maxBatchSize:Z4})})}async function DO({event:t,transformer:e,enricher:r,frame:n,lastScreenshotForRecording:o,logger:i}){let{warnings:a,error:s,properties:c}=t.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(h=>h.url());i.debug({frameUrl:l,...t},"Passive click event captured on element");let p,m;if(l)try{let h=await n.frameElement();p=await X(h?.boundingBox(),{milliseconds:ie})??void 0;let g=await r.constructIframeRegex({urls:d,srcs:[],desiredUrl:l});if(g.urlRegex)m={type:"url",url:`/${g.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(g)}`)}catch(h){i.warn({err:h},"Failed to construct iframe details for recorded action, using hardcoded URL only"),m={type:"url",url:l}}(async()=>{try{await e.recordElementAction({...t,screenshotBase64:o,frameConfig:m,frameBoundingBox:p})}catch(h){i.error({err:h},"Failed to transform passive click action")}})()}import{randomUUID as Oo}from"crypto";import e5 from"js-beautify";var t5=["Dead"],Eg=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:e,callbacks:r,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}),r.onStepRecorded(s,c)},onActionReceived:(s,c)=>{this.recordedSteps.set(c,{step:s}),r.onActionReceived?.(s,c)}},this.generator=n}reserveIndexForCommand(e){let r=this.nextStepOffset;return this.recordedSteps.set(r,{step:{id:Oo(),type:"PRESET_ACTION",command:$o(e)}}),this.nextStepOffset++,r}async recordElementAction(e){let{type:r,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,r){case"CLICK":{i="CLICK";let g=$o(i);a={id:Oo(),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=$o(i);a={id:Oo(),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=$o(i);a={id:Oo(),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:Qe(this.logger),boundingBox:l}}}};break}default:throw new Error(`Unknown action type: ${r}`)}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=e5.html(d,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),d=cM(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,...Qe(this.logger)}})).phrase}catch(g){this.logger.error({err:g},"Error generating reverse mapping description"),p=s}let m=this.recordedSteps.get(u)?.step??a,h=m?.command;h&&"target"in h&&h.target?(h.target={type:"description",elementDescriptor:p},this.callbacks.onStepRecorded({...m,command:h},u)):this.logger.warn("Could not find existing command to update after description mapping")}recordKeystroke(e){let{key:r,combinable:n}=e;if(t5.includes(r)||this.signal.aborted)return;let o="normal";r.length>1&&(o="special");let i;if(o==="normal"){let d=$o("TYPE");i={id:Oo(),type:"PRESET_ACTION",command:{...d,target:void 0,value:r,clearContent:!1}}}else{let d=$o("PRESS");i={id:Oo(),type:"PRESET_ACTION",command:{...d,value:r}}}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:Oo(),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:Oo(),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 r=()=>{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=$o(l);u.deltaY=Math.abs(i);let d={id:Oo(),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=$o(l);u.deltaX=Math.abs(i);let d={id:Oo(),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&&r()):(r(),e.deltaX>=20&&n())}};import{z as PE}from"zod";var oVe=PE.object({type:PE.literal("url"),url:PE.string()});var Tg=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userControlledBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position","background-image"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:e,pageLoadTimeoutMs:r,allowPartialAccessibilityTree:n,logger:o,cdpClient:i,pageGetter:a,abortSignalGetter:s,enricher:c,iconKnowledgeBase:l,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=e,this.pageLoadTimeoutMs=r,this.allowPartialAccessibilityTree=n,this.logger=o,this.cdpClient=i,this.pageGetter=a,this.abortSignalGetter=s,this.enricher=c,this.iconKnowledgeBase=l,this.userControlledBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userControlledBrowserSettings.importantStyles)for(let p of this.userControlledBrowserSettings.importantStyles){let m=p.split(":");if(m.length!==2){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}let h=m[0]?.trim(),g=m[1]?.trim();if(h===void 0||g===void 0){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(h)||this.computedStylesToFetch.push(h)}}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.userControlledBrowserSettings.autoExpandIframes)return;let r={...e,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,r),r}async getAutoFrameDetailsFromHandle(e){let r=this.pageGetter(),n=_E(e),{frame:o,mPathSelectorTokens:i}=await Mo(e,r),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 r=this.pageGetter(),n=await Hl({cdpClient:this.cdpClient,page:r,logger:this.logger}),{resolution:o,logs:i}=await _O({page:r,frameTree:n,cache:e});return this.logger.info({logs:i},"Resolved auto frame cache"),{...o,cache:e}}async resolveActiveFrameConfig({logger:e=this.logger,signal:r=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(bg(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:r}):n={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:bg(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await MO({frame:n.frame,logger:e,signal:r}),this.activeFrameCache=n,n}async executeFunctionInAllFrames(e,r){let n=this.pageGetter(),o=await Hl({cdpClient:this.cdpClient,page:n,logger:this.logger}),i=[X(n.evaluate(e,r),{milliseconds:tt})],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(Mo(c,n).then(({frame:u})=>X(u.evaluate(e,r),{milliseconds:tt})).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(),r=await Hl({cdpClient:this.cdpClient,page:e,logger:this.logger}),n=Array.from(r.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:r,logger:n}){return this.getDOMTree({devicePixelRatio:e??1,signal:r,logger:n??this.logger})}async getA11yTree(e){let r={},n=e.logger??this.logger,o=e.abortSignal??this.abortSignalGetter(),i=this.pageGetter();if(!e.skipPageLoad)try{await i.waitForLoadState("load",{timeout:this.pageLoadTimeoutMs})}catch(p){n.warn({err:p},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),await this.cdpClient.reinitialize()}let a,s,c=null;if(this.frameConfig?.type==="url"){if(a=await Un({fn:()=>this.resolveActiveFrameConfig({logger:n,signal:o}),codePath:"getActiveFrameDetails",logObject:r,signal:o,logger:n})??void 0,!a)throw new M("ActionFailureError","Got null frame details despite active frame config");s=a.handle,c=s.frameId}else this.userControlledBrowserSettings.autoExpandIframes?(s=await Un({fn:()=>Hl({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),codePath:"getMomenticFrameTree",logObject:r,signal:o,logger:n}),c=null):(s={type:"root",page:i,childFrames:[]},c=null);await Un({fn:async()=>this.addMomenticIds({rootPage:i,childFrames:s.childFrames,frameFilter:a?.frame,logger:n}),codePath:"addIdsToElement",logObject:r,signal:o,logger:n});let l=await Un({fn:()=>this.getDOMTree({devicePixelRatio:e.devicePixelRatio??1,signal:o,logger:n}),codePath:"domFetch",logObject:r,signal:o,logger:n}),u=await Un({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:c,childFrames:s.childFrames,logTimings:r,logger:n,signal:o}),codePath:"totalA11yFetch",logObject:r,signal:o,logger:n}),{tree:d}=await Un({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:r,signal:o,logger:n});return Object.values(r).some(p=>p>750)&&n.warn({logTimings:r},"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,r){if(await this.getA11yTree({devicePixelRatio:e,abortSignal:r,logger:Eo,filterByViewport:!1,flagNotActionableNodes:!1,skipPageLoad:!0}),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:r,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.userControlledBrowserSettings.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=cO({node:o,domGraph:this.domGraph});return uO(e,i)}else return n.domNode||this.logger.warn({a11yRole:n.role,content:n.content},"Attempting to get locator from a11y node with no DOM node"),this.getLocatorFromBackendId(r,n.backendNodeId)}async getLocatorFromBackendId(e,r){let n=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:r},timeout:tt});if(!n||!n.object.objectId)throw new Error(`Could not resolve backend node ${r}`);let o;try{o=await dO(this.cdpClient,n.object.objectId)}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(n.object)},"Failed to get ID attribute for target"),i}return e.locator(li(o))}getNodeUsingMPathSelector(e){let r=this.selectorToNodeMap[e];if(r)return r;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:r=this.abortSignalGetter(),logger:n=this.logger}){let o=Date.now(),i,a,s,c=0;for(;Date.now()-o<this.smartWaitingTimeoutMs;)try{i=await Hl({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 M&&l.reason==="UserInfrastructureError")throw l;c%3===0&&this.logger.warn({attempt:c,err:l},"Failed to resolve active frame, retrying..."),await ye(lr,r)}finally{c++}if(a)return{source:"url",frame:a.frame,handle:a.handle,frameIdentifierStringified:bg(e),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw s}async getMatchingFrameByUrlWithCdp(e,r){let n=r.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=Qi(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 Mo(s,o)});break}}else if(n.trim()===d.trim()){a.push({handle:s,matchType:"url",...await Mo(s,o)});break}}}if(a.length===1){let s=a[0];return this.userControlledBrowserSettings.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 M("ActionFailureError",`Failed to find frame with src matching: ${n}`)}async composeA11yDomGraph({opts:e,a11yGraph:r,domGraph:n,startingFrameId:o,frameContext:i,logger:a,iconKnowledgeBase:s,showZeroOpacityElements:c,flagNotActionableNodes:l}){let u=await EO({rawA11yGraph:r,startingFrameId:o,frameContext:i,domGraph:n,logger:a,cdpClient:this.cdpClient,showZeroOpacityElements:c,flagNotActionableNodes:l,filterByViewport:e.filterByViewport,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles},viewportDetails:void 0,iconKnowledgeBase:s,useMPaths:this.userControlledBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride});if(!u||!u.root)throw new Error("Accessibility tree appears empty");return{tree:u}}async addMomenticIds({rootPage:e,childFrames:r,frameFilter:n,logger:o}){if(this.userControlledBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(n??e,1);if(!this.userControlledBrowserSettings.autoExpandIframes||n)return;let a=Array.from(r),s=[];for(;a.length>0;){let c=a.shift();a.push(...c.childFrames);let l=async()=>{try{let{frame:u}=await Mo(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,r){if(this.userControlledBrowserSettings.visualActions)return r;let n=this.logger;return await Yt({root:e,fn:i=>window.addIdsToElement?.(document.body,i),arg:r,timeout:tt,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"})??r}getPageDomain(e){try{let r=new URL(e);if(!r.hostname)return null;let n=r.hostname.split("."),o=n.length>2?n.slice(-2).join("."):r.hostname;return`${r.protocol}//${o}`}catch{return null}}async decideChildFrameUnrollEligibility({logger:e,warnings:r,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 r?.push(i),e?.warn({err:o},i),{shouldUnroll:!0}}}async decideChildFrameUnrollEligibilityHelper({domNode:e}){let r=e.attributes??[];if(Qi(r,"aria-hidden")==="true")return{shouldUnroll:!1,reason:"aria-hidden"};let n=Qi(r,"style");if(n?.includes("display: none")||n?.includes("visibility: hidden"))return{shouldUnroll:!1,reason:"hidden CSS style"};await this.cdpClient.send({timeout:ie,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[e.backendNodeId]}});let[o,i]=await Promise.all([this.cdpClient.send({timeout:ie,method:"DOM.getBoxModel",params:{backendNodeId:e.backendNodeId}}),this.cdpClient.send({timeout:ie,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:r,childFrames:n,logTimings:o,logger:i=this.logger,signal:a=this.abortSignalGetter()}){let s=[],c,l;for(let m=0;m<3;m++)try{l=await Un({fn:()=>this.getRawA11yTreeForFrame({frameId:r,timeoutMs:this.pageLoadTimeoutMs,logTimings:o}),codePath:"a11y-tree-fetch-root",logObject:o,logger:i});break}catch(h){c=h,i.warn({err:h},"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[r??"root"]=l,!this.userControlledBrowserSettings.autoExpandIframes)return u;let d=Array.from(n),p=[];for(;d.length>0;){let m=d.shift();try{let{shouldUnroll:g}=await this.decideChildFrameUnrollEligibility({handle:m,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 ${m.frameId} with url ${m.url}, allowing it to be fetched: ${g}`)}d.push(...m.childFrames);let h=async()=>{try{let g=await Un({fn:()=>this.getRawA11yTreeForFrame({frameId:m.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:o}),codePath:`a11y-tree-fetch-child-${m.frameId}`,logObject:o,logger:i});u[m.frameId]=g}catch(g){i.warn({err:g,url:m.url,src:m.src},`Error getting raw a11y tree for child frame ${m.frameId}, continuing...`)}};p.push(h())}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:r,logTimings:n}){let o;if(this.allowPartialAccessibilityTree)o=(await Un({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:e??void 0},timeout:r,timeoutMsg:`Fetching the document tree took over ${r}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 Un({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:e??void 0},timeout:tt}),codePath:"cdp-get-root-ax-node",logObject:n,logger:this.logger})).node.backendDOMNodeId;o=(await Un({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:a},timeout:r,timeoutMsg:`Fetching the document tree took over ${r}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:r,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:ie}),!o||!o.documents.length)throw new Error("Got empty DOM tree")}catch(s){await ye(lr,r),i++,a=s}if(!o||!o.documents.length)throw n.error({err:a},"Fatal error fetching DOM tree"),new M("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 lO({snapshot:o,devicePixelRatio:e,computedStylesToFetch:this.computedStylesToFetch,logger:n})}constructIframeRegexAsync(e,r){if(r.frameSrcRegex||r.frameUrlRegex)return;let n=IO(e);(async()=>{try{let o=await this.enricher?.constructIframeRegex(n);o?.srcRegex&&(r.frameSrcRegex=o.srcRegex),o?.urlRegex&&(r.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...")}})()}};var Fn=class t{static USER_AGENT=pg;abortSignal=void 0;contextInitialized=!1;cleanedUp=!1;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;pageLoadAbortControllers=new Set;pageLoadAbortListenerCleanup;clientCallbacks;harBatcher;iconKnowledgeBase;cdpClient;debugData={logsPerPage:[]};recentFrameNavigations={};requestRecorders={};mocks={};customHeaders=[];enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;originsVisited=new Set;viewport;onVideoPageChange;baseUrl;constructor({storage:e,enricher:r,browser:n,context:o,page:i,baseUrl:a,logger:s,userBrowserSettings:c,viewport:l,properties:u,clientCallbacks:d,iconKnowledgeBase:p,onVideoPageChange:m}){qx(c),this.storage=e,this.enricher=r,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,this.iconKnowledgeBase=p,this.onVideoPageChange=m}registerAbortSignal(e){if(this.pageLoadAbortListenerCleanup&&(this.pageLoadAbortListenerCleanup(),this.pageLoadAbortListenerCleanup=void 0),this.abortSignal=e,!this.abortSignal)return;let r=()=>{for(let n of this.pageLoadAbortControllers)n.abort();this.pageLoadAbortControllers.clear()};if(this.abortSignal.aborted){r();return}this.abortSignal.addEventListener("abort",r),this.pageLoadAbortListenerCleanup=()=>{this.abortSignal?.removeEventListener("abort",r)}}async initialize({grantPermissions:e,permissionsToGrant:r,runInitScripts:n,timingRecorder:o}){if(this.contextInitialized)return;let i={[lM]:this.userBrowserSettings.visualActions},a=[];this.userControlledBrowserSettings.extraHeaders&&a.push(this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders)),e&&a.push(this.context.grantPermissions(GM(r))),a.push(this.context.addInitScript({content:`${$b.htmlUtilsLibJs}
4582
+ ${O||""}`}return S}shallowClone(){let e=new t({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:RE(this.internalProperties),importantProperties:this.importantProperties,parentFrame:this.parentFrame,flagNotActionableNodes:this.flagNotActionableNodes});return e.tagName=this.tagName,e.dataMomenticId=this.dataMomenticId,e.properties=RE(this.properties),e}},wE=class t{constructor(e,r,n,o,i={}){this.root=e;this.a11yIdNodeMap=r;this.dataMomenticIdMap=n;this.selectorToNodeMap=o;this.nodeIdHasPointingLabelMap=i}serialize(e){return this.root.serialize(e)}pruneUsingSummaries(e){let r=this.root;if(!r)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(r);return new t(s,n,o,i,this.nodeIdHasPointingLabelMap)}pruneUsingRelevantIds(e){let r=this.root;if(!r)throw new Error("Cannot prune a11y tree with no root");function n(i,a=!1){let s=e.has(`${i.id}`)||i.id===r?.id,c=i.shallowClone(),l=i.children,u=!1,d=[];for(let p of l){let m=n(p,s||u);m&&(d.push(m),m.parent=c,u=!0)}if(c.children=d,s||u)return c;if(xE.includes(i.role)&&a)return c}let o=n(r);return new t(o,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap,this.nodeIdHasPointingLabelMap)}pruneToSerializedCharLimit(e){let r=this.root;if(!r)throw new Error("Cannot prune a11y tree with no root");let n=new WeakMap,o=(s,c)=>{if(n.has(s))return n.get(s);let l=s.serialize({indentLevel:c,noChildren:!0});return n.set(s,l),l},i=(s,c,l)=>{let u=s.shallowClone();u.children=[];let d=o(s,c).length;if(l<=d)return{clone:u,used:d};if(s.role==="StaticText"||s.children.length===0)return{clone:u,used:d};let p=d,m=l-p;for(let h of s.children){let g=c+2,f=o(h,g).length;if(m<f)break;let{clone:S,used:b}=i(h,g,m);if(b>m)break;u.children.push(S),S.parent=u,p+=b,m-=b}return{clone:u,used:p}},{clone:a}=i(r,0,Math.max(1e4,e));return new t(a,this.a11yIdNodeMap,this.dataMomenticIdMap,this.selectorToNodeMap,this.nodeIdHasPointingLabelMap)}};function B4(t){return t.name?.value?`"${t.name.value}"`:t.role?.value&&t.role.value!=="none"&&t.role.value!=="generic"?`"${t.role.value}"`:`"${t.nodeId}"`}function z4(t,e,r,n){return t.bounds.x===null||t.bounds.y===null||t.bounds.height===null||t.bounds.width===null||t.bounds.width===0||t.bounds.height===0?!0:t.bounds.x+t.bounds.width<e.leftBound||t.bounds.x>e.rightBound?(am({logger:r,logKey:n,maxCount:5,intervalMs:3e3},{domNode:t,logKey:n},"Filtering out node since it is not in the viewport horizontally"),!1):t.bounds.y+t.bounds.height<e.upperBound||t.bounds.y>e.lowerBound?(am({logger:r,logKey:n,maxCount:5,intervalMs:3e3},{domNode:t,logKey:n},"Filtering out node since it is not in the viewport vertically"),!1):t.computedStyles.display==="none"?(r.debug({domNode:t},"Filtering out node since it has display none"),!1):!0}async function yO({node:t,parent:e,frameId:r,frameContext:n,axGraph:o,domGraph:i,inputNodeMap:a,explicitLabelTargetDomIds:s,flagNotActionableNodes:c,showZeroOpacityElements:l,filterByViewport:u,viewportDetails:d,useMPaths:p,importantProperties:m,allowedA11yIgnoreReasonsOverride:h,cdpClient:g,logger:f,callId:S}){if(!e&&t.parentId)throw new Error(`Got no parent for accessibility node ${t.nodeId}: ${JSON.stringify(t)}`);let b=($,B={})=>{},y=t.backendDOMNodeId,T=N4.includes(t.role?.value?.toLowerCase()??"");if(!T&&y===void 0)return b("Filtering out node since it doesn't exist in the DOM"),[];let w=y?i.backendIdToNode[y]:void 0;if(!T&&!w)try{let $=await X(g.send({method:"DOM.describeNode",params:{backendNodeId:y}}),{milliseconds:750,fallback:()=>{f.debug("Timeout getting node from CDP while processing a11y tree")}});if($&&$.node.nodeName.toLowerCase()==="slot"&&$.node.distributedNodes?.length)f.debug({parentAXNode:e?.getNodeOnlySerializedForm(),originalAXNodeName:t.name?.value},"Redirecting node to assigned slot");else return b("Filtering out node since it doesn't exist in the DOM",{cdpResult:$?.node.name??$?.node.nodeName}),[]}catch($){return b("Filtering out node since it doesn't exist in the DOM",{err:$}),[]}if(w&&e&&u&&d&&t.backendDOMNodeId&&!z4(w,d,f,S))return w.momenticIgnored=!0,[];if(w&&w.computedStyles.display==="none")return w.momenticIgnored=!0,[];if(w&&w.computedStyles.opacity==="0"&&l!==!0){if(l==="inputs-only"&&w.tagName.toLowerCase()!=="input")return w.momenticIgnored=!0,[];if(l===!1)return w.momenticIgnored=!0,[]}let P=t.name?.value?typeof t.name.value=="string"?t.name.value:`${t.name.value}`:"",v=t.value?.value?typeof t.value.value=="string"?t.value.value:`${t.value.value}`:"",x=new CE({domNode:w,id:parseInt(t.nodeId),role:t.role?.value||"",name:P,nameSources:t.name?.sources,content:v,properties:t.properties,children:[],ignoredReasons:t.ignoredReasons?.filter($=>(h??hO).includes($.name)||fO.includes($.name))??[],pathFromRoot:(e?`${e.pathFromRoot} `:"")+B4(t),backendNodeID:t.backendDOMNodeId,ignoredByCDP:t.ignored,internalProperties:{inCodeMirrorEditor:e?.internalProperties?.inCodeMirrorEditor},importantProperties:m,parentFrame:n.type==="root"?void 0:n,flagNotActionableNodes:c}),O=n,L=a[r],N=r;if(w?.tagName.toLowerCase()==="iframe"&&w.ownedFrameId){let $=n.childFrames.find(ce=>ce.frameId===w.ownedFrameId),B=o[$?.frameId??""]?.root,ae=a[$?.frameId??""];if($&&B&&ae){t.childIds&&t.childIds.length>0&&f.debug("Replacing existing node's children with children from the iframe");let ce=B;t.childIds=ce.childIds,O=$,L=ae,N=$.frameId}}let F=w?.childrenBackendIds?.length??0,W=(t.childIds??[]).filter($=>!!L.get(parseInt($))).length;if(F>W){let $=t.childIds?.map(ae=>L.get(parseInt(ae))).filter(Boolean).map(ae=>ae?.backendDOMNodeId).filter(ae=>ae!==void 0)??[],B=0;for(let ae of w?.childrenBackendIds??[]){if($.includes(ae)){B=(t.childIds?.findIndex(Q=>L.get(parseInt(Q))?.backendDOMNodeId===ae)??0)+1;continue}let ce=i.backendIdToNode[ae];if(!ce||ce?.tagName.toLowerCase()!=="svg")continue;let _e=Math.floor(-1*Math.random()*1e7),be={nodeId:_e.toString(),parentId:t.nodeId,ignored:!1,backendDOMNodeId:ae,frameId:N,role:{type:"string",value:"graphics-symbol"}};L.set(_e,be),t.childIds||(t.childIds=[]),t.childIds.splice(B,0,_e.toString()),B++}}if(t.childIds?.length===1&&w){let $=L.get(parseInt(t.childIds[0])),B=$?.role?.value,ae=w.childrenBackendIds;if($&&B==="StaticText"&&ae.length===1){let ce=i.backendIdToNode[ae[0]];if(ce?.tagName?.toLowerCase()==="span"){let _e=Math.floor(-1*Math.random()*1e7).toString(),be={nodeId:_e,parentId:t.nodeId,ignored:!1,backendDOMNodeId:ce.backendNodeId,frameId:N,childIds:[$.nodeId]};$.parentId=_e,L.set(parseInt(_e),be),t.childIds=[_e]}}}if(w?.tagName.toLowerCase()==="label"){let $=w.attributes.for?.trim();$&&s.add($)}for(let $ of t.childIds??[]){if(!$)continue;let B=L.get(parseInt($));if(!B)continue;let ae=await yO({node:B,parent:x,domGraph:i,explicitLabelTargetDomIds:s,axGraph:o,frameId:N,frameContext:O,inputNodeMap:a,cdpClient:g,logger:f,callId:S,filterByViewport:u,showZeroOpacityElements:l,importantProperties:m,viewportDetails:d,useMPaths:p,flagNotActionableNodes:c});ae.length&&(x.children=x.children.concat(ae))}if(x.role==="StaticText"&&(x.children=[]),x.role==="ListMarker")if(x.children.length!==1||x.children[0].role!=="StaticText")f.debug({childLen:x.children.length,childRoles:x.children.map($=>$.role),childTags:x.children.map($=>$.tagName),currentTag:x.tagName,currentName:x.name},"Unexpected ListMarker structure (processA11yTreeDFS)");else return x.children;if(x.children.length===1&&x.children[0].role==="StaticText"){let $=x.name,ae=x.children[0].name;($===ae||!ae)&&(x.name="")}let H=[];for(let $=x.children.length-1;$>=0;$--){let B=x.children[$];if(B.role!=="StaticText"){H.push(B);continue}if($===0||x.children[$-1].role!=="StaticText"){H.push(B);continue}x.children[$-1].name+=B.name}if(x.children=H.reverse(),!x.isInteresting(m)&&t.parentId)return w&&(w.momenticIgnored=!0),x.children;for(let $ of x.children)$.parent=x;return G4(x),w&&p&&AE(w,i),[x]}function bO({node:t,a11yIdNodeMap:e,dataMomenticIdMap:r,logger:n,callId:o,domGraph:i,useMPaths:a,selectorToNodeMap:s,nodeIdHasPointingLabelMap:c,explicitLabelTargetDomIds:l,iconKnowledgeBase:u,startId:d=1}){t.id=d,d+=1,e[t.id]=t,t.dataMomenticId?r[t.dataMomenticId]=t:xE.includes(t.role);let p=t.backendNodeId,m=p!==void 0?i.backendIdToNode[p]:void 0;a&&m&&m.mPathSelector&&(s[m.mPathSelector]=t,t.mPathSelector=m.mPathSelector);let h=m?.attributes.id?.trim();if(h&&l.has(h)&&(t.internalProperties.hasExplicitPointingLabel=!0,c[t.id]=!0),u&&m&&m.tagName?.toLowerCase()==="svg"){let g=vE(m,i),f=g?u[g.hash]:void 0,S=f?f.description:void 0;f&&(t.properties["data-momentic-description"]=S)}for(let g of t.children)d=bO({node:g,a11yIdNodeMap:e,dataMomenticIdMap:r,logger:n,callId:o,startId:d,useMPaths:a,domGraph:i,selectorToNodeMap:s,nodeIdHasPointingLabelMap:c,explicitLabelTargetDomIds:l,iconKnowledgeBase:u});return d}async function EO({rawA11yGraph:t,domGraph:e,startingFrameId:r,logger:n,cdpClient:o,filterByViewport:i,showZeroOpacityElements:a,flagNotActionableNodes:s,importantProperties:c,viewportDetails:l,useMPaths:u,frameContext:d,iconKnowledgeBase:p,allowedA11yIgnoreReasonsOverride:m}){let h=r??"root",g=t[h]?.root;if(!g)throw new Error("A11y tree has no root");let f=x4(),S=new Set,b=O=>{let L=O.allNodes.filter(F=>!F.ignoredReasons?.find(H=>(m??hO).includes(H.name))),N=new Map;return L.forEach(F=>{N.set(parseInt(F.nodeId),F)}),N},y={};Object.entries(t).forEach(([O,L])=>{y[O]=b(L)});let T=await yO({node:g,domGraph:e,explicitLabelTargetDomIds:S,parent:null,inputNodeMap:y,axGraph:t,frameId:h,frameContext:d,cdpClient:o,logger:n,callId:f,showZeroOpacityElements:a,importantProperties:c,filterByViewport:i,viewportDetails:l,useMPaths:u,flagNotActionableNodes:s,allowedA11yIgnoreReasonsOverride:m});if(T.length>1)throw new Error(`Something went horribly wrong processing the a11y tree, we got: ${JSON.stringify(T)}`);if(T.length===0)throw new Error("There are no accessible elements on this page or frame. Are you sure this website loads properly?");let w={},P={},v={},x={};return bO({node:T[0],a11yIdNodeMap:w,dataMomenticIdMap:P,selectorToNodeMap:v,nodeIdHasPointingLabelMap:x,explicitLabelTargetDomIds:S,domGraph:e,logger:n,callId:f,useMPaths:u,iconKnowledgeBase:p}),new wE(T[0],w,P,v,x)}function H4(t,e,r,n){if(t==="class"){if(r.tagName?.toLowerCase()==="svg")return e.split(" ").filter(a=>a.length<SO&&!mn.bannedClassSubstrings.some(s=>a.includes(s))).slice(0,3).join(" ");let o=e.split(" "),i=[];for(let a of o)if(TO(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=Number(e);if(!Number.isNaN(o))return o}catch{}return t==="src"&&e.includes("base64")?e.slice(0,e.indexOf("base64")+6)+"...":e.length>60?e.slice(0,50)+"...":e}function j4(t,e,r){if(!e)return;Object.entries(e.attributes).forEach(([a,s])=>{let c=t[a]||a.startsWith("aria")||P4.includes(a);if((mn.relevantElementAttributes.includes(a)||vO(a,r))&&!c){let u=H4(a,s,e,r);u!==null&&(t[a]=u)}});let n,o=[];if(e.computedStyles.position&&pO.includes(e.computedStyles.position))n=e.computedStyles.position;else if(e.attributes.style){for(let a of pO)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 r?.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&&(t.style=o.join("; "))}function G4(t){let e=t.properties.class;if(typeof e=="string"&&e.includes("cm-content")){t.children.forEach((i,a)=>{i.properties["cm-line-number"]=`${a+1}`});return}if(typeof e=="string"&&e.includes("notion-page-content")){t.children.forEach((i,a)=>{i.properties["block-number"]=`${a+1}`}),t.children.length>0&&(t.children[t.children.length-1].properties.description="This is the last block in the document. Click here to add new text to the end.");return}if(t.tagName==="table"){let i=[],a=t.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(Tt(u.name,100,!1))}),i?.length!==l.length&&(i=void 0)}}let s=0;for(let c of t.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 m=u.children.filter(h=>h.tagName==="th");if(m.length){if(i=m.map(h=>Tt(h.name,100,!1)),i.length===m.length)continue;i=void 0}}s+=1,u.properties["row-index"]||(u.properties["row-index"]=s);let d=u.children.filter(m=>m.tagName==="td"||m.tagName==="th"),p=d.length===i?.length;d.forEach((m,h)=>{m.tagName!=="th"&&(m.properties["col-index"]||(m.properties["col-index"]=h+1),p&&(m.properties.col||(m.properties.col=i[h])))})}}}function V4(t){let e=t.properties.class,r=typeof e=="string"&&e.includes("cm-content");t.internalProperties.inCodeMirrorEditor=t.internalProperties?.inCodeMirrorEditor||r}function TO(t,e){if(e&&AO(t,e))return!0;if(mn.bannedClassSubstrings.some(r=>t.includes(r)))return!1;if(mn.alwaysInterestingClassNames.includes(t))return!0;for(let r of mn.alwaysInterestingClassPrefixes)if(t.startsWith(r))return!0;return!1}function vO(t,e){if(e?.attributes?.includes(t))return!0;for(let r of e?.attributes??[])if(r.endsWith("*")){let n=r.slice(0,-1);if(t.startsWith(n))return!0}return!1}function AO(t,e){if(e?.classes?.includes(t))return!0;for(let r of e?.classes??[])if(r.endsWith("*")){let n=r.slice(0,-1);if(t.startsWith(n))return!0}return!1}var yg=class t{constructor(e,r,n,o,i){this.session=e;this.logger=r;this.contextGetter=n;this.pageGetter=o;this.defaultTimeoutMs=i}cdpInitializingPromise=void 0;cdpCrashDetails=void 0;cdpFullyDead=!1;loadEventLogs=[];static async init({logger:e,contextGetter:r,pageGetter:n,defaultTimeoutMs:o}){let i=r(),a=n(),s,c;for(let u=0;u<2;u++)try{s=await X(i.newCDPSession(a),{milliseconds:o*u,fallback:()=>{throw new M("UserInfrastructureError",`Failed to initialize Chrome session within the page load timeout (${a.url()})`)}});break}catch(d){await ye(lr),c=d}if(!s)throw c;let l=new t(s,e,r,n,o);try{await X(l.registerHandlers(s),{milliseconds:o,message:`CDP handler registration timed out after ${o}ms`})}catch(u){throw l.cdpFullyDead=!0,new M("UserInfrastructureError",`Failed to initialize CDP client: ${u}`)}return l}async registerHandlers(e){e.on("Target.attachedToTarget",async()=>{try{await e.send("Runtime.runIfWaitingForDebugger")}catch(r){this.logger.warn({err:r},"Failed to run Runtime.runIfWaitingForDebugger")}}),e.on("Target.targetCrashed",r=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},targetCrashDetails:JSON.stringify(r)},this.logger.error({payload:r},"CDP session crashed, Momentic will likely not function correctly")}),e.on("Inspector.targetCrashed",r=>{this.cdpCrashDetails={...this.cdpCrashDetails??{},inspectorCrashDetails:JSON.stringify(r)},this.logger.error({payload:r},"CDP inspector session crashed, Momentic will likely not function correctly")}),e.on("Page.frameRequestedNavigation",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Frame requested navigation: ${JSON.stringify(r)}`)}),e.on("Page.navigatedWithinDocument",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Navigated within document: ${JSON.stringify(r)}`)}),e.on("Page.lifecycleEvent",r=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page lifecycle event: ${JSON.stringify(r)}`)}),e.on("Page.loadEventFired",()=>{this.loadEventLogs.push(`[${new Date(Date.now()).toLocaleString("en-US",{timeZone:"America/Los_Angeles"})}] Page load event fired`)}),await Promise.all([e.send("Accessibility.enable"),e.send("Page.enable"),e.send("DOM.enable"),e.send("Overlay.enable"),e.send("DOMSnapshot.enable"),e.send("CSS.enable")])}async send({method:e,params:r,timeout:n=this.defaultTimeoutMs,timeoutMsg:o}){for(;this.cdpInitializingPromise;)await X(this.cdpInitializingPromise,{milliseconds:n});if(this.cdpCrashDetails){if(this.cdpFullyDead)throw new M("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 X(this.session.send(e,r),{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 r=e,n=this.pageGetter(),o=await X(this.contextGetter().newCDPSession(n),{milliseconds:r,fallback:()=>{throw this.logger.error(`Failed to initialize CDP session within the page load timeout (${n.url()})`),new M("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 r=this.session;this.session=await this.createRawCDPSession(e),await X(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 X(r.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(r){this.cdpCrashDetails={...this.cdpCrashDetails??{},reinitializeError:`${r}`},this.cdpFullyDead=!0}finally{this.cdpInitializingPromise=void 0}})(),await this.cdpInitializingPromise}on(e,r){return this.session.on(e,r),this.session}off(e,r){return this.session.off(e,r),this.session}addListener(e,r){return this.session.addListener(e,r),this.session}removeListener(e,r){return this.session.removeListener(e,r),this.session}};var zl="<empty>";function $4(t){return t.includes("doubleclick.net")||t.includes("googletagmanager.com")||t.includes("googlesyndication.com")||t.includes("s.amazon-adsystem.com")||t.includes("smartadserver.com")||t.includes("omnitagjs.com")||t.includes("x.adroll.com")}function wO(t){let e=t.adFrameStatus?.adFrameType;return e==="child"||e==="root"||$4(t.url)}async function W4(t,e){let r=await t.send({timeout:ie,method:"DOM.getFrameOwner",params:{frameId:e}}),o=(await t.send({timeout:ie,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[r.backendNodeId]}})).nodeIds[0],a=(await t.send({timeout:ie,method:"DOM.describeNode",params:{backendNodeId:r.backendNodeId}})).node;return a.nodeId=o,a}async function Hl({cdpClient:t,page:e,logger:r}){let n={type:"root",childFrames:[],page:e},o=[],[i,a]=await Promise.all([t.send({timeout:Bl,method:"Page.getFrameTree",params:{}}),t.send({timeout:Bl,method:"DOM.getDocument",params:{depth:0}})]),l=(i.frameTree.childFrames??[]).map(async(d,p)=>{if(wO(d.frame))return null;try{return await xO({cdpClient:t,rawFrameTree:d,indices:[p],parent:n,warnings:o,logger:r})}catch(m){return o.push(`Failed to get child frame: ${m}`),null}}),u=await Promise.all(l);return n.childFrames=u.filter(d=>d!==null),o.length&&r?.warn({warnings:o},"Got warnings when fetching frame tree"),n}async function xO({cdpClient:t,rawFrameTree:e,indices:r,parent:n,warnings:o,logger:i}){let a=e.frame.id,s=await W4(t,a),c=s.attributes??[],l=null,u=[];for(let h of["src","name","id","title","srcdoc","sandbox"]){let g=Qi(c,h);g&&(u.push(`${h}=${JSON.stringify(g)}`),h==="src"&&(l=g))}let d={type:"frame",cdpFrame:e.frame,url:e.frame.url,frameId:a,locationData:{indices:r,attributeSelectors:u},src:l,childFrames:[],parent:n,domNode:s},m=(e.childFrames??[]).map(async(h,g)=>{if(wO(h.frame))return null;try{return await xO({cdpClient:t,rawFrameTree:h,indices:[...r,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(m)).filter(h=>h!==null),d}async function q4(t){try{return await t.owner().count()===1}catch{return!1}}async function K4(t){try{return await t.count()===1}catch{return!1}}async function Mo(t,e){let r=[],n=t;for(;n.parent.type==="frame";)r.push(n.parent),n=n.parent;r.reverse();let o=e,i=[];for(let l of r){let u=!1;for(let d of[...l.locationData.attributeSelectors,zl]){let p=o.frameLocator(d===zl?"iframe":`iframe[${d}]`);if(await q4(p)){u=!0,o=p,i.push(d);break}}if(!u)throw new M("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[...t.locationData.attributeSelectors,zl]){let u=o.locator(l===zl?"iframe":`iframe[${l}]`);if(await K4(u)){a=u,i.push(l);break}}if(!a)throw new M("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${t.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let s=await a.evaluateHandle(l=>l,{timeout:He}),c=await s.asElement().contentFrame();if(!c)throw new M("InternalWebAgentError",`Failed to load Playwright Frame for iframe with url '${t.url}'`);return await s.dispose(),{frame:c,mPathSelectorTokens:i}}function RO(t,e){let r=[...t],n=[];for(;r.length;){let o=r.shift();e(o)&&n.push(o),r.push(...o.childFrames)}return n}async function _O({page:t,frameTree:e,cache:r}){let n,o=e.childFrames,i=[];if(r.mPathSelectorTokens.length){let s=o;for(let u=0;u<r.mPathSelectorTokens.length-1;u++){let d=r.mPathSelectorTokens[u];d===zl?s=s.length===1?s[0].childFrames:[]:s=s.filter(p=>p.locationData.attributeSelectors.includes(d)).map(p=>p.childFrames).flat()}let c=[],l=r.mPathSelectorTokens[r.mPathSelectorTokens.length-1];if(l===zl?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 ${r.mPathSelectorTokens.join(" > ")}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with mpath ${r.mPathSelectorTokens.join(" > ")}`)}if(r.frameSrcRegex){let s=new RegExp(r.frameSrcRegex),c=RO(o,l=>!!l.src&&s.test(l.src));if(c.length===1)return n=c[0],i.push(`Found unique frame with src regex ${r.frameSrcRegex}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with src regex ${r.frameSrcRegex}`),r.frameSrcRegex=void 0}if(r.frameUrlRegex){let s=new RegExp(r.frameUrlRegex),c=RO(o,l=>!!l.url&&s.test(l.url));if(c.length===1)return n=c[0],i.push(`Found unique frame with url regex ${r.frameUrlRegex}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};i.push(`Found ${c.length} frames with url regex ${r.frameUrlRegex}`),r.frameUrlRegex=void 0}let a=o;for(let s=0;s<r.indices.length-1;s++)a=a[r.indices[s]]?.childFrames??[];if(n=a[r.indices[r.indices.length-1]],n)return i.push(`Found unique frame with indices ${r.indices.join(" > ")}`),{resolution:{type:"auto",frame:(await Mo(n,t)).frame,handle:n,mPathSelectorTokens:r.mPathSelectorTokens,frameTree:e},logs:i};throw i.push(`Found ${a.length} frames with indices ${r.indices}`),new Tn("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:!1,logs:i}],"could-not-find-iframe")}function bg(t){return t.type==="auto"?JSON.stringify({type:"auto",frameId:t.handle.frameId}):JSON.stringify(t)}function _E(t){for(;t.parent.type==="frame";)t=t.parent;return t.parent}function IO(t){let e=_E(t),r=t.src??"",n=t.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:r,desiredUrl:n}}function PO(t){return t.type==="auto"?{type:"auto",frameId:t.handle.frameId,url:t.handle.url,src:t.handle.src??"",mPathSelectorTokens:t.mPathSelectorTokens.join(" > ")}:{type:"url",url:t.url}}async function MO({frame:t,logger:e,signal:r}){let n;try{n=await t.frameElement(),await Y4({frameElementHandle:n,logger:e,signal:r})}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 Y4({frameElementHandle:t,logger:e,signal:r}){let n=await t.boundingBox(),i=await Fu({promiseGenerator:async()=>t.evaluate(async a=>{let s=a.scrollTop,c=a.getBoundingClientRect(),l=0,u=0,d=window.innerWidth,p=window.innerHeight;if(c.top>=l&&c.left>=u&&c.bottom<=p&&c.right<=d)return{didScroll:!1,reason:"already-fully-visible"};a.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(S=>setTimeout(S,250));let h=Date.now();for(;Date.now()-h<1e3;){let S=a.scrollTop;if(S===s)break;s=S,await new Promise(b=>setTimeout(b,250))}let g=a.getBoundingClientRect();return g.top!==c.top||g.left!==c.left||g.right!==c.right||g.bottom!==c.bottom?{didScroll:!0,reason:"scrolled",afterRect:g}:{didScroll:!1,reason:"no-more-scroll-possible",afterRect:g}}),timeoutMs:tt,codePath:"scrollIframeIntoView",signal:r});i.didScroll&&e.info({oldBb:n,newBb:await t.boundingBox(),evalResult:i},"Successfully scrolled iframe into view")}var IE=()=>{let t,e,r=new Promise((n,o)=>{t=n,e=o});return{resolve:t,reject:e,value:r}};var OO=(t,e)=>{let r=t.name??`batcher:${Math.random().toString(16).slice(2)})`,n=t.scheduler??X4(10),o=globalThis.__BATSHIT_DEVTOOLS__?.for(r),i=e??{seq:0,batch:new Set,currentRequest:IE(),timer:void 0,start:null,latest:null,abortController:new AbortController};o?.create({seq:i.seq});let a=()=>{i.batch=new Set,i.currentRequest=IE(),i.timer=void 0,i.start=null,i.latest=null,i.abortController=new AbortController},s=()=>{let d=i.seq,p=t.fetcher([...i.batch],i.abortController.signal),m=i.currentRequest;return o?.fetch({seq:d,batch:[...i.batch]}),a(),p.then(h=>{o?.data({seq:d,data:h}),m.resolve(h)}).catch(h=>{o?.error({seq:d,error:h}),m.reject(h)}),i.seq++,p};return{fetch:d=>{i.start||(i.start=Date.now()),i.latest=Date.now(),i.batch.add(d),clearTimeout(i.timer);let p=n(i.start,i.latest,i.batch.size);if(o?.queue({seq:i.seq,query:d,batch:[...i.batch],scheduled:p,latest:i.latest,start:i.start}),p==="immediate"){let m=i.currentRequest;return s(),m.value.then(h=>t.resolver(h,d))}else return p==="never"?i.currentRequest.value.then(m=>t.resolver(m,d)):(i.timer=setTimeout(s,p),i.currentRequest.value.then(m=>t.resolver(m,d)))},next:()=>{s()},abort:()=>{i.abortController.abort(),i.currentRequest.reject(new DOMException("Aborted","AbortError")),a()}}};var X4=t=>(e,r)=>{let n=r-e;return t-n};var LO=({windowMs:t,maxBatchSize:e})=>(r,n,o)=>{if(o>=e)return"immediate";let i=n-r;return t-i};import{reduce as J4}from"lodash-es";var Z4=100,Q4=2e3;function NO(t){return OO({fetcher:async r=>{t(J4(r,(n,o)=>({...n,...o}),{}))},resolver:()=>{},scheduler:LO({windowMs:Q4,maxBatchSize:Z4})})}async function DO({event:t,transformer:e,enricher:r,frame:n,lastScreenshotForRecording:o,logger:i}){let{warnings:a,error:s,properties:c}=t.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(h=>h.url());i.debug({frameUrl:l,...t},"Passive click event captured on element");let p,m;if(l)try{let h=await n.frameElement();p=await X(h?.boundingBox(),{milliseconds:ie})??void 0;let g=await r.constructIframeRegex({urls:d,srcs:[],desiredUrl:l});if(g.urlRegex)m={type:"url",url:`/${g.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(g)}`)}catch(h){i.warn({err:h},"Failed to construct iframe details for recorded action, using hardcoded URL only"),m={type:"url",url:l}}(async()=>{try{await e.recordElementAction({...t,screenshotBase64:o,frameConfig:m,frameBoundingBox:p})}catch(h){i.error({err:h},"Failed to transform passive click action")}})()}import{randomUUID as Oo}from"crypto";import e5 from"js-beautify";var t5=["Dead"],Eg=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:e,callbacks:r,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}),r.onStepRecorded(s,c)},onActionReceived:(s,c)=>{this.recordedSteps.set(c,{step:s}),r.onActionReceived?.(s,c)}},this.generator=n}reserveIndexForCommand(e){let r=this.nextStepOffset;return this.recordedSteps.set(r,{step:{id:Oo(),type:"PRESET_ACTION",command:$o(e)}}),this.nextStepOffset++,r}async recordElementAction(e){let{type:r,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,r){case"CLICK":{i="CLICK";let g=$o(i);a={id:Oo(),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=$o(i);a={id:Oo(),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=$o(i);a={id:Oo(),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:Qe(this.logger),boundingBox:l}}}};break}default:throw new Error(`Unknown action type: ${r}`)}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=e5.html(d,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),d=cM(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,...Qe(this.logger)}})).phrase}catch(g){this.logger.error({err:g},"Error generating reverse mapping description"),p=s}let m=this.recordedSteps.get(u)?.step??a,h=m?.command;h&&"target"in h&&h.target?(h.target={type:"description",elementDescriptor:p},this.callbacks.onStepRecorded({...m,command:h},u)):this.logger.warn("Could not find existing command to update after description mapping")}recordKeystroke(e){let{key:r,combinable:n}=e;if(t5.includes(r)||this.signal.aborted)return;let o="normal";r.length>1&&(o="special");let i;if(o==="normal"){let d=$o("TYPE");i={id:Oo(),type:"PRESET_ACTION",command:{...d,target:void 0,value:r,clearContent:!1}}}else{let d=$o("PRESS");i={id:Oo(),type:"PRESET_ACTION",command:{...d,value:r}}}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:Oo(),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:Oo(),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 r=()=>{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=$o(l);u.deltaY=Math.abs(i);let d={id:Oo(),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=$o(l);u.deltaX=Math.abs(i);let d={id:Oo(),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&&r()):(r(),e.deltaX>=20&&n())}};import{z as PE}from"zod";var oVe=PE.object({type:PE.literal("url"),url:PE.string()});var Tg=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userControlledBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position","background-image"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:e,pageLoadTimeoutMs:r,allowPartialAccessibilityTree:n,logger:o,cdpClient:i,pageGetter:a,abortSignalGetter:s,enricher:c,iconKnowledgeBase:l,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=e,this.pageLoadTimeoutMs=r,this.allowPartialAccessibilityTree=n,this.logger=o,this.cdpClient=i,this.pageGetter=a,this.abortSignalGetter=s,this.enricher=c,this.iconKnowledgeBase=l,this.userControlledBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userControlledBrowserSettings.importantStyles)for(let p of this.userControlledBrowserSettings.importantStyles){let m=p.split(":");if(m.length!==2){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}let h=m[0]?.trim(),g=m[1]?.trim();if(h===void 0||g===void 0){this.logger.warn({style:p},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(h)||this.computedStylesToFetch.push(h)}}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.userControlledBrowserSettings.autoExpandIframes)return;let r={...e,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,r),r}async getAutoFrameDetailsFromHandle(e){let r=this.pageGetter(),n=_E(e),{frame:o,mPathSelectorTokens:i}=await Mo(e,r),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 r=this.pageGetter(),n=await Hl({cdpClient:this.cdpClient,page:r,logger:this.logger}),{resolution:o,logs:i}=await _O({page:r,frameTree:n,cache:e});return this.logger.info({logs:i},"Resolved auto frame cache"),{...o,cache:e}}async resolveActiveFrameConfig({logger:e=this.logger,signal:r=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(bg(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:r}):n={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:bg(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await MO({frame:n.frame,logger:e,signal:r}),this.activeFrameCache=n,n}async executeFunctionInAllFrames(e,r){let n=this.pageGetter(),o=await Hl({cdpClient:this.cdpClient,page:n,logger:this.logger}),i=[X(n.evaluate(e,r),{milliseconds:tt})],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(Mo(c,n).then(({frame:u})=>X(u.evaluate(e,r),{milliseconds:tt})).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(),r=await Hl({cdpClient:this.cdpClient,page:e,logger:this.logger}),n=Array.from(r.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:r,logger:n}){return this.getDOMTree({devicePixelRatio:e??1,signal:r,logger:n??this.logger})}async getA11yTree(e){let r={},n=e.logger??this.logger,o=e.abortSignal??this.abortSignalGetter(),i=this.pageGetter();if(!e.skipPageLoad)try{await i.waitForLoadState("load",{timeout:this.pageLoadTimeoutMs})}catch(p){n.warn({err:p},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),await this.cdpClient.reinitialize()}let a,s,c=null;if(this.frameConfig?.type==="url"){if(a=await Un({fn:()=>this.resolveActiveFrameConfig({logger:n,signal:o}),codePath:"getActiveFrameDetails",logObject:r,signal:o,logger:n})??void 0,!a)throw new M("ActionFailureError","Got null frame details despite active frame config");s=a.handle,c=s.frameId}else this.userControlledBrowserSettings.autoExpandIframes?(s=await Un({fn:()=>Hl({cdpClient:this.cdpClient,page:this.pageGetter(),logger:n}),codePath:"getMomenticFrameTree",logObject:r,signal:o,logger:n}),c=null):(s={type:"root",page:i,childFrames:[]},c=null);await Un({fn:async()=>this.addMomenticIds({rootPage:i,childFrames:s.childFrames,frameFilter:a?.frame,logger:n}),codePath:"addIdsToElement",logObject:r,signal:o,logger:n});let l=await Un({fn:()=>this.getDOMTree({devicePixelRatio:e.devicePixelRatio??1,signal:o,logger:n}),codePath:"domFetch",logObject:r,signal:o,logger:n}),u=await Un({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:c,childFrames:s.childFrames,logTimings:r,logger:n,signal:o}),codePath:"totalA11yFetch",logObject:r,signal:o,logger:n}),{tree:d}=await Un({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:r,signal:o,logger:n});return Object.values(r).some(p=>p>750)&&n.warn({logTimings:r},"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,r){if(await this.getA11yTree({devicePixelRatio:e,abortSignal:r,logger:Eo,filterByViewport:!1,flagNotActionableNodes:!1,skipPageLoad:!0}),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:r,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.userControlledBrowserSettings.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=cO({node:o,domGraph:this.domGraph});return uO(e,i)}else return n.domNode||this.logger.warn({a11yRole:n.role,content:n.content},"Attempting to get locator from a11y node with no DOM node"),this.getLocatorFromBackendId(r,n.backendNodeId)}async getLocatorFromBackendId(e,r){let n=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:r},timeout:tt});if(!n||!n.object.objectId)throw new Error(`Could not resolve backend node ${r}`);let o;try{o=await dO(this.cdpClient,n.object.objectId)}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(n.object)},"Failed to get ID attribute for target"),i}return e.locator(li(o))}getNodeUsingMPathSelector(e){let r=this.selectorToNodeMap[e];if(r)return r;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:r=this.abortSignalGetter(),logger:n=this.logger}){let o=Date.now(),i,a,s,c=0;for(;Date.now()-o<this.smartWaitingTimeoutMs;)try{i=await Hl({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 M&&l.reason==="UserInfrastructureError")throw l;c%3===0&&this.logger.warn({attempt:c,err:l},"Failed to resolve active frame, retrying..."),await ye(lr,r)}finally{c++}if(a)return{source:"url",frame:a.frame,handle:a.handle,frameIdentifierStringified:bg(e),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw s}async getMatchingFrameByUrlWithCdp(e,r){let n=r.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=Qi(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 Mo(s,o)});break}}else if(n.trim()===d.trim()){a.push({handle:s,matchType:"url",...await Mo(s,o)});break}}}if(a.length===1){let s=a[0];return this.userControlledBrowserSettings.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 M("ActionFailureError",`Failed to find frame with src matching: ${n}`)}async composeA11yDomGraph({opts:e,a11yGraph:r,domGraph:n,startingFrameId:o,frameContext:i,logger:a,iconKnowledgeBase:s,showZeroOpacityElements:c,flagNotActionableNodes:l}){let u=await EO({rawA11yGraph:r,startingFrameId:o,frameContext:i,domGraph:n,logger:a,cdpClient:this.cdpClient,showZeroOpacityElements:c,flagNotActionableNodes:l,filterByViewport:e.filterByViewport,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles},viewportDetails:void 0,iconKnowledgeBase:s,useMPaths:this.userControlledBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride});if(!u||!u.root)throw new Error("Accessibility tree appears empty");return{tree:u}}async addMomenticIds({rootPage:e,childFrames:r,frameFilter:n,logger:o}){if(this.userControlledBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(n??e,1);if(!this.userControlledBrowserSettings.autoExpandIframes||n)return;let a=Array.from(r),s=[];for(;a.length>0;){let c=a.shift();a.push(...c.childFrames);let l=async()=>{try{let{frame:u}=await Mo(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,r){if(this.userControlledBrowserSettings.visualActions)return r;let n=this.logger;return await Yt({root:e,fn:i=>window.addIdsToElement?.(document.body,i),arg:r,timeout:tt,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"})??r}getPageDomain(e){try{let r=new URL(e);if(!r.hostname)return null;let n=r.hostname.split("."),o=n.length>2?n.slice(-2).join("."):r.hostname;return`${r.protocol}//${o}`}catch{return null}}async decideChildFrameUnrollEligibility({logger:e,warnings:r,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 r?.push(i),e?.warn({err:o},i),{shouldUnroll:!0}}}async decideChildFrameUnrollEligibilityHelper({domNode:e}){let r=e.attributes??[];if(Qi(r,"aria-hidden")==="true")return{shouldUnroll:!1,reason:"aria-hidden"};let n=Qi(r,"style");if(n?.includes("display: none")||n?.includes("visibility: hidden"))return{shouldUnroll:!1,reason:"hidden CSS style"};await this.cdpClient.send({timeout:ie,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[e.backendNodeId]}});let[o,i]=await Promise.all([this.cdpClient.send({timeout:ie,method:"DOM.getBoxModel",params:{backendNodeId:e.backendNodeId}}),this.cdpClient.send({timeout:ie,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:r,childFrames:n,logTimings:o,logger:i=this.logger,signal:a=this.abortSignalGetter()}){let s=[],c,l;for(let m=0;m<3;m++)try{l=await Un({fn:()=>this.getRawA11yTreeForFrame({frameId:r,timeoutMs:this.pageLoadTimeoutMs,logTimings:o}),codePath:"a11y-tree-fetch-root",logObject:o,logger:i});break}catch(h){c=h,i.warn({err:h},"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[r??"root"]=l,!this.userControlledBrowserSettings.autoExpandIframes)return u;let d=Array.from(n),p=[];for(;d.length>0;){let m=d.shift();try{let{shouldUnroll:g}=await this.decideChildFrameUnrollEligibility({handle:m,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 ${m.frameId} with url ${m.url}, allowing it to be fetched: ${g}`)}d.push(...m.childFrames);let h=async()=>{try{let g=await Un({fn:()=>this.getRawA11yTreeForFrame({frameId:m.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:o}),codePath:`a11y-tree-fetch-child-${m.frameId}`,logObject:o,logger:i});u[m.frameId]=g}catch(g){i.warn({err:g,url:m.url,src:m.src},`Error getting raw a11y tree for child frame ${m.frameId}, continuing...`)}};p.push(h())}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:r,logTimings:n}){let o;if(this.allowPartialAccessibilityTree)o=(await Un({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:e??void 0},timeout:r,timeoutMsg:`Fetching the document tree took over ${r}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 Un({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:e??void 0},timeout:tt}),codePath:"cdp-get-root-ax-node",logObject:n,logger:this.logger})).node.backendDOMNodeId;o=(await Un({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:a},timeout:r,timeoutMsg:`Fetching the document tree took over ${r}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:r,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:ie}),!o||!o.documents.length)throw new Error("Got empty DOM tree")}catch(s){await ye(lr,r),i++,a=s}if(!o||!o.documents.length)throw n.error({err:a},"Fatal error fetching DOM tree"),new M("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 lO({snapshot:o,devicePixelRatio:e,computedStylesToFetch:this.computedStylesToFetch,logger:n})}constructIframeRegexAsync(e,r){if(r.frameSrcRegex||r.frameUrlRegex)return;let n=IO(e);(async()=>{try{let o=await this.enricher?.constructIframeRegex(n);o?.srcRegex&&(r.frameSrcRegex=o.srcRegex),o?.urlRegex&&(r.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...")}})()}};var Fn=class t{static USER_AGENT=pg;abortSignal=void 0;contextInitialized=!1;cleanedUp=!1;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;pageLoadAbortControllers=new Set;pageLoadAbortListenerCleanup;clientCallbacks;harBatcher;iconKnowledgeBase;cdpClient;debugData={logsPerPage:[]};recentFrameNavigations={};requestRecorders={};mocks={};customHeaders=[];enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;originsVisited=new Set;viewport;onVideoPageChange;baseUrl;constructor({storage:e,enricher:r,browser:n,context:o,page:i,baseUrl:a,logger:s,userBrowserSettings:c,viewport:l,properties:u,clientCallbacks:d,iconKnowledgeBase:p,onVideoPageChange:m}){qx(c),this.storage=e,this.enricher=r,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,this.iconKnowledgeBase=p,this.onVideoPageChange=m}registerAbortSignal(e){if(this.pageLoadAbortListenerCleanup&&(this.pageLoadAbortListenerCleanup(),this.pageLoadAbortListenerCleanup=void 0),this.abortSignal=e,!this.abortSignal)return;let r=()=>{for(let n of this.pageLoadAbortControllers)n.abort();this.pageLoadAbortControllers.clear()};if(this.abortSignal.aborted){r();return}this.abortSignal.addEventListener("abort",r),this.pageLoadAbortListenerCleanup=()=>{this.abortSignal?.removeEventListener("abort",r)}}async initialize({grantPermissions:e,permissionsToGrant:r,runInitScripts:n,timingRecorder:o}){if(this.contextInitialized)return;let i={[lM]:this.userBrowserSettings.visualActions},a=[];this.userControlledBrowserSettings.extraHeaders&&a.push(this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders)),e&&a.push(this.context.grantPermissions(GM(r))),a.push(this.context.addInitScript({content:`${$b.htmlUtilsLibJs}
4583
4583
  //# sourceURL=momentic-injected/browser-scripts.js`}),this.context.addInitScript({content:mE(i,this.userBrowserSettings.disableFullStory)}),this.exposeRecordingBindings());let s=d=>this.handleNewPageEvent(d);this.context.on("page",s),this.handleNewPageEventHelper(this.page),this.context.on("close",()=>{this.context.off("page",s)});let c=!1;if(n){let d=async()=>{let p=Date.now();try{await Promise.all([this.page.addScriptTag({content:`${$b.htmlUtilsLibJs}
4584
- //# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:mE(i,this.userBrowserSettings.disableFullStory)})])}catch(m){if(m instanceof Error&&m.message.includes("Content Security Policy"))this.logger.warn({err:m},"Content Security Policy error from adding Momentic scripts, reloading page instead"),c=!0;else throw m}(o??{})["add-init-scripts"]=Date.now()-p};a.push(d())}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&c5()==="darwin"&&n5("system_profiler SPDisplaysDataType").toString().includes("Retina"))A.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else{let d=async()=>{let p=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(o??{})["fetch-dpr"]=Date.now()-p};a.push(d())}let l=Date.now();await X(Promise.all(a),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let u=Date.now();(o??{})["ops-attach"]=u-l,c&&await this.page.reload(),this.cdpClient=await yg.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout}),(o??{})["cdp-init"]=Date.now()-u,await this.initializeScreencast(),this.stateManager=new Tg({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 r=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:r}})}catch{}})()})}))}static async init(e){let r=await HM(e),n=new t(r);return await n.initialize({grantPermissions:!0,permissionsToGrant:e.userBrowserSettings.grantedPermissions,runInitScripts:!1}),n}static async fromExistingContext({context:e,storage:r,enricher:n,userBrowserSettings:o,properties:i,logger:a,timingRecorder:s}){let c=e.pages()[0];if(!c)throw new Error("No page found in existing context");let l=c.viewportSize();if(!l){let p=Date.now();l=await c.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),s["eval-viewport"]=Date.now()-p}let u=c?.url(),d=new t({browser:e.browser(),context:e,page:c,baseUrl:u,logger:a,storage:r,enricher:n,userBrowserSettings:o,viewport:l,properties:i,clientCallbacks:void 0,iconKnowledgeBase:null});return await d.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:s}),d}async handleAvailableTabsChangeHelper(){try{let e=await EE(this.context,{getTitles:!0}),r=this.page.url();this.clientCallbacks?.onTabsChange?.(e,r)}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,r){let n=vg(),o=`${e}-${n}`,i=Date.now(),a=!1,s=new AbortController;this.pageLoadAbortControllers.add(s);let c=async()=>{try{await X(r(),{signal:s.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${e} timed out after ${this.pageLoadTimeout}ms`})}catch(l){l.name!=="AbortError"&&!this.closed&&this.logger.error({err:l,promiseKey:o,codePath:e,duration:Date.now()-i},`Page load promise for code path ${e} encountered error`)}finally{delete this.pageLoadPromises[o],this.pageLoadAbortControllers.delete(s),a=!0}};this.pageLoadPromises[o]=c().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 r=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()||!qa(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()=>r())}handleNewPageEvent(e){let r=e.url();this.logger.info({url:r},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(e)}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....")}}handleNewPageEventHelper(e){let r=vg(),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);!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableConsoleLogs&&e.on("console",a=>{RM(e,o,this.debugData,a,this.logger)});let i=async()=>{!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs&&(xM(this.logger,r,this.clientCallbacks?.onNetworkPage,e),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=NO(this.clientCallbacks.onNetworkLogs)),await e.route("**/*",async(a,s)=>{await aE({pageId:r,route:a,request:s,onHarEntry:(c,l)=>{this.harBatcher?.fetch({[c]:l}).catch(()=>{})},logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed})}),await e.route("**/*",LM(this.customHeaders,this.logger))),Pn&&await e.route("**/*",Yu),await this.loadFrameAndRecordUrl({root:e,codePath:n}),this.handleAvailableTabsChange()};this.addToPageLoadPromises(n,async()=>i())}async handleCollectSvgs(e){}handleFrameNavigationEvent(e){let r=e.url(),n=e.parentFrame()?"has-parent":"no-parent",o=`frame-navigation-handler-${r.slice(0,50)} (${n})`;if(!r||r==="about:blank"||!qa(r))return;let i=this.recentFrameNavigations[o];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[o]=Date.now();let a=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(c){this.logger.warn({err:c},"Failed to collect SVGs on page, continuing...")}})()},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(e))}catch(s){s.name!=="AbortError"&&this.logger.warn({err:s,url:r,codePath:o},"Failed to handle frame navigation event, continuing...")}};this.addToPageLoadPromises(o,async()=>a())}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(r){this.logger.warn({err:r},"Failed to inject icon knowledge base into browser, continuing...")}}getBrowserCallbacks(){return{waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:e=>this.waitForUrl(e),getBrowserState:e=>this.getBrowserState(e),waitForStability:e=>this.waitForStability(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){this.abortSignal=void 0,this.debugData.logsPerPage=[],this.pageLoadPromises={},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 X(SE(this.getBrowserCallbacks()),{milliseconds:Fe})}catch(e){this.logger.debug({err:e},"Failed to clear highlights, continuing...")}}async cleanup(){this.abortSignal=void 0,this.cleanedUp=!0;try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(e=>e.abort()),this.pageLoadAbortControllers.clear(),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.cleanedUp||this.context.pages().every(e=>e.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(e,r,n){let o=Date.now(),i=0,a=0;for(;Date.now()-o<Bl;){a++,n?.throwIfAborted();try{if(await Yt({fn:()=>{let c=window;return!!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:Fe,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),root:e,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){r.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await ye(lr),a%2===0&&r.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),Yt({root:e,fn:()=>{let r=window;if(!r?.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return r.getFullHtmlTree()},arg:void 0,timeout:ie,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let e=window,r=[],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")}),r.push(()=>{for(let[o,i]of n)o.style.setProperty("caret-color",i.value,i.priority)}),e._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let o of r)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:r=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:r});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(r<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:o},"Failed taking screenshot, retrying..."),await ye(Yi),this.screenshot({...e,retries:r-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:r,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:r,optimizeForSpeed:!0},timeout:o??tt}),c=Buffer.from(s.data,"base64"),l=await UO.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&&a5(n,c),this.lastScreenshotForRecording=c,!e)return c;let p=await e.boundingBox({timeout:ie});if(!p)throw new Error("Attempted to screenshot an element that is not visible on the page");let{x:m,y:h,width:g,height:f}=p;if(!g||!f)throw new Error("Attempted to screenshot an element with zero width or height");m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),f=Math.floor(f);try{let S=await UO.fromBuffer(c),b=S.bitmap.width,y=S.bitmap.height;m=Math.max(0,Math.min(m,b-1)),h=Math.max(0,Math.min(h,y-1)),g=Math.max(1,Math.min(g,b-m)),f=Math.max(1,Math.min(f,y-h)),c=await S.crop({x:m,y:h,w:g,h:f}).getBuffer("image/jpeg")}catch(S){throw new Error(`Failed taking element screenshot at coordinates (${m}, ${h}) with size (${g}, ${f}): ${S}`)}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:r=!1,loadTimeoutMs:n=this.pageLoadTimeout}){II(e)&&(e=new URL(e,this.baseUrl).toString());let o=Date.now();r||(await this.waitForPageLoad(),await this.waitForStability());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 ye(lr),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:Fe})}if(!i)throw new M("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(gM.has(s))throw new M("UserInfrastructureError",`${e} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless()}async type(e,r={},n=!1){await this.directTypeHelper(e,r,n)}async getActiveElementHandle(e){return e.evaluateHandle(()=>document.activeElement)}async getActiveElement(e){try{return await Yt({root:e,fn:()=>{let n=document.activeElement?.textContent??void 0;n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]");let o=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(o=!0);let a=document.activeElement;return a&&"selectionStart"in a&&typeof a.selectionStart=="number"&&typeof a.selectionEnd=="number"&&a.selectionStart!==a.selectionEnd&&(o=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n,hasTextSelected:o}:{hasTextSelected:o}},arg:void 0,timeout:Fe,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(r){this.logger.warn({err:r},"Failed to get active element");return}}async directTypeHelper(e,r={},n=!1){let o=await this.getActivePageOrFrame();await ZM({root:o,text:e,options:r,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(o);if(n){let s=Date.now();for(;Date.now()-s<this.smartWaitingTimeout&&(!i||i.tag==="body");)await ye(Yi),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(o);i||this.logger.warn("No active element found to type into, attempting anyways")}let a=i?.tag==="input"||i?.tag==="textarea";if(r.clearContent)if(a||r.forceClearContent)if(this.properties.isAndroid&&!a&&i?.textContent){this.logger.info("Clearing content using backspaces");let s=0,c=i.textContent?.length;for(;c&&s<50;){s++;let l=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(l),i=await this.getActiveElement(o),c=i?.textContent?.length}c&&this.logger.warn("Content still remains after clearing existing")}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):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);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(e,{delay:r.delay??gA}),r.pressEnter&&await this.press("Enter",{}),await this.waitForStability()}async scrollIntoViewIfNeeded(e){try{await e.scrollIntoViewIfNeeded({timeout:tt})}catch(r){this.logger.warn({err:r},"Failed to scroll into view, trying with raw JS");try{await e.evaluate(async n=>{let o=n.scrollTop;n.scrollIntoView({block:"nearest"}),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:tt})}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...")}}}async highlightA11yId(e){try{let{resolution:r}=await this.createTargetFromA11yId({id:e,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(r.locator),!0}catch(r){return this.logger.debug({err:r,id:e},"Failed to highlight target"),!1}}async highlight(e){return fg({locator:e,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(e){try{let r=new URL(e).origin;if(r==="null")return;this.originsVisited.add(r)}catch(r){this.logger.warn({err:r},"Failed to record origin visited")}}async waitForPageLoad(){let e=Date.now(),r=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises),o=-1,i=0;for(;r.length!==0;){if(Date.now()-e>this.pageLoadTimeout&&this.logger.error({outstandingPromiseKeys:n,outstandingPromises:r},"Still waiting on page load promises"),Date.now()-o<20&&(i++,i>2)){this.logger.error({outstandingPromiseKeys:n,outstandingPromises:r},"Synchronous waiting loop detected, exiting page load wait");return}o=Date.now(),await Promise.allSettled(r),r=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:Fe}),this.originsVisited.delete(o);let r=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 AM(i,this.logger),o!==r&&e.closeNonActiveTabs&&(this.logger.info(`Closing tab ${o} with URL ${a}`),await i.close())}}async loadAuthState(e){await this.waitForPageLoad(),await this.waitForStability(),!e||Object.keys(e).length===0?await this.clearAuthState({closeNonActiveTabs:!1}):await this.loadAuthStateHelper(e),await this.refresh(),await this.waitForStability()}async loadAuthStateHelper(e){let r=[];for(let c of e.cookies??[]){let l=await this.setCookie(c);r=r.concat(l)}this.logger.info(`Loaded ${e.cookies?.length??0} cookies`),await this.cdpClient.send({method:"DOMStorage.enable",params:void 0,timeout:Fe});let n=0,o=[];for(let c of e.origins??[])for(let l of c.localStorage)try{await this.cdpClient.send({timeout:Fe,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(c.origin).origin,isLocalStorage:!0},key:l.name,value:l.value}}),n++}catch(u){o.some(d=>d.origin===c.origin&&d.key===l.name)||o.push({key:l.name,origin:c.origin,err:u});continue}o.length>0&&this.logger.warn({failedOrigins:o,currentPageUrl:this.page.url()},"Failed to set localStorage for entries, continuing..."),this.logger.info(`Loaded ${n} local storage entries`);let i={},a=0;for(let c of e.origins??[])if(c.sessionStorage&&c.sessionStorage.length>0){let l={};for(let u of c.sessionStorage)l[u.name]=u.value,a++;i[new URL(c.origin).origin]=l}a>0&&await this.context.addInitScript(({storageByOrigin:c,markerKey:l})=>{let u=window.location.origin,d=c[u];if(d&&!window.sessionStorage.getItem(l)){for(let[p,m]of Object.entries(d))window.sessionStorage.setItem(p,m);window.sessionStorage.setItem(l,"1")}},{storageByOrigin:i,markerKey:hE}),this.logger.info(`Loaded ${a} session storage entries`);let s=e.idb;s&&Object.keys(s).length>0&&(await vM(this.page,s,this.logger),this.logger.info(`Loaded ${Object.keys(s??{}).length} indexedDB databases`))}async saveAuthState(){let r=0,n=null;for(;r<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let o=await this.context.storageState();return o.idb=await TM(this.page,this.logger),await $M(this.page,o,this.logger),o}catch(o){if(n=o,r++,r<=2){this.logger.warn({err:o,retryCount:r,maxRetries:2},`Error saving auth state, retrying (${r}/2)...`);let i=Math.pow(2,r)*100;await new Promise(a=>setTimeout(a,i))}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new M("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(e){return EE(this.context,e)}saveA11yDetailsToCache(e,r){r.content=e.content,r.name=e.name,r.role=e.role,r.numChildren=e.children.length,delete r.serializedForm,delete r.nodeOnlySerializedForm}async updateCacheWithNewNodeDetails({node:e,target:r,locator:n,originalElementLocationResult:o,allowNotActionableNodesOverride:i,logger:a=this.logger,skipSavingVisualAttributes:s=!1}){if(e&&this.saveA11yDetailsToCache(e,r),r.frameCache=this.stateManager.saveAutoFrameCacheDetails(r.frameCache),n)try{let c=await this.fetchHtmlAttributes({locator:n,logger:a,originalElementLocationResult:o,allowNotActionableNodesOverride:i});c?(r.generatedSelectors=c.generatedSelectors,r.serializedHtml=c.serializedHtml,r.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,r.hybridSelector=c.hybridSelector):a.warn("Got undefined HTML attributes when trying to update cache")}catch(c){if(c instanceof Vs)throw a.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;a.warn({err:c},"Failed to fetch HTML attributes for target, continuing...")}try{s||await this.saveElementVisualAttributes({target:r,locator:n,logger:a})}catch(c){a.debug({err:c},"Failed to save element visual details, continuing...")}}async saveElementVisualAttributes({target:e,locator:r,logger:n}){if(!r||!Kb.includes(e?.role??""))return;let o=await r.boundingBox({timeout:ie});if(!o||!o.width||!o.height){n.debug("Skipping visual attributes saving for element with no bounding box after action"),e.boundingBox=void 0,e.screenshotUrl=void 0;return}let i=this.getViewport();if(o.x<0||o.y<0||!i||o.x+o.width>i.width||o.y+o.height>i.height)return;let{x:a=0,y:s=0,width:c=0,height:l=0}=o;if(e.boundingBox&&Math.abs(e.boundingBox.width-c)<1&&Math.abs(e.boundingBox.height-l)<1&&Math.abs((e.boundingBox.x??0)-a)<1&&Math.abs((e.boundingBox.y??0)-s)<1)return;e.boundingBox=o;let u=await this.screenshot({locator:r,quality:75,retries:0}),d=vg(),p="image/jpeg";(async()=>{try{await this.storage.createOnDemandScreenshot(d,u,p)}catch(m){this.logger.warn({err:m,screenshotId:d},"Failed to persist on-demand screenshot")}})(),e.screenshotUrl={id:d,contentType:"image/jpeg"}}async resolveAutoFrameCache(e){return this.stateManager.resolveAutoFrameCache(e)}async getElementRequiredValues({logger:e,boundingBox:r,locator:n,requirements:o}){let i={},a=!!o?.position&&o.position!=="irrelevant",s=!!o?.shape&&o.shape!=="irrelevant";if(a||s){if(!r||!r.width||!r.height)throw new M("ActionFailureError","Element does not have a bounding box as required");s&&(i.shape={width:r.width,height:r.height,tolerance:o.shape}),a&&(i.position={x1:r.x,y1:r.y,x2:r.x+r.width,y2:r.y+r.height,tolerance:o.position})}if(o?.text){let c=await n.textContent({timeout:ie});i.text=c?.trim().slice(0,mn.serializedElementForCachingTruncateLength)}if(o?.attributes&&o.attributes.length>0){let c={};for(let l of o.attributes){let u=l.trim().toLowerCase();if(!(!u||mn.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await n.getAttribute(u,{timeout:ie});d!==null&&(c[l]=d)}catch(d){e.warn({err:d,attr:l},"Failed to fetch required attribute, continuing...")}}i.attributes=c}return i}async getAdditionalDetailsForElement({mainLocator:e,mainBoundingBox:r,additionalElement:n,root:o,logger:i}){let a=this.stateManager.a11yIdToNodeMap[n.id];if(!a)return;let s=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:o,node:a});if(e.contentFrame!==s.contentFrame)return;let c=await this.fetchHtmlAttributes({locator:s,logger:i});if(!c?.generatedSelectors||c.generatedSelectors.length===0)return;let l=await s.boundingBox({timeout:ie}),u={selectors:c.generatedSelectors,relativeAngleRadians:WM(r,l),relativeDistance:qM(r,l)};return n.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:s,boundingBox:l,requirements:n.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:e,mainLocator:r,mainBoundingBox:n,additionalElements:o,root:i,logger:a}){let s=new Set,c=[];for(let d of o)d.id!==e&&(s.has(d.id)||(s.add(d.id),c.push(d)));let l=await Promise.allSettled(c.map(d=>this.getAdditionalDetailsForElement({mainLocator:r,mainBoundingBox:n,additionalElement:d,root:i,logger:a}))),u=[];for(let[d,p]of l.entries()){let m=c[d];if(m){if(p.status==="fulfilled"){let h=p.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:p.reason,additionalElement:m},"Failed to fetch additional element details, continuing...")}}return u}async updateCacheWithAdditionalRequirements({mainElementId:e,requirements:r,additionalElements:n,target:o,locator:i,root:a,logger:s}){let c=await i.boundingBox({timeout:ie});if(r)try{o.requirements=await this.getElementRequiredValues({logger:s,boundingBox:c,locator:i,requirements:r})}catch(l){s.warn({err:l},"Failed to generate required values for target")}n&&n.length>0&&(o.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:e,mainBoundingBox:c,mainLocator:i,additionalElements:n,root:a,logger:s}))}async createTargetFromA11yId({id:e,description:r,targetSource:n,skipSaveToCache:o,skipSavingVisualAttributes:i,logger:a=this.logger,requirements:s,additionalElements:c}){if(e<0)throw new M("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let l=this.stateManager.a11yIdToNodeMap[e];if(!l)throw new M("InternalWebAgentError",`Resolving target failed because id ${e} does not exist on the page. This generally indicates an incorrect element was targeted.`);let u=this.stateManager.frameConfig,d,p,m,h;if(this.userBrowserSettings.autoExpandIframes&&!u&&l.parentFrame){let T=l.parentFrame,{cache:w,config:P}=await this.stateManager.getAutoFrameDetailsFromHandle(T);p=w,m=P,d=P.frame,h="auto iframe"}else l.parentFrame&&u?(m=u,d=await this.getActivePageOrFrame(),h="hardcoded url already on the state manager"):(d=await this.getActivePageOrFrame(),h="should not be possible");let g=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:d,node:l}),f=await g.evaluate(T=>window.generateCommonLocationResultMetadata(T),{timeout:tt}),S={id:e,inputDescription:r??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:Qe(a),frameCache:p},b,y=!1;o||(m&&(a.info({frameConfigSource:h,frameConfig:PO(m)},"A11y node was resolved to a target within an iframe"),b=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(m),y=!0),await this.updateCacheWithAdditionalRequirements({mainElementId:e,requirements:s,additionalElements:c,target:S,root:d,locator:g,logger:a}),await this.updateCacheWithNewNodeDetails({node:l,target:S,locator:g,logger:a,allowNotActionableNodesOverride:!0,skipSavingVisualAttributes:i,originalElementLocationResult:f}));try{return{resolution:{locator:g,a11yNode:l,displayString:l.getNodeOnlySerializedForm(),originalElementLocationResult:f,decisions:[]},target:S,frameConfig:m,frameConfigSource:h}}finally{y&&this.stateManager.setActiveFrameConfig(b)}}async resolveTarget(e,r,n={}){let{logger:o=this.logger,signal:i=this.abortSignal,allowNotActionableNodesOverride:a,skipWaitForPageLoad:s}=n;if(r.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,m=!1,h=Date.now();for(;Date.now()-h<this.smartWaitingTimeout;)try{let g=await this.stateManager.resolveAutoFrameCache(r.frameCache);this.setActiveFrameConfig(g),m=!0;break}catch(g){p=g,await ye(lr,i)}if(!m)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,o,i);let l=Date.now(),u=0,d;for(;Date.now()-l<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),u++;let p=u===2||Date.now()-l>this.smartWaitingTimeout-2e3&&u%2===0;try{d=await this.resolveTargetHelper({root:c,target:r,primaryOnly:!0,shouldLogOnFailure:p,logger:o,allowNotActionableNodesOverride:a,signal:i,skipWaitForPageLoad:s});break}catch(m){if(m instanceof jc)break;i?.throwIfAborted(),p&&o.warn({err:m},`Could not resolve target using primary cache only (x${u})`),await ye(lr,i)}}return d||(d=await this.resolveTargetHelper({root:c,target:r,primaryOnly:!1,logger:o,signal:i,allowNotActionableNodesOverride:a}),o.info({decisions:d.decisions},"Target resolution succeeded after waiting")),e?.details?.push({type:"TARGETING",elementLocationDecisions:d?.decisions??[],pageState:void 0,targetSource:r.targetSource,targetUpdateTime:r.targetUpdateTime}),d}async resolveTargetHelper({root:e,target:r,primaryOnly:n,logger:o,signal:i,allowNotActionableNodesOverride:a,shouldLogOnFailure:s,skipWaitForPageLoad:c,skipSavingVisualAttributes:l}){let u=[],d;await this.getBrowserState({logger:o,abortSignal:i,skipWait:!this.userBrowserSettings.visualActions,skipWaitForPageLoad:c,allowNotActionableNodesOverride:a});let p;if(r.generatedSelectors||r.hybridSelector){let m;try{m=await this.resolveTargetWithPrimaryMethods({root:e,target:r,logger:o,allowNotActionableNodesOverride:a,shouldLogOnFailure:s,skipSavingVisualAttributes:l})}catch(h){p=h,h instanceof Tn&&(u.push(...h.decisions),d=h.cacheMissReason)}if(m)return{...m,decisions:[...u,...m.decisions]};n||(u.push({type:"CSS_SELECTOR",matched:!1,reason:p?.message,selectors:Ju(r.generatedSelectors??[])}),r.generatedSelectors=void 0,r.hybridSelector=void 0)}if(n)throw p;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let m=await this.resolveTargetWithSecondaryMethods({root:e,target:r,decisions:u,logger:o,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:l});if(m)return r.targetSource="HEURISTIC_HEALED",r.targetUpdateTime=new Date().toISOString(),r.targetUpdateLoggerTags=Qe(o),m;d=d??"secondary-resolution-failed"}throw new Tn("Could not find any relevant node given target",u,d)}async resolveTargetWithPrimaryMethods({root:e,target:r,logger:n,allowNotActionableNodesOverride:o,shouldLogOnFailure:i,skipSavingVisualAttributes:a}){if(!r.nodeOnlySerializedHtml)throw new jc("Insufficient data to resolve target using primary methods (missing node HTML)");let s={x:0,y:0};if(VM(e)){let L=await(await e.frameElement()).boundingBox();L&&(s=L)}let c=i?n:Eo,l=this.userControlledBrowserSettings.hybridSelectorMode,u=r.boundingBox,d=!!u?.width&&!!u?.height,p=!o&&d,m=this.userControlledBrowserSettings.bustCacheOnBoundingBoxChange&&d?u:void 0,h={ldistThreshold:mM,requireBoundingBox:p,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requireMatchingBoundingBox:m,requirements:r.requirements,additionalElements:r.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles},rootBoundingBox:s},g={cssParams:{selectors:r.generatedSelectors??[],cachedElementSerialized:r.nodeOnlySerializedHtml,opts:h},hybridParams:l&&r.hybridSelector?{nodes:r.hybridSelector,cachedElementSerialized:r.nodeOnlySerializedHtml,opts:h}:void 0},{css:f,hybrid:S}=await Yt({fn:L=>window.evaluatePrimaryCaches(L),arg:g,root:e,timeout:ie,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"}),b,y,T=[];if(l==="prefer"&&S?.result){b=S.result;let L={type:"HYBRID_SELECTOR",matched:!0,logs:S.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};T.push(L),y="HYBRID_SELECTOR"}else if(f?.result){b=f.result;let L=`${b.workingSelectors.length} CSS selectors matched the following element: ${b.serializedElement}`,N=b.workingSelectors.slice(0,5);T.push({type:"CSS_SELECTOR",matched:!0,logs:f.logs,reason:L,selectors:N}),n.debug({reason:L,workingSelectors:N},"Resolved with CSS selectors"),y="CSS_SELECTOR"}else throw T.push({type:"CSS_SELECTOR",matched:!1,reason:f.logs.length===1?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:f.logs}),S&&T.push({type:"HYBRID_SELECTOR",matched:!1,reason:S.logs.length===1?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S.logs}),f?.error&&n.error({err:new Error(f.error)},"Cache evaluation errored unexpectedly (CSS)"),S?.error&&n.error({err:new Error(S.error)},"Cache evaluation errored unexpectedly (Hybrid)"),new Tn("Cache evaluation failed",T,f.cacheMissReason);let w,P,v;if(this.userBrowserSettings.visualActions){let L=b.mPath;if(!L)throw new Error("Found element did not have an mPath despite using visual actions");let N=L.join(" > ");w=e.locator(N),P=this.stateManager.getNodeUsingMPathSelector(N)}else if(b.dataMomenticId!==void 0)v=parseInt(b.dataMomenticId),P=this.stateManager.dataMomenticIdToNodeMap[v],"workingSelectors"in b?w=e.locator(b.workingSelectors[0]):w=e.locator(li(v));else throw new M("InternalWebAgentError","Received an element resolution result with no identifying attributes");l&&r.hybridSelector&&(S?.logs.length===1?c.warn({hybridResult:S,cssResult:f,hybridMode:l},"Hybrid selector resolution rejected, continuing..."):S?.result?f?.result&&S?.result&&S.result.serializedElement!==f.result.serializedElement&&(this.userBrowserSettings.visualActions&&JSON.stringify(f.result.mPath)!==JSON.stringify(S.result.mPath)?n.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l,mode:"visualActions"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing..."):f.result.dataMomenticId!==S.result.dataMomenticId&&n.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l,mode:"dataMomenticId"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing...")):c.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l},"Hybrid selector resolution returned no eligible elements while CSS resolution did, continuing..."));let x=Ju(r);await this.updateCacheWithNewNodeDetails({node:P,target:r,locator:w,logger:n,originalElementLocationResult:b,allowNotActionableNodesOverride:o,skipSavingVisualAttributes:a});let O=ME(x,r);return O&&Object.keys(O).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(n),r.cacheResolutionUpdateSource=y),{a11yNode:P,displayString:b.serializedElement,locator:w,decisions:T,originalElementLocationResult:b,revalidator:async()=>{await fE({initialLocationResult:b,cacheEvaluationParams:g,locator:w,logger:n})}}}async resolveHardcodedCssSelector(e){let{ctx:r,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),m;try{await p.waitFor({state:"attached",timeout:Fe});let h=await p.evaluate(g=>window.generateCommonLocationResultMetadata?.(g),void 0,{timeout:tt});return m=h?.serializedElement??"unknown element",d.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),r?.details?.push({type:"TARGETING",elementLocationDecisions:d,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toISOString()}),{locator:p,originalElementLocationResult:h,displayString:m,decisions:d}}catch(h){let g=h.message;u=new M("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 ye(lr,i)}}throw u}async resolveTargetWithSecondaryMethods(e){if(!e.target.boundingBox)return;let{x:r,y:n,width:o,height:i}=e.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(e);if(!a)return;let s=await a.locator.boundingBox({timeout:ie});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(!r||!n||!c||!l){this.logger.debug({oldX:r,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-r)>100||Math.abs(l-n)>100){this.logger.debug({newX:c,newY:l,oldX:r,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:r,decisions:n,logger:o,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s}){if(r.nodeOnlySerializedHtml&&r.nodeOnlySerializedHtml.trim().length<pM){let u="Refusing to attempt HTML comparison since the saved element is too short.";n.push({type:"HTML_DISTANCE",matched:!1,reason:u})}else if(r.nodeOnlySerializedHtml&&r.nodeOnlySerializedHtml.length>50)try{let u=await Yt({fn:d=>window.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:r.nodeOnlySerializedHtml},timeout:tt,root:e,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,p,m;if(d)p=this.stateManager.dataMomenticIdToNodeMap[d],m=e.locator(li(d));else if(u.mPath){let S=u.mPath.join(" > ");p=this.stateManager.getNodeUsingMPathSelector(S),m=e.locator(S)}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;o.warn({result:u,originalTarget:r,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=Ju(r);await this.updateCacheWithNewNodeDetails({node:p,target:r,locator:m,logger:o,originalElementLocationResult:u,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s});let f=ME(g,r);return f&&Object.keys(f).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(o),r.cacheResolutionUpdateSource="HTML_DISTANCE",o.info({diffs:f,result:u},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:r.nodeOnlySerializedHtml}),{locator:m,a11yNode:p,displayString:h,decisions:n,originalElementLocationResult:u,revalidator:async()=>{await fE({initialLocationResult:u,locator:m,logger:o})}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){o.info({err:u},"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: ${u}`})}let c=r.screenshotUrl,l=r.role??"";if(c&&Kb.includes(l))try{let u=await this.resolveTargetWithTemplateMatching({root:e,oldTarget:r,screenshot:c,signal:i,allowNotActionableNodesOverride:a});return{...u,decisions:[...n,...u.decisions]}}catch(u){i?.throwIfAborted(),n.push({type:"TEMPLATE_MATCHING",matched:!1,reason:`Error finding closest element using saved screenshot: ${u}`}),o.warn({err:u},"Did not find any close element using saved screenshot")}}async resolveTargetWithTemplateMatching({screenshot:e,oldTarget:r,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}),s;if(typeof e=="string"){let b=await fetch(e);s=Buffer.from(await b.arrayBuffer())}else({data:s}=await this.storage.fetchOnDemandScreenshot(e));let c=p5(),l=await this.enricher.runTemplateMatching({id:c,searchImageBase64String:s.toString("base64"),pageImageBase64String:a.toString("base64")},{signal:n}),{target:u,locator:d}=await this.getTargetFromPositionPercentages({percentX:l.x,percentY:l.y,allowNotActionableNodesOverride:o}),p=u.boundingBox?.width,m=u.boundingBox?.height;if(!p||!m)throw i="Rejecting target from screenshot due to no bounding box",new Error(i);let h=u.id,g=this.stateManager.a11yIdToNodeMap[h],f=Ju(r);await this.updateCacheWithNewNodeDetails({target:r,node:g,locator:d,allowNotActionableNodesOverride:o});let S=ME(f,r);return S&&Object.keys(S).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(this.logger),r.cacheResolutionUpdateSource="TEMPLATE_MATCHING",this.logger.info({id:c,diffs:S,templateMatch:l},"Updated cache after template matching resolution")),{locator:d,originalElementLocationResult:void 0,a11yNode:g,displayString:u.nodeOnlySerializedHtml??"",decisions:[{type:"TEMPLATE_MATCHING",matched:!0,reason:"Found element using screenshot"}]}}async typeIntoTarget(e,r,n={}){await this.highlight(r.locator);let o;r.originalElementLocationResult?o=r.originalElementLocationResult.importantAttributes.type??"":o=await r.locator.getAttribute("type",{timeout:Fe})??"";let i=JM.some(a=>a===o.toLowerCase());return await yE({targetingResult:r,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(),isAndroid:this.properties.isAndroid??!1}),await this.page.waitForTimeout(150),this.directTypeHelper(e,n)}async click(e,r,n={}){return yE({targetingResult:e,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:r,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??!1})}async waitForUrl({beforeUrl:e,matcher:r},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(),Mm(s,r,n)){a=!0;break}await ye(lr,this.abortSignal)}if(!a)throw new M("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${hm(r)} in ${o}ms.
4585
- 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,r,n={}){let o=n.steps??5,i=Math.min(n.hoverDurationMs??500,tt);if(await this.highlight(e.locator),this.properties.isAndroid){await nO({page:this.page,fromLocator:e.locator,toLocator:r.locator,stepCount:o,dragDurationMs:n.dragDurationMs??1e3,hoverDurationMs:i}),await this.highlight(r.locator);return}await this.hover(e),await this.page.mouse.down();let a=await r.locator.boundingBox({timeout:ie});if(!a)throw new M("ActionFailureError","Could not get bounding box of target element");let s=a.x+a.width/2,c=a.y+a.height/2;await this.page.mouse.move(s,c,{steps:o}),await ye(i),await this.highlight(r.locator),await this.page.mouse.up()}async mouseDrag(e,r,n,o){o&&await this.hover({locator:o,originalElementLocationResult:void 0,serverSideBoundingBox:null}),await this.page.mouse.down();let i;if(o){let a=await o.boundingBox({timeout:ie});a&&(i={x:a.x+a.width/2,y:a.y+a.height/2})}i||(this.logger.warn("Could not get starting position from fromTarget, falling back to (0,0)"),i={x:0,y:0}),await this.page.mouse.move(i.x+e,i.y+r,{steps:n}),await ye(Yi),await this.page.mouse.up()}async hover(e){await this.highlight(e.locator),await ns({func:async r=>{await this.scrollIntoViewIfNeeded(r.locator);let n=await r.locator.boundingBox({timeout:ie});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 ns({func:r=>r.locator.focus({timeout:tt}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async blur(e){if(!e){let r=await this.getActivePageOrFrame();await Yt({fn:()=>{let n=document.activeElement;n&&n.nodeType===1&&n.blur()},root:r,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:Fe,codePath:"blurring the active element"});return}await this.highlight(e.locator),await ns({func:r=>r.locator.blur({timeout:tt}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async selectOption(e,r,n=!1){await this.highlight(e.locator),await ns({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async o=>{if(r.type==="INDEX"){let i=Number(r.index);if(isNaN(i))throw new M("UserConfigurationError",`Page index ${r.index} is not a number`)}await o.locator.selectOption({value:r.type==="VALUE"?r.value:void 0,label:r.type==="LABEL"?r.label:void 0,index:r.type==="INDEX"?Number(r.index):void 0},{force:n,timeout:ie})},targetingResult:e})}async press(e,r){let n=r.repeat??1;if(r.convertMeta){let o=Sg(e,this.properties.isAndroid);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:r.delayMs??0});await this.waitForStability()}async keyDown(e,r){if(r.convertMeta){let n=Sg(e,this.properties.isAndroid);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of gE(e))await this.page.keyboard.down(n)}async keyUp(e,r){if(r.convertMeta){let n=Sg(e,this.properties.isAndroid);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of gE(e))await this.page.keyboard.up(n)}async refresh(e){let r=e?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let n=0,o=2;for(;n<o;){n++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:r});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.waitForStability()}async getBrowserState(e){let{maxAttempts:r=2,logger:n=this.logger,skipWaitForPageLoad:o,allowNotActionableNodesOverride:i,shouldLogOnFailure:a}=e,s=e.abortSignal??this.abortSignal,c=!i,l=i?!0:this.userControlledBrowserSettings.showZeroOpacityElements,u=a?n:Eo;o||await this.waitForPageLoad(),e.skipWait||await this.waitForStability({logger:n,signal:s});let d=0,p;for(;d<r;){d++;try{return await X(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:s,logger:n,filterByViewport:e.filterByViewport,showZeroOpacityElements:l,flagNotActionableNodes:c,skipPageLoad:e.skipWaitForPageLoad}),{milliseconds:this.pageLoadTimeout*d,signal:s,message:"Getting browser state took too long"})}catch(m){if(s?.throwIfAborted(),p=m instanceof Error?m.message:`${m}`,d>=r)throw m;u.warn({err:m,url:this.url()},"Error getting a11y tree, retrying...")}}throw new M("ActionFailureError",`Getting page content failed after ${r} attempts. Error: ${p}`)}async getViewportOffsetDetails(e){let[r,n,o,i,a]=await Yt({root:e,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:ie,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return{upperBound:r,lowerBound:r+i,leftBound:n,rightBound:n+o,width:o,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??a}}async waitForStability(e){let{logger:r=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.waitForStabilityHelper(i,r,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 waitForStabilityHelper(e,r,n,o=this.abortSignal){let i=!1,a=Date.now(),s,c={quality:25,retries:0,stabilizeBeforeScreenshot:!0},l=!1,u=0,d;for(;Date.now()-a<n;){o?.throwIfAborted();let p=Date.now();if(d!==void 0&&p-d<Yi&&await ye(Yi-(p-d),o),d=Date.now(),!(Date.now()-e.value<Wb)){if(s)try{let m=await this.screenshot(c);if(YM(s,m)>1){s=m,l=!1;continue}l=!0}catch(m){u++,u%3===0&&r.warn({err:m,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}else try{s=await this.screenshot(c)}catch(m){u++,u%3===0&&r.warn({err:m,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}if(!(Date.now()-e.value<Wb)){i=!0;break}}}i||r.warn({duration:Date.now()-a,stable:{a11y:i,screenshot:l}},"A11y wait phase completed due to timeout, continuing...")}async clickUsingVisualCoordinates(e,r){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:r.rightClick?"right":"left",clickCount:r.doubleClick?2:1})}async dragAndDropUsingVisualCoordinates(e,r,n){await oO(this.page,e,r,n)}async mouseDragUsingVisualCoordinates(e){let{fromTarget:r,...n}=e;await TE({...n,page:this.page,visualTarget:r,isAndroid:this.properties.isAndroid??!1})}async hoverUsingVisualCoordinates(e){await this.page.mouse.move(e.x,e.y,{steps:3})}async getElementLocation(e){let r=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:!0,includePaintOrder:!0},timeout:ie}),n=await X(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:tt});process.platform==="darwin"&&n===1&&(n=uM);let o=r.documents[0],i=o.layout,a=o.nodes,s=a.nodeName||[],c=a.backendNodeId||[],l=i.nodeIndex,u=i.bounds,d=-1;for(let b=0;b<s.length;b++)if(c[b]===e){d=l.indexOf(b);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${e}`);let[p=0,m=0,h=0,g=0]=u[d];p/=n,m/=n,h/=n,g/=n;let f=p+h/2,S=m+g/2;return{centerX:f,centerY:S}}async scrollVertical(e){return bE({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 bE({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,r){if(await this.stopScreencast(),this.recordUrlVisited(e.url()),this.onVideoPageChange){let n=await e.video()?.path();if(n){let o=FO(n);this.onVideoPageChange({videoName:o})}}this.page=e,await this.reinitializeCDPClient(r??this.pageLoadTimeout)}async createNewTab(e,r){let n=await this.context.newPage();await this.changeActivePage(n,r?.loadTimeoutMs),await this.navigate({url:e,initialNavigation:!0,...r}),this.handleAvailableTabsChange()}async switchToPage(e,r){let n=!0,o,i=Date.now();for(;n||r?.retry&&Date.now()-i<this.smartWaitingTimeout;){n=!1;try{await this.switchToPageHelper(e,r);return}catch(a){this.logger.warn({err:a},"Error switching to page, retrying..."),o=a,await ye(lr)}}throw o}async switchToPageHelper(e,r){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 M("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)}.
4586
- Available pages:${JSON.stringify(n.map(i=>i.url))}`);if(!qa(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,r?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:o.page,signal:this.abortSignal,codePath:"switch-to-tab-step"}),this.handleAvailableTabsChange()}async setCookie(e){let r;return typeof e=="string"?r=Kp(e):r=[e],await this.context.addCookies(r),r}async setLocalStorage(e,r){let n;for(let o=0;o<2;o++)try{await this.evaluateFunctionInPage(([i,a])=>{i&&localStorage.setItem(i,a||"")},[e,r],`setting local storage key ${e}`);return}catch(i){n=i}if(n)throw n}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){try{await X(this.exposeRecordingBindingsHelper(),{milliseconds:this.pageLoadTimeout})}catch(e){e instanceof Error&&e.message.includes("already registered")||this.logger.error({err:e},"Failed to install Momentic libraries for action recording")}}async exposeRecordingBindingsHelper(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0,{handle:!1}),await this.context.exposeBinding("captureTargetedEvent",({frame:e},r)=>{this.transformer&&DO({event:r,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,r)=>{this.transformer&&this.transformer.recordKeystroke(r)})}async startRecordingCrons(e){if(e.aborted)return;let r,n=(await this.getOpenPages()).map(c=>c.url),o=0,i=!1,a=async()=>{if(e.aborted||o>8){clearTimeout(r);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];qa(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};r=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}}},lr);let s=async()=>{clearInterval(r)};e.addEventListener("abort",s,{once:!0})}async startRecording(e,r,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=r,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:Fe})}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:r,codePath:n}){let o=this.pageLoadTimeout,i=e.url();if(!i.includes("chrome-error://")){try{await Fu({promiseGenerator:async()=>e.waitForLoadState("domcontentloaded",{timeout:o}),signal:r,codePath:`loadFrameAndRecordUrlDomContentLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){let s=a;if(s.name==="AbortError")throw new M("UserInfrastructureError",`The page with URL ${Tt(i,50)} did not load within the configured timeout (${o}ms): ${s}`);if(!s.message.includes("detached"))throw s}try{await Fu({promiseGenerator:async()=>e.waitForLoadState("load",{timeout:o}),signal:r,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:r=!1}=e??{};return r||(await this.waitForPageLoad(),await this.waitForStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let e=await this.getRawCondensedHtml();return s5.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:r,error:n}=await Yt({fn:()=>window.getCondensedHtmlTree(),root:e,arg:void 0,timeout:tt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!r)throw new M("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return r}registerDialogHandler(e){let r=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",r)}async evaluateFunctionInAllFrames(e,r){return this.stateManager.executeFunctionInAllFrames(e,r)}async evaluateFunctionInPage(e,r,n,o=tt){let i=await this.getActivePageOrFrame();return Yt({root:i,fn:e,arg:r,timeout:o,waitForPageLoad:()=>this.waitForPageLoad(),codePath:n})}async evaluateCodeInPage({code:e,fragment:r,context:n,timeoutMs:o=Di}){let i=MM(),a={code:e,fragment:r,context:n},{result:s}=await X(this.page.evaluate(i,a),{milliseconds:o,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new M("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${o/1e3} seconds`)},signal:this.abortSignal});return s}async getDomNodeFromPixelPosition(e,r){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:tt});let n;try{n=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:e,y:r},timeout:Fe})}catch(o){throw this.logger.error({err:o,x:e,y:r},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return n}async getDomNodeFromPositionPercentages(e,{percentX:r,percentY:n}){if(r<0||r>1||n<0||n>1)throw new M("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*r),d=Math.ceil(i*n),p=u+l,m=d+c;return this.getDomNodeFromPixelPosition(p,m)}async highlightFromPositionPercentages(e){let r=await this.getActivePageOrFrame(),n;try{n=await this.getDomNodeFromPositionPercentages(r,e)}catch{}return n?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:Fe,params:{highlightConfig:sO,backendNodeId:n.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:Fe,method:"Overlay.hideHighlight",params:{backendNodeId:n?.backendNodeId}})}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:Fe})}catch{}}async getTargetFromPositionPercentages(e){let r=await this.getActivePageOrFrame(),n=await this.getDomNodeFromPositionPercentages(r,e);return this.getTargetFromBackendNodeId({root:r,backendNodeId:n.backendNodeId,allowNotActionableNodesOverride:e.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:e,backendNodeId:r,allowNotActionableNodesOverride:n}){let o=this.stateManager.domGraph?.backendIdToNode[r];if(!o)throw new Error("No DOM node was found with the given backend ID");let i=o?.attributes[ts],a=parseInt(i??"");if(!i||isNaN(a))throw new Error("No data-momentic-id was found on the DOM node");let s=e.locator(li(a)),c=await this.fetchHtmlAttributes({locator:s,logger:this.logger,allowNotActionableNodesOverride:n}),l={id:-1,dataMomenticId:a,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...c};return this.logger.debug({target:l},"Tied backend ID to HTML node"),{target:l,locator:s}}async performTargetRedirection(e,r){try{return await this.scrollIntoViewIfNeeded(e.locator),await X(this.performTargetRedirectionHelper(e,r),{milliseconds:ie})}catch(n){r.warn({err:n},"Error performing target redirection, using original element");return}}async performTargetRedirectionHelper(e,r){let n=Date.now(),{locator:o,originalElementLocationResult:i}=e,a=await o.boundingBox({timeout:ie});if(!a){r.error(`Attempted to click on element with no bounding box: ${i?.serializedElement}`);return}let{x:s,y:c,width:l,height:u}=a,d=this.getViewport();if(s<0||c<0||!d||s+l>d.width||c+u>d.height){r.info("Skipping locator redirection because the element is outside the viewport");return}let p=await this.getActivePageOrFrame(),{dataMomenticId:m,mPathSelector:h,error:g,serializedElement:f,foundElementRelativePoint:S,force:b,logs:y}=await o.evaluate(w=>{let P=window;if(!P.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return P.performTargetRedirection(w)},void 0,{timeout:Fe}),T=Date.now()-n;if(g){r.warn({error:g,serializedElement:f,duration:T,force:b,logs:y},"Got error from target redirection with bounding box");return}else{if(m)return r.info({newDataMomenticId:m,serializedElement:f,duration:T,force:b,logs:y},"Redirected target to new element with bounding box with data-momentic-id"),{locator:p.locator(li(m)),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:S,force:b}};if(h)return r.info({newMPathSelector:h,serializedElement:f,duration:T,force:b,logs:y},"Redirected target to new element with bounding box with mPath"),{locator:p.locator(h),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:S,force:b}};if(S)return r.info({foundElementRelativePoint:S,serializedElement:f,duration:T,force:b,logs:y},"Chose specific visible point on original element"),{locator:o,originalElementLocationResult:i,serverSideBoundingBox:await o.boundingBox({timeout:ie}),hints:{relativeXYToLocator:S,force:b}};if(b)return r.info({serializedElement:f,duration:T,force:b,logs:y},"Forcing click on original element"),{locator:o,serverSideBoundingBox:await o.boundingBox({timeout:ie}),originalElementLocationResult:i,hints:{force:b}}}}async fetchHtmlAttributes({locator:e,logger:r=this.logger,originalElementLocationResult: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",originalElementLocationResult:n,showZeroOpacityElements:o?!0:a},{timeout:tt});if("error"in s&&s.error)throw s.error.startsWith(aM)?new qo(s.error):s.error.startsWith(sM)?new Sp(s.error):new Error(s.error);return s.warnings.length&&r.warn(s,"Got warnings while generating HTML attributes for target"),s.attributes}async moveMouseFromPositionPercentages(e,r){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*r);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,r,n){let o=this.getViewport();if(!o)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(o.width*r),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:Fe})}async scrollFromPositionPercentages(e,r,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*r);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!!hM}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(e){setTimeout(()=>{try{e.cleanup()}catch(r){this.logger.debug({err:r,filePath:e.filePath},"Failed cleaning up file after upload")}},3e4),await this.setFileChooserHandlerHelper(e)}logToUserConsole(e,r,n,...o){let i=this.context.pages().indexOf(e);i=i===-1?0:i,oE(e,this.debugData,i,{type:r,text:`[MOMENTIC] ${n}`,args:o})}async setFileChooserHandlerHelper({filePath:e,filename:r}){if(!Ag(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=r?.trim()||FO(e),o=o5(e),i=u5(e),a=Au[i];this.page.once("filechooser",async c=>{this.logger.info({filePath:e,fileName:n},"File chooser triggered");try{if(!Ag(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:l5.getType(e)||"application/octet-stream"},{timeout:dg})}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),m=new Array(p.length);for(let g=0;g<p.length;g++)m[g]=p.charCodeAt(g);let h=new Uint8Array(m);d.MomenticFile=class extends Blob{kind="file";name=d.momenticFileName;constructor(){super([h],{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([h]);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 r={...this.debugData};return this.debugData={logsPerPage:[]},r}async copy(e){try{await this.evaluateFunctionInPage(r=>navigator.clipboard.writeText(r),e,"copying text to clipboard")}catch(r){if(r instanceof Error&&r.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 r}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:!0})}async registerRequestListener(e){return this.page.waitForResponse(r=>{let n=r.request();return e.matches({url:n.url(),method:n.method()})})}registerRequestRecorder(e,r){this.requestRecorders[e]=r}removeRequestRecorder(e){delete this.requestRecorders[e]}setHeader(e,r,n){this.customHeaders.push({key:e.toLowerCase(),value:r,matcher:n})}registerMock(e,r,n,o){let i=e??vg();return this.mocks[i]={matcher:r,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??dM}get userBrowserSettings(){return Ju(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??Bl}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let e=hg();for(let r of e)if(!(!Ag(r)||!kO(r).isDirectory()||!["new","pending","completed"].some(o=>{let i=d5(r,o);return Ag(i)&&kO(i).isDirectory()&&i5(i).length>0})))return r}};import f6 from"fetch-cookie";import{cloneDeep as C0}from"lodash-es";import Z$e,{multistream as eWe}from"pino";import rWe from"pino-pretty";var iWe=5*1024,m5="...[truncated]",aWe=Buffer.byteLength(m5,"utf8");import{PostHog as g5}from"posthog-node";async function BO(t,e){let r,n=0,o=3,i,a;for(;n<o;)try{let s=await X(t.getAllFlagsAndPayloads(e),{milliseconds:5e3});i=s.featureFlags||{},a=s.featureFlagPayloads||{};break}catch(s){r=s,n++,await new Promise(c=>setTimeout(c,100*n))}if(i&&a)return{flags:i,payloads:a};throw r}var Rg=class t extends vu{constructor(r,n,o,i){super(o,i);this.client=r;this.orgId=n}static async init(r){let n=new g5("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://us.i.posthog.com"}),{flags:o,payloads:i}=await BO(n,r);return new t(n,r,o,i)}async refresh(){let{flags:r,payloads:n}=await BO(this.client,this.orgId);this.flags=r,this.payloads=n}};import{randomUUID as h5}from"node:crypto";import{PostHog as f5}from"posthog-node";var Cg=class t{bindings;client;options;constructor(e,r={}){this.bindings=e,this.options=r,this.client=new f5("phc_oy1FexHsc0S3axxOMXCm46yZsW35zROAoV4SOzpDSXH",{host:"https://us.i.posthog.com",...r})}async shutdown(){await this.client.shutdown()}identify(e){return this.bindings={...this.bindings,...e},this}child(e){return new t({...this.bindings,...e},this.options)}track(e,r){if(!YC(this.bindings))return console.error(`Cannot track ${e.type} event without required bindings.`,this.bindings),this;let{type:n,...o}=e;return this.client.capture({distinctId:h5(),event:n,timestamp:r?.timestamp,properties:{...this.bindings,...o}}),this}};import{execSync as S5}from"child_process";import is from"os";import y5 from"v8";var b5=2e3,zO,wg,HO=is.platform(),E5=is.cpus().map(t=>({model:t.model,speed:t.speed})).reduce((t,e)=>(t[e.model]={speed:e.speed},t.totalCores=(t.totalCores??0)+1,t),{});function OE(t=Date.now()){let e=is.cpus(),r={measurementTime:t,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let n of e)r.user+=n.times.user,r.nice+=n.times.nice,r.sys+=n.times.sys,r.idle+=n.times.idle,r.irq+=n.times.irq;return r.total=r.user+r.nice+r.sys+r.idle+r.irq,r}function jO(t,e){let r={user:e.user-t.user,nice:e.nice-t.nice,sys:e.sys-t.sys,idle:e.idle-t.idle,irq:e.irq-t.irq,total:e.total-t.total};return r.total<=0?null:{measurementTime:e.measurementTime,intervalMs:e.measurementTime-t.measurementTime,user:r.user/r.total*100,nice:r.nice/r.total*100,sys:r.sys/r.total*100,idle:r.idle/r.total*100,irq:r.irq/r.total*100,total:100-r.idle/r.total*100}}function T5(){let t=OE();return()=>{let e=OE(),r=jO(t,e);return t=e,r}}function v5(){let t=process.cpuUsage(),e=process.hrtime.bigint();return()=>{let r=process.cpuUsage(),n=process.hrtime.bigint(),o=Number(n-e)/1e6,i=r.user-t.user,a=r.system-t.system;if(t=r,e=n,o<=0)return null;let s=Math.max(is.cpus().length,1),c=l=>Math.max(0,l/1e3/o*100/s);return{total:c(i+a),user:c(i),sys:c(a),intervalMs:o}}}function GO({intervalMs:t=b5,maxSamples:e=1e4,keepSamples:r=!0,onSample:n}={}){let o=[],i=T5(),a=v5(),s=()=>{let u=Date.now(),d=WO(),p=process.memoryUsage(),m=i(),h=a(),g={timestamp:u,system:{cpu:m,memory:{total:d.totalMemory,free:d.freeMemory,freePercentage:d.freePercentage}},process:{cpu:h,memory:{rss:p.rss,heapTotal:p.heapTotal,heapUsed:p.heapUsed,external:p.external,arrayBuffers:p.arrayBuffers}}};n?.(g),r&&(o.push(g),o.length>e&&o.shift())};s();let c=setInterval(s,t),l=u=>({samples:r?[...o]:[]});return{stop:()=>(clearInterval(c),l(Date.now())),getSeries:()=>l(Date.now())}}var xg=t=>{try{let e={},r=!1,n=WO(),o=A5(),i=`${Math.round(n.freePercentage*100)}%`;n.freePercentage<.05&&(Object.assign(e,process.memoryUsage()),r=!0);let a=`${o?Math.round(o.idle):"unknown"}%`;o&&o?.total>80&&(r=!0);let s=y5.getHeapStatistics(),c=s.used_heap_size,l=s.heap_size_limit;c/l>.9&&(r=!0),r?(t.warn({memory:n,cpu:o,heapStats:s,...e},"Critical resource usage metrics detected"),Va&&A.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):t.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}},VO=t=>{xg(t),setTimeout(()=>xg(t),5e3)};function $O(t){if(!Pn)return xg(t),{interval:setInterval(()=>xg(t),2e4),cpuMetadata:E5,platform:HO}}function WO(){let t=is.totalmem(),e=HO==="darwin"?R5():(()=>{let n=is.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),r=e.availableMemory/t;return{totalMemory:t,freeMemory:e.availableMemory,freePercentage:r}}function A5(){let t=OE();if(!wg)return wg=t,null;let e=jO(wg,t);return wg=t,e?(zO=e,zO):null}function R5(){try{let t=S5("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),r=t.match(/page size of (\d+) bytes/)?.[1],n=r?Number.parseInt(r,10):4096,o=u=>{let p=t.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return p?Number.parseInt(p,10):0},i=o("Pages free"),a=o("Pages inactive"),s=o("Pages speculative"),c=i*n,l=(a+s)*n;return{availableMemory:c+l,rawFreeMemory:c,cachedMemory:l}}catch{let t=is.freemem();return{availableMemory:t,rawFreeMemory:t,cachedMemory:0}}}var _g=class{increment(e,r,n){}gauge(e,r){}distribution(e,r,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function C5(t){if(!t||t.length===0)return{};let e={};for(let r of t){let n=r.indexOf(":");if(n>-1){let o=r.slice(0,n).trim(),i=r.slice(n+1).trim();o&&(e[o]=i);continue}e[r]=!0}return e}function Ig(t,e){let r=C5(t);return!e||Object.keys(e).length===0?r:{...e,...r}}var bL="=",Lg=";",VE=",";var EL=8192;var $l={};vB($l,{getKeyPairs:()=>o3,parseKeyPairsIntoRecord:()=>i3,parsePairKeyValue:()=>TL,serializeKeyPairs:()=>n3});bt();var r3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function n3(t){return t.reduce(function(e,r){var n=""+e+(e!==""?VE:"")+r;return n.length>EL?e:n},"")}function o3(t){return t.getAllEntries().map(function(e){var r=r3(e,2),n=r[0],o=r[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Lg+o.metadata.toString()),i})}function TL(t){var e=t.split(Lg);if(!(e.length<=0)){var r=e.shift();if(r){var n=r.indexOf(bL);if(!(n<=0)){var o=decodeURIComponent(r.substring(0,n).trim()),i=decodeURIComponent(r.substring(n+1).trim()),a;return e.length>0&&(a=NE(e.join(Lg))),{key:o,value:i,metadata:a}}}}}function i3(t){return typeof t!="string"||t.length===0?{}:t.split(VE).map(function(e){return TL(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,r){return e[r.key]=r.value,e},{})}bt();var Ng;(function(t){t.AlwaysOff="always_off",t.AlwaysOn="always_on",t.ParentBasedAlwaysOff="parentbased_always_off",t.ParentBasedAlwaysOn="parentbased_always_on",t.ParentBasedTraceIdRatio="parentbased_traceidratio",t.TraceIdRatio="traceidratio"})(Ng||(Ng={}));var a3=",",s3=["OTEL_SDK_DISABLED"];function l3(t){return s3.indexOf(t)>-1}var c3=["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 u3(t){return c3.indexOf(t)>-1}var d3=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function p3(t){return d3.indexOf(t)>-1}var $E=1/0,WE=128,m3=128,g3=128,qE={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:Ct.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:m3,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:g3,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Ng.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 h3(t,e,r){if(!(typeof r[t]>"u")){var n=String(r[t]);e[t]=n.toLowerCase()==="true"}}function f3(t,e,r,n,o){if(n===void 0&&(n=-1/0),o===void 0&&(o=1/0),typeof r[t]<"u"){var i=Number(r[t]);isNaN(i)||(i<n?e[t]=n:i>o?e[t]=o:e[t]=i)}}function S3(t,e,r,n){n===void 0&&(n=a3);var o=r[t];typeof o=="string"&&(e[t]=o.split(n).map(function(i){return i.trim()}))}var y3={ALL:Ct.ALL,VERBOSE:Ct.VERBOSE,DEBUG:Ct.DEBUG,INFO:Ct.INFO,WARN:Ct.WARN,ERROR:Ct.ERROR,NONE:Ct.NONE};function b3(t,e,r){var n=r[t];if(typeof n=="string"){var o=y3[n.toUpperCase()];o!=null&&(e[t]=o)}}function vL(t){var e={};for(var r in qE){var n=r;switch(n){case"OTEL_LOG_LEVEL":b3(n,e,t);break;default:if(l3(n))h3(n,e,t);else if(u3(n))f3(n,e,t);else if(p3(n))S3(n,e,t);else{var o=t[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function br(){var t=vL(process.env);return Object.assign({},qE,t)}function AL(t){return t>=48&&t<=57?t-48:t>=97&&t<=102?t-87:t-55}function Dg(t){for(var e=new Uint8Array(t.length/2),r=0,n=0;n<t.length;n+=2){var o=AL(t.charCodeAt(n)),i=AL(t.charCodeAt(n+1));e[r++]=o<<4|i}return e}var RL="1.25.1";var E3="deployment.environment";var T3="process.runtime.name";var v3="service.name";var A3="service.instance.id";var R3="telemetry.sdk.name",C3="telemetry.sdk.language",w3="telemetry.sdk.version";var CL=E3;var wL=T3;var kg=v3;var xL=A3;var od=R3,id=C3,ad=w3;var x3="nodejs";var _L=x3;var Wl,Ug=(Wl={},Wl[od]="opentelemetry",Wl[wL]="node",Wl[id]=_L,Wl[ad]=RL,Wl);var _3=9,I3=6,P3=Math.pow(10,I3),M3=Math.pow(10,_3);function IL(t){var e=t/1e3,r=Math.trunc(e),n=Math.round(t%1e3*P3);return[r,n]}function PL(t){return t[0]*M3+t[1]}function sd(t){return t[0]*1e6+t[1]/1e3}var ss;(function(t){t[t.SUCCESS=0]="SUCCESS",t[t.FAILED=1]="FAILED"})(ss||(ss={}));var ML=function(){function t(){var e=this;this._promise=new Promise(function(r,n){e._resolve=r,e._reject=n})}return Object.defineProperty(t.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),t.prototype.resolve=function(e){this._resolve(e)},t.prototype.reject=function(e){this._reject(e)},t}();var O3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},L3=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},OL=function(){function t(e,r){this._callback=e,this._that=r,this._isCalled=!1,this._deferred=new ML}return Object.defineProperty(t.prototype,"isCalled",{get:function(){return this._isCalled},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"promise",{get:function(){return this._deferred.promise},enumerable:!1,configurable:!0}),t.prototype.call=function(){for(var e,r=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,L3([this._that],O3(n),!1))).then(function(i){return r._deferred.resolve(i)},function(i){return r._deferred.reject(i)})}catch(i){this._deferred.reject(i)}}return this._deferred.promise},t}();var Bn;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE"})(Bn||(Bn={}));var Mr;(function(t){t[t.HISTOGRAM=0]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",t[t.GAUGE=2]="GAUGE",t[t.SUM=3]="SUM"})(Mr||(Mr={}));var N3=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();var j2e=function(t){N3(e,t);function e(r){var n=t.call(this,r)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function LL(t,e){for(var r=0,n=t.length-1;n-r>1;){var o=Math.trunc((n+r)/2);t[o]<=e?r=o:n=o-1}return t[n]<=e?n:t[r]<=e?r:-1}bt();var zn;(function(t){t[t.DROP=0]="DROP",t[t.SUM=1]="SUM",t[t.LAST_VALUE=2]="LAST_VALUE",t[t.HISTOGRAM=3]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(zn||(zn={}));var NL=function(){function t(){this.kind=zn.DROP}return t.prototype.createAccumulation=function(){},t.prototype.merge=function(e,r){},t.prototype.diff=function(e,r){},t.prototype.toMetricData=function(e,r,n,o){},t}();var ke;(function(t){t.COUNTER="COUNTER",t.GAUGE="GAUGE",t.HISTOGRAM="HISTOGRAM",t.UP_DOWN_COUNTER="UP_DOWN_COUNTER",t.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",t.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",t.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(ke||(ke={}));var D3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function k3(t){var e=t.map(function(){return 0});return e.push(0),{buckets:{boundaries:t,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var KE=function(){function t(e,r,n,o){n===void 0&&(n=!0),o===void 0&&(o=k3(r)),this.startTime=e,this._boundaries=r,this._recordMinMax=n,this._current=o}return t.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 r=LL(this._boundaries,e);this._current.buckets.counts[r+1]+=1}},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var YE=function(){function t(e,r){this._boundaries=e,this._recordMinMax=r,this.kind=zn.HISTOGRAM}return t.prototype.createAccumulation=function(e){return new KE(e,this._boundaries,this._recordMinMax)},t.prototype.merge=function(e,r){for(var n=e.toPointValue(),o=r.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 KE(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})},t.prototype.diff=function(e,r){for(var n=e.toPointValue(),o=r.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 KE(r.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})},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.HISTOGRAM,dataPoints:n.map(function(i){var a=D3(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ke.GAUGE||e.type===ke.UP_DOWN_COUNTER||e.type===ke.OBSERVABLE_GAUGE||e.type===ke.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}}})}},t}();bt();var XE=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},JE=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},ZE=function(){function t(e,r,n,o){e===void 0&&(e=new U3),r===void 0&&(r=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=r,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(t.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.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}),t.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(r,n){return e.at(n)})},t.prototype.at=function(e){var r=this.indexBase-this.indexStart;return e<r&&(e+=this.backing.length),e-=r,this.backing.countAt(e)},t.prototype.incrementBucket=function(e,r){this.backing.increment(e,r)},t.prototype.decrementBucket=function(e,r){this.backing.decrement(e,r)},t.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()},t.prototype.downscale=function(e){this._rotate();for(var r=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<r;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},t.prototype.clone=function(){return new t(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},t.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)},t.prototype._relocateBucket=function(e,r){e!==r&&this.incrementBucket(e,this.backing.emptyBucket(r))},t}();var U3=function(){function t(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(t.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),t.prototype.countAt=function(e){return this._counts[e]},t.prototype.growTo=function(e,r,n){var o=new Array(e).fill(0);o.splice.apply(o,JE([n,this._counts.length-r],XE(this._counts.slice(r)),!1)),o.splice.apply(o,JE([0,r],XE(this._counts.slice(0,r)),!1)),this._counts=o},t.prototype.reverse=function(e,r){for(var n=Math.floor((e+r)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[r-o-1],this._counts[r-o-1]=i}},t.prototype.emptyBucket=function(e){var r=this._counts[e];return this._counts[e]=0,r},t.prototype.increment=function(e,r){this._counts[e]+=r},t.prototype.decrement=function(e,r){this._counts[e]>=r?this._counts[e]-=r:this._counts[e]=0},t.prototype.clone=function(){return new t(JE([],XE(this._counts),!1))},t}();var DL=52,F3=2146435072,B3=1048575,QE=1023,Fg=-QE+1,Bg=QE,ld=Math.pow(2,-1022);function zg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=(r&F3)>>20;return n-QE}function Hg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=e.getUint32(4),o=(r&B3)*Math.pow(2,32);return o+n}function cd(t,e){return t===0||t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY||Number.isNaN(t)?t:t*Math.pow(2,e)}function UL(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t}var z3=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ea=function(t){z3(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(Error);var BL=function(){function t(e){this._shift=-e}return t.prototype.mapToIndex=function(e){if(e<ld)return this._minNormalLowerBoundaryIndex();var r=zg(e),n=this._rightShift(Hg(e)-1,DL);return r+n>>this._shift},t.prototype.lowerBoundary=function(e){var r=this._minNormalLowerBoundaryIndex();if(e<r)throw new ea("underflow: "+e+" is < minimum lower boundary: "+r);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new ea("overflow: "+e+" is > maximum lower boundary: "+n);return cd(1,e<<this._shift)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){var e=Fg>>this._shift;return this._shift<2&&e--,e},t.prototype._maxNormalLowerBoundaryIndex=function(){return Bg>>this._shift},t.prototype._rightShift=function(e,r){return Math.floor(e*Math.pow(2,-r))},t}();var zL=function(){function t(e){this._scale=e,this._scaleFactor=cd(Math.LOG2E,e),this._inverseFactor=cd(Math.LN2,-e)}return t.prototype.mapToIndex=function(e){if(e<=ld)return this._minNormalLowerBoundaryIndex()-1;if(Hg(e)===0){var r=zg(e);return(r<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},t.prototype.lowerBoundary=function(e){var r=this._maxNormalLowerBoundaryIndex();if(e>=r){if(e===r)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new ea("overflow: "+e+" is > maximum lower boundary: "+r)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return ld;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new ea("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){return Fg<<this._scale},t.prototype._maxNormalLowerBoundaryIndex=function(){return(Bg+1<<this._scale)-1},t}();var HL=-10,jL=20,H3=Array.from({length:31},function(t,e){return e>10?new zL(e-10):new BL(e-10)});function eT(t){if(t>jL||t<HL)throw new ea("expected scale >= "+HL+" && <= "+jL+", got: "+t);return H3[t+10]}var j3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},jg=function(){function t(e,r){this.low=e,this.high=r}return t.combine=function(e,r){return new t(Math.min(e.low,r.low),Math.max(e.high,r.high))},t}(),G3=20,V3=160,tT=2,$3=function(){function t(e,r,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),r===void 0&&(r=V3),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 ZE),u===void 0&&(u=new ZE),d===void 0&&(d=eT(G3)),this.startTime=e,this._maxSize=r,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<tT&&(Z.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+tT),this._maxSize=tT)}return t.prototype.record=function(e){this.updateByIncrement(e,1)},t.prototype.setStartTime=function(e){this.startTime=e},t.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(t.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),t.prototype.updateByIncrement=function(e,r){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=r,e===0){this._zeroCount+=r;return}this._sum+=e*r,e>0?this._updateBuckets(this._positive,e,r):this._updateBuckets(this._negative,-e,r)}},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._mergeBuckets(this.positive,e,e.positive,r),this._mergeBuckets(this.negative,e,e.negative,r)},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._diffBuckets(this.positive,e,e.positive,r),this._diffBuckets(this.negative,e,e.negative,r)},t.prototype.clone=function(){return new t(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},t.prototype._updateBuckets=function(e,r,n){var o=this._mapping.mapToIndex(r),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(r)}this._incrementIndexBy(e,o,n)},t.prototype._incrementIndexBy=function(e,r,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=r),r<e.indexStart){var o=e.indexEnd-r;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=r}else if(r>e.indexEnd){var o=r-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=r}var i=r-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},t.prototype._grow=function(e,r){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=UL(r);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},t.prototype._changeScale=function(e,r){for(var n=0;e-r>=this._maxSize;)e>>=1,r>>=1,n++;return n},t.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var r=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=eT(r)}},t.prototype._minScale=function(e){var r=Math.min(this.scale,e.scale),n=jg.combine(this._highLowAtScale(this.positive,this.scale,r),this._highLowAtScale(e.positive,e.scale,r)),o=jg.combine(this._highLowAtScale(this.negative,this.scale,r),this._highLowAtScale(e.negative,e.scale,r));return Math.min(r-this._changeScale(n.high,n.low),r-this._changeScale(o.high,o.low))},t.prototype._highLowAtScale=function(e,r,n){if(e.length===0)return new jg(0,-1);var o=r-n;return new jg(e.indexStart>>o,e.indexEnd>>o)},t.prototype._mergeBuckets=function(e,r,n,o){for(var i=n.offset,a=r.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},t.prototype._diffBuckets=function(e,r,n,o){for(var i=n.offset,a=r.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()},t}();var GL=function(){function t(e,r){this._maxSize=e,this._recordMinMax=r,this.kind=zn.EXPONENTIAL_HISTOGRAM}return t.prototype.createAccumulation=function(e){return new $3(e,this._maxSize,this._recordMinMax)},t.prototype.merge=function(e,r){var n=r.clone();return n.merge(e),n},t.prototype.diff=function(e,r){var n=r.clone();return n.diff(e),n},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=j3(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ke.GAUGE||e.type===ke.UP_DOWN_COUNTER||e.type===ke.OBSERVABLE_GAUGE||e.type===ke.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}}})}},t}();var W3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},rT=function(){function t(e,r,n){r===void 0&&(r=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=r,this.sampleTime=n}return t.prototype.record=function(e){this._current=e,this.sampleTime=IL(Date.now())},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var VL=function(){function t(){this.kind=zn.LAST_VALUE}return t.prototype.createAccumulation=function(e){return new rT(e)},t.prototype.merge=function(e,r){var n=sd(r.sampleTime)>=sd(e.sampleTime)?r:e;return new rT(e.startTime,n.toPointValue(),n.sampleTime)},t.prototype.diff=function(e,r){var n=sd(r.sampleTime)>=sd(e.sampleTime)?r:e;return new rT(r.startTime,n.toPointValue(),n.sampleTime)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.GAUGE,dataPoints:n.map(function(i){var a=W3(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},t}();var q3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ud=function(){function t(e,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=r,this._current=n,this.reset=o}return t.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var nT=function(){function t(e){this.monotonic=e,this.kind=zn.SUM}return t.prototype.createAccumulation=function(e){return new ud(e,this.monotonic)},t.prototype.merge=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return r.reset?new ud(r.startTime,this.monotonic,o,r.reset):new ud(e.startTime,this.monotonic,n+o)},t.prototype.diff=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return this.monotonic&&n>o?new ud(r.startTime,this.monotonic,o,!0):new ud(r.startTime,this.monotonic,o-n)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.SUM,dataPoints:n.map(function(i){var a=q3(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},t}();var ls=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),No=function(){function t(){}return t.Drop=function(){return ZL},t.Sum=function(){return QL},t.LastValue=function(){return eN},t.Histogram=function(){return tN},t.ExponentialHistogram=function(){return K3},t.Default=function(){return Y3},t}();var $L=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new NL,e}(No);var WL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){switch(r.type){case ke.COUNTER:case ke.OBSERVABLE_COUNTER:case ke.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new nT(!0),e.NON_MONOTONIC_INSTANCE=new nT(!1),e}(No);var qL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new VL,e}(No);var KL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new YE([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(No);var YL=function(t){ls(e,t);function e(r,n){n===void 0&&(n=!0);var o=t.call(this)||this;if(o._recordMinMax=n,r==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");r=r.concat(),r=r.sort(function(s,c){return s-c});var i=r.lastIndexOf(-1/0),a=r.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=r.slice(i+1,a),o}return e.prototype.createAggregator=function(r){return new YE(this._boundaries,this._recordMinMax)},e}(No);var XL=function(t){ls(e,t);function e(r,n){r===void 0&&(r=160),n===void 0&&(n=!0);var o=t.call(this)||this;return o._maxSize=r,o._recordMinMax=n,o}return e.prototype.createAggregator=function(r){return new GL(this._maxSize,this._recordMinMax)},e}(No);var JL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype._resolve=function(r){switch(r.type){case ke.COUNTER:case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:return QL;case ke.GAUGE:case ke.OBSERVABLE_GAUGE:return eN;case ke.HISTOGRAM:return r.advice.explicitBucketBoundaries?new YL(r.advice.explicitBucketBoundaries):tN}return Z.warn("Unable to recognize instrument type: "+r.type),ZL},e.prototype.createAggregator=function(r){return this._resolve(r).createAggregator(r)},e}(No);var ZL=new $L,QL=new WL,eN=new qL,tN=new KL,K3=new XL,Y3=new JL;bt();function Gg(){return"unknown_service:"+process.argv0}var ta=function(){return ta=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ta.apply(this,arguments)},X3=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},J3=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},Z3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},oT=function(){function t(e,r){var n=this,o;this._attributes=e,this.asyncAttributesPending=r!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=r?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return Z.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return t.empty=function(){return t.EMPTY},t.default=function(){var e;return new t((e={},e[kg]=Gg(),e[id]=Ug[id],e[od]=Ug[od],e[ad]=Ug[ad],e))},Object.defineProperty(t.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&Z.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),t.prototype.waitForAsyncAttributes=function(){return X3(this,void 0,void 0,function(){return J3(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]}})})},t.prototype.merge=function(e){var r=this,n;if(!e)return this;var o=ta(ta({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new t(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=Z3(a,2),l=c[0],u=c[1];return ta(ta(ta(ta({},r._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new t(o,i)},t.EMPTY=new t({}),t}();var cs;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE",t[t.LOWMEMORY=2]="LOWMEMORY"})(cs||(cs={}));bt();var Q3=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},eX=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},iT=function(){return Bn.CUMULATIVE},rN=function(t){switch(t){case ke.COUNTER:case ke.OBSERVABLE_COUNTER:case ke.GAUGE:case ke.HISTOGRAM:case ke.OBSERVABLE_GAUGE:return Bn.DELTA;case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:return Bn.CUMULATIVE}},nN=function(t){switch(t){case ke.COUNTER:case ke.HISTOGRAM:return Bn.DELTA;case ke.GAUGE:case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:case ke.OBSERVABLE_COUNTER:case ke.OBSERVABLE_GAUGE:return Bn.CUMULATIVE}};function tX(){var t=br(),e=t.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?iT:e==="delta"?rN:e==="lowmemory"?nN:(Z.warn("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '"+t.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE+"', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead."),iT)}function rX(t){return t!=null?t===cs.DELTA?rN:t===cs.LOWMEMORY?nN:iT:tX()}function nX(t){return t?.aggregationPreference?t.aggregationPreference:function(e){return No.Default()}}var oN=function(){function t(e,r){this._otlpExporter=e,this._aggregationSelector=nX(r),this._aggregationTemporalitySelector=rX(r?.temporalityPreference)}return t.prototype.export=function(e,r){this._otlpExporter.export([e],r)},t.prototype.shutdown=function(){return Q3(this,void 0,void 0,function(){return eX(this,function(e){switch(e.label){case 0:return[4,this._otlpExporter.shutdown()];case 1:return e.sent(),[2]}})})},t.prototype.forceFlush=function(){return Promise.resolve()},t.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},t.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},t}();bt();bt();var oX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},iN=1e4,aN=5,sN=1e3,lN=5e3,cN=1.5;function dd(t){t===void 0&&(t={});var e={};return Object.entries(t).forEach(function(r){var n=oX(r,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):Z.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function aT(t,e){return t.endsWith("/")||(t=t+"/"),t+e}function sT(t){try{var e=new URL(t);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return Z.warn("Could not parse export URL: '"+t+"'"),t}}function lT(t){return typeof t=="number"?t<=0?cT(t,iN):t:iX()}function iX(){var t,e=Number((t=br().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&t!==void 0?t:br().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?cT(e,iN):e}function cT(t,e){return Z.warn("Timeout must be greater than 0",t),e}function uN(t){var e=[429,502,503,504];return e.includes(t)}function dN(t){if(t==null)return-1;var e=Number.parseInt(t,10);if(Number.isInteger(e))return e>0?e*1e3:-1;var r=new Date(t).getTime()-Date.now();return r>=0?r:0}var pN=function(){function t(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 OL(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=lT(e.timeoutMillis),this.onInit(e)}return t.prototype.export=function(e,r){if(this._shutdownOnce.isCalled){r({code:ss.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){r({code:ss.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){r({code:ss.SUCCESS})}).catch(function(n){r({code:ss.FAILED,error:n})})},t.prototype._export=function(e){var r=this;return new Promise(function(n,o){try{Z.debug("items to be sent",e),r.send(e,n,o)}catch(i){o(i)}})},t.prototype.shutdown=function(){return this._shutdownOnce.call()},t.prototype.forceFlush=function(){return Promise.all(this._sendingPromises).then(function(){})},t.prototype._shutdown=function(){return Z.debug("shutdown started"),this.onShutdown(),this.forceFlush()},t}();bt();import*as uT from"url";import*as $g from"http";import*as Wg from"https";import*as mN from"zlib";import{Readable as sX}from"stream";var ra;(function(t){t.NONE="none",t.GZIP="gzip"})(ra||(ra={}));var aX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ql=function(t){aX(e,t);function e(r,n,o){var i=t.call(this,r)||this;return i.name="OTLPExporterError",i.data=o,i.code=n,i}return e}(Error);var Vg=function(){return Vg=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Vg.apply(this,arguments)};function dT(t,e,r,n,o){var i=t.timeoutMillis,a=new uT.URL(t.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 ql("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:Vg({"Content-Type":r},t.headers),agent:t.agent},m=a.protocol==="http:"?$g.request:Wg.request,h=function(g,f){switch(g===void 0&&(g=aN),f===void 0&&(f=sN),l=m(p,function(b){var y="";b.on("data",function(T){return y+=T}),b.on("aborted",function(){if(u){var T=new ql("Request Timeout");o(T)}}),b.on("end",function(){if(u===!1)if(b.statusCode&&b.statusCode<299)Z.debug("statusCode: "+b.statusCode,y),n(),clearTimeout(d),clearTimeout(c);else if(b.statusCode&&uN(b.statusCode)&&g>0){var T=void 0;f=cN*f,b.headers["retry-after"]?T=dN(b.headers["retry-after"]):T=Math.round(Math.random()*(lN-f)+f),c=setTimeout(function(){h(g-1,f)},T)}else{var w=new ql(b.statusMessage,b.statusCode,y);o(w),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(b){if(u){var y=new ql("Request Timeout",b.code);o(y)}else o(b);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var b=new ql("Request Timeout");o(b)}clearTimeout(d),clearTimeout(c)}),t.compression){case ra.GZIP:{l.setHeader("Content-Encoding","gzip");var S=lX(e);S.on("error",o).pipe(mN.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};h()}function lX(t){var e=new sX;return e.push(t),e.push(null),e}function pT(t){if(t.httpAgentOptions&&t.keepAlive===!1){Z.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(t.keepAlive===!1||!t.url))try{var e=new uT.URL(t.url),r=e.protocol==="http:"?$g.Agent:Wg.Agent;return new r(Vg({keepAlive:!0},t.httpAgentOptions))}catch(n){Z.error("collector exporter failed to create http agent. err: "+n.message);return}}function mT(t){if(t)return t;var e=br().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||br().OTEL_EXPORTER_OTLP_COMPRESSION;return e===ra.GZIP?ra.GZIP:ra.NONE}bt();var cX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),qg=function(t){cX(e,t);function e(r,n,o){r===void 0&&(r={});var i=t.call(this,r)||this;return i.DEFAULT_HEADERS={},i._contentType=o,r.metadata&&Z.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,dd(r.headers),$l.parseKeyPairsIntoRecord(br().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=pT(r),i.compression=mT(r.compression),i._serializer=n,i}return e.prototype.onInit=function(r){},e.prototype.send=function(r,n,o){var i=this;if(this._shutdownOnce.isCalled){Z.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;dT(i,(u=i._serializer.serializeRequest(r))!==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}(pN);function hN(t){var e=BigInt(1e9);return BigInt(t[0])*e+BigInt(t[1])}function uX(t){var e=Number(BigInt.asUintN(32,t)),r=Number(BigInt.asUintN(32,t>>BigInt(32)));return{low:e,high:r}}function fN(t){var e=hN(t);return uX(e)}function dX(t){var e=hN(t);return e.toString()}var pX=typeof BigInt<"u"?dX:PL;function gN(t){return t}function SN(t){if(t!==void 0)return Dg(t)}var mX={encodeHrTime:fN,encodeSpanContext:Dg,encodeOptionalSpanContext:SN};function yN(t){var e,r;if(t===void 0)return mX;var n=(e=t.useLongBits)!==null&&e!==void 0?e:!0,o=(r=t.useHex)!==null&&r!==void 0?r:!1;return{encodeHrTime:n?fN:pX,encodeSpanContext:o?gN:Dg,encodeOptionalSpanContext:o?gN:SN}}var gX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function bN(t){return{name:t.name,version:t.version}}function Kl(t){return Object.keys(t).map(function(e){return EN(e,t[e])})}function EN(t,e){return{key:t,value:TN(e)}}function TN(t){var e=typeof t;return e==="string"?{stringValue:t}:e==="number"?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:e==="boolean"?{boolValue:t}:t instanceof Uint8Array?{bytesValue:t}:Array.isArray(t)?{arrayValue:{values:t.map(TN)}}:e==="object"&&t!=null?{kvlistValue:{values:Object.entries(t).map(function(r){var n=gX(r,2),o=n[0],i=n[1];return EN(o,i)})}}:{}}function vN(t){return{attributes:Kl(t.attributes),droppedAttributesCount:0}}bt();function RN(t,e){var r=yN(e);return{resource:vN(t.resource),schemaUrl:void 0,scopeMetrics:hX(t.scopeMetrics,r)}}function hX(t,e){return Array.from(t.map(function(r){return{scope:bN(r.scope),metrics:r.metrics.map(function(n){return fX(n,e)}),schemaUrl:r.scope.schemaUrl}}))}function fX(t,e){var r={name:t.descriptor.name,description:t.descriptor.description,unit:t.descriptor.unit},n=EX(t.aggregationTemporality);switch(t.dataPointType){case Mr.SUM:r.sum={aggregationTemporality:n,isMonotonic:t.isMonotonic,dataPoints:AN(t,e)};break;case Mr.GAUGE:r.gauge={dataPoints:AN(t,e)};break;case Mr.HISTOGRAM:r.histogram={aggregationTemporality:n,dataPoints:yX(t,e)};break;case Mr.EXPONENTIAL_HISTOGRAM:r.exponentialHistogram={aggregationTemporality:n,dataPoints:bX(t,e)};break}return r}function SX(t,e,r){var n={attributes:Kl(t.attributes),startTimeUnixNano:r.encodeHrTime(t.startTime),timeUnixNano:r.encodeHrTime(t.endTime)};switch(e){case gn.INT:n.asInt=t.value;break;case gn.DOUBLE:n.asDouble=t.value;break}return n}function AN(t,e){return t.dataPoints.map(function(r){return SX(r,t.descriptor.valueType,e)})}function yX(t,e){return t.dataPoints.map(function(r){var n=r.value;return{attributes:Kl(r.attributes),bucketCounts:n.buckets.counts,explicitBounds:n.buckets.boundaries,count:n.count,sum:n.sum,min:n.min,max:n.max,startTimeUnixNano:e.encodeHrTime(r.startTime),timeUnixNano:e.encodeHrTime(r.endTime)}})}function bX(t,e){return t.dataPoints.map(function(r){var n=r.value;return{attributes:Kl(r.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(r.startTime),timeUnixNano:e.encodeHrTime(r.endTime)}})}function EX(t){switch(t){case Bn.DELTA:return 1;case Bn.CUMULATIVE:return 2}}function CN(t,e){return{resourceMetrics:t.map(function(r){return RN(r,e)})}}var gT={serializeRequest:function(t){var e=CN(t,{useLongBits:!1}),r=new TextEncoder;return r.encode(JSON.stringify(e))},deserializeResponse:function(t){var e=new TextDecoder;return JSON.parse(e.decode(t))}};var wN="0.52.1";var xN=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Yl=function(){return Yl=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Yl.apply(this,arguments)},_N="v1/metrics",TX="http://localhost:4318/"+_N,vX={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+wN},AX=function(t){xN(e,t);function e(r){var n=t.call(this,r,gT,"application/json")||this;return n.headers=Yl(Yl(Yl(Yl({},n.headers),vX),$l.parseKeyPairsIntoRecord(br().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),dd(r?.headers)),n}return e.prototype.getDefaultUrl=function(r){return typeof r.url=="string"?r.url:br().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?sT(br().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):br().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?aT(br().OTEL_EXPORTER_OTLP_ENDPOINT,_N):TX},e}(qg),IN=function(t){xN(e,t);function e(r){return t.call(this,new AX(r),r)||this}return e}(oN);var Xl;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE"})(Xl||(Xl={}));var Do;(function(t){t[t.HISTOGRAM=0]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",t[t.GAUGE=2]="GAUGE",t[t.SUM=3]="SUM"})(Do||(Do={}));bt();var RX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),PN=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},MN=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},CX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},wX=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},xX=function(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};function ON(t){return t!=null}function Kg(t){var e=Object.keys(t);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(r){return[r,t[r]]})))}function LN(t){var e,r;return t.name+":"+((e=t.version)!==null&&e!==void 0?e:"")+":"+((r=t.schemaUrl)!==null&&r!==void 0?r:"")}var hT=function(t){RX(e,t);function e(r){var n=t.call(this,r)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function na(t,e){var r,n=new Promise(function(i,a){r=setTimeout(function(){a(new hT("Operation timed out."))},e)});return Promise.race([t,n]).then(function(o){return clearTimeout(r),o},function(o){throw clearTimeout(r),o})}function NN(t){return PN(this,void 0,void 0,function(){var e=this;return MN(this,function(r){return[2,Promise.all(t.map(function(n){return PN(e,void 0,void 0,function(){var o,i;return MN(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 DN(t){return t.status==="rejected"}function fT(t,e){var r=[];return t.forEach(function(n){r.push.apply(r,wX([],CX(e(n)),!1))}),r}function kN(t,e){var r,n;if(t.size!==e.size)return!1;try{for(var o=xX(t),i=o.next();!i.done;i=o.next()){var a=i.value;if(!e.has(a))return!1}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function UN(t,e){for(var r=0,n=t.length-1,o=t.length;n>=r;){var i=r+Math.trunc((n-r)/2);t[i]<e?r=i+1:(o=i,n=i-1)}return o}function FN(t,e){return t.toLowerCase()===e.toLowerCase()}bt();var Hn;(function(t){t[t.DROP=0]="DROP",t[t.SUM=1]="SUM",t[t.LAST_VALUE=2]="LAST_VALUE",t[t.HISTOGRAM=3]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(Hn||(Hn={}));var ST=function(){function t(){this.kind=Hn.DROP}return t.prototype.createAccumulation=function(){},t.prototype.merge=function(e,r){},t.prototype.diff=function(e,r){},t.prototype.toMetricData=function(e,r,n,o){},t}();bt();var Ke;(function(t){t.COUNTER="COUNTER",t.GAUGE="GAUGE",t.HISTOGRAM="HISTOGRAM",t.UP_DOWN_COUNTER="UP_DOWN_COUNTER",t.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",t.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",t.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(Ke||(Ke={}));function ko(t,e,r){var n,o,i,a;return IX(t)||Z.warn('Invalid metric name: "'+t+'". The metric name should be a ASCII string with a length no greater than 255 characters.'),{name:t,type:e,description:(n=r?.description)!==null&&n!==void 0?n:"",unit:(o=r?.unit)!==null&&o!==void 0?o:"",valueType:(i=r?.valueType)!==null&&i!==void 0?i:gn.DOUBLE,advice:(a=r?.advice)!==null&&a!==void 0?a:{}}}function BN(t,e){var r,n;return{name:(r=t.name)!==null&&r!==void 0?r:e.name,description:(n=t.description)!==null&&n!==void 0?n:e.description,type:e.type,unit:e.unit,valueType:e.valueType,advice:e.advice}}function zN(t,e){return FN(t.name,e.name)&&t.unit===e.unit&&t.type===e.type&&t.valueType===e.valueType}var _X=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function IX(t){return t.match(_X)!=null}var PX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function MX(t){var e=t.map(function(){return 0});return e.push(0),{buckets:{boundaries:t,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var Yg=function(){function t(e,r,n,o){n===void 0&&(n=!0),o===void 0&&(o=MX(r)),this.startTime=e,this._boundaries=r,this._recordMinMax=n,this._current=o}return t.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 r=UN(this._boundaries,e);this._current.buckets.counts[r]+=1}},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var Xg=function(){function t(e,r){this._boundaries=e,this._recordMinMax=r,this.kind=Hn.HISTOGRAM}return t.prototype.createAccumulation=function(e){return new Yg(e,this._boundaries,this._recordMinMax)},t.prototype.merge=function(e,r){for(var n=e.toPointValue(),o=r.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 Yg(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})},t.prototype.diff=function(e,r){for(var n=e.toPointValue(),o=r.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 Yg(r.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})},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.HISTOGRAM,dataPoints:n.map(function(i){var a=PX(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Ke.GAUGE||e.type===Ke.UP_DOWN_COUNTER||e.type===Ke.OBSERVABLE_GAUGE||e.type===Ke.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}}})}},t}();bt();var yT=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},bT=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},ET=function(){function t(e,r,n,o){e===void 0&&(e=new OX),r===void 0&&(r=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=r,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(t.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.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}),t.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(r,n){return e.at(n)})},t.prototype.at=function(e){var r=this.indexBase-this.indexStart;return e<r&&(e+=this.backing.length),e-=r,this.backing.countAt(e)},t.prototype.incrementBucket=function(e,r){this.backing.increment(e,r)},t.prototype.decrementBucket=function(e,r){this.backing.decrement(e,r)},t.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()},t.prototype.downscale=function(e){this._rotate();for(var r=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<r;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},t.prototype.clone=function(){return new t(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},t.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)},t.prototype._relocateBucket=function(e,r){e!==r&&this.incrementBucket(e,this.backing.emptyBucket(r))},t}();var OX=function(){function t(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(t.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),t.prototype.countAt=function(e){return this._counts[e]},t.prototype.growTo=function(e,r,n){var o=new Array(e).fill(0);o.splice.apply(o,bT([n,this._counts.length-r],yT(this._counts.slice(r)),!1)),o.splice.apply(o,bT([0,r],yT(this._counts.slice(0,r)),!1)),this._counts=o},t.prototype.reverse=function(e,r){for(var n=Math.floor((e+r)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[r-o-1],this._counts[r-o-1]=i}},t.prototype.emptyBucket=function(e){var r=this._counts[e];return this._counts[e]=0,r},t.prototype.increment=function(e,r){this._counts[e]+=r},t.prototype.decrement=function(e,r){this._counts[e]>=r?this._counts[e]-=r:this._counts[e]=0},t.prototype.clone=function(){return new t(bT([],yT(this._counts),!1))},t}();var HN=52,LX=2146435072,NX=1048575,TT=1023,Jg=-TT+1,Zg=TT,pd=Math.pow(2,-1022);function Qg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=(r&LX)>>20;return n-TT}function eh(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=e.getUint32(4),o=(r&NX)*Math.pow(2,32);return o+n}function md(t,e){return t===0||t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY||Number.isNaN(t)?t:t*Math.pow(2,e)}function GN(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t}var DX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),oa=function(t){DX(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(Error);var $N=function(){function t(e){this._shift=-e}return t.prototype.mapToIndex=function(e){if(e<pd)return this._minNormalLowerBoundaryIndex();var r=Qg(e),n=this._rightShift(eh(e)-1,HN);return r+n>>this._shift},t.prototype.lowerBoundary=function(e){var r=this._minNormalLowerBoundaryIndex();if(e<r)throw new oa("underflow: "+e+" is < minimum lower boundary: "+r);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new oa("overflow: "+e+" is > maximum lower boundary: "+n);return md(1,e<<this._shift)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){var e=Jg>>this._shift;return this._shift<2&&e--,e},t.prototype._maxNormalLowerBoundaryIndex=function(){return Zg>>this._shift},t.prototype._rightShift=function(e,r){return Math.floor(e*Math.pow(2,-r))},t}();var WN=function(){function t(e){this._scale=e,this._scaleFactor=md(Math.LOG2E,e),this._inverseFactor=md(Math.LN2,-e)}return t.prototype.mapToIndex=function(e){if(e<=pd)return this._minNormalLowerBoundaryIndex()-1;if(eh(e)===0){var r=Qg(e);return(r<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},t.prototype.lowerBoundary=function(e){var r=this._maxNormalLowerBoundaryIndex();if(e>=r){if(e===r)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new oa("overflow: "+e+" is > maximum lower boundary: "+r)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return pd;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new oa("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){return Jg<<this._scale},t.prototype._maxNormalLowerBoundaryIndex=function(){return(Zg+1<<this._scale)-1},t}();var qN=-10,KN=20,kX=Array.from({length:31},function(t,e){return e>10?new WN(e-10):new $N(e-10)});function vT(t){if(t>KN||t<qN)throw new oa("expected scale >= "+qN+" && <= "+KN+", got: "+t);return kX[t+10]}var UX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},th=function(){function t(e,r){this.low=e,this.high=r}return t.combine=function(e,r){return new t(Math.min(e.low,r.low),Math.max(e.high,r.high))},t}(),FX=20,BX=160,AT=2,YN=function(){function t(e,r,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),r===void 0&&(r=BX),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 ET),u===void 0&&(u=new ET),d===void 0&&(d=vT(FX)),this.startTime=e,this._maxSize=r,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<AT&&(Z.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+AT),this._maxSize=AT)}return t.prototype.record=function(e){this.updateByIncrement(e,1)},t.prototype.setStartTime=function(e){this.startTime=e},t.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(t.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),t.prototype.updateByIncrement=function(e,r){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=r,e===0){this._zeroCount+=r;return}this._sum+=e*r,e>0?this._updateBuckets(this._positive,e,r):this._updateBuckets(this._negative,-e,r)}},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._mergeBuckets(this.positive,e,e.positive,r),this._mergeBuckets(this.negative,e,e.negative,r)},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._diffBuckets(this.positive,e,e.positive,r),this._diffBuckets(this.negative,e,e.negative,r)},t.prototype.clone=function(){return new t(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},t.prototype._updateBuckets=function(e,r,n){var o=this._mapping.mapToIndex(r),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(r)}this._incrementIndexBy(e,o,n)},t.prototype._incrementIndexBy=function(e,r,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=r),r<e.indexStart){var o=e.indexEnd-r;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=r}else if(r>e.indexEnd){var o=r-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=r}var i=r-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},t.prototype._grow=function(e,r){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=GN(r);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},t.prototype._changeScale=function(e,r){for(var n=0;e-r>=this._maxSize;)e>>=1,r>>=1,n++;return n},t.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var r=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=vT(r)}},t.prototype._minScale=function(e){var r=Math.min(this.scale,e.scale),n=th.combine(this._highLowAtScale(this.positive,this.scale,r),this._highLowAtScale(e.positive,e.scale,r)),o=th.combine(this._highLowAtScale(this.negative,this.scale,r),this._highLowAtScale(e.negative,e.scale,r));return Math.min(r-this._changeScale(n.high,n.low),r-this._changeScale(o.high,o.low))},t.prototype._highLowAtScale=function(e,r,n){if(e.length===0)return new th(0,-1);var o=r-n;return new th(e.indexStart>>o,e.indexEnd>>o)},t.prototype._mergeBuckets=function(e,r,n,o){for(var i=n.offset,a=r.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},t.prototype._diffBuckets=function(e,r,n,o){for(var i=n.offset,a=r.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()},t}();var RT=function(){function t(e,r){this._maxSize=e,this._recordMinMax=r,this.kind=Hn.EXPONENTIAL_HISTOGRAM}return t.prototype.createAccumulation=function(e){return new YN(e,this._maxSize,this._recordMinMax)},t.prototype.merge=function(e,r){var n=r.clone();return n.merge(e),n},t.prototype.diff=function(e,r){var n=r.clone();return n.diff(e),n},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=UX(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Ke.GAUGE||e.type===Ke.UP_DOWN_COUNTER||e.type===Ke.OBSERVABLE_GAUGE||e.type===Ke.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}}})}},t}();bt();var zX=DE("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function XN(t){return t.setValue(zX,!0)}bt();function JN(){return function(t){Z.error(HX(t))}}function HX(t){return typeof t=="string"?t:JSON.stringify(jX(t))}function jX(t){for(var e={},r=t;r!==null;)Object.getOwnPropertyNames(r).forEach(function(n){if(!e[n]){var o=r[n];o&&(e[n]=String(o))}}),r=Object.getPrototypeOf(r);return e}var GX=JN();function rh(t){try{GX(t)}catch{}}var ZN="1.30.1";var VX="process.runtime.name";var $X="service.name";var WX="telemetry.sdk.name",qX="telemetry.sdk.language",KX="telemetry.sdk.version";var QN=VX;var eD=$X;var gd=WX,hd=qX,fd=KX;var YX="nodejs";var tD=YX;var Jl,us=(Jl={},Jl[gd]="opentelemetry",Jl[QN]="node",Jl[hd]=tD,Jl[fd]=ZN,Jl);function Sd(t){t.unref()}var rJ=9,nJ=6,oJ=Math.pow(10,nJ),W4e=Math.pow(10,rJ);function ds(t){var e=t/1e3,r=Math.trunc(e),n=Math.round(t%1e3*oJ);return[r,n]}function Zl(t){return t[0]*1e6+t[1]/1e3}var yd;(function(t){t[t.SUCCESS=0]="SUCCESS",t[t.FAILED=1]="FAILED"})(yd||(yd={}));bt();function rD(t,e){return new Promise(function(r){Vl.with(XN(Vl.active()),function(){t.export(e,function(n){r(n)})})})}var nD={_export:rD};var iJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},nh=function(){function t(e,r,n){r===void 0&&(r=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=r,this.sampleTime=n}return t.prototype.record=function(e){this._current=e,this.sampleTime=ds(Date.now())},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var CT=function(){function t(){this.kind=Hn.LAST_VALUE}return t.prototype.createAccumulation=function(e){return new nh(e)},t.prototype.merge=function(e,r){var n=Zl(r.sampleTime)>=Zl(e.sampleTime)?r:e;return new nh(e.startTime,n.toPointValue(),n.sampleTime)},t.prototype.diff=function(e,r){var n=Zl(r.sampleTime)>=Zl(e.sampleTime)?r:e;return new nh(r.startTime,n.toPointValue(),n.sampleTime)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.GAUGE,dataPoints:n.map(function(i){var a=iJ(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},t}();var aJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},Ql=function(){function t(e,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=r,this._current=n,this.reset=o}return t.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var oh=function(){function t(e){this.monotonic=e,this.kind=Hn.SUM}return t.prototype.createAccumulation=function(e){return new Ql(e,this.monotonic)},t.prototype.merge=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return r.reset?new Ql(r.startTime,this.monotonic,o,r.reset):new Ql(e.startTime,this.monotonic,n+o)},t.prototype.diff=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return this.monotonic&&n>o?new Ql(r.startTime,this.monotonic,o,!0):new Ql(r.startTime,this.monotonic,o-n)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.SUM,dataPoints:n.map(function(i){var a=aJ(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},t}();var ps=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),jn=function(){function t(){}return t.Drop=function(){return uD},t.Sum=function(){return dD},t.LastValue=function(){return pD},t.Histogram=function(){return mD},t.ExponentialHistogram=function(){return sJ},t.Default=function(){return lJ},t}();var oD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new ST,e}(jn);var iD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){switch(r.type){case Ke.COUNTER:case Ke.OBSERVABLE_COUNTER:case Ke.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new oh(!0),e.NON_MONOTONIC_INSTANCE=new oh(!1),e}(jn);var aD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new CT,e}(jn);var sD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Xg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(jn);var bd=function(t){ps(e,t);function e(r,n){n===void 0&&(n=!0);var o=t.call(this)||this;if(o._recordMinMax=n,r==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");r=r.concat(),r=r.sort(function(s,c){return s-c});var i=r.lastIndexOf(-1/0),a=r.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=r.slice(i+1,a),o}return e.prototype.createAggregator=function(r){return new Xg(this._boundaries,this._recordMinMax)},e}(jn);var lD=function(t){ps(e,t);function e(r,n){r===void 0&&(r=160),n===void 0&&(n=!0);var o=t.call(this)||this;return o._maxSize=r,o._recordMinMax=n,o}return e.prototype.createAggregator=function(r){return new RT(this._maxSize,this._recordMinMax)},e}(jn);var cD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype._resolve=function(r){switch(r.type){case Ke.COUNTER:case Ke.UP_DOWN_COUNTER:case Ke.OBSERVABLE_COUNTER:case Ke.OBSERVABLE_UP_DOWN_COUNTER:return dD;case Ke.GAUGE:case Ke.OBSERVABLE_GAUGE:return pD;case Ke.HISTOGRAM:return r.advice.explicitBucketBoundaries?new bd(r.advice.explicitBucketBoundaries):mD}return Z.warn("Unable to recognize instrument type: "+r.type),uD},e.prototype.createAggregator=function(r){return this._resolve(r).createAggregator(r)},e}(jn);var uD=new oD,dD=new iD,pD=new aD,mD=new sD,sJ=new lD,lJ=new cD;var gD=function(t){return jn.Default()},hD=function(t){return Xl.CUMULATIVE};var wT=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},xT=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},fD=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},cJ=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},SD=function(){function t(e){var r,n,o;this._shutdown=!1,this._aggregationSelector=(r=e?.aggregationSelector)!==null&&r!==void 0?r:gD,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:hD,this._metricProducers=(o=e?.metricProducers)!==null&&o!==void 0?o:[],this._cardinalitySelector=e?.cardinalitySelector}return t.prototype.setMetricProducer=function(e){if(this._sdkMetricProducer)throw new Error("MetricReader can not be bound to a MeterProvider again.");this._sdkMetricProducer=e,this.onInitialized()},t.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},t.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},t.prototype.selectCardinalityLimit=function(e){return this._cardinalitySelector?this._cardinalitySelector(e):2e3},t.prototype.onInitialized=function(){},t.prototype.collect=function(e){return wT(this,void 0,void 0,function(){var r,n,o,i,a,s;return xT(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(cJ([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],fD(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return r=fD.apply(void 0,[c.sent()]),n=r[0],o=r.slice(1),i=n.errors.concat(fT(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(fT(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},t.prototype.shutdown=function(e){return wT(this,void 0,void 0,function(){return xT(this,function(r){switch(r.label){case 0:return this._shutdown?(Z.error("Cannot call shutdown twice."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onShutdown()];case 1:return r.sent(),[3,4];case 2:return[4,na(this.onShutdown(),e.timeoutMillis)];case 3:r.sent(),r.label=4;case 4:return this._shutdown=!0,[2]}})})},t.prototype.forceFlush=function(e){return wT(this,void 0,void 0,function(){return xT(this,function(r){switch(r.label){case 0:return this._shutdown?(Z.warn("Cannot forceFlush on already shutdown MetricReader."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onForceFlush()];case 1:return r.sent(),[2];case 2:return[4,na(this.onForceFlush(),e.timeoutMillis)];case 3:return r.sent(),[2]}})})},t}();bt();var uJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ih=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},ah=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},dJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},pJ=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},_T=function(t){uJ(e,t);function e(r){var n,o,i,a,s=t.call(this,{aggregationSelector:(n=r.exporter.selectAggregation)===null||n===void 0?void 0:n.bind(r.exporter),aggregationTemporalitySelector:(o=r.exporter.selectAggregationTemporality)===null||o===void 0?void 0:o.bind(r.exporter),metricProducers:r.metricProducers})||this;if(r.exportIntervalMillis!==void 0&&r.exportIntervalMillis<=0)throw Error("exportIntervalMillis must be greater than 0");if(r.exportTimeoutMillis!==void 0&&r.exportTimeoutMillis<=0)throw Error("exportTimeoutMillis must be greater than 0");if(r.exportTimeoutMillis!==void 0&&r.exportIntervalMillis!==void 0&&r.exportIntervalMillis<r.exportTimeoutMillis)throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis");return s._exportInterval=(i=r.exportIntervalMillis)!==null&&i!==void 0?i:6e4,s._exportTimeout=(a=r.exportTimeoutMillis)!==null&&a!==void 0?a:3e4,s._exporter=r.exporter,s}return e.prototype._runOnce=function(){return ih(this,void 0,void 0,function(){var r;return ah(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,na(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return r=n.sent(),r instanceof hT?(Z.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(rh(r),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var r,n;return ih(this,void 0,void 0,function(){var o,i,a,s,c,l;return ah(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=Z).error.apply(l,pJ(["PeriodicExportingMetricReader: metrics collection errors"],dJ(a),!1)),!i.resource.asyncAttributesPending)return[3,5];u.label=2;case 2:return u.trys.push([2,4,,5]),[4,(n=(r=i.resource).waitForAsyncAttributes)===null||n===void 0?void 0:n.call(r)];case 3:return u.sent(),[3,5];case 4:return s=u.sent(),Z.debug("Error while resolving async portion of resource: ",s),rh(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,nD._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==yd.SUCCESS)throw new Error("PeriodicExportingMetricReader: metrics export failed (error "+c.error+")");return[2]}})})},e.prototype.onInitialized=function(){var r=this;this._interval=setInterval(function(){r._runOnce()},this._exportInterval),Sd(this._interval)},e.prototype.onForceFlush=function(){return ih(this,void 0,void 0,function(){return ah(this,function(r){switch(r.label){case 0:return[4,this._runOnce()];case 1:return r.sent(),[4,this._exporter.forceFlush()];case 2:return r.sent(),[2]}})})},e.prototype.onShutdown=function(){return ih(this,void 0,void 0,function(){return ah(this,function(r){switch(r.label){case 0:return this._interval&&clearInterval(this._interval),[4,this.onForceFlush()];case 1:return r.sent(),[4,this._exporter.shutdown()];case 2:return r.sent(),[2]}})})},e}(SD);bt();bt();function sh(){return"unknown_service:"+process.argv0}var ia=function(){return ia=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ia.apply(this,arguments)},mJ=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},gJ=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},hJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},lh=function(){function t(e,r){var n=this,o;this._attributes=e,this.asyncAttributesPending=r!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=r?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return Z.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return t.empty=function(){return t.EMPTY},t.default=function(){var e;return new t((e={},e[eD]=sh(),e[hd]=us[hd],e[gd]=us[gd],e[fd]=us[fd],e))},Object.defineProperty(t.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&Z.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),t.prototype.waitForAsyncAttributes=function(){return mJ(this,void 0,void 0,function(){return gJ(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]}})})},t.prototype.merge=function(e){var r=this,n;if(!e)return this;var o=ia(ia({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new t(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=hJ(a,2),l=c[0],u=c[1];return ia(ia(ia(ia({},r._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new t(o,i)},t.EMPTY=new t({}),t}();var yD=function(){function t(){this._registeredViews=[]}return t.prototype.addView=function(e){this._registeredViews.push(e)},t.prototype.findViews=function(e,r){var n=this,o=this._registeredViews.filter(function(i){return n._matchInstrument(i.instrumentSelector,e)&&n._matchMeter(i.meterSelector,r)});return o},t.prototype._matchInstrument=function(e,r){return(e.getType()===void 0||r.type===e.getType())&&e.getNameFilter().match(r.name)&&e.getUnitFilter().match(r.unit)},t.prototype._matchMeter=function(e,r){return e.getNameFilter().match(r.name)&&(r.version===void 0||e.getVersionFilter().match(r.version))&&(r.schemaUrl===void 0||e.getSchemaUrlFilter().match(r.schemaUrl))},t}();bt();var ms=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ch=function(){function t(e,r){this._writableMetricStorage=e,this._descriptor=r}return t.prototype._record=function(e,r,n){if(r===void 0&&(r={}),n===void 0&&(n=Vl.active()),typeof e!="number"){Z.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===gn.INT&&!Number.isInteger(e)&&(Z.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,r,n,ds(Date.now()))},t}();var bD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n,o){this._record(r,n,o)},e}(ch);var ED=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n,o){if(r<0){Z.warn("negative value provided to counter "+this._descriptor.name+": "+r);return}this._record(r,n,o)},e}(ch);var TD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n,o){this._record(r,n,o)},e}(ch);var vD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n,o){if(r<0){Z.warn("negative value provided to histogram "+this._descriptor.name+": "+r);return}this._record(r,n,o)},e}(ch);var uh=function(){function t(e,r,n){this._observableRegistry=n,this._descriptor=e,this._metricStorages=r}return t.prototype.addCallback=function(e){this._observableRegistry.addCallback(e,this)},t.prototype.removeCallback=function(e){this._observableRegistry.removeCallback(e,this)},t}();var AD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);var RD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);var CD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);function Ed(t){return t instanceof uh}var wD=function(){function t(e){this._meterSharedState=e}return t.prototype.createGauge=function(e,r){var n=ko(e,Ke.GAUGE,r),o=this._meterSharedState.registerMetricStorage(n);return new TD(o,n)},t.prototype.createHistogram=function(e,r){var n=ko(e,Ke.HISTOGRAM,r),o=this._meterSharedState.registerMetricStorage(n);return new vD(o,n)},t.prototype.createCounter=function(e,r){var n=ko(e,Ke.COUNTER,r),o=this._meterSharedState.registerMetricStorage(n);return new ED(o,n)},t.prototype.createUpDownCounter=function(e,r){var n=ko(e,Ke.UP_DOWN_COUNTER,r),o=this._meterSharedState.registerMetricStorage(n);return new bD(o,n)},t.prototype.createObservableGauge=function(e,r){var n=ko(e,Ke.OBSERVABLE_GAUGE,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new RD(n,o,this._meterSharedState.observableRegistry)},t.prototype.createObservableCounter=function(e,r){var n=ko(e,Ke.OBSERVABLE_COUNTER,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new AD(n,o,this._meterSharedState.observableRegistry)},t.prototype.createObservableUpDownCounter=function(e,r){var n=ko(e,Ke.OBSERVABLE_UP_DOWN_COUNTER,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new CD(n,o,this._meterSharedState.observableRegistry)},t.prototype.addBatchObservableCallback=function(e,r){this._meterSharedState.observableRegistry.addBatchCallback(e,r)},t.prototype.removeBatchObservableCallback=function(e,r){this._meterSharedState.observableRegistry.removeBatchCallback(e,r)},t}();var dh=function(){function t(e){this._instrumentDescriptor=e}return t.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},t.prototype.updateDescription=function(e){this._instrumentDescriptor=ko(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},t}();var fJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),xD=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},SJ=function(){function t(e){this._hash=e,this._valueMap=new Map,this._keyMap=new Map}return t.prototype.get=function(e,r){return r??(r=this._hash(e)),this._valueMap.get(r)},t.prototype.getOrDefault=function(e,r){var n=this._hash(e);if(this._valueMap.has(n))return this._valueMap.get(n);var o=r();return this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,o),o},t.prototype.set=function(e,r,n){n??(n=this._hash(e)),this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,r)},t.prototype.has=function(e,r){return r??(r=this._hash(e)),this._valueMap.has(r)},t.prototype.keys=function(){var e,r;return xD(this,function(n){switch(n.label){case 0:e=this._keyMap.entries(),r=e.next(),n.label=1;case 1:return r.done===!0?[3,3]:[4,[r.value[1],r.value[0]]];case 2:return n.sent(),r=e.next(),[3,1];case 3:return[2]}})},t.prototype.entries=function(){var e,r;return xD(this,function(n){switch(n.label){case 0:e=this._valueMap.entries(),r=e.next(),n.label=1;case 1:return r.done===!0?[3,3]:[4,[this._keyMap.get(r.value[0]),r.value[1],r.value[0]]];case 2:return n.sent(),r=e.next(),[3,1];case 3:return[2]}})},Object.defineProperty(t.prototype,"size",{get:function(){return this._valueMap.size},enumerable:!1,configurable:!0}),t}();var oo=function(t){fJ(e,t);function e(){return t.call(this,Kg)||this}return e}(SJ);var yJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ph=function(){function t(e,r){this._aggregator=e,this._activeCollectionStorage=new oo,this._cumulativeMemoStorage=new oo,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(r??2e3)-1,this._overflowHashCode=Kg(this._overflowAttributes)}return t.prototype.record=function(e,r,n,o){var i=this,a=this._activeCollectionStorage.get(r);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(r,a)}a?.record(e)},t.prototype.batchCumulate=function(e,r){var n=this;Array.from(e.entries()).forEach(function(o){var i=yJ(o,3),a=i[0],s=i[1],c=i[2],l=n._aggregator.createAccumulation(r);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)})},t.prototype.collect=function(){var e=this._activeCollectionStorage;return this._activeCollectionStorage=new oo,e},t}();var IT=function(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},_D=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},mh=function(){function t(e,r){var n=this;this._aggregator=e,this._unreportedAccumulations=new Map,this._reportHistory=new Map,r.forEach(function(o){n._unreportedAccumulations.set(o,[])})}return t.prototype.buildMetrics=function(e,r,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===Xl.CUMULATIVE?a=t.merge(c.accumulations,i,this._aggregator):a=t.calibrateStartTime(c.accumulations,i,l)}else s=e.selectAggregationTemporality(r.type);this._reportHistory.set(e,{accumulations:a,collectionTime:o,aggregationTemporality:s});var u=bJ(a);if(u.length!==0)return this._aggregator.toMetricData(r,s,u,o)},t.prototype._stashAccumulations=function(e){var r,n,o=this._unreportedAccumulations.keys();try{for(var i=IT(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){r={error:l}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},t.prototype._getMergedUnreportedAccumulations=function(e){var r,n,o=new oo,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=IT(i),s=a.next();!s.done;s=a.next()){var c=s.value;o=t.merge(o,c,this._aggregator)}}catch(l){r={error:l}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},t.merge=function(e,r,n){for(var o=e,i=r.entries(),a=i.next();a.done!==!0;){var s=_D(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},t.calibrateStartTime=function(e,r,n){var o,i;try{for(var a=IT(e.keys()),s=a.next();!s.done;s=a.next()){var c=_D(s.value,2),l=c[0],u=c[1],d=r.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 r},t}();function bJ(t){return Array.from(t.entries())}var EJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),TJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ID=function(t){EJ(e,t);function e(r,n,o,i,a){var s=t.call(this,r)||this;return s._attributesProcessor=o,s._aggregationCardinalityLimit=a,s._deltaMetricStorage=new ph(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new mh(n,i),s}return e.prototype.record=function(r,n){var o=this,i=new oo;Array.from(r.entries()).forEach(function(a){var s=TJ(a,2),c=s[0],l=s[1];i.set(o._attributesProcessor.process(c),l)}),this._deltaMetricStorage.batchCumulate(i,n)},e.prototype.collect=function(r,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(r,this._instrumentDescriptor,o,n)},e}(dh);bt();function PT(t,e){var r="";return t.unit!==e.unit&&(r+=" - Unit '"+t.unit+"' does not match '"+e.unit+`'
4584
+ //# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:mE(i,this.userBrowserSettings.disableFullStory)})])}catch(m){if(m instanceof Error&&m.message.includes("Content Security Policy"))this.logger.warn({err:m},"Content Security Policy error from adding Momentic scripts, reloading page instead"),c=!0;else throw m}(o??{})["add-init-scripts"]=Date.now()-p};a.push(d())}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&c5()==="darwin"&&n5("system_profiler SPDisplaysDataType").toString().includes("Retina"))A.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else{let d=async()=>{let p=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(o??{})["fetch-dpr"]=Date.now()-p};a.push(d())}let l=Date.now();await X(Promise.all(a),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let u=Date.now();(o??{})["ops-attach"]=u-l,c&&await this.page.reload(),this.cdpClient=await yg.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout}),(o??{})["cdp-init"]=Date.now()-u,await this.initializeScreencast(),this.stateManager=new Tg({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 r=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:r}})}catch{}})()})}))}static async init(e){let r=await HM(e),n=new t(r);return await n.initialize({grantPermissions:!0,permissionsToGrant:e.userBrowserSettings.grantedPermissions,runInitScripts:!1}),n}static async fromExistingContext({context:e,storage:r,enricher:n,userBrowserSettings:o,properties:i,logger:a,timingRecorder:s}){let c=e.pages()[0];if(!c)throw new Error("No page found in existing context");let l=c.viewportSize();if(!l){let p=Date.now();l=await c.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),s["eval-viewport"]=Date.now()-p}let u=c?.url(),d=new t({browser:e.browser(),context:e,page:c,baseUrl:u,logger:a,storage:r,enricher:n,userBrowserSettings:o,viewport:l,properties:i,clientCallbacks:void 0,iconKnowledgeBase:null});return await d.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:s}),d}async handleAvailableTabsChangeHelper(){try{let e=await EE(this.context,{getTitles:!0}),r=this.page.url();this.clientCallbacks?.onTabsChange?.(e,r)}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,r){let n=vg(),o=`${e}-${n}`,i=Date.now(),a=!1,s=new AbortController;this.pageLoadAbortControllers.add(s);let c=async()=>{try{await X(r(),{signal:s.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${e} timed out after ${this.pageLoadTimeout}ms`})}catch(l){l.name!=="AbortError"&&!this.closed&&this.logger.error({err:l,promiseKey:o,codePath:e,duration:Date.now()-i},`Page load promise for code path ${e} encountered error`)}finally{delete this.pageLoadPromises[o],this.pageLoadAbortControllers.delete(s),a=!0}};this.pageLoadPromises[o]=c().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 r=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()||!qa(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()=>r())}handleNewPageEvent(e){let r=e.url();this.logger.info({url:r},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(e)}catch(n){this.logger.warn({err:n},"Error handling new page open, continuing....")}}handleNewPageEventHelper(e){let r=vg(),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);!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableConsoleLogs&&e.on("console",a=>{RM(e,o,this.debugData,a,this.logger)});let i=async()=>{!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs&&(xM(this.logger,r,this.clientCallbacks?.onNetworkPage,e),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=NO(this.clientCallbacks.onNetworkLogs)),await e.route("**/*",async(a,s)=>{await aE({pageId:r,route:a,request:s,onHarEntry:(c,l)=>{this.harBatcher?.fetch({[c]:l}).catch(()=>{})},logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed})}),await e.route("**/*",LM(this.customHeaders,this.logger))),Pn&&await e.route("**/*",Yu),await this.loadFrameAndRecordUrl({root:e,codePath:n}),this.handleAvailableTabsChange()};this.addToPageLoadPromises(n,async()=>i())}async handleCollectSvgs(e){}handleFrameNavigationEvent(e){let r=e.url(),n=e.parentFrame()?"has-parent":"no-parent",o=`frame-navigation-handler-${r.slice(0,50)} (${n})`;if(!r||r==="about:blank"||!qa(r))return;let i=this.recentFrameNavigations[o];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[o]=Date.now();let a=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(c){this.logger.warn({err:c},"Failed to collect SVGs on page, continuing...")}})()},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(e))}catch(s){s.name!=="AbortError"&&this.logger.warn({err:s,url:r,codePath:o},"Failed to handle frame navigation event, continuing...")}};this.addToPageLoadPromises(o,async()=>a())}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(r){this.logger.warn({err:r},"Failed to inject icon knowledge base into browser, continuing...")}}getBrowserCallbacks(){return{waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:e=>this.waitForUrl(e),getBrowserState:e=>this.getBrowserState(e),waitForStability:e=>this.waitForStability(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){this.abortSignal=void 0,this.debugData.logsPerPage=[],this.pageLoadPromises={},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 X(SE(this.getBrowserCallbacks()),{milliseconds:He})}catch(e){this.logger.debug({err:e},"Failed to clear highlights, continuing...")}}async cleanup(){this.abortSignal=void 0,this.cleanedUp=!0;try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(e=>e.abort()),this.pageLoadAbortControllers.clear(),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.cleanedUp||this.context.pages().every(e=>e.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(e,r,n){let o=Date.now(),i=0,a=0;for(;Date.now()-o<Bl;){a++,n?.throwIfAborted();try{if(await Yt({fn:()=>{let c=window;return!!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:He,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),root:e,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(s){if(i++,i>=3){r.warn({err:s},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await ye(lr),a%2===0&&r.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),Yt({root:e,fn:()=>{let r=window;if(!r?.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return r.getFullHtmlTree()},arg:void 0,timeout:ie,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let e=window,r=[],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")}),r.push(()=>{for(let[o,i]of n)o.style.setProperty("caret-color",i.value,i.priority)}),e._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let o of r)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:r=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:r});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(r<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:o},"Failed taking screenshot, retrying..."),await ye(Yi),this.screenshot({...e,retries:r-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:r,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:r,optimizeForSpeed:!0},timeout:o??tt}),c=Buffer.from(s.data,"base64"),l=await UO.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&&a5(n,c),this.lastScreenshotForRecording=c,!e)return c;let p=await e.boundingBox({timeout:ie});if(!p)throw new Error("Attempted to screenshot an element that is not visible on the page");let{x:m,y:h,width:g,height:f}=p;if(!g||!f)throw new Error("Attempted to screenshot an element with zero width or height");m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),f=Math.floor(f);try{let S=await UO.fromBuffer(c),b=S.bitmap.width,y=S.bitmap.height;m=Math.max(0,Math.min(m,b-1)),h=Math.max(0,Math.min(h,y-1)),g=Math.max(1,Math.min(g,b-m)),f=Math.max(1,Math.min(f,y-h)),c=await S.crop({x:m,y:h,w:g,h:f}).getBuffer("image/jpeg")}catch(S){throw new Error(`Failed taking element screenshot at coordinates (${m}, ${h}) with size (${g}, ${f}): ${S}`)}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:r=!1,loadTimeoutMs:n=this.pageLoadTimeout}){II(e)&&(e=new URL(e,this.baseUrl).toString());let o=Date.now();r||(await this.waitForPageLoad(),await this.waitForStability());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 ye(lr),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:He})}if(!i)throw new M("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(gM.has(s))throw new M("UserInfrastructureError",`${e} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless()}async type(e,r={},n=!1){await this.directTypeHelper(e,r,n)}async getActiveElementHandle(e){return e.evaluateHandle(()=>document.activeElement)}async getActiveElement(e){try{return await Yt({root:e,fn:()=>{let n=document.activeElement?.textContent??void 0;n&&n.length>100&&(n=n.slice(0,100)+"...[TRUNCATED]");let o=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(o=!0);let a=document.activeElement;return a&&"selectionStart"in a&&typeof a.selectionStart=="number"&&typeof a.selectionEnd=="number"&&a.selectionStart!==a.selectionEnd&&(o=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:n,hasTextSelected:o}:{hasTextSelected:o}},arg:void 0,timeout:He,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(r){this.logger.warn({err:r},"Failed to get active element");return}}async directTypeHelper(e,r={},n=!1){let o=await this.getActivePageOrFrame();await ZM({root:o,text:e,options:r,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(o);if(n){let s=Date.now();for(;Date.now()-s<this.smartWaitingTimeout&&(!i||i.tag==="body");)await ye(Yi),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(o);i||this.logger.warn("No active element found to type into, attempting anyways")}let a=i?.tag==="input"||i?.tag==="textarea";if(r.clearContent)if(a||r.forceClearContent)if(this.properties.isAndroid&&!a&&i?.textContent){this.logger.info("Clearing content using backspaces");let s=0,c=i.textContent?.length;for(;c&&s<50;){s++;let l=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(l),i=await this.getActiveElement(o),c=i?.textContent?.length}c&&this.logger.warn("Content still remains after clearing existing")}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):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);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(e,{delay:r.delay??gA}),r.pressEnter&&await this.press("Enter",{}),await this.waitForStability()}async scrollIntoViewIfNeeded(e){try{await e.scrollIntoViewIfNeeded({timeout:tt})}catch(r){this.logger.warn({err:r},"Failed to scroll into view, trying with raw JS");try{await e.evaluate(async n=>{let o=n.scrollTop;n.scrollIntoView({block:"nearest"}),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:tt})}catch(n){this.logger.warn({err:n},"Failed to scroll into view using JS, continuing...")}}}async highlightA11yId(e){try{let{resolution:r}=await this.createTargetFromA11yId({id:e,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(r.locator),!0}catch(r){return this.logger.debug({err:r,id:e},"Failed to highlight target"),!1}}async highlight(e){return fg({locator:e,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(e){try{let r=new URL(e).origin;if(r==="null")return;this.originsVisited.add(r)}catch(r){this.logger.warn({err:r},"Failed to record origin visited")}}async waitForPageLoad(){let e=Date.now(),r=Object.values(this.pageLoadPromises),n=Object.keys(this.pageLoadPromises),o=-1,i=0;for(;r.length!==0;){if(Date.now()-e>this.pageLoadTimeout&&this.logger.error({outstandingPromiseKeys:n,outstandingPromises:r},"Still waiting on page load promises"),Date.now()-o<20&&(i++,i>2)){this.logger.error({outstandingPromiseKeys:n,outstandingPromises:r},"Synchronous waiting loop detected, exiting page load wait");return}o=Date.now(),await Promise.allSettled(r),r=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:He}),this.originsVisited.delete(o);let r=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 AM(i,this.logger),o!==r&&e.closeNonActiveTabs&&(this.logger.info(`Closing tab ${o} with URL ${a}`),await i.close())}}async loadAuthState(e){await this.waitForPageLoad(),await this.waitForStability(),!e||Object.keys(e).length===0?await this.clearAuthState({closeNonActiveTabs:!1}):await this.loadAuthStateHelper(e),await this.refresh(),await this.waitForStability()}async loadAuthStateHelper(e){let r=[];for(let c of e.cookies??[]){let l=await this.setCookie(c);r=r.concat(l)}this.logger.info(`Loaded ${e.cookies?.length??0} cookies`),await this.cdpClient.send({method:"DOMStorage.enable",params:void 0,timeout:He});let n=0,o=[];for(let c of e.origins??[])for(let l of c.localStorage)try{await this.cdpClient.send({timeout:He,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(c.origin).origin,isLocalStorage:!0},key:l.name,value:l.value}}),n++}catch(u){o.some(d=>d.origin===c.origin&&d.key===l.name)||o.push({key:l.name,origin:c.origin,err:u});continue}o.length>0&&this.logger.warn({failedOrigins:o,currentPageUrl:this.page.url()},"Failed to set localStorage for entries, continuing..."),this.logger.info(`Loaded ${n} local storage entries`);let i={},a=0;for(let c of e.origins??[])if(c.sessionStorage&&c.sessionStorage.length>0){let l={};for(let u of c.sessionStorage)l[u.name]=u.value,a++;i[new URL(c.origin).origin]=l}a>0&&await this.context.addInitScript(({storageByOrigin:c,markerKey:l})=>{let u=window.location.origin,d=c[u];if(d&&!window.sessionStorage.getItem(l)){for(let[p,m]of Object.entries(d))window.sessionStorage.setItem(p,m);window.sessionStorage.setItem(l,"1")}},{storageByOrigin:i,markerKey:hE}),this.logger.info(`Loaded ${a} session storage entries`);let s=e.idb;s&&Object.keys(s).length>0&&(await vM(this.page,s,this.logger),this.logger.info(`Loaded ${Object.keys(s??{}).length} indexedDB databases`))}async saveAuthState(){let r=0,n=null;for(;r<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let o=await this.context.storageState();return o.idb=await TM(this.page,this.logger),await $M(this.page,o,this.logger),o}catch(o){if(n=o,r++,r<=2){this.logger.warn({err:o,retryCount:r,maxRetries:2},`Error saving auth state, retrying (${r}/2)...`);let i=Math.pow(2,r)*100;await new Promise(a=>setTimeout(a,i))}}throw this.logger.error({err:n},"Failed to save auth state after 2 retries"),new M("ActionFailureError",`Failed to save auth state: ${n?.message}`)}async getOpenPages(e){return EE(this.context,e)}saveA11yDetailsToCache(e,r){r.content=e.content,r.name=e.name,r.role=e.role,r.numChildren=e.children.length,delete r.serializedForm,delete r.nodeOnlySerializedForm}async updateCacheWithNewNodeDetails({node:e,target:r,locator:n,originalElementLocationResult:o,allowNotActionableNodesOverride:i,logger:a=this.logger,skipSavingVisualAttributes:s=!1}){if(e&&this.saveA11yDetailsToCache(e,r),r.frameCache=this.stateManager.saveAutoFrameCacheDetails(r.frameCache),n)try{let c=await this.fetchHtmlAttributes({locator:n,logger:a,originalElementLocationResult:o,allowNotActionableNodesOverride:i});c?(r.generatedSelectors=c.generatedSelectors,r.serializedHtml=c.serializedHtml,r.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,r.hybridSelector=c.hybridSelector):a.warn("Got undefined HTML attributes when trying to update cache")}catch(c){if(c instanceof Vs)throw a.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;a.warn({err:c},"Failed to fetch HTML attributes for target, continuing...")}try{s||await this.saveElementVisualAttributes({target:r,locator:n,logger:a})}catch(c){a.debug({err:c},"Failed to save element visual details, continuing...")}}async saveElementVisualAttributes({target:e,locator:r,logger:n}){if(!r||!Kb.includes(e?.role??""))return;let o=await r.boundingBox({timeout:ie});if(!o||!o.width||!o.height){n.debug("Skipping visual attributes saving for element with no bounding box after action"),e.boundingBox=void 0,e.screenshotUrl=void 0;return}let i=this.getViewport();if(o.x<0||o.y<0||!i||o.x+o.width>i.width||o.y+o.height>i.height)return;let{x:a=0,y:s=0,width:c=0,height:l=0}=o;if(e.boundingBox&&Math.abs(e.boundingBox.width-c)<1&&Math.abs(e.boundingBox.height-l)<1&&Math.abs((e.boundingBox.x??0)-a)<1&&Math.abs((e.boundingBox.y??0)-s)<1)return;e.boundingBox=o;let u=await this.screenshot({locator:r,quality:75,retries:0}),d=vg(),p="image/jpeg";(async()=>{try{await this.storage.createOnDemandScreenshot(d,u,p)}catch(m){this.logger.warn({err:m,screenshotId:d},"Failed to persist on-demand screenshot")}})(),e.screenshotUrl={id:d,contentType:"image/jpeg"}}async resolveAutoFrameCache(e){return this.stateManager.resolveAutoFrameCache(e)}async getElementRequiredValues({logger:e,boundingBox:r,locator:n,requirements:o}){let i={},a=!!o?.position&&o.position!=="irrelevant",s=!!o?.shape&&o.shape!=="irrelevant";if(a||s){if(!r||!r.width||!r.height)throw new M("ActionFailureError","Element does not have a bounding box as required");s&&(i.shape={width:r.width,height:r.height,tolerance:o.shape}),a&&(i.position={x1:r.x,y1:r.y,x2:r.x+r.width,y2:r.y+r.height,tolerance:o.position})}if(o?.text){let c=await n.textContent({timeout:ie});i.text=c?.trim().slice(0,mn.serializedElementForCachingTruncateLength)}if(o?.attributes&&o.attributes.length>0){let c={};for(let l of o.attributes){let u=l.trim().toLowerCase();if(!(!u||mn.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await n.getAttribute(u,{timeout:ie});d!==null&&(c[l]=d)}catch(d){e.warn({err:d,attr:l},"Failed to fetch required attribute, continuing...")}}i.attributes=c}return i}async getAdditionalDetailsForElement({mainLocator:e,mainBoundingBox:r,additionalElement:n,root:o,logger:i}){let a=this.stateManager.a11yIdToNodeMap[n.id];if(!a)return;let s=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:o,node:a});if(e.contentFrame!==s.contentFrame)return;let c=await this.fetchHtmlAttributes({locator:s,logger:i});if(!c?.generatedSelectors||c.generatedSelectors.length===0)return;let l=await s.boundingBox({timeout:ie}),u={selectors:c.generatedSelectors,relativeAngleRadians:WM(r,l),relativeDistance:qM(r,l)};return n.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:s,boundingBox:l,requirements:n.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:e,mainLocator:r,mainBoundingBox:n,additionalElements:o,root:i,logger:a}){let s=new Set,c=[];for(let d of o)d.id!==e&&(s.has(d.id)||(s.add(d.id),c.push(d)));let l=await Promise.allSettled(c.map(d=>this.getAdditionalDetailsForElement({mainLocator:r,mainBoundingBox:n,additionalElement:d,root:i,logger:a}))),u=[];for(let[d,p]of l.entries()){let m=c[d];if(m){if(p.status==="fulfilled"){let h=p.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:p.reason,additionalElement:m},"Failed to fetch additional element details, continuing...")}}return u}async updateCacheWithAdditionalRequirements({mainElementId:e,requirements:r,additionalElements:n,target:o,locator:i,root:a,logger:s}){let c=await i.boundingBox({timeout:ie});if(r)try{o.requirements=await this.getElementRequiredValues({logger:s,boundingBox:c,locator:i,requirements:r})}catch(l){s.warn({err:l},"Failed to generate required values for target")}n&&n.length>0&&(o.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:e,mainBoundingBox:c,mainLocator:i,additionalElements:n,root:a,logger:s}))}async createTargetFromA11yId({id:e,description:r,targetSource:n,skipSaveToCache:o,skipSavingVisualAttributes:i,logger:a=this.logger,requirements:s,additionalElements:c}){if(e<0)throw new M("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let l=this.stateManager.a11yIdToNodeMap[e];if(!l)throw new M("InternalWebAgentError",`Resolving target failed because id ${e} does not exist on the page. This generally indicates an incorrect element was targeted.`);let u=this.stateManager.frameConfig,d,p,m,h;if(this.userBrowserSettings.autoExpandIframes&&!u&&l.parentFrame){let T=l.parentFrame,{cache:w,config:P}=await this.stateManager.getAutoFrameDetailsFromHandle(T);p=w,m=P,d=P.frame,h="auto iframe"}else l.parentFrame&&u?(m=u,d=await this.getActivePageOrFrame(),h="hardcoded url already on the state manager"):(d=await this.getActivePageOrFrame(),h="should not be possible");let g=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:d,node:l}),f=await g.evaluate(T=>window.generateCommonLocationResultMetadata(T),{timeout:tt}),S={id:e,inputDescription:r??void 0,targetSource:n,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:Qe(a),frameCache:p},b,y=!1;o||(m&&(a.info({frameConfigSource:h,frameConfig:PO(m)},"A11y node was resolved to a target within an iframe"),b=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(m),y=!0),await this.updateCacheWithAdditionalRequirements({mainElementId:e,requirements:s,additionalElements:c,target:S,root:d,locator:g,logger:a}),await this.updateCacheWithNewNodeDetails({node:l,target:S,locator:g,logger:a,allowNotActionableNodesOverride:!0,skipSavingVisualAttributes:i,originalElementLocationResult:f}));try{return{resolution:{locator:g,a11yNode:l,displayString:l.getNodeOnlySerializedForm(),originalElementLocationResult:f,decisions:[]},target:S,frameConfig:m,frameConfigSource:h}}finally{y&&this.stateManager.setActiveFrameConfig(b)}}async resolveTarget(e,r,n={}){let{logger:o=this.logger,signal:i=this.abortSignal,allowNotActionableNodesOverride:a,skipWaitForPageLoad:s}=n;if(r.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,m=!1,h=Date.now();for(;Date.now()-h<this.smartWaitingTimeout;)try{let g=await this.stateManager.resolveAutoFrameCache(r.frameCache);this.setActiveFrameConfig(g),m=!0;break}catch(g){p=g,await ye(lr,i)}if(!m)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,o,i);let l=Date.now(),u=0,d;for(;Date.now()-l<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),u++;let p=u===2||Date.now()-l>this.smartWaitingTimeout-2e3&&u%2===0;try{d=await this.resolveTargetHelper({root:c,target:r,primaryOnly:!0,shouldLogOnFailure:p,logger:o,allowNotActionableNodesOverride:a,signal:i,skipWaitForPageLoad:s});break}catch(m){if(m instanceof jc)break;i?.throwIfAborted(),p&&o.warn({err:m},`Could not resolve target using primary cache only (x${u})`),await ye(lr,i)}}return d||(d=await this.resolveTargetHelper({root:c,target:r,primaryOnly:!1,logger:o,signal:i,allowNotActionableNodesOverride:a}),o.info({decisions:d.decisions},"Target resolution succeeded after waiting")),e?.details?.push({type:"TARGETING",elementLocationDecisions:d?.decisions??[],pageState:void 0,targetSource:r.targetSource,targetUpdateTime:r.targetUpdateTime}),d}async resolveTargetHelper({root:e,target:r,primaryOnly:n,logger:o,signal:i,allowNotActionableNodesOverride:a,shouldLogOnFailure:s,skipWaitForPageLoad:c,skipSavingVisualAttributes:l}){let u=[],d;await this.getBrowserState({logger:o,abortSignal:i,skipWait:!this.userBrowserSettings.visualActions,skipWaitForPageLoad:c,allowNotActionableNodesOverride:a});let p;if(r.generatedSelectors||r.hybridSelector){let m;try{m=await this.resolveTargetWithPrimaryMethods({root:e,target:r,logger:o,allowNotActionableNodesOverride:a,shouldLogOnFailure:s,skipSavingVisualAttributes:l})}catch(h){p=h,h instanceof Tn&&(u.push(...h.decisions),d=h.cacheMissReason)}if(m)return{...m,decisions:[...u,...m.decisions]};n||(u.push({type:"CSS_SELECTOR",matched:!1,reason:p?.message,selectors:Ju(r.generatedSelectors??[])}),r.generatedSelectors=void 0,r.hybridSelector=void 0)}if(n)throw p;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let m=await this.resolveTargetWithSecondaryMethods({root:e,target:r,decisions:u,logger:o,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:l});if(m)return r.targetSource="HEURISTIC_HEALED",r.targetUpdateTime=new Date().toISOString(),r.targetUpdateLoggerTags=Qe(o),m;d=d??"secondary-resolution-failed"}throw new Tn("Could not find any relevant node given target",u,d)}async resolveTargetWithPrimaryMethods({root:e,target:r,logger:n,allowNotActionableNodesOverride:o,shouldLogOnFailure:i,skipSavingVisualAttributes:a}){if(!r.nodeOnlySerializedHtml)throw new jc("Insufficient data to resolve target using primary methods (missing node HTML)");let s={x:0,y:0};if(VM(e)){let L=await(await e.frameElement()).boundingBox();L&&(s=L)}let c=i?n:Eo,l=this.userControlledBrowserSettings.hybridSelectorMode,u=r.boundingBox,d=!!u?.width&&!!u?.height,p=!o&&d,m=this.userControlledBrowserSettings.bustCacheOnBoundingBoxChange&&d?u:void 0,h={ldistThreshold:mM,requireBoundingBox:p,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requireMatchingBoundingBox:m,requirements:r.requirements,additionalElements:r.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles},rootBoundingBox:s},g={cssParams:{selectors:r.generatedSelectors??[],cachedElementSerialized:r.nodeOnlySerializedHtml,opts:h},hybridParams:l&&r.hybridSelector?{nodes:r.hybridSelector,cachedElementSerialized:r.nodeOnlySerializedHtml,opts:h}:void 0},{css:f,hybrid:S}=await Yt({fn:L=>window.evaluatePrimaryCaches(L),arg:g,root:e,timeout:ie,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"}),b,y,T=[];if(l==="prefer"&&S?.result){b=S.result;let L={type:"HYBRID_SELECTOR",matched:!0,logs:S.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};T.push(L),y="HYBRID_SELECTOR"}else if(f?.result){b=f.result;let L=`${b.workingSelectors.length} CSS selectors matched the following element: ${b.serializedElement}`,N=b.workingSelectors.slice(0,5);T.push({type:"CSS_SELECTOR",matched:!0,logs:f.logs,reason:L,selectors:N}),n.debug({reason:L,workingSelectors:N},"Resolved with CSS selectors"),y="CSS_SELECTOR"}else throw T.push({type:"CSS_SELECTOR",matched:!1,reason:f.logs.length===1?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:f.logs}),S&&T.push({type:"HYBRID_SELECTOR",matched:!1,reason:S.logs.length===1?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S.logs}),f?.error&&n.error({err:new Error(f.error)},"Cache evaluation errored unexpectedly (CSS)"),S?.error&&n.error({err:new Error(S.error)},"Cache evaluation errored unexpectedly (Hybrid)"),new Tn("Cache evaluation failed",T,f.cacheMissReason);let w,P,v;if(this.userBrowserSettings.visualActions){let L=b.mPath;if(!L)throw new Error("Found element did not have an mPath despite using visual actions");let N=L.join(" > ");w=e.locator(N),P=this.stateManager.getNodeUsingMPathSelector(N)}else if(b.dataMomenticId!==void 0)v=parseInt(b.dataMomenticId),P=this.stateManager.dataMomenticIdToNodeMap[v],"workingSelectors"in b?w=e.locator(b.workingSelectors[0]):w=e.locator(li(v));else throw new M("InternalWebAgentError","Received an element resolution result with no identifying attributes");l&&r.hybridSelector&&(S?.logs.length===1?c.warn({hybridResult:S,cssResult:f,hybridMode:l},"Hybrid selector resolution rejected, continuing..."):S?.result?f?.result&&S?.result&&S.result.serializedElement!==f.result.serializedElement&&(this.userBrowserSettings.visualActions&&JSON.stringify(f.result.mPath)!==JSON.stringify(S.result.mPath)?n.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l,mode:"visualActions"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing..."):f.result.dataMomenticId!==S.result.dataMomenticId&&n.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l,mode:"dataMomenticId"},"Hybrid selector resolution returned a different element than CSS selector resolution, continuing...")):c.warn({originalCache:r,hybridResult:S,cssResult:f,hybridMode:l},"Hybrid selector resolution returned no eligible elements while CSS resolution did, continuing..."));let x=Ju(r);await this.updateCacheWithNewNodeDetails({node:P,target:r,locator:w,logger:n,originalElementLocationResult:b,allowNotActionableNodesOverride:o,skipSavingVisualAttributes:a});let O=ME(x,r);return O&&Object.keys(O).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(n),r.cacheResolutionUpdateSource=y),{a11yNode:P,displayString:b.serializedElement,locator:w,decisions:T,originalElementLocationResult:b,revalidator:async()=>{await fE({initialLocationResult:b,cacheEvaluationParams:g,locator:w,logger:n})}}}async resolveHardcodedCssSelector(e){let{ctx:r,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),m;try{await p.waitFor({state:"attached",timeout:He});let h=await p.evaluate(g=>window.generateCommonLocationResultMetadata?.(g),void 0,{timeout:tt});return m=h?.serializedElement??"unknown element",d.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),r?.details?.push({type:"TARGETING",elementLocationDecisions:d,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toISOString()}),{locator:p,originalElementLocationResult:h,displayString:m,decisions:d}}catch(h){let g=h.message;u=new M("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 ye(lr,i)}}throw u}async resolveTargetWithSecondaryMethods(e){if(!e.target.boundingBox)return;let{x:r,y:n,width:o,height:i}=e.target.boundingBox,a=await this.resolveTargetWithSecondaryMethodsHelper(e);if(!a)return;let s=await a.locator.boundingBox({timeout:ie});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(!r||!n||!c||!l){this.logger.debug({oldX:r,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-r)>100||Math.abs(l-n)>100){this.logger.debug({newX:c,newY:l,oldX:r,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:r,decisions:n,logger:o,signal:i,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s}){if(r.nodeOnlySerializedHtml&&r.nodeOnlySerializedHtml.trim().length<pM){let u="Refusing to attempt HTML comparison since the saved element is too short.";n.push({type:"HTML_DISTANCE",matched:!1,reason:u})}else if(r.nodeOnlySerializedHtml&&r.nodeOnlySerializedHtml.length>50)try{let u=await Yt({fn:d=>window.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:r.nodeOnlySerializedHtml},timeout:tt,root:e,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,p,m;if(d)p=this.stateManager.dataMomenticIdToNodeMap[d],m=e.locator(li(d));else if(u.mPath){let S=u.mPath.join(" > ");p=this.stateManager.getNodeUsingMPathSelector(S),m=e.locator(S)}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;o.warn({result:u,originalTarget:r,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=Ju(r);await this.updateCacheWithNewNodeDetails({node:p,target:r,locator:m,logger:o,originalElementLocationResult:u,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:s});let f=ME(g,r);return f&&Object.keys(f).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(o),r.cacheResolutionUpdateSource="HTML_DISTANCE",o.info({diffs:f,result:u},"Updated cache after l-dist resolution")),n.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:r.nodeOnlySerializedHtml}),{locator:m,a11yNode:p,displayString:h,decisions:n,originalElementLocationResult:u,revalidator:async()=>{await fE({initialLocationResult:u,locator:m,logger:o})}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){o.info({err:u},"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: ${u}`})}let c=r.screenshotUrl,l=r.role??"";if(c&&Kb.includes(l))try{let u=await this.resolveTargetWithTemplateMatching({root:e,oldTarget:r,screenshot:c,signal:i,allowNotActionableNodesOverride:a});return{...u,decisions:[...n,...u.decisions]}}catch(u){i?.throwIfAborted(),n.push({type:"TEMPLATE_MATCHING",matched:!1,reason:`Error finding closest element using saved screenshot: ${u}`}),o.warn({err:u},"Did not find any close element using saved screenshot")}}async resolveTargetWithTemplateMatching({screenshot:e,oldTarget:r,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}),s;if(typeof e=="string"){let b=await fetch(e);s=Buffer.from(await b.arrayBuffer())}else({data:s}=await this.storage.fetchOnDemandScreenshot(e));let c=p5(),l=await this.enricher.runTemplateMatching({id:c,searchImageBase64String:s.toString("base64"),pageImageBase64String:a.toString("base64")},{signal:n}),{target:u,locator:d}=await this.getTargetFromPositionPercentages({percentX:l.x,percentY:l.y,allowNotActionableNodesOverride:o}),p=u.boundingBox?.width,m=u.boundingBox?.height;if(!p||!m)throw i="Rejecting target from screenshot due to no bounding box",new Error(i);let h=u.id,g=this.stateManager.a11yIdToNodeMap[h],f=Ju(r);await this.updateCacheWithNewNodeDetails({target:r,node:g,locator:d,allowNotActionableNodesOverride:o});let S=ME(f,r);return S&&Object.keys(S).length>0&&(r.cacheResolutionUpdateTime=new Date().toISOString(),r.cacheResolutionUpdateLoggerTags=Qe(this.logger),r.cacheResolutionUpdateSource="TEMPLATE_MATCHING",this.logger.info({id:c,diffs:S,templateMatch:l},"Updated cache after template matching resolution")),{locator:d,originalElementLocationResult:void 0,a11yNode:g,displayString:u.nodeOnlySerializedHtml??"",decisions:[{type:"TEMPLATE_MATCHING",matched:!0,reason:"Found element using screenshot"}]}}async typeIntoTarget(e,r,n={}){await this.highlight(r.locator);let o;r.originalElementLocationResult?o=r.originalElementLocationResult.importantAttributes.type??"":o=await r.locator.getAttribute("type",{timeout:He})??"";let i=JM.some(a=>a===o.toLowerCase());return await yE({targetingResult:r,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(),isAndroid:this.properties.isAndroid??!1}),await this.page.waitForTimeout(150),this.directTypeHelper(e,n)}async click(e,r,n={}){return yE({targetingResult:e,options:n,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:r,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??!1})}async waitForUrl({beforeUrl:e,matcher:r},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(),Mm(s,r,n)){a=!0;break}await ye(lr,this.abortSignal)}if(!a)throw new M("ActionFailureError",`The active page URL ${n?.negated?"still does":"does not"} ${hm(r)} in ${o}ms.
4585
+ 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,r,n={}){let o=n.steps??5,i=Math.min(n.hoverDurationMs??500,tt);if(await this.highlight(e.locator),this.properties.isAndroid){await nO({page:this.page,fromLocator:e.locator,toLocator:r.locator,stepCount:o,dragDurationMs:n.dragDurationMs??1e3,hoverDurationMs:i}),await this.highlight(r.locator);return}await this.hover(e),await this.page.mouse.down();let a=await r.locator.boundingBox({timeout:ie});if(!a)throw new M("ActionFailureError","Could not get bounding box of target element");let s=a.x+a.width/2,c=a.y+a.height/2;await this.page.mouse.move(s,c,{steps:o}),await ye(i),await this.highlight(r.locator),await this.page.mouse.up()}async mouseDrag(e,r,n,o){o&&await this.hover({locator:o,originalElementLocationResult:void 0,serverSideBoundingBox:null}),await this.page.mouse.down();let i;if(o){let a=await o.boundingBox({timeout:ie});a&&(i={x:a.x+a.width/2,y:a.y+a.height/2})}i||(this.logger.warn("Could not get starting position from fromTarget, falling back to (0,0)"),i={x:0,y:0}),await this.page.mouse.move(i.x+e,i.y+r,{steps:n}),await ye(Yi),await this.page.mouse.up()}async hover(e){await this.highlight(e.locator),await ns({func:async r=>{await this.scrollIntoViewIfNeeded(r.locator);let n=await r.locator.boundingBox({timeout:ie});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 ns({func:r=>r.locator.focus({timeout:tt}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async blur(e){if(!e){let r=await this.getActivePageOrFrame();await Yt({fn:()=>{let n=document.activeElement;n&&n.nodeType===1&&n.blur()},root:r,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:He,codePath:"blurring the active element"});return}await this.highlight(e.locator),await ns({func:r=>r.locator.blur({timeout:tt}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:e})}async selectOption(e,r,n=!1){await this.highlight(e.locator),await ns({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async o=>{if(r.type==="INDEX"){let i=Number(r.index);if(isNaN(i))throw new M("UserConfigurationError",`Page index ${r.index} is not a number`)}await o.locator.selectOption({value:r.type==="VALUE"?r.value:void 0,label:r.type==="LABEL"?r.label:void 0,index:r.type==="INDEX"?Number(r.index):void 0},{force:n,timeout:ie})},targetingResult:e})}async press(e,r){let n=r.repeat??1;if(r.convertMeta){let o=Sg(e,this.properties.isAndroid);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:r.delayMs??0});await this.waitForStability()}async keyDown(e,r){if(r.convertMeta){let n=Sg(e,this.properties.isAndroid);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of gE(e))await this.page.keyboard.down(n)}async keyUp(e,r){if(r.convertMeta){let n=Sg(e,this.properties.isAndroid);n!==e&&(this.logger.info({keyString:e,convertedKey:n},"Converted platform dependent keys"),e=n)}for(let n of gE(e))await this.page.keyboard.up(n)}async refresh(e){let r=e?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let n=0,o=2;for(;n<o;){n++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:r});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.waitForStability()}async getBrowserState(e){let{maxAttempts:r=2,logger:n=this.logger,skipWaitForPageLoad:o,allowNotActionableNodesOverride:i,shouldLogOnFailure:a}=e,s=e.abortSignal??this.abortSignal,c=!i,l=i?!0:this.userControlledBrowserSettings.showZeroOpacityElements,u=a?n:Eo;o||await this.waitForPageLoad(),e.skipWait||await this.waitForStability({logger:n,signal:s});let d=0,p;for(;d<r;){d++;try{return await X(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:s,logger:n,filterByViewport:e.filterByViewport,showZeroOpacityElements:l,flagNotActionableNodes:c,skipPageLoad:e.skipWaitForPageLoad}),{milliseconds:this.pageLoadTimeout*d,signal:s,message:"Getting browser state took too long"})}catch(m){if(s?.throwIfAborted(),p=m instanceof Error?m.message:`${m}`,d>=r)throw m;u.warn({err:m,url:this.url()},"Error getting a11y tree, retrying...")}}throw new M("ActionFailureError",`Getting page content failed after ${r} attempts. Error: ${p}`)}async getViewportOffsetDetails(e){let[r,n,o,i,a]=await Yt({root:e,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:ie,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return{upperBound:r,lowerBound:r+i,leftBound:n,rightBound:n+o,width:o,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??a}}async waitForStability(e){let{logger:r=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.waitForStabilityHelper(i,r,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 waitForStabilityHelper(e,r,n,o=this.abortSignal){let i=!1,a=Date.now(),s,c={quality:25,retries:0,stabilizeBeforeScreenshot:!0},l=!1,u=0,d;for(;Date.now()-a<n;){o?.throwIfAborted();let p=Date.now();if(d!==void 0&&p-d<Yi&&await ye(Yi-(p-d),o),d=Date.now(),!(Date.now()-e.value<Wb)){if(s)try{let m=await this.screenshot(c);if(YM(s,m)>1){s=m,l=!1;continue}l=!0}catch(m){u++,u%3===0&&r.warn({err:m,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}else try{s=await this.screenshot(c)}catch(m){u++,u%3===0&&r.warn({err:m,screenshotErrors:u},"Failed to take screenshot for DOM stability check"),o?.throwIfAborted()}if(!(Date.now()-e.value<Wb)){i=!0;break}}}i||r.warn({duration:Date.now()-a,stable:{a11y:i,screenshot:l}},"A11y wait phase completed due to timeout, continuing...")}async clickUsingVisualCoordinates(e,r){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:r.rightClick?"right":"left",clickCount:r.doubleClick?2:1})}async dragAndDropUsingVisualCoordinates(e,r,n){await oO(this.page,e,r,n)}async mouseDragUsingVisualCoordinates(e){let{fromTarget:r,...n}=e;await TE({...n,page:this.page,visualTarget:r,isAndroid:this.properties.isAndroid??!1})}async hoverUsingVisualCoordinates(e){await this.page.mouse.move(e.x,e.y,{steps:3})}async getElementLocation(e){let r=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:!0,includePaintOrder:!0},timeout:ie}),n=await X(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:tt});process.platform==="darwin"&&n===1&&(n=uM);let o=r.documents[0],i=o.layout,a=o.nodes,s=a.nodeName||[],c=a.backendNodeId||[],l=i.nodeIndex,u=i.bounds,d=-1;for(let b=0;b<s.length;b++)if(c[b]===e){d=l.indexOf(b);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${e}`);let[p=0,m=0,h=0,g=0]=u[d];p/=n,m/=n,h/=n,g/=n;let f=p+h/2,S=m+g/2;return{centerX:f,centerY:S}}async scrollVertical(e){return bE({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 bE({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,r){if(await this.stopScreencast(),this.recordUrlVisited(e.url()),this.onVideoPageChange){let n=await e.video()?.path();if(n){let o=FO(n);this.onVideoPageChange({videoName:o})}}this.page=e,await this.reinitializeCDPClient(r??this.pageLoadTimeout)}async createNewTab(e,r){let n=await this.context.newPage();await this.changeActivePage(n,r?.loadTimeoutMs),await this.navigate({url:e,initialNavigation:!0,...r}),this.handleAvailableTabsChange()}async switchToPage(e,r){let n=!0,o,i=Date.now();for(;n||r?.retry&&Date.now()-i<this.smartWaitingTimeout;){n=!1;try{await this.switchToPageHelper(e,r);return}catch(a){this.logger.warn({err:a},"Error switching to page, retrying..."),o=a,await ye(lr)}}throw o}async switchToPageHelper(e,r){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 M("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)}.
4586
+ Available pages:${JSON.stringify(n.map(i=>i.url))}`);if(!qa(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,r?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:o.page,signal:this.abortSignal,codePath:"switch-to-tab-step"}),this.handleAvailableTabsChange()}async setCookie(e){let r;return typeof e=="string"?r=Kp(e):r=[e],await this.context.addCookies(r),r}async setLocalStorage(e,r){let n;for(let o=0;o<2;o++)try{await this.evaluateFunctionInPage(([i,a])=>{i&&localStorage.setItem(i,a||"")},[e,r],`setting local storage key ${e}`);return}catch(i){n=i}if(n)throw n}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){try{await X(this.exposeRecordingBindingsHelper(),{milliseconds:this.pageLoadTimeout})}catch(e){e instanceof Error&&e.message.includes("already registered")||this.logger.error({err:e},"Failed to install Momentic libraries for action recording")}}async exposeRecordingBindingsHelper(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0,{handle:!1}),await this.context.exposeBinding("captureTargetedEvent",({frame:e},r)=>{this.transformer&&DO({event:r,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,r)=>{this.transformer&&this.transformer.recordKeystroke(r)})}async startRecordingCrons(e){if(e.aborted)return;let r,n=(await this.getOpenPages()).map(c=>c.url),o=0,i=!1,a=async()=>{if(e.aborted||o>8){clearTimeout(r);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];qa(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};r=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}}},lr);let s=async()=>{clearInterval(r)};e.addEventListener("abort",s,{once:!0})}async startRecording(e,r,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=r,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:He})}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:r,codePath:n}){let o=this.pageLoadTimeout,i=e.url();if(!i.includes("chrome-error://")){try{await Fu({promiseGenerator:async()=>e.waitForLoadState("domcontentloaded",{timeout:o}),signal:r,codePath:`loadFrameAndRecordUrlDomContentLoad-${n}`,logger:this.logger,timeoutMs:this.pageLoadTimeout})}catch(a){let s=a;if(s.name==="AbortError")throw new M("UserInfrastructureError",`The page with URL ${Tt(i,50)} did not load within the configured timeout (${o}ms): ${s}`);if(!s.message.includes("detached"))throw s}try{await Fu({promiseGenerator:async()=>e.waitForLoadState("load",{timeout:o}),signal:r,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:r=!1}=e??{};return r||(await this.waitForPageLoad(),await this.waitForStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let e=await this.getRawCondensedHtml();return s5.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:r,error:n}=await Yt({fn:()=>window.getCondensedHtmlTree(),root:e,arg:void 0,timeout:tt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(n)throw new Error(`Failed to process page HTML: ${n}`);if(!r)throw new M("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return r}registerDialogHandler(e){let r=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",r)}async evaluateFunctionInAllFrames(e,r){return this.stateManager.executeFunctionInAllFrames(e,r)}async evaluateFunctionInPage(e,r,n,o=tt){let i=await this.getActivePageOrFrame();return Yt({root:i,fn:e,arg:r,timeout:o,waitForPageLoad:()=>this.waitForPageLoad(),codePath:n})}async evaluateCodeInPage({code:e,fragment:r,context:n,timeoutMs:o=Di}){let i=MM(),a={code:e,fragment:r,context:n},{result:s}=await X(this.page.evaluate(i,a),{milliseconds:o,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new M("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${o/1e3} seconds`)},signal:this.abortSignal});return s}async getDomNodeFromPixelPosition(e,r){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:tt});let n;try{n=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:e,y:r},timeout:He})}catch(o){throw this.logger.error({err:o,x:e,y:r},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return n}async getDomNodeFromPositionPercentages(e,{percentX:r,percentY:n}){if(r<0||r>1||n<0||n>1)throw new M("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*r),d=Math.ceil(i*n),p=u+l,m=d+c;return this.getDomNodeFromPixelPosition(p,m)}async highlightFromPositionPercentages(e){let r=await this.getActivePageOrFrame(),n;try{n=await this.getDomNodeFromPositionPercentages(r,e)}catch{}return n?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:He,params:{highlightConfig:sO,backendNodeId:n.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:He,method:"Overlay.hideHighlight",params:{backendNodeId:n?.backendNodeId}})}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:He})}catch{}}async getTargetFromPositionPercentages(e){let r=await this.getActivePageOrFrame(),n=await this.getDomNodeFromPositionPercentages(r,e);return this.getTargetFromBackendNodeId({root:r,backendNodeId:n.backendNodeId,allowNotActionableNodesOverride:e.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:e,backendNodeId:r,allowNotActionableNodesOverride:n}){let o=this.stateManager.domGraph?.backendIdToNode[r];if(!o)throw new Error("No DOM node was found with the given backend ID");let i=o?.attributes[ts],a=parseInt(i??"");if(!i||isNaN(a))throw new Error("No data-momentic-id was found on the DOM node");let s=e.locator(li(a)),c=await this.fetchHtmlAttributes({locator:s,logger:this.logger,allowNotActionableNodesOverride:n}),l={id:-1,dataMomenticId:a,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...c};return this.logger.debug({target:l},"Tied backend ID to HTML node"),{target:l,locator:s}}async performTargetRedirection(e,r){try{return await this.scrollIntoViewIfNeeded(e.locator),await X(this.performTargetRedirectionHelper(e,r),{milliseconds:ie})}catch(n){r.warn({err:n},"Error performing target redirection, using original element");return}}async performTargetRedirectionHelper(e,r){let n=Date.now(),{locator:o,originalElementLocationResult:i}=e,a=await o.boundingBox({timeout:ie});if(!a){r.error(`Attempted to click on element with no bounding box: ${i?.serializedElement}`);return}let{x:s,y:c,width:l,height:u}=a,d=this.getViewport();if(s<0||c<0||!d||s+l>d.width||c+u>d.height){r.info("Skipping locator redirection because the element is outside the viewport");return}let p=await this.getActivePageOrFrame(),{dataMomenticId:m,mPathSelector:h,error:g,serializedElement:f,foundElementRelativePoint:S,force:b,logs:y}=await o.evaluate(w=>{let P=window;if(!P.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return P.performTargetRedirection(w)},void 0,{timeout:He}),T=Date.now()-n;if(g){r.warn({error:g,serializedElement:f,duration:T,force:b,logs:y},"Got error from target redirection with bounding box");return}else{if(m)return r.info({newDataMomenticId:m,serializedElement:f,duration:T,force:b,logs:y},"Redirected target to new element with bounding box with data-momentic-id"),{locator:p.locator(li(m)),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:S,force:b}};if(h)return r.info({newMPathSelector:h,serializedElement:f,duration:T,force:b,logs:y},"Redirected target to new element with bounding box with mPath"),{locator:p.locator(h),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:S,force:b}};if(S)return r.info({foundElementRelativePoint:S,serializedElement:f,duration:T,force:b,logs:y},"Chose specific visible point on original element"),{locator:o,originalElementLocationResult:i,serverSideBoundingBox:await o.boundingBox({timeout:ie}),hints:{relativeXYToLocator:S,force:b}};if(b)return r.info({serializedElement:f,duration:T,force:b,logs:y},"Forcing click on original element"),{locator:o,serverSideBoundingBox:await o.boundingBox({timeout:ie}),originalElementLocationResult:i,hints:{force:b}}}}async fetchHtmlAttributes({locator:e,logger:r=this.logger,originalElementLocationResult: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",originalElementLocationResult:n,showZeroOpacityElements:o?!0:a},{timeout:tt});if("error"in s&&s.error)throw s.error.startsWith(aM)?new qo(s.error):s.error.startsWith(sM)?new Sp(s.error):new Error(s.error);return s.warnings.length&&r.warn(s,"Got warnings while generating HTML attributes for target"),s.attributes}async moveMouseFromPositionPercentages(e,r){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*r);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,r,n){let o=this.getViewport();if(!o)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(o.width*r),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:He})}async scrollFromPositionPercentages(e,r,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*r);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!!hM}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(e){setTimeout(()=>{try{e.cleanup()}catch(r){this.logger.debug({err:r,filePath:e.filePath},"Failed cleaning up file after upload")}},3e4),await this.setFileChooserHandlerHelper(e)}logToUserConsole(e,r,n,...o){let i=this.context.pages().indexOf(e);i=i===-1?0:i,oE(e,this.debugData,i,{type:r,text:`[MOMENTIC] ${n}`,args:o})}async setFileChooserHandlerHelper({filePath:e,filename:r}){if(!Ag(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=r?.trim()||FO(e),o=o5(e),i=u5(e),a=Au[i];this.page.once("filechooser",async c=>{this.logger.info({filePath:e,fileName:n},"File chooser triggered");try{if(!Ag(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:l5.getType(e)||"application/octet-stream"},{timeout:dg})}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),m=new Array(p.length);for(let g=0;g<p.length;g++)m[g]=p.charCodeAt(g);let h=new Uint8Array(m);d.MomenticFile=class extends Blob{kind="file";name=d.momenticFileName;constructor(){super([h],{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([h]);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 r={...this.debugData};return this.debugData={logsPerPage:[]},r}async copy(e){try{await this.evaluateFunctionInPage(r=>navigator.clipboard.writeText(r),e,"copying text to clipboard")}catch(r){if(r instanceof Error&&r.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 r}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:!0})}async registerRequestListener(e){return this.page.waitForResponse(r=>{let n=r.request();return e.matches({url:n.url(),method:n.method()})})}registerRequestRecorder(e,r){this.requestRecorders[e]=r}removeRequestRecorder(e){delete this.requestRecorders[e]}setHeader(e,r,n){this.customHeaders.push({key:e.toLowerCase(),value:r,matcher:n})}registerMock(e,r,n,o){let i=e??vg();return this.mocks[i]={matcher:r,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??dM}get userBrowserSettings(){return Ju(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??Bl}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let e=hg();for(let r of e)if(!(!Ag(r)||!kO(r).isDirectory()||!["new","pending","completed"].some(o=>{let i=d5(r,o);return Ag(i)&&kO(i).isDirectory()&&i5(i).length>0})))return r}};import f6 from"fetch-cookie";import{cloneDeep as C0}from"lodash-es";import Z$e,{multistream as eWe}from"pino";import rWe from"pino-pretty";var iWe=5*1024,m5="...[truncated]",aWe=Buffer.byteLength(m5,"utf8");import{PostHog as g5}from"posthog-node";async function BO(t,e){let r,n=0,o=3,i,a;for(;n<o;)try{let s=await X(t.getAllFlagsAndPayloads(e),{milliseconds:5e3});i=s.featureFlags||{},a=s.featureFlagPayloads||{};break}catch(s){r=s,n++,await new Promise(c=>setTimeout(c,100*n))}if(i&&a)return{flags:i,payloads:a};throw r}var Rg=class t extends vu{constructor(r,n,o,i){super(o,i);this.client=r;this.orgId=n}static async init(r){let n=new g5("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://us.i.posthog.com"}),{flags:o,payloads:i}=await BO(n,r);return new t(n,r,o,i)}async refresh(){let{flags:r,payloads:n}=await BO(this.client,this.orgId);this.flags=r,this.payloads=n}};import{randomUUID as h5}from"node:crypto";import{PostHog as f5}from"posthog-node";var Cg=class t{bindings;client;options;constructor(e,r={}){this.bindings=e,this.options=r,this.client=new f5("phc_oy1FexHsc0S3axxOMXCm46yZsW35zROAoV4SOzpDSXH",{host:"https://us.i.posthog.com",...r})}async shutdown(){await this.client.shutdown()}identify(e){return this.bindings={...this.bindings,...e},this}child(e){return new t({...this.bindings,...e},this.options)}track(e,r){if(!YC(this.bindings))return console.error(`Cannot track ${e.type} event without required bindings.`,this.bindings),this;let{type:n,...o}=e;return this.client.capture({distinctId:h5(),event:n,timestamp:r?.timestamp,properties:{...this.bindings,...o}}),this}};import{execSync as S5}from"child_process";import is from"os";import y5 from"v8";var b5=2e3,zO,wg,HO=is.platform(),E5=is.cpus().map(t=>({model:t.model,speed:t.speed})).reduce((t,e)=>(t[e.model]={speed:e.speed},t.totalCores=(t.totalCores??0)+1,t),{});function OE(t=Date.now()){let e=is.cpus(),r={measurementTime:t,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let n of e)r.user+=n.times.user,r.nice+=n.times.nice,r.sys+=n.times.sys,r.idle+=n.times.idle,r.irq+=n.times.irq;return r.total=r.user+r.nice+r.sys+r.idle+r.irq,r}function jO(t,e){let r={user:e.user-t.user,nice:e.nice-t.nice,sys:e.sys-t.sys,idle:e.idle-t.idle,irq:e.irq-t.irq,total:e.total-t.total};return r.total<=0?null:{measurementTime:e.measurementTime,intervalMs:e.measurementTime-t.measurementTime,user:r.user/r.total*100,nice:r.nice/r.total*100,sys:r.sys/r.total*100,idle:r.idle/r.total*100,irq:r.irq/r.total*100,total:100-r.idle/r.total*100}}function T5(){let t=OE();return()=>{let e=OE(),r=jO(t,e);return t=e,r}}function v5(){let t=process.cpuUsage(),e=process.hrtime.bigint();return()=>{let r=process.cpuUsage(),n=process.hrtime.bigint(),o=Number(n-e)/1e6,i=r.user-t.user,a=r.system-t.system;if(t=r,e=n,o<=0)return null;let s=Math.max(is.cpus().length,1),c=l=>Math.max(0,l/1e3/o*100/s);return{total:c(i+a),user:c(i),sys:c(a),intervalMs:o}}}function GO({intervalMs:t=b5,maxSamples:e=1e4,keepSamples:r=!0,onSample:n}={}){let o=[],i=T5(),a=v5(),s=()=>{let u=Date.now(),d=WO(),p=process.memoryUsage(),m=i(),h=a(),g={timestamp:u,system:{cpu:m,memory:{total:d.totalMemory,free:d.freeMemory,freePercentage:d.freePercentage}},process:{cpu:h,memory:{rss:p.rss,heapTotal:p.heapTotal,heapUsed:p.heapUsed,external:p.external,arrayBuffers:p.arrayBuffers}}};n?.(g),r&&(o.push(g),o.length>e&&o.shift())};s();let c=setInterval(s,t),l=u=>({samples:r?[...o]:[]});return{stop:()=>(clearInterval(c),l(Date.now())),getSeries:()=>l(Date.now())}}var xg=t=>{try{let e={},r=!1,n=WO(),o=A5(),i=`${Math.round(n.freePercentage*100)}%`;n.freePercentage<.05&&(Object.assign(e,process.memoryUsage()),r=!0);let a=`${o?Math.round(o.idle):"unknown"}%`;o&&o?.total>80&&(r=!0);let s=y5.getHeapStatistics(),c=s.used_heap_size,l=s.heap_size_limit;c/l>.9&&(r=!0),r?(t.warn({memory:n,cpu:o,heapStats:s,...e},"Critical resource usage metrics detected"),Va&&A.warn(`Low machine resources detected (memory: ${i} free, cpu: ${a} free)`)):t.debug({memory:n,cpu:o},"Got machine resource usage metrics")}catch{}},VO=t=>{xg(t),setTimeout(()=>xg(t),5e3)};function $O(t){if(!Pn)return xg(t),{interval:setInterval(()=>xg(t),2e4),cpuMetadata:E5,platform:HO}}function WO(){let t=is.totalmem(),e=HO==="darwin"?R5():(()=>{let n=is.freemem();return{availableMemory:n,rawFreeMemory:n,cachedMemory:0}})(),r=e.availableMemory/t;return{totalMemory:t,freeMemory:e.availableMemory,freePercentage:r}}function A5(){let t=OE();if(!wg)return wg=t,null;let e=jO(wg,t);return wg=t,e?(zO=e,zO):null}function R5(){try{let t=S5("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),r=t.match(/page size of (\d+) bytes/)?.[1],n=r?Number.parseInt(r,10):4096,o=u=>{let p=t.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return p?Number.parseInt(p,10):0},i=o("Pages free"),a=o("Pages inactive"),s=o("Pages speculative"),c=i*n,l=(a+s)*n;return{availableMemory:c+l,rawFreeMemory:c,cachedMemory:l}}catch{let t=is.freemem();return{availableMemory:t,rawFreeMemory:t,cachedMemory:0}}}var _g=class{increment(e,r,n){}gauge(e,r){}distribution(e,r,n){}async flush(){}async recordDuration({fn:e}){return await e()}};function C5(t){if(!t||t.length===0)return{};let e={};for(let r of t){let n=r.indexOf(":");if(n>-1){let o=r.slice(0,n).trim(),i=r.slice(n+1).trim();o&&(e[o]=i);continue}e[r]=!0}return e}function Ig(t,e){let r=C5(t);return!e||Object.keys(e).length===0?r:{...e,...r}}var bL="=",Lg=";",VE=",";var EL=8192;var $l={};vB($l,{getKeyPairs:()=>o3,parseKeyPairsIntoRecord:()=>i3,parsePairKeyValue:()=>TL,serializeKeyPairs:()=>n3});bt();var r3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function n3(t){return t.reduce(function(e,r){var n=""+e+(e!==""?VE:"")+r;return n.length>EL?e:n},"")}function o3(t){return t.getAllEntries().map(function(e){var r=r3(e,2),n=r[0],o=r[1],i=encodeURIComponent(n)+"="+encodeURIComponent(o.value);return o.metadata!==void 0&&(i+=Lg+o.metadata.toString()),i})}function TL(t){var e=t.split(Lg);if(!(e.length<=0)){var r=e.shift();if(r){var n=r.indexOf(bL);if(!(n<=0)){var o=decodeURIComponent(r.substring(0,n).trim()),i=decodeURIComponent(r.substring(n+1).trim()),a;return e.length>0&&(a=NE(e.join(Lg))),{key:o,value:i,metadata:a}}}}}function i3(t){return typeof t!="string"||t.length===0?{}:t.split(VE).map(function(e){return TL(e)}).filter(function(e){return e!==void 0&&e.value.length>0}).reduce(function(e,r){return e[r.key]=r.value,e},{})}bt();var Ng;(function(t){t.AlwaysOff="always_off",t.AlwaysOn="always_on",t.ParentBasedAlwaysOff="parentbased_always_off",t.ParentBasedAlwaysOn="parentbased_always_on",t.ParentBasedTraceIdRatio="parentbased_traceidratio",t.TraceIdRatio="traceidratio"})(Ng||(Ng={}));var a3=",",s3=["OTEL_SDK_DISABLED"];function l3(t){return s3.indexOf(t)>-1}var c3=["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 u3(t){return c3.indexOf(t)>-1}var d3=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function p3(t){return d3.indexOf(t)>-1}var $E=1/0,WE=128,m3=128,g3=128,qE={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:Ct.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:$E,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:WE,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:m3,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:g3,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:Ng.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 h3(t,e,r){if(!(typeof r[t]>"u")){var n=String(r[t]);e[t]=n.toLowerCase()==="true"}}function f3(t,e,r,n,o){if(n===void 0&&(n=-1/0),o===void 0&&(o=1/0),typeof r[t]<"u"){var i=Number(r[t]);isNaN(i)||(i<n?e[t]=n:i>o?e[t]=o:e[t]=i)}}function S3(t,e,r,n){n===void 0&&(n=a3);var o=r[t];typeof o=="string"&&(e[t]=o.split(n).map(function(i){return i.trim()}))}var y3={ALL:Ct.ALL,VERBOSE:Ct.VERBOSE,DEBUG:Ct.DEBUG,INFO:Ct.INFO,WARN:Ct.WARN,ERROR:Ct.ERROR,NONE:Ct.NONE};function b3(t,e,r){var n=r[t];if(typeof n=="string"){var o=y3[n.toUpperCase()];o!=null&&(e[t]=o)}}function vL(t){var e={};for(var r in qE){var n=r;switch(n){case"OTEL_LOG_LEVEL":b3(n,e,t);break;default:if(l3(n))h3(n,e,t);else if(u3(n))f3(n,e,t);else if(p3(n))S3(n,e,t);else{var o=t[n];typeof o<"u"&&o!==null&&(e[n]=String(o))}}}return e}function br(){var t=vL(process.env);return Object.assign({},qE,t)}function AL(t){return t>=48&&t<=57?t-48:t>=97&&t<=102?t-87:t-55}function Dg(t){for(var e=new Uint8Array(t.length/2),r=0,n=0;n<t.length;n+=2){var o=AL(t.charCodeAt(n)),i=AL(t.charCodeAt(n+1));e[r++]=o<<4|i}return e}var RL="1.25.1";var E3="deployment.environment";var T3="process.runtime.name";var v3="service.name";var A3="service.instance.id";var R3="telemetry.sdk.name",C3="telemetry.sdk.language",w3="telemetry.sdk.version";var CL=E3;var wL=T3;var kg=v3;var xL=A3;var od=R3,id=C3,ad=w3;var x3="nodejs";var _L=x3;var Wl,Ug=(Wl={},Wl[od]="opentelemetry",Wl[wL]="node",Wl[id]=_L,Wl[ad]=RL,Wl);var _3=9,I3=6,P3=Math.pow(10,I3),M3=Math.pow(10,_3);function IL(t){var e=t/1e3,r=Math.trunc(e),n=Math.round(t%1e3*P3);return[r,n]}function PL(t){return t[0]*M3+t[1]}function sd(t){return t[0]*1e6+t[1]/1e3}var ss;(function(t){t[t.SUCCESS=0]="SUCCESS",t[t.FAILED=1]="FAILED"})(ss||(ss={}));var ML=function(){function t(){var e=this;this._promise=new Promise(function(r,n){e._resolve=r,e._reject=n})}return Object.defineProperty(t.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),t.prototype.resolve=function(e){this._resolve(e)},t.prototype.reject=function(e){this._reject(e)},t}();var O3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},L3=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},OL=function(){function t(e,r){this._callback=e,this._that=r,this._isCalled=!1,this._deferred=new ML}return Object.defineProperty(t.prototype,"isCalled",{get:function(){return this._isCalled},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"promise",{get:function(){return this._deferred.promise},enumerable:!1,configurable:!0}),t.prototype.call=function(){for(var e,r=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,L3([this._that],O3(n),!1))).then(function(i){return r._deferred.resolve(i)},function(i){return r._deferred.reject(i)})}catch(i){this._deferred.reject(i)}}return this._deferred.promise},t}();var Bn;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE"})(Bn||(Bn={}));var Mr;(function(t){t[t.HISTOGRAM=0]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",t[t.GAUGE=2]="GAUGE",t[t.SUM=3]="SUM"})(Mr||(Mr={}));var N3=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();var j2e=function(t){N3(e,t);function e(r){var n=t.call(this,r)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function LL(t,e){for(var r=0,n=t.length-1;n-r>1;){var o=Math.trunc((n+r)/2);t[o]<=e?r=o:n=o-1}return t[n]<=e?n:t[r]<=e?r:-1}bt();var zn;(function(t){t[t.DROP=0]="DROP",t[t.SUM=1]="SUM",t[t.LAST_VALUE=2]="LAST_VALUE",t[t.HISTOGRAM=3]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(zn||(zn={}));var NL=function(){function t(){this.kind=zn.DROP}return t.prototype.createAccumulation=function(){},t.prototype.merge=function(e,r){},t.prototype.diff=function(e,r){},t.prototype.toMetricData=function(e,r,n,o){},t}();var ke;(function(t){t.COUNTER="COUNTER",t.GAUGE="GAUGE",t.HISTOGRAM="HISTOGRAM",t.UP_DOWN_COUNTER="UP_DOWN_COUNTER",t.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",t.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",t.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(ke||(ke={}));var D3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function k3(t){var e=t.map(function(){return 0});return e.push(0),{buckets:{boundaries:t,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var KE=function(){function t(e,r,n,o){n===void 0&&(n=!0),o===void 0&&(o=k3(r)),this.startTime=e,this._boundaries=r,this._recordMinMax=n,this._current=o}return t.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 r=LL(this._boundaries,e);this._current.buckets.counts[r+1]+=1}},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var YE=function(){function t(e,r){this._boundaries=e,this._recordMinMax=r,this.kind=zn.HISTOGRAM}return t.prototype.createAccumulation=function(e){return new KE(e,this._boundaries,this._recordMinMax)},t.prototype.merge=function(e,r){for(var n=e.toPointValue(),o=r.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 KE(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})},t.prototype.diff=function(e,r){for(var n=e.toPointValue(),o=r.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 KE(r.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})},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.HISTOGRAM,dataPoints:n.map(function(i){var a=D3(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ke.GAUGE||e.type===ke.UP_DOWN_COUNTER||e.type===ke.OBSERVABLE_GAUGE||e.type===ke.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}}})}},t}();bt();var XE=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},JE=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},ZE=function(){function t(e,r,n,o){e===void 0&&(e=new U3),r===void 0&&(r=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=r,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(t.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.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}),t.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(r,n){return e.at(n)})},t.prototype.at=function(e){var r=this.indexBase-this.indexStart;return e<r&&(e+=this.backing.length),e-=r,this.backing.countAt(e)},t.prototype.incrementBucket=function(e,r){this.backing.increment(e,r)},t.prototype.decrementBucket=function(e,r){this.backing.decrement(e,r)},t.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()},t.prototype.downscale=function(e){this._rotate();for(var r=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<r;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},t.prototype.clone=function(){return new t(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},t.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)},t.prototype._relocateBucket=function(e,r){e!==r&&this.incrementBucket(e,this.backing.emptyBucket(r))},t}();var U3=function(){function t(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(t.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),t.prototype.countAt=function(e){return this._counts[e]},t.prototype.growTo=function(e,r,n){var o=new Array(e).fill(0);o.splice.apply(o,JE([n,this._counts.length-r],XE(this._counts.slice(r)),!1)),o.splice.apply(o,JE([0,r],XE(this._counts.slice(0,r)),!1)),this._counts=o},t.prototype.reverse=function(e,r){for(var n=Math.floor((e+r)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[r-o-1],this._counts[r-o-1]=i}},t.prototype.emptyBucket=function(e){var r=this._counts[e];return this._counts[e]=0,r},t.prototype.increment=function(e,r){this._counts[e]+=r},t.prototype.decrement=function(e,r){this._counts[e]>=r?this._counts[e]-=r:this._counts[e]=0},t.prototype.clone=function(){return new t(JE([],XE(this._counts),!1))},t}();var DL=52,F3=2146435072,B3=1048575,QE=1023,Fg=-QE+1,Bg=QE,ld=Math.pow(2,-1022);function zg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=(r&F3)>>20;return n-QE}function Hg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=e.getUint32(4),o=(r&B3)*Math.pow(2,32);return o+n}function cd(t,e){return t===0||t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY||Number.isNaN(t)?t:t*Math.pow(2,e)}function UL(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t}var z3=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ea=function(t){z3(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(Error);var BL=function(){function t(e){this._shift=-e}return t.prototype.mapToIndex=function(e){if(e<ld)return this._minNormalLowerBoundaryIndex();var r=zg(e),n=this._rightShift(Hg(e)-1,DL);return r+n>>this._shift},t.prototype.lowerBoundary=function(e){var r=this._minNormalLowerBoundaryIndex();if(e<r)throw new ea("underflow: "+e+" is < minimum lower boundary: "+r);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new ea("overflow: "+e+" is > maximum lower boundary: "+n);return cd(1,e<<this._shift)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){var e=Fg>>this._shift;return this._shift<2&&e--,e},t.prototype._maxNormalLowerBoundaryIndex=function(){return Bg>>this._shift},t.prototype._rightShift=function(e,r){return Math.floor(e*Math.pow(2,-r))},t}();var zL=function(){function t(e){this._scale=e,this._scaleFactor=cd(Math.LOG2E,e),this._inverseFactor=cd(Math.LN2,-e)}return t.prototype.mapToIndex=function(e){if(e<=ld)return this._minNormalLowerBoundaryIndex()-1;if(Hg(e)===0){var r=zg(e);return(r<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},t.prototype.lowerBoundary=function(e){var r=this._maxNormalLowerBoundaryIndex();if(e>=r){if(e===r)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new ea("overflow: "+e+" is > maximum lower boundary: "+r)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return ld;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new ea("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){return Fg<<this._scale},t.prototype._maxNormalLowerBoundaryIndex=function(){return(Bg+1<<this._scale)-1},t}();var HL=-10,jL=20,H3=Array.from({length:31},function(t,e){return e>10?new zL(e-10):new BL(e-10)});function eT(t){if(t>jL||t<HL)throw new ea("expected scale >= "+HL+" && <= "+jL+", got: "+t);return H3[t+10]}var j3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},jg=function(){function t(e,r){this.low=e,this.high=r}return t.combine=function(e,r){return new t(Math.min(e.low,r.low),Math.max(e.high,r.high))},t}(),G3=20,V3=160,tT=2,$3=function(){function t(e,r,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),r===void 0&&(r=V3),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 ZE),u===void 0&&(u=new ZE),d===void 0&&(d=eT(G3)),this.startTime=e,this._maxSize=r,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<tT&&(Z.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+tT),this._maxSize=tT)}return t.prototype.record=function(e){this.updateByIncrement(e,1)},t.prototype.setStartTime=function(e){this.startTime=e},t.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(t.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),t.prototype.updateByIncrement=function(e,r){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=r,e===0){this._zeroCount+=r;return}this._sum+=e*r,e>0?this._updateBuckets(this._positive,e,r):this._updateBuckets(this._negative,-e,r)}},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._mergeBuckets(this.positive,e,e.positive,r),this._mergeBuckets(this.negative,e,e.negative,r)},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._diffBuckets(this.positive,e,e.positive,r),this._diffBuckets(this.negative,e,e.negative,r)},t.prototype.clone=function(){return new t(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},t.prototype._updateBuckets=function(e,r,n){var o=this._mapping.mapToIndex(r),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(r)}this._incrementIndexBy(e,o,n)},t.prototype._incrementIndexBy=function(e,r,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=r),r<e.indexStart){var o=e.indexEnd-r;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=r}else if(r>e.indexEnd){var o=r-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=r}var i=r-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},t.prototype._grow=function(e,r){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=UL(r);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},t.prototype._changeScale=function(e,r){for(var n=0;e-r>=this._maxSize;)e>>=1,r>>=1,n++;return n},t.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var r=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=eT(r)}},t.prototype._minScale=function(e){var r=Math.min(this.scale,e.scale),n=jg.combine(this._highLowAtScale(this.positive,this.scale,r),this._highLowAtScale(e.positive,e.scale,r)),o=jg.combine(this._highLowAtScale(this.negative,this.scale,r),this._highLowAtScale(e.negative,e.scale,r));return Math.min(r-this._changeScale(n.high,n.low),r-this._changeScale(o.high,o.low))},t.prototype._highLowAtScale=function(e,r,n){if(e.length===0)return new jg(0,-1);var o=r-n;return new jg(e.indexStart>>o,e.indexEnd>>o)},t.prototype._mergeBuckets=function(e,r,n,o){for(var i=n.offset,a=r.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},t.prototype._diffBuckets=function(e,r,n,o){for(var i=n.offset,a=r.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()},t}();var GL=function(){function t(e,r){this._maxSize=e,this._recordMinMax=r,this.kind=zn.EXPONENTIAL_HISTOGRAM}return t.prototype.createAccumulation=function(e){return new $3(e,this._maxSize,this._recordMinMax)},t.prototype.merge=function(e,r){var n=r.clone();return n.merge(e),n},t.prototype.diff=function(e,r){var n=r.clone();return n.diff(e),n},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=j3(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===ke.GAUGE||e.type===ke.UP_DOWN_COUNTER||e.type===ke.OBSERVABLE_GAUGE||e.type===ke.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}}})}},t}();var W3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},rT=function(){function t(e,r,n){r===void 0&&(r=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=r,this.sampleTime=n}return t.prototype.record=function(e){this._current=e,this.sampleTime=IL(Date.now())},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var VL=function(){function t(){this.kind=zn.LAST_VALUE}return t.prototype.createAccumulation=function(e){return new rT(e)},t.prototype.merge=function(e,r){var n=sd(r.sampleTime)>=sd(e.sampleTime)?r:e;return new rT(e.startTime,n.toPointValue(),n.sampleTime)},t.prototype.diff=function(e,r){var n=sd(r.sampleTime)>=sd(e.sampleTime)?r:e;return new rT(r.startTime,n.toPointValue(),n.sampleTime)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.GAUGE,dataPoints:n.map(function(i){var a=W3(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},t}();var q3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ud=function(){function t(e,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=r,this._current=n,this.reset=o}return t.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var nT=function(){function t(e){this.monotonic=e,this.kind=zn.SUM}return t.prototype.createAccumulation=function(e){return new ud(e,this.monotonic)},t.prototype.merge=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return r.reset?new ud(r.startTime,this.monotonic,o,r.reset):new ud(e.startTime,this.monotonic,n+o)},t.prototype.diff=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return this.monotonic&&n>o?new ud(r.startTime,this.monotonic,o,!0):new ud(r.startTime,this.monotonic,o-n)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Mr.SUM,dataPoints:n.map(function(i){var a=q3(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},t}();var ls=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),No=function(){function t(){}return t.Drop=function(){return ZL},t.Sum=function(){return QL},t.LastValue=function(){return eN},t.Histogram=function(){return tN},t.ExponentialHistogram=function(){return K3},t.Default=function(){return Y3},t}();var $L=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new NL,e}(No);var WL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){switch(r.type){case ke.COUNTER:case ke.OBSERVABLE_COUNTER:case ke.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new nT(!0),e.NON_MONOTONIC_INSTANCE=new nT(!1),e}(No);var qL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new VL,e}(No);var KL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new YE([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(No);var YL=function(t){ls(e,t);function e(r,n){n===void 0&&(n=!0);var o=t.call(this)||this;if(o._recordMinMax=n,r==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");r=r.concat(),r=r.sort(function(s,c){return s-c});var i=r.lastIndexOf(-1/0),a=r.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=r.slice(i+1,a),o}return e.prototype.createAggregator=function(r){return new YE(this._boundaries,this._recordMinMax)},e}(No);var XL=function(t){ls(e,t);function e(r,n){r===void 0&&(r=160),n===void 0&&(n=!0);var o=t.call(this)||this;return o._maxSize=r,o._recordMinMax=n,o}return e.prototype.createAggregator=function(r){return new GL(this._maxSize,this._recordMinMax)},e}(No);var JL=function(t){ls(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype._resolve=function(r){switch(r.type){case ke.COUNTER:case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:return QL;case ke.GAUGE:case ke.OBSERVABLE_GAUGE:return eN;case ke.HISTOGRAM:return r.advice.explicitBucketBoundaries?new YL(r.advice.explicitBucketBoundaries):tN}return Z.warn("Unable to recognize instrument type: "+r.type),ZL},e.prototype.createAggregator=function(r){return this._resolve(r).createAggregator(r)},e}(No);var ZL=new $L,QL=new WL,eN=new qL,tN=new KL,K3=new XL,Y3=new JL;bt();function Gg(){return"unknown_service:"+process.argv0}var ta=function(){return ta=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ta.apply(this,arguments)},X3=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},J3=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},Z3=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},oT=function(){function t(e,r){var n=this,o;this._attributes=e,this.asyncAttributesPending=r!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=r?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return Z.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return t.empty=function(){return t.EMPTY},t.default=function(){var e;return new t((e={},e[kg]=Gg(),e[id]=Ug[id],e[od]=Ug[od],e[ad]=Ug[ad],e))},Object.defineProperty(t.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&Z.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),t.prototype.waitForAsyncAttributes=function(){return X3(this,void 0,void 0,function(){return J3(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]}})})},t.prototype.merge=function(e){var r=this,n;if(!e)return this;var o=ta(ta({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new t(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=Z3(a,2),l=c[0],u=c[1];return ta(ta(ta(ta({},r._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new t(o,i)},t.EMPTY=new t({}),t}();var cs;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE",t[t.LOWMEMORY=2]="LOWMEMORY"})(cs||(cs={}));bt();var Q3=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},eX=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},iT=function(){return Bn.CUMULATIVE},rN=function(t){switch(t){case ke.COUNTER:case ke.OBSERVABLE_COUNTER:case ke.GAUGE:case ke.HISTOGRAM:case ke.OBSERVABLE_GAUGE:return Bn.DELTA;case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:return Bn.CUMULATIVE}},nN=function(t){switch(t){case ke.COUNTER:case ke.HISTOGRAM:return Bn.DELTA;case ke.GAUGE:case ke.UP_DOWN_COUNTER:case ke.OBSERVABLE_UP_DOWN_COUNTER:case ke.OBSERVABLE_COUNTER:case ke.OBSERVABLE_GAUGE:return Bn.CUMULATIVE}};function tX(){var t=br(),e=t.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.trim().toLowerCase();return e==="cumulative"?iT:e==="delta"?rN:e==="lowmemory"?nN:(Z.warn("OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '"+t.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE+"', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead."),iT)}function rX(t){return t!=null?t===cs.DELTA?rN:t===cs.LOWMEMORY?nN:iT:tX()}function nX(t){return t?.aggregationPreference?t.aggregationPreference:function(e){return No.Default()}}var oN=function(){function t(e,r){this._otlpExporter=e,this._aggregationSelector=nX(r),this._aggregationTemporalitySelector=rX(r?.temporalityPreference)}return t.prototype.export=function(e,r){this._otlpExporter.export([e],r)},t.prototype.shutdown=function(){return Q3(this,void 0,void 0,function(){return eX(this,function(e){switch(e.label){case 0:return[4,this._otlpExporter.shutdown()];case 1:return e.sent(),[2]}})})},t.prototype.forceFlush=function(){return Promise.resolve()},t.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},t.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},t}();bt();bt();var oX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},iN=1e4,aN=5,sN=1e3,lN=5e3,cN=1.5;function dd(t){t===void 0&&(t={});var e={};return Object.entries(t).forEach(function(r){var n=oX(r,2),o=n[0],i=n[1];typeof i<"u"?e[o]=String(i):Z.warn('Header "'+o+'" has invalid value ('+i+") and will be ignored")}),e}function aT(t,e){return t.endsWith("/")||(t=t+"/"),t+e}function sT(t){try{var e=new URL(t);return e.pathname===""&&(e.pathname=e.pathname+"/"),e.toString()}catch{return Z.warn("Could not parse export URL: '"+t+"'"),t}}function lT(t){return typeof t=="number"?t<=0?cT(t,iN):t:iX()}function iX(){var t,e=Number((t=br().OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)!==null&&t!==void 0?t:br().OTEL_EXPORTER_OTLP_TIMEOUT);return e<=0?cT(e,iN):e}function cT(t,e){return Z.warn("Timeout must be greater than 0",t),e}function uN(t){var e=[429,502,503,504];return e.includes(t)}function dN(t){if(t==null)return-1;var e=Number.parseInt(t,10);if(Number.isInteger(e))return e>0?e*1e3:-1;var r=new Date(t).getTime()-Date.now();return r>=0?r:0}var pN=function(){function t(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 OL(this._shutdown,this),this._concurrencyLimit=typeof e.concurrencyLimit=="number"?e.concurrencyLimit:30,this.timeoutMillis=lT(e.timeoutMillis),this.onInit(e)}return t.prototype.export=function(e,r){if(this._shutdownOnce.isCalled){r({code:ss.FAILED,error:new Error("Exporter has been shutdown")});return}if(this._sendingPromises.length>=this._concurrencyLimit){r({code:ss.FAILED,error:new Error("Concurrent export limit reached")});return}this._export(e).then(function(){r({code:ss.SUCCESS})}).catch(function(n){r({code:ss.FAILED,error:n})})},t.prototype._export=function(e){var r=this;return new Promise(function(n,o){try{Z.debug("items to be sent",e),r.send(e,n,o)}catch(i){o(i)}})},t.prototype.shutdown=function(){return this._shutdownOnce.call()},t.prototype.forceFlush=function(){return Promise.all(this._sendingPromises).then(function(){})},t.prototype._shutdown=function(){return Z.debug("shutdown started"),this.onShutdown(),this.forceFlush()},t}();bt();import*as uT from"url";import*as $g from"http";import*as Wg from"https";import*as mN from"zlib";import{Readable as sX}from"stream";var ra;(function(t){t.NONE="none",t.GZIP="gzip"})(ra||(ra={}));var aX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ql=function(t){aX(e,t);function e(r,n,o){var i=t.call(this,r)||this;return i.name="OTLPExporterError",i.data=o,i.code=n,i}return e}(Error);var Vg=function(){return Vg=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Vg.apply(this,arguments)};function dT(t,e,r,n,o){var i=t.timeoutMillis,a=new uT.URL(t.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 ql("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:Vg({"Content-Type":r},t.headers),agent:t.agent},m=a.protocol==="http:"?$g.request:Wg.request,h=function(g,f){switch(g===void 0&&(g=aN),f===void 0&&(f=sN),l=m(p,function(b){var y="";b.on("data",function(T){return y+=T}),b.on("aborted",function(){if(u){var T=new ql("Request Timeout");o(T)}}),b.on("end",function(){if(u===!1)if(b.statusCode&&b.statusCode<299)Z.debug("statusCode: "+b.statusCode,y),n(),clearTimeout(d),clearTimeout(c);else if(b.statusCode&&uN(b.statusCode)&&g>0){var T=void 0;f=cN*f,b.headers["retry-after"]?T=dN(b.headers["retry-after"]):T=Math.round(Math.random()*(lN-f)+f),c=setTimeout(function(){h(g-1,f)},T)}else{var w=new ql(b.statusMessage,b.statusCode,y);o(w),clearTimeout(d),clearTimeout(c)}})}),l.on("error",function(b){if(u){var y=new ql("Request Timeout",b.code);o(y)}else o(b);clearTimeout(d),clearTimeout(c)}),l.on("abort",function(){if(u){var b=new ql("Request Timeout");o(b)}clearTimeout(d),clearTimeout(c)}),t.compression){case ra.GZIP:{l.setHeader("Content-Encoding","gzip");var S=lX(e);S.on("error",o).pipe(mN.createGzip()).on("error",o).pipe(l);break}default:l.end(Buffer.from(e));break}};h()}function lX(t){var e=new sX;return e.push(t),e.push(null),e}function pT(t){if(t.httpAgentOptions&&t.keepAlive===!1){Z.warn("httpAgentOptions is used only when keepAlive is true");return}if(!(t.keepAlive===!1||!t.url))try{var e=new uT.URL(t.url),r=e.protocol==="http:"?$g.Agent:Wg.Agent;return new r(Vg({keepAlive:!0},t.httpAgentOptions))}catch(n){Z.error("collector exporter failed to create http agent. err: "+n.message);return}}function mT(t){if(t)return t;var e=br().OTEL_EXPORTER_OTLP_TRACES_COMPRESSION||br().OTEL_EXPORTER_OTLP_COMPRESSION;return e===ra.GZIP?ra.GZIP:ra.NONE}bt();var cX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),qg=function(t){cX(e,t);function e(r,n,o){r===void 0&&(r={});var i=t.call(this,r)||this;return i.DEFAULT_HEADERS={},i._contentType=o,r.metadata&&Z.warn("Metadata cannot be set when using http"),i.headers=Object.assign(i.DEFAULT_HEADERS,dd(r.headers),$l.parseKeyPairsIntoRecord(br().OTEL_EXPORTER_OTLP_HEADERS)),i.agent=pT(r),i.compression=mT(r.compression),i._serializer=n,i}return e.prototype.onInit=function(r){},e.prototype.send=function(r,n,o){var i=this;if(this._shutdownOnce.isCalled){Z.debug("Shutdown already started. Cannot send objects");return}var a=new Promise(function(c,l){var u;dT(i,(u=i._serializer.serializeRequest(r))!==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}(pN);function hN(t){var e=BigInt(1e9);return BigInt(t[0])*e+BigInt(t[1])}function uX(t){var e=Number(BigInt.asUintN(32,t)),r=Number(BigInt.asUintN(32,t>>BigInt(32)));return{low:e,high:r}}function fN(t){var e=hN(t);return uX(e)}function dX(t){var e=hN(t);return e.toString()}var pX=typeof BigInt<"u"?dX:PL;function gN(t){return t}function SN(t){if(t!==void 0)return Dg(t)}var mX={encodeHrTime:fN,encodeSpanContext:Dg,encodeOptionalSpanContext:SN};function yN(t){var e,r;if(t===void 0)return mX;var n=(e=t.useLongBits)!==null&&e!==void 0?e:!0,o=(r=t.useHex)!==null&&r!==void 0?r:!1;return{encodeHrTime:n?fN:pX,encodeSpanContext:o?gN:Dg,encodeOptionalSpanContext:o?gN:SN}}var gX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function bN(t){return{name:t.name,version:t.version}}function Kl(t){return Object.keys(t).map(function(e){return EN(e,t[e])})}function EN(t,e){return{key:t,value:TN(e)}}function TN(t){var e=typeof t;return e==="string"?{stringValue:t}:e==="number"?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:e==="boolean"?{boolValue:t}:t instanceof Uint8Array?{bytesValue:t}:Array.isArray(t)?{arrayValue:{values:t.map(TN)}}:e==="object"&&t!=null?{kvlistValue:{values:Object.entries(t).map(function(r){var n=gX(r,2),o=n[0],i=n[1];return EN(o,i)})}}:{}}function vN(t){return{attributes:Kl(t.attributes),droppedAttributesCount:0}}bt();function RN(t,e){var r=yN(e);return{resource:vN(t.resource),schemaUrl:void 0,scopeMetrics:hX(t.scopeMetrics,r)}}function hX(t,e){return Array.from(t.map(function(r){return{scope:bN(r.scope),metrics:r.metrics.map(function(n){return fX(n,e)}),schemaUrl:r.scope.schemaUrl}}))}function fX(t,e){var r={name:t.descriptor.name,description:t.descriptor.description,unit:t.descriptor.unit},n=EX(t.aggregationTemporality);switch(t.dataPointType){case Mr.SUM:r.sum={aggregationTemporality:n,isMonotonic:t.isMonotonic,dataPoints:AN(t,e)};break;case Mr.GAUGE:r.gauge={dataPoints:AN(t,e)};break;case Mr.HISTOGRAM:r.histogram={aggregationTemporality:n,dataPoints:yX(t,e)};break;case Mr.EXPONENTIAL_HISTOGRAM:r.exponentialHistogram={aggregationTemporality:n,dataPoints:bX(t,e)};break}return r}function SX(t,e,r){var n={attributes:Kl(t.attributes),startTimeUnixNano:r.encodeHrTime(t.startTime),timeUnixNano:r.encodeHrTime(t.endTime)};switch(e){case gn.INT:n.asInt=t.value;break;case gn.DOUBLE:n.asDouble=t.value;break}return n}function AN(t,e){return t.dataPoints.map(function(r){return SX(r,t.descriptor.valueType,e)})}function yX(t,e){return t.dataPoints.map(function(r){var n=r.value;return{attributes:Kl(r.attributes),bucketCounts:n.buckets.counts,explicitBounds:n.buckets.boundaries,count:n.count,sum:n.sum,min:n.min,max:n.max,startTimeUnixNano:e.encodeHrTime(r.startTime),timeUnixNano:e.encodeHrTime(r.endTime)}})}function bX(t,e){return t.dataPoints.map(function(r){var n=r.value;return{attributes:Kl(r.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(r.startTime),timeUnixNano:e.encodeHrTime(r.endTime)}})}function EX(t){switch(t){case Bn.DELTA:return 1;case Bn.CUMULATIVE:return 2}}function CN(t,e){return{resourceMetrics:t.map(function(r){return RN(r,e)})}}var gT={serializeRequest:function(t){var e=CN(t,{useLongBits:!1}),r=new TextEncoder;return r.encode(JSON.stringify(e))},deserializeResponse:function(t){var e=new TextDecoder;return JSON.parse(e.decode(t))}};var wN="0.52.1";var xN=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Yl=function(){return Yl=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Yl.apply(this,arguments)},_N="v1/metrics",TX="http://localhost:4318/"+_N,vX={"User-Agent":"OTel-OTLP-Exporter-JavaScript/"+wN},AX=function(t){xN(e,t);function e(r){var n=t.call(this,r,gT,"application/json")||this;return n.headers=Yl(Yl(Yl(Yl({},n.headers),vX),$l.parseKeyPairsIntoRecord(br().OTEL_EXPORTER_OTLP_METRICS_HEADERS)),dd(r?.headers)),n}return e.prototype.getDefaultUrl=function(r){return typeof r.url=="string"?r.url:br().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length>0?sT(br().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT):br().OTEL_EXPORTER_OTLP_ENDPOINT.length>0?aT(br().OTEL_EXPORTER_OTLP_ENDPOINT,_N):TX},e}(qg),IN=function(t){xN(e,t);function e(r){return t.call(this,new AX(r),r)||this}return e}(oN);var Xl;(function(t){t[t.DELTA=0]="DELTA",t[t.CUMULATIVE=1]="CUMULATIVE"})(Xl||(Xl={}));var Do;(function(t){t[t.HISTOGRAM=0]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=1]="EXPONENTIAL_HISTOGRAM",t[t.GAUGE=2]="GAUGE",t[t.SUM=3]="SUM"})(Do||(Do={}));bt();var RX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),PN=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},MN=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},CX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},wX=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},xX=function(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};function ON(t){return t!=null}function Kg(t){var e=Object.keys(t);return e.length===0?"":(e=e.sort(),JSON.stringify(e.map(function(r){return[r,t[r]]})))}function LN(t){var e,r;return t.name+":"+((e=t.version)!==null&&e!==void 0?e:"")+":"+((r=t.schemaUrl)!==null&&r!==void 0?r:"")}var hT=function(t){RX(e,t);function e(r){var n=t.call(this,r)||this;return Object.setPrototypeOf(n,e.prototype),n}return e}(Error);function na(t,e){var r,n=new Promise(function(i,a){r=setTimeout(function(){a(new hT("Operation timed out."))},e)});return Promise.race([t,n]).then(function(o){return clearTimeout(r),o},function(o){throw clearTimeout(r),o})}function NN(t){return PN(this,void 0,void 0,function(){var e=this;return MN(this,function(r){return[2,Promise.all(t.map(function(n){return PN(e,void 0,void 0,function(){var o,i;return MN(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 DN(t){return t.status==="rejected"}function fT(t,e){var r=[];return t.forEach(function(n){r.push.apply(r,wX([],CX(e(n)),!1))}),r}function kN(t,e){var r,n;if(t.size!==e.size)return!1;try{for(var o=xX(t),i=o.next();!i.done;i=o.next()){var a=i.value;if(!e.has(a))return!1}}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function UN(t,e){for(var r=0,n=t.length-1,o=t.length;n>=r;){var i=r+Math.trunc((n-r)/2);t[i]<e?r=i+1:(o=i,n=i-1)}return o}function FN(t,e){return t.toLowerCase()===e.toLowerCase()}bt();var Hn;(function(t){t[t.DROP=0]="DROP",t[t.SUM=1]="SUM",t[t.LAST_VALUE=2]="LAST_VALUE",t[t.HISTOGRAM=3]="HISTOGRAM",t[t.EXPONENTIAL_HISTOGRAM=4]="EXPONENTIAL_HISTOGRAM"})(Hn||(Hn={}));var ST=function(){function t(){this.kind=Hn.DROP}return t.prototype.createAccumulation=function(){},t.prototype.merge=function(e,r){},t.prototype.diff=function(e,r){},t.prototype.toMetricData=function(e,r,n,o){},t}();bt();var Ke;(function(t){t.COUNTER="COUNTER",t.GAUGE="GAUGE",t.HISTOGRAM="HISTOGRAM",t.UP_DOWN_COUNTER="UP_DOWN_COUNTER",t.OBSERVABLE_COUNTER="OBSERVABLE_COUNTER",t.OBSERVABLE_GAUGE="OBSERVABLE_GAUGE",t.OBSERVABLE_UP_DOWN_COUNTER="OBSERVABLE_UP_DOWN_COUNTER"})(Ke||(Ke={}));function ko(t,e,r){var n,o,i,a;return IX(t)||Z.warn('Invalid metric name: "'+t+'". The metric name should be a ASCII string with a length no greater than 255 characters.'),{name:t,type:e,description:(n=r?.description)!==null&&n!==void 0?n:"",unit:(o=r?.unit)!==null&&o!==void 0?o:"",valueType:(i=r?.valueType)!==null&&i!==void 0?i:gn.DOUBLE,advice:(a=r?.advice)!==null&&a!==void 0?a:{}}}function BN(t,e){var r,n;return{name:(r=t.name)!==null&&r!==void 0?r:e.name,description:(n=t.description)!==null&&n!==void 0?n:e.description,type:e.type,unit:e.unit,valueType:e.valueType,advice:e.advice}}function zN(t,e){return FN(t.name,e.name)&&t.unit===e.unit&&t.type===e.type&&t.valueType===e.valueType}var _X=/^[a-z][a-z0-9_.\-/]{0,254}$/i;function IX(t){return t.match(_X)!=null}var PX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i};function MX(t){var e=t.map(function(){return 0});return e.push(0),{buckets:{boundaries:t,counts:e},sum:0,count:0,hasMinMax:!1,min:1/0,max:-1/0}}var Yg=function(){function t(e,r,n,o){n===void 0&&(n=!0),o===void 0&&(o=MX(r)),this.startTime=e,this._boundaries=r,this._recordMinMax=n,this._current=o}return t.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 r=UN(this._boundaries,e);this._current.buckets.counts[r]+=1}},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var Xg=function(){function t(e,r){this._boundaries=e,this._recordMinMax=r,this.kind=Hn.HISTOGRAM}return t.prototype.createAccumulation=function(e){return new Yg(e,this._boundaries,this._recordMinMax)},t.prototype.merge=function(e,r){for(var n=e.toPointValue(),o=r.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 Yg(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})},t.prototype.diff=function(e,r){for(var n=e.toPointValue(),o=r.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 Yg(r.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})},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.HISTOGRAM,dataPoints:n.map(function(i){var a=PX(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Ke.GAUGE||e.type===Ke.UP_DOWN_COUNTER||e.type===Ke.OBSERVABLE_GAUGE||e.type===Ke.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}}})}},t}();bt();var yT=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},bT=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},ET=function(){function t(e,r,n,o){e===void 0&&(e=new OX),r===void 0&&(r=0),n===void 0&&(n=0),o===void 0&&(o=0),this.backing=e,this.indexBase=r,this.indexStart=n,this.indexEnd=o}return Object.defineProperty(t.prototype,"offset",{get:function(){return this.indexStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.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}),t.prototype.counts=function(){var e=this;return Array.from({length:this.length},function(r,n){return e.at(n)})},t.prototype.at=function(e){var r=this.indexBase-this.indexStart;return e<r&&(e+=this.backing.length),e-=r,this.backing.countAt(e)},t.prototype.incrementBucket=function(e,r){this.backing.increment(e,r)},t.prototype.decrementBucket=function(e,r){this.backing.decrement(e,r)},t.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()},t.prototype.downscale=function(e){this._rotate();for(var r=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<r;c++)this._relocateBucket(i,o),o++,a++;i++}this.indexStart>>=e,this.indexEnd>>=e,this.indexBase=this.indexStart},t.prototype.clone=function(){return new t(this.backing.clone(),this.indexBase,this.indexStart,this.indexEnd)},t.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)},t.prototype._relocateBucket=function(e,r){e!==r&&this.incrementBucket(e,this.backing.emptyBucket(r))},t}();var OX=function(){function t(e){e===void 0&&(e=[0]),this._counts=e}return Object.defineProperty(t.prototype,"length",{get:function(){return this._counts.length},enumerable:!1,configurable:!0}),t.prototype.countAt=function(e){return this._counts[e]},t.prototype.growTo=function(e,r,n){var o=new Array(e).fill(0);o.splice.apply(o,bT([n,this._counts.length-r],yT(this._counts.slice(r)),!1)),o.splice.apply(o,bT([0,r],yT(this._counts.slice(0,r)),!1)),this._counts=o},t.prototype.reverse=function(e,r){for(var n=Math.floor((e+r)/2)-e,o=0;o<n;o++){var i=this._counts[e+o];this._counts[e+o]=this._counts[r-o-1],this._counts[r-o-1]=i}},t.prototype.emptyBucket=function(e){var r=this._counts[e];return this._counts[e]=0,r},t.prototype.increment=function(e,r){this._counts[e]+=r},t.prototype.decrement=function(e,r){this._counts[e]>=r?this._counts[e]-=r:this._counts[e]=0},t.prototype.clone=function(){return new t(bT([],yT(this._counts),!1))},t}();var HN=52,LX=2146435072,NX=1048575,TT=1023,Jg=-TT+1,Zg=TT,pd=Math.pow(2,-1022);function Qg(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=(r&LX)>>20;return n-TT}function eh(t){var e=new DataView(new ArrayBuffer(8));e.setFloat64(0,t);var r=e.getUint32(0),n=e.getUint32(4),o=(r&NX)*Math.pow(2,32);return o+n}function md(t,e){return t===0||t===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY||Number.isNaN(t)?t:t*Math.pow(2,e)}function GN(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,t++,t}var DX=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),oa=function(t){DX(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(Error);var $N=function(){function t(e){this._shift=-e}return t.prototype.mapToIndex=function(e){if(e<pd)return this._minNormalLowerBoundaryIndex();var r=Qg(e),n=this._rightShift(eh(e)-1,HN);return r+n>>this._shift},t.prototype.lowerBoundary=function(e){var r=this._minNormalLowerBoundaryIndex();if(e<r)throw new oa("underflow: "+e+" is < minimum lower boundary: "+r);var n=this._maxNormalLowerBoundaryIndex();if(e>n)throw new oa("overflow: "+e+" is > maximum lower boundary: "+n);return md(1,e<<this._shift)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._shift===0?0:-this._shift},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){var e=Jg>>this._shift;return this._shift<2&&e--,e},t.prototype._maxNormalLowerBoundaryIndex=function(){return Zg>>this._shift},t.prototype._rightShift=function(e,r){return Math.floor(e*Math.pow(2,-r))},t}();var WN=function(){function t(e){this._scale=e,this._scaleFactor=md(Math.LOG2E,e),this._inverseFactor=md(Math.LN2,-e)}return t.prototype.mapToIndex=function(e){if(e<=pd)return this._minNormalLowerBoundaryIndex()-1;if(eh(e)===0){var r=Qg(e);return(r<<this._scale)-1}var n=Math.floor(Math.log(e)*this._scaleFactor),o=this._maxNormalLowerBoundaryIndex();return n>=o?o:n},t.prototype.lowerBoundary=function(e){var r=this._maxNormalLowerBoundaryIndex();if(e>=r){if(e===r)return 2*Math.exp((e-(1<<this._scale))/this._scaleFactor);throw new oa("overflow: "+e+" is > maximum lower boundary: "+r)}var n=this._minNormalLowerBoundaryIndex();if(e<=n){if(e===n)return pd;if(e===n-1)return Math.exp((e+(1<<this._scale))/this._scaleFactor)/2;throw new oa("overflow: "+e+" is < minimum lower boundary: "+n)}return Math.exp(e*this._inverseFactor)},Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!1,configurable:!0}),t.prototype._minNormalLowerBoundaryIndex=function(){return Jg<<this._scale},t.prototype._maxNormalLowerBoundaryIndex=function(){return(Zg+1<<this._scale)-1},t}();var qN=-10,KN=20,kX=Array.from({length:31},function(t,e){return e>10?new WN(e-10):new $N(e-10)});function vT(t){if(t>KN||t<qN)throw new oa("expected scale >= "+qN+" && <= "+KN+", got: "+t);return kX[t+10]}var UX=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},th=function(){function t(e,r){this.low=e,this.high=r}return t.combine=function(e,r){return new t(Math.min(e.low,r.low),Math.max(e.high,r.high))},t}(),FX=20,BX=160,AT=2,YN=function(){function t(e,r,n,o,i,a,s,c,l,u,d){e===void 0&&(e=e),r===void 0&&(r=BX),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 ET),u===void 0&&(u=new ET),d===void 0&&(d=vT(FX)),this.startTime=e,this._maxSize=r,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<AT&&(Z.warn("Exponential Histogram Max Size set to "+this._maxSize+", changing to the minimum size of: "+AT),this._maxSize=AT)}return t.prototype.record=function(e){this.updateByIncrement(e,1)},t.prototype.setStartTime=function(e){this.startTime=e},t.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(t.prototype,"sum",{get:function(){return this._sum},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"min",{get:function(){return this._min},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"max",{get:function(){return this._max},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"count",{get:function(){return this._count},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"zeroCount",{get:function(){return this._zeroCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._count===this._zeroCount?0:this._mapping.scale},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"positive",{get:function(){return this._positive},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"negative",{get:function(){return this._negative},enumerable:!1,configurable:!0}),t.prototype.updateByIncrement=function(e,r){if(!Number.isNaN(e)){if(e>this._max&&(this._max=e),e<this._min&&(this._min=e),this._count+=r,e===0){this._zeroCount+=r;return}this._sum+=e*r,e>0?this._updateBuckets(this._positive,e,r):this._updateBuckets(this._negative,-e,r)}},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._mergeBuckets(this.positive,e,e.positive,r),this._mergeBuckets(this.negative,e,e.negative,r)},t.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 r=this._minScale(e);this._downscale(this.scale-r),this._diffBuckets(this.positive,e,e.positive,r),this._diffBuckets(this.negative,e,e.negative,r)},t.prototype.clone=function(){return new t(this.startTime,this._maxSize,this._recordMinMax,this._sum,this._count,this._zeroCount,this._min,this._max,this.positive.clone(),this.negative.clone(),this._mapping)},t.prototype._updateBuckets=function(e,r,n){var o=this._mapping.mapToIndex(r),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(r)}this._incrementIndexBy(e,o,n)},t.prototype._incrementIndexBy=function(e,r,n){if(n!==0){if(e.length===0&&(e.indexStart=e.indexEnd=e.indexBase=r),r<e.indexStart){var o=e.indexEnd-r;o>=e.backing.length&&this._grow(e,o+1),e.indexStart=r}else if(r>e.indexEnd){var o=r-e.indexStart;o>=e.backing.length&&this._grow(e,o+1),e.indexEnd=r}var i=r-e.indexBase;i<0&&(i+=e.backing.length),e.incrementBucket(i,n)}},t.prototype._grow=function(e,r){var n=e.backing.length,o=e.indexBase-e.indexStart,i=n-o,a=GN(r);a>this._maxSize&&(a=this._maxSize);var s=a-o;e.backing.growTo(a,i,s)},t.prototype._changeScale=function(e,r){for(var n=0;e-r>=this._maxSize;)e>>=1,r>>=1,n++;return n},t.prototype._downscale=function(e){if(e!==0){if(e<0)throw new Error("impossible change of scale: "+this.scale);var r=this._mapping.scale-e;this._positive.downscale(e),this._negative.downscale(e),this._mapping=vT(r)}},t.prototype._minScale=function(e){var r=Math.min(this.scale,e.scale),n=th.combine(this._highLowAtScale(this.positive,this.scale,r),this._highLowAtScale(e.positive,e.scale,r)),o=th.combine(this._highLowAtScale(this.negative,this.scale,r),this._highLowAtScale(e.negative,e.scale,r));return Math.min(r-this._changeScale(n.high,n.low),r-this._changeScale(o.high,o.low))},t.prototype._highLowAtScale=function(e,r,n){if(e.length===0)return new th(0,-1);var o=r-n;return new th(e.indexStart>>o,e.indexEnd>>o)},t.prototype._mergeBuckets=function(e,r,n,o){for(var i=n.offset,a=r.scale-o,s=0;s<n.length;s++)this._incrementIndexBy(e,i+s>>a,n.at(s))},t.prototype._diffBuckets=function(e,r,n,o){for(var i=n.offset,a=r.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()},t}();var RT=function(){function t(e,r){this._maxSize=e,this._recordMinMax=r,this.kind=Hn.EXPONENTIAL_HISTOGRAM}return t.prototype.createAccumulation=function(e){return new YN(e,this._maxSize,this._recordMinMax)},t.prototype.merge=function(e,r){var n=r.clone();return n.merge(e),n},t.prototype.diff=function(e,r){var n=r.clone();return n.diff(e),n},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.EXPONENTIAL_HISTOGRAM,dataPoints:n.map(function(i){var a=UX(i,2),s=a[0],c=a[1],l=c.toPointValue(),u=e.type===Ke.GAUGE||e.type===Ke.UP_DOWN_COUNTER||e.type===Ke.OBSERVABLE_GAUGE||e.type===Ke.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}}})}},t}();bt();var zX=DE("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function XN(t){return t.setValue(zX,!0)}bt();function JN(){return function(t){Z.error(HX(t))}}function HX(t){return typeof t=="string"?t:JSON.stringify(jX(t))}function jX(t){for(var e={},r=t;r!==null;)Object.getOwnPropertyNames(r).forEach(function(n){if(!e[n]){var o=r[n];o&&(e[n]=String(o))}}),r=Object.getPrototypeOf(r);return e}var GX=JN();function rh(t){try{GX(t)}catch{}}var ZN="1.30.1";var VX="process.runtime.name";var $X="service.name";var WX="telemetry.sdk.name",qX="telemetry.sdk.language",KX="telemetry.sdk.version";var QN=VX;var eD=$X;var gd=WX,hd=qX,fd=KX;var YX="nodejs";var tD=YX;var Jl,us=(Jl={},Jl[gd]="opentelemetry",Jl[QN]="node",Jl[hd]=tD,Jl[fd]=ZN,Jl);function Sd(t){t.unref()}var rJ=9,nJ=6,oJ=Math.pow(10,nJ),W4e=Math.pow(10,rJ);function ds(t){var e=t/1e3,r=Math.trunc(e),n=Math.round(t%1e3*oJ);return[r,n]}function Zl(t){return t[0]*1e6+t[1]/1e3}var yd;(function(t){t[t.SUCCESS=0]="SUCCESS",t[t.FAILED=1]="FAILED"})(yd||(yd={}));bt();function rD(t,e){return new Promise(function(r){Vl.with(XN(Vl.active()),function(){t.export(e,function(n){r(n)})})})}var nD={_export:rD};var iJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},nh=function(){function t(e,r,n){r===void 0&&(r=0),n===void 0&&(n=[0,0]),this.startTime=e,this._current=r,this.sampleTime=n}return t.prototype.record=function(e){this._current=e,this.sampleTime=ds(Date.now())},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var CT=function(){function t(){this.kind=Hn.LAST_VALUE}return t.prototype.createAccumulation=function(e){return new nh(e)},t.prototype.merge=function(e,r){var n=Zl(r.sampleTime)>=Zl(e.sampleTime)?r:e;return new nh(e.startTime,n.toPointValue(),n.sampleTime)},t.prototype.diff=function(e,r){var n=Zl(r.sampleTime)>=Zl(e.sampleTime)?r:e;return new nh(r.startTime,n.toPointValue(),n.sampleTime)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.GAUGE,dataPoints:n.map(function(i){var a=iJ(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}})}},t}();var aJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},Ql=function(){function t(e,r,n,o){n===void 0&&(n=0),o===void 0&&(o=!1),this.startTime=e,this.monotonic=r,this._current=n,this.reset=o}return t.prototype.record=function(e){this.monotonic&&e<0||(this._current+=e)},t.prototype.setStartTime=function(e){this.startTime=e},t.prototype.toPointValue=function(){return this._current},t}();var oh=function(){function t(e){this.monotonic=e,this.kind=Hn.SUM}return t.prototype.createAccumulation=function(e){return new Ql(e,this.monotonic)},t.prototype.merge=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return r.reset?new Ql(r.startTime,this.monotonic,o,r.reset):new Ql(e.startTime,this.monotonic,n+o)},t.prototype.diff=function(e,r){var n=e.toPointValue(),o=r.toPointValue();return this.monotonic&&n>o?new Ql(r.startTime,this.monotonic,o,!0):new Ql(r.startTime,this.monotonic,o-n)},t.prototype.toMetricData=function(e,r,n,o){return{descriptor:e,aggregationTemporality:r,dataPointType:Do.SUM,dataPoints:n.map(function(i){var a=aJ(i,2),s=a[0],c=a[1];return{attributes:s,startTime:c.startTime,endTime:o,value:c.toPointValue()}}),isMonotonic:this.monotonic}},t}();var ps=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),jn=function(){function t(){}return t.Drop=function(){return uD},t.Sum=function(){return dD},t.LastValue=function(){return pD},t.Histogram=function(){return mD},t.ExponentialHistogram=function(){return sJ},t.Default=function(){return lJ},t}();var oD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new ST,e}(jn);var iD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){switch(r.type){case Ke.COUNTER:case Ke.OBSERVABLE_COUNTER:case Ke.HISTOGRAM:return e.MONOTONIC_INSTANCE;default:return e.NON_MONOTONIC_INSTANCE}},e.MONOTONIC_INSTANCE=new oh(!0),e.NON_MONOTONIC_INSTANCE=new oh(!1),e}(jn);var aD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new CT,e}(jn);var sD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.createAggregator=function(r){return e.DEFAULT_INSTANCE},e.DEFAULT_INSTANCE=new Xg([0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4],!0),e}(jn);var bd=function(t){ps(e,t);function e(r,n){n===void 0&&(n=!0);var o=t.call(this)||this;if(o._recordMinMax=n,r==null)throw new Error("ExplicitBucketHistogramAggregation should be created with explicit boundaries, if a single bucket histogram is required, please pass an empty array");r=r.concat(),r=r.sort(function(s,c){return s-c});var i=r.lastIndexOf(-1/0),a=r.indexOf(1/0);return a===-1&&(a=void 0),o._boundaries=r.slice(i+1,a),o}return e.prototype.createAggregator=function(r){return new Xg(this._boundaries,this._recordMinMax)},e}(jn);var lD=function(t){ps(e,t);function e(r,n){r===void 0&&(r=160),n===void 0&&(n=!0);var o=t.call(this)||this;return o._maxSize=r,o._recordMinMax=n,o}return e.prototype.createAggregator=function(r){return new RT(this._maxSize,this._recordMinMax)},e}(jn);var cD=function(t){ps(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype._resolve=function(r){switch(r.type){case Ke.COUNTER:case Ke.UP_DOWN_COUNTER:case Ke.OBSERVABLE_COUNTER:case Ke.OBSERVABLE_UP_DOWN_COUNTER:return dD;case Ke.GAUGE:case Ke.OBSERVABLE_GAUGE:return pD;case Ke.HISTOGRAM:return r.advice.explicitBucketBoundaries?new bd(r.advice.explicitBucketBoundaries):mD}return Z.warn("Unable to recognize instrument type: "+r.type),uD},e.prototype.createAggregator=function(r){return this._resolve(r).createAggregator(r)},e}(jn);var uD=new oD,dD=new iD,pD=new aD,mD=new sD,sJ=new lD,lJ=new cD;var gD=function(t){return jn.Default()},hD=function(t){return Xl.CUMULATIVE};var wT=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},xT=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},fD=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},cJ=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},SD=function(){function t(e){var r,n,o;this._shutdown=!1,this._aggregationSelector=(r=e?.aggregationSelector)!==null&&r!==void 0?r:gD,this._aggregationTemporalitySelector=(n=e?.aggregationTemporalitySelector)!==null&&n!==void 0?n:hD,this._metricProducers=(o=e?.metricProducers)!==null&&o!==void 0?o:[],this._cardinalitySelector=e?.cardinalitySelector}return t.prototype.setMetricProducer=function(e){if(this._sdkMetricProducer)throw new Error("MetricReader can not be bound to a MeterProvider again.");this._sdkMetricProducer=e,this.onInitialized()},t.prototype.selectAggregation=function(e){return this._aggregationSelector(e)},t.prototype.selectAggregationTemporality=function(e){return this._aggregationTemporalitySelector(e)},t.prototype.selectCardinalityLimit=function(e){return this._cardinalitySelector?this._cardinalitySelector(e):2e3},t.prototype.onInitialized=function(){},t.prototype.collect=function(e){return wT(this,void 0,void 0,function(){var r,n,o,i,a,s;return xT(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(cJ([this._sdkMetricProducer.collect({timeoutMillis:e?.timeoutMillis})],fD(this._metricProducers.map(function(l){return l.collect({timeoutMillis:e?.timeoutMillis})})),!1))];case 1:return r=fD.apply(void 0,[c.sent()]),n=r[0],o=r.slice(1),i=n.errors.concat(fT(o,function(l){return l.errors})),a=n.resourceMetrics.resource,s=n.resourceMetrics.scopeMetrics.concat(fT(o,function(l){return l.resourceMetrics.scopeMetrics})),[2,{resourceMetrics:{resource:a,scopeMetrics:s},errors:i}]}})})},t.prototype.shutdown=function(e){return wT(this,void 0,void 0,function(){return xT(this,function(r){switch(r.label){case 0:return this._shutdown?(Z.error("Cannot call shutdown twice."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onShutdown()];case 1:return r.sent(),[3,4];case 2:return[4,na(this.onShutdown(),e.timeoutMillis)];case 3:r.sent(),r.label=4;case 4:return this._shutdown=!0,[2]}})})},t.prototype.forceFlush=function(e){return wT(this,void 0,void 0,function(){return xT(this,function(r){switch(r.label){case 0:return this._shutdown?(Z.warn("Cannot forceFlush on already shutdown MetricReader."),[2]):e?.timeoutMillis!=null?[3,2]:[4,this.onForceFlush()];case 1:return r.sent(),[2];case 2:return[4,na(this.onForceFlush(),e.timeoutMillis)];case 3:return r.sent(),[2]}})})},t}();bt();var uJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ih=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},ah=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},dJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},pJ=function(t,e,r){if(r||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 t.concat(i||Array.prototype.slice.call(e))},_T=function(t){uJ(e,t);function e(r){var n,o,i,a,s=t.call(this,{aggregationSelector:(n=r.exporter.selectAggregation)===null||n===void 0?void 0:n.bind(r.exporter),aggregationTemporalitySelector:(o=r.exporter.selectAggregationTemporality)===null||o===void 0?void 0:o.bind(r.exporter),metricProducers:r.metricProducers})||this;if(r.exportIntervalMillis!==void 0&&r.exportIntervalMillis<=0)throw Error("exportIntervalMillis must be greater than 0");if(r.exportTimeoutMillis!==void 0&&r.exportTimeoutMillis<=0)throw Error("exportTimeoutMillis must be greater than 0");if(r.exportTimeoutMillis!==void 0&&r.exportIntervalMillis!==void 0&&r.exportIntervalMillis<r.exportTimeoutMillis)throw Error("exportIntervalMillis must be greater than or equal to exportTimeoutMillis");return s._exportInterval=(i=r.exportIntervalMillis)!==null&&i!==void 0?i:6e4,s._exportTimeout=(a=r.exportTimeoutMillis)!==null&&a!==void 0?a:3e4,s._exporter=r.exporter,s}return e.prototype._runOnce=function(){return ih(this,void 0,void 0,function(){var r;return ah(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,na(this._doRun(),this._exportTimeout)];case 1:return n.sent(),[3,3];case 2:return r=n.sent(),r instanceof hT?(Z.error("Export took longer than %s milliseconds and timed out.",this._exportTimeout),[2]):(rh(r),[3,3]);case 3:return[2]}})})},e.prototype._doRun=function(){var r,n;return ih(this,void 0,void 0,function(){var o,i,a,s,c,l;return ah(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=Z).error.apply(l,pJ(["PeriodicExportingMetricReader: metrics collection errors"],dJ(a),!1)),!i.resource.asyncAttributesPending)return[3,5];u.label=2;case 2:return u.trys.push([2,4,,5]),[4,(n=(r=i.resource).waitForAsyncAttributes)===null||n===void 0?void 0:n.call(r)];case 3:return u.sent(),[3,5];case 4:return s=u.sent(),Z.debug("Error while resolving async portion of resource: ",s),rh(s),[3,5];case 5:return i.scopeMetrics.length===0?[2]:[4,nD._export(this._exporter,i)];case 6:if(c=u.sent(),c.code!==yd.SUCCESS)throw new Error("PeriodicExportingMetricReader: metrics export failed (error "+c.error+")");return[2]}})})},e.prototype.onInitialized=function(){var r=this;this._interval=setInterval(function(){r._runOnce()},this._exportInterval),Sd(this._interval)},e.prototype.onForceFlush=function(){return ih(this,void 0,void 0,function(){return ah(this,function(r){switch(r.label){case 0:return[4,this._runOnce()];case 1:return r.sent(),[4,this._exporter.forceFlush()];case 2:return r.sent(),[2]}})})},e.prototype.onShutdown=function(){return ih(this,void 0,void 0,function(){return ah(this,function(r){switch(r.label){case 0:return this._interval&&clearInterval(this._interval),[4,this.onForceFlush()];case 1:return r.sent(),[4,this._exporter.shutdown()];case 2:return r.sent(),[2]}})})},e}(SD);bt();bt();function sh(){return"unknown_service:"+process.argv0}var ia=function(){return ia=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ia.apply(this,arguments)},mJ=function(t,e,r,n){function o(i){return i instanceof r?i:new r(function(a){a(i)})}return new(r||(r=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(t,e||[])).next())})},gJ=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},hJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},lh=function(){function t(e,r){var n=this,o;this._attributes=e,this.asyncAttributesPending=r!=null,this._syncAttributes=(o=this._attributes)!==null&&o!==void 0?o:{},this._asyncAttributesPromise=r?.then(function(i){return n._attributes=Object.assign({},n._attributes,i),n.asyncAttributesPending=!1,i},function(i){return Z.debug("a resource's async attributes promise rejected: %s",i),n.asyncAttributesPending=!1,{}})}return t.empty=function(){return t.EMPTY},t.default=function(){var e;return new t((e={},e[eD]=sh(),e[hd]=us[hd],e[gd]=us[gd],e[fd]=us[fd],e))},Object.defineProperty(t.prototype,"attributes",{get:function(){var e;return this.asyncAttributesPending&&Z.error("Accessing resource attributes before async attributes settled"),(e=this._attributes)!==null&&e!==void 0?e:{}},enumerable:!1,configurable:!0}),t.prototype.waitForAsyncAttributes=function(){return mJ(this,void 0,void 0,function(){return gJ(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]}})})},t.prototype.merge=function(e){var r=this,n;if(!e)return this;var o=ia(ia({},this._syncAttributes),(n=e._syncAttributes)!==null&&n!==void 0?n:e.attributes);if(!this._asyncAttributesPromise&&!e._asyncAttributesPromise)return new t(o);var i=Promise.all([this._asyncAttributesPromise,e._asyncAttributesPromise]).then(function(a){var s,c=hJ(a,2),l=c[0],u=c[1];return ia(ia(ia(ia({},r._syncAttributes),l),(s=e._syncAttributes)!==null&&s!==void 0?s:e.attributes),u)});return new t(o,i)},t.EMPTY=new t({}),t}();var yD=function(){function t(){this._registeredViews=[]}return t.prototype.addView=function(e){this._registeredViews.push(e)},t.prototype.findViews=function(e,r){var n=this,o=this._registeredViews.filter(function(i){return n._matchInstrument(i.instrumentSelector,e)&&n._matchMeter(i.meterSelector,r)});return o},t.prototype._matchInstrument=function(e,r){return(e.getType()===void 0||r.type===e.getType())&&e.getNameFilter().match(r.name)&&e.getUnitFilter().match(r.unit)},t.prototype._matchMeter=function(e,r){return e.getNameFilter().match(r.name)&&(r.version===void 0||e.getVersionFilter().match(r.version))&&(r.schemaUrl===void 0||e.getSchemaUrlFilter().match(r.schemaUrl))},t}();bt();var ms=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ch=function(){function t(e,r){this._writableMetricStorage=e,this._descriptor=r}return t.prototype._record=function(e,r,n){if(r===void 0&&(r={}),n===void 0&&(n=Vl.active()),typeof e!="number"){Z.warn("non-number value provided to metric "+this._descriptor.name+": "+e);return}this._descriptor.valueType===gn.INT&&!Number.isInteger(e)&&(Z.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,r,n,ds(Date.now()))},t}();var bD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n,o){this._record(r,n,o)},e}(ch);var ED=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.add=function(r,n,o){if(r<0){Z.warn("negative value provided to counter "+this._descriptor.name+": "+r);return}this._record(r,n,o)},e}(ch);var TD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n,o){this._record(r,n,o)},e}(ch);var vD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.record=function(r,n,o){if(r<0){Z.warn("negative value provided to histogram "+this._descriptor.name+": "+r);return}this._record(r,n,o)},e}(ch);var uh=function(){function t(e,r,n){this._observableRegistry=n,this._descriptor=e,this._metricStorages=r}return t.prototype.addCallback=function(e){this._observableRegistry.addCallback(e,this)},t.prototype.removeCallback=function(e){this._observableRegistry.removeCallback(e,this)},t}();var AD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);var RD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);var CD=function(t){ms(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e}(uh);function Ed(t){return t instanceof uh}var wD=function(){function t(e){this._meterSharedState=e}return t.prototype.createGauge=function(e,r){var n=ko(e,Ke.GAUGE,r),o=this._meterSharedState.registerMetricStorage(n);return new TD(o,n)},t.prototype.createHistogram=function(e,r){var n=ko(e,Ke.HISTOGRAM,r),o=this._meterSharedState.registerMetricStorage(n);return new vD(o,n)},t.prototype.createCounter=function(e,r){var n=ko(e,Ke.COUNTER,r),o=this._meterSharedState.registerMetricStorage(n);return new ED(o,n)},t.prototype.createUpDownCounter=function(e,r){var n=ko(e,Ke.UP_DOWN_COUNTER,r),o=this._meterSharedState.registerMetricStorage(n);return new bD(o,n)},t.prototype.createObservableGauge=function(e,r){var n=ko(e,Ke.OBSERVABLE_GAUGE,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new RD(n,o,this._meterSharedState.observableRegistry)},t.prototype.createObservableCounter=function(e,r){var n=ko(e,Ke.OBSERVABLE_COUNTER,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new AD(n,o,this._meterSharedState.observableRegistry)},t.prototype.createObservableUpDownCounter=function(e,r){var n=ko(e,Ke.OBSERVABLE_UP_DOWN_COUNTER,r),o=this._meterSharedState.registerAsyncMetricStorage(n);return new CD(n,o,this._meterSharedState.observableRegistry)},t.prototype.addBatchObservableCallback=function(e,r){this._meterSharedState.observableRegistry.addBatchCallback(e,r)},t.prototype.removeBatchObservableCallback=function(e,r){this._meterSharedState.observableRegistry.removeBatchCallback(e,r)},t}();var dh=function(){function t(e){this._instrumentDescriptor=e}return t.prototype.getInstrumentDescriptor=function(){return this._instrumentDescriptor},t.prototype.updateDescription=function(e){this._instrumentDescriptor=ko(this._instrumentDescriptor.name,this._instrumentDescriptor.type,{description:e,valueType:this._instrumentDescriptor.valueType,unit:this._instrumentDescriptor.unit,advice:this._instrumentDescriptor.advice})},t}();var fJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),xD=function(t,e){var r={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(;r;)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 r.label++,{value:l[1],done:!1};case 5:r.label++,o=l[1],l=[0];continue;case 7:l=r.ops.pop(),r.trys.pop();continue;default:if(i=r.trys,!(i=i.length>0&&i[i.length-1])&&(l[0]===6||l[0]===2)){r=0;continue}if(l[0]===3&&(!i||l[1]>i[0]&&l[1]<i[3])){r.label=l[1];break}if(l[0]===6&&r.label<i[1]){r.label=i[1],i=l;break}if(i&&r.label<i[2]){r.label=i[2],r.ops.push(l);break}i[2]&&r.ops.pop(),r.trys.pop();continue}l=e.call(t,r)}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}}},SJ=function(){function t(e){this._hash=e,this._valueMap=new Map,this._keyMap=new Map}return t.prototype.get=function(e,r){return r??(r=this._hash(e)),this._valueMap.get(r)},t.prototype.getOrDefault=function(e,r){var n=this._hash(e);if(this._valueMap.has(n))return this._valueMap.get(n);var o=r();return this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,o),o},t.prototype.set=function(e,r,n){n??(n=this._hash(e)),this._keyMap.has(n)||this._keyMap.set(n,e),this._valueMap.set(n,r)},t.prototype.has=function(e,r){return r??(r=this._hash(e)),this._valueMap.has(r)},t.prototype.keys=function(){var e,r;return xD(this,function(n){switch(n.label){case 0:e=this._keyMap.entries(),r=e.next(),n.label=1;case 1:return r.done===!0?[3,3]:[4,[r.value[1],r.value[0]]];case 2:return n.sent(),r=e.next(),[3,1];case 3:return[2]}})},t.prototype.entries=function(){var e,r;return xD(this,function(n){switch(n.label){case 0:e=this._valueMap.entries(),r=e.next(),n.label=1;case 1:return r.done===!0?[3,3]:[4,[this._keyMap.get(r.value[0]),r.value[1],r.value[0]]];case 2:return n.sent(),r=e.next(),[3,1];case 3:return[2]}})},Object.defineProperty(t.prototype,"size",{get:function(){return this._valueMap.size},enumerable:!1,configurable:!0}),t}();var oo=function(t){fJ(e,t);function e(){return t.call(this,Kg)||this}return e}(SJ);var yJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ph=function(){function t(e,r){this._aggregator=e,this._activeCollectionStorage=new oo,this._cumulativeMemoStorage=new oo,this._overflowAttributes={"otel.metric.overflow":!0},this._cardinalityLimit=(r??2e3)-1,this._overflowHashCode=Kg(this._overflowAttributes)}return t.prototype.record=function(e,r,n,o){var i=this,a=this._activeCollectionStorage.get(r);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(r,a)}a?.record(e)},t.prototype.batchCumulate=function(e,r){var n=this;Array.from(e.entries()).forEach(function(o){var i=yJ(o,3),a=i[0],s=i[1],c=i[2],l=n._aggregator.createAccumulation(r);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)})},t.prototype.collect=function(){var e=this._activeCollectionStorage;return this._activeCollectionStorage=new oo,e},t}();var IT=function(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},_D=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},mh=function(){function t(e,r){var n=this;this._aggregator=e,this._unreportedAccumulations=new Map,this._reportHistory=new Map,r.forEach(function(o){n._unreportedAccumulations.set(o,[])})}return t.prototype.buildMetrics=function(e,r,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===Xl.CUMULATIVE?a=t.merge(c.accumulations,i,this._aggregator):a=t.calibrateStartTime(c.accumulations,i,l)}else s=e.selectAggregationTemporality(r.type);this._reportHistory.set(e,{accumulations:a,collectionTime:o,aggregationTemporality:s});var u=bJ(a);if(u.length!==0)return this._aggregator.toMetricData(r,s,u,o)},t.prototype._stashAccumulations=function(e){var r,n,o=this._unreportedAccumulations.keys();try{for(var i=IT(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){r={error:l}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},t.prototype._getMergedUnreportedAccumulations=function(e){var r,n,o=new oo,i=this._unreportedAccumulations.get(e);if(this._unreportedAccumulations.set(e,[]),i===void 0)return o;try{for(var a=IT(i),s=a.next();!s.done;s=a.next()){var c=s.value;o=t.merge(o,c,this._aggregator)}}catch(l){r={error:l}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},t.merge=function(e,r,n){for(var o=e,i=r.entries(),a=i.next();a.done!==!0;){var s=_D(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},t.calibrateStartTime=function(e,r,n){var o,i;try{for(var a=IT(e.keys()),s=a.next();!s.done;s=a.next()){var c=_D(s.value,2),l=c[0],u=c[1],d=r.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 r},t}();function bJ(t){return Array.from(t.entries())}var EJ=function(){var t=function(e,r){return t=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])},t(e,r)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),TJ=function(t,e){var r=typeof Symbol=="function"&&t[Symbol.iterator];if(!r)return t;var n=r.call(t),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&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i},ID=function(t){EJ(e,t);function e(r,n,o,i,a){var s=t.call(this,r)||this;return s._attributesProcessor=o,s._aggregationCardinalityLimit=a,s._deltaMetricStorage=new ph(n,s._aggregationCardinalityLimit),s._temporalMetricStorage=new mh(n,i),s}return e.prototype.record=function(r,n){var o=this,i=new oo;Array.from(r.entries()).forEach(function(a){var s=TJ(a,2),c=s[0],l=s[1];i.set(o._attributesProcessor.process(c),l)}),this._deltaMetricStorage.batchCumulate(i,n)},e.prototype.collect=function(r,n){var o=this._deltaMetricStorage.collect();return this._temporalMetricStorage.buildMetrics(r,this._instrumentDescriptor,o,n)},e}(dh);bt();function PT(t,e){var r="";return t.unit!==e.unit&&(r+=" - Unit '"+t.unit+"' does not match '"+e.unit+`'
4587
4587
  `),t.type!==e.type&&(r+=" - Type '"+t.type+"' does not match '"+e.type+`'
4588
4588
  `),t.valueType!==e.valueType&&(r+=" - Value Type '"+t.valueType+"' does not match '"+e.valueType+`'
4589
4589
  `),t.description!==e.description&&(r+=" - Description '"+t.description+"' does not match '"+e.description+`'
@@ -4600,7 +4600,7 @@ ${t}`;case"ELEMENT_CHECK":return`${r0}
4600
4600
  ${t}`;default:return t}}async function Gn({frameConfig:t,action:e,browser:r}){let n=r.getActiveFrameConfig();t?r.setActiveFrameConfig(t):n?.type==="auto"&&r.setActiveFrameConfig(void 0);try{return await e()}finally{r.setActiveFrameConfig(n)}}var VJ=["NAVIGATE","NEW_TAB","TAB","REFRESH","WAIT_FOR_URL"];async function i0({beforeUrl:t,beforePages:e,browser:r,command:n,logger:o}){if(VJ.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 ye(250),l++;let u=(await r.getOpenPages()).map(p=>p.url),d=r.url();if(u.length!==e.length)for(let p=u.length-1;p>=e.length;p--){let m=u[p];if(qa(m,o)&&m!==t&&m!==d){o.info({beforePages:e,afterPages:u,beforeUrl:t},"Auto-following new tab after preset action"),await r.switchToPage({type:"INDEX",index:String(p)});break}}}}async function Uo(t,e={}){let r=await t.getBrowserState(e);return{serializedTree:r.serialize(e.serializationOpts),tree:r}}var a0=t=>!!t&&Ms(t),s0=t=>{let{cache:e,description:r,disableSecondaryCacheResolution:n,logger:o}=t,i=e,a=!1;return i&&n&&i.targetSource==="HEURISTIC_HEALED"&&(a=!0,i=void 0),i?.inputDescription&&!n0(r,i.inputDescription)&&(o.warn({old:i.inputDescription,new:r},"Target cache was generated with a different description, clearing it automatically"),a=!0,i=void 0),{cache:i,cacheBustedBeforeAction:a}};import{randomUUID as XJ}from"crypto";var c0={minChunkTokenCount:500,acceptableChunkTokenCount:3e3,maxChunkTokenCount:8e3,maxLineLength:4e3},u0={minChunkTokenCount:5e3,acceptableChunkTokenCount:1e4,maxChunkTokenCount:3e4,maxLineLength:500},l0=/<(\S+) id="(\d+)".*?>/g,$J=/(<\/(\S+)>)|(<(\S+).*?\/>)/g,d0=["h1","h2","section","footer","nav","aside","form","label","dialog"],WJ=[...d0,"span","div","h3"],qJ=["table","select","form","ul","ol","menu","pre","code","dialog"],KJ=["table","form","dialog","nav","section","ul","select"];function Eh(t){return YJ(t)}function YJ({logger:t,serializedTree:e,options:r}){let{minChunkTokenCount:n,acceptableChunkTokenCount:o,maxChunkTokenCount:i,maxLineLength:a}=r,s=[],c=e.split(`
4601
4601
  `),l=0,u=[],d=0,p=[],m=[],h=!1;for(;l<c.length;){h&&(s.push({ids:p,content:u.join(`
4602
4602
  `),tokenLength:d}),u=[],d=0,p=m.length?[m[m.length-1].id]:[],h=!1);let g=c[l],f=We(g);d+=f,g.length>a&&(g=g.slice(0,a));let y=Array.from(g.matchAll(l0)).map(H=>H&&H.length>=3?{tagName:H[1],id:H[2]}:void 0).filter(H=>!!H),w=Array.from(g.matchAll($J)).map(H=>H&&(H[2]||H[4])).filter(H=>!!H);w.reverse();let P=g.replace(/ id="[0-9]+"/g,"");u.push(P);for(let H of y)p.push(H.id),m.push(H);for(let H of w){let de=m[m.length-1];de&&de.tagName===H&&m.pop()}let v=m.some(H=>qJ.includes(H.tagName)),x=c[l+1]??"",O=We(x),N=Array.from(x.matchAll(l0)).map(H=>H&&H.length>2?H[1]:void 0).filter(H=>!!H),F=N.some(H=>d0.includes(H)),W=N.some(H=>WJ.includes(H));d+O>=i&&(h=!0),d>=n&&(F&&!v||w.some(H=>KJ.includes(H)))&&(h=!0),d>=o&&W&&!v&&(h=!0),l++}return u.length&&s.push({ids:p,content:u.join(`
4603
- `),tokenLength:d}),s.forEach((g,f)=>{let S=g.ids[0],b=g.ids[g.ids.length-1];t.debug({tokenLength:g.tokenLength,minId:S,maxId:b},`Chunk for page filtering (index ${f+1}/${s.length})`)}),{chunks:s}}var JJ=75e4,Th=3e5;async function gs(t){let{options:e,fixtures:r,screenshot:n}=t,{aiPageFiltering:o}=e,{logger:i,generator:a,orgId:s,signal:c}=r,l=t.tree,u=t.serializedTree,d=We(u);if(d>JJ)try{let p=Eh({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await QJ({...t,tokenLimit:Th-1e4,chunks:p.chunks}),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using keywords"),d=m}catch(p){i.warn({err:p},"Error filtering page using keyword matching, using naive truncation"),l=l.pruneToSerializedCharLimit(Th*Fi),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using naive truncation"),d=m}if(d>Th)try{if(o){let p=Eh({serializedTree:u,options:u0,logger:i}),m=XJ();l=await X(ZJ({...t,chunks:p.chunks,callId:m}),{milliseconds:12e3,signal:c}),u=l.serialize();let h=We(u);i.info({oldTokens:d,newTokens:h,langfuseCallId:m},"Filtered page using AI chunk ranking"),d=h}else{let p=Eh({serializedTree:u,options:c0,logger:i});l=await X(e6({...t,chunkResult:p,tokenLimit:4e4}),{milliseconds:12e3,signal:c}),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using RAG"),d=m}}catch(p){i.warn({err:p},"Error filtering page using RAG/AI, using naive truncation"),l=l.pruneToSerializedCharLimit(Th*Fi),u=l.serialize(),i.info("Filtered page using naive truncation")}return u}async function ZJ({type:t,callId:e,chunks:r,description:n,fixtures:o,tree:i}){let{generator:a,signal:s,logger:c}=o,l=await a.rankChunksWithAi({chunks:r,description:n,type:t,softTokenLimit:4e4,hardTokenLimit:8e4,callId:e},{abortSignal:s,logger:c,loggerTags:Qe(c)}),u=[];return r.forEach((p,m)=>{l.indices.includes(m)&&(u=u.concat(p.ids))}),i.pruneUsingRelevantIds(new Set(u))}async function QJ(t){let{description:e,fixtures:r,tree:n}=t,{generator:o,logger:i,signal:a}=r;if(!e.trim())throw new Error("Empty description passed to page filtering");let s=await o.getExtractedKeywords({goal:e},{logger:i,loggerTags:Qe(i),abortSignal:a});i.info({keywordsResult:s},"Got keywords for page filtering");for(let c of s.keywords){let l=t.chunks.filter(m=>m.content.toLowerCase().includes(c.toLowerCase()));if(!l.length||l.reduce((m,h)=>m+h.tokenLength,0)>t.tokenLimit&&l.length>1)continue;let d=l.flatMap(m=>m.ids);return n.pruneUsingRelevantIds(new Set(d))}throw new Error("No keywords were unique enough for page filtering")}async function e6(t){let{description:e,fixtures:r,chunkResult:n,tokenLimit:o,tree:i}=t,{generator:a,logger:s,signal:c}=r,l=await a.rankChunksWithRag({description:e,chunks:n.chunks,tokenLimit:o},{abortSignal:c,logger:s,loggerTags:Qe(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 UT(t,e){if(!t.description)throw new M("UserConfigurationError","Cannot locate element with empty description");return Gn({action:async()=>t6(t,e),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,browser:e.browser,logger:t.logger})}async function t6(t,e){let{disableCache:r,testContext:n,filterByViewport:o,skipWait:i,source:a,memory:s,aiPageFiltering:c,logger:l,allowNotActionableNodesOverride:u,skipSavingVisualAttributes:d}=t,{orgId:p,browser:m,localCodeEvalTools:h,generator:g,abortSignal:f}=e,S=t.description,b=rc(),y=t.useMemory&&!r;n&&(S=await $r({orgId:p,s:S,context:n,localTools:h,signal:f,logger:l})),a&&(S=o0(S,a));let{serializedTree:T,tree:w}=await b.startAsyncSpan("GET_PAGE_STATE",async()=>Uo(m,{allowNotActionableNodesOverride:u,filterByViewport:o,abortSignal:f,skipWait:i,logger:l}),{}),P=await b.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let $,B=Date.now(),ae;for(;!$&&Date.now()-B<3e3;){f.throwIfAborted();try{$=await m.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(ce){ae=ce}}if(!$)throw new M("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${ae?.message}`);return $}),v=T,x=!1,L=`data:image/jpeg;base64,${P.toString("base64")}`;v=await gs({type:"locator",description:S,screenshot:L,serializedTree:T,options:{aiPageFiltering:c},tree:w,fixtures:{generator:g,signal:f,logger:l,orgId:p}}),v!==T&&(x=!0);let N=await b.startAsyncSpan("AI_LOCATOR_CALL",async $=>{let B=await g.getElementLocation({browserState:v,goal:S,screenshot:L,source:a,memory:y?s:void 0},{disableCache:r,abortSignal:f,loggerTags:Qe(l),useMemory:y});return $.result=B,B});if(l.debug({usedRag:x,result:N},"Got locator result"),!(N.id>0))throw new Gs(`Could not find any relevant element: ${N.thoughts}`,N.updatedMemory?{type:"GCS_TRACES",traces:N.updatedMemory}:void 0);let{resolution:W,target:H,frameConfig:de}=await b.startAsyncSpan("TARGET_RESOLUTION",async $=>{let B=await m.createTargetFromA11yId({id:N.id,requirements:N.requirements,additionalElements:N.additionalElements,description:S,targetSource:"AI",logger:l,skipSavingVisualAttributes:d});return $.result={serializedElement:B.target.nodeOnlySerializedHtml??"Unknown HTML element"},B});if(W.a11yNode?.properties?.hidden&&W.a11yNode?.properties?.hidden!=="false")throw new M("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: ${W.displayString}`);return y&&(N.updatedMemory?H.memory={type:"GCS_TRACES",traces:N.updatedMemory}:s&&(H.memory=s)),{thoughts:N.thoughts,target:H,resolution:W,frameConfig:de,screenshot:L}}var r6=15;async function vh({command:t,aiPageFiltering:e,logger:r,fixtures:n,useMemory:o,maxRetries:i=r6}){if(!t.assertion.trim())throw new M("ActionFailureError","Assertion command is missing the assertion content");let a=vS.optional().catch(void 0).parse(t.source);t.source&&!a&&r.warn(`Invalid source ${t.source} for AI assertion, ignoring...`);let{browser:s}=n,c=t.timeout?t.timeout*1e3:s.smartWaitingTimeout,l=_I(c,i-1),u=0,d=Date.now(),p=d+c,m=d,h,g,f;try{await Gn({action:()=>s.clearHighlights(),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,browser:s,logger:r})}catch(S){r.warn({err:S},"Failed to clear highlights before AI check, continuing...")}for(;u<i;){n.abortSignal.throwIfAborted();let S=Date.now();if(u>0){if(S>=p)break;let T=p-S,w=m-S,P=Math.min(w,T);P>0&&await ye(P,n.abortSignal)}let b=Date.now();if(u>0&&b>=p)break;let y=!1;try{if(h=await Gn({action:async()=>{let w=await p0(s,r,n.abortSignal);return g&&g.serializedTree===w.serializedTree&&g.screenshotBuff.equals(w.screenshotBuff)?(y=!0,h):(g=w,m0({command:t,state:w,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:r,source:a}))},frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,logger:r,browser:s}),h?.success){h?.updatedMemory&&Lu(t,h.updatedMemory,r);break}else throw h?.thoughts?new M("AssertionFailureError",h.thoughts):new M("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(T){n.abortSignal.throwIfAborted(),f=T instanceof Error?T:new Error(`${T}`),y?r.info(`AI check attempt ${u} failed (re-used previous result)`):r.info({err:T},`AI check assert attempt ${u} failed, retrying...`)}finally{u++,m=b+l}}if(!h?.success){let S=p-Date.now();S>0&&await ye(S,n.abortSignal)}if(!h?.success)try{h=await Gn({action:async()=>m0({command:t,state:await p0(s,r,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:u,aiPageFiltering:e,logger:r}),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,logger:r,browser:s})}catch(S){n.abortSignal.throwIfAborted(),f=S instanceof Error?S:new Error(`${S}`)}finally{u++}if(h?.updatedMemory&&Lu(t,h.updatedMemory,r),!h?.success){let S=`AI check still failing after ${u} attempts.`;throw f&&(S+=` Latest result: ${f.message}`),new M("AssertionFailureError",S)}return{...h,succeedImmediately:!1,urlAfterCommand:s.url()}}async function p0(t,e,r){let[n,o]=await Promise.all([Uo(t,{abortSignal:r,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),t.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function m0({command:t,state:e,fixtures:r,useConsensus:n,useMemory:o,highlightElementsOnFailure:i,aiPageFiltering:a,attemptNumber:s,source:c,logger:l}){let{browser:u,generator:d,abortSignal:p}=r,m={type:"ASSERTION"},{serializedTree:h,tree:g}=e,f=e.screenshotBuff,S=f.toString("base64"),b=u.url(),y=t.contextChoice??"MULTIMODAL",T=h;y!=="VISION_ONLY"&&(T=await gs({type:"assertion",serializedTree:h,tree:g,description:t.assertion,screenshot:S,options:{aiPageFiltering:a},fixtures:{generator:d,signal:p,logger:l,orgId:r.orgId}}),T!==h&&(m.ragUsed=!0),m.pageState=T);let w={goal:t.assertion,url:b,memory:o?t.cache?.memory:void 0,browserState:T,screenshot:S,contextChoice:y,source:c},v=await(y==="VISION_ONLY"?(x,O)=>d.getVisualAssertionResult(x,O):(x,O)=>d.getAssertionResult(x,O))(w,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!t.disableCache,abortSignal:p,logger:l,loggerTags:Qe(l)});return(v.result||i)&&v.relevantElements&&(m.relevantElementsSerialized=v.relevantElements.map(x=>u.getSerializedFormFromA11yId(x)).filter(x=>!!x),await n6(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function n6(t,e,r){let n=Date.now();for(let o of t){if(Date.now()-n>2e3){r.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await X(e.highlightA11yId(o),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}})}catch(i){r.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}var o6=1e5,Ah=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function g0(t,e){let{logger:r}=t,{abortSignal:n,browser:o}=e,i=Date.now();try{await i6(i,t,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof Ah?r.warn("Skipping AI smart waiting due to excessive page size - falling back to naive waiting"):r.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=o.smartWaitingTimeout-(Date.now()-i);s>0&&await ye(s,n)}finally{r.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function i6(t,e,r){let{abortSignal:n,browser:o}=r;if(o.smartWaitingTimeout<3e3){await ye(o.smartWaitingTimeout,n);return}if(!e.description)throw new M("UserConfigurationError","Cannot locate element with empty description");await X(a6(t,e,r),{milliseconds:o.smartWaitingTimeout})}async function a6(t,e,r){let{logger:n,iframeUrl:o}=e,{browser:i}=r;for(;Date.now()-t<i.smartWaitingTimeout;)if(await Gn({action:async()=>s6(e,r),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function s6(t,e){let{testContext:r,logger:n,filterByViewport:o,allowNotActionableNodesOverride:i}=t,{browser:a,abortSignal:s,localCodeEvalTools:c,orgId:l,generator:u}=e,d=t.description;r&&(d=await $r({orgId:l,s:d,context:r,localTools:c,signal:s,logger:n}));let{serializedTree:p}=await Uo(a,{allowNotActionableNodesOverride:i,filterByViewport:o,abortSignal:s,logger:n});if(We(p)>o6)throw new Ah;s.throwIfAborted();let h;try{h=await a.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(b){throw new M("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${b instanceof Error?b.message:b}`)}let f=`data:image/jpeg;base64,${h.toString("base64")}`;s.throwIfAborted();let S=await u.getSmartWaitingDecision({browserState:p,description:d,screenshot:f},{abortSignal:s,loggerTags:Qe(n)});return n.debug({result:S},"Got smart waiting result"),S.isPageReady}import{cloneDeep as f0}from"lodash-es";async function S0(t){let{command:e,timeoutMs:r,fixtures:n}=t,{abortSignal:o}=n,i=()=>op(e.cache)?e.cache:void 0,a=i(),s=f0(a),c=(g=!1)=>{if(a=i(),!!a)if(g){let f=qy(s,a);a.target=f.target,a.updatedAt=f.updatedAt}else{if(!s){a=void 0;return}a.target=s.target,a.updatedAt=s.updatedAt}},l=Date.now(),u=0,d,p=500,m=!1;for(;u<2||Date.now()-l<r;){u++,u>1&&await ye(p,o),o?.throwIfAborted(),a=i();let{result:g,elementWasFound:f}=await h0({cacheToUse:a,params:t});if(d=g,m=f,g.success)break;c(),p=Math.min(p*2,1e4)}if(!d)throw new M("InternalPlatformError",`Failed to evaluate manual element assertion in ${r}ms.`);if(o?.throwIfAborted(),!d.success&&a?.target&&Ms(a.target)){let g=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await h0({cacheToUse:g,params:t});d=f,d.success||c(!0)}let h=i();return d.success&&h?.target&&!m&&(h.target=Ou(h.target),h.updatedAt=new Date),d}async function h0({cacheToUse:t,params:e}){let{command:r,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(r.target&&!Ti(r.target))throw new Error("Element assertion with x/y is not supported yet");let c=E_(r.assertion),l,u=!1,d=f0(t);try{let{elementInteractedDisplayString:p,result:m,thoughts:h}=await a({ctx:o.ctx,tracer:i,command:r,target:r.target,cache:d?.target,action:async g=>l6(g.locator,e),options:{...r,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:Ma(r),targetName:"target"}});return l={success:m.success,data:m.data,err:m.err,elementInteractedDisplayString:p,thoughts:h},u=!0,m.success||(s.warn({aiThoughts:h,elementString:p,err:m.err},"Element check found an element but failed"),l={...m,thoughts:h}),{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 M)||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 l6(t,{command:e,fixtures:r}){return await r.browser.highlight(t),await c6(t,e.assertion)}async function c6(t,e){let r=!0,n,o;switch(e.type){case"ELEMENT_CONTENT":{let a=await t.textContent()??"";if(o={elementTextContent:Tt(a,500,!0)},!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,n=new M("AssertionFailureError",`The content ${s} '${e.value}': ${a}`)}break}case"ELEMENT_ATTRIBUTE":{o={elementOuterHtml:Tt(await t.evaluate(s=>s.cloneNode(!1).outerHTML),500,!0)};let a=null;try{a=await t.getAttribute(e.attr,{timeout:3e3})}catch(s){n=new M("AssertionFailureError",s instanceof Error?s.message:String(s)),r=!1;break}if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,e.operation==="EXISTS"?n=new M("AssertionFailureError",`The attribute ${e.attr} ${s}`):n=new M("AssertionFailureError",`The attribute ${e.attr} ${s} '${e.value}': ${a}`)}break}case"ELEMENT_EXISTENCE":{switch(e.condition){case"VISIBLE":{r=await t.evaluate(async(s,c)=>{let l=Date.now();for(;Date.now()-l<c;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return!0}return!1},po*1e3);break}case"EDITABLE":{r=await t.isEditable({timeout:po*1e3});break}case"EXISTS":{r=!0;break}case"ENABLED":{r=await t.isEnabled({timeout:po*1e3});break}case"FOCUSED":{r=await t.evaluate(s=>s===document.activeElement);break}default:return(s=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e.condition)}if(r=e.negated?!r:r,!r){let a=yl(e);n=new M("AssertionFailureError",`The element ${a}`)}break}case"ELEMENT_NAME":{let a=await t.evaluate(s=>s.tagName);if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!0})){let s=yl(e);r=!1,n=new M("AssertionFailureError",`The element tag name ${s} '${e.value}': ${a}`)}break}case"ELEMENT_STYLE":{let a=await t.evaluate((s,c)=>window.getComputedStyle(s).getPropertyValue(c),e.property);if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,e.operation==="EXISTS"?n=new M("AssertionFailureError",`The style property ${e.property} ${s}`):n=new M("AssertionFailureError",`The style property ${e.property} ${s} '${e.value}': ${a}`)}break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}return{thoughts:void 0,success:r,data:o,err:n}}function y0(t){return t.type==="ELEMENT_EXISTENCE"&&t.negated&&t.condition==="EXISTS"}import{Jimp as u6}from"jimp";async function vd(t,e){let r=await t.screenshot(e),n=await u6.fromBuffer(r);return{buffer:r,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as b0}from"jimp";import FT from"jpeg-js";import d6 from"pixelmatch";async function E0({ctx:t,tracer:e,command:r,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(r.target&&!Ti(r.target))throw new Error("Visual Diff with x/y is not supported yet");await o.waitForStability({logger:a});let c={clearHighlights:!0,hideCaret:!0},l;r.target?.elementDescriptor?l=(await i({ctx:t,tracer:e,command:r,target:r.target,cache:r.cache?.target,action:async N=>vd(o,{locator:N.locator,...c}),options:{...r,disableCache:n,disableGlobalLocatorRedirect:!0,memory:r.cache?.target?.memory,targetName:"target"}})).result:l=await vd(o,c);let u=await s.prepareGoldenScreenshotForComparison(a,r,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 L=`${l.width}x${l.height}`,N=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${L}) does not match saved screenshot dimensions (${N}) - 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 b0.fromBuffer(l.buffer),p={width:l.width,height:l.height},m=await b0.fromBuffer(u.buffer),h={width:u.width,height:u.height},g,f=p.width*p.height,S=h.width*h.height,b=Math.abs(p.height-h.height),y=Math.abs(p.width-h.width);if(f>S){let L=d.cover({w:h.width,h:h.height});l.buffer=await L.getBuffer("image/jpeg"),g="current",l.width=h.width,l.height=h.height}else if(S>f){let L=m.cover({w:p.width,h:p.height});u.buffer=await L.getBuffer("image/jpeg"),g="saved"}let T={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},w=r.threshold??.1,v=d6(FT.decode(u.buffer).data,FT.decode(l.buffer).data,T.data,l.width,l.height,{threshold:w,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,x=v>w*100,O=`Visual diff of ${v.toFixed(2)}% detected, which is ${x?"over":"under"} the threshold of ${w*100}%.`;if(g&&(O+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${y} pixels.`),x)throw new M("ActionFailureError",O);return{fail:x,thoughts:O,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:FT.encode(T,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var p6=3e4;function m6(t){if(!t.body)return{};switch(t.body.type){case"json":return{content:t.body.content,contentType:"application/json"};case"form-urlencoded":{let e=new URLSearchParams;return Object.entries(t.body.content).forEach(([r,n])=>{e.append(r,n)}),{content:e.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function T0({command:t,logger:e,baseUrl:r,fetchImplementation:n=fetch}){let o=t.timeout??p6/1e3,i=Object.fromEntries(Object.entries(t.headers||{}).filter(([h,g])=>h&&g)),a=new URLSearchParams;Object.entries(t.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{a.append(h,g)});let s=a.toString(),c;if(wl(t.url)&&(c=t.url),r&&xl(t.url,r)&&(c=new URL(t.url,r).toString()),!c)throw new M("ActionFailureError",`Invalid URL: ${t.url}`);let l=c;e.info({url:l,searchParams:s,headers:i,body:t.body,method:t.method},"Making HTTP request");let d=await X((async()=>{let h=s?`${l}?${s}`:l;try{let g=m6(t),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await n(h,{headers:f,method:t.method,body:g.content})}catch(g){throw e.error({err:g},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${g}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new M("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!d.ok){let h;try{h=await d.text()}catch(g){h=`Failed to read response body: ${g}`}throw new M("ActionFailureError",`Fetch request failed with status ${d.status}: ${h}`)}let p={};d.headers.forEach((h,g)=>{p[g]=h});let m={status:d.status,headers:p,request:{url:d.url,method:t.method,headers:i}};if(t.body?.type==="json"&&t.body.content)try{m.request.json=JSON.parse(t.body.content)}catch{}if(d.headers.get("content-type")?.includes("json"))try{m.json=await d.json()}catch{}else d.headers.get("content-type")?.includes("text")&&(m.text=await d.text());return m}var g6=5e3;async function Rh({timeout:t=po,...e}){let r=Date.now(),n=t*1e3,o=n+1e4,i,a=0,s=500;for(;a-r<n;){if(Date.now()-r>o){e.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}e.signal?.throwIfAborted();let c=Date.now();i=await v0(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 ye(s,e.signal),s=Math.min(Math.floor(s*1.5),g6);else return i}return i=await v0(e),i}async function v0({assertion:t,browser:e,autoExpandIframes:r}){switch(t.type){case"CONTENT":case"CONTENT":{let o,i=!1,a;try{let s;if(r){let c=await e.evaluateFunctionInAllFrames(A0,{value:t.value,negated:!!t.negated,returnHtml:!1});i=t.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(A0,{value:t.value,negated:!!t.negated,returnHtml:!0},"checking page content"));if(!i){let c=t.negated?Qo.CONTAINS:ei.CONTAINS;a=new M("AssertionFailureError",`The page ${c} '${t.value}'.`),o=s}}catch(s){a=new M("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"})(t)}}function A0({value:t,negated:e,returnHtml:r}){let n=document.documentElement.outerHTML,o=n.includes(t)===!e;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:o,pageHtml:!o&&r?n:void 0}}var h6=3e4;async function R0({command:t,logger:e,baseUrl:r,fetchImplementation:n=fetch}){let o=t.timeout??h6/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(t.headers||{}).filter(([d,p])=>d&&p));a["Content-Type"]="application/json";let s;if(wl(t.url)&&(s=t.url),r&&xl(t.url,r)&&(s=new URL(t.url,r).toString()),!s)throw new M("ActionFailureError",`Invalid URL: ${t.url}`);let l=await X((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:t.query,variables:t.variables?JSON.parse(t.variables):void 0}),signal:i.signal})}catch(d){e.error({err:d},"Failed to make HTTP request")}})(),{milliseconds:o*1e3});if(!l)throw new M("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 M("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}throw d?.errors?.length&&d?.errors[0]?.message?new M("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new M("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 aa=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:e,generator:r,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=r,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:r,history:n,disableCache:o,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[c,l]=await Promise.all([Uo(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 gs({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:r,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(p,{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:{...Qe(s)},langfuseSessionId:i})}async promptToCommand({goal:e,startingScreenshot:r,history:n,actionHint:o,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let c=this.browser.url(),[l,u]=await Promise.all([Uo(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 gs({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}}),m={url:c,browserState:p,startingScreenshot:r,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(m,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Qe(a)},langfuseSessionId:s})}catch(h){throw new M("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(e){return Uo(this.browser,e)}async locateElement(e){return await UT({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,r){return Gn({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:r?{type:"url",url:r}: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:r,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],m=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:p,cache:a[d],action:async h=>h,options:{...c,targetName:o[d]}});u.push(m)}try{let d=await s(...u.map(h=>h.result)),p=h=>h==="fromTarget"?"From Target":h==="toTarget"?"To Target":"Target",m=u.map((h,g)=>h.thoughts?`${p(o[g])}: ${h.thoughts}`:void 0).filter(h=>!!h).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(h=>h.elementInteractedDisplayString),thoughts:m}}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:r,command:n,targetNames:o,descriptions:i,caches:i.map(()=>{}),action:s,options:c,retriesWithAI:l-1});throw new M("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapHardcodedCssTargetingCommandHelper({ctx:e,target:r,action:n,options:o,command:i}){let a=this.logger.child({commandId:i.id}),{targetName:s}=o;if(r.type!=="description")throw new M("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:r.elementDescriptor,targetName:s,logger:a});return{result:await n({locator:d.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),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 ye(500)}}throw c}async resolveCachedTargetForAction(e){let{ctx:r,cache:n,options:o,logger:i}=e,a=rc(),s=await a.startAsyncSpan("CACHE_RESOLUTION",async l=>{let u=await this.browser.resolveTarget(r,n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:i,signal:this.executeAbortController.signal,...o.resolveTargetOptions});return l.attributes.targetDisplayString=u.displayString,u});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await a.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(s.locator)});let c;return!o.disableGlobalLocatorRedirect&&this.browser.userBrowserSettings.globalLocatorRedirect!==!1&&(c=await a.startAsyncSpan("LOCATOR_REDIRECT",async()=>this.browser.performTargetRedirection(s,i))),c||(c={locator:s.locator,serverSideBoundingBox:await s.locator.boundingBox({timeout:ie}),originalElementLocationResult:s.originalElementLocationResult}),await s.revalidator?.(),{resolutionResult:s,finalTarget:c}}async wrapElementTargetingCommand(e){return await Gn({action:()=>this.wrapElementTargetingCommandHelper(e),frameConfig:e.options.iframeUrl?{type:"url",url:e.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(e){let{ctx:r,tracer:n,target:o,action:i,options:a,command:s,finalAttempt:c=!1,originalCache:l=e.cache}=e,{retriesWithAI:u=1}=e,{disableCache:d,useSelector:p,targetName:m,targetHealingInProgress:h,source:g}=a,f=rc(),S=this.logger.child({commandId:s.id}),b=this.shouldUseMemory(),y=C0(e.cache);if((!y||d)&&!Mf(o))throw new M("ActionFailureError","Cannot target element with no cached data or element descriptor");if(p)return this.wrapHardcodedCssTargetingCommandHelper(e);let T=!1;d&&(S.info("Cache explicitly disabled for this step"),T=!0,y=void 0);let w=s0({cache:y,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:S});y=w.cache,T=T||w.cacheBustedBeforeAction;let P=!0;if(!a0(y)){P=!1,S.info({description:o.elementDescriptor,targetHealingInProgress:h,cacheBustedBeforeAction:T,memory:a.memory,useMemory:b},"Prompting AI for an updated element location"),(T||!l)&&await f.startAsyncSpan("SMART_WAITING",async()=>await g0({description:o.elementDescriptor,iframeUrl:a.iframeUrl,source:g,logger:S,allowNotActionableNodesOverride:a.allowNotActionableNodesOverride},this.getControllerFixtures(r))),u--;let v;try{v=await UT({description:o.elementDescriptor,disableCache:!!a.disableCache,iframeUrl:a.iframeUrl,source:g,useMemory:b,memory:b?a.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:a.allowNotActionableNodesOverride,logger:S},this.getControllerFixtures(r))}catch(L){if(L instanceof Gs&&L.updatedLocatorMemory){let N={id:-1,...l,memory:L.updatedLocatorMemory};Em({cmd:s,key:m,newTarget:N,logger:S,updatedWithAI:!0})}throw new M("ActionFailureError",L.message)}v.frameConfig&&this.browser.setActiveFrameConfig(v.frameConfig);let x;!a.disableGlobalLocatorRedirect&&this.browser.userBrowserSettings.globalLocatorRedirect!==!1&&(x=await f.startAsyncSpan("LOCATOR_REDIRECT",async()=>this.browser.performTargetRedirection(v.resolution,S))),x||(x={locator:v.resolution.locator,serverSideBoundingBox:await v.resolution.locator.boundingBox({timeout:ie}),originalElementLocationResult:v.resolution.originalElementLocationResult});let O=await i(x);return Em({cmd:s,key:m,newTarget:v.target,logger:S,updatedWithAI:!0}),h&&(n.recordTargetAutoHeal({healType:"AI"}),v.target.targetSource="AI_HEALED",v.target.targetUpdateTime=new Date().toUTCString(),v.target.targetUpdateLoggerTags=Qe(S)),{result:O,elementInteractedDisplayString:v.resolution.displayString,thoughts:v.thoughts}}try{let{resolutionResult:v,finalTarget:x}=await this.resolveCachedTargetForAction({ctx:r,cache:y,options:a,logger:S}),O=await i(x);if(cr.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!y.requirements}`,`hasAdditionalElements:${!!y.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:2.45.2"]),Em({cmd:s,key:m,newTarget:y,logger:S,updatedWithAI:!1}),P){let L=v.decisions.filter(N=>N.matched);if(L.length!==1)S.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let N=L[0].type;n.recordTargetAutoHeal({healType:N})}}return{result:O,elementInteractedDisplayString:v.displayString}}catch(v){if(this.throwIfClosed(),(v instanceof qo||uR(v)||mR(v)||gR(v)||cR(v)||dR(v)||pR(v))&&!c)return this.wrapElementTargetingCommandHelper({ctx:r,tracer:n,command:s,target:o,action:i,cache:l,originalCache:l,retriesWithAI:u,finalAttempt:!0,options:a});if(v instanceof M)throw S.error({err:v},"Failed to execute command with target (fatal)"),v;if(u>0&&o){S.info({err:v},"Failed to execute action with cached target, retrying with AI"),cr.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!y.requirements}`,`hasAdditionalElements:${!!y.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:2.45.2",`missReason:${v instanceof Tn?v.cacheMissReason:"unknown"}`]);let O;return y.memory&&ep(y.memory)&&(O=y.memory),this.wrapElementTargetingCommandHelper({ctx:r,tracer:n,command:s,target:o,cache:void 0,action:i,originalCache:l,retriesWithAI:u,finalAttempt:!0,options:{...a,memory:O,targetHealingInProgress:!0}})}throw new M("ActionFailureError",`Failed to execute interactive command: ${v instanceof Error?v.message:`${v}`}`,{errOptions:{cause:v}})}}async screenshotWithDimensions(e){return vd(this.browser,e)}async executePresetCommand(e,r,n,o,i){this.options?.slowMoMs&&await ye(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 M("ActionFailureError",`Failed to substitute template strings in command: ${l.message}`,{errOptions:{cause:l}})}try{let l=await this.executePresetCommandHelper(e,r,n,o,i);return this.options?.autoFollowNewTabs&&await i0({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{iM(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>rE(e)}}async resolveCommandTemplateStrings(e,r){return ug({obj:e,context:r,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(e,r,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()?vh({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 M("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new M("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return vh({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new M("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let g=Wx(n.schema);if(g)throw new M("UserConfigurationError",g)}let m=await this.browser.getCondensedHtml(),h=await this.browser.screenshot({retries:2});try{let g=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:Qe(a)});if(g.result==="NOT_FOUND")throw new M("ActionFailureError","No relevant data found for extraction goal on this page");if(g.thoughts?.includes("MaxGenerationLengthExceededError"))throw new M("UserConfigurationError",g.thoughts);return{thoughts:g.thoughts||void 0,data:g.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(g){let f=g.message;throw f.includes("MaxGenerationLengthExceededError")?new M("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):f.includes("AIProviderError")&&f.includes("time")?new M("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:g}}):g}}case"NAVIGATE":if(!wl(n.url)&&!xl(n.url,this.browser.baseUrl))throw new M("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"DIALOG":this.browser.registerDialogHandler(n.action);break;case"CAPTCHA":throw new M("UserConfigurationError","Captcha solving is no longer available on Momentic");case"GO_BACK":await this.browser.goBack();break;case"GO_FORWARD":await this.browser.goForward();break;case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_DOWN":case"SCROLL_UP":{let m,h;if(n.target&&uo(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:S,thoughts:b}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:y=>this.browser.hover(y),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});m=S,h=b}let g=this.browser.getViewport()?.height??Ar.height,f=this.browser.getViewport()?.width??Ar.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??g));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??g);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??f));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??f);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new M("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 M("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let c=n.delay*1e3;await ye(c,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(uo(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let m=this.browser.url(),{elementInteractedDisplayString:h,result:g,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,target:n.target,command:n,cache:n.cache?.target,action:b=>this.browser.click(b,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),S={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:f,data:g.downloadedFile?{downloadedFile:g.downloadedFile}:void 0};return Om(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(uo(n.fromTarget)&&uo(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0});break}if(uo(n.fromTarget)||uo(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:r,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(g,f)=>this.browser.dragAndDrop(g,f,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m[0],thoughts:h}}case"MOUSE_DRAG":{let m=parseInt(n.deltaX),h=parseInt(n.deltaY),g=n.steps??5;if(isNaN(m)||isNaN(h))throw new M("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&uo(n.target)){await this.browser.mouseDragUsingVisualCoordinates({deltaX:m,deltaY:h,steps:g,fromTarget:n.target.pixels});break}let f,S;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:b,thoughts:y}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:async T=>this.browser.mouseDrag(m,h,g,T.locator,{force:n.force}),options:{disableCache:i,targetName:"target",...n}});f=b,S=y}else await this.browser.mouseDrag(m,h,g,void 0,{force:n.force});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:S}}case"SELECT_OPTION":{if(!Ti(n.target))throw new Error("Select with x/y is not supported yet");let m=n.target.elementDescriptor,h=n.choice,{elementInteractedDisplayString:g,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:{type:"description",elementDescriptor:m},cache:n.cache?.target,action:S=>this.browser.selectOption(S,h,n.force),options:{...n,targetName:"target",disableCache:i,source:Ma(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:g,thoughts:f}}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 l=await this.browser.setCookie(n.value);a.debug({results:l},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let 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 Ki({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 M("ActionFailureError",h instanceof Error?h.message:`${h}`,{errOptions:{cause:h}})}try{JSON.stringify(m)}catch(h){throw new M("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&&uo(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,g,f=C0(n.target),S=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:y,thoughts:T}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:f,cache:n.cache?.target,action:w=>this.browser.typeIntoTarget(n.value,w,{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:!S,source:Ma(n)}});h=y,g=T}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let b={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:g};return Om(m,b.urlAfterCommand)&&(b.succeedImmediately=!0,b.succeedImmediatelyReason="URL changed"),b}case"HOVER":{if(uo(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:g=>this.browser.hover(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"FOCUS":{if(!Ti(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:g=>this.browser.focus(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"BLUR":{if(n.target&&!Ti(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:r,target:n.target,command:n,cache:n.cache?.target,action:g=>this.browser.blur(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"PRESS":let u=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let d={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return Om(u,d.urlAfterCommand)&&(d.succeedImmediately=!0,d.succeedImmediatelyReason="URL changed"),d;case"KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"REQUEST":{let m=new S6,h=f6(fetch,m),g;try{g=new URL(n.url).hostname}catch{}let f=await T0({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:h});return{data:Lc.parse({...f,cookies:tw(m,g)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await R0({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return E0({ctx:e,tracer:r,command:n,disableCache:i,browser:this.browser,logger:a,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 bM({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 M("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 Ki({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof m!="object")throw new M("ActionFailureError",`Credentials must evaluate to an object (received ${typeof m} instead)`);let h;try{h=Yp.optional().parse(m)}catch(g){throw new M("ActionFailureError",`Credentials provided do not follow the required format: ${g}`)}await this.browser.loadAuthState(h);break}case"ELEMENT_CHECK":{let m=(n.timeout??po)*1e3,h=this.generator.getAgentConfig()?.assertion;if(y0(n.assertion)&&!n.useSelector&&n.target.type==="description"&&h&&h!=="v1"){let f={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let S=await vh({command:f,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory()});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${S.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:S.afterScreenshotOverride}}finally{f.cache?.memory&&Lu(n,f.cache?.memory.traces,a)}}let g=await S0({command:n,tracer:r,timeoutMs:m,targetingWrapper:f=>this.wrapElementTargetingCommand(f),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!g.success,data:g.data,elementInteracted:g.elementInteractedDisplayString,thoughts:g.err?.message??g.thoughts??`Element assertion ${g.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let m=await Gn({action:async()=>Rh({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 Ji(n.requestMatcher),h=this.browser.registerRequestListener(m);return this.registeredListeners[n.key]=h.then(async g=>await sE(g)).catch(g=>{a.error({err:g},"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 M("ActionFailureError",`No listener registered with key: ${n.key}`);let h=n.timeout??10;return{data:await X(m,{milliseconds:h*1e3,message:`Request listener timed out after ${h} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let m=new Ji(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,{matches:h=>m.matches({url:h.request.url,method:h.request.method}),onRequestStart:(h,g)=>{this.recordedRequests[n.key][h]=gg(g)},onRequestComplete:(h,g)=>{this.recordedRequests[n.key]?.[h]&&(this.recordedRequests[n.key][h]=gg(g))}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let m=this.recordedRequests[n.key];if(!m)throw new M("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 Ji(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 Ji(n.requestMatcher),async(h,g)=>{let f=await Ki({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:h,response:g},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),S=yw.parse(f);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:r,disableCache:n,screenshot:o}){return(await this.generator.getReverseMappedDescription({browserState:e,target:r,screenshot:o},{disableCache:n,abortSignal:this.executeAbortController.signal,loggerTags:Qe(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights()}async startRecordMode({params:e,abortController:r,isClickToRecord:n}){this.recordAbortController=r;let o=new Eg({signal:r.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:Qe(this.logger)})}async getFailureRecoveryPlan(e){return this.generator.getFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Qe(this.logger)})}};var BT=async t=>{let{step:e,resolvedInputs:r}=t.moduleParams,{logger:n,context:o,storage:i,codeEvalTools:a,controller:s}=t.fixtures,c=s.browser,{orgId:l,runId:u}=t.inputs,d=s.executeAbortController.signal;Object.keys(r).length>0&&(o.setInputs(r),n.info(zi({json:{inputs:r,moduleId:e.moduleId},maxJsonStringSize:1e3}),"Set module inputs"));let p,m=!1,h,g;if(e.cacheConfig||e.defaultCacheAllInvocations){let f=e.cacheConfig?.cacheKey||e.defaultCacheKey||"",S=await $r({orgId:l,s:f,context:o,logger:n,localTools:a,signal:d});g={orgId:l,cacheKeys:[S,...Object.entries(r).map(([y,T])=>`${y}:${T}`)]},n.info({original:f,keyParams:g},"Module cache key params");let b=Date.now();for(;Date.now()-b<Ww;){d?.throwIfAborted();let y=await i.getCacheResult(g);if(y){n.info({cacheResult:Tt(y,1e3,!0)},"Got result from module execution cache"),p=Ch(e,r,"SUCCESS"),p.message="Used cached module result.",p.data=JSON.parse(y),m=!0;break}else n.info({cacheKey:f,keyParams:g},"No cache result found, continuing with lock acquisition");let T=await i.acquireCacheLock({keyParams:g,clientMetadata:`hostName:${y6()};runId:${u}`},d);if(T.acquired){h=T.keyPrefix,n.info({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Acquired cache lock and proceeding with module execution");break}else n.debug({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Failed to acquire cache lock, retrying...");await ye(2500+Math.random()*1e4,d)}}try{if(!p)p=await b6(t);else if(e.autoAuth){let f=Yp.safeParse(p.data);if(!f.success)throw new M("UserConfigurationError",`Cached authentication module result is not a valid storage state: ${f.error.message}`);n.debug("Automatically loading auth state after cached module result"),await c.loadAuthState(f.data);let S=!1,b=e.advanced?.cacheInvalidation;if(b&&b.type==="PAGE_CHECK"){let y={type:"CONTENT",value:b.substring},T=await Rh({timeout:po,assertion:y,browser:c,logger:n,signal:d,autoExpandIframes:!!c.userBrowserSettings.autoExpandIframes});T.success?n.debug({invalResult:T},"Cached result still valid after page check, continuing..."):(n.info({invalResult:T},"Invalidating cached result due to page check failure"),S=!0)}if(g&&S)return await i.deleteCacheResult(g),BT(t)}}finally{try{h!==void 0&&!m&&p?.status==="SUCCESS"&&await E6({step:e,result:p,browser:s.browser,cacheKeyPrefix:h,logger:n,storage:i})}finally{h!==void 0&&await i.releaseCacheLock(h)}}return p},b6=async t=>{let{step:e,tracer:r}=t.moduleParams,n=Ch(e,t.moduleParams.resolvedInputs,"SUCCESS"),o=await r.startSubSteps(),{status:i,results:a}=await t.executeStepList({...t,listParams:{steps:e.steps,containerName:`module ('${e.name}')`,tracer:o}});return n.results=a,n.status=i,n.finishedAt=new Date,kn({asyncTasks:t.work.asyncTasks,nestedResults:a,result:n,logger:t.fixtures.logger}),n};function Ch(t,e,r){let n={};return Object.entries(e).forEach(([i,a])=>{n[i]=JSON.stringify(a)}),{type:"MODULE",id:t.id,moduleId:t.moduleId,moduleName:t.name,startedAt:new Date,cacheConfig:t.cacheConfig,inputs:n,results:[],finishedAt:new Date,status:r}}async function w0({orgId:t,step:e,context:r,logger:n,codeEvalTools:o,signal:i}){let a={};try{for(let s of e.parameters??[]){let c=e.inputs?.[s]??e.defaultParameters?.[s];if(!c){n.warn(`No value or default found for parameter '${s}' that is required by module '${e.name}'`);continue}a[s]=await Ki({orgId:t,code:c,fragment:!0,context:r,logger:n,localTools:o,signal:i})}return a}catch(s){throw i?.throwIfAborted(),new M("UserConfigurationError",`Failed to evaluate module inputs: ${s}`)}}async function E6({step:t,result:e,browser:r,cacheKeyPrefix:n,logger:o,storage:i}){let a=t.cacheConfig?.cacheExpiryMs;(!a||a===Ux)&&(a=t.defaultCacheTtl??Fx);let s;t.autoAuth?s=JSON.stringify(await r.saveAuthState()):e.data!==void 0?s=JSON.stringify(e.data):s='""',o.debug({cacheKeyPrefix:n,ttlMs:a,truncatedCacheResultJson:zi({json:s,maxJsonStringSize:1e4})},"Setting module cache result"),await i.setCacheResult({result:s,keyPrefix:n,ttlMs:a})}async function hs(t,e,r){return T6(t,e,r)}async function T6(t,e,r){let n=new Date;try{return r.throwIfAborted(),await e()}catch(o){let i=new Date,a="FAILED",s;if(r.aborted||o instanceof DOMException&&o.name==="AbortError"?(s="Step aborted by user.",a="CANCELLED"):o instanceof M?s=`${o}`:s=`An unexpected error occurred: ${o.message}`,t.type==="RESOLVED_MODULE"){let c=Ch(t,{},"FAILED");return c.message=s,c.startedAt=n,c.finishedAt=i,c}return{...Pm(t),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function nc(t,e){let r=!1;try{return t&&!t.state.failureRecoveryDisabled&&(t.state.failureRecoveryDisabled=!0,r=!0),await e()}finally{t&&r&&(t.state.failureRecoveryDisabled=void 0)}}import{cloneDeep as K6}from"lodash-es";import{randomUUID as x0}from"crypto";import{diff as v6}from"deep-object-diff";import{cloneDeep as _0}from"lodash-es";var wh=async t=>{let{step:e,tracer:r}=t.presetParams,{logger:n,controller:o,context:i}=t.fixtures,{collectDebugData:a}=t.options,{testMetadata:s}=t.inputs,c=e.command.type,l=n.child({commandType:c,stepId:e.id,commandId:e.command.id}),u="cache"in e.command&&e.command.cache?_0(e.command.cache):{},d=o.browser.url(),p=new Date,m,h=x0(),g=x0();if(a)try{if(m=await o.browser.screenshot({retries:1,clearHighlights:!0,quality:75}),!o.browser.userBrowserSettings.disableHtmlSnapshots){let T=await o.browser.getRawCondensedHtml();r.attachBeforeHtmlSnapshot({logger:l,snapshotId:h,html:T})}}catch(T){l.debug({err:T},"Failed to take before screenshot, continuing...")}let f,S,b,y=Up();try{let T=await o.executePresetCommand(y,r,e.command,i,s?.advanced.disableAICaching??!1);T.beforeScreenshotOverride&&(m=T.beforeScreenshotOverride),b=T.afterScreenshotOverride;let w=new Date,P=o.browser.url();S={beforeUrl:d,afterUrl:P,startedAt:p,finishedAt:w,viewport:o.browser.getViewport(),status:T.fail?"FAILED":"SUCCESS",elementInteracted:T.elementInteracted},f={...e,message:T.thoughts??"Successfully executed preset action.",beforeUrl:d,afterUrl:P,finishedAt:w,startedAt:p,status:T.fail?"FAILED":"SUCCESS",data:T.data,results:[S]},"assertion"in e.command&&(f.message=T.thoughts||"Assertion passed.")}catch(T){l.error({message:T.message,stack:T.stack},`Failed executing preset step ${ti(e.command)}`);let w=o.browser.url(),P=new Date,v=T instanceof Error?T.message:`${T}`;S={beforeUrl:d,afterUrl:w,startedAt:p,finishedAt:P,viewport:o.browser.getViewport(),status:T instanceof DOMException&&T.name==="AbortError"?"CANCELLED":"FAILED",message:v},f={...e,startedAt:p,finishedAt:P,beforeUrl:d,afterUrl:w,status:T instanceof DOMException&&T.name==="AbortError"?"CANCELLED":"FAILED",message:v,failureReason:T instanceof M?T.reason:void 0,results:[S]}}finally{let T="cache"in e.command&&e.command.cache?_0(e.command.cache):{},w=v6(u,T);w&&Object.keys(w).length>0&&l.info({diffs:Jp(w)},"Updated cache")}if(a)try{if(b||(b=await o.browser.screenshot({retries:1,quality:75})),!o.browser.userBrowserSettings.disableHtmlSnapshots){let T=await o.browser.getRawCondensedHtml();r.attachAfterHtmlSnapshot({logger:l,snapshotId:g,html:T})}}catch(T){l.debug({err:T},"Failed to store debug data after step, likely because the page is still loading. This is non-fatal and does not affect the test.")}return S.beforeSnapshot=h,f.beforeSnapshot=h,S.afterSnapshot=g,f.afterSnapshot=g,m&&r.attachBeforeScreenshot({snapshotId:h,screenshot:m}),b&&r.attachAfterScreenshot({snapshotId:g,screenshot:b}),f};async function A6(t,e,r){let{tracer:n}=t.conditionalParams,{logger:o,controller:i}=t.fixtures,a=e.assertion.command;a.type==="AI_ASSERTION"&&(a.source="CONDITIONAL_CHECK");try{let s=await wh({...t,presetParams:{tracer:n,step:e.assertion}});switch(a.type){case"AI_ASSERTION":case"PAGE_CHECK":return s.status==="SUCCESS"?{type:"passed",conditionResult:s,steps:e.steps}:(o.info(s.message,`${a.type} condition ${r} resolved to false`),{type:"failed",conditionResult:s});case"JAVASCRIPT":{if(s.status==="FAILED")return{type:"execution_error",conditionResult:s};let c=!!s.data;return s.status=c?"SUCCESS":"FAILED",s.message=c?`JavaScript condition evaluated to true (${JSON.stringify(s.data)})`:`JavaScript condition evaluated to false (${JSON.stringify(s.data)})`,o.info({returnValue:s.data,conditionPassed:c},`JavaScript condition ${r} evaluated`),c?{type:"passed",conditionResult:s,steps:e.steps}:{type:"failed",conditionResult:s}}default:return(l=>{throw new Error(`Unsupported conditional command type: ${l}`)})(a.type)}}catch(s){o.error({err:s},`Condition ${r} failed with error`);let c=s instanceof Error?s.message:"Unknown error during condition evaluation";return{type:"execution_error",conditionResult:{...e.assertion,status:"FAILED",message:c,startedAt:new Date,finishedAt:new Date,results:[]}}}finally{a.type==="AI_ASSERTION"&&delete a.source,i.throwIfClosed()}}function R6(t,e,r,n){let o=n.slice(r.length);for(let i=0;i<t.blocks.length;i++){let a=t.blocks[i],{result:s}=bl(a.steps,e,o);if(s)return i}return-1}async function I0(t){let{step:e,tracer:r}=t.conditionalParams,{logger:n}=t.fixtures,{fromStep:o}=t.inputs,i=new Date,a=Pm(e),s=r.getParentStepIdChain().concat(e.id),c=!!o&&Mu(s,o.parentStepIdChain),l=e.elseSteps,u=!0,d=[],p,m=Up(),h=!1;if(c&&o){let y=R6(e,o.fromStepId,s,o.parentStepIdChain);y>=0&&(l=e.blocks[y].steps,u=!1,h=!0,n.info(`Skipping conditional assertion (execution starts from step within block ${y}), running ${l.length} steps`))}if(!h)for(let y=0;y<e.blocks.length;y++){n.info(`Evaluating condition ${y} in conditional step`);let T=e.blocks[y],w=await A6(t,T,y);if(d.push(w.conditionResult),p=w.conditionResult,w.type==="execution_error"){let P={...a,assertionResult:w.conditionResult,status:"FAILED",startedAt:i,finishedAt:new Date,message:w.conditionResult.message,results:[],details:m.details};return kn({asyncTasks:t.work.asyncTasks,nestedResults:d,result:P,logger:n}),P}if(w.type==="passed"){n.info(`Condition ${y} resolved to true, executing the corresponding ${w.steps.length} steps`),u=!1,l=w.steps;break}}if(l)u&&n.info("No conditions resolved to true, executing the else block steps");else{n.warn("No conditions resolved to true and no else block was provided, causing the entire conditional step to be skipped");let y={...a,assertionResult:p,status:"SUCCESS",startedAt:i,data:d[d.length-1]?.data,message:d[d.length-1]?.message,results:[],finishedAt:new Date,details:m.details};return kn({asyncTasks:t.work.asyncTasks,nestedResults:[...d],result:y,logger:n}),y}n.info(`Executing ${l.length} steps in the selected conditional block`);let g=await t.conditionalParams.tracer.startSubSteps(),f=await t.executeStepList({...t,listParams:{steps:l,containerName:"conditional block",tracer:g}}),b={...a,assertionResult:p,...f,startedAt:i,finishedAt:new Date};return kn({asyncTasks:t.work.asyncTasks,nestedResults:[...d,...f.results],result:b,logger:n}),b}import{randomUUID as P0}from"crypto";var M0=async t=>{let{tracer:e}=t.aiStepParams,{controller:r}=t.fixtures;await r.browser.waitForStability();let n=await r.browser.screenshot({}),o=await C6(t);o.finishedAt=new Date,kn({asyncTasks:t.work.asyncTasks,result:o,nestedResults:o.results,logger:t.fixtures.logger});let i=await r.browser.screenshot({}),a=P0();o.beforeSnapshot=a,e.attachBeforeScreenshot({snapshotId:a,screenshot:n});let s=P0();return o.afterSnapshot=s,e.attachAfterScreenshot({snapshotId:s,screenshot:i}),o},C6=async t=>{let{step:e,tracer:r}=t.aiStepParams,{controller:n,context:o,logger:i}=t.fixtures,a={...e,startedAt:new Date,beforeTestContext:o.toRedactedDisplayCopy(),finishedAt:new Date,results:[],status:"SUCCESS"};if(!("steps"in e&&e.steps&&e.steps.length>0&&e.steps[e.steps.length-1]?.command.type==="SUCCESS"))throw new M("UserConfigurationError","AI action has been fully deprecated. Please delete this step and transition to Dynamic AI Action.");try{let c=await r.startSubSteps(),{status:l}=await t.executeStepList({...t,listParams:{steps:e.steps,containerName:"AI action",results:a.results,tracer:c}});return a.finishedAt=new Date,a.status=l,a}catch(c){i.warn({err:c},"Failed executing saved deprecated AI action steps");let l=n.executeAbortController.signal.aborted;a.message=c instanceof Error?c.message:`${c}`,a.status=l?"CANCELLED":"FAILED"}return a};import{randomUUID as GT}from"crypto";var O0=t=>{throw new Error(`Exhaustive check failed for value: ${t}`)};import{streamText as k6}from"ai";var xh=class{controller;logger;rootStep;subStepIndex=0;callbacks;results=[];constructor(e){this.controller=e.controller,this.logger=e.logger,this.rootStep=e.rootStep,this.callbacks=e.callbacks}finalState=void 0;async createAndExecuteStep(e){this.callbacks.onAiActionEvent?.({type:"SUBSTEP_CREATED",rootStep:this.rootStep,step:e});let r=this.subStepIndex++,n=await this.callbacks.executeStep(e,r);return this.results.push(n),n}recordGenericToolCall(e){this.callbacks.onAiActionEvent?.({type:"GENERIC_TOOL_CALLED",toolName:e,rootStep:this.rootStep})}};import{hasToolCall as N6,stepCountIs as D6}from"ai";import L0 from"dedent";var x6=L0`
4603
+ `),tokenLength:d}),s.forEach((g,f)=>{let S=g.ids[0],b=g.ids[g.ids.length-1];t.debug({tokenLength:g.tokenLength,minId:S,maxId:b},`Chunk for page filtering (index ${f+1}/${s.length})`)}),{chunks:s}}var JJ=75e4,Th=3e5;async function gs(t){let{options:e,fixtures:r,screenshot:n}=t,{aiPageFiltering:o}=e,{logger:i,generator:a,orgId:s,signal:c}=r,l=t.tree,u=t.serializedTree,d=We(u);if(d>JJ)try{let p=Eh({serializedTree:u,options:{minChunkTokenCount:1e4,maxChunkTokenCount:1e5,acceptableChunkTokenCount:5e4,maxLineLength:4e3},logger:i});l=await QJ({...t,tokenLimit:Th-1e4,chunks:p.chunks}),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using keywords"),d=m}catch(p){i.warn({err:p},"Error filtering page using keyword matching, using naive truncation"),l=l.pruneToSerializedCharLimit(Th*Fi),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using naive truncation"),d=m}if(d>Th)try{if(o){let p=Eh({serializedTree:u,options:u0,logger:i}),m=XJ();l=await X(ZJ({...t,chunks:p.chunks,callId:m}),{milliseconds:12e3,signal:c}),u=l.serialize();let h=We(u);i.info({oldTokens:d,newTokens:h,langfuseCallId:m},"Filtered page using AI chunk ranking"),d=h}else{let p=Eh({serializedTree:u,options:c0,logger:i});l=await X(e6({...t,chunkResult:p,tokenLimit:4e4}),{milliseconds:12e3,signal:c}),u=l.serialize();let m=We(u);i.info({oldTokens:d,newTokens:m},"Filtered page using RAG"),d=m}}catch(p){i.warn({err:p},"Error filtering page using RAG/AI, using naive truncation"),l=l.pruneToSerializedCharLimit(Th*Fi),u=l.serialize(),i.info("Filtered page using naive truncation")}return u}async function ZJ({type:t,callId:e,chunks:r,description:n,fixtures:o,tree:i}){let{generator:a,signal:s,logger:c}=o,l=await a.rankChunksWithAi({chunks:r,description:n,type:t,softTokenLimit:4e4,hardTokenLimit:8e4,callId:e},{abortSignal:s,logger:c,loggerTags:Qe(c)}),u=[];return r.forEach((p,m)=>{l.indices.includes(m)&&(u=u.concat(p.ids))}),i.pruneUsingRelevantIds(new Set(u))}async function QJ(t){let{description:e,fixtures:r,tree:n}=t,{generator:o,logger:i,signal:a}=r;if(!e.trim())throw new Error("Empty description passed to page filtering");let s=await o.getExtractedKeywords({goal:e},{logger:i,loggerTags:Qe(i),abortSignal:a});i.info({keywordsResult:s},"Got keywords for page filtering");for(let c of s.keywords){let l=t.chunks.filter(m=>m.content.toLowerCase().includes(c.toLowerCase()));if(!l.length||l.reduce((m,h)=>m+h.tokenLength,0)>t.tokenLimit&&l.length>1)continue;let d=l.flatMap(m=>m.ids);return n.pruneUsingRelevantIds(new Set(d))}throw new Error("No keywords were unique enough for page filtering")}async function e6(t){let{description:e,fixtures:r,chunkResult:n,tokenLimit:o,tree:i}=t,{generator:a,logger:s,signal:c}=r,l=await a.rankChunksWithRag({description:e,chunks:n.chunks,tokenLimit:o},{abortSignal:c,logger:s,loggerTags:Qe(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 UT(t,e){if(!t.description)throw new M("UserConfigurationError","Cannot locate element with empty description");return Gn({action:async()=>t6(t,e),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,browser:e.browser,logger:t.logger})}async function t6(t,e){let{disableCache:r,testContext:n,filterByViewport:o,skipWait:i,source:a,memory:s,aiPageFiltering:c,logger:l,allowNotActionableNodesOverride:u,skipSavingVisualAttributes:d}=t,{orgId:p,browser:m,localCodeEvalTools:h,generator:g,abortSignal:f}=e,S=t.description,b=rc(),y=t.useMemory&&!r;n&&(S=await $r({orgId:p,s:S,context:n,localTools:h,signal:f,logger:l})),a&&(S=o0(S,a));let{serializedTree:T,tree:w}=await b.startAsyncSpan("GET_PAGE_STATE",async()=>Uo(m,{allowNotActionableNodesOverride:u,filterByViewport:o,abortSignal:f,skipWait:i,logger:l}),{}),P=await b.startAsyncSpan("GET_PAGE_SCREENSHOT",async()=>{let $,B=Date.now(),ae;for(;!$&&Date.now()-B<3e3;){f.throwIfAborted();try{$=await m.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(ce){ae=ce}}if(!$)throw new M("ActionFailureError",`Failed to take screenshot of page to locate element. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${ae?.message}`);return $}),v=T,x=!1,L=`data:image/jpeg;base64,${P.toString("base64")}`;v=await gs({type:"locator",description:S,screenshot:L,serializedTree:T,options:{aiPageFiltering:c},tree:w,fixtures:{generator:g,signal:f,logger:l,orgId:p}}),v!==T&&(x=!0);let N=await b.startAsyncSpan("AI_LOCATOR_CALL",async $=>{let B=await g.getElementLocation({browserState:v,goal:S,screenshot:L,source:a,memory:y?s:void 0},{disableCache:r,abortSignal:f,loggerTags:Qe(l),useMemory:y});return $.result=B,B});if(l.debug({usedRag:x,result:N},"Got locator result"),!(N.id>0))throw new Gs(`Could not find any relevant element: ${N.thoughts}`,N.updatedMemory?{type:"GCS_TRACES",traces:N.updatedMemory}:void 0);let{resolution:W,target:H,frameConfig:de}=await b.startAsyncSpan("TARGET_RESOLUTION",async $=>{let B=await m.createTargetFromA11yId({id:N.id,requirements:N.requirements,additionalElements:N.additionalElements,description:S,targetSource:"AI",logger:l,skipSavingVisualAttributes:d});return $.result={serializedElement:B.target.nodeOnlySerializedHtml??"Unknown HTML element"},B});if(W.a11yNode?.properties?.hidden&&W.a11yNode?.properties?.hidden!=="false")throw new M("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: ${W.displayString}`);return y&&(N.updatedMemory?H.memory={type:"GCS_TRACES",traces:N.updatedMemory}:s&&(H.memory=s)),{thoughts:N.thoughts,target:H,resolution:W,frameConfig:de,screenshot:L}}var r6=15;async function vh({command:t,aiPageFiltering:e,logger:r,fixtures:n,useMemory:o,maxRetries:i=r6}){if(!t.assertion.trim())throw new M("ActionFailureError","Assertion command is missing the assertion content");let a=vS.optional().catch(void 0).parse(t.source);t.source&&!a&&r.warn(`Invalid source ${t.source} for AI assertion, ignoring...`);let{browser:s}=n,c=t.timeout?t.timeout*1e3:s.smartWaitingTimeout,l=_I(c,i-1),u=0,d=Date.now(),p=d+c,m=d,h,g,f;try{await Gn({action:()=>s.clearHighlights(),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,browser:s,logger:r})}catch(S){r.warn({err:S},"Failed to clear highlights before AI check, continuing...")}for(;u<i;){n.abortSignal.throwIfAborted();let S=Date.now();if(u>0){if(S>=p)break;let T=p-S,w=m-S,P=Math.min(w,T);P>0&&await ye(P,n.abortSignal)}let b=Date.now();if(u>0&&b>=p)break;let y=!1;try{if(h=await Gn({action:async()=>{let w=await p0(s,r,n.abortSignal);return g&&g.serializedTree===w.serializedTree&&g.screenshotBuff.equals(w.screenshotBuff)?(y=!0,h):(g=w,m0({command:t,state:w,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:u,aiPageFiltering:e,logger:r,source:a}))},frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,logger:r,browser:s}),h?.success){h?.updatedMemory&&Lu(t,h.updatedMemory,r);break}else throw h?.thoughts?new M("AssertionFailureError",h.thoughts):new M("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(T){n.abortSignal.throwIfAborted(),f=T instanceof Error?T:new Error(`${T}`),y?r.info(`AI check attempt ${u} failed (re-used previous result)`):r.info({err:T},`AI check assert attempt ${u} failed, retrying...`)}finally{u++,m=b+l}}if(!h?.success){let S=p-Date.now();S>0&&await ye(S,n.abortSignal)}if(!h?.success)try{h=await Gn({action:async()=>m0({command:t,state:await p0(s,r,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:u,aiPageFiltering:e,logger:r}),frameConfig:t.iframeUrl?{type:"url",url:t.iframeUrl}:void 0,logger:r,browser:s})}catch(S){n.abortSignal.throwIfAborted(),f=S instanceof Error?S:new Error(`${S}`)}finally{u++}if(h?.updatedMemory&&Lu(t,h.updatedMemory,r),!h?.success){let S=`AI check still failing after ${u} attempts.`;throw f&&(S+=` Latest result: ${f.message}`),new M("AssertionFailureError",S)}return{...h,succeedImmediately:!1,urlAfterCommand:s.url()}}async function p0(t,e,r){let[n,o]=await Promise.all([Uo(t,{abortSignal:r,skipWait:!0,skipWaitForPageLoad:!0,logger:e}),t.screenshot({retries:1,respectActiveFrame:!0})]);return{...n,screenshotBuff:o}}async function m0({command:t,state:e,fixtures:r,useConsensus:n,useMemory:o,highlightElementsOnFailure:i,aiPageFiltering:a,attemptNumber:s,source:c,logger:l}){let{browser:u,generator:d,abortSignal:p}=r,m={type:"ASSERTION"},{serializedTree:h,tree:g}=e,f=e.screenshotBuff,S=f.toString("base64"),b=u.url(),y=t.contextChoice??"MULTIMODAL",T=h;y!=="VISION_ONLY"&&(T=await gs({type:"assertion",serializedTree:h,tree:g,description:t.assertion,screenshot:S,options:{aiPageFiltering:a},fixtures:{generator:d,signal:p,logger:l,orgId:r.orgId}}),T!==h&&(m.ragUsed=!0),m.pageState=T);let w={goal:t.assertion,url:b,memory:o?t.cache?.memory:void 0,browserState:T,screenshot:S,contextChoice:y,source:c},v=await(y==="VISION_ONLY"?(x,O)=>d.getVisualAssertionResult(x,O):(x,O)=>d.getAssertionResult(x,O))(w,{useConsensus:n,attemptNumber:s,useMemory:o,disableCache:!!t.disableCache,abortSignal:p,logger:l,loggerTags:Qe(l)});return(v.result||i)&&v.relevantElements&&(m.relevantElementsSerialized=v.relevantElements.map(x=>u.getSerializedFormFromA11yId(x)).filter(x=>!!x),await n6(v.relevantElements,u,l)),{success:v.result,thoughts:v.thoughts,afterScreenshotOverride:f,updatedMemory:o?v.updatedMemory:void 0}}async function n6(t,e,r){let n=Date.now();for(let o of t){if(Date.now()-n>2e3){r.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await X(e.highlightA11yId(o),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}})}catch(i){r.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}var o6=1e5,Ah=class extends Error{constructor(){super("The page content exceeds the maximum token limit for AI smart waiting."),this.name="ExceededMaxAISmartWaitingTokensError"}};async function g0(t,e){let{logger:r}=t,{abortSignal:n,browser:o}=e,i=Date.now();try{await i6(i,t,e)}catch(a){if(a instanceof Error&&(a.name==="AbortError"||a.name==="TimeoutError")||n.aborted)return;a instanceof Ah?r.warn("Skipping AI smart waiting due to excessive page size - falling back to naive waiting"):r.warn({err:a},"Unexpected error occurred during AI smart waiting");let s=o.smartWaitingTimeout-(Date.now()-i);s>0&&await ye(s,n)}finally{r.debug({durationMs:Date.now()-i},"AI smart waiting complete")}}async function i6(t,e,r){let{abortSignal:n,browser:o}=r;if(o.smartWaitingTimeout<3e3){await ye(o.smartWaitingTimeout,n);return}if(!e.description)throw new M("UserConfigurationError","Cannot locate element with empty description");await X(a6(t,e,r),{milliseconds:o.smartWaitingTimeout})}async function a6(t,e,r){let{logger:n,iframeUrl:o}=e,{browser:i}=r;for(;Date.now()-t<i.smartWaitingTimeout;)if(await Gn({action:async()=>s6(e,r),frameConfig:o?{type:"url",url:o}:void 0,browser:i,logger:n}))return}async function s6(t,e){let{testContext:r,logger:n,filterByViewport:o,allowNotActionableNodesOverride:i}=t,{browser:a,abortSignal:s,localCodeEvalTools:c,orgId:l,generator:u}=e,d=t.description;r&&(d=await $r({orgId:l,s:d,context:r,localTools:c,signal:s,logger:n}));let{serializedTree:p}=await Uo(a,{allowNotActionableNodesOverride:i,filterByViewport:o,abortSignal:s,logger:n});if(We(p)>o6)throw new Ah;s.throwIfAborted();let h;try{h=await a.screenshot({clearHighlights:!0,respectActiveFrame:!0,retries:2})}catch(b){throw new M("ActionFailureError",`Failed to take screenshot of page to perform smart waiting. The page may be unresponsive, or your machine might be severely resource constrained. Error: ${b instanceof Error?b.message:b}`)}let f=`data:image/jpeg;base64,${h.toString("base64")}`;s.throwIfAborted();let S=await u.getSmartWaitingDecision({browserState:p,description:d,screenshot:f},{abortSignal:s,loggerTags:Qe(n)});return n.debug({result:S},"Got smart waiting result"),S.isPageReady}import{cloneDeep as f0}from"lodash-es";async function S0(t){let{command:e,timeoutMs:r,fixtures:n}=t,{abortSignal:o}=n,i=()=>op(e.cache)?e.cache:void 0,a=i(),s=f0(a),c=(g=!1)=>{if(a=i(),!!a)if(g){let f=qy(s,a);a.target=f.target,a.updatedAt=f.updatedAt}else{if(!s){a=void 0;return}a.target=s.target,a.updatedAt=s.updatedAt}},l=Date.now(),u=0,d,p=500,m=!1;for(;u<2||Date.now()-l<r;){u++,u>1&&await ye(p,o),o?.throwIfAborted(),a=i();let{result:g,elementWasFound:f}=await h0({cacheToUse:a,params:t});if(d=g,m=f,g.success)break;c(),p=Math.min(p*2,1e4)}if(!d)throw new M("InternalPlatformError",`Failed to evaluate manual element assertion in ${r}ms.`);if(o?.throwIfAborted(),!d.success&&a?.target&&Ms(a.target)){let g=a?.target?.memory?{target:{id:-1,memory:a.target.memory}}:void 0,{result:f}=await h0({cacheToUse:g,params:t});d=f,d.success||c(!0)}let h=i();return d.success&&h?.target&&!m&&(h.target=Ou(h.target),h.updatedAt=new Date),d}async function h0({cacheToUse:t,params:e}){let{command:r,disableCache:n,fixtures:o,tracer:i,targetingWrapper:a}=e,{logger:s}=o;if(r.target&&!Ti(r.target))throw new Error("Element assertion with x/y is not supported yet");let c=E_(r.assertion),l,u=!1,d=f0(t);try{let{elementInteractedDisplayString:p,result:m,thoughts:h}=await a({ctx:o.ctx,tracer:i,command:r,target:r.target,cache:d?.target,action:async g=>l6(g.locator,e),options:{...r,allowNotActionableNodesOverride:!0,disableCache:n,memory:d?.target?.memory,disableGlobalLocatorRedirect:!0,source:Ma(r),targetName:"target"}});return l={success:m.success,data:m.data,err:m.err,elementInteractedDisplayString:p,thoughts:h},u=!0,m.success||(s.warn({aiThoughts:h,elementString:p,err:m.err},"Element check found an element but failed"),l={...m,thoughts:h}),{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 M)||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 l6(t,{command:e,fixtures:r}){return await r.browser.highlight(t),await c6(t,e.assertion)}async function c6(t,e){let r=!0,n,o;switch(e.type){case"ELEMENT_CONTENT":{let a=await t.textContent()??"";if(o={elementTextContent:Tt(a,500,!0)},!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,n=new M("AssertionFailureError",`The content ${s} '${e.value}': ${a}`)}break}case"ELEMENT_ATTRIBUTE":{o={elementOuterHtml:Tt(await t.evaluate(s=>s.cloneNode(!1).outerHTML),500,!0)};let a=null;try{a=await t.getAttribute(e.attr,{timeout:3e3})}catch(s){n=new M("AssertionFailureError",s instanceof Error?s.message:String(s)),r=!1;break}if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,e.operation==="EXISTS"?n=new M("AssertionFailureError",`The attribute ${e.attr} ${s}`):n=new M("AssertionFailureError",`The attribute ${e.attr} ${s} '${e.value}': ${a}`)}break}case"ELEMENT_EXISTENCE":{switch(e.condition){case"VISIBLE":{r=await t.evaluate(async(s,c)=>{let l=Date.now();for(;Date.now()-l<c;){await new Promise(d=>setTimeout(d,250));let u=s.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(s).visibility!=="hidden"&&window.getComputedStyle(s).display!=="none")return!0}return!1},po*1e3);break}case"EDITABLE":{r=await t.isEditable({timeout:po*1e3});break}case"EXISTS":{r=!0;break}case"ENABLED":{r=await t.isEnabled({timeout:po*1e3});break}case"FOCUSED":{r=await t.evaluate(s=>s===document.activeElement);break}default:return(s=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e.condition)}if(r=e.negated?!r:r,!r){let a=yl(e);n=new M("AssertionFailureError",`The element ${a}`)}break}case"ELEMENT_NAME":{let a=await t.evaluate(s=>s.tagName);if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!0})){let s=yl(e);r=!1,n=new M("AssertionFailureError",`The element tag name ${s} '${e.value}': ${a}`)}break}case"ELEMENT_STYLE":{let a=await t.evaluate((s,c)=>window.getComputedStyle(s).getPropertyValue(c),e.property);if(!Pu(a,e.value,e.operation,{negated:!!e.negated,ignoreCase:!1})){let s=yl(e);r=!1,e.operation==="EXISTS"?n=new M("AssertionFailureError",`The style property ${e.property} ${s}`):n=new M("AssertionFailureError",`The style property ${e.property} ${s} '${e.value}': ${a}`)}break}default:return(a=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}return{thoughts:void 0,success:r,data:o,err:n}}function y0(t){return t.type==="ELEMENT_EXISTENCE"&&t.negated&&t.condition==="EXISTS"}import{Jimp as u6}from"jimp";async function vd(t,e){let r=await t.screenshot(e),n=await u6.fromBuffer(r);return{buffer:r,width:Math.ceil(n.bitmap.width??0),height:Math.ceil(n.bitmap.height??0)}}import{Jimp as b0}from"jimp";import FT from"jpeg-js";import d6 from"pixelmatch";async function E0({ctx:t,tracer:e,command:r,disableCache:n,browser:o,targetingWrapper:i,logger:a,screenshotStorage:s}){if(r.target&&!Ti(r.target))throw new Error("Visual Diff with x/y is not supported yet");await o.waitForStability({logger:a});let c={clearHighlights:!0,hideCaret:!0},l;r.target?.elementDescriptor?l=(await i({ctx:t,tracer:e,command:r,target:r.target,cache:r.cache?.target,action:async N=>vd(o,{locator:N.locator,...c}),options:{...r,disableCache:n,disableGlobalLocatorRedirect:!0,memory:r.cache?.target?.memory,targetName:"target"}})).result:l=await vd(o,c);let u=await s.prepareGoldenScreenshotForComparison(a,r,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 L=`${l.width}x${l.height}`,N=`${u.width}x${u.height}`;return{fail:!0,thoughts:`Current screenshot (${L}) does not match saved screenshot dimensions (${N}) - 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 b0.fromBuffer(l.buffer),p={width:l.width,height:l.height},m=await b0.fromBuffer(u.buffer),h={width:u.width,height:u.height},g,f=p.width*p.height,S=h.width*h.height,b=Math.abs(p.height-h.height),y=Math.abs(p.width-h.width);if(f>S){let L=d.cover({w:h.width,h:h.height});l.buffer=await L.getBuffer("image/jpeg"),g="current",l.width=h.width,l.height=h.height}else if(S>f){let L=m.cover({w:p.width,h:p.height});u.buffer=await L.getBuffer("image/jpeg"),g="saved"}let T={data:Buffer.alloc(l.width*l.height*4),width:l.width,height:l.height},w=r.threshold??.1,v=d6(FT.decode(u.buffer).data,FT.decode(l.buffer).data,T.data,l.width,l.height,{threshold:w,diffColorAlt:[0,255,0]})/(l.width*l.height)*100,x=v>w*100,O=`Visual diff of ${v.toFixed(2)}% detected, which is ${x?"over":"under"} the threshold of ${w*100}%.`;if(g&&(O+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${y} pixels.`),x)throw new M("ActionFailureError",O);return{fail:x,thoughts:O,beforeScreenshotOverride:l.buffer,afterScreenshotOverride:FT.encode(T,75).data,succeedImmediately:!1,urlAfterCommand:o.url()}}var p6=3e4;function m6(t){if(!t.body)return{};switch(t.body.type){case"json":return{content:t.body.content,contentType:"application/json"};case"form-urlencoded":{let e=new URLSearchParams;return Object.entries(t.body.content).forEach(([r,n])=>{e.append(r,n)}),{content:e.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function T0({command:t,logger:e,baseUrl:r,fetchImplementation:n=fetch}){let o=t.timeout??p6/1e3,i=Object.fromEntries(Object.entries(t.headers||{}).filter(([h,g])=>h&&g)),a=new URLSearchParams;Object.entries(t.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{a.append(h,g)});let s=a.toString(),c;if(wl(t.url)&&(c=t.url),r&&xl(t.url,r)&&(c=new URL(t.url,r).toString()),!c)throw new M("ActionFailureError",`Invalid URL: ${t.url}`);let l=c;e.info({url:l,searchParams:s,headers:i,body:t.body,method:t.method},"Making HTTP request");let d=await X((async()=>{let h=s?`${l}?${s}`:l;try{let g=m6(t),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await n(h,{headers:f,method:t.method,body:g.content})}catch(g){throw e.error({err:g},"Failed to make HTTP request"),new Error(`Failed to make HTTP request: ${g}`)}})(),{milliseconds:o*1e3,fallback:()=>{throw new M("ActionFailureError",`Fetch request timed out after ${o} seconds`)}});if(!d.ok){let h;try{h=await d.text()}catch(g){h=`Failed to read response body: ${g}`}throw new M("ActionFailureError",`Fetch request failed with status ${d.status}: ${h}`)}let p={};d.headers.forEach((h,g)=>{p[g]=h});let m={status:d.status,headers:p,request:{url:d.url,method:t.method,headers:i}};if(t.body?.type==="json"&&t.body.content)try{m.request.json=JSON.parse(t.body.content)}catch{}if(d.headers.get("content-type")?.includes("json"))try{m.json=await d.json()}catch{}else d.headers.get("content-type")?.includes("text")&&(m.text=await d.text());return m}var g6=5e3;async function Rh({timeout:t=po,...e}){let r=Date.now(),n=t*1e3,o=n+1e4,i,a=0,s=500;for(;a-r<n;){if(Date.now()-r>o){e.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}e.signal?.throwIfAborted();let c=Date.now();i=await v0(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 ye(s,e.signal),s=Math.min(Math.floor(s*1.5),g6);else return i}return i=await v0(e),i}async function v0({assertion:t,browser:e,autoExpandIframes:r}){switch(t.type){case"CONTENT":case"CONTENT":{let o,i=!1,a;try{let s;if(r){let c=await e.evaluateFunctionInAllFrames(A0,{value:t.value,negated:!!t.negated,returnHtml:!1});i=t.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(A0,{value:t.value,negated:!!t.negated,returnHtml:!0},"checking page content"));if(!i){let c=t.negated?Qo.CONTAINS:ei.CONTAINS;a=new M("AssertionFailureError",`The page ${c} '${t.value}'.`),o=s}}catch(s){a=new M("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"})(t)}}function A0({value:t,negated:e,returnHtml:r}){let n=document.documentElement.outerHTML,o=n.includes(t)===!e;return n.length>1e4&&(n=n.slice(0,1e4)+"...TRUNCATED"),{evaluation:o,pageHtml:!o&&r?n:void 0}}var h6=3e4;async function R0({command:t,logger:e,baseUrl:r,fetchImplementation:n=fetch}){let o=t.timeout??h6/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(t.headers||{}).filter(([d,p])=>d&&p));a["Content-Type"]="application/json";let s;if(wl(t.url)&&(s=t.url),r&&xl(t.url,r)&&(s=new URL(t.url,r).toString()),!s)throw new M("ActionFailureError",`Invalid URL: ${t.url}`);let l=await X((async()=>{try{return await n(s,{headers:a,method:"POST",body:JSON.stringify({query:t.query,variables:t.variables?JSON.parse(t.variables):void 0}),signal:i.signal})}catch(d){e.error({err:d},"Failed to make HTTP request")}})(),{milliseconds:o*1e3});if(!l)throw new M("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 M("ActionFailureError",`GraphQL request failed with status ${l.status}: ${p}`)}throw d?.errors?.length&&d?.errors[0]?.message?new M("ActionFailureError",`GraphQL request failed with status ${l.status}: ${d.errors[0].message}`):new M("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 aa=class{orgId;options;storage;localCodeEvalTools;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:e,generator:r,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=r,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:r,history:n,disableCache:o,langfuseSessionId:i,lastError:a,logger:s=this.logger}){let[c,l]=await Promise.all([Uo(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 gs({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:r,history:n,goal:e,screenshot:u,lastError:a};return await this.generator.getMultiturnAiActionEvaluation(p,{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:{...Qe(s)},langfuseSessionId:i})}async promptToCommand({goal:e,startingScreenshot:r,history:n,actionHint:o,disableCache:i,logger:a=this.logger,langfuseSessionId:s}){let c=this.browser.url(),[l,u]=await Promise.all([Uo(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 gs({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}}),m={url:c,browserState:p,startingScreenshot:r,history:n,goal:e,actionHint:o,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(m,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...Qe(a)},langfuseSessionId:s})}catch(h){throw new M("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(e){return Uo(this.browser,e)}async locateElement(e){return await UT({...e,aiPageFiltering:!!this.options?.aiPageFiltering},this.getControllerFixtures())}async locateElementWithSelector(e,r){return Gn({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:r?{type:"url",url:r}: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:r,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],m=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:p,cache:a[d],action:async h=>h,options:{...c,targetName:o[d]}});u.push(m)}try{let d=await s(...u.map(h=>h.result)),p=h=>h==="fromTarget"?"From Target":h==="toTarget"?"To Target":"Target",m=u.map((h,g)=>h.thoughts?`${p(o[g])}: ${h.thoughts}`:void 0).filter(h=>!!h).join(" -------------- ")||void 0;return{result:d,elementInteractedDisplayStrings:u.map(h=>h.elementInteractedDisplayString),thoughts:m}}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:r,command:n,targetNames:o,descriptions:i,caches:i.map(()=>{}),action:s,options:c,retriesWithAI:l-1});throw new M("ActionFailureError",d.message,{errOptions:{cause:d}})}}async wrapHardcodedCssTargetingCommandHelper({ctx:e,target:r,action:n,options:o,command:i}){let a=this.logger.child({commandId:i.id}),{targetName:s}=o;if(r.type!=="description")throw new M("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:r.elementDescriptor,targetName:s,logger:a});return{result:await n({locator:d.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),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 ye(500)}}throw c}async resolveCachedTargetForAction(e){let{ctx:r,cache:n,options:o,logger:i}=e,a=rc(),s=await a.startAsyncSpan("CACHE_RESOLUTION",async l=>{let u=await this.browser.resolveTarget(r,n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:i,signal:this.executeAbortController.signal,...o.resolveTargetOptions});return l.attributes.targetDisplayString=u.displayString,u});(this.browser.userBrowserSettings.visualActions||this.browser.userBrowserSettings.globalLocatorRedirect!==!1)&&await a.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(s.locator)});let c;return!o.disableGlobalLocatorRedirect&&this.browser.userBrowserSettings.globalLocatorRedirect!==!1&&(c=await a.startAsyncSpan("LOCATOR_REDIRECT",async()=>this.browser.performTargetRedirection(s,i))),c||(c={locator:s.locator,serverSideBoundingBox:await s.locator.boundingBox({timeout:ie}),originalElementLocationResult:s.originalElementLocationResult}),await s.revalidator?.(),{resolutionResult:s,finalTarget:c}}async wrapElementTargetingCommand(e){return await Gn({action:()=>this.wrapElementTargetingCommandHelper(e),frameConfig:e.options.iframeUrl?{type:"url",url:e.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(e){let{ctx:r,tracer:n,target:o,action:i,options:a,command:s,finalAttempt:c=!1,originalCache:l=e.cache}=e,{retriesWithAI:u=1}=e,{disableCache:d,useSelector:p,targetName:m,targetHealingInProgress:h,source:g}=a,f=rc(),S=this.logger.child({commandId:s.id}),b=this.shouldUseMemory(),y=C0(e.cache);if((!y||d)&&!Mf(o))throw new M("ActionFailureError","Cannot target element with no cached data or element descriptor");if(p)return this.wrapHardcodedCssTargetingCommandHelper(e);let T=!1;d&&(S.info("Cache explicitly disabled for this step"),T=!0,y=void 0);let w=s0({cache:y,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:S});y=w.cache,T=T||w.cacheBustedBeforeAction;let P=!0;if(!a0(y)){P=!1,S.info({description:o.elementDescriptor,targetHealingInProgress:h,cacheBustedBeforeAction:T,memory:a.memory,useMemory:b},"Prompting AI for an updated element location"),(T||!l)&&await f.startAsyncSpan("SMART_WAITING",async()=>await g0({description:o.elementDescriptor,iframeUrl:a.iframeUrl,source:g,logger:S,allowNotActionableNodesOverride:a.allowNotActionableNodesOverride},this.getControllerFixtures(r))),u--;let v;try{v=await UT({description:o.elementDescriptor,disableCache:!!a.disableCache,iframeUrl:a.iframeUrl,source:g,useMemory:b,memory:b?a.memory:void 0,aiPageFiltering:!!this.options?.aiPageFiltering,allowNotActionableNodesOverride:a.allowNotActionableNodesOverride,logger:S},this.getControllerFixtures(r))}catch(L){if(L instanceof Gs&&L.updatedLocatorMemory){let N={id:-1,...l,memory:L.updatedLocatorMemory};Em({cmd:s,key:m,newTarget:N,logger:S,updatedWithAI:!0})}throw new M("ActionFailureError",L.message)}v.frameConfig&&this.browser.setActiveFrameConfig(v.frameConfig);let x;!a.disableGlobalLocatorRedirect&&this.browser.userBrowserSettings.globalLocatorRedirect!==!1&&(x=await f.startAsyncSpan("LOCATOR_REDIRECT",async()=>this.browser.performTargetRedirection(v.resolution,S))),x||(x={locator:v.resolution.locator,serverSideBoundingBox:await v.resolution.locator.boundingBox({timeout:ie}),originalElementLocationResult:v.resolution.originalElementLocationResult});let O=await i(x);return Em({cmd:s,key:m,newTarget:v.target,logger:S,updatedWithAI:!0}),h&&(n.recordTargetAutoHeal({healType:"AI"}),v.target.targetSource="AI_HEALED",v.target.targetUpdateTime=new Date().toUTCString(),v.target.targetUpdateLoggerTags=Qe(S)),{result:O,elementInteractedDisplayString:v.resolution.displayString,thoughts:v.thoughts}}try{let{resolutionResult:v,finalTarget:x}=await this.resolveCachedTargetForAction({ctx:r,cache:y,options:a,logger:S}),O=await i(x);if(cr.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!y.requirements}`,`hasAdditionalElements:${!!y.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:2.45.3"]),Em({cmd:s,key:m,newTarget:y,logger:S,updatedWithAI:!1}),P){let L=v.decisions.filter(N=>N.matched);if(L.length!==1)S.warn({decisions:v.decisions},"Expected exactly 1 matching method for element location, got more or less");else{let N=L[0].type;n.recordTargetAutoHeal({healType:N})}}return{result:O,elementInteractedDisplayString:v.displayString}}catch(v){if(this.throwIfClosed(),(v instanceof qo||uR(v)||mR(v)||gR(v)||cR(v)||dR(v)||pR(v))&&!c)return this.wrapElementTargetingCommandHelper({ctx:r,tracer:n,command:s,target:o,action:i,cache:l,originalCache:l,retriesWithAI:u,finalAttempt:!0,options:a});if(v instanceof M)throw S.error({err:v},"Failed to execute command with target (fatal)"),v;if(u>0&&o){S.info({err:v},"Failed to execute action with cached target, retrying with AI"),cr.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!y.requirements}`,`hasAdditionalElements:${!!y.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:2.45.3",`missReason:${v instanceof Tn?v.cacheMissReason:"unknown"}`]);let O;return y.memory&&ep(y.memory)&&(O=y.memory),this.wrapElementTargetingCommandHelper({ctx:r,tracer:n,command:s,target:o,cache:void 0,action:i,originalCache:l,retriesWithAI:u,finalAttempt:!0,options:{...a,memory:O,targetHealingInProgress:!0}})}throw new M("ActionFailureError",`Failed to execute interactive command: ${v instanceof Error?v.message:`${v}`}`,{errOptions:{cause:v}})}}async screenshotWithDimensions(e){return vd(this.browser,e)}async executePresetCommand(e,r,n,o,i){this.options?.slowMoMs&&await ye(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 M("ActionFailureError",`Failed to substitute template strings in command: ${l.message}`,{errOptions:{cause:l}})}try{let l=await this.executePresetCommandHelper(e,r,n,o,i);return this.options?.autoFollowNewTabs&&await i0({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{iM(n,c)}}createCallbacksForBrowser(e){return{createIsolatedFolder:()=>rE(e)}}async resolveCommandTemplateStrings(e,r){return ug({obj:e,context:r,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,localTools:this.localCodeEvalTools})}async executePresetCommandHelper(e,r,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()?vh({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 M("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new M("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return vh({command:n,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory(),aiPageFiltering:!!this.options?.aiPageFiltering,logger:a})}case"AI_EXTRACT":{if(!n.goal.trim())throw new M("ActionFailureError","Cannot perform AI extraction without goal");if(n.schema){let g=Wx(n.schema);if(g)throw new M("UserConfigurationError",g)}let m=await this.browser.getCondensedHtml(),h=await this.browser.screenshot({retries:2});try{let g=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:Qe(a)});if(g.result==="NOT_FOUND")throw new M("ActionFailureError","No relevant data found for extraction goal on this page");if(g.thoughts?.includes("MaxGenerationLengthExceededError"))throw new M("UserConfigurationError",g.thoughts);return{thoughts:g.thoughts||void 0,data:g.result,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}catch(g){let f=g.message;throw f.includes("MaxGenerationLengthExceededError")?new M("UserConfigurationError","You tried to extract too much data. Please rephrase your query to limit the results returned or use a JavaScript step in the browser instead."):f.includes("AIProviderError")&&f.includes("time")?new M("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:g}}):g}}case"NAVIGATE":if(!wl(n.url)&&!xl(n.url,this.browser.baseUrl))throw new M("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"DIALOG":this.browser.registerDialogHandler(n.action);break;case"CAPTCHA":throw new M("UserConfigurationError","Captcha solving is no longer available on Momentic");case"GO_BACK":await this.browser.goBack();break;case"GO_FORWARD":await this.browser.goForward();break;case"SCROLL_LEFT":case"SCROLL_RIGHT":case"SCROLL_DOWN":case"SCROLL_UP":{let m,h;if(n.target&&uo(n.target))await this.browser.hoverUsingVisualCoordinates(n.target.pixels);else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:S,thoughts:b}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:y=>this.browser.hover(y),options:{...n,targetName:"target",disableGlobalLocatorRedirect:!0,disableCache:i}});m=S,h=b}let g=this.browser.getViewport()?.height??Ar.height,f=this.browser.getViewport()?.width??Ar.width;switch(n.type){case"SCROLL_UP":await this.browser.scrollVertical(-(n.deltaY??g));break;case"SCROLL_DOWN":await this.browser.scrollVertical(n.deltaY??g);break;case"SCROLL_LEFT":await this.browser.scrollHorizontal(-(n.deltaX??f));break;case"SCROLL_RIGHT":await this.browser.scrollHorizontal(n.deltaX??f);break}return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new M("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 M("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let c=n.delay*1e3;await ye(c,this.executeAbortController.signal);break;case"REFRESH":await this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case"CLICK":{if(uo(n.target)){await this.browser.clickUsingVisualCoordinates(n.target.pixels,n);break}let m=this.browser.url(),{elementInteractedDisplayString:h,result:g,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,target:n.target,command:n,cache:n.cache?.target,action:b=>this.browser.click(b,this.createCallbacksForBrowser(this.orgId),n),options:{disableCache:i,targetName:"target",...n}}),S={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:f,data:g.downloadedFile?{downloadedFile:g.downloadedFile}:void 0};return Om(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(uo(n.fromTarget)&&uo(n.toTarget)){await this.browser.dragAndDropUsingVisualCoordinates(n.fromTarget.pixels,n.toTarget.pixels,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0});break}if(uo(n.fromTarget)||uo(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:r,command:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(g,f)=>this.browser.dragAndDrop(g,f,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps}),options:{useSelector:!!n.useSelector,disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m[0],thoughts:h}}case"MOUSE_DRAG":{let m=parseInt(n.deltaX),h=parseInt(n.deltaY),g=n.steps??5;if(isNaN(m)||isNaN(h))throw new M("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&uo(n.target)){await this.browser.mouseDragUsingVisualCoordinates({deltaX:m,deltaY:h,steps:g,fromTarget:n.target.pixels});break}let f,S;if(n.target?.elementDescriptor){let{elementInteractedDisplayString:b,thoughts:y}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:async T=>this.browser.mouseDrag(m,h,g,T.locator,{force:n.force}),options:{disableCache:i,targetName:"target",...n}});f=b,S=y}else await this.browser.mouseDrag(m,h,g,void 0,{force:n.force});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:f,thoughts:S}}case"SELECT_OPTION":{if(!Ti(n.target))throw new Error("Select with x/y is not supported yet");let m=n.target.elementDescriptor,h=n.choice,{elementInteractedDisplayString:g,thoughts:f}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:{type:"description",elementDescriptor:m},cache:n.cache?.target,action:S=>this.browser.selectOption(S,h,n.force),options:{...n,targetName:"target",disableCache:i,source:Ma(n)}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:g,thoughts:f}}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 l=await this.browser.setCookie(n.value);a.debug({results:l},"Set cookies");break;case"LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case"JAVASCRIPT":{let 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 Ki({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 M("ActionFailureError",h instanceof Error?h.message:`${h}`,{errOptions:{cause:h}})}try{JSON.stringify(m)}catch(h){throw new M("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&&uo(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,g,f=C0(n.target),S=this.browser.userBrowserSettings.globalLocatorRedirect===void 0||this.browser.userBrowserSettings.globalLocatorRedirect==="always";if(f){let{elementInteractedDisplayString:y,thoughts:T}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:f,cache:n.cache?.target,action:w=>this.browser.typeIntoTarget(n.value,w,{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:!S,source:Ma(n)}});h=y,g=T}else await this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay,pressEnter:n.pressEnter},!0);let b={urlAfterCommand:this.browser.url(),succeedImmediately:!1,elementInteracted:h,thoughts:g};return Om(m,b.urlAfterCommand)&&(b.succeedImmediately=!0,b.succeedImmediatelyReason="URL changed"),b}case"HOVER":{if(uo(n.target)){await this.browser.hoverUsingVisualCoordinates(n.target.pixels);break}let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:g=>this.browser.hover(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"FOCUS":{if(!Ti(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:m,thoughts:h}=await this.wrapElementTargetingCommand({ctx:e,tracer:r,command:n,target:n.target,cache:n.cache?.target,action:g=>this.browser.focus(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"BLUR":{if(n.target&&!Ti(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:r,target:n.target,command:n,cache:n.cache?.target,action:g=>this.browser.blur(g),options:{...n,targetName:"target",disableCache:i}});return{succeedImmediately:!1,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:h}}case"PRESS":let u=this.browser.url();await this.browser.press(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??!0,delayMs:n.delayMs});let d={urlAfterCommand:this.browser.url(),succeedImmediately:!1};return Om(u,d.urlAfterCommand)&&(d.succeedImmediately=!0,d.succeedImmediatelyReason="URL changed"),d;case"KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??!0}),{urlAfterCommand:this.browser.url(),succeedImmediately:!1};case"REQUEST":{let m=new S6,h=f6(fetch,m),g;try{g=new URL(n.url).hostname}catch{}let f=await T0({command:n,baseUrl:this.browser.baseUrl,logger:a,fetchImplementation:h});return{data:Lc.parse({...f,cookies:tw(m,g)}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GRAPHQL_REQUEST":return{data:await R0({command:n,baseUrl:this.browser.baseUrl,logger:a}),succeedImmediately:!1,urlAfterCommand:this.browser.url()};case"VISUAL_DIFF":return E0({ctx:e,tracer:r,command:n,disableCache:i,browser:this.browser,logger:a,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 bM({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 M("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 Ki({orgId:this.orgId,code:n.storageState,fragment:!1,context:o,logger:a,localTools:this.localCodeEvalTools,signal:this.executeAbortController.signal}),typeof m!="object")throw new M("ActionFailureError",`Credentials must evaluate to an object (received ${typeof m} instead)`);let h;try{h=Yp.optional().parse(m)}catch(g){throw new M("ActionFailureError",`Credentials provided do not follow the required format: ${g}`)}await this.browser.loadAuthState(h);break}case"ELEMENT_CHECK":{let m=(n.timeout??po)*1e3,h=this.generator.getAgentConfig()?.assertion;if(y0(n.assertion)&&!n.useSelector&&n.target.type==="description"&&h&&h!=="v1"){let f={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let S=await vh({command:f,logger:a,aiPageFiltering:!!this.options?.aiPageFiltering,fixtures:this.getControllerFixtures(e),useMemory:this.shouldUseMemory()});return{succeedImmediately:!1,thoughts:`The element described does not exist on the page: ${S.thoughts}`,urlAfterCommand:this.browser.url(),afterScreenshotOverride:S.afterScreenshotOverride}}finally{f.cache?.memory&&Lu(n,f.cache?.memory.traces,a)}}let g=await S0({command:n,tracer:r,timeoutMs:m,targetingWrapper:f=>this.wrapElementTargetingCommand(f),fixtures:this.getControllerFixtures(e),disableCache:i});return{fail:!g.success,data:g.data,elementInteracted:g.elementInteractedDisplayString,thoughts:g.err?.message??g.thoughts??`Element assertion ${g.success?"succeeded":"failed"}.`,succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"PAGE_CHECK":{let m=await Gn({action:async()=>Rh({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 Ji(n.requestMatcher),h=this.browser.registerRequestListener(m);return this.registeredListeners[n.key]=h.then(async g=>await sE(g)).catch(g=>{a.error({err:g},"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 M("ActionFailureError",`No listener registered with key: ${n.key}`);let h=n.timeout??10;return{data:await X(m,{milliseconds:h*1e3,message:`Request listener timed out after ${h} seconds`}),succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"RECORD_REQUESTS":{let m=new Ji(n.requestMatcher);return this.recordedRequests[n.key]={},this.browser.registerRequestRecorder(n.key,{matches:h=>m.matches({url:h.request.url,method:h.request.method}),onRequestStart:(h,g)=>{this.recordedRequests[n.key][h]=gg(g)},onRequestComplete:(h,g)=>{this.recordedRequests[n.key]?.[h]&&(this.recordedRequests[n.key][h]=gg(g))}}),{succeedImmediately:!1,urlAfterCommand:this.browser.url()}}case"GET_RECORDED_REQUESTS":{let m=this.recordedRequests[n.key];if(!m)throw new M("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 Ji(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 Ji(n.requestMatcher),async(h,g)=>{let f=await Ki({orgId:this.orgId,code:n.responseGenerator,fragment:!1,context:o,timeoutMs:void 0,logger:a,localTools:this.localCodeEvalTools,mock:{request:h,response:g},disallowVariableUpdates:!0,responseSerialization:"RESPONSE"}),S=yw.parse(f);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:r,disableCache:n,screenshot:o}){return(await this.generator.getReverseMappedDescription({browserState:e,target:r,screenshot:o},{disableCache:n,abortSignal:this.executeAbortController.signal,loggerTags:Qe(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights()}async startRecordMode({params:e,abortController:r,isClickToRecord:n}){this.recordAbortController=r;let o=new Eg({signal:r.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:Qe(this.logger)})}async getFailureRecoveryPlan(e){return this.generator.getFailureRecoveryPlan(e,{disableCache:!0,abortSignal:this.executeAbortController.signal,loggerTags:Qe(this.logger)})}};var BT=async t=>{let{step:e,resolvedInputs:r}=t.moduleParams,{logger:n,context:o,storage:i,codeEvalTools:a,controller:s}=t.fixtures,c=s.browser,{orgId:l,runId:u}=t.inputs,d=s.executeAbortController.signal;Object.keys(r).length>0&&(o.setInputs(r),n.info(zi({json:{inputs:r,moduleId:e.moduleId},maxJsonStringSize:1e3}),"Set module inputs"));let p,m=!1,h,g;if(e.cacheConfig||e.defaultCacheAllInvocations){let f=e.cacheConfig?.cacheKey||e.defaultCacheKey||"",S=await $r({orgId:l,s:f,context:o,logger:n,localTools:a,signal:d});g={orgId:l,cacheKeys:[S,...Object.entries(r).map(([y,T])=>`${y}:${T}`)]},n.info({original:f,keyParams:g},"Module cache key params");let b=Date.now();for(;Date.now()-b<Ww;){d?.throwIfAborted();let y=await i.getCacheResult(g);if(y){n.info({cacheResult:Tt(y,1e3,!0)},"Got result from module execution cache"),p=Ch(e,r,"SUCCESS"),p.message="Used cached module result.",p.data=JSON.parse(y),m=!0;break}else n.info({cacheKey:f,keyParams:g},"No cache result found, continuing with lock acquisition");let T=await i.acquireCacheLock({keyParams:g,clientMetadata:`hostName:${y6()};runId:${u}`},d);if(T.acquired){h=T.keyPrefix,n.info({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Acquired cache lock and proceeding with module execution");break}else n.debug({cacheKeyPrefixIfLockAcquired:h,cacheKey:f,keyParams:g},"Failed to acquire cache lock, retrying...");await ye(2500+Math.random()*1e4,d)}}try{if(!p)p=await b6(t);else if(e.autoAuth){let f=Yp.safeParse(p.data);if(!f.success)throw new M("UserConfigurationError",`Cached authentication module result is not a valid storage state: ${f.error.message}`);n.debug("Automatically loading auth state after cached module result"),await c.loadAuthState(f.data);let S=!1,b=e.advanced?.cacheInvalidation;if(b&&b.type==="PAGE_CHECK"){let y={type:"CONTENT",value:b.substring},T=await Rh({timeout:po,assertion:y,browser:c,logger:n,signal:d,autoExpandIframes:!!c.userBrowserSettings.autoExpandIframes});T.success?n.debug({invalResult:T},"Cached result still valid after page check, continuing..."):(n.info({invalResult:T},"Invalidating cached result due to page check failure"),S=!0)}if(g&&S)return await i.deleteCacheResult(g),BT(t)}}finally{try{h!==void 0&&!m&&p?.status==="SUCCESS"&&await E6({step:e,result:p,browser:s.browser,cacheKeyPrefix:h,logger:n,storage:i})}finally{h!==void 0&&await i.releaseCacheLock(h)}}return p},b6=async t=>{let{step:e,tracer:r}=t.moduleParams,n=Ch(e,t.moduleParams.resolvedInputs,"SUCCESS"),o=await r.startSubSteps(),{status:i,results:a}=await t.executeStepList({...t,listParams:{steps:e.steps,containerName:`module ('${e.name}')`,tracer:o}});return n.results=a,n.status=i,n.finishedAt=new Date,kn({asyncTasks:t.work.asyncTasks,nestedResults:a,result:n,logger:t.fixtures.logger}),n};function Ch(t,e,r){let n={};return Object.entries(e).forEach(([i,a])=>{n[i]=JSON.stringify(a)}),{type:"MODULE",id:t.id,moduleId:t.moduleId,moduleName:t.name,startedAt:new Date,cacheConfig:t.cacheConfig,inputs:n,results:[],finishedAt:new Date,status:r}}async function w0({orgId:t,step:e,context:r,logger:n,codeEvalTools:o,signal:i}){let a={};try{for(let s of e.parameters??[]){let c=e.inputs?.[s]??e.defaultParameters?.[s];if(!c){n.warn(`No value or default found for parameter '${s}' that is required by module '${e.name}'`);continue}a[s]=await Ki({orgId:t,code:c,fragment:!0,context:r,logger:n,localTools:o,signal:i})}return a}catch(s){throw i?.throwIfAborted(),new M("UserConfigurationError",`Failed to evaluate module inputs: ${s}`)}}async function E6({step:t,result:e,browser:r,cacheKeyPrefix:n,logger:o,storage:i}){let a=t.cacheConfig?.cacheExpiryMs;(!a||a===Ux)&&(a=t.defaultCacheTtl??Fx);let s;t.autoAuth?s=JSON.stringify(await r.saveAuthState()):e.data!==void 0?s=JSON.stringify(e.data):s='""',o.debug({cacheKeyPrefix:n,ttlMs:a,truncatedCacheResultJson:zi({json:s,maxJsonStringSize:1e4})},"Setting module cache result"),await i.setCacheResult({result:s,keyPrefix:n,ttlMs:a})}async function hs(t,e,r){return T6(t,e,r)}async function T6(t,e,r){let n=new Date;try{return r.throwIfAborted(),await e()}catch(o){let i=new Date,a="FAILED",s;if(r.aborted||o instanceof DOMException&&o.name==="AbortError"?(s="Step aborted by user.",a="CANCELLED"):o instanceof M?s=`${o}`:s=`An unexpected error occurred: ${o.message}`,t.type==="RESOLVED_MODULE"){let c=Ch(t,{},"FAILED");return c.message=s,c.startedAt=n,c.finishedAt=i,c}return{...Pm(t),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function nc(t,e){let r=!1;try{return t&&!t.state.failureRecoveryDisabled&&(t.state.failureRecoveryDisabled=!0,r=!0),await e()}finally{t&&r&&(t.state.failureRecoveryDisabled=void 0)}}import{cloneDeep as K6}from"lodash-es";import{randomUUID as x0}from"crypto";import{diff as v6}from"deep-object-diff";import{cloneDeep as _0}from"lodash-es";var wh=async t=>{let{step:e,tracer:r}=t.presetParams,{logger:n,controller:o,context:i}=t.fixtures,{collectDebugData:a}=t.options,{testMetadata:s}=t.inputs,c=e.command.type,l=n.child({commandType:c,stepId:e.id,commandId:e.command.id}),u="cache"in e.command&&e.command.cache?_0(e.command.cache):{},d=o.browser.url(),p=new Date,m,h=x0(),g=x0();if(a)try{if(m=await o.browser.screenshot({retries:1,clearHighlights:!0,quality:75}),!o.browser.userBrowserSettings.disableHtmlSnapshots){let T=await o.browser.getRawCondensedHtml();r.attachBeforeHtmlSnapshot({logger:l,snapshotId:h,html:T})}}catch(T){l.debug({err:T},"Failed to take before screenshot, continuing...")}let f,S,b,y=Up();try{let T=await o.executePresetCommand(y,r,e.command,i,s?.advanced.disableAICaching??!1);T.beforeScreenshotOverride&&(m=T.beforeScreenshotOverride),b=T.afterScreenshotOverride;let w=new Date,P=o.browser.url();S={beforeUrl:d,afterUrl:P,startedAt:p,finishedAt:w,viewport:o.browser.getViewport(),status:T.fail?"FAILED":"SUCCESS",elementInteracted:T.elementInteracted},f={...e,message:T.thoughts??"Successfully executed preset action.",beforeUrl:d,afterUrl:P,finishedAt:w,startedAt:p,status:T.fail?"FAILED":"SUCCESS",data:T.data,results:[S]},"assertion"in e.command&&(f.message=T.thoughts||"Assertion passed.")}catch(T){l.error({message:T.message,stack:T.stack},`Failed executing preset step ${ti(e.command)}`);let w=o.browser.url(),P=new Date,v=T instanceof Error?T.message:`${T}`;S={beforeUrl:d,afterUrl:w,startedAt:p,finishedAt:P,viewport:o.browser.getViewport(),status:T instanceof DOMException&&T.name==="AbortError"?"CANCELLED":"FAILED",message:v},f={...e,startedAt:p,finishedAt:P,beforeUrl:d,afterUrl:w,status:T instanceof DOMException&&T.name==="AbortError"?"CANCELLED":"FAILED",message:v,failureReason:T instanceof M?T.reason:void 0,results:[S]}}finally{let T="cache"in e.command&&e.command.cache?_0(e.command.cache):{},w=v6(u,T);w&&Object.keys(w).length>0&&l.info({diffs:Jp(w)},"Updated cache")}if(a)try{if(b||(b=await o.browser.screenshot({retries:1,quality:75})),!o.browser.userBrowserSettings.disableHtmlSnapshots){let T=await o.browser.getRawCondensedHtml();r.attachAfterHtmlSnapshot({logger:l,snapshotId:g,html:T})}}catch(T){l.debug({err:T},"Failed to store debug data after step, likely because the page is still loading. This is non-fatal and does not affect the test.")}return S.beforeSnapshot=h,f.beforeSnapshot=h,S.afterSnapshot=g,f.afterSnapshot=g,m&&r.attachBeforeScreenshot({snapshotId:h,screenshot:m}),b&&r.attachAfterScreenshot({snapshotId:g,screenshot:b}),f};async function A6(t,e,r){let{tracer:n}=t.conditionalParams,{logger:o,controller:i}=t.fixtures,a=e.assertion.command;a.type==="AI_ASSERTION"&&(a.source="CONDITIONAL_CHECK");try{let s=await wh({...t,presetParams:{tracer:n,step:e.assertion}});switch(a.type){case"AI_ASSERTION":case"PAGE_CHECK":return s.status==="SUCCESS"?{type:"passed",conditionResult:s,steps:e.steps}:(o.info(s.message,`${a.type} condition ${r} resolved to false`),{type:"failed",conditionResult:s});case"JAVASCRIPT":{if(s.status==="FAILED")return{type:"execution_error",conditionResult:s};let c=!!s.data;return s.status=c?"SUCCESS":"FAILED",s.message=c?`JavaScript condition evaluated to true (${JSON.stringify(s.data)})`:`JavaScript condition evaluated to false (${JSON.stringify(s.data)})`,o.info({returnValue:s.data,conditionPassed:c},`JavaScript condition ${r} evaluated`),c?{type:"passed",conditionResult:s,steps:e.steps}:{type:"failed",conditionResult:s}}default:return(l=>{throw new Error(`Unsupported conditional command type: ${l}`)})(a.type)}}catch(s){o.error({err:s},`Condition ${r} failed with error`);let c=s instanceof Error?s.message:"Unknown error during condition evaluation";return{type:"execution_error",conditionResult:{...e.assertion,status:"FAILED",message:c,startedAt:new Date,finishedAt:new Date,results:[]}}}finally{a.type==="AI_ASSERTION"&&delete a.source,i.throwIfClosed()}}function R6(t,e,r,n){let o=n.slice(r.length);for(let i=0;i<t.blocks.length;i++){let a=t.blocks[i],{result:s}=bl(a.steps,e,o);if(s)return i}return-1}async function I0(t){let{step:e,tracer:r}=t.conditionalParams,{logger:n}=t.fixtures,{fromStep:o}=t.inputs,i=new Date,a=Pm(e),s=r.getParentStepIdChain().concat(e.id),c=!!o&&Mu(s,o.parentStepIdChain),l=e.elseSteps,u=!0,d=[],p,m=Up(),h=!1;if(c&&o){let y=R6(e,o.fromStepId,s,o.parentStepIdChain);y>=0&&(l=e.blocks[y].steps,u=!1,h=!0,n.info(`Skipping conditional assertion (execution starts from step within block ${y}), running ${l.length} steps`))}if(!h)for(let y=0;y<e.blocks.length;y++){n.info(`Evaluating condition ${y} in conditional step`);let T=e.blocks[y],w=await A6(t,T,y);if(d.push(w.conditionResult),p=w.conditionResult,w.type==="execution_error"){let P={...a,assertionResult:w.conditionResult,status:"FAILED",startedAt:i,finishedAt:new Date,message:w.conditionResult.message,results:[],details:m.details};return kn({asyncTasks:t.work.asyncTasks,nestedResults:d,result:P,logger:n}),P}if(w.type==="passed"){n.info(`Condition ${y} resolved to true, executing the corresponding ${w.steps.length} steps`),u=!1,l=w.steps;break}}if(l)u&&n.info("No conditions resolved to true, executing the else block steps");else{n.warn("No conditions resolved to true and no else block was provided, causing the entire conditional step to be skipped");let y={...a,assertionResult:p,status:"SUCCESS",startedAt:i,data:d[d.length-1]?.data,message:d[d.length-1]?.message,results:[],finishedAt:new Date,details:m.details};return kn({asyncTasks:t.work.asyncTasks,nestedResults:[...d],result:y,logger:n}),y}n.info(`Executing ${l.length} steps in the selected conditional block`);let g=await t.conditionalParams.tracer.startSubSteps(),f=await t.executeStepList({...t,listParams:{steps:l,containerName:"conditional block",tracer:g}}),b={...a,assertionResult:p,...f,startedAt:i,finishedAt:new Date};return kn({asyncTasks:t.work.asyncTasks,nestedResults:[...d,...f.results],result:b,logger:n}),b}import{randomUUID as P0}from"crypto";var M0=async t=>{let{tracer:e}=t.aiStepParams,{controller:r}=t.fixtures;await r.browser.waitForStability();let n=await r.browser.screenshot({}),o=await C6(t);o.finishedAt=new Date,kn({asyncTasks:t.work.asyncTasks,result:o,nestedResults:o.results,logger:t.fixtures.logger});let i=await r.browser.screenshot({}),a=P0();o.beforeSnapshot=a,e.attachBeforeScreenshot({snapshotId:a,screenshot:n});let s=P0();return o.afterSnapshot=s,e.attachAfterScreenshot({snapshotId:s,screenshot:i}),o},C6=async t=>{let{step:e,tracer:r}=t.aiStepParams,{controller:n,context:o,logger:i}=t.fixtures,a={...e,startedAt:new Date,beforeTestContext:o.toRedactedDisplayCopy(),finishedAt:new Date,results:[],status:"SUCCESS"};if(!("steps"in e&&e.steps&&e.steps.length>0&&e.steps[e.steps.length-1]?.command.type==="SUCCESS"))throw new M("UserConfigurationError","AI action has been fully deprecated. Please delete this step and transition to Dynamic AI Action.");try{let c=await r.startSubSteps(),{status:l}=await t.executeStepList({...t,listParams:{steps:e.steps,containerName:"AI action",results:a.results,tracer:c}});return a.finishedAt=new Date,a.status=l,a}catch(c){i.warn({err:c},"Failed executing saved deprecated AI action steps");let l=n.executeAbortController.signal.aborted;a.message=c instanceof Error?c.message:`${c}`,a.status=l?"CANCELLED":"FAILED"}return a};import{randomUUID as GT}from"crypto";var O0=t=>{throw new Error(`Exhaustive check failed for value: ${t}`)};import{streamText as k6}from"ai";var xh=class{controller;logger;rootStep;subStepIndex=0;callbacks;results=[];constructor(e){this.controller=e.controller,this.logger=e.logger,this.rootStep=e.rootStep,this.callbacks=e.callbacks}finalState=void 0;async createAndExecuteStep(e){this.callbacks.onAiActionEvent?.({type:"SUBSTEP_CREATED",rootStep:this.rootStep,step:e});let r=this.subStepIndex++,n=await this.callbacks.executeStep(e,r);return this.results.push(n),n}recordGenericToolCall(e){this.callbacks.onAiActionEvent?.({type:"GENERIC_TOOL_CALLED",toolName:e,rootStep:this.rootStep})}};import{hasToolCall as N6,stepCountIs as D6}from"ai";import L0 from"dedent";var x6=L0`
4604
4604
  You cannot interact with the user directly. If you feel like you need to ask the user for clarification, or you are stuck, call the "finish" tool with success=false. Never output text without calling a tool.
4605
4605
  `,N0=t=>L0`
4606
4606
  <background>
@@ -4637,7 +4637,7 @@ Momentic users value the following:
4637
4637
  ${v}`}),p;case"RIGHT_TRACK":{y=void 0,S===0?l.onDynamicAIActionEvaluatingEvent?.({stepId:e.id,status:"RUNNING",message:v}):O&&l.onDynamicAIActionEvaluatingEvent?.({stepId:O,status:"SUCCESS",message:v});break}case"WRONG_TRACK":{if(y=`${v}
4638
4638
  ${P.feedback}`,b++,b>=F6)return p.message=`Our AI agent requires additional information to achieve this goal:
4639
4639
  ${v}
4640
- ${P.feedback}`,p.status="FAILED",l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,status:"FAILED",message:p.message}),p;O&&l.onDynamicAIActionEvaluatingEvent?.({stepId:O,status:"FAILED",message:P.feedback});break}case"IMPOSSIBLE":return p.message=`Our AI evaluator determined this task cannot be achieved: ${v}`,p.status="FAILED",l.onDynamicAIActionEvaluatingEvent?.({stepId:O??e.id,status:"FAILED",message:p.message}),p}let L=setTimeout(()=>{l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,message:"Deciding what to do next..."})},1500);d.info({commandIndex:S,lastActionHint:y},`Generating new sub-command ${S} within AI action`);let N,F;try{({command:N,reasoning:F}=await i.promptToCommand({goal:m,history:f,startingScreenshot:g,disableCache:n?.advanced.disableAICaching??!1,logger:d,actionHint:y,langfuseSessionId:u})),d.info({command:N,reasoning:F},"Got proposed command")}finally{clearTimeout(L)}if(N.type==="FAILURE")return clearTimeout(L),p.status="FAILED",p.message=`Our AI agent determined that no supported actions can fulfill the goals: ${F}`,p;let W={id:GT(),type:"PRESET_ACTION",command:N},H={substepIndex:S+1,message:F||"Generated new command."};l.onDynamicCommandGenerated?.({...H,step:W,parentStepId:e.id}),d.info({commandId:N.id},`Executing sub-command ${S} within AI step: ${ti(N)}`);let de=await r.startSubSteps(),B=(await t.executeStepList({...t,options:{...t.options,disableHealing:!0},listParams:{containerName:"AI action newly generated step",steps:[W],tracer:de}})).results[0];l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,message:"Waiting for page to stabilize before next action..."}),await i.browser.waitForStability({logger:d});let ae=await i.browser.screenshot({clearHighlights:!0,retries:1});p.results.push(B),f.push({screenshotBase64AfterCommand:`data:image/jpeg;base64,${ae.toString("base64")}`,urlAfterCommand:i.browser.url(),serializedCommand:ti(N),elementInteracted:B.results[0]?.elementInteracted,thoughts:F});let ce={substepIndex:S,output:{...B,message:B.message??"Successfully executed preset action."},step:W,parentStepId:e.id};if(l.onDynamicCommandExecuted?.(ce),await r.finish({output:Pp.parse(B),step:B,message:B.message,attempt:1}),B.status==="FAILED")if(p.status="FAILED",p.message=B.message,b<3)b++,T=`The last attempted action resulted in a Momentic error. A different element may need to be targeted. Error: ${B.message}`;else return p;else if(B.status==="CANCELLED")return p.status="CANCELLED",p.message=B.message,p;S++}};import{randomUUID as H6}from"crypto";var j6=3;async function V0(t){let{logger:e}=t.fixtures,{results:r}=t.failureRecoveryParams,n=r[r.length-1],o=V6(t.work,n);if(o)return e.info({failedResult:n,isNotEligible:o},"Skipping failure recovery because of ineligible failure"),{type:"NOT_ELIGIBLE",message:`The failed step is not eligible for failure recovery: ${o}`};e.info({failedResult:n},"Attempting failure recovery"),t.work.state.failureRecoveryAttempts=(t.work.state.failureRecoveryAttempts??0)+1;try{return await G6(t)}catch(i){return e.warn({err:i},"Error during failure recovery attempt, continuing..."),null}}async function G6(t){let{fixtures:e,work:r,failureRecoveryParams:n}=t,{controller:o,logger:i}=e,{testMetadata:a}=t.inputs,{results:s,failedStep:c,nextSteps:l,tracer:u}=n;if(!s.length)throw new Error("Attempted failure recovery with no failed results");await Promise.allSettled(r.asyncTasks??[]);let d=o.browser.url(),p=`data:image/jpeg;base64,${(await o.browser.screenshot({})).toString("base64")}`,m=(await o.browser.getBrowserState({})).serialize(),{results:h}=await Al(i,u,s,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=l.map(x=>ni(x)),f=a?.description?.trim(),S=a?.advanced?.failureRecoveryInstructions?.trim(),{scenario:b,thoughts:y,instructions:T}=await o.getFailureRecoveryPlan({currentUrl:d,currentScreenshot:p,failedResults:h,currentPageState:m,nextStepsSerialized:g,testDescription:f||void 0,customInstructions:S||void 0});if(b!=="RECOVERABLE")return i.info({scenario:b,thoughts:y,instructions:T},"Failure recovery is not applicable"),{type:"NOT_ELIGIBLE",message:`Momentic's failure recovery agent determined that this failure is not eligible for recovery: ${y}`};if(!T)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let w={id:H6(),type:"AI_ACTION_DYNAMIC",text:T},P=await nc(t.work,()=>t.executeStepList({...t,fixtures:{...t.fixtures},listParams:{steps:[w,c],containerName:"AI-recovered step list",tracer:u}})),v=P.results[0];if(v&&v.type==="AI_ACTION_DYNAMIC")if(Sm({results:P.results,onPresetAction:x=>{x.aiSuggested=!0},onSimpleStepContainer:x=>{x.aiSuggested=!0}}),P.status==="SUCCESS"){let x=`The following steps were automatically executed by the failure recovery agent. Analysis: ${y}`;return v.message=x,cr.increment("test_event",1,["name:failure_recovery_success",`orgId:${t.inputs.orgId}`]),i.info({thoughts:y},"Failure recovery succeeded"),{type:"ATTEMPTED",status:"SUCCESS",result:P,message:x}}else{cr.increment("test_event",1,["name:failure_recovery_failure",`orgId:${t.inputs.orgId}`]);let x=`The following steps were unsuccessfully attempted by the failure recovery agent. Analysis: ${y}`;return v.message=x,i.info({thoughts:y},"Failure recovery failed"),{type:"ATTEMPTED",status:"FAILED",result:P,message:x}}return null}function V6(t,e){if(!e)return"There is no failed result";if(e.type!=="PRESET_ACTION")return"The failed step is not a preset action";let r=e.message;return r?r.includes("AbortError:")?"The user aborted the test":sR.some(n=>r.includes(n))?"The failed step is an irrecoverable configuration error":(t.state.failureRecoveryAttempts??0)>j6?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}import{randomUUID as _h}from"crypto";import $6 from"fast-json-patch";import{cloneDeep as W6}from"lodash-es";async function $0(t){let e=t.failedResults,r=[],{sectionParams:n,fixtures:o,work:i,startingUrl:a,startingContextSnapshot:s,tracer:c}=t,{step:l}=n,{controller:u,logger:d}=o,p=l?.autohealingConfig,m=p?.restartBehavior??{type:"GO_TO_SECTION_START"},h=p?.attempts??1;for(let g=0;g<h;g++){if(!e.terminalResult?.message)throw new Error("No error message in terminal result");let f=W6(l.steps);await Promise.allSettled(i.asyncTasks??[]);let{results:S}=await Al(d,c,e.results,{numStepsWithScreenshots:4}),b=await u.runSectionAutohealing({results:S,errorMessage:e.terminalResult?.message,goal:l.description});f=$6.applyPatch(f,b.patches).newDocument;let y=Br.fromSnapshot({snapshot:s,environmentVariables:o.context.getVariablesFromEnvironmentCopy()});await q6({logger:d,controller:u,tracer:c,context:y,restartConfig:m,startingUrl:a});let T=await nc(t.work,()=>t.executeStepList({...t,fixtures:{...t.fixtures,context:y},listParams:{steps:f,containerName:"auto-healed step list",tracer:c}}));if(r.push(T.results),T.status==="SUCCESS")return{successfulHealing:{proposedStep:{...l,steps:f},listResult:T,context:y},healingAttempts:r};e=T}return{healingAttempts:r}}async function q6({logger:t,controller:e,tracer:r,restartConfig:n,context:o,startingUrl:i}){switch(n.type){case"NAVIGATE_URL":{let a={id:_h(),type:"PRESET_ACTION",command:{id:_h(),type:"NAVIGATE",url:n.url}},s=await r.startStep({logger:t,step:a,attempt:1});await e.executePresetCommand(null,s,a.command,o,!1);break}case"GO_TO_SECTION_START":{let a={id:_h(),type:"PRESET_ACTION",command:{id:_h(),type:"NAVIGATE",url:i}},s=await r.startStep({logger:t,step:a,attempt:1});await e.executePresetCommand(null,s,a.command,o,!1);break}}}function W0(t,e){switch(t||(t="ON_FAILURE"),t){case"ALWAYS":return!0;case"ON_FAILURE":return!0;case"ON_ACTION_FAILURE":return!(!e||e.type==="PRESET_ACTION"&&wA(e.command.type))}}async function q0(t){let{step:e,tracer:r}=t.sectionParams,{logger:n,controller:o,context:i}=t.fixtures,a=new Date,s=o.browser.url(),c=i.toObjectCopy(),l=await r.startSubSteps(),u=async()=>t.executeStepList({...t,listParams:{steps:e.steps,containerName:"section step list",tracer:l}}),d=e.autohealingConfig?await nc(t.work,u):await u(),p,m;if(d.status==="FAILED"&&e.autohealingConfig&&!t.work.state.autoHealingDisabled&&W0(e.autohealingConfig.trigger,d.terminalResult)){let g=await r.startSubSteps(),f=await $0({...t,startingContextSnapshot:c,startingUrl:s,failedResults:d,tracer:g});f.successfulHealing&&(p=f.successfulHealing.proposedStep,d=f.successfulHealing.listResult,t.fixtures.context=f.successfulHealing.context),m=f.healingAttempts}let h={...e,...d,startedAt:a,finishedAt:new Date,proposedStep:p,healingAttempts:m};return kn({asyncTasks:t.work.asyncTasks,nestedResults:d.results,result:h,logger:n}),h}var Y6=60*60*1e3;async function io(t){let{results:e=[],containerName:r,steps:n,tracer:o}=t.listParams,{logger:i}=t.fixtures,a=o.getParentStepIdChain(),{fromStep:s,toStep:c}=t.inputs,l="SUCCESS",u,d=0;for(d;d<n.length;d++){let p=n[d];if(p.skipped)continue;if(t.work.fastForwardingToStep&&s){let b=JSON.stringify(a);if(p.id===s.fromStepId&&b===JSON.stringify(s.parentStepIdChain))t.work.fastForwardingToStep=!1;else if(!T_(p,a,s.fromStepId,s.parentStepIdChain))continue}let m=ni(p),h=0,g=1,f=Date.now();"retries"in p&&p.retries&&p.retries>0&&(g+=p.retries);let S;for(;h<g&&Date.now()-f<Y6;){h++,i.info({step:cI(p),currentAttempt:h},`Executing step ${d+1}/${n.length} in ${r}: ${m}`);let b=Date.now(),{stepResult:y,status:T,failureRecoveryResults:w,shouldStopExecuting:P}=await X6({attempt:h,params:t,step:p,i:d,steps:n,results:e,currentParentIdChain:a,fromStep:s,toStep:c,lastRetry:h===g});if(T==="FAILED"&&h<g){S=[...S??[],y],Date.now()-b<1e3&&await ye(1e3-(Date.now()-b));continue}else e.push(y),S&&(y.previousAttempts=S);if(w&&e.push(...w),P)return l=T,u=y,{status:l,results:e,terminalResult:u};break}}return{status:l,results:e,terminalResult:u}}async function X6({attempt:t,params:e,step:r,i:n,steps:o,results:i,currentParentIdChain:a,fromStep:s,toStep:c,lastRetry:l}){let{tracer:u}=e.listParams,{logger:d,context:p,controller:m,codeEvalTools:h,usageTracker:g}=e.fixtures,{orgId:f}=e.inputs,S=new Date,b=!!s&&Mu(a.concat(r.id),s.parentStepIdChain),y=await u.startStep({logger:d,step:r,attempt:t,skipStatusEvents:b}),T=K6(r),w=p.toRedactedDisplayCopy(),P=m.browser.url(),v=m.executeAbortController.signal;g.trackStepExecution(r);let x,O;switch(r.type){case"PRESET_ACTION":{x="Preset action",O=await hs(r,async()=>await wh({...e,presetParams:{tracer:y,step:r}}),v);break}case"AI_ACTION":{x="AI action",O=await hs(r,()=>M0({...e,aiStepParams:{step:r,tracer:y},executeStepList:io}),v);break}case"AI_ACTION_DYNAMIC":{x="AI action",O=await hs(r,()=>j0({...e,aiStepParams:{step:r,tracer:y},executeStepList:io}),v);break}case"RESOLVED_MODULE":{x=`Module (${r.name})`,O=await hs(r,async()=>{let H=await w0({orgId:f,step:r,context:p,logger:d,codeEvalTools:h,signal:v});return BT({...e,executeStepList:io,moduleParams:{step:r,resolvedInputs:H,tracer:y}})},v);break}case"CONDITIONAL":{x="Conditional step",O=await hs(r,()=>I0({...e,conditionalParams:{step:r,tracer:y},executeStepList:io}),v);break}case"SECTION":{x="Section",O=await hs(r,()=>q0({...e,sectionParams:{step:r,tracer:y},executeStepList:io}),v);break}default:return(de=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}O.beforeUrl=O.beforeUrl??P,O.beforeTestContext=w,r.envKey&&p.setVariable(r.envKey,O.data);let L=m.browser.url();p.setCurrentUrl(L),O.afterUrl=O.afterUrl??L,O.afterTestContext=p.toRedactedDisplayCopy(),await J6({step:r,startedAt:S,stepTypeName:x,result:O,callbacks:e.callbacks,globalWorkRef:e.work,tracer:y,attempt:t});let N,F;if(l&&O.status==="FAILED"&&!e.work.state.failureRecoveryDisabled&&s?.fromStepId===void 0&&c?.toStepId===void 0){let H=await V0({...e,executeStepList:io,failureRecoveryParams:{failedStep:T,nextSteps:o.slice(n+1),results:i.concat(O),tracer:u}});H&&(H.type==="ATTEMPTED"?(N=H.result.results,F=H.status):H.type==="NOT_ELIGIBLE"&&(O.message=O.message?`${O.message} ${H.message}`:H.message),O.type==="PRESET_ACTION"&&(O.failureRecoveryStatus={type:H.type,message:H.message}))}return e.work.fastForwardingToStep&&s&&(s.fromStepId===r.id&&JSON.stringify(a)===JSON.stringify(s.parentStepIdChain)&&(e.work.fastForwardingToStep=!1),r.type==="RESOLVED_MODULE"&&Mu(a,s.parentStepIdChain)&&(e.work.fastForwardingToStep=!1)),O.status!=="SUCCESS"&&F!=="SUCCESS"||m.closed?{shouldStopExecuting:!0,status:O.status,stepResult:O,failureRecoveryResults:N}:c&&r.id===c.toStepId&&JSON.stringify(a)===JSON.stringify(c.parentStepIdChain)?(m.setClosed(),{shouldStopExecuting:!0,status:"SUCCESS",stepResult:O,failureRecoveryResults:N}):{shouldStopExecuting:!1,status:"SUCCESS",stepResult:O,failureRecoveryResults:N}}async function J6({stepTypeName:t,step:e,result:r,tracer:n,attempt:o,startedAt:i}){let a=t.toLowerCase(),s=t.charAt(0).toUpperCase()+t.slice(1);n.recordStepDuration({step:e,durationMs:Date.now()-i.getTime()});let c="";switch(r.status){case"SUCCESS":c=r.message??`${s} executed successfully.`;break;case"FAILED":c=r.message??`${s} failed.`;break;case"CANCELLED":c=r.message??`${s} cancelled.`;break;default:throw new Error(`Unexpected ${a} status: ${r.status}`)}await n.finish({step:r,message:c,output:Pp.parse(r),attempt:o})}var K0="MOMENTIC_RUN_ID",Y0="FINAL_SCREENSHOT_URL";import{randomUUID as X0}from"crypto";async function J0({browser:t,signal:e}){let r=new Date;try{return await t.navigate({url:t.baseUrl,initialNavigation:!0}),{status:"PASSED",results:[]}}catch(n){let o={id:X0(),type:"PRESET_ACTION",status:e.aborted||n.name==="AbortError"?"CANCELLED":"FAILED",failureReason:"UserInfrastructureError",message:n.message,startedAt:r,finishedAt:new Date,results:[],command:{id:X0(),type:"NAVIGATE",url:t.baseUrl}};return{status:e.aborted||n.name==="AbortError"?"CANCELLED":"FAILED",results:[],failedStepResult:o}}}var Ih=async t=>{let{orgId:e,runId:r,testMetadata:n,steps:o,beforeSteps:i,afterSteps:a}=t.inputs;t.fixtures.logger=t.fixtures.logger.child({orgId:e,runId:r,testId:n?.id});let{logger:s,controller:c}=t.fixtures,{onTestComplete:l,onTestSuccess:u,onTestFailure:d}=t.callbacks.test,p=$O(s);if(t.options.reinitializeBrowser){let h=await J0({browser:c.browser,signal:c.executeAbortController.signal});if(h.status!=="PASSED")return await l?.(),clearInterval(p?.interval),h}let m;try{return s.info({platform:p?.platform,cpuMetadata:p?.cpuMetadata,labels:n?.labels,orgSettings:iC.parse(t.inputs.orgSettings)},`Starting run for Momentic test '${n?.name??"Unnamed test"}'`),m=await Q6(t),m}finally{s.info({status:m?.status,labels:n?.labels},"Momentic test final result"),clearInterval(p?.interval),await l?.(),m?.status==="PASSED"?await u?.({steps:o,beforeSteps:i,afterSteps:a}):m?.status==="FAILED"&&await d?.({steps:o,beforeSteps:i,afterSteps:a})}};function Z6({beforeStatus:t,mainStatus:e,afterStatus:r}){return t==="FAILED"?"FAILED":t==="CANCELLED"?"CANCELLED":r==="FAILED"?"FAILED":r==="CANCELLED"?"CANCELLED":e==="FAILED"?"FAILED":e==="CANCELLED"?"CANCELLED":"PASSED"}var Q6=async t=>{let{tracer:e}=t.testParams,{fromStep:r,toStep:n,steps:o,beforeSteps:i,afterSteps:a}=t.inputs,{logger:s,controller:c,context:l,storage:u}=t.fixtures,{collectDebugData:d,disableHealing:p}=t.options;l.setCurrentUrl(c.browser.url());let m="test",h=o,g=[],f=p||r!==void 0||n!==void 0||void 0,S={results:g,state:{autoHealingDisabled:f,failureRecoveryDisabled:f,failureRecoveryAttempts:0},asyncTasks:[]},b=!1;r?.fromStepId&&r.fromStepId===n?.toStepId?(m="filtered step",S.fastForwardingToStep=!0):r?.fromStepId?(m="partial steps list from step",S.fastForwardingToStep=!0):n?m="partial steps list until step":(m="entire test",b=!0);let y,T,w;if(b&&i&&i.length>0){let F=await Z0(i,"beforeSteps",t);y=F.status,T=F.results,w=F.terminalResult?{...F.terminalResult,failureReason:"SetupFailureError"}:void 0,S.state.failureRecoveryAttempts=(S.state.failureRecoveryAttempts??0)+(F.failureRecoveryAttempts??0)}let P,v;if(y===void 0||y==="PASSED"){s.info({fromStep:r,toStep:n},`Starting execution of ${m}`);let F=await e.startMainStepList(),W=await io({...t,work:S,listParams:{steps:h,containerName:m,results:g,tracer:F}});P=W.status,v=W.terminalResult}let x,O,L;if(b&&a&&a.length>0){let F=await Z0(a,"afterSteps",t);x=F.status,O=F.results,L=F.terminalResult?{...F.terminalResult,failureReason:"TeardownFailureError"}:void 0,S.state.failureRecoveryAttempts=(S.state.failureRecoveryAttempts??0)+(F.failureRecoveryAttempts??0)}let N=Z6({beforeStatus:y,mainStatus:P,afterStatus:x});if(d&&e8({tracer:e,work:S,controller:c,storage:u,context:l,logger:s,status:N}),await Promise.allSettled(S.asyncTasks),S.asyncTasks.push(Promise.resolve(t.callbacks.test.onSaveFinalRunResults?.({results:g,beforeResults:T,afterResults:O}))),N==="FAILED"){let F=y==="FAILED"?w:void 0,W=x==="FAILED"?L:void 0;return{status:"FAILED",results:g,beforeResults:T,afterResults:O,failedStepResult:F??v??W}}else if(N==="CANCELLED")return{status:"CANCELLED",results:g,beforeResults:T,afterResults:O};return{status:"PASSED",failureRecoveryDetails:S.state.failureRecoveryAttempts?{attempts:S.state.failureRecoveryAttempts}:void 0,results:g,beforeResults:T,afterResults:O}};async function Z0(t,e,r){let n=r.fixtures.logger,o=e==="beforeSteps"?await r.testParams.tracer.startBeforeStepList():await r.testParams.tracer.startAfterStepList();n.info(`Starting step execution for ${e}`);let i={results:[],asyncTasks:[],state:{}},a={...r.callbacks,test:{...r.callbacks.test,onSaveFinalRunResults:void 0,onUpdateRun:void 0,onTestComplete:void 0,onTestSuccess:void 0}},{status:s,results:c,terminalResult:l}=await io({...r,work:i,callbacks:a,listParams:{steps:t,containerName:e,tracer:o}});await Promise.allSettled(i.asyncTasks);let u;return s==="SUCCESS"?u="PASSED":s==="CANCELLED"?u="CANCELLED":u="FAILED",{status:u,results:c,terminalResult:l,failureRecoveryAttempts:i.state.failureRecoveryAttempts}}function e8({tracer:t,work:e,controller:r,storage:n,logger:o,context:i,status:a}){let s=r.browser,c=s.retrieveAndClearDebugData(),l=I_(c.logsPerPage);t.attachConsoleLogs({logger:o,logs:l}),a!=="PASSED"&&a!=="SUCCESS"&&(t.attachBrowserCrashDump({crashReportDirFetcher:()=>s.browserCrashDumpDir,logger:o}),e.asyncTasks.push((async()=>{try{let u=await s.screenshot({quality:75}),d=await ZD({codePath:"test-complete-final",storage:n,screenshotBuff:u,logger:o}),p=await X(s.html(),{milliseconds:2e3});i.setVariable(Y0,d),o.debug({finalPageHtml:p.slice(0,1e4)},"Final page state HTML"),o.debug({finalScreenshotUrl:d},"Uploaded final screenshot URL")}catch{}})()))}import{z as sa}from"zod";var Ph=sa.object({fromStepId:sa.string(),parentStepIdChain:sa.array(sa.string())}),Mh=sa.object({toStepId:sa.string(),parentStepIdChain:sa.array(sa.string())});async function Oh({settings:t,customHeaders:e,envVariables:r,envName:n,testName:o,baseUrl:i,logger:a,localTools:s,orgId:c}){let l=Xs.parse(t);e&&(l.extraHeaders={...l.extraHeaders,...e});let u=new Br({baseUrl:i,envName:n,testName:o,variablesFromEnvironment:r,currentUrl:i});await ug({obj:l,context:u,bannedKeys:[],allowList:nC,localTools:s,logger:a,orgId:c});try{return Xs.parse(l)}catch(d){throw new M("UserConfigurationError",`The templated browser settings configured by the user are invalid: ${d.message}`)}}async function Q0({orgId:t,testName:e,envName:r,baseEnvVariables:n,parameters:o,logger:i,localTools:a}){if(!o||o.length===0)return{...n};let s={...n};return await Promise.all(o.map(async c=>{let l=await $r({orgId:t,s:c.defaultValue,context:Br.dummyContext(e,r,s),logger:i,localTools:a});s[c.name]=l})),s}import{cloneDeep as i8}from"lodash-es";import{cloneDeep as t8}from"lodash-es";var r8={showOverlay:!1},Lh=class{sessions=new Map;sessionCountByIp=new Map;getCurrentConnectionsByIp(e){return this.sessionCountByIp.get(e)??0}getCurrentSessionsByIp(){return Object.fromEntries(this.sessionCountByIp)}reserveCapacityByIp(e){e&&this.sessionCountByIp.set(e,(this.sessionCountByIp.get(e)??0)+1)}releaseCapacityByIp(e){e&&this.sessionCountByIp.set(e,Math.max(this.getCurrentConnectionsByIp(e)-1,0))}registerSession({controller:e,context:r,cleanup:n,clientIp:o,sessionId:i,socket:a}){return this.sessions.set(i,{controller:e,context:r,cleanup:n,clientIp:o,browserBehavior:t8(r8),socket:a}),i}removeSession(e,r){(async()=>{let o=this.sessions.get(e);if(!o)return;this.releaseCapacityByIp(o.clientIp);let{controller:i}=o;try{i.setClosed(),await i.browser.cleanup()}catch(a){r.error({err:a},"Error cleaning up browser in global state manager")}try{await o.cleanup?.()}catch(a){r.error({err:a},"Error running cleanup function in global state manager")}this.sessions.delete(e)})()}getSession(e){return this.sessions.get(e)}};function ek(t,e,r,n){let o=Date.now(),i=Date.now(),a,s,c,l,u=!1,d=async(g,f)=>{if(!g.closed&&!g.isInPageLoad)try{let S=c;c=void 0;let b=g.url(),y=f.toEditorDisplayCopy();JSON.stringify(y)===JSON.stringify(a)&&b===l&&o>i||(t.emit("browserState",{logsPerPage:S?.logsPerPage,viewport:g.getViewport(),url:b,iframeSrcUrls:s??[],context:y,isInPageLoad:g.isInPageLoad}),o=Date.now()),l=b,a=y}catch(S){if(!t.connected)return;let b=S instanceof Error?S.message:`${S}`;if(b.includes("Frame was detached")||b.includes("Not attached to an active page")||b.includes("browser has been closed")||b.includes("UserInfrastructureError"))return;r.error({err:S,sessionId:e},"Error grabbing browser state")}},p=setInterval(()=>{let g=n.getSession(e),f=g?.controller?.browser;if(!f||f.closed){r.debug("Clearing browser state socket cron due to the browser being closed"),clearInterval(p);return}d(f,g.context)},1e3),m=(g,f)=>!!(JSON.stringify(g)!==JSON.stringify(s)||f.logsPerPage.some(S=>S.length>0)),h=setInterval(async()=>{let f=n.getSession(e)?.controller?.browser;if(!f||f.closed){clearInterval(h);return}else if(u)return;u=!0;try{let S=await f.getAllFrameUrls(),b=f.retrieveAndClearDebugData();m(S,b)&&(s=S,c=b,i=Date.now())}catch(S){r.warn({err:S},"Failed to fetch extended details")}finally{u=!1}},2500);return{timers:[p,h]}}async function oc({controller:t,context:e,baseUrl:r,envName:n,testName:o,environmentVariables:i}){await t.browser.reset({newUrl:r});let a=t.browser.baseUrl,s=t.browser.url();return e.reset({baseUrl:a,currentUrl:s,variablesFromEnvironment:i,envName:n,testName:o}),{baseUrl:a,currentUrl:s}}var n8=3;async function tk({socket:t,logger:e,storageFactory:r,uploadedFileStorage:n,visualDiffStorageFactory:o,devicePixelRatio:i,generatorFactory:a,enricherFactory:s,authorization:c,settingsFactory:l,getOrgId:u,branchGetter:d,globalE2eStateManager:p}){let m=t.id,h=t.handshake.query.testId;if(!h)throw new Error("Socket connection request is missing testId");let g=await u({type:"e2e",testId:h}),f=await d?.();e=e.child({testId:h,orgId:g,sessionId:m,branch:f});let S=await a(g,e),b=await s(g,e),y=await l(g,e),T=await r(g),{testMetadata:w,baseUrl:P,envName:v,browserConfig:x,aiSettings:O,environmentVariables:L,localCodeEvalTools:N}=await Fo({testId:h,orgId:g,logger:e,storage:T,authorization:c,settings:y}),F=p.getSession(m);if(F)return e.info("Associating connection with existing session (likely reconnect)"),await F.controller.browser.clearAllCdpHighlights(),{type:"e2e",sessionId:m,orgId:g,testId:h};let W=t.handshake.headers["x-forwarded-for"]?.split(",")[0];if(e.info({clientIp:W,event:"connect",args:t.handshake.query},"Websocket event (connect)"),W&&p.getCurrentConnectionsByIp(W)>=n8)throw e.error({clientIp:W,sessions:p.getCurrentSessionsByIp(),...t.handshake.query},"Socket connection browser creation rate limit triggered"),new Error("You have exceeded the maximum number of connections allowed. Momentic limits the number of simultaneously open tabs to uphold browser reliability. Please close duplicate tabs and try again later.");p.reserveCapacityByIp(W);try{await o8({socket:t,baseUrl:P,envName:v,testMetadata:w,orgId:g,sessionId:m,logger:e,environmentVariables:L,clientIp:W,devicePixelRatio:i,storage:T,uploadedFileStorage:n,visualDiffScreenshotStorage:await o(g),localCodeEvalTools:N,generator:S,enricher:b,browserConfig:x,aiSettings:O,globalE2eStateManager:p})}catch(H){throw e.warn({err:H},"Error setting up socket session, possibly due to client closing the connection"),p.releaseCapacityByIp(W),H}return{type:"e2e",sessionId:m,testId:h,orgId:g}}async function o8({socket:t,baseUrl:e,envName:r,devicePixelRatio:n,testMetadata:o,orgId:i,sessionId:a,logger:s,storage:c,uploadedFileStorage:l,visualDiffScreenshotStorage:u,localCodeEvalTools:d,generator:p,environmentVariables:m,browserConfig:h,aiSettings:g,clientIp:f,enricher:S,globalE2eStateManager:b}){let y={viewport:o.advanced?.viewport??Ar,locale:o.advanced?.locale??_i,timezoneId:o.advanced?.timezone??Ii,geolocation:o.advanced?.geolocation??Pi,colorScheme:o.advanced?.colorScheme};n&&(y.deviceScaleFactor=n);let T=o.id,w=await Oh({settings:h,orgId:i,baseUrl:e,envName:r,testName:o.name,localTools:d,envVariables:m,logger:s,customHeaders:void 0});s=s.child({orgId:i,sessionId:a,testId:T});let P=await Fn.init({baseUrl:e,userBrowserSettings:w,enricher:S,storage:c,logger:s,contextArgs:y,iconKnowledgeBase:null,callbacks:{onTabsChange:(N,F)=>{t.emit("tabs",{tabs:N,activeTab:F})},onScreencastFrame:(N,F)=>{let W=t;Pn&&(W=t.compress(!0)),W.emit("screenshot",{buffer:N},()=>{F()})},onSvgsCollected:N=>{t.emit("newIconDetected",{numIcons:N.newSvgs.length}),c.saveNewIcons(N,s)},onNetworkLogs:N=>{t.emit("networkLogs",{harEntries:N})}}});await P.navigate({url:e,initialNavigation:!0});let v=new aa({browser:P,generator:p,logger:s,orgId:i,options:{scratchPadId:void 0,slowMoMs:w.slowMoMs,autoFollowNewTabs:w.autoFollowNewTabs,useMemory:g.useMemory,aiPageFiltering:g.aiPageFiltering},storage:c,localCodeEvalTools:d,uploadedFileStorage:l,visualDiffScreenshotStorage:u}),x=ek(t,a,s,b),O=async()=>{x.timers.forEach(N=>clearInterval(N))},L=new Br({baseUrl:e,testName:o.name,currentUrl:v.browser.url(),variablesFromEnvironment:m,envName:r});if(!t.connected)throw await P.cleanup(),new Error("Socket not connected anymore, not proceeding with session setup");t.emit("session",{url:e,userAgent:Fn.USER_AGENT,viewport:v.browser.getViewport(),sessionId:a}),b.registerSession({controller:v,context:L,sessionId:a,cleanup:O,clientIp:f,socket:t})}async function Fo({testId:t,orgId:e,logger:r,storage:n,authorization:o,settings:i}){let a=await n.fetchTestMetadata(t,r);if(!a)throw new Error(`Test metadata could not found for test ${t}`);let s;o?.type==="API_KEY"&&(s=new xo({httpClient:new hr({...o,logger:r,mode:"interactive"}),fakerSeed:void 0}));let c=a.envs?.find(g=>g.default),l;c&&(l=await n.fetchEnvironment(c.name,r));let u=l&&"browser"in l?l.browser:void 0,d={...i.browser,...u,...a.advanced};d.browserType=Cp({browserType:d.browserType,orgDefaultBrowserType:i.browser?.defaultBrowserType});let p=a.baseUrl||l?.variables?.[nr];if(!p)throw new Error("Base URL is empty in both test options and the configured environment");let m={...l?.variables};m=await Q0({orgId:e,testName:a.name,envName:l?.name,baseEnvVariables:m,parameters:a.parameters,logger:r,localTools:s});let h={...i.ai,...a.advanced};return{localCodeEvalTools:s,baseUrl:p,envName:l?.name,testName:a.name,browserConfig:d,environmentVariables:m,testMetadata:a,aiSettings:h}}var VT=class{parentTracer=null;socket;step;orgId;interactionTracer;skipStatusEvents;constructor({step:e,socket:r,parentTracer:n,orgId:o,skipStatusEvents:i=!1}){this.socket=r,this.parentTracer=n,this.step=e,this.orgId=o,this.skipStatusEvents=i,this.interactionTracer=new pi,di.initializeRootTracerContext(this.interactionTracer)}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}recordStepDuration(e){let r=e.step.type!=="PRESET_ACTION"?e.step.type:e.step.command.type;cr.distribution("test_step_duration",e.durationMs,[`type:${r}`,"platform:browser","executor:editor",`orgId:${this.orgId}`])}attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}async finish(e){if(this.interactionTracer.finish(),e.step.trace=this.interactionTracer.getRootSpan(),!this.skipStatusEvents)switch(e.step.status){case"SUCCESS":this.socket.emit("success",{...e,parentStepIdChain:this.getParentStepIdChain()});return;case"FAILED":this.socket.emit("failure",{...e,parentStepIdChain:this.getParentStepIdChain()});return;case"CANCELLED":this.socket.emit("cancelled",{...e,parentStepIdChain:this.getParentStepIdChain()});return}}async startSubSteps(){return new mi({parentStep:this.step,socket:this.socket,parentTracer:this,orgId:this.orgId})}},mi=class{stepFrequenciesByType={};parentTracer;parentStep;socket;orgId;recordStepStat(e){e.type!=="PRESET_ACTION"?this.stepFrequenciesByType[e.type]=(this.stepFrequenciesByType[e.type]||0)+1:this.stepFrequenciesByType[e.command.type]=(this.stepFrequenciesByType[e.command.type]||0)+1}sendFinalizedStepStats(){for(let[e,r]of Object.entries(this.stepFrequenciesByType))cr.increment("test_step_execution",r,[`type:${e}`,"platform:browser","executor:editor",`orgId:${this.orgId}`])}constructor({parentStep:e,socket:r,parentTracer:n,orgId:o}){this.parentTracer=n,this.parentStep=e,this.socket=r,this.orgId=o}async getScreenshot(){throw new Error("getScreenshot is not supported in the editor")}async getHtmlSnapshot(){throw new Error("getHtmlSnapshot is not supported in the editor")}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.recordStepStat(e.step),e.skipStatusEvents||this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:this.getParentStepIdChain(),attempt:e.attempt}),new VT({step:e.step,parentTracer:this,socket:this.socket,orgId:this.orgId,skipStatusEvents:e.skipStatusEvents})}async finish(){this.sendFinalizedStepStats()}},Nh=class{constructor(e,r,n,o){this.socket=e;this.storage=r;this.orgId=n;this.testId=o}children=[];loggerBindings;setActiveVideo(){}async getScreenshot(){throw new Error("getScreenshot is not supported in the editor")}async getHtmlSnapshot(){throw new Error("getHtmlSnapshot is not supported in the editor")}onNetworkPage(){}onNetworkLogs(){}attachConsoleLogs(){}attachBrowserCrashDump(){}async finish(){this.socket.emit("finished"),await Promise.all(this.children.map(e=>e.finish()))}async startBeforeStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}async startMainStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}async startAfterStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}};var $T={currentlyExecutingRequests:{}},a8=t=>async(e,r)=>{let{testId:n,orgId:o}=t.metadata,i=await t.settingsFactory(o,t.logger),a=await t.storageFactory(o),s,c=await Fo({testId:n,orgId:o,logger:t.logger,storage:a,authorization:t.authorization,settings:i}),l=`${n}|${c.baseUrl}`;try{let u=$T.currentlyExecutingRequests[l]??0;$T.currentlyExecutingRequests[l]=u+1,s=await s8({...t,...e,...c,done:r})}finally{t.logger.info({result:s,sessionId:t.metadata.sessionId},"Test execution complete"),$T.currentlyExecutingRequests[l]--}},s8=async({socket:t,steps:e,baseUrl:r,testMetadata:n,reInitialize:o,toStep:i,fromStep:a,storageFactory:s,aiSettings:c,browserConfig:l,metadata:u,logger:d,envName:p,testName:m,environmentVariables:h,localCodeEvalTools:g,done:f,cacheStorageFactory:S,globalE2eStateManager:b})=>{let{testId:y,sessionId:T,orgId:w}=u,P=T,v=b.getSession(T);if(!v)throw new Error("No active session found");let{controller:x,context:O}=v;x.setOpen(),d=d.child({testId:y,orgId:w,sessionId:T,runId:P}),d.info({steps:e.map(Q=>`${Q.type}${"command"in Q?` - ${Q.command.type}`:""}`),toStep:i,fromStep:a,reInitialize:o,envName:p,testName:m,baseUrl:r,truncatedContext:zi({json:O,maxJsonStringSize:1e3}),browserConfig:l,aiSettings:c},"Socket execution parameters");let L=h??{},N=async()=>{o&&await oc({controller:x,context:O,baseUrl:r,envName:p,testName:m,environmentVariables:L})},F=await s(w),W=await S(w),H=async()=>{let Q=Date.now();try{await W.resolveStepCacheEntries({schemaVersion:n.schemaVersion,testId:y,stepLists:{steps:e},logger:d})}catch(ve){d.error({err:ve},"Failed to fetch step cache entries from Momentic server. This can drastically reduce test reliability and performance.")}finally{cr.distribution("cache-resolution",Date.now()-Q,["executor:editor"])}};try{await Uu({promiseGenerator:async()=>Promise.all([N(),H()]),signal:x.executeAbortController.signal,codePath:"resolveStepCacheAndInitBrowser"}),x.setOpen()}catch(Q){if(t.emit("finished"),Q.name!=="AbortError")throw new Error(`Failed to setup browser for execution: ${Q}`)}let de=i8(e),$={collectDebugData:!1,reinitializeBrowser:!1,disableHealing:!0},B={orgId:w,runId:P,testMetadata:n,steps:e,fromStep:a,toStep:i,orgSettings:{ai:c,browser:l}},ae={controller:x,context:O,storage:F,codeEvalTools:g,usageTracker:new al,logger:d},ce={test:{},step:{onDynamicAIActionStatusUpdateEvent:Q=>{t.emit("dynamicCommandStatusUpdate",Q)},onDynamicAIActionEvaluatingEvent:Q=>{t.emit("dynamicCommandEvaluating",Q)},onDynamicCommandGenerated:Q=>{t.emit("dynamicCommandGenerated",Q)},onDynamicCommandExecuted:Q=>{t.emit("dynamicCommandExecuted",Q)}}},_e=new Nh(t,F,w,y),be=await Ih({fixtures:ae,options:$,callbacks:ce,inputs:B,testParams:{tracer:_e}}),se={logger:d,cacheStorage:W,orgId:w,testId:y,originalStepsWithCaches:{steps:de},updatedStepsWithCaches:{steps:e}};return be?.status==="PASSED"?await Rl(se):be?.status==="FAILED"&&await Cl(se),await _e.finish(),f?.(be),be.status};var rk={event:"execute",createHandler:a8};import{randomUUID as l8}from"crypto";var c8=({metadata:t,logger:e,storageFactory:r,globalE2eStateManager:n})=>{let{sessionId:o,orgId:i}=t;return async(a,s)=>{let{description:c,command:l,testMetadata:u,returnScreenshot:d}=a;e.info({params:a},`Locate handler called - ${c}`);let p=n.getSession(o);if(!p)throw new Error("No active session found");let{controller:m,context:h}=p;m.setOpen();let g=await r(i),f=ka.parse(u.advanced??{}),S={},b;if(c){if("useSelector"in l&&l.useSelector)try{let y=await m.locateElementWithSelector(c,"iframeUrl"in l?l.iframeUrl:void 0);b=y.resolution.locator,S={target:y.target,thoughts:y.thoughts}}catch(y){e.warn({err:y},"Failed resolving target with selector"),s({err:`Failed locating element: ${y.message}`,decisions:y instanceof Tn?y.decisions:void 0});return}else try{let y=await m.locateElement({description:c,disableCache:f.disableAICaching??!1,skipWait:!0,testContext:h,source:Ma(l),iframeUrl:"iframeUrl"in l?l.iframeUrl:void 0,memory:"cache"in l&&l.cache&&"target"in l.cache&&ep(l.cache.target.memory)?l.cache.target.memory:void 0,logger:e});S={target:y.target,thoughts:y.thoughts},b=y.resolution.locator}catch(y){(async()=>{try{let T=await m.browser.getCondensedHtml({skipWait:!0});e.warn({err:y,html:T.slice(0,1e5)},"Failed locating element with AI")}catch(T){e.warn({err:T},"Failed grabbing HTML after trying to locate element with AI")}})(),s({err:`${y.message}`});return}if(l.type==="SELECT_OPTION"&&b)try{S.options=await m.browser.getSelectOptions(b)}catch(y){e.warn({err:y},"Failed getting select options"),s({err:`Failed getting select options: ${y.message}`});return}e.info({result:S},"Locate handler result")}if(d)try{let{buffer:y,width:T,height:w}=await m.screenshotWithDimensions({clearHighlights:!0,locator:b}),P=l8(),{universalHandle:v,appServerUrl:x}=await g.createOnDemandScreenshot(P,y,"image/jpeg");S.screenshot={data:v,width:T,height:w},e.info({width:T,height:w,appServerUrl:x,universalHandle:v},"Captured screenshot during locate")}catch(y){e.error({err:y},"Error capturing screenshot during locate"),s({err:`Error taking screenshot: ${y.message}`});return}if(s({result:S}),b)try{await Promise.all([m.browser.scrollIntoViewIfNeeded(b),m.browser.highlight(b)])}catch(y){e.warn({err:y},"Error highlighting element, continuing...")}}},nk={event:"locate",createHandler:c8};var u8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({event:o,percentX:i,percentY:a})=>{let s=r.getSession(n);if(!s)throw new Error("No active session found");let c=s.controller.browser;if(c.closed||c.getActivePage().isClosed()){e.warn("Ignoring mouse move because the browser is closed");return}try{await c.clickMouseFromPositionPercentages(o,i,a)}catch(l){e.error({err:l},"Error performing click during cloud recording in control mode")}}},ok={event:"mouseClickEvent",createHandler:u8};var d8=({metadata:t,generatorFactory:e,logger:r,socket:n,globalE2eStateManager:o})=>{let{sessionId:i,orgId:a,testId:s}=t;return async({stepId:c,parentStepIdChain:l,attribute:u})=>{let d=o.getSession(i);if(!d)throw new Error("No active session found");let{controller:p}=d,m=await e(a,r);p.setOpen(),d.browserBehavior.showOverlay=!0;let h=new AbortController;h.signal.addEventListener("abort",async()=>{try{d.browserBehavior.showOverlay=!1,await p.stopRecordMode()}catch(S){r.warn({err:S},"Failed to stop record mode in target click socket handler")}},{once:!0});let g=!1,f=(S,b)=>{b.type!=="PRESET_ACTION"||b.command.type!=="CLICK"||(n.emit("targetRecordingUpdate",{type:S,stepId:c,parentStepIdChain:l,command:b.command,attribute:u}),h.abort(),g=!0)};setTimeout(()=>{g||(h.abort(),n.emit("targetRecordingUpdate",{type:"error",err:"Timed out waiting for click event",stepId:c,parentStepIdChain:l,attribute:u}))},1e4),await p.startRecordMode({params:{generator:m,logger:r,testId:s,orgId:a,callbacks:{onActionReceived:S=>f("clickReceived",S),onStepRecorded:S=>f("descriptionGenerated",S)}},abortController:h,isClickToRecord:!0}),n.emit("targetRecordingUpdate",{type:"listenersInitialized",stepId:c,parentStepIdChain:l,attribute:u})}},ik={event:"recordTargetClick",createHandler:d8};var p8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({key:o})=>{let i=r.getSession(n);if(!i)throw new Error("No active session found");if(o==="Dead")return;let{controller:a}=i;if(a.browser.closed||a.browser.getActivePage().isClosed()){e.debug({sessionId:n},"Browser is closed, ignoring keyboard press socket event");return}try{a.setOpen(),await a.browser.keyDown(o,{})}catch(s){if(s.message.includes("has been closed")){e.debug({sessionId:n,err:s},"Browser is closed, ignoring key down socket event error");return}throw s}}},ak={event:"keyDownEvent",createHandler:p8};var m8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({key:o})=>{let i=r.getSession(n);if(!i)throw new Error("No active session found");if(o==="Dead")return;let{controller:a}=i;if(a.browser.closed||a.browser.getActivePage().isClosed()){e.debug({sessionId:n},"Browser is closed, ignoring keyboard press socket event");return}try{a.setOpen(),await a.browser.keyUp(o,{})}catch(s){if(s.message.includes("has been closed")){e.debug({sessionId:n,err:s},"Browser is closed, ignoring key up socket event error");return}throw s}}},sk={event:"keyUpEvent",createHandler:m8};var g8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t,o,i=0,a=(l,u)=>{let d=async()=>{o=void 0};clearTimeout(o),o=setTimeout(d,Math.min(1e3,250*(i+1)))},s,c=0;return async l=>{let u=r.getSession(n);if(!u)throw new Error("No active session found");let{controller:d,browserBehavior:p}=u,m=d.browser;if(m.closed||m.getActivePage().isClosed()){e.warn("Ignoring mouse move because the page is closed");return}if(l.event==="scroll"){let h=await m.scrollFromPositionPercentages(l.percentX,l.percentY,s?.x??0,s?.y??0),g=u.browserBehavior.recordingState?.transformer;g&&h&&g.recordScroll(h);return}p.showOverlay&&a(m,l);try{let h=await m.moveMouseFromPositionPercentages(l.percentX,l.percentY);c=0,s=h}catch(h){c++,c%5===0&&e.warn({err:h,mouseErrors:c},"Error in socket mouse move handler")}}},lk={event:"mouseMoveEvent",createHandler:g8};var h8=({metadata:t,generatorFactory:e,socket:r,logger:n,globalE2eStateManager:o})=>{let{sessionId:i,orgId:a,testId:s}=t;return async({stepId:c})=>{let l=o.getSession(i);if(!l)throw new Error("No active session found");let{controller:u,browserBehavior:d}=l,p=await e(a,n);n.info("Starting cloud recording");let m=new AbortController,h=await u.startRecordMode({params:{generator:p,logger:n,testId:s,orgId:a,callbacks:{onActionReceived:(g,f)=>{r.emit("stepRecorded",{stepId:c,step:g,offset:f})},onStepRecorded:(g,f)=>{r.emit("stepRecorded",{stepId:c,step:g,offset:f})}}},abortController:m,isClickToRecord:!1});d.recordingState={transformer:h}}},ck={event:"recordingStart",createHandler:h8};var f8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async()=>{let o=r.getSession(n);if(!o)throw new Error("No active session found");e.info("Stopping cloud recording"),await o.controller.stopRecordMode(),o.browserBehavior.recordingState=void 0,o.browserBehavior.showOverlay=!1}},uk={event:"recordingStop",createHandler:f8};var S8=({socket:t,metadata:e,logger:r,storageFactory:n,authorization:o,settingsFactory:i,globalE2eStateManager:a})=>async(s,c)=>{let{testId:l,sessionId:u,orgId:d}=e;r.info({testId:l,sessionId:u},"Refresh event received");let p=await i(d,r),m=await n(d),{baseUrl:h}=await Fo({testId:l,orgId:d,logger:r,storage:m,authorization:o,settings:p}),g=a.getSession(u);if(!g){t.emit("error",{message:"No session to refresh"});return}let{controller:f}=g;f.setOpen(),await f.browser.refresh();let S=f.browser.getViewport();r.info({baseUrl:h,viewport:S},`Session refreshed for test ${l} at ${h}`),c()},dk={event:"refresh",createHandler:S8};var y8=({socket:t,metadata:e,logger:r,storageFactory:n,authorization:o,settingsFactory:i,globalE2eStateManager:a})=>async()=>{let{testId:s,sessionId:c,orgId:l}=e;r.info({testId:s,sessionId:c},"Reset event received");let u=await i(l,r),d=await n(l),{baseUrl:p,envName:m,testName:h,environmentVariables:g}=await Fo({testId:s,orgId:l,logger:r,storage:d,authorization:o,settings:u}),f=a.getSession(c);if(!f){t.emit("error",{message:"No session to reset"});return}let{controller:S,context:b}=f,{baseUrl:y}=await oc({controller:S,context:b,baseUrl:p,envName:m,testName:h,environmentVariables:g}),T=S.browser.getViewport(),w=Fn.USER_AGENT;r.info({baseUrl:p,viewport:T},`Session reset for test ${s} at ${y}`),t.emit("session",{url:y,userAgent:w,viewport:T,sessionId:c})},pk={event:"reset",createHandler:y8};var b8=({metadata:t,globalE2eStateManager:e})=>{let{sessionId:r}=t;return async({url:n})=>{let o=e.getSession(r);if(!o)throw new Error("No active session found");await o.controller.browser.switchToPage({type:"SUBSTRING",substring:n})}},mk={event:"switchTab",createHandler:b8};async function gk(t){return tk(t)}var hk=[JP,rk,nk,pk,dk,KP,mk,ik,ck,uk,lk,ok,ak,sk,XP,YP];var fk=t=>{let{logger:e}=t,r=new E8(t.baseServer,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0});return r.on("connection",async n=>{let o;try{e.info({event:"connection",transport:n.conn.transport.name},"Websocket connection established"),o=await gk({...t,socket:n,logger:e}),e=e.child(o)}catch(i){e.error({event:"connection",type:"websocket",err:i},"Failed to setup connection"),n.emit("error",{message:i instanceof Error?i.message:`${i}`}),n.disconnect(!0);return}hk.forEach(i=>T8(i,{...t,socket:n,metadata:o,logger:e}))}),r},T8=(t,e)=>{let r=t.createHandler(e),n=(...o)=>{["mouseMoveEvent","keyDownEvent","keyUpEvent","mouseClickEvent"].includes(t.event)||e.logger.debug({...e.metadata,event:t.event},`Websocket event (${t.event})`);let i=a=>{e.logger.error({event:t.event,type:"websocket",err:a instanceof Error?a:new Error(`${a}`)},"Unhandled exception in socket handler"),e.socket.emit("error",{message:a instanceof Error?a.message:`${a}`})};try{let a=r.apply(void 0,o);a&&typeof a.catch=="function"&&a.catch(i)}catch(a){i(a)}};e.socket.on(t.event,n)};import{Router as w8}from"express";import{Router as A8}from"express";import Cd from"fs";import Rd from"path";import{v4 as R8}from"uuid";import C8 from"yaml";import{hostname as v8}from"os";var Ad="2.45.2",lt=hl({app:"desktop-server",hostname:v8(),disableConsoleLogs:!0}).child({cliVersion:Ad});(async()=>{try{let t=await si(lt);t.gitBranchName&&lt.addBinding("branch",t.gitBranchName)}catch{}})();var fs=A8();async function Dh(t){return(await km(t,lt)).map(n=>{let o=t.modules[n.moduleId];if(!o){A.warn(`Found a dangling module with ID ${n.moduleId} that could not be found on disk.`);return}return{...o,content:n}}).filter(n=>n!==void 0)}fs.get("/",Be(async(t,e)=>{let r=Se(),n=await le(r),o=await Dh(n);e.status(200).json(o)}));fs.get("/tests-join",Be(async(t,e)=>{let r=Se(),n=await le(r),o=await Dh(n),i={};for(let s of o)i[s.id]={...s,tests:[]};let a=await Promise.all(Object.values(n.tests).map(async s=>({id:s.id,name:s.name,relativePath:s.relativePath,test:await ft(s.fullFilePath,lt,n)})));for(let{id:s,name:c,relativePath:l,test:u}of a){let d=new Set,p=[u.steps,u.beforeSteps,u.afterSteps];for(let m of p)Mn({steps:m??[],onPresetAction:()=>{},onConditional:()=>{},onSimpleStepContainer:h=>{Qf(h)&&d.add(h.moduleId)}});for(let m of d){let h=i[m];h&&h.tests.push({id:s,name:c,relativePath:l})}}e.status(200).json(i)}));fs.post("/",Be(async(t,e)=>{let r;try{r=Lw.parse(t.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{wi(r.name)}catch(s){e.status(400).json({error:`Invalid module name: ${s}`});return}let n=Se(),o=(await le(n)).modules;if(Object.values(o).find(s=>s.name===r.name)){e.status(400).send(`A module with the name "${r.name}" already exists. Please choose a different name.`);return}let i=Rd.join(n.rootDir,r.folderPath??"");if(!Cd.existsSync(i)||!Cd.statSync(i).isDirectory()){e.status(400).json({error:`The folder configured for module creation '${i}' does not exist.`});return}let a=await Dm({...r,folder:i,project:n});e.status(201).json(a)}));fs.get("/:moduleId",Be(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r=await le(Se()),n=r.modules[t.params.moduleId];if(!n){e.status(404).json({error:"Module not found."});return}try{let o=await Qn(n,r,A);e.json(o)}catch(o){e.status(400).json({err:o})}}));fs.post("/:moduleId/duplicate",Be(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r;try{r=Ow.parse(t.body)}catch(g){e.status(400).json({error:`Invalid request body: ${g}`});return}try{wi(r.name)}catch(g){e.status(400).json({error:g.message});return}let n=Se(),o=await le(n),i=o.modules[t.params.moduleId];if(!i){e.status(404).json({error:"Module not found."});return}if(Object.values(o.modules).find(g=>g.name===r.name)){e.status(400).send(`A module with the name "${r.name}" already exists. Please choose a different name.`);return}let a=await Qn(i,o,A),s=Rd.join(n.rootDir,Rd.dirname(i.relativePath));if(!Cd.existsSync(s)||!Cd.statSync(s).isDirectory()){e.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let c=at(r.name),l=Rd.join(s,`${c}.module.yaml`),u=R8(),{stepsToSave:d}=await Pt({stepLists:{steps:a.steps},createNewCacheIds:!0,cacheCreationParams:{orgId:Ht()}}),p={fileType:De.MODULE,schemaVersion:Ze,moduleId:u,name:r.name,description:"",enabled:!0,steps:d.steps,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,defaultCacheKey:a.defaultCacheKey,defaultCacheTtl:a.defaultCacheTtl,defaultCacheAllInvocations:a.defaultCacheAllInvocations,autoAuth:a.autoAuth,advanced:a.advanced},m=C8.stringify(p);Cd.writeFileSync(l,m,"utf-8");let h={relativeFilePath:Rd.relative(n.rootDir,l)};e.status(201).json(h)}));fs.patch("/:moduleId/metadata",Be(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r;try{r=Nw.parse(t.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Se(),o=await le(n);NI({moduleId:t.params.moduleId,content:r,momenticFiles:o,logger:A,project:n}),e.status(201).json({message:"ok"})}));var Sk=fs;var yk=w8();yk.get("/",Be(async(t,e)=>{let r=Se(),n=await le(r),o=new Set;n?.tests&&Object.values(n.tests).forEach(l=>{l.labels?.forEach(u=>o.add(u))});let i=Array.from(o).sort(),a=Object.values(n.tests),s=await Dh(n),c={labels:i,tests:a,modules:s};e.status(200).json(c)}));var bk=yk;import{Router as x8}from"express";var WT=x8();WT.get("/",Be((t,e)=>{let r=Um(Se(),lt);e.status(200).json(r)}));WT.get("/names",Be((t,e)=>{let n=Se().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));var Ek=WT;import{Router as _8}from"express";var Tk=_8();Tk.get("/",Be((t,e)=>{let r={userId:Io(),orgId:Ht(),cliVersion:Ad??"0.0.0"};e.status(200).json(r)}));var vk=Tk;import{StreamableHTTPServerTransport as rZ}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as nZ}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as oZ}from"crypto";import{Router as iZ}from"express";import{McpServer as Q9}from"@modelcontextprotocol/sdk/server/mcp.js";import{SSEServerTransport as eZ}from"@modelcontextprotocol/sdk/server/sse.js";import{StdioServerTransport as tZ}from"@modelcontextprotocol/sdk/server/stdio.js";import{streamObject as F8}from"ai";import $h from"dedent";import B8 from"path";import{z as ca}from"zod";import{tool as I8}from"ai";import{z as P8}from"zod";var Ak=(t,e)=>({builder:n=>I8({description:t.schema.description,inputSchema:P8.object(t.schema.inputSchema),execute:async o=>{let i=e(n);n.logger.info({input:o},`Executing tool ${t.schema.name}`);try{await t.handle(n,o,i,void 0)}catch(s){i.addError(String(s))}let a=await i.serialize();return a.isError?n.logger.error({toolName:t.schema.name,input:o,err:a.content.map(s=>"text"in s?s.text:"").join(`
4640
+ ${P.feedback}`,p.status="FAILED",l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,status:"FAILED",message:p.message}),p;O&&l.onDynamicAIActionEvaluatingEvent?.({stepId:O,status:"FAILED",message:P.feedback});break}case"IMPOSSIBLE":return p.message=`Our AI evaluator determined this task cannot be achieved: ${v}`,p.status="FAILED",l.onDynamicAIActionEvaluatingEvent?.({stepId:O??e.id,status:"FAILED",message:p.message}),p}let L=setTimeout(()=>{l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,message:"Deciding what to do next..."})},1500);d.info({commandIndex:S,lastActionHint:y},`Generating new sub-command ${S} within AI action`);let N,F;try{({command:N,reasoning:F}=await i.promptToCommand({goal:m,history:f,startingScreenshot:g,disableCache:n?.advanced.disableAICaching??!1,logger:d,actionHint:y,langfuseSessionId:u})),d.info({command:N,reasoning:F},"Got proposed command")}finally{clearTimeout(L)}if(N.type==="FAILURE")return clearTimeout(L),p.status="FAILED",p.message=`Our AI agent determined that no supported actions can fulfill the goals: ${F}`,p;let W={id:GT(),type:"PRESET_ACTION",command:N},H={substepIndex:S+1,message:F||"Generated new command."};l.onDynamicCommandGenerated?.({...H,step:W,parentStepId:e.id}),d.info({commandId:N.id},`Executing sub-command ${S} within AI step: ${ti(N)}`);let de=await r.startSubSteps(),B=(await t.executeStepList({...t,options:{...t.options,disableHealing:!0},listParams:{containerName:"AI action newly generated step",steps:[W],tracer:de}})).results[0];l.onDynamicAIActionStatusUpdateEvent?.({parentStepId:e.id,message:"Waiting for page to stabilize before next action..."}),await i.browser.waitForStability({logger:d});let ae=await i.browser.screenshot({clearHighlights:!0,retries:1});p.results.push(B),f.push({screenshotBase64AfterCommand:`data:image/jpeg;base64,${ae.toString("base64")}`,urlAfterCommand:i.browser.url(),serializedCommand:ti(N),elementInteracted:B.results[0]?.elementInteracted,thoughts:F});let ce={substepIndex:S,output:{...B,message:B.message??"Successfully executed preset action."},step:W,parentStepId:e.id};if(l.onDynamicCommandExecuted?.(ce),await r.finish({output:Pp.parse(B),step:B,message:B.message,attempt:1}),B.status==="FAILED")if(p.status="FAILED",p.message=B.message,b<3)b++,T=`The last attempted action resulted in a Momentic error. A different element may need to be targeted. Error: ${B.message}`;else return p;else if(B.status==="CANCELLED")return p.status="CANCELLED",p.message=B.message,p;S++}};import{randomUUID as H6}from"crypto";var j6=3;async function V0(t){let{logger:e}=t.fixtures,{results:r}=t.failureRecoveryParams,n=r[r.length-1],o=V6(t.work,n);if(o)return e.info({failedResult:n,isNotEligible:o},"Skipping failure recovery because of ineligible failure"),{type:"NOT_ELIGIBLE",message:`The failed step is not eligible for failure recovery: ${o}`};e.info({failedResult:n},"Attempting failure recovery"),t.work.state.failureRecoveryAttempts=(t.work.state.failureRecoveryAttempts??0)+1;try{return await G6(t)}catch(i){return e.warn({err:i},"Error during failure recovery attempt, continuing..."),null}}async function G6(t){let{fixtures:e,work:r,failureRecoveryParams:n}=t,{controller:o,logger:i}=e,{testMetadata:a}=t.inputs,{results:s,failedStep:c,nextSteps:l,tracer:u}=n;if(!s.length)throw new Error("Attempted failure recovery with no failed results");await Promise.allSettled(r.asyncTasks??[]);let d=o.browser.url(),p=`data:image/jpeg;base64,${(await o.browser.screenshot({})).toString("base64")}`,m=(await o.browser.getBrowserState({})).serialize(),{results:h}=await Al(i,u,s,{numStepsWithScreenshots:8,addIndices:!0,includeBeforeScreenshots:!1}),g=l.map(x=>ni(x)),f=a?.description?.trim(),S=a?.advanced?.failureRecoveryInstructions?.trim(),{scenario:b,thoughts:y,instructions:T}=await o.getFailureRecoveryPlan({currentUrl:d,currentScreenshot:p,failedResults:h,currentPageState:m,nextStepsSerialized:g,testDescription:f||void 0,customInstructions:S||void 0});if(b!=="RECOVERABLE")return i.info({scenario:b,thoughts:y,instructions:T},"Failure recovery is not applicable"),{type:"NOT_ELIGIBLE",message:`Momentic's failure recovery agent determined that this failure is not eligible for recovery: ${y}`};if(!T)throw new Error("Momentic's failure recovery agent did not provide any instructions for recovery");let w={id:H6(),type:"AI_ACTION_DYNAMIC",text:T},P=await nc(t.work,()=>t.executeStepList({...t,fixtures:{...t.fixtures},listParams:{steps:[w,c],containerName:"AI-recovered step list",tracer:u}})),v=P.results[0];if(v&&v.type==="AI_ACTION_DYNAMIC")if(Sm({results:P.results,onPresetAction:x=>{x.aiSuggested=!0},onSimpleStepContainer:x=>{x.aiSuggested=!0}}),P.status==="SUCCESS"){let x=`The following steps were automatically executed by the failure recovery agent. Analysis: ${y}`;return v.message=x,cr.increment("test_event",1,["name:failure_recovery_success",`orgId:${t.inputs.orgId}`]),i.info({thoughts:y},"Failure recovery succeeded"),{type:"ATTEMPTED",status:"SUCCESS",result:P,message:x}}else{cr.increment("test_event",1,["name:failure_recovery_failure",`orgId:${t.inputs.orgId}`]);let x=`The following steps were unsuccessfully attempted by the failure recovery agent. Analysis: ${y}`;return v.message=x,i.info({thoughts:y},"Failure recovery failed"),{type:"ATTEMPTED",status:"FAILED",result:P,message:x}}return null}function V6(t,e){if(!e)return"There is no failed result";if(e.type!=="PRESET_ACTION")return"The failed step is not a preset action";let r=e.message;return r?r.includes("AbortError:")?"The user aborted the test":sR.some(n=>r.includes(n))?"The failed step is an irrecoverable configuration error":(t.state.failureRecoveryAttempts??0)>j6?"Too many failure recovery attempts":"":"There is no error message available on the failed step"}import{randomUUID as _h}from"crypto";import $6 from"fast-json-patch";import{cloneDeep as W6}from"lodash-es";async function $0(t){let e=t.failedResults,r=[],{sectionParams:n,fixtures:o,work:i,startingUrl:a,startingContextSnapshot:s,tracer:c}=t,{step:l}=n,{controller:u,logger:d}=o,p=l?.autohealingConfig,m=p?.restartBehavior??{type:"GO_TO_SECTION_START"},h=p?.attempts??1;for(let g=0;g<h;g++){if(!e.terminalResult?.message)throw new Error("No error message in terminal result");let f=W6(l.steps);await Promise.allSettled(i.asyncTasks??[]);let{results:S}=await Al(d,c,e.results,{numStepsWithScreenshots:4}),b=await u.runSectionAutohealing({results:S,errorMessage:e.terminalResult?.message,goal:l.description});f=$6.applyPatch(f,b.patches).newDocument;let y=Br.fromSnapshot({snapshot:s,environmentVariables:o.context.getVariablesFromEnvironmentCopy()});await q6({logger:d,controller:u,tracer:c,context:y,restartConfig:m,startingUrl:a});let T=await nc(t.work,()=>t.executeStepList({...t,fixtures:{...t.fixtures,context:y},listParams:{steps:f,containerName:"auto-healed step list",tracer:c}}));if(r.push(T.results),T.status==="SUCCESS")return{successfulHealing:{proposedStep:{...l,steps:f},listResult:T,context:y},healingAttempts:r};e=T}return{healingAttempts:r}}async function q6({logger:t,controller:e,tracer:r,restartConfig:n,context:o,startingUrl:i}){switch(n.type){case"NAVIGATE_URL":{let a={id:_h(),type:"PRESET_ACTION",command:{id:_h(),type:"NAVIGATE",url:n.url}},s=await r.startStep({logger:t,step:a,attempt:1});await e.executePresetCommand(null,s,a.command,o,!1);break}case"GO_TO_SECTION_START":{let a={id:_h(),type:"PRESET_ACTION",command:{id:_h(),type:"NAVIGATE",url:i}},s=await r.startStep({logger:t,step:a,attempt:1});await e.executePresetCommand(null,s,a.command,o,!1);break}}}function W0(t,e){switch(t||(t="ON_FAILURE"),t){case"ALWAYS":return!0;case"ON_FAILURE":return!0;case"ON_ACTION_FAILURE":return!(!e||e.type==="PRESET_ACTION"&&wA(e.command.type))}}async function q0(t){let{step:e,tracer:r}=t.sectionParams,{logger:n,controller:o,context:i}=t.fixtures,a=new Date,s=o.browser.url(),c=i.toObjectCopy(),l=await r.startSubSteps(),u=async()=>t.executeStepList({...t,listParams:{steps:e.steps,containerName:"section step list",tracer:l}}),d=e.autohealingConfig?await nc(t.work,u):await u(),p,m;if(d.status==="FAILED"&&e.autohealingConfig&&!t.work.state.autoHealingDisabled&&W0(e.autohealingConfig.trigger,d.terminalResult)){let g=await r.startSubSteps(),f=await $0({...t,startingContextSnapshot:c,startingUrl:s,failedResults:d,tracer:g});f.successfulHealing&&(p=f.successfulHealing.proposedStep,d=f.successfulHealing.listResult,t.fixtures.context=f.successfulHealing.context),m=f.healingAttempts}let h={...e,...d,startedAt:a,finishedAt:new Date,proposedStep:p,healingAttempts:m};return kn({asyncTasks:t.work.asyncTasks,nestedResults:d.results,result:h,logger:n}),h}var Y6=60*60*1e3;async function io(t){let{results:e=[],containerName:r,steps:n,tracer:o}=t.listParams,{logger:i}=t.fixtures,a=o.getParentStepIdChain(),{fromStep:s,toStep:c}=t.inputs,l="SUCCESS",u,d=0;for(d;d<n.length;d++){let p=n[d];if(p.skipped)continue;if(t.work.fastForwardingToStep&&s){let b=JSON.stringify(a);if(p.id===s.fromStepId&&b===JSON.stringify(s.parentStepIdChain))t.work.fastForwardingToStep=!1;else if(!T_(p,a,s.fromStepId,s.parentStepIdChain))continue}let m=ni(p),h=0,g=1,f=Date.now();"retries"in p&&p.retries&&p.retries>0&&(g+=p.retries);let S;for(;h<g&&Date.now()-f<Y6;){h++,i.info({step:cI(p),currentAttempt:h},`Executing step ${d+1}/${n.length} in ${r}: ${m}`);let b=Date.now(),{stepResult:y,status:T,failureRecoveryResults:w,shouldStopExecuting:P}=await X6({attempt:h,params:t,step:p,i:d,steps:n,results:e,currentParentIdChain:a,fromStep:s,toStep:c,lastRetry:h===g});if(T==="FAILED"&&h<g){S=[...S??[],y],Date.now()-b<1e3&&await ye(1e3-(Date.now()-b));continue}else e.push(y),S&&(y.previousAttempts=S);if(w&&e.push(...w),P)return l=T,u=y,{status:l,results:e,terminalResult:u};break}}return{status:l,results:e,terminalResult:u}}async function X6({attempt:t,params:e,step:r,i:n,steps:o,results:i,currentParentIdChain:a,fromStep:s,toStep:c,lastRetry:l}){let{tracer:u}=e.listParams,{logger:d,context:p,controller:m,codeEvalTools:h,usageTracker:g}=e.fixtures,{orgId:f}=e.inputs,S=new Date,b=!!s&&Mu(a.concat(r.id),s.parentStepIdChain),y=await u.startStep({logger:d,step:r,attempt:t,skipStatusEvents:b}),T=K6(r),w=p.toRedactedDisplayCopy(),P=m.browser.url(),v=m.executeAbortController.signal;g.trackStepExecution(r);let x,O;switch(r.type){case"PRESET_ACTION":{x="Preset action",O=await hs(r,async()=>await wh({...e,presetParams:{tracer:y,step:r}}),v);break}case"AI_ACTION":{x="AI action",O=await hs(r,()=>M0({...e,aiStepParams:{step:r,tracer:y},executeStepList:io}),v);break}case"AI_ACTION_DYNAMIC":{x="AI action",O=await hs(r,()=>j0({...e,aiStepParams:{step:r,tracer:y},executeStepList:io}),v);break}case"RESOLVED_MODULE":{x=`Module (${r.name})`,O=await hs(r,async()=>{let H=await w0({orgId:f,step:r,context:p,logger:d,codeEvalTools:h,signal:v});return BT({...e,executeStepList:io,moduleParams:{step:r,resolvedInputs:H,tracer:y}})},v);break}case"CONDITIONAL":{x="Conditional step",O=await hs(r,()=>I0({...e,conditionalParams:{step:r,tracer:y},executeStepList:io}),v);break}case"SECTION":{x="Section",O=await hs(r,()=>q0({...e,sectionParams:{step:r,tracer:y},executeStepList:io}),v);break}default:return(de=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(r)}O.beforeUrl=O.beforeUrl??P,O.beforeTestContext=w,r.envKey&&p.setVariable(r.envKey,O.data);let L=m.browser.url();p.setCurrentUrl(L),O.afterUrl=O.afterUrl??L,O.afterTestContext=p.toRedactedDisplayCopy(),await J6({step:r,startedAt:S,stepTypeName:x,result:O,callbacks:e.callbacks,globalWorkRef:e.work,tracer:y,attempt:t});let N,F;if(l&&O.status==="FAILED"&&!e.work.state.failureRecoveryDisabled&&s?.fromStepId===void 0&&c?.toStepId===void 0){let H=await V0({...e,executeStepList:io,failureRecoveryParams:{failedStep:T,nextSteps:o.slice(n+1),results:i.concat(O),tracer:u}});H&&(H.type==="ATTEMPTED"?(N=H.result.results,F=H.status):H.type==="NOT_ELIGIBLE"&&(O.message=O.message?`${O.message} ${H.message}`:H.message),O.type==="PRESET_ACTION"&&(O.failureRecoveryStatus={type:H.type,message:H.message}))}return e.work.fastForwardingToStep&&s&&(s.fromStepId===r.id&&JSON.stringify(a)===JSON.stringify(s.parentStepIdChain)&&(e.work.fastForwardingToStep=!1),r.type==="RESOLVED_MODULE"&&Mu(a,s.parentStepIdChain)&&(e.work.fastForwardingToStep=!1)),O.status!=="SUCCESS"&&F!=="SUCCESS"||m.closed?{shouldStopExecuting:!0,status:O.status,stepResult:O,failureRecoveryResults:N}:c&&r.id===c.toStepId&&JSON.stringify(a)===JSON.stringify(c.parentStepIdChain)?(m.setClosed(),{shouldStopExecuting:!0,status:"SUCCESS",stepResult:O,failureRecoveryResults:N}):{shouldStopExecuting:!1,status:"SUCCESS",stepResult:O,failureRecoveryResults:N}}async function J6({stepTypeName:t,step:e,result:r,tracer:n,attempt:o,startedAt:i}){let a=t.toLowerCase(),s=t.charAt(0).toUpperCase()+t.slice(1);n.recordStepDuration({step:e,durationMs:Date.now()-i.getTime()});let c="";switch(r.status){case"SUCCESS":c=r.message??`${s} executed successfully.`;break;case"FAILED":c=r.message??`${s} failed.`;break;case"CANCELLED":c=r.message??`${s} cancelled.`;break;default:throw new Error(`Unexpected ${a} status: ${r.status}`)}await n.finish({step:r,message:c,output:Pp.parse(r),attempt:o})}var K0="MOMENTIC_RUN_ID",Y0="FINAL_SCREENSHOT_URL";import{randomUUID as X0}from"crypto";async function J0({browser:t,signal:e}){let r=new Date;try{return await t.navigate({url:t.baseUrl,initialNavigation:!0}),{status:"PASSED",results:[]}}catch(n){let o={id:X0(),type:"PRESET_ACTION",status:e.aborted||n.name==="AbortError"?"CANCELLED":"FAILED",failureReason:"UserInfrastructureError",message:n.message,startedAt:r,finishedAt:new Date,results:[],command:{id:X0(),type:"NAVIGATE",url:t.baseUrl}};return{status:e.aborted||n.name==="AbortError"?"CANCELLED":"FAILED",results:[],failedStepResult:o}}}var Ih=async t=>{let{orgId:e,runId:r,testMetadata:n,steps:o,beforeSteps:i,afterSteps:a}=t.inputs;t.fixtures.logger=t.fixtures.logger.child({orgId:e,runId:r,testId:n?.id});let{logger:s,controller:c}=t.fixtures,{onTestComplete:l,onTestSuccess:u,onTestFailure:d}=t.callbacks.test,p=$O(s);if(t.options.reinitializeBrowser){let h=await J0({browser:c.browser,signal:c.executeAbortController.signal});if(h.status!=="PASSED")return await l?.(),clearInterval(p?.interval),h}let m;try{return s.info({platform:p?.platform,cpuMetadata:p?.cpuMetadata,labels:n?.labels,orgSettings:iC.parse(t.inputs.orgSettings)},`Starting run for Momentic test '${n?.name??"Unnamed test"}'`),m=await Q6(t),m}finally{s.info({status:m?.status,labels:n?.labels},"Momentic test final result"),clearInterval(p?.interval),await l?.(),m?.status==="PASSED"?await u?.({steps:o,beforeSteps:i,afterSteps:a}):m?.status==="FAILED"&&await d?.({steps:o,beforeSteps:i,afterSteps:a})}};function Z6({beforeStatus:t,mainStatus:e,afterStatus:r}){return t==="FAILED"?"FAILED":t==="CANCELLED"?"CANCELLED":r==="FAILED"?"FAILED":r==="CANCELLED"?"CANCELLED":e==="FAILED"?"FAILED":e==="CANCELLED"?"CANCELLED":"PASSED"}var Q6=async t=>{let{tracer:e}=t.testParams,{fromStep:r,toStep:n,steps:o,beforeSteps:i,afterSteps:a}=t.inputs,{logger:s,controller:c,context:l,storage:u}=t.fixtures,{collectDebugData:d,disableHealing:p}=t.options;l.setCurrentUrl(c.browser.url());let m="test",h=o,g=[],f=p||r!==void 0||n!==void 0||void 0,S={results:g,state:{autoHealingDisabled:f,failureRecoveryDisabled:f,failureRecoveryAttempts:0},asyncTasks:[]},b=!1;r?.fromStepId&&r.fromStepId===n?.toStepId?(m="filtered step",S.fastForwardingToStep=!0):r?.fromStepId?(m="partial steps list from step",S.fastForwardingToStep=!0):n?m="partial steps list until step":(m="entire test",b=!0);let y,T,w;if(b&&i&&i.length>0){let F=await Z0(i,"beforeSteps",t);y=F.status,T=F.results,w=F.terminalResult?{...F.terminalResult,failureReason:"SetupFailureError"}:void 0,S.state.failureRecoveryAttempts=(S.state.failureRecoveryAttempts??0)+(F.failureRecoveryAttempts??0)}let P,v;if(y===void 0||y==="PASSED"){s.info({fromStep:r,toStep:n},`Starting execution of ${m}`);let F=await e.startMainStepList(),W=await io({...t,work:S,listParams:{steps:h,containerName:m,results:g,tracer:F}});P=W.status,v=W.terminalResult}let x,O,L;if(b&&a&&a.length>0){let F=await Z0(a,"afterSteps",t);x=F.status,O=F.results,L=F.terminalResult?{...F.terminalResult,failureReason:"TeardownFailureError"}:void 0,S.state.failureRecoveryAttempts=(S.state.failureRecoveryAttempts??0)+(F.failureRecoveryAttempts??0)}let N=Z6({beforeStatus:y,mainStatus:P,afterStatus:x});if(d&&e8({tracer:e,work:S,controller:c,storage:u,context:l,logger:s,status:N}),await Promise.allSettled(S.asyncTasks),S.asyncTasks.push(Promise.resolve(t.callbacks.test.onSaveFinalRunResults?.({results:g,beforeResults:T,afterResults:O}))),N==="FAILED"){let F=y==="FAILED"?w:void 0,W=x==="FAILED"?L:void 0;return{status:"FAILED",results:g,beforeResults:T,afterResults:O,failedStepResult:F??v??W}}else if(N==="CANCELLED")return{status:"CANCELLED",results:g,beforeResults:T,afterResults:O};return{status:"PASSED",failureRecoveryDetails:S.state.failureRecoveryAttempts?{attempts:S.state.failureRecoveryAttempts}:void 0,results:g,beforeResults:T,afterResults:O}};async function Z0(t,e,r){let n=r.fixtures.logger,o=e==="beforeSteps"?await r.testParams.tracer.startBeforeStepList():await r.testParams.tracer.startAfterStepList();n.info(`Starting step execution for ${e}`);let i={results:[],asyncTasks:[],state:{}},a={...r.callbacks,test:{...r.callbacks.test,onSaveFinalRunResults:void 0,onUpdateRun:void 0,onTestComplete:void 0,onTestSuccess:void 0}},{status:s,results:c,terminalResult:l}=await io({...r,work:i,callbacks:a,listParams:{steps:t,containerName:e,tracer:o}});await Promise.allSettled(i.asyncTasks);let u;return s==="SUCCESS"?u="PASSED":s==="CANCELLED"?u="CANCELLED":u="FAILED",{status:u,results:c,terminalResult:l,failureRecoveryAttempts:i.state.failureRecoveryAttempts}}function e8({tracer:t,work:e,controller:r,storage:n,logger:o,context:i,status:a}){let s=r.browser,c=s.retrieveAndClearDebugData(),l=I_(c.logsPerPage);t.attachConsoleLogs({logger:o,logs:l}),a!=="PASSED"&&a!=="SUCCESS"&&(t.attachBrowserCrashDump({crashReportDirFetcher:()=>s.browserCrashDumpDir,logger:o}),e.asyncTasks.push((async()=>{try{let u=await s.screenshot({quality:75}),d=await ZD({codePath:"test-complete-final",storage:n,screenshotBuff:u,logger:o}),p=await X(s.html(),{milliseconds:2e3});i.setVariable(Y0,d),o.debug({finalPageHtml:p.slice(0,1e4)},"Final page state HTML"),o.debug({finalScreenshotUrl:d},"Uploaded final screenshot URL")}catch{}})()))}import{z as sa}from"zod";var Ph=sa.object({fromStepId:sa.string(),parentStepIdChain:sa.array(sa.string())}),Mh=sa.object({toStepId:sa.string(),parentStepIdChain:sa.array(sa.string())});async function Oh({settings:t,customHeaders:e,envVariables:r,envName:n,testName:o,baseUrl:i,logger:a,localTools:s,orgId:c}){let l=Xs.parse(t);e&&(l.extraHeaders={...l.extraHeaders,...e});let u=new Br({baseUrl:i,envName:n,testName:o,variablesFromEnvironment:r,currentUrl:i});await ug({obj:l,context:u,bannedKeys:[],allowList:nC,localTools:s,logger:a,orgId:c});try{return Xs.parse(l)}catch(d){throw new M("UserConfigurationError",`The templated browser settings configured by the user are invalid: ${d.message}`)}}async function Q0({orgId:t,testName:e,envName:r,baseEnvVariables:n,parameters:o,logger:i,localTools:a}){if(!o||o.length===0)return{...n};let s={...n};return await Promise.all(o.map(async c=>{let l=await $r({orgId:t,s:c.defaultValue,context:Br.dummyContext(e,r,s),logger:i,localTools:a});s[c.name]=l})),s}import{cloneDeep as i8}from"lodash-es";import{cloneDeep as t8}from"lodash-es";var r8={showOverlay:!1},Lh=class{sessions=new Map;sessionCountByIp=new Map;getCurrentConnectionsByIp(e){return this.sessionCountByIp.get(e)??0}getCurrentSessionsByIp(){return Object.fromEntries(this.sessionCountByIp)}reserveCapacityByIp(e){e&&this.sessionCountByIp.set(e,(this.sessionCountByIp.get(e)??0)+1)}releaseCapacityByIp(e){e&&this.sessionCountByIp.set(e,Math.max(this.getCurrentConnectionsByIp(e)-1,0))}registerSession({controller:e,context:r,cleanup:n,clientIp:o,sessionId:i,socket:a}){return this.sessions.set(i,{controller:e,context:r,cleanup:n,clientIp:o,browserBehavior:t8(r8),socket:a}),i}removeSession(e,r){(async()=>{let o=this.sessions.get(e);if(!o)return;this.releaseCapacityByIp(o.clientIp);let{controller:i}=o;try{i.setClosed(),await i.browser.cleanup()}catch(a){r.error({err:a},"Error cleaning up browser in global state manager")}try{await o.cleanup?.()}catch(a){r.error({err:a},"Error running cleanup function in global state manager")}this.sessions.delete(e)})()}getSession(e){return this.sessions.get(e)}};function ek(t,e,r,n){let o=Date.now(),i=Date.now(),a,s,c,l,u=!1,d=async(g,f)=>{if(!g.closed&&!g.isInPageLoad)try{let S=c;c=void 0;let b=g.url(),y=f.toEditorDisplayCopy();JSON.stringify(y)===JSON.stringify(a)&&b===l&&o>i||(t.emit("browserState",{logsPerPage:S?.logsPerPage,viewport:g.getViewport(),url:b,iframeSrcUrls:s??[],context:y,isInPageLoad:g.isInPageLoad}),o=Date.now()),l=b,a=y}catch(S){if(!t.connected)return;let b=S instanceof Error?S.message:`${S}`;if(b.includes("Frame was detached")||b.includes("Not attached to an active page")||b.includes("browser has been closed")||b.includes("UserInfrastructureError"))return;r.error({err:S,sessionId:e},"Error grabbing browser state")}},p=setInterval(()=>{let g=n.getSession(e),f=g?.controller?.browser;if(!f||f.closed){r.debug("Clearing browser state socket cron due to the browser being closed"),clearInterval(p);return}d(f,g.context)},1e3),m=(g,f)=>!!(JSON.stringify(g)!==JSON.stringify(s)||f.logsPerPage.some(S=>S.length>0)),h=setInterval(async()=>{let f=n.getSession(e)?.controller?.browser;if(!f||f.closed){clearInterval(h);return}else if(u)return;u=!0;try{let S=await f.getAllFrameUrls(),b=f.retrieveAndClearDebugData();m(S,b)&&(s=S,c=b,i=Date.now())}catch(S){r.warn({err:S},"Failed to fetch extended details")}finally{u=!1}},2500);return{timers:[p,h]}}async function oc({controller:t,context:e,baseUrl:r,envName:n,testName:o,environmentVariables:i}){await t.browser.reset({newUrl:r});let a=t.browser.baseUrl,s=t.browser.url();return e.reset({baseUrl:a,currentUrl:s,variablesFromEnvironment:i,envName:n,testName:o}),{baseUrl:a,currentUrl:s}}var n8=3;async function tk({socket:t,logger:e,storageFactory:r,uploadedFileStorage:n,visualDiffStorageFactory:o,devicePixelRatio:i,generatorFactory:a,enricherFactory:s,authorization:c,settingsFactory:l,getOrgId:u,branchGetter:d,globalE2eStateManager:p}){let m=t.id,h=t.handshake.query.testId;if(!h)throw new Error("Socket connection request is missing testId");let g=await u({type:"e2e",testId:h}),f=await d?.();e=e.child({testId:h,orgId:g,sessionId:m,branch:f});let S=await a(g,e),b=await s(g,e),y=await l(g,e),T=await r(g),{testMetadata:w,baseUrl:P,envName:v,browserConfig:x,aiSettings:O,environmentVariables:L,localCodeEvalTools:N}=await Fo({testId:h,orgId:g,logger:e,storage:T,authorization:c,settings:y}),F=p.getSession(m);if(F)return e.info("Associating connection with existing session (likely reconnect)"),await F.controller.browser.clearAllCdpHighlights(),{type:"e2e",sessionId:m,orgId:g,testId:h};let W=t.handshake.headers["x-forwarded-for"]?.split(",")[0];if(e.info({clientIp:W,event:"connect",args:t.handshake.query},"Websocket event (connect)"),W&&p.getCurrentConnectionsByIp(W)>=n8)throw e.error({clientIp:W,sessions:p.getCurrentSessionsByIp(),...t.handshake.query},"Socket connection browser creation rate limit triggered"),new Error("You have exceeded the maximum number of connections allowed. Momentic limits the number of simultaneously open tabs to uphold browser reliability. Please close duplicate tabs and try again later.");p.reserveCapacityByIp(W);try{await o8({socket:t,baseUrl:P,envName:v,testMetadata:w,orgId:g,sessionId:m,logger:e,environmentVariables:L,clientIp:W,devicePixelRatio:i,storage:T,uploadedFileStorage:n,visualDiffScreenshotStorage:await o(g),localCodeEvalTools:N,generator:S,enricher:b,browserConfig:x,aiSettings:O,globalE2eStateManager:p})}catch(H){throw e.warn({err:H},"Error setting up socket session, possibly due to client closing the connection"),p.releaseCapacityByIp(W),H}return{type:"e2e",sessionId:m,testId:h,orgId:g}}async function o8({socket:t,baseUrl:e,envName:r,devicePixelRatio:n,testMetadata:o,orgId:i,sessionId:a,logger:s,storage:c,uploadedFileStorage:l,visualDiffScreenshotStorage:u,localCodeEvalTools:d,generator:p,environmentVariables:m,browserConfig:h,aiSettings:g,clientIp:f,enricher:S,globalE2eStateManager:b}){let y={viewport:o.advanced?.viewport??Ar,locale:o.advanced?.locale??_i,timezoneId:o.advanced?.timezone??Ii,geolocation:o.advanced?.geolocation??Pi,colorScheme:o.advanced?.colorScheme};n&&(y.deviceScaleFactor=n);let T=o.id,w=await Oh({settings:h,orgId:i,baseUrl:e,envName:r,testName:o.name,localTools:d,envVariables:m,logger:s,customHeaders:void 0});s=s.child({orgId:i,sessionId:a,testId:T});let P=await Fn.init({baseUrl:e,userBrowserSettings:w,enricher:S,storage:c,logger:s,contextArgs:y,iconKnowledgeBase:null,callbacks:{onTabsChange:(N,F)=>{t.emit("tabs",{tabs:N,activeTab:F})},onScreencastFrame:(N,F)=>{let W=t;Pn&&(W=t.compress(!0)),W.emit("screenshot",{buffer:N},()=>{F()})},onSvgsCollected:N=>{t.emit("newIconDetected",{numIcons:N.newSvgs.length}),c.saveNewIcons(N,s)},onNetworkLogs:N=>{t.emit("networkLogs",{harEntries:N})}}});await P.navigate({url:e,initialNavigation:!0});let v=new aa({browser:P,generator:p,logger:s,orgId:i,options:{scratchPadId:void 0,slowMoMs:w.slowMoMs,autoFollowNewTabs:w.autoFollowNewTabs,useMemory:g.useMemory,aiPageFiltering:g.aiPageFiltering},storage:c,localCodeEvalTools:d,uploadedFileStorage:l,visualDiffScreenshotStorage:u}),x=ek(t,a,s,b),O=async()=>{x.timers.forEach(N=>clearInterval(N))},L=new Br({baseUrl:e,testName:o.name,currentUrl:v.browser.url(),variablesFromEnvironment:m,envName:r});if(!t.connected)throw await P.cleanup(),new Error("Socket not connected anymore, not proceeding with session setup");t.emit("session",{url:e,userAgent:Fn.USER_AGENT,viewport:v.browser.getViewport(),sessionId:a}),b.registerSession({controller:v,context:L,sessionId:a,cleanup:O,clientIp:f,socket:t})}async function Fo({testId:t,orgId:e,logger:r,storage:n,authorization:o,settings:i}){let a=await n.fetchTestMetadata(t,r);if(!a)throw new Error(`Test metadata could not found for test ${t}`);let s;o?.type==="API_KEY"&&(s=new xo({httpClient:new hr({...o,logger:r,mode:"interactive"}),fakerSeed:void 0}));let c=a.envs?.find(g=>g.default),l;c&&(l=await n.fetchEnvironment(c.name,r));let u=l&&"browser"in l?l.browser:void 0,d={...i.browser,...u,...a.advanced};d.browserType=Cp({browserType:d.browserType,orgDefaultBrowserType:i.browser?.defaultBrowserType});let p=a.baseUrl||l?.variables?.[nr];if(!p)throw new Error("Base URL is empty in both test options and the configured environment");let m={...l?.variables};m=await Q0({orgId:e,testName:a.name,envName:l?.name,baseEnvVariables:m,parameters:a.parameters,logger:r,localTools:s});let h={...i.ai,...a.advanced};return{localCodeEvalTools:s,baseUrl:p,envName:l?.name,testName:a.name,browserConfig:d,environmentVariables:m,testMetadata:a,aiSettings:h}}var VT=class{parentTracer=null;socket;step;orgId;interactionTracer;skipStatusEvents;constructor({step:e,socket:r,parentTracer:n,orgId:o,skipStatusEvents:i=!1}){this.socket=r,this.parentTracer=n,this.step=e,this.orgId=o,this.skipStatusEvents=i,this.interactionTracer=new pi,di.initializeRootTracerContext(this.interactionTracer)}getParentStepIdChain(){return this.parentTracer?this.parentTracer?.getParentStepIdChain()??[]:[]}recordStepDuration(e){let r=e.step.type!=="PRESET_ACTION"?e.step.type:e.step.command.type;cr.distribution("test_step_duration",e.durationMs,[`type:${r}`,"platform:browser","executor:editor",`orgId:${this.orgId}`])}attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}async finish(e){if(this.interactionTracer.finish(),e.step.trace=this.interactionTracer.getRootSpan(),!this.skipStatusEvents)switch(e.step.status){case"SUCCESS":this.socket.emit("success",{...e,parentStepIdChain:this.getParentStepIdChain()});return;case"FAILED":this.socket.emit("failure",{...e,parentStepIdChain:this.getParentStepIdChain()});return;case"CANCELLED":this.socket.emit("cancelled",{...e,parentStepIdChain:this.getParentStepIdChain()});return}}async startSubSteps(){return new mi({parentStep:this.step,socket:this.socket,parentTracer:this,orgId:this.orgId})}},mi=class{stepFrequenciesByType={};parentTracer;parentStep;socket;orgId;recordStepStat(e){e.type!=="PRESET_ACTION"?this.stepFrequenciesByType[e.type]=(this.stepFrequenciesByType[e.type]||0)+1:this.stepFrequenciesByType[e.command.type]=(this.stepFrequenciesByType[e.command.type]||0)+1}sendFinalizedStepStats(){for(let[e,r]of Object.entries(this.stepFrequenciesByType))cr.increment("test_step_execution",r,[`type:${e}`,"platform:browser","executor:editor",`orgId:${this.orgId}`])}constructor({parentStep:e,socket:r,parentTracer:n,orgId:o}){this.parentTracer=n,this.parentStep=e,this.socket=r,this.orgId=o}async getScreenshot(){throw new Error("getScreenshot is not supported in the editor")}async getHtmlSnapshot(){throw new Error("getHtmlSnapshot is not supported in the editor")}getParentStepIdChain(){return this.parentStep?[...this.parentTracer?.getParentStepIdChain()??[],this.parentStep.id]:[]}async startStep(e){return this.recordStepStat(e.step),e.skipStatusEvents||this.socket.emit("started",{stepId:e.step.id,parentStepIdChain:this.getParentStepIdChain(),attempt:e.attempt}),new VT({step:e.step,parentTracer:this,socket:this.socket,orgId:this.orgId,skipStatusEvents:e.skipStatusEvents})}async finish(){this.sendFinalizedStepStats()}},Nh=class{constructor(e,r,n,o){this.socket=e;this.storage=r;this.orgId=n;this.testId=o}children=[];loggerBindings;setActiveVideo(){}async getScreenshot(){throw new Error("getScreenshot is not supported in the editor")}async getHtmlSnapshot(){throw new Error("getHtmlSnapshot is not supported in the editor")}onNetworkPage(){}onNetworkLogs(){}attachConsoleLogs(){}attachBrowserCrashDump(){}async finish(){this.socket.emit("finished"),await Promise.all(this.children.map(e=>e.finish()))}async startBeforeStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}async startMainStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}async startAfterStepList(){let e=new mi({orgId:this.orgId,parentStep:null,parentTracer:null,socket:this.socket});return this.children.push(e),e}};var $T={currentlyExecutingRequests:{}},a8=t=>async(e,r)=>{let{testId:n,orgId:o}=t.metadata,i=await t.settingsFactory(o,t.logger),a=await t.storageFactory(o),s,c=await Fo({testId:n,orgId:o,logger:t.logger,storage:a,authorization:t.authorization,settings:i}),l=`${n}|${c.baseUrl}`;try{let u=$T.currentlyExecutingRequests[l]??0;$T.currentlyExecutingRequests[l]=u+1,s=await s8({...t,...e,...c,done:r})}finally{t.logger.info({result:s,sessionId:t.metadata.sessionId},"Test execution complete"),$T.currentlyExecutingRequests[l]--}},s8=async({socket:t,steps:e,baseUrl:r,testMetadata:n,reInitialize:o,toStep:i,fromStep:a,storageFactory:s,aiSettings:c,browserConfig:l,metadata:u,logger:d,envName:p,testName:m,environmentVariables:h,localCodeEvalTools:g,done:f,cacheStorageFactory:S,globalE2eStateManager:b})=>{let{testId:y,sessionId:T,orgId:w}=u,P=T,v=b.getSession(T);if(!v)throw new Error("No active session found");let{controller:x,context:O}=v;x.setOpen(),d=d.child({testId:y,orgId:w,sessionId:T,runId:P}),d.info({steps:e.map(Q=>`${Q.type}${"command"in Q?` - ${Q.command.type}`:""}`),toStep:i,fromStep:a,reInitialize:o,envName:p,testName:m,baseUrl:r,truncatedContext:zi({json:O,maxJsonStringSize:1e3}),browserConfig:l,aiSettings:c},"Socket execution parameters");let L=h??{},N=async()=>{o&&await oc({controller:x,context:O,baseUrl:r,envName:p,testName:m,environmentVariables:L})},F=await s(w),W=await S(w),H=async()=>{let Q=Date.now();try{await W.resolveStepCacheEntries({schemaVersion:n.schemaVersion,testId:y,stepLists:{steps:e},logger:d})}catch(ve){d.error({err:ve},"Failed to fetch step cache entries from Momentic server. This can drastically reduce test reliability and performance.")}finally{cr.distribution("cache-resolution",Date.now()-Q,["executor:editor"])}};try{await Uu({promiseGenerator:async()=>Promise.all([N(),H()]),signal:x.executeAbortController.signal,codePath:"resolveStepCacheAndInitBrowser"}),x.setOpen()}catch(Q){if(t.emit("finished"),Q.name!=="AbortError")throw new Error(`Failed to setup browser for execution: ${Q}`)}let de=i8(e),$={collectDebugData:!1,reinitializeBrowser:!1,disableHealing:!0},B={orgId:w,runId:P,testMetadata:n,steps:e,fromStep:a,toStep:i,orgSettings:{ai:c,browser:l}},ae={controller:x,context:O,storage:F,codeEvalTools:g,usageTracker:new al,logger:d},ce={test:{},step:{onDynamicAIActionStatusUpdateEvent:Q=>{t.emit("dynamicCommandStatusUpdate",Q)},onDynamicAIActionEvaluatingEvent:Q=>{t.emit("dynamicCommandEvaluating",Q)},onDynamicCommandGenerated:Q=>{t.emit("dynamicCommandGenerated",Q)},onDynamicCommandExecuted:Q=>{t.emit("dynamicCommandExecuted",Q)}}},_e=new Nh(t,F,w,y),be=await Ih({fixtures:ae,options:$,callbacks:ce,inputs:B,testParams:{tracer:_e}}),se={logger:d,cacheStorage:W,orgId:w,testId:y,originalStepsWithCaches:{steps:de},updatedStepsWithCaches:{steps:e}};return be?.status==="PASSED"?await Rl(se):be?.status==="FAILED"&&await Cl(se),await _e.finish(),f?.(be),be.status};var rk={event:"execute",createHandler:a8};import{randomUUID as l8}from"crypto";var c8=({metadata:t,logger:e,storageFactory:r,globalE2eStateManager:n})=>{let{sessionId:o,orgId:i}=t;return async(a,s)=>{let{description:c,command:l,testMetadata:u,returnScreenshot:d}=a;e.info({params:a},`Locate handler called - ${c}`);let p=n.getSession(o);if(!p)throw new Error("No active session found");let{controller:m,context:h}=p;m.setOpen();let g=await r(i),f=ka.parse(u.advanced??{}),S={},b;if(c){if("useSelector"in l&&l.useSelector)try{let y=await m.locateElementWithSelector(c,"iframeUrl"in l?l.iframeUrl:void 0);b=y.resolution.locator,S={target:y.target,thoughts:y.thoughts}}catch(y){e.warn({err:y},"Failed resolving target with selector"),s({err:`Failed locating element: ${y.message}`,decisions:y instanceof Tn?y.decisions:void 0});return}else try{let y=await m.locateElement({description:c,disableCache:f.disableAICaching??!1,skipWait:!0,testContext:h,source:Ma(l),iframeUrl:"iframeUrl"in l?l.iframeUrl:void 0,memory:"cache"in l&&l.cache&&"target"in l.cache&&ep(l.cache.target.memory)?l.cache.target.memory:void 0,logger:e});S={target:y.target,thoughts:y.thoughts},b=y.resolution.locator}catch(y){(async()=>{try{let T=await m.browser.getCondensedHtml({skipWait:!0});e.warn({err:y,html:T.slice(0,1e5)},"Failed locating element with AI")}catch(T){e.warn({err:T},"Failed grabbing HTML after trying to locate element with AI")}})(),s({err:`${y.message}`});return}if(l.type==="SELECT_OPTION"&&b)try{S.options=await m.browser.getSelectOptions(b)}catch(y){e.warn({err:y},"Failed getting select options"),s({err:`Failed getting select options: ${y.message}`});return}e.info({result:S},"Locate handler result")}if(d)try{let{buffer:y,width:T,height:w}=await m.screenshotWithDimensions({clearHighlights:!0,locator:b}),P=l8(),{universalHandle:v,appServerUrl:x}=await g.createOnDemandScreenshot(P,y,"image/jpeg");S.screenshot={data:v,width:T,height:w},e.info({width:T,height:w,appServerUrl:x,universalHandle:v},"Captured screenshot during locate")}catch(y){e.error({err:y},"Error capturing screenshot during locate"),s({err:`Error taking screenshot: ${y.message}`});return}if(s({result:S}),b)try{await Promise.all([m.browser.scrollIntoViewIfNeeded(b),m.browser.highlight(b)])}catch(y){e.warn({err:y},"Error highlighting element, continuing...")}}},nk={event:"locate",createHandler:c8};var u8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({event:o,percentX:i,percentY:a})=>{let s=r.getSession(n);if(!s)throw new Error("No active session found");let c=s.controller.browser;if(c.closed||c.getActivePage().isClosed()){e.warn("Ignoring mouse move because the browser is closed");return}try{await c.clickMouseFromPositionPercentages(o,i,a)}catch(l){e.error({err:l},"Error performing click during cloud recording in control mode")}}},ok={event:"mouseClickEvent",createHandler:u8};var d8=({metadata:t,generatorFactory:e,logger:r,socket:n,globalE2eStateManager:o})=>{let{sessionId:i,orgId:a,testId:s}=t;return async({stepId:c,parentStepIdChain:l,attribute:u})=>{let d=o.getSession(i);if(!d)throw new Error("No active session found");let{controller:p}=d,m=await e(a,r);p.setOpen(),d.browserBehavior.showOverlay=!0;let h=new AbortController;h.signal.addEventListener("abort",async()=>{try{d.browserBehavior.showOverlay=!1,await p.stopRecordMode()}catch(S){r.warn({err:S},"Failed to stop record mode in target click socket handler")}},{once:!0});let g=!1,f=(S,b)=>{b.type!=="PRESET_ACTION"||b.command.type!=="CLICK"||(n.emit("targetRecordingUpdate",{type:S,stepId:c,parentStepIdChain:l,command:b.command,attribute:u}),h.abort(),g=!0)};setTimeout(()=>{g||(h.abort(),n.emit("targetRecordingUpdate",{type:"error",err:"Timed out waiting for click event",stepId:c,parentStepIdChain:l,attribute:u}))},1e4),await p.startRecordMode({params:{generator:m,logger:r,testId:s,orgId:a,callbacks:{onActionReceived:S=>f("clickReceived",S),onStepRecorded:S=>f("descriptionGenerated",S)}},abortController:h,isClickToRecord:!0}),n.emit("targetRecordingUpdate",{type:"listenersInitialized",stepId:c,parentStepIdChain:l,attribute:u})}},ik={event:"recordTargetClick",createHandler:d8};var p8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({key:o})=>{let i=r.getSession(n);if(!i)throw new Error("No active session found");if(o==="Dead")return;let{controller:a}=i;if(a.browser.closed||a.browser.getActivePage().isClosed()){e.debug({sessionId:n},"Browser is closed, ignoring keyboard press socket event");return}try{a.setOpen(),await a.browser.keyDown(o,{})}catch(s){if(s.message.includes("has been closed")){e.debug({sessionId:n,err:s},"Browser is closed, ignoring key down socket event error");return}throw s}}},ak={event:"keyDownEvent",createHandler:p8};var m8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async({key:o})=>{let i=r.getSession(n);if(!i)throw new Error("No active session found");if(o==="Dead")return;let{controller:a}=i;if(a.browser.closed||a.browser.getActivePage().isClosed()){e.debug({sessionId:n},"Browser is closed, ignoring keyboard press socket event");return}try{a.setOpen(),await a.browser.keyUp(o,{})}catch(s){if(s.message.includes("has been closed")){e.debug({sessionId:n,err:s},"Browser is closed, ignoring key up socket event error");return}throw s}}},sk={event:"keyUpEvent",createHandler:m8};var g8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t,o,i=0,a=(l,u)=>{let d=async()=>{o=void 0};clearTimeout(o),o=setTimeout(d,Math.min(1e3,250*(i+1)))},s,c=0;return async l=>{let u=r.getSession(n);if(!u)throw new Error("No active session found");let{controller:d,browserBehavior:p}=u,m=d.browser;if(m.closed||m.getActivePage().isClosed()){e.warn("Ignoring mouse move because the page is closed");return}if(l.event==="scroll"){let h=await m.scrollFromPositionPercentages(l.percentX,l.percentY,s?.x??0,s?.y??0),g=u.browserBehavior.recordingState?.transformer;g&&h&&g.recordScroll(h);return}p.showOverlay&&a(m,l);try{let h=await m.moveMouseFromPositionPercentages(l.percentX,l.percentY);c=0,s=h}catch(h){c++,c%5===0&&e.warn({err:h,mouseErrors:c},"Error in socket mouse move handler")}}},lk={event:"mouseMoveEvent",createHandler:g8};var h8=({metadata:t,generatorFactory:e,socket:r,logger:n,globalE2eStateManager:o})=>{let{sessionId:i,orgId:a,testId:s}=t;return async({stepId:c})=>{let l=o.getSession(i);if(!l)throw new Error("No active session found");let{controller:u,browserBehavior:d}=l,p=await e(a,n);n.info("Starting cloud recording");let m=new AbortController,h=await u.startRecordMode({params:{generator:p,logger:n,testId:s,orgId:a,callbacks:{onActionReceived:(g,f)=>{r.emit("stepRecorded",{stepId:c,step:g,offset:f})},onStepRecorded:(g,f)=>{r.emit("stepRecorded",{stepId:c,step:g,offset:f})}}},abortController:m,isClickToRecord:!1});d.recordingState={transformer:h}}},ck={event:"recordingStart",createHandler:h8};var f8=({metadata:t,logger:e,globalE2eStateManager:r})=>{let{sessionId:n}=t;return async()=>{let o=r.getSession(n);if(!o)throw new Error("No active session found");e.info("Stopping cloud recording"),await o.controller.stopRecordMode(),o.browserBehavior.recordingState=void 0,o.browserBehavior.showOverlay=!1}},uk={event:"recordingStop",createHandler:f8};var S8=({socket:t,metadata:e,logger:r,storageFactory:n,authorization:o,settingsFactory:i,globalE2eStateManager:a})=>async(s,c)=>{let{testId:l,sessionId:u,orgId:d}=e;r.info({testId:l,sessionId:u},"Refresh event received");let p=await i(d,r),m=await n(d),{baseUrl:h}=await Fo({testId:l,orgId:d,logger:r,storage:m,authorization:o,settings:p}),g=a.getSession(u);if(!g){t.emit("error",{message:"No session to refresh"});return}let{controller:f}=g;f.setOpen(),await f.browser.refresh();let S=f.browser.getViewport();r.info({baseUrl:h,viewport:S},`Session refreshed for test ${l} at ${h}`),c()},dk={event:"refresh",createHandler:S8};var y8=({socket:t,metadata:e,logger:r,storageFactory:n,authorization:o,settingsFactory:i,globalE2eStateManager:a})=>async()=>{let{testId:s,sessionId:c,orgId:l}=e;r.info({testId:s,sessionId:c},"Reset event received");let u=await i(l,r),d=await n(l),{baseUrl:p,envName:m,testName:h,environmentVariables:g}=await Fo({testId:s,orgId:l,logger:r,storage:d,authorization:o,settings:u}),f=a.getSession(c);if(!f){t.emit("error",{message:"No session to reset"});return}let{controller:S,context:b}=f,{baseUrl:y}=await oc({controller:S,context:b,baseUrl:p,envName:m,testName:h,environmentVariables:g}),T=S.browser.getViewport(),w=Fn.USER_AGENT;r.info({baseUrl:p,viewport:T},`Session reset for test ${s} at ${y}`),t.emit("session",{url:y,userAgent:w,viewport:T,sessionId:c})},pk={event:"reset",createHandler:y8};var b8=({metadata:t,globalE2eStateManager:e})=>{let{sessionId:r}=t;return async({url:n})=>{let o=e.getSession(r);if(!o)throw new Error("No active session found");await o.controller.browser.switchToPage({type:"SUBSTRING",substring:n})}},mk={event:"switchTab",createHandler:b8};async function gk(t){return tk(t)}var hk=[JP,rk,nk,pk,dk,KP,mk,ik,ck,uk,lk,ok,ak,sk,XP,YP];var fk=t=>{let{logger:e}=t,r=new E8(t.baseServer,{cors:{origin:"*",methods:["GET","POST"]},pingTimeout:15*60*1e3,pingInterval:15*60*1e3,maxHttpBufferSize:1e7,perMessageDeflate:!0});return r.on("connection",async n=>{let o;try{e.info({event:"connection",transport:n.conn.transport.name},"Websocket connection established"),o=await gk({...t,socket:n,logger:e}),e=e.child(o)}catch(i){e.error({event:"connection",type:"websocket",err:i},"Failed to setup connection"),n.emit("error",{message:i instanceof Error?i.message:`${i}`}),n.disconnect(!0);return}hk.forEach(i=>T8(i,{...t,socket:n,metadata:o,logger:e}))}),r},T8=(t,e)=>{let r=t.createHandler(e),n=(...o)=>{["mouseMoveEvent","keyDownEvent","keyUpEvent","mouseClickEvent"].includes(t.event)||e.logger.debug({...e.metadata,event:t.event},`Websocket event (${t.event})`);let i=a=>{e.logger.error({event:t.event,type:"websocket",err:a instanceof Error?a:new Error(`${a}`)},"Unhandled exception in socket handler"),e.socket.emit("error",{message:a instanceof Error?a.message:`${a}`})};try{let a=r.apply(void 0,o);a&&typeof a.catch=="function"&&a.catch(i)}catch(a){i(a)}};e.socket.on(t.event,n)};import{Router as w8}from"express";import{Router as A8}from"express";import Cd from"fs";import Rd from"path";import{v4 as R8}from"uuid";import C8 from"yaml";import{hostname as v8}from"os";var Ad="2.45.3",lt=hl({app:"desktop-server",hostname:v8(),disableConsoleLogs:!0}).child({cliVersion:Ad});(async()=>{try{let t=await si(lt);t.gitBranchName&&lt.addBinding("branch",t.gitBranchName)}catch{}})();var fs=A8();async function Dh(t){return(await km(t,lt)).map(n=>{let o=t.modules[n.moduleId];if(!o){A.warn(`Found a dangling module with ID ${n.moduleId} that could not be found on disk.`);return}return{...o,content:n}}).filter(n=>n!==void 0)}fs.get("/",Fe(async(t,e)=>{let r=Se(),n=await le(r),o=await Dh(n);e.status(200).json(o)}));fs.get("/tests-join",Fe(async(t,e)=>{let r=Se(),n=await le(r),o=await Dh(n),i={};for(let s of o)i[s.id]={...s,tests:[]};let a=await Promise.all(Object.values(n.tests).map(async s=>({id:s.id,name:s.name,relativePath:s.relativePath,test:await ft(s.fullFilePath,lt,n)})));for(let{id:s,name:c,relativePath:l,test:u}of a){let d=new Set,p=[u.steps,u.beforeSteps,u.afterSteps];for(let m of p)Mn({steps:m??[],onPresetAction:()=>{},onConditional:()=>{},onSimpleStepContainer:h=>{Qf(h)&&d.add(h.moduleId)}});for(let m of d){let h=i[m];h&&h.tests.push({id:s,name:c,relativePath:l})}}e.status(200).json(i)}));fs.post("/",Fe(async(t,e)=>{let r;try{r=Lw.parse(t.body)}catch(s){e.status(400).json({error:`Invalid request body: ${s}`});return}try{wi(r.name)}catch(s){e.status(400).json({error:`Invalid module name: ${s}`});return}let n=Se(),o=(await le(n)).modules;if(Object.values(o).find(s=>s.name===r.name)){e.status(400).send(`A module with the name "${r.name}" already exists. Please choose a different name.`);return}let i=Rd.join(n.rootDir,r.folderPath??"");if(!Cd.existsSync(i)||!Cd.statSync(i).isDirectory()){e.status(400).json({error:`The folder configured for module creation '${i}' does not exist.`});return}let a=await Dm({...r,folder:i,project:n});e.status(201).json(a)}));fs.get("/:moduleId",Fe(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r=await le(Se()),n=r.modules[t.params.moduleId];if(!n){e.status(404).json({error:"Module not found."});return}try{let o=await Qn(n,r,A);e.json(o)}catch(o){e.status(400).json({err:o})}}));fs.post("/:moduleId/duplicate",Fe(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r;try{r=Ow.parse(t.body)}catch(g){e.status(400).json({error:`Invalid request body: ${g}`});return}try{wi(r.name)}catch(g){e.status(400).json({error:g.message});return}let n=Se(),o=await le(n),i=o.modules[t.params.moduleId];if(!i){e.status(404).json({error:"Module not found."});return}if(Object.values(o.modules).find(g=>g.name===r.name)){e.status(400).send(`A module with the name "${r.name}" already exists. Please choose a different name.`);return}let a=await Qn(i,o,A),s=Rd.join(n.rootDir,Rd.dirname(i.relativePath));if(!Cd.existsSync(s)||!Cd.statSync(s).isDirectory()){e.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let c=at(r.name),l=Rd.join(s,`${c}.module.yaml`),u=R8(),{stepsToSave:d}=await Pt({stepLists:{steps:a.steps},createNewCacheIds:!0,cacheCreationParams:{orgId:Ht()}}),p={fileType:De.MODULE,schemaVersion:Ze,moduleId:u,name:r.name,description:"",enabled:!0,steps:d.steps,parameters:a.parameters,defaultParameters:a.defaultParameters,parameterEnums:a.parameterEnums,defaultCacheKey:a.defaultCacheKey,defaultCacheTtl:a.defaultCacheTtl,defaultCacheAllInvocations:a.defaultCacheAllInvocations,autoAuth:a.autoAuth,advanced:a.advanced},m=C8.stringify(p);Cd.writeFileSync(l,m,"utf-8");let h={relativeFilePath:Rd.relative(n.rootDir,l)};e.status(201).json(h)}));fs.patch("/:moduleId/metadata",Fe(async(t,e)=>{if(!t.params.moduleId){e.status(400).json({error:"Missing moduleId in url path."});return}let r;try{r=Nw.parse(t.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let n=Se(),o=await le(n);NI({moduleId:t.params.moduleId,content:r,momenticFiles:o,logger:A,project:n}),e.status(201).json({message:"ok"})}));var Sk=fs;var yk=w8();yk.get("/",Fe(async(t,e)=>{let r=Se(),n=await le(r),o=new Set;n?.tests&&Object.values(n.tests).forEach(l=>{l.labels?.forEach(u=>o.add(u))});let i=Array.from(o).sort(),a=Object.values(n.tests),s=await Dh(n),c={labels:i,tests:a,modules:s};e.status(200).json(c)}));var bk=yk;import{Router as x8}from"express";var WT=x8();WT.get("/",Fe((t,e)=>{let r=Um(Se(),lt);e.status(200).json(r)}));WT.get("/names",Fe((t,e)=>{let n=Se().config.environments?.map(o=>o.name)??[];e.status(200).json(n)}));var Ek=WT;import{Router as _8}from"express";var Tk=_8();Tk.get("/",Fe((t,e)=>{let r={userId:Io(),orgId:Ht(),cliVersion:Ad??"0.0.0"};e.status(200).json(r)}));var vk=Tk;import{StreamableHTTPServerTransport as rZ}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as nZ}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as oZ}from"crypto";import{Router as iZ}from"express";import{McpServer as Q9}from"@modelcontextprotocol/sdk/server/mcp.js";import{SSEServerTransport as eZ}from"@modelcontextprotocol/sdk/server/sse.js";import{StdioServerTransport as tZ}from"@modelcontextprotocol/sdk/server/stdio.js";import{streamObject as F8}from"ai";import $h from"dedent";import B8 from"path";import{z as ca}from"zod";import{tool as I8}from"ai";import{z as P8}from"zod";var Ak=(t,e)=>({builder:n=>I8({description:t.schema.description,inputSchema:P8.object(t.schema.inputSchema),execute:async o=>{let i=e(n);n.logger.info({input:o},`Executing tool ${t.schema.name}`);try{await t.handle(n,o,i,void 0)}catch(s){i.addError(String(s))}let a=await i.serialize();return a.isError?n.logger.error({toolName:t.schema.name,input:o,err:a.content.map(s=>"text"in s?s.text:"").join(`
4641
4641
  `)},"Tool execution resulted in error"):n.logger.info({toolName:t.schema.name,input:o},"Tool execution completed"),a}}),tool:t});import M8 from"path";function Rk(t){return t.map(e=>{switch(e.type){case"text":return e;case"media":return{type:"image",data:e.data,mimeType:e.mediaType};default:return(n=>{throw"If Typescript complains about the line below, you missed a case or break in the switch above"})(e)}})}function Ck(t,e){return e?[{type:"text",text:`<${e}>`},...t,{type:"text",text:`</${e}>`}]:t}function fe({text:t,xmlTag:e}){return Ck([{type:"text",text:t}],e)}function O8({imageDataUri:t,xmlTag:e}){return Ck([{type:"media",data:t,mediaType:"image/jpeg"}],e)}function it(t){if(t.length===0)throw new At("No content parts provided to construct the tool response content.");return{type:"content",value:t}}async function qr(t,e){let r=t.getActivePage(),n=await t.getBrowserState({skipWait:!1}),o=["### Page state",`- Page URL: ${r.url()}`,`- Page Title: ${await r.title()}`,"- Page Snapshot:","```xml",n.serialize(),"```"].join(`
4642
4642
  `);return e!==void 0&&We(o)>e?fe({text:["### Page state",`- Page URL: ${r.url()}`,`- Page Title: ${await r.title()}`,"- Page Snapshot:","<WARNING>","The page state was too long and we had to truncate the page state.","</WARNING>"].join(`
4643
4643
  `),xmlTag:"PageState"}):fe({text:o,xmlTag:"PageState"})}async function qT(t){let r=(await t.screenshot({retries:2})).toString("base64");return O8({imageDataUri:r,xmlTag:"Screenshot"})}async function L8(t,e,r){let n=await le(t),o=await ft(M8.join(t.rootDir,e),r,n);try{let a=new dt({baseUrl:ar(),apiKey:tn(),logger:r}),s=await _r(r,a,t),c=_o({logger:r,orgId:Ht(),client:a,gitMetadata:s,regenerateCache:!1,alwaysSaveCache:!1,noCache:!1,bustOldestCachePercentage:void 0}),{steps:l,beforeSteps:u,afterSteps:d}=await Tm({cacheStorage:c,logger:r,schemaVersion:o.schemaVersion,stepLists:{steps:o.steps,beforeSteps:o.beforeSteps,afterSteps:o.afterSteps},testId:o.id});o.beforeSteps=u,o.steps=l,o.afterSteps=d}catch(a){r.error({err:a},"Failed to resolve step cache entries for agent test view")}let i=[];return i.push("### Test"),i.push(`Name: ${o.name}`),o.description&&i.push(`Description: ${o.description}`),i.push(""),o.beforeSteps&&o.beforeSteps.length>0&&(i.push(Nm(o.beforeSteps,"Setup Steps")),i.push("")),i.push(Nm(o.steps,"Main Steps")),o.afterSteps&&o.afterSteps.length>0&&(i.push(""),i.push(Nm(o.afterSteps,"Teardown Steps"))),fe({text:i.join(`
@@ -5072,7 +5072,7 @@ Running tool ${d.toolName} with input ${JSON.stringify(d.input)}
5072
5072
  ${l}`)];return e.getMcpCopilotConversationEvaluation({messagesAndToolCalls:c},{logger:r})}var X9=Xt({schema:{name:xd,description:IU(),inputSchema:{selector:xi,message:pa.string().describe("A single block of natural-language instructions describing the desired edits to the test. The test can also be edited to add modules, edit modules, or create new modules inside of the test. Can only be used to modify steps (including module steps) inside of the passed in test.")}},handle:async(t,e,r,n)=>{let{project:o,logger:i}=t,a=n?.signal;if(!a){r.addError(`No response handler available: client abort signal is required for ${xd}`);return}let s=tn(),c=ar(),l=new wo(o.config.ai?.agentConfig,{baseUrl:c,apiKey:s,logger:i,mode:"interactive"}),u={completed:0,total:hv},{hooks:d,notificationAbortController:p,getAccumulatedText:m}=G9(n,i,u,r),h=PU(n);h&&await Sv(n,u,"Validating if your edits requests are valid...",i,p,r);let g=await l.getLintMcpCopilotMessageResult({message:e.message},{logger:i});if(g.category!=="NONE"){r.addError(`${g.thoughts}
5073
5073
 
5074
5074
  Category: ${g.category}`);return}let f,S;try{({entity:f,momenticFiles:S}=await rn(o,e.selector,"test"))}catch(F){r.addError(String(F));return}let b=await ft(f.fullFilePath,i,S),y=i.child({applicationName:"momentic-mcp-copilot",testId:f.id}),T=af({testPath:f.relativePath,messages:[{role:"user",content:e.message}],logger:y,session:{...await Kh({logger:y,project:o,entity:f,resolvedTest:b}),socket:void 0},sessionId:n?.sessionId,hooks:d,saveChangesToDisk:t.saveChangesToDisk}),{signal:w,release:P}=await _U.startOrReplace(f.id,a),v=j9(T);try{await v.text}catch(F){if(w.aborted)i.debug("AI stream was cancelled, returning partial output"),r.addPartFromText(JSON.stringify({aborted:String(F),partialOutput:m()},null,2));else throw F}finally{P()}let x=await ft(f.fullFilePath,i,S),O=await vI(b,x),L=m().split(`
5075
- `).map(F=>F.trim()).filter(F=>F.length>0);h&&await Sv(n,{completed:u.total,total:u.total},"Evaluating edits and generating edit status...",i,p,r);let N=await Y9(L,l,i);r.addPartFromText(JSON.stringify({additions:O.additions,deletions:O.deletions,summarization:N},null,2))}}),J9=pa.union([Gc,bp]),MU=Xt({schema:{name:Bk,description:"Execute a step without adding it to the test.",inputSchema:{sessionId:pa.string(),step:J9}},handle:async(t,e,r,n)=>{let{sessionId:o,step:i}=e,a=bs(r,o);if(!a)return;a.controller.setOpen();let s=await rf({step:i,logger:t.logger,storage:a.storage,controller:a.controller,codeEvalTools:a.codeEvalTools,orgId:a.orgId,testContext:a.context});r.addContentParts(s)}}),OU=Xt({schema:{name:Ok,description:"Splice steps in the test bound to an active session. Supports inserting, deleting, or replacing steps by index.",inputSchema:{sessionId:pa.string(),startIndex:pa.number(),deleteCount:pa.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:PR.array(),targetSection:Pa.default("main"),returnTest:pa.boolean().default(!1).describe("Whether or not you want to see the full test after the splice is complete")}},handle:async(t,e,r,n)=>{let o=bs(r,e.sessionId);if(!o)return;let i;try{({entity:i}=await rn(t.project,{id:o.testId},"test"))}catch(c){r.addError(String(c));return}let s=(await nf({project:t.project,logger:t.logger,testPath:i.relativePath,saveChangesToDisk:t.saveChangesToDisk,params:{startIndex:e.startIndex,deleteCount:e.deleteCount,steps:e.steps,targetSection:e.targetSection,returnTest:e.returnTest}})).value.map(c=>c.type==="media"?{type:"media",data:c.data,mediaType:"image/jpeg"}:c);r.addContentParts(s)}}),LU=Xt({schema:{name:Lk,description:"Run one or more steps from the test bound to an active session. Use stepId and parentStepIdChain when running to/from specific steps.",inputSchema:{sessionId:pa.string(),fromStep:Ph,toStep:Mh.optional(),targetSection:Pa.default("main")}},handle:async(t,e,r,n)=>{let o=bs(r,e.sessionId);if(!o)return;o.controller.setOpen();let i;try{({entity:i}=await rn(t.project,{id:o.testId},"test"))}catch(c){r.addError(String(c));return}let s=(await of({project:t.project,logger:t.logger,testPath:i.relativePath,storage:o.storage,controller:o.controller,codeEvalTools:o.codeEvalTools,orgId:o.orgId,testContext:o.context,params:{fromStep:e.fromStep,toStep:e.toStep,targetSection:e.targetSection}})).value.map(c=>c.type==="media"?{type:"media",data:c.data,mediaType:"image/jpeg"}:c);r.addContentParts(s)}}),NU=[$9,V9,W9,X9];var DU=[jk,Gk,Vk,$k,MU,LU,OU];var Z9=Xt({schema:{name:Nk,description:"List environments defined in the project's momentic.config.yaml file.",inputSchema:{}},handle:async(t,e,r,n)=>{let{project:o,logger:i}=t,a=Um(o,i);r.addPartFromText(JSON.stringify({environments:a},null,2))}}),kU=[Z9];var UU=[...kU,...NU,...Wh,...DU];function sf(t,e){let r=new Q9({name:e.applicationName,version:e.cliVersion},{capabilities:{logging:{},tools:{}}});for(let n of UU)n.addToolToMcpServer(t,r);return r}async function FU(t,e,r,n){let o=new eZ(r,e,n);return await t.connect(o),{close:async()=>{try{await t.close()}catch{}},transport:o}}async function yv({project:t,logger:e,apiKey:r,serverUrl:n,cliVersion:o,applicationName:i="momentic-mcp-stdio-server"}){sg(n),await lg(r);let a={applicationName:i,cliVersion:o??"0.0.0"},s=e.child({orgId:Ht(),userId:Io(),...a}),l=sf({project:t,logger:s,saveChangesToDisk:!0},a),u=new tZ;return await l.connect(u),{server:l,transport:u}}var bv="mcp-session-id",aZ="sessionId",dc=iZ(),Hd=new Map;function BU(){let t={applicationName:"momentic-mcp-desktop-server",cliVersion:Ad??"0.0.0"},e=Se(),r=lt.child({orgId:Ht(),userId:Io(),...t});return{context:{project:e,logger:r,saveChangesToDisk:!0},info:t}}dc.get("/sse",async(t,e)=>{let{context:r,info:n}=BU(),o=sf(r,n),{transport:i}=await FU(o,e,"/api/mcp/sse",{enableDnsRebindingProtection:!1}),a=i.sessionId,s={transport:i,close:async()=>{Hd.delete(a);try{await o.close()}catch(c){r.logger.warn({err:c},"Failed to close MCP server on SSE session cleanup")}}};Hd.set(a,s),i.onclose=()=>{let c=Hd.get(a);c&&c.close()}});dc.post("/sse",async(t,e)=>{let r=String(t.query[aZ]??"");if(!r||!Hd.has(r)){e.status(400).send("Invalid or missing sessionId");return}await Hd.get(r).transport.handlePostMessage(t,e,t.body)});var zU=dc,hi={};dc.post("/",async(t,e)=>{let r=String(t.headers[bv]??"");try{if(r&&hi[r]){await hi[r].handleRequest(t,e,t.body);return}if(!r&&nZ(t.body)){let{context:n,info:o}=BU(),i=sf(n,o),a=new rZ({sessionIdGenerator:()=>oZ(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{hi[s]=a}});a.onclose=()=>{let s=a.sessionId;s&&hi[s]&&delete hi[s],i.close().catch(()=>{})},await i.connect(a),await a.handleRequest(t,e,t.body);return}e.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null})}catch{e.headersSent||e.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}});dc.get("/",async(t,e)=>{let r=String(t.headers[bv]??"");if(!r||!hi[r]){e.status(400).send("Invalid or missing session ID");return}await hi[r].handleRequest(t,e)});dc.delete("/",async(t,e)=>{let r=String(t.headers[bv]??"");if(!r||!hi[r]){e.status(400).send("Invalid or missing session ID");return}let n=hi[r];try{await n.handleRequest(t,e)}catch{e.headersSent||e.status(500).send("Error processing session termination")}});import{Router as sZ}from"express";var HU=sZ();HU.get("/:id",Be(async(t,e)=>{let{id:r}=t.params;if(!r){e.status(400).json({error:"Missing ID"});return}let n=Fl();if(!n){e.status(500).json({error:"API client not initialized"});return}try{let{data:o,contentType:i}=await n.fetchOnDemandScreenshot(r);e.setHeader("Content-Type",i),e.status(200).send(o)}catch(o){lt.error({err:o,screenshotId:r},"Failed to proxy on-demand screenshot"),e.status(404).json({error:"Screenshot not found"})}}));var jU=HU;import{Router as lZ}from"express";var lf=lZ();lf.get("/",Be(async(t,e)=>{let r=(await ub()).map(n=>({name:n.config.name,configFilePath:n.configFilePath}));e.status(200).json(r)}));lf.get("/current",Be((t,e)=>{let r=Se();if(!r){e.status(404).json({error:"No project found."});return}let n={name:r.config.name,configFilePath:r.configFilePath};e.status(200).json(n)}));lf.post("/set",Be(async(t,e)=>{let r;try{r=kw.parse(t.body)}catch(n){e.status(400).json({error:`Invalid request body: ${n}`});return}lt.info("Setting local project");try{let n=await Dt({configFilePath:r.configFilePath});cg(n,o=>Dt({configFilePath:o}))}catch(n){e.status(400).json({error:`Error setting project: ${n}`});return}e.sendStatus(204)}));var GU=lf;import{Router as cZ}from"express";var VU=cZ();VU.get("/",Be((t,e)=>{let r=Se(),n={ai:r.config.ai,browser:r.config.browser,displayRoot:r.config.displayRoot};e.status(200).json(n)}));var $U=VU;import{streamText as uZ}from"ai";import{Router as dZ}from"express";import cf from"fs";import pc from"path";import{v4 as pZ}from"uuid";import mZ from"yaml";var jd=new Cg({platform:"local_app"},{flushAt:1,flushInterval:0});var fi=dZ();fi.post("/",Be(async(t,e)=>{let r;try{r=Pw.parse(t.body)}catch(n){e.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=Se(),o=await Yh({project:n,input:r});jd.track({type:"test_editor:test_create"}),e.status(201).json(o)}catch(n){if(n instanceof At){e.status(400).json({error:n.message});return}throw n}}));fi.get("/:testPath",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n=Se(),o=await le(n),i;try{i=await ft(pc.join(n.rootDir,r),lt,o),e.status(200).json(i)}catch(a){e.status(400).send({error:a.message});return}(async()=>{try{let{stepsToSave:a,moduleUpdates:s}=await Pt({stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps}});s.forEach(c=>{On({content:c,schemaVersion:Ze,momenticFiles:o,project:n})}),cn({relativeTestPath:r,steps:a,schemaVersion:Ze,project:n})}catch(a){lt.error({err:a},"Failed to save migrated test to disk after initial fetch")}})()}));fi.get("/:testPath/metadata",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n=Se(),o=pc.join(n.rootDir,r);if(!cf.existsSync(o)){e.status(404).json({error:"Test file not found."});return}let i=cf.statSync(o),a=await si(lt),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};e.status(200).json(s)}));fi.patch("/:testPath/metadata",Be(async(t,e)=>{if(!t.params.testPath){e.status(400).json({error:"Missing testPath in url path."});return}let r;try{r=Iw.parse(t.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let o={message:"ok",newRelativeTestPath:ib(t.params.testPath,r,Se()).newRelativeTestPath};e.status(200).json(o)}));fi.patch("/:testPath",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=_w.parse(t.body)}catch(m){lt.warn({err:m},"Invalid save request"),e.status(400).json({error:`Invalid request body: ${m}`});return}lt.info({testPath:r},"Save received");let o=Se(),i=await le(o),a;try{a=Hu(r,o)}catch(m){e.status(400).json({error:`Existing test file on disk is invalid: ${m}`});return}let{stepsToSave:s,moduleUpdates:c,cachesToSave:l}=await Pt({stepLists:n.stepLists,cacheCreationParams:{testId:a.id,orgId:Ht()}}),u=new dt({apiKey:tn(),baseUrl:ar(),logger:lt}),d=await _r(lt,u,o);await _o({logger:lt,orgId:Ht(),client:u,gitMetadata:d,regenerateCache:!1,alwaysSaveCache:!1,noCache:!1,bustOldestCachePercentage:void 0}).saveStepCacheEntries({logger:lt,testId:a.id,entries:l}),c.forEach(m=>{On({content:m,schemaVersion:n.schemaVersion,momenticFiles:i,project:o})}),cn({relativeTestPath:r,steps:s,schemaVersion:n.schemaVersion,project:o}),e.status(201).json({message:"ok"})}));fi.patch("/:testPath/environments",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=Dw.parse(t.body)}catch(o){e.status(400).json({error:`Invalid request body: ${o}`});return}ib(r,{envs:n.defaultEnv?[{name:n.defaultEnv,default:!0}]:[]},Se()),e.status(201).json({message:"ok"})}));fi.post("/:testPath/duplicate",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=Mw.parse(t.body)}catch(f){e.status(400).json({error:`Invalid request body: ${f}`});return}try{wi(n.name)}catch(f){e.status(400).json({error:f.message});return}let o=Se(),i=pc.join(o.rootDir,r);if(!cf.existsSync(i)){e.status(404).json({error:"Test not found."});return}let a=await le(o),s;try{s=await ft(i,lt,a)}catch(f){e.status(400).send({error:f.message});return}let c=pZ(),l=_n.parse({...s,name:n.name,id:c}),{stepsToSave:u}=await Pt({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:!0,cacheCreationParams:{testId:c,orgId:Ht()}}),d=Zn({fileType:De.TEST,...l,beforeSteps:u.beforeSteps??void 0,steps:u.steps,afterSteps:u.afterSteps??void 0}),p=pc.dirname(i),m=pc.join(p,`${n.name}.test.yaml`),h=mZ.stringify(d);cf.writeFileSync(m,h,"utf-8");let g={relativeFilePath:pc.relative(o.rootDir,m)};jd.track({type:"test_editor:test_create"}),e.status(201).json(g)}));fi.post("/:testPath/chat",Be(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let{messages:n}=t.body;if(!n){e.status(400).json({error:"Missing messages in request body."});return}let{sessionId:o}=t.body;if(!o){e.status(401).json({error:"Missing sessionId in request body."});return}let i=qh.getSession(o);if(!i){e.status(400).json({error:"No active browser session. Start a session first."});return}let a=Se(),s=Hu(r,a),c=lt.child({orgId:Ht(),userId:Io(),applicationName:"momentic-desktop-server-copilot",testId:s.id,sessionId:o});c.debug({sessionId:o},"Initializing copilot with sessionId");let l=af({testPath:r,messages:n,logger:c,session:i,sessionId:o,saveChangesToDisk:!1});uZ(l).pipeUIMessageStreamToResponse(e,{onError:d=>{let p=d instanceof Error?d.message:String(d);return c.error({err:d,sessionId:o},"streamText session failed"),p}})}));var WU=fi;async function XU(t){let{momenticServerUrl:e,apiKey:r,serverPort:n,staticDir:o,devicePixelRatio:i,regenerateCache:a,alwaysSaveCache:s,noCache:c,initialProject:l}=t;e&&sg(e),VP({alwaysSaveCache:s,noCache:c}),await lg(r);let u=Ht(),d=Io();jd.identify({user_id:d,org_id:u});let p=t.logger??lt;p=p.child({orgId:u,userId:d}),p.debug({params:t},"Desktop server init and api key check done");let m=EZ(o,n,p),h=`http://localhost:${n}`;cg(l,T=>Dt({configFilePath:T})),await new Promise(T=>{try{m.listen(n,()=>{p.info(`Desktop server is running at ${h}`),T()})}catch(w){w.message.includes("EADDRINUSE")?JU(n):A.error(`An unexpected error occurred while starting the server: ${w.message}`),process.exit(1)}}),A.info(`Desktop server is running at ${h}`);let f={type:"API_KEY",baseUrl:ar(),apiKey:r,logger:p,mode:"interactive"},S=async()=>{let T=Se();return new wo(T.config.ai?.agentConfig,f)},b=async()=>new qi(f,await S()),y=new dt(f);fk({baseServer:m,getOrgId:async()=>Ht(),generatorFactory:S,enricherFactory:b,cacheStorageFactory:async T=>{let w=Se(),P=await _r(p,y,w);return _o({logger:p,orgId:T,client:y,gitMetadata:P,regenerateCache:a,alwaysSaveCache:s,noCache:c,bustOldestCachePercentage:void 0})},branchGetter:async()=>{try{return(await si(p))?.gitBranchName}catch(T){p.error({err:T},"Failed to get environment git metadata");return}},settingsFactory:async()=>{let T=Se();return{ai:{},browser:{},...T.config}},storageFactory:async T=>new ua(y,T),logger:p,devicePixelRatio:i,authorization:f,globalE2eStateManager:qh,visualDiffStorageFactory:async T=>new Ss(y)})}var YU="25mb";function EZ(t,e,r){let n=KU();n.use(gZ()),n.use(qU.json({limit:YU})),n.use(qU.urlencoded({extended:!1,limit:YU}));let o=SZ();if(o.use("/tests",WU),o.use("/modules",Sk),o.use("/environments",Ek),o.use("/projects",GU),o.use("/folders",Gb),o.use("/settings",$U),o.use("/identify",vk),o.use("/entities",bk),o.use("/on-demand-screenshots",jU),o.use("/mcp",zU),o.use("/git",Vb),o.use("/cache-config",jb),n.use("/api",o),n.use((a,s,c)=>{a.path!=="/healthcheck"&&!a.path.startsWith("/assets")&&r.debug({url:a.url,path:a.path,query:a.query,method:a.method,body:a.body,headers:a.rawHeaders,client:a.ip},"Received desktop-server request"),s.on("close",()=>{s.statusCode>=400&&r.error({url:a.url,method:a.method,statusCode:s.statusCode},"Request completed in error")}),c()}),n.use((a,s,c,l)=>{if(a instanceof Error&&a.message.includes("BadRequestError: request aborted")){c.status(400).send("Client disconnected");return}r.error({stack:a.stack,msg:a.message,err:a,url:s.url,method:s.method},"Unhandled exception leading to 500 on desktop-server"),A.error(`Oh no! We seem to have hit an unexpected snag \u{1F61E}. Please contact Momentic Support with the following error: ${a.message}
5075
+ `).map(F=>F.trim()).filter(F=>F.length>0);h&&await Sv(n,{completed:u.total,total:u.total},"Evaluating edits and generating edit status...",i,p,r);let N=await Y9(L,l,i);r.addPartFromText(JSON.stringify({additions:O.additions,deletions:O.deletions,summarization:N},null,2))}}),J9=pa.union([Gc,bp]),MU=Xt({schema:{name:Bk,description:"Execute a step without adding it to the test.",inputSchema:{sessionId:pa.string(),step:J9}},handle:async(t,e,r,n)=>{let{sessionId:o,step:i}=e,a=bs(r,o);if(!a)return;a.controller.setOpen();let s=await rf({step:i,logger:t.logger,storage:a.storage,controller:a.controller,codeEvalTools:a.codeEvalTools,orgId:a.orgId,testContext:a.context});r.addContentParts(s)}}),OU=Xt({schema:{name:Ok,description:"Splice steps in the test bound to an active session. Supports inserting, deleting, or replacing steps by index.",inputSchema:{sessionId:pa.string(),startIndex:pa.number(),deleteCount:pa.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:PR.array(),targetSection:Pa.default("main"),returnTest:pa.boolean().default(!1).describe("Whether or not you want to see the full test after the splice is complete")}},handle:async(t,e,r,n)=>{let o=bs(r,e.sessionId);if(!o)return;let i;try{({entity:i}=await rn(t.project,{id:o.testId},"test"))}catch(c){r.addError(String(c));return}let s=(await nf({project:t.project,logger:t.logger,testPath:i.relativePath,saveChangesToDisk:t.saveChangesToDisk,params:{startIndex:e.startIndex,deleteCount:e.deleteCount,steps:e.steps,targetSection:e.targetSection,returnTest:e.returnTest}})).value.map(c=>c.type==="media"?{type:"media",data:c.data,mediaType:"image/jpeg"}:c);r.addContentParts(s)}}),LU=Xt({schema:{name:Lk,description:"Run one or more steps from the test bound to an active session. Use stepId and parentStepIdChain when running to/from specific steps.",inputSchema:{sessionId:pa.string(),fromStep:Ph,toStep:Mh.optional(),targetSection:Pa.default("main")}},handle:async(t,e,r,n)=>{let o=bs(r,e.sessionId);if(!o)return;o.controller.setOpen();let i;try{({entity:i}=await rn(t.project,{id:o.testId},"test"))}catch(c){r.addError(String(c));return}let s=(await of({project:t.project,logger:t.logger,testPath:i.relativePath,storage:o.storage,controller:o.controller,codeEvalTools:o.codeEvalTools,orgId:o.orgId,testContext:o.context,params:{fromStep:e.fromStep,toStep:e.toStep,targetSection:e.targetSection}})).value.map(c=>c.type==="media"?{type:"media",data:c.data,mediaType:"image/jpeg"}:c);r.addContentParts(s)}}),NU=[$9,V9,W9,X9];var DU=[jk,Gk,Vk,$k,MU,LU,OU];var Z9=Xt({schema:{name:Nk,description:"List environments defined in the project's momentic.config.yaml file.",inputSchema:{}},handle:async(t,e,r,n)=>{let{project:o,logger:i}=t,a=Um(o,i);r.addPartFromText(JSON.stringify({environments:a},null,2))}}),kU=[Z9];var UU=[...kU,...NU,...Wh,...DU];function sf(t,e){let r=new Q9({name:e.applicationName,version:e.cliVersion},{capabilities:{logging:{},tools:{}}});for(let n of UU)n.addToolToMcpServer(t,r);return r}async function FU(t,e,r,n){let o=new eZ(r,e,n);return await t.connect(o),{close:async()=>{try{await t.close()}catch{}},transport:o}}async function yv({project:t,logger:e,apiKey:r,serverUrl:n,cliVersion:o,applicationName:i="momentic-mcp-stdio-server"}){sg(n),await lg(r);let a={applicationName:i,cliVersion:o??"0.0.0"},s=e.child({orgId:Ht(),userId:Io(),...a}),l=sf({project:t,logger:s,saveChangesToDisk:!0},a),u=new tZ;return await l.connect(u),{server:l,transport:u}}var bv="mcp-session-id",aZ="sessionId",dc=iZ(),Hd=new Map;function BU(){let t={applicationName:"momentic-mcp-desktop-server",cliVersion:Ad??"0.0.0"},e=Se(),r=lt.child({orgId:Ht(),userId:Io(),...t});return{context:{project:e,logger:r,saveChangesToDisk:!0},info:t}}dc.get("/sse",async(t,e)=>{let{context:r,info:n}=BU(),o=sf(r,n),{transport:i}=await FU(o,e,"/api/mcp/sse",{enableDnsRebindingProtection:!1}),a=i.sessionId,s={transport:i,close:async()=>{Hd.delete(a);try{await o.close()}catch(c){r.logger.warn({err:c},"Failed to close MCP server on SSE session cleanup")}}};Hd.set(a,s),i.onclose=()=>{let c=Hd.get(a);c&&c.close()}});dc.post("/sse",async(t,e)=>{let r=String(t.query[aZ]??"");if(!r||!Hd.has(r)){e.status(400).send("Invalid or missing sessionId");return}await Hd.get(r).transport.handlePostMessage(t,e,t.body)});var zU=dc,hi={};dc.post("/",async(t,e)=>{let r=String(t.headers[bv]??"");try{if(r&&hi[r]){await hi[r].handleRequest(t,e,t.body);return}if(!r&&nZ(t.body)){let{context:n,info:o}=BU(),i=sf(n,o),a=new rZ({sessionIdGenerator:()=>oZ(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{hi[s]=a}});a.onclose=()=>{let s=a.sessionId;s&&hi[s]&&delete hi[s],i.close().catch(()=>{})},await i.connect(a),await a.handleRequest(t,e,t.body);return}e.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null})}catch{e.headersSent||e.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}});dc.get("/",async(t,e)=>{let r=String(t.headers[bv]??"");if(!r||!hi[r]){e.status(400).send("Invalid or missing session ID");return}await hi[r].handleRequest(t,e)});dc.delete("/",async(t,e)=>{let r=String(t.headers[bv]??"");if(!r||!hi[r]){e.status(400).send("Invalid or missing session ID");return}let n=hi[r];try{await n.handleRequest(t,e)}catch{e.headersSent||e.status(500).send("Error processing session termination")}});import{Router as sZ}from"express";var HU=sZ();HU.get("/:id",Fe(async(t,e)=>{let{id:r}=t.params;if(!r){e.status(400).json({error:"Missing ID"});return}let n=Fl();if(!n){e.status(500).json({error:"API client not initialized"});return}try{let{data:o,contentType:i}=await n.fetchOnDemandScreenshot(r);e.setHeader("Content-Type",i),e.status(200).send(o)}catch(o){lt.error({err:o,screenshotId:r},"Failed to proxy on-demand screenshot"),e.status(404).json({error:"Screenshot not found"})}}));var jU=HU;import{Router as lZ}from"express";var lf=lZ();lf.get("/",Fe(async(t,e)=>{let r=(await ub()).map(n=>({name:n.config.name,configFilePath:n.configFilePath}));e.status(200).json(r)}));lf.get("/current",Fe((t,e)=>{let r=Se();if(!r){e.status(404).json({error:"No project found."});return}let n={name:r.config.name,configFilePath:r.configFilePath};e.status(200).json(n)}));lf.post("/set",Fe(async(t,e)=>{let r;try{r=kw.parse(t.body)}catch(n){e.status(400).json({error:`Invalid request body: ${n}`});return}lt.info("Setting local project");try{let n=await Dt({configFilePath:r.configFilePath});cg(n,o=>Dt({configFilePath:o}))}catch(n){e.status(400).json({error:`Error setting project: ${n}`});return}e.sendStatus(204)}));var GU=lf;import{Router as cZ}from"express";var VU=cZ();VU.get("/",Fe((t,e)=>{let r=Se(),n={ai:r.config.ai,browser:r.config.browser,displayRoot:r.config.displayRoot};e.status(200).json(n)}));var $U=VU;import{streamText as uZ}from"ai";import{Router as dZ}from"express";import cf from"fs";import pc from"path";import{v4 as pZ}from"uuid";import mZ from"yaml";var jd=new Cg({platform:"local_app"},{flushAt:1,flushInterval:0});var fi=dZ();fi.post("/",Fe(async(t,e)=>{let r;try{r=Pw.parse(t.body)}catch(n){e.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=Se(),o=await Yh({project:n,input:r});jd.track({type:"test_editor:test_create"}),e.status(201).json(o)}catch(n){if(n instanceof At){e.status(400).json({error:n.message});return}throw n}}));fi.get("/:testPath",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n=Se(),o=await le(n),i;try{i=await ft(pc.join(n.rootDir,r),lt,o),e.status(200).json(i)}catch(a){e.status(400).send({error:a.message});return}(async()=>{try{let{stepsToSave:a,moduleUpdates:s}=await Pt({stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps}});s.forEach(c=>{On({content:c,schemaVersion:Ze,momenticFiles:o,project:n})}),cn({relativeTestPath:r,steps:a,schemaVersion:Ze,project:n})}catch(a){lt.error({err:a},"Failed to save migrated test to disk after initial fetch")}})()}));fi.get("/:testPath/metadata",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n=Se(),o=pc.join(n.rootDir,r);if(!cf.existsSync(o)){e.status(404).json({error:"Test file not found."});return}let i=cf.statSync(o),a=await si(lt),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};e.status(200).json(s)}));fi.patch("/:testPath/metadata",Fe(async(t,e)=>{if(!t.params.testPath){e.status(400).json({error:"Missing testPath in url path."});return}let r;try{r=Iw.parse(t.body)}catch(i){e.status(400).json({error:`Invalid request body: ${i}`});return}let o={message:"ok",newRelativeTestPath:ib(t.params.testPath,r,Se()).newRelativeTestPath};e.status(200).json(o)}));fi.patch("/:testPath",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=_w.parse(t.body)}catch(m){lt.warn({err:m},"Invalid save request"),e.status(400).json({error:`Invalid request body: ${m}`});return}lt.info({testPath:r},"Save received");let o=Se(),i=await le(o),a;try{a=Hu(r,o)}catch(m){e.status(400).json({error:`Existing test file on disk is invalid: ${m}`});return}let{stepsToSave:s,moduleUpdates:c,cachesToSave:l}=await Pt({stepLists:n.stepLists,cacheCreationParams:{testId:a.id,orgId:Ht()}}),u=new dt({apiKey:tn(),baseUrl:ar(),logger:lt}),d=await _r(lt,u,o);await _o({logger:lt,orgId:Ht(),client:u,gitMetadata:d,regenerateCache:!1,alwaysSaveCache:!1,noCache:!1,bustOldestCachePercentage:void 0}).saveStepCacheEntries({logger:lt,testId:a.id,entries:l}),c.forEach(m=>{On({content:m,schemaVersion:n.schemaVersion,momenticFiles:i,project:o})}),cn({relativeTestPath:r,steps:s,schemaVersion:n.schemaVersion,project:o}),e.status(201).json({message:"ok"})}));fi.patch("/:testPath/environments",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=Dw.parse(t.body)}catch(o){e.status(400).json({error:`Invalid request body: ${o}`});return}ib(r,{envs:n.defaultEnv?[{name:n.defaultEnv,default:!0}]:[]},Se()),e.status(201).json({message:"ok"})}));fi.post("/:testPath/duplicate",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=Mw.parse(t.body)}catch(f){e.status(400).json({error:`Invalid request body: ${f}`});return}try{wi(n.name)}catch(f){e.status(400).json({error:f.message});return}let o=Se(),i=pc.join(o.rootDir,r);if(!cf.existsSync(i)){e.status(404).json({error:"Test not found."});return}let a=await le(o),s;try{s=await ft(i,lt,a)}catch(f){e.status(400).send({error:f.message});return}let c=pZ(),l=_n.parse({...s,name:n.name,id:c}),{stepsToSave:u}=await Pt({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:!0,cacheCreationParams:{testId:c,orgId:Ht()}}),d=Zn({fileType:De.TEST,...l,beforeSteps:u.beforeSteps??void 0,steps:u.steps,afterSteps:u.afterSteps??void 0}),p=pc.dirname(i),m=pc.join(p,`${n.name}.test.yaml`),h=mZ.stringify(d);cf.writeFileSync(m,h,"utf-8");let g={relativeFilePath:pc.relative(o.rootDir,m)};jd.track({type:"test_editor:test_create"}),e.status(201).json(g)}));fi.post("/:testPath/chat",Fe(async(t,e)=>{let{testPath:r}=t.params;if(!r){e.status(400).json({error:"Missing testPath in url path."});return}let{messages:n}=t.body;if(!n){e.status(400).json({error:"Missing messages in request body."});return}let{sessionId:o}=t.body;if(!o){e.status(401).json({error:"Missing sessionId in request body."});return}let i=qh.getSession(o);if(!i){e.status(400).json({error:"No active browser session. Start a session first."});return}let a=Se(),s=Hu(r,a),c=lt.child({orgId:Ht(),userId:Io(),applicationName:"momentic-desktop-server-copilot",testId:s.id,sessionId:o});c.debug({sessionId:o},"Initializing copilot with sessionId");let l=af({testPath:r,messages:n,logger:c,session:i,sessionId:o,saveChangesToDisk:!1});uZ(l).pipeUIMessageStreamToResponse(e,{onError:d=>{let p=d instanceof Error?d.message:String(d);return c.error({err:d,sessionId:o},"streamText session failed"),p}})}));var WU=fi;async function XU(t){let{momenticServerUrl:e,apiKey:r,serverPort:n,staticDir:o,devicePixelRatio:i,regenerateCache:a,alwaysSaveCache:s,noCache:c,initialProject:l}=t;e&&sg(e),VP({alwaysSaveCache:s,noCache:c}),await lg(r);let u=Ht(),d=Io();jd.identify({user_id:d,org_id:u});let p=t.logger??lt;p=p.child({orgId:u,userId:d}),p.debug({params:t},"Desktop server init and api key check done");let m=EZ(o,n,p),h=`http://localhost:${n}`;cg(l,T=>Dt({configFilePath:T})),await new Promise(T=>{try{m.listen(n,()=>{p.info(`Desktop server is running at ${h}`),T()})}catch(w){w.message.includes("EADDRINUSE")?JU(n):A.error(`An unexpected error occurred while starting the server: ${w.message}`),process.exit(1)}}),A.info(`Desktop server is running at ${h}`);let f={type:"API_KEY",baseUrl:ar(),apiKey:r,logger:p,mode:"interactive"},S=async()=>{let T=Se();return new wo(T.config.ai?.agentConfig,f)},b=async()=>new qi(f,await S()),y=new dt(f);fk({baseServer:m,getOrgId:async()=>Ht(),generatorFactory:S,enricherFactory:b,cacheStorageFactory:async T=>{let w=Se(),P=await _r(p,y,w);return _o({logger:p,orgId:T,client:y,gitMetadata:P,regenerateCache:a,alwaysSaveCache:s,noCache:c,bustOldestCachePercentage:void 0})},branchGetter:async()=>{try{return(await si(p))?.gitBranchName}catch(T){p.error({err:T},"Failed to get environment git metadata");return}},settingsFactory:async()=>{let T=Se();return{ai:{},browser:{},...T.config}},storageFactory:async T=>new ua(y,T),logger:p,devicePixelRatio:i,authorization:f,globalE2eStateManager:qh,visualDiffStorageFactory:async T=>new Ss(y)})}var YU="25mb";function EZ(t,e,r){let n=KU();n.use(gZ()),n.use(qU.json({limit:YU})),n.use(qU.urlencoded({extended:!1,limit:YU}));let o=SZ();if(o.use("/tests",WU),o.use("/modules",Sk),o.use("/environments",Ek),o.use("/projects",GU),o.use("/folders",Gb),o.use("/settings",$U),o.use("/identify",vk),o.use("/entities",bk),o.use("/on-demand-screenshots",jU),o.use("/mcp",zU),o.use("/git",Vb),o.use("/cache-config",jb),n.use("/api",o),n.use((a,s,c)=>{a.path!=="/healthcheck"&&!a.path.startsWith("/assets")&&r.debug({url:a.url,path:a.path,query:a.query,method:a.method,body:a.body,headers:a.rawHeaders,client:a.ip},"Received desktop-server request"),s.on("close",()=>{s.statusCode>=400&&r.error({url:a.url,method:a.method,statusCode:s.statusCode},"Request completed in error")}),c()}),n.use((a,s,c,l)=>{if(a instanceof Error&&a.message.includes("BadRequestError: request aborted")){c.status(400).send("Client disconnected");return}r.error({stack:a.stack,msg:a.message,err:a,url:s.url,method:s.method},"Unhandled exception leading to 500 on desktop-server"),A.error(`Oh no! We seem to have hit an unexpected snag \u{1F61E}. Please contact Momentic Support with the following error: ${a.message}
5076
5076
  ${a.stack}`),c.status(500).send(`Internal Server Error: ${a.message}`)}),t){let a=KU.static(t,{setHeaders:s=>{s.setHeader("Cache-Control","no-cache")},redirect:!1});n.use(a),n.use("*",(s,c)=>{c.sendFile(bZ.join(t,"index.html"))})}let i=yZ.createServer(n);return i.once("error",a=>{"code"in a&&a.code==="EADDRINUSE"?(JU(e),process.exit(1)):console.error("An unexpected server error occurred:",a.message)}),i}fZ.setMaxListeners(25);process.on("warning",t=>{lt.warn({err:t},`Node warning received on desktop-server: ${t.message}`)});process.on("uncaughtException",t=>{lt.error({err:t},"Uncaught exception on desktop-server"),A.error(`Oh no! The Momentic desktop app encountered a fatal error \u{1F61E}. Error logs: ${t.message}`)});process.on("unhandledRejection",(t,e)=>{lt.error({reason:`${t}`,stack:t?.stack},"Uncaught exception on desktop-server (promise rejection)"),A.error(`Oh no! The Momentic desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${t}`)});function JU(t){A.error(hZ`Port ${t} is already in use by another process. Please close the other process and try again.
5077
5077
  Using Bash on MacOS or Linux:
5078
5078
  lsof -t -i :58888 | xargs kill -9
@@ -5092,7 +5092,7 @@ ${t.map(p=>`${It}- ${p}`).join(`
5092
5092
  `)}`),Object.values(e.tests).forEach(p=>{t.some(m=>p.relativePath.includes(m))&&c.add(p.fullFilePath)}))}else{!n&&!await gr("No test paths or substrings were provided. Do you want to run all tests?")&&(s.error("Cancelled by user."),process.exit(1));let u=Object.values(e.tests);s.info(`Reading all ${u.length} tests in the project from local disk.`),u.forEach(d=>{c.add(d.fullFilePath)})}for(let u of c){let d=Bv.relative(r.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)}let l=Array.from(c).map(async u=>{try{let d=await ft(u,J,e);if(HZ.gt(d.schemaVersion,Ze)&&s.warn(`Test ${u} has schema version ${d.schemaVersion}, which is greater than what is currently supported by this SDK. Please update your momentic package version to avoid unexpected behavior.`),a&&a.length>0){let p=d.labels||[];if(!a.some(h=>p.includes(h)))return null}return{...d,fullFilePath:u,relativeFilePath:Bv.relative(r.rootDir,u)}}catch(d){s.error(`Failed to read and resolve test at '${u}': ${d}`),process.exit(1)}});return Promise.all(l).then(BZ)}function DF({testDefinitions:t,quarantinedTestsMetadata:e,onlyQuarantined:r=!1,skipQuarantined:n=!1}){let[o,i]=NF(t,c=>c.disabled),[a,s]=NF(i,c=>c.id in e);return{testsToSkip:o,quarantinedTestsToSkip:n?a:[],testsToRun:r?[]:s,quarantinedTestsToRun:n?[]:a}}function kF({testsToRun:t,quarantinedTestsToRun:e,quarantinedTestsMetadata:r,testInputMatrix:n}){let o=[],i=(a,s,c)=>{n?n.forEach((l,u)=>{o.push({inputs:l,inputIndex:u,testDefinition:a,quarantined:s,quarantinedMetadata:c})}):o.push({inputs:void 0,testDefinition:a,quarantined:s,quarantinedMetadata:c})};return t.forEach(a=>i(a,!1)),e.forEach(a=>i(a,!0,r[a.id])),o}async function UF({project:t,apiClient:e}){let r=await le(t),n=await hc({tests:[],momenticFiles:r,yes:!0,project:t,logger:new Ga(40,{})}),o=(await e.getQuarantinedTests()).quarantined,i=new Set(o.map(s=>s.testId)),a=n.filter(s=>i.has(s.id));A.info(a.map(s=>s.relativeFilePath).join(`
5093
5093
  `))}async function FF({test:t,reason:e,apiClient:r,project:n,identity:o}){let i=(await le(n)).tests,a=Object.values(i),s=(await r.getQuarantinedTests()).quarantined,c=new Set(s.map(p=>p.testId)),l=a.filter(p=>c.has(p.id)),u=await Sf({prompt:"Select a test to unquarantine.",inputtedTest:t,testOptions:l}),d=await yf({prompt:"Enter a reason for unquarantining the test.",inputtedReason:e});await r.unquarantineTest(u,d,o),A.success(`Test ${u.name} has been successfully removed from quarantine.`)}function BF(t){return t?at(t):"Unknown suite"}async function zF({client:t,orgId:e,suitePaths:r,wait:n,waitTimeout:o,...i}){let{suiteRunIds:a,runGroupIds:s}=await t.queueSuiteRuns({paths:r,...i});J.info({orgId:e,suiteRunIds:a,runGroupIds:s,suitePaths:r},"Queued suites remotely"),A.dimmed(`Queued ${r.length} suites.`),n||process.exit(0);let c=Date.now();A.dimmed(`Waiting for ${r.length} suites to finish. You can view results upon completion at:`);for(let f of s)A.dimmed(`${It}- ${t.getAppUrl()}/run-groups/${f}`);let l=new Set,u=[],d=f=>(f.status==="FAILED"||f.status==="PASSED"||f.status==="CANCELLED")&&f.runs.every(b=>b.status==="FAILED"&&(b.failureReason||b.finishedAt&&Date.now()-b.finishedAt.getTime()>30*1e3)||b.status==="PASSED"||b.status==="CANCELLED"),p=await pm({name:"suites",getResults:async()=>{let f=s.filter(y=>!u.some(T=>T.id===y)),S=await t.bulkGetRunGroupStatus(f),b=[];for(let y of S)d(y)?u.push(y):b.push(y);return[...u,...b]},timeoutMs:o?o*1e3:void 0,checkDone:f=>(f.forEach(S=>{S.status==="RUNNING"&&(l.has(S.id)||(l.add(S.id),A.log(`${l.size}/${s.length} ${BF(S.suite?.name)}`)))}),f.every(d))}),m=t.getAppUrl(),g=fl({results:p,startTime:c,onFailed:f=>{let S=BF(f.suite?.name),b=f.runs.filter(T=>T.status==="FAILED").length,y=f.runs.length;A.error(`${S} (${b}/${y} tests failed):`);for(let T of f.runs)if(T.status==="FAILED"){let w=T.testName||T.test?.name;A.error(` ${w?at(w):"Unknown test"} (${m}/runs/${T.id})`)}},entity:"suite",getDisplayLine:f=>` ${f.suite?.name?at(f.suite.name):"Unknown suite name"} (${m}/run-groups/${f.id})`});process.exit(g.failed>0?1:0)}async function HF({tests:t,client:e,orgId:r,...n}){!n.yes&&!await gr(`This command will queue ${t.length} tests to run remotely on Momentic's infrastructure. Results will be available on ${e.getAppUrl()}. Continue?`)&&process.exit(1);let{queuedTests:o,runIds:i}=await e.queueTests({testPaths:t,...n});if(J.info({queuedTests:o,runIds:i,orgId:r},"Queued tests remotely"),A.dimmed(`Queued ${o.length} tests. Processing time may depend on a variety of factors, including how many tests have already been queued from your organization.`),n.wait||process.exit(0),!i.length)return;A.dimmed(`Waiting for ${o.length} tests to complete.`);let a=new Set,s=[],c=m=>m.status==="FAILED"&&m.failureReason||m.status==="PASSED"||m.status==="CANCELLED",l=e.getAppUrl(),u=Date.now(),d=await pm({name:"runs",getResults:async()=>{let m=i.filter(f=>!s.some(S=>S.id===f)),h=await e.bulkGetRunStatus(m),g=[];for(let f of h)c(f)?s.push(f):g.push(f);return[...s,...g]},timeoutMs:n.waitTimeout?n.waitTimeout*1e3:void 0,checkDone:m=>(m.forEach(h=>{if(h.status==="RUNNING"&&!a.has(h.id)){a.add(h.id);let g=h.testName||h.test?.name;g&&A.log(`${a.size}/${o.length} ${at(g)}`)}}),m.every(c))}),p=fl({results:d,startTime:u,onFailed:m=>{let h=m.testName||m.test?.name;mm(m,h?at(h):"Unknown test")},getDisplayLine:m=>{let h=m.testName||m.test?.name,g=` ${h?at(h):"Unknown test"}`;return m.id&&(g+=` (${l}/runs/${m.id})`),g},entity:"test"});process.exit(p.failed>0?1:0)}import{randomUUID as xQ}from"crypto";import _Q from"fs";import{existsSync as tQ,mkdirSync as rQ,statSync as nQ}from"fs";import{randomUUID as ws}from"crypto";import fc,{writeFileSync as jF}from"fs";import{hostname as jZ}from"os";import Bo from"path";import{z as bf}from"zod";async function Tf(t,e,r,n){if(n){let o=await e.getScreenshot(t,n);if(o){let i=`screenshot-${n}.jpeg`,a=Bo.join(r,i);return fc.writeFileSync(a,o),i}}}async function GZ(t,e,r,n){let o=r.folder,i={uuid:n.runAttemptId??ws(),historyId:n.runId??ws(),testCaseId:n.test.id,fullName:n.test.name,name:at(n.test.name),status:n.status==="PASSED"?"passed":n.status==="CANCELLED"?"skipped":"failed",start:n.lastAttemptStartedAt.getTime(),stop:n.finishedAt.getTime(),parameters:[],labels:[{name:"suite",value:r.suiteName},{name:"host",value:jZ()},{name:"platform",value:"momentic"},{name:"attempts",value:n.attempts.toString()}],steps:[]};n.runId&&i.labels.push({name:"runUrl",value:`https://app.momentic.ai/runs/${n.runId}`}),n.quarantined&&i.labels.push({name:"quarantined",value:"true"}),n.quarantinedMetadata?.quarantinedReason&&i.labels.push({name:"quarantinedReason",value:n.quarantinedMetadata.quarantinedReason}),n.quarantinedMetadata?.quarantinedAt&&i.labels.push({name:"quarantinedAt",value:n.quarantinedMetadata.quarantinedAt.toISOString()});for(let[c,l]of Object.entries(n.parameters))l!=null&&i.parameters.push({name:c,value:JSON.stringify(l)});n.results&&await zv(t,e,r.folder,i.steps,n.results);let a=VZ(e,o,i.uuid);a.length>0&&(i.attachments=a);let s=`${n.runAttemptId}-result.json`;fc.writeFileSync(Bo.join(o,s),JSON.stringify(i,void 0,2))}async function Ef(t,e,r,n){let o={name:lI(n),start:n.startedAt.getTime(),stop:n.finishedAt.getTime(),status:n.status==="SUCCESS"?"passed":n.status==="CANCELLED"?"skipped":"failed",labels:[],steps:[],attachments:[]};n.beforeUrl&&o.labels.push({name:"URL before step",value:n.beforeUrl}),n.afterUrl&&o.labels.push({name:"URL after step",value:n.afterUrl});let i=await Tf(t,e,r,n.beforeSnapshot);i&&o.attachments.push({name:"Screenshot before step",source:i,type:"image/jpeg"});let a=await Tf(t,e,r,n.afterSnapshot);if(a&&o.attachments.push({name:"Screenshot after step",source:a,type:"image/jpeg"}),n.message&&(o.statusDetails={message:n.message}),n.data)if(Lc.safeParse(n.data).success){let s=Lc.parse(n.data),c=s.request,l={...s,request:void 0},u=`output-attachment-api-request-${ws()}.json`,d=`output-attachment-api-response-${ws()}.json`,p=Bo.join(r,u),m=Bo.join(r,d);fc.writeFileSync(p,JSON.stringify(c,null,2)),fc.writeFileSync(m,JSON.stringify(l,null,2)),o.attachments.push({name:"API request details",source:u,type:"application/json"}),o.attachments.push({name:"API response details",source:d,type:"application/json"})}else{let s=bf.union([bf.object({}).passthrough(),bf.array(bf.any())]).safeParse(n.data).success,c=`output-attachment-${ws()}.json`,l=Bo.join(r,c);fc.writeFileSync(l,JSON.stringify(n.data,null,2)),o.attachments.push({name:"Step output data",source:c,type:s?"application/json":"text/plain"})}return o}async function zv(t,e,r,n,o){for(let i of o){let a;switch(i.type){case"PRESET_ACTION":{a=await Ef(t,e,r,i);break}case"CONDITIONAL":{a=await Ef(t,e,r,i),a.steps=[],i.assertionResult&&a.steps.push(await Ef(t,e,r,i.assertionResult)),await zv(t,e,r,a.steps,i.results);break}case"AI_ACTION_DYNAMIC":case"AI_ACTION":case"SECTION":case"MODULE":{if(a=await Ef(t,e,r,i),await zv(t,e,r,a.steps,i.results),i.type==="MODULE"&&i.inputs){a.parameters=[];for(let[s,c]of Object.entries(i.inputs))a.parameters.push({name:s,value:c})}break}default:{let s=i}}if(!a){t.warn({result:i},"Failed to convert Momentic result to Allure step");continue}if(a.attachments||(a.attachments=[]),i.beforeTestContext){let s=`before-context-${ws()}.json`,c=Bo.join(r,s);jF(c,GF(i.beforeTestContext.env)),a.attachments.push({name:"Test context before step",source:s,type:"application/json"})}if(i.afterTestContext){let s=`after-context-${ws()}.json`,c=Bo.join(r,s);jF(c,GF(i.afterTestContext.env)),a.attachments.push({name:"Test context after step",source:s,type:"application/json"})}n.push(a)}}async function VF(t,e,r,n,o){for(let i of o){if(!i.runId||!i.runAttemptId)throw new Error(`Missing runId/runAttemptId for Allure report generation for test '${i.test.name}'`);let a=e.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId);try{await GZ(t,a,{folder:r,suiteName:n.suiteName},i)}finally{a.close()}}}function GF(t){try{return JSON.stringify(t,void 0,2)??JSON.stringify({value:null},void 0,2)}catch(e){let r=e instanceof Error?e.message:"unknown error";return JSON.stringify({error:r},void 0,2)}}function VZ(t,e,r){let n=t.listVideoAssetPaths();if(n.length===0)return[];let o=[];for(let i of n){let a=Bo.basename(i),s=a,c=Bo.join(e,s);try{fc.copyFileSync(i,c)}catch{continue}let l,u=Bo.extname(i).toLowerCase();u===".webm"?l="video/webm":u===".mp4"?l="video/mp4":l="application/octet-stream",o.push({name:a,source:s,type:l})}return o}import $Z from"junit-report-builder";import vf from"path";function $F(t,e){t.property("quarantined","true"),t.property("dd_tags[quarantined]","true"),e.quarantinedReason&&(t.property("quarantined_reason",e.quarantinedReason),t.property("dd_tags[quarantined_reason]",e.quarantinedReason)),e.quarantinedAt&&(t.property("quarantined_at",e.quarantinedAt.toISOString()),t.property("dd_tags[quarantined_at]",e.quarantinedAt.toISOString()))}function WZ(t,e){if(e.name(t.testName).className(t.testName).file(vf.relative(".",t.filePath)).property("id",t.testId).property("dd_tags[id]",t.testId),t.labels&&(e.property("labels",t.labels.join(",")),t.labels.forEach(r=>{e.property("dd_tags[label]",r)})),t.baseUrl&&(e.property("base_url",t.baseUrl),e.property("dd_tags[base_url]",t.baseUrl)),t.runId&&(e.property("run_url",`https://app.momentic.ai/runs/${t.runId}`),e.property("dd_tags[run_url]",`https://app.momentic.ai/runs/${t.runId}`)),t.quarantinedMetadata&&$F(e,t.quarantinedMetadata),t.setupFailed&&(e.property("setup_failed","true"),e.property("dd_tags[setup_failed]","true")),t.mainFailed&&(e.property("main_failed","true"),e.property("dd_tags[main_failed]","true")),t.teardownFailed&&(e.property("teardown_failed","true"),e.property("dd_tags[teardown_failed]","true")),t.status==="FAILED"){if(t.failureReason){let r=hp[t.failureDetails?.classification?.reason||t.failureReason],n=t.failureDetails?.classification?.summary||js[t.failureReason];t.runId&&(n+=` Visit https://app.momentic.ai/runs/${t.runId} for more details.`),e.failure(n,r)}t.failureDetails?.errorStack&&e.stacktrace(t.failureDetails.errorStack)}else t.status==="CANCELLED"&&e.skipped();return e.time((t.finishedAt.getTime()-t.lastAttemptStartedAt.getTime())/1e3).property("started_at",t.lastAttemptStartedAt.toISOString()).property("dd_tags[started_at]",t.lastAttemptStartedAt.toISOString()).property("finished_at",t.finishedAt.toISOString()).property("dd_tags[finished_at]",t.finishedAt.toISOString()),e.property("attempts",t.attempts.toString()).property("dd_tags[attempts]",t.attempts.toString()),t.parameters?.envName&&(e.property("environment",t.parameters.envName),e.property("dd_tags[environment]",t.parameters.envName)),t.parameters?.urlOverride&&e.property("url_override",t.parameters.urlOverride),e}function qZ(t,e,r){let{suiteId:n,suiteName:o,startedAt:i,finishedAt:a,testsToSkip:s,quarantinedTestsToSkip:c,quarantinedTestsMetadata:l}=e,u=t.testSuite().name(o);n&&u.property("id",n),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",a.toISOString()).time((a.getTime()-i.getTime())/1e3);for(let d of r){let p=u.testCase();WZ(d,p)}for(let d of s){let p=u.testCase();p.name(d.name).className(d.name).file(vf.relative(".",d.relativeFilePath)).property("id",d.id),d.baseUrl&&p.property("baseUrl",d.baseUrl),d.labels&&(p.property("labels",d.labels.join(",")),d.labels.forEach(m=>{p.property("dd_tags[label]",m)})),p.skipped()}for(let d of c){let p=u.testCase();p.name(d.name).className(d.name).file(vf.relative(".",d.relativeFilePath)).property("id",d.id);let m=l[d.id];m&&$F(p,m),d.baseUrl&&p.property("baseUrl",d.baseUrl),d.labels&&(p.property("labels",d.labels.join(",")),d.labels.forEach(h=>{p.property("dd_tags[label]",h)})),p.skipped()}return u}function WF(t,e,r){let n=$Z.newBuilder();qZ(n,e,r),n.writeTo(vf.join(t,`${e.suiteName}.xml`))}import KZ from"fs";import YZ from"path";function qF(t){return{title:ni(t),duration:t.finishedAt.getTime()-t.startedAt.getTime(),error:t.status==="FAILED"?{value:t.failureReason}:void 0,steps:t.results&&t.type!=="PRESET_ACTION"?t.results.map(qF):[]}}async function XZ(t,e,r,n){if(n.results?.length){let o=await Tf(t,e,r,n.results[n.results.length-1].afterSnapshot);return o?[{name:"Final state screenshot",path:o,contentType:"image/jpeg"}]:[]}return[]}async function JZ(t,e,r,n){return{status:n.status==="PASSED"?"passed":n.status==="CANCELLED"?"interrupted":"failed",duration:n.finishedAt.getTime()-n.lastAttemptStartedAt.getTime(),error:n.status==="FAILED"&&n.failureReason?{value:n.failureDetails?.classification?.reason||n.failureReason,message:n.failureDetails?.classification?.summary||js[n.failureReason]}:void 0,retry:n.attempts-1,steps:n.results?.map(qF)||[],startTime:n.lastAttemptStartedAt.toISOString(),attachments:await XZ(t,e,r,n)}}async function ZZ(t,e,r,n){return{expectedStatus:"passed",status:n.status==="PASSED"?"expected":"unexpected",results:[await JZ(t,e,r,n)]}}async function QZ(t,e,r,n){return{tags:[],title:n.test.name,ok:n.status==="PASSED",tests:[await ZZ(t,e,r,n)],id:n.runId,file:n.filePath}}function Hv(t,e){return t.reduce((r,n)=>e(n)?r+1:r,0)}async function eQ(t,e,r,n,o){return{suites:[{title:n.suiteName,file:n.projectConfigPath,specs:await Promise.all(o.map(async i=>{let a=i.runId&&i.runAttemptId?e.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId):new bu;try{return await QZ(t,a,r,i)}finally{a.close()}}))}],errors:[],stats:{startTime:n.startedAt.toISOString(),duration:n.finishedAt.getTime()-n.startedAt.getTime(),expected:Hv(o,i=>i.status==="PASSED"),unexpected:Hv(o,i=>i.status!=="PASSED"),flaky:Hv(o,i=>!!i.isFlake),skipped:0}}}async function KF(t,e,r,n,o){let i=await eQ(t,e,r,n,o);KZ.writeFileSync(YZ.join(r,`${n.suiteName}.json`),JSON.stringify(i,null,2))}function oQ(t){return{testName:t.test.name,testId:t.test.id,filePath:t.filePath,labels:t.test.labels,baseUrl:t.baseUrl,runId:t.runId,quarantined:t.quarantined,quarantinedMetadata:t.quarantinedMetadata,status:t.status,setupFailed:void 0,mainFailed:void 0,teardownFailed:void 0,failureDetails:t.failureDetails,failureReason:t.failureReason,finishedAt:t.finishedAt,lastAttemptStartedAt:t.lastAttemptStartedAt,attempts:t.attempts,parameters:t.parameters}}async function YF({logger:t,callbacks:e,format:r,params:n,runs:o,folder:i}){switch(tQ(i)?nQ(i).isDirectory()||(A.error(`The specified reporter output directory '${i}' exists on disk but is not a folder. Please move or delete the existing object or specify a different reporter path.`),process.exit(1)):(A.info(`Reporter output directory '${i}' does not exist on disk, creating it now...`),rQ(i,{recursive:!0})),r){case"junit":{let a=o.map(oQ);WF(i,n,a);return}case"allure":case"allure-json":await VF(t,e,i,n,o);return;case"playwright-json":await KF(t,e,i,n,o);return;default:throw new Error(`Unknown reporter format requested: '${r}'`)}}import IQ from"wait-on";import{execSync as iQ}from"child_process";import{platform as aQ}from"os";function jv(){return XF()?(A.dimmed("Setting device pixel ratio to 2 automatically since a Mac OS Retina screen was detected."),A.dimmed(`If you are using a low pixel-density monitor, you should manually set --pixel-ratio to 1 to avoid incorrect viewport calculations. Confirm your device's pixel-ratio at https://www.mydevice.io.
5094
5094
  `),2):(A.dimmed("Setting device pixel ratio to 1."),A.dimmed(`If you are using Momentic on a high-pixel density (HiDPI) monitor, relaunch with the --pixel-ratio option to avoid incorrect viewport calculations. Confirm your device's pixel-ratio at https://www.mydevice.io.
5095
- `),1)}function XF(){return aQ()==="darwin"&&iQ("system_profiler SPDisplaysDataType").toString().includes("Retina")}function Gv(t){XF()&&t===1&&(A.warn("If you are using Momentic on a Retina screen, relaunch with the --pixel-ratio option to avoid incorrect viewport calculations."),A.warn("Confirm your device's pixel-ratio at https://www.mydevice.io."))}import sQ from"@actions/exec";import lQ from"@actions/io";import cQ from"quote";import uQ from"string-argv";async function JF(t,e=!0){let r=uQ(t),n=await lQ.which(r[0],!0),o=r.slice(1),i=sQ.exec(cQ(n),o,{delay:100});if(e)return i}import dQ from"csv-parser";import{createReadStream as pQ}from"fs";function Vv(t){return new Promise((e,r)=>{let n=[];pQ(t).pipe(dQ()).on("data",o=>n.push(o)).on("end",()=>e(n)).on("error",o=>r(o))})}import Sc from"semver";import{z as Af}from"zod";var nn="2.45.2",mQ="https://registry.npmjs.org/momentic",gQ=Af.object({versions:Af.record(Af.string(),Af.unknown()).optional()});async function ur(t){try{await hQ(t)}catch(e){A.warn({err:e},"Failed to check CLI version against NPM servers")}}async function $v(){let t=await X(fetch(mQ),{milliseconds:5e3});if(!t.ok)throw new Error(`Got error status code ${t.statusText}`);let e=await t.json(),r=gQ.parse(e).versions;if(!r)throw new Error("Failed to fetch npm registry data. Skipping version check.");let n=nn;for(let o of Object.keys(r))Sc.valid(o)&&Sc.major(o)===Sc.major(nn)&&Sc.gt(o,n)&&Sc.prerelease(o)===null&&(n=o);return n}async function hQ(t){let e;for(let r=0;r<2;r++)try{e=await $v()}catch(n){t.warn({err:n},"Failed to fetch latest version from npm registry")}if(!e){t.warn("Failed to fetch npm registry data. Skipping version check.");return}Sc.eq(nn,e)||(A.warn(`Update available: v${nn} -> v${e}`),A.warn("This version may be missing critical fixes, features, and security updates."),A.warn('Run "npx momentic@latest upgrade" to update'))}async function yi(){try{await X(Promise.all([c_(),cr.flush()]),{milliseconds:5e3})}catch{}}import{partition as fQ}from"lodash-es";function Rf(t){return t.length===1?"test":"tests"}function ZF(t){return t===1?"1 worker":`${t} workers`}function QF(t){t.length!==0&&(A.info(`Skipping ${t.length} disabled ${Rf(t)}:`),t.forEach(e=>{A.info(`${It}- ${[e.relativeFilePath]}`)}),A.log(""))}function eB(t,e){t.length!==0&&(A.info(`Skipping ${t.length} quarantined ${Rf(t)}:`),t.forEach(r=>{A.info(`${It}- ${[r.relativeFilePath]}: ${e[r.id]?.quarantinedReason}`)}),A.log(""))}function SQ(t,e){t.length!==0&&(A.info(`Running ${t.length} quarantined ${Rf(t)} with ${ZF(e)}:`),t.forEach(r=>{A.info(`${It}- ${[r.testDefinition.relativeFilePath]}${typeof r.inputIndex=="number"?` with input set ${r.inputIndex}`:""}`)}),A.log(""))}function yQ(t,e,r){e.length===0&&t.length>0||(A.info(`Running ${e.length} ${Rf(e)} with ${ZF(r)}:`),e.forEach(n=>{A.info(`${It}- ${[n.testDefinition.relativeFilePath]}${typeof n.inputIndex=="number"?` with input set ${n.inputIndex}`:""}`)}),A.log(""))}function tB({logger:t,localTestsToRunWithInputs:e,parallel:r,shardCount:n,shardIndex:o}){t.info({tests:e.length,shardCount:n,shardIndex:o,parallel:r},"Running local tests");let[i,a]=fQ(e,s=>s.quarantined);SQ(i,r),yQ(i,a,r)}import{randomUUID as bQ}from"crypto";import{cloneDeep as yc}from"lodash-es";import{dirname as EQ}from"path";async function rB({orgId:t,codeEvalTools:e,logger:r,outputDefinitions:n,testContext:o}){let i={};for(let a of n){let{name:s,value:c}=a;i[s]=await $r({orgId:t,s:c,localTools:e,logger:r,context:o})}return i}async function nB({baseUrl:t,envName:e,testName:r,devicePixelRatio:n,apiClient:o,test:i,storageClient:a,codeEvalTools:s,generator:c,orgId:l,variables:u,logger:d,customHeaders:p,testInputs:m,localBrowserConfig:h,aiSettings:g,visualDiffScreenshotStorage:f,tracer:S}){let b=await Oh({settings:h,customHeaders:p,envVariables:u,envName:e,testName:r,baseUrl:t,logger:d,localTools:s,orgId:l}),y={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:J,mode:"runner"},T=Cp({browserType:b.browserType,orgDefaultBrowserType:h.defaultBrowserType});if(!m_(T)){let x=`Browser ${T} is required by the test named ${i.name} but does not appear to be installed on this machine. Please install it using 'momentic install-browsers' before running tests. Attempting to continue...`;A.warn(x),J.warn(x)}let w=await Fn.init({baseUrl:t,logger:d,userBrowserSettings:b,storage:a,enricher:new qi(y,c),contextArgs:{viewport:i.advanced.viewport??Ar,locale:i.advanced.locale??_i,geolocation:i.advanced.geolocation??Pi,timezoneId:i.advanced.timezone??Ii,colorScheme:i.advanced.colorScheme,deviceScaleFactor:n},callbacks:{onNetworkPage:x=>S.onNetworkPage(x),onNetworkLogs:x=>S.onNetworkLogs(x)},iconKnowledgeBase:null,videoOptions:S.videoOutputPath?{videoOutputPath:S.videoOutputPath,onVideoPageChange:({videoName:x})=>{S.setActiveVideo(x)}}:void 0}),P=new aa({browser:w,generator:c,logger:d,orgId:l,options:{scratchPadId:void 0,slowMoMs:b.slowMoMs,autoFollowNewTabs:b.autoFollowNewTabs,useMemory:g.useMemory,aiPageFiltering:g.aiPageFiltering},storage:a,localCodeEvalTools:s,visualDiffScreenshotStorage:f}),v=new Br({baseUrl:t,currentUrl:P.browser.url(),variablesFromEnvironment:u,envName:e,testName:r});return i.parameters&&await Promise.all(i.parameters.map(async x=>{let{name:O,defaultValue:L,required:N}=x,F=m?.[O];N&&F===void 0&&(A.error(`Required parameter '${O}' is required by test '${i.name}' but not provided`),process.exit(1));let W=await $r({orgId:l,s:F??L,localTools:s,logger:d,context:Br.dummyContext(v.getEnvName())});v.setMomenticSystemVariable(O,W)})),{controller:P,context:v}}async function oB({testAdvancedSettings:t,orgSettings:e,logger:r}){if(t.failureRecovery===!1||t.failureRecovery===void 0&&!e?.failureRecovery)return!1;if(!Va){let n="This test is ineligible for failure recovery since this does not appear to be a CI environment";return r.warn(n),A.warn(n),!1}return!0}async function iB({attemptInputs:t,attemptFixtures:e,attemptMetadata:r}){let{orgId:n,runId:o}=r,{controller:i,context:a,codeEvalTools:s,storageClient:c,logger:l,usageTracker:u,tracer:d}=e,{test:p,orgSettings:m}=t;l.info(`Running test '${p.name}' locally (run link: https://app.momentic.ai/runs/${o})`);let h={controller:i,storage:c,usageTracker:u,context:a,logger:l,codeEvalTools:s},g={orgId:n,runId:o,testMetadata:p,steps:p.steps,beforeSteps:p.beforeSteps,afterSteps:p.afterSteps,orgSettings:m},f={collectDebugData:!0,reinitializeBrowser:!0,disableHealing:!await oB({testAdvancedSettings:p.advanced,orgSettings:m.ai,logger:l})};return await Ih({fixtures:h,inputs:g,options:f,callbacks:{step:{},test:{onTestComplete:async()=>{await i.browser.cleanup()}}},testParams:{tracer:d}})}async function aB(t){let{testDefinition:e,logger:r}=t,n=new Date;try{return await TQ(t)}catch(o){let i="Fatal error running test";return A.error(`${i}: ${o.message}`),r.error({err:o},i),{results:[],parameters:t,failureReason:"UnknownError",failureDetails:{errorMessage:o.message,errorStack:o.stack},status:"FAILED",attempts:0,test:e,filePath:e.relativeFilePath,startedAt:n,lastAttemptStartedAt:n,finishedAt:new Date,outputs:{},quarantined:t.quarantined,quarantinedMetadata:t.quarantinedMetadata}}}async function TQ(t){let{testDefinition:e,project:r,apiClient:n,orgId:o,urlOverride:i,runGroupTracer:a,logger:s,gitMetadata:c,cacheOptions:l,runId:u,testInputs:d,quarantined:p,quarantinedMetadata:m,usageTracker:h}=t,g=new Dl(n,o),f=_o({logger:s,orgId:o,client:n,gitMetadata:c,regenerateCache:l.regenerateCache,alwaysSaveCache:l.alwaysSaveCache,noCache:l.noCache,bustOldestCachePercentage:l.bustOldestCachePercentage}),S=await Tm({cacheStorage:f,logger:s,schemaVersion:e.schemaVersion,stepLists:{steps:e.steps,beforeSteps:e.beforeSteps,afterSteps:e.afterSteps},testId:e.id}),b=S.steps,y=S.beforeSteps??void 0,T=S.afterSteps??void 0,{envName:w,resolvedEnv:P,environmentVariables:v,baseUrl:x}=ng({test:e,envNameOverride:t.envName,urlOverride:i,resolveEnv:F=>Xa(F,r,s)}),O=await a.startRun({logger:s,runId:u,originalSteps:{beforeSteps:e.beforeSteps,steps:e.steps,afterSteps:e.afterSteps},testId:e.id,testName:e.name,directory:EQ(e.relativeFilePath),testDescription:e.description??void 0,testLabels:e.labels,baseUrl:x,environmentName:w,schemaVersion:e.schemaVersion,resolvedInputs:d,quarantined:p,quarantinedReason:m?.quarantinedReason,aiSettings:t.project.config.ai}),L=s.child(O.loggerBindings||{});Object.entries(O.envVarBindings||{}).forEach(([F,W])=>{v[F]=W});let N=await vQ({...t,variables:v,envName:w,resolvedEnv:P,baseUrl:x,storageClient:g,tracer:O,logger:L,cacheStorage:f,stepsWithCaches:b,beforeStepsWithCaches:y,afterStepsWithCaches:T,usageTracker:h});return await O.finish({logger:s,status:N.status,finishedAt:N.finishedAt,failureDetails:N.failureDetails,failureReason:N.failureReason,isFlake:N.isFlake,failureRecoveryDetails:N.failureRecoveryDetails}),{runId:O.runId,...N}}async function vQ(t){let{testDefinition:e,stepsWithCaches:r,beforeStepsWithCaches:n,afterStepsWithCaches:o,project:i,regenerateGoldenFiles:a,apiClient:s,generator:c,baseUrl:l,storageClient:u,orgId:d,envName:p,urlOverride:m,customHeaders:h,testInputs:g,variables:f,resolvedEnv:S,retriesOverride:b,devicePixelRatio:y,logUpdate:T,tracer:w,logger:P,cacheStorage:v,gitMetadata:x,quarantined:O,quarantinedMetadata:L,usageTracker:N}=t,F=i.config.ai?.aiFailureAnalysis??!1,W=new Date,H=new Ml(i,s,a),de={...i.config},$={envName:p,urlOverride:m,customHeaders:h,testInputs:g},B,ae=Math.abs(b??e.retries??i.config.retries??0),ce=[];P.info({...x,labels:e.labels,name:e.name,cwd:process.cwd()},"Starting test run using CLI");for(let _e=0;_e<=ae;_e++){let be=bQ(),se=await w.startAttempt(be),Q=P.child(se.loggerBindings||{}),ve={...e,steps:yc(r),beforeSteps:yc(n),afterSteps:yc(o)};_e!==0&&T("RETRY",`attempt ${_e+1}/${ae+1}`);let Re=new Date,_=de.advanced?.fakerConstantSeed,oe=new xo({httpClient:new hr({baseUrl:s.baseUrl,apiKey:s.apiKey,logger:Q,mode:"runner"}),fakerSeed:_?ul:void 0}),ge=se;try{let{controller:Yr,context:Er}=await nB({tracer:se,baseUrl:l,envName:p,testName:ve.name,apiClient:s,devicePixelRatio:y,logger:Q,storageClient:u,codeEvalTools:oe,test:ve,generator:c,orgId:d,variables:f,customHeaders:h,testInputs:g,localBrowserConfig:{...i.config.browser||{},...S?.browser||{},...ve.advanced},aiSettings:{...i.config.ai||{},...ve.advanced||{}},visualDiffScreenshotStorage:H});B=await iB({attemptMetadata:{attemptNumber:_e+1,orgId:d,runId:w.runId},attemptFixtures:{logger:Q,storageClient:u,usageTracker:N,codeEvalTools:oe,apiClient:s,context:Er,controller:Yr,tracer:se},attemptInputs:{test:ve,orgSettings:de}});let co=new Date,ga={logger:P,cacheStorage:v,orgId:d,testId:e.id,originalStepsWithCaches:{steps:yc(r),beforeSteps:yc(n),afterSteps:yc(o)},updatedStepsWithCaches:{steps:ve.steps,beforeSteps:ve.beforeSteps,afterSteps:ve.afterSteps}};B?.status==="PASSED"?await Rl(ga):B?.status==="FAILED"&&_e===ae&&await Cl(ga),await se.finish({logger:Q,result:B}),ce.unshift(B.status);let ee=await rB({orgId:d,codeEvalTools:oe,logger:Q,outputDefinitions:e.outputs??[],testContext:Er}),_s=sC(ce),Is=_e+1;if(B.status!=="FAILED")return{...B,runAttemptId:be,parameters:$,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:co,attempts:Is,baseUrl:l,outputs:ee,isFlake:_s,quarantined:O,quarantinedMetadata:L};let ha=B.failedStepResult,zo=ha?.message||"Unknown failure",Ho=ha?.failureReason??lR(zo)??"UnknownError",Ec=Q.child({failureReason:Ho,errorMessage:zo,numAttempts:(ae+1).toString(),name:ve.name});if(_e<ae){Ec.warn(`Retrying failed execution attempt for run: ${zo}`);continue}Ec.error(`Test failed after all exhausting attempts: ${zo}`);let Ps=new Error(zo),bi={errorMessage:zo,errorStack:Ps.stack},wf;if(F){let Tc;try{if(B.results&&B.results.length>0){let{classification:je,aiFailureReason:$n}=await PI({logger:Q,browserStateStorage:ge,generator:c,fullResults:B,failureReason:Ho,error:Ps,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});Tc=je,wf=$n}}catch(je){Q.warn({err:je},"Failed to classify test results")}Tc&&(bi.classification=Tc,Ho=wf??Ho)}return{...B,runAttemptId:be,parameters:$,failureDetails:bi,failureReason:Ho,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:co,attempts:_e+1,baseUrl:l,outputs:ee,quarantined:O,quarantinedMetadata:L}}catch(Yr){Ac(Yr);let Er=`Encountered fatal platform error while running test '${ve.name}': ${Yr}`,co=new Date,ga=_e+1;Q.error({err:Yr},Er),A.error(Er);let ee={errorMessage:Yr.message,errStack:Yr.stack},_s={status:"FAILED",failureDetails:ee,failureReason:"InternalPlatformError",finishedAt:co};return await se.finish({logger:Q,result:{status:"FAILED",results:[]}}),{..._s,runAttemptId:be,results:[],parameters:$,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:new Date,attempts:ga,baseUrl:l,outputs:{},quarantined:O,quarantinedMetadata:L}}}throw new Error("This code should not be reachable")}import CQ from"adm-zip";import wQ from"path";function AQ(t){switch(t){case"PASSED":return"SUCCESS";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":case"PENDING":case"RETRYING":case"WAITING_FOR_USER":return"RUNNING"}}var xs=class{constructor(e,r,n,o){this.orgId=e;this.testId=r;this.testName=n;this.diskStorage=o}children=[];finished=!1;stepFrequenciesByType={};async getScreenshot(e,r){return this.diskStorage.readFile(`${xr}/${r}.jpeg`)}async getHtmlSnapshot(e,r){return this.diskStorage.readFile(`${xr}/${r}.html`)?.toString()}getParentStepIdChain(){return[]}recordStepStat(e){e.type!=="PRESET_ACTION"?this.stepFrequenciesByType[e.type]=(this.stepFrequenciesByType[e.type]||0)+1:this.stepFrequenciesByType[e.command.type]=(this.stepFrequenciesByType[e.command.type]||0)+1}sendFinalizedStepStats(){for(let[e,r]of Object.entries(this.stepFrequenciesByType))cr.increment("test_step_execution",r,[`type:${e}`,"platform:browser","executor:cli",`orgId:${this.orgId}`])}async startStep(e){let{step:r}=e;this.recordStepStat(r);let n={step:r,status:"RUNNING",startedAt:new Date},o=new Wv(this.orgId,this.testId,this.testName,n,this.diskStorage);return this.children.push(o),o}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(r=>r.finishInternal({status:AQ(e.status),finishedAt:e.finishedAt}))),this.sendFinalizedStepStats())}};function RQ(t){switch(t){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Wv=class{constructor(e,r,n,o,i){this.orgId=e;this.testId=r;this.testName=n;this.metadata=o;this.diskStorage=i;this.interactionTracer=new pi,di.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:r,screenshot:n}=e;this.metadata.beforeSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.jpeg`,contents:n})}attachAfterScreenshot(e){let{snapshotId:r,screenshot:n}=e;this.metadata.afterSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.jpeg`,contents:n})}attachBeforeHtmlSnapshot(e){let{snapshotId:r,html:n}=e;this.metadata.beforeSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.html`,contents:n})}attachAfterHtmlSnapshot(e){let{snapshotId:r,html:n}=e;this.metadata.afterSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.html`,contents:n})}recordTargetAutoHeal(e){let{healType:r}=e,n=r==="AI"?"ai-target-heal":"cache-heal";cr.increment("test_event",1,[`name:${n}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:r,healedAt:new Date}}recordStepDuration(e){let r=e.step.type!=="PRESET_ACTION"?e.step.type:e.step.command.type;cr.distribution("test_step_duration",e.durationMs,[`type:${r}`,"platform:browser","executor:cli",`orgId:${this.orgId}`])}async finishInternal(e){this.finished||(this.finished=!0,this.interactionTracer.finish(),await Promise.all(this.children.map(r=>r.finish({status:RQ(e.status),finishedAt:e.finishedAt}))))}async finish(e){await this.finishInternal(e.step),e.step.trace=this.interactionTracer.getRootSpan()}async startSubSteps(){let e=new xs(this.orgId,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}};var qd=class{constructor(e,r,n,o,i,a,s){this.orgId=e;this.testId=r;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;this.recordVideo=s;this.diskStorage.mkdir(xr),this.harPagesStream=this.diskStorage.createFileStream(`${xr}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${xr}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${xr}/resource-usage.ndjson`),this.resourceUsageSampler=GO({keepSamples:!1,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
5095
+ `),1)}function XF(){return aQ()==="darwin"&&iQ("system_profiler SPDisplaysDataType").toString().includes("Retina")}function Gv(t){XF()&&t===1&&(A.warn("If you are using Momentic on a Retina screen, relaunch with the --pixel-ratio option to avoid incorrect viewport calculations."),A.warn("Confirm your device's pixel-ratio at https://www.mydevice.io."))}import sQ from"@actions/exec";import lQ from"@actions/io";import cQ from"quote";import uQ from"string-argv";async function JF(t,e=!0){let r=uQ(t),n=await lQ.which(r[0],!0),o=r.slice(1),i=sQ.exec(cQ(n),o,{delay:100});if(e)return i}import dQ from"csv-parser";import{createReadStream as pQ}from"fs";function Vv(t){return new Promise((e,r)=>{let n=[];pQ(t).pipe(dQ()).on("data",o=>n.push(o)).on("end",()=>e(n)).on("error",o=>r(o))})}import Sc from"semver";import{z as Af}from"zod";var nn="2.45.3",mQ="https://registry.npmjs.org/momentic",gQ=Af.object({versions:Af.record(Af.string(),Af.unknown()).optional()});async function ur(t){try{await hQ(t)}catch(e){A.warn({err:e},"Failed to check CLI version against NPM servers")}}async function $v(){let t=await X(fetch(mQ),{milliseconds:5e3});if(!t.ok)throw new Error(`Got error status code ${t.statusText}`);let e=await t.json(),r=gQ.parse(e).versions;if(!r)throw new Error("Failed to fetch npm registry data. Skipping version check.");let n=nn;for(let o of Object.keys(r))Sc.valid(o)&&Sc.major(o)===Sc.major(nn)&&Sc.gt(o,n)&&Sc.prerelease(o)===null&&(n=o);return n}async function hQ(t){let e;for(let r=0;r<2;r++)try{e=await $v()}catch(n){t.warn({err:n},"Failed to fetch latest version from npm registry")}if(!e){t.warn("Failed to fetch npm registry data. Skipping version check.");return}Sc.eq(nn,e)||(A.warn(`Update available: v${nn} -> v${e}`),A.warn("This version may be missing critical fixes, features, and security updates."),A.warn('Run "npx momentic@latest upgrade" to update'))}async function yi(){try{await X(Promise.all([c_(),cr.flush()]),{milliseconds:5e3})}catch{}}import{partition as fQ}from"lodash-es";function Rf(t){return t.length===1?"test":"tests"}function ZF(t){return t===1?"1 worker":`${t} workers`}function QF(t){t.length!==0&&(A.info(`Skipping ${t.length} disabled ${Rf(t)}:`),t.forEach(e=>{A.info(`${It}- ${[e.relativeFilePath]}`)}),A.log(""))}function eB(t,e){t.length!==0&&(A.info(`Skipping ${t.length} quarantined ${Rf(t)}:`),t.forEach(r=>{A.info(`${It}- ${[r.relativeFilePath]}: ${e[r.id]?.quarantinedReason}`)}),A.log(""))}function SQ(t,e){t.length!==0&&(A.info(`Running ${t.length} quarantined ${Rf(t)} with ${ZF(e)}:`),t.forEach(r=>{A.info(`${It}- ${[r.testDefinition.relativeFilePath]}${typeof r.inputIndex=="number"?` with input set ${r.inputIndex}`:""}`)}),A.log(""))}function yQ(t,e,r){e.length===0&&t.length>0||(A.info(`Running ${e.length} ${Rf(e)} with ${ZF(r)}:`),e.forEach(n=>{A.info(`${It}- ${[n.testDefinition.relativeFilePath]}${typeof n.inputIndex=="number"?` with input set ${n.inputIndex}`:""}`)}),A.log(""))}function tB({logger:t,localTestsToRunWithInputs:e,parallel:r,shardCount:n,shardIndex:o}){t.info({tests:e.length,shardCount:n,shardIndex:o,parallel:r},"Running local tests");let[i,a]=fQ(e,s=>s.quarantined);SQ(i,r),yQ(i,a,r)}import{randomUUID as bQ}from"crypto";import{cloneDeep as yc}from"lodash-es";import{dirname as EQ}from"path";async function rB({orgId:t,codeEvalTools:e,logger:r,outputDefinitions:n,testContext:o}){let i={};for(let a of n){let{name:s,value:c}=a;i[s]=await $r({orgId:t,s:c,localTools:e,logger:r,context:o})}return i}async function nB({baseUrl:t,envName:e,testName:r,devicePixelRatio:n,apiClient:o,test:i,storageClient:a,codeEvalTools:s,generator:c,orgId:l,variables:u,logger:d,customHeaders:p,testInputs:m,localBrowserConfig:h,aiSettings:g,visualDiffScreenshotStorage:f,tracer:S}){let b=await Oh({settings:h,customHeaders:p,envVariables:u,envName:e,testName:r,baseUrl:t,logger:d,localTools:s,orgId:l}),y={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:J,mode:"runner"},T=Cp({browserType:b.browserType,orgDefaultBrowserType:h.defaultBrowserType});if(!m_(T)){let x=`Browser ${T} is required by the test named ${i.name} but does not appear to be installed on this machine. Please install it using 'momentic install-browsers' before running tests. Attempting to continue...`;A.warn(x),J.warn(x)}let w=await Fn.init({baseUrl:t,logger:d,userBrowserSettings:b,storage:a,enricher:new qi(y,c),contextArgs:{viewport:i.advanced.viewport??Ar,locale:i.advanced.locale??_i,geolocation:i.advanced.geolocation??Pi,timezoneId:i.advanced.timezone??Ii,colorScheme:i.advanced.colorScheme,deviceScaleFactor:n},callbacks:{onNetworkPage:x=>S.onNetworkPage(x),onNetworkLogs:x=>S.onNetworkLogs(x)},iconKnowledgeBase:null,videoOptions:S.videoOutputPath?{videoOutputPath:S.videoOutputPath,onVideoPageChange:({videoName:x})=>{S.setActiveVideo(x)}}:void 0}),P=new aa({browser:w,generator:c,logger:d,orgId:l,options:{scratchPadId:void 0,slowMoMs:b.slowMoMs,autoFollowNewTabs:b.autoFollowNewTabs,useMemory:g.useMemory,aiPageFiltering:g.aiPageFiltering},storage:a,localCodeEvalTools:s,visualDiffScreenshotStorage:f}),v=new Br({baseUrl:t,currentUrl:P.browser.url(),variablesFromEnvironment:u,envName:e,testName:r});return i.parameters&&await Promise.all(i.parameters.map(async x=>{let{name:O,defaultValue:L,required:N}=x,F=m?.[O];N&&F===void 0&&(A.error(`Required parameter '${O}' is required by test '${i.name}' but not provided`),process.exit(1));let W=await $r({orgId:l,s:F??L,localTools:s,logger:d,context:Br.dummyContext(v.getEnvName())});v.setMomenticSystemVariable(O,W)})),{controller:P,context:v}}async function oB({testAdvancedSettings:t,orgSettings:e,logger:r}){if(t.failureRecovery===!1||t.failureRecovery===void 0&&!e?.failureRecovery)return!1;if(!Va){let n="This test is ineligible for failure recovery since this does not appear to be a CI environment";return r.warn(n),A.warn(n),!1}return!0}async function iB({attemptInputs:t,attemptFixtures:e,attemptMetadata:r}){let{orgId:n,runId:o}=r,{controller:i,context:a,codeEvalTools:s,storageClient:c,logger:l,usageTracker:u,tracer:d}=e,{test:p,orgSettings:m}=t;l.info(`Running test '${p.name}' locally (run link: https://app.momentic.ai/runs/${o})`);let h={controller:i,storage:c,usageTracker:u,context:a,logger:l,codeEvalTools:s},g={orgId:n,runId:o,testMetadata:p,steps:p.steps,beforeSteps:p.beforeSteps,afterSteps:p.afterSteps,orgSettings:m},f={collectDebugData:!0,reinitializeBrowser:!0,disableHealing:!await oB({testAdvancedSettings:p.advanced,orgSettings:m.ai,logger:l})};return await Ih({fixtures:h,inputs:g,options:f,callbacks:{step:{},test:{onTestComplete:async()=>{await i.browser.cleanup()}}},testParams:{tracer:d}})}async function aB(t){let{testDefinition:e,logger:r}=t,n=new Date;try{return await TQ(t)}catch(o){let i="Fatal error running test";return A.error(`${i}: ${o.message}`),r.error({err:o},i),{results:[],parameters:t,failureReason:"UnknownError",failureDetails:{errorMessage:o.message,errorStack:o.stack},status:"FAILED",attempts:0,test:e,filePath:e.relativeFilePath,startedAt:n,lastAttemptStartedAt:n,finishedAt:new Date,outputs:{},quarantined:t.quarantined,quarantinedMetadata:t.quarantinedMetadata}}}async function TQ(t){let{testDefinition:e,project:r,apiClient:n,orgId:o,urlOverride:i,runGroupTracer:a,logger:s,gitMetadata:c,cacheOptions:l,runId:u,testInputs:d,quarantined:p,quarantinedMetadata:m,usageTracker:h}=t,g=new Dl(n,o),f=_o({logger:s,orgId:o,client:n,gitMetadata:c,regenerateCache:l.regenerateCache,alwaysSaveCache:l.alwaysSaveCache,noCache:l.noCache,bustOldestCachePercentage:l.bustOldestCachePercentage}),S=await Tm({cacheStorage:f,logger:s,schemaVersion:e.schemaVersion,stepLists:{steps:e.steps,beforeSteps:e.beforeSteps,afterSteps:e.afterSteps},testId:e.id}),b=S.steps,y=S.beforeSteps??void 0,T=S.afterSteps??void 0,{envName:w,resolvedEnv:P,environmentVariables:v,baseUrl:x}=ng({test:e,envNameOverride:t.envName,urlOverride:i,resolveEnv:F=>Xa(F,r,s)}),O=await a.startRun({logger:s,runId:u,originalSteps:{beforeSteps:e.beforeSteps,steps:e.steps,afterSteps:e.afterSteps},testId:e.id,testName:e.name,directory:EQ(e.relativeFilePath),testDescription:e.description??void 0,testLabels:e.labels,baseUrl:x,environmentName:w,schemaVersion:e.schemaVersion,resolvedInputs:d,quarantined:p,quarantinedReason:m?.quarantinedReason,aiSettings:t.project.config.ai}),L=s.child(O.loggerBindings||{});Object.entries(O.envVarBindings||{}).forEach(([F,W])=>{v[F]=W});let N=await vQ({...t,variables:v,envName:w,resolvedEnv:P,baseUrl:x,storageClient:g,tracer:O,logger:L,cacheStorage:f,stepsWithCaches:b,beforeStepsWithCaches:y,afterStepsWithCaches:T,usageTracker:h});return await O.finish({logger:s,status:N.status,finishedAt:N.finishedAt,failureDetails:N.failureDetails,failureReason:N.failureReason,isFlake:N.isFlake,failureRecoveryDetails:N.failureRecoveryDetails}),{runId:O.runId,...N}}async function vQ(t){let{testDefinition:e,stepsWithCaches:r,beforeStepsWithCaches:n,afterStepsWithCaches:o,project:i,regenerateGoldenFiles:a,apiClient:s,generator:c,baseUrl:l,storageClient:u,orgId:d,envName:p,urlOverride:m,customHeaders:h,testInputs:g,variables:f,resolvedEnv:S,retriesOverride:b,devicePixelRatio:y,logUpdate:T,tracer:w,logger:P,cacheStorage:v,gitMetadata:x,quarantined:O,quarantinedMetadata:L,usageTracker:N}=t,F=i.config.ai?.aiFailureAnalysis??!1,W=new Date,H=new Ml(i,s,a),de={...i.config},$={envName:p,urlOverride:m,customHeaders:h,testInputs:g},B,ae=Math.abs(b??e.retries??i.config.retries??0),ce=[];P.info({...x,labels:e.labels,name:e.name,cwd:process.cwd()},"Starting test run using CLI");for(let _e=0;_e<=ae;_e++){let be=bQ(),se=await w.startAttempt(be),Q=P.child(se.loggerBindings||{}),ve={...e,steps:yc(r),beforeSteps:yc(n),afterSteps:yc(o)};_e!==0&&T("RETRY",`attempt ${_e+1}/${ae+1}`);let Re=new Date,_=de.advanced?.fakerConstantSeed,oe=new xo({httpClient:new hr({baseUrl:s.baseUrl,apiKey:s.apiKey,logger:Q,mode:"runner"}),fakerSeed:_?ul:void 0}),ge=se;try{let{controller:Yr,context:Er}=await nB({tracer:se,baseUrl:l,envName:p,testName:ve.name,apiClient:s,devicePixelRatio:y,logger:Q,storageClient:u,codeEvalTools:oe,test:ve,generator:c,orgId:d,variables:f,customHeaders:h,testInputs:g,localBrowserConfig:{...i.config.browser||{},...S?.browser||{},...ve.advanced},aiSettings:{...i.config.ai||{},...ve.advanced||{}},visualDiffScreenshotStorage:H});B=await iB({attemptMetadata:{attemptNumber:_e+1,orgId:d,runId:w.runId},attemptFixtures:{logger:Q,storageClient:u,usageTracker:N,codeEvalTools:oe,apiClient:s,context:Er,controller:Yr,tracer:se},attemptInputs:{test:ve,orgSettings:de}});let co=new Date,ga={logger:P,cacheStorage:v,orgId:d,testId:e.id,originalStepsWithCaches:{steps:yc(r),beforeSteps:yc(n),afterSteps:yc(o)},updatedStepsWithCaches:{steps:ve.steps,beforeSteps:ve.beforeSteps,afterSteps:ve.afterSteps}};B?.status==="PASSED"?await Rl(ga):B?.status==="FAILED"&&_e===ae&&await Cl(ga),await se.finish({logger:Q,result:B}),ce.unshift(B.status);let ee=await rB({orgId:d,codeEvalTools:oe,logger:Q,outputDefinitions:e.outputs??[],testContext:Er}),_s=sC(ce),Is=_e+1;if(B.status!=="FAILED")return{...B,runAttemptId:be,parameters:$,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:co,attempts:Is,baseUrl:l,outputs:ee,isFlake:_s,quarantined:O,quarantinedMetadata:L};let ha=B.failedStepResult,zo=ha?.message||"Unknown failure",Ho=ha?.failureReason??lR(zo)??"UnknownError",Ec=Q.child({failureReason:Ho,errorMessage:zo,numAttempts:(ae+1).toString(),name:ve.name});if(_e<ae){Ec.warn(`Retrying failed execution attempt for run: ${zo}`);continue}Ec.error(`Test failed after all exhausting attempts: ${zo}`);let Ps=new Error(zo),bi={errorMessage:zo,errorStack:Ps.stack},wf;if(F){let Tc;try{if(B.results&&B.results.length>0){let{classification:je,aiFailureReason:$n}=await PI({logger:Q,browserStateStorage:ge,generator:c,fullResults:B,failureReason:Ho,error:Ps,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});Tc=je,wf=$n}}catch(je){Q.warn({err:je},"Failed to classify test results")}Tc&&(bi.classification=Tc,Ho=wf??Ho)}return{...B,runAttemptId:be,parameters:$,failureDetails:bi,failureReason:Ho,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:co,attempts:_e+1,baseUrl:l,outputs:ee,quarantined:O,quarantinedMetadata:L}}catch(Yr){Ac(Yr);let Er=`Encountered fatal platform error while running test '${ve.name}': ${Yr}`,co=new Date,ga=_e+1;Q.error({err:Yr},Er),A.error(Er);let ee={errorMessage:Yr.message,errStack:Yr.stack},_s={status:"FAILED",failureDetails:ee,failureReason:"InternalPlatformError",finishedAt:co};return await se.finish({logger:Q,result:{status:"FAILED",results:[]}}),{..._s,runAttemptId:be,results:[],parameters:$,test:ve,filePath:ve.relativeFilePath,startedAt:W,lastAttemptStartedAt:Re,finishedAt:new Date,attempts:ga,baseUrl:l,outputs:{},quarantined:O,quarantinedMetadata:L}}}throw new Error("This code should not be reachable")}import CQ from"adm-zip";import wQ from"path";function AQ(t){switch(t){case"PASSED":return"SUCCESS";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":case"PENDING":case"RETRYING":case"WAITING_FOR_USER":return"RUNNING"}}var xs=class{constructor(e,r,n,o){this.orgId=e;this.testId=r;this.testName=n;this.diskStorage=o}children=[];finished=!1;stepFrequenciesByType={};async getScreenshot(e,r){return this.diskStorage.readFile(`${xr}/${r}.jpeg`)}async getHtmlSnapshot(e,r){return this.diskStorage.readFile(`${xr}/${r}.html`)?.toString()}getParentStepIdChain(){return[]}recordStepStat(e){e.type!=="PRESET_ACTION"?this.stepFrequenciesByType[e.type]=(this.stepFrequenciesByType[e.type]||0)+1:this.stepFrequenciesByType[e.command.type]=(this.stepFrequenciesByType[e.command.type]||0)+1}sendFinalizedStepStats(){for(let[e,r]of Object.entries(this.stepFrequenciesByType))cr.increment("test_step_execution",r,[`type:${e}`,"platform:browser","executor:cli",`orgId:${this.orgId}`])}async startStep(e){let{step:r}=e;this.recordStepStat(r);let n={step:r,status:"RUNNING",startedAt:new Date},o=new Wv(this.orgId,this.testId,this.testName,n,this.diskStorage);return this.children.push(o),o}async finish(e){this.finished||(this.finished=!0,await Promise.all(this.children.map(r=>r.finishInternal({status:AQ(e.status),finishedAt:e.finishedAt}))),this.sendFinalizedStepStats())}};function RQ(t){switch(t){case"SUCCESS":return"PASSED";case"FAILED":return"FAILED";case"CANCELLED":return"CANCELLED";case"RUNNING":return"RUNNING";case"IDLE":return"PENDING"}}var Wv=class{constructor(e,r,n,o,i){this.orgId=e;this.testId=r;this.testName=n;this.metadata=o;this.diskStorage=i;this.interactionTracer=new pi,di.initializeRootTracerContext(this.interactionTracer)}children=[];finished=!1;interactionTracer;getParentStepIdChain(){return[]}attachBeforeScreenshot(e){let{snapshotId:r,screenshot:n}=e;this.metadata.beforeSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.jpeg`,contents:n})}attachAfterScreenshot(e){let{snapshotId:r,screenshot:n}=e;this.metadata.afterSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.jpeg`,contents:n})}attachBeforeHtmlSnapshot(e){let{snapshotId:r,html:n}=e;this.metadata.beforeSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.html`,contents:n})}attachAfterHtmlSnapshot(e){let{snapshotId:r,html:n}=e;this.metadata.afterSnapshotId=r,this.diskStorage.storeFile({name:`${xr}/${r}.html`,contents:n})}recordTargetAutoHeal(e){let{healType:r}=e,n=r==="AI"?"ai-target-heal":"cache-heal";cr.increment("test_event",1,[`name:${n}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:r,healedAt:new Date}}recordStepDuration(e){let r=e.step.type!=="PRESET_ACTION"?e.step.type:e.step.command.type;cr.distribution("test_step_duration",e.durationMs,[`type:${r}`,"platform:browser","executor:cli",`orgId:${this.orgId}`])}async finishInternal(e){this.finished||(this.finished=!0,this.interactionTracer.finish(),await Promise.all(this.children.map(r=>r.finish({status:RQ(e.status),finishedAt:e.finishedAt}))))}async finish(e){await this.finishInternal(e.step),e.step.trace=this.interactionTracer.getRootSpan()}async startSubSteps(){let e=new xs(this.orgId,this.testId,this.testName,this.diskStorage);return this.children.push(e),e}};var qd=class{constructor(e,r,n,o,i,a,s){this.orgId=e;this.testId=r;this.testName=n;this.runAttemptId=o;this.metadata=i;this.diskStorage=a;this.recordVideo=s;this.diskStorage.mkdir(xr),this.harPagesStream=this.diskStorage.createFileStream(`${xr}/har-pages.log`),this.inProgressHarEntries={},this.harEntriesStream=this.diskStorage.createFileStream(`${xr}/har-entries.log`),this.resourceUsageStream=this.diskStorage.createFileStream(`${xr}/resource-usage.ndjson`),this.resourceUsageSampler=GO({keepSamples:!1,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
5096
5096
  `)}})}finished=!1;children=[];harPagesStream;inProgressHarEntries;harEntriesStream;resourceUsageStream;resourceUsageSampler;get loggerBindings(){return{runAttemptId:this.runAttemptId}}get videoOutputPath(){if(this.recordVideo)return wQ.resolve(this.diskStorage.cwd(),xr)}setActiveVideo(e){this.recordVideo&&(this.metadata.activeVideos=this.metadata.activeVideos||[],this.metadata.activeVideos.push({videoName:e,timestamp:new Date}))}onNetworkPage(e){this.finished||this.harPagesStream.write(`${JSON.stringify(e)}
5097
5097
  `)}onNetworkLogs(e){if(!this.finished)for(let[r,n]of Object.entries(e))n.response?(delete this.inProgressHarEntries[r],this.harEntriesStream.write(`${JSON.stringify(n)}
5098
5098
  `)):this.inProgressHarEntries[r]=n}attachConsoleLogs(e){let{logs:r}=e;this.diskStorage.storeFile({name:"console.json",contents:JSON.stringify(r,null,2)})}attachBrowserCrashDump(e){let{crashReportDirFetcher:r,logger:n}=e,o=r();if(!o)return;let i=new CQ;i.addLocalFolder(o,void 0,a=>a!==".DS_Store"),this.diskStorage.storeFile({name:`${xr}/${Ly}`,contents:i.toBuffer()}),n.info({browserCrashZipName:Ly},"Attached browser crash ZIP")}async finish(e){if(this.finished)return;this.finished=!0;let{logger:r,result:n}=e,o={...this.metadata,status:n.status,finishedAt:new Date,results:xm(n.results,r),beforeResults:n.beforeResults?xm(n.beforeResults,r):void 0,afterResults:n.afterResults?xm(n.afterResults,r):void 0};await Promise.all(this.children.map(i=>i.finish({status:o.status,finishedAt:o.finishedAt})));for(let i of Object.values(this.inProgressHarEntries))this.harEntriesStream.write(`${JSON.stringify(i)}
@@ -5101,4 +5101,4 @@ ${t.map(p=>`${It}- ${p}`).join(`
5101
5101
  `),A.info("This wizard will help you bootstrap a new Momentic project. If you need to import existing assets from Momentic Cloud, you can call the 'import' command after initialization."),Cf.existsSync(Il)&&(A.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 e=t.name??await r_("Choose an identifier for your project, such as a service, product, or team name (default: 'app'):","app");await YI()||await gr("A Git repository was not detected in the current directory. Momentic highly recommends initializing your project within a Git repository for seamless version control. Continue?")||process.exit(1),ji({name:e,include:Fm},Il),A.success(`Initialized Momentic project file at ${bc.resolve(Il)}`)});dr.command("app").addOption(yn).addOption(bn).addOption(Si).addOption(Iv).addOption(Lr).addOption(Mv).addOption(Ov).addOption(Lv).action(async t=>{await ur(J),J.setApp("desktop-server");let{apiKey:e,yes:r,server:n,pixelRatio:o,disableCache:i,saveCache:a,regenerateCache:s}=t;jy({disableCache:i,saveCache:a,regenerateCache:s});let c=await Dt({configFilePath:t.config,nameFilter:void 0}),{errors:l,parsingErrors:u,failedTestFilePaths:d,failedModuleFilePaths:p,parsingErrorDetails:m}=await $d({project:c,fix:!1});u>0?(Sl({parsingErrors:u,parsingErrorDetails:m,failedTestFilePaths:d,failedModuleFilePaths:p}),process.exit(1)):l>0&&(A.error(`Found ${l} errors`),A.warn("To fix these errors automatically, run the duplicate-ids check with the --fix flag and then commit the resulting changes"),process.exit(1)),VO(J);let h=new dt({baseUrl:n,apiKey:e,logger:J});await Jm({client:h,skipPrompts:r});let g=pB(import.meta.url),f=bc.dirname(g),S=bc.resolve(f,"..","static"),b=bc.resolve(f,"..","assets"),y=o??jv();Gv(y),await XU({momenticServerUrl:n,apiKey:e,serverPort:pf,appPort:pf,staticDir:S,assetsDir:b,devicePixelRatio:y,regenerateCache:s??!1,noCache:i??!1,alwaysSaveCache:a??!1,initialProject:c});let T=`http://localhost:${pf}`;await FQ(T)});dr.command("mcp").description("Start the MCP server over stdio.").addOption(yn).addOption(bn).addOption(Si).addOption(Lr).action(async t=>{await ur(J),J.setApp("mcp");let{apiKey:e,server:r,yes:n}=t;A.setMinLevel("error");let o=await Dt({configFilePath:t.config,nameFilter:void 0}),{errors:i,parsingErrors:a,failedTestFilePaths:s,failedModuleFilePaths:c,parsingErrorDetails:l}=await $d({project:o,fix:!1});a>0?(Sl({parsingErrors:a,parsingErrorDetails:l,failedTestFilePaths:s,failedModuleFilePaths:c}),process.exit(1)):i>0&&(A.error(`Found ${i} errors`),A.warn("To fix these errors automatically, run the duplicate-ids check with the --fix flag and then commit the resulting changes"),process.exit(1));let u=new dt({baseUrl:r,apiKey:e,logger:J});await Jm({client:u,skipPrompts:n}),await yv({project:o,logger:J,apiKey:e,serverUrl:r,cliVersion:nn??"0.0.0"})});var fB=dr.command("queue").description("Queue tests or suites to run on Momentic Cloud");fB.command("suites").description("Run one or more suites on Momentic Cloud").addOption(yn).addOption(bn).addOption(Rv).addOption(Cv).addOption(Si).addArgument(xF).addOption(ff).addOption(hf).addOption(gf).action(async(t,e)=>{await ur(J);let{apiKey:r,server:n,wait:o,waitTimeout:i,env:a,urlOverride:s}=e,c=mf(e.customHeaders),l=new dt({baseUrl:n,apiKey:r,logger:J});(!t||!Array.isArray(t)||!t.length)&&(A.error("Must pass at least one suite to run."),process.exit(1));let{orgId:u}=await l.getAuthInfo();await zF({client:l,orgId:u,wait:o,suitePaths:t,waitTimeout:i,env:a,urlOverride:s,customHeaders:c}),await yi()});fB.command("tests").description("Run one or more tests on Momentic Cloud").addOption(yn).addOption(bn).addOption(Si).addOption(gf).addOption(Pv).addOption(ff).addOption(hf).addOption(new Nr("--all","Run all tests.").default(!1)).addOption(Rv).addOption(Cv).addArgument(CF).action(async(t,e)=>{await ur(J);let{all:r,apiKey:n,env:o,server:i,inputCsv:a,urlOverride:s,wait:c,waitTimeout:l,yes:u}=e,d=mf(e.customHeaders);for(let g of t)(g.endsWith(".yaml")||Cf.existsSync(g))&&A.warn("Are you trying to run a test on your local machine? If so, please use the 'run' command instead of the 'queue' command");let p=new dt({baseUrl:i,apiKey:n,logger:J}),{orgId:m}=await p.getAuthInfo(),h;a&&(h=await Vv(a)),await HF({client:p,orgId:m,tests:t,all:r,customHeaders:d,env:o,urlOverride:s,wait:c,waitTimeout:l,testInputMatrix:h,yes:u}),await yi(),process.exit(0)});var BQ=dr.command("list").description("List test paths");BQ.addOption(Lr).addOption(ma).addOption(xv).addOption(_v).addOption(new Nr("--labels <labels...>","Only run tests with the specified label(s).")).addArgument(Nv).action(async(t,e)=>{let r=await Dt({configFilePath:e.config,nameFilter:e.filter}),n=await le(r),o=await hc({tests:t,momenticFiles:n,yes:!0,project:r,include:e.include,exclude:e.exclude,labels:e.labels,logger:new Ga(40,{})});A.info(o.map(i=>i.relativeFilePath).join(`
5102
5102
  `)),process.exit(0)});var zQ=dr.command("run").alias("test").description("Run tests on the local machine");zQ.addOption(yn).addOption(bn).addOption(Lr).addOption(ma).addOption(Si).addOption(gf).addOption(Pv).addOption(Mv).addOption(Ov).addOption(Lv).addOption(EF).addOption(RF).addOption(TF).addOption(vF).addOption(AF).addOption(hf).addOption(ff).addOption(Iv).addOption(new Nr("--start <start>","Arbitrary setup command that will run before Momentic steps begin.")).addOption(new Nr("--wait-on <waitOn>","URL to wait to become accessible before Momentic tests begin.")).addOption(new Nr("--wait-on-proxy <waitOnProxy>","HTTP proxy to use with the --wait-on command. Specify as https://username:pass@domain.com:2345")).addOption(new Nr("--wait-on-timeout <waitOnTimeout>","Max time in seconds to wait for the --wait-on URL to become accessible.").default(60).argParser(lo)).addOption(new Nr("--retries <retries>","Number of retries to attempt when running tests locally. Defaults to each test's own retry configuration.").argParser(lo)).addOption(new Nr("-p, --parallel <parallel>","The number of tests to run in parallel. Defaults to 1.").argParser(lo)).addOption(new Nr("--labels <labels...>","Only run tests with the specified label(s).")).addOption(PF).addOption(new Nr("--update-golden-files","Update locally stored golden files for steps that this is enabled for.").default(!1)).addOption(gF).addOption(hF).addOption(wv).addOption(fF).addOption(yF).addOption(SF).addOption(xv).addOption(_v).addOption(IF).addArgument(Nv).action(async(t,e)=>{await ur(J);let{disableCache:r,saveCache:n,regenerateCache:o,name:i}=e;jy({disableCache:r,saveCache:n,regenerateCache:o}),S_({shardIndex:e.shardIndex,shardCount:e.shardCount});let a=mf(e.customHeaders),s=await Dt({configFilePath:e.config,nameFilter:e.filter}),c=e.parallel??s.config.parallel??1;dB().length<c*2&&A.warn(`You requested to run tests in parallel ${c} at a time on a machine with ${dB().length} cores. This may cause performance issues and test failures as Chrome requires at least 2 cores per browser instance.`),A.debug({projectName:s.config.name},"Identified project config");let{errors:l,parsingErrors:u,parsingErrorDetails:d,failedTestFilePaths:p,failedModuleFilePaths:m}=await $d({project:s,fix:!1});u>0?(Sl({parsingErrors:u,parsingErrorDetails:d,failedTestFilePaths:p,failedModuleFilePaths:m}),process.exit(1)):l>0&&(A.error(`Found ${l} errors`),A.warn("To fix these errors automatically, run the duplicate-ids check with the --fix flag and then commit the resulting changes"),process.exit(1));let h=new dt({baseUrl:e.server,apiKey:e.apiKey,logger:J});A.debug("Checking API key and dependencies");let{orgId:g,userId:f}=await Jm({client:h,skipPrompts:e.yes});A.debug("API key check and browser installation complete");let S=e.outputDir??s.config.outputDir,b=e.reporterDir??s.config.reporterDir,y=kQ(),T=J.child({cliVersion:nn,orgId:g,userId:f,runGroupId:y}),w=await _r(J,h,s);T.info({gitMetadata:w,config:s.config,nodeVersion:process.versions.node},"Got local metadata");let P;e.inputCsv&&(P=await Vv(e.inputCsv));let v=e.pixelRatio??jv();Gv(v);try{let x=await lB({...e,suiteName:i,parallel:c,retriesOverride:e.retries,devicePixelRatio:v,tests:t,project:s,client:h,outputDir:S,uploadResults:e.uploadResults,reporterDir:b,customHeaders:a,envName:e.env,orgId:g,testInputMatrix:P,logger:T,regenerateGoldenFiles:e.updateGoldenFiles,gitMetadata:w,cacheOptions:{regenerateCache:o??!1,alwaysSaveCache:n??!1,noCache:r??!1,bustOldestCachePercentage:e.bustOldestCachePercentage},recordVideo:e.recordVideo??s.config.recordVideo,runGroupId:y,timeoutMinutes:e.timeoutMinutes});await yi(),x.failed>0?process.exit(1):process.exit(0)}catch(x){A.error("Failed to run tests locally. Please check the error message below or run with the --verbose flag."),A.error(x),await yi(),process.exit(1)}});var HQ=dr.command("apply").description("Apply an operation to local resources");HQ.command("patch").addOption(yn).addOption(bn).addOption(Lr).addOption(ma).addOption(Si).addOption(new Nr("--from <from>","Name or ID of the patch to apply").makeOptionMandatory()).addOption(new Nr("--to <to>","Name or ID of the test to apply the patch to").makeOptionMandatory()).action(async t=>{await ur(J);let{apiKey:e,server:r,config:n,yes:o}=t,i=await Dt({configFilePath:n}),a=J,s=new dt({baseUrl:r,apiKey:e,logger:a}),c=await le(i),l=c.tests[t.to]??Object.values(c.tests).find(d=>at(d.name)===t.to.trim());l||(A.error(`No test matching '${t.to}' could be found in the current project.`),process.exit(1));let u=await s.fetchTestFragment(t.from);await nF({client:s,test:l,fragment:u,yes:o,entities:c,logger:J}),process.exit(0)});var Kv=dr.command("results").description("Merge and upload test results.");Kv.command("merge").description("Merge test results files.").addOption(wv).addArgument(_F).action(async(t,e)=>{await ur(J);let{outputDir:r}=e;r||(A.error("Output directory is required."),process.exit(1)),Cf.existsSync(t)||(A.warn("Results path does not exist, skipping merge."),process.exit(0)),Cf.existsSync(r)&&A.warn(`Output directory ${r} already exists, removing before merging...`),QI(J,r,t)});Kv.command("upload").description("Upload test results to Momentic cloud.").addOption(yn).addOption(bn).addArgument(Dv).action(async(t,e)=>{await ur(J);let{apiKey:r,server:n}=e,o=J,i=new dt({baseUrl:n,apiKey:r,logger:o});await tg({consoleLogger:A,resultsPath:t,client:i}),process.exit(0)});Kv.command("view").description("Launch the run viewer to view test results in your current directory.").addOption(new Nr("--port <port>",`Port to run the backend server on. Defaults to ${om}.`).argParser(lo)).addArgument(Dv).addArgument(new LQ("<runId>","Run ID to open in the viewer.").argOptional()).action(async(t,e,r)=>{await ur(J),J.setApp("local-run-viewer");let n=pB(import.meta.url),o=bc.dirname(n),i=bc.resolve(o,"..","run-viewer-static");await vv({staticDir:i,resultsPath:t,runId:e,port:r.port})});var Yv=dr.command("quarantine").description("Manage test quarantines");Yv.command("add").description("Add a test to the quarantine. This will prevent it from running.").addOption(yn).addOption(bn).addOption(Lr).addOption(ma).addOption(kv).addArgument(Uv).action(async(t,e)=>{await ur(J);let{apiKey:r,server:n,config:o,reason:i}=e,a=J,s=await Dt({configFilePath:o}),c=new dt({baseUrl:n,apiKey:r,logger:a}),l=await _r(J,c,s);await LF({test:t,reason:i,apiClient:c,project:s,logger:a,identity:l})});Yv.command("list").description("List quarantined tests.").addOption(yn).addOption(bn).addOption(Lr).addOption(ma).action(async t=>{let{apiKey:e,server:r,config:n}=t,o=J,i=await Dt({configFilePath:n}),a=new dt({baseUrl:r,apiKey:e,logger:o});await UF({apiClient:a,project:i})});Yv.command("remove").description("Remove a test from the quarantine. This will allow it to run again.").addOption(yn).addOption(bn).addOption(Lr).addOption(ma).addOption(kv).addArgument(Uv).action(async(t,e)=>{await ur(J);let{apiKey:r,server:n,config:o,reason:i}=e,a=J,s=await Dt({configFilePath:o}),c=new dt({baseUrl:n,apiKey:r,logger:a}),l=await _r(J,c,s);await FF({test:t,reason:i,apiClient:c,project:s,identity:l})});dr.command("upgrade").description("Upgrade your configuration to the latest recommended settings").addOption(Lr).addOption(ma).action(async t=>{let e=await Dt({configFilePath:t.config,nameFilter:t.filter});A.info("Updating Momentic version in package.json..."),await cB(),A.info("Updating project configuration..."),uB(e),A.success("Your project configuration was successfully updated to the latest recommended settings."),A.info("You can optionally run tests with the `--regenerate-cache` flag to entirely rebuild caches with the newer configuration. Warning: using this option will cause all steps to run without any cached data, resulting in significantly longer execution times.")});async function jQ(){gB("Main program started");try{await dr.parseAsync(process.argv),await yi()}catch(t){let e={};try{e.playwrightVersion=DQ("npx playwright --version").toString()}catch(r){J.error({err:r},"Error fetching debug information")}J.error({err:t,debugInfo:e},"Uncaught error in CLI"),Ac(t,e),A.error(t),await yi(),process.exit(1)}}UQ.setMaxListeners(25);process.on("warning",t=>{J.warn({err:t},`Node warning received on CLI: ${t.message}`)});gB("CLI parsing setup complete");jQ();
5103
5103
  //# sourceMappingURL=cli.js.map
5104
- //# debugId=31a1fe79-70aa-54bd-a4ff-26563f076f99
5104
+ //# debugId=7d2e4c2f-6dc7-5ef0-9f60-cbcd40cc40e7