@probolabs/playwright 1.0.16 → 1.0.19

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../probo-shared/dist/ElementTag.js","../../probo-shared/dist/Interaction.js","../../probo-shared/dist/PlaywrightAction.js","../../probo-shared/dist/element-utils.js","../../probo-shared/dist/MessageType.js","../../probo-shared/dist/utils.js","../../../node_modules/retry/lib/retry_operation.js","../../../node_modules/retry/lib/retry.js","../../../node_modules/retry/index.js","../../../node_modules/is-network-error/index.js","../../../node_modules/p-retry/index.js","../../probo-shared/dist/api-client.js","../../probo-shared/dist/AIModel.js","../../probo-shared/dist/PlaywrightTimeoutConfig.js","../src/probo-logger.ts","../src/actions.ts","../src/highlight.ts","../src/otp.ts","../src/nav-tracker.ts","../src/replay-utils.ts","../src/index.ts"],"sourcesContent":["/**\n * Element tag constants for different types of interactive elements\n */\nexport const ElementTag = {\n CLICKABLE: \"CLICKABLE\",\n FILLABLE: \"FILLABLE\",\n SELECTABLE: \"SELECTABLE\",\n NON_INTERACTIVE_ELEMENT: 'NON_INTERACTIVE_ELEMENT',\n};\n//# sourceMappingURL=ElementTag.js.map","export var ApplyAIStatus;\n(function (ApplyAIStatus) {\n ApplyAIStatus[\"PREPARE_START\"] = \"PREPARE_START\";\n ApplyAIStatus[\"PREPARE_SUCCESS\"] = \"PREPARE_SUCCESS\";\n ApplyAIStatus[\"PREPARE_ERROR\"] = \"PREPARE_ERROR\";\n ApplyAIStatus[\"SEND_START\"] = \"SEND_START\";\n ApplyAIStatus[\"SEND_SUCCESS\"] = \"SEND_SUCCESS\";\n ApplyAIStatus[\"SEND_ERROR\"] = \"SEND_ERROR\";\n ApplyAIStatus[\"APPLY_AI_ERROR\"] = \"APPLY_AI_ERROR\";\n ApplyAIStatus[\"APPLY_AI_CANCELLED\"] = \"APPLY_AI_CANCELLED\";\n ApplyAIStatus[\"SUMMARY_COMPLETED\"] = \"SUMMARY_COMPLETED\";\n ApplyAIStatus[\"SUMMARY_ERROR\"] = \"SUMMARY_ERROR\";\n})(ApplyAIStatus || (ApplyAIStatus = {}));\nexport var ReplayStatus;\n(function (ReplayStatus) {\n ReplayStatus[\"REPLAY_START\"] = \"REPLAY_START\";\n ReplayStatus[\"REPLAY_SUCCESS\"] = \"REPLAY_SUCCESS\";\n ReplayStatus[\"REPLAY_ERROR\"] = \"REPLAY_ERROR\";\n ReplayStatus[\"REPLAY_CANCELLED\"] = \"REPLAY_CANCELLED\";\n})(ReplayStatus || (ReplayStatus = {}));\n//# sourceMappingURL=Interaction.js.map","// Action constants\nexport var PlaywrightAction;\n(function (PlaywrightAction) {\n PlaywrightAction[\"VISIT_BASE_URL\"] = \"VISIT_BASE_URL\";\n PlaywrightAction[\"VISIT_URL\"] = \"VISIT_URL\";\n PlaywrightAction[\"CLICK\"] = \"CLICK\";\n PlaywrightAction[\"FILL_IN\"] = \"FILL_IN\";\n PlaywrightAction[\"SELECT_DROPDOWN\"] = \"SELECT_DROPDOWN\";\n PlaywrightAction[\"SELECT_MULTIPLE_DROPDOWN\"] = \"SELECT_MULTIPLE_DROPDOWN\";\n PlaywrightAction[\"CHECK_CHECKBOX\"] = \"CHECK_CHECKBOX\";\n PlaywrightAction[\"SELECT_RADIO\"] = \"SELECT_RADIO\";\n PlaywrightAction[\"TOGGLE_SWITCH\"] = \"TOGGLE_SWITCH\";\n PlaywrightAction[\"SET_SLIDER\"] = \"SET_SLIDER\";\n PlaywrightAction[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"ASSERT_EXACT_VALUE\"] = \"ASSERT_EXACT_VALUE\";\n PlaywrightAction[\"ASSERT_CONTAINS_VALUE\"] = \"ASSERT_CONTAINS_VALUE\";\n PlaywrightAction[\"ASSERT_URL\"] = \"ASSERT_URL\";\n PlaywrightAction[\"SCROLL_TO_ELEMENT\"] = \"SCROLL_TO_ELEMENT\";\n PlaywrightAction[\"EXTRACT_VALUE\"] = \"EXTRACT_VALUE\";\n PlaywrightAction[\"ASK_AI\"] = \"ASK_AI\";\n PlaywrightAction[\"EXECUTE_SCRIPT\"] = \"EXECUTE_SCRIPT\";\n PlaywrightAction[\"UPLOAD_FILES\"] = \"UPLOAD_FILES\";\n PlaywrightAction[\"WAIT_FOR\"] = \"WAIT_FOR\";\n PlaywrightAction[\"WAIT_FOR_OTP\"] = \"WAIT_FOR_OTP\";\n})(PlaywrightAction || (PlaywrightAction = {}));\n//# sourceMappingURL=PlaywrightAction.js.map","import { ElementTag } from \"./ElementTag.js\";\nimport { PlaywrightAction } from \"./PlaywrightAction.js\";\n/**\n * Resolves an action type to the corresponding ElementTag\n *\n * @param action The action type (CLICK, FILL_IN, SELECT_DROPDOWN)\n * @returns The corresponding ElementTag\n */\nexport function resolveElementTag(action) {\n switch (action) {\n case PlaywrightAction.CLICK:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE];\n case PlaywrightAction.FILL_IN:\n return [ElementTag.FILLABLE];\n case PlaywrightAction.SELECT_DROPDOWN:\n return [ElementTag.SELECTABLE];\n case PlaywrightAction.HOVER:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.WAIT_FOR:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.WAIT_FOR_OTP:\n return [ElementTag.FILLABLE];\n default:\n console.error(`Unknown action: ${action}`);\n throw new Error(`Unknown action: ${action}`);\n }\n}\nexport function getElementText(element) {\n var _a;\n return element.textContent || element.innerText || element.value || ((_a = element.querySelector('input')) === null || _a === void 0 ? void 0 : _a.value) || '';\n}\n//# sourceMappingURL=element-utils.js.map","// WebSocketsMessageType enum for WebSocket and event message types shared across the app\nexport var WebSocketsMessageType;\n(function (WebSocketsMessageType) {\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_START\"] = \"INTERACTION_APPLY_AI_PREPARE_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_SUCCESS\"] = \"INTERACTION_APPLY_AI_PREPARE_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_ERROR\"] = \"INTERACTION_APPLY_AI_PREPARE_ERROR\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_START\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_START\"] = \"INTERACTION_REPLAY_START\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_SUCCESS\"] = \"INTERACTION_REPLAY_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_ERROR\"] = \"INTERACTION_REPLAY_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_CANCELLED\"] = \"INTERACTION_REPLAY_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_CANCELLED\"] = \"INTERACTION_APPLY_AI_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_ERROR\"] = \"INTERACTION_APPLY_AI_ERROR\";\n WebSocketsMessageType[\"INTERACTION_STEP_CREATED\"] = \"INTERACTION_STEP_CREATED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\"] = \"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_ERROR\"] = \"INTERACTION_APPLY_AI_SUMMARY_ERROR\";\n WebSocketsMessageType[\"OTP_RETRIEVED\"] = \"OTP_RETRIEVED\";\n})(WebSocketsMessageType || (WebSocketsMessageType = {}));\n//# sourceMappingURL=MessageType.js.map","import { PlaywrightAction } from './PlaywrightAction.js';\n/**\n * Logging levels for Probo\n */\nexport var ProboLogLevel;\n(function (ProboLogLevel) {\n ProboLogLevel[\"DEBUG\"] = \"DEBUG\";\n ProboLogLevel[\"INFO\"] = \"INFO\";\n ProboLogLevel[\"LOG\"] = \"LOG\";\n ProboLogLevel[\"WARN\"] = \"WARN\";\n ProboLogLevel[\"ERROR\"] = \"ERROR\";\n})(ProboLogLevel || (ProboLogLevel = {}));\nconst logLevelOrder = {\n [ProboLogLevel.DEBUG]: 0,\n [ProboLogLevel.INFO]: 1,\n [ProboLogLevel.LOG]: 2,\n [ProboLogLevel.WARN]: 3,\n [ProboLogLevel.ERROR]: 4,\n};\nexport class ProboLogger {\n constructor(prefix, level = ProboLogLevel.INFO) {\n this.prefix = prefix;\n this.level = level;\n }\n setLogLevel(level) {\n this.level = level;\n }\n shouldLog(level) {\n return logLevelOrder[level] >= logLevelOrder[this.level];\n }\n preamble() {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n return `[${hours}:${minutes}:${seconds}.${milliseconds}] [${this.prefix}]`;\n }\n debug(...args) { if (this.shouldLog(ProboLogLevel.DEBUG))\n console.debug(this.preamble(), ...args); }\n info(...args) { if (this.shouldLog(ProboLogLevel.INFO))\n console.info(this.preamble(), ...args); }\n log(...args) { if (this.shouldLog(ProboLogLevel.LOG))\n console.log(this.preamble(), ...args); }\n warn(...args) { if (this.shouldLog(ProboLogLevel.WARN))\n console.warn(this.preamble(), ...args); }\n error(...args) { if (this.shouldLog(ProboLogLevel.ERROR))\n console.error(this.preamble(), ...args); }\n}\n/**\n * Interfaces for element information (unchanged)\n */\n/* export interface ElementInfo {\n index: string;\n tag: string;\n type: string;\n text: string;\n html: string;\n xpath: string;\n css_selector: string;\n bounding_box: {\n x: number;\n y: number;\n width: number;\n height: number;\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n iframe_selector: string;\n element: any;\n depth?: number;\n getSelector(): string;\n getDepth(): number;\n}\n */\n/* export interface CleanElementInfo {\n index: string;\n tag: string;\n type: string;\n text: string;\n html: string;\n xpath: string;\n css_selector: string;\n iframe_selector: string;\n bounding_box: {\n x: number;\n y: number;\n width: number;\n height: number;\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n depth: number;\n} */\n// Element cleaner logging\nconst elementLogger = new ProboLogger('element-cleaner');\n/**\n * Cleans and returns a minimal element info structure.\n */\nexport function cleanupElementInfo(elementInfo) {\n var _a;\n elementLogger.debug(`Cleaning up element info for ${elementInfo.tag} at index ${elementInfo.index}`);\n const depth = (_a = elementInfo.depth) !== null && _a !== void 0 ? _a : elementInfo.getDepth();\n const cleanEl = {\n index: elementInfo.index,\n tag: elementInfo.tag,\n type: elementInfo.type,\n text: elementInfo.text,\n html: elementInfo.html,\n xpath: elementInfo.xpath,\n css_selector: elementInfo.css_selector,\n iframe_selector: elementInfo.iframe_selector,\n bounding_box: elementInfo.bounding_box,\n depth\n };\n elementLogger.debug(`Cleaned element: ${JSON.stringify(cleanEl)}`);\n return cleanEl;\n}\n/**\n * Cleans highlighted elements in an instruction payload.\n */\nexport function cleanupInstructionElements(instruction) {\n var _a;\n if (!((_a = instruction === null || instruction === void 0 ? void 0 : instruction.result) === null || _a === void 0 ? void 0 : _a.highlighted_elements)) {\n elementLogger.debug('No highlighted elements to clean');\n return instruction;\n }\n elementLogger.debug(`Cleaning ${instruction.result.highlighted_elements.length} highlighted elements`);\n const cleaned = {\n ...instruction,\n result: {\n ...instruction.result,\n highlighted_elements: instruction.result.highlighted_elements.map((el) => cleanupElementInfo(el))\n }\n };\n elementLogger.debug('Instruction cleaning completed');\n return cleaned;\n}\n// Determine whether an interaction can return a value\nexport const hasReturnValue = (i) => {\n return [\n PlaywrightAction.EXTRACT_VALUE,\n PlaywrightAction.ASK_AI,\n PlaywrightAction.EXECUTE_SCRIPT\n ].includes(i.action);\n};\nexport const getReturnValueParameterName = (i) => {\n switch (i.action) {\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.EXECUTE_SCRIPT:\n return i.parameterName;\n case PlaywrightAction.ASK_AI:\n return i.parameterName.replace(/^assert_/, '');\n default:\n console.error(`Action ${i.action} has no return value`);\n return '';\n }\n};\n// Determine whether an interaction can be parameterized\nexport const isParameterizable = (i) => {\n const parameterizableActions = [\n PlaywrightAction.FILL_IN,\n PlaywrightAction.SELECT_DROPDOWN,\n PlaywrightAction.ASSERT_CONTAINS_VALUE,\n PlaywrightAction.ASSERT_EXACT_VALUE,\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.UPLOAD_FILES,\n PlaywrightAction.WAIT_FOR\n ];\n return !i.extractedParamName &&\n (parameterizableActions.includes(i.action) ||\n (i.action === PlaywrightAction.ASK_AI && i.argument));\n};\n// Determine whether an interaction is AI-related\nexport const isAI = (i) => {\n var _a, _b, _c, _d, _e, _f;\n return !['TYPE_KEYS', 'VISIT_URL', 'EXECUTE_SCRIPT'].includes(i.action) &&\n (i.action === PlaywrightAction.ASK_AI ||\n (((_b = (_a = i.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) && (((_d = (_c = i.serverResponse) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.error) === \"\" || !((_f = (_e = i.serverResponse) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.error))));\n};\n// Determine whether an interaction is fortified (doesn't need AI processing)\nexport const isFortifiedInteraction = (i) => {\n return [\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.TYPE_KEYS,\n PlaywrightAction.EXECUTE_SCRIPT,\n PlaywrightAction.ASK_AI\n ].includes(i.action);\n};\nexport function singleQuoteString(str) {\n if (!str)\n return '';\n return `'${str.replace(/'/g, \"\\\\'\")}'`;\n}\n// Normalize a parameter name to a legal JS identifier\nexport function normalizeParameterName(name) {\n // 0. Remove leading/trailing spaces\n // 1. Replace invalid characters with underscores\n // 2. collapse multiple underscores\n // 3. If starts with a digit, prepend '_'\n name = name.trim();\n name = name.replace(/[^a-zA-Z0-9_$]/g, '_');\n name = name.replace(/_+/g, '_');\n if (/^[0-9]/.test(name)) {\n name = '_' + name;\n }\n // Ensure we never return an empty string or just underscores\n if (!name || name === '_' || /^_+$/.test(name)) {\n name = 'param_' + Date.now();\n }\n return name;\n}\nexport function matchRegex(str, regex) {\n //parse the regex string\n const match = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (!match) // normal string\n return str.includes(regex);\n else { // regex string\n const pattern = match[1].replace(/\\\\/g, '\\\\');\n const flags = match[2];\n console.log(`Matching ${str} against ${pattern} with flags ${flags}`);\n return new RegExp(pattern, flags).test(str);\n }\n}\n/**\n * Truncates a URL by replacing query parameters (everything after ?) with three dots.\n * @param url The URL to truncate\n * @returns The truncated URL with three dots replacing query parameters\n */\nexport function truncateUrl(url) {\n if (!url)\n return '';\n const questionMarkIndex = url.indexOf('?');\n if (questionMarkIndex === -1) {\n // No query parameters found, return the original URL\n return url;\n }\n const baseUrl = url.substring(0, questionMarkIndex);\n return `${baseUrl}...`;\n}\n/**\n * Sets up browser console logging on a Playwright page.\n * This function removes all existing console listeners and optionally adds a new one.\n * @param page The Playwright page instance\n * @param enableConsoleLogs Whether to enable console logging\n * @param logger Optional logger instance to use for output (defaults to console.log)\n */\nexport const setupBrowserConsoleLogs = (page, enableConsoleLogs, logger = null) => {\n // Always remove all existing console listeners first\n page.removeAllListeners('console');\n // Always add a listener, but filter output based on enableConsoleLogs\n const listener = (msg) => {\n if (enableConsoleLogs) {\n const type = msg.type();\n const text = msg.text();\n if (logger) {\n logger.log(`[Browser-${type}]: ${text}`);\n }\n else {\n console.log(`[Browser-${type}]: ${text}`);\n }\n }\n // If disabled, do nothing (silently ignore the console message)\n };\n page.on('console', listener);\n};\n//# sourceMappingURL=utils.js.map","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {...options};\n\t\toptions.onFailedAttempt ??= () => {};\n\t\toptions.shouldRetry ??= () => true;\n\t\toptions.retries ??= 10;\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","import pRetry from 'p-retry';\nimport { ProboLogger } from './utils.js';\nimport { cleanupInstructionElements } from './utils.js';\nexport const apiLogger = new ProboLogger('apiclient');\nexport class ApiError extends Error {\n constructor(status, message, data) {\n super(message);\n this.status = status;\n this.data = data;\n this.name = 'ApiError';\n // Remove stack trace for cleaner error messages\n this.stack = undefined;\n }\n toString() {\n return `${this.message} (Status: ${this.status})`;\n }\n}\nexport class ApiClient {\n constructor(apiUrl, token, maxRetries = 3, initialBackoff = 1000) {\n this.apiUrl = apiUrl;\n this.token = token;\n this.maxRetries = maxRetries;\n this.initialBackoff = initialBackoff;\n }\n /**\n * Determines if an error should be retried.\n * Only retries on timeout and network errors, not on client/server errors.\n */\n isRetryableError(error) {\n var _a, _b, _c, _d, _e;\n // Network/connection errors should be retried\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n if ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('network'))\n return true;\n if ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('ETIMEDOUT'))\n return true;\n if ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('ECONNRESET'))\n return true;\n if ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('ECONNREFUSED'))\n return true;\n if (error.code === 'ETIMEDOUT')\n return true;\n if (error.code === 'ECONNRESET')\n return true;\n if (error.code === 'ECONNREFUSED')\n return true;\n // If it's an ApiError, check the status code\n if (error instanceof ApiError) {\n // Retry on timeout-related status codes\n if (error.status === 408)\n return true; // Request Timeout\n if (error.status === 502)\n return true; // Bad Gateway (temporary)\n if (error.status === 503)\n return true; // Service Unavailable (temporary)\n if (error.status === 504)\n return true; // Gateway Timeout\n if (error.status === 0)\n return true; // Network error\n // Don't retry on client errors (4xx) or server errors (5xx)\n // These indicate problems that won't be fixed by retrying\n return false;\n }\n // For unknown errors, don't retry to avoid masking issues\n return false;\n }\n /**\n * Generic helper to wrap API requests with retry logic and consistent error handling.\n */\n async requestWithRetry(operationName, operation) {\n return pRetry(operation, {\n retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n shouldRetry: (error) => {\n const shouldRetry = this.isRetryableError(error);\n if (!shouldRetry) {\n apiLogger.error(`${operationName} failed with non-retryable error: ${error.message || error}`);\n }\n return shouldRetry;\n },\n onFailedAttempt: error => {\n apiLogger.warn(`${operationName} failed (retryable), attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}. Error: ${error.message}`);\n }\n });\n }\n async handleResponse(response) {\n var _a;\n try {\n const data = await response.json();\n const error = `${(data === null || data === void 0 ? void 0 : data.error) || 'Unknown error'}`;\n apiLogger.debug(`API response: ${JSON.stringify(data)}`);\n if (!response.ok) {\n switch (response.status) {\n case 401:\n throw new ApiError(401, `Unauthorized - Invalid or missing authentication token: ${error}`);\n case 403:\n throw new ApiError(403, `Forbidden - You do not have permission to perform this action: ${error}`);\n case 400:\n throw new ApiError(400, `Bad Request: ${error}`);\n case 404:\n throw new ApiError(404, `Not Found: ${error}`);\n case 500:\n throw new ApiError(500, `Internal Server Error: ${error}`);\n default:\n throw new ApiError(response.status, `API Error: ${error}`);\n }\n }\n return data;\n }\n catch (error) {\n // Only throw the original error if it's not a network error\n if (!((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))) {\n throw error;\n }\n throw new ApiError(0, 'Network error: fetch failed');\n }\n }\n getHeaders() {\n const headers = {\n 'Content-Type': 'application/json',\n };\n // Always include token in headers now that we have a default\n headers['Authorization'] = `Token ${this.token}`;\n return headers;\n }\n async createStep(options) {\n apiLogger.debug('creating step ', options.stepPrompt);\n return this.requestWithRetry('createStep', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n step_id: options.stepIdFromServer,\n scenario_name: options.scenarioName,\n step_prompt: options.stepPrompt,\n argument: options.argument,\n initial_screenshot: options.initial_screenshot_url,\n initial_html_content: options.initial_html_content,\n use_cache: options.use_cache,\n url: options.url,\n action: options.action,\n vanilla_prompt: options.vanilla_prompt,\n is_vanilla_prompt_robust: options.is_vanilla_prompt_robust,\n target_element_name: options.target_element_name,\n position: options.position\n }),\n });\n const data = await this.handleResponse(response);\n return data.step.id;\n });\n }\n async patchStep(stepId, fields) {\n // Use PATCH /steps/:id/ endpoint with partial=true\n apiLogger.debug(`patching step #${stepId} with fields:`, Object.keys(fields));\n return this.requestWithRetry('patchStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'PATCH',\n headers: this.getHeaders(),\n body: JSON.stringify(fields)\n });\n const data = await this.handleResponse(response);\n return;\n });\n }\n async resolveNextInstruction(stepId, instruction, aiModel) {\n apiLogger.debug(`resolving next instruction: ${instruction}`);\n return this.requestWithRetry('resolveNextInstruction', async () => {\n apiLogger.debug(`API client: Resolving next instruction for step ${stepId}`);\n const cleanInstruction = cleanupInstructionElements(instruction);\n const response = await fetch(`${this.apiUrl}/step-runners/${stepId}/run/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n executed_instruction: cleanInstruction,\n ai_model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.instruction;\n });\n }\n async uploadScreenshot(screenshot_bytes) {\n return this.requestWithRetry('uploadScreenshot', async () => {\n const response = await fetch(`${this.apiUrl}/upload-screenshots/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${this.token}`\n },\n body: screenshot_bytes,\n });\n const data = await this.handleResponse(response);\n return data.screenshot_url;\n });\n }\n async findStepById(stepId) {\n apiLogger.debug(`Finding step by id: ${stepId}`);\n return this.requestWithRetry('findStepById', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data.step;\n });\n }\n async findStepByPrompt(prompt, scenarioName, url = '') {\n apiLogger.debug(`Finding step by prompt: ${prompt} and scenario: ${scenarioName}`);\n return this.requestWithRetry('findStepByPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/find-step-by-prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n scenario_name: scenarioName,\n url: url\n }),\n });\n try {\n const data = await this.handleResponse(response);\n return {\n step: data.step,\n total_count: data.total_count\n };\n }\n catch (error) {\n // If we get a 404, the step doesn't exist\n if (error instanceof ApiError && error.status === 404) {\n return null;\n }\n // For any other error, rethrow\n throw error;\n }\n });\n }\n async resetStep(stepId) {\n return this.requestWithRetry('resetStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/reset/`, {\n method: 'POST',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async interactionToStep(scenarioName, interaction, position = -1) {\n // Use POST /interaction-to-step/ endpoint\n // Backend will create new step or update existing one based on interaction_id\n apiLogger.debug(`converting interaction #${interaction.interactionId} to step`);\n return this.requestWithRetry('interactionToStep', async () => {\n var _a, _b;\n const response = await fetch(`${this.apiUrl}/interaction-to-step/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n scenario_name: scenarioName,\n position,\n interaction_id: interaction.interactionId,\n action: interaction.action,\n argument: interaction.argument,\n element_css_selector: ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '',\n iframe_selector: ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '',\n prompt: interaction.nativeDescription,\n vanilla_prompt: interaction.nativeDescription,\n is_vanilla_prompt_robust: interaction.isNativeDescriptionElaborate || false,\n target_element_name: interaction.nativeName,\n target_element_info: interaction.elementInfo,\n url: interaction.url,\n })\n });\n const data = await this.handleResponse(response);\n return [data.result.step_id, data.result.matched_step, data.scenario_id];\n });\n }\n async actionToPrompt(action2promptInput, aiModel) {\n // Use POST /action-to-prompt/ endpoint\n apiLogger.debug(`running action2prompt for step #${action2promptInput.step_id}`);\n return this.requestWithRetry('actionToPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${action2promptInput.step_id}/action_to_prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ ...action2promptInput, 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async summarizeScenario(scenarioId, aiModel) {\n return this.requestWithRetry('summarizeScenario', async () => {\n const response = await fetch(`${this.apiUrl}/api/scenarios/${scenarioId}/summary`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async askAI(question, scenarioName, screenshot, aiModel) {\n apiLogger.debug(`Asking AI question: \"${question}\", scenarioName: ${scenarioName}`);\n apiLogger.debug(`headers: ${JSON.stringify(this.getHeaders())}`);\n return this.requestWithRetry('askAI', async () => {\n const response = await fetch(`${this.apiUrl}/api/ask-ai/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n question: question,\n scenario_name: scenarioName,\n screenshot: screenshot,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async screenshotReasoning(stepId, prompt, aiModel) {\n apiLogger.debug(`Performing screenshot reasoning for step: ${stepId}`);\n return this.requestWithRetry('screenshotReasoning', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/screenshot_reasoning/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.action;\n });\n }\n async findBestCandidateElement(stepId, candidatesScreenshotUrl, candidateElements, aiModel) {\n apiLogger.debug(`Finding best candidate element for step: ${stepId}`);\n return this.requestWithRetry('findBestCandidateElement', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/find_best_candidate_element/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n screenshot_url: candidatesScreenshotUrl,\n candidate_elements: candidateElements,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.index;\n });\n }\n} /* ApiClient */\n//# sourceMappingURL=api-client.js.map","/**\n * Available AI models for LLM operations\n */\nexport var AIModel;\n(function (AIModel) {\n AIModel[\"AZURE_GPT4\"] = \"azure-gpt4\";\n AIModel[\"AZURE_GPT4_MINI\"] = \"azure-gpt4-mini\";\n AIModel[\"GEMINI_1_5_FLASH\"] = \"gemini-1.5-flash\";\n AIModel[\"GEMINI_2_5_FLASH\"] = \"gemini-2.5-flash\";\n AIModel[\"GPT4\"] = \"gpt4\";\n AIModel[\"GPT4_MINI\"] = \"gpt4-mini\";\n AIModel[\"CLAUDE_3_5\"] = \"claude-3.5\";\n AIModel[\"GROK_2\"] = \"grok-2\";\n AIModel[\"LLAMA_4_SCOUT\"] = \"llama-4-scout\";\n AIModel[\"DEEPSEEK_V3\"] = \"deepseek-v3\";\n})(AIModel || (AIModel = {}));\n//# sourceMappingURL=AIModel.js.map","export const DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG = {\n highlightTimeout: 500,\n playwrightActionTimeout: 5000,\n playwrightNavigationTimeout: 10000,\n playwrightLocatorTimeout: 15000,\n // mutation observer\n mutationsTimeout: 500,\n mutationsInitTimeout: 1000,\n // wait for navigation\n waitForNavigationInitialTimeout: 2000,\n waitForNavigationNavigationTimeout: 7000,\n waitForNavigationGlobalTimeout: 15000,\n // wait for stability\n waitForStabilityQuietTimeout: 2000,\n waitForStabilityInitialDelay: 500,\n waitForStabilityGlobalTimeout: 15000,\n waitForStabilityVerbose: false,\n};\n//# sourceMappingURL=PlaywrightTimeoutConfig.js.map","import { ProboLogger } from \"@probolabs/probo-shared\";\n\n// Default logger instance\nexport const proboLogger = new ProboLogger('probolib');\n","import { Page, Frame, Locator } from 'playwright';\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, PlaywrightAction, matchRegex } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\nexport const SPECIAL_KEYS = [\n 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'Insert', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12',\n 'Shift', 'Control', 'Alt', 'Meta',\n 'CapsLock', 'NumLock', 'ScrollLock',\n 'Pause', 'PrintScreen', 'ContextMenu',\n 'AudioVolumeUp', 'AudioVolumeDown', 'AudioVolumeMute',\n 'MediaTrackNext', 'MediaTrackPrevious', 'MediaStop', 'MediaPlayPause',\n 'BrowserBack', 'BrowserForward', 'BrowserRefresh', 'BrowserFavorites'\n] as const;\n\n/**\n * Handle potential navigation exactly like Python's handle_potential_navigation\n */\nexport async function handlePotentialNavigation_deprecated(\n page: Page,\n locator: Locator | null = null,\n value: string | null = null,\n options: {\n initialTimeout?: number;\n navigationTimeout?: number;\n globalTimeout?: number;\n } = {}\n): Promise<boolean> {\n const {\n initialTimeout,\n navigationTimeout,\n globalTimeout,\n } = options;\n \n const finalInitialTimeout = initialTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationInitialTimeout!;\n const finalNavigationTimeout = navigationTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationNavigationTimeout!;\n const finalGlobalTimeout = globalTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationGlobalTimeout!;\n\n const startTime = Date.now();\n let navigationCount = 0;\n let lastNavTime: number | null = null;\n\n const onFrameNav = (frame: Frame) => {\n if (frame === page.mainFrame()) {\n navigationCount++;\n lastNavTime = Date.now();\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: navigation detected (count=${navigationCount})`\n );\n }\n };\n\n proboLogger.debug(`DEBUG_NAV[0.000s]: Starting navigation detection`);\n page.on(\"framenavigated\", onFrameNav);\n\n try {\n if (locator) {\n proboLogger.debug(`DEBUG_NAV: Executing click(${value})`);\n await clickAtPosition(page, locator, value as ClickPosition | null);\n }\n\n // wait for any initial nav to fire\n await page.waitForTimeout(finalInitialTimeout);\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: After initial wait, count=${navigationCount}`\n );\n\n if (navigationCount > 0) {\n // loop until either per-nav or global timeout\n while (true) {\n const now = Date.now();\n if (\n lastNavTime !== null &&\n now - lastNavTime > finalNavigationTimeout\n ) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: per‐navigation timeout reached`\n );\n break;\n }\n if (now - startTime > finalGlobalTimeout) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: overall timeout reached`\n );\n break;\n }\n await page.waitForTimeout(500);\n }\n\n // now wait for load + idle\n proboLogger.debug(`DEBUG_NAV: waiting for load state`);\n await page.waitForLoadState(\"load\", { timeout: finalGlobalTimeout });\n\n proboLogger.debug(`DEBUG_NAV: waiting for networkidle`);\n try {\n // shorter idle‐wait so we don't hang the full globalTimeout here\n await page.waitForLoadState(\"networkidle\", {\n timeout: finalNavigationTimeout,\n });\n } catch {\n proboLogger.debug(\n `DEBUG_NAV: networkidle not reached in ${finalNavigationTimeout}ms, proceeding anyway`\n );\n }\n\n await scrollToBottomRight(page);\n proboLogger.debug(`DEBUG_NAV: done`);\n return true;\n }\n\n proboLogger.debug(`DEBUG_NAV: no navigation detected`);\n return false;\n } finally {\n page.removeListener(\"framenavigated\", onFrameNav);\n proboLogger.debug(`DEBUG_NAV: listener removed`);\n }\n}\n\n\n/**\n * Scroll entire page to bottom-right, triggering lazy-loaded content\n */\nexport async function scrollToBottomRight(page: Page): Promise<void> {\n const startTime = performance.now();\n proboLogger.debug(`Starting scroll to bottom-right`);\n\n let lastHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n let lastWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n\n let smoothingSteps = 0;\n while (true) { \n const initY = await page.evaluate(() => window.scrollY);\n const initX = await page.evaluate(() => window.scrollX);\n const clientHeight = await page.evaluate(() => document.documentElement.clientHeight);\n const maxHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);\n const maxWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n \n let currX = initX;\n while (currX < maxWidth - clientWidth) {\n let currY = initY;\n while (currY < maxHeight - clientHeight) {\n currY += clientHeight;\n await page.evaluate(([x, y]) => window.scrollTo(x, y), [currX, currY]);\n await page.waitForTimeout(50);\n smoothingSteps++;\n }\n currX += clientWidth;\n }\n\n proboLogger.debug(\n `performed ${smoothingSteps} smoothing steps while scrolling`\n );\n\n const newHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const newWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n if (newHeight === lastHeight && newWidth === lastWidth) break;\n proboLogger.debug(`page dimensions updated, repeating scroll`);\n lastHeight = newHeight;\n lastWidth = newWidth;\n }\n\n if (smoothingSteps > 0) {\n await page.waitForTimeout(200);\n await page.evaluate('window.scrollTo(0, 0)');\n await page.waitForTimeout(50);\n }\n proboLogger.debug(`Scroll completed in ${(performance.now() - startTime).toFixed(3)}ms`);\n}\n\n/**\n * Wait for DOM mutations to settle using MutationObserver logic\n */\nexport async function waitForMutationsToSettle(\n page: Page,\n mutationTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout!,\n initTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout!\n): Promise<boolean> {\n const startTime = Date.now();\n proboLogger.debug(\n `Starting mutation settlement (initTimeout=${initTimeout}, mutationTimeout=${mutationTimeout})`\n );\n\n const result = await page.evaluate(\n async ({ mutationTimeout, initTimeout }) => {\n async function blockUntilStable(\n targetNode: HTMLElement,\n options = { childList: true, subtree: true }\n ) {\n return new Promise<boolean>((resolve) => {\n let initTimerExpired = false;\n let mutationsOccurred = false;\n const observerTimers = new Set<number>();\n\n const initTimer = window.setTimeout(() => {\n initTimerExpired = true;\n if (observerTimers.size === 0) resolve(mutationsOccurred);\n }, initTimeout);\n\n const observer = new MutationObserver(() => {\n mutationsOccurred = true;\n observerTimers.forEach((t) => clearTimeout(t));\n observerTimers.clear();\n const t = window.setTimeout(() => {\n observerTimers.delete(t);\n if (initTimerExpired && observerTimers.size === 0) {\n observer.disconnect();\n resolve(mutationsOccurred);\n }\n }, mutationTimeout);\n observerTimers.add(t);\n });\n\n observer.observe(targetNode, options);\n });\n }\n return blockUntilStable(document.body as HTMLElement);\n },\n { mutationTimeout, initTimeout }\n );\n\n const total = ((Date.now() - startTime) / 1000).toFixed(2);\n proboLogger.debug(\n result\n ? `Mutations settled. Took ${total}s`\n : `No mutations observed. Took ${total}s`\n );\n\n return result;\n}\n\n\n/**\n * Get element text value: allTextContents + innerText fallback\n */\nexport async function getElementValue(\n page: Page,\n locator: Locator\n): Promise<string> {\n const texts = await locator.allTextContents();\n let allText = texts.join('').trim();\n if (!allText) {\n allText = await locator.evaluate((el: HTMLElement) => el.innerText);\n }\n if (!allText) {\n allText = await locator.inputValue();\n }\n proboLogger.debug(`getElementValue: [${allText}]`);\n return allText;\n}\n\n/**\n * Select dropdown option: native <select>, <option>, child select, or ARIA listbox\n */\nexport async function selectDropdownOption(\n page: Page,\n locator: Locator,\n value: string | string[]\n): Promise<void> { \n const tagName = await locator?.evaluate((el) => el.tagName.toLowerCase());\n const role = await locator?.getAttribute('role');\n\n if (tagName === 'option' || role === 'option') {\n proboLogger.debug('selectDropdownOption: option role detected');\n await locator?.click();\n } else if (tagName === 'select') {\n proboLogger.debug('selectDropdownOption: simple select tag detected');\n try {\n await locator?.selectOption(value as any);\n } catch {\n proboLogger.debug('selectDropdownOption: manual change event fallback');\n const handle = locator ? await locator.elementHandle() : null;\n await page.evaluate(\n ({ h, val }: { h: HTMLElement | SVGElement | null, val: string | string[] }) => {\n const el = h as HTMLSelectElement;\n if (el) {\n el.value = Array.isArray(val) ? val[0] : (val as string);\n el.dispatchEvent(new Event('change', { bubbles: true }));\n }\n },\n { h: handle, val: value }\n );\n }\n } else {\n proboLogger.debug('selectDropdownOption: custom dropdown path');\n let listbox = locator.locator('select');\n let count = await listbox.count();\n if (count > 1) throw new Error(`selectDropdownOption: ambiguous <select> count=${count}`);\n if (count === 1) {\n proboLogger.debug('selectDropdownOption: child <select> found');\n await listbox.selectOption(value as any);\n return;\n }\n await locator.click();\n let container = locator;\n count = 0;\n if (role !== 'listbox') {\n for (let i = 0; i < 7; i++) {\n listbox = container.getByRole('listbox');\n count = await listbox.count();\n if (count >= 1) break;\n proboLogger.debug(`selectDropdownOption: iteration #${i} no listbox found`);\n container = container.locator('xpath=..');\n }\n } else {\n listbox = container;\n count = await listbox.count();\n }\n if (count !== 1) throw new Error(`selectDropdownOption: found ${count} listbox locators`);\n const vals = Array.isArray(value) ? value : [value];\n for (const val of vals) {\n const option = listbox.getByRole('option').getByText(new RegExp(`^${val}$`, 'i'));\n const optCount = await option.count();\n if (optCount !== 1) throw new Error(`selectDropdownOption: ${optCount} options for '${val}'`);\n await option.click();\n }\n }\n}\n\n/**\n * Execute a given Playwright action, mirroring Python's _perform_action\n */\nexport async function executePlaywrightAction_deprecated(\n page: Page,\n action: PlaywrightAction,\n value: string|boolean,\n iframe_selector: string,\n element_css_selector: string\n): Promise<boolean|string> {\n proboLogger.info(`performing Action: ${action} Value: ${value}`);\n try {\n \n if (action === PlaywrightAction.VISIT_BASE_URL || action === PlaywrightAction.VISIT_URL) {\n await page.goto(value as string, { waitUntil: 'load' });\n await handlePotentialNavigation_deprecated(page, null); \n }\n else {\n let locator = undefined;\n if (iframe_selector)\n locator = page.frameLocator(iframe_selector).locator(element_css_selector);\n else\n locator = page.locator(element_css_selector);\n \n // Fail fast: immediately validate that the element exists\n try {\n await locator.waitFor({ state: 'attached' });\n } catch (e) {\n throw new Error(`Element not found with selector: ${element_css_selector}${iframe_selector ? ` in iframe: ${iframe_selector}` : ''}`);\n }\n switch (action) { \n case PlaywrightAction.CLICK:\n await handlePotentialNavigation_deprecated(page, locator, value as ClickPosition | null);\n break;\n\n case PlaywrightAction.FILL_IN:\n // await locator.click();\n await locator.fill(value as string);\n break;\n\n case PlaywrightAction.TYPE_KEYS:\n // Check if the value contains any special keys\n const specialKey = SPECIAL_KEYS.find(key => (value as string).includes(key));\n if (specialKey) {\n // If it's a single special key, just press it\n if (value === specialKey) {\n await locator?.press(specialKey);\n } else {\n // Handle combinations like 'Control+A' or 'Shift+ArrowRight'\n const parts = (value as string).split('+');\n if (parts.length === 2 && SPECIAL_KEYS.includes(parts[0] as any) && SPECIAL_KEYS.includes(parts[1] as any)) {\n await locator?.press(value as string);\n } else {\n // If it's a mix of special keys and text, use pressSequentially\n await locator?.pressSequentially(value as string);\n }\n }\n } else {\n // No special keys, just type normally\n await locator?.pressSequentially(value as string);\n }\n break;\n\n case PlaywrightAction.SELECT_DROPDOWN:\n await selectDropdownOption(page, locator, value as string);\n break;\n\n case PlaywrightAction.SELECT_MULTIPLE_DROPDOWN:\n let optsArr: string[];\n if ((value as string).startsWith('[')) {\n try { optsArr = JSON.parse(value as string); } catch {\n optsArr = (value as string).slice(1, -1).split(',').map(o => o.trim());\n }\n } else {\n optsArr = (value as string).split(',').map(o => o.trim());\n }\n await locator?.selectOption(optsArr as any);\n break;\n\n case PlaywrightAction.CHECK_CHECKBOX:\n await locator?.setChecked(value == true);\n break;\n\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.TOGGLE_SWITCH:\n await locator?.click();\n break;\n\n case PlaywrightAction.HOVER:\n if (await locator.isVisible()) {\n await locator?.hover({ noWaitAfter: false });\n await page.waitForTimeout(100); // short delay for hover to take effect\n }\n break;\n\n case PlaywrightAction.ASSERT_EXACT_VALUE: \n const actualExact = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualExact}]`);\n if (actualExact !== value) {\n proboLogger.info(`Validation *FAIL* expected '${value}' but got '${actualExact}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_CONTAINS_VALUE: \n const actualContains = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualContains}]`);\n if (!matchRegex(actualContains, value as string)) {\n proboLogger.info(`Validation *FAIL* expected '${actualContains}' to match '${value}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_URL:\n const currUrl = page.url();\n if (currUrl !== value) {\n proboLogger.info(`Validation *FAIL* expected url '${value}' while is '${currUrl}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(value as string);\n try {\n proboLogger.debug('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTop = scrollData.scrollTop;\n el.scrollLeft = scrollData.scrollLeft;\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await page.waitForTimeout(500);\n break;\n\n case PlaywrightAction.EXTRACT_VALUE:\n const extractedValue = await getElementValue(page, locator);\n proboLogger.debug(`extracted value is [${extractedValue}]`);\n return extractedValue;\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n }\n return true;\n } catch (e) {\n proboLogger.debug(`***ERROR failed to execute action ${action}: ${e}`);\n throw e;\n }\n}\n\n/**\n * Execute a given Playwright action using native Playwright functions where possible\n */\n\n\nexport enum ClickPosition {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n CENTER = 'CENTER'\n}\n\n/**\n * Click on an element at a specific position\n */\nexport async function clickAtPosition(page: Page, locator: Locator, clickPosition: ClickPosition | null): Promise<void> {\n if (!clickPosition || clickPosition === ClickPosition.CENTER) {\n await locator.click({noWaitAfter: false});\n return\n }\n const boundingBox = await locator.boundingBox();\n if (boundingBox) {\n if (clickPosition === ClickPosition.LEFT) {\n // await page.mouse.click(boundingBox.x + 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: 10, y: boundingBox.height/2}});\n }\n else if (clickPosition === ClickPosition.RIGHT) {\n // await page.mouse.click(boundingBox.x + boundingBox.width - 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: boundingBox.width - 10, y: boundingBox.height/2}});\n }\n }\n}\n\n/**\n * Traverses up the DOM from the given locator to find the closest visible ancestor.\n * Returns a Locator for the first visible element found, or null if none is visible up to <html>.\n * \n * @param locator - The Playwright locator to start searching from\n * @returns Promise that resolves to a visible ancestor locator or null if none found\n */\nexport async function findClosestVisibleElement(locator: Locator): Promise<Locator | null> {\n let currentLocator = locator;\n let parentLocator: Locator;\n while (true) {\n if (await currentLocator.isVisible()) {\n return currentLocator;\n }\n // Move up to the parent element\n parentLocator = currentLocator.locator('..');\n // Check if we've reached the top of the DOM\n const tagName = await parentLocator.evaluate(el => el.tagName).catch((): string | null => null);\n if (!tagName || tagName === 'HTML' || tagName === 'BODY') {\n break;\n }\n currentLocator = parentLocator;\n }\n return null;\n}\n","import type { Page } from 'playwright';\nimport { ElementTag } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\n// Fix the type definition\ntype ElementTagType = typeof ElementTag[keyof typeof ElementTag];\n\n// Add type declaration for the ProboLabs global\ndeclare global {\n // Declare highlighterCode in the global scope\n var highlighterCode: string;\n \n interface Window {\n ProboLabs?: {\n highlight: {\n execute: (elementTypes: ElementTagType[]) => Promise<any>;\n unexecute: () => Promise<any>;\n };\n highlightElements: (elements: Array<{ css_selector: string, iframe_selector: string, index: string }>) => void;\n unhighlightElements: () => void;\n findElements: (elementTypes: string) => any[];\n getElementInfo: (element: Element, index: number) => any;\n ElementTag: typeof ElementTag;\n\n // --- New caching API ---\n candidates?: any[];\n actual?: any;\n matchingCandidate?: any;\n findAndCacheCandidateElements?: (elementTypes: string[]) => number;\n findAndCacheActualElement?: (cssSelector: string, iframeSelector: string | null, isHover: boolean) => boolean;\n findAndCacheMatchingCandidate?: () => boolean;\n highlightCachedElements?: (which: 'candidates' | 'actual' | 'matching') => void;\n unhighlight?: () => void;\n reset?: () => void;\n getCandidates?: () => any[];\n getActual?: () => any;\n getMatchingCandidate?: () => any;\n };\n }\n}\n\nexport class Highlighter {\n constructor(private enableConsoleLogs: boolean = true) {}\n\n private async ensureHighlighterScript(page: Page, maxRetries = 3) {\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const scriptExists = await page.evaluate(\n `typeof window.ProboLabs?.highlight?.execute === 'function'`\n );\n\n if (!scriptExists) {\n proboLogger.debug('Injecting highlighter script...');\n await page.evaluate(highlighterCode);\n \n // Verify the script was injected correctly\n const verified = await page.evaluate(`\n //console.log('ProboLabs global:', window.ProboLabs);\n typeof window.ProboLabs?.highlight?.execute === 'function'\n `);\n proboLogger.debug('Script injection verified:', verified);\n }\n return; // Success - exit the function\n } catch (error) {\n if (attempt === maxRetries - 1) {\n throw error;\n }\n proboLogger.debug(`Script injection attempt ${attempt + 1} failed, retrying after delay...`);\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n }\n }\n\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n proboLogger.debug('highlightElements called with:', elementTags);\n await this.ensureHighlighterScript(page);\n \n // Execute the highlight function and await its result\n const result = await page.evaluate(\n async (tags) => {\n //proboLogger.debug('Browser: Starting highlight execution with tag:', tag);\n if (!window.ProboLabs?.highlight?.execute) {\n console.error('Browser: ProboLabs.highlight.execute is not available!');\n return null;\n }\n const elements = await window.ProboLabs.highlight.execute(tags);\n //proboLogger.debug('Browser: Found elements:', elements);\n return elements;\n },\n elementTags\n );\n \n // proboLogger.debug(\"highlighted elements =>\");\n // for (let i = 0; i < result.length; i++) { \n // proboLogger.debug(result[i]);\n // };\n \n return result;\n }\n\n public async unhighlightElements(page: Page) {\n proboLogger.debug('unhighlightElements called');\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window?.ProboLabs?.highlight?.unexecute();\n });\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, element_index: string) {\n await this.ensureHighlighterScript(page);\n proboLogger.debug('Highlighting element with:', { element_css_selector, iframe_selector, element_index });\n \n await page.evaluate(\n ({ css_selector, iframe_selector, index }) => {\n const proboLabs = window.ProboLabs;\n if (!proboLabs) {\n proboLogger.warn('ProboLabs not initialized');\n return;\n }\n // Create ElementInfo object for the element\n const elementInfo = {\n css_selector: css_selector,\n iframe_selector: iframe_selector,\n index: index\n };\n \n // Call highlightElements directly\n proboLabs.highlightElements([elementInfo]);\n },\n { \n css_selector: element_css_selector,\n iframe_selector: iframe_selector,\n index: element_index \n }\n );\n }\n\n \n // --- New Clean Caching API ---\n /**\n * Find and cache candidate elements of a given type (e.g., 'CLICKABLE').\n * Returns the number of candidates found.\n */\n public async findAndCacheCandidateElements(page: Page, elementTypes: string[]): Promise<number> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(async (types: string[]) => {\n return await window.ProboLabs?.findAndCacheCandidateElements?.(types);\n }, elementTypes);\n return result ?? 0;\n }\n\n /**\n * Find and cache the actual interaction element by CSS and iframe selector.\n * Returns true if found, false otherwise.\n */\n public async findAndCacheActualElement(page: Page, cssSelector: string, iframeSelector: string | null, isHover: boolean = false): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate((params: { css: string, iframe: string | null, isHover: boolean }) => {\n return window.ProboLabs?.findAndCacheActualElement?.(params.css, params.iframe, params.isHover);\n }, { css: cssSelector, iframe: iframeSelector, isHover: isHover });\n return result ?? false;\n }\n\n /**\n * Find and cache the best matching candidate for the actual element.\n * Returns true if a match was found, false otherwise.\n */\n public async findAndCacheMatchingCandidate(page: Page): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(() => {\n return window.ProboLabs?.findAndCacheMatchingCandidate?.();\n });\n return result ?? false;\n }\n\n /**\n * Highlight the cached candidates, actual, or matching candidate.\n * @param which 'candidates' | 'actual' | 'matching'\n */\n public async highlightCachedElements(page: Page, which: 'candidates' | 'actual' | 'matching') {\n await this.ensureHighlighterScript(page);\n await page.evaluate((w: 'candidates' | 'actual' | 'matching') => {\n window.ProboLabs?.highlightCachedElements?.(w);\n }, which);\n }\n\n /**\n * Remove all highlights.\n */\n public async unhighlightCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.unhighlight?.();\n });\n }\n\n /**\n * Reset/clear all cached state.\n */\n public async resetCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.reset?.();\n });\n }\n\n /**\n * Get serializable info for Node/Playwright (candidates, actual, matchingCandidate)\n */\n public async getCandidatesCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getCandidates?.();\n });\n }\n\n public async getActualCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getActual?.();\n });\n }\n\n public async getMatchingCandidateCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getMatchingCandidate?.();\n });\n }\n}\n\nexport { ElementTag, ElementTagType };\n","const MAILINATOR_API_KEY = '5bfef31518e84dfbb861b36f59259695';\nconst MAILINATOR_DOMAIN = 'probolabs.testinator.com';\n\nexport interface MailinatorMessage {\n id: string;\n subject: string;\n from: string;\n origfrom?: string;\n to: string;\n time: number;\n seconds_ago: number;\n domain?: string;\n source?: string;\n parts?: Array<{\n headers: Record<string, string>;\n body: string;\n }>;\n textBody?: string;\n htmlBody?: string;\n}\n\ninterface MailinatorResponse {\n messages: MailinatorMessage[];\n}\n\n/**\n * OTP utility class for working with Mailinator API\n */\nexport class OTP {\n /**\n * Flag to control whether messages should be deleted after OTP extraction\n * Set to false for debugging purposes to keep messages in the inbox\n * @default true\n */\n static DELETE_MESSAGE_AFTER_OTP_EXTRACTION = true;\n\n /**\n * Fetches the last messages from Mailinator for a specific inbox\n * @param inbox - The inbox name to check (without @domain)\n * @param since - Unix timestamp to fetch messages since (optional)\n * @returns Promise<MailinatorMessage[]> - Array of messages\n */\n static async fetchLastMessages(inbox: string, since?: number): Promise<MailinatorMessage[]> {\n try {\n // Use the correct Mailinator API endpoint structure\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/${inbox}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n \n // The API returns messages in 'msgs' property, not 'messages'\n const messages = data.msgs || data.messages || data || [];\n \n // Filter messages by 'since' timestamp if provided\n if (since) {\n return messages.filter((message: MailinatorMessage) => message.time >= since);\n }\n \n return messages;\n } catch (error) {\n console.error('Error fetching messages from Mailinator:', error);\n throw error;\n }\n }\n\n /**\n * Fetches a specific message by ID\n * @param messageId - The message ID\n * @returns Promise<MailinatorMessage> - The message details\n */\n static async fetchMessage(messageId: string): Promise<MailinatorMessage> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/messages/${messageId}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n return await response.json();\n } catch (error) {\n console.error('Error fetching message from Mailinator:', error);\n throw error;\n }\n }\n\n /**\n * Deletes a specific message by ID\n * @param messageId - The message ID to delete\n * @returns Promise<boolean> - True if deleted successfully, false otherwise\n */\n static async deleteMessage(messageId: string): Promise<boolean> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/messages/${messageId}`;\n \n const response = await fetch(url, {\n method: 'DELETE',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n console.error(`Failed to delete message ${messageId}: ${response.status} ${response.statusText}`);\n return false;\n }\n\n console.log(`🗑️ [deleteMessage] Deleted message: ${messageId}`);\n return true;\n } catch (error) {\n console.error('Error deleting message from Mailinator:', error);\n return false;\n }\n }\n\n\n /**\n * Extracts OTP codes from message content\n * @param message - The message to extract OTP from\n * @returns string | null - The OTP code or null if not found\n */\n static extractOTPFromMessage(message: MailinatorMessage): string | null {\n // Common OTP patterns - ordered by specificity (most specific first)\n const otpPatterns = [\n // Very specific patterns for common OTP formats\n /(?:verification\\s+code|verification\\s+number|6-digit\\s+verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n /(?:use\\s+the\\s+6-digit\\s+verification\\s+code\\s+below)[\\s\\S]*?(\\d{6})/i,\n /(?:code\\s+below\\s+to\\s+complete)[\\s\\S]*?(\\d{6})/i,\n /(?:verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n \n // Patterns with context around the code\n /(?:OTP|code|verification code|verification):\\s*(\\d{4,8})/i,\n /(?:enter|use|input)\\s+(?:the\\s+)?(?:code|OTP|verification code):\\s*(\\d{4,8})/i,\n /(?:your\\s+)?(?:verification\\s+)?(?:code\\s+is|OTP\\s+is):\\s*(\\d{4,8})/i,\n /(?:code|OTP|pin):\\s*(\\d{4,8})/i,\n /(?:code|OTP)\\s+is\\s+(\\d{4,8})/i,\n \n // Look for codes in specific contexts (avoiding URLs and tracking IDs)\n /(?:complete\\s+your\\s+sign-in)[\\s\\S]*?(\\d{6})/i,\n /(?:valid\\s+for\\s+the\\s+next)[\\s\\S]*?(\\d{6})/i,\n \n // Fallback: 6-digit numbers (most common OTP length)\n /(?:^|\\s)(\\d{6})(?:\\s|$)/i,\n \n // Last resort: 4-8 digit numbers (but avoid very long ones that are likely tracking IDs)\n /(?:^|\\s)(\\d{4,8})(?:\\s|$)/i\n ];\n\n // Helper function to check if a number is likely an OTP (not a tracking ID, phone number, year, etc.)\n const isValidOTP = (number: string, text: string): boolean => {\n // Common OTP lengths\n if (number.length < 4 || number.length > 8) return false;\n \n // Only filter out very obvious non-OTPs\n // Avoid numbers that are all the same digit (unlikely to be OTPs)\n if (/^(\\d)\\1+$/.test(number)) return false;\n \n // Avoid very long numbers that are clearly tracking IDs (but be more lenient)\n if (number.length >= 8 && parseInt(number) > 99999999) return false;\n \n // Filter out common false positives\n // Check if this looks like a year (4 digits starting with 19 or 20)\n if (number.length === 4 && /^(19|20)\\d{2}$/.test(number)) {\n // Check if it appears in copyright context\n if (text.includes(`© GoSource ${number}`) || text.includes(`©${number}`) || text.match(new RegExp(`©[^\\\\d]*${number}`, 'i'))) {\n return false;\n }\n }\n \n return true;\n };\n\n // Helper function to extract OTP from text content\n const extractFromText = (text: string, debugContext: string = ''): string | null => {\n if (!text) return null;\n \n for (let i = 0; i < otpPatterns.length; i++) {\n const pattern = otpPatterns[i];\n const match = text.match(pattern);\n if (match && match[1] && isValidOTP(match[1], text)) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" in ${debugContext}`);\n return match[1];\n } else if (match && match[1]) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" but rejected by isValidOTP in ${debugContext}`);\n }\n }\n return null;\n };\n\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // 1. Try to extract from text body first (preferred)\n if (message.textBody) {\n const otp = extractFromText(message.textBody, 'textBody');\n if (otp) return otp;\n }\n\n // 2. Try to extract from HTML body (strip HTML tags first)\n if (message.htmlBody) {\n const plainText = stripHtml(message.htmlBody);\n const otp = extractFromText(plainText, 'htmlBody');\n if (otp) return otp;\n }\n\n // 3. Try to extract from message parts\n if (message.parts && message.parts.length > 0) {\n for (let i = 0; i < message.parts.length; i++) {\n const part = message.parts[i];\n if (part.body) {\n const otp = extractFromText(part.body, `part[${i}]`);\n if (otp) return otp;\n }\n }\n }\n\n // 4. Fallback: try to extract from subject\n const otp = extractFromText(message.subject, 'subject');\n if (otp) return otp;\n \n return null;\n }\n\n /**\n * Gets the text content from a message for debugging/display purposes\n * @param message - The message to extract text from\n * @returns string - The text content of the message\n */\n static getMessageTextContent(message: MailinatorMessage): string {\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // Priority order: textBody > htmlBody > parts > subject\n if (message.textBody) {\n return message.textBody;\n }\n\n if (message.htmlBody) {\n return stripHtml(message.htmlBody);\n }\n\n if (message.parts && message.parts.length > 0) {\n return message.parts.map(part => part.body || '').join('\\n');\n }\n\n return message.subject || '';\n }\n\n /**\n * Fetches messages from all inboxes in the domain\n * @param limit - Number of messages to fetch (default: 50)\n * @param sort - Sort order: 'ascending' or 'descending' (default: 'descending')\n * @param full - Whether to fetch full message content (default: false)\n * @returns Promise<MailinatorMessage[]> - Array of messages from all inboxes\n */\n static async fetchAllInboxMessages(\n limit: number = 50,\n sort: 'ascending' | 'descending' = 'descending',\n full: boolean = false\n ): Promise<MailinatorMessage[]> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/?limit=${limit}&sort=${sort}${full ? '&full=true' : ''}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n const messages = data.msgs || data.messages || data || [];\n return messages;\n } catch (error) {\n console.error('Error fetching messages from all inboxes:', error);\n throw error;\n }\n }\n\n /**\n * Waits for an OTP to arrive in the inbox and extracts it\n * @param options - Configuration options for waiting for OTP\n * @param options.inbox - The inbox name to monitor (optional - if not provided, searches all inboxes)\n * @param options.timeout - Maximum time to wait in milliseconds (default: 30000)\n * @param options.checkInterval - How often to check in milliseconds (default: 1000)\n * @param options.checkRecentMessagesSinceMs - When > 0, check messages from the last X milliseconds and return the most recent OTP (default: 0)\n * @returns Promise<string | null> - The extracted OTP code or null if timeout/no OTP found\n */\n static async waitForOTP(options: {\n inbox?: string;\n timeout?: number;\n checkInterval?: number;\n checkRecentMessagesSinceMs?: number;\n } = {}): Promise<string | null> {\n const {\n inbox,\n timeout = 30000,\n checkInterval = 1000,\n checkRecentMessagesSinceMs = 0\n } = options;\n \n console.log(`[waitForOTP] inbox: ${inbox || 'all'}, timeout: ${timeout}ms, checkInterval: ${checkInterval}ms, checkRecentSince: ${checkRecentMessagesSinceMs}ms`);\n \n const startTime = Date.now();\n \n // If checkRecentMessagesSinceMs > 0, check for recent messages first\n if (checkRecentMessagesSinceMs > 0) {\n const recentMessagesCutoff = Date.now() - checkRecentMessagesSinceMs;\n const recentMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n \n const messagesFromWindow = recentMessages.filter(msg => msg.time >= recentMessagesCutoff);\n const sortedMessages = messagesFromWindow.sort((a, b) => b.time - a.time);\n \n for (const message of sortedMessages) {\n let otp = OTP.extractOTPFromMessage(message);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(message.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(message.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n if (messagesFromWindow.length === 0) {\n console.log(`❌ [waitForOTP] No messages found in the last ${checkRecentMessagesSinceMs}ms`);\n } else {\n console.log(`❌ [waitForOTP] Checked ${messagesFromWindow.length} recent message(s) but none contained OTP`);\n }\n }\n \n // Get initial messages for monitoring new ones (from specific inbox or all inboxes)\n const initialMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const initialMessageIds = new Set(initialMessages.map(msg => msg.id));\n \n while (Date.now() - startTime < timeout) {\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n \n try {\n // Get current messages (from specific inbox or all inboxes)\n const currentMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const newMessages = currentMessages.filter(msg => !initialMessageIds.has(msg.id));\n \n if (newMessages.length > 0) {\n // Sort new messages by time (newest first) to handle multiple messages arriving at once\n const sortedNewMessages = newMessages.sort((a, b) => b.time - a.time);\n \n // Check all new messages (not just the first one)\n for (const newMessage of sortedNewMessages) {\n // First try to extract OTP from the message summary (faster)\n let otp = OTP.extractOTPFromMessage(newMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(newMessage.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(newMessage.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message (full fetch)`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n // Add all new messages to the set so we don't reprocess them\n newMessages.forEach(msg => initialMessageIds.add(msg.id));\n }\n } catch (error) {\n // Silently continue polling\n }\n }\n \n console.log(`❌ [waitForOTP] Timeout reached (${timeout}ms) - no OTP found`);\n return null; // Timeout reached or no OTP found\n }\n}\n\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n waitForStabilityQuietTimeout?: number; // Time to wait for network stability (default: 2000ms)\n waitForStabilityInitialDelay?: number; // Initial delay before monitoring starts (default: 500ms)\n waitForStabilityGlobalTimeout?: number; // Overall timeout for stabilization (default: 15000ms)\n pollMs?: number; // Polling interval (default: 100ms)\n maxInflight?: number; // Maximum inflight requests (default: 0)\n inflightGraceMs?: number; // Grace period for inflight requests (default: 4000ms)\n waitForStabilityVerbose?: boolean; // Enable verbose logging (default: false)\n}\n\ntype ResourceType =\n | 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script'\n | 'TextTrack' | 'XHR' | 'Fetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'Other';\n\n/**\n * Global navigation tracker that monitors page navigation events and network activity\n * using CDP (Chrome DevTools Protocol) for comprehensive network monitoring\n * \n * This is a singleton class - only one instance can exist at a time\n */\nexport class NavTracker {\n private static instance: NavTracker | null = null;\n private page: Page;\n private navigationCount: number = 0;\n private lastNavTime: number | null = null;\n private waitForStabilityQuietTimeout: number;\n private waitForStabilityInitialDelay: number;\n private waitForStabilityGlobalTimeout: number;\n private pollMs: number;\n private maxInflight: number;\n private inflightGraceMs: number;\n private waitForStabilityVerbose: boolean;\n private isListening: boolean = false;\n private instanceId: string;\n private client: any = null;\n private inflight: Set<string> = new Set();\n private lastHardNavAt: number = 0;\n private lastSoftNavAt: number = 0;\n private lastNetworkActivityAt: number = 0;\n private totalRequestsTracked: number = 0;\n\n // Define relevant resource types and content types\n private readonly RELEVANT_RESOURCE_TYPES = [\n 'Document',\n 'Stylesheet', \n 'Image',\n 'Font',\n 'Script',\n 'XHR',\n 'Fetch'\n ];\n\n private readonly RELEVANT_CONTENT_TYPES = [\n 'text/html',\n 'text/css',\n 'application/javascript',\n 'image/',\n 'font/',\n 'application/json',\n ];\n\n // Additional patterns to filter out\n private readonly IGNORED_URL_PATTERNS = [\n // Analytics and tracking\n 'analytics',\n 'tracking',\n 'telemetry',\n 'beacon',\n 'metrics',\n // Ad-related\n 'doubleclick',\n 'adsystem',\n 'adserver',\n 'advertising',\n // Social media widgets\n 'facebook.com/plugins',\n 'platform.twitter',\n 'linkedin.com/embed',\n // Live chat and support\n 'livechat',\n 'zendesk',\n 'intercom',\n 'crisp.chat',\n 'hotjar',\n // Push notifications\n 'push-notifications',\n 'onesignal',\n 'pushwoosh',\n // Background sync/heartbeat\n 'heartbeat',\n 'ping',\n 'alive',\n // WebRTC and streaming\n 'webrtc',\n 'rtmp://',\n 'wss://',\n // Common CDNs for dynamic content\n 'cloudfront.net',\n 'fastly.net',\n ];\n\n /**\n * Private constructor - use getInstance() to get the singleton instance\n */\n private constructor(page: Page, options: NavTrackerOptions = {}) {\n this.page = page;\n this.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout ?? 2000;\n this.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay ?? 500;\n this.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout ?? 15000;\n this.pollMs = options.pollMs ?? 100;\n this.maxInflight = options.maxInflight ?? 0;\n this.inflightGraceMs = options.inflightGraceMs ?? 4000;\n this.waitForStabilityVerbose = options.waitForStabilityVerbose ?? false;\n \n proboLogger.debug(`NavTracker constructor set values: quietTimeout=${this.waitForStabilityQuietTimeout}, initialDelay=${this.waitForStabilityInitialDelay}, globalTimeout=${this.waitForStabilityGlobalTimeout}, verbose=${this.waitForStabilityVerbose}`);\n this.instanceId = Math.random().toString(36).substr(2, 9);\n \n // Initialize timestamps\n const now = Date.now();\n this.lastHardNavAt = now;\n this.lastSoftNavAt = now;\n this.lastNetworkActivityAt = now;\n\n // Note: start() is called asynchronously in getInstance() to ensure proper initialization\n }\n\n /**\n * Start listening for navigation and network events using CDP (private method)\n */\n private async start(): Promise<void> {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n try {\n // Set up CDP session\n this.client = await this.page.context().newCDPSession(this.page);\n await this.client.send('Page.enable');\n await this.client.send('Network.enable');\n await this.client.send('Runtime.enable');\n await this.client.send('Page.setLifecycleEventsEnabled', { enabled: true });\n\n // Set up navigation event handlers\n this.client.on('Page.frameNavigated', (e: any) => {\n if (!e.frame?.parentId) { // main frame has no parentId\n this.lastHardNavAt = Date.now();\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Hard navigation detected at ${this.lastHardNavAt}`);\n }\n }\n });\n\n this.client.on('Page.navigatedWithinDocument', (_e: any) => {\n this.lastSoftNavAt = Date.now();\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Soft navigation detected at ${this.lastSoftNavAt}`);\n }\n });\n\n // Set up network event handlers\n this.client.on('Network.requestWillBeSent', (e: any) => {\n this.onNetworkRequest(e);\n });\n\n this.client.on('Network.loadingFinished', (e: any) => {\n this.onNetworkResponse(e, 'finished');\n });\n\n this.client.on('Network.loadingFailed', (e: any) => {\n this.onNetworkResponse(e, 'failed');\n });\n\n this.isListening = true;\n proboLogger.debug(`NavTracker[${this.instanceId}]: started CDP-based monitoring`);\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Failed to start CDP monitoring: ${error}`);\n // Fall back to basic navigation tracking\n this.page.on(\"framenavigated\", (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n this.lastHardNavAt = Date.now();\n }\n });\n this.isListening = true;\n }\n }\n\n /**\n * Stop listening for navigation and network events (private method)\n */\n private stop(): void {\n if (!this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: not listening, ignoring stop()`);\n return;\n }\n\n try {\n if (this.client) {\n // Check if the page is still available before detaching\n if (this.page && !this.page.isClosed()) {\n this.client.detach();\n } else {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page is closed, skipping CDP detach`);\n }\n this.client = null;\n }\n } catch (error) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Error detaching CDP client: ${error}`);\n }\n\n this.isListening = false;\n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped CDP monitoring`);\n }\n\n /**\n * Handle network request events\n */\n private onNetworkRequest(e: any): void {\n const requestType = e.type as ResourceType | undefined;\n const url = e.request?.url ?? '';\n \n // Filter by resource type\n if (!this.RELEVANT_RESOURCE_TYPES.includes(requestType as any)) {\n return;\n }\n\n // Filter out streaming, websocket, and other real-time requests\n if (['WebSocket', 'EventSource', 'Media', 'Manifest', 'Other'].includes(requestType as any)) {\n return;\n }\n\n // Filter out by URL patterns\n const urlLower = url.toLowerCase();\n if (this.IGNORED_URL_PATTERNS.some(pattern => urlLower.includes(pattern))) {\n return;\n }\n\n // Filter out data URLs and blob URLs\n if (urlLower.startsWith('data:') || urlLower.startsWith('blob:')) {\n return;\n }\n\n // Filter out requests with certain headers\n const headers = e.request?.headers || {};\n if (headers['purpose'] === 'prefetch' || ['video', 'audio'].includes(headers['sec-fetch-dest'])) {\n return;\n }\n\n this.inflight.add(e.requestId);\n this.totalRequestsTracked++;\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request started: ${requestType} - ${url}`);\n }\n }\n\n /**\n * Handle network response events\n */\n private onNetworkResponse(e: any, status: 'finished' | 'failed'): void {\n const requestId = e.requestId;\n \n if (!this.inflight.has(requestId)) {\n return;\n }\n\n this.inflight.delete(requestId);\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request ${status} (${this.inflight.size} remaining)`);\n }\n }\n\n /**\n * Check if navigation and network activity has stabilized\n */\n private hasNavigationStabilized(): boolean {\n const now = Date.now();\n \n // Use the most recent activity timestamp\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const quietSinceMs = now - lastActivityAt;\n const inflightOk = this.inflight.size <= this.maxInflight || (now - this.lastHardNavAt) > this.inflightGraceMs;\n \n const isStabilized = quietSinceMs >= this.waitForStabilityQuietTimeout && inflightOk;\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - quietSinceMs=${quietSinceMs}ms, waitForStabilityQuietTimeout=${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}, inflightOk=${inflightOk}, stabilized=${isStabilized}`\n );\n }\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation and network activity to stabilize\n * Uses CDP-based monitoring for comprehensive network activity tracking\n */\n async waitForNavigationToStabilize(): Promise<void> {\n const now = Date.now();\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const timeSinceLastActivity = now - lastActivityAt;\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation and network to stabilize (quietTimeout: ${this.waitForStabilityQuietTimeout}ms, initialDelay: ${this.waitForStabilityInitialDelay}ms, globalTimeout: ${this.waitForStabilityGlobalTimeout}ms, verbose: ${this.waitForStabilityVerbose}, lastActivity: ${timeSinceLastActivity}ms ago)`);\n \n // Ensure CDP monitoring is properly initialized\n if (!this.isListening) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: CDP monitoring not initialized, initializing now...`);\n await this.start();\n }\n \n const startTime = Date.now();\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n \n try {\n // Initial delay to catch any new network activity triggered by user actions\n if (this.waitForStabilityInitialDelay > 0) {\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: initial delay of ${this.waitForStabilityInitialDelay}ms to catch new network activity`);\n }\n await sleep(this.waitForStabilityInitialDelay);\n }\n \n // Wait a short time to catch any missed events\n await sleep(100);\n \n // Main stabilization loop\n while (true) {\n const now = Date.now();\n \n // Check for timeout\n if (now - startTime > this.waitForStabilityGlobalTimeout) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: Timeout reached after ${this.waitForStabilityGlobalTimeout}ms with ${this.inflight.size} pending requests`);\n break;\n }\n \n // Check if stabilized\n if (this.hasNavigationStabilized()) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page stabilized after ${quietSinceMs}ms of quiet time`);\n break;\n }\n \n // Log progress every 2 seconds in verbose mode\n if (this.waitForStabilityVerbose && now % 2000 < this.pollMs) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Status - quiet=${quietSinceMs}ms/${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}/${this.maxInflight}`);\n }\n \n await sleep(this.pollMs);\n }\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Error during stabilization: ${error}`);\n }\n }\n\n\n // ============================================================================\n // SINGLETON METHODS\n // ============================================================================\n\n /**\n * Get the singleton instance of NavTracker\n * @param page The page to track (required for first creation)\n * @param options Optional configuration\n * @returns The singleton NavTracker instance\n */\n public static async getInstance(page?: Page, options?: NavTrackerOptions): Promise<NavTracker> {\n proboLogger.debug(`NavTracker.getInstance called with options:`, options);\n if (!NavTracker.instance) {\n if (!page) {\n throw new Error('NavTracker: Page is required for first instance creation');\n }\n NavTracker.instance = new NavTracker(page, options);\n await NavTracker.instance.start();\n proboLogger.debug(`NavTracker: created new singleton instance with options:`, options);\n } else {\n // Update existing instance with new options\n if (options) {\n if (options.waitForStabilityQuietTimeout !== undefined) {\n NavTracker.instance.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout;\n }\n if (options.waitForStabilityInitialDelay !== undefined) {\n NavTracker.instance.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay;\n }\n if (options.waitForStabilityGlobalTimeout !== undefined) {\n NavTracker.instance.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout;\n }\n if (options.pollMs !== undefined) {\n NavTracker.instance.pollMs = options.pollMs;\n }\n if (options.maxInflight !== undefined) {\n NavTracker.instance.maxInflight = options.maxInflight;\n }\n if (options.inflightGraceMs !== undefined) {\n NavTracker.instance.inflightGraceMs = options.inflightGraceMs;\n }\n if (options.waitForStabilityVerbose !== undefined) {\n NavTracker.instance.waitForStabilityVerbose = options.waitForStabilityVerbose;\n }\n proboLogger.debug(`NavTracker: updated existing instance with new values: quietTimeout=${NavTracker.instance.waitForStabilityQuietTimeout}, initialDelay=${NavTracker.instance.waitForStabilityInitialDelay}, globalTimeout=${NavTracker.instance.waitForStabilityGlobalTimeout}, verbose=${NavTracker.instance.waitForStabilityVerbose}`);\n }\n if (options?.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n }\n return NavTracker.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing or page changes)\n */\n public static resetInstance(): void {\n if (NavTracker.instance) {\n NavTracker.instance.stop();\n NavTracker.instance = null;\n proboLogger.debug(`NavTracker: reset singleton instance`);\n }\n }\n\n}","import { Frame, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex } from '@probolabs/probo-shared';\nimport { findClosestVisibleElement } from './actions';\nimport { OTP } from './otp';\nimport { NavTracker } from './nav-tracker';\n\nexport interface RunStepParams extends Partial<PlaywrightTimeoutConfig> {\n iframeSelector?: string;\n elementSelector?: string;\n action: PlaywrightAction;\n argument?: string | string[]; \n annotation?: string;\n // Wait-for specific configuration\n pollingInterval?: number;\n timeout?: number;\n}\n\nexport interface RunStepResult {\n key: string;\n value: any\n}\n\nexport class ProboPlaywright {\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n\n constructor(timeoutConfig: Partial<PlaywrightTimeoutConfig> = {}, page: Page | null = null) {\n // Merge provided config with defaults to ensure all properties are defined\n this.timeoutConfig = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...timeoutConfig\n };\n this.setPage(page);\n \n\n \n }\n\n /**\n * Sets the Playwright page instance for this ProboPlaywright instance.\n * Also applies the configured default navigation and action timeouts to the page.\n * \n * @param page - The Playwright Page instance to use, or null to unset.\n */\n public setPage(page: Page | null) {\n this.page = page;\n if (this.page) {\n this.page.setDefaultNavigationTimeout(this.timeoutConfig.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.timeoutConfig.playwrightActionTimeout);\n\n }\n }\n\n \n\n /**\n * Executes a single step in the test scenario with the specified action on the target element.\n * Handles iframe navigation, element highlighting, and various Playwright actions like click, fill, validate, etc.\n * \n * @param params - Configuration object containing element selectors, action type, arguments, and display options\n * @returns Promise that resolves to a result object for extract actions, or void for other actions\n * @throws Error if element is not found or validation fails\n */\n public async runStep(params: RunStepParams): Promise<string | void> {\n \n const { \n action, \n argument = '', \n iframeSelector = '', \n elementSelector = '', \n annotation = '', \n } = params;\n \n // 0. Check that page is set\n if (!this.page) {\n throw new Error('ProboPlaywright: Page is not set');\n }\n\n // 1. Check if we need to visit a url\n if (action === PlaywrightAction.VISIT_URL || action === PlaywrightAction.VISIT_BASE_URL) {\n try {\n await this.page.goto(argument as string, { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n\n // 2. Check if we need to assert the url\n if (action === PlaywrightAction.ASSERT_URL) {\n // wait for page to stabilize\n const navTracker = await NavTracker.getInstance(this.page, { waitForStabilityQuietTimeout: this.timeoutConfig.playwrightNavigationTimeout });\n await navTracker.waitForNavigationToStabilize();\n const currentUrl = await this.page.url();\n if (currentUrl !== argument as string) {\n throw new Error(`Assertion failed: Expected URL \"${argument}\" but got \"${currentUrl}\".`);\n }\n return;\n }\n\n // 3. Check if we need to type keys\n if (action === PlaywrightAction.TYPE_KEYS) {\n await this.robustTypeKeys(argument as string);\n return;\n }\n\n // 4. Get the locator (iframe or not)\n const startTime = Date.now();\n let locator;\n \n if (iframeSelector && iframeSelector.length > 0) {\n locator = this.page.frameLocator(iframeSelector).locator(elementSelector);\n } else {\n locator = this.page.locator(elementSelector);\n }\n\n \n // Fail fast: immediately validate that the element exists for non-wait actions\n const locator_timeout = (action === PlaywrightAction.WAIT_FOR) ? (params.timeout as number) || 10000 : this.timeoutConfig.playwrightLocatorTimeout;\n try {\n await locator.waitFor({ state: 'attached', timeout: locator_timeout });\n } catch (e) {\n throw new Error(`Element not found with selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n\n if (action === PlaywrightAction.HOVER) {\n const visibleLocator = await findClosestVisibleElement(locator);\n if (visibleLocator) {\n locator = visibleLocator;\n }\n }\n\n // 5. Highlight, wait, unhighlight if highlightTimeout > 0\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n await this.unhighlight(locator);\n }\n\n // 6. Action logic\n switch (action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n await this.robustClick(locator);\n break;\n case PlaywrightAction.FILL_IN:\n await this.robustFill(locator, argument as string);\n break; \n case PlaywrightAction.SELECT_DROPDOWN:\n await locator.selectOption(argument);\n break; \n case PlaywrightAction.SET_SLIDER:\n await this.setSliderValue(locator, argument as string);\n break;\n case PlaywrightAction.WAIT_FOR_OTP:\n // till we figure out how to get the inbox name we will wait for ANY OTP in all inboxes \n const otp = await OTP.waitForOTP({ checkRecentMessagesSinceMs: 120_000 });\n if (otp) {\n console.log(`✅ OTP found: ${otp}`);\n await locator.fill(otp);\n } else {\n console.log(`❌ OTP not found`);\n }\n break;\n \n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n const containerText = await this.getTextValue(locator);\n if (!matchRegex(containerText, argument as string)) {\n throw new Error(`Validation failed. Expected text \"${containerText}\" to match \"${argument}\".`);\n }\n break;\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n const actualText = await this.getTextValue(locator);\n \n if (actualText !== argument) {\n throw new Error(`Validation failed. Expected text \"${argument}\", but got \"${actualText}\".`);\n }\n break;\n case PlaywrightAction.HOVER:\n //console.log('HOVER', locator);\n \n if (locator) {\n //console.log('executing HOVER on closest visible ancestor');\n await locator.hover();\n } else {\n //console.log('not executing HOVER because no visible ancestor found');\n }\n break;\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(argument as string);\n try {\n console.log('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n // el.scrollTop = scrollData.scrollTop;\n // el.scrollLeft = scrollData.scrollLeft;\n el.scrollTo({left: scrollData.scrollLeft, top: scrollData.scrollTop, behavior: 'smooth'});\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\n } catch (e) {\n console.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await this.page.waitForTimeout(500);\n break;\n case PlaywrightAction.UPLOAD_FILES:\n await locator.setInputFiles(argument as string[]);\n break;\n case PlaywrightAction.EXTRACT_VALUE:\n let extractedText = await this.getTextValue(locator);\n return extractedText;\n case PlaywrightAction.WAIT_FOR: \n const expectedText = argument as string;\n const pollingInterval = (params.pollingInterval as number) || 500; // Default 500ms\n const timeout = (params.timeout as number) || 10000; // Default 10 seconds\n \n let textMatches = false; \n let currentText = ''; \n while (!textMatches && (Date.now() - startTime) < timeout) {\n try { \n // Check if element is visible first\n const isVisible = await locator.isVisible();\n \n if (isVisible) {\n // Get the current text content only if element is visible\n currentText = await this.getTextValue(locator);\n \n // Check if the text matches (using the same logic as ASSERT_CONTAINS_VALUE)\n if (matchRegex(currentText, expectedText)) {\n textMatches = true;\n console.log(`✅ Wait for text completed successfully. Found: \"${currentText}\"`);\n } else {\n // Text doesn't match yet, wait for the polling interval\n if ((Date.now() - startTime) < timeout) {\n await this.page.waitForTimeout(pollingInterval);\n }\n }\n } else {\n // Element is not visible, wait for the polling interval\n if ((Date.now() - startTime) < timeout) {\n await this.page.waitForTimeout(pollingInterval);\n }\n }\n } catch (e) {\n throw new Error(`Wait for text failed while trying to extract text from selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''}`);\n }\n }\n \n // Timeout reached without a match\n if (!textMatches) { \n throw new Error(`Wait for text failed. Expected \"${expectedText}\" to match \"${currentText}\" after ${timeout}ms of polling every ${pollingInterval}ms`);\n } \n break;\n default:\n throw new Error(`Unhandled action: ${action}`);\n }\n }\n\n /**\n * Creates a visual highlight overlay on the target element with optional annotation text.\n * The highlight appears as a red border around the element and can include descriptive text.\n * \n * @param locator - The Playwright locator for the element to highlight\n * @param annotation - Optional text annotation to display above/below the highlighted element\n */\n private async highlight(locator: Locator, annotation: string | null = null) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.createElement('div');\n overlay.id = 'highlight-overlay';\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 2147483647;\n `;\n el.ownerDocument.body.appendChild(overlay);\n const bbox = el.getBoundingClientRect();\n const highlight = el.ownerDocument.createElement('div');\n highlight.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: 2px solid rgb(255, 0, 0);\n transition: all 0.2s ease-in-out;\n `;\n overlay.appendChild(highlight);\n }, { timeout: 500 });\n } catch (e) {\n console.log('highlight: failed to run locator.evaluate()', e);\n }\n if (annotation) {\n await locator.evaluate((el: HTMLElement, annotation: string) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n const bbox = el.getBoundingClientRect();\n const annotationEl = el.ownerDocument.createElement('div');\n annotationEl.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y - 25}px;\n padding: 2px 6px;\n background-color: rgba(255, 255, 0, 0.6);\n color: black;\n font-size: 16px;\n font-family: 'Courier New', Courier, monospace;\n font-weight: bold;\n border-radius: 3px;\n pointer-events: none;\n z-index: 2147483647;\n `;\n annotationEl.textContent = annotation;\n\n // If element is too close to top of window, position annotation below\n if (bbox.y < 30) {\n annotationEl.style.top = `${bbox.y + bbox.height + 5}px`;\n }\n\n overlay.appendChild(annotationEl);\n }\n }, annotation, { timeout: 500 });\n }\n };\n\n /**\n * Removes the highlight overlay from the target element.\n * Cleans up the visual highlighting created by the highlight method.\n * \n * @param locator - The Playwright locator for the element to unhighlight\n */\n private async unhighlight(locator: Locator) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n overlay.remove();\n }\n }, { timeout: 500 });\n } catch (e) {\n console.log('unhighlight: failed to run locator.evaluate()', e);\n }\n };\n\n /**\n * Attempts to fill a form field with the specified value using multiple fallback strategies.\n * First tries the standard fill method, then falls back to click + type if needed.\n * \n * @param locator - The Playwright locator for the input element\n * @param value - The text value to fill into the input field\n */\n private async robustFill(locator: Locator, value: string) {\n if (!this.page) {\n throw new Error('ProboPlaywright: Page is not set');\n }\n try {\n await locator.fill(value);\n return;\n } catch (err) {\n console.warn('robustFill: failed to run locator.fill()', err);\n }\n // fallback: click and type\n try {\n await locator.focus();\n await this.page.keyboard.type(value);\n return;\n } catch (err) {\n console.warn('robustFill: failed to run locator.click() and page.keyboard.type()', err);\n };\n };\n\n private async robustTypeKeys(value: string) {\n if (!this.page) {\n throw new Error('ProboPlaywright: Page is not set');\n }\n /* try {\n await locator.press(value);\n return;\n } catch (err) {\n console.warn('robustTypeKeys: failed to run locator.type()', err);\n } */\n // fallback: click and type\n try {\n // await locator.focus(); \n await this.page.keyboard.press(value);\n return;\n } catch (err) {\n console.warn('robustTypeKeys: failed to run page.keyboard.type()', err);\n }\n }\n\n /**\n * Performs a robust click operation using multiple fallback strategies.\n * Attempts standard click first, then mouse click at center coordinates, and finally native DOM events.\n * \n * @param locator - The Playwright locator for the element to click\n * @throws Error if all click methods fail\n */\n private async robustClick(locator: Locator) {\n if (!this.page) {\n throw new Error('ProboPlaywright: Page is not set');\n }\n // start with a standard click\n try {\n await locator.click({ noWaitAfter: false, timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n console.warn('robustClick: failed to run locator.click(), trying mouse.click()');\n }\n // try clicking using mouse at the center of the element\n try {\n const bbox = await locator.boundingBox({ timeout: this.timeoutConfig.playwrightLocatorTimeout });\n if (bbox) {\n await this.page.mouse.click(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n return;\n } else {\n console.warn('robustClick: bounding box not found');\n }\n } catch (err2) {\n console.warn('robustClick: failed to run page.mouse.click()');\n }\n // fallback: dispatch native mouse events manually\n try {\n await locator.evaluate((el) => {\n ['mousedown', 'mouseup', 'click'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } catch (err3) {\n console.error('robustClick: all click methods failed:', err3);\n throw err3; // Re-throw final error if all fallbacks fail\n }\n };\n \n /**\n * Extracts text content from an element using multiple strategies.\n * Tries textContent first, then inputValue, and finally looks for nested input elements.\n * Returns normalized and trimmed text for consistent comparison.\n * \n * @param locator - The Playwright locator for the element to extract text from\n * @returns Normalized text content with consistent whitespace handling\n */\n private async getTextValue(locator: Locator) {\n let textValue = await locator.textContent();\n if (!textValue) {\n try {\n textValue = await locator.inputValue();\n } catch (err) {\n console.warn('getTextValue: failed to run locator.inputValue()', err);\n }\n }\n if (!textValue) {\n try {\n textValue = await locator.locator('input').inputValue();\n } catch (err) {\n console.warn('getTextValue: failed to run locator.locator(\"input\").inputValue()', err);\n }\n }\n if (!textValue) {\n textValue = '';\n }\n // Trim and normalize whitespace to make comparison more robust\n return textValue.trim().replace(/\\s+/g, ' ');\n };\n \n private async setSliderValue(locator: Locator, value: string) {\n await locator.evaluate((el: HTMLInputElement, value: string) => {\n el.value = value;\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true }));\n }, value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n }\n} /* class ProboPlaywright */\n","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\n StepMinimal,\n} from '@probolabs/probo-shared';\nimport { ApiClient, \n apiLogger,\n Instruction, \n FindStepByPromptResult, \n PlaywrightAction,\n ProboLogger,\n ProboLogLevel,\n AIModel,\n DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n setupBrowserConsoleLogs,\n resolveElementTag\n } from '@probolabs/probo-shared';\nimport {\n waitForMutationsToSettle,\n findClosestVisibleElement, \n} from './actions';\nimport { Highlighter, ElementTagType } from './highlight';\nimport pRetry, { FailedAttemptError } from 'p-retry';\nimport { proboLogger } from './probo-logger';\nimport { ProboPlaywright } from './replay-utils';\nimport { NavTracker } from './nav-tracker';\n\n\n/**\n * Configuration options for Probo client\n */\ninterface ProboConfig {\n scenarioName: string;\n token?: string;\n apiUrl?: string;\n enableConsoleLogs?: boolean;\n logToConsole?: boolean;\n logToFile?: boolean;\n debugLevel?: ProboLogLevel;\n aiModel?: AIModel;\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n}\n\nexport interface RunStepOptions {\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig;\n stepId?: number;\n}\n\nexport interface AskAIOptions {\n stepId?: number;\n createStep?: boolean;\n}\n\nconst retryOptions = {\n retries: 3,\n minTimeout: 1000,\n onFailedAttempt: (error: FailedAttemptError) => {\n proboLogger.warn(\n `Page operation failed, attempt ${error.attemptNumber} of ${\n error.retriesLeft +\n error.attemptNumber\n }...`\n );\n }\n};\n\nexport class Probo {\n private highlighter: Highlighter;\n private apiClient: ApiClient;\n private readonly enableConsoleLogs: boolean;\n private readonly scenarioName: string;\n private readonly aiModel: AIModel;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n constructor({\n scenarioName,\n token = '',\n apiUrl = '',\n enableConsoleLogs = false,\n logToConsole = true,\n logToFile = false,\n debugLevel = ProboLogLevel.INFO,\n aiModel = AIModel.AZURE_GPT4_MINI,\n timeoutConfig = {}\n }: ProboConfig) {\n // Configure logger transports and level\n // configureLogger({ logToConsole, logToFile, level: debugLevel });\n proboLogger.setLogLevel(debugLevel);\n\n const apiKey = token || process.env.PROBO_API_KEY;\n if (!apiKey) {\n proboLogger.error(\n \"API key wasn't provided. Pass 'token' or set PROBO_API_KEY\"\n );\n throw new Error('Probo API key not provided');\n }\n\n const apiEndPoint = apiUrl || process.env.PROBO_API_ENDPOINT;\n if (!apiEndPoint) {\n proboLogger.error(\n \"API endpoint wasn't provided. Pass 'apiUrl' or set PROBO_API_ENDPOINT\"\n );\n throw new Error('Probo API endpoint not provided');\n }\n\n this.highlighter = new Highlighter(enableConsoleLogs);\n this.apiClient = new ApiClient(apiEndPoint, apiKey);\n this.enableConsoleLogs = enableConsoleLogs;\n this.scenarioName = scenarioName;\n this.aiModel = aiModel;\n this.timeoutConfig = { ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, ...timeoutConfig };\n // set the log level for the api client\n apiLogger.setLogLevel(debugLevel);\n\n proboLogger.info(\n `Initializing: scenario=${scenarioName}, apiUrl=${apiEndPoint}, ` +\n `enableConsoleLogs=${enableConsoleLogs}, debugLevel=${debugLevel}, aiModel=${aiModel}`\n );\n }\n\n public async askAI(page: Page, question: string, options: AskAIOptions): Promise<any> {\n const response = await this.askAIHelper(page, question, options);\n if (response?.result?.error) {\n throw new Error(response.result.error);\n }\n return response?.result?.answer;\n }\n\n public async runStep(\n page: Page, \n stepPrompt: string, \n argument: string|boolean|null = null,\n options: RunStepOptions = { aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<string|void> {\n const runStepStartTime = Date.now();\n try {\n // Determine which AI model to use for this step\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n let stepId = options.stepId;\n if (!stepId) {\n const stepByPrompt = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url())\n if (!stepByPrompt?.step) {\n // Create new step before continuing\n stepId = Number(await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: '',\n initial_html_content: '',\n argument: argument as string,\n use_cache: false,\n url: page.url(),\n }))\n } else {\n stepId = Number(stepByPrompt.step.id)\n }\n }\n\n proboLogger.log(`runStep: ${'#'+stepId+' - '}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n \n // Setup page monitoring and wait for navigation to stabilize\n this.setupConsoleLogs(page);\n proboLogger.debug(`🔍 [WaitForNavigationToStabilize] timeoutConfig values: quietTimeout=${this.timeoutConfig.waitForStabilityQuietTimeout}, initialDelay=${this.timeoutConfig.waitForStabilityInitialDelay}, globalTimeout=${this.timeoutConfig.waitForStabilityGlobalTimeout}, verbose=${this.timeoutConfig.waitForStabilityVerbose}`);\n const navTracker = await NavTracker.getInstance(page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n proboLogger.debug(`🔍 Calling waitForNavigationToStabilize: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`);\n await navTracker.waitForNavigationToStabilize();\n\n // STEP 1: Check for cached step (if caching is enabled)\n let [isCachedStep, returnValue] = await this._handleCachedStep(page, stepId, stepPrompt, argument);\n if (isCachedStep) {\n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (cached step)`);\n proboLogger.debug('Successfully executed cached step!');\n return returnValue;\n }\n\n // STEP 2: Create or update step in backend and capture initial page state\n proboLogger.log(`Execution failed or prompt changed, starting self-healing process...`);\n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n const { base_screenshot_url, base_html_content } = await this.getInitialPageState(page);\n await this.apiClient.patchStep(stepId, {\n initial_screenshot: base_screenshot_url,\n pre_html_content: base_html_content !== '' ? base_html_content : undefined,\n prompt: stepPrompt\n });\n\n // STEP 4: Self-Healing Process - Get action from database or from AI\n const screenshotReasoningStartTime = Date.now();\n const action : PlaywrightAction = await this.apiClient.screenshotReasoning(stepId, stepPrompt, this.aiModel);\n const screenshotReasoningTime = Date.now() - screenshotReasoningStartTime;\n proboLogger.debug(`⏱️ screenshotReasoning took ${screenshotReasoningTime}ms`);\n\n // STEP 5: Find and highlight candidate elements based on reasoning\n const elementTags = resolveElementTag(action);\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags);\n proboLogger.debug(`Found ${candidate_elements.length} candidate elements`);\n\n // STEP 6: Clean up highlighting\n await this.unhighlightElements(page);\n\n // STEP 7: Select the best candidate element\n const findBestCandidateStartTime = Date.now();\n const index : number = await this.apiClient.findBestCandidateElement(\n stepId,\n candidates_screenshot_url, \n candidate_elements, \n this.aiModel\n );\n const findBestCandidateTime = Date.now() - findBestCandidateStartTime;\n proboLogger.debug(`⏱️ findBestCandidateElement took ${findBestCandidateTime}ms`);\n proboLogger.debug(`AI selected candidate element at index: ${index}`);\n \n // STEP 8: Find the actual element object from the candidates\n const actualElement = candidate_elements.find(element => Number(element.index) === index);\n \n if (!actualElement) {\n throw new Error(`No candidate element found with index ${index}. Available indices: ${candidate_elements.map(e => e.index).join(', ')}`);\n }\n\n proboLogger.debug(`Selected element: ${actualElement.css_selector} (index: ${actualElement.index})`);\n\n // STEP 9: Execute the interaction with the selected element\n const actionResult = await this._handlePerformAction(page, stepId, actualElement, action, argument); \n \n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (screenshotReasoning: ${screenshotReasoningTime}ms, findBestCandidateElement: ${findBestCandidateTime}ms)`);\n proboLogger.debug('Step execution completed successfully');\n return actionResult;\n\n } catch (error: any) {\n proboLogger.error(`Error in runStep: ${error.message}`);\n proboLogger.error(`Step prompt: \"${stepPrompt}\"`);\n proboLogger.error(`Page URL: ${page.url()}`);\n \n // Re-throw the error to maintain the existing error handling behavior\n throw error;\n }\n }\n \n private async _handleCachedStep(page: Page, stepId: number, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, string|void]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: StepMinimal | null = await this.apiClient.findStepById(stepId)\n if (!result) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n } else if (result.action == '' || !result.action) {\n proboLogger.error(`Step action is missing`);\n throw Error(`Step #${stepId} action is missing`);\n }\n\n if(result.prompt !== stepPrompt) {\n proboLogger.debug(`Step prompt changed, skipping execution and going to start self-healing process...`);\n return [false, undefined];\n }\n\n const actionArgument = argument ?? result.argument;\n proboLogger.log(`Found existing step with ID: ${result.id} going to perform action: ${result.action} with value: ${actionArgument}`);\n \n try {\n // Create ProboPlaywright instance with the page\n const proboPlaywright = new ProboPlaywright(this.timeoutConfig, page);\n \n // Call runStep with the cached action\n const runStepResult = await proboPlaywright.runStep({\n iframeSelector: result.iframe_selector,\n elementSelector: result.element_css_selector,\n action: result.action as PlaywrightAction,\n argument: actionArgument as string,\n }); \n \n return [true, runStepResult];\n } catch (error: any) {\n return [false, undefined];\n }\n\n }\n\n private setupConsoleLogs(page: Page) {\n setupBrowserConsoleLogs(page, this.enableConsoleLogs, proboLogger);\n }\n\n public async getInitialPageState(page: Page): Promise<InitialPageState> {\n const baseScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 baseScreenshot: ${baseScreenshot}`);\n const baseHtmlContent = '';\n return {\n base_screenshot_url: baseScreenshot,\n base_html_content: baseHtmlContent\n };\n \n }\n\n public async findAndHighlightCandidateElements(page: Page, elementTags: string[]): Promise<FindCandidateInput> {\n // 2. CANDIDATE ELEMENTS HANDLING: Find and cache candidates\n \n await this.highlighter.findAndCacheCandidateElements(page, elementTags as ElementTagType[]);\n proboLogger.debug(`🔍 after findAndCacheCandidateElements`);\n \n // 3. CANDIDATE ELEMENTS HANDLING: Highlight candidates and take screenshot\n await this.highlighter.highlightCachedElements(page, 'candidates');\n proboLogger.debug(`🔍 after highlightCachedElements candidates`);\n await page.waitForTimeout(200);\n const candidatesScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 candidatesScreenshot: ${candidatesScreenshot}`);\n \n return {\n candidates_screenshot_url: candidatesScreenshot,\n candidate_elements: await this.highlighter.getCandidatesCached(page) ?? []\n };\n }\n\n\n \n \n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n return this.highlighter.highlightElements(page, elementTags);\n }\n\n public async unhighlightElements(page: Page) {\n return this.highlighter.unhighlightElements(page);\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, element_index: string) {\n return this.highlighter.highlightElement(page, element_css_selector, iframe_selector, element_index);\n }\n\n public async waitForMutationsToSettle(page: Page, timeout?: number, initTimeout?: number) {\n const mutationTimeout = timeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout;\n const mutationInitTimeout = initTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout;\n return waitForMutationsToSettle(page, mutationTimeout, mutationInitTimeout);\n }\n\n public async screenshot(page: Page) { \n proboLogger.debug(`taking screenshot of current page: ${page.url()}`);\n // await page.evaluate(() => document.fonts?.ready.catch(() => {}));\n const screenshot_bytes = await page.screenshot({ fullPage: true, animations: 'disabled' });\n // make an api call to upload the screenshot to cloud\n proboLogger.debug('uploading image data to cloud');\n const screenshot_url = await this.apiClient.uploadScreenshot(screenshot_bytes);\n return screenshot_url;\n \n }\n\n private async _handlePerformAction(page: Page, stepId: number, actualElement: ElementInfo, action: PlaywrightAction, argument: string|boolean|null) {\n const value = argument ?? '';\n const element_css_selector = actualElement.css_selector;\n const iframe_selector = actualElement.iframe_selector;\n const element_index = actualElement.index;\n proboLogger.debug('Handling perform action:', action);\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector, iframe_selector, element_index);\n proboLogger.debug('Highlighted element');\n }\n const pre_action_screenshot_url = await this.screenshot(page);\n const returnValue = await new ProboPlaywright(this.timeoutConfig, page).runStep({\n iframeSelector: iframe_selector,\n elementSelector: element_css_selector,\n action: action,\n argument: value as string,\n highlightTimeout: 0\n });\n\n await this.unhighlightElements(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n await this.apiClient.patchStep(stepId, {\n pre_screenshot: pre_action_screenshot_url,\n post_screenshot: post_action_screenshot_url,\n post_html_content: post_html_content == '' ? null : post_html_content,\n });\n \n return returnValue;\n }\n\n public async askAIHelper(page: Page, question: string, options: AskAIOptions): Promise<ServerResponse> {\n // Set default value for createStep to true if not provided\n const createStep = options?.createStep !== undefined ? options.createStep : true;\n const stepId = options?.stepId;\n \n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}, createStep: ${createStep}`); \n try {\n // Get current page and capture screenshot\n const navTracker = await NavTracker.getInstance(page, {\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\n \n \n proboLogger.debug(`📤 [askAI] Sending chat request to backend`);\n \n // Use ApiClient to send request to backend API \n const serverResponse = await this.apiClient.askAI(question, this.scenarioName, screenshot, this.aiModel);\n proboLogger.debug(`✅ [askAI] Chat response received successfully`);\n // If stepId is provided, update the step\n if (stepId) {\n proboLogger.debug(`🔍 [askAI] Looking for step: ${stepId}`);\n const step = await this.apiClient.findStepById(stepId);\n if (!step) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n }\n\n if (step?.prompt === question) {\n proboLogger.debug(`✅ [askAI] Step already exists with question: ${question}, skipping update`);\n return serverResponse;\n }\n\n try {\n proboLogger.debug(`📝 [askAI] Updating step in backend for question: \"${question}\"`);\n \n // Get HTML content for the step\n const htmlContent = await page.content();\n\n await this.apiClient.patchStep(stepId, {\n stepPrompt: question,\n pre_html_content: htmlContent,\n initial_screenshot: screenshot,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n });\n \n proboLogger.debug(`✅ [askAI] Step updated successfully with ID: ${stepId}`);\n } catch (stepError) {\n proboLogger.error(`❌ [askAI] Error updating step: ${stepError}`);\n // Don't throw here, just log the error and continue\n }\n } else if (createStep) {\n proboLogger.debug(`🔍 [askAI] Creating new step in backend for question: \"${question}\"`);\n const stepId = await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: question,\n initial_screenshot_url: screenshot,\n argument: '',\n use_cache: false,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n is_vanilla_prompt_robust: true,\n target_element_name: 'AI Question',\n });\n proboLogger.debug(`✅ [askAI] Step created successfully with ID: ${stepId}`);\n }\n \n // Return the answer from the result, or the reasoning if no answer\n return serverResponse;\n \n } catch (error) {\n proboLogger.error(`❌ [askAI] Error in askAI: ${error}`);\n throw error;\n }\n }\n}\n\n// Re-export ElementTag for convenience\nexport { ElementTag, ProboLogLevel, Highlighter, ElementTagType, ElementInfo, PlaywrightAction, ProboPlaywright, findClosestVisibleElement, NavTracker };\n\n// Re-export OTP class\nexport { OTP, MailinatorMessage } from './otp';"],"names":["require$$0","retry"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10]}
1
+ {"version":3,"file":"index.js","sources":["../../probo-shared/dist/ElementTag.js","../../probo-shared/dist/Interaction.js","../../probo-shared/dist/PlaywrightAction.js","../../probo-shared/dist/element-utils.js","../../probo-shared/dist/MessageType.js","../../probo-shared/dist/utils.js","../../../node_modules/retry/lib/retry_operation.js","../../../node_modules/retry/lib/retry.js","../../../node_modules/retry/index.js","../../../node_modules/is-network-error/index.js","../../probo-shared/node_modules/p-retry/index.js","../../probo-shared/dist/api-client.js","../../probo-shared/dist/AIModel.js","../../probo-shared/dist/PlaywrightTimeoutConfig.js","../src/probo-logger.ts","../src/actions.ts","../src/highlight.ts","../src/otp.ts","../src/nav-tracker.ts","../../../node_modules/otpauth/dist/otpauth.esm.js","../src/replay-utils.ts","../src/index.ts"],"sourcesContent":["/**\n * Element tag constants for different types of interactive elements\n */\nexport const ElementTag = {\n CLICKABLE: \"CLICKABLE\",\n FILLABLE: \"FILLABLE\",\n SELECTABLE: \"SELECTABLE\",\n NON_INTERACTIVE_ELEMENT: 'NON_INTERACTIVE_ELEMENT',\n};\n//# sourceMappingURL=ElementTag.js.map","export var ApplyAIStatus;\n(function (ApplyAIStatus) {\n ApplyAIStatus[\"PREPARE_START\"] = \"PREPARE_START\";\n ApplyAIStatus[\"PREPARE_SUCCESS\"] = \"PREPARE_SUCCESS\";\n ApplyAIStatus[\"PREPARE_ERROR\"] = \"PREPARE_ERROR\";\n ApplyAIStatus[\"SEND_START\"] = \"SEND_START\";\n ApplyAIStatus[\"SEND_SUCCESS\"] = \"SEND_SUCCESS\";\n ApplyAIStatus[\"SEND_ERROR\"] = \"SEND_ERROR\";\n ApplyAIStatus[\"APPLY_AI_ERROR\"] = \"APPLY_AI_ERROR\";\n ApplyAIStatus[\"APPLY_AI_CANCELLED\"] = \"APPLY_AI_CANCELLED\";\n ApplyAIStatus[\"SUMMARY_COMPLETED\"] = \"SUMMARY_COMPLETED\";\n ApplyAIStatus[\"SUMMARY_ERROR\"] = \"SUMMARY_ERROR\";\n})(ApplyAIStatus || (ApplyAIStatus = {}));\nexport var ReplayStatus;\n(function (ReplayStatus) {\n ReplayStatus[\"REPLAY_START\"] = \"REPLAY_START\";\n ReplayStatus[\"REPLAY_SUCCESS\"] = \"REPLAY_SUCCESS\";\n ReplayStatus[\"REPLAY_ERROR\"] = \"REPLAY_ERROR\";\n ReplayStatus[\"REPLAY_CANCELLED\"] = \"REPLAY_CANCELLED\";\n})(ReplayStatus || (ReplayStatus = {}));\n//# sourceMappingURL=Interaction.js.map","// Action constants\nexport var PlaywrightAction;\n(function (PlaywrightAction) {\n PlaywrightAction[\"VISIT_BASE_URL\"] = \"VISIT_BASE_URL\";\n PlaywrightAction[\"VISIT_URL\"] = \"VISIT_URL\";\n PlaywrightAction[\"CLICK\"] = \"CLICK\";\n PlaywrightAction[\"FILL_IN\"] = \"FILL_IN\";\n PlaywrightAction[\"SELECT_DROPDOWN\"] = \"SELECT_DROPDOWN\";\n PlaywrightAction[\"SELECT_MULTIPLE_DROPDOWN\"] = \"SELECT_MULTIPLE_DROPDOWN\";\n PlaywrightAction[\"CHECK_CHECKBOX\"] = \"CHECK_CHECKBOX\";\n PlaywrightAction[\"SELECT_RADIO\"] = \"SELECT_RADIO\";\n PlaywrightAction[\"TOGGLE_SWITCH\"] = \"TOGGLE_SWITCH\";\n PlaywrightAction[\"SET_SLIDER\"] = \"SET_SLIDER\";\n PlaywrightAction[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"ASSERT_EXACT_VALUE\"] = \"ASSERT_EXACT_VALUE\";\n PlaywrightAction[\"ASSERT_CONTAINS_VALUE\"] = \"ASSERT_CONTAINS_VALUE\";\n PlaywrightAction[\"ASSERT_URL\"] = \"ASSERT_URL\";\n PlaywrightAction[\"SCROLL_TO_ELEMENT\"] = \"SCROLL_TO_ELEMENT\";\n PlaywrightAction[\"EXTRACT_VALUE\"] = \"EXTRACT_VALUE\";\n PlaywrightAction[\"ASK_AI\"] = \"ASK_AI\";\n PlaywrightAction[\"EXECUTE_SCRIPT\"] = \"EXECUTE_SCRIPT\";\n PlaywrightAction[\"UPLOAD_FILES\"] = \"UPLOAD_FILES\";\n PlaywrightAction[\"WAIT_FOR\"] = \"WAIT_FOR\";\n PlaywrightAction[\"WAIT_FOR_OTP\"] = \"WAIT_FOR_OTP\";\n PlaywrightAction[\"GEN_TOTP\"] = \"GEN_TOTP\";\n})(PlaywrightAction || (PlaywrightAction = {}));\n//# sourceMappingURL=PlaywrightAction.js.map","import { ElementTag } from \"./ElementTag.js\";\nimport { PlaywrightAction } from \"./PlaywrightAction.js\";\n/**\n * Resolves an action type to the corresponding ElementTag\n *\n * @param action The action type (CLICK, FILL_IN, SELECT_DROPDOWN)\n * @returns The corresponding ElementTag\n */\nexport function resolveElementTag(action) {\n switch (action) {\n case PlaywrightAction.CLICK:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE];\n case PlaywrightAction.FILL_IN:\n return [ElementTag.FILLABLE];\n case PlaywrightAction.SELECT_DROPDOWN:\n return [ElementTag.SELECTABLE];\n case PlaywrightAction.HOVER:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.WAIT_FOR:\n return [ElementTag.CLICKABLE, ElementTag.FILLABLE, ElementTag.NON_INTERACTIVE_ELEMENT];\n case PlaywrightAction.WAIT_FOR_OTP:\n return [ElementTag.FILLABLE];\n default:\n console.error(`Unknown action: ${action}`);\n throw new Error(`Unknown action: ${action}`);\n }\n}\nexport function getElementText(element) {\n var _a;\n return element.textContent || element.innerText || element.value || ((_a = element.querySelector('input')) === null || _a === void 0 ? void 0 : _a.value) || '';\n}\n/**\n * Checks if any string in the array matches the given regular expression pattern.\n *\n * @param array - Array of strings to test.\n * @param pattern - Regular expression to test against each string.\n * @returns true if at least one string matches the pattern, false otherwise.\n */\nfunction testArray(array, pattern) {\n return array.some(item => pattern.test(item));\n}\n/**\n * Determines if an element is fillable (can accept text input)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isFillableElement(element) {\n var _a;\n if (!element)\n return false;\n // Check if it's an input element\n if (element.tagName === 'INPUT') {\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const isOTPInput = element.getAttribute('data-input-otp') === 'true' ||\n element.getAttribute('autocomplete') === 'one-time-code';\n // if it's an OTP input, don't consider it fillable as it's handled by OTP logic\n if (isOTPInput)\n return false;\n // Include text, password, email, number, tel, url, search, date, datetime-local, month, week, time\n const fillableTypes = [\n 'text', 'password', 'email', 'number', 'tel', 'url', 'search',\n 'date', 'datetime-local', 'month', 'week', 'time'\n ];\n return fillableTypes.includes(inputType);\n }\n // Check if it's a textarea\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n // Check if it's a contenteditable element\n if (element.getAttribute('contenteditable') === 'true') {\n return true;\n }\n return false;\n}\n/**\n * Determines if an element is a selectable dropdown element\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is a select element\n */\nexport function isSelectableElement(element) {\n return element && element.tagName === 'SELECT';\n}\n/**\n * Determines if an element is a non-interactive element (not clickable, fillable, or selectable)\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is non-interactive\n */\nexport function isSliderElement(element) {\n if (!element)\n return false;\n // check for <input type=\"range\">\n if (element.tagName === 'INPUT' && element.getAttribute('type') === 'range')\n return true;\n // check for role and additional attributes\n const sliderAttributes = ['aria-valuenow', 'aria-valuemin', 'aria-valuemax'];\n if (element.getAttribute('role') === 'slider' || sliderAttributes.some(attr => element.hasAttribute(attr)))\n return true;\n // check for class names\n const classNames = Array.from(element.classList);\n const sliderClassPattern = /^MuiSlider|mat-slider|mdl-slider|ui-slider|carousel/;\n if (testArray(classNames, sliderClassPattern))\n return true;\n return false;\n}\n/**\n * Determines if an element is an <input type=\"file\"> element.\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is an input file element\n */\nexport function isInputFileElement(element) {\n return element && element.tagName === 'INPUT' && element.getAttribute('type') === 'file';\n}\n/**\n * Determines if an element is clickable\n *\n * @param element The DOM element to check\n * @returns boolean indicating if the element is fillable\n */\nexport function isClickableElement(element) {\n if (!element)\n return false;\n let depth = 0;\n while (depth < 5 && element && element.nodeType === Node.ELEMENT_NODE) {\n if (isClickableElementHelper(element) === IsClickable.YES)\n return true;\n if (isClickableElementHelper(element) === IsClickable.NO)\n return false;\n // if maybe, continue searching up to 5 levels up the DOM tree\n element = element.parentNode;\n depth++;\n }\n return false;\n}\n// clickable element detection result\nvar IsClickable;\n(function (IsClickable) {\n IsClickable[\"YES\"] = \"YES\";\n IsClickable[\"NO\"] = \"NO\";\n IsClickable[\"MAYBE\"] = \"MAYBE\";\n})(IsClickable || (IsClickable = {}));\nfunction isClickableElementHelper(element) {\n var _a, _b;\n if (!element)\n return IsClickable.NO;\n //check for tag name\n const tagName = element.tagName.toLowerCase();\n const clickableTags = [\n 'a', 'button',\n ];\n if (clickableTags.includes(tagName))\n return IsClickable.YES;\n //check for clickable <input>\n const inputType = (_a = element.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n const clickableTypes = [\n 'button', 'submit', 'reset', 'checkbox', 'radio',\n ];\n const ariaAutocompleteValues = [\n 'list', 'both',\n ];\n if (tagName === 'input') {\n if (clickableTypes.includes(inputType) || ariaAutocompleteValues.includes((_b = element.getAttribute('aria-autocomplete')) !== null && _b !== void 0 ? _b : ''))\n return IsClickable.YES;\n if (['date', 'number', 'range'].includes(inputType))\n return IsClickable.NO; //don't record the click as a change event will be generated for elements that generate an input change event\n }\n // check for cursor type\n const style = window.getComputedStyle(element);\n if (style.cursor === 'pointer')\n return IsClickable.YES;\n // check for attributes\n const clickableRoles = [\n 'button', 'combobox', 'listbox', 'dropdown', 'option', 'menu', 'menuitem',\n 'navigation', 'checkbox', 'switch', 'toggle', 'slider', 'textbox', 'listitem',\n 'presentation',\n ];\n const ariaPopupValues = [\n 'true', 'listbox', 'menu',\n ];\n if (element.hasAttribute('onclick') ||\n clickableRoles.includes(element.getAttribute('role') || '') ||\n ariaPopupValues.includes(element.getAttribute('aria-haspopup') || ''))\n return IsClickable.YES;\n // check for tabindex (means element is focusable and therefore clickable)\n if (parseInt(element.getAttribute('tabindex') || '-1') >= 0)\n return IsClickable.YES;\n // extract class names\n const classNames = Array.from(element.classList);\n // check for checkbox/radio-like class name - TODO: check if can be removed\n const checkboxPattern = /checkbox|switch|toggle|slider/i;\n if (testArray(classNames, checkboxPattern))\n return IsClickable.YES;\n // check for Material UI class names\n const muiClickableClassPattern = /MuiButton|MuiIconButton|MuiChip|MuiMenuItem|MuiListItem|MuiInputBase|MuiOutlinedInput|MuiSelect|MuiAutocomplete|MuiToggleButton|MuiBackdrop-root|MuiBackdrop-invisible/;\n if (testArray(classNames, muiClickableClassPattern))\n return IsClickable.YES;\n // check for SalesForce class names\n const sfClassPattern = /slds-button|slds-dropdown|slds-combobox|slds-picklist|slds-tabs|slds-pill|slds-action|slds-row-action|slds-context-bar|slds-input|slds-rich-text-area|slds-radio|slds-checkbox|slds-toggle|slds-link|slds-accordion|slds-tree/;\n if (testArray(classNames, sfClassPattern))\n return IsClickable.YES;\n // check for chart dots\n const chartClickableClassPattern = /recharts-dot/;\n if (testArray(classNames, chartClickableClassPattern))\n return IsClickable.YES;\n // check for React component classes\n const reactClickableClassPattern = /react-select|ant-select|rc-select|react-dropdown|react-autocomplete|react-datepicker|react-modal|react-tooltip|react-popover|react-menu|react-tabs|react-accordion|react-collapse|react-toggle|react-switch|react-checkbox|react-radio|react-button|react-link|react-card|react-list-item|react-menu-item|react-option|react-tab|react-panel|react-drawer|react-sidebar|react-nav|react-breadcrumb|react-pagination|react-stepper|react-wizard|react-carousel|react-slider|react-range|react-progress|react-badge|react-chip|react-tag|react-avatar|react-icon|react-fab|react-speed-dial|react-floating|react-sticky|react-affix|react-backdrop|react-overlay|react-portal|react-transition|react-animate|react-spring|react-framer|react-gesture|react-drag|react-drop|react-sortable|react-resizable|react-split|react-grid|react-table|react-datagrid|react-tree|react-treeview|react-file|react-upload|react-cropper|react-image|react-gallery|react-lightbox|react-player|react-video|react-audio|react-chart|react-graph|react-diagram|react-flow|react-d3|react-plotly|react-vega|react-vis|react-nivo|react-recharts|react-victory|react-echarts|react-highcharts|react-google-charts|react-fusioncharts|react-apexcharts|react-chartjs|react-chartkick|react-sparklines|react-trend|react-smooth|react-animated|react-lottie|react-spring|react-framer-motion|react-pose|react-motion|react-transition-group|react-router|react-navigation/i;\n if (testArray(classNames, reactClickableClassPattern))\n return IsClickable.YES;\n //check for cloudinary class names\n const cloudinaryClickableClassPattern = /cld-combobox|cld-upload-button|cld-controls|cld-player|cld-tab|cld-menu-item|cld-close|cld-play|cld-pause|cld-fullscreen|cld-browse|cld-cancel|cld-retry/;\n if (testArray(classNames, cloudinaryClickableClassPattern))\n return IsClickable.YES;\n return IsClickable.MAYBE;\n}\nexport function isTextInputElement(element) {\n return (element.tagName === 'INPUT' && element.getAttribute('type') !== 'checkbox' && element.getAttribute('type') !== 'radio') ||\n element.tagName === 'TEXTAREA' ||\n element.getAttribute('contenteditable') === 'true' ||\n element.getAttribute('role') === 'textbox';\n}\nexport function getParentNode(element) {\n if (!element || element.nodeType !== Node.ELEMENT_NODE)\n return null;\n let parent = null;\n // SF is using slots and shadow DOM heavily\n // However, there might be slots in the light DOM which shouldn't be traversed\n if (element.assignedSlot && element.getRootNode() instanceof ShadowRoot)\n parent = element.assignedSlot;\n else\n parent = element.parentNode;\n // Check if we're at a shadow root\n if (parent && parent.nodeType !== Node.ELEMENT_NODE && parent.getRootNode() instanceof ShadowRoot)\n parent = parent.getRootNode().host;\n return parent;\n}\nexport function getElementDepth(element) {\n let depth = 0;\n let currentElement = element;\n while ((currentElement === null || currentElement === void 0 ? void 0 : currentElement.nodeType) === Node.ELEMENT_NODE) {\n depth++;\n currentElement = getParentNode(currentElement);\n }\n return depth;\n}\n//# sourceMappingURL=element-utils.js.map","// WebSocketsMessageType enum for WebSocket and event message types shared across the app\nexport var WebSocketsMessageType;\n(function (WebSocketsMessageType) {\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_START\"] = \"INTERACTION_APPLY_AI_PREPARE_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_SUCCESS\"] = \"INTERACTION_APPLY_AI_PREPARE_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_PREPARE_ERROR\"] = \"INTERACTION_APPLY_AI_PREPARE_ERROR\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_START\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_START\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\"] = \"INTERACTION_APPLY_AI_SEND_TO_LLM_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_START\"] = \"INTERACTION_REPLAY_START\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_SUCCESS\"] = \"INTERACTION_REPLAY_SUCCESS\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_ERROR\"] = \"INTERACTION_REPLAY_ERROR\";\n WebSocketsMessageType[\"INTERACTION_REPLAY_CANCELLED\"] = \"INTERACTION_REPLAY_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_CANCELLED\"] = \"INTERACTION_APPLY_AI_CANCELLED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_ERROR\"] = \"INTERACTION_APPLY_AI_ERROR\";\n WebSocketsMessageType[\"INTERACTION_STEP_CREATED\"] = \"INTERACTION_STEP_CREATED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\"] = \"INTERACTION_APPLY_AI_SUMMARY_COMPLETED\";\n WebSocketsMessageType[\"INTERACTION_APPLY_AI_SUMMARY_ERROR\"] = \"INTERACTION_APPLY_AI_SUMMARY_ERROR\";\n WebSocketsMessageType[\"OTP_RETRIEVED\"] = \"OTP_RETRIEVED\";\n})(WebSocketsMessageType || (WebSocketsMessageType = {}));\n//# sourceMappingURL=MessageType.js.map","import { PlaywrightAction } from './PlaywrightAction.js';\n/**\n * Logging levels for Probo\n */\nexport var ProboLogLevel;\n(function (ProboLogLevel) {\n ProboLogLevel[\"DEBUG\"] = \"DEBUG\";\n ProboLogLevel[\"INFO\"] = \"INFO\";\n ProboLogLevel[\"LOG\"] = \"LOG\";\n ProboLogLevel[\"WARN\"] = \"WARN\";\n ProboLogLevel[\"ERROR\"] = \"ERROR\";\n})(ProboLogLevel || (ProboLogLevel = {}));\nconst logLevelOrder = {\n [ProboLogLevel.DEBUG]: 0,\n [ProboLogLevel.INFO]: 1,\n [ProboLogLevel.LOG]: 2,\n [ProboLogLevel.WARN]: 3,\n [ProboLogLevel.ERROR]: 4,\n};\nexport class ProboLogger {\n constructor(prefix, level = ProboLogLevel.INFO) {\n this.prefix = prefix;\n this.level = level;\n }\n setLogLevel(level) {\n console.log(`[${this.prefix}] Setting log level to: ${level} (was: ${this.level})`);\n this.level = level;\n }\n shouldLog(level) {\n return logLevelOrder[level] >= logLevelOrder[this.level];\n }\n preamble(level) {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n return `[${hours}:${minutes}:${seconds}.${milliseconds}] [${this.prefix}] [${level}]`;\n }\n debug(...args) { if (this.shouldLog(ProboLogLevel.DEBUG))\n console.debug(this.preamble(ProboLogLevel.DEBUG), ...args); }\n info(...args) { if (this.shouldLog(ProboLogLevel.INFO))\n console.info(this.preamble(ProboLogLevel.INFO), ...args); }\n log(...args) { if (this.shouldLog(ProboLogLevel.LOG))\n console.log(this.preamble(ProboLogLevel.LOG), ...args); }\n warn(...args) { if (this.shouldLog(ProboLogLevel.WARN))\n console.warn(this.preamble(ProboLogLevel.WARN), ...args); }\n error(...args) { if (this.shouldLog(ProboLogLevel.ERROR))\n console.error(this.preamble(ProboLogLevel.ERROR), ...args); }\n}\n// Element cleaner logging\n// const elementLogger = new ProboLogger('element-cleaner');\n/**\n * Cleans and returns a minimal element info structure.\n */\n//TODO: is this needed?\n/* export function cleanupElementInfo(elementInfo: ElementInfo): CleanElementInfo {\n elementLogger.debug(\n `Cleaning up element info for ${elementInfo.tag} at index ${elementInfo.index}`\n );\n const depth = elementInfo.depth ?? elementInfo.getDepth();\n const cleanEl = {\n index: elementInfo.index,\n tag: elementInfo.tag,\n type: elementInfo.type,\n text: elementInfo.text,\n html: elementInfo.html,\n xpath: elementInfo.xpath,\n css_selector: elementInfo.css_selector,\n iframe_selector: elementInfo.iframe_selector,\n bounding_box: elementInfo.bounding_box,\n depth\n };\n elementLogger.debug(`Cleaned element: ${JSON.stringify(cleanEl)}`);\n return cleanEl;\n} */\n/**\n * Cleans highlighted elements in an instruction payload.\n */\n/* export function cleanupInstructionElements(instruction: any): any {\n if (!instruction?.result?.highlighted_elements) {\n elementLogger.debug('No highlighted elements to clean');\n return instruction;\n }\n elementLogger.debug(\n `Cleaning ${instruction.result.highlighted_elements.length} highlighted elements`\n );\n const cleaned = {\n ...instruction,\n result: {\n ...instruction.result,\n highlighted_elements: instruction.result.highlighted_elements.map(\n (el: ElementInfo) => cleanupElementInfo(el)\n )\n }\n };\n elementLogger.debug('Instruction cleaning completed');\n return cleaned;\n} */\n// Determine whether an interaction can return a value\nexport const hasReturnValue = (i) => {\n return [\n PlaywrightAction.EXTRACT_VALUE,\n PlaywrightAction.ASK_AI,\n PlaywrightAction.EXECUTE_SCRIPT\n ].includes(i.action);\n};\nexport const getReturnValueParameterName = (i) => {\n switch (i.action) {\n case PlaywrightAction.EXTRACT_VALUE:\n case PlaywrightAction.EXECUTE_SCRIPT:\n return i.parameterName;\n case PlaywrightAction.ASK_AI:\n return i.parameterName.replace(/^assert_/, '');\n default:\n console.error(`Action ${i.action} has no return value`);\n return '';\n }\n};\n// Determine whether an interaction can be parameterized\nexport const isParameterizable = (i) => {\n const parameterizableActions = [\n PlaywrightAction.FILL_IN,\n PlaywrightAction.SELECT_DROPDOWN,\n PlaywrightAction.ASSERT_CONTAINS_VALUE,\n PlaywrightAction.ASSERT_EXACT_VALUE,\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.UPLOAD_FILES,\n PlaywrightAction.WAIT_FOR,\n PlaywrightAction.GEN_TOTP\n ];\n return parameterizableActions.includes(i.action) || (i.action === PlaywrightAction.ASK_AI && i.argument);\n};\n// Determine whether an interaction is AI-related\nexport const isAI = (i) => {\n var _a, _b, _c, _d, _e, _f;\n return !['TYPE_KEYS', 'VISIT_URL', 'EXECUTE_SCRIPT'].includes(i.action) &&\n (i.action === PlaywrightAction.ASK_AI ||\n (((_b = (_a = i.serverResponse) === null || _a === void 0 ? void 0 : _a.result) === null || _b === void 0 ? void 0 : _b.prompt) && (((_d = (_c = i.serverResponse) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.error) === \"\" || !((_f = (_e = i.serverResponse) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.error))));\n};\n// Determine whether an interaction is fortified (doesn't need AI processing)\nexport const isFortifiedInteraction = (i) => {\n return [\n PlaywrightAction.VISIT_URL,\n PlaywrightAction.ASSERT_URL,\n PlaywrightAction.TYPE_KEYS,\n PlaywrightAction.EXECUTE_SCRIPT,\n PlaywrightAction.ASK_AI\n ].includes(i.action);\n};\nexport function singleQuoteString(str) {\n if (!str)\n return '';\n return `'${str.replace(/'/g, \"\\\\'\")}'`;\n}\nexport function doubleQuoteString(str) {\n if (!str)\n return '';\n return `\"${str.replace(/\"/g, '\\\\\"')}\"`;\n}\n// Normalize a parameter name to a legal JS identifier\nexport function normalizeParameterName(name) {\n // 0. Remove leading/trailing spaces\n // 1. Replace invalid characters with underscores\n // 2. collapse multiple underscores\n // 3. If starts with a digit, prepend '_'\n name = name.trim();\n name = name.replace(/[^a-zA-Z0-9_$]/g, '_');\n name = name.replace(/_+/g, '_');\n if (/^[0-9]/.test(name)) {\n name = '_' + name;\n }\n // Ensure we never return an empty string or just underscores\n if (!name || name === '_' || /^_+$/.test(name)) {\n name = 'param_' + Date.now();\n }\n return name;\n}\nexport function matchRegex(str, regex) {\n //parse the regex string\n const match = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (!match) // normal string\n return str.includes(regex);\n else { // regex string\n const pattern = match[1].replace(/\\\\/g, '\\\\');\n const flags = match[2];\n console.log(`Matching ${str} against ${pattern} with flags ${flags}`);\n return new RegExp(pattern, flags).test(str);\n }\n}\n/**\n * Truncates a URL by replacing query parameters (everything after ?) with three dots.\n * @param url The URL to truncate\n * @returns The truncated URL with three dots replacing query parameters\n */\nexport function truncateUrl(url) {\n if (!url)\n return '';\n const questionMarkIndex = url.indexOf('?');\n if (questionMarkIndex === -1) {\n // No query parameters found, return the original URL\n return url;\n }\n const baseUrl = url.substring(0, questionMarkIndex);\n return `${baseUrl}...`;\n}\n/**\n * Sets up browser console logging on a Playwright page.\n * This function removes all existing console listeners and optionally adds a new one.\n * @param page The Playwright page instance\n * @param enableConsoleLogs Whether to enable console logging\n * @param logger Optional logger instance to use for output (defaults to console.log)\n */\nexport const setupBrowserConsoleLogs = (page, enableConsoleLogs, logger = null) => {\n // Always remove all existing console listeners first\n page.removeAllListeners('console');\n // Always add a listener, but filter output based on enableConsoleLogs\n const listener = (msg) => {\n if (enableConsoleLogs) {\n const type = msg.type();\n const text = msg.text();\n if (logger) {\n logger.log(`[Browser-${type}]: ${text}`);\n }\n else {\n console.log(`[Browser-${type}]: ${text}`);\n }\n }\n // If disabled, do nothing (silently ignore the console message)\n };\n page.on('console', listener);\n};\n/**\n * Safely interpolates template literals in a string using the provided context.\n * Similar to JavaScript template literals, but executed safely at runtime.\n * Recursively interpolates until no more template literals remain.\n *\n * This function only interpolates the argument string itself, not the entire context.\n * When a template literal resolves to another string containing template literals,\n * it recursively interpolates that result.\n *\n * @param str The string containing template literal syntax (e.g., \"Hello ${name}\")\n * @param context The context object containing variables for interpolation\n * @param maxDepth Maximum recursion depth to prevent infinite loops (default: 10)\n * @returns The interpolated string, or the original string if no interpolation is needed\n */\nexport function interpolateTemplate(str, context, maxDepth = 10) {\n if (typeof str !== 'string' || !str.includes('${')) {\n return str;\n }\n if (maxDepth <= 0) {\n console.warn('⚠️ Maximum interpolation depth reached, returning partially interpolated string');\n return str;\n }\n try {\n // Escape backticks in the template to prevent template literal injection\n const escapedTemplate = str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`');\n // Create a safe template execution function\n const compiled = new Function('ctx', `\n const {${Object.keys(context).join(',')}} = ctx;\n return \\`${escapedTemplate}\\`;\n `);\n const rendered = compiled(context);\n // If the result still contains template literals, recursively interpolate\n // This handles cases like: Employee_Name = '${firstName + middleName}' and then assert_1 = '${Employee_Name}'\n if (rendered.includes('${') && rendered !== str) {\n return interpolateTemplate(rendered, context, maxDepth - 1);\n }\n return rendered;\n }\n catch (e) {\n console.warn('⚠️ Template evaluation failed, using original string:', e);\n return str;\n }\n}\n//# sourceMappingURL=utils.js.map","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {...options};\n\t\toptions.onFailedAttempt ??= () => {};\n\t\toptions.shouldRetry ??= () => true;\n\t\toptions.retries ??= 10;\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","import pRetry from 'p-retry';\nimport { ProboLogger } from './utils.js';\nexport const apiLogger = new ProboLogger('apiclient');\nexport class ApiError extends Error {\n constructor(status, message, data) {\n super(message);\n this.status = status;\n this.data = data;\n this.name = 'ApiError';\n // Remove stack trace for cleaner error messages\n this.stack = undefined;\n }\n toString() {\n return `${this.message} (Status: ${this.status})`;\n }\n}\nexport class ApiClient {\n constructor(apiUrl, token, maxRetries = 3, initialBackoff = 1000) {\n this.apiUrl = apiUrl;\n this.token = token;\n this.maxRetries = maxRetries;\n this.initialBackoff = initialBackoff;\n }\n /**\n * Determines if an error should be retried.\n * Only retries on timeout and network errors, not on client/server errors.\n */\n isRetryableError(error) {\n var _a, _b, _c, _d, _e;\n // Network/connection errors should be retried\n if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))\n return true;\n if ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('network'))\n return true;\n if ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('ETIMEDOUT'))\n return true;\n if ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('ECONNRESET'))\n return true;\n if ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('ECONNREFUSED'))\n return true;\n if (error.code === 'ETIMEDOUT')\n return true;\n if (error.code === 'ECONNRESET')\n return true;\n if (error.code === 'ECONNREFUSED')\n return true;\n // If it's an ApiError, check the status code\n if (error instanceof ApiError) {\n // Retry on timeout-related status codes\n if (error.status === 408)\n return true; // Request Timeout\n if (error.status === 502)\n return true; // Bad Gateway (temporary)\n if (error.status === 503)\n return true; // Service Unavailable (temporary)\n if (error.status === 504)\n return true; // Gateway Timeout\n if (error.status === 0)\n return true; // Network error\n // Don't retry on client errors (4xx) or server errors (5xx)\n // These indicate problems that won't be fixed by retrying\n return false;\n }\n // For unknown errors, don't retry to avoid masking issues\n return false;\n }\n /**\n * Generic helper to wrap API requests with retry logic and consistent error handling.\n */\n async requestWithRetry(operationName, operation) {\n return pRetry(operation, {\n retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n shouldRetry: (error) => {\n const shouldRetry = this.isRetryableError(error);\n if (!shouldRetry) {\n apiLogger.error(`${operationName} failed with non-retryable error: ${error.message || error}`);\n }\n return shouldRetry;\n },\n onFailedAttempt: error => {\n apiLogger.warn(`${operationName} failed (retryable), attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}. Error: ${error.message}`);\n }\n });\n }\n async handleResponse(response) {\n var _a;\n try {\n const data = await response.json();\n const error = `${(data === null || data === void 0 ? void 0 : data.error) || 'Unknown error'}`;\n apiLogger.debug(`API response: ${JSON.stringify(data)}`);\n if (!response.ok) {\n switch (response.status) {\n case 401:\n throw new ApiError(401, `Unauthorized - Invalid or missing authentication token: ${error}`);\n case 403:\n throw new ApiError(403, `Forbidden - You do not have permission to perform this action: ${error}`);\n case 400:\n throw new ApiError(400, `Bad Request: ${error}`);\n case 404:\n throw new ApiError(404, `Not Found: ${error}`);\n case 500:\n throw new ApiError(500, `Internal Server Error: ${error}`);\n default:\n throw new ApiError(response.status, `API Error: ${error}`);\n }\n }\n return data;\n }\n catch (error) {\n // Only throw the original error if it's not a network error\n if (!((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('fetch failed'))) {\n throw error;\n }\n throw new ApiError(0, 'Network error: fetch failed');\n }\n }\n getHeaders() {\n const headers = {\n 'Content-Type': 'application/json',\n };\n // Always include token in headers now that we have a default\n headers['Authorization'] = `Token ${this.token}`;\n return headers;\n }\n async createStep(options) {\n apiLogger.debug('creating step ', options.stepPrompt);\n return this.requestWithRetry('createStep', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n step_id: options.stepIdFromServer,\n scenario_name: options.scenarioName,\n step_prompt: options.stepPrompt,\n argument: options.argument,\n initial_screenshot: options.initial_screenshot_url,\n initial_html_content: options.initial_html_content,\n use_cache: options.use_cache,\n url: options.url,\n action: options.action,\n vanilla_prompt: options.vanilla_prompt,\n is_vanilla_prompt_robust: options.is_vanilla_prompt_robust,\n target_element_name: options.target_element_name,\n position: options.position\n }),\n });\n const data = await this.handleResponse(response);\n return data.step.id;\n });\n }\n async patchStep(stepId, fields) {\n // Use PATCH /steps/:id/ endpoint with partial=true\n apiLogger.debug(`patching step #${stepId} with fields:`, Object.keys(fields));\n return this.requestWithRetry('patchStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'PATCH',\n headers: this.getHeaders(),\n body: JSON.stringify(fields)\n });\n const data = await this.handleResponse(response);\n return;\n });\n }\n /* async resolveNextInstruction(stepId: string, instruction: Instruction | null, aiModel?: string) {\n apiLogger.debug(`resolving next instruction: ${instruction}`);\n return this.requestWithRetry('resolveNextInstruction', async () => {\n apiLogger.debug(`API client: Resolving next instruction for step ${stepId}`);\n \n const cleanInstruction = cleanupInstructionElements(instruction);\n \n const response = await fetch(`${this.apiUrl}/step-runners/${stepId}/run/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n executed_instruction: cleanInstruction,\n ai_model: aiModel\n }),\n });\n \n const data = await this.handleResponse(response);\n return data.instruction;\n });\n } */\n async uploadScreenshot(screenshot_bytes) {\n return this.requestWithRetry('uploadScreenshot', async () => {\n const response = await fetch(`${this.apiUrl}/upload-screenshots/`, {\n method: 'POST',\n headers: {\n 'Authorization': `Token ${this.token}`\n },\n body: screenshot_bytes,\n });\n const data = await this.handleResponse(response);\n return data.screenshot_url;\n });\n }\n async findStepById(stepId) {\n apiLogger.debug(`Finding step by id: ${stepId}`);\n return this.requestWithRetry('findStepById', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data.step;\n });\n }\n async findStepByPrompt(prompt, scenarioName, url = '') {\n apiLogger.debug(`Finding step by prompt: ${prompt} and scenario: ${scenarioName}`);\n return this.requestWithRetry('findStepByPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/step-runners/find-step-by-prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n scenario_name: scenarioName,\n url: url\n }),\n });\n try {\n const data = await this.handleResponse(response);\n return {\n step: data.step,\n total_count: data.total_count\n };\n }\n catch (error) {\n // If we get a 404, the step doesn't exist\n if (error instanceof ApiError && error.status === 404) {\n return null;\n }\n // For any other error, rethrow\n throw error;\n }\n });\n }\n async resetStep(stepId) {\n return this.requestWithRetry('resetStep', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/reset/`, {\n method: 'POST',\n headers: this.getHeaders(),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async interactionToStep(scenarioName, interaction, position = -1) {\n // Use POST /interaction-to-step/ endpoint\n // Backend will create new step or update existing one based on interaction_id\n apiLogger.debug(`converting interaction #${interaction.interactionId} to step`);\n return this.requestWithRetry('interactionToStep', async () => {\n var _a, _b, _c, _d;\n const response = await fetch(`${this.apiUrl}/interaction-to-step/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n scenario_name: scenarioName,\n position,\n interaction_id: interaction.interactionId,\n action: interaction.action,\n argument: interaction.argument,\n element_css_selector: ((_a = interaction.elementInfo) === null || _a === void 0 ? void 0 : _a.css_selector) || '',\n iframe_selector: ((_b = interaction.elementInfo) === null || _b === void 0 ? void 0 : _b.iframe_selector) || '',\n smart_selector: ((_c = interaction.elementInfo) === null || _c === void 0 ? void 0 : _c.smart_selector) || null,\n smart_iframe_selector: ((_d = interaction.elementInfo) === null || _d === void 0 ? void 0 : _d.smart_iframe_selector) || null,\n prompt: interaction.nativeDescription,\n vanilla_prompt: interaction.nativeDescription,\n is_vanilla_prompt_robust: interaction.isNativeDescriptionElaborate || false,\n target_element_name: interaction.nativeName,\n target_element_info: interaction.elementInfo,\n url: interaction.url,\n })\n });\n const data = await this.handleResponse(response);\n return [data.result.step_id, data.result.matched_step, data.scenario_id];\n });\n }\n async actionToPrompt(action2promptInput, aiModel) {\n // Use POST /action-to-prompt/ endpoint\n apiLogger.debug(`running action2prompt for step #${action2promptInput.step_id}`);\n return this.requestWithRetry('actionToPrompt', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${action2promptInput.step_id}/action_to_prompt/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ ...action2promptInput, 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async summarizeScenario(scenarioId, aiModel) {\n return this.requestWithRetry('summarizeScenario', async () => {\n const response = await fetch(`${this.apiUrl}/api/scenarios/${scenarioId}/summary`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({ 'model': aiModel })\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async askAI(question, scenarioName, screenshot, aiModel) {\n apiLogger.debug(`Asking AI question: \"${question}\", scenarioName: ${scenarioName}`);\n apiLogger.debug(`headers: ${JSON.stringify(this.getHeaders())}`);\n return this.requestWithRetry('askAI', async () => {\n const response = await fetch(`${this.apiUrl}/api/ask-ai/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n question: question,\n scenario_name: scenarioName,\n screenshot: screenshot,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data;\n });\n }\n async screenshotReasoning(stepId, prompt, aiModel) {\n apiLogger.debug(`Performing screenshot reasoning for step: ${stepId}`);\n return this.requestWithRetry('screenshotReasoning', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/screenshot_reasoning/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n prompt: prompt,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.action;\n });\n }\n async findBestCandidateElement(stepId, candidatesScreenshotUrl, candidateElements, aiModel) {\n apiLogger.debug(`Finding best candidate element for step: ${stepId}`);\n return this.requestWithRetry('findBestCandidateElement', async () => {\n const response = await fetch(`${this.apiUrl}/steps/${stepId}/find_best_candidate_element/`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: JSON.stringify({\n screenshot_url: candidatesScreenshotUrl,\n candidate_elements: candidateElements,\n model: aiModel\n }),\n });\n const data = await this.handleResponse(response);\n return data.index;\n });\n }\n} /* ApiClient */\n//# sourceMappingURL=api-client.js.map","/**\n * Available AI models for LLM operations\n */\nexport var AIModel;\n(function (AIModel) {\n AIModel[\"AZURE_GPT4\"] = \"azure-gpt4\";\n AIModel[\"AZURE_GPT4_MINI\"] = \"azure-gpt4-mini\";\n AIModel[\"GEMINI_1_5_FLASH\"] = \"gemini-1.5-flash\";\n AIModel[\"GEMINI_2_5_FLASH\"] = \"gemini-2.5-flash\";\n AIModel[\"GPT4\"] = \"gpt4\";\n AIModel[\"GPT4_MINI\"] = \"gpt4-mini\";\n AIModel[\"CLAUDE_3_5\"] = \"claude-3.5\";\n AIModel[\"CLAUDE_SONNET_4_5\"] = \"claude-sonnet-4.5\";\n AIModel[\"CLAUDE_HAIKU_4_5\"] = \"claude-haiku-4.5\";\n AIModel[\"CLAUDE_OPUS_4_1\"] = \"claude-opus-4.1\";\n AIModel[\"GROK_2\"] = \"grok-2\";\n AIModel[\"LLAMA_4_SCOUT\"] = \"llama-4-scout\";\n AIModel[\"DEEPSEEK_V3\"] = \"deepseek-v3\";\n})(AIModel || (AIModel = {}));\n//# sourceMappingURL=AIModel.js.map","export const DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG = {\n highlightTimeout: 500,\n playwrightActionTimeout: 5000,\n playwrightNavigationTimeout: 10000,\n playwrightLocatorTimeout: 15000,\n // mutation observer\n mutationsTimeout: 500,\n mutationsInitTimeout: 1000,\n // wait for navigation\n waitForNavigationInitialTimeout: 2000,\n waitForNavigationNavigationTimeout: 7000,\n waitForNavigationGlobalTimeout: 15000,\n // wait for stability\n waitForStabilityQuietTimeout: 2000,\n waitForStabilityInitialDelay: 500,\n waitForStabilityGlobalTimeout: 15000,\n waitForStabilityVerbose: false,\n};\n//# sourceMappingURL=PlaywrightTimeoutConfig.js.map","import { ProboLogger } from \"@probolabs/probo-shared\";\n\n// Default logger instance\nexport const proboLogger = new ProboLogger('proboLib');\n","import { Page, Frame, Locator } from 'playwright';\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, PlaywrightAction, matchRegex } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\nexport const SPECIAL_KEYS = [\n 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete',\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n 'Home', 'End', 'PageUp', 'PageDown',\n 'Insert', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12',\n 'Shift', 'Control', 'Alt', 'Meta',\n 'CapsLock', 'NumLock', 'ScrollLock',\n 'Pause', 'PrintScreen', 'ContextMenu',\n 'AudioVolumeUp', 'AudioVolumeDown', 'AudioVolumeMute',\n 'MediaTrackNext', 'MediaTrackPrevious', 'MediaStop', 'MediaPlayPause',\n 'BrowserBack', 'BrowserForward', 'BrowserRefresh', 'BrowserFavorites'\n] as const;\n\n/**\n * Handle potential navigation exactly like Python's handle_potential_navigation\n */\nexport async function handlePotentialNavigation_deprecated(\n page: Page,\n locator: Locator | null = null,\n value: string | null = null,\n options: {\n initialTimeout?: number;\n navigationTimeout?: number;\n globalTimeout?: number;\n } = {}\n): Promise<boolean> {\n const {\n initialTimeout,\n navigationTimeout,\n globalTimeout,\n } = options;\n \n const finalInitialTimeout = initialTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationInitialTimeout!;\n const finalNavigationTimeout = navigationTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationNavigationTimeout!;\n const finalGlobalTimeout = globalTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationGlobalTimeout!;\n\n const startTime = Date.now();\n let navigationCount = 0;\n let lastNavTime: number | null = null;\n\n const onFrameNav = (frame: Frame) => {\n if (frame === page.mainFrame()) {\n navigationCount++;\n lastNavTime = Date.now();\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: navigation detected (count=${navigationCount})`\n );\n }\n };\n\n proboLogger.debug(`DEBUG_NAV[0.000s]: Starting navigation detection`);\n page.on(\"framenavigated\", onFrameNav);\n\n try {\n if (locator) {\n proboLogger.debug(`DEBUG_NAV: Executing click(${value})`);\n await clickAtPosition(page, locator, value as ClickPosition | null);\n }\n\n // wait for any initial nav to fire\n await page.waitForTimeout(finalInitialTimeout);\n proboLogger.debug(\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: After initial wait, count=${navigationCount}`\n );\n\n if (navigationCount > 0) {\n // loop until either per-nav or global timeout\n while (true) {\n const now = Date.now();\n if (\n lastNavTime !== null &&\n now - lastNavTime > finalNavigationTimeout\n ) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: per‐navigation timeout reached`\n );\n break;\n }\n if (now - startTime > finalGlobalTimeout) {\n proboLogger.debug(\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: overall timeout reached`\n );\n break;\n }\n await page.waitForTimeout(500);\n }\n\n // now wait for load + idle\n proboLogger.debug(`DEBUG_NAV: waiting for load state`);\n await page.waitForLoadState(\"load\", { timeout: finalGlobalTimeout });\n\n proboLogger.debug(`DEBUG_NAV: waiting for networkidle`);\n try {\n // shorter idle‐wait so we don't hang the full globalTimeout here\n await page.waitForLoadState(\"networkidle\", {\n timeout: finalNavigationTimeout,\n });\n } catch {\n proboLogger.debug(\n `DEBUG_NAV: networkidle not reached in ${finalNavigationTimeout}ms, proceeding anyway`\n );\n }\n\n await scrollToBottomRight(page);\n proboLogger.debug(`DEBUG_NAV: done`);\n return true;\n }\n\n proboLogger.debug(`DEBUG_NAV: no navigation detected`);\n return false;\n } finally {\n page.removeListener(\"framenavigated\", onFrameNav);\n proboLogger.debug(`DEBUG_NAV: listener removed`);\n }\n}\n\n\n/**\n * Scroll entire page to bottom-right, triggering lazy-loaded content\n */\nexport async function scrollToBottomRight(page: Page): Promise<void> {\n const startTime = performance.now();\n proboLogger.debug(`Starting scroll to bottom-right`);\n\n let lastHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n let lastWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n\n let smoothingSteps = 0;\n while (true) { \n const initY = await page.evaluate(() => window.scrollY);\n const initX = await page.evaluate(() => window.scrollX);\n const clientHeight = await page.evaluate(() => document.documentElement.clientHeight);\n const maxHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);\n const maxWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n \n let currX = initX;\n while (currX < maxWidth - clientWidth) {\n let currY = initY;\n while (currY < maxHeight - clientHeight) {\n currY += clientHeight;\n await page.evaluate(([x, y]) => window.scrollTo(x, y), [currX, currY]);\n await page.waitForTimeout(50);\n smoothingSteps++;\n }\n currX += clientWidth;\n }\n\n proboLogger.debug(\n `performed ${smoothingSteps} smoothing steps while scrolling`\n );\n\n const newHeight = await page.evaluate(() => document.documentElement.scrollHeight);\n const newWidth = await page.evaluate(() => document.documentElement.scrollWidth);\n if (newHeight === lastHeight && newWidth === lastWidth) break;\n proboLogger.debug(`page dimensions updated, repeating scroll`);\n lastHeight = newHeight;\n lastWidth = newWidth;\n }\n\n if (smoothingSteps > 0) {\n await page.waitForTimeout(200);\n await page.evaluate('window.scrollTo(0, 0)');\n await page.waitForTimeout(50);\n }\n proboLogger.debug(`Scroll completed in ${(performance.now() - startTime).toFixed(3)}ms`);\n}\n\n/**\n * Wait for DOM mutations to settle using MutationObserver logic\n */\nexport async function waitForMutationsToSettle(\n page: Page,\n mutationTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout!,\n initTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout!\n): Promise<boolean> {\n const startTime = Date.now();\n proboLogger.debug(\n `Starting mutation settlement (initTimeout=${initTimeout}, mutationTimeout=${mutationTimeout})`\n );\n\n const result = await page.evaluate(\n async ({ mutationTimeout, initTimeout }) => {\n async function blockUntilStable(\n targetNode: HTMLElement,\n options = { childList: true, subtree: true }\n ) {\n return new Promise<boolean>((resolve) => {\n let initTimerExpired = false;\n let mutationsOccurred = false;\n const observerTimers = new Set<number>();\n\n const initTimer = window.setTimeout(() => {\n initTimerExpired = true;\n if (observerTimers.size === 0) resolve(mutationsOccurred);\n }, initTimeout);\n\n const observer = new MutationObserver(() => {\n mutationsOccurred = true;\n observerTimers.forEach((t) => clearTimeout(t));\n observerTimers.clear();\n const t = window.setTimeout(() => {\n observerTimers.delete(t);\n if (initTimerExpired && observerTimers.size === 0) {\n observer.disconnect();\n resolve(mutationsOccurred);\n }\n }, mutationTimeout);\n observerTimers.add(t);\n });\n\n observer.observe(targetNode, options);\n });\n }\n return blockUntilStable(document.body as HTMLElement);\n },\n { mutationTimeout, initTimeout }\n );\n\n const total = ((Date.now() - startTime) / 1000).toFixed(2);\n proboLogger.debug(\n result\n ? `Mutations settled. Took ${total}s`\n : `No mutations observed. Took ${total}s`\n );\n\n return result;\n}\n\n\n/**\n * Get element text value: allTextContents + innerText fallback\n */\nexport async function getElementValue(\n page: Page,\n locator: Locator\n): Promise<string> {\n const texts = await locator.allTextContents();\n let allText = texts.join('').trim();\n if (!allText) {\n allText = await locator.evaluate((el: HTMLElement) => el.innerText);\n }\n if (!allText) {\n allText = await locator.inputValue();\n }\n proboLogger.debug(`getElementValue: [${allText}]`);\n return allText;\n}\n\n/**\n * Select dropdown option: native <select>, <option>, child select, or ARIA listbox\n */\nexport async function selectDropdownOption(\n page: Page,\n locator: Locator,\n value: string | string[]\n): Promise<void> { \n const tagName = await locator?.evaluate((el) => el.tagName.toLowerCase());\n const role = await locator?.getAttribute('role');\n\n if (tagName === 'option' || role === 'option') {\n proboLogger.debug('selectDropdownOption: option role detected');\n await locator?.click();\n } else if (tagName === 'select') {\n proboLogger.debug('selectDropdownOption: simple select tag detected');\n try {\n await locator?.selectOption(value as any);\n } catch {\n proboLogger.debug('selectDropdownOption: manual change event fallback');\n const handle = locator ? await locator.elementHandle() : null;\n await page.evaluate(\n ({ h, val }: { h: HTMLElement | SVGElement | null, val: string | string[] }) => {\n const el = h as HTMLSelectElement;\n if (el) {\n el.value = Array.isArray(val) ? val[0] : (val as string);\n el.dispatchEvent(new Event('change', { bubbles: true }));\n }\n },\n { h: handle, val: value }\n );\n }\n } else {\n proboLogger.debug('selectDropdownOption: custom dropdown path');\n let listbox = locator.locator('select');\n let count = await listbox.count();\n if (count > 1) throw new Error(`selectDropdownOption: ambiguous <select> count=${count}`);\n if (count === 1) {\n proboLogger.debug('selectDropdownOption: child <select> found');\n await listbox.selectOption(value as any);\n return;\n }\n await locator.click();\n let container = locator;\n count = 0;\n if (role !== 'listbox') {\n for (let i = 0; i < 7; i++) {\n listbox = container.getByRole('listbox');\n count = await listbox.count();\n if (count >= 1) break;\n proboLogger.debug(`selectDropdownOption: iteration #${i} no listbox found`);\n container = container.locator('xpath=..');\n }\n } else {\n listbox = container;\n count = await listbox.count();\n }\n if (count !== 1) throw new Error(`selectDropdownOption: found ${count} listbox locators`);\n const vals = Array.isArray(value) ? value : [value];\n for (const val of vals) {\n const option = listbox.getByRole('option').getByText(new RegExp(`^${val}$`, 'i'));\n const optCount = await option.count();\n if (optCount !== 1) throw new Error(`selectDropdownOption: ${optCount} options for '${val}'`);\n await option.click();\n }\n }\n}\n\n/**\n * Execute a given Playwright action, mirroring Python's _perform_action\n */\nexport async function executePlaywrightAction_deprecated(\n page: Page,\n action: PlaywrightAction,\n value: string|boolean,\n iframe_selector: string,\n element_css_selector: string\n): Promise<boolean|string> {\n proboLogger.info(`performing Action: ${action} Value: ${value}`);\n try {\n \n if (action === PlaywrightAction.VISIT_BASE_URL || action === PlaywrightAction.VISIT_URL) {\n await page.goto(value as string, { waitUntil: 'load' });\n await handlePotentialNavigation_deprecated(page, null); \n }\n else {\n let locator = undefined;\n if (iframe_selector)\n locator = page.frameLocator(iframe_selector).locator(element_css_selector);\n else\n locator = page.locator(element_css_selector);\n \n // Fail fast: immediately validate that the element exists\n try {\n await locator.waitFor({ state: 'attached' });\n } catch (e) {\n throw new Error(`Element not found with selector: ${element_css_selector}${iframe_selector ? ` in iframe: ${iframe_selector}` : ''}`);\n }\n switch (action) { \n case PlaywrightAction.CLICK:\n await handlePotentialNavigation_deprecated(page, locator, value as ClickPosition | null);\n break;\n\n case PlaywrightAction.FILL_IN:\n // await locator.click();\n await locator.fill(value as string);\n break;\n\n case PlaywrightAction.TYPE_KEYS:\n // Check if the value contains any special keys\n const specialKey = SPECIAL_KEYS.find(key => (value as string).includes(key));\n if (specialKey) {\n // If it's a single special key, just press it\n if (value === specialKey) {\n await locator?.press(specialKey);\n } else {\n // Handle combinations like 'Control+A' or 'Shift+ArrowRight'\n const parts = (value as string).split('+');\n if (parts.length === 2 && SPECIAL_KEYS.includes(parts[0] as any) && SPECIAL_KEYS.includes(parts[1] as any)) {\n await locator?.press(value as string);\n } else {\n // If it's a mix of special keys and text, use pressSequentially\n await locator?.pressSequentially(value as string);\n }\n }\n } else {\n // No special keys, just type normally\n await locator?.pressSequentially(value as string);\n }\n break;\n\n case PlaywrightAction.SELECT_DROPDOWN:\n await selectDropdownOption(page, locator, value as string);\n break;\n\n case PlaywrightAction.SELECT_MULTIPLE_DROPDOWN:\n let optsArr: string[];\n if ((value as string).startsWith('[')) {\n try { optsArr = JSON.parse(value as string); } catch {\n optsArr = (value as string).slice(1, -1).split(',').map(o => o.trim());\n }\n } else {\n optsArr = (value as string).split(',').map(o => o.trim());\n }\n await locator?.selectOption(optsArr as any);\n break;\n\n case PlaywrightAction.CHECK_CHECKBOX:\n await locator?.setChecked(value == true);\n break;\n\n case PlaywrightAction.SELECT_RADIO:\n case PlaywrightAction.TOGGLE_SWITCH:\n await locator?.click();\n break;\n\n case PlaywrightAction.HOVER:\n if (await locator.isVisible()) {\n await locator?.hover({ noWaitAfter: false });\n await page.waitForTimeout(100); // short delay for hover to take effect\n }\n break;\n\n case PlaywrightAction.ASSERT_EXACT_VALUE: \n const actualExact = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualExact}]`);\n if (actualExact !== value) {\n proboLogger.info(`Validation *FAIL* expected '${value}' but got '${actualExact}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_CONTAINS_VALUE: \n const actualContains = await getElementValue(page, locator);\n proboLogger.debug(`actual value is [${actualContains}]`);\n if (!matchRegex(actualContains, value as string)) {\n proboLogger.info(`Validation *FAIL* expected '${actualContains}' to match '${value}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.ASSERT_URL:\n const currUrl = page.url();\n if (currUrl !== value) {\n proboLogger.info(`Validation *FAIL* expected url '${value}' while is '${currUrl}'`);\n return false;\n }\n proboLogger.info('Validation *PASS*');\n return true;\n\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(value as string);\n try {\n proboLogger.debug('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n el.scrollTop = scrollData.scrollTop;\n el.scrollLeft = scrollData.scrollLeft;\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await page.waitForTimeout(500);\n break;\n\n case PlaywrightAction.EXTRACT_VALUE:\n const extractedValue = await getElementValue(page, locator);\n proboLogger.debug(`extracted value is [${extractedValue}]`);\n return extractedValue;\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n }\n return true;\n } catch (e) {\n proboLogger.debug(`***ERROR failed to execute action ${action}: ${e}`);\n throw e;\n }\n}\n\n/**\n * Execute a given Playwright action using native Playwright functions where possible\n */\n\n\nexport enum ClickPosition {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n CENTER = 'CENTER'\n}\n\n/**\n * Click on an element at a specific position\n */\nexport async function clickAtPosition(page: Page, locator: Locator, clickPosition: ClickPosition | null): Promise<void> {\n if (!clickPosition || clickPosition === ClickPosition.CENTER) {\n await locator.click({noWaitAfter: false});\n return\n }\n const boundingBox = await locator.boundingBox();\n if (boundingBox) {\n if (clickPosition === ClickPosition.LEFT) {\n // await page.mouse.click(boundingBox.x + 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: 10, y: boundingBox.height/2}});\n }\n else if (clickPosition === ClickPosition.RIGHT) {\n // await page.mouse.click(boundingBox.x + boundingBox.width - 10, boundingBox.y + boundingBox.height/2);\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\n await locator.click({noWaitAfter: false, position: {x: boundingBox.width - 10, y: boundingBox.height/2}});\n }\n }\n}\n\n/**\n * Traverses up the DOM from the given locator to find the closest visible ancestor.\n * Returns a Locator for the first visible element found, or null if none is visible up to <html>.\n * \n * @param locator - The Playwright locator to start searching from\n * @returns Promise that resolves to a visible ancestor locator or null if none found\n */\nexport async function findClosestVisibleElement(locator: Locator): Promise<Locator | null> {\n let currentLocator = locator;\n let parentLocator: Locator;\n while (true) {\n if (await currentLocator.isVisible()) {\n return currentLocator;\n }\n // Move up to the parent element\n parentLocator = currentLocator.locator('..');\n // Check if we've reached the top of the DOM\n const tagName = await parentLocator.evaluate(el => el.tagName).catch((): string | null => null);\n if (!tagName || tagName === 'HTML' || tagName === 'BODY') {\n break;\n }\n currentLocator = parentLocator;\n }\n return null;\n}\n","import type { Page } from 'playwright';\nimport { ElementTag, SmartSelector, ProboLogLevel } from '@probolabs/probo-shared';\nimport { proboLogger } from './probo-logger';\n\n// Fix the type definition\ntype ElementTagType = typeof ElementTag[keyof typeof ElementTag];\n\n// Add type declaration for the ProboLabs global\ndeclare global {\n // Declare highlighterCode in the global scope\n var highlighterCode: string;\n \n interface Window {\n ProboLabs?: {\n highlight: {\n execute: (elementTypes: ElementTagType[]) => Promise<any>;\n unexecute: () => Promise<any>;\n };\n highlightElements: (elements: Array<{ css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, index: number }>, enableSmartSelectors: boolean) => void;\n unhighlightElements: () => void;\n findElements: (elementTypes: string) => any[];\n getElementInfo: (element: Element, index: number) => any;\n ElementTag: typeof ElementTag;\n\n // --- New caching API ---\n candidates?: any[];\n actual?: any;\n matchingCandidate?: any;\n findAndCacheCandidateElements?: (elementTypes: string[]) => number;\n findAndCacheActualElement?: (iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean) => boolean;\n findAndCacheMatchingCandidate?: () => boolean;\n highlightCachedElements?: (which: 'candidates' | 'actual' | 'matching') => void;\n unhighlight?: () => void;\n reset?: () => void;\n getCandidates?: () => any[];\n getActual?: () => any;\n getMatchingCandidate?: () => any;\n setLoggerDebugLevel?: (debugLevel: ProboLogLevel) => void;\n };\n }\n}\n\nexport class Highlighter {\n constructor(private readonly enableSmartSelectors: boolean = false, private readonly enableConsoleLogs: boolean = true, private readonly debugLevel: ProboLogLevel = ProboLogLevel.INFO) {}\n\n private async ensureHighlighterScript(page: Page, maxRetries = 3) {\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const scriptExists = await page.evaluate(\n `typeof window.ProboLabs?.highlight?.execute === 'function'`\n );\n\n if (!scriptExists) {\n proboLogger.debug('Injecting highlighter script...');\n await page.evaluate(highlighterCode);\n \n // Verify the script was injected correctly\n const verified = await page.evaluate(`\n //console.log('ProboLabs global:', window.ProboLabs);\n typeof window.ProboLabs?.highlight?.execute === 'function'\n `);\n proboLogger.debug('Script injection verified:', verified);\n await page.evaluate(`window.ProboLabs.setLoggerDebugLevel('${this.debugLevel}');`);\n }\n return; // Success - exit the function\n } catch (error) {\n if (attempt === maxRetries - 1) {\n throw error;\n }\n proboLogger.debug(`Script injection attempt ${attempt + 1} failed, retrying after delay...`);\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n }\n }\n\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n proboLogger.debug('highlightElements called with:', elementTags);\n await this.ensureHighlighterScript(page);\n \n // Execute the highlight function and await its result\n const result = await page.evaluate(\n async (tags) => {\n //proboLogger.debug('Browser: Starting highlight execution with tag:', tag);\n if (!window.ProboLabs?.highlight?.execute) {\n console.error('Browser: ProboLabs.highlight.execute is not available!');\n return null;\n }\n const elements = await window.ProboLabs.highlight.execute(tags);\n //proboLogger.debug('Browser: Found elements:', elements);\n return elements;\n },\n elementTags\n );\n \n // proboLogger.debug(\"highlighted elements =>\");\n // for (let i = 0; i < result.length; i++) { \n // proboLogger.debug(result[i]);\n // };\n \n return result;\n }\n\n public async unhighlightElements(page: Page) {\n proboLogger.debug('unhighlightElements called');\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window?.ProboLabs?.highlight?.unexecute();\n });\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n await this.ensureHighlighterScript(page);\n proboLogger.debug('Highlighting element with:', { element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, enableSmartSelectors: this.enableSmartSelectors, element_index });\n \n await page.evaluate(\n ({ css_selector, iframe_selector, smart_selector, smart_iframe_selector, index }) => {\n const proboLabs = window.ProboLabs;\n if (!proboLabs) {\n proboLogger.warn('ProboLabs not initialized');\n return;\n }\n // Create ElementInfo object for the element\n const elementInfo = {\n css_selector: css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: index\n };\n \n // Call highlightElements directly\n proboLabs.highlightElements([elementInfo], this.enableSmartSelectors);\n },\n { \n css_selector: element_css_selector,\n iframe_selector: iframe_selector,\n smart_selector: smart_selector,\n smart_iframe_selector: smart_iframe_selector,\n index: element_index \n }\n );\n }\n\n \n // --- New Clean Caching API ---\n /**\n * Find and cache candidate elements of a given type (e.g., 'CLICKABLE').\n * Returns the number of candidates found.\n */\n public async findAndCacheCandidateElements(page: Page, elementTypes: string[]): Promise<number> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(async (types: string[]) => {\n return await window.ProboLabs?.findAndCacheCandidateElements?.(types);\n }, elementTypes);\n return result ?? 0;\n }\n\n /**\n * Find and cache the actual interaction element by CSS and iframe selector.\n * Returns true if found, false otherwise.\n */\n public async findAndCacheActualElement(page: Page, iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean = false): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate((params: { iframeSelector: string|SmartSelector, elementSelector: string|SmartSelector, isHover: boolean, useSmartSelectors: boolean }) => {\n return window.ProboLabs?.findAndCacheActualElement?.(params.iframeSelector, params.elementSelector, params.isHover, params.useSmartSelectors);\n }, { iframeSelector: iframeSelector, elementSelector: elementSelector, isHover: isHover, useSmartSelectors: this.enableSmartSelectors });\n return result ?? false;\n }\n\n /**\n * Find and cache the best matching candidate for the actual element.\n * Returns true if a match was found, false otherwise.\n */\n public async findAndCacheMatchingCandidate(page: Page): Promise<boolean> {\n await this.ensureHighlighterScript(page);\n const result = await page.evaluate(() => {\n return window.ProboLabs?.findAndCacheMatchingCandidate?.();\n });\n return result ?? false;\n }\n\n /**\n * Highlight the cached candidates, actual, or matching candidate.\n * @param which 'candidates' | 'actual' | 'matching'\n */\n public async highlightCachedElements(page: Page, which: 'candidates' | 'actual' | 'matching') {\n await this.ensureHighlighterScript(page);\n await page.evaluate((w: 'candidates' | 'actual' | 'matching') => {\n window.ProboLabs?.highlightCachedElements?.(w);\n }, which);\n }\n\n /**\n * Remove all highlights.\n */\n public async unhighlightCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.unhighlight?.();\n });\n }\n\n /**\n * Reset/clear all cached state.\n */\n public async resetCached(page: Page) {\n await this.ensureHighlighterScript(page);\n await page.evaluate(() => {\n window.ProboLabs?.reset?.();\n });\n }\n\n /**\n * Get serializable info for Node/Playwright (candidates, actual, matchingCandidate)\n */\n public async getCandidatesCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getCandidates?.();\n });\n }\n\n public async getActualCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getActual?.();\n });\n }\n\n public async getMatchingCandidateCached(page: Page) {\n await this.ensureHighlighterScript(page);\n return await page.evaluate(() => {\n return window.ProboLabs?.getMatchingCandidate?.();\n });\n }\n}\n\nexport { ElementTag, ElementTagType };\n","const MAILINATOR_API_KEY = '5bfef31518e84dfbb861b36f59259695';\nconst MAILINATOR_DOMAIN = 'probolabs.testinator.com';\n\nexport interface MailinatorMessage {\n id: string;\n subject: string;\n from: string;\n origfrom?: string;\n to: string;\n time: number;\n seconds_ago: number;\n domain?: string;\n source?: string;\n parts?: Array<{\n headers: Record<string, string>;\n body: string;\n }>;\n textBody?: string;\n htmlBody?: string;\n}\n\ninterface MailinatorResponse {\n messages: MailinatorMessage[];\n}\n\n/**\n * OTP utility class for working with Mailinator API\n */\nexport class OTP {\n /**\n * Flag to control whether messages should be deleted after OTP extraction\n * Set to false for debugging purposes to keep messages in the inbox\n * @default true\n */\n static DELETE_MESSAGE_AFTER_OTP_EXTRACTION = true;\n\n /**\n * Fetches the last messages from Mailinator for a specific inbox\n * @param inbox - The inbox name to check (without @domain)\n * @param since - Unix timestamp to fetch messages since (optional)\n * @returns Promise<MailinatorMessage[]> - Array of messages\n */\n static async fetchLastMessages(inbox: string, since?: number): Promise<MailinatorMessage[]> {\n try {\n // Use the correct Mailinator API endpoint structure\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/${inbox}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n \n // The API returns messages in 'msgs' property, not 'messages'\n const messages = data.msgs || data.messages || data || [];\n \n // Filter messages by 'since' timestamp if provided\n if (since) {\n return messages.filter((message: MailinatorMessage) => message.time >= since);\n }\n \n return messages;\n } catch (error) {\n console.error('Error fetching messages from Mailinator:', error);\n throw error;\n }\n }\n\n /**\n * Fetches a specific message by ID\n * @param messageId - The message ID\n * @returns Promise<MailinatorMessage> - The message details\n */\n static async fetchMessage(messageId: string): Promise<MailinatorMessage> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/messages/${messageId}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n return await response.json();\n } catch (error) {\n console.error('Error fetching message from Mailinator:', error);\n throw error;\n }\n }\n\n /**\n * Deletes a specific message by ID\n * @param messageId - The message ID to delete\n * @returns Promise<boolean> - True if deleted successfully, false otherwise\n */\n static async deleteMessage(messageId: string): Promise<boolean> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/messages/${messageId}`;\n \n const response = await fetch(url, {\n method: 'DELETE',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n console.error(`Failed to delete message ${messageId}: ${response.status} ${response.statusText}`);\n return false;\n }\n\n console.log(`🗑️ [deleteMessage] Deleted message: ${messageId}`);\n return true;\n } catch (error) {\n console.error('Error deleting message from Mailinator:', error);\n return false;\n }\n }\n\n\n /**\n * Extracts OTP codes from message content\n * @param message - The message to extract OTP from\n * @returns string | null - The OTP code or null if not found\n */\n static extractOTPFromMessage(message: MailinatorMessage): string | null {\n // Common OTP patterns - ordered by specificity (most specific first)\n const otpPatterns = [\n // Very specific patterns for common OTP formats\n /(?:verification\\s+code|verification\\s+number|6-digit\\s+verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n /(?:use\\s+the\\s+6-digit\\s+verification\\s+code\\s+below)[\\s\\S]*?(\\d{6})/i,\n /(?:code\\s+below\\s+to\\s+complete)[\\s\\S]*?(\\d{6})/i,\n /(?:verification\\s+code)[\\s\\S]*?(\\d{6})/i,\n \n // Patterns with context around the code\n /(?:OTP|code|verification code|verification):\\s*(\\d{4,8})/i,\n /(?:enter|use|input)\\s+(?:the\\s+)?(?:code|OTP|verification code):\\s*(\\d{4,8})/i,\n /(?:your\\s+)?(?:verification\\s+)?(?:code\\s+is|OTP\\s+is):\\s*(\\d{4,8})/i,\n /(?:code|OTP|pin):\\s*(\\d{4,8})/i,\n /(?:code|OTP)\\s+is\\s+(\\d{4,8})/i,\n \n // Look for codes in specific contexts (avoiding URLs and tracking IDs)\n /(?:complete\\s+your\\s+sign-in)[\\s\\S]*?(\\d{6})/i,\n /(?:valid\\s+for\\s+the\\s+next)[\\s\\S]*?(\\d{6})/i,\n \n // Fallback: 6-digit numbers (most common OTP length)\n /(?:^|\\s)(\\d{6})(?:\\s|$)/i,\n \n // Last resort: 4-8 digit numbers (but avoid very long ones that are likely tracking IDs)\n /(?:^|\\s)(\\d{4,8})(?:\\s|$)/i\n ];\n\n // Helper function to check if a number is likely an OTP (not a tracking ID, phone number, year, etc.)\n const isValidOTP = (number: string, text: string): boolean => {\n // Common OTP lengths\n if (number.length < 4 || number.length > 8) return false;\n \n // Only filter out very obvious non-OTPs\n // Avoid numbers that are all the same digit (unlikely to be OTPs)\n if (/^(\\d)\\1+$/.test(number)) return false;\n \n // Avoid very long numbers that are clearly tracking IDs (but be more lenient)\n if (number.length >= 8 && parseInt(number) > 99999999) return false;\n \n // Filter out common false positives\n // Check if this looks like a year (4 digits starting with 19 or 20)\n if (number.length === 4 && /^(19|20)\\d{2}$/.test(number)) {\n // Check if it appears in copyright context\n if (text.includes(`© GoSource ${number}`) || text.includes(`©${number}`) || text.match(new RegExp(`©[^\\\\d]*${number}`, 'i'))) {\n return false;\n }\n }\n \n return true;\n };\n\n // Helper function to extract OTP from text content\n const extractFromText = (text: string, debugContext: string = ''): string | null => {\n if (!text) return null;\n \n for (let i = 0; i < otpPatterns.length; i++) {\n const pattern = otpPatterns[i];\n const match = text.match(pattern);\n if (match && match[1] && isValidOTP(match[1], text)) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" in ${debugContext}`);\n return match[1];\n } else if (match && match[1]) {\n console.log(`[OTP] Pattern ${i} matched \"${match[1]}\" but rejected by isValidOTP in ${debugContext}`);\n }\n }\n return null;\n };\n\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // 1. Try to extract from text body first (preferred)\n if (message.textBody) {\n const otp = extractFromText(message.textBody, 'textBody');\n if (otp) return otp;\n }\n\n // 2. Try to extract from HTML body (strip HTML tags first)\n if (message.htmlBody) {\n const plainText = stripHtml(message.htmlBody);\n const otp = extractFromText(plainText, 'htmlBody');\n if (otp) return otp;\n }\n\n // 3. Try to extract from message parts\n if (message.parts && message.parts.length > 0) {\n for (let i = 0; i < message.parts.length; i++) {\n const part = message.parts[i];\n if (part.body) {\n const otp = extractFromText(part.body, `part[${i}]`);\n if (otp) return otp;\n }\n }\n }\n\n // 4. Fallback: try to extract from subject\n const otp = extractFromText(message.subject, 'subject');\n if (otp) return otp;\n \n return null;\n }\n\n /**\n * Gets the text content from a message for debugging/display purposes\n * @param message - The message to extract text from\n * @returns string - The text content of the message\n */\n static getMessageTextContent(message: MailinatorMessage): string {\n // Helper function to strip HTML tags\n const stripHtml = (html: string): string => {\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\n };\n\n // Priority order: textBody > htmlBody > parts > subject\n if (message.textBody) {\n return message.textBody;\n }\n\n if (message.htmlBody) {\n return stripHtml(message.htmlBody);\n }\n\n if (message.parts && message.parts.length > 0) {\n return message.parts.map(part => part.body || '').join('\\n');\n }\n\n return message.subject || '';\n }\n\n /**\n * Fetches messages from all inboxes in the domain\n * @param limit - Number of messages to fetch (default: 50)\n * @param sort - Sort order: 'ascending' or 'descending' (default: 'descending')\n * @param full - Whether to fetch full message content (default: false)\n * @returns Promise<MailinatorMessage[]> - Array of messages from all inboxes\n */\n static async fetchAllInboxMessages(\n limit: number = 50,\n sort: 'ascending' | 'descending' = 'descending',\n full: boolean = false\n ): Promise<MailinatorMessage[]> {\n try {\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/?limit=${limit}&sort=${sort}${full ? '&full=true' : ''}`;\n \n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\n }\n\n const data = await response.json();\n const messages = data.msgs || data.messages || data || [];\n return messages;\n } catch (error) {\n console.error('Error fetching messages from all inboxes:', error);\n throw error;\n }\n }\n\n /**\n * Waits for an OTP to arrive in the inbox and extracts it\n * @param options - Configuration options for waiting for OTP\n * @param options.inbox - The inbox name to monitor (optional - if not provided, searches all inboxes)\n * @param options.timeout - Maximum time to wait in milliseconds (default: 30000)\n * @param options.checkInterval - How often to check in milliseconds (default: 1000)\n * @param options.checkRecentMessagesSinceMs - When > 0, check messages from the last X milliseconds and return the most recent OTP (default: 0)\n * @returns Promise<string | null> - The extracted OTP code or null if timeout/no OTP found\n */\n static async waitForOTP(options: {\n inbox?: string;\n timeout?: number;\n checkInterval?: number;\n checkRecentMessagesSinceMs?: number;\n } = {}): Promise<string | null> {\n const {\n inbox,\n timeout = 30000,\n checkInterval = 1000,\n checkRecentMessagesSinceMs = 0\n } = options;\n \n console.log(`[waitForOTP] inbox: ${inbox || 'all'}, timeout: ${timeout}ms, checkInterval: ${checkInterval}ms, checkRecentSince: ${checkRecentMessagesSinceMs}ms`);\n \n const startTime = Date.now();\n \n // If checkRecentMessagesSinceMs > 0, check for recent messages first\n if (checkRecentMessagesSinceMs > 0) {\n const recentMessagesCutoff = Date.now() - checkRecentMessagesSinceMs;\n const recentMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n \n const messagesFromWindow = recentMessages.filter(msg => msg.time >= recentMessagesCutoff);\n const sortedMessages = messagesFromWindow.sort((a, b) => b.time - a.time);\n \n for (const message of sortedMessages) {\n let otp = OTP.extractOTPFromMessage(message);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(message.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(message.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp}`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n if (messagesFromWindow.length === 0) {\n console.log(`❌ [waitForOTP] No messages found in the last ${checkRecentMessagesSinceMs}ms`);\n } else {\n console.log(`❌ [waitForOTP] Checked ${messagesFromWindow.length} recent message(s) but none contained OTP`);\n }\n }\n \n // Get initial messages for monitoring new ones (from specific inbox or all inboxes)\n const initialMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const initialMessageIds = new Set(initialMessages.map(msg => msg.id));\n \n while (Date.now() - startTime < timeout) {\n await new Promise(resolve => setTimeout(resolve, checkInterval));\n \n try {\n // Get current messages (from specific inbox or all inboxes)\n const currentMessages = inbox \n ? await OTP.fetchLastMessages(inbox)\n : await OTP.fetchAllInboxMessages();\n const newMessages = currentMessages.filter(msg => !initialMessageIds.has(msg.id));\n \n if (newMessages.length > 0) {\n // Sort new messages by time (newest first) to handle multiple messages arriving at once\n const sortedNewMessages = newMessages.sort((a, b) => b.time - a.time);\n \n // Check all new messages (not just the first one)\n for (const newMessage of sortedNewMessages) {\n // First try to extract OTP from the message summary (faster)\n let otp = OTP.extractOTPFromMessage(newMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(newMessage.id);\n }\n \n return otp;\n }\n \n // If no OTP found in summary, fetch full message details\n try {\n const fullMessage = await OTP.fetchMessage(newMessage.id);\n otp = OTP.extractOTPFromMessage(fullMessage);\n if (otp) {\n console.log(`✅ [waitForOTP] Found OTP: ${otp} in new message (full fetch)`);\n \n // Delete message if flag is enabled\n if (OTP.DELETE_MESSAGE_AFTER_OTP_EXTRACTION) {\n await OTP.deleteMessage(fullMessage.id);\n }\n \n return otp;\n }\n } catch (error) {\n // Silently continue to next message\n }\n }\n \n // Add all new messages to the set so we don't reprocess them\n newMessages.forEach(msg => initialMessageIds.add(msg.id));\n }\n } catch (error) {\n // Silently continue polling\n }\n }\n \n console.log(`❌ [waitForOTP] Timeout reached (${timeout}ms) - no OTP found`);\n return null; // Timeout reached or no OTP found\n }\n}\n\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n waitForStabilityQuietTimeout?: number; // Time to wait for network stability (default: 2000ms)\n waitForStabilityInitialDelay?: number; // Initial delay before monitoring starts (default: 500ms)\n waitForStabilityGlobalTimeout?: number; // Overall timeout for stabilization (default: 15000ms)\n pollMs?: number; // Polling interval (default: 100ms)\n maxInflight?: number; // Maximum inflight requests (default: 0)\n inflightGraceMs?: number; // Grace period for inflight requests (default: 4000ms)\n waitForStabilityVerbose?: boolean; // Enable verbose logging (default: false)\n}\n\ntype ResourceType =\n | 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script'\n | 'TextTrack' | 'XHR' | 'Fetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'Other';\n\n/**\n * Global navigation tracker that monitors page navigation events and network activity\n * using CDP (Chrome DevTools Protocol) for comprehensive network monitoring\n * \n * This is a singleton class - only one instance can exist at a time\n */\nexport class NavTracker {\n private static instance: NavTracker | null = null;\n private page: Page;\n private navigationCount: number = 0;\n private lastNavTime: number | null = null;\n private waitForStabilityQuietTimeout: number;\n private waitForStabilityInitialDelay: number;\n private waitForStabilityGlobalTimeout: number;\n private pollMs: number;\n private maxInflight: number;\n private inflightGraceMs: number;\n private waitForStabilityVerbose: boolean;\n private isListening: boolean = false;\n private instanceId: string;\n private client: any = null;\n private inflight: Set<string> = new Set();\n private lastHardNavAt: number = 0;\n private lastSoftNavAt: number = 0;\n private lastNetworkActivityAt: number = 0;\n private totalRequestsTracked: number = 0;\n\n // Define relevant resource types and content types\n private readonly RELEVANT_RESOURCE_TYPES = [\n 'Document',\n 'Stylesheet', \n 'Image',\n 'Font',\n 'Script',\n 'XHR',\n 'Fetch'\n ];\n\n private readonly RELEVANT_CONTENT_TYPES = [\n 'text/html',\n 'text/css',\n 'application/javascript',\n 'image/',\n 'font/',\n 'application/json',\n ];\n\n // Additional patterns to filter out\n private readonly IGNORED_URL_PATTERNS = [\n // Analytics and tracking\n 'analytics',\n 'tracking',\n 'telemetry',\n 'beacon',\n 'metrics',\n // Ad-related\n 'doubleclick',\n 'adsystem',\n 'adserver',\n 'advertising',\n // Social media widgets\n 'facebook.com/plugins',\n 'platform.twitter',\n 'linkedin.com/embed',\n // Live chat and support\n 'livechat',\n 'zendesk',\n 'intercom',\n 'crisp.chat',\n 'hotjar',\n // Push notifications\n 'push-notifications',\n 'onesignal',\n 'pushwoosh',\n // Background sync/heartbeat\n 'heartbeat',\n 'ping',\n 'alive',\n // WebRTC and streaming\n 'webrtc',\n 'rtmp://',\n 'wss://',\n // Common CDNs for dynamic content\n 'cloudfront.net',\n 'fastly.net',\n ];\n\n /**\n * Private constructor - use getInstance() to get the singleton instance\n */\n private constructor(page: Page, options: NavTrackerOptions = {}) {\n this.page = page;\n this.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout ?? 2000;\n this.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay ?? 500;\n this.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout ?? 15000;\n this.pollMs = options.pollMs ?? 100;\n this.maxInflight = options.maxInflight ?? 0;\n this.inflightGraceMs = options.inflightGraceMs ?? 4000;\n this.waitForStabilityVerbose = options.waitForStabilityVerbose ?? false;\n \n proboLogger.debug(`NavTracker constructor set values: quietTimeout=${this.waitForStabilityQuietTimeout}, initialDelay=${this.waitForStabilityInitialDelay}, globalTimeout=${this.waitForStabilityGlobalTimeout}, verbose=${this.waitForStabilityVerbose}`);\n this.instanceId = Math.random().toString(36).substring(2, 11);\n \n // Initialize timestamps\n const now = Date.now();\n this.lastHardNavAt = now;\n this.lastSoftNavAt = now;\n this.lastNetworkActivityAt = now;\n\n // Note: start() is called asynchronously in getInstance() to ensure proper initialization\n }\n\n /**\n * Start listening for navigation and network events using CDP (private method)\n */\n private async start(): Promise<void> {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n try {\n // Set up CDP session\n this.client = await this.page.context().newCDPSession(this.page);\n await this.client.send('Page.enable');\n await this.client.send('Network.enable');\n await this.client.send('Runtime.enable');\n await this.client.send('Page.setLifecycleEventsEnabled', { enabled: true });\n\n // Set up navigation event handlers\n this.client.on('Page.frameNavigated', (e: any) => {\n if (!e.frame?.parentId) { // main frame has no parentId\n this.lastHardNavAt = Date.now();\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Hard navigation detected at ${this.lastHardNavAt}`);\n }\n }\n });\n\n this.client.on('Page.navigatedWithinDocument', (_e: any) => {\n this.lastSoftNavAt = Date.now();\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Soft navigation detected at ${this.lastSoftNavAt}`);\n }\n });\n\n // Set up network event handlers\n this.client.on('Network.requestWillBeSent', (e: any) => {\n this.onNetworkRequest(e);\n });\n\n this.client.on('Network.loadingFinished', (e: any) => {\n this.onNetworkResponse(e, 'finished');\n });\n\n this.client.on('Network.loadingFailed', (e: any) => {\n this.onNetworkResponse(e, 'failed');\n });\n\n this.isListening = true;\n proboLogger.debug(`NavTracker[${this.instanceId}]: started CDP-based monitoring`);\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Failed to start CDP monitoring: ${error}`);\n // Fall back to basic navigation tracking\n this.page.on(\"framenavigated\", (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n this.lastHardNavAt = Date.now();\n }\n });\n this.isListening = true;\n }\n }\n\n /**\n * Stop listening for navigation and network events (private method)\n */\n private stop(): void {\n if (!this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: not listening, ignoring stop()`);\n return;\n }\n\n try {\n if (this.client) {\n // Check if the page is still available before detaching\n if (this.page && !this.page.isClosed()) {\n this.client.detach();\n } else {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page is closed, skipping CDP detach`);\n }\n this.client = null;\n }\n } catch (error) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Error detaching CDP client: ${error}`);\n }\n\n this.isListening = false;\n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped CDP monitoring`);\n }\n\n /**\n * Handle network request events\n */\n private onNetworkRequest(e: any): void {\n const requestType = e.type as ResourceType | undefined;\n const url = e.request?.url ?? '';\n \n // Filter by resource type\n if (!this.RELEVANT_RESOURCE_TYPES.includes(requestType as any)) {\n return;\n }\n\n // Filter out streaming, websocket, and other real-time requests\n if (['WebSocket', 'EventSource', 'Media', 'Manifest', 'Other'].includes(requestType as any)) {\n return;\n }\n\n // Filter out by URL patterns\n const urlLower = url.toLowerCase();\n if (this.IGNORED_URL_PATTERNS.some(pattern => urlLower.includes(pattern))) {\n return;\n }\n\n // Filter out data URLs and blob URLs\n if (urlLower.startsWith('data:') || urlLower.startsWith('blob:')) {\n return;\n }\n\n // Filter out requests with certain headers\n const headers = e.request?.headers || {};\n if (headers['purpose'] === 'prefetch' || ['video', 'audio'].includes(headers['sec-fetch-dest'])) {\n return;\n }\n\n this.inflight.add(e.requestId);\n this.totalRequestsTracked++;\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request started: ${requestType} - ${url}`);\n }\n }\n\n /**\n * Handle network response events\n */\n private onNetworkResponse(e: any, status: 'finished' | 'failed'): void {\n const requestId = e.requestId;\n \n if (!this.inflight.has(requestId)) {\n return;\n }\n\n this.inflight.delete(requestId);\n this.lastNetworkActivityAt = Date.now();\n\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request ${status} (${this.inflight.size} remaining)`);\n }\n }\n\n /**\n * Check if navigation and network activity has stabilized\n */\n private hasNavigationStabilized(): boolean {\n const now = Date.now();\n \n // Use the most recent activity timestamp\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const quietSinceMs = now - lastActivityAt;\n const inflightOk = this.inflight.size <= this.maxInflight || (now - this.lastHardNavAt) > this.inflightGraceMs;\n \n const isStabilized = quietSinceMs >= this.waitForStabilityQuietTimeout && inflightOk;\n \n if (this.waitForStabilityVerbose) {\n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - quietSinceMs=${quietSinceMs}ms, waitForStabilityQuietTimeout=${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}, inflightOk=${inflightOk}, stabilized=${isStabilized}`\n );\n }\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation and network activity to stabilize\n * Uses CDP-based monitoring for comprehensive network activity tracking\n */\n async waitForNavigationToStabilize(): Promise<void> {\n const now = Date.now();\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n const timeSinceLastActivity = now - lastActivityAt;\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation and network to stabilize (quietTimeout: ${this.waitForStabilityQuietTimeout}ms, initialDelay: ${this.waitForStabilityInitialDelay}ms, globalTimeout: ${this.waitForStabilityGlobalTimeout}ms, verbose: ${this.waitForStabilityVerbose}, lastActivity: ${timeSinceLastActivity}ms ago)`);\n \n // Ensure CDP monitoring is properly initialized\n if (!this.isListening) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: CDP monitoring not initialized, initializing now...`);\n await this.start();\n }\n \n const startTime = Date.now();\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n \n try {\n // Initial delay to catch any new network activity triggered by user actions\n if (this.waitForStabilityInitialDelay > 0) {\n if (this.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: initial delay of ${this.waitForStabilityInitialDelay}ms to catch new network activity`);\n }\n await sleep(this.waitForStabilityInitialDelay);\n }\n \n // Wait a short time to catch any missed events\n await sleep(100);\n \n // Main stabilization loop\n while (true) {\n const now = Date.now();\n \n // Check for timeout\n if (now - startTime > this.waitForStabilityGlobalTimeout) {\n proboLogger.warn(`NavTracker[${this.instanceId}]: Timeout reached after ${this.waitForStabilityGlobalTimeout}ms with ${this.inflight.size} pending requests`);\n break;\n }\n \n // Check if stabilized\n if (this.hasNavigationStabilized()) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page stabilized after ${quietSinceMs}ms of quiet time`);\n break;\n }\n \n // Log progress every 2 seconds in verbose mode\n if (this.waitForStabilityVerbose && now % 2000 < this.pollMs) {\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\n proboLogger.debug(`NavTracker[${this.instanceId}]: Status - quiet=${quietSinceMs}ms/${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}/${this.maxInflight}`);\n }\n \n await sleep(this.pollMs);\n }\n } catch (error) {\n proboLogger.error(`NavTracker[${this.instanceId}]: Error during stabilization: ${error}`);\n }\n }\n\n\n // ============================================================================\n // SINGLETON METHODS\n // ============================================================================\n\n /**\n * Get the singleton instance of NavTracker\n * @param page The page to track (required for first creation)\n * @param options Optional configuration\n * @returns The singleton NavTracker instance\n */\n public static async getInstance(page?: Page, options?: NavTrackerOptions): Promise<NavTracker> {\n proboLogger.debug(`NavTracker.getInstance called with options:`, options);\n if (!NavTracker.instance) {\n if (!page) {\n throw new Error('NavTracker: Page is required for first instance creation');\n }\n NavTracker.instance = new NavTracker(page, options);\n await NavTracker.instance.start();\n proboLogger.debug(`NavTracker: created new singleton instance with options:`, options);\n } else {\n // Update existing instance with new options\n if (options) {\n if (options.waitForStabilityQuietTimeout !== undefined) {\n NavTracker.instance.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout;\n }\n if (options.waitForStabilityInitialDelay !== undefined) {\n NavTracker.instance.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay;\n }\n if (options.waitForStabilityGlobalTimeout !== undefined) {\n NavTracker.instance.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout;\n }\n if (options.pollMs !== undefined) {\n NavTracker.instance.pollMs = options.pollMs;\n }\n if (options.maxInflight !== undefined) {\n NavTracker.instance.maxInflight = options.maxInflight;\n }\n if (options.inflightGraceMs !== undefined) {\n NavTracker.instance.inflightGraceMs = options.inflightGraceMs;\n }\n if (options.waitForStabilityVerbose !== undefined) {\n NavTracker.instance.waitForStabilityVerbose = options.waitForStabilityVerbose;\n }\n proboLogger.debug(`NavTracker: updated existing instance with new values: quietTimeout=${NavTracker.instance.waitForStabilityQuietTimeout}, initialDelay=${NavTracker.instance.waitForStabilityInitialDelay}, globalTimeout=${NavTracker.instance.waitForStabilityGlobalTimeout}, verbose=${NavTracker.instance.waitForStabilityVerbose}`);\n }\n if (options?.waitForStabilityVerbose) {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n }\n return NavTracker.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing or page changes)\n */\n public static resetInstance(): void {\n if (NavTracker.instance) {\n NavTracker.instance.stop();\n NavTracker.instance = null;\n proboLogger.debug(`NavTracker: reset singleton instance`);\n }\n }\n\n}","//! otpauth 9.4.1 | (c) Héctor Molinero Fernández | MIT | https://github.com/hectorm/otpauth\n//! noble-hashes 1.8.0 | (c) Paul Miller | MIT | https://github.com/paulmillr/noble-hashes\n/// <reference types=\"./otpauth.d.ts\" />\n// @ts-nocheck\n/**\n * Converts an integer to an Uint8Array.\n * @param {number} num Integer.\n * @returns {Uint8Array} Uint8Array.\n */ const uintDecode = (num)=>{\n const buf = new ArrayBuffer(8);\n const arr = new Uint8Array(buf);\n let acc = num;\n for(let i = 7; i >= 0; i--){\n if (acc === 0) break;\n arr[i] = acc & 255;\n acc -= arr[i];\n acc /= 256;\n }\n return arr;\n};\n\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */ /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */ // We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */ function isBytes(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array';\n}\n/** Asserts something is positive integer. */ function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */ function abytes(b, ...lengths) {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length)) throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */ function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function') throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */ function aexists(instance, checkFinished = true) {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */ function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u32. */ function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */ function clean(...arrays) {\n for(let i = 0; i < arrays.length; i++){\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */ function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */ function rotr(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\n/** The rotate left (circular left shift) operation for uint32 */ function rotl(word, shift) {\n return word << shift | word >>> 32 - shift >>> 0;\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */ const isLE = /* @__PURE__ */ (()=>new Uint8Array(new Uint32Array([\n 0x11223344\n ]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */ function byteSwap(word) {\n return word << 24 & 0xff000000 | word << 8 & 0xff0000 | word >>> 8 & 0xff00 | word >>> 24 & 0xff;\n}\n/** In place byte swap for Uint32Array */ function byteSwap32(arr) {\n for(let i = 0; i < arr.length; i++){\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nconst swap32IfBE = isLE ? (u)=>u : byteSwap32;\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */ function utf8ToBytes(str) {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */ function toBytes(data) {\n if (typeof data === 'string') data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** For runtime check if class implements interface */ class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */ function createHasher(hashCons) {\n const hashC = (msg)=>hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = ()=>hashCons();\n return hashC;\n}\n\nclass HMAC extends Hash {\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n constructor(hash, _key){\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function') throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for(let i = 0; i < pad.length; i++)pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */ const hmac = (hash, key, message)=>new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key)=>new HMAC(hash, key);\n\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */ function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number(value >> _32n & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */ function Chi(a, b, c) {\n return a & b ^ ~a & c;\n}\n/** Majority function, true if any two inputs is true. */ function Maj(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */ class HashMD extends Hash {\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for(; blockLen <= len - pos; pos += blockLen)this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for(let i = pos; i < blockLen; i++)buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for(let i = 0; i < outLen; i++)oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n constructor(blockLen, outputLen, padOffset, isLE){\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */ /** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */ const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */ const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8,\n 0x367cd507,\n 0x3070dd17,\n 0xf70e5939,\n 0xffc00b31,\n 0x68581511,\n 0x64f98fa7,\n 0xbefa4fa4\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */ const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d,\n 0xc1059ed8,\n 0x629a292a,\n 0x367cd507,\n 0x9159015a,\n 0x3070dd17,\n 0x152fecd8,\n 0xf70e5939,\n 0x67332667,\n 0xffc00b31,\n 0x8eb44a87,\n 0x68581511,\n 0xdb0c2e0d,\n 0x64f98fa7,\n 0x47b5481d,\n 0xbefa4fa4\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */ const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667,\n 0xf3bcc908,\n 0xbb67ae85,\n 0x84caa73b,\n 0x3c6ef372,\n 0xfe94f82b,\n 0xa54ff53a,\n 0x5f1d36f1,\n 0x510e527f,\n 0xade682d1,\n 0x9b05688c,\n 0x2b3e6c1f,\n 0x1f83d9ab,\n 0xfb41bd6b,\n 0x5be0cd19,\n 0x137e2179\n]);\n\n/** Initial SHA1 state */ const SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n 0xc3d2e1f0\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */ class SHA1 extends HashMD {\n get() {\n const { A, B, C, D, E } = this;\n return [\n A,\n B,\n C,\n D,\n E\n ];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for(let i = 0; i < 16; i++, offset += 4)SHA1_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 80; i++)SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for(let i = 0; i < 80; i++){\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n } else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n } else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n } else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = rotl(A, 5) + F + E + K + SHA1_W[i] | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(){\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */ const sha1 = /* @__PURE__ */ createHasher(()=>new SHA1());\n\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */ const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le) return {\n h: Number(n & U32_MASK64),\n l: Number(n >> _32n & U32_MASK64)\n };\n return {\n h: Number(n >> _32n & U32_MASK64) | 0,\n l: Number(n & U32_MASK64) | 0\n };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for(let i = 0; i < len; i++){\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [\n h,\n l\n ];\n }\n return [\n Ah,\n Al\n ];\n}\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s)=>h >>> s;\nconst shrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s)=>h >>> s | l << 32 - s;\nconst rotrSL = (h, l, s)=>h << 32 - s | l >>> s;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s)=>h << 64 - s | l >>> s - 32;\nconst rotrBL = (h, l, s)=>h >>> s - 32 | l << 64 - s;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s)=>h << s | l >>> 32 - s;\nconst rotlSL = (h, l, s)=>l << s | h >>> 32 - s;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s)=>l << s - 32 | h >>> 64 - s;\nconst rotlBL = (h, l, s)=>h << s - 32 | l >>> 64 - s;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return {\n h: Ah + Bh + (l / 2 ** 32 | 0) | 0,\n l: l | 0\n };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch)=>Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;\nconst add4L = (Al, Bl, Cl, Dl)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh)=>Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El)=>(Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh)=>Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */ // prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */ const SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD {\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [\n A,\n B,\n C,\n D,\n E,\n F,\n G,\n H\n ];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4)SHA256_W[i] = view.getUint32(offset, false);\n for(let i = 16; i < 64; i++){\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;\n SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for(let i = 0; i < 64; i++){\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = sigma0 + Maj(A, B, C) | 0;\n H = G;\n G = F;\n F = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\n // Add the compressed chunk to the current hash value\n A = A + this.A | 0;\n B = B + this.B | 0;\n C = C + this.C | 0;\n D = D + this.D | 0;\n E = E + this.E | 0;\n F = F + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n constructor(outputLen = 32){\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n}\nclass SHA224 extends SHA256 {\n constructor(){\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (()=>split([\n '0x428a2f98d728ae22',\n '0x7137449123ef65cd',\n '0xb5c0fbcfec4d3b2f',\n '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538',\n '0x59f111f1b605d019',\n '0x923f82a4af194f9b',\n '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242',\n '0x12835b0145706fbe',\n '0x243185be4ee4b28c',\n '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f',\n '0x80deb1fe3b1696b1',\n '0x9bdc06a725c71235',\n '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2',\n '0xefbe4786384f25e3',\n '0x0fc19dc68b8cd5b5',\n '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275',\n '0x4a7484aa6ea6e483',\n '0x5cb0a9dcbd41fbd4',\n '0x76f988da831153b5',\n '0x983e5152ee66dfab',\n '0xa831c66d2db43210',\n '0xb00327c898fb213f',\n '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2',\n '0xd5a79147930aa725',\n '0x06ca6351e003826f',\n '0x142929670a0e6e70',\n '0x27b70a8546d22ffc',\n '0x2e1b21385c26c926',\n '0x4d2c6dfc5ac42aed',\n '0x53380d139d95b3df',\n '0x650a73548baf63de',\n '0x766a0abb3c77b2a8',\n '0x81c2c92e47edaee6',\n '0x92722c851482353b',\n '0xa2bfe8a14cf10364',\n '0xa81a664bbc423001',\n '0xc24b8b70d0f89791',\n '0xc76c51a30654be30',\n '0xd192e819d6ef5218',\n '0xd69906245565a910',\n '0xf40e35855771202a',\n '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8',\n '0x1e376c085141ab53',\n '0x2748774cdf8eeb99',\n '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63',\n '0x4ed8aa4ae3418acb',\n '0x5b9cca4f7763e373',\n '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc',\n '0x78a5636f43172f60',\n '0x84c87814a1f0ab72',\n '0x8cc702081a6439ec',\n '0x90befffa23631e28',\n '0xa4506cebde82bde9',\n '0xbef9a3f7b2c67915',\n '0xc67178f2e372532b',\n '0xca273eceea26619c',\n '0xd186b8c721c0c207',\n '0xeada7dd6cde0eb1e',\n '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba',\n '0x0a637dc5a2c898a6',\n '0x113f9804bef90dae',\n '0x1b710b35131c471b',\n '0x28db77f523047d84',\n '0x32caab7b40c72493',\n '0x3c9ebe0a15c9bebc',\n '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6',\n '0x597f299cfc657e2a',\n '0x5fcb6fab3ad6faec',\n '0x6c44198c4a475817'\n ].map((n)=>BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (()=>K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (()=>K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends HashMD {\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [\n Ah,\n Al,\n Bh,\n Bl,\n Ch,\n Cl,\n Dh,\n Dl,\n Eh,\n El,\n Fh,\n Fl,\n Gh,\n Gl,\n Hh,\n Hl\n ];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for(let i = 0; i < 16; i++, offset += 4){\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32(offset += 4);\n }\n for(let i = 16; i < 80; i++){\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);\n const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);\n const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for(let i = 0; i < 80; i++){\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);\n const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = Eh & Fh ^ ~Eh & Gh;\n const CHIl = El & Fl ^ ~El & Gl;\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);\n const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39);\n const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch;\n const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl;\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = add3L(T1l, sigma0l, MAJl);\n Ah = add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n constructor(outputLen = 64){\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n}\nclass SHA384 extends SHA512 {\n constructor(){\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */ const sha256 = /* @__PURE__ */ createHasher(()=>new SHA256());\n/** SHA2-224 hash function from RFC 4634 */ const sha224 = /* @__PURE__ */ createHasher(()=>new SHA224());\n/** SHA2-512 hash function from RFC 4634. */ const sha512 = /* @__PURE__ */ createHasher(()=>new SHA512());\n/** SHA2-384 hash function from RFC 4634. */ const sha384 = /* @__PURE__ */ createHasher(()=>new SHA384());\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor(let round = 0, R = _1n, x = 1, y = 0; round < 24; round++){\n // Pi\n [x, y] = [\n y,\n (2 * x + 3 * y) % 5\n ];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);\n // Iota\n let t = _0n;\n for(let j = 0; j < 7; j++){\n R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n;\n if (R & _2n) t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n;\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s)=>s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);\nconst rotlL = (h, l, s)=>s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);\n/** `keccakf1600` internal function, additionally allows to adjust round count. */ function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for(let round = 24 - rounds; round < 24; round++){\n // Theta θ\n for(let x = 0; x < 10; x++)B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for(let x = 0; x < 10; x += 2){\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for(let y = 0; y < 50; y += 10){\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for(let t = 0; t < 24; t++){\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for(let y = 0; y < 50; y += 10){\n for(let x = 0; x < 10; x++)B[x] = s[y + x];\n for(let x = 0; x < 10; x++)s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */ class Keccak extends Hash {\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for(let pos = 0; pos < len;){\n const take = Math.min(blockLen - this.pos, len - pos);\n for(let i = 0; i < take; i++)state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for(let pos = 0, len = out.length; pos < len;){\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24){\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200)) throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n}\nconst gen = (suffix, blockLen, outputLen)=>createHasher(()=>new Keccak(blockLen, suffix, outputLen));\n/** SHA3-224 hash function. */ const sha3_224 = /* @__PURE__ */ (()=>gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */ const sha3_256 = /* @__PURE__ */ (()=>gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */ const sha3_384 = /* @__PURE__ */ (()=>gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */ const sha3_512 = /* @__PURE__ */ (()=>gen(0x06, 72, 512 / 8))();\n\n/**\n * \"globalThis\" ponyfill.\n * @see [A horrifying globalThis polyfill in universal JavaScript](https://mathiasbynens.be/notes/globalthis)\n * @type {Object.<string, *>}\n */ const globalScope = (()=>{\n if (typeof globalThis === \"object\") return globalThis;\n else {\n Object.defineProperty(Object.prototype, \"__GLOBALTHIS__\", {\n get () {\n return this;\n },\n configurable: true\n });\n try {\n // @ts-expect-error\n // eslint-disable-next-line no-undef\n if (typeof __GLOBALTHIS__ !== \"undefined\") return __GLOBALTHIS__;\n } finally{\n // @ts-expect-error\n delete Object.prototype.__GLOBALTHIS__;\n }\n }\n // Still unable to determine \"globalThis\", fall back to a naive method.\n if (typeof self !== \"undefined\") return self;\n else if (typeof window !== \"undefined\") return window;\n else if (typeof global !== \"undefined\") return global;\n return undefined;\n})();\n\n/**\n * @noble/hashes hash functions.\n * @type {Object.<string, sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512>}\n */ const nobleHashes = {\n SHA1: sha1,\n SHA224: sha224,\n SHA256: sha256,\n SHA384: sha384,\n SHA512: sha512,\n \"SHA3-224\": sha3_224,\n \"SHA3-256\": sha3_256,\n \"SHA3-384\": sha3_384,\n \"SHA3-512\": sha3_512\n};\n/**\n * Canonicalizes a hash algorithm name.\n * @param {string} algorithm Hash algorithm name.\n * @returns {\"SHA1\"|\"SHA224\"|\"SHA256\"|\"SHA384\"|\"SHA512\"|\"SHA3-224\"|\"SHA3-256\"|\"SHA3-384\"|\"SHA3-512\"} Canonicalized hash algorithm name.\n */ const canonicalizeAlgorithm = (algorithm)=>{\n switch(true){\n case /^(?:SHA-?1|SSL3-SHA1)$/i.test(algorithm):\n return \"SHA1\";\n case /^SHA(?:2?-)?224$/i.test(algorithm):\n return \"SHA224\";\n case /^SHA(?:2?-)?256$/i.test(algorithm):\n return \"SHA256\";\n case /^SHA(?:2?-)?384$/i.test(algorithm):\n return \"SHA384\";\n case /^SHA(?:2?-)?512$/i.test(algorithm):\n return \"SHA512\";\n case /^SHA3-224$/i.test(algorithm):\n return \"SHA3-224\";\n case /^SHA3-256$/i.test(algorithm):\n return \"SHA3-256\";\n case /^SHA3-384$/i.test(algorithm):\n return \"SHA3-384\";\n case /^SHA3-512$/i.test(algorithm):\n return \"SHA3-512\";\n default:\n throw new TypeError(`Unknown hash algorithm: ${algorithm}`);\n }\n};\n/**\n * Calculates an HMAC digest.\n * @param {string} algorithm Algorithm.\n * @param {Uint8Array} key Key.\n * @param {Uint8Array} message Message.\n * @returns {Uint8Array} Digest.\n */ const hmacDigest = (algorithm, key, message)=>{\n if (hmac) {\n const hash = nobleHashes[algorithm] ?? nobleHashes[canonicalizeAlgorithm(algorithm)];\n return hmac(hash, key, message);\n } else {\n throw new Error(\"Missing HMAC function\");\n }\n};\n\n/**\n * RFC 4648 base32 alphabet without pad.\n * @type {string}\n */ const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n/**\n * Converts a base32 string to an Uint8Array (RFC 4648).\n * @see [LinusU/base32-decode](https://github.com/LinusU/base32-decode)\n * @param {string} str Base32 string.\n * @returns {Uint8Array} Uint8Array.\n */ const base32Decode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n // Canonicalize to all upper case and remove padding if it exists.\n let end = str.length;\n while(str[end - 1] === \"=\")--end;\n str = (end < str.length ? str.substring(0, end) : str).toUpperCase();\n const buf = new ArrayBuffer(str.length * 5 / 8 | 0);\n const arr = new Uint8Array(buf);\n let bits = 0;\n let value = 0;\n let index = 0;\n for(let i = 0; i < str.length; i++){\n const idx = ALPHABET.indexOf(str[i]);\n if (idx === -1) throw new TypeError(`Invalid character found: ${str[i]}`);\n value = value << 5 | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n arr[index++] = value >>> bits;\n }\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a base32 string (RFC 4648).\n * @see [LinusU/base32-encode](https://github.com/LinusU/base32-encode)\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Base32 string.\n */ const base32Encode = (arr)=>{\n let bits = 0;\n let value = 0;\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n value = value << 8 | arr[i];\n bits += 8;\n while(bits >= 5){\n str += ALPHABET[value >>> bits - 5 & 31];\n bits -= 5;\n }\n }\n if (bits > 0) {\n str += ALPHABET[value << 5 - bits & 31];\n }\n return str;\n};\n\n/**\n * Converts a hexadecimal string to an Uint8Array.\n * @param {string} str Hexadecimal string.\n * @returns {Uint8Array} Uint8Array.\n */ const hexDecode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n const buf = new ArrayBuffer(str.length / 2);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i += 2){\n arr[i / 2] = parseInt(str.substring(i, i + 2), 16);\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a hexadecimal string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Hexadecimal string.\n */ const hexEncode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n const hex = arr[i].toString(16);\n if (hex.length === 1) str += \"0\";\n str += hex;\n }\n return str.toUpperCase();\n};\n\n/**\n * Converts a Latin-1 string to an Uint8Array.\n * @param {string} str Latin-1 string.\n * @returns {Uint8Array} Uint8Array.\n */ const latin1Decode = (str)=>{\n const buf = new ArrayBuffer(str.length);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i++){\n arr[i] = str.charCodeAt(i) & 0xff;\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a Latin-1 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Latin-1 string.\n */ const latin1Encode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n str += String.fromCharCode(arr[i]);\n }\n return str;\n};\n\n/**\n * TextEncoder instance.\n * @type {TextEncoder|null}\n */ const ENCODER = globalScope.TextEncoder ? new globalScope.TextEncoder() : null;\n/**\n * TextDecoder instance.\n * @type {TextDecoder|null}\n */ const DECODER = globalScope.TextDecoder ? new globalScope.TextDecoder() : null;\n/**\n * Converts an UTF-8 string to an Uint8Array.\n * @param {string} str String.\n * @returns {Uint8Array} Uint8Array.\n */ const utf8Decode = (str)=>{\n if (!ENCODER) {\n throw new Error(\"Encoding API not available\");\n }\n return ENCODER.encode(str);\n};\n/**\n * Converts an Uint8Array to an UTF-8 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} String.\n */ const utf8Encode = (arr)=>{\n if (!DECODER) {\n throw new Error(\"Encoding API not available\");\n }\n return DECODER.decode(arr);\n};\n\n/**\n * Returns random bytes.\n * @param {number} size Size.\n * @returns {Uint8Array} Random bytes.\n */ const randomBytes = (size)=>{\n if (globalScope.crypto?.getRandomValues) {\n return globalScope.crypto.getRandomValues(new Uint8Array(size));\n } else {\n throw new Error(\"Cryptography API not available\");\n }\n};\n\n/**\n * OTP secret key.\n */ class Secret {\n /**\n * Converts a Latin-1 string to a Secret object.\n * @param {string} str Latin-1 string.\n * @returns {Secret} Secret object.\n */ static fromLatin1(str) {\n return new Secret({\n buffer: latin1Decode(str).buffer\n });\n }\n /**\n * Converts an UTF-8 string to a Secret object.\n * @param {string} str UTF-8 string.\n * @returns {Secret} Secret object.\n */ static fromUTF8(str) {\n return new Secret({\n buffer: utf8Decode(str).buffer\n });\n }\n /**\n * Converts a base32 string to a Secret object.\n * @param {string} str Base32 string.\n * @returns {Secret} Secret object.\n */ static fromBase32(str) {\n return new Secret({\n buffer: base32Decode(str).buffer\n });\n }\n /**\n * Converts a hexadecimal string to a Secret object.\n * @param {string} str Hexadecimal string.\n * @returns {Secret} Secret object.\n */ static fromHex(str) {\n return new Secret({\n buffer: hexDecode(str).buffer\n });\n }\n /**\n * Secret key buffer.\n * @deprecated For backward compatibility, the \"bytes\" property should be used instead.\n * @type {ArrayBufferLike}\n */ get buffer() {\n return this.bytes.buffer;\n }\n /**\n * Latin-1 string representation of secret key.\n * @type {string}\n */ get latin1() {\n Object.defineProperty(this, \"latin1\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: latin1Encode(this.bytes)\n });\n return this.latin1;\n }\n /**\n * UTF-8 string representation of secret key.\n * @type {string}\n */ get utf8() {\n Object.defineProperty(this, \"utf8\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: utf8Encode(this.bytes)\n });\n return this.utf8;\n }\n /**\n * Base32 string representation of secret key.\n * @type {string}\n */ get base32() {\n Object.defineProperty(this, \"base32\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: base32Encode(this.bytes)\n });\n return this.base32;\n }\n /**\n * Hexadecimal string representation of secret key.\n * @type {string}\n */ get hex() {\n Object.defineProperty(this, \"hex\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: hexEncode(this.bytes)\n });\n return this.hex;\n }\n /**\n * Creates a secret key object.\n * @param {Object} [config] Configuration options.\n * @param {ArrayBufferLike} [config.buffer] Secret key buffer.\n * @param {number} [config.size=20] Number of random bytes to generate, ignored if 'buffer' is provided.\n */ constructor({ buffer, size = 20 } = {}){\n /**\n * Secret key.\n * @type {Uint8Array}\n * @readonly\n */ this.bytes = typeof buffer === \"undefined\" ? randomBytes(size) : new Uint8Array(buffer);\n // Prevent the \"bytes\" property from being modified.\n Object.defineProperty(this, \"bytes\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: this.bytes\n });\n }\n}\n\n/**\n * Returns true if a is equal to b, without leaking timing information that would allow an attacker to guess one of the values.\n * @param {string} a String a.\n * @param {string} b String b.\n * @returns {boolean} Equality result.\n */ const timingSafeEqual = (a, b)=>{\n {\n if (a.length !== b.length) {\n throw new TypeError(\"Input strings must have the same length\");\n }\n let i = -1;\n let out = 0;\n while(++i < a.length){\n out |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return out === 0;\n }\n};\n\n/**\n * HOTP: An HMAC-based One-time Password Algorithm.\n * @see [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)\n */ class HOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * counter: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n counter: 0,\n window: 1\n };\n }\n /**\n * Generates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @returns {string} Token.\n */ static generate({ secret, algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter }) {\n const digest = hmacDigest(algorithm, secret.bytes, uintDecode(counter));\n const offset = digest[digest.byteLength - 1] & 15;\n const otp = ((digest[offset] & 127) << 24 | (digest[offset + 1] & 255) << 16 | (digest[offset + 2] & 255) << 8 | digest[offset + 3] & 255) % 10 ** digits;\n return otp.toString().padStart(digits, \"0\");\n }\n /**\n * Generates an HOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.counter=this.counter++] Counter value.\n * @returns {string} Token.\n */ generate({ counter = this.counter++ } = {}) {\n return HOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter\n });\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, window = HOTP.defaults.window }) {\n // Return early if the token length does not match the digit number.\n if (token.length !== digits) return null;\n let delta = null;\n const check = (/** @type {number} */ i)=>{\n const generatedToken = HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: i\n });\n if (timingSafeEqual(token, generatedToken)) {\n delta = i - counter;\n }\n };\n check(counter);\n for(let i = 1; i <= window && delta === null; ++i){\n check(counter - i);\n if (delta !== null) break;\n check(counter + i);\n if (delta !== null) break;\n }\n return delta;\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.counter=this.counter] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, counter = this.counter, window }) {\n return HOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://hotp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `counter=${e(this.counter)}`;\n }\n /**\n * Creates an HOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Initial counter value.\n */ constructor({ issuer = HOTP.defaults.issuer, label = HOTP.defaults.label, issuerInLabel = HOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Initial counter value.\n * @type {number}\n */ this.counter = counter;\n }\n}\n\n/**\n * TOTP: Time-Based One-Time Password Algorithm.\n * @see [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)\n */ class TOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * period: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n period: 30,\n window: 1\n };\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ static counter({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return Math.floor(timestamp / 1000 / period);\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ counter({ timestamp = Date.now() } = {}) {\n return TOTP.counter({\n period: this.period,\n timestamp\n });\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ static remaining({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return period * 1000 - timestamp % (period * 1000);\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ remaining({ timestamp = Date.now() } = {}) {\n return TOTP.remaining({\n period: this.period,\n timestamp\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ static generate({ secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now() }) {\n return HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n })\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ generate({ timestamp = Date.now() } = {}) {\n return TOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now(), window }) {\n return HOTP.validate({\n token,\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n }),\n window\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, timestamp, window }) {\n return TOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n window\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://totp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `period=${e(this.period)}`;\n }\n /**\n * Creates a TOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n */ constructor({ issuer = TOTP.defaults.issuer, label = TOTP.defaults.label, issuerInLabel = TOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = TOTP.defaults.algorithm, digits = TOTP.defaults.digits, period = TOTP.defaults.period } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Token time-step duration.\n * @type {number}\n */ this.period = period;\n }\n}\n\n/**\n * Key URI regex (otpauth://TYPE/[ISSUER:]LABEL?PARAMETERS).\n * @type {RegExp}\n */ const OTPURI_REGEX = /^otpauth:\\/\\/([ht]otp)\\/(.+)\\?([A-Z0-9.~_-]+=[^?&]*(?:&[A-Z0-9.~_-]+=[^?&]*)*)$/i;\n/**\n * RFC 4648 base32 alphabet with pad.\n * @type {RegExp}\n */ const SECRET_REGEX = /^[2-7A-Z]+=*$/i;\n/**\n * Regex for supported algorithms.\n * @type {RegExp}\n */ const ALGORITHM_REGEX = /^SHA(?:1|224|256|384|512|3-224|3-256|3-384|3-512)$/i;\n/**\n * Integer regex.\n * @type {RegExp}\n */ const INTEGER_REGEX = /^[+-]?\\d+$/;\n/**\n * Positive integer regex.\n * @type {RegExp}\n */ const POSITIVE_INTEGER_REGEX = /^\\+?[1-9]\\d*$/;\n/**\n * HOTP/TOTP object/string conversion.\n * @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)\n */ class URI {\n /**\n * Parses a Google Authenticator key URI and returns an HOTP/TOTP object.\n * @param {string} uri Google Authenticator Key URI.\n * @returns {HOTP|TOTP} HOTP/TOTP object.\n */ static parse(uri) {\n let uriGroups;\n try {\n uriGroups = uri.match(OTPURI_REGEX);\n // eslint-disable-next-line no-unused-vars\n } catch (_) {\n /* Handled below */ }\n if (!Array.isArray(uriGroups)) {\n throw new URIError(\"Invalid URI format\");\n }\n // Extract URI groups.\n const uriType = uriGroups[1].toLowerCase();\n const uriLabel = uriGroups[2].split(/(?::|%3A) *(.+)/i, 2).map(decodeURIComponent);\n /** @type {Object.<string, string>} */ const uriParams = uriGroups[3].split(\"&\").reduce((acc, cur)=>{\n const pairArr = cur.split(/=(.*)/, 2).map(decodeURIComponent);\n const pairKey = pairArr[0].toLowerCase();\n const pairVal = pairArr[1];\n /** @type {Object.<string, string>} */ const pairAcc = acc;\n pairAcc[pairKey] = pairVal;\n return pairAcc;\n }, {});\n // 'OTP' will be instantiated with 'config' argument.\n let OTP;\n const config = {};\n if (uriType === \"hotp\") {\n OTP = HOTP;\n // Counter: required\n if (typeof uriParams.counter !== \"undefined\" && INTEGER_REGEX.test(uriParams.counter)) {\n config.counter = parseInt(uriParams.counter, 10);\n } else {\n throw new TypeError(\"Missing or invalid 'counter' parameter\");\n }\n } else if (uriType === \"totp\") {\n OTP = TOTP;\n // Period: optional\n if (typeof uriParams.period !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.period)) {\n config.period = parseInt(uriParams.period, 10);\n } else {\n throw new TypeError(\"Invalid 'period' parameter\");\n }\n }\n } else {\n throw new TypeError(\"Unknown OTP type\");\n }\n // Label: required\n // Issuer: optional\n if (typeof uriParams.issuer !== \"undefined\") {\n config.issuer = uriParams.issuer;\n }\n if (uriLabel.length === 2) {\n config.label = uriLabel[1];\n if (typeof config.issuer === \"undefined\" || config.issuer === \"\") {\n config.issuer = uriLabel[0];\n } else if (uriLabel[0] === \"\") {\n config.issuerInLabel = false;\n }\n } else {\n config.label = uriLabel[0];\n if (typeof config.issuer !== \"undefined\" && config.issuer !== \"\") {\n config.issuerInLabel = false;\n }\n }\n // Secret: required\n if (typeof uriParams.secret !== \"undefined\" && SECRET_REGEX.test(uriParams.secret)) {\n config.secret = uriParams.secret;\n } else {\n throw new TypeError(\"Missing or invalid 'secret' parameter\");\n }\n // Algorithm: optional\n if (typeof uriParams.algorithm !== \"undefined\") {\n if (ALGORITHM_REGEX.test(uriParams.algorithm)) {\n config.algorithm = uriParams.algorithm;\n } else {\n throw new TypeError(\"Invalid 'algorithm' parameter\");\n }\n }\n // Digits: optional\n if (typeof uriParams.digits !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.digits)) {\n config.digits = parseInt(uriParams.digits, 10);\n } else {\n throw new TypeError(\"Invalid 'digits' parameter\");\n }\n }\n return new OTP(config);\n }\n /**\n * Converts an HOTP/TOTP object to a Google Authenticator key URI.\n * @param {HOTP|TOTP} otp HOTP/TOTP object.\n * @returns {string} Google Authenticator Key URI.\n */ static stringify(otp) {\n if (otp instanceof HOTP || otp instanceof TOTP) {\n return otp.toString();\n }\n throw new TypeError(\"Invalid 'HOTP/TOTP' object\");\n }\n}\n\n/**\n * Library version.\n * @type {string}\n */ const version = \"9.4.1\";\n\nexport { HOTP, Secret, TOTP, URI, version };\n","import { Frame, FrameLocator, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex, SmartSelector, ProboLogLevel, TotpConfig, interpolateTemplate } from '@probolabs/probo-shared';\nimport { findClosestVisibleElement } from './actions';\nimport { proboLogger } from './probo-logger';\nimport { OTP } from './otp';\nimport { NavTracker } from './nav-tracker';\nimport * as OTPAuth from 'otpauth';\n\nexport interface RunStepParams extends Partial<PlaywrightTimeoutConfig> {\n iframeSelector?: string;\n elementSelector?: string;\n smartSelector?: SmartSelector | null;\n smartIFrameSelector?: SmartSelector | null;\n action: PlaywrightAction;\n argument?: string | string[]; \n annotation?: string;\n // Wait-for specific configuration\n pollingInterval?: number;\n timeout?: number;\n // TOTP specific configuration\n totpConfig?: TotpConfig;\n}\n\nexport interface RunStepResult {\n key: string;\n value: any\n}\n\nexport interface ProboPlaywrightConfig {\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n enableSmartSelectors?: boolean; \n debugLevel?: ProboLogLevel;\n}\n\nexport class ProboPlaywright {\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n private params: Record<string, any> = {};\n \n constructor({ enableSmartSelectors = false, timeoutConfig = {}, debugLevel = ProboLogLevel.INFO }: ProboPlaywrightConfig, page: Page | null = null) {\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...timeoutConfig\n };\n this.setPage(page);\n proboLogger.setLogLevel(debugLevel);\n }\n \n /**\n * Sets the Playwright page instance for this ProboPlaywright instance.\n * Also applies the configured default navigation and action timeouts to the page.\n * \n * @param page - The Playwright Page instance to use, or null to unset.\n */\n public setPage(page: Page | null) {\n this.page = page;\n if (this.page) {\n this.page.setDefaultNavigationTimeout(this.timeoutConfig.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.timeoutConfig.playwrightActionTimeout);\n \n }\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n const context = { ...this.params, ...additionalContext };\n return interpolateTemplate(str, context);\n }\n\n /**\n * Executes a single step in the test scenario with the specified action on the target element.\n * Handles iframe navigation, element highlighting, and various Playwright actions like click, fill, validate, etc.\n * \n * @param params - Configuration object containing element selectors, action type, arguments, and display options\n * @returns Promise that resolves to a string for extract actions, boolean for assert actions, or void for other actions\n * @throws Error if element is not found or validation fails\n */\n public async runStep(params: RunStepParams): Promise<string | boolean | void> {\n \n let { \n action, \n argument = '', \n iframeSelector = '', \n elementSelector = '', \n smartSelector = null,\n smartIFrameSelector = null,\n annotation = '', \n } = params;\n \n // 0. Check that page is set\n if (!this.page) {\n throw new Error('Page is not set');\n }\n \n // Interpolate argument if it's a string with template literals\n if (typeof argument === 'string' && argument.includes('${')) {\n argument = this.interpolate(argument);\n } else if (Array.isArray(argument)) {\n // Handle array arguments (e.g., for UPLOAD_FILES or SELECT_DROPDOWN)\n argument = argument.map((arg: any) => {\n if (typeof arg === 'string' && arg.includes('${')) {\n return this.interpolate(arg);\n }\n return arg;\n });\n }\n \n // 1. Check if we need to visit a url\n if (action === PlaywrightAction.VISIT_URL || action === PlaywrightAction.VISIT_BASE_URL) {\n try {\n await this.page.goto(argument as string, { timeout: this.timeoutConfig.playwrightNavigationTimeout });\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n \n // 2. Check if we need to assert the url\n if (action === PlaywrightAction.ASSERT_URL) {\n // wait for page to stabilize\n const navTracker = await NavTracker.getInstance(this.page, { waitForStabilityQuietTimeout: this.timeoutConfig.playwrightNavigationTimeout });\n await navTracker.waitForNavigationToStabilize();\n const currentUrl = await this.page.url();\n if (currentUrl !== argument as string) {\n throw new Error(`Assertion failed: Expected URL \"${argument}\" but got \"${currentUrl}\".`);\n }\n return;\n }\n \n // 3. Check if we need to type keys\n if (action === PlaywrightAction.TYPE_KEYS) {\n await this.robustTypeKeys(argument as string);\n return;\n }\n \n // 4. Get the locator (iframe or not)\n const startTime = Date.now();\n let locator: Locator;\n \n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocator(iframeSelector, smartIFrameSelector, true) as FrameLocator;\n locator = await this.getLocator(elementSelector, smartSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocator(elementSelector, smartSelector) as Locator;\n }\n \n \n // Fail fast: immediately validate that the element exists for non-wait actions\n const locator_timeout = (action === PlaywrightAction.WAIT_FOR) ? (params.timeout as number) || 10000 : this.timeoutConfig.playwrightLocatorTimeout;\n try {\n await locator.waitFor({ state: 'attached', timeout: locator_timeout });\n } catch (e) {\n if (this.enableSmartSelectors) { //fallback to CSS selector\n try {\n proboLogger.warn(`Element not found with smart selector: ${JSON.stringify(smartSelector)} ${smartIFrameSelector ? `with iframe smart selector: ${JSON.stringify(smartIFrameSelector)}` : ''}. Falling back to CSS selector`);\n if (iframeSelector && iframeSelector.length > 0) {\n const frameLocator: FrameLocator = await this.getLocatorOrFrame(iframeSelector, true) as FrameLocator;\n locator = await this.getLocatorOrFrame(elementSelector, false, frameLocator) as Locator;\n } else {\n locator = await this.getLocatorOrFrame(elementSelector, false) as Locator;\n }\n await locator.waitFor({ state: 'attached', timeout: 200 }); //only small timeout is needed as we've already waited for the locator_timeout\n } catch (e) {\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n }\n else {\n throw new Error(`Element not found with CSS selector: ${elementSelector} ${iframeSelector ? `in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\n }\n }\n \n if (action === PlaywrightAction.HOVER) {\n const visibleLocator = await findClosestVisibleElement(locator);\n if (visibleLocator) {\n locator = visibleLocator;\n }\n }\n \n // 5. Highlight, wait, unhighlight if highlightTimeout > 0\n if (this.timeoutConfig.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.timeoutConfig.highlightTimeout);\n await this.unhighlight(locator);\n }\n \n // 6. Action logic\n switch (action) {\n case PlaywrightAction.CLICK:\n case PlaywrightAction.CHECK_CHECKBOX:\n case PlaywrightAction.SELECT_RADIO:\n await this.robustMouseAction(locator, 'click');\n break;\n case PlaywrightAction.FILL_IN:\n await this.robustFill(locator, argument as string);\n break; \n case PlaywrightAction.SELECT_DROPDOWN:\n await locator.selectOption(argument, { timeout: this.timeoutConfig.playwrightActionTimeout });\n break; \n case PlaywrightAction.SET_SLIDER:\n await this.setSliderValue(locator, argument as string);\n break;\n case PlaywrightAction.WAIT_FOR_OTP:\n // till we figure out how to get the inbox name we will wait for ANY OTP in all inboxes \n const otp = await OTP.waitForOTP({ checkRecentMessagesSinceMs: 120_000 });\n if (otp) {\n proboLogger.log(`✅ OTP found: ${otp}`);\n await locator.fill(otp, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n proboLogger.log(`❌ OTP not found`);\n }\n break;\n case PlaywrightAction.GEN_TOTP:\n // Use secret from argument and auxiliary config (digits/algorithm) from totpConfig\n const totpAux = (params as any).totpConfig;\n const secretArg = (params as any).argument as string;\n if (secretArg && totpAux) {\n try {\n const totpCode = this.generateOTP(secretArg, totpAux.digits || 6, totpAux.algorithm || 'SHA1');\n proboLogger.log(`✅ TOTP generated`);\n await locator.fill(totpCode, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } catch (error) {\n proboLogger.error(`❌ TOTP generation failed: ${error}`);\n throw new Error(`TOTP generation failed: ${error}`);\n }\n } else {\n proboLogger.log(`❌ Missing TOTP argument or config`);\n throw new Error(`Missing TOTP argument or config`);\n }\n break;\n \n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\n const containerText = await this.getTextValue(locator);\n if (!matchRegex(containerText, argument as string)) {\n throw new Error(`Validation failed. Expected text \"${containerText}\" to match \"${argument}\".`);\n }\n return true; // Return true for successful assertion\n case PlaywrightAction.ASSERT_EXACT_VALUE:\n const actualText = await this.getTextValue(locator);\n \n if (actualText !== argument) {\n throw new Error(`Validation failed. Expected text \"${argument}\", but got \"${actualText}\".`);\n }\n return true; // Return true for successful assertion\n case PlaywrightAction.HOVER: \n if (locator) {\n await this.robustMouseAction(locator, 'hover');\n } else {\n throw new Error('not executing HOVER because no visible ancestor found');\n }\n break;\n case PlaywrightAction.SCROLL_TO_ELEMENT:\n // Restore exact scroll positions from recording\n const scrollData = JSON.parse(argument as string);\n try {\n proboLogger.log('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\n // el.scrollTop = scrollData.scrollTop;\n // el.scrollLeft = scrollData.scrollLeft;\n el.scrollTo({left: scrollData.scrollLeft, top: scrollData.scrollTop, behavior: 'smooth'});\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } catch (e) {\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\n }\n await this.page.waitForTimeout(500);\n break;\n case PlaywrightAction.UPLOAD_FILES:\n await locator.setInputFiles(argument as string[], { timeout: this.timeoutConfig.playwrightActionTimeout });\n break;\n case PlaywrightAction.EXTRACT_VALUE:\n let extractedText = await this.getTextValue(locator);\n return extractedText;\n case PlaywrightAction.WAIT_FOR: \n const expectedText = argument as string;\n const pollingInterval = (params.pollingInterval as number) || 500; // Default 500ms\n const timeout = (params.timeout as number) || 10000; // Default 10 seconds\n \n let textMatches = false; \n let currentText = ''; \n while (!textMatches && (Date.now() - startTime) < timeout) {\n try { \n // Check if element is visible first\n const isVisible = await locator.isVisible();\n \n if (isVisible) {\n // Get the current text content only if element is visible\n currentText = await this.getTextValue(locator);\n \n // Check if the text matches (using the same logic as ASSERT_CONTAINS_VALUE)\n if (matchRegex(currentText, expectedText)) {\n textMatches = true;\n proboLogger.log(`✅ Wait for text completed successfully. Found: \"${currentText}\"`);\n } else {\n // Text doesn't match yet, wait for the polling interval\n if ((Date.now() - startTime) < timeout) {\n await this.page.waitForTimeout(pollingInterval);\n }\n }\n } else {\n // Element is not visible, wait for the polling interval\n if ((Date.now() - startTime) < timeout) {\n await this.page.waitForTimeout(pollingInterval);\n }\n }\n } catch (e) {\n throw new Error(`Wait for text failed while trying to extract text from selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''}`);\n }\n }\n \n // Timeout reached without a match\n if (!textMatches) { \n throw new Error(`Wait for text failed. Expected \"${expectedText}\" to match \"${currentText}\" after ${timeout}ms of polling every ${pollingInterval}ms`);\n } \n break;\n default:\n throw new Error(`Unhandled action: ${action}`);\n }\n }\n\n /**\n * Public method to generate TOTP code using the provided secret, digits, and algorithm\n * @param secret - The TOTP secret (base32 encoded)\n * @param digits - Number of digits in the TOTP code (default: 6)\n * @param algorithm - Hash algorithm to use (default: 'SHA1')\n * @returns The generated TOTP code\n */\n public generateOTP(secret: string, digits: number = 6, algorithm: string = 'SHA1'): string {\n const otp = new OTPAuth.TOTP({\n algorithm,\n digits, \n secret,\n });\n return otp.generate();\n }\n \n private async getLocator(elementSelector: string, smartSelector: SmartSelector | null, getIFrameLocator: boolean = false, frameLocator: FrameLocator | null = null) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (this.enableSmartSelectors && smartSelector && Object.keys(smartSelector).length > 0) {\n const { strategy, selector, index, label_selector } = smartSelector; \n proboLogger.debug(`getLocator: smartSelector=${JSON.stringify(smartSelector)}`);\n let labelLocator: Locator;\n let combinedSelector: string;\n let id;\n const mainStrategy = smartSelector.strategy.split(' ')[0]; //extract the main strategy from the full strategy string\n switch(mainStrategy) {\n case 'role': \n case 'placeholder':\n case 'name':\n case 'data-testid':\n case 'id':\n case 'css':\n case 'class':\n proboLogger.debug(`getLocator: strategy=${mainStrategy}, index=${index}`);\n if (typeof index === 'number') { \n const matchedLocators: Locator|FrameLocator = await this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n if (!getIFrameLocator) {\n proboLogger.debug(`getLocator: matched ${await (matchedLocators as Locator).count()} elements`);\n for (const [index, element] of (await (matchedLocators as Locator).all()).entries()) {\n // Get outerHTML\n const html = await element.evaluate(el => el.outerHTML);\n proboLogger.debug(`[${index}] ${html}`);\n }\n }\n return matchedLocators.nth(index);\n }\n else {\n return this.getLocatorOrFrame(selector, getIFrameLocator, frameLocator);\n } \n case 'label':\n if (smartSelector.strategy === 'label for') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false,frameLocator) as Locator;\n id = await labelLocator.getAttribute('for');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('for')=${id}`);\n combinedSelector = selector ? `#${id} > ${selector}` : `#${id}`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else if (smartSelector.strategy === 'label by') {\n proboLogger.debug(`getLocator: strategy=${smartSelector.strategy}, label_selector=${label_selector}`);\n labelLocator = this.getLocatorOrFrame(label_selector as string, false, frameLocator) as Locator;\n id = await labelLocator.getAttribute('id');\n proboLogger.debug(`getLocator: labelLocator.getAttribute('id')=${id}`);\n combinedSelector = selector ? `[aria-labelledby=\"${id}\"] > ${selector}` : `[aria-labelledby=\"${id}\"]`;\n proboLogger.debug(`getLocator: combinedSelector=${combinedSelector}`);\n return this.getLocatorOrFrame(combinedSelector, getIFrameLocator, frameLocator);\n }\n else {\n throw new Error(`Unsupported label strategy: ${smartSelector.strategy}`); \n }\n default:\n throw new Error(`Unsupported smart selector strategy: ${strategy}`);\n }\n }\n // fallback to standard locator\n return this.getLocatorOrFrame(elementSelector, getIFrameLocator, frameLocator);\n }\n \n private getLocatorOrFrame(selector: string, getIFrameLocator: boolean, frameLocator: FrameLocator | null = null) : Locator | FrameLocator {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n if (getIFrameLocator) {\n proboLogger.debug(`getLocatorOrFrame: getting frame locator for selector=${selector}`);\n if (frameLocator) {\n throw new Error(`getLocatorOrFrame: frameLocator must be null when getIFrameLocator is true`);\n }\n return this.page.frameLocator(selector);\n }\n proboLogger.debug(`getLocatorOrFrame: ${frameLocator ? `frameLocator.locator(\"${selector}\")` : `page.locator(\"${selector}\")`}`);\n return frameLocator ? frameLocator.locator(selector) : this.page.locator(selector);\n }\n\n\n /**\n * Creates a visual highlight overlay on the target element with optional annotation text.\n * The highlight appears as a red border around the element and can include descriptive text.\n * \n * @param locator - The Playwright locator for the element to highlight\n * @param annotation - Optional text annotation to display above/below the highlighted element\n */\n private async highlight(locator: Locator, annotation: string | null = null) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.createElement('div');\n overlay.id = 'highlight-overlay';\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 2147483647;\n `;\n el.ownerDocument.body.appendChild(overlay);\n const bbox = el.getBoundingClientRect();\n const highlight = el.ownerDocument.createElement('div');\n highlight.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: 2px solid rgb(255, 0, 0);\n transition: all 0.2s ease-in-out;\n `;\n overlay.appendChild(highlight);\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('highlight: failed to run locator.evaluate()', e);\n }\n if (annotation) {\n await locator.evaluate((el: HTMLElement, annotation: string) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n const bbox = el.getBoundingClientRect();\n const annotationEl = el.ownerDocument.createElement('div');\n annotationEl.style.cssText = `\n position: fixed;\n left: ${bbox.x}px;\n top: ${bbox.y - 25}px;\n padding: 2px 6px;\n background-color: rgba(255, 255, 0, 0.6);\n color: black;\n font-size: 16px;\n font-family: 'Courier New', Courier, monospace;\n font-weight: bold;\n border-radius: 3px;\n pointer-events: none;\n z-index: 2147483647;\n `;\n annotationEl.textContent = annotation;\n \n // If element is too close to top of window, position annotation below\n if (bbox.y < 30) {\n annotationEl.style.top = `${bbox.y + bbox.height + 5}px`;\n }\n \n overlay.appendChild(annotationEl);\n }\n }, annotation, { timeout: 500 });\n }\n };\n \n /**\n * Removes the highlight overlay from the target element.\n * Cleans up the visual highlighting created by the highlight method.\n * \n * @param locator - The Playwright locator for the element to unhighlight\n */\n private async unhighlight(locator: Locator) {\n try {\n await locator.evaluate((el: HTMLElement) => {\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\n if (overlay) {\n overlay.remove();\n }\n }, { timeout: 500 });\n } catch (e) {\n proboLogger.log('unhighlight: failed to run locator.evaluate()', e);\n }\n };\n \n /**\n * Attempts to fill a form field with the specified value using multiple fallback strategies.\n * First tries the standard fill method, then falls back to click + type if needed.\n * \n * @param locator - The Playwright locator for the input element\n * @param value - The text value to fill into the input field\n */\n private async robustFill(locator: Locator, value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.fill(), trying fallback', err);\n }\n // fallback: click and type\n try {\n await locator.focus({ timeout: this.timeoutConfig.playwrightActionTimeout });\n await this.page.keyboard.type(value);\n return;\n } catch (err) {\n proboLogger.warn('robustFill: failed to run locator.focus() and page.keyboard.type()', err);\n };\n };\n \n private async robustTypeKeys(value: string) {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n /* try {\n await locator.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run locator.type()', err);\n } */\n // fallback: click and type\n try {\n // await locator.focus(); \n await this.page.keyboard.press(value);\n return;\n } catch (err) {\n proboLogger.warn('robustTypeKeys: failed to run page.keyboard.type()', err);\n }\n }\n \n /**\n * Performs a robust mouse action (click or hover) using multiple fallback strategies.\n * Attempts standard click first, then mouse click at center coordinates, and finally native DOM events.\n * \n * @param locator - The Playwright locator for the element to click\n * @param action - The mouse action to perform ('click' or 'hover')\n * @throws Error if all mouse action methods fail\n */\n private async robustMouseAction(locator: Locator, action: 'click' | 'hover') {\n if (!this.page) {\n throw new Error('Page is not set');\n }\n // start with a standard click\n try {\n if (action === 'click') {\n await locator.click({ noWaitAfter: false, timeout: this.timeoutConfig.playwrightActionTimeout });\n } else if (action === 'hover') {\n await locator.hover({ timeout: this.timeoutConfig.playwrightActionTimeout });\n } else {\n throw new Error(`Unsupported mouse action: ${action}`);\n }\n return;\n } catch (err) {\n proboLogger.warn(`robustMouseAction: failed to run locator.${action}(), trying mouse.${action}()`);\n }\n // try clicking using mouse at the center of the element\n try {\n const bbox = await locator.boundingBox({ timeout: this.timeoutConfig.playwrightLocatorTimeout });\n if (bbox) {\n if (action === 'click') {\n await this.page.mouse.click(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n } else if (action === 'hover') {\n await this.page.mouse.move(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n }\n return;\n } else {\n proboLogger.warn('robustMouseAction: bounding box not found');\n }\n } catch (err2) {\n proboLogger.warn(`robustMouseAction: failed to run page.mouse.${action}(), trying dispatching an event`);\n }\n // fallback: dispatch native mouse events manually\n try {\n if (action === 'click') {\n await locator.evaluate((el) => {\n ['mousedown', 'mouseup', 'click'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n } else if (action === 'hover') {\n await locator.evaluate((el) => {\n ['mouseenter', 'mouseover', 'focusin', 'focus'].forEach(type => {\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n view: window\n });\n el.dispatchEvent(event);\n });\n }, { timeout: this.timeoutConfig.playwrightActionTimeout });\n }\n } catch (err3) {\n proboLogger.error(`robustMouseAction: all ${action} methods failed:`);\n // not re-throwing playwright errors as they are long and not useful for the user\n throw new Error(`robustMouseAction: all ${action} methods failed`);\n }\n };\n \n /**\n * Extracts text content from an element using multiple strategies.\n * Tries textContent first, then inputValue, and finally looks for nested input elements.\n * Returns normalized and trimmed text for consistent comparison.\n * \n * @param locator - The Playwright locator for the element to extract text from\n * @returns Normalized text content with consistent whitespace handling\n */\n private async getTextValue(locator: Locator) {\n let textValue = await locator.textContent();\n if (!textValue) {\n try {\n textValue = await locator.inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.inputValue()', err);\n }\n }\n if (!textValue) {\n try {\n textValue = await locator.locator('input').inputValue();\n } catch (err) {\n // proboLogger.warn('getTextValue: failed to run locator.locator(\"input\").inputValue()', err);\n }\n }\n if (!textValue) {\n textValue = '';\n }\n // Trim and normalize whitespace to make comparison more robust\n return textValue.trim().replace(/\\s+/g, ' ');\n };\n \n private async setSliderValue(locator: Locator, value: string) {\n try {\n await locator.fill(value, { timeout: this.timeoutConfig.playwrightActionTimeout });\n return;\n } catch (err) {\n proboLogger.warn('setSliderValue: failed to run locator.fill(), trying fallback', err);\n }\n // fallback \n try {\n await locator.focus();\n await locator.evaluate((el: HTMLInputElement, value: string) => {\n el.value = value;\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true })); \n }, value, { timeout: this.timeoutConfig.playwrightActionTimeout }); \n } catch (err) {\n proboLogger.error('setSliderValue: failed to run locator.evaluate()', err);\n }\n }\n} /* class ProboPlaywright */\n","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\n StepMinimal,\n SmartSelector,\n} from '@probolabs/probo-shared';\nimport { ApiClient, \n apiLogger,\n Instruction, \n FindStepByPromptResult, \n PlaywrightAction,\n ProboLogger,\n ProboLogLevel,\n AIModel,\n DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n setupBrowserConsoleLogs,\n resolveElementTag,\n interpolateTemplate\n } from '@probolabs/probo-shared';\nimport {\n waitForMutationsToSettle,\n findClosestVisibleElement, \n} from './actions';\nimport { Highlighter, ElementTagType } from './highlight';\nimport pRetry, { FailedAttemptError } from 'p-retry';\nimport { proboLogger } from './probo-logger';\nimport { ProboPlaywright } from './replay-utils';\nimport { NavTracker } from './nav-tracker';\n\n\n/**\n * Configuration options for Probo client\n */\ninterface ProboConfig {\n scenarioName: string;\n token?: string;\n apiUrl?: string;\n enableSmartSelectors?: boolean;\n enableConsoleLogs?: boolean;\n logToConsole?: boolean;\n logToFile?: boolean;\n debugLevel?: ProboLogLevel;\n aiModel?: AIModel;\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\n}\n\nexport interface RunStepOptions {\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig;\n stepId?: number;\n}\n\nexport interface AskAIOptions {\n stepId?: number;\n createStep?: boolean;\n}\n\nconst retryOptions = {\n retries: 3,\n minTimeout: 1000,\n onFailedAttempt: (error: FailedAttemptError) => {\n proboLogger.warn(\n `Page operation failed, attempt ${error.attemptNumber} of ${\n error.retriesLeft +\n error.attemptNumber\n }...`\n );\n }\n};\n\nexport { AIModel };\nexport class Probo {\n private highlighter: Highlighter;\n private apiClient: ApiClient;\n private readonly debugLevel: ProboLogLevel;\n private readonly enableConsoleLogs: boolean;\n private readonly scenarioName: string;\n private readonly aiModel: AIModel;\n private readonly enableSmartSelectors: boolean;\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\n private params: Record<string, any> = {};\n \n constructor({\n scenarioName,\n token = '',\n apiUrl = '',\n enableConsoleLogs = false,\n enableSmartSelectors = false,\n logToConsole = true,\n logToFile = false,\n debugLevel = ProboLogLevel.INFO,\n aiModel = AIModel.AZURE_GPT4_MINI,\n timeoutConfig = {}\n }: ProboConfig) {\n // Configure logger transports and level\n // configureLogger({ logToConsole, logToFile, level: debugLevel });\n proboLogger.setLogLevel(debugLevel);\n\n const apiKey = token || process.env.PROBO_API_KEY;\n if (!apiKey) {\n proboLogger.error(\n \"API key wasn't provided. Pass 'token' or set PROBO_API_KEY\"\n );\n throw new Error('Probo API key not provided');\n }\n\n const apiEndPoint = apiUrl || process.env.PROBO_API_ENDPOINT;\n if (!apiEndPoint) {\n proboLogger.error(\n \"API endpoint wasn't provided. Pass 'apiUrl' or set PROBO_API_ENDPOINT\"\n );\n throw new Error('Probo API endpoint not provided');\n }\n\n this.highlighter = new Highlighter(enableSmartSelectors, enableConsoleLogs);\n this.apiClient = new ApiClient(apiEndPoint, apiKey);\n this.debugLevel = debugLevel;\n this.enableConsoleLogs = enableConsoleLogs;\n this.scenarioName = scenarioName;\n this.aiModel = aiModel;\n this.enableSmartSelectors = enableSmartSelectors;\n this.timeoutConfig = { ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, ...timeoutConfig };\n // set the log level for the api client\n apiLogger.setLogLevel(this.debugLevel);\n\n proboLogger.info(\n `Initializing: scenario=${scenarioName}, apiUrl=${apiEndPoint}, ` +\n `enableConsoleLogs=${enableConsoleLogs}, debugLevel=${debugLevel}, aiModel=${aiModel}`\n );\n }\n\n /**\n * Sets the parameters object for template literal interpolation\n * Stores a reference to the params object so mutations are automatically reflected\n * @param params The parameters object containing values to use for interpolation\n */\n public setParams(params: Record<string, any>): void {\n this.params = params;\n }\n\n /**\n * Interpolates a string using the current params and optional additional context\n * @param str The string to interpolate (may contain ${variable} syntax)\n * @param additionalContext Optional additional context to merge with params\n * @returns The interpolated string\n */\n private interpolate(str: string, additionalContext: Record<string, any> = {}): string {\n const context = { ...this.params, ...additionalContext };\n return interpolateTemplate(str, context);\n }\n\n public async askAI(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<any> {\n const response = await this.askAIHelper(page, question, options, assertAnswer);\n if (response?.result?.error) {\n throw new Error(response.result.error);\n }\n return response?.result?.answer;\n }\n\n public async runStep(\n page: Page, \n stepPrompt: string, \n argument: string|boolean|null = null,\n options: RunStepOptions = { aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<string|boolean|void> {\n // Interpolate argument if it's a string with template literals\n if (typeof argument === 'string' && argument.includes('${')) {\n argument = this.interpolate(argument);\n }\n const runStepStartTime = Date.now();\n try {\n // Determine which AI model to use for this step\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n let stepId = options.stepId;\n if (!stepId) {\n const stepByPrompt = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url())\n if (!stepByPrompt?.step) {\n // Create new step before continuing\n stepId = Number(await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: '',\n initial_html_content: '',\n argument: argument as string,\n use_cache: false,\n url: page.url(),\n }))\n } else {\n stepId = Number(stepByPrompt.step.id)\n }\n }\n\n proboLogger.log(`runStep: ${'#'+stepId+' - '}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n \n // Setup page monitoring and wait for navigation to stabilize\n this.setupConsoleLogs(page);\n proboLogger.debug(`🔍 [WaitForNavigationToStabilize] timeoutConfig values: quietTimeout=${this.timeoutConfig.waitForStabilityQuietTimeout}, initialDelay=${this.timeoutConfig.waitForStabilityInitialDelay}, globalTimeout=${this.timeoutConfig.waitForStabilityGlobalTimeout}, verbose=${this.timeoutConfig.waitForStabilityVerbose}`);\n const navTracker = await NavTracker.getInstance(page,{ \n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n proboLogger.debug(`🔍 Calling waitForNavigationToStabilize: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`);\n await navTracker.waitForNavigationToStabilize();\n\n // STEP 1: Check for cached step (if caching is enabled)\n let [isCachedStep, returnValue] = await this._handleCachedStep(page, stepId, stepPrompt, argument);\n if (isCachedStep) {\n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (cached step)`);\n proboLogger.debug('Successfully executed cached step!');\n return returnValue;\n }\n\n // STEP 2: Create or update step in backend and capture initial page state\n proboLogger.log(`Execution failed or prompt changed, starting self-healing process...`);\n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n const { base_screenshot_url, base_html_content } = await this.getInitialPageState(page);\n await this.apiClient.patchStep(stepId, {\n initial_screenshot: base_screenshot_url,\n pre_html_content: base_html_content !== '' ? base_html_content : undefined,\n prompt: stepPrompt\n });\n\n // STEP 4: Self-Healing Process - Get action from database or from AI\n const screenshotReasoningStartTime = Date.now();\n const action : PlaywrightAction = await this.apiClient.screenshotReasoning(stepId, stepPrompt, this.aiModel);\n const screenshotReasoningTime = Date.now() - screenshotReasoningStartTime;\n proboLogger.debug(`⏱️ screenshotReasoning took ${screenshotReasoningTime}ms`);\n\n // STEP 5: Find and highlight candidate elements based on reasoning\n const elementTags = resolveElementTag(action);\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags);\n proboLogger.debug(`Found ${candidate_elements.length} candidate elements`);\n\n // STEP 6: Clean up highlighting\n await this.unhighlightElements(page);\n\n // STEP 7: Select the best candidate element\n const findBestCandidateStartTime = Date.now();\n const index : number = await this.apiClient.findBestCandidateElement(\n stepId,\n candidates_screenshot_url, \n candidate_elements, \n this.aiModel\n );\n const findBestCandidateTime = Date.now() - findBestCandidateStartTime;\n proboLogger.debug(`⏱️ findBestCandidateElement took ${findBestCandidateTime}ms`);\n proboLogger.debug(`AI selected candidate element at index: ${index}`);\n \n // STEP 8: Find the actual element object from the candidates\n const actualElement = candidate_elements.find(element => element.index === index);\n \n if (!actualElement) {\n throw new Error(`No candidate element found with index ${index}. Available indices: ${candidate_elements.map(e => e.index).join(', ')}`);\n }\n\n proboLogger.debug(`Selected element: ${actualElement.css_selector} (index: ${actualElement.index})`);\n\n // STEP 9: Execute the interaction with the selected element\n const actionResult = await this._handlePerformAction(page, stepId, actualElement, action, argument); \n \n const totalRunStepTime = Date.now() - runStepStartTime;\n proboLogger.debug(`⏱️ runStep total time: ${totalRunStepTime}ms (screenshotReasoning: ${screenshotReasoningTime}ms, findBestCandidateElement: ${findBestCandidateTime}ms)`);\n proboLogger.debug('Step execution completed successfully');\n return actionResult;\n\n } catch (error: any) {\n proboLogger.error(`Error in runStep: ${error.message}`);\n proboLogger.error(`Step prompt: \"${stepPrompt}\"`);\n proboLogger.error(`Page URL: ${page.url()}`);\n \n // Re-throw the error to maintain the existing error handling behavior\n throw error;\n }\n }\n \n private async _handleCachedStep(page: Page, stepId: number, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, string|boolean|void]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: StepMinimal | null = await this.apiClient.findStepById(stepId)\n if (!result) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n } else if (result.action == '' || !result.action) {\n proboLogger.error(`Step action is missing`);\n throw Error(`Step #${stepId} action is missing`);\n }\n\n if(result.prompt !== stepPrompt) {\n proboLogger.debug(`Step prompt changed, skipping execution and going to start self-healing process...`);\n return [false, undefined];\n }\n\n const actionArgument = argument ?? result.argument;\n proboLogger.log(`Found existing step with ID: ${result.id} going to perform action: ${result.action} with value: ${actionArgument}`);\n \n try {\n // Create ProboPlaywright instance with the page\n const proboPlaywright = new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors, \n debugLevel: this.debugLevel, \n timeoutConfig: this.timeoutConfig \n }, page);\n \n // Call runStep with the cached action\n const runStepResult = await proboPlaywright.runStep({\n iframeSelector: result.iframe_selector,\n elementSelector: result.element_css_selector,\n smartSelector: result.smart_selector,\n smartIFrameSelector: result.smart_iframe_selector,\n action: result.action as PlaywrightAction,\n argument: actionArgument as string,\n }); \n \n return [true, runStepResult];\n } catch (error: any) {\n return [false, undefined];\n }\n\n }\n\n private setupConsoleLogs(page: Page) {\n setupBrowserConsoleLogs(page, this.enableConsoleLogs, proboLogger);\n }\n\n public async getInitialPageState(page: Page): Promise<InitialPageState> {\n const baseScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 baseScreenshot: ${baseScreenshot}`);\n const baseHtmlContent = '';\n return {\n base_screenshot_url: baseScreenshot,\n base_html_content: baseHtmlContent\n };\n \n }\n\n public async findAndHighlightCandidateElements(page: Page, elementTags: string[]): Promise<FindCandidateInput> {\n // 2. CANDIDATE ELEMENTS HANDLING: Find and cache candidates\n \n await this.highlighter.findAndCacheCandidateElements(page, elementTags as ElementTagType[]);\n proboLogger.debug(`🔍 after findAndCacheCandidateElements`);\n \n // 3. CANDIDATE ELEMENTS HANDLING: Highlight candidates and take screenshot\n await this.highlighter.highlightCachedElements(page, 'candidates');\n proboLogger.debug(`🔍 after highlightCachedElements candidates`);\n await page.waitForTimeout(200);\n const candidatesScreenshot = await this.screenshot(page);\n proboLogger.debug(`🔍 candidatesScreenshot: ${candidatesScreenshot}`);\n \n return {\n candidates_screenshot_url: candidatesScreenshot,\n candidate_elements: await this.highlighter.getCandidatesCached(page) ?? []\n };\n }\n\n\n \n \n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\n return this.highlighter.highlightElements(page, elementTags);\n }\n\n public async unhighlightElements(page: Page) {\n return this.highlighter.unhighlightElements(page);\n }\n\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, smart_selector: SmartSelector|null, smart_iframe_selector: SmartSelector|null, element_index: number) {\n return this.highlighter.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n }\n\n public async waitForMutationsToSettle(page: Page, timeout?: number, initTimeout?: number) {\n const mutationTimeout = timeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout;\n const mutationInitTimeout = initTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout;\n return waitForMutationsToSettle(page, mutationTimeout, mutationInitTimeout);\n }\n\n public async screenshot(page: Page) { \n proboLogger.debug(`taking screenshot of current page: ${page.url()}`);\n // await page.evaluate(() => document.fonts?.ready.catch(() => {}));\n const screenshot_bytes = await page.screenshot({ fullPage: true, animations: 'disabled', timeout: 10000 });\n // make an api call to upload the screenshot to cloud\n proboLogger.debug('uploading image data to cloud');\n const screenshot_url = await this.apiClient.uploadScreenshot(screenshot_bytes);\n return screenshot_url;\n \n }\n\n private async _handlePerformAction(page: Page, stepId: number, actualElement: ElementInfo, action: PlaywrightAction, argument: string|boolean|null) {\n const value = argument ?? '';\n const element_css_selector = actualElement.css_selector;\n const iframe_selector = actualElement.iframe_selector;\n const element_index = actualElement.index;\n const smart_selector = actualElement.smart_selector;\n const smart_iframe_selector = actualElement.smart_iframe_selector;\n proboLogger.debug('Handling perform action:', {action, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index});\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector, iframe_selector, smart_selector, smart_iframe_selector, element_index);\n proboLogger.debug('Highlighted element');\n }\n const pre_action_screenshot_url = await this.screenshot(page);\n const returnValue = await new ProboPlaywright({ \n enableSmartSelectors: this.enableSmartSelectors,\n debugLevel: this.debugLevel,\n timeoutConfig: this.timeoutConfig \n }, page).runStep({\n iframeSelector: iframe_selector,\n elementSelector: element_css_selector,\n smartSelector: smart_selector,\n smartIFrameSelector: smart_iframe_selector,\n action: action,\n argument: value as string,\n highlightTimeout: 0\n });\n\n await this.unhighlightElements(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n await this.apiClient.patchStep(stepId, {\n pre_screenshot: pre_action_screenshot_url,\n post_screenshot: post_action_screenshot_url,\n post_html_content: post_html_content == '' ? null : post_html_content,\n });\n \n return returnValue;\n }\n\n public async askAIHelper(page: Page, question: string, options: AskAIOptions, assertAnswer: string = ''): Promise<ServerResponse> {\n // Set default value for createStep to true if not provided\n const createStep = options?.createStep !== undefined ? options.createStep : true;\n const stepId = options?.stepId;\n \n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}, createStep: ${createStep}`); \n try {\n // Get current page and capture screenshot\n const navTracker = await NavTracker.getInstance(page, {\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\n });\n await navTracker.waitForNavigationToStabilize();\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\n \n \n proboLogger.debug(`📤 [askAI] Sending chat request to backend`);\n \n // Use ApiClient to send request to backend API \n const serverResponse = await this.apiClient.askAI(question, this.scenarioName, screenshot, this.aiModel);\n proboLogger.debug(`✅ [askAI] Chat response received successfully`);\n // If stepId is provided, update the step\n if (stepId) {\n proboLogger.debug(`🔍 [askAI] Looking for step: ${stepId}`);\n const step = await this.apiClient.findStepById(stepId);\n if (!step) {\n proboLogger.error(`Step not found in database`);\n throw Error(`Step #${stepId} not found in database`)\n }\n\n if (step?.prompt === question) {\n proboLogger.debug(`✅ [askAI] Step already exists with question: ${question}, skipping update`);\n return serverResponse;\n }\n\n try {\n proboLogger.debug(`📝 [askAI] Updating step in backend for question: \"${question}\"`);\n \n // Get HTML content for the step\n const htmlContent = await page.content();\n\n await this.apiClient.patchStep(stepId, {\n stepPrompt: question,\n pre_html_content: htmlContent,\n initial_screenshot: screenshot,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n });\n \n proboLogger.debug(`✅ [askAI] Step updated successfully with ID: ${stepId}`);\n } catch (stepError) {\n proboLogger.error(`❌ [askAI] Error updating step: ${stepError}`);\n // Don't throw here, just log the error and continue\n }\n } else if (createStep) {\n proboLogger.debug(`🔍 [askAI] Creating new step in backend for question: \"${question}\"`);\n const stepId = await this.apiClient.createStep({\n scenarioName: this.scenarioName,\n stepPrompt: question,\n initial_screenshot_url: screenshot,\n argument: '',\n use_cache: false,\n url: page.url(),\n action: PlaywrightAction.ASK_AI,\n vanilla_prompt: question,\n is_vanilla_prompt_robust: true,\n target_element_name: 'AI Question',\n });\n proboLogger.debug(`✅ [askAI] Step created successfully with ID: ${stepId}`);\n }\n \n // Return the answer from the result, or the reasoning if no answer\n if (assertAnswer) {\n const actualAnswer = serverResponse?.result?.answer?.toString();\n const interpolatedAssertAnswer = this.interpolate(assertAnswer); \n if (actualAnswer !== interpolatedAssertAnswer) { \n proboLogger.error(`❌ [askAI] Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n throw new Error(`Expected answer to be ${interpolatedAssertAnswer}, but got ${actualAnswer}`);\n }\n }\n return serverResponse;\n \n } catch (error) {\n proboLogger.error(`❌ [askAI] Error in askAI: ${error}`);\n throw error;\n }\n }\n}\n\n// Re-export ElementTag for convenience\nexport { ElementTag, ProboLogLevel, Highlighter, ElementTagType, ElementInfo, PlaywrightAction, ProboPlaywright, findClosestVisibleElement, NavTracker };\n\n// Re-export OTP class\nexport { OTP, MailinatorMessage } from './otp';"],"names":["require$$0","retry","OTPAuth.TOTP"],"mappings":"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AE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,E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","x_google_ignoreList":[6,7,8,9,10,19]}