@probolabs/playwright 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -0
- package/dist/fixtures.d.ts +28 -0
- package/dist/fixtures.js +52 -0
- package/dist/fixtures.js.map +1 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/types/fixtures.d.ts.map +1 -0
- package/package.json +7 -2
- package/dist/types/workspaceScriptRunner.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -134,3 +134,94 @@ test.describe('Todo MVC', () => {
|
|
|
134
134
|
```
|
|
135
135
|
npx playwright test tests/probo-example-todo-mvc.spec.mjs --headed --project chromium
|
|
136
136
|
```
|
|
137
|
+
|
|
138
|
+
## Using Probo Fixtures (Connect to Existing Browser)
|
|
139
|
+
|
|
140
|
+
Probo fixtures allow you to connect to an existing Chrome instance (like your recorder app) instead of launching a new browser. This is useful when you want to run tests against a browser that's already running with specific extensions or configurations.
|
|
141
|
+
|
|
142
|
+
### Quick Setup
|
|
143
|
+
|
|
144
|
+
**Step 1:** Install the package
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
npm install @probolabs/playwright
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Step 2:** Create a `playwright.config.ts` file
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// playwright.config.ts
|
|
154
|
+
import { defineConfig } from "@playwright/test";
|
|
155
|
+
|
|
156
|
+
export default defineConfig({
|
|
157
|
+
testDir: "./tests",
|
|
158
|
+
use: {
|
|
159
|
+
// Don't launch a new browser - Probo fixtures will connect to existing one
|
|
160
|
+
launchOptions: {},
|
|
161
|
+
},
|
|
162
|
+
workers: 1, // Use 1 worker to avoid conflicts with existing browser
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Step 3:** Use Probo fixtures in your test files
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// tests/example.spec.ts
|
|
170
|
+
import { test, expect } from "@probolabs/playwright/fixtures";
|
|
171
|
+
|
|
172
|
+
test.describe("My Tests", () => {
|
|
173
|
+
test("should work with existing browser", async ({ page }) => {
|
|
174
|
+
// This page comes from your existing Chrome instance
|
|
175
|
+
await page.goto("https://example.com");
|
|
176
|
+
await page.click("button");
|
|
177
|
+
|
|
178
|
+
// Your test code here...
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Step 4:** Make sure your recorder app is running, then run tests
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npx playwright test
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Advanced Configuration
|
|
190
|
+
|
|
191
|
+
You can customize the fixtures with different options:
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// tests/example.spec.ts
|
|
195
|
+
import { createProboFixtures, expect } from "@probolabs/playwright/fixtures";
|
|
196
|
+
|
|
197
|
+
// Create custom fixtures with specific configuration
|
|
198
|
+
const test = createProboFixtures({
|
|
199
|
+
debugPort: 9333, // Default port where your recorder app runs
|
|
200
|
+
showBrowserConsole: true, // Show browser console logs
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test.describe("My Tests", () => {
|
|
204
|
+
test("custom configuration", async ({ page }) => {
|
|
205
|
+
// Your test code here...
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Requirements
|
|
211
|
+
|
|
212
|
+
- Your recorder app must be running with Chrome accessible via CDP
|
|
213
|
+
- Chrome must be launched with `--remote-debugging-port=9333` (or your custom port)
|
|
214
|
+
- The browser must have at least one page open (not just extension pages)
|
|
215
|
+
|
|
216
|
+
### Troubleshooting
|
|
217
|
+
|
|
218
|
+
**Error: "No browser context found"**
|
|
219
|
+
|
|
220
|
+
- Make sure your recorder app is running
|
|
221
|
+
- Check that Chrome is accessible at `http://localhost:9333`
|
|
222
|
+
- Verify the debug port matches your configuration
|
|
223
|
+
|
|
224
|
+
**Error: "No main page found"**
|
|
225
|
+
|
|
226
|
+
- Make sure your recorder app has opened a page
|
|
227
|
+
- The page should not be a chrome-extension:// URL
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as _playwright_test from '@playwright/test';
|
|
2
|
+
export { expect } from '@playwright/test';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Configuration options for Probo fixtures
|
|
6
|
+
*/
|
|
7
|
+
interface ProboFixturesConfig {
|
|
8
|
+
/** The debug port where your recorder app's Chrome instance is running */
|
|
9
|
+
debugPort?: number;
|
|
10
|
+
/** Whether to show browser console logs */
|
|
11
|
+
showBrowserConsole?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates Probo fixtures that connect to an existing Chrome instance
|
|
15
|
+
* instead of launching a new browser.
|
|
16
|
+
*
|
|
17
|
+
* @param config Configuration options for the fixtures
|
|
18
|
+
* @returns Extended test function with Probo fixtures
|
|
19
|
+
*/
|
|
20
|
+
declare function createProboFixtures(config?: ProboFixturesConfig): _playwright_test.TestType<_playwright_test.PlaywrightTestArgs & _playwright_test.PlaywrightTestOptions, _playwright_test.PlaywrightWorkerArgs & _playwright_test.PlaywrightWorkerOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Default Probo fixtures with standard configuration
|
|
23
|
+
* Connects to Chrome instance running on port 9333
|
|
24
|
+
*/
|
|
25
|
+
declare const test: _playwright_test.TestType<_playwright_test.PlaywrightTestArgs & _playwright_test.PlaywrightTestOptions, _playwright_test.PlaywrightWorkerArgs & _playwright_test.PlaywrightWorkerOptions>;
|
|
26
|
+
|
|
27
|
+
export { createProboFixtures, test };
|
|
28
|
+
export type { ProboFixturesConfig };
|
package/dist/fixtures.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { test as test$1, chromium } from '@playwright/test';
|
|
2
|
+
export { expect } from '@playwright/test';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates Probo fixtures that connect to an existing Chrome instance
|
|
6
|
+
* instead of launching a new browser.
|
|
7
|
+
*
|
|
8
|
+
* @param config Configuration options for the fixtures
|
|
9
|
+
* @returns Extended test function with Probo fixtures
|
|
10
|
+
*/
|
|
11
|
+
function createProboFixtures(config = {}) {
|
|
12
|
+
const { debugPort = 9333, showBrowserConsole = false } = config;
|
|
13
|
+
return test$1.extend({
|
|
14
|
+
browser: async ({}, use) => {
|
|
15
|
+
// Connect to your existing recorder app's browser
|
|
16
|
+
const browser = await chromium.connectOverCDP(`http://localhost:${debugPort}`);
|
|
17
|
+
// Get the existing browser context (the one from your recorder app)
|
|
18
|
+
const context = browser.contexts()[0];
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error(`No browser context found at http://localhost:${debugPort}. Make sure your recorder app is running.`);
|
|
21
|
+
}
|
|
22
|
+
// Use the existing context
|
|
23
|
+
await use(browser);
|
|
24
|
+
// Don't close the browser - it's managed by your recorder app
|
|
25
|
+
},
|
|
26
|
+
// Override the page fixture to use existing page
|
|
27
|
+
page: async ({ browser }, use) => {
|
|
28
|
+
const context = browser.contexts()[0];
|
|
29
|
+
const allPages = context.pages();
|
|
30
|
+
// Find the main page (not chrome-extension pages)
|
|
31
|
+
const mainPage = allPages.find(page => !page.url().startsWith('chrome-extension://'));
|
|
32
|
+
if (!mainPage) {
|
|
33
|
+
throw new Error('No main page found in existing browser context. Make sure your recorder app has opened a page.');
|
|
34
|
+
}
|
|
35
|
+
// Set up console logging if requested
|
|
36
|
+
if (showBrowserConsole) {
|
|
37
|
+
mainPage.on('console', msg => console.log('Browser console:', msg.text()));
|
|
38
|
+
}
|
|
39
|
+
// Use the existing page
|
|
40
|
+
await use(mainPage);
|
|
41
|
+
// Don't close the page - it's managed by your recorder app
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Default Probo fixtures with standard configuration
|
|
47
|
+
* Connects to Chrome instance running on port 9333
|
|
48
|
+
*/
|
|
49
|
+
const test = createProboFixtures();
|
|
50
|
+
|
|
51
|
+
export { createProboFixtures, test };
|
|
52
|
+
//# sourceMappingURL=fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.js","sources":["../src/fixtures.ts"],"sourcesContent":["import { test as base, chromium } from '@playwright/test';\n\n/**\n * Configuration options for Probo fixtures\n */\nexport interface ProboFixturesConfig {\n /** The debug port where your recorder app's Chrome instance is running */\n debugPort?: number;\n /** Whether to show browser console logs */\n showBrowserConsole?: boolean;\n}\n\n/**\n * Creates Probo fixtures that connect to an existing Chrome instance\n * instead of launching a new browser.\n * \n * @param config Configuration options for the fixtures\n * @returns Extended test function with Probo fixtures\n */\nexport function createProboFixtures(config: ProboFixturesConfig = {}) {\n const { debugPort = 9333, showBrowserConsole = false } = config;\n\n return base.extend({\n browser: async ({}, use) => {\n // Connect to your existing recorder app's browser\n const browser = await chromium.connectOverCDP(`http://localhost:${debugPort}`);\n \n // Get the existing browser context (the one from your recorder app)\n const context = browser.contexts()[0];\n \n if (!context) {\n throw new Error(`No browser context found at http://localhost:${debugPort}. Make sure your recorder app is running.`);\n }\n \n // Use the existing context\n await use(browser);\n \n // Don't close the browser - it's managed by your recorder app\n },\n \n // Override the page fixture to use existing page\n page: async ({ browser }, use) => {\n const context = browser.contexts()[0];\n const allPages = context.pages();\n \n // Find the main page (not chrome-extension pages)\n const mainPage = allPages.find(page => !page.url().startsWith('chrome-extension://'));\n \n if (!mainPage) {\n throw new Error('No main page found in existing browser context. Make sure your recorder app has opened a page.');\n }\n \n // Set up console logging if requested\n if (showBrowserConsole) {\n mainPage.on('console', msg => console.log('Browser console:', msg.text()));\n }\n \n // Use the existing page\n await use(mainPage);\n \n // Don't close the page - it's managed by your recorder app\n },\n });\n}\n\n/**\n * Default Probo fixtures with standard configuration\n * Connects to Chrome instance running on port 9333\n */\nexport const test = createProboFixtures();\n\n/**\n * Re-export expect from Playwright for convenience\n */\nexport { expect } from '@playwright/test';\n"],"names":["base"],"mappings":";;;AAYA;;;;;;AAMG;AACa,SAAA,mBAAmB,CAAC,MAAA,GAA8B,EAAE,EAAA;IAClE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,kBAAkB,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAEhE,OAAOA,MAAI,CAAC,MAAM,CAAC;AACjB,QAAA,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,KAAI;;YAEzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAoB,iBAAA,EAAA,SAAS,CAAE,CAAA,CAAC,CAAC;;YAG/E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAEtC,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,SAAS,CAAA,yCAAA,CAA2C,CAAC,CAAC;aACvH;;AAGD,YAAA,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;;SAGpB;;QAGD,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,KAAI;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;;YAGjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAEtF,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;aACnH;;YAGD,IAAI,kBAAkB,EAAE;gBACtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aAC5E;;AAGD,YAAA,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;;SAGrB;AACF,KAAA,CAAC,CAAC;AACL,CAAC;AAED;;;AAGG;AACU,MAAA,IAAI,GAAG,mBAAmB;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -2060,7 +2060,6 @@ class Probo {
|
|
|
2060
2060
|
}
|
|
2061
2061
|
}
|
|
2062
2062
|
}
|
|
2063
|
-
// export const highlighterCode = '';
|
|
2064
2063
|
|
|
2065
2064
|
export { Highlighter, NavTracker, PlaywrightAction, Probo, ProboLogLevel, ProboPlaywright, findClosestVisibleElement };
|
|
2066
2065
|
//# sourceMappingURL=index.js.map
|
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","../../../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","../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[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"VALIDATE_EXACT_VALUE\"] = \"VALIDATE_EXACT_VALUE\";\n PlaywrightAction[\"VALIDATE_CONTAINS_VALUE\"] = \"VALIDATE_CONTAINS_VALUE\";\n PlaywrightAction[\"VALIDATE_URL\"] = \"VALIDATE_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 || (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 || (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.VALIDATE_CONTAINS_VALUE,\n PlaywrightAction.VALIDATE_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;\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) === \"\");\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};\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\";\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.VALIDATE_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.VALIDATE_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.VALIDATE_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","import { Frame, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex } from '@probolabs/probo-shared';\nimport { findClosestVisibleElement } from './actions';\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 config: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n private lastNavigationTime: number | null = null;\n\n constructor(config: PlaywrightTimeoutConfig = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, page: Page | null = null) {\n // Merge provided config with defaults to ensure all properties are defined\n this.config = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...config\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.config.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.config.playwrightActionTimeout);\n\n // start the nav handler listener\n this.page.on(\"framenavigated\", this.onFrameNav.bind(this));\n }\n }\n\n private onFrameNav(frame: Frame) {\n // if (frame === this.page?.mainFrame()) {\n // this.lastNavigationTime = Date.now();\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.config.playwrightNavigationTimeout });\n // await handlePotentialNavigation(this.page);\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n \n // 2. 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.config.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 // 3. Highlight, wait, unhighlight if highlightTimeout > 0\n if (this.config.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.config.highlightTimeout);\n await this.unhighlight(locator);\n }\n\n // 4. 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 // await handlePotentialNavigation(this.page);\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.VALIDATE_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.VALIDATE_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 VALIDATE_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 this.robustClick(locator);\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 /**\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.config.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.config.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.config.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} /* class ProboPlaywright */\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n stabilizationTimeout?: number; // Time to wait after last navigation (default: 2000ms)\n}\n\n/**\n * Global navigation tracker that monitors page navigation events\n * and provides methods to check if navigation has stabilized\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 stabilizationTimeout: number;\n private isListening: boolean = false;\n private onFrameNavHandler: (frame: Frame) => void;\n private instanceId: string;\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.stabilizationTimeout = options.stabilizationTimeout ?? 2000;\n this.instanceId = Math.random().toString(36).substr(2, 9);\n \n this.onFrameNavHandler = (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n proboLogger.debug(\n `NavTracker[${this.instanceId}]: navigation detected (navigationCount=${this.navigationCount}, lastNavTime=${new Date(this.lastNavTime).toISOString().slice(11, 23)}, timeSinceLastNav=${Date.now() - this.lastNavTime}ms)`\n );\n }\n };\n\n // Auto-start the tracker when first instantiated\n this.start();\n }\n\n /**\n * Start listening for navigation events (private method)\n */\n private start(): void {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n this.page.on(\"framenavigated\", this.onFrameNavHandler);\n this.isListening = true;\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: started listening for navigation events`);\n }\n\n /**\n * Stop listening for navigation 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 this.page.removeListener(\"framenavigated\", this.onFrameNavHandler);\n this.isListening = false;\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped listening for navigation events`);\n }\n\n /**\n * Check if navigation has stabilized (no navigation for stabilizationTimeout ms) (private method)\n */\n private hasNavigationStabilized(): boolean {\n if (this.lastNavTime === null) {\n // No navigation has occurred yet\n return true;\n }\n\n const timeSinceLastNav = Date.now() - this.lastNavTime;\n const isStabilized = timeSinceLastNav >= this.stabilizationTimeout;\n \n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - timeSinceLastNav=${timeSinceLastNav}ms, stabilizationTimeout=${this.stabilizationTimeout}ms, stabilized=${isStabilized}`\n );\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation to stabilize\n * Waits a short time to catch any missed navigation events, then ensures\n * the latest navigation happened at least stabilizationTimeout ms ago\n */\n async waitForNavigationToStabilize(): Promise<void> {\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation to stabilize`);\n \n // Wait 100ms to catch any navigation events we might have missed\n await new Promise(resolve => setTimeout(resolve, 100));\n \n // Now wait until navigation has stabilized (no navigation for stabilizationTimeout ms)\n while (!this.hasNavigationStabilized()) {\n // Wait 100ms before checking again\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: navigation has stabilized`);\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 getInstance(page?: Page, options?: NavTrackerOptions): NavTracker {\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 proboLogger.debug(`NavTracker: created new singleton instance`);\n } else {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n return NavTracker.instance;\n }\n\n}","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\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 } 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?: PlaywrightTimeoutConfig;\n}\n\nexport interface RunStepOptions {\n useCache: boolean;\n stepIdFromServer?: number | null;\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig; // override the timeout config for the step\n\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 = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG\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 = 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): Promise<any> {\n const response = await this.askAIHelper(page, question);\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 = { useCache: true, stepIdFromServer: undefined, aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<boolean|string|null> {\n // Use the aiModel from options if provided, otherwise use the one from constructor\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n \n proboLogger.log(`runStep: ${options.stepIdFromServer ? '#'+options.stepIdFromServer+' - ' : ''}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n this.setupConsoleLogs(page);\n const navTracker = NavTracker.getInstance(page);\n await navTracker.waitForNavigationToStabilize();\n // First check if the step exists in the database\n let stepId: string;\n \n if (options.useCache) {\n const [isCachedStep, returnValue] = await this._handleCachedStep(page, stepPrompt, argument);\n if (isCachedStep) {\n proboLogger.debug('performed cached step!');\n return returnValue;\n }\n }\n \n proboLogger.debug(`Cache disabled or step not found, creating new step`);\n stepId = await this._handleStepCreation(page, stepPrompt, options.stepIdFromServer, options.useCache);\n proboLogger.debug('Step ID:', stepId);\n let instruction: Instruction | null = null;\n // Main execution loop\n while (true) {\n try {\n // Get next instruction from server\n const nextInstruction = await this.apiClient.resolveNextInstruction(stepId, instruction, aiModelToUse);\n proboLogger.debug('Next Instruction from server:', nextInstruction);\n\n // Exit conditions\n \n if (nextInstruction.what_to_do === 'do_nothing') {\n if (nextInstruction.args.success) {\n proboLogger.info(`Reasoning: ${nextInstruction.args.message}`)\n proboLogger.info('Step completed successfully');\n return nextInstruction.args.return_value;\n }\n else { \n throw new Error(nextInstruction.args.message)\n } \n }\n\n // Handle different instruction types\n switch (nextInstruction.what_to_do) {\n case 'highlight_candidate_elements':\n proboLogger.debug('Highlighting candidate elements:', nextInstruction.args.element_types);\n \n const elementTags = nextInstruction.args.element_types;\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags as ElementTagType[]);\n \n \n const cleaned_candidate_elements = candidate_elements.map((elementInfo: ElementInfo) => {\n elementInfo.element = null;\n return elementInfo;\n });\n proboLogger.debug(`Highlighted ${cleaned_candidate_elements.length} elements`);\n \n const executed_instruction: Instruction = {\n what_to_do: 'highlight_candidate_elements',\n args: {\n element_types: nextInstruction.args.element_types\n },\n result: {\n highlighted_elements: cleaned_candidate_elements,\n candidate_elements_screenshot_url: candidates_screenshot_url\n }\n }\n proboLogger.debug('Executed Instruction:', executed_instruction);\n instruction = executed_instruction;\n break;\n\n case 'perform_action':\n instruction = await this._handlePerformAction(page, nextInstruction, argument);\n break;\n\n default:\n throw new Error(`Unknown instruction type: ${nextInstruction.what_to_do}`);\n }\n\n } catch (error: any) {\n proboLogger.error(error.message); \n throw Error(error.message); \n }\n }\n \n\n }\n \n private async _handleCachedStep(page: Page, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, boolean|string]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: FindStepByPromptResult | null = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url());\n if (result) {\n const actionArgument = argument ?? result.step.argument;\n proboLogger.log(`Found existing step with ID: ${result.step.id} going to perform action: ${result.step.action} with value: ${actionArgument}`);\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}`);\n if (result.step.status !== 'EXECUTED') {\n proboLogger.debug(`Step ${result.step.id} is not executed, returning false`);\n return [false, false];\n }\n proboLogger.debug(`Step ${result.step.id} is in status executed, performing action directly with Playwright`);\n const element_css_selector = result.step.element_css_selector\n const iframe_selector = result.step.iframe_selector\n let returnValue;\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: iframe_selector,\n elementSelector: element_css_selector,\n action: result.step.action as PlaywrightAction,\n argument: actionArgument as string,\n // Disable highlighting for cached steps since they're already validated\n highlightTimeout: 0\n });\n \n // Handle return value - runStep returns RunStepResult for EXTRACT_VALUE, void for others\n if (runStepResult) {\n returnValue = runStepResult\n } else {\n returnValue = true;\n }\n } catch (error: any) {\n proboLogger.error(`Error executing action for step ${result.step.id} going to reset the step`);\n proboLogger.debug('Error details:', error);\n await this.apiClient.resetStep(result.step.id);\n return [false, false];\n }\n return [true, returnValue];\n } else {\n proboLogger.debug(`Step not found in database, continuing with the normal flow`);\n return [false, false]\n }\n\n }\n \n private async _handleStepCreation(\n page: Page, \n stepPrompt: string, \n stepIdFromServer: number | null | undefined, \n useCache: boolean\n ): Promise<string> {\n \n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n // not sure if this is needed\n // await handlePotentialNavigation(page);\n await waitForMutationsToSettle(page);\n \n const { base_screenshot_url, base_html_content } = await pRetry(() => this.getInitialPageState(page), retryOptions);\n \n \n \n \n return await this.apiClient.createStep({\n stepIdFromServer,\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: base_screenshot_url,\n initial_html_content: base_html_content,\n use_cache: useCache,\n url: page.url()\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, nextInstruction: Instruction, argument: string|boolean|null) {\n proboLogger.debug('Handling perform action:', nextInstruction);\n const action = nextInstruction.args.action;\n const value = argument ?? nextInstruction.args.value;\n const element_css_selector = nextInstruction.args.element_css_selector;\n const iframe_selector = nextInstruction.args.iframe_selector;\n const element_index = nextInstruction.args.element_index;\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector,iframe_selector, 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,\n highlightTimeout: 0\n });\n let stepStatus;\n if ([PlaywrightAction.VALIDATE_EXACT_VALUE,\n PlaywrightAction.VALIDATE_CONTAINS_VALUE, PlaywrightAction.VALIDATE_URL].includes(action))\n stepStatus = returnValue;\n else\n stepStatus = true;\n\n await this.unhighlightElements(page);\n await waitForMutationsToSettle(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n\n const executed_instruction: Instruction = {\n what_to_do: 'perform_action',\n args: {\n action: action,\n value: value,\n element_css_selector: element_css_selector,\n iframe_selector: iframe_selector\n },\n result: {\n pre_action_screenshot_url: pre_action_screenshot_url,\n post_action_screenshot_url: post_action_screenshot_url,\n post_html_content: post_html_content,\n validation_status: stepStatus,\n return_value: returnValue\n }\n }\n return executed_instruction;\n }\n\n public async askAIHelper(page: Page, question: string): Promise<ServerResponse> {\n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}`); \n try {\n const navTracker = NavTracker.getInstance(page);\n await navTracker.waitForNavigationToStabilize();\n // Get current page and capture screenshot\n await waitForMutationsToSettle(page);\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\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 \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// export const highlighterCode = '';"],"names":["require$$0","retry"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8]}
|
|
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","../../../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","../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[\"TYPE_KEYS\"] = \"TYPE_KEYS\";\n PlaywrightAction[\"HOVER\"] = \"HOVER\";\n PlaywrightAction[\"VALIDATE_EXACT_VALUE\"] = \"VALIDATE_EXACT_VALUE\";\n PlaywrightAction[\"VALIDATE_CONTAINS_VALUE\"] = \"VALIDATE_CONTAINS_VALUE\";\n PlaywrightAction[\"VALIDATE_URL\"] = \"VALIDATE_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 || (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 || (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.VALIDATE_CONTAINS_VALUE,\n PlaywrightAction.VALIDATE_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;\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) === \"\");\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};\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\";\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.VALIDATE_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.VALIDATE_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.VALIDATE_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","import { Frame, Locator, Page } from '@playwright/test';\nimport { PlaywrightAction, PlaywrightTimeoutConfig, DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, matchRegex } from '@probolabs/probo-shared';\nimport { findClosestVisibleElement } from './actions';\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 config: PlaywrightTimeoutConfig;\n private page: Page | null = null;\n private lastNavigationTime: number | null = null;\n\n constructor(config: PlaywrightTimeoutConfig = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG, page: Page | null = null) {\n // Merge provided config with defaults to ensure all properties are defined\n this.config = {\n ...DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG,\n ...config\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.config.playwrightNavigationTimeout);\n this.page.setDefaultTimeout(this.config.playwrightActionTimeout);\n\n // start the nav handler listener\n this.page.on(\"framenavigated\", this.onFrameNav.bind(this));\n }\n }\n\n private onFrameNav(frame: Frame) {\n // if (frame === this.page?.mainFrame()) {\n // this.lastNavigationTime = Date.now();\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.config.playwrightNavigationTimeout });\n // await handlePotentialNavigation(this.page);\n } catch (e) {\n throw new Error(`Failed to navigate to ${argument}`);\n }\n return;\n }\n \n // 2. 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.config.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 // 3. Highlight, wait, unhighlight if highlightTimeout > 0\n if (this.config.highlightTimeout > 0) {\n await this.highlight(locator, annotation);\n await this.page.waitForTimeout(this.config.highlightTimeout);\n await this.unhighlight(locator);\n }\n\n // 4. 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 // await handlePotentialNavigation(this.page);\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.VALIDATE_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.VALIDATE_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 VALIDATE_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 this.robustClick(locator);\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 /**\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.config.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.config.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.config.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} /* class ProboPlaywright */\n","import { Page, Frame } from 'playwright';\nimport { proboLogger } from './probo-logger';\n\nexport interface NavTrackerOptions {\n stabilizationTimeout?: number; // Time to wait after last navigation (default: 2000ms)\n}\n\n/**\n * Global navigation tracker that monitors page navigation events\n * and provides methods to check if navigation has stabilized\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 stabilizationTimeout: number;\n private isListening: boolean = false;\n private onFrameNavHandler: (frame: Frame) => void;\n private instanceId: string;\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.stabilizationTimeout = options.stabilizationTimeout ?? 2000;\n this.instanceId = Math.random().toString(36).substr(2, 9);\n \n this.onFrameNavHandler = (frame: Frame) => {\n if (frame === this.page.mainFrame()) {\n this.navigationCount++;\n this.lastNavTime = Date.now();\n \n proboLogger.debug(\n `NavTracker[${this.instanceId}]: navigation detected (navigationCount=${this.navigationCount}, lastNavTime=${new Date(this.lastNavTime).toISOString().slice(11, 23)}, timeSinceLastNav=${Date.now() - this.lastNavTime}ms)`\n );\n }\n };\n\n // Auto-start the tracker when first instantiated\n this.start();\n }\n\n /**\n * Start listening for navigation events (private method)\n */\n private start(): void {\n if (this.isListening) {\n proboLogger.debug(`NavTracker[${this.instanceId}]: already listening, ignoring start()`);\n return;\n }\n\n this.page.on(\"framenavigated\", this.onFrameNavHandler);\n this.isListening = true;\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: started listening for navigation events`);\n }\n\n /**\n * Stop listening for navigation 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 this.page.removeListener(\"framenavigated\", this.onFrameNavHandler);\n this.isListening = false;\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: stopped listening for navigation events`);\n }\n\n /**\n * Check if navigation has stabilized (no navigation for stabilizationTimeout ms) (private method)\n */\n private hasNavigationStabilized(): boolean {\n if (this.lastNavTime === null) {\n // No navigation has occurred yet\n return true;\n }\n\n const timeSinceLastNav = Date.now() - this.lastNavTime;\n const isStabilized = timeSinceLastNav >= this.stabilizationTimeout;\n \n proboLogger.debug(\n `NavTracker[${this.instanceId}]: hasNavigationStabilized() - timeSinceLastNav=${timeSinceLastNav}ms, stabilizationTimeout=${this.stabilizationTimeout}ms, stabilized=${isStabilized}`\n );\n \n return isStabilized;\n }\n\n /**\n * Wait for navigation to stabilize\n * Waits a short time to catch any missed navigation events, then ensures\n * the latest navigation happened at least stabilizationTimeout ms ago\n */\n async waitForNavigationToStabilize(): Promise<void> {\n proboLogger.debug(`NavTracker[${this.instanceId}]: waiting for navigation to stabilize`);\n \n // Wait 100ms to catch any navigation events we might have missed\n await new Promise(resolve => setTimeout(resolve, 100));\n \n // Now wait until navigation has stabilized (no navigation for stabilizationTimeout ms)\n while (!this.hasNavigationStabilized()) {\n // Wait 100ms before checking again\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n \n proboLogger.debug(`NavTracker[${this.instanceId}]: navigation has stabilized`);\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 getInstance(page?: Page, options?: NavTrackerOptions): NavTracker {\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 proboLogger.debug(`NavTracker: created new singleton instance`);\n } else {\n proboLogger.debug(`NavTracker: returning existing singleton instance`);\n }\n return NavTracker.instance;\n }\n\n}","import type { Page } from 'playwright';\nimport type { \n ElementInfo,\n ElementTag,\n InitialPageState,\n PlaywrightTimeoutConfig,\n ServerResponse, \n FindCandidateInput,\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 } 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?: PlaywrightTimeoutConfig;\n}\n\nexport interface RunStepOptions {\n useCache: boolean;\n stepIdFromServer?: number | null;\n aiModel?: AIModel;\n timeoutConfig?: PlaywrightTimeoutConfig; // override the timeout config for the step\n\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 = DEFAULT_PLAYWRIGHT_TIMEOUT_CONFIG\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 = 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): Promise<any> {\n const response = await this.askAIHelper(page, question);\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 = { useCache: true, stepIdFromServer: undefined, aiModel: this.aiModel, timeoutConfig: this.timeoutConfig }\n ): Promise<boolean|string|null> {\n // Use the aiModel from options if provided, otherwise use the one from constructor\n const aiModelToUse = options.aiModel !== undefined ? options.aiModel : this.aiModel;\n \n proboLogger.log(`runStep: ${options.stepIdFromServer ? '#'+options.stepIdFromServer+' - ' : ''}${stepPrompt}, aiModel: ${aiModelToUse}, pageUrl: ${page.url()}`);\n this.setupConsoleLogs(page);\n const navTracker = NavTracker.getInstance(page);\n await navTracker.waitForNavigationToStabilize();\n // First check if the step exists in the database\n let stepId: string;\n \n if (options.useCache) {\n const [isCachedStep, returnValue] = await this._handleCachedStep(page, stepPrompt, argument);\n if (isCachedStep) {\n proboLogger.debug('performed cached step!');\n return returnValue;\n }\n }\n \n proboLogger.debug(`Cache disabled or step not found, creating new step`);\n stepId = await this._handleStepCreation(page, stepPrompt, options.stepIdFromServer, options.useCache);\n proboLogger.debug('Step ID:', stepId);\n let instruction: Instruction | null = null;\n // Main execution loop\n while (true) {\n try {\n // Get next instruction from server\n const nextInstruction = await this.apiClient.resolveNextInstruction(stepId, instruction, aiModelToUse);\n proboLogger.debug('Next Instruction from server:', nextInstruction);\n\n // Exit conditions\n \n if (nextInstruction.what_to_do === 'do_nothing') {\n if (nextInstruction.args.success) {\n proboLogger.info(`Reasoning: ${nextInstruction.args.message}`)\n proboLogger.info('Step completed successfully');\n return nextInstruction.args.return_value;\n }\n else { \n throw new Error(nextInstruction.args.message)\n } \n }\n\n // Handle different instruction types\n switch (nextInstruction.what_to_do) {\n case 'highlight_candidate_elements':\n proboLogger.debug('Highlighting candidate elements:', nextInstruction.args.element_types);\n \n const elementTags = nextInstruction.args.element_types;\n const { candidates_screenshot_url, candidate_elements } = await this.findAndHighlightCandidateElements(page, elementTags as ElementTagType[]);\n \n \n const cleaned_candidate_elements = candidate_elements.map((elementInfo: ElementInfo) => {\n elementInfo.element = null;\n return elementInfo;\n });\n proboLogger.debug(`Highlighted ${cleaned_candidate_elements.length} elements`);\n \n const executed_instruction: Instruction = {\n what_to_do: 'highlight_candidate_elements',\n args: {\n element_types: nextInstruction.args.element_types\n },\n result: {\n highlighted_elements: cleaned_candidate_elements,\n candidate_elements_screenshot_url: candidates_screenshot_url\n }\n }\n proboLogger.debug('Executed Instruction:', executed_instruction);\n instruction = executed_instruction;\n break;\n\n case 'perform_action':\n instruction = await this._handlePerformAction(page, nextInstruction, argument);\n break;\n\n default:\n throw new Error(`Unknown instruction type: ${nextInstruction.what_to_do}`);\n }\n\n } catch (error: any) {\n proboLogger.error(error.message); \n throw Error(error.message); \n }\n }\n \n\n }\n \n private async _handleCachedStep(page: Page, stepPrompt: string, argument: string|boolean|null): Promise<[boolean, boolean|string]> {\n proboLogger.debug(`Checking if step exists in database: ${stepPrompt}`);\n const result: FindStepByPromptResult | null = await this.apiClient.findStepByPrompt(stepPrompt, this.scenarioName, page.url());\n if (result) {\n const actionArgument = argument ?? result.step.argument;\n proboLogger.log(`Found existing step with ID: ${result.step.id} going to perform action: ${result.step.action} with value: ${actionArgument}`);\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}`);\n if (result.step.status !== 'EXECUTED') {\n proboLogger.debug(`Step ${result.step.id} is not executed, returning false`);\n return [false, false];\n }\n proboLogger.debug(`Step ${result.step.id} is in status executed, performing action directly with Playwright`);\n const element_css_selector = result.step.element_css_selector\n const iframe_selector = result.step.iframe_selector\n let returnValue;\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: iframe_selector,\n elementSelector: element_css_selector,\n action: result.step.action as PlaywrightAction,\n argument: actionArgument as string,\n // Disable highlighting for cached steps since they're already validated\n highlightTimeout: 0\n });\n \n // Handle return value - runStep returns RunStepResult for EXTRACT_VALUE, void for others\n if (runStepResult) {\n returnValue = runStepResult\n } else {\n returnValue = true;\n }\n } catch (error: any) {\n proboLogger.error(`Error executing action for step ${result.step.id} going to reset the step`);\n proboLogger.debug('Error details:', error);\n await this.apiClient.resetStep(result.step.id);\n return [false, false];\n }\n return [true, returnValue];\n } else {\n proboLogger.debug(`Step not found in database, continuing with the normal flow`);\n return [false, false]\n }\n\n }\n \n private async _handleStepCreation(\n page: Page, \n stepPrompt: string, \n stepIdFromServer: number | null | undefined, \n useCache: boolean\n ): Promise<string> {\n \n proboLogger.debug(`Taking initial screenshot from the page ${page.url()}`);\n // not sure if this is needed\n // await handlePotentialNavigation(page);\n await waitForMutationsToSettle(page);\n \n const { base_screenshot_url, base_html_content } = await pRetry(() => this.getInitialPageState(page), retryOptions);\n \n \n \n \n return await this.apiClient.createStep({\n stepIdFromServer,\n scenarioName: this.scenarioName,\n stepPrompt: stepPrompt,\n initial_screenshot_url: base_screenshot_url,\n initial_html_content: base_html_content,\n use_cache: useCache,\n url: page.url()\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, nextInstruction: Instruction, argument: string|boolean|null) {\n proboLogger.debug('Handling perform action:', nextInstruction);\n const action = nextInstruction.args.action;\n const value = argument ?? nextInstruction.args.value;\n const element_css_selector = nextInstruction.args.element_css_selector;\n const iframe_selector = nextInstruction.args.iframe_selector;\n const element_index = nextInstruction.args.element_index;\n if(action !== PlaywrightAction.VISIT_URL) {\n await this.unhighlightElements(page);\n proboLogger.debug('Unhighlighted elements');\n await this.highlightElement(page, element_css_selector,iframe_selector, 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,\n highlightTimeout: 0\n });\n let stepStatus;\n if ([PlaywrightAction.VALIDATE_EXACT_VALUE,\n PlaywrightAction.VALIDATE_CONTAINS_VALUE, PlaywrightAction.VALIDATE_URL].includes(action))\n stepStatus = returnValue;\n else\n stepStatus = true;\n\n await this.unhighlightElements(page);\n await waitForMutationsToSettle(page);\n const post_action_screenshot_url = await this.screenshot(page);\n const post_html_content = '';\n \n\n const executed_instruction: Instruction = {\n what_to_do: 'perform_action',\n args: {\n action: action,\n value: value,\n element_css_selector: element_css_selector,\n iframe_selector: iframe_selector\n },\n result: {\n pre_action_screenshot_url: pre_action_screenshot_url,\n post_action_screenshot_url: post_action_screenshot_url,\n post_html_content: post_html_content,\n validation_status: stepStatus,\n return_value: returnValue\n }\n }\n return executed_instruction;\n }\n\n public async askAIHelper(page: Page, question: string): Promise<ServerResponse> {\n proboLogger.debug(`🔍 [askAI] Asking AI question: \"${question}\", scenarioName: ${this.scenarioName}, aiModel: ${this.aiModel}`); \n try {\n const navTracker = NavTracker.getInstance(page);\n await navTracker.waitForNavigationToStabilize();\n // Get current page and capture screenshot\n await waitForMutationsToSettle(page);\n const screenshot = await this.screenshot(page);\n proboLogger.debug(`📸 [askAI] Screenshot captured: ${screenshot}`);\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 \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 };"],"names":["require$$0","retry"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,mBAAwB,+OA4CnE;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,6OAAwB,CAAC;AAE1C;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@probolabs/playwright",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Playwright utilities for testing and automation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"p-retry": "^6.2.1",
|
|
25
|
-
"@probolabs/probo-shared": "1.0.
|
|
25
|
+
"@probolabs/probo-shared": "1.0.3"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@rollup/plugin-commonjs": "^28.0.2",
|
|
@@ -47,6 +47,11 @@
|
|
|
47
47
|
"types": "./dist/index.d.ts",
|
|
48
48
|
"import": "./dist/index.js",
|
|
49
49
|
"require": "./dist/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./fixtures": {
|
|
52
|
+
"types": "./dist/fixtures.d.ts",
|
|
53
|
+
"import": "./dist/fixtures.js",
|
|
54
|
+
"require": "./dist/fixtures.js"
|
|
50
55
|
}
|
|
51
56
|
},
|
|
52
57
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceScriptRunner.d.ts","sourceRoot":"","sources":["../src/workspaceScriptRunner.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;CAChC;AAED,qBAAa,qBAAqB;IAChC;;OAEG;WACU,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiEvG;;;OAGG;WACU,6BAA6B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,IAAI,CAAC;CA8CjB"}
|