@unotest/web 0.9.0 → 0.9.1
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/.claude/skills/write-e2e-test/SKILL.md +21 -6
- package/CHANGELOG.md +35 -0
- package/dist/config/schema.d.ts +81 -10
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +18 -104
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.d.ts +1 -13
- package/dist/runner/cli.js +1 -1
- package/dist/runner/init/chrome-probe.js +1 -1
- package/dist/runner/init.js +1 -1
- package/dist/runner/install-chromium.js +1 -1
- package/dist/runner/prepare-fix.js +1 -1
- package/dist/runner/scaffold-workspace.js +1 -1
- package/dist/runner/serve-fixture.js +1 -1
- package/dist/runner/web-runner-adapter.js +1 -1
- package/examples/fixtures/break-fix-app/serve.mjs +6 -2
- package/package.json +5 -4
- package/src/mcp/prompts/agent-test-author.md +16 -4
|
@@ -391,21 +391,32 @@ function test_dashboard_loads_with_widgets() {
|
|
|
391
391
|
## Failure recovery
|
|
392
392
|
|
|
393
393
|
`paused-failure` from `run_test` keeps the browser context alive and
|
|
394
|
-
the runtime addressable by `runtimeId`.
|
|
394
|
+
the runtime addressable by `runtimeId`. `run_test` also auto-attaches
|
|
395
|
+
you to that live page, so `get_page_snapshot` / `find_element` /
|
|
396
|
+
`check_locator` already target the page being debugged — no manual
|
|
397
|
+
`attach_debug_session`. Use the diagnostic tools:
|
|
395
398
|
|
|
396
399
|
1. **`inspect_runtime { runtimeId }`** — `lastFailure` (error + line/col
|
|
397
400
|
+ AST node) + `vars` (every assignment up to the pause). Tells you
|
|
398
401
|
what was observed vs expected and the state the scenario built.
|
|
399
|
-
2. **`
|
|
402
|
+
2. **`check_locator { locator }`** — paste the EXACT locator from the
|
|
403
|
+
failing line (e.g. `getByRole('row').filter({hasText:'Uma Quinn'}).first()`).
|
|
404
|
+
Reports, against the live paused page, how many elements it matches
|
|
405
|
+
and — when the chain ends in `.first()`/`.last()`/`.nth()` —
|
|
406
|
+
`pinned.ofCount`, the count that index op silently collapsed (a
|
|
407
|
+
`.first()` hiding 16 identical rows is the classic break), plus
|
|
408
|
+
per-match role/name/text/testId. Verify a selector at runtime
|
|
409
|
+
instead of guessing or re-running the whole test.
|
|
410
|
+
3. **`get_page_snapshot { }`** — current page outline. Look for whether
|
|
400
411
|
the locator is reachable, or whether the page navigated somewhere
|
|
401
412
|
unexpected.
|
|
402
|
-
|
|
413
|
+
4. **`list_failures` + `get_failure_console` / `get_failure_trace` /
|
|
403
414
|
`get_failure_network`** — failure bundle. `get_failure_console` is
|
|
404
415
|
often the giveaway when the failure is really a runtime error in
|
|
405
416
|
the app.
|
|
406
|
-
|
|
417
|
+
5. **`agent_fix { runId }`** — composes a structured fix-context
|
|
407
418
|
prompt. **It does NOT patch your code** (D-25); you apply edits.
|
|
408
|
-
|
|
419
|
+
6. **`open_viewer { }`** — boots the localhost viewer for the project
|
|
409
420
|
if it isn't running, returns its URL. The viewer renders the block-
|
|
410
421
|
tree of the failing scenario with live status, plus a log-tail of
|
|
411
422
|
the child runner's stdio. Useful when you want a human (or yourself)
|
|
@@ -462,6 +473,10 @@ no recording.
|
|
|
462
473
|
Every locator must resolve to exactly one element. When you see
|
|
463
474
|
`getByRole('row', {name: 'X'}) resolved to 301 elements`:
|
|
464
475
|
|
|
476
|
+
- **`check_locator { locator }`** (when a browser is live) — paste the
|
|
477
|
+
chain and it tells you the exact `count` and, for a `.first()`/`.nth()`
|
|
478
|
+
chain, `pinned.ofCount` (how many it collapsed). The fastest way to
|
|
479
|
+
confirm a locator is over-matching and by how much, without re-running.
|
|
465
480
|
- Narrow the `name` to a uniquely-identifying substring. `name`
|
|
466
481
|
substring-matches: pick wording that hits only one row (a header's
|
|
467
482
|
full label `"Pending (300)"` or a row-specific ID like `"573"`).
|
|
@@ -469,7 +484,7 @@ Every locator must resolve to exactly one element. When you see
|
|
|
469
484
|
to skip manual disambiguation — scoped search returns the single ref
|
|
470
485
|
directly.
|
|
471
486
|
- Only use `.first()` / `.nth(N)` when the position itself is the
|
|
472
|
-
semantic anchor.
|
|
487
|
+
semantic anchor — and `check_locator` shows `pinned.ofCount === 1`.
|
|
473
488
|
|
|
474
489
|
## Anti-patterns
|
|
475
490
|
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,41 @@ All notable changes to `@unotest/web` are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.9.1] - 2026-06-14
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`check_locator` MCP tool + runtime locator probe.** Evaluate a DSL locator
|
|
13
|
+
string against the live page and see what it actually matches — count, the N a
|
|
14
|
+
trailing `.first()`/`.last()`/`.nth()` silently collapsed, and where each match
|
|
15
|
+
points — instead of guessing or re-running the whole test. Same parser/core
|
|
16
|
+
(`probe-locator`) the runner uses, so a result here equals the runtime locator.
|
|
17
|
+
- **Interactive debug + auto-attach.** `run_test --debug` auto-attaches the MCP
|
|
18
|
+
session to the paused run's shared browser, so `get_page_snapshot` /
|
|
19
|
+
`find_element` / `check_locator` hit the page being debugged. Collaborative
|
|
20
|
+
`probe` command (the human's `check_locator` twin) is handled by the runner.
|
|
21
|
+
- **Agent tool calls in the viewer's System console.** A new `StepsToolEventSink`
|
|
22
|
+
publishes each MCP tool call + result (secret-redacted, capped) into the
|
|
23
|
+
attached run's `steps.jsonl`, so the human sees what the agent is doing.
|
|
24
|
+
- **Run breakpoints published to `runtime.json`** (`.debugger.json` seed +
|
|
25
|
+
`--breakpoints` override), so the viewer paints gutter dots for non-persisted
|
|
26
|
+
breakpoints.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **Shared runner machinery extracted to `@unotest/core`** (run-artifact /
|
|
31
|
+
run-manifest / runtime-state writers, debug-commands watcher, env reader) and
|
|
32
|
+
consumed via thin web bindings.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- **`abort` now actually terminates a paused run.** A `{cmd:abort}` on a run
|
|
37
|
+
paused mid-statement could not unwind the suspended executor, leaving the
|
|
38
|
+
process + headed browser alive with a fresh heartbeat (the viewer showed a
|
|
39
|
+
ghost "active" session). Abort now force-terminates the runner the same clean
|
|
40
|
+
way Ctrl-C / SIGTERM does, emitting a terminal `run:finished` and closing the
|
|
41
|
+
browser.
|
|
42
|
+
|
|
8
43
|
## [0.9.0] - 2026-06-11
|
|
9
44
|
|
|
10
45
|
### Added
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -90,19 +90,19 @@ declare const FailureBundleConfigSchema: z.ZodObject<{
|
|
|
90
90
|
type FailureBundleConfig = z.infer<typeof FailureBundleConfigSchema>;
|
|
91
91
|
declare const DialogPolicySchema: z.ZodEnum<["accept", "dismiss", "manual"]>;
|
|
92
92
|
type DialogPolicy = z.infer<typeof DialogPolicySchema>;
|
|
93
|
-
declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:
|
|
93
|
+
declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>;
|
|
94
94
|
type LinterRuleId = z.infer<typeof LinterRuleIdSchema>;
|
|
95
95
|
declare const LinterSeveritySchema: z.ZodEnum<["off", "warn", "error"]>;
|
|
96
96
|
type LinterSeverity = z.infer<typeof LinterSeveritySchema>;
|
|
97
97
|
declare const LinterConfigSchema: z.ZodObject<{
|
|
98
98
|
enabled: z.ZodBoolean;
|
|
99
|
-
rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:
|
|
99
|
+
rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
|
|
100
100
|
}, "strip", z.ZodTypeAny, {
|
|
101
101
|
enabled: boolean;
|
|
102
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
102
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
103
103
|
}, {
|
|
104
104
|
enabled: boolean;
|
|
105
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
105
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
106
106
|
}>;
|
|
107
107
|
type LinterConfig = z.infer<typeof LinterConfigSchema>;
|
|
108
108
|
declare const McpConfigSchema: z.ZodObject<{
|
|
@@ -133,8 +133,67 @@ declare const SandboxConfigSchema: z.ZodObject<{
|
|
|
133
133
|
apiBaseUrl?: string | undefined;
|
|
134
134
|
}>;
|
|
135
135
|
type SandboxConfig = z.infer<typeof SandboxConfigSchema>;
|
|
136
|
+
declare const WebServerConfigSchema: z.ZodObject<{
|
|
137
|
+
/** Shell command that starts the app under test (`npm run dev`,
|
|
138
|
+
* `python manage.py runserver`, …). Runs in the user's shell from the
|
|
139
|
+
* project root. */
|
|
140
|
+
command: z.ZodString;
|
|
141
|
+
/** URL probed for readiness — any HTTP response counts as up. Usually
|
|
142
|
+
* equals `baseUrl`; declared explicitly because a dev server may
|
|
143
|
+
* answer on a different path/port than the tests navigate to. */
|
|
144
|
+
url: z.ZodString;
|
|
145
|
+
/** When the URL is already up, reuse that server instead of spawning a
|
|
146
|
+
* second one (default true — covers a dev server the user or the
|
|
147
|
+
* viewer already started). `false` makes an occupied URL an error,
|
|
148
|
+
* Playwright-style for CI strictness. */
|
|
149
|
+
reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
|
|
150
|
+
/** How long to wait for the URL to come up after spawning. */
|
|
151
|
+
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
152
|
+
}, "strip", z.ZodTypeAny, {
|
|
153
|
+
command: string;
|
|
154
|
+
url: string;
|
|
155
|
+
reuseExistingServer: boolean;
|
|
156
|
+
timeoutMs: number;
|
|
157
|
+
}, {
|
|
158
|
+
command: string;
|
|
159
|
+
url: string;
|
|
160
|
+
reuseExistingServer?: boolean | undefined;
|
|
161
|
+
timeoutMs?: number | undefined;
|
|
162
|
+
}>;
|
|
163
|
+
type WebServerConfig = z.infer<typeof WebServerConfigSchema>;
|
|
136
164
|
declare const UnotestConfigSchema: z.ZodObject<{
|
|
137
165
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
166
|
+
/** Dev-server lifecycle for the app under test (M-12). Unset → the app
|
|
167
|
+
* is expected to be running already (current behaviour). When set, the
|
|
168
|
+
* CLI ensures it per run; `npx @unotest/web app-server` / the viewer
|
|
169
|
+
* hold a long-lived instance and runs then reuse it. */
|
|
170
|
+
webServer: z.ZodOptional<z.ZodObject<{
|
|
171
|
+
/** Shell command that starts the app under test (`npm run dev`,
|
|
172
|
+
* `python manage.py runserver`, …). Runs in the user's shell from the
|
|
173
|
+
* project root. */
|
|
174
|
+
command: z.ZodString;
|
|
175
|
+
/** URL probed for readiness — any HTTP response counts as up. Usually
|
|
176
|
+
* equals `baseUrl`; declared explicitly because a dev server may
|
|
177
|
+
* answer on a different path/port than the tests navigate to. */
|
|
178
|
+
url: z.ZodString;
|
|
179
|
+
/** When the URL is already up, reuse that server instead of spawning a
|
|
180
|
+
* second one (default true — covers a dev server the user or the
|
|
181
|
+
* viewer already started). `false` makes an occupied URL an error,
|
|
182
|
+
* Playwright-style for CI strictness. */
|
|
183
|
+
reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
|
|
184
|
+
/** How long to wait for the URL to come up after spawning. */
|
|
185
|
+
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
186
|
+
}, "strip", z.ZodTypeAny, {
|
|
187
|
+
command: string;
|
|
188
|
+
url: string;
|
|
189
|
+
reuseExistingServer: boolean;
|
|
190
|
+
timeoutMs: number;
|
|
191
|
+
}, {
|
|
192
|
+
command: string;
|
|
193
|
+
url: string;
|
|
194
|
+
reuseExistingServer?: boolean | undefined;
|
|
195
|
+
timeoutMs?: number | undefined;
|
|
196
|
+
}>>;
|
|
138
197
|
browsers: z.ZodArray<z.ZodEnum<["chromium", "firefox", "webkit"]>, "many">;
|
|
139
198
|
channel: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"chrome">, z.ZodLiteral<"msedge">, z.ZodLiteral<"chrome-beta">, z.ZodNull]>>;
|
|
140
199
|
viewport: z.ZodObject<{
|
|
@@ -228,13 +287,13 @@ declare const UnotestConfigSchema: z.ZodObject<{
|
|
|
228
287
|
defaultNavigationTimeoutMs: z.ZodNumber;
|
|
229
288
|
linter: z.ZodObject<{
|
|
230
289
|
enabled: z.ZodBoolean;
|
|
231
|
-
rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:
|
|
290
|
+
rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
|
|
232
291
|
}, "strip", z.ZodTypeAny, {
|
|
233
292
|
enabled: boolean;
|
|
234
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
293
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
235
294
|
}, {
|
|
236
295
|
enabled: boolean;
|
|
237
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
296
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
238
297
|
}>;
|
|
239
298
|
mcp: z.ZodObject<{
|
|
240
299
|
transport: z.ZodLiteral<"stdio">;
|
|
@@ -292,7 +351,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
|
|
|
292
351
|
defaultNavigationTimeoutMs: number;
|
|
293
352
|
linter: {
|
|
294
353
|
enabled: boolean;
|
|
295
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
354
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
296
355
|
};
|
|
297
356
|
mcp: {
|
|
298
357
|
transport: "stdio";
|
|
@@ -303,6 +362,12 @@ declare const UnotestConfigSchema: z.ZodObject<{
|
|
|
303
362
|
apiBaseUrl?: string | undefined;
|
|
304
363
|
};
|
|
305
364
|
baseUrl?: string | undefined;
|
|
365
|
+
webServer?: {
|
|
366
|
+
command: string;
|
|
367
|
+
url: string;
|
|
368
|
+
reuseExistingServer: boolean;
|
|
369
|
+
timeoutMs: number;
|
|
370
|
+
} | undefined;
|
|
306
371
|
channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
|
|
307
372
|
storageState?: string | undefined;
|
|
308
373
|
}, {
|
|
@@ -335,7 +400,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
|
|
|
335
400
|
defaultNavigationTimeoutMs: number;
|
|
336
401
|
linter: {
|
|
337
402
|
enabled: boolean;
|
|
338
|
-
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:
|
|
403
|
+
rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
|
|
339
404
|
};
|
|
340
405
|
mcp: {
|
|
341
406
|
transport: "stdio";
|
|
@@ -346,6 +411,12 @@ declare const UnotestConfigSchema: z.ZodObject<{
|
|
|
346
411
|
apiBaseUrl?: string | undefined;
|
|
347
412
|
};
|
|
348
413
|
baseUrl?: string | undefined;
|
|
414
|
+
webServer?: {
|
|
415
|
+
command: string;
|
|
416
|
+
url: string;
|
|
417
|
+
reuseExistingServer?: boolean | undefined;
|
|
418
|
+
timeoutMs?: number | undefined;
|
|
419
|
+
} | undefined;
|
|
349
420
|
channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
|
|
350
421
|
storageState?: string | undefined;
|
|
351
422
|
}>;
|
|
@@ -353,4 +424,4 @@ type UnotestConfig = z.infer<typeof UnotestConfigSchema>;
|
|
|
353
424
|
type UnotestConfigInput = z.input<typeof UnotestConfigSchema>;
|
|
354
425
|
declare const DEFAULT_CONFIG: UnotestConfig;
|
|
355
426
|
|
|
356
|
-
export { type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, type SandboxConfig, SandboxConfigSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema };
|
|
427
|
+
export { type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, type SandboxConfig, SandboxConfigSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema, type WebServerConfig, WebServerConfigSchema };
|
package/dist/config/schema.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _0x4b4ff9=_0x31c8;(function(_0x4ef68e,_0x2ff5c6){var _0x3f1675={_0x3a326e:0x163,_0x54f536:0x18c,_0x166f0e:0x16e,_0x4e62de:0x184,_0x3312cb:0x15e,_0x1e47d2:0x17b},_0x3988c2=_0x31c8,_0x4ac811=_0x4ef68e();while(!![]){try{var _0x4564cd=-parseInt(_0x3988c2(0x17d))/0x1*(-parseInt(_0x3988c2(0x186))/0x2)+parseInt(_0x3988c2(_0x3f1675._0x3a326e))/0x3+-parseInt(_0x3988c2(_0x3f1675._0x54f536))/0x4*(parseInt(_0x3988c2(0x166))/0x5)+parseInt(_0x3988c2(_0x3f1675._0x166f0e))/0x6+parseInt(_0x3988c2(_0x3f1675._0x4e62de))/0x7*(parseInt(_0x3988c2(_0x3f1675._0x3312cb))/0x8)+parseInt(_0x3988c2(0x15c))/0x9*(-parseInt(_0x3988c2(0x18b))/0xa)+-parseInt(_0x3988c2(_0x3f1675._0x1e47d2))/0xb*(parseInt(_0x3988c2(0x160))/0xc);if(_0x4564cd===_0x2ff5c6)break;else _0x4ac811['push'](_0x4ac811['shift']());}catch(_0x403cfa){_0x4ac811['push'](_0x4ac811['shift']());}}}(_0x3422,0x1f3c5));function _0x31c8(_0xed4411,_0x2de1dd){_0xed4411=_0xed4411-0x150;var _0x342232=_0x3422();var _0x31c863=_0x342232[_0xed4411];if(_0x31c8['zKgNuR']===undefined){var _0xe1f7d7=function(_0x15c9b7){var _0x2fcc8a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x2f850d='',_0x3b47d0='';for(var _0x48180b=0x0,_0x2a6cd7,_0x3b96a7,_0x41d138=0x0;_0x3b96a7=_0x15c9b7['charAt'](_0x41d138++);~_0x3b96a7&&(_0x2a6cd7=_0x48180b%0x4?_0x2a6cd7*0x40+_0x3b96a7:_0x3b96a7,_0x48180b++%0x4)?_0x2f850d+=String['fromCharCode'](0xff&_0x2a6cd7>>(-0x2*_0x48180b&0x6)):0x0){_0x3b96a7=_0x2fcc8a['indexOf'](_0x3b96a7);}for(var _0x2c34b8=0x0,_0x3d7d2e=_0x2f850d['length'];_0x2c34b8<_0x3d7d2e;_0x2c34b8++){_0x3b47d0+='%'+('00'+_0x2f850d['charCodeAt'](_0x2c34b8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3b47d0);};_0x31c8['BEcFSJ']=_0xe1f7d7,_0x31c8['mudoHD']={},_0x31c8['zKgNuR']=!![];}var _0x2e12dc=_0x342232[0x0],_0x113424=_0xed4411+_0x2e12dc,_0xace658=_0x31c8['mudoHD'][_0x113424];return!_0xace658?(_0x31c863=_0x31c8['BEcFSJ'](_0x31c863),_0x31c8['mudoHD'][_0x113424]=_0x31c863):_0x31c863=_0xace658,_0x31c863;}import{z}from'zod';function _0x3422(){var _0x433420=['DMfSAwrHDg9YoMz1BMn0Aw9UlxnOyxbL','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlwv4ChjLC3nPB24','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','y3jHC2G','BNvSBa','D2vIA2L0','zxjYB3i','nJnsEgviB0S','C3rKAw8','otG0A013C3fJ','zw51Bq','mtjbvhfmBgK','C3rYAw5N','BwfUDwfS','mZKYotm3ywzXwKDs','y2HYB21LlwjLDge','ywnJzxb0','nuvYwxzTuG','Dw5VDgvZDc9LmMu','DMfSAwrHDg9YoNnLBwfUDgLJlwXVC3m','BgL0zxjHBa','BgLUDdPZy2vUyxjPBY1PBI1YB290','BgLUDdPWyxvZzs1LEhbSAwnPDa','DxjS','y2HYB21PDw0','mZGZmtKWEu9Iu3Dw','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','yxjYyxK','BNvTyMvY','BwLU','B3b0Aw9UywW','D2fYBG','DMfSAwrHDg9YoMLMlxnOyxbL','lNvUB3rLC3qVzMfPBhvYzxm','BMv0D29YAW','zgvMyxvSDa','DMfSAwrHDg9YoMfYAxr5','Aw50','mtK3nde4mxfeyu1fAq','BxnLzgDL','mZeXmdzAs0vrAuu','Bwf4','CMvJB3jK','Cg9ZAxrPDMu','DMfSAwrHDg9YoNzHCI1ZAgfWzq','DMfSAwrHDg9YoM1LDgeTC2HHCgu','DhjHBNnPzw50','ntuZn2DpDwf0sa','zgLZBwLZCW','nejlzhffva','DMfSAwrHDg9YoNDYyxbWzwqTzM9YBwf0','DMfSAwrHDg9YoMzVCI1ZAgfWzq','DMfSAwrHDg9YoMXPC3qTyxjN','Dw5PB24','mJy3mdbMuuPhteu','mteYotG4vw9fvK5M','B2jQzwn0','Dw5VDgvZDc9LmMuVx2HLBhbLCNm','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','y2HYB21L','yM9VBgvHBG'];_0x3422=function(){return _0x433420;};return _0x3422();}var BrowserSchema=z[_0x4b4ff9(0x15f)](['chromium','firefox',_0x4b4ff9(0x15a)]),BrowserChannelSchema=z[_0x4b4ff9(0x18a)]([z[_0x4b4ff9(0x169)](_0x4b4ff9(0x153)),z[_0x4b4ff9(0x169)](_0x4b4ff9(0x17c)),z['literal'](_0x4b4ff9(0x164)),z[_0x4b4ff9(0x159)]()])['optional'](),ViewportSchema=z[_0x4b4ff9(0x150)]({'width':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)](),'height':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)]()}),RetryReasonSchema=z['enum']([_0x4b4ff9(0x183),_0x4b4ff9(0x177),_0x4b4ff9(0x158)]),RetryConfigSchema=z[_0x4b4ff9(0x150)]({'count':z[_0x4b4ff9(0x171)]()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x172)](0x0)[_0x4b4ff9(0x17e)](0xa),'on':z['array'](RetryReasonSchema)}),FailureBundleConfigSchema=z[_0x4b4ff9(0x150)]({'tier1':z[_0x4b4ff9(0x169)](!![])['default'](!![]),'tier2':z[_0x4b4ff9(0x154)](),'tier3':z['object']({'network':z['boolean'](),'video':z['boolean']()}),'retention':z[_0x4b4ff9(0x150)]({'runs':z[_0x4b4ff9(0x171)]()['int']()['positive'](),'days':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)]()}),'storageDir':z[_0x4b4ff9(0x161)]()['min'](0x1)}),DialogPolicySchema=z[_0x4b4ff9(0x15f)]([_0x4b4ff9(0x165),_0x4b4ff9(0x185),_0x4b4ff9(0x162)]),LinterRuleIdSchema=z[_0x4b4ff9(0x15f)](['lint:deep-css','lint:xpath',_0x4b4ff9(0x157),_0x4b4ff9(0x16b),'lint:disambig-by-index','lint:evaluate-discouraged',_0x4b4ff9(0x16a),'lint:mustache-in-dsl',_0x4b4ff9(0x152),_0x4b4ff9(0x179),'validator:arg-kind','validator:step-coverage','validator:step-shape',_0x4b4ff9(0x182),_0x4b4ff9(0x155),_0x4b4ff9(0x188),_0x4b4ff9(0x175),_0x4b4ff9(0x181),'validator:unsupported-statement',_0x4b4ff9(0x156),_0x4b4ff9(0x16f),_0x4b4ff9(0x168),_0x4b4ff9(0x189),_0x4b4ff9(0x187)]),LinterSeveritySchema=z[_0x4b4ff9(0x15f)](['off',_0x4b4ff9(0x174),'error']),LinterConfigSchema=z['object']({'enabled':z['boolean'](),'rules':z[_0x4b4ff9(0x17f)](LinterRuleIdSchema,LinterSeveritySchema)}),McpConfigSchema=z[_0x4b4ff9(0x150)]({'transport':z[_0x4b4ff9(0x169)](_0x4b4ff9(0x15d))}),SandboxConfigSchema=z[_0x4b4ff9(0x150)]({'shellCwd':z['string']()['optional'](),'database':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x173)](),'apiBaseUrl':z[_0x4b4ff9(0x161)]()['url']()[_0x4b4ff9(0x173)]()}),WebServerConfigSchema=z['object']({'command':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x172)](0x1),'url':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x16c)](),'reuseExistingServer':z['boolean']()[_0x4b4ff9(0x178)](!![]),'timeoutMs':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)]()['default'](0xea60)}),UnotestConfigSchema=z[_0x4b4ff9(0x150)]({'baseUrl':z['string']()[_0x4b4ff9(0x16c)]()[_0x4b4ff9(0x173)](),'webServer':WebServerConfigSchema[_0x4b4ff9(0x173)](),'browsers':z[_0x4b4ff9(0x170)](BrowserSchema)['min'](0x1),'channel':BrowserChannelSchema,'viewport':ViewportSchema,'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x173)](),'testDir':z[_0x4b4ff9(0x161)]()[_0x4b4ff9(0x172)](0x1),'helpersDir':z['string']()[_0x4b4ff9(0x172)](0x1),'defaultTimeoutMs':z[_0x4b4ff9(0x171)]()['int']()[_0x4b4ff9(0x180)](),'defaultNavigationTimeoutMs':z['number']()[_0x4b4ff9(0x17a)]()[_0x4b4ff9(0x180)](),'linter':LinterConfigSchema,'mcp':McpConfigSchema,'sandbox':SandboxConfigSchema}),DEFAULT_CONFIG={'browsers':[_0x4b4ff9(0x16d)],'viewport':{'width':0x500,'height':0x2d0},'retry':{'count':0x0,'on':[_0x4b4ff9(0x183)]},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x4b4ff9(0x176)},'dialogPolicy':'accept','testDir':_0x4b4ff9(0x167),'helpersDir':_0x4b4ff9(0x151),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x3a98,'linter':{'enabled':!![],'rules':{'lint:deep-css':_0x4b4ff9(0x174),'lint:xpath':_0x4b4ff9(0x174),'lint:obfuscated-class':_0x4b4ff9(0x174),'lint:pause-explicit':'warn','lint:disambig-by-index':'off','lint:evaluate-discouraged':'warn','lint:scenario-in-root':_0x4b4ff9(0x15b),'lint:mustache-in-dsl':_0x4b4ff9(0x15b),'validator:unknown-function':_0x4b4ff9(0x15b)}},'mcp':{'transport':_0x4b4ff9(0x15d)},'sandbox':{}};export{BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,RetryConfigSchema,RetryReasonSchema,SandboxConfigSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema};
|
package/dist/driver/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x296b36=_0x5f64;(function(_0x1acf4e,_0x1dbb8d){const _0x429dc7={_0x40bd21:0x1b4,_0x43c267:0x1bf,_0x502089:0x1a3,_0x4648b1:0x1a2,_0x52b286:0x1cb,_0x5aab0b:0x1aa},_0x5f2dfa=_0x5f64,_0x1f5773=_0x1acf4e();while(!![]){try{const _0x33f5e3=parseInt(_0x5f2dfa(0x19e))/0x1*(-parseInt(_0x5f2dfa(_0x429dc7._0x40bd21))/0x2)+-parseInt(_0x5f2dfa(_0x429dc7._0x43c267))/0x3*(parseInt(_0x5f2dfa(_0x429dc7._0x502089))/0x4)+parseInt(_0x5f2dfa(0x179))/0x5*(parseInt(_0x5f2dfa(_0x429dc7._0x4648b1))/0x6)+parseInt(_0x5f2dfa(0x1c7))/0x7*(parseInt(_0x5f2dfa(0x1c1))/0x8)+parseInt(_0x5f2dfa(_0x429dc7._0x52b286))/0x9+-parseInt(_0x5f2dfa(0x1e0))/0xa*(-parseInt(_0x5f2dfa(0x1ab))/0xb)+parseInt(_0x5f2dfa(_0x429dc7._0x5aab0b))/0xc;if(_0x33f5e3===_0x1dbb8d)break;else _0x1f5773['push'](_0x1f5773['shift']());}catch(_0x4574e7){_0x1f5773['push'](_0x1f5773['shift']());}}}(_0x1962,0xea106));function _0x1962(){const _0x1c9380=['ywn0AxzLswr4','y2fSBhngB3i','D2fPDezVCLrLEhq','CMvJB3jKzxi','m0nQwKj3qW','y29VA2LLCW','mZKYofzbtuPXDW','DgL0Bgu','y2XVC2u','Aw5ZCgvJDevSzw1LBNq','zMLSBa','CgfNzsbPBMrLEcbVDxqGB2yGCMfUz2u','mJG4nfLRu0f0Ca','zhjPDMvY','zNjHBwvezxb0Aa','y3r4','ndCXntK2ngzLwLvuBG','Bg9JywXtDg9YywDLu3rHDgu','pgrPDJ48l2rPDJ4','zMfRzs1WBMC','y291BNq','CMvSB2fK','y29UC29SzuvUDhjPzxm','DxbSB2fKrMLSzq','D2fPDezVCG','Bwv0Ag9K','AxnwAxnPyMXL','BMv0D29YA0vUDhjPzxm','z2v0tg9JywXtDg9YywDL','rMfRzunVBNrLEhq','C2f2zvn0B3jHz2vtDgf0zq','yMvOyxzPB3i','Cg9WDxbpBKnSAwnR','Cg9W','lNbHz2uW','zxzHBhvHDgu','zg91yMXLq2XPy2S','mtyZmeftC3DmwG','ywrK','C2nYB2XSsw50B1zPzxC','BMfTzq','y3vYCMvUDfvYBa','y2fSBhm','y29UDgv4Da','Aw5PDgLHBfvYBa','yxr0ywnOrxHPC3rPBMC','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','zw50zxjgCMfTzsbJywXSzwqGD2L0AcbLBxb0EsbSB2nHDg9Y','C2v0qwn0AxzLugfNzq','C2v0tg9JywXtDg9YywDL','zxHPDezYyw1L','CMvM','z290BW','Bwf5yMvuAhjVDW','zNjVBq','zhjHz0fUzerYB3a','C2nVCgu','ntiZnteWDez1CMDT','Bgf1BMnOzwq','Bg9JywXtDg9YywDL','CMvJB3jK','zwXLBwvUDeHPBNrcEvjLzG','z2v0q29VA2LL','BMv3q29UDgv4Da','B25bzNrLCKnSAwnR','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','C2v0q29VA2LL','zxzHBhvHDgvpBKXVy2f0B3i','vw5VDgvZDevYCM9Y','B3v0zxjive1m','D3nfBMrWB2LUDa','Dw5JAgvJAW','zgvSzxrL','Aw5WDxrwywX1zq','Bgf1BMnO','y2XPCgjVyxjKugfZDgu','zxjYB3jpBK5LEhrby3rPB24','z29gB3j3yxjK','A2LUza','C3rLChm','iJ48l2rPDJ4','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','ywjVDxq6yMXHBMS','y29VA2LLu3rHDgu','D2fPDezVCK5HDMLNyxrPB24','CgfNzuXPC3q','C2vSzwn0t3b0Aw9U','y2fWDhvYzvn0ywnRvhjHy2u','Dgv4DenVBNrLBNq','DxjS','C2nYzwvUC2HVDa','B25ozxDqywDL','z29cywnR','B3v0zxjiDg1SqNLszwy','mLfWALngtG','Dgv4DenVBNrLBNrcEurLzMf1Bhq','D2fPDezVCLvYBa','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','mJreCgf0yw4','mtq0mtmWofPMCgTMtq','y2XPy2S','ChjLC3m','zNjHBwvtDgfJAW','rhjPDMvYrxjYB3i','AxnwAxnPyMXLqNLezwzHDwX0','zMLSDgvY','mtGWotK2nZj5y3byBum','mJy5mtD4ze14DwK','Ag92zxi','z2v0qxr0CMLIDxrL','ChvZAa','BMv3ugfNzuXPC3rLBMvYCW','zNvUy3rPB24','zMfRzsb0AxrSzq','BgvUz3rO','lNbHz2u','mtCZmZiXmfbwEKL1Da','ywn0AxzLugfNzq','zgvMAw5LuhjVCgvYDhK','yxr0CMLIDxrLC0j5rgvMyxvSDa','y29UDgv4Dhm','CgfNzxm','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP'];_0x1962=function(){return _0x1c9380;};return _0x1962();}var __defProp=Object[_0x296b36(0x1b6)],__name=(_0x100bd0,_0x539b66)=>__defProp(_0x100bd0,_0x296b36(0x1e3),{'value':_0x539b66,'configurable':!![]}),UnotestError=class extends Error{static{__name(this,_0x296b36(0x184));}[_0x296b36(0x1e6)];constructor(_0x201fea,_0xd99b6c={}){const _0x153cac={_0x45f7d5:0x1e6},_0x3083bd=_0x296b36;super(_0x201fea),this['name']=new.target.name,this[_0x3083bd(_0x153cac._0x45f7d5)]=Object['freeze']({..._0xd99b6c}),typeof Error[_0x3083bd(0x197)]===_0x3083bd(0x1b0)&&Error['captureStackTrace'](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,_0x296b36(0x1a7));}},LocatorError=class extends UnotestError{static{__name(this,'LocatorError');}};function createRecorder(){const _0x4a79d3={_0x901da9:0x1ae,_0x430069:0x1e5},_0x5d68a9=_0x296b36,_0x1e1827=[];let _0xf6002d=0x0;return{'push':__name(_0x3b25b0=>_0x1e1827[_0x5d68a9(0x1ae)]({..._0x3b25b0,'seq':_0xf6002d++}),_0x5d68a9(_0x4a79d3._0x901da9)),'calls':__name(()=>_0x1e1827,_0x5d68a9(_0x4a79d3._0x430069))};}function _0x5f64(_0x510958,_0x4716c0){_0x510958=_0x510958-0x175;const _0x1962fd=_0x1962();let _0x5f6484=_0x1962fd[_0x510958];if(_0x5f64['fvghhS']===undefined){var _0x19966e=function(_0x432983){const _0x5e3af4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x100bd0='',_0x539b66='';for(let _0x201fea=0x0,_0xd99b6c,_0x1e1827,_0xf6002d=0x0;_0x1e1827=_0x432983['charAt'](_0xf6002d++);~_0x1e1827&&(_0xd99b6c=_0x201fea%0x4?_0xd99b6c*0x40+_0x1e1827:_0x1e1827,_0x201fea++%0x4)?_0x100bd0+=String['fromCharCode'](0xff&_0xd99b6c>>(-0x2*_0x201fea&0x6)):0x0){_0x1e1827=_0x5e3af4['indexOf'](_0x1e1827);}for(let _0x3b25b0=0x0,_0x5dfd92=_0x100bd0['length'];_0x3b25b0<_0x5dfd92;_0x3b25b0++){_0x539b66+='%'+('00'+_0x100bd0['charCodeAt'](_0x3b25b0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x539b66);};_0x5f64['IxKrmA']=_0x19966e,_0x5f64['CSvVAV']={},_0x5f64['fvghhS']=!![];}const _0x5c3678=_0x1962fd[0x0],_0x1a31b8=_0x510958+_0x5c3678,_0x5483b0=_0x5f64['CSvVAV'][_0x1a31b8];return!_0x5483b0?(_0x5f6484=_0x5f64['IxKrmA'](_0x5f6484),_0x5f64['CSvVAV'][_0x1a31b8]=_0x5f6484):_0x5f6484=_0x5483b0,_0x5f6484;}__name(createRecorder,'createRecorder');var FakePage=class{constructor(_0x5dfd92,_0xc540e5,_0x5bd9b6,_0x4ef2d2){const _0x84c8b=_0x296b36;this[_0x84c8b(0x1be)]=_0x5dfd92,this['behavior']=_0xc540e5,this[_0x84c8b(0x178)]=_0x5bd9b6,this[_0x84c8b(0x1e4)]=_0x4ef2d2;}[_0x296b36(0x1be)];[_0x296b36(0x1da)];[_0x296b36(0x178)];static{__name(this,'FakePage');}['currentUrl'];[_0x296b36(0x180)];['record'](_0x28f14c,_0x11c42f){const _0x25a7f0={_0x4b65d1:0x1be,_0x3f3045:0x1ae,_0x396219:0x178},_0x1425fe=_0x296b36;this[_0x1425fe(_0x25a7f0._0x4b65d1)][_0x1425fe(_0x25a7f0._0x3f3045)]({'scope':this[_0x1425fe(_0x25a7f0._0x396219)],'method':_0x28f14c,'args':_0x11c42f});}[_0x296b36(0x175)](){const _0x118dbb={_0x4871da:0x18c,_0x4de42c:0x18c},_0x5a0851=_0x296b36;if(this['behavior'][_0x5a0851(_0x118dbb._0x4871da)]){const _0xea31f3=this[_0x5a0851(0x1da)][_0x5a0851(0x18c)];this[_0x5a0851(0x1da)][_0x5a0851(_0x118dbb._0x4de42c)]=void 0x0;throw _0xea31f3;}}[_0x296b36(0x199)](){const _0x362662={_0x3da611:0x1e4},_0x7870ae=_0x296b36;return this[_0x7870ae(_0x362662._0x3da611)];}async[_0x296b36(0x1c2)](){const _0x2837f5={_0x3071dc:0x1b1},_0x18b9a7=_0x296b36;return this[_0x18b9a7(0x17c)](_0x18b9a7(0x1c2),[]),_0x18b9a7(_0x2837f5._0x3071dc);}async[_0x296b36(0x1a4)](_0x568efa,_0x2342f0){const _0xfde242={_0x489ee8:0x17c,_0x298864:0x175},_0x3b618e=_0x296b36;this[_0x3b618e(_0xfde242._0x489ee8)]('click',[_0x568efa,_0x2342f0]),this[_0x3b618e(_0xfde242._0x298864)](),this[_0x3b618e(0x180)]?.();}async[_0x296b36(0x1df)](_0x69c3b,_0x533caa){this['record']('doubleClick',[_0x69c3b,_0x533caa]),this['maybeThrow']();}async[_0x296b36(0x1c5)](_0x504844,_0xd775e7,_0x5ba254){const _0x40a8ea=_0x296b36;this['record'](_0x40a8ea(0x1c5),[_0x504844,_0xd775e7,_0x5ba254]),this[_0x40a8ea(0x175)]();}async['press'](_0x2c3ed1,_0x30ed20,_0x5353bd){const _0x111a76=_0x296b36;this[_0x111a76(0x17c)](_0x111a76(0x1a5),[_0x2c3ed1,_0x30ed20,_0x5353bd]),this['maybeThrow']();}async['check'](_0x525b87,_0x4d7eb6){const _0x3ae924=_0x296b36;this['record']('check',[_0x525b87,_0x4d7eb6]),this[_0x3ae924(0x175)]();}async[_0x296b36(0x187)](_0x20014c,_0x9e8840){const _0x536ac1=_0x296b36;this[_0x536ac1(0x17c)](_0x536ac1(0x187),[_0x20014c,_0x9e8840]),this['maybeThrow']();}async['selectOption'](_0x51dc2e,_0x24c528,_0x4659cd){const _0x3f0818={_0x2e65fd:0x196},_0x55cfcc=_0x296b36;this[_0x55cfcc(0x17c)](_0x55cfcc(_0x3f0818._0x2e65fd),[_0x51dc2e,_0x24c528,_0x4659cd]),this[_0x55cfcc(0x175)]();}async[_0x296b36(0x1ac)](_0x2d604c,_0x3562e5){const _0x4aaaf9={_0x520562:0x17c,_0x52e862:0x1ac},_0x5ad5e7=_0x296b36;this[_0x5ad5e7(_0x4aaaf9._0x520562)](_0x5ad5e7(_0x4aaaf9._0x52e862),[_0x2d604c,_0x3562e5]),this['maybeThrow']();}async[_0x296b36(0x1e2)](_0x46b31b){const _0x29ae1f={_0x588760:0x1e2,_0x4da923:0x175},_0x2d1c5f=_0x296b36;this['record'](_0x2d1c5f(_0x29ae1f._0x588760),[_0x46b31b]),this[_0x2d1c5f(_0x29ae1f._0x4da923)]();}async[_0x296b36(0x177)](_0x1c08e1,_0xdd2ed2,_0x34aaaa){const _0x472dc8=_0x296b36;this['record']('dragAndDrop',[_0x1c08e1,_0xdd2ed2,_0x34aaaa]),this[_0x472dc8(0x175)]();}async[_0x296b36(0x1d2)](_0x1e6e05,_0x20e4ea){const _0x4695f6=_0x296b36;this[_0x4695f6(0x17c)](_0x4695f6(0x1d2),[_0x1e6e05,_0x20e4ea]),this[_0x4695f6(0x175)]();}async[_0x296b36(0x18b)](_0x3a5090,_0xb228eb){const _0x2156f0={_0x3be53b:0x17c},_0x464b95=_0x296b36;this[_0x464b95(_0x2156f0._0x3be53b)]('clipboardPaste',[_0x3a5090,_0xb228eb]),this['maybeThrow']();}async[_0x296b36(0x1cf)](_0x520a71){const _0x3f75e4={_0x20a857:0x1cf},_0x61c2ee=_0x296b36;return this[_0x61c2ee(0x17c)](_0x61c2ee(_0x3f75e4._0x20a857),[_0x520a71]),this[_0x61c2ee(0x1da)]['countByDefault']??0x1;}async[_0x296b36(0x198)](_0x4f1e0e){const _0x209b1f={_0x546a1e:0x17c},_0x1e1630=_0x296b36;return this[_0x1e1630(_0x209b1f._0x546a1e)](_0x1e1630(0x198),[_0x4f1e0e]),this[_0x1e1630(0x1da)][_0x1e1630(0x19f)]??'';}async[_0x296b36(0x189)](_0x5f0556){const _0x83daa7={_0x220816:0x189},_0x48837e=_0x296b36;return this[_0x48837e(0x17c)](_0x48837e(_0x83daa7._0x220816),[_0x5f0556]),this[_0x48837e(0x1da)]['inputValueByDefault']??'';}async[_0x296b36(0x1d5)](_0x170409){const _0x342ecd={_0x12dee5:0x1a8},_0x686a1c=_0x296b36;return this[_0x686a1c(0x17c)]('isVisible',[_0x170409]),this['behavior'][_0x686a1c(_0x342ecd._0x12dee5)]??!![];}async[_0x296b36(0x1ad)](_0x46c2ff,_0x419d99){const _0x53e140={_0x8b585d:0x1ad},_0x4d8d6a=_0x296b36;return this['record'](_0x4d8d6a(_0x53e140._0x8b585d),[_0x46c2ff,_0x419d99]),this['behavior'][_0x4d8d6a(0x1b7)]?.[_0x419d99]??null;}async['waitFor'](_0x4d57c3,_0x465eba){const _0x42565a=_0x296b36;this[_0x42565a(0x17c)](_0x42565a(0x1d3),[_0x4d57c3,_0x465eba]);}async[_0x296b36(0x1a0)](_0x17a56e,_0x1fdb1d){const _0x40042a={_0x1d2d0b:0x1a0},_0x505a9d=_0x296b36;this[_0x505a9d(0x17c)](_0x505a9d(_0x40042a._0x1d2d0b),[_0x17a56e,_0x1fdb1d]);}async[_0x296b36(0x1bd)](_0x417253,_0x4895d6){const _0x36f643=_0x296b36;this[_0x36f643(0x17c)](_0x36f643(0x1bd),[_0x417253,_0x4895d6]);}async[_0x296b36(0x194)](_0x265f32){const _0x166b94={_0x339d8c:0x17c,_0x5d92a9:0x194},_0x4c5e34=_0x296b36;this[_0x4c5e34(_0x166b94._0x339d8c)](_0x4c5e34(_0x166b94._0x5d92a9),[_0x265f32]);}async[_0x296b36(0x1ef)](_0x234efd,_0x2e2032){const _0x17bb70={_0xf3f622:0x1e4},_0x249e99=_0x296b36;this[_0x249e99(0x17c)]('goto',[_0x234efd,_0x2e2032]),this[_0x249e99(_0x17bb70._0xf3f622)]=_0x234efd;}async[_0x296b36(0x1d0)](_0x261dc2){const _0x4b4af0={_0x261f4a:0x1d0},_0xd75d65=_0x296b36;this[_0xd75d65(0x17c)](_0xd75d65(_0x4b4af0._0x261f4a),[_0x261dc2]);}async['goBack'](_0x13c9e1){const _0x227cf={_0x4aef97:0x17c,_0x40422d:0x19c},_0xc91637=_0x296b36;this[_0xc91637(_0x227cf._0x4aef97)](_0xc91637(_0x227cf._0x40422d),[_0x13c9e1]);}async[_0x296b36(0x18d)](_0x4b99be){const _0x5716d6=_0x296b36;this[_0x5716d6(0x17c)](_0x5716d6(0x18d),[_0x4b99be]);}async[_0x296b36(0x1de)](_0x3601ef){const _0x5c6dcc={_0x67dbd3:0x1de},_0x50f6a3=_0x296b36;return this['record'](_0x50f6a3(_0x5c6dcc._0x67dbd3),[_0x3601ef]),void 0x0;}async[_0x296b36(0x183)](_0x1432c4,_0x933df1){const _0x64e510={_0x137d10:0x17c},_0x1507f3=_0x296b36;return this[_0x1507f3(_0x64e510._0x137d10)](_0x1507f3(0x183),[_0x1432c4,_0x933df1]),void 0x0;}async[_0x296b36(0x1c4)](_0x44dfed){const _0x479838={_0x4c1a42:0x17c},_0x361d00=_0x296b36;this[_0x361d00(_0x479838._0x4c1a42)]('inspectElement',[_0x44dfed]);if(_0x44dfed['steps'][_0x361d00(0x1b2)]!==0x1||_0x44dfed['steps'][0x0]['kind']!==_0x361d00(0x1ee))return null;const _0xc99efe=_0x44dfed[_0x361d00(0x18f)][0x0]['ref'],_0x12d4ce=this[_0x361d00(0x1da)][_0x361d00(0x17d)]?.[_0xc99efe];return _0x12d4ce??null;}async[_0x296b36(0x19a)](_0x250a65){const _0xa5b0d7={_0x2e9505:0x19a,_0x5f1dea:0x1ce},_0x2a4e66=_0x296b36;return this['record'](_0x2a4e66(_0xa5b0d7._0x2e9505),[_0x250a65]),Buffer[_0x2a4e66(0x176)](_0x2a4e66(_0xa5b0d7._0x5f1dea));}async[_0x296b36(0x185)](_0x2b19ef){const _0x13a361={_0xa02dc9:0x18e,_0x100be7:0x1ee,_0x25a25c:0x19d,_0x335ec6:0x1a1,_0x11d2ba:0x1cd},_0x51417a=_0x296b36;this[_0x51417a(0x17c)](_0x51417a(0x185),[_0x2b19ef]);if(_0x2b19ef[_0x51417a(0x18f)][_0x51417a(0x1b2)]===0x1&&_0x2b19ef['steps'][0x0][_0x51417a(_0x13a361._0xa02dc9)]==='ref'){const _0x1faaa5=_0x2b19ef['steps'][0x0][_0x51417a(_0x13a361._0x100be7)];return this[_0x51417a(0x1da)][_0x51417a(_0x13a361._0x25a25c)]?.[_0x1faaa5]??_0x51417a(_0x13a361._0x335ec6)+_0x1faaa5+_0x51417a(0x190);}return _0x51417a(_0x13a361._0x11d2ba);}},FakeContext=class{constructor(_0x596efe,_0x460b56,_0xb2bcaa){const _0x33e95b={_0xe3b909:0x1be,_0x2b8a29:0x1dd,_0x1d36b3:0x180,_0x3158e6:0x193},_0x5a2aba=_0x296b36;this[_0x5a2aba(_0x33e95b._0xe3b909)]=_0x596efe,this[_0x5a2aba(0x1da)]=_0x460b56,this[_0x5a2aba(0x178)]=_0xb2bcaa;const _0x5bbc2b=new FakePage(_0x596efe,_0x460b56,_0xb2bcaa+_0x5a2aba(_0x33e95b._0x2b8a29),_0x460b56[_0x5a2aba(0x1e7)]??_0x5a2aba(0x192));_0x460b56['popupOnClick']&&(_0x5bbc2b[_0x5a2aba(_0x33e95b._0x1d36b3)]=()=>{const _0x2dba7b=_0x5a2aba;this['emitFakePopup'](_0x460b56[_0x2dba7b(0x1db)]);}),this[_0x5a2aba(0x195)]=[_0x5bbc2b],this['localStorageState']={..._0x460b56[_0x5a2aba(0x17b)]??{}},this[_0x5a2aba(_0x33e95b._0x3158e6)]={..._0x460b56[_0x5a2aba(0x1c0)]??{}};}[_0x296b36(0x1be)];[_0x296b36(0x1da)];[_0x296b36(0x178)];static{__name(this,_0x296b36(0x1d8));}[_0x296b36(0x195)];[_0x296b36(0x1bb)]=0x0;[_0x296b36(0x1a6)]=[];['localStorageState'];[_0x296b36(0x193)];[_0x296b36(0x1af)]=new Set();[_0x296b36(0x17c)](_0x121ef5,_0x4f9530){const _0x38ae7f={_0x47f092:0x1be,_0x504274:0x1ae,_0x43990d:0x178},_0x3b036a=_0x296b36;this[_0x3b036a(_0x38ae7f._0x47f092)][_0x3b036a(_0x38ae7f._0x504274)]({'scope':this[_0x3b036a(_0x38ae7f._0x43990d)],'method':_0x121ef5,'args':_0x4f9530});}[_0x296b36(0x1b9)](){const _0x31b768={_0x45bf90:0x195},_0x854c43=_0x296b36;return this[_0x854c43(_0x31b768._0x45bf90)];}[_0x296b36(0x1b5)](){const _0x3a144c={_0x48ad9c:0x1bb},_0xaba19a=_0x296b36,_0x3defbe=this[_0xaba19a(0x195)][this[_0xaba19a(_0x3a144c._0x48ad9c)]];if(!_0x3defbe)throw new DriverError(_0xaba19a(0x1e9),{'activeIdx':this['activeIdx']});return _0x3defbe;}[_0x296b36(0x1d1)](){const _0x5cb641={_0x11725c:0x1da},_0x5af691=_0x296b36;return this[_0x5af691(_0x5cb641._0x11725c)]['consoleEntries']??[];}[_0x296b36(0x1d6)](){const _0xdd7713={_0x3980a0:0x1d6},_0x5dbd2a=_0x296b36;return this[_0x5dbd2a(0x1da)][_0x5dbd2a(_0xdd7713._0x3980a0)]??[];}async[_0x296b36(0x1eb)](_0x1174e0){const _0x589e17={_0x5dfc8d:0x1eb,_0x592cb2:0x195,_0x531c40:0x1b2},_0x1d2645=_0x296b36;this[_0x1d2645(0x17c)](_0x1d2645(_0x589e17._0x5dfc8d),[_0x1174e0]);if(_0x1174e0<0x0||_0x1174e0>=this[_0x1d2645(_0x589e17._0x592cb2)][_0x1d2645(0x1b2)])throw new DriverError(_0x1d2645(0x1c6),{'index':_0x1174e0,'available':this[_0x1d2645(_0x589e17._0x592cb2)][_0x1d2645(0x1b2)]});this[_0x1d2645(0x1bb)]=_0x1174e0,this[_0x1d2645(0x1a6)][_0x1d2645(_0x589e17._0x531c40)]=0x0;}[_0x296b36(0x19b)](_0x17b6e6){const _0x54a300={_0xb71e22:0x1af,_0x5c1a39:0x1e1},_0x64d341={_0x526a32:0x188},_0x2038d9=_0x296b36;return this[_0x2038d9(_0x54a300._0xb71e22)][_0x2038d9(_0x54a300._0x5c1a39)](_0x17b6e6),()=>{const _0xf5414f=_0x2038d9;this['newPageListeners'][_0xf5414f(_0x64d341._0x526a32)](_0x17b6e6);};}['emitFakePopup'](_0x57d7aa){const _0x2d2b35={_0x5830dd:0x1b2,_0x46ad67:0x195,_0x39d5f5:0x195},_0x33b49a=_0x296b36,_0x342457=this['scope']+_0x33b49a(0x1b3)+this['pageList'][_0x33b49a(_0x2d2b35._0x5830dd)],_0x55984f=new FakePage(this['recorder'],this[_0x33b49a(0x1da)],_0x342457,_0x57d7aa);this[_0x33b49a(_0x2d2b35._0x46ad67)]['push'](_0x55984f);const _0x22f01c=this[_0x33b49a(_0x2d2b35._0x39d5f5)]['length']-0x1;for(const _0x55433c of this['newPageListeners']){try{_0x55433c({'index':_0x22f01c,'url':_0x57d7aa});}catch{}}return _0x22f01c;}async['enterFrame'](_0x540d0d){const _0x540a7e={_0x2d741a:0x18f},_0x236a28=_0x296b36;this[_0x236a28(0x17c)]('enterFrame',[_0x540d0d]);if(!_0x540d0d[_0x236a28(_0x540a7e._0x2d741a)][_0x236a28(0x1b2)])throw new LocatorError(_0x236a28(0x1ea),{'locator':_0x540d0d});this[_0x236a28(0x1a6)]['push'](_0x540d0d);}async[_0x296b36(0x1ed)](){const _0x5028d8={_0x32d1a3:0x1a6,_0x41528f:0x1dc},_0x24b79a=_0x296b36;this['record'](_0x24b79a(0x1ed),[]);if(this[_0x24b79a(0x1a6)][_0x24b79a(0x1b2)]===0x0)throw new DriverError(_0x24b79a(0x181),{});this[_0x24b79a(_0x5028d8._0x32d1a3)][_0x24b79a(_0x5028d8._0x41528f)]();}async[_0x296b36(0x1ec)](_0x46cff9,_0x32fa7f){const _0x1c64f8=_0x296b36;this['record']('setLocalStorage',[_0x46cff9,_0x32fa7f]),this[_0x1c64f8(0x1cc)][_0x46cff9]=_0x32fa7f;}async['getLocalStorage'](_0x29108d){const _0x5cb508={_0x58c12d:0x1d7,_0x230543:0x1cc},_0x44b3ea=_0x296b36;return this['record'](_0x44b3ea(_0x5cb508._0x58c12d),[_0x29108d]),this[_0x44b3ea(_0x5cb508._0x230543)][_0x29108d]??null;}async[_0x296b36(0x182)](_0x4b2941,_0x4705d0,_0x57ad57){const _0x1220a6=_0x296b36;this[_0x1220a6(0x17c)]('setCookie',[_0x4b2941,_0x4705d0,_0x57ad57]),this[_0x1220a6(0x193)][_0x4b2941]=_0x4705d0;}async[_0x296b36(0x17e)](_0x1e30dd){const _0x2258c1=_0x296b36;return this[_0x2258c1(0x17c)](_0x2258c1(0x17e),[_0x1e30dd]),this['cookieState'][_0x1e30dd]??null;}async[_0x296b36(0x1d9)](_0x302e58){const _0x1a6c3d={_0x5d5cf7:0x17c},_0x2bdd07=_0x296b36;this[_0x2bdd07(_0x1a6c3d._0x5d5cf7)](_0x2bdd07(0x1d9),[_0x302e58]);}async[_0x296b36(0x1de)](_0x5804b1){const _0x54319f={_0x3cf509:0x17c,_0x16bdac:0x1de},_0x40504b=_0x296b36;return this[_0x40504b(_0x54319f._0x3cf509)](_0x40504b(_0x54319f._0x16bdac),[_0x5804b1]),void 0x0;}async[_0x296b36(0x1c3)](){const _0x16a2a2={_0x1c041e:0x17c},_0x2f6356=_0x296b36;this[_0x2f6356(_0x16a2a2._0x1c041e)](_0x2f6356(0x1c3),[]);}[_0x296b36(0x1c9)](){return this['frameStack']['length'];}},FakeWebDriver=class{constructor(_0x43bffb={}){const _0x4fc00d=_0x296b36;this['behavior']=_0x43bffb,this[_0x4fc00d(0x1be)]=createRecorder();}[_0x296b36(0x1da)];static{__name(this,'FakeWebDriver');}['launched']=![];[_0x296b36(0x1be)];['contexts']=[];async[_0x296b36(0x18a)](_0xf1bb92){const _0x5d92ca={_0x2e0b32:0x1ae,_0x2b6e4e:0x1c8},_0x4378ca=_0x296b36;this[_0x4378ca(0x1be)][_0x4378ca(_0x5d92ca._0x2e0b32)]({'scope':_0x4378ca(_0x5d92ca._0x2b6e4e),'method':_0x4378ca(0x18a),'args':[_0xf1bb92]}),this[_0x4378ca(0x17a)]=!![];}async[_0x296b36(0x17f)](_0x29b9bb){const _0x1797b5={_0x4cea79:0x1be,_0x3fd0c2:0x1c8,_0x60ae0d:0x1ba,_0x46b381:0x1da,_0x235707:0x1ca},_0x490369=_0x296b36;this[_0x490369(_0x1797b5._0x4cea79)][_0x490369(0x1ae)]({'scope':_0x490369(_0x1797b5._0x3fd0c2),'method':'newContext','args':[_0x29b9bb]});if(!this[_0x490369(0x17a)])throw new DriverError(_0x490369(_0x1797b5._0x60ae0d),{});const _0x3beb02=new FakeContext(this[_0x490369(0x1be)],this[_0x490369(_0x1797b5._0x46b381)],_0x490369(_0x1797b5._0x235707)+this[_0x490369(0x1b8)][_0x490369(0x1b2)]);return this[_0x490369(0x1b8)]['push'](_0x3beb02),_0x3beb02;}async[_0x296b36(0x1c3)](){const _0xcf2792={_0xe3ffd4:0x1be,_0xfaa763:0x1ae},_0x470f06=_0x296b36;this[_0x470f06(_0xcf2792._0xe3ffd4)][_0x470f06(_0xcf2792._0xfaa763)]({'scope':'driver','method':_0x470f06(0x1c3),'args':[]}),this[_0x470f06(0x17a)]=![];}[_0x296b36(0x186)](){return void 0x0;}async['connectShared'](){const _0x5cc900={_0x7e6102:0x191},_0x153802=_0x296b36;throw new DriverError(_0x153802(_0x5cc900._0x7e6102),{});}[_0x296b36(0x1e8)](){throw new DriverError('attachExisting\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0x296b36(0x1e5)](){const _0x2b8c09=_0x296b36;return this[_0x2b8c09(0x1be)]['calls']();}[_0x296b36(0x1bc)](_0x93af25){const _0x14e683=_0x296b36;return this['recorder'][_0x14e683(0x1e5)]()[_0x14e683(0x1a9)](_0x52133d=>_0x52133d[_0x14e683(0x1d4)]===_0x93af25);}};export{FakeWebDriver};
|
|
1
|
+
function _0x14f0(){const _0x4ee0b1=['C2v0qwn0AxzLugfNzq','mJGYmtaZmLzYDgzmBG','y29UDgv4Dhm','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','ChvZAa','y3r4','D2fPDezVCG','C2nYzwvUC2HVDa','ywn0AxzLugfNzq','BgvUz3rO','zhjPDMvY','Bg9JywXtDg9YywDLu3rHDgu','zxHPDezYyw1L','zw50zxjgCMfTzq','mtC1nZyYmNDjwuzPDa','Bgf1BMnO','D2fPDezVCLrLEhq','Aw5WDxrwywX1zq','D2fPDezVCK5HDMLNyxrPB24','zhjHz0fUzerYB3a','CMvM','zgvMAw5LuhjVCgvYDhK','Bg9JywXtDg9YywDL','y29UBMvJDfnOyxjLza','y29VA2LLu3rHDgu','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','B25bzNrLCKnSAwnR','yxr0CMLIDxrLC0j5rgvMyxvSDa','rhjPDMvYrxjYB3i','z290BW','rMfRzvbHz2u','y2fSBhm','y29VA2LLCW','BMfTzq','z29cywnR','z2v0q29VA2LL','zgvSzxrL','yxr0ywnOrxHPC3rPBMC','Ag92zxi','nJuWndGYAfHjCwj5','y29UDgv4Da','Dw5JAgvJAW','zNjLzxPL','CMvJB3jK','CMvSB2fK','pgrPDJ48l2rPDJ4','Aw5WDxrwywX1zuj5rgvMyxvSDa','y3jLyxrLuMvJB3jKzxi','Dgv4DenVBNrLBNrcEurLzMf1Bhq','y3vYCMvUDfvYBa','Cg9WDxbpBKnSAwnR','mtaWnte1mNbJv1vwvq','ChjLC3m','C3rLChm','lNbHz2uW','ywrK','mZK1ntK4u0Lxsw5z','yMvOyxzPB3i','y2XVC2u','DgL0Bgu','CMvJB3jKzxi','C2f2zvn0B3jHz2vtDgf0zq','A2LUza','zxjYB3jpBK5LEhrby3rPB24','zNjHBwvtDgfJAW','zwXLBwvUDeHPBNrcEvjLzG','zw50zxjgCMfTzsbJywXSzwqGD2L0AcbLBxb0EsbSB2nHDg9Y','Aw5PDgLHBfvYBa','BMv3ugfNzuXPC3rLBMvYCW','CgfNzuXPC3q','zMfRzsb0AxrSzq','zMLSBa','C2nYB2XSsw50B1zPzxC','Bgf1BMnOzwq','Dgv4DenVBNrLBNq','zNjHBwvezxb0Aa','ywn0AxzLswr4','z29gB3j3yxjK','y2fSBhngB3i','odiWmtyXm0Hdu01itW','z2v0tg9JywXtDg9YywDL','y29UC29SzuvUDhjPzxm','ntG3nZi2nfr2tNLMEq','zg91yMXLq2XPy2S','zxzHBhvHDgvpBKXVy2f0B3i','Cg9W','lNbHz2u','DxbSB2fKrMLSzq','iJ48l2rPDJ4','C2vSzwn0t3b0Aw9U','BMv3q29UDgv4Da','C2v0q29VA2LL','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP','AxnwAxnPyMXL','Aw5ZCgvJDevSzw1LBNq','y291BNq','nwvqD1Hsyq','Bwf5yMvuAhjVDW','zxzHBhvHDgu','Bwv0Ag9K','z2v0qxr0CMLIDxrL','zw1PDezHA2vqB3b1Ca','rMfRzvDLyKrYAxzLCG','C2nVCgu','C2v0tg9JywXtDg9YywDL','y2XPCgjVyxjKugfZDgu','vw5VDgvZDevYCM9Y','BMv0D29YA0vUDhjPzxm','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','y2HLy2S','y2XPy2S','D2fPDezVCLvYBa','ywjVDxq6yMXHBMS','y2fWDhvYzvn0ywnRvhjHy2u','tg9JyxrVCKvYCM9Y','zNvUy3rPB24','yxr0ywnOrxHPC3rPBMCGBM90ihn1ChbVCNrLzcbIEsbgywTLv2vIrhjPDMvY','owTjBvjTuG','B3v0zxjiDg1SqNLszwy','B25ozxDqywDL','zMfRzs1WBMC'];_0x14f0=function(){return _0x4ee0b1;};return _0x14f0();}const _0x1d0aa9=_0x1047;(function(_0x317790,_0x2f16cc){const _0x25bb38={_0x53ecf7:0x112,_0x214b2b:0x106,_0x5860ee:0x131,_0x435b61:0x117,_0x2ae589:0xe0,_0x48ece8:0xdb},_0x4b437e=_0x1047,_0x19c9dd=_0x317790();while(!![]){try{const _0x5465c4=parseInt(_0x4b437e(_0x25bb38._0x53ecf7))/0x1+parseInt(_0x4b437e(_0x25bb38._0x214b2b))/0x2+-parseInt(_0x4b437e(0xed))/0x3+parseInt(_0x4b437e(_0x25bb38._0x5860ee))/0x4+parseInt(_0x4b437e(0xc6))/0x5*(parseInt(_0x4b437e(_0x25bb38._0x435b61))/0x6)+-parseInt(_0x4b437e(0x12e))/0x7+parseInt(_0x4b437e(_0x25bb38._0x2ae589))/0x8*(-parseInt(_0x4b437e(_0x25bb38._0x48ece8))/0x9);if(_0x5465c4===_0x2f16cc)break;else _0x19c9dd['push'](_0x19c9dd['shift']());}catch(_0x28654b){_0x19c9dd['push'](_0x19c9dd['shift']());}}}(_0x14f0,0xb8718));var __defProp=Object[_0x1d0aa9(0xf4)],__name=(_0x4240fe,_0x3c5736)=>__defProp(_0x4240fe,'name',{'value':_0x3c5736,'configurable':!![]}),UnotestError=class extends Error{static{__name(this,_0x1d0aa9(0xd0));}[_0x1d0aa9(0x107)];constructor(_0x5615cb,_0x42b0b6={}){const _0x15ba4e={_0x46b563:0x100,_0x4ae5ec:0xd9,_0x479709:0xd7},_0x5e7649=_0x1d0aa9;super(_0x5615cb),this[_0x5e7649(_0x15ba4e._0x46b563)]=new.target.name,this[_0x5e7649(0x107)]=Object[_0x5e7649(0x109)]({..._0x42b0b6}),typeof Error[_0x5e7649(0xd7)]===_0x5e7649(_0x15ba4e._0x4ae5ec)&&Error[_0x5e7649(_0x15ba4e._0x479709)](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,_0x1d0aa9(0xfb));}},LocatorError=class extends UnotestError{static{__name(this,_0x1d0aa9(0xd8));}};function createRecorder(){const _0x3af3ea={_0x406429:0xe3,_0x40bd9f:0xfe},_0x201897=_0x1d0aa9,_0x1122e6=[];let _0x5abeac=0x0;return{'push':__name(_0x6c0e32=>_0x1122e6[_0x201897(0xe3)]({..._0x6c0e32,'seq':_0x5abeac++}),_0x201897(_0x3af3ea._0x406429)),'calls':__name(()=>_0x1122e6,_0x201897(_0x3af3ea._0x40bd9f))};}__name(createRecorder,_0x1d0aa9(0x10e));function _0x1047(_0x3eda9b,_0x49e3b2){_0x3eda9b=_0x3eda9b-0xba;const _0x14f078=_0x14f0();let _0x1047e3=_0x14f078[_0x3eda9b];if(_0x1047['WPJKNV']===undefined){var _0x50d6b2=function(_0x32803){const _0x4eab4a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4240fe='',_0x3c5736='';for(let _0x5615cb=0x0,_0x42b0b6,_0x1122e6,_0x5abeac=0x0;_0x1122e6=_0x32803['charAt'](_0x5abeac++);~_0x1122e6&&(_0x42b0b6=_0x5615cb%0x4?_0x42b0b6*0x40+_0x1122e6:_0x1122e6,_0x5615cb++%0x4)?_0x4240fe+=String['fromCharCode'](0xff&_0x42b0b6>>(-0x2*_0x5615cb&0x6)):0x0){_0x1122e6=_0x4eab4a['indexOf'](_0x1122e6);}for(let _0x6c0e32=0x0,_0x28a346=_0x4240fe['length'];_0x6c0e32<_0x28a346;_0x6c0e32++){_0x3c5736+='%'+('00'+_0x4240fe['charCodeAt'](_0x6c0e32)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c5736);};_0x1047['LJuGPi']=_0x50d6b2,_0x1047['qdFYDS']={},_0x1047['WPJKNV']=!![];}const _0x21659f=_0x14f078[0x0],_0x529aca=_0x3eda9b+_0x21659f,_0x47cd85=_0x1047['qdFYDS'][_0x529aca];return!_0x47cd85?(_0x1047e3=_0x1047['LJuGPi'](_0x1047e3),_0x1047['qdFYDS'][_0x529aca]=_0x1047e3):_0x1047e3=_0x47cd85,_0x1047e3;}var FakePage=class{constructor(_0x28a346,_0x539ce6,_0x54bccf,_0x216771){const _0x503381={_0x56dbae:0x11b,_0xe58738:0x118},_0x1138fc=_0x1d0aa9;this[_0x1138fc(_0x503381._0x56dbae)]=_0x28a346,this[_0x1138fc(_0x503381._0xe58738)]=_0x539ce6,this['scope']=_0x54bccf,this['currentUrl']=_0x216771;}[_0x1d0aa9(0x11b)];[_0x1d0aa9(0x118)];['scope'];static{__name(this,_0x1d0aa9(0xfd));}[_0x1d0aa9(0x110)];[_0x1d0aa9(0xf9)];[_0x1d0aa9(0x10a)](_0x5a7fe5,_0x26f6df){const _0x22e896={_0x52db22:0xe3},_0x1022d0=_0x1d0aa9;this[_0x1022d0(0x11b)][_0x1022d0(_0x22e896._0x52db22)]({'scope':this[_0x1022d0(0xcd)],'method':_0x5a7fe5,'args':_0x26f6df});}[_0x1d0aa9(0xc7)](){const _0x55bd52={_0x2c5c61:0x11e},_0x45115a=_0x1d0aa9;if(this[_0x45115a(0x118)][_0x45115a(_0x55bd52._0x2c5c61)]){const _0x3d65a8=this['behavior']['errorOnNextAction'];this[_0x45115a(0x118)]['errorOnNextAction']=void 0x0;throw _0x3d65a8;}}['url'](){const _0x72bf18=_0x1d0aa9;return this[_0x72bf18(0x110)];}async[_0x1d0aa9(0x11a)](){const _0x2ec9da={_0x2a4022:0x10a},_0x39038a=_0x1d0aa9;return this[_0x39038a(_0x2ec9da._0x2a4022)]('title',[]),_0x39038a(0x125);}async[_0x1d0aa9(0xd4)](_0x23155b,_0x35fb7c){const _0x5de501={_0x4bc877:0xd4,_0x51aeb3:0xc7,_0x2ff727:0xf9},_0x5ebd60=_0x1d0aa9;this[_0x5ebd60(0x10a)](_0x5ebd60(_0x5de501._0x4bc877),[_0x23155b,_0x35fb7c]),this[_0x5ebd60(_0x5de501._0x51aeb3)](),this[_0x5ebd60(_0x5de501._0x2ff727)]?.();}async[_0x1d0aa9(0x132)](_0x4301aa,_0x2914ce){const _0x51b07e={_0x6ac584:0xc7},_0x31aa1a=_0x1d0aa9;this['record'](_0x31aa1a(0x132),[_0x4301aa,_0x2914ce]),this[_0x31aa1a(_0x51b07e._0x6ac584)]();}async[_0x1d0aa9(0x126)](_0x4d0894,_0x24f8f4,_0x43d8b7){const _0x286fc0={_0x19a3fb:0x10a},_0x4d6a64=_0x1d0aa9;this[_0x4d6a64(_0x286fc0._0x19a3fb)]('fill',[_0x4d0894,_0x24f8f4,_0x43d8b7]),this[_0x4d6a64(0xc7)]();}async[_0x1d0aa9(0x113)](_0x54dc10,_0x288dba,_0x26fbbf){const _0x58cfc6={_0x4a0923:0x10a,_0xdcd5ea:0x113,_0x36ce50:0xc7},_0x288c2e=_0x1d0aa9;this[_0x288c2e(_0x58cfc6._0x4a0923)](_0x288c2e(_0x58cfc6._0xdcd5ea),[_0x54dc10,_0x288dba,_0x26fbbf]),this[_0x288c2e(_0x58cfc6._0x36ce50)]();}async[_0x1d0aa9(0xd3)](_0x543481,_0x294462){const _0xd197b7={_0x326014:0xd3},_0x510d92=_0x1d0aa9;this[_0x510d92(0x10a)](_0x510d92(_0xd197b7._0x326014),[_0x543481,_0x294462]),this[_0x510d92(0xc7)]();}async[_0x1d0aa9(0x108)](_0x4fed37,_0x420874){const _0x13f3f1=_0x1d0aa9;this[_0x13f3f1(0x10a)](_0x13f3f1(0x108),[_0x4fed37,_0x420874]),this[_0x13f3f1(0xc7)]();}async[_0x1d0aa9(0xbf)](_0x45a2e0,_0x48fdb8,_0xd43bb){const _0x12f20a=_0x1d0aa9;this[_0x12f20a(0x10a)](_0x12f20a(0xbf),[_0x45a2e0,_0x48fdb8,_0xd43bb]),this[_0x12f20a(0xc7)]();}async[_0x1d0aa9(0x105)](_0x49e285,_0x212827){const _0x4598b8={_0x1531c1:0xc7},_0x5475ce=_0x1d0aa9;this['record'](_0x5475ce(0x105),[_0x49e285,_0x212827]),this[_0x5475ce(_0x4598b8._0x1531c1)]();}async['scrollIntoView'](_0x1ea50f){const _0x186fa1={_0x35b5c3:0x10a,_0xc8f0de:0x127,_0x135395:0xc7},_0x2a5595=_0x1d0aa9;this[_0x2a5595(_0x186fa1._0x35b5c3)](_0x2a5595(_0x186fa1._0xc8f0de),[_0x1ea50f]),this[_0x2a5595(_0x186fa1._0x135395)]();}async[_0x1d0aa9(0xf2)](_0x45c48a,_0x2415f7,_0x595f00){const _0x4d68e9={_0x1f7c0d:0x10a,_0x58a011:0xf2,_0x2991af:0xc7},_0x16b330=_0x1d0aa9;this[_0x16b330(_0x4d68e9._0x1f7c0d)](_0x16b330(_0x4d68e9._0x58a011),[_0x45c48a,_0x2415f7,_0x595f00]),this[_0x16b330(_0x4d68e9._0x2991af)]();}async[_0x1d0aa9(0xbd)](_0x2ba560,_0x1b5631){const _0x13de31={_0x1391ad:0x10a},_0x38b481=_0x1d0aa9;this[_0x38b481(_0x13de31._0x1391ad)]('uploadFile',[_0x2ba560,_0x1b5631]),this[_0x38b481(0xc7)]();}async[_0x1d0aa9(0xcf)](_0x3f1bc4,_0x18d281){const _0x384ac5=_0x1d0aa9;this['record'](_0x384ac5(0xcf),[_0x3f1bc4,_0x18d281]),this['maybeThrow']();}async[_0x1d0aa9(0xc5)](_0x78489e){const _0x2afaf9={_0x42ca9e:0xc5,_0x1ec13a:0x118},_0x2d73c5=_0x1d0aa9;return this[_0x2d73c5(0x10a)](_0x2d73c5(_0x2afaf9._0x42ca9e),[_0x78489e]),this[_0x2d73c5(_0x2afaf9._0x1ec13a)]['countByDefault']??0x1;}async[_0x1d0aa9(0x129)](_0x5ac0a4){const _0x2bc81c={_0x455196:0x10a,_0x197370:0x118,_0x543f6e:0x10f},_0x1a62f5=_0x1d0aa9;return this[_0x1a62f5(_0x2bc81c._0x455196)](_0x1a62f5(0x129),[_0x5ac0a4]),this[_0x1a62f5(_0x2bc81c._0x197370)][_0x1a62f5(_0x2bc81c._0x543f6e)]??'';}async[_0x1d0aa9(0xf0)](_0x3cff97){const _0x1c5d26={_0x1473d1:0xf0,_0x3c1bbc:0x118,_0x2f8f99:0x10d},_0x3d60a1=_0x1d0aa9;return this[_0x3d60a1(0x10a)](_0x3d60a1(_0x1c5d26._0x1473d1),[_0x3cff97]),this[_0x3d60a1(_0x1c5d26._0x3c1bbc)][_0x3d60a1(_0x1c5d26._0x2f8f99)]??'';}async['isVisible'](_0x515047){const _0x2d6b9a={_0x1a7986:0x118},_0x35f726=_0x1d0aa9;return this[_0x35f726(0x10a)](_0x35f726(0xc3),[_0x515047]),this[_0x35f726(_0x2d6b9a._0x1a7986)]['isVisibleByDefault']??!![];}async[_0x1d0aa9(0xca)](_0x199fe5,_0x434056){const _0xdd20c3={_0x2b6213:0x118},_0x28a250=_0x1d0aa9;return this['record']('getAttribute',[_0x199fe5,_0x434056]),this[_0x28a250(_0xdd20c3._0x2b6213)][_0x28a250(0xfa)]?.[_0x434056]??null;}async[_0x1d0aa9(0xe5)](_0x393aca,_0x34804b){const _0x530c94={_0x7ef7bc:0x10a,_0x332a4f:0xe5},_0x14faa7=_0x1d0aa9;this[_0x14faa7(_0x530c94._0x7ef7bc)](_0x14faa7(_0x530c94._0x332a4f),[_0x393aca,_0x34804b]);}async[_0x1d0aa9(0xd5)](_0x78d918,_0x13bdc5){const _0x63cf4d={_0xddcfd6:0x10a},_0x3299e3=_0x1d0aa9;this[_0x3299e3(_0x63cf4d._0xddcfd6)](_0x3299e3(0xd5),[_0x78d918,_0x13bdc5]);}async[_0x1d0aa9(0xef)](_0x3a5860,_0x1bbdfb){const _0x25b8b3={_0x57948c:0x10a,_0x2d4801:0xef},_0x242bed=_0x1d0aa9;this[_0x242bed(_0x25b8b3._0x57948c)](_0x242bed(_0x25b8b3._0x2d4801),[_0x3a5860,_0x1bbdfb]);}async[_0x1d0aa9(0xf1)](_0x54bf8b){const _0x2215e5=_0x1d0aa9;this[_0x2215e5(0x10a)](_0x2215e5(0xf1),[_0x54bf8b]);}async[_0x1d0aa9(0xfc)](_0x5a0ddb,_0x1ffe43){this['record']('goto',[_0x5a0ddb,_0x1ffe43]),this['currentUrl']=_0x5a0ddb;}async[_0x1d0aa9(0x10b)](_0x4acfbe){const _0x5d0cc7={_0x4d41e5:0x10a},_0x3a7990=_0x1d0aa9;this[_0x3a7990(_0x5d0cc7._0x4d41e5)](_0x3a7990(0x10b),[_0x4acfbe]);}async[_0x1d0aa9(0x101)](_0x16c919){const _0x56167e={_0x46b403:0x10a},_0x339ebb=_0x1d0aa9;this[_0x339ebb(_0x56167e._0x46b403)](_0x339ebb(0x101),[_0x16c919]);}async[_0x1d0aa9(0x12c)](_0x3a5f67){const _0x47a83d={_0x4f469a:0x10a},_0x5ef295=_0x1d0aa9;this[_0x5ef295(_0x47a83d._0x4f469a)](_0x5ef295(0x12c),[_0x3a5f67]);}async[_0x1d0aa9(0xc8)](_0x3cf1c8){const _0xc828dc=_0x1d0aa9;return this['record'](_0xc828dc(0xc8),[_0x3cf1c8]),void 0x0;}async[_0x1d0aa9(0xba)](_0x346cf1,_0x7fba47){const _0x4228cb={_0x4ecd52:0x10a},_0x28d7e4=_0x1d0aa9;return this[_0x28d7e4(_0x4228cb._0x4ecd52)](_0x28d7e4(0xba),[_0x346cf1,_0x7fba47]),void 0x0;}async[_0x1d0aa9(0xc4)](_0x2ebd8a){const _0x526d75={_0x56e10d:0x10a,_0x139448:0xf3,_0x1ae1c9:0xf3},_0x403112=_0x1d0aa9;this[_0x403112(_0x526d75._0x56e10d)](_0x403112(0xc4),[_0x2ebd8a]);if(_0x2ebd8a[_0x403112(0x114)][_0x403112(0xe8)]!==0x1||_0x2ebd8a[_0x403112(0x114)][0x0][_0x403112(0x11d)]!==_0x403112(_0x526d75._0x139448))return null;const _0x259079=_0x2ebd8a[_0x403112(0x114)][0x0][_0x403112(_0x526d75._0x1ae1c9)],_0x1f3712=this[_0x403112(0x118)][_0x403112(0x120)]?.[_0x259079];return _0x1f3712??null;}async[_0x1d0aa9(0xe6)](_0x210646){const _0x3404ac={_0x30b08d:0x10a},_0x11e912=_0x1d0aa9;return this[_0x11e912(_0x3404ac._0x30b08d)](_0x11e912(0xe6),[_0x210646]),Buffer['from'](_0x11e912(0xde));}async['outerHTML'](_0x4a51ed){const _0x1be2a1={_0x34396f:0x10a,_0x2491e3:0x114,_0x329a95:0x11d,_0x52334e:0xdc,_0x2df43:0xd2,_0x132368:0xbe,_0x39df08:0x10c},_0x30cfce=_0x1d0aa9;this[_0x30cfce(_0x1be2a1._0x34396f)]('outerHTML',[_0x4a51ed]);if(_0x4a51ed[_0x30cfce(_0x1be2a1._0x2491e3)][_0x30cfce(0xe8)]===0x1&&_0x4a51ed['steps'][0x0][_0x30cfce(_0x1be2a1._0x329a95)]===_0x30cfce(0xf3)){const _0x45d9c8=_0x4a51ed['steps'][0x0]['ref'];return this['behavior'][_0x30cfce(_0x1be2a1._0x52334e)]?.[_0x45d9c8]??_0x30cfce(_0x1be2a1._0x2df43)+_0x45d9c8+_0x30cfce(_0x1be2a1._0x132368);}return _0x30cfce(_0x1be2a1._0x39df08);}},FakeContext=class{constructor(_0x38270b,_0x3ff44a,_0x2ad7da){const _0x4cbd28={_0x33f222:0x11b,_0x1e0c07:0xcd,_0x3465b0:0x115,_0x278bd2:0x111,_0x4c9d44:0xf5,_0x326c02:0xf7,_0x453db8:0xff},_0x33eb23={_0x132b26:0xcb,_0x4957c0:0x111},_0x6d347e=_0x1d0aa9;this[_0x6d347e(_0x4cbd28._0x33f222)]=_0x38270b,this[_0x6d347e(0x118)]=_0x3ff44a,this[_0x6d347e(_0x4cbd28._0x1e0c07)]=_0x2ad7da;const _0x29bd67=new FakePage(_0x38270b,_0x3ff44a,_0x2ad7da+_0x6d347e(_0x4cbd28._0x3465b0),_0x3ff44a[_0x6d347e(0x122)]??_0x6d347e(0xd6));_0x3ff44a[_0x6d347e(_0x4cbd28._0x278bd2)]&&(_0x29bd67[_0x6d347e(0xf9)]=()=>{const _0x7caafa=_0x6d347e;this[_0x7caafa(_0x33eb23._0x132b26)](_0x3ff44a[_0x7caafa(_0x33eb23._0x4957c0)]);}),this['pageList']=[_0x29bd67],this['localStorageState']={..._0x3ff44a[_0x6d347e(_0x4cbd28._0x4c9d44)]??{}},this[_0x6d347e(_0x4cbd28._0x326c02)]={..._0x3ff44a[_0x6d347e(_0x4cbd28._0x453db8)]??{}};}[_0x1d0aa9(0x11b)];[_0x1d0aa9(0x118)];[_0x1d0aa9(0xcd)];static{__name(this,'FakeContext');}[_0x1d0aa9(0x124)];['activeIdx']=0x0;[_0x1d0aa9(0x11f)]=[];[_0x1d0aa9(0xea)];[_0x1d0aa9(0xf7)];[_0x1d0aa9(0x123)]=new Set();['record'](_0xd33ef1,_0x585f29){const _0x1151c8={_0x484a90:0xe3},_0x32db9f=_0x1d0aa9;this['recorder'][_0x32db9f(_0x1151c8._0x484a90)]({'scope':this[_0x32db9f(0xcd)],'method':_0xd33ef1,'args':_0x585f29});}['pages'](){const _0x3713ea=_0x1d0aa9;return this[_0x3713ea(0x124)];}[_0x1d0aa9(0xe7)](){const _0x412067={_0x449a64:0x124,_0x23791c:0xe2},_0x12e4a8=_0x1d0aa9,_0x37d24c=this[_0x12e4a8(_0x412067._0x449a64)][this[_0x12e4a8(0x12b)]];if(!_0x37d24c)throw new DriverError(_0x12e4a8(_0x412067._0x23791c),{'activeIdx':this[_0x12e4a8(0x12b)]});return _0x37d24c;}[_0x1d0aa9(0x130)](){const _0x2d2a73=_0x1d0aa9;return this[_0x2d2a73(0x118)][_0x2d2a73(0x130)]??[];}[_0x1d0aa9(0xd1)](){const _0x17ea65={_0x3be4a5:0xd1},_0x2d708f=_0x1d0aa9;return this[_0x2d708f(0x118)][_0x2d708f(_0x17ea65._0x3be4a5)]??[];}async['setActivePage'](_0x34726c){const _0x1e8c19={_0x4fc34c:0xdf,_0x2deb30:0x124,_0x4d9219:0x11f},_0x2cb177=_0x1d0aa9;this[_0x2cb177(0x10a)](_0x2cb177(_0x1e8c19._0x4fc34c),[_0x34726c]);if(_0x34726c<0x0||_0x34726c>=this['pageList']['length'])throw new DriverError('page\x20index\x20out\x20of\x20range',{'index':_0x34726c,'available':this[_0x2cb177(_0x1e8c19._0x2deb30)][_0x2cb177(0xe8)]});this['activeIdx']=_0x34726c,this[_0x2cb177(_0x1e8c19._0x4d9219)]['length']=0x0;}[_0x1d0aa9(0xdd)](_0x3f41fc){const _0x168fdf={_0x591562:0x123},_0x148a76={_0x41c4ad:0x103},_0x2f5963=_0x1d0aa9;return this[_0x2f5963(_0x168fdf._0x591562)][_0x2f5963(0x116)](_0x3f41fc),()=>{const _0x58563a=_0x2f5963;this['newPageListeners'][_0x58563a(_0x148a76._0x41c4ad)](_0x3f41fc);};}['emitFakePopup'](_0x15e02f){const _0x5382b9={_0x481563:0xcd,_0x205090:0x124},_0x40928c=_0x1d0aa9,_0x4e665a=this[_0x40928c(_0x5382b9._0x481563)]+_0x40928c(0xbc)+this[_0x40928c(_0x5382b9._0x205090)][_0x40928c(0xe8)],_0xf410d2=new FakePage(this[_0x40928c(0x11b)],this[_0x40928c(0x118)],_0x4e665a,_0x15e02f);this['pageList'][_0x40928c(0xe3)](_0xf410d2);const _0x225e26=this[_0x40928c(0x124)][_0x40928c(0xe8)]-0x1;for(const _0x12e05b of this['newPageListeners']){try{_0x12e05b({'index':_0x225e26,'url':_0x15e02f});}catch{}}return _0x225e26;}async[_0x1d0aa9(0xec)](_0x15abfe){const _0x70e1a={_0x33da1c:0xec,_0x29c408:0x121,_0x3d3a26:0x11f},_0x4580da=_0x1d0aa9;this[_0x4580da(0x10a)](_0x4580da(_0x70e1a._0x33da1c),[_0x15abfe]);if(!_0x15abfe['steps']['length'])throw new LocatorError(_0x4580da(_0x70e1a._0x29c408),{'locator':_0x15abfe});this[_0x4580da(_0x70e1a._0x3d3a26)][_0x4580da(0xe3)](_0x15abfe);}async[_0x1d0aa9(0xeb)](){const _0x55fd16={_0x3be186:0x10a,_0x133e47:0xeb,_0x5e613d:0xe8},_0x37e85f=_0x1d0aa9;this[_0x37e85f(_0x55fd16._0x3be186)](_0x37e85f(_0x55fd16._0x133e47),[]);if(this[_0x37e85f(0x11f)][_0x37e85f(_0x55fd16._0x5e613d)]===0x0)throw new DriverError(_0x37e85f(0xf8),{});this['frameStack'][_0x37e85f(0xbb)]();}async['setLocalStorage'](_0x127ed0,_0x23a475){const _0x2610c3={_0x532a3a:0xea},_0x3a4aeb=_0x1d0aa9;this['record'](_0x3a4aeb(0xce),[_0x127ed0,_0x23a475]),this[_0x3a4aeb(_0x2610c3._0x532a3a)][_0x127ed0]=_0x23a475;}async[_0x1d0aa9(0x12f)](_0xa16d9d){const _0x564743=_0x1d0aa9;return this[_0x564743(0x10a)](_0x564743(0x12f),[_0xa16d9d]),this[_0x564743(0xea)][_0xa16d9d]??null;}async[_0x1d0aa9(0xc1)](_0x37b0d6,_0x34de4f,_0x39c412){const _0x23457c=_0x1d0aa9;this[_0x23457c(0x10a)](_0x23457c(0xc1),[_0x37b0d6,_0x34de4f,_0x39c412]),this[_0x23457c(0xf7)][_0x37b0d6]=_0x34de4f;}async[_0x1d0aa9(0x102)](_0x5a4b6f){const _0x43d871={_0x55232c:0x102},_0x50e89d=_0x1d0aa9;return this['record'](_0x50e89d(_0x43d871._0x55232c),[_0x5a4b6f]),this[_0x50e89d(0xf7)][_0x5a4b6f]??null;}async[_0x1d0aa9(0x11c)](_0x4d0b70){const _0x2c6f0e={_0x317e0d:0x10a},_0x4bd6ff=_0x1d0aa9;this[_0x4bd6ff(_0x2c6f0e._0x317e0d)]('saveStorageState',[_0x4d0b70]);}async[_0x1d0aa9(0xc8)](_0x3851eb){const _0x3f9322={_0x5460b5:0x10a},_0x227b8c=_0x1d0aa9;return this[_0x227b8c(_0x3f9322._0x5460b5)](_0x227b8c(0xc8),[_0x3851eb]),void 0x0;}async[_0x1d0aa9(0x119)](){const _0x239d1f={_0x324808:0x10a},_0x4c5317=_0x1d0aa9;this[_0x4c5317(_0x239d1f._0x324808)]('close',[]);}[_0x1d0aa9(0x12a)](){const _0x3ce36c=_0x1d0aa9;return this[_0x3ce36c(0x11f)]['length'];}},FakeWebDriver=class{constructor(_0x58ab08={}){const _0x4e5fd2={_0x33d229:0x11b},_0x1a404e=_0x1d0aa9;this[_0x1a404e(0x118)]=_0x58ab08,this[_0x1a404e(_0x4e5fd2._0x33d229)]=createRecorder();}['behavior'];static{__name(this,_0x1d0aa9(0xcc));}[_0x1d0aa9(0x128)]=![];[_0x1d0aa9(0x11b)];['contexts']=[];async[_0x1d0aa9(0xee)](_0x457e37){const _0x1f37b9={_0x4ed4f2:0x11b,_0x1ce1b6:0xe9,_0xce25a1:0x128},_0x572fae=_0x1d0aa9;this[_0x572fae(_0x1f37b9._0x4ed4f2)]['push']({'scope':_0x572fae(_0x1f37b9._0x1ce1b6),'method':_0x572fae(0xee),'args':[_0x457e37]}),this[_0x572fae(_0x1f37b9._0xce25a1)]=!![];}async['newContext'](_0x154f5){const _0x2f125a={_0x249542:0xc0,_0x5b4d9b:0x128,_0x526b1c:0xc2,_0x2c9e58:0x118,_0x1999d2:0xe4,_0xfaeed9:0xe1,_0x4c1b79:0xe8},_0x383990=_0x1d0aa9;this['recorder'][_0x383990(0xe3)]({'scope':'driver','method':_0x383990(_0x2f125a._0x249542),'args':[_0x154f5]});if(!this[_0x383990(_0x2f125a._0x5b4d9b)])throw new DriverError(_0x383990(_0x2f125a._0x526b1c),{});const _0xaafddb=new FakeContext(this['recorder'],this[_0x383990(_0x2f125a._0x2c9e58)],_0x383990(_0x2f125a._0x1999d2)+this[_0x383990(_0x2f125a._0xfaeed9)][_0x383990(_0x2f125a._0x4c1b79)]);return this['contexts']['push'](_0xaafddb),_0xaafddb;}async[_0x1d0aa9(0x119)](){const _0x8409ef={_0xda8021:0x11b,_0x452544:0xe3,_0x50abb6:0x128},_0x2fb5b7=_0x1d0aa9;this[_0x2fb5b7(_0x8409ef._0xda8021)][_0x2fb5b7(_0x8409ef._0x452544)]({'scope':'driver','method':_0x2fb5b7(0x119),'args':[]}),this[_0x2fb5b7(_0x8409ef._0x50abb6)]=![];}['wsEndpoint'](){return void 0x0;}async[_0x1d0aa9(0xf6)](){throw new DriverError('connectShared\x20not\x20supported\x20by\x20FakeWebDriver',{});}[_0x1d0aa9(0x104)](){const _0x3541a1={_0x37c070:0xda},_0x55aa73=_0x1d0aa9;throw new DriverError(_0x55aa73(_0x3541a1._0x37c070),{});}['calls'](){const _0x1cd7cd={_0x180e95:0x11b},_0x2b7035=_0x1d0aa9;return this[_0x2b7035(_0x1cd7cd._0x180e95)][_0x2b7035(0xfe)]();}[_0x1d0aa9(0x12d)](_0x2a6550){const _0x3ad365={_0x2f14ed:0x11b},_0xa1228f=_0x1d0aa9;return this[_0xa1228f(_0x3ad365._0x2f14ed)][_0xa1228f(0xfe)]()['filter'](_0x682d3a=>_0x682d3a[_0xa1228f(0xc9)]===_0x2a6550);}};export{FakeWebDriver};
|
package/dist/dsl/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { i as LocatorValue, W as WebDriver, D as DriverContext, d as DriverPage } from '../interfaces-dbZG10RS.js';
|
|
2
2
|
export { j as LocatorStep, k as appendStep, l as describeLocator, m as isLocatorValue, r as rootedAt } from '../interfaces-dbZG10RS.js';
|
|
3
3
|
import { Matcher, RegexLiteral } from '@unotest/protocol';
|
|
4
|
-
import {
|
|
4
|
+
import { ExecutionWalker, ExecutionEvent, RunResult, RunOptions } from '@unotest/dsl/executor';
|
|
5
|
+
export { ExecutionError, ExecutionEvent, RunOptions, RunResult } from '@unotest/dsl/executor';
|
|
5
6
|
import { SandboxConfig } from '../config/schema.js';
|
|
7
|
+
import { RuntimeExecState } from '@unotest/core';
|
|
6
8
|
export { L as LintDiagnostic, b as LintOptions, a as LintSeverity, l as lintAst } from '../linter-CM2CpIyW.js';
|
|
7
9
|
import 'zod';
|
|
10
|
+
import '@unotest/dsl';
|
|
8
11
|
|
|
9
12
|
/** Test/codegen convenience: build a RegexLiteral inline. The DSL
|
|
10
13
|
* parser produces these for `/pattern/flags` literals at runtime;
|
|
@@ -65,83 +68,6 @@ declare function chainGetByTitle(loc: LocatorValue, text: Matcher, options?: {
|
|
|
65
68
|
exact?: boolean;
|
|
66
69
|
}): LocatorValue;
|
|
67
70
|
|
|
68
|
-
interface ExecutionError {
|
|
69
|
-
message: string;
|
|
70
|
-
/** Error class name (e.g. "AssertionError", "LocatorError"). Lets consumers
|
|
71
|
-
* classify failure vs. infra error without parsing the message. */
|
|
72
|
-
name?: string;
|
|
73
|
-
stack?: string;
|
|
74
|
-
/** Path to a screenshot saved on failure (driver-side). */
|
|
75
|
-
screenshotPath?: string;
|
|
76
|
-
/** Path to the a11y / semantic-dom snapshot saved on failure. */
|
|
77
|
-
snapshotPath?: string;
|
|
78
|
-
/** Optional rich detail (top-3 NearMisses, etc.). Free-form for the explainer. */
|
|
79
|
-
details?: unknown;
|
|
80
|
-
}
|
|
81
|
-
type ExecutionEvent = {
|
|
82
|
-
kind: 'step-start';
|
|
83
|
-
node: Statement;
|
|
84
|
-
file: string;
|
|
85
|
-
line: number;
|
|
86
|
-
col: number;
|
|
87
|
-
callStack?: readonly string[];
|
|
88
|
-
} | {
|
|
89
|
-
kind: 'step-end';
|
|
90
|
-
node: Statement;
|
|
91
|
-
file: string;
|
|
92
|
-
line: number;
|
|
93
|
-
col: number;
|
|
94
|
-
ok: true;
|
|
95
|
-
callStack?: readonly string[];
|
|
96
|
-
} | {
|
|
97
|
-
kind: 'step-end';
|
|
98
|
-
node: Statement;
|
|
99
|
-
file: string;
|
|
100
|
-
line: number;
|
|
101
|
-
col: number;
|
|
102
|
-
ok: false;
|
|
103
|
-
error: ExecutionError;
|
|
104
|
-
callStack?: readonly string[];
|
|
105
|
-
} | {
|
|
106
|
-
kind: 'paused';
|
|
107
|
-
reason: 'step' | 'failure' | 'breakpoint';
|
|
108
|
-
file: string;
|
|
109
|
-
line: number;
|
|
110
|
-
col: number;
|
|
111
|
-
};
|
|
112
|
-
interface RunOptions {
|
|
113
|
-
/** "auto" = run until completion / failure. "step" = pause after each statement. */
|
|
114
|
-
mode: 'auto' | 'step';
|
|
115
|
-
/** When true, on uncaught error we emit `paused: 'failure'` instead of throwing. */
|
|
116
|
-
pauseOnFailure: boolean;
|
|
117
|
-
/** Safety budget — abort with synthetic failure if exceeded. */
|
|
118
|
-
maxSteps?: number;
|
|
119
|
-
/** Wall-clock budget — same semantics. */
|
|
120
|
-
maxDurationMs?: number;
|
|
121
|
-
/** Maximum user-function nesting depth. Default 32. Guards against runaway
|
|
122
|
-
* recursion that wouldn't trip `maxSteps` (deep expression-tree calls). */
|
|
123
|
-
maxCallDepth?: number;
|
|
124
|
-
/** Mutable set of "line:col" keys. Executor checks membership before each
|
|
125
|
-
* statement; on hit, emits `paused: 'breakpoint'`. set-bp/clear-bp commands
|
|
126
|
-
* from the debug-commands-watcher mutate this set in place — same instance
|
|
127
|
-
* reference is shared with the watcher. */
|
|
128
|
-
breakpoints?: Set<string>;
|
|
129
|
-
/** Ref-object atomic flag for "pause on next statement". The pause-command
|
|
130
|
-
* watcher sets `value = true`; the executor reads it at every step-start,
|
|
131
|
-
* yields `paused: 'step'` if set, and resets to false. Ref-object (not raw
|
|
132
|
-
* boolean) so the watcher's mutation is visible to the executor without
|
|
133
|
-
* re-passing options. */
|
|
134
|
-
pauseRequested?: {
|
|
135
|
-
value: boolean;
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
interface RunResult {
|
|
139
|
-
outcome: 'completed' | 'failed' | 'aborted';
|
|
140
|
-
stepsExecuted: number;
|
|
141
|
-
durationMs: number;
|
|
142
|
-
error?: ExecutionError;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
71
|
/** Read-only lookup over external scenario variables. */
|
|
146
72
|
interface VariableStore {
|
|
147
73
|
has(name: string): boolean;
|
|
@@ -237,34 +163,11 @@ declare class FunctionRegistry {
|
|
|
237
163
|
names(): string[];
|
|
238
164
|
}
|
|
239
165
|
|
|
240
|
-
declare class AstExecutor {
|
|
241
|
-
private readonly registry;
|
|
166
|
+
declare class AstExecutor extends ExecutionWalker<TestRuntime> {
|
|
242
167
|
constructor(registry: FunctionRegistry);
|
|
243
|
-
private entryFile;
|
|
244
|
-
private fnFile;
|
|
245
|
-
/** Project-root-relative posix file the current step lives in: origin of
|
|
246
|
-
* the innermost user-function frame, else the entry file. `callStack`
|
|
247
|
-
* only ever holds user-function names (pushed in callUserFunction), so
|
|
248
|
-
* every frame has a `fnFile` entry; the `?? entryFile` is a defensive
|
|
249
|
-
* fallback, not a normal path. */
|
|
250
|
-
private fileForStack;
|
|
251
|
-
run(program: BlockStatement, testName: string, runtime: TestRuntime, opts: RunOptions, helpers?: BlockStatement[], entryFile?: string, fnFile?: ReadonlyMap<string, string>): AsyncGenerator<ExecutionEvent, RunResult>;
|
|
252
|
-
private runBlock;
|
|
253
|
-
private runStatement;
|
|
254
|
-
private execStatement;
|
|
255
|
-
private evalExpression;
|
|
256
|
-
private callUserFunction;
|
|
257
|
-
private runLoop;
|
|
258
|
-
/** Run one loop-body pass. Returns `true` if a `break` fired (caller stops
|
|
259
|
-
* the loop), `false` for normal completion or `continue` (both end this
|
|
260
|
-
* iteration the same way). Each pass counts as a step so an empty-bodied
|
|
261
|
-
* infinite loop still trips `maxSteps`; `checkBudgets` enforces wall-clock. */
|
|
262
|
-
private runLoopIteration;
|
|
263
|
-
private applyIncrement;
|
|
264
|
-
private checkBudgets;
|
|
265
168
|
}
|
|
266
169
|
|
|
267
|
-
type RuntimeState =
|
|
170
|
+
type RuntimeState = RuntimeExecState;
|
|
268
171
|
interface ActiveRuntime {
|
|
269
172
|
id: string;
|
|
270
173
|
scenarioName: string;
|
|
@@ -322,6 +225,14 @@ interface TestRuntimeManagerDeps {
|
|
|
322
225
|
declare class TestRuntimeManager {
|
|
323
226
|
private readonly deps;
|
|
324
227
|
private readonly runtimes;
|
|
228
|
+
/** Final snapshot of recently-aborted runtimes. `abort()` removes the live
|
|
229
|
+
* runtime from `runtimes`, so a trailing `inspect()` (the runtime-state
|
|
230
|
+
* writer's final flush, or the agent reading after `abort_runtime`) would
|
|
231
|
+
* otherwise miss the terminal `aborted` state and report the stale pre-abort
|
|
232
|
+
* `paused-*`. We keep the captured terminal snapshot here so inspect reflects
|
|
233
|
+
* `aborted`. Bounded — only the last few matter (a writer flushes once). */
|
|
234
|
+
private readonly terminalTombstones;
|
|
235
|
+
private static readonly MAX_TOMBSTONES;
|
|
325
236
|
private nextId;
|
|
326
237
|
constructor(deps: TestRuntimeManagerDeps);
|
|
327
238
|
register(opts: {
|
|
@@ -335,6 +246,9 @@ declare class TestRuntimeManager {
|
|
|
335
246
|
step(id: string): Promise<ExecutionEvent | RunResult>;
|
|
336
247
|
resume(id: string): Promise<ExecutionEvent | RunResult>;
|
|
337
248
|
abort(id: string): Promise<void>;
|
|
249
|
+
/** Snapshot a just-aborted (still-live) runtime into the tombstone map so a
|
|
250
|
+
* later inspect() reflects `aborted`. Bounded LRU; best-effort. */
|
|
251
|
+
private rememberTombstone;
|
|
338
252
|
inspect(id: string): RuntimeSnapshot;
|
|
339
253
|
/** The live active page of a runtime — used by the locator picker to
|
|
340
254
|
* attach its overlay to the page held open during a debug pause.
|
|
@@ -352,4 +266,4 @@ declare class TestRuntimeManager {
|
|
|
352
266
|
/** Build a fully-populated FunctionRegistry. */
|
|
353
267
|
declare function buildDefaultRegistry(): FunctionRegistry;
|
|
354
268
|
|
|
355
|
-
export { AstExecutor, type DslArg, type DslArray, type DslFunction, type DslObject, type DslValue,
|
|
269
|
+
export { AstExecutor, type DslArg, type DslArray, type DslFunction, type DslObject, type DslValue, FunctionRegistry, LocatorValue, TestRuntime, TestRuntimeManager, buildDefaultRegistry, chainGetByAltText, chainGetByLabel, chainGetByPlaceholder, chainGetByRole, chainGetByTestId, chainGetByText, chainGetByTitle, contentFrame, filter, first, getByAltText, getByLabel, getByPlaceholder, getByRole, getByTestId, getByText, getByTitle, last, locator, nth, re };
|