lexxit-automation-framework 2.0.20 → 3.0.0

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.
Files changed (61) hide show
  1. package/README.md +246 -57
  2. package/npmignore +8 -0
  3. package/package.json +32 -1
  4. package/public/dashboard.html +591 -0
  5. package/src/actions/baseHandler.ts +351 -0
  6. package/src/actions/browserManager.ts +432 -0
  7. package/src/actions/checkboxHandler.ts +276 -0
  8. package/src/actions/clickHandler.ts +513 -0
  9. package/src/actions/customcodehandler.ts +251 -0
  10. package/src/actions/dropdownHandler.ts +501 -0
  11. package/src/actions/radiobuttonHandler.ts +286 -0
  12. package/src/actions/textHandler.ts +498 -0
  13. package/src/api/server.ts +210 -0
  14. package/src/config.ts +7 -0
  15. package/src/executor/functionMap.ts +153 -0
  16. package/src/executor/mapping.ts +70 -0
  17. package/src/executor/scriptExecutor.ts +162 -0
  18. package/src/executor/stepExecutor.ts +289 -0
  19. package/src/runner/testRunner.ts +78 -0
  20. package/src/sse/sseManager.ts +130 -0
  21. package/src/store/executionStore.ts +152 -0
  22. package/src/store/testDataStore.ts +46 -0
  23. package/src/types/types.ts +159 -0
  24. package/src/utils/healingService.ts +210 -0
  25. package/src/utils/locatorService.ts +73 -0
  26. package/src/utils/logger.ts +27 -0
  27. package/src/utils/metadataService.ts +137 -0
  28. package/src/utils/waitConditions.ts +141 -0
  29. package/src/validator/validator.ts +140 -0
  30. package/tsconfig.json +16 -0
  31. package/bin/lexxit-automation-framework.js +0 -224
  32. package/dist-obf/app.js +0 -1
  33. package/dist-obf/controllers/controller.js +0 -1
  34. package/dist-obf/core/BrowserManager.js +0 -1
  35. package/dist-obf/core/PlaywrightEngine.js +0 -1
  36. package/dist-obf/core/ScreenshotManager.js +0 -1
  37. package/dist-obf/core/TestData.js +0 -1
  38. package/dist-obf/core/TestExecutor.js +0 -1
  39. package/dist-obf/core/handlers/AllHandlers.js +0 -1
  40. package/dist-obf/core/handlers/BaseHandler.js +0 -1
  41. package/dist-obf/core/handlers/ClickHandler.js +0 -1
  42. package/dist-obf/core/handlers/CustomCodeHandler.js +0 -1
  43. package/dist-obf/core/handlers/DropdownHandler.js +0 -1
  44. package/dist-obf/core/handlers/InputHandler.js +0 -1
  45. package/dist-obf/core/registry/ActionRegistry.js +0 -1
  46. package/dist-obf/installer/frameworkLauncher.js +0 -1
  47. package/dist-obf/public/dashboard.html +0 -591
  48. package/dist-obf/public/execution.html +0 -510
  49. package/dist-obf/public/queue-monitor.html +0 -408
  50. package/dist-obf/queue/ExecutionQueue.js +0 -1
  51. package/dist-obf/routes/api.routes.js +0 -1
  52. package/dist-obf/server.js +0 -1
  53. package/dist-obf/types/types.js +0 -1
  54. package/dist-obf/utils/chromefinder.js +0 -1
  55. package/dist-obf/utils/elementHighlight.js +0 -1
  56. package/dist-obf/utils/locatorHelper.js +0 -1
  57. package/dist-obf/utils/logger.js +0 -1
  58. package/dist-obf/utils/response.js +0 -1
  59. package/dist-obf/utils/responseFormatter.js +0 -1
  60. package/dist-obf/utils/sseManager.js +0 -1
  61. package/scripts/postinstall.js +0 -52
@@ -0,0 +1,141 @@
1
+ import { Page } from 'playwright';
2
+ import { LocatorService } from './locatorService';
3
+
4
+ const DEFAULT_TIMEOUT = 10000;
5
+
6
+ export class WaitConditions {
7
+ // ─── waitForVisible ────────────────────────────────────────────────────────
8
+
9
+ static async waitForVisible(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
10
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
11
+ await resolved.element.waitFor({ state: 'visible', timeout });
12
+ }
13
+
14
+ // ─── waitForHidden ─────────────────────────────────────────────────────────
15
+
16
+ static async waitForHidden(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
17
+ const combinedXPath = locators.join(' | ');
18
+ const element = page.locator(`xpath=${combinedXPath}`).first();
19
+ await element.waitFor({ state: 'hidden', timeout });
20
+ }
21
+
22
+ // ─── waitForEnabled ────────────────────────────────────────────────────────
23
+
24
+ static async waitForEnabled(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
25
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
26
+ const handle = await resolved.element.elementHandle();
27
+
28
+ if (!handle) throw new Error('Element handle could not be resolved');
29
+
30
+ await page.waitForFunction(
31
+ (el) => el && !(el as HTMLInputElement).disabled,
32
+ handle,
33
+ { timeout }
34
+ );
35
+ }
36
+
37
+ // ─── waitForDisabled ───────────────────────────────────────────────────────
38
+
39
+ static async waitForDisabled(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
40
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
41
+ const handle = await resolved.element.elementHandle();
42
+
43
+ if (!handle) throw new Error('Element handle could not be resolved');
44
+
45
+ await page.waitForFunction(
46
+ (el) => el && (el as HTMLInputElement).disabled,
47
+ handle,
48
+ { timeout }
49
+ );
50
+ }
51
+
52
+ // ─── waitForTextEmpty ──────────────────────────────────────────────────────
53
+
54
+ static async waitForTextEmpty(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
55
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
56
+ const handle = await resolved.element.elementHandle();
57
+
58
+ if (!handle) throw new Error('Element handle could not be resolved');
59
+
60
+ await page.waitForFunction(
61
+ (el) => {
62
+ if (!el) return false;
63
+ const tag = (el as HTMLElement).tagName;
64
+ const text = tag === 'INPUT' || tag === 'TEXTAREA'
65
+ ? (el as HTMLInputElement).value
66
+ : (el as HTMLElement).innerText;
67
+ return text.trim() === '';
68
+ },
69
+ handle,
70
+ { timeout }
71
+ );
72
+ }
73
+
74
+ // ─── waitForTextNotEmpty ───────────────────────────────────────────────────
75
+
76
+ static async waitForTextNotEmpty(page: Page, locators: string[], timeout: number = DEFAULT_TIMEOUT): Promise<void> {
77
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
78
+ const handle = await resolved.element.elementHandle();
79
+
80
+ if (!handle) throw new Error('Element handle could not be resolved');
81
+
82
+ await page.waitForFunction(
83
+ (el) => {
84
+ if (!el) return false;
85
+ const tag = (el as HTMLElement).tagName;
86
+ const text = tag === 'INPUT' || tag === 'TEXTAREA'
87
+ ? (el as HTMLInputElement).value
88
+ : (el as HTMLElement).innerText;
89
+ return text.trim() !== '';
90
+ },
91
+ handle,
92
+ { timeout }
93
+ );
94
+ }
95
+
96
+ // ─── waitForTextChange ─────────────────────────────────────────────────────
97
+
98
+ static async waitForTextChange(page: Page, locators: string[], initialText: string, timeout: number = DEFAULT_TIMEOUT): Promise<void> {
99
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
100
+ const handle = await resolved.element.elementHandle();
101
+
102
+ if (!handle) throw new Error('Element handle could not be resolved');
103
+
104
+ await page.waitForFunction(
105
+ (arg) => {
106
+ const el = arg.el as HTMLElement | HTMLInputElement | null;
107
+ if (!el) return false;
108
+ const tag = el.tagName;
109
+ const text = tag === 'INPUT' || tag === 'TEXTAREA'
110
+ ? (el as HTMLInputElement).value
111
+ : el.innerText;
112
+ return text.trim() !== arg.oldText.trim();
113
+ },
114
+ { el: handle, oldText: initialText },
115
+ { timeout }
116
+ );
117
+ }
118
+
119
+ // ─── waitForTextContains ───────────────────────────────────────────────────
120
+
121
+ static async waitForTextContains(page: Page, locators: string[], expectedSubstring: string, timeout: number = DEFAULT_TIMEOUT): Promise<void> {
122
+ const resolved = await LocatorService.resolveElement(page, locators, timeout);
123
+ const handle = await resolved.element.elementHandle();
124
+
125
+ if (!handle) throw new Error('Element handle could not be resolved');
126
+
127
+ await page.waitForFunction(
128
+ (arg) => {
129
+ const el = arg.el as HTMLElement | HTMLInputElement | null;
130
+ if (!el) return false;
131
+ const tag = el.tagName;
132
+ const text = tag === 'INPUT' || tag === 'TEXTAREA'
133
+ ? (el as HTMLInputElement).value
134
+ : el.innerText;
135
+ return text.includes(arg.substring);
136
+ },
137
+ { el: handle, substring: expectedSubstring },
138
+ { timeout }
139
+ );
140
+ }
141
+ }
@@ -0,0 +1,140 @@
1
+ export interface ValidationError {
2
+ level: 'testset' | 'testscript' | 'step';
3
+ field: string;
4
+ message: string;
5
+ test_script_uid?: string;
6
+ step_name?: string;
7
+ }
8
+
9
+ // ─── Testset Payload Validation ───────────────────────────────────────────────
10
+
11
+ function validateTestset(payload: any): ValidationError[] {
12
+ const errors: ValidationError[] = [];
13
+
14
+ if (!payload.test_set_name || typeof payload.test_set_name !== 'string') {
15
+ errors.push({ level: 'testset', field: 'test_set_name', message: 'test_set_name is required and must be a string' });
16
+ }
17
+
18
+ if (typeof payload.open_dashboard !== 'boolean') {
19
+ errors.push({ level: 'testset', field: 'open_dashboard', message: 'open_dashboard is required and must be a boolean' });
20
+ }
21
+
22
+ if (typeof payload.parallel !== 'boolean') {
23
+ errors.push({ level: 'testset', field: 'parallel', message: 'parallel is required and must be a boolean' });
24
+ }
25
+
26
+ if (typeof payload.stop_on_failure !== 'boolean') {
27
+ errors.push({ level: 'testset', field: 'stop_on_failure', message: 'stop_on_failure is required and must be a boolean' });
28
+ }
29
+
30
+ if (typeof payload.video_enabled !== 'boolean') {
31
+ errors.push({ level: 'testset', field: 'video_enabled', message: 'video_enabled is required and must be a boolean' });
32
+ }
33
+
34
+ if (payload.exec_mode !== undefined) {
35
+ if (typeof payload.exec_mode !== 'object' || payload.exec_mode === null) {
36
+ errors.push({ level: 'testset', field: 'exec_mode', message: 'exec_mode must be an object' });
37
+ } else {
38
+ if (!['fast', 'medium', 'slow'].includes(payload.exec_mode.mode)) {
39
+ errors.push({ level: 'testset', field: 'exec_mode.mode', message: 'exec_mode.mode must be one of: fast, medium, slow' });
40
+ }
41
+ if (payload.exec_mode.delay_ms !== undefined && typeof payload.exec_mode.delay_ms !== 'number') {
42
+ errors.push({ level: 'testset', field: 'exec_mode.delay_ms', message: 'exec_mode.delay_ms must be a number' });
43
+ }
44
+ }
45
+ }
46
+
47
+ if (!Array.isArray(payload.scripts) || payload.scripts.length === 0) {
48
+ errors.push({ level: 'testset', field: 'scripts', message: 'scripts is required and must be a non-empty array' });
49
+ }
50
+
51
+ return errors;
52
+ }
53
+
54
+ // ─── Testscript Payload Validation ────────────────────────────────────────────
55
+
56
+ function validateTestscript(script: any): ValidationError[] {
57
+ const errors: ValidationError[] = [];
58
+ const uid = script.test_script_uid || 'unknown';
59
+
60
+ if (!script.test_script_uid || typeof script.test_script_uid !== 'string') {
61
+ errors.push({ level: 'testscript', field: 'test_script_uid', message: 'test_script_uid is required and must be a string', test_script_uid: uid });
62
+ }
63
+
64
+ if (!script.test_case_name || typeof script.test_case_name !== 'string') {
65
+ errors.push({ level: 'testscript', field: 'test_case_name', message: 'test_case_name is required and must be a string', test_script_uid: uid });
66
+ }
67
+
68
+ if (!script.app_id || typeof script.app_id !== 'string') {
69
+ errors.push({ level: 'testscript', field: 'app_id', message: 'app_id is required and must be a string', test_script_uid: uid });
70
+ }
71
+
72
+ // if (!['chromium', 'firefox', 'edge'].includes(script.browser)) {
73
+ if (!['chromium', 'chrome', 'firefox', 'edge'].includes(script.browser)) {
74
+ errors.push({ level: 'testscript', field: 'browser', message: 'browser must be one of: chromium, firefox, edge', test_script_uid: uid });
75
+ }
76
+
77
+ if (typeof script.headless !== 'boolean') {
78
+ errors.push({ level: 'testscript', field: 'headless', message: 'headless is required and must be a boolean', test_script_uid: uid });
79
+ }
80
+
81
+ if (typeof script.voice_enabled !== 'boolean') {
82
+ errors.push({ level: 'testscript', field: 'voice_enabled', message: 'voice_enabled is required and must be a boolean', test_script_uid: uid });
83
+ }
84
+
85
+ if (!['on_failure', 'always', 'never'].includes(script.screenshot_mode)) {
86
+ errors.push({ level: 'testscript', field: 'screenshot_mode', message: 'screenshot_mode must be one of: on_failure, always, never', test_script_uid: uid });
87
+ }
88
+
89
+ if (typeof script.stop_on_failure !== 'boolean') {
90
+ errors.push({ level: 'testscript', field: 'stop_on_failure', message: 'stop_on_failure is required and must be a boolean', test_script_uid: uid });
91
+ }
92
+
93
+ if (!Array.isArray(script.steps) || script.steps.length === 0) {
94
+ errors.push({ level: 'testscript', field: 'steps', message: 'steps is required and must be a non-empty array', test_script_uid: uid });
95
+ }
96
+
97
+ return errors;
98
+ }
99
+
100
+ // ─── Step Payload Validation ──────────────────────────────────────────────────
101
+
102
+ function validateStep(step: any, test_script_uid: string): ValidationError[] {
103
+ const errors: ValidationError[] = [];
104
+ const stepName = step.step_name || 'unknown';
105
+
106
+ if (!step.step_name || typeof step.step_name !== 'string') {
107
+ errors.push({ level: 'step', field: 'step_name', message: 'step_name is required and must be a string', test_script_uid, step_name: stepName });
108
+ }
109
+
110
+ if (!step.step_script || typeof step.step_script !== 'string') {
111
+ errors.push({ level: 'step', field: 'step_script', message: 'step_script is required and must be a string', test_script_uid, step_name: stepName });
112
+ }
113
+
114
+ return errors;
115
+ }
116
+
117
+ // ─── Main Validator ───────────────────────────────────────────────────────────
118
+
119
+ export function validatePayload(payload: any): ValidationError[] {
120
+ const allErrors: ValidationError[] = [];
121
+
122
+ const testsetErrors = validateTestset(payload);
123
+ allErrors.push(...testsetErrors);
124
+
125
+ if (!Array.isArray(payload.scripts)) return allErrors;
126
+
127
+ for (const script of payload.scripts) {
128
+ const scriptErrors = validateTestscript(script);
129
+ allErrors.push(...scriptErrors);
130
+
131
+ if (!Array.isArray(script.steps)) continue;
132
+
133
+ for (const step of script.steps) {
134
+ const stepErrors = validateStep(step, script.test_script_uid || 'unknown');
135
+ allErrors.push(...stepErrors);
136
+ }
137
+ }
138
+
139
+ return allErrors;
140
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022", "DOM"],
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "resolveJsonModule": true,
12
+ "forceConsistentCasingInFileNames": true
13
+ },
14
+ "include": ["src/**/*"],
15
+ "exclude": ["node_modules", "dist"]
16
+ }
@@ -1,224 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- 'use strict';
4
-
5
- const { execSync, spawn } = require('child_process');
6
- const path = require('path');
7
- const fs = require('fs');
8
- const os = require('os');
9
- const http = require('http');
10
-
11
- const args = process.argv.slice(2);
12
- const command = args[0];
13
-
14
- const COLORS = {
15
- reset: '\x1b[0m',
16
- green: '\x1b[32m',
17
- yellow: '\x1b[33m',
18
- red: '\x1b[31m',
19
- cyan: '\x1b[36m',
20
- bold: '\x1b[1m',
21
- };
22
-
23
- function info(msg) { console.log(`${COLORS.cyan}[lexxit]${COLORS.reset} ${msg}`); }
24
- function success(msg) { console.log(`${COLORS.green}✔${COLORS.reset} ${msg}`); }
25
- function warn(msg) { console.log(`${COLORS.yellow}⚠${COLORS.reset} ${msg}`); }
26
- function error(msg) { console.log(`${COLORS.red}✖${COLORS.reset} ${msg}`); }
27
-
28
- // ── Package root = one level up from /bin ──────────────────────────────────
29
- const PKG_ROOT = path.join(__dirname, '..');
30
- // const DIST_SERVER = path.join(PKG_ROOT, 'dist', 'server.js');
31
- const DIST_SERVER = path.join(PKG_ROOT, 'dist-obf', 'server.js');
32
- const PID_FILE = path.join(os.tmpdir(), 'lexxit-automation-framework.pid');
33
- const PORT = 5500;
34
-
35
- // ── Command router ─────────────────────────────────────────────────────────
36
- if (command === 'start') {
37
- startFramework();
38
- } else if (command === 'stop') {
39
- stopFramework();
40
- } else if (command === 'status') {
41
- checkStatus();
42
- } else {
43
- printHelp();
44
- }
45
-
46
- function printHelp() {
47
- console.log(`
48
- ${COLORS.bold}lexxit-automation-framework${COLORS.reset}
49
-
50
- Usage:
51
- lexxit-automation-framework start Start the local agent on port ${PORT}
52
- lexxit-automation-framework stop Stop the running agent
53
- lexxit-automation-framework status Check if agent is running
54
- `);
55
- }
56
-
57
- // ── START ───────────────────────────────────────────────────────────────────
58
-
59
- function startFramework() {
60
- info('Starting lexxit-automation-framework...');
61
-
62
- // 1. Check if already running
63
- pingHealth((isRunning) => {
64
- if (isRunning) {
65
- success(`Framework already running on http://localhost:${PORT}`);
66
- return;
67
- }
68
-
69
- // // 2. Ensure dist/server.js exists
70
- // if (!fs.existsSync(DIST_SERVER)) {
71
- // info('dist/server.js not found — building project first...');
72
- // try {
73
- // execSync('npm run build', {
74
- // cwd: PKG_ROOT,
75
- // stdio: 'inherit',
76
- // });
77
- // success('Build complete.');
78
- // } catch (e) {
79
- // error('Build failed. Please run "npm run build" manually inside the framework folder.');
80
- // process.exit(1);
81
- // }
82
- // }
83
- if (!fs.existsSync(DIST_SERVER)) {
84
- error(`❌ dist-obf/server.js not found.`);
85
- error(`Package is not built correctly.`);
86
- process.exit(1);
87
- }
88
-
89
- if (!fs.existsSync(DIST_SERVER)) {
90
- error(`Still cannot find: ${DIST_SERVER}`);
91
- error('Please run "npm run build" inside your lexxit-automation-framework folder.');
92
- process.exit(1);
93
- }
94
-
95
- // 3. Launch server
96
- info(`Launching server: ${DIST_SERVER}`);
97
-
98
- const isWindows = os.platform() === 'win32';
99
-
100
- // On Windows we use a slightly different spawn approach
101
- const child = isWindows
102
- ? spawn(process.execPath, [DIST_SERVER], {
103
- detached: true,
104
- stdio: 'ignore',
105
- cwd: PKG_ROOT,
106
- env: { ...process.env, PORT: String(PORT) },
107
- windowsHide: true,
108
- })
109
- : spawn(process.execPath, [DIST_SERVER], {
110
- detached: true,
111
- stdio: 'ignore',
112
- cwd: PKG_ROOT,
113
- env: { ...process.env, PORT: String(PORT) },
114
- });
115
-
116
- child.unref();
117
-
118
- // Save PID for stop command
119
- try {
120
- fs.writeFileSync(PID_FILE, String(child.pid));
121
- info(`PID ${child.pid} saved to ${PID_FILE}`);
122
- } catch (e) {
123
- warn('Could not save PID file.');
124
- }
125
-
126
- // 4. Wait up to 30 seconds for server to be ready
127
- info(`Waiting for framework on http://localhost:${PORT}/api/health ...`);
128
- waitForHealth(30, 1000, () => {
129
- success(`lexxit-automation-framework is running on http://localhost:${PORT}`);
130
- success('You can now use the web app to run tests.');
131
- });
132
- });
133
- }
134
-
135
- // ── STOP ────────────────────────────────────────────────────────────────────
136
-
137
- function stopFramework() {
138
- if (!fs.existsSync(PID_FILE)) {
139
- warn('No PID file found — framework may not be running.');
140
- return;
141
- }
142
-
143
- const pid = parseInt(fs.readFileSync(PID_FILE, 'utf8').trim(), 10);
144
-
145
- if (isNaN(pid)) {
146
- warn('Invalid PID file. Deleting it.');
147
- fs.unlinkSync(PID_FILE);
148
- return;
149
- }
150
-
151
- try {
152
- process.kill(pid, 'SIGTERM');
153
- fs.unlinkSync(PID_FILE);
154
- success(`Framework stopped (PID: ${pid})`);
155
- } catch (e) {
156
- // Process may have already exited
157
- warn(`Could not kill PID ${pid} — it may have already stopped.`);
158
- if (fs.existsSync(PID_FILE)) fs.unlinkSync(PID_FILE);
159
- }
160
- }
161
-
162
- // ── STATUS ──────────────────────────────────────────────────────────────────
163
-
164
- function checkStatus() {
165
- info('Checking framework status...');
166
- pingHealth((isRunning) => {
167
- if (isRunning) {
168
- success(`Framework is RUNNING on http://localhost:${PORT}`);
169
- } else {
170
- warn('Framework is NOT running.');
171
- info('Start it with: lexxit-automation-framework start');
172
- }
173
- });
174
- }
175
-
176
- // ── HELPERS ─────────────────────────────────────────────────────────────────
177
-
178
- /**
179
- * Single health ping — calls callback(true/false)
180
- */
181
- function pingHealth(callback) {
182
- const req = http.get(
183
- `http://localhost:${PORT}/api/health`,
184
- { timeout: 1500 },
185
- (res) => {
186
- callback(res.statusCode === 200);
187
- }
188
- );
189
- req.on('error', () => callback(false));
190
- req.on('timeout', () => {
191
- req.destroy();
192
- callback(false);
193
- });
194
- }
195
-
196
- /**
197
- * Retries health check every `intervalMs` up to `maxRetries` times.
198
- * Calls onSuccess() when server responds, exits process on timeout.
199
- */
200
- function waitForHealth(maxRetries, intervalMs, onSuccess) {
201
- let attempts = 0;
202
-
203
- const interval = setInterval(() => {
204
- attempts++;
205
- process.stdout.write(`\r${COLORS.cyan}[lexxit]${COLORS.reset} Attempt ${attempts}/${maxRetries}...`);
206
-
207
- pingHealth((isRunning) => {
208
- if (isRunning) {
209
- clearInterval(interval);
210
- process.stdout.write('\n');
211
- onSuccess();
212
- } else if (attempts >= maxRetries) {
213
- clearInterval(interval);
214
- process.stdout.write('\n');
215
- error('Framework did not start in time.');
216
- error(`Try running directly to see errors:`);
217
- console.log(` node "${DIST_SERVER}"`);
218
- process.exit(1);
219
- }
220
- });
221
- }, intervalMs);
222
- }
223
-
224
-
package/dist-obf/app.js DELETED
@@ -1 +0,0 @@
1
- 'use strict';const a0_0x3c7d9d=a0_0x1838;(function(_0x138b36,_0x1a41a8){const _0xaf20f9=a0_0x1838,_0x1f95aa=_0x138b36();while(!![]){try{const _0x57b2c4=-parseInt(_0xaf20f9(0x178))/0x1*(-parseInt(_0xaf20f9(0x176))/0x2)+-parseInt(_0xaf20f9(0x15a))/0x3+parseInt(_0xaf20f9(0x164))/0x4+-parseInt(_0xaf20f9(0x16f))/0x5+-parseInt(_0xaf20f9(0x15e))/0x6*(-parseInt(_0xaf20f9(0x16e))/0x7)+parseInt(_0xaf20f9(0x16d))/0x8*(-parseInt(_0xaf20f9(0x168))/0x9)+-parseInt(_0xaf20f9(0x16c))/0xa*(parseInt(_0xaf20f9(0x172))/0xb);if(_0x57b2c4===_0x1a41a8)break;else _0x1f95aa['push'](_0x1f95aa['shift']());}catch(_0x43972e){_0x1f95aa['push'](_0x1f95aa['shift']());}}}(a0_0x5a8c,0x703d3));var a0_0x381792=this&&this['__importDefault']||function(_0x3df3f8){return _0x3df3f8&&_0x3df3f8['__esModule']?_0x3df3f8:{'default':_0x3df3f8};};Object[a0_0x3c7d9d(0x169)](exports,a0_0x3c7d9d(0x174),{'value':!![]});function a0_0x1838(_0x17b1fe,_0x524784){_0x17b1fe=_0x17b1fe-0x15a;const _0x5a8c3f=a0_0x5a8c();let _0x183839=_0x5a8c3f[_0x17b1fe];if(a0_0x1838['Jtqiwj']===undefined){var _0x8f3ff4=function(_0x313281){const _0x3c2ab7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x51df4e='',_0x137efa='';for(let _0x3dc757=0x0,_0x2757e6,_0x2838ac,_0x43765a=0x0;_0x2838ac=_0x313281['charAt'](_0x43765a++);~_0x2838ac&&(_0x2757e6=_0x3dc757%0x4?_0x2757e6*0x40+_0x2838ac:_0x2838ac,_0x3dc757++%0x4)?_0x51df4e+=String['fromCharCode'](0xff&_0x2757e6>>(-0x2*_0x3dc757&0x6)):0x0){_0x2838ac=_0x3c2ab7['indexOf'](_0x2838ac);}for(let _0x532a75=0x0,_0x3431ed=_0x51df4e['length'];_0x532a75<_0x3431ed;_0x532a75++){_0x137efa+='%'+('00'+_0x51df4e['charCodeAt'](_0x532a75)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x137efa);};a0_0x1838['oPuVdT']=_0x8f3ff4,a0_0x1838['SbSbvQ']={},a0_0x1838['Jtqiwj']=!![];}const _0x3a2972=_0x5a8c3f[0x0],_0x57f539=_0x17b1fe+_0x3a2972,_0x361dad=a0_0x1838['SbSbvQ'][_0x57f539];return!_0x361dad?(_0x183839=a0_0x1838['oPuVdT'](_0x183839),a0_0x1838['SbSbvQ'][_0x57f539]=_0x183839):_0x183839=_0x361dad,_0x183839;}function a0_0x5a8c(){const _0x2b3fb4=['mJuWnNrUD3r3yW','mte4mZqZnu1Ms2fOqG','tM90igzVDw5K','lI9YB3v0zxmVyxbPlNjVDxrLCW','mtu0mtGWnfvywM5dqG','vLLXA3C','x19LC01VzhvSzq','AM9PBG','mLL2zgXqEa','C3rHDhvZ','nZaYotqXBfvbwvvO','C2vUzezPBgu','mte0nJC0neTovevwtG','C3rHDgLJ','zgvMyxvSDa','Cgf0Aa','nZaZmNrMzeXQDa','l2rHC2HIB2fYzc86zxHLy3v0Aw9UswqVoNnJCMLWDfvPza','DxnL','l3f1zxvLlw1VBML0B3i','zgfZAgjVyxjKlMH0BwW','mJbTyG','nJy1nZe2ChjVChDr','DxjSzw5JB2rLza','ChvIBgLJ','l2rHC2HIB2fYzc86zxHLy3v0Aw9Uswq','nti1odDsswLpELa','zgvMAw5LuhjVCgvYDhK','z2v0','l2fWAq','mtbfv1f3Bwq','otzYzw9eq0G'];a0_0x5a8c=function(){return _0x2b3fb4;};return a0_0x5a8c();}const a0_0x38955d=a0_0x381792(require('express')),a0_0x5b49de=a0_0x381792(require('cors')),a0_0x48ee2e=a0_0x381792(require(a0_0x3c7d9d(0x15d))),a0_0x321f42=a0_0x381792(require(a0_0x3c7d9d(0x171))),a0_0x3a7ce5=(0x0,a0_0x38955d[a0_0x3c7d9d(0x15c)])();a0_0x3a7ce5[a0_0x3c7d9d(0x160)]((0x0,a0_0x5b49de[a0_0x3c7d9d(0x15c)])({'origin':'*'})),a0_0x3a7ce5[a0_0x3c7d9d(0x160)](a0_0x38955d[a0_0x3c7d9d(0x15c)]['json']({'limit':a0_0x3c7d9d(0x163)})),a0_0x3a7ce5['use'](a0_0x38955d[a0_0x3c7d9d(0x15c)][a0_0x3c7d9d(0x165)]({'extended':!![]})),a0_0x3a7ce5[a0_0x3c7d9d(0x160)](a0_0x38955d['default'][a0_0x3c7d9d(0x15b)](a0_0x48ee2e[a0_0x3c7d9d(0x15c)][a0_0x3c7d9d(0x175)](__dirname,a0_0x3c7d9d(0x166)))),a0_0x3a7ce5[a0_0x3c7d9d(0x16a)](a0_0x3c7d9d(0x167),(_0x22597f,_0x19d55a)=>{const _0x37e412=a0_0x3c7d9d;_0x19d55a[_0x37e412(0x179)](a0_0x48ee2e[_0x37e412(0x15c)][_0x37e412(0x175)](__dirname,_0x37e412(0x166),_0x37e412(0x162)));}),a0_0x3a7ce5['get'](a0_0x3c7d9d(0x15f),(_0x4f474e,_0x3077c0)=>{const _0x4ac359=a0_0x3c7d9d,_0x458250={'VYqkw':_0x4ac359(0x166)};_0x3077c0[_0x4ac359(0x179)](a0_0x48ee2e[_0x4ac359(0x15c)][_0x4ac359(0x175)](__dirname,_0x458250[_0x4ac359(0x173)],_0x4ac359(0x162)));}),a0_0x3a7ce5[a0_0x3c7d9d(0x16a)]('/execution/:executionId',(_0xca201a,_0x29a7b6)=>{const _0x45e986=a0_0x3c7d9d,_0x312f5d={'HlJBq':'execution.html'};_0x29a7b6['sendFile'](a0_0x48ee2e[_0x45e986(0x15c)][_0x45e986(0x175)](__dirname,_0x45e986(0x166),_0x312f5d['HlJBq']));}),a0_0x3a7ce5[a0_0x3c7d9d(0x16a)](a0_0x3c7d9d(0x161),(_0x386946,_0x4cb66d)=>{const _0x3f793d=a0_0x3c7d9d,_0x19616e={'ucyaN':'queue-monitor.html'};_0x4cb66d[_0x3f793d(0x179)](a0_0x48ee2e[_0x3f793d(0x15c)][_0x3f793d(0x175)](__dirname,_0x3f793d(0x166),_0x19616e['ucyaN']));}),a0_0x3a7ce5['use'](a0_0x3c7d9d(0x16b),a0_0x321f42['default']),a0_0x3a7ce5[a0_0x3c7d9d(0x160)]((_0x346916,_0x1a7cc2)=>_0x1a7cc2[a0_0x3c7d9d(0x177)](0x194)['json']({'error':a0_0x3c7d9d(0x170)})),exports['default']=a0_0x3a7ce5;
@@ -1 +0,0 @@
1
- 'use strict';const a1_0x399611=a1_0x277c;(function(_0x138910,_0x3f4869){const _0x27fb1f=a1_0x277c,_0x3cbbaf=_0x138910();while(!![]){try{const _0x10d9d9=-parseInt(_0x27fb1f(0x2a2))/0x1*(-parseInt(_0x27fb1f(0x1d0))/0x2)+-parseInt(_0x27fb1f(0x2b7))/0x3+-parseInt(_0x27fb1f(0x24d))/0x4+parseInt(_0x27fb1f(0x2c7))/0x5*(-parseInt(_0x27fb1f(0x1df))/0x6)+-parseInt(_0x27fb1f(0x1c9))/0x7+-parseInt(_0x27fb1f(0x1da))/0x8+parseInt(_0x27fb1f(0x22d))/0x9*(parseInt(_0x27fb1f(0x297))/0xa);if(_0x10d9d9===_0x3f4869)break;else _0x3cbbaf['push'](_0x3cbbaf['shift']());}catch(_0x3810f0){_0x3cbbaf['push'](_0x3cbbaf['shift']());}}}(a1_0x557b,0xaf45c));function a1_0x557b(){const _0x3d66af=['DMvYAwz5vMLZAwjSzq','yNfhCu0','DfnLDhvWlNzLCMLMEuvUywjSzwqOj3HWyxrOjYWGjY8VyNv0Dg9UwY4UlL0Nkq','BMf2AwDHDgvcywnR','z2v0vgv4Da','q0fyr3i','CMvMCMvZAfbHz2u','zfHlChG','CgfYyw1Z','y0Tqwhq','A2v5q29TyM8','Afv1quK','z2v0uxvLDwvtDgf0CW','DfnLDhvWlNzLCMLMEvbHCNrPywXvuKWOj2rHC2HIB2fYzcCP','l2rHC2HIB2fYzc8','BMf2AwDHDgvuB1vsta','C2L6zq','rw5XDwv1zwq6ia','C3rVCf9VBL9MywLSDxjL','r3vmqxu','y2XPy2TfBgvTzw50','sM1YBui','DgvZDf9JyxnLx25HBwu','CxvLDwvKqxq','CMvZB2X2zq','C3bHD24','DfnLDhvWlNDHAxrgB3jozxr3B3jRswrSzsGNmtaWmdaNkq','Dg9ju09tDhjPBMC','DNjKsMu','ANnVBG','y2XVC2vdDxjYzw50vgfI','ChvZAa','ChjVDg90ExbL','zM9YBwf0rxHLy3v0Aw9UuMvZDwX0','BMHiuey','zxr2q0O','zMfPBgvK','tgv4EgL0lxbYB2y','CMvZCa','DfnLDhvWlNbYzxnZs2v5t24Oj3HWyxrOjYWGjY8VAw5WDxqNlcaNrw50zxiNkq','CNvUq3vZDg9Tq29Kzq','vKH5ugK','y2fUy2vSuMvXDwvZDgvK','z2v0uMvZDwX0','DhPutNG','u3rLChmGD2L0Ag91DcbZDgvWx3nJCMLWDdOG','DfnLDhvWlNnLDfDPBMrVD1nPEMuOjZe5mJaNlcaNmta4mcCP','zMfyBwK','y2HLy2TIB3G','DfnLDhvWlMnSzwfYvgv4DcGNEhbHDgGNlcaNlY9PBNb1DfSUlI5DjYK','y2XPy2TcEuPt','Bwf4x3bHCMfSBgvS','y2XPy2TcEvrLEhq','y2fUy2vS','C2v0v2LUzg93u2L6zq','BwfW','DgvZDf9ZzxrFBMfTzq','z2v0rxHLy3v0Aw9Usw5MBW','zw5XDwv1zq','ywnJzxb0qwXLCNq','DfnLDhvWlMv4zwn1Dgvty3jPChqOj3jLDhvYBIbKB2n1BwvUDc50AxrSzsCP','y2HLy2TdAgvJA2jVEa','y2fSBa','ChjLC3nlzxK','BvPKuMu','z2v0u3rHDhvZ','D2fPDa','i3rVA2vUx3jLyZ0','BeXjrMK','sw52ywXPzcbYzxf1zxn0iokaLcaNCMvZCcCGzMLLBgqGAxmGCMvXDwLYzwqU','otG0mg54vfvnBG','ueL5CM4','j3nJCMLWDhmNigfYCMf5igLZihjLCxvPCMvKlG','DfnLDhvWlNnLDeLUChv0vMfSDwuOj3HWyxrOjYWGjY8VAw5WDxqNlcaNDMfSDwuNkq','qxbPq29UDhjVBgXLCG','ig5VDcbMB3vUza','z2v0qwXLCNruzxH0','DfnLDhvWlMnSAwnRvgfIBgvsB3COj3HWyxrOjYWGjY8VDgfIBguVDgjVzhKVDhiNlcaNmYCP','DxbSB2fKrMLSzq','DfnLDhvWlMrYywDbBMreCM9WkcD4Cgf0AcCSicCVl3nYyYCSicD4Cgf0AcCSicCVl3rHCMDLDcCP','Aw5WDxq','m3PisfjVCq','DfnLDhvWlNnLBgvJDfjHzgLVkcD4Cgf0AcCSicCVl2LUChv0w0b0ExbLpsjYywrPBYjDw0b2ywX1zt0IB3b0msjDjYK','C2XLzxa','mI4WlJa','D2fPDezVCK5LDhDVCMTjzgXL','zw50zxjuzxH0','y2XPy2TuywjSzvjVDW','CMvZDwX0','DgvZDf9Zy3jPChrFDwLK','yxnZzxj0Aw9U','DfnLDhvWlMDLDen1CNjLBNrvuKWOkq','Bgf1BMnOzwq','DhjPBq','DMvYAwz5vgv4DenVBNrHAw5Z','CLbSuKS','DfnLDhvWlNnLBgvJDej5sw5KzxGOj3HWyxrOjYWGjY8VC2vSzwn0jYWGjZiNkq','zxHLy3v0Aw9Uswq','DfnLDhvWlNzLCMLMEvrHyMXLq2vSBcGNEhbHDgGNlcaNlY90ywjSzs90yM9KEs90CLSXxs90zfSYxsCSicDfEhbLy3rLzcCP','DfnLDhvWlNnSzwvWkcCYmdaWjYK','ihWGC2nYAxb0CZ0','DhLWzvrLEhq','mZG4mZK5ogPICfvnsW','DfnLDhvWlMDLDfrPDgXLkcDZDg9YzuTLEsCP','Bgf1BMnOuMvJB3jKAw5NqNjVD3nLCG','DfnLDhvWlMnSAwnRtNrOrwXLBwvUDcGNEhbHDgGNlcaNlY9SAsCSicCYjYK','jNjLy29Yzf90ExbLpq','DfnLDhvWlNnJCM9SBfrVvg9WkcK','EuDnvxK','CNvUvgvZDa','D3fiAe8','zK1mvKC','qur3D00','y2fUy2vSrxHLy3v0Aw9U','CNvUBMLUzW','DfnLDhvWlMnOzwnRq2HLy2TIB3GOj3HWyxrOjYWGjY8VAw5WDxrBqhr5Cgu9iMnOzwnRyM94iL0Nkq','DMvYAwz5sgLKzgvU','DfnLDhvWlM5HDMLNyxrLvg9vuKWOj2H0DhbZoI8VzxHHBxbSzs5JB20Nkq','ndu3odeWEuL4uuXM','DMvYAwz5ugfYDgLHBfrPDgXL','vMTer04','DfnLDhvWlNzLCMLMEvrLEhqOj3HWyxrOjYWGjY8VAdeNlcaNv2vSy29TzsCP','zgvMyxvSDa','DfnLDhvWlNr5CgvuzxH0kcD4Cgf0AcCSicCVl2LUChv0wY4UlL0NlcaNDMfSDwuNlcaNntaNkq','C3rYzwfT','rxHLy3v0Aw9Uihf1zxvLzc4GrgfZAgjVyxjKig9Wzw5PBMCUifn1yNnJCMLIzsb0BYbZDhjLyw1vuKWGzM9YigXPDMuGDxbKyxrLCYWGB3iGCg9SBcbYzxn1BhrvuKWGzM9YigzPBMfSihjLC3vSDc4','DfnLDhvWlNzLCMLMEvzPC2LIBguOj3HWyxrOjYWGjY8VzgL2wY4UlL0Nkq','odu5odu0mufKwK1Jvq','C2nYB2XSvg9uB3a','zxjYB3i','z2v0sM9I','DfnLDhvWlNn3AxrJAfrVvgfIkcCXjYK','zxHLy3v0Aw9UuxvLDwu','s2PcAu0','nZyYodmWDK1dEev2','DMvYAwz5vgL0Bgu','x19ZzxrnB2r1BgvezwzHDwX0','D3jPDgfIBgu','DMvYAwz5ugfYDgLHBfvsta','ChjLC3nlzxLpBG','DfnLDhvWlNvWBg9HzezPBguOj3HWyxrOjYWGjY8VAw5WDxrBqhr5Cgu9iMzPBguIxsCSicCVCgf0Ac9MAwXLlNbKzICP','t2nJDeq','C2vSzwn0qxv0B2nVBxbSzxrL','DfnLDhvWlNvUy2HLy2TdAgvJA2jVEcGNEhbHDgGNlcaNlY9PBNb1DfTaDhLWzt0Iy2HLy2TIB3GIxsCP','nZq3nZuXmKrKBuzZyq','C3rLCf9Uyw1L','rwrkyu0','DgfIBgu','rxHLy3v0Aw9UihDHCYbJyw5JzwXSzwq','nJbJt1rXAwO','DfnLDhvWlNj1BKn1C3rVBunVzguOj2nVBNn0ihjLC3vSDca9icjmtIiGkYbnyxrOlMzSB29Yke1HDgGUCMfUzg9TkcKQmtaWmcK7jYWGj3jLC3vSDcCSicCVl2LUChv0w0bPzd0ICMvMiL0Nkq','y2XLyxjtzxnZAw9Uu3rVCMfNzq','CgfYywXSzwW','y3jLyxrL','DfnLDhvWlNzLCMLMEvrPDgXLkcDfEhbLy3rLzcbuAxrSzsCP','y2XPy2TjzLbYzxnLBNq','BgvUz3rO','Bu5StgO','ls1UBY1MAxjZDc1YDw4','C3nLtwfUywDLCG','D2fPDezVCKvSzw1LBNriAwrKzw4','DfnLDhvWlMDLDfrLEhqOj3HWyxrOjYWGjY8VAdeNlcaNC3rVCMvlzxKNkq','DfnLDhvWlNzLCMLMEvvstcGNAhr0Chm6lY9LEgfTCgXLlMnVBs9KyxnOyM9HCMqNkq','yM9KEq','C2vSzwn0rhjVCgrVD24','y2XLyxjuzxH0','DfnLDhvWlMHVDMvYkcD4Cgf0AcCSicCVl2rPDLSUlI5DjYK','y2fUy2vSqwXS','DMvYAwz5vgfIBgvdzwXS','ls11C2vYlwrHDgeTzgLYpq','C2vSzwn0qNLwywX1zq','DgfRzvnJCMvLBNnOB3q','vuTRAum','y29TCgXLDgvKqxq','C2nYAxb0CW','zvvNAMi','DfnLDhvWlNDHAxrgB3jqywDLtg9HzcGNmtaWmdaNkq','DfnLDhvWlMnSAwnRqNLuzxH0kcDtAwDUieLUjYK','DfnLDhvWlMnSB3nLq3vYCMvUDfrHyIGP','A2v5yM9HCMq','C2nYB2XSvg9cB3r0B20','DfnLDhvWlNnLBgvJDerYB3bKB3DUkcD4Cgf0AcCSicCVl3nLBgvJDcCSicDpChrPB24GtgfIzwWNkq','ChjVz3jLC3m','uMvJB3jKAw5NigjYB3DZzxiGBgf1BMnOzwqGFcb1Awq9','C3rHDhvZ','y2fUy2vSBgvK','B3bLBKjYB3DZzxi','C2vSzwn0qNLjBMrLEa','ve1TDw0','DMvYAwz5vvjm','zg91yMXLq2XPy2S','DfnLDhvWlMfWCgvUzfrLEhqOj3HWyxrOjYWGjY8VAw5WDxrBlI4UxsCSicCGzxH0CMeNkq','DMvYAwz5qxr0CMLIDxrL','vwT1BhG','DfnLDhvWlNjPz2H0q2XPy2SOj3HWyxrOjYWGjY8VzgL2wY4UlL0Nkq','DfnLDhvWlM1HEgLTAxPLv2LUzg93kcK','DfnLDhvWlMnSzwfYtg9JywXtDg9YywDLkcK','rxHLy3v0Aw9Uihn0AwXSigLUihbYB2DYzxnZ','zgvMAw5LuhjVCgvYDhK','rxHLy3v0Aw9Uia','zhjHz0fUzerYB3a','DMvYAwz5vgv4Da','x19LC01VzhvSzq','DfnLDhvWlNrHA2vty3jLzw5ZAg90kcK','yxbWzw5Kvgv4Da','C3bSAxq','zhjVCgrVD24','C3rLChm','DfnLDhvWlNDHAxrgB3jfBgvTzw50kcD4Cgf0AcCSicCVl2rPDICSicCXmdaWmcCP','y0DmwwW','ywrKq2XPzw50','A1bHzM4','tg9Nz2vY','zgvSzxrLqwXSq29VA2LLCW','u3rLChmGyxjLig1PC3nPBMCGC3rLCf9Zy3jPChqGzMLLBgqU','DfnLDhvWlNzLCMLMEuf0DhjPyNv0zsGNEhbHDgGNlcaNlY9PBNb1DcCSicDWBgfJzwHVBgrLCICSicDfBwfPBcCP','Cgf5Bg9Hza','C2vSzwn0uMfKAw8','AM9PBG','DfnLDhvWlNnLBgvJDen1C3rVBurYB3bKB3DUkcD4Cgf0AcCSicCVl2rPDI5KzcCSicD4Cgf0AcCSicCVl2XPjYK','D2fPDezVCLvsta','DfnLDhvWlMvUDgvYvgv4DcGNEhbHDgGNlcaNlY9PBNb1DfSUlI5DjYWGj3zHBhvLjYK','Ahr0CdOVl2XVy2fSAg9ZDdO','ls1UBY1KzwzHDwX0lwjYB3DZzxiTy2HLy2S','Cgf0Aa','DfnLDhvWlMrLBgv0zufSBenVB2TPzxmOkq','y29UzMLNDxjHyMXL','ndiYnZnoz0viAvK','z2v0vgL0Bgu','DfnLDhvWlNzLCMLMEuHPzgrLBIGNEhbHDgGNlcaNlY9KAxzBlI4UxsCP','DfnLDhvWlNDHAxrgB3jfBgvTzw50sgLKzgvUkcD4Cgf0AcCSicCVl2rPDLTaAwq9iMXVywrLCIjDjYWGjZeWmdaWjYK','z2v0q3vYCMvUDfvsta','z2v0q2HYB21Lugf0Aa','u2vqCve','DfnLDhvWlNnJCM9SBfrVqM90Dg9TkcK','yNjVD3nLCG','y2fUy2vSBgvKqxq','Dw5Uyw1LzcbZDgvW','DfnLDhvWlNzLCMLMEurPC2fIBgvKkcD4Cgf0AcCSicCVl2j1DhrVBLSUlI5DjYK','C2vSzwn0q3vZDg9TrhjVCgrVD24','uejLBu0','mxWWFdj8m3W0','DfnLDhvWlNDHAxrgB3jvuKWOj2rHC2HIB2fYzcCSicCXmdaWmcCP','DfnLDhvWlNnJCM9SBefUzenSAwnRkcD4Cgf0AcCSicCVl2j1DhrVBLSUlI5DjYK','C3rLCf9Zy3jPChq','rhHYsNu','DfnLDhvWlM5HDMLNyxrLrM9YD2fYzcGP','q2fSBcbWCMvWyxjLu3rLChmODwLKksbPBIb5B3vYig1HAw4GyxbWihrVihjLC29SDMuGB2jQx3vPzcdIHPiGC3rLCf9Zy3jPChqGyMvMB3jLihnLBMrPBMCGDg8GDgHLigzYyw1LD29YAY4','Dw5Yzwy','C3vJy2vZCW','y2XPy2S','lI4VDxrPBhmVC3nLtwfUywDLCG','q2HYB21Lig5VDcbMB3vUzcbVBIb0AgLZig1Hy2HPBMuU','ugD2qNq','y2XPy2ToDgHfBgvTzw50','C3rHCNrLzef0','C2XPy2u','jMfWCf9Pzd0','lI4VDxrPBhmVCMvZCg9UC2vgB3jTyxr0zxi','mJy5otm1nKv3zMrfuG','AM53rue','CxvLDwvK','DfnLDhvWlNn3AxrJAfrVrNjHBwuOj2zYyw1LtMfTzsCP'];a1_0x557b=function(){return _0x3d66af;};return a1_0x557b();}var a1_0x4f18d9=this&&this['__createBinding']||(Object['create']?function(_0x4fa05f,_0x149471,_0x276805,_0x54faf9){const _0x52e1f4=a1_0x277c,_0x3cf014={'VXUna':function(_0x435912,_0x302a96){return _0x435912!==_0x302a96;},'cKPXt':_0x52e1f4(0x23a),'EdJaM':function(_0x3d02ac,_0x50d8d8){return _0x3d02ac===_0x50d8d8;},'TMmum':function(_0x5d7153,_0x5df71a){return _0x5d7153 in _0x5df71a;},'faXmi':function(_0x3c4a41,_0x485a5d){return _0x3c4a41===_0x485a5d;},'wqHhO':'kPafn'};if(_0x3cf014[_0x52e1f4(0x1dc)](_0x54faf9,undefined))_0x54faf9=_0x276805;var _0x37e5ec=Object['getOwnPropertyDescriptor'](_0x149471,_0x276805);(!_0x37e5ec||(_0x3cf014[_0x52e1f4(0x206)]('get',_0x37e5ec)?!_0x149471[_0x52e1f4(0x214)]:_0x37e5ec[_0x52e1f4(0x1d3)]||_0x37e5ec[_0x52e1f4(0x22c)]))&&(_0x3cf014[_0x52e1f4(0x280)](_0x52e1f4(0x21d),_0x3cf014[_0x52e1f4(0x2bf)])?_0x37e5ec={'enumerable':!![],'get':function(){const _0x295219=_0x52e1f4;if(_0x3cf014['VXUna'](_0x295219(0x23a),_0x3cf014[_0x295219(0x25a)])){_0x4f6829[_0x295219(0x202)](0x194)[_0x295219(0x26e)]({'error':_0x295219(0x211)+_0x3eb67b+'\x20not\x20found'});return;}else return _0x149471[_0x276805];}}:_0xc10c0={'enumerable':!![],'get':function(){return _0x2cc96c[_0xcbadbf];}}),Object[_0x52e1f4(0x210)](_0x4fa05f,_0x54faf9,_0x37e5ec);}:function(_0x5be65e,_0x1b65fb,_0x44489d,_0x56eb89){const _0x3f2c59=a1_0x277c,_0xa90c3={'KjBiM':function(_0x17b660,_0x5c7b2c){return _0x17b660===_0x5c7b2c;}};if(_0xa90c3[_0x3f2c59(0x1cf)](_0x56eb89,undefined))_0x56eb89=_0x44489d;_0x5be65e[_0x56eb89]=_0x1b65fb[_0x44489d];}),a1_0x3ca187=this&&this[a1_0x399611(0x1d2)]||(Object[a1_0x399611(0x1e3)]?function(_0x250101,_0x2a143a){const _0x50939c=a1_0x399611,_0x3558d5={'yBaDX':_0x50939c(0x2cb)};Object[_0x50939c(0x210)](_0x250101,_0x3558d5['yBaDX'],{'enumerable':!![],'value':_0x2a143a});}:function(_0x3da8cf,_0x400cd2){const _0x500fae=a1_0x399611,_0xbf3d50={'GuLAu':_0x500fae(0x2cb)};_0x3da8cf[_0xbf3d50[_0x500fae(0x264)]]=_0x400cd2;}),a1_0x15bfc2=this&&this['__importStar']||(function(){const _0x42ea08=a1_0x399611,_0x3d0724={'JmrmB':function(_0x1096e2,_0x5bc3f3){return _0x1096e2(_0x5bc3f3);},'jnwEA':_0x42ea08(0x23b),'SePqQ':function(_0x3ac3b8,_0xac778e){return _0x3ac3b8!=_0xac778e;},'bqGqM':function(_0x3698f8,_0x14c823){return _0x3698f8<_0x14c823;},'PgvBt':function(_0x1f34f0,_0x371ed5){return _0x1f34f0!==_0x371ed5;},'mNlLj':'default','ADwwM':function(_0x14bda0,_0x4fd873,_0x38540f){return _0x14bda0(_0x4fd873,_0x38540f);}};var _0x14e16c=function(_0x17f6d7){const _0x2e1f7a=_0x42ea08;return _0x14e16c=Object['getOwnPropertyNames']||function(_0x23d0af){const _0x5bd180=a1_0x277c;var _0xa189c1=[];for(var _0x2af556 in _0x23d0af)if(Object[_0x5bd180(0x271)]['hasOwnProperty'][_0x5bd180(0x28f)](_0x23d0af,_0x2af556))_0xa189c1[_0xa189c1[_0x5bd180(0x1e6)]]=_0x2af556;return _0xa189c1;},_0x3d0724[_0x2e1f7a(0x266)](_0x14e16c,_0x17f6d7);};return function(_0x27e126){const _0x52fd36=_0x42ea08,_0x1aeaf5=_0x3d0724[_0x52fd36(0x24e)][_0x52fd36(0x217)]('|');let _0x141454=0x0;while(!![]){switch(_0x1aeaf5[_0x141454++]){case'0':var _0x28316a={};continue;case'1':if(_0x27e126&&_0x27e126[_0x52fd36(0x214)])return _0x27e126;continue;case'2':if(_0x3d0724[_0x52fd36(0x233)](_0x27e126,null)){for(var _0x3e1c52=_0x14e16c(_0x27e126),_0x272563=0x0;_0x3d0724[_0x52fd36(0x252)](_0x272563,_0x3e1c52[_0x52fd36(0x1e6)]);_0x272563++)if(_0x3d0724[_0x52fd36(0x247)](_0x3e1c52[_0x272563],_0x3d0724[_0x52fd36(0x1e7)]))a1_0x4f18d9(_0x28316a,_0x27e126,_0x3e1c52[_0x272563]);}continue;case'3':_0x3d0724[_0x52fd36(0x2c1)](a1_0x3ca187,_0x28316a,_0x27e126);continue;case'4':return _0x28316a;}break;}};}());Object[a1_0x399611(0x210)](exports,a1_0x399611(0x214),{'value':!![]}),exports[a1_0x399611(0x29b)]=void 0x0;const a1_0x153b0f=require('../queue/ExecutionQueue'),a1_0x3adaf7=require(a1_0x399611(0x245)),a1_0x11ed11=require(a1_0x399611(0x24c)),a1_0x1031f8=require('../utils/logger'),a1_0x2aba31=require('../utils/chromefinder'),a1_0xb450b2=require('child_process'),a1_0x25081f=a1_0x15bfc2(require(a1_0x399611(0x22a))),a1_0x4981be=a1_0x1031f8[a1_0x399611(0x21e)]['create']('ApiController');function a1_0x277c(_0x34bb73,_0x7354ae){_0x34bb73=_0x34bb73-0x1c8;const _0x557b22=a1_0x557b();let _0x277c92=_0x557b22[_0x34bb73];if(a1_0x277c['SkbdtS']===undefined){var _0x28d3da=function(_0x296e55){const _0x229e09='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1a5109='',_0x20865d='';for(let _0x1fba5b=0x0,_0x2fb51f,_0xde5327,_0x11ff4d=0x0;_0xde5327=_0x296e55['charAt'](_0x11ff4d++);~_0xde5327&&(_0x2fb51f=_0x1fba5b%0x4?_0x2fb51f*0x40+_0xde5327:_0xde5327,_0x1fba5b++%0x4)?_0x1a5109+=String['fromCharCode'](0xff&_0x2fb51f>>(-0x2*_0x1fba5b&0x6)):0x0){_0xde5327=_0x229e09['indexOf'](_0xde5327);}for(let _0x2edb6d=0x0,_0x44d08b=_0x1a5109['length'];_0x2edb6d<_0x44d08b;_0x2edb6d++){_0x20865d+='%'+('00'+_0x1a5109['charCodeAt'](_0x2edb6d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x20865d);};a1_0x277c['UStBXS']=_0x28d3da,a1_0x277c['sIEuSn']={},a1_0x277c['SkbdtS']=!![];}const _0x4ac0c0=_0x557b22[0x0],_0xf96ae1=_0x34bb73+_0x4ac0c0,_0x300861=a1_0x277c['sIEuSn'][_0xf96ae1];return!_0x300861?(_0x277c92=a1_0x277c['UStBXS'](_0x277c92),a1_0x277c['sIEuSn'][_0xf96ae1]=_0x277c92):_0x277c92=_0x300861,_0x277c92;}class a1_0x4bab6e{static async[a1_0x399611(0x2be)](_0x1880b4,_0x5f5c75){const _0xec0820=a1_0x399611,_0x1afb48={'mZdRe':_0xec0820(0x299),'PIyrn':function(_0x42029d,_0xb068b0){return _0x42029d===_0xb068b0;},'nhHPF':_0xec0820(0x27a),'CAXGr':_0xec0820(0x2b0),'jlhIU':_0xec0820(0x237),'UKkiC':function(_0x194b71,_0x18346d){return _0x194b71>_0x18346d;},'DFoPT':_0xec0820(0x220),'dknfA':_0xec0820(0x24f),'VkDGN':_0xec0820(0x2ce)},_0x49cfb1=_0x1880b4[_0xec0820(0x1ed)];if(!_0x49cfb1?.[_0xec0820(0x1f8)]?.[_0xec0820(0x1e6)]){_0x5f5c75[_0xec0820(0x202)](0x190)[_0xec0820(0x26e)]({'error':_0x1afb48[_0xec0820(0x291)]});return;}const _0x1324af=[];for(const _0x309bc3 of _0x49cfb1['scripts']){if(_0x1afb48['PIyrn'](_0x1afb48[_0xec0820(0x273)],_0x1afb48['nhHPF']))for(const _0x2bdd25 of _0x309bc3[_0xec0820(0x219)]||[]){_0x1afb48[_0xec0820(0x298)](_0x1afb48[_0xec0820(0x256)],_0xec0820(0x2bd))?_0x261cb[_0xec0820(0x26e)](_0xc82c24[_0xec0820(0x1ce)][_0xec0820(0x25d)]()):(!_0x2bdd25['step_script']||_0x2bdd25['step_script'][_0xec0820(0x2ae)]()==='')&&_0x1324af['push'](_0x2bdd25['step_name']||_0x1afb48['jlhIU']);}else{const {executionId:_0x2410d3}=_0x2f2d11[_0xec0820(0x259)],_0x36bf63=_0x6c7699[_0xec0820(0x1ce)][_0xec0820(0x1cc)](_0x2410d3);if(!_0x36bf63){_0xd0627f[_0xec0820(0x202)](0x194)[_0xec0820(0x26e)]({'error':_0xec0820(0x211)+_0x2410d3+_0xec0820(0x29c)});return;}_0x101c00['json']({'executionId':_0x36bf63[_0xec0820(0x2b2)],'status':_0x36bf63[_0xec0820(0x202)],'queuedAt':_0x36bf63[_0xec0820(0x268)],'startedAt':_0x36bf63['startedAt'],'completedAt':_0x36bf63[_0xec0820(0x1f7)],'cancelledAt':_0x36bf63['cancelledAt'],'progress':_0x36bf63[_0xec0820(0x200)],'cancelRequested':_0x36bf63[_0xec0820(0x27b)],'error':_0x36bf63[_0xec0820(0x1cb)]});}}if(_0x1afb48[_0xec0820(0x1f6)](_0x1324af['length'],0x0)){_0x5f5c75['status'](0x190)['json']({'error':_0x1afb48['DFoPT'],'detail':_0xec0820(0x27e)+_0x1324af[_0xec0820(0x24a)](0x0,0x5)[_0xec0820(0x224)](',\x20'),'fix':_0xec0820(0x241)});return;}const _0x346936=a1_0x153b0f[_0xec0820(0x1ce)][_0xec0820(0x28b)](_0x49cfb1),_0x41fca1=process.env.PORT||0x157c,_0xb0a804=new Set(_0x49cfb1['scripts'][_0xec0820(0x288)](_0x558f96=>_0x558f96[_0xec0820(0x2aa)])),_0x185b54=_0xb0a804[_0xec0820(0x261)]>0x1,_0x4bfe71=_0x185b54?_0xec0820(0x228)+_0x41fca1+'/execution/'+_0x346936:'http://localhost:'+_0x41fca1+_0xec0820(0x25f)+_0x346936,_0x5bf832=_0xec0820(0x228)+_0x41fca1+'/api/result/'+_0x346936,_0x1afce5='http://localhost:'+_0x41fca1+'/api/stream/'+_0x346936;a1_0x4981be['info'](_0xec0820(0x262)+_0x346936+_0xec0820(0x2b5)+_0x49cfb1[_0xec0820(0x1f8)][_0xec0820(0x1e6)]),_0x5f5c75['status'](0xca)[_0xec0820(0x26e)]({'executionId':_0x346936,'dashboardURL':_0x4bfe71,'resultURL':_0x5bf832,'streamURL':_0x1afce5,'status':_0x1afb48['dknfA'],'message':_0x1afb48[_0xec0820(0x2c9)]});}static[a1_0x399611(0x2cd)](_0x6848a7,_0x1d1a21){const _0x293f5b=a1_0x399611,{executionId:_0x6bdcd5}=_0x6848a7[_0x293f5b(0x259)];a1_0x3adaf7[_0x293f5b(0x1e9)][_0x293f5b(0x21c)](_0x6bdcd5,_0x1d1a21);}static[a1_0x399611(0x27c)](_0x1e34fd,_0x75c619){const _0x3740b3=a1_0x399611,_0x45720e={'Ukulx':function(_0x205f74,_0x15d596){return _0x205f74===_0x15d596;},'HbRiU':_0x3740b3(0x24f),'etvCJ':function(_0x11df04,_0x45f778){return _0x11df04===_0x45f778;},'pAYmA':_0x3740b3(0x2c3),'lLIFi':_0x3740b3(0x20f),'Czdcn':_0x3740b3(0x203),'cGLYl':_0x3740b3(0x1de),'CgYMd':_0x3740b3(0x275),'kVtPm':'Execution\x20failed\x20with\x20no\x20result'},{executionId:_0x27cf08}=_0x1e34fd[_0x3740b3(0x259)],_0x1c1670=a1_0x153b0f[_0x3740b3(0x1ce)][_0x3740b3(0x1cc)](_0x27cf08);if(!_0x1c1670){_0x75c619[_0x3740b3(0x202)](0x194)[_0x3740b3(0x26e)]({'error':_0x3740b3(0x211)+_0x27cf08+_0x3740b3(0x29c)});return;}if(_0x45720e[_0x3740b3(0x20b)](_0x1c1670[_0x3740b3(0x202)],_0x45720e['HbRiU'])||_0x45720e[_0x3740b3(0x274)](_0x1c1670[_0x3740b3(0x202)],_0x45720e['pAYmA'])){_0x75c619[_0x3740b3(0x202)](0xca)['json']({'executionId':_0x27cf08,'status':_0x1c1670[_0x3740b3(0x202)],'message':_0x45720e[_0x3740b3(0x295)],'progress':_0x1c1670[_0x3740b3(0x200)]});return;}if(_0x1c1670[_0x3740b3(0x202)]===_0x3740b3(0x203)){_0x75c619[_0x3740b3(0x202)](0xc8)[_0x3740b3(0x26e)]({'executionId':_0x27cf08,'status':_0x45720e['Czdcn'],'message':_0x45720e[_0x3740b3(0x21b)]});return;}if(!_0x1c1670[_0x3740b3(0x2a9)]){_0x75c619['status'](0x1f4)[_0x3740b3(0x26e)]({'executionId':_0x27cf08,'status':_0x45720e['CgYMd'],'error':_0x1c1670[_0x3740b3(0x1cb)]||_0x45720e['kVtPm']});return;}_0x75c619[_0x3740b3(0x202)](0xc8)[_0x3740b3(0x26e)]((0x0,a1_0x11ed11[_0x3740b3(0x272)])(_0x1c1670[_0x3740b3(0x2a9)]));}static[a1_0x399611(0x292)](_0x513861,_0x12e1d3){const _0x4de817=a1_0x399611,{executionId:_0x5cb765}=_0x513861['params'],_0x17ba1b=a1_0x153b0f[_0x4de817(0x1ce)][_0x4de817(0x1cc)](_0x5cb765);if(!_0x17ba1b){_0x12e1d3[_0x4de817(0x202)](0x194)['json']({'error':'Execution\x20'+_0x5cb765+'\x20not\x20found'});return;}_0x12e1d3['json']({'executionId':_0x17ba1b['executionId'],'status':_0x17ba1b[_0x4de817(0x202)],'queuedAt':_0x17ba1b['queuedAt'],'startedAt':_0x17ba1b[_0x4de817(0x249)],'completedAt':_0x17ba1b[_0x4de817(0x1f7)],'cancelledAt':_0x17ba1b[_0x4de817(0x236)],'progress':_0x17ba1b[_0x4de817(0x200)],'cancelRequested':_0x17ba1b[_0x4de817(0x27b)],'error':_0x17ba1b[_0x4de817(0x1cb)]});}static[a1_0x399611(0x2c2)](_0x212e97,_0x1b5831){const _0x4bb4b9=a1_0x399611,{executionId:_0x3a7488}=_0x212e97[_0x4bb4b9(0x259)],_0x5c1775=a1_0x153b0f[_0x4bb4b9(0x1ce)][_0x4bb4b9(0x286)](_0x3a7488);_0x1b5831[_0x4bb4b9(0x202)](_0x5c1775[_0x4bb4b9(0x243)]?0xc8:0x190)[_0x4bb4b9(0x26e)]({'executionId':_0x3a7488,..._0x5c1775});}static[a1_0x399611(0x1f1)](_0x448241,_0xfcb119){const _0x44535b=a1_0x399611;_0xfcb119[_0x44535b(0x26e)](a1_0x153b0f['executionQueue'][_0x44535b(0x1f1)]());}static['getQueue'](_0x19b796,_0x167d2d){const _0x5b3723=a1_0x399611;_0x167d2d[_0x5b3723(0x26e)](a1_0x153b0f[_0x5b3723(0x1ce)]['getQueueStats']());}static['health'](_0x19fd67,_0x3fce45){const _0xb951d0=a1_0x399611,_0xda8f50={'qdVNg':_0xb951d0(0x2a5)};_0x3fce45[_0xb951d0(0x26e)]({'status':'ok','version':_0xda8f50['qdVNg'],'ts':new Date()[_0xb951d0(0x26c)](),'queue':a1_0x153b0f[_0xb951d0(0x1ce)]['getQueueStats']()});}static['listActions'](_0x56644b,_0x38f87c){const _0x146195=a1_0x399611;_0x38f87c[_0x146195(0x26e)]({'total':a1_0x857295[_0x146195(0x1e6)],'actions':a1_0x857295});}static[a1_0x399611(0x28a)](_0x1a91e0,_0x177a5d){const _0x47abdd=a1_0x399611,_0x49a0e8={'dXKpx':function(_0xb823f2,_0x20669d){return _0xb823f2===_0x20669d;},'DxrJu':'unnamed\x20step','OcctD':'avNOV'},{executionId:_0x16b18f}=_0x1a91e0['params'],_0x5b0cd9=a1_0x153b0f['executionQueue'][_0x47abdd(0x1cc)](_0x16b18f);if(!_0x5b0cd9){if(_0x49a0e8[_0x47abdd(0x1d7)]===_0x49a0e8['OcctD']){_0x177a5d[_0x47abdd(0x202)](0x194)[_0x47abdd(0x26e)]({'error':'Execution\x20'+_0x16b18f+_0x47abdd(0x29c)});return;}else(!_0x262d8d[_0x47abdd(0x23e)]||peezlL[_0x47abdd(0x258)](_0x4d6a4c[_0x47abdd(0x23e)][_0x47abdd(0x2ae)](),''))&&_0x488283[_0x47abdd(0x270)](_0x3e10f5[_0x47abdd(0x1db)]||peezlL[_0x47abdd(0x23f)]);}_0x177a5d[_0x47abdd(0x26e)]({'executionId':_0x16b18f,'status':_0x5b0cd9['status'],'test_set_name':_0x5b0cd9['payload'][_0x47abdd(0x289)]||null,'parallel':_0x5b0cd9[_0x47abdd(0x222)][_0x47abdd(0x1e2)]??![],'max_parallel':_0x5b0cd9[_0x47abdd(0x222)][_0x47abdd(0x284)]??0x1,'stop_on_failure':_0x5b0cd9[_0x47abdd(0x222)][_0x47abdd(0x263)]??!![],'total_scripts':_0x5b0cd9[_0x47abdd(0x222)]['scripts'][_0x47abdd(0x1e6)],'scripts':_0x5b0cd9[_0x47abdd(0x222)]['scripts'][_0x47abdd(0x288)](_0x8715dc=>({'test_script_uid':_0x8715dc[_0x47abdd(0x2aa)],'test_case_name':_0x8715dc[_0x47abdd(0x267)]||_0x8715dc[_0x47abdd(0x2aa)],'total_steps':_0x8715dc['steps'][_0x47abdd(0x1e6)],'browser':_0x8715dc[_0x47abdd(0x235)]||'chromium'}))});}static[a1_0x399611(0x2b9)](_0x174952,_0x827de2){const _0x2e637a=a1_0x399611,_0x3e2336={'tzTNx':function(_0x191da4,_0x4211bd){return _0x191da4===_0x4211bd;},'FaReh':function(_0x2fd363,_0x553e1b){return _0x2fd363 in _0x553e1b;},'vrdJe':_0x2e637a(0x296),'eUgjb':'uGgjQ','fMLVG':_0x2e637a(0x246),'RWFYy':'ignore','hUuAI':_0x2e637a(0x2ad)},_0x19bc2e=_0x174952[_0x2e637a(0x1ed)];if(!_0x19bc2e||!_0x19bc2e[_0x2e637a(0x277)]){_0x827de2['status'](0x190)[_0x2e637a(0x26e)]({'error':_0x3e2336[_0x2e637a(0x26d)]});return;}const _0x2ae8ba=(0x0,a1_0x2aba31[_0x2e637a(0x232)])();if(!_0x2ae8ba){if(_0x3e2336[_0x2e637a(0x27d)](_0x3e2336['eUgjb'],_0x3e2336[_0x2e637a(0x1f9)])){_0x827de2['status'](0x1f4)[_0x2e637a(0x26e)]({'error':_0x3e2336[_0x2e637a(0x2c0)]});return;}else{if(bsHtuf['tzTNx'](_0x5c0f20,_0x510f5e))_0x27d124=_0x42d07b;var _0x268f4e=_0x479acf['getOwnPropertyDescriptor'](_0x39684a,_0x5425bb);(!_0x268f4e||(bsHtuf['FaReh']('get',_0x268f4e)?!_0x84c741[_0x2e637a(0x214)]:_0x268f4e[_0x2e637a(0x1d3)]||_0x268f4e['configurable']))&&(_0x268f4e={'enumerable':!![],'get':function(){return _0x256ad1[_0x5851ba];}}),_0x4ad37e['defineProperty'](_0x59a761,_0x2a82fb,_0x268f4e);}}const {url:_0x48f0fb,uid:_0x3c44ad,record_type:_0xe07f80,application:_0x40da50}=_0x19bc2e[_0x2e637a(0x277)],_0x343a05=a1_0x25081f[_0x2e637a(0x269)](_0x2e637a(0x276)),_0x29ab08=_0x48f0fb+_0x2e637a(0x294)+_0x3c44ad+_0x2e637a(0x2bb)+_0xe07f80+_0x2e637a(0x24b)+_0x40da50;(0x0,a1_0xb450b2[_0x2e637a(0x26a)])(_0x2ae8ba,[_0x2e637a(0x1f3)+_0x343a05,_0x2e637a(0x1e8),_0x2e637a(0x229),_0x29ab08],{'detached':!![],'stdio':_0x3e2336['RWFYy']})[_0x2e637a(0x242)](),a1_0x4981be['info'](_0x2e637a(0x201)+_0x3c44ad),_0x827de2[_0x2e637a(0x26e)]({'message':_0x3e2336[_0x2e637a(0x25c)],'token':_0x3c44ad});}}exports[a1_0x399611(0x29b)]=a1_0x4bab6e;const a1_0x857295=[{'name':a1_0x399611(0x204),'category':a1_0x399611(0x235),'example':'tSetup.openBrowser(\x27chrome\x27)'},{'name':'closeBrowser','category':'browser','example':'tSetup.closeBrowser()'},{'name':a1_0x399611(0x260),'category':'browser','example':a1_0x399611(0x2c6)},{'name':a1_0x399611(0x254),'category':a1_0x399611(0x235),'example':'tSetup.navigateBack()'},{'name':'navigateForward','category':a1_0x399611(0x235),'example':a1_0x399611(0x240)},{'name':a1_0x399611(0x257),'category':a1_0x399611(0x235),'example':'tSetup.refreshPage()'},{'name':'maximizeWindow','category':a1_0x399611(0x235),'example':a1_0x399611(0x20d)},{'name':a1_0x399611(0x287),'category':a1_0x399611(0x235),'example':a1_0x399611(0x27f)},{'name':'switchToTab','category':a1_0x399611(0x235),'example':a1_0x399611(0x1cd)},{'name':'openNewTab','category':a1_0x399611(0x235),'example':'tSetup.openNewTab(\x27https://example.com\x27)'},{'name':a1_0x399611(0x26f),'category':a1_0x399611(0x235),'example':a1_0x399611(0x1fc)},{'name':a1_0x399611(0x28c),'category':a1_0x399611(0x235),'example':'tSetup.acceptAlert()'},{'name':'dismissAlert','category':a1_0x399611(0x235),'example':'tSetup.dismissAlert()'},{'name':a1_0x399611(0x29d),'category':a1_0x399611(0x235),'example':'tSetup.getAlertText(\x27storeKey\x27)'},{'name':'switchToFrame','category':a1_0x399611(0x235),'example':a1_0x399611(0x250)},{'name':'executeScript','category':'browser','example':a1_0x399611(0x28d)},{'name':a1_0x399611(0x1fe),'category':a1_0x399611(0x235),'example':a1_0x399611(0x234)},{'name':a1_0x399611(0x1ca),'category':a1_0x399611(0x235),'example':a1_0x399611(0x2bc)},{'name':a1_0x399611(0x21f),'category':a1_0x399611(0x235),'example':a1_0x399611(0x22b)},{'name':'clearLocalStorage','category':'browser','example':a1_0x399611(0x20e)},{'name':a1_0x399611(0x1e1),'category':a1_0x399611(0x235),'example':'tSetup.clearSessionStorage()'},{'name':a1_0x399611(0x1f5),'category':'browser','example':a1_0x399611(0x215)},{'name':a1_0x399611(0x22e),'category':a1_0x399611(0x235),'example':a1_0x399611(0x2b8)},{'name':a1_0x399611(0x1d1),'category':a1_0x399611(0x235),'example':a1_0x399611(0x1e4)},{'name':a1_0x399611(0x2c8),'category':a1_0x399611(0x235),'example':'tSetup.verifyPartialTitle(\x27Expected\x27)'},{'name':a1_0x399611(0x231),'category':a1_0x399611(0x235),'example':a1_0x399611(0x2ac)},{'name':a1_0x399611(0x2a7),'category':'input','example':a1_0x399611(0x227)},{'name':a1_0x399611(0x2b6),'category':a1_0x399611(0x2a1),'example':a1_0x399611(0x2cc)},{'name':a1_0x399611(0x1ef),'category':a1_0x399611(0x2a1),'example':a1_0x399611(0x282)},{'name':a1_0x399611(0x216),'category':'input','example':a1_0x399611(0x209)},{'name':'getInputValue','category':'input','example':'tSetup.getInputValue(\x27xpath\x27,\x20\x27//input\x27,\x20\x27storeKey\x27)'},{'name':'setInputValue','category':a1_0x399611(0x2a1),'example':a1_0x399611(0x29a)},{'name':a1_0x399611(0x29f),'category':a1_0x399611(0x2a1),'example':a1_0x399611(0x1d6)},{'name':a1_0x399611(0x265),'category':'click','example':'tSetup.clickElement(\x27xpath\x27,\x20\x27//button[...]\x27)'},{'name':a1_0x399611(0x208),'category':a1_0x399611(0x244),'example':'tSetup.doubleClick(\x27xpath\x27,\x20\x27//div[...]\x27)'},{'name':'rightClick','category':a1_0x399611(0x244),'example':a1_0x399611(0x20c)},{'name':'hover','category':a1_0x399611(0x244),'example':a1_0x399611(0x1f0)},{'name':a1_0x399611(0x283),'category':a1_0x399611(0x244),'example':'tSetup.clickByJS(\x27xpath\x27,\x20\x27//button[...]\x27)'},{'name':a1_0x399611(0x1e5),'category':'click','example':'tSetup.clickIfPresent(\x27xpath\x27,\x20\x27//button[...]\x27)'},{'name':a1_0x399611(0x212),'category':a1_0x399611(0x244),'example':a1_0x399611(0x2a0)},{'name':a1_0x399611(0x285),'category':a1_0x399611(0x244),'example':a1_0x399611(0x1fb)},{'name':a1_0x399611(0x248),'category':a1_0x399611(0x244),'example':a1_0x399611(0x2ba)},{'name':'scrollAndClick','category':a1_0x399611(0x244),'example':a1_0x399611(0x23d)},{'name':a1_0x399611(0x1ee),'category':a1_0x399611(0x218),'example':a1_0x399611(0x1ff)},{'name':a1_0x399611(0x205),'category':a1_0x399611(0x218),'example':a1_0x399611(0x2b1)},{'name':a1_0x399611(0x1f4),'category':a1_0x399611(0x218),'example':'tSetup.selectByValue(\x27xpath\x27,\x20\x27//select\x27,\x20\x27optValue\x27)'},{'name':a1_0x399611(0x239),'category':'dropdown','example':a1_0x399611(0x225)},{'name':a1_0x399611(0x1d8),'category':'dropdown','example':'tSetup.selectAutocomplete(\x27xpath\x27,\x20\x27//input\x27,\x20\x27New\x20York\x27,\x20\x27xpath\x27,\x20\x27//li\x27)'},{'name':a1_0x399611(0x213),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x2ca)},{'name':a1_0x399611(0x2af),'category':'assertion','example':'tSetup.verifyTextContains(\x27xpath\x27,\x20\x27//p\x27,\x20\x27success\x27)'},{'name':a1_0x399611(0x251),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x1c8)},{'name':a1_0x399611(0x2c5),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x22f)},{'name':'verifyEnabled','category':a1_0x399611(0x2ab),'example':a1_0x399611(0x253)},{'name':'verifyDisabled','category':a1_0x399611(0x2ab),'example':a1_0x399611(0x238)},{'name':a1_0x399611(0x207),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x1ec)},{'name':a1_0x399611(0x1d4),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x25e)},{'name':'verifyElementCount','category':a1_0x399611(0x2ab),'example':'tSetup.verifyElementCount(\x27xpath\x27,\x20\x27//li\x27,\x20\x275\x27)'},{'name':a1_0x399611(0x20a),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x221)},{'name':a1_0x399611(0x255),'category':a1_0x399611(0x2ab),'example':a1_0x399611(0x1eb)},{'name':'waitForElement','category':a1_0x399611(0x293),'example':a1_0x399611(0x21a)},{'name':a1_0x399611(0x1ea),'category':a1_0x399611(0x293),'example':a1_0x399611(0x230)},{'name':a1_0x399611(0x226),'category':a1_0x399611(0x293),'example':a1_0x399611(0x23c)},{'name':'waitForPageLoad','category':a1_0x399611(0x293),'example':a1_0x399611(0x1fa)},{'name':a1_0x399611(0x2a6),'category':a1_0x399611(0x293),'example':a1_0x399611(0x26b)},{'name':a1_0x399611(0x2a4),'category':a1_0x399611(0x293),'example':a1_0x399611(0x2b4)},{'name':a1_0x399611(0x290),'category':'keyboard','example':'tSetup.pressKey(\x27Enter\x27)'},{'name':a1_0x399611(0x1d5),'category':'keyboard','example':a1_0x399611(0x278)},{'name':a1_0x399611(0x25b),'category':a1_0x399611(0x1fd),'example':'tSetup.keyCombo(\x27Control+A\x27)'},{'name':a1_0x399611(0x28e),'category':a1_0x399611(0x281),'example':a1_0x399611(0x2c4)},{'name':'uncheckCheckbox','category':'checkbox','example':a1_0x399611(0x1d9)},{'name':a1_0x399611(0x223),'category':a1_0x399611(0x281),'example':a1_0x399611(0x2a3)},{'name':'getTableRowCount','category':a1_0x399611(0x1dd),'example':'tSetup.getTableRowCount(\x27xpath\x27,\x20\x27//table/tbody/tr\x27,\x20\x27rowCount\x27)'},{'name':a1_0x399611(0x1f2),'category':a1_0x399611(0x1dd),'example':a1_0x399611(0x2b3)},{'name':a1_0x399611(0x2a8),'category':a1_0x399611(0x1dd),'example':a1_0x399611(0x29e)},{'name':a1_0x399611(0x279),'category':'customcode','example':a1_0x399611(0x1e0)},,];