@probolabs/playwright 1.0.12 → 1.0.16

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/Interaction.js","../../probo-shared/dist/PlaywrightAction.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","../../probo-shared/dist/RecorderSettings.js","../src/probo-logger.ts","../src/actions.ts","../src/highlight.ts","../../../node_modules/p-retry/index.js","../src/otp.ts","../src/replay-utils.ts","../src/nav-tracker.ts","../src/index.ts"],"sourcesContent":["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","// 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.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 i.action === PlaywrightAction.ASK_AI || (((_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};\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 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 * 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'Load failed', // Safari 17+\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\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\t// We do an extra check for Safari 17+ as it has a very generic error message.\n\t// Network errors in Safari have no stack.\n\tif (error.message === 'Load failed') {\n\t\treturn error.stack === undefined;\n\t}\n\n\treturn errorMessages.has(error.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 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 pRetry(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 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 }),\n });\n const data = await this.handleResponse(response);\n return data.step.id;\n }, {\n retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async patchStep(stepId, fields) {\n // Use PATCH /steps/:id/ endpoint\n apiLogger.debug(`patching step #${stepId}`);\n return pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async resolveNextInstruction(stepId, instruction, aiModel) {\n apiLogger.debug(`resolving next instruction: ${instruction}`);\n return pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async uploadScreenshot(screenshot_bytes) {\n return pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async findStepByPrompt(prompt, scenarioName, url = '') {\n apiLogger.debug(`Finding step by prompt: ${prompt} and scenario: ${scenarioName}`);\n return pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async resetStep(stepId) {\n return pRetry(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 apiLogger.debug(`converting interaction #${interaction.interactionId} to step`);\n return pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\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 pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\n });\n }\n async summarizeScenario(scenarioId, aiModel) {\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 response.json();\n if (!response.ok) {\n throw new Error(data.error || 'Failed to summarize scenario');\n }\n return data;\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 pRetry(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 retries: this.maxRetries,\n minTimeout: this.initialBackoff,\n onFailedAttempt: error => {\n apiLogger.warn(`API call failed, attempt ${error.attemptNumber} of ${error.retriesLeft + error.attemptNumber}...`);\n }\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 { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG } from './PlaywrightTimeoutConfig.js';\nexport const DEFAULT_RECORDER_SETTINGS = {\n // API Configuration\n apiKey: '',\n apiEndPoint: 'https://api.probolabs.ai',\n baseUrl: undefined,\n // Scenario Configuration\n scenarioName: 'new recording',\n scenarioId: undefined,\n aiModel: 'azure-gpt4-mini',\n activeParamSet: 0,\n // Browser Configuration\n resetBrowserBeforeReplay: true,\n // Script Configuration\n scriptTimeout: 30000,\n // UI Configuration\n hover_enabled: false,\n // Logging Configuration\n enableConsoleLogs: false,\n debugLevel: 'INFO',\n // Timeout Configuration (spread from PlaywrightTimeoutConfig)\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n};\n//# sourceMappingURL=RecorderSettings.js.map","import { ProboLogger } from \"@probolabs/probo-shared\";\r\n\r\n// Default logger instance\r\nexport const proboLogger = new ProboLogger('probolib');\r\n","import { Page, Frame, Locator } from 'playwright';\r\nimport { DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, PlaywrightAction, matchRegex } from '@probolabs/probo-shared';\r\nimport { proboLogger } from './probo-logger';\r\n\r\nexport const SPECIAL_KEYS = [\r\n 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete',\r\n 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\r\n 'Home', 'End', 'PageUp', 'PageDown',\r\n 'Insert', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12',\r\n 'Shift', 'Control', 'Alt', 'Meta',\r\n 'CapsLock', 'NumLock', 'ScrollLock',\r\n 'Pause', 'PrintScreen', 'ContextMenu',\r\n 'AudioVolumeUp', 'AudioVolumeDown', 'AudioVolumeMute',\r\n 'MediaTrackNext', 'MediaTrackPrevious', 'MediaStop', 'MediaPlayPause',\r\n 'BrowserBack', 'BrowserForward', 'BrowserRefresh', 'BrowserFavorites'\r\n] as const;\r\n\r\n/**\r\n * Handle potential navigation exactly like Python's handle_potential_navigation\r\n */\r\nexport async function handlePotentialNavigation_deprecated(\r\n page: Page,\r\n locator: Locator | null = null,\r\n value: string | null = null,\r\n options: {\r\n initialTimeout?: number;\r\n navigationTimeout?: number;\r\n globalTimeout?: number;\r\n } = {}\r\n): Promise<boolean> {\r\n const {\r\n initialTimeout,\r\n navigationTimeout,\r\n globalTimeout,\r\n } = options;\r\n \r\n const finalInitialTimeout = initialTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationInitialTimeout!;\r\n const finalNavigationTimeout = navigationTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationNavigationTimeout!;\r\n const finalGlobalTimeout = globalTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.waitForNavigationGlobalTimeout!;\r\n\r\n const startTime = Date.now();\r\n let navigationCount = 0;\r\n let lastNavTime: number | null = null;\r\n\r\n const onFrameNav = (frame: Frame) => {\r\n if (frame === page.mainFrame()) {\r\n navigationCount++;\r\n lastNavTime = Date.now();\r\n proboLogger.debug(\r\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: navigation detected (count=${navigationCount})`\r\n );\r\n }\r\n };\r\n\r\n proboLogger.debug(`DEBUG_NAV[0.000s]: Starting navigation detection`);\r\n page.on(\"framenavigated\", onFrameNav);\r\n\r\n try {\r\n if (locator) {\r\n proboLogger.debug(`DEBUG_NAV: Executing click(${value})`);\r\n await clickAtPosition(page, locator, value as ClickPosition | null);\r\n }\r\n\r\n // wait for any initial nav to fire\r\n await page.waitForTimeout(finalInitialTimeout);\r\n proboLogger.debug(\r\n `DEBUG_NAV[${((Date.now() - startTime) / 1000).toFixed(3)}s]: After initial wait, count=${navigationCount}`\r\n );\r\n\r\n if (navigationCount > 0) {\r\n // loop until either per-nav or global timeout\r\n while (true) {\r\n const now = Date.now();\r\n if (\r\n lastNavTime !== null &&\r\n now - lastNavTime > finalNavigationTimeout\r\n ) {\r\n proboLogger.debug(\r\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: per‐navigation timeout reached`\r\n );\r\n break;\r\n }\r\n if (now - startTime > finalGlobalTimeout) {\r\n proboLogger.debug(\r\n `DEBUG_NAV[${((now - startTime) / 1000).toFixed(3)}s]: overall timeout reached`\r\n );\r\n break;\r\n }\r\n await page.waitForTimeout(500);\r\n }\r\n\r\n // now wait for load + idle\r\n proboLogger.debug(`DEBUG_NAV: waiting for load state`);\r\n await page.waitForLoadState(\"load\", { timeout: finalGlobalTimeout });\r\n\r\n proboLogger.debug(`DEBUG_NAV: waiting for networkidle`);\r\n try {\r\n // shorter idle‐wait so we don't hang the full globalTimeout here\r\n await page.waitForLoadState(\"networkidle\", {\r\n timeout: finalNavigationTimeout,\r\n });\r\n } catch {\r\n proboLogger.debug(\r\n `DEBUG_NAV: networkidle not reached in ${finalNavigationTimeout}ms, proceeding anyway`\r\n );\r\n }\r\n\r\n await scrollToBottomRight(page);\r\n proboLogger.debug(`DEBUG_NAV: done`);\r\n return true;\r\n }\r\n\r\n proboLogger.debug(`DEBUG_NAV: no navigation detected`);\r\n return false;\r\n } finally {\r\n page.removeListener(\"framenavigated\", onFrameNav);\r\n proboLogger.debug(`DEBUG_NAV: listener removed`);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Scroll entire page to bottom-right, triggering lazy-loaded content\r\n */\r\nexport async function scrollToBottomRight(page: Page): Promise<void> {\r\n const startTime = performance.now();\r\n proboLogger.debug(`Starting scroll to bottom-right`);\r\n\r\n let lastHeight = await page.evaluate(() => document.documentElement.scrollHeight);\r\n let lastWidth = await page.evaluate(() => document.documentElement.scrollWidth);\r\n\r\n let smoothingSteps = 0;\r\n while (true) { \r\n const initY = await page.evaluate(() => window.scrollY);\r\n const initX = await page.evaluate(() => window.scrollX);\r\n const clientHeight = await page.evaluate(() => document.documentElement.clientHeight);\r\n const maxHeight = await page.evaluate(() => document.documentElement.scrollHeight);\r\n const clientWidth = await page.evaluate(() => document.documentElement.clientWidth);\r\n const maxWidth = await page.evaluate(() => document.documentElement.scrollWidth);\r\n \r\n let currX = initX;\r\n while (currX < maxWidth - clientWidth) {\r\n let currY = initY;\r\n while (currY < maxHeight - clientHeight) {\r\n currY += clientHeight;\r\n await page.evaluate(([x, y]) => window.scrollTo(x, y), [currX, currY]);\r\n await page.waitForTimeout(50);\r\n smoothingSteps++;\r\n }\r\n currX += clientWidth;\r\n }\r\n\r\n proboLogger.debug(\r\n `performed ${smoothingSteps} smoothing steps while scrolling`\r\n );\r\n\r\n const newHeight = await page.evaluate(() => document.documentElement.scrollHeight);\r\n const newWidth = await page.evaluate(() => document.documentElement.scrollWidth);\r\n if (newHeight === lastHeight && newWidth === lastWidth) break;\r\n proboLogger.debug(`page dimensions updated, repeating scroll`);\r\n lastHeight = newHeight;\r\n lastWidth = newWidth;\r\n }\r\n\r\n if (smoothingSteps > 0) {\r\n await page.waitForTimeout(200);\r\n await page.evaluate('window.scrollTo(0, 0)');\r\n await page.waitForTimeout(50);\r\n }\r\n proboLogger.debug(`Scroll completed in ${(performance.now() - startTime).toFixed(3)}ms`);\r\n}\r\n\r\n/**\r\n * Wait for DOM mutations to settle using MutationObserver logic\r\n */\r\nexport async function waitForMutationsToSettle(\r\n page: Page,\r\n mutationTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout!,\r\n initTimeout: number = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout!\r\n): Promise<boolean> {\r\n const startTime = Date.now();\r\n proboLogger.debug(\r\n `Starting mutation settlement (initTimeout=${initTimeout}, mutationTimeout=${mutationTimeout})`\r\n );\r\n\r\n const result = await page.evaluate(\r\n async ({ mutationTimeout, initTimeout }) => {\r\n async function blockUntilStable(\r\n targetNode: HTMLElement,\r\n options = { childList: true, subtree: true }\r\n ) {\r\n return new Promise<boolean>((resolve) => {\r\n let initTimerExpired = false;\r\n let mutationsOccurred = false;\r\n const observerTimers = new Set<number>();\r\n\r\n const initTimer = window.setTimeout(() => {\r\n initTimerExpired = true;\r\n if (observerTimers.size === 0) resolve(mutationsOccurred);\r\n }, initTimeout);\r\n\r\n const observer = new MutationObserver(() => {\r\n mutationsOccurred = true;\r\n observerTimers.forEach((t) => clearTimeout(t));\r\n observerTimers.clear();\r\n const t = window.setTimeout(() => {\r\n observerTimers.delete(t);\r\n if (initTimerExpired && observerTimers.size === 0) {\r\n observer.disconnect();\r\n resolve(mutationsOccurred);\r\n }\r\n }, mutationTimeout);\r\n observerTimers.add(t);\r\n });\r\n\r\n observer.observe(targetNode, options);\r\n });\r\n }\r\n return blockUntilStable(document.body as HTMLElement);\r\n },\r\n { mutationTimeout, initTimeout }\r\n );\r\n\r\n const total = ((Date.now() - startTime) / 1000).toFixed(2);\r\n proboLogger.debug(\r\n result\r\n ? `Mutations settled. Took ${total}s`\r\n : `No mutations observed. Took ${total}s`\r\n );\r\n\r\n return result;\r\n}\r\n\r\n\r\n/**\r\n * Get element text value: allTextContents + innerText fallback\r\n */\r\nexport async function getElementValue(\r\n page: Page,\r\n locator: Locator\r\n): Promise<string> {\r\n const texts = await locator.allTextContents();\r\n let allText = texts.join('').trim();\r\n if (!allText) {\r\n allText = await locator.evaluate((el: HTMLElement) => el.innerText);\r\n }\r\n if (!allText) {\r\n allText = await locator.inputValue();\r\n }\r\n proboLogger.debug(`getElementValue: [${allText}]`);\r\n return allText;\r\n}\r\n\r\n/**\r\n * Select dropdown option: native <select>, <option>, child select, or ARIA listbox\r\n */\r\nexport async function selectDropdownOption(\r\n page: Page,\r\n locator: Locator,\r\n value: string | string[]\r\n): Promise<void> { \r\n const tagName = await locator?.evaluate((el) => el.tagName.toLowerCase());\r\n const role = await locator?.getAttribute('role');\r\n\r\n if (tagName === 'option' || role === 'option') {\r\n proboLogger.debug('selectDropdownOption: option role detected');\r\n await locator?.click();\r\n } else if (tagName === 'select') {\r\n proboLogger.debug('selectDropdownOption: simple select tag detected');\r\n try {\r\n await locator?.selectOption(value as any);\r\n } catch {\r\n proboLogger.debug('selectDropdownOption: manual change event fallback');\r\n const handle = locator ? await locator.elementHandle() : null;\r\n await page.evaluate(\r\n ({ h, val }: { h: HTMLElement | SVGElement | null, val: string | string[] }) => {\r\n const el = h as HTMLSelectElement;\r\n if (el) {\r\n el.value = Array.isArray(val) ? val[0] : (val as string);\r\n el.dispatchEvent(new Event('change', { bubbles: true }));\r\n }\r\n },\r\n { h: handle, val: value }\r\n );\r\n }\r\n } else {\r\n proboLogger.debug('selectDropdownOption: custom dropdown path');\r\n let listbox = locator.locator('select');\r\n let count = await listbox.count();\r\n if (count > 1) throw new Error(`selectDropdownOption: ambiguous <select> count=${count}`);\r\n if (count === 1) {\r\n proboLogger.debug('selectDropdownOption: child <select> found');\r\n await listbox.selectOption(value as any);\r\n return;\r\n }\r\n await locator.click();\r\n let container = locator;\r\n count = 0;\r\n if (role !== 'listbox') {\r\n for (let i = 0; i < 7; i++) {\r\n listbox = container.getByRole('listbox');\r\n count = await listbox.count();\r\n if (count >= 1) break;\r\n proboLogger.debug(`selectDropdownOption: iteration #${i} no listbox found`);\r\n container = container.locator('xpath=..');\r\n }\r\n } else {\r\n listbox = container;\r\n count = await listbox.count();\r\n }\r\n if (count !== 1) throw new Error(`selectDropdownOption: found ${count} listbox locators`);\r\n const vals = Array.isArray(value) ? value : [value];\r\n for (const val of vals) {\r\n const option = listbox.getByRole('option').getByText(new RegExp(`^${val}$`, 'i'));\r\n const optCount = await option.count();\r\n if (optCount !== 1) throw new Error(`selectDropdownOption: ${optCount} options for '${val}'`);\r\n await option.click();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Execute a given Playwright action, mirroring Python's _perform_action\r\n */\r\nexport async function executePlaywrightAction_deprecated(\r\n page: Page,\r\n action: PlaywrightAction,\r\n value: string|boolean,\r\n iframe_selector: string,\r\n element_css_selector: string\r\n): Promise<boolean|string> {\r\n proboLogger.info(`performing Action: ${action} Value: ${value}`);\r\n try {\r\n \r\n if (action === PlaywrightAction.VISIT_BASE_URL || action === PlaywrightAction.VISIT_URL) {\r\n await page.goto(value as string, { waitUntil: 'load' });\r\n await handlePotentialNavigation_deprecated(page, null); \r\n }\r\n else {\r\n let locator = undefined;\r\n if (iframe_selector)\r\n locator = page.frameLocator(iframe_selector).locator(element_css_selector);\r\n else\r\n locator = page.locator(element_css_selector);\r\n \r\n // Fail fast: immediately validate that the element exists\r\n try {\r\n await locator.waitFor({ state: 'attached' });\r\n } catch (e) {\r\n throw new Error(`Element not found with selector: ${element_css_selector}${iframe_selector ? ` in iframe: ${iframe_selector}` : ''}`);\r\n }\r\n switch (action) { \r\n case PlaywrightAction.CLICK:\r\n await handlePotentialNavigation_deprecated(page, locator, value as ClickPosition | null);\r\n break;\r\n\r\n case PlaywrightAction.FILL_IN:\r\n // await locator.click();\r\n await locator.fill(value as string);\r\n break;\r\n\r\n case PlaywrightAction.TYPE_KEYS:\r\n // Check if the value contains any special keys\r\n const specialKey = SPECIAL_KEYS.find(key => (value as string).includes(key));\r\n if (specialKey) {\r\n // If it's a single special key, just press it\r\n if (value === specialKey) {\r\n await locator?.press(specialKey);\r\n } else {\r\n // Handle combinations like 'Control+A' or 'Shift+ArrowRight'\r\n const parts = (value as string).split('+');\r\n if (parts.length === 2 && SPECIAL_KEYS.includes(parts[0] as any) && SPECIAL_KEYS.includes(parts[1] as any)) {\r\n await locator?.press(value as string);\r\n } else {\r\n // If it's a mix of special keys and text, use pressSequentially\r\n await locator?.pressSequentially(value as string);\r\n }\r\n }\r\n } else {\r\n // No special keys, just type normally\r\n await locator?.pressSequentially(value as string);\r\n }\r\n break;\r\n\r\n case PlaywrightAction.SELECT_DROPDOWN:\r\n await selectDropdownOption(page, locator, value as string);\r\n break;\r\n\r\n case PlaywrightAction.SELECT_MULTIPLE_DROPDOWN:\r\n let optsArr: string[];\r\n if ((value as string).startsWith('[')) {\r\n try { optsArr = JSON.parse(value as string); } catch {\r\n optsArr = (value as string).slice(1, -1).split(',').map(o => o.trim());\r\n }\r\n } else {\r\n optsArr = (value as string).split(',').map(o => o.trim());\r\n }\r\n await locator?.selectOption(optsArr as any);\r\n break;\r\n\r\n case PlaywrightAction.CHECK_CHECKBOX:\r\n await locator?.setChecked(value == true);\r\n break;\r\n\r\n case PlaywrightAction.SELECT_RADIO:\r\n case PlaywrightAction.TOGGLE_SWITCH:\r\n await locator?.click();\r\n break;\r\n\r\n case PlaywrightAction.HOVER:\r\n if (await locator.isVisible()) {\r\n await locator?.hover({ noWaitAfter: false });\r\n await page.waitForTimeout(100); // short delay for hover to take effect\r\n }\r\n break;\r\n\r\n case PlaywrightAction.ASSERT_EXACT_VALUE: \r\n const actualExact = await getElementValue(page, locator);\r\n proboLogger.debug(`actual value is [${actualExact}]`);\r\n if (actualExact !== value) {\r\n proboLogger.info(`Validation *FAIL* expected '${value}' but got '${actualExact}'`);\r\n return false;\r\n }\r\n proboLogger.info('Validation *PASS*');\r\n return true;\r\n\r\n case PlaywrightAction.ASSERT_CONTAINS_VALUE: \r\n const actualContains = await getElementValue(page, locator);\r\n proboLogger.debug(`actual value is [${actualContains}]`);\r\n if (!matchRegex(actualContains, value as string)) {\r\n proboLogger.info(`Validation *FAIL* expected '${actualContains}' to match '${value}'`);\r\n return false;\r\n }\r\n proboLogger.info('Validation *PASS*');\r\n return true;\r\n\r\n case PlaywrightAction.ASSERT_URL:\r\n const currUrl = page.url();\r\n if (currUrl !== value) {\r\n proboLogger.info(`Validation *FAIL* expected url '${value}' while is '${currUrl}'`);\r\n return false;\r\n }\r\n proboLogger.info('Validation *PASS*');\r\n return true;\r\n\r\n case PlaywrightAction.SCROLL_TO_ELEMENT:\r\n // Restore exact scroll positions from recording\r\n const scrollData = JSON.parse(value as string);\r\n try {\r\n proboLogger.debug('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\r\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\r\n el.scrollTop = scrollData.scrollTop;\r\n el.scrollLeft = scrollData.scrollLeft;\r\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\r\n } catch (e) {\r\n proboLogger.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\r\n }\r\n await page.waitForTimeout(500);\r\n break;\r\n\r\n case PlaywrightAction.EXTRACT_VALUE:\r\n const extractedValue = await getElementValue(page, locator);\r\n proboLogger.debug(`extracted value is [${extractedValue}]`);\r\n return extractedValue;\r\n\r\n default:\r\n throw new Error(`Unknown action: ${action}`);\r\n }\r\n }\r\n return true;\r\n } catch (e) {\r\n proboLogger.debug(`***ERROR failed to execute action ${action}: ${e}`);\r\n throw e;\r\n }\r\n}\r\n\r\n/**\r\n * Execute a given Playwright action using native Playwright functions where possible\r\n */\r\n\r\n\r\nexport enum ClickPosition {\r\n LEFT = 'LEFT',\r\n RIGHT = 'RIGHT',\r\n CENTER = 'CENTER'\r\n}\r\n\r\n/**\r\n * Click on an element at a specific position\r\n */\r\nexport async function clickAtPosition(page: Page, locator: Locator, clickPosition: ClickPosition | null): Promise<void> {\r\n if (!clickPosition || clickPosition === ClickPosition.CENTER) {\r\n await locator.click({noWaitAfter: false});\r\n return\r\n }\r\n const boundingBox = await locator.boundingBox();\r\n if (boundingBox) {\r\n if (clickPosition === ClickPosition.LEFT) {\r\n // await page.mouse.click(boundingBox.x + 10, boundingBox.y + boundingBox.height/2);\r\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\r\n await locator.click({noWaitAfter: false, position: {x: 10, y: boundingBox.height/2}});\r\n }\r\n else if (clickPosition === ClickPosition.RIGHT) {\r\n // await page.mouse.click(boundingBox.x + boundingBox.width - 10, boundingBox.y + boundingBox.height/2);\r\n // mouse click returns immediately, use locator click instead (position relative to top left corner)\r\n await locator.click({noWaitAfter: false, position: {x: boundingBox.width - 10, y: boundingBox.height/2}});\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Traverses up the DOM from the given locator to find the closest visible ancestor.\r\n * Returns a Locator for the first visible element found, or null if none is visible up to <html>.\r\n * \r\n * @param locator - The Playwright locator to start searching from\r\n * @returns Promise that resolves to a visible ancestor locator or null if none found\r\n */\r\nexport async function findClosestVisibleElement(locator: Locator): Promise<Locator | null> {\r\n let currentLocator = locator;\r\n let parentLocator: Locator;\r\n while (true) {\r\n if (await currentLocator.isVisible()) {\r\n return currentLocator;\r\n }\r\n // Move up to the parent element\r\n parentLocator = currentLocator.locator('..');\r\n // Check if we've reached the top of the DOM\r\n const tagName = await parentLocator.evaluate(el => el.tagName).catch((): string | null => null);\r\n if (!tagName || tagName === 'HTML' || tagName === 'BODY') {\r\n break;\r\n }\r\n currentLocator = parentLocator;\r\n }\r\n return null;\r\n}\r\n","import type { Page } from 'playwright';\r\nimport { ElementTag } from '@probolabs/probo-shared';\r\nimport { proboLogger } from './probo-logger';\r\n\r\n// Fix the type definition\r\ntype ElementTagType = typeof ElementTag[keyof typeof ElementTag];\r\n\r\n// Add type declaration for the ProboLabs global\r\ndeclare global {\r\n // Declare highlighterCode in the global scope\r\n var highlighterCode: string;\r\n \r\n interface Window {\r\n ProboLabs?: {\r\n highlight: {\r\n execute: (elementTypes: ElementTagType[]) => Promise<any>;\r\n unexecute: () => Promise<any>;\r\n };\r\n highlightElements: (elements: Array<{ css_selector: string, iframe_selector: string, index: string }>) => void;\r\n unhighlightElements: () => void;\r\n findElements: (elementTypes: string) => any[];\r\n getElementInfo: (element: Element, index: number) => any;\r\n ElementTag: typeof ElementTag;\r\n\r\n // --- New caching API ---\r\n candidates?: any[];\r\n actual?: any;\r\n matchingCandidate?: any;\r\n findAndCacheCandidateElements?: (elementTypes: string[]) => number;\r\n findAndCacheActualElement?: (cssSelector: string, iframeSelector: string | null, isHover: boolean) => boolean;\r\n findAndCacheMatchingCandidate?: () => boolean;\r\n highlightCachedElements?: (which: 'candidates' | 'actual' | 'matching') => void;\r\n unhighlight?: () => void;\r\n reset?: () => void;\r\n getCandidates?: () => any[];\r\n getActual?: () => any;\r\n getMatchingCandidate?: () => any;\r\n };\r\n }\r\n}\r\n\r\nexport class Highlighter {\r\n constructor(private enableConsoleLogs: boolean = true) {}\r\n\r\n private async ensureHighlighterScript(page: Page, maxRetries = 3) {\r\n for (let attempt = 0; attempt < maxRetries; attempt++) {\r\n try {\r\n const scriptExists = await page.evaluate(\r\n `typeof window.ProboLabs?.highlight?.execute === 'function'`\r\n );\r\n\r\n if (!scriptExists) {\r\n proboLogger.debug('Injecting highlighter script...');\r\n await page.evaluate(highlighterCode);\r\n \r\n // Verify the script was injected correctly\r\n const verified = await page.evaluate(`\r\n //console.log('ProboLabs global:', window.ProboLabs);\r\n typeof window.ProboLabs?.highlight?.execute === 'function'\r\n `);\r\n proboLogger.debug('Script injection verified:', verified);\r\n }\r\n return; // Success - exit the function\r\n } catch (error) {\r\n if (attempt === maxRetries - 1) {\r\n throw error;\r\n }\r\n proboLogger.debug(`Script injection attempt ${attempt + 1} failed, retrying after delay...`);\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n }\r\n }\r\n }\r\n\r\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\r\n proboLogger.debug('highlightElements called with:', elementTags);\r\n await this.ensureHighlighterScript(page);\r\n \r\n // Execute the highlight function and await its result\r\n const result = await page.evaluate(\r\n async (tags) => {\r\n //proboLogger.debug('Browser: Starting highlight execution with tag:', tag);\r\n if (!window.ProboLabs?.highlight?.execute) {\r\n console.error('Browser: ProboLabs.highlight.execute is not available!');\r\n return null;\r\n }\r\n const elements = await window.ProboLabs.highlight.execute(tags);\r\n //proboLogger.debug('Browser: Found elements:', elements);\r\n return elements;\r\n },\r\n elementTags\r\n );\r\n \r\n // proboLogger.debug(\"highlighted elements =>\");\r\n // for (let i = 0; i < result.length; i++) { \r\n // proboLogger.debug(result[i]);\r\n // };\r\n \r\n return result;\r\n }\r\n\r\n public async unhighlightElements(page: Page) {\r\n proboLogger.debug('unhighlightElements called');\r\n await this.ensureHighlighterScript(page);\r\n await page.evaluate(() => {\r\n window?.ProboLabs?.highlight?.unexecute();\r\n });\r\n }\r\n\r\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, element_index: string) {\r\n await this.ensureHighlighterScript(page);\r\n proboLogger.debug('Highlighting element with:', { element_css_selector, iframe_selector, element_index });\r\n \r\n await page.evaluate(\r\n ({ css_selector, iframe_selector, index }) => {\r\n const proboLabs = window.ProboLabs;\r\n if (!proboLabs) {\r\n proboLogger.warn('ProboLabs not initialized');\r\n return;\r\n }\r\n // Create ElementInfo object for the element\r\n const elementInfo = {\r\n css_selector: css_selector,\r\n iframe_selector: iframe_selector,\r\n index: index\r\n };\r\n \r\n // Call highlightElements directly\r\n proboLabs.highlightElements([elementInfo]);\r\n },\r\n { \r\n css_selector: element_css_selector,\r\n iframe_selector: iframe_selector,\r\n index: element_index \r\n }\r\n );\r\n }\r\n\r\n \r\n // --- New Clean Caching API ---\r\n /**\r\n * Find and cache candidate elements of a given type (e.g., 'CLICKABLE').\r\n * Returns the number of candidates found.\r\n */\r\n public async findAndCacheCandidateElements(page: Page, elementTypes: string[]): Promise<number> {\r\n await this.ensureHighlighterScript(page);\r\n const result = await page.evaluate(async (types: string[]) => {\r\n return await window.ProboLabs?.findAndCacheCandidateElements?.(types);\r\n }, elementTypes);\r\n return result ?? 0;\r\n }\r\n\r\n /**\r\n * Find and cache the actual interaction element by CSS and iframe selector.\r\n * Returns true if found, false otherwise.\r\n */\r\n public async findAndCacheActualElement(page: Page, cssSelector: string, iframeSelector: string | null, isHover: boolean = false): Promise<boolean> {\r\n await this.ensureHighlighterScript(page);\r\n const result = await page.evaluate((params: { css: string, iframe: string | null, isHover: boolean }) => {\r\n return window.ProboLabs?.findAndCacheActualElement?.(params.css, params.iframe, params.isHover);\r\n }, { css: cssSelector, iframe: iframeSelector, isHover: isHover });\r\n return result ?? false;\r\n }\r\n\r\n /**\r\n * Find and cache the best matching candidate for the actual element.\r\n * Returns true if a match was found, false otherwise.\r\n */\r\n public async findAndCacheMatchingCandidate(page: Page): Promise<boolean> {\r\n await this.ensureHighlighterScript(page);\r\n const result = await page.evaluate(() => {\r\n return window.ProboLabs?.findAndCacheMatchingCandidate?.();\r\n });\r\n return result ?? false;\r\n }\r\n\r\n /**\r\n * Highlight the cached candidates, actual, or matching candidate.\r\n * @param which 'candidates' | 'actual' | 'matching'\r\n */\r\n public async highlightCachedElements(page: Page, which: 'candidates' | 'actual' | 'matching') {\r\n await this.ensureHighlighterScript(page);\r\n await page.evaluate((w: 'candidates' | 'actual' | 'matching') => {\r\n window.ProboLabs?.highlightCachedElements?.(w);\r\n }, which);\r\n }\r\n\r\n /**\r\n * Remove all highlights.\r\n */\r\n public async unhighlightCached(page: Page) {\r\n await this.ensureHighlighterScript(page);\r\n await page.evaluate(() => {\r\n window.ProboLabs?.unhighlight?.();\r\n });\r\n }\r\n\r\n /**\r\n * Reset/clear all cached state.\r\n */\r\n public async resetCached(page: Page) {\r\n await this.ensureHighlighterScript(page);\r\n await page.evaluate(() => {\r\n window.ProboLabs?.reset?.();\r\n });\r\n }\r\n\r\n /**\r\n * Get serializable info for Node/Playwright (candidates, actual, matchingCandidate)\r\n */\r\n public async getCandidatesCached(page: Page) {\r\n await this.ensureHighlighterScript(page);\r\n return await page.evaluate(() => {\r\n return window.ProboLabs?.getCandidates?.();\r\n });\r\n }\r\n\r\n public async getActualCached(page: Page) {\r\n await this.ensureHighlighterScript(page);\r\n return await page.evaluate(() => {\r\n return window.ProboLabs?.getActual?.();\r\n });\r\n }\r\n\r\n public async getMatchingCandidateCached(page: Page) {\r\n await this.ensureHighlighterScript(page);\r\n return await page.evaluate(() => {\r\n return window.ProboLabs?.getMatchingCandidate?.();\r\n });\r\n }\r\n}\r\n\r\nexport { ElementTag, ElementTagType };\r\n","'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\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\n\t'Network request failed' // `cross-fetch`\n];\n\nclass 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\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n","const MAILINATOR_API_KEY = '5bfef31518e84dfbb861b36f59259695';\r\nconst MAILINATOR_DOMAIN = 'probolabs.testinator.com';\r\n\r\nexport interface MailinatorMessage {\r\n id: string;\r\n subject: string;\r\n from: string;\r\n origfrom?: string;\r\n to: string;\r\n time: number;\r\n seconds_ago: number;\r\n domain?: string;\r\n source?: string;\r\n parts?: Array<{\r\n headers: Record<string, string>;\r\n body: string;\r\n }>;\r\n textBody?: string;\r\n htmlBody?: string;\r\n}\r\n\r\ninterface MailinatorResponse {\r\n messages: MailinatorMessage[];\r\n}\r\n\r\n/**\r\n * OTP utility class for working with Mailinator API\r\n */\r\nexport class OTP {\r\n /**\r\n * Fetches the last messages from Mailinator for a specific inbox\r\n * @param inbox - The inbox name to check (without @domain)\r\n * @param since - Unix timestamp to fetch messages since (optional)\r\n * @returns Promise<MailinatorMessage[]> - Array of messages\r\n */\r\n static async fetchLastMessages(inbox: string, since?: number): Promise<MailinatorMessage[]> {\r\n try {\r\n // Use the correct Mailinator API endpoint structure\r\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/${inbox}`;\r\n \r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n const data = await response.json();\r\n \r\n // The API returns messages in 'msgs' property, not 'messages'\r\n const messages = data.msgs || data.messages || data || [];\r\n \r\n // Filter messages by 'since' timestamp if provided\r\n if (since) {\r\n return messages.filter((message: MailinatorMessage) => message.time >= since);\r\n }\r\n \r\n return messages;\r\n } catch (error) {\r\n console.error('Error fetching messages from Mailinator:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Fetches a specific message by ID\r\n * @param messageId - The message ID\r\n * @returns Promise<MailinatorMessage> - The message details\r\n */\r\n static async fetchMessage(messageId: string): Promise<MailinatorMessage> {\r\n try {\r\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/messages/${messageId}`;\r\n \r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n return await response.json();\r\n } catch (error) {\r\n console.error('Error fetching message from Mailinator:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Extracts OTP codes from message content\r\n * @param message - The message to extract OTP from\r\n * @returns string | null - The OTP code or null if not found\r\n */\r\n static extractOTPFromMessage(message: MailinatorMessage): string | null {\r\n // Common OTP patterns - ordered by specificity (most specific first)\r\n const otpPatterns = [\r\n // Very specific patterns for common OTP formats\r\n /(?:verification\\s+code|verification\\s+number|6-digit\\s+verification\\s+code)[\\s\\S]*?(\\d{6})/i,\r\n /(?:use\\s+the\\s+6-digit\\s+verification\\s+code\\s+below)[\\s\\S]*?(\\d{6})/i,\r\n /(?:code\\s+below\\s+to\\s+complete)[\\s\\S]*?(\\d{6})/i,\r\n /(?:verification\\s+code)[\\s\\S]*?(\\d{6})/i,\r\n \r\n // Patterns with context around the code\r\n /(?:OTP|code|verification code|verification):\\s*(\\d{4,8})/i,\r\n /(?:enter|use|input)\\s+(?:the\\s+)?(?:code|OTP|verification code):\\s*(\\d{4,8})/i,\r\n /(?:your\\s+)?(?:verification\\s+)?(?:code\\s+is|OTP\\s+is):\\s*(\\d{4,8})/i,\r\n /(?:code|OTP|pin):\\s*(\\d{4,8})/i,\r\n /(?:code|OTP)\\s+is\\s+(\\d{4,8})/i,\r\n \r\n // Look for codes in specific contexts (avoiding URLs and tracking IDs)\r\n /(?:complete\\s+your\\s+sign-in)[\\s\\S]*?(\\d{6})/i,\r\n /(?:valid\\s+for\\s+the\\s+next)[\\s\\S]*?(\\d{6})/i,\r\n \r\n // Fallback: 6-digit numbers (most common OTP length)\r\n /(?:^|\\s)(\\d{6})(?:\\s|$)/i,\r\n \r\n // Last resort: 4-8 digit numbers (but avoid very long ones that are likely tracking IDs)\r\n /(?:^|\\s)(\\d{4,8})(?:\\s|$)/i\r\n ];\r\n\r\n // Helper function to check if a number is likely an OTP (not a tracking ID, phone number, etc.)\r\n const isValidOTP = (number: string): boolean => {\r\n // Common OTP lengths\r\n if (number.length < 4 || number.length > 8) return false;\r\n \r\n // Only filter out very obvious non-OTPs\r\n // Avoid numbers that are all the same digit (unlikely to be OTPs)\r\n if (/^(\\d)\\1+$/.test(number)) return false;\r\n \r\n // Avoid very long numbers that are clearly tracking IDs (but be more lenient)\r\n if (number.length >= 8 && parseInt(number) > 99999999) return false;\r\n \r\n return true;\r\n };\r\n\r\n // Helper function to extract OTP from text content\r\n const extractFromText = (text: string): string | null => {\r\n if (!text) return null;\r\n \r\n for (const pattern of otpPatterns) {\r\n const match = text.match(pattern);\r\n if (match && match[1] && isValidOTP(match[1])) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n // Helper function to strip HTML tags\r\n const stripHtml = (html: string): string => {\r\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\r\n };\r\n\r\n // 1. Try to extract from text body first (preferred)\r\n if (message.textBody) {\r\n const otp = extractFromText(message.textBody);\r\n if (otp) return otp;\r\n }\r\n\r\n // 2. Try to extract from HTML body (strip HTML tags first)\r\n if (message.htmlBody) {\r\n const plainText = stripHtml(message.htmlBody);\r\n const otp = extractFromText(plainText);\r\n if (otp) return otp;\r\n }\r\n\r\n // 3. Try to extract from message parts\r\n if (message.parts && message.parts.length > 0) {\r\n for (const part of message.parts) {\r\n if (part.body) {\r\n const otp = extractFromText(part.body);\r\n if (otp) return otp;\r\n }\r\n }\r\n }\r\n\r\n // 4. Fallback: try to extract from subject\r\n const otp = extractFromText(message.subject);\r\n if (otp) return otp;\r\n \r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the text content from a message for debugging/display purposes\r\n * @param message - The message to extract text from\r\n * @returns string - The text content of the message\r\n */\r\n static getMessageTextContent(message: MailinatorMessage): string {\r\n // Helper function to strip HTML tags\r\n const stripHtml = (html: string): string => {\r\n return html.replace(/<[^>]*>/g, '').replace(/&[^;]+;/g, ' ');\r\n };\r\n\r\n // Priority order: textBody > htmlBody > parts > subject\r\n if (message.textBody) {\r\n return message.textBody;\r\n }\r\n\r\n if (message.htmlBody) {\r\n return stripHtml(message.htmlBody);\r\n }\r\n\r\n if (message.parts && message.parts.length > 0) {\r\n return message.parts.map(part => part.body || '').join('\\n');\r\n }\r\n\r\n return message.subject || '';\r\n }\r\n\r\n /**\r\n * Fetches messages from all inboxes in the domain\r\n * @param limit - Number of messages to fetch (default: 50)\r\n * @param sort - Sort order: 'ascending' or 'descending' (default: 'descending')\r\n * @param full - Whether to fetch full message content (default: false)\r\n * @returns Promise<MailinatorMessage[]> - Array of messages from all inboxes\r\n */\r\n static async fetchAllInboxMessages(\r\n limit: number = 50,\r\n sort: 'ascending' | 'descending' = 'descending',\r\n full: boolean = false\r\n ): Promise<MailinatorMessage[]> {\r\n try {\r\n const url = `https://api.mailinator.com/v2/domains/${MAILINATOR_DOMAIN}/inboxes/?limit=${limit}&sort=${sort}${full ? '&full=true' : ''}`;\r\n \r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${MAILINATOR_API_KEY}`,\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Mailinator API error: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n const data = await response.json();\r\n return data.msgs || data.messages || data || [];\r\n } catch (error) {\r\n console.error('Error fetching messages from all inboxes:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Waits for an OTP to arrive in the inbox and extracts it\r\n * @param inbox - The inbox name to monitor (optional - if not provided, searches all inboxes)\r\n * @param timeout - Maximum time to wait in milliseconds (default: 30000)\r\n * @param checkInterval - How often to check in milliseconds (default: 1000)\r\n * @param checkRecentMessagesSinceMs - When > 0, check messages from the last X milliseconds and return the most recent OTP (default: 0)\r\n * @returns Promise<string | null> - The extracted OTP code or null if timeout/no OTP found\r\n */\r\n static async waitForOTP(\r\n inbox?: string, \r\n timeout: number = 30000, \r\n checkInterval: number = 1000,\r\n checkRecentMessagesSinceMs: number = 0\r\n ): Promise<string | null> {\r\n const startTime = Date.now();\r\n \r\n // If checkRecentMessagesSinceMs > 0, check for recent messages first\r\n if (checkRecentMessagesSinceMs > 0) {\r\n console.log(`Checking for OTP in messages from the last ${checkRecentMessagesSinceMs}ms...`);\r\n \r\n const recentMessagesCutoff = Date.now() - checkRecentMessagesSinceMs;\r\n const recentMessages = inbox \r\n ? await OTP.fetchLastMessages(inbox)\r\n : await OTP.fetchAllInboxMessages();\r\n \r\n // Filter messages from the specified time window\r\n const messagesFromWindow = recentMessages.filter(msg => msg.time >= recentMessagesCutoff);\r\n \r\n // Sort by time (most recent first) and check for OTP\r\n const sortedMessages = messagesFromWindow.sort((a, b) => b.time - a.time);\r\n \r\n for (const message of sortedMessages) {\r\n let otp = OTP.extractOTPFromMessage(message);\r\n if (otp) {\r\n console.log(`Found OTP in recent message: ${otp}`);\r\n return otp;\r\n }\r\n \r\n // If no OTP found in summary, fetch full message details\r\n try {\r\n const fullMessage = await OTP.fetchMessage(message.id);\r\n otp = OTP.extractOTPFromMessage(fullMessage);\r\n if (otp) {\r\n console.log(`Found OTP in recent full message: ${otp}`);\r\n return otp;\r\n }\r\n } catch (error) {\r\n console.warn(`Error fetching full message ${message.id}:`, error);\r\n }\r\n }\r\n \r\n console.log(`No OTP found in recent messages, starting to monitor for new messages...`);\r\n }\r\n \r\n // Get initial messages for monitoring new ones (from specific inbox or all inboxes)\r\n const initialMessages = inbox \r\n ? await OTP.fetchLastMessages(inbox)\r\n : await OTP.fetchAllInboxMessages();\r\n const initialMessageIds = new Set(initialMessages.map(msg => msg.id));\r\n \r\n while (Date.now() - startTime < timeout) {\r\n await new Promise(resolve => setTimeout(resolve, checkInterval));\r\n \r\n try {\r\n // Get current messages (from specific inbox or all inboxes)\r\n const currentMessages = inbox \r\n ? await OTP.fetchLastMessages(inbox)\r\n : await OTP.fetchAllInboxMessages();\r\n const newMessages = currentMessages.filter(msg => !initialMessageIds.has(msg.id));\r\n \r\n if (newMessages.length > 0) {\r\n // Get the first new message and try to extract OTP\r\n const newMessage = newMessages[0];\r\n \r\n // First try to extract OTP from the message summary (faster)\r\n let otp = OTP.extractOTPFromMessage(newMessage);\r\n if (otp) {\r\n return otp;\r\n }\r\n \r\n // If no OTP found in summary, fetch full message details\r\n const fullMessage = await OTP.fetchMessage(newMessage.id);\r\n otp = OTP.extractOTPFromMessage(fullMessage);\r\n if (otp) {\r\n return otp;\r\n }\r\n }\r\n } catch (error) {\r\n console.warn('Error checking for new messages:', error);\r\n }\r\n }\r\n \r\n return null; // Timeout reached or no OTP found\r\n }\r\n}\r\n\r\n","import { Frame, Locator, Page } from '@playwright/test';\r\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex } from '@probolabs/probo-shared';\r\nimport { findClosestVisibleElement } from './actions';\r\nimport { OTP } from './otp';\r\n\r\nexport interface RunStepParams extends Partial<PlaywrightTimeoutConfig> {\r\n iframeSelector?: string;\r\n elementSelector?: string;\r\n action: PlaywrightAction;\r\n argument?: string | string[]; \r\n annotation?: string;\r\n // Wait-for specific configuration\r\n pollingInterval?: number;\r\n timeout?: number;\r\n}\r\n\r\nexport interface RunStepResult {\r\n key: string;\r\n value: any\r\n}\r\n\r\nexport class ProboPlaywright {\r\n private readonly config: PlaywrightTimeoutConfig;\r\n private page: Page | null = null;\r\n\r\n constructor(config: PlaywrightTimeoutConfig = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, page: Page | null = null) {\r\n // Merge provided config with defaults to ensure all properties are defined\r\n this.config = {\r\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\r\n ...config\r\n };\r\n this.setPage(page);\r\n \r\n\r\n \r\n }\r\n\r\n /**\r\n * Sets the Playwright page instance for this ProboPlaywright instance.\r\n * Also applies the configured default navigation and action timeouts to the page.\r\n * \r\n * @param page - The Playwright Page instance to use, or null to unset.\r\n */\r\n public setPage(page: Page | null) {\r\n this.page = page;\r\n if (this.page) {\r\n this.page.setDefaultNavigationTimeout(this.config.playwrightNavigationTimeout);\r\n this.page.setDefaultTimeout(this.config.playwrightActionTimeout);\r\n\r\n }\r\n }\r\n\r\n \r\n\r\n /**\r\n * Executes a single step in the test scenario with the specified action on the target element.\r\n * Handles iframe navigation, element highlighting, and various Playwright actions like click, fill, validate, etc.\r\n * \r\n * @param params - Configuration object containing element selectors, action type, arguments, and display options\r\n * @returns Promise that resolves to a result object for extract actions, or void for other actions\r\n * @throws Error if element is not found or validation fails\r\n */\r\n public async runStep(params: RunStepParams): Promise<string | void> {\r\n \r\n const { \r\n action, \r\n argument = '', \r\n iframeSelector = '', \r\n elementSelector = '', \r\n annotation = '', \r\n } = params;\r\n \r\n // 0. Check that page is set\r\n if (!this.page) {\r\n throw new Error('ProboPlaywright: Page is not set');\r\n }\r\n\r\n // 1. Check if we need to visit a url\r\n if (action === PlaywrightAction.VISIT_URL || action === PlaywrightAction.VISIT_BASE_URL) {\r\n try {\r\n await this.page.goto(argument as string, { timeout: this.config.playwrightNavigationTimeout });\r\n } catch (e) {\r\n throw new Error(`Failed to navigate to ${argument}`);\r\n }\r\n return;\r\n }\r\n \r\n // 2. Get the locator (iframe or not)\r\n const startTime = Date.now();\r\n let locator;\r\n \r\n if (iframeSelector && iframeSelector.length > 0) {\r\n locator = this.page.frameLocator(iframeSelector).locator(elementSelector);\r\n } else {\r\n locator = this.page.locator(elementSelector);\r\n }\r\n\r\n \r\n // Fail fast: immediately validate that the element exists for non-wait actions\r\n const locator_timeout = (action === PlaywrightAction.WAIT_FOR) ? (params.timeout as number) || 10000 : this.config.playwrightLocatorTimeout;\r\n try {\r\n await locator.waitFor({ state: 'attached', timeout: locator_timeout });\r\n } catch (e) {\r\n throw new Error(`Element not found with selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''} after ${locator_timeout}ms`);\r\n }\r\n\r\n if (action === PlaywrightAction.HOVER) {\r\n const visibleLocator = await findClosestVisibleElement(locator);\r\n if (visibleLocator) {\r\n locator = visibleLocator;\r\n }\r\n }\r\n\r\n // 3. Highlight, wait, unhighlight if highlightTimeout > 0\r\n if (this.config.highlightTimeout > 0) {\r\n await this.highlight(locator, annotation);\r\n await this.page.waitForTimeout(this.config.highlightTimeout);\r\n await this.unhighlight(locator);\r\n }\r\n\r\n // 4. Action logic\r\n switch (action) {\r\n case PlaywrightAction.CLICK:\r\n case PlaywrightAction.CHECK_CHECKBOX:\r\n case PlaywrightAction.SELECT_RADIO:\r\n await this.robustClick(locator);\r\n break;\r\n case PlaywrightAction.FILL_IN:\r\n await this.robustFill(locator, argument as string);\r\n break;\r\n case PlaywrightAction.SELECT_DROPDOWN:\r\n await locator.selectOption(argument);\r\n break; \r\n case PlaywrightAction.SET_SLIDER:\r\n await this.setSliderValue(locator, argument as string);\r\n break;\r\n case PlaywrightAction.WAIT_FOR_OTP:\r\n // till we figure out how to get the inbox name we will wait for ANY OTP in all inboxes \r\n const otp = await OTP.waitForOTP();\r\n if (otp) {\r\n console.log(`✅ OTP found: ${otp}`);\r\n await locator.fill(otp);\r\n } else {\r\n console.log(`❌ OTP not found`);\r\n }\r\n break;\r\n \r\n case PlaywrightAction.ASSERT_CONTAINS_VALUE:\r\n const containerText = await this.getTextValue(locator);\r\n if (!matchRegex(containerText, argument as string)) {\r\n throw new Error(`Validation failed. Expected text \"${containerText}\" to match \"${argument}\".`);\r\n }\r\n break;\r\n case PlaywrightAction.ASSERT_EXACT_VALUE:\r\n const actualText = await this.getTextValue(locator);\r\n \r\n if (actualText !== argument) {\r\n throw new Error(`Validation failed. Expected text \"${argument}\", but got \"${actualText}\".`);\r\n }\r\n break;\r\n case PlaywrightAction.HOVER:\r\n //console.log('HOVER', locator);\r\n \r\n if (locator) {\r\n //console.log('executing HOVER on closest visible ancestor');\r\n await locator.hover();\r\n } else {\r\n //console.log('not executing HOVER because no visible ancestor found');\r\n }\r\n break;\r\n case PlaywrightAction.SCROLL_TO_ELEMENT:\r\n // Restore exact scroll positions from recording\r\n const scrollData = JSON.parse(argument as string);\r\n try {\r\n console.log('🔄 Restoring scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft);\r\n await locator.evaluate((el: HTMLElement, scrollData: { scrollTop: number; scrollLeft: number }) => {\r\n // el.scrollTop = scrollData.scrollTop;\r\n // el.scrollLeft = scrollData.scrollLeft;\r\n el.scrollTo({left: scrollData.scrollLeft, top: scrollData.scrollTop, behavior: 'smooth'});\r\n }, { scrollTop: scrollData.scrollTop, scrollLeft: scrollData.scrollLeft }, { timeout: 2000 });\r\n } catch (e) {\r\n console.error('🔄 Failed to restore scroll position for container:', locator, 'scrollTop:', scrollData.scrollTop, 'scrollLeft:', scrollData.scrollLeft, 'error:', e);\r\n }\r\n await this.page.waitForTimeout(500);\r\n break;\r\n case PlaywrightAction.UPLOAD_FILES:\r\n await locator.setInputFiles(argument as string[]);\r\n break;\r\n case PlaywrightAction.EXTRACT_VALUE:\r\n let extractedText = await this.getTextValue(locator);\r\n return extractedText;\r\n case PlaywrightAction.WAIT_FOR: \r\n const expectedText = argument as string;\r\n const pollingInterval = (params.pollingInterval as number) || 500; // Default 500ms\r\n const timeout = (params.timeout as number) || 10000; // Default 10 seconds\r\n \r\n let textMatches = false; \r\n let currentText = ''; \r\n while (!textMatches && (Date.now() - startTime) < timeout) {\r\n try { \r\n // Check if element is visible first\r\n const isVisible = await locator.isVisible();\r\n \r\n if (isVisible) {\r\n // Get the current text content only if element is visible\r\n currentText = await this.getTextValue(locator);\r\n \r\n // Check if the text matches (using the same logic as ASSERT_CONTAINS_VALUE)\r\n if (matchRegex(currentText, expectedText)) {\r\n textMatches = true;\r\n console.log(`✅ Wait for text completed successfully. Found: \"${currentText}\"`);\r\n } else {\r\n // Text doesn't match yet, wait for the polling interval\r\n if ((Date.now() - startTime) < timeout) {\r\n await this.page.waitForTimeout(pollingInterval);\r\n }\r\n }\r\n } else {\r\n // Element is not visible, wait for the polling interval\r\n if ((Date.now() - startTime) < timeout) {\r\n await this.page.waitForTimeout(pollingInterval);\r\n }\r\n }\r\n } catch (e) {\r\n throw new Error(`Wait for text failed while trying to extract text from selector: ${elementSelector}${iframeSelector ? ` in iframe: ${iframeSelector}` : ''}`);\r\n }\r\n }\r\n \r\n // Timeout reached without a match\r\n if (!textMatches) { \r\n throw new Error(`Wait for text failed. Expected \"${expectedText}\" to match \"${currentText}\" after ${timeout}ms of polling every ${pollingInterval}ms`);\r\n } \r\n break;\r\n default:\r\n throw new Error(`Unhandled action: ${action}`);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a visual highlight overlay on the target element with optional annotation text.\r\n * The highlight appears as a red border around the element and can include descriptive text.\r\n * \r\n * @param locator - The Playwright locator for the element to highlight\r\n * @param annotation - Optional text annotation to display above/below the highlighted element\r\n */\r\n private async highlight(locator: Locator, annotation: string | null = null) {\r\n try {\r\n await locator.evaluate((el: HTMLElement) => {\r\n const overlay = el.ownerDocument.createElement('div');\r\n overlay.id = 'highlight-overlay';\r\n overlay.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 2147483647;\r\n `;\r\n el.ownerDocument.body.appendChild(overlay);\r\n const bbox = el.getBoundingClientRect();\r\n const highlight = el.ownerDocument.createElement('div');\r\n highlight.style.cssText = `\r\n position: fixed;\r\n left: ${bbox.x}px;\r\n top: ${bbox.y}px;\r\n width: ${bbox.width}px;\r\n height: ${bbox.height}px;\r\n border: 2px solid rgb(255, 0, 0);\r\n transition: all 0.2s ease-in-out;\r\n `;\r\n overlay.appendChild(highlight);\r\n }, { timeout: 500 });\r\n } catch (e) {\r\n console.log('highlight: failed to run locator.evaluate()', e);\r\n }\r\n if (annotation) {\r\n await locator.evaluate((el: HTMLElement, annotation: string) => {\r\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\r\n if (overlay) {\r\n const bbox = el.getBoundingClientRect();\r\n const annotationEl = el.ownerDocument.createElement('div');\r\n annotationEl.style.cssText = `\r\n position: fixed;\r\n left: ${bbox.x}px;\r\n top: ${bbox.y - 25}px;\r\n padding: 2px 6px;\r\n background-color: rgba(255, 255, 0, 0.6);\r\n color: black;\r\n font-size: 16px;\r\n font-family: 'Courier New', Courier, monospace;\r\n font-weight: bold;\r\n border-radius: 3px;\r\n pointer-events: none;\r\n z-index: 2147483647;\r\n `;\r\n annotationEl.textContent = annotation;\r\n\r\n // If element is too close to top of window, position annotation below\r\n if (bbox.y < 30) {\r\n annotationEl.style.top = `${bbox.y + bbox.height + 5}px`;\r\n }\r\n\r\n overlay.appendChild(annotationEl);\r\n }\r\n }, annotation, { timeout: 500 });\r\n }\r\n };\r\n\r\n /**\r\n * Removes the highlight overlay from the target element.\r\n * Cleans up the visual highlighting created by the highlight method.\r\n * \r\n * @param locator - The Playwright locator for the element to unhighlight\r\n */\r\n private async unhighlight(locator: Locator) {\r\n try {\r\n await locator.evaluate((el: HTMLElement) => {\r\n const overlay = el.ownerDocument.getElementById('highlight-overlay');\r\n if (overlay) {\r\n overlay.remove();\r\n }\r\n }, { timeout: 500 });\r\n } catch (e) {\r\n console.log('unhighlight: failed to run locator.evaluate()', e);\r\n }\r\n };\r\n\r\n /**\r\n * Attempts to fill a form field with the specified value using multiple fallback strategies.\r\n * First tries the standard fill method, then falls back to click + type if needed.\r\n * \r\n * @param locator - The Playwright locator for the input element\r\n * @param value - The text value to fill into the input field\r\n */\r\n private async robustFill(locator: Locator, value: string) {\r\n if (!this.page) {\r\n throw new Error('ProboPlaywright: Page is not set');\r\n }\r\n try {\r\n await locator.fill(value);\r\n return;\r\n } catch (err) {\r\n console.warn('robustFill: failed to run locator.fill()', err);\r\n }\r\n // fallback: click and type\r\n try {\r\n await this.robustClick(locator);\r\n await this.page.keyboard.type(value);\r\n return;\r\n } catch (err) {\r\n console.warn('robustFill: failed to run locator.click() and page.keyboard.type()', err);\r\n };\r\n };\r\n\r\n /**\r\n * Performs a robust click operation using multiple fallback strategies.\r\n * Attempts standard click first, then mouse click at center coordinates, and finally native DOM events.\r\n * \r\n * @param locator - The Playwright locator for the element to click\r\n * @throws Error if all click methods fail\r\n */\r\n private async robustClick(locator: Locator) {\r\n if (!this.page) {\r\n throw new Error('ProboPlaywright: Page is not set');\r\n }\r\n // start with a standard click\r\n try {\r\n await locator.click({ noWaitAfter: false, timeout: this.config.playwrightActionTimeout });\r\n return;\r\n } catch (err) {\r\n console.warn('robustClick: failed to run locator.click(), trying mouse.click()');\r\n }\r\n // try clicking using mouse at the center of the element\r\n try {\r\n const bbox = await locator.boundingBox({ timeout: this.config.playwrightLocatorTimeout });\r\n if (bbox) {\r\n await this.page.mouse.click(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\r\n return;\r\n } else {\r\n console.warn('robustClick: bounding box not found');\r\n }\r\n } catch (err2) {\r\n console.warn('robustClick: failed to run page.mouse.click()');\r\n }\r\n // fallback: dispatch native mouse events manually\r\n try {\r\n await locator.evaluate((el) => {\r\n ['mousedown', 'mouseup', 'click'].forEach(type => {\r\n const event = new MouseEvent(type, {\r\n bubbles: true,\r\n cancelable: true,\r\n view: window\r\n });\r\n el.dispatchEvent(event);\r\n });\r\n }, { timeout: this.config.playwrightActionTimeout });\r\n } catch (err3) {\r\n console.error('robustClick: all click methods failed:', err3);\r\n throw err3; // Re-throw final error if all fallbacks fail\r\n }\r\n };\r\n \r\n /**\r\n * Extracts text content from an element using multiple strategies.\r\n * Tries textContent first, then inputValue, and finally looks for nested input elements.\r\n * Returns normalized and trimmed text for consistent comparison.\r\n * \r\n * @param locator - The Playwright locator for the element to extract text from\r\n * @returns Normalized text content with consistent whitespace handling\r\n */\r\n private async getTextValue(locator: Locator) {\r\n let textValue = await locator.textContent();\r\n if (!textValue) {\r\n try {\r\n textValue = await locator.inputValue();\r\n } catch (err) {\r\n console.warn('getTextValue: failed to run locator.inputValue()', err);\r\n }\r\n }\r\n if (!textValue) {\r\n try {\r\n textValue = await locator.locator('input').inputValue();\r\n } catch (err) {\r\n console.warn('getTextValue: failed to run locator.locator(\"input\").inputValue()', err);\r\n }\r\n }\r\n if (!textValue) {\r\n textValue = '';\r\n }\r\n // Trim and normalize whitespace to make comparison more robust\r\n return textValue.trim().replace(/\\s+/g, ' ');\r\n };\r\n \r\n private async setSliderValue(locator: Locator, value: string) {\r\n await locator.evaluate((el: HTMLInputElement, value: string) => {\r\n el.value = value;\r\n el.dispatchEvent(new Event('input', { bubbles: true }));\r\n el.dispatchEvent(new Event('change', { bubbles: true }));\r\n }, value, { timeout: this.config.playwrightActionTimeout });\r\n }\r\n} /* class ProboPlaywright */\r\n","import { Page, Frame } from 'playwright';\r\nimport { proboLogger } from './probo-logger';\r\n\r\nexport interface NavTrackerOptions {\r\n waitForStabilityQuietTimeout?: number; // Time to wait for network stability (default: 2000ms)\r\n waitForStabilityInitialDelay?: number; // Initial delay before monitoring starts (default: 500ms)\r\n waitForStabilityGlobalTimeout?: number; // Overall timeout for stabilization (default: 15000ms)\r\n pollMs?: number; // Polling interval (default: 100ms)\r\n maxInflight?: number; // Maximum inflight requests (default: 0)\r\n inflightGraceMs?: number; // Grace period for inflight requests (default: 4000ms)\r\n waitForStabilityVerbose?: boolean; // Enable verbose logging (default: false)\r\n}\r\n\r\ntype ResourceType =\r\n | 'Document' | 'Stylesheet' | 'Image' | 'Media' | 'Font' | 'Script'\r\n | 'TextTrack' | 'XHR' | 'Fetch' | 'EventSource' | 'WebSocket' | 'Manifest' | 'Other';\r\n\r\n/**\r\n * Global navigation tracker that monitors page navigation events and network activity\r\n * using CDP (Chrome DevTools Protocol) for comprehensive network monitoring\r\n * \r\n * This is a singleton class - only one instance can exist at a time\r\n */\r\nexport class NavTracker {\r\n private static instance: NavTracker | null = null;\r\n private page: Page;\r\n private navigationCount: number = 0;\r\n private lastNavTime: number | null = null;\r\n private waitForStabilityQuietTimeout: number;\r\n private waitForStabilityInitialDelay: number;\r\n private waitForStabilityGlobalTimeout: number;\r\n private pollMs: number;\r\n private maxInflight: number;\r\n private inflightGraceMs: number;\r\n private waitForStabilityVerbose: boolean;\r\n private isListening: boolean = false;\r\n private instanceId: string;\r\n private client: any = null;\r\n private inflight: Set<string> = new Set();\r\n private lastHardNavAt: number = 0;\r\n private lastSoftNavAt: number = 0;\r\n private lastNetworkActivityAt: number = 0;\r\n private totalRequestsTracked: number = 0;\r\n\r\n // Define relevant resource types and content types\r\n private readonly RELEVANT_RESOURCE_TYPES = [\r\n 'Document',\r\n 'Stylesheet', \r\n 'Image',\r\n 'Font',\r\n 'Script',\r\n 'XHR',\r\n 'Fetch'\r\n ];\r\n\r\n private readonly RELEVANT_CONTENT_TYPES = [\r\n 'text/html',\r\n 'text/css',\r\n 'application/javascript',\r\n 'image/',\r\n 'font/',\r\n 'application/json',\r\n ];\r\n\r\n // Additional patterns to filter out\r\n private readonly IGNORED_URL_PATTERNS = [\r\n // Analytics and tracking\r\n 'analytics',\r\n 'tracking',\r\n 'telemetry',\r\n 'beacon',\r\n 'metrics',\r\n // Ad-related\r\n 'doubleclick',\r\n 'adsystem',\r\n 'adserver',\r\n 'advertising',\r\n // Social media widgets\r\n 'facebook.com/plugins',\r\n 'platform.twitter',\r\n 'linkedin.com/embed',\r\n // Live chat and support\r\n 'livechat',\r\n 'zendesk',\r\n 'intercom',\r\n 'crisp.chat',\r\n 'hotjar',\r\n // Push notifications\r\n 'push-notifications',\r\n 'onesignal',\r\n 'pushwoosh',\r\n // Background sync/heartbeat\r\n 'heartbeat',\r\n 'ping',\r\n 'alive',\r\n // WebRTC and streaming\r\n 'webrtc',\r\n 'rtmp://',\r\n 'wss://',\r\n // Common CDNs for dynamic content\r\n 'cloudfront.net',\r\n 'fastly.net',\r\n ];\r\n\r\n /**\r\n * Private constructor - use getInstance() to get the singleton instance\r\n */\r\n private constructor(page: Page, options: NavTrackerOptions = {}) {\r\n this.page = page;\r\n this.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout ?? 2000;\r\n this.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay ?? 500;\r\n this.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout ?? 15000;\r\n this.pollMs = options.pollMs ?? 100;\r\n this.maxInflight = options.maxInflight ?? 0;\r\n this.inflightGraceMs = options.inflightGraceMs ?? 4000;\r\n this.waitForStabilityVerbose = options.waitForStabilityVerbose ?? false;\r\n \r\n proboLogger.debug(`NavTracker constructor set values: quietTimeout=${this.waitForStabilityQuietTimeout}, initialDelay=${this.waitForStabilityInitialDelay}, globalTimeout=${this.waitForStabilityGlobalTimeout}, verbose=${this.waitForStabilityVerbose}`);\r\n this.instanceId = Math.random().toString(36).substr(2, 9);\r\n \r\n // Initialize timestamps\r\n const now = Date.now();\r\n this.lastHardNavAt = now;\r\n this.lastSoftNavAt = now;\r\n this.lastNetworkActivityAt = now;\r\n\r\n // Note: start() is called asynchronously in getInstance() to ensure proper initialization\r\n }\r\n\r\n /**\r\n * Start listening for navigation and network events using CDP (private method)\r\n */\r\n private async start(): Promise<void> {\r\n if (this.isListening) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\r\n return;\r\n }\r\n\r\n try {\r\n // Set up CDP session\r\n this.client = await this.page.context().newCDPSession(this.page);\r\n await this.client.send('Page.enable');\r\n await this.client.send('Network.enable');\r\n await this.client.send('Runtime.enable');\r\n await this.client.send('Page.setLifecycleEventsEnabled', { enabled: true });\r\n\r\n // Set up navigation event handlers\r\n this.client.on('Page.frameNavigated', (e: any) => {\r\n if (!e.frame?.parentId) { // main frame has no parentId\r\n this.lastHardNavAt = Date.now();\r\n this.navigationCount++;\r\n this.lastNavTime = Date.now();\r\n \r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Hard navigation detected at ${this.lastHardNavAt}`);\r\n }\r\n }\r\n });\r\n\r\n this.client.on('Page.navigatedWithinDocument', (_e: any) => {\r\n this.lastSoftNavAt = Date.now();\r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Soft navigation detected at ${this.lastSoftNavAt}`);\r\n }\r\n });\r\n\r\n // Set up network event handlers\r\n this.client.on('Network.requestWillBeSent', (e: any) => {\r\n this.onNetworkRequest(e);\r\n });\r\n\r\n this.client.on('Network.loadingFinished', (e: any) => {\r\n this.onNetworkResponse(e, 'finished');\r\n });\r\n\r\n this.client.on('Network.loadingFailed', (e: any) => {\r\n this.onNetworkResponse(e, 'failed');\r\n });\r\n\r\n this.isListening = true;\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: started CDP-based monitoring`);\r\n } catch (error) {\r\n proboLogger.error(`NavTracker[${this.instanceId}]: Failed to start CDP monitoring: ${error}`);\r\n // Fall back to basic navigation tracking\r\n this.page.on(\"framenavigated\", (frame: Frame) => {\r\n if (frame === this.page.mainFrame()) {\r\n this.navigationCount++;\r\n this.lastNavTime = Date.now();\r\n this.lastHardNavAt = Date.now();\r\n }\r\n });\r\n this.isListening = true;\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening for navigation and network events (private method)\r\n */\r\n private stop(): void {\r\n if (!this.isListening) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: not listening, ignoring stop()`);\r\n return;\r\n }\r\n\r\n try {\r\n if (this.client) {\r\n // Check if the page is still available before detaching\r\n if (this.page && !this.page.isClosed()) {\r\n this.client.detach();\r\n } else {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page is closed, skipping CDP detach`);\r\n }\r\n this.client = null;\r\n }\r\n } catch (error) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Error detaching CDP client: ${error}`);\r\n }\r\n\r\n this.isListening = false;\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped CDP monitoring`);\r\n }\r\n\r\n /**\r\n * Handle network request events\r\n */\r\n private onNetworkRequest(e: any): void {\r\n const requestType = e.type as ResourceType | undefined;\r\n const url = e.request?.url ?? '';\r\n \r\n // Filter by resource type\r\n if (!this.RELEVANT_RESOURCE_TYPES.includes(requestType as any)) {\r\n return;\r\n }\r\n\r\n // Filter out streaming, websocket, and other real-time requests\r\n if (['WebSocket', 'EventSource', 'Media', 'Manifest', 'Other'].includes(requestType as any)) {\r\n return;\r\n }\r\n\r\n // Filter out by URL patterns\r\n const urlLower = url.toLowerCase();\r\n if (this.IGNORED_URL_PATTERNS.some(pattern => urlLower.includes(pattern))) {\r\n return;\r\n }\r\n\r\n // Filter out data URLs and blob URLs\r\n if (urlLower.startsWith('data:') || urlLower.startsWith('blob:')) {\r\n return;\r\n }\r\n\r\n // Filter out requests with certain headers\r\n const headers = e.request?.headers || {};\r\n if (headers['purpose'] === 'prefetch' || ['video', 'audio'].includes(headers['sec-fetch-dest'])) {\r\n return;\r\n }\r\n\r\n this.inflight.add(e.requestId);\r\n this.totalRequestsTracked++;\r\n this.lastNetworkActivityAt = Date.now();\r\n\r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request started: ${requestType} - ${url}`);\r\n }\r\n }\r\n\r\n /**\r\n * Handle network response events\r\n */\r\n private onNetworkResponse(e: any, status: 'finished' | 'failed'): void {\r\n const requestId = e.requestId;\r\n \r\n if (!this.inflight.has(requestId)) {\r\n return;\r\n }\r\n\r\n this.inflight.delete(requestId);\r\n this.lastNetworkActivityAt = Date.now();\r\n\r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Network request ${status} (${this.inflight.size} remaining)`);\r\n }\r\n }\r\n\r\n /**\r\n * Check if navigation and network activity has stabilized\r\n */\r\n private hasNavigationStabilized(): boolean {\r\n const now = Date.now();\r\n \r\n // Use the most recent activity timestamp\r\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\r\n const quietSinceMs = now - lastActivityAt;\r\n const inflightOk = this.inflight.size <= this.maxInflight || (now - this.lastHardNavAt) > this.inflightGraceMs;\r\n \r\n const isStabilized = quietSinceMs >= this.waitForStabilityQuietTimeout && inflightOk;\r\n \r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(\r\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - quietSinceMs=${quietSinceMs}ms, waitForStabilityQuietTimeout=${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}, inflightOk=${inflightOk}, stabilized=${isStabilized}`\r\n );\r\n }\r\n \r\n return isStabilized;\r\n }\r\n\r\n /**\r\n * Wait for navigation and network activity to stabilize\r\n * Uses CDP-based monitoring for comprehensive network activity tracking\r\n */\r\n async waitForNavigationToStabilize(): Promise<void> {\r\n const now = Date.now();\r\n const lastActivityAt = Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\r\n const timeSinceLastActivity = now - lastActivityAt;\r\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)`);\r\n \r\n // Ensure CDP monitoring is properly initialized\r\n if (!this.isListening) {\r\n proboLogger.warn(`NavTracker[${this.instanceId}]: CDP monitoring not initialized, initializing now...`);\r\n await this.start();\r\n }\r\n \r\n const startTime = Date.now();\r\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\r\n \r\n try {\r\n // Initial delay to catch any new network activity triggered by user actions\r\n if (this.waitForStabilityInitialDelay > 0) {\r\n if (this.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: initial delay of ${this.waitForStabilityInitialDelay}ms to catch new network activity`);\r\n }\r\n await sleep(this.waitForStabilityInitialDelay);\r\n }\r\n \r\n // Wait a short time to catch any missed events\r\n await sleep(100);\r\n \r\n // Main stabilization loop\r\n while (true) {\r\n const now = Date.now();\r\n \r\n // Check for timeout\r\n if (now - startTime > this.waitForStabilityGlobalTimeout) {\r\n proboLogger.warn(`NavTracker[${this.instanceId}]: Timeout reached after ${this.waitForStabilityGlobalTimeout}ms with ${this.inflight.size} pending requests`);\r\n break;\r\n }\r\n \r\n // Check if stabilized\r\n if (this.hasNavigationStabilized()) {\r\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Page stabilized after ${quietSinceMs}ms of quiet time`);\r\n break;\r\n }\r\n \r\n // Log progress every 2 seconds in verbose mode\r\n if (this.waitForStabilityVerbose && now % 2000 < this.pollMs) {\r\n const quietSinceMs = now - Math.max(this.lastHardNavAt, this.lastSoftNavAt, this.lastNetworkActivityAt);\r\n proboLogger.debug(`NavTracker[${this.instanceId}]: Status - quiet=${quietSinceMs}ms/${this.waitForStabilityQuietTimeout}ms, inflight=${this.inflight.size}/${this.maxInflight}`);\r\n }\r\n \r\n await sleep(this.pollMs);\r\n }\r\n } catch (error) {\r\n proboLogger.error(`NavTracker[${this.instanceId}]: Error during stabilization: ${error}`);\r\n }\r\n }\r\n\r\n\r\n // ============================================================================\r\n // SINGLETON METHODS\r\n // ============================================================================\r\n\r\n /**\r\n * Get the singleton instance of NavTracker\r\n * @param page The page to track (required for first creation)\r\n * @param options Optional configuration\r\n * @returns The singleton NavTracker instance\r\n */\r\n public static async getInstance(page?: Page, options?: NavTrackerOptions): Promise<NavTracker> {\r\n proboLogger.debug(`NavTracker.getInstance called with options:`, options);\r\n if (!NavTracker.instance) {\r\n if (!page) {\r\n throw new Error('NavTracker: Page is required for first instance creation');\r\n }\r\n NavTracker.instance = new NavTracker(page, options);\r\n await NavTracker.instance.start();\r\n proboLogger.debug(`NavTracker: created new singleton instance with options:`, options);\r\n } else {\r\n // Update existing instance with new options\r\n if (options) {\r\n if (options.waitForStabilityQuietTimeout !== undefined) {\r\n NavTracker.instance.waitForStabilityQuietTimeout = options.waitForStabilityQuietTimeout;\r\n }\r\n if (options.waitForStabilityInitialDelay !== undefined) {\r\n NavTracker.instance.waitForStabilityInitialDelay = options.waitForStabilityInitialDelay;\r\n }\r\n if (options.waitForStabilityGlobalTimeout !== undefined) {\r\n NavTracker.instance.waitForStabilityGlobalTimeout = options.waitForStabilityGlobalTimeout;\r\n }\r\n if (options.pollMs !== undefined) {\r\n NavTracker.instance.pollMs = options.pollMs;\r\n }\r\n if (options.maxInflight !== undefined) {\r\n NavTracker.instance.maxInflight = options.maxInflight;\r\n }\r\n if (options.inflightGraceMs !== undefined) {\r\n NavTracker.instance.inflightGraceMs = options.inflightGraceMs;\r\n }\r\n if (options.waitForStabilityVerbose !== undefined) {\r\n NavTracker.instance.waitForStabilityVerbose = options.waitForStabilityVerbose;\r\n }\r\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}`);\r\n }\r\n if (options?.waitForStabilityVerbose) {\r\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\r\n }\r\n }\r\n return NavTracker.instance;\r\n }\r\n\r\n /**\r\n * Reset the singleton instance (useful for testing or page changes)\r\n */\r\n public static resetInstance(): void {\r\n if (NavTracker.instance) {\r\n NavTracker.instance.stop();\r\n NavTracker.instance = null;\r\n proboLogger.debug(`NavTracker: reset singleton instance`);\r\n }\r\n }\r\n\r\n}","import type { Page } from 'playwright';\r\nimport type { \r\n ElementInfo,\r\n ElementTag,\r\n InitialPageState,\r\n PlaywrightTimeoutConfig,\r\n ServerResponse, \r\n FindCandidateInput,\r\n} from '@probolabs/probo-shared';\r\nimport { ApiClient, \r\n apiLogger,\r\n Instruction, \r\n FindStepByPromptResult, \r\n PlaywrightAction,\r\n ProboLogger,\r\n ProboLogLevel,\r\n AIModel,\r\n DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\r\n setupBrowserConsoleLogs\r\n } from '@probolabs/probo-shared';\r\nimport {\r\n waitForMutationsToSettle,\r\n findClosestVisibleElement, \r\n} from './actions';\r\nimport { Highlighter, ElementTagType } from './highlight';\r\nimport pRetry, { FailedAttemptError } from 'p-retry';\r\nimport { proboLogger } from './probo-logger';\r\nimport { ProboPlaywright } from './replay-utils';\r\nimport { NavTracker } from './nav-tracker';\r\n\r\n\r\n/**\r\n * Configuration options for Probo client\r\n */\r\ninterface ProboConfig {\r\n scenarioName: string;\r\n token?: string;\r\n apiUrl?: string;\r\n enableConsoleLogs?: boolean;\r\n logToConsole?: boolean;\r\n logToFile?: boolean;\r\n debugLevel?: ProboLogLevel;\r\n aiModel?: AIModel;\r\n timeoutConfig?: Partial<PlaywrightTimeoutConfig>;\r\n}\r\n\r\nexport interface RunStepOptions {\r\n useCache: boolean;\r\n stepIdFromServer?: number | null;\r\n aiModel?: AIModel;\r\n timeoutConfig?: PlaywrightTimeoutConfig;\r\n\r\n}\r\n\r\nconst retryOptions = {\r\n retries: 3,\r\n minTimeout: 1000,\r\n onFailedAttempt: (error: FailedAttemptError) => {\r\n proboLogger.warn(\r\n `Page operation failed, attempt ${error.attemptNumber} of ${\r\n error.retriesLeft +\r\n error.attemptNumber\r\n }...`\r\n );\r\n }\r\n};\r\n\r\nexport class Probo {\r\n private highlighter: Highlighter;\r\n private apiClient: ApiClient;\r\n private readonly enableConsoleLogs: boolean;\r\n private readonly scenarioName: string;\r\n private readonly aiModel: AIModel;\r\n private readonly timeoutConfig: PlaywrightTimeoutConfig;\r\n constructor({\r\n scenarioName,\r\n token = '',\r\n apiUrl = '',\r\n enableConsoleLogs = false,\r\n logToConsole = true,\r\n logToFile = false,\r\n debugLevel = ProboLogLevel.INFO,\r\n aiModel = AIModel.AZURE_GPT4_MINI,\r\n timeoutConfig = {}\r\n }: ProboConfig) {\r\n // Configure logger transports and level\r\n // configureLogger({ logToConsole, logToFile, level: debugLevel });\r\n proboLogger.setLogLevel(debugLevel);\r\n\r\n const apiKey = token || process.env.PROBO_API_KEY;\r\n if (!apiKey) {\r\n proboLogger.error(\r\n \"API key wasn't provided. Pass 'token' or set PROBO_API_KEY\"\r\n );\r\n throw new Error('Probo API key not provided');\r\n }\r\n\r\n const apiEndPoint = apiUrl || process.env.PROBO_API_ENDPOINT;\r\n if (!apiEndPoint) {\r\n proboLogger.error(\r\n \"API endpoint wasn't provided. Pass 'apiUrl' or set PROBO_API_ENDPOINT\"\r\n );\r\n throw new Error('Probo API endpoint not provided');\r\n }\r\n\r\n this.highlighter = new Highlighter(enableConsoleLogs);\r\n this.apiClient = new ApiClient(apiEndPoint, apiKey);\r\n this.enableConsoleLogs = enableConsoleLogs;\r\n this.scenarioName = scenarioName;\r\n this.aiModel = aiModel;\r\n this.timeoutConfig = { ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, ...timeoutConfig };\r\n // set the log level for the api client\r\n apiLogger.setLogLevel(debugLevel);\r\n\r\n proboLogger.info(\r\n `Initializing: scenario=${scenarioName}, apiUrl=${apiEndPoint}, ` +\r\n `enableConsoleLogs=${enableConsoleLogs}, debugLevel=${debugLevel}, aiModel=${aiModel}`\r\n );\r\n }\r\n\r\n public async askAI(page: Page, question: string): Promise<any> {\r\n const response = await this.askAIHelper(page, question);\r\n if (response?.result?.error) {\r\n throw new Error(response.result.error);\r\n }\r\n return response?.result?.answer;\r\n }\r\n\r\n public async runStep(\r\n page: Page, \r\n stepPrompt: string, \r\n argument: string|boolean|null = null,\r\n options: RunStepOptions = { useCache: true, stepIdFromServer: undefined, aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\r\n ): Promise<boolean|string|null> {\r\n // Use the aiModel from options if provided, otherwise use the one from constructor\r\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\r\n \r\n proboLogger.log(`runStep: ${options.stepIdFromServer ? '#'+options.stepIdFromServer+' - ' : ''}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\r\n this.setupConsoleLogs(page);\r\n // initialize the NavTracker\r\n await NavTracker.getInstance(page, {\r\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\r\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\r\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\r\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\r\n });\r\n // First check if the step exists in the database\r\n let stepId: string;\r\n \r\n if (options.useCache) {\r\n const [isCachedStep, returnValue] = await this._handleCachedStep(page, stepPrompt, argument);\r\n if (isCachedStep) {\r\n proboLogger.debug('performed cached step!');\r\n return returnValue;\r\n }\r\n }\r\n \r\n proboLogger.debug(`Cache disabled or step not found, creating new step`);\r\n stepId = await this._handleStepCreation(page, stepPrompt, options.stepIdFromServer, options.useCache);\r\n proboLogger.debug('Step ID:', stepId);\r\n let instruction: Instruction | null = null;\r\n // Main execution loop\r\n while (true) {\r\n try {\r\n // Get next instruction from server\r\n const nextInstruction = await this.apiClient.resolveNextInstruction(stepId, instruction, aiModelToUse);\r\n proboLogger.debug('Next Instruction from server:', nextInstruction);\r\n\r\n // Exit conditions\r\n \r\n if (nextInstruction.what_to_do === 'do_nothing') {\r\n if (nextInstruction.args.success) {\r\n proboLogger.info(`Reasoning: ${nextInstruction.args.message}`)\r\n proboLogger.info('Step completed successfully');\r\n return nextInstruction.args.return_value;\r\n }\r\n else { \r\n throw new Error(nextInstruction.args.message)\r\n } \r\n }\r\n\r\n // Handle different instruction types\r\n switch (nextInstruction.what_to_do) {\r\n case 'highlight_candidate_elements':\r\n proboLogger.debug('Highlighting candidate elements:', nextInstruction.args.element_types);\r\n \r\n const elementTags = nextInstruction.args.element_types;\r\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags as ElementTagType[]);\r\n \r\n \r\n const cleaned_candidate_elements = candidate_elements.map((elementInfo: ElementInfo) => {\r\n elementInfo.element = null;\r\n return elementInfo;\r\n });\r\n proboLogger.debug(`Highlighted ${cleaned_candidate_elements.length} elements`);\r\n \r\n const executed_instruction: Instruction = {\r\n what_to_do: 'highlight_candidate_elements',\r\n args: {\r\n element_types: nextInstruction.args.element_types\r\n },\r\n result: {\r\n highlighted_elements: cleaned_candidate_elements,\r\n candidate_elements_screenshot_url: candidates_screenshot_url\r\n }\r\n }\r\n proboLogger.debug('Executed Instruction:', executed_instruction);\r\n instruction = executed_instruction;\r\n break;\r\n\r\n case 'perform_action':\r\n instruction = await this._handlePerformAction(page, nextInstruction, argument);\r\n break;\r\n\r\n default:\r\n throw new Error(`Unknown instruction type: ${nextInstruction.what_to_do}`);\r\n }\r\n\r\n } catch (error: any) {\r\n proboLogger.error(error.message); \r\n throw Error(error.message); \r\n }\r\n }\r\n \r\n\r\n }\r\n \r\n private async _handleCachedStep(page: Page, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, boolean|string]> {\r\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\r\n const result: FindStepByPromptResult | null = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url());\r\n if (result) {\r\n const actionArgument = argument ?? result.step.argument;\r\n proboLogger.log(`Found existing step with ID: ${result.step.id} going to perform action: ${result.step.action} with value: ${actionArgument}`);\r\n proboLogger.debug(`Step in the DB: #${result.step.id} status: ${result.step.status} action: ${result.step.action} argument: ${actionArgument} locator: ${result.step.element_css_selector}`);\r\n if (result.step.status !== 'EXECUTED') {\r\n proboLogger.debug(`Step ${result.step.id} is not executed, returning false`);\r\n return [false, false];\r\n }\r\n proboLogger.debug(`Step ${result.step.id} is in status executed, performing action directly with Playwright`);\r\n const element_css_selector = result.step.element_css_selector\r\n const iframe_selector = result.step.iframe_selector\r\n let returnValue;\r\n try {\r\n // Create ProboPlaywright instance with the page\r\n const proboPlaywright = new ProboPlaywright(this.timeoutConfig, page);\r\n \r\n // Call runStep with the cached action\r\n const runStepResult = await proboPlaywright.runStep({\r\n iframeSelector: iframe_selector,\r\n elementSelector: element_css_selector,\r\n action: result.step.action as PlaywrightAction,\r\n argument: actionArgument as string,\r\n // Disable highlighting for cached steps since they're already validated\r\n highlightTimeout: 0\r\n });\r\n // Handle return value - runStep returns RunStepResult for EXTRACT_VALUE, void for others\r\n if (runStepResult) {\r\n returnValue = runStepResult\r\n } else {\r\n returnValue = true;\r\n }\r\n } catch (error: any) {\r\n proboLogger.error(`Error executing action for step ${result.step.id} going to reset the step`);\r\n proboLogger.debug('Error details:', error);\r\n await this.apiClient.resetStep(result.step.id);\r\n return [false, false];\r\n }\r\n return [true, returnValue];\r\n } else {\r\n proboLogger.debug(`Step not found in database, continuing with the normal flow`);\r\n return [false, false]\r\n }\r\n\r\n }\r\n \r\n private async _handleStepCreation(\r\n page: Page, \r\n stepPrompt: string, \r\n stepIdFromServer: number | null | undefined, \r\n useCache: boolean\r\n ): Promise<string> {\r\n \r\n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\r\n const { base_screenshot_url, base_html_content } = await pRetry(() => this.getInitialPageState(page), retryOptions);\r\n return await this.apiClient.createStep({\r\n stepIdFromServer,\r\n scenarioName: this.scenarioName,\r\n stepPrompt: stepPrompt,\r\n initial_screenshot_url: base_screenshot_url,\r\n initial_html_content: base_html_content,\r\n use_cache: useCache,\r\n url: page.url()\r\n });\r\n }\r\n\r\n\r\n private setupConsoleLogs(page: Page) {\r\n setupBrowserConsoleLogs(page, this.enableConsoleLogs, proboLogger);\r\n }\r\n\r\n public async getInitialPageState(page: Page): Promise<InitialPageState> {\r\n \r\n proboLogger.debug(`🔍 [getInitialPageState] timeoutConfig values: quietTimeout=${this.timeoutConfig.waitForStabilityQuietTimeout}, initialDelay=${this.timeoutConfig.waitForStabilityInitialDelay}, globalTimeout=${this.timeoutConfig.waitForStabilityGlobalTimeout}, verbose=${this.timeoutConfig.waitForStabilityVerbose}`);\r\n const navTracker = await NavTracker.getInstance(page,{ \r\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout, \r\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\r\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\r\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\r\n });\r\n proboLogger.debug(`🔍 getting initial page state. calling waitForNavigationToStabilize: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`);\r\n await navTracker.waitForNavigationToStabilize();\r\n const baseScreenshot = await this.screenshot(page);\r\n proboLogger.debug(`🔍 baseScreenshot: ${baseScreenshot}`);\r\n const baseHtmlContent = '';\r\n return {\r\n base_screenshot_url: baseScreenshot,\r\n base_html_content: baseHtmlContent\r\n };\r\n \r\n }\r\n\r\n public async findAndHighlightCandidateElements(page: Page, elementTags: string[]): Promise<FindCandidateInput> {\r\n // 2. CANDIDATE ELEMENTS HANDLING: Find and cache candidates\r\n \r\n await this.highlighter.findAndCacheCandidateElements(page, elementTags as ElementTagType[]);\r\n proboLogger.debug(`🔍 after findAndCacheCandidateElements`);\r\n \r\n // 3. CANDIDATE ELEMENTS HANDLING: Highlight candidates and take screenshot\r\n await this.highlighter.highlightCachedElements(page, 'candidates');\r\n proboLogger.debug(`🔍 after highlightCachedElements candidates`);\r\n await page.waitForTimeout(200);\r\n const candidatesScreenshot = await this.screenshot(page);\r\n proboLogger.debug(`🔍 candidatesScreenshot: ${candidatesScreenshot}`);\r\n \r\n return {\r\n candidates_screenshot_url: candidatesScreenshot,\r\n candidate_elements: await this.highlighter.getCandidatesCached(page) ?? []\r\n };\r\n }\r\n\r\n\r\n \r\n \r\n public async highlightElements(page: Page, elementTags: [ElementTagType]) {\r\n return this.highlighter.highlightElements(page, elementTags);\r\n }\r\n\r\n public async unhighlightElements(page: Page) {\r\n return this.highlighter.unhighlightElements(page);\r\n }\r\n\r\n public async highlightElement(page: Page, element_css_selector: string, iframe_selector: string, element_index: string) {\r\n return this.highlighter.highlightElement(page, element_css_selector, iframe_selector, element_index);\r\n }\r\n\r\n public async waitForMutationsToSettle(page: Page, timeout?: number, initTimeout?: number) {\r\n const mutationTimeout = timeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsTimeout;\r\n const mutationInitTimeout = initTimeout ?? DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG.mutationsInitTimeout;\r\n return waitForMutationsToSettle(page, mutationTimeout, mutationInitTimeout);\r\n }\r\n\r\n public async screenshot(page: Page) { \r\n proboLogger.debug(`taking screenshot of current page: ${page.url()}`);\r\n // await page.evaluate(() => document.fonts?.ready.catch(() => {}));\r\n const screenshot_bytes = await page.screenshot({ fullPage: true, animations: 'disabled' });\r\n // make an api call to upload the screenshot to cloud\r\n proboLogger.debug('uploading image data to cloud');\r\n const screenshot_url = await this.apiClient.uploadScreenshot(screenshot_bytes);\r\n return screenshot_url;\r\n \r\n }\r\n\r\n private async _handlePerformAction(page: Page, nextInstruction: Instruction, argument: string|boolean|null) {\r\n proboLogger.debug('Handling perform action:', nextInstruction);\r\n const action = nextInstruction.args.action;\r\n const value = argument ?? nextInstruction.args.value;\r\n const element_css_selector = nextInstruction.args.element_css_selector;\r\n const iframe_selector = nextInstruction.args.iframe_selector;\r\n const element_index = nextInstruction.args.element_index;\r\n if(action !== PlaywrightAction.VISIT_URL) {\r\n await this.unhighlightElements(page);\r\n proboLogger.debug('Unhighlighted elements');\r\n await this.highlightElement(page, element_css_selector,iframe_selector, element_index);\r\n proboLogger.debug('Highlighted element');\r\n }\r\n const pre_action_screenshot_url = await this.screenshot(page);\r\n const returnValue = await new ProboPlaywright(this.timeoutConfig, page).runStep({\r\n iframeSelector: iframe_selector,\r\n elementSelector: element_css_selector,\r\n action: action,\r\n argument: value,\r\n highlightTimeout: 0\r\n });\r\n\r\n await this.unhighlightElements(page);\r\n const post_action_screenshot_url = await this.screenshot(page);\r\n const post_html_content = '';\r\n \r\n\r\n const executed_instruction: Instruction = {\r\n what_to_do: 'perform_action',\r\n args: {\r\n action: action,\r\n value: value,\r\n element_css_selector: element_css_selector,\r\n iframe_selector: iframe_selector\r\n },\r\n result: {\r\n pre_action_screenshot_url: pre_action_screenshot_url,\r\n post_action_screenshot_url: post_action_screenshot_url,\r\n post_html_content: post_html_content,\r\n validation_status: true,\r\n return_value: returnValue\r\n }\r\n }\r\n return executed_instruction;\r\n }\r\n\r\n public async askAIHelper(page: Page, question: string): Promise<ServerResponse> {\r\n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel} waitForStabilityQuietTimeout: ${this.timeoutConfig.waitForStabilityQuietTimeout}ms, waitForStabilityInitialDelay: ${this.timeoutConfig.waitForStabilityInitialDelay}ms, waitForStabilityGlobalTimeout: ${this.timeoutConfig.waitForStabilityGlobalTimeout}ms, waitForStabilityVerbose: ${this.timeoutConfig.waitForStabilityVerbose}`); \r\n try {\r\n // Get current page and capture screenshot\r\n const navTracker = await NavTracker.getInstance(page, {\r\n waitForStabilityQuietTimeout: this.timeoutConfig.waitForStabilityQuietTimeout,\r\n waitForStabilityInitialDelay: this.timeoutConfig.waitForStabilityInitialDelay,\r\n waitForStabilityGlobalTimeout: this.timeoutConfig.waitForStabilityGlobalTimeout,\r\n waitForStabilityVerbose: this.timeoutConfig.waitForStabilityVerbose\r\n });\r\n await navTracker.waitForNavigationToStabilize();\r\n const screenshot = await this.screenshot(page);\r\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\r\n proboLogger.debug(`📤 [askAI] Sending chat request to backend`);\r\n \r\n // Use ApiClient to send request to backend API \r\n const serverResponse = await this.apiClient.askAI(question, this.scenarioName, screenshot, this.aiModel);\r\n proboLogger.debug(`✅ [askAI] Chat response received successfully`);\r\n \r\n // Return the answer from the result, or the reasoning if no answer\r\n return serverResponse;\r\n \r\n } catch (error) {\r\n proboLogger.error(`❌ [askAI] Error in askAI: ${error}`);\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\n// Re-export ElementTag for convenience\r\nexport { ElementTag, ProboLogLevel, Highlighter, ElementTagType, ElementInfo, PlaywrightAction, ProboPlaywright, findClosestVisibleElement, NavTracker };\r\n\r\n// Re-export OTP class\r\nexport { OTP, MailinatorMessage } from './otp';"],"names":["require$$0","retry","pRetry","pRetryModule"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8,16]}
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]}