@unotest/web 0.11.0 → 0.12.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.
@@ -306,7 +306,7 @@ What's **not allowed** (parser / runtime will reject): `import` /
306
306
  `export` / `require`, top-level `await`, `class`, JSX, `while` /
307
307
  `do…while` / `continue` / `++`. Bounded `for (i = 0; i < N; i = i + 1)`
308
308
  loops ARE supported, and `break` is legal inside a loop body — poll with
309
- `for` + `if (…) { break; }` + `pause(ms) // reason: …`. Index access
309
+ `for` + `if (…) { break; }` + `pause(ms) // lint-ok: …`. Index access
310
310
  reads data (`docs[0].count`, bare variable only, never a Locator);
311
311
  `obj.prop[i]` does not parse — assign the member first:
312
312
  `m = state.matches; last = m[m.length - 1];`. `arr[i] = v` stays
@@ -379,7 +379,7 @@ Disambiguate with `.filter({hasText: '…'})` or `.filter({has: …})` —
379
379
  Waits:
380
380
  - `waitFor(loc, opts?)`, `waitForText(text, opts?)`,
381
381
  `waitForCount(loc, n, opts?)`, `waitForUrl(pattern)`, `pause(ms)` —
382
- `pause` requires `// reason: <why>` comment immediately above (linter
382
+ `pause` requires a trailing `// lint-ok: <why>` comment on the same line (linter
383
383
  flags `lint:pause-explicit` otherwise).
384
384
  - `waitForText` waits for ≥1 VISIBLE occurrence (repeated text in a feed
385
385
  is fine); substring by default — `{exact: true}` or a regex
@@ -397,7 +397,8 @@ State reads:
397
397
  `getInputValue(loc)`.
398
398
 
399
399
  Sandbox primitives:
400
- - `shell("cmd", "arg", )` — `execFile` style, no shell interpretation.
400
+ - `shell("cmd", "arg", …, options?)` — `execFile` style, no shell interpretation. Non-zero exit fails the step; pass `{allowNonZero: true}` to inspect `res.code` yourself. Wall-clock budget `{timeoutMs}` (default 120s).
401
+ - `waitForFile(path, pattern?, {timeoutMs})` — poll a file until it exists / matches; use it to await output of background processes started via `shell()`.
401
402
  - `dbQuery(sql, …params)`, `dbExec(sql, …params)` — parameterized.
402
403
  - `apiCall(method, path, body?, headers?, opts?)` — path-only against
403
404
  `sandbox.apiBaseUrl`; another host via `{base: 'API_BASE_X'}` — the
@@ -411,7 +412,7 @@ Escape hatch:
411
412
  - `evaluate(\`js body\`, …args)` — raw backticks, no `${}`. Linter
412
413
  warns `lint:evaluate-discouraged`. Use only when nothing above fits.
413
414
 
414
- Time helpers: `nowMs()`, `today()`, `daysFromNow(n)`.
415
+ Time helpers: `nowMs()`, `today()`, `daysFromNow(n)`. Marker helper: `randomWord(len)` — random lowercase letters, digit-free.
415
416
 
416
417
  ## Helpers convention
417
418
 
@@ -437,7 +437,7 @@ What's **not allowed** (parser / runtime will reject): `import` /
437
437
  `export` / `require`, top-level `await`, `class`, JSX, `while` /
438
438
  `do…while` / `continue` / `++`. Bounded `for (i = 0; i < N; i = i + 1)`
439
439
  loops ARE supported, and `break` is legal inside a loop body — poll with
440
- `for` + `if (…) { break; }` + `pause(ms) // reason: …`. Index access
440
+ `for` + `if (…) { break; }` + `pause(ms) // lint-ok: …`. Index access
441
441
  reads data (`docs[0].count`, bare variable only, never a Locator);
442
442
  `obj.prop[i]` does not parse — assign the member first:
443
443
  `m = state.matches; last = m[m.length - 1];`. `arr[i] = v` stays
@@ -510,7 +510,7 @@ Disambiguate with `.filter({hasText: '…'})` or `.filter({has: …})` —
510
510
  Waits:
511
511
  - `waitFor(loc, opts?)`, `waitForText(text, opts?)`,
512
512
  `waitForCount(loc, n, opts?)`, `waitForUrl(pattern)`, `pause(ms)` —
513
- `pause` requires `// reason: <why>` comment immediately above (linter
513
+ `pause` requires a trailing `// lint-ok: <why>` comment on the same line (linter
514
514
  flags `lint:pause-explicit` otherwise).
515
515
  - `waitForText` waits for ≥1 VISIBLE occurrence (repeated text in a feed
516
516
  is fine); substring by default — `{exact: true}` or a regex
@@ -528,7 +528,8 @@ State reads:
528
528
  `getInputValue(loc)`.
529
529
 
530
530
  Sandbox primitives:
531
- - `shell("cmd", "arg", )` — `execFile` style, no shell interpretation.
531
+ - `shell("cmd", "arg", …, options?)` — `execFile` style, no shell interpretation. Non-zero exit fails the step; pass `{allowNonZero: true}` to inspect `res.code` yourself. Wall-clock budget `{timeoutMs}` (default 120s).
532
+ - `waitForFile(path, pattern?, {timeoutMs})` — poll a file until it exists / matches; use it to await output of background processes started via `shell()`.
532
533
  - `dbQuery(sql, …params)`, `dbExec(sql, …params)` — parameterized.
533
534
  - `apiCall(method, path, body?, headers?, opts?)` — path-only against
534
535
  `sandbox.apiBaseUrl`; another host via `{base: 'API_BASE_X'}` — the
@@ -542,7 +543,7 @@ Escape hatch:
542
543
  - `evaluate(\`js body\`, …args)` — raw backticks, no `${}`. Linter
543
544
  warns `lint:evaluate-discouraged`. Use only when nothing above fits.
544
545
 
545
- Time helpers: `nowMs()`, `today()`, `daysFromNow(n)`.
546
+ Time helpers: `nowMs()`, `today()`, `daysFromNow(n)`. Marker helper: `randomWord(len)` — random lowercase letters, digit-free.
546
547
 
547
548
  ## Helpers convention
548
549
 
package/CHANGELOG.md CHANGED
@@ -5,6 +5,82 @@ 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.12.0] - 2026-08-14
9
+
10
+ ### Minor Changes
11
+
12
+ - 479aa25: The active variable environment is now agent-visible instead of
13
+ docs-only. `explore_start` and `run_test` replies carry an
14
+ `environment` field: the active env name (`UNOTEST_ENV`, `null` = base)
15
+ plus every `.env` / `.secrets` layer file with an `exists` flag. A
16
+ missing external variable error now also lists the searched layers
17
+ (`Looked in environment "dev" (UNOTEST_ENV): unotest/.env,
18
+ unotest/.env.dev (no such file)`). Tool descriptions for `run_test` /
19
+ `explore_start` explain the env mechanism — MCP sessions inherit
20
+ `UNOTEST_ENV` from the server process (set it in the client's `env`
21
+ block); CLI runs take `--env <name>`. The shipped agent guide gains a
22
+ "Variable environments" section.
23
+ - 479aa25: Feedback batch from a real-world integration (bot-service): shell()
24
+ safety, run diagnostics, boolean-attribute probes, linter ergonomics.
25
+
26
+ **BREAKING — `shell()` fails the step on a non-zero exit code.**
27
+ Previously a non-zero exit resolved silently and a forgotten `res.code`
28
+ check produced false-green tests. Migration: calls where non-zero is
29
+ expected (probes, `grep -q`) pass `{allowNonZero: true}` as the last
30
+ argument and keep checking `res.code`; calls that asserted
31
+ `assertTrue(out.code == 0, ...)` can drop the assert. More shell()
32
+ hardening: a missing binary is a distinct "failed to start" error (was a
33
+ fake `code: 1`), output over 10 MiB fails loudly (was silent
34
+ truncation), and every call has a wall-clock budget
35
+ (`sandbox.shellTimeoutMs`, default 120 s, or per-call `{timeoutMs}`) —
36
+ a detached grandchild holding the stdio pipes no longer hangs the
37
+ scenario forever; the timeout error explains the detach recipe.
38
+
39
+ New capabilities:
40
+
41
+ - `waitForFile(path, pattern?, {timeoutMs})` — poll a file until it
42
+ exists / contains a substring or regex; the file-side `waitForText`
43
+ for background processes. Returns the content.
44
+ - `sandbox.exportSecrets: [names]` — explicit allowlist of `.secrets*`
45
+ variables exported into `shell()` subprocess env (still masked in
46
+ logs). Secrets stay out of `process.env` otherwise.
47
+ - `isDisabled(loc)` / `isEnabled(loc)` — honest disabled probe (native
48
+ `:disabled` incl. fieldset inheritance, or `aria-disabled`);
49
+ `hasAttribute(loc, name)` — presence probe for boolean attributes
50
+ (`getAttribute` reads `""` for present and absent alike).
51
+ - Generators: `randomWord(len)` (letters only — digit-free markers),
52
+ `nowMs()`, `today()`, `daysFromNow(n)` (previously documented in the
53
+ skills but not implemented).
54
+ - Failed runs report the enclosing step: `✗ test: … in step "…"` in the
55
+ console, `stepLabel` in the failure bundle and `inspect_runtime`.
56
+ - Every CLI run prints a one-line header: active environment, layer
57
+ files (missing ones flagged) and effective `baseUrl`; `run_test` /
58
+ `explore_start` replies echo `baseUrl` next to `environment`.
59
+ - `run_test` accepts per-call `env` — the spawned runner child gets
60
+ `UNOTEST_ENV=<env>` for that run only.
61
+ - Linter: `// lint-ok: <reason>` silences warning/info diagnostics on
62
+ its line (reason required; errors never suppressible); new
63
+ `lint:echo-assert` warns when `waitForText`/`assertText` overlaps a
64
+ value the scenario itself filled (chat echo trap);
65
+ `lint:goto-concat` / `lint:regex-invalid` are now configurable in
66
+ `linter.rules` (they were emitted but missing from the config schema).
67
+ - A `_helpers` file that fails to parse is reported as the root cause in
68
+ `unotest-web lint` (and explore replies list `unparsableHelperFiles`)
69
+ instead of silently cascading into "Unknown function" at every call
70
+ site. The viewer logs the same condition (patch).
71
+
72
+ ### Patch Changes
73
+
74
+ - Updated dependencies [40300d3]
75
+ - Updated dependencies [479aa25]
76
+ - Updated dependencies [5dd59af]
77
+ - Updated dependencies [7069d24]
78
+ - @unotest/dsl@0.12.0
79
+ - @unotest/viewer@0.12.0
80
+ - @unotest/core@0.12.0
81
+ - @unotest/grounder-client@0.12.0
82
+ - @unotest/protocol@0.12.0
83
+
8
84
  ## [0.11.0] - 2026-08-13
9
85
 
10
86
  ### Minor Changes
@@ -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: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"]>;
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", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:lint-ok-missing-reason", "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: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"]>>;
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", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:lint-ok-missing-reason", "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: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">>;
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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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: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">>;
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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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<{
@@ -116,6 +116,17 @@ type McpConfig = z.infer<typeof McpConfigSchema>;
116
116
  declare const SandboxConfigSchema: z.ZodObject<{
117
117
  /** Default cwd for `shell(cmd, ...args)`. Defaults to `process.cwd()`. */
118
118
  shellCwd: z.ZodOptional<z.ZodString>;
119
+ /** Wall-clock budget for one `shell()` call, ms. Default 120 000. A call
120
+ * that exceeds it fails the step (the child gets SIGTERM, then SIGKILL) —
121
+ * without this, a grandchild process inheriting stdio pipes hangs the
122
+ * scenario forever. Per-call override: `shell(..., {timeoutMs})`. */
123
+ shellTimeoutMs: z.ZodOptional<z.ZodNumber>;
124
+ /** Names of `.secrets*` variables exported into `shell()` subprocess env.
125
+ * Secrets are deliberately kept OUT of process.env (see
126
+ * scenario-variables.ts) — this is the explicit opt-in for the listener /
127
+ * seeder subprocess that genuinely needs a token. Values are still
128
+ * masked in logs by the SecretRegistry. */
129
+ exportSecrets: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
119
130
  /** Database connection string consumed by `dbQuery` / `dbExec`. URL form
120
131
  * picks the dialect: `postgres://`, `mysql://`, `sqlite:`. */
121
132
  database: z.ZodOptional<z.ZodString>;
@@ -130,11 +141,15 @@ declare const SandboxConfigSchema: z.ZodObject<{
130
141
  uploadDir: z.ZodOptional<z.ZodString>;
131
142
  }, "strip", z.ZodTypeAny, {
132
143
  shellCwd?: string | undefined;
144
+ shellTimeoutMs?: number | undefined;
145
+ exportSecrets?: string[] | undefined;
133
146
  database?: string | undefined;
134
147
  apiBaseUrl?: string | undefined;
135
148
  uploadDir?: string | undefined;
136
149
  }, {
137
150
  shellCwd?: string | undefined;
151
+ shellTimeoutMs?: number | undefined;
152
+ exportSecrets?: string[] | undefined;
138
153
  database?: string | undefined;
139
154
  apiBaseUrl?: string | undefined;
140
155
  uploadDir?: string | undefined;
@@ -158,14 +173,14 @@ declare const WebServerConfigSchema: z.ZodObject<{
158
173
  timeoutMs: z.ZodDefault<z.ZodNumber>;
159
174
  }, "strip", z.ZodTypeAny, {
160
175
  url: string;
176
+ timeoutMs: number;
161
177
  command: string;
162
178
  reuseExistingServer: boolean;
163
- timeoutMs: number;
164
179
  }, {
165
180
  url: string;
166
181
  command: string;
167
- reuseExistingServer?: boolean | undefined;
168
182
  timeoutMs?: number | undefined;
183
+ reuseExistingServer?: boolean | undefined;
169
184
  }>;
170
185
  type WebServerConfig = z.infer<typeof WebServerConfigSchema>;
171
186
  declare const UnotestConfigSchema: z.ZodObject<{
@@ -192,14 +207,14 @@ declare const UnotestConfigSchema: z.ZodObject<{
192
207
  timeoutMs: z.ZodDefault<z.ZodNumber>;
193
208
  }, "strip", z.ZodTypeAny, {
194
209
  url: string;
210
+ timeoutMs: number;
195
211
  command: string;
196
212
  reuseExistingServer: boolean;
197
- timeoutMs: number;
198
213
  }, {
199
214
  url: string;
200
215
  command: string;
201
- reuseExistingServer?: boolean | undefined;
202
216
  timeoutMs?: number | undefined;
217
+ reuseExistingServer?: boolean | undefined;
203
218
  }>>;
204
219
  browsers: z.ZodArray<z.ZodEnum<["chromium", "firefox", "webkit"]>, "many">;
205
220
  channel: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"chrome">, z.ZodLiteral<"msedge">, z.ZodLiteral<"chrome-beta">, z.ZodNull]>>;
@@ -297,13 +312,13 @@ declare const UnotestConfigSchema: z.ZodObject<{
297
312
  defaultNavigationTimeoutMs: z.ZodNumber;
298
313
  linter: z.ZodObject<{
299
314
  enabled: z.ZodBoolean;
300
- 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"]>>;
315
+ 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", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:lint-ok-missing-reason", "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"]>>;
301
316
  }, "strip", z.ZodTypeAny, {
302
317
  enabled: boolean;
303
- 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">>;
318
+ 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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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">>;
304
319
  }, {
305
320
  enabled: boolean;
306
- 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">>;
321
+ 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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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">>;
307
322
  }>;
308
323
  mcp: z.ZodObject<{
309
324
  transport: z.ZodLiteral<"stdio">;
@@ -315,6 +330,17 @@ declare const UnotestConfigSchema: z.ZodObject<{
315
330
  sandbox: z.ZodObject<{
316
331
  /** Default cwd for `shell(cmd, ...args)`. Defaults to `process.cwd()`. */
317
332
  shellCwd: z.ZodOptional<z.ZodString>;
333
+ /** Wall-clock budget for one `shell()` call, ms. Default 120 000. A call
334
+ * that exceeds it fails the step (the child gets SIGTERM, then SIGKILL) —
335
+ * without this, a grandchild process inheriting stdio pipes hangs the
336
+ * scenario forever. Per-call override: `shell(..., {timeoutMs})`. */
337
+ shellTimeoutMs: z.ZodOptional<z.ZodNumber>;
338
+ /** Names of `.secrets*` variables exported into `shell()` subprocess env.
339
+ * Secrets are deliberately kept OUT of process.env (see
340
+ * scenario-variables.ts) — this is the explicit opt-in for the listener /
341
+ * seeder subprocess that genuinely needs a token. Values are still
342
+ * masked in logs by the SecretRegistry. */
343
+ exportSecrets: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
318
344
  /** Database connection string consumed by `dbQuery` / `dbExec`. URL form
319
345
  * picks the dialect: `postgres://`, `mysql://`, `sqlite:`. */
320
346
  database: z.ZodOptional<z.ZodString>;
@@ -329,11 +355,15 @@ declare const UnotestConfigSchema: z.ZodObject<{
329
355
  uploadDir: z.ZodOptional<z.ZodString>;
330
356
  }, "strip", z.ZodTypeAny, {
331
357
  shellCwd?: string | undefined;
358
+ shellTimeoutMs?: number | undefined;
359
+ exportSecrets?: string[] | undefined;
332
360
  database?: string | undefined;
333
361
  apiBaseUrl?: string | undefined;
334
362
  uploadDir?: string | undefined;
335
363
  }, {
336
364
  shellCwd?: string | undefined;
365
+ shellTimeoutMs?: number | undefined;
366
+ exportSecrets?: string[] | undefined;
337
367
  database?: string | undefined;
338
368
  apiBaseUrl?: string | undefined;
339
369
  uploadDir?: string | undefined;
@@ -368,13 +398,15 @@ declare const UnotestConfigSchema: z.ZodObject<{
368
398
  defaultNavigationTimeoutMs: number;
369
399
  linter: {
370
400
  enabled: boolean;
371
- 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">>;
401
+ 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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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">>;
372
402
  };
373
403
  mcp: {
374
404
  transport: "stdio";
375
405
  };
376
406
  sandbox: {
377
407
  shellCwd?: string | undefined;
408
+ shellTimeoutMs?: number | undefined;
409
+ exportSecrets?: string[] | undefined;
378
410
  database?: string | undefined;
379
411
  apiBaseUrl?: string | undefined;
380
412
  uploadDir?: string | undefined;
@@ -382,9 +414,9 @@ declare const UnotestConfigSchema: z.ZodObject<{
382
414
  baseUrl?: string | undefined;
383
415
  webServer?: {
384
416
  url: string;
417
+ timeoutMs: number;
385
418
  command: string;
386
419
  reuseExistingServer: boolean;
387
- timeoutMs: number;
388
420
  } | undefined;
389
421
  channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
390
422
  storageState?: string | undefined;
@@ -418,13 +450,15 @@ declare const UnotestConfigSchema: z.ZodObject<{
418
450
  defaultNavigationTimeoutMs: number;
419
451
  linter: {
420
452
  enabled: boolean;
421
- 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">>;
453
+ 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" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:lint-ok-missing-reason" | "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">>;
422
454
  };
423
455
  mcp: {
424
456
  transport: "stdio";
425
457
  };
426
458
  sandbox: {
427
459
  shellCwd?: string | undefined;
460
+ shellTimeoutMs?: number | undefined;
461
+ exportSecrets?: string[] | undefined;
428
462
  database?: string | undefined;
429
463
  apiBaseUrl?: string | undefined;
430
464
  uploadDir?: string | undefined;
@@ -433,8 +467,8 @@ declare const UnotestConfigSchema: z.ZodObject<{
433
467
  webServer?: {
434
468
  url: string;
435
469
  command: string;
436
- reuseExistingServer?: boolean | undefined;
437
470
  timeoutMs?: number | undefined;
471
+ reuseExistingServer?: boolean | undefined;
438
472
  } | undefined;
439
473
  channel?: "chrome" | "msedge" | "chrome-beta" | null | undefined;
440
474
  storageState?: string | undefined;
@@ -1 +1 @@
1
- function _0xbf3c(){var _0x5a10e4=['zgvMyxvSDa','nZaZnZDkrwX3y0S','DMfSAwrHDg9YoNn0zxaTy292zxjHz2u','mtaXnZiXm1riAMTSDG','mZnyzhzhvg4','zMLYzwzVEa','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','mtK1mZqYthPkwhPg','ohjqwxfcBa','lNvUB3rLC3qVzMfPBhvYzxm','D2fYBG','BxnLzgDL','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','DMfSAwrHDg9YoM1LDgeTC2HHCgu','Cg9ZAxrPDMu','B3b0Aw9UywW','DMfSAwrHDg9YoNzHCI1ZAgfWzq','BNvSBa','B2jQzwn0','mJu1nZu2mffKrevZEq','BwfUDwfS','y2HYB21PDw0','yxjYyxK','DMfSAwrHDg9YoNDYyxbWzwqTzM9YBwf0','BgLUDdPZy2vUyxjPBY1PBI1YB290','Bwf4','C3rYAw5N','nvrIEKz2uq','mJrfCe1AEee','BNvTyMvY','yM9VBgvHBG','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','mtqZwK5wBKPy','BgLUDdPTDxn0ywnOzs1PBI1KC2W','Aw50','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlxn0yxrLBwvUDa','DMfSAwrHDg9YoMXPC3qTyxjN','DMfSAwrHDg9YoMzVCI1ZAgfWzq','ywnJzxb0','BgLUDdPKAxnHBwjPzY1IEs1PBMrLEa','C3rKAw8','B2zM','BgLUDdPWyxvZzs1LEhbSAwnPDa','ntuZzhrbsufk','DxjS','zxjYB3i','y2HYB21L','y2HYB21LlwjLDge','mtqXndq1ogLKz3rmtW','CMvJB3jK','mteWotG2ohDLv3LyBa','zw51Bq','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlwv4ChjLC3nPB24','nJu0nJrpt2TzrgO','y3jHC2G','BwLU','Dw5VDgvZDc9LmMu','Dw5VDgvZDc9LmMuVx2HLBhbLCNm','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','BgL0zxjHBa','DMfSAwrHDg9YoNn0zxaTC2HHCgu'];_0xbf3c=function(){return _0x5a10e4;};return _0xbf3c();}var _0x5b7026=_0x4a4e;(function(_0x2f37c3,_0xd597d6){var _0x574d49={_0x201899:0x172,_0xd15309:0x171,_0x5646ca:0x158,_0x1341cf:0x15d,_0x1122e5:0x17d},_0x412659=_0x4a4e,_0x24087b=_0x2f37c3();while(!![]){try{var _0x157f85=-parseInt(_0x412659(0x16b))/0x1*(-parseInt(_0x412659(0x149))/0x2)+parseInt(_0x412659(0x16d))/0x3*(parseInt(_0x412659(_0x574d49._0x201899))/0x4)+parseInt(_0x412659(0x185))/0x5*(-parseInt(_0x412659(_0x574d49._0xd15309))/0x6)+parseInt(_0x412659(_0x574d49._0x5646ca))/0x7*(-parseInt(_0x412659(0x162))/0x8)+-parseInt(_0x412659(_0x574d49._0x1341cf))/0x9+parseInt(_0x412659(_0x574d49._0x1122e5))/0xa*(parseInt(_0x412659(0x16e))/0xb)+parseInt(_0x412659(0x15f))/0xc*(-parseInt(_0x412659(0x14d))/0xd);if(_0x157f85===_0xd597d6)break;else _0x24087b['push'](_0x24087b['shift']());}catch(_0x5c5156){_0x24087b['push'](_0x24087b['shift']());}}}(_0xbf3c,0x6a89b));import{z}from'zod';var BrowserSchema=z[_0x5b7026(0x160)](['chromium',_0x5b7026(0x16f),'webkit']),BrowserChannelSchema=z['union']([z['literal'](_0x5b7026(0x15b)),z[_0x5b7026(0x168)](_0x5b7026(0x175)),z[_0x5b7026(0x168)](_0x5b7026(0x15c)),z[_0x5b7026(0x17b)]()])[_0x5b7026(0x179)](),ViewportSchema=z[_0x5b7026(0x17c)]({'width':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x178)](),'height':z[_0x5b7026(0x14a)]()['int']()[_0x5b7026(0x178)]()}),RetryReasonSchema=z[_0x5b7026(0x160)](['transient','network',_0x5b7026(0x163)]),RetryConfigSchema=z[_0x5b7026(0x17c)]({'count':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x164)](0x0)[_0x5b7026(0x183)](0xa),'on':z[_0x5b7026(0x180)](RetryReasonSchema)}),FailureBundleConfigSchema=z[_0x5b7026(0x17c)]({'tier1':z[_0x5b7026(0x168)](!![])[_0x5b7026(0x16a)](!![]),'tier2':z['boolean'](),'tier3':z[_0x5b7026(0x17c)]({'network':z[_0x5b7026(0x14b)](),'video':z[_0x5b7026(0x14b)]()}),'retention':z[_0x5b7026(0x17c)]({'runs':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x178)](),'days':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x178)]()}),'storageDir':z[_0x5b7026(0x184)]()['min'](0x1)}),DialogPolicySchema=z[_0x5b7026(0x160)]([_0x5b7026(0x153),'dismiss',_0x5b7026(0x17e)]),LinterRuleIdSchema=z[_0x5b7026(0x160)](['lint:deep-css','lint:xpath',_0x5b7026(0x176),_0x5b7026(0x157),_0x5b7026(0x154),_0x5b7026(0x167),_0x5b7026(0x182),_0x5b7026(0x14e),_0x5b7026(0x14c),'validator:arity','validator:arg-kind',_0x5b7026(0x16c),_0x5b7026(0x169),_0x5b7026(0x177),'validator:function-shape',_0x5b7026(0x152),'validator:if-shape',_0x5b7026(0x17a),_0x5b7026(0x150),_0x5b7026(0x161),_0x5b7026(0x170),'validator:semantic-loss',_0x5b7026(0x151),_0x5b7026(0x181)]),LinterSeveritySchema=z[_0x5b7026(0x160)]([_0x5b7026(0x156),_0x5b7026(0x174),_0x5b7026(0x15a)]),LinterConfigSchema=z[_0x5b7026(0x17c)]({'enabled':z[_0x5b7026(0x14b)](),'rules':z[_0x5b7026(0x15e)](LinterRuleIdSchema,LinterSeveritySchema)}),McpConfigSchema=z[_0x5b7026(0x17c)]({'transport':z['literal'](_0x5b7026(0x155))}),SandboxConfigSchema=z[_0x5b7026(0x17c)]({'shellCwd':z['string']()['optional'](),'database':z[_0x5b7026(0x184)]()[_0x5b7026(0x179)](),'apiBaseUrl':z[_0x5b7026(0x184)]()['url']()[_0x5b7026(0x179)](),'uploadDir':z[_0x5b7026(0x184)]()['optional']()}),WebServerConfigSchema=z[_0x5b7026(0x17c)]({'command':z[_0x5b7026(0x184)]()[_0x5b7026(0x164)](0x1),'url':z['string']()[_0x5b7026(0x159)](),'reuseExistingServer':z[_0x5b7026(0x14b)]()[_0x5b7026(0x16a)](!![]),'timeoutMs':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()['positive']()[_0x5b7026(0x16a)](0xea60)}),UnotestConfigSchema=z['object']({'baseUrl':z[_0x5b7026(0x184)]()['url']()[_0x5b7026(0x179)](),'webServer':WebServerConfigSchema[_0x5b7026(0x179)](),'browsers':z[_0x5b7026(0x180)](BrowserSchema)[_0x5b7026(0x164)](0x1),'channel':BrowserChannelSchema,'viewport':ViewportSchema,'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':z[_0x5b7026(0x184)]()[_0x5b7026(0x179)](),'testDir':z['string']()['min'](0x1),'helpersDir':z[_0x5b7026(0x184)]()['min'](0x1),'defaultTimeoutMs':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x178)](),'defaultNavigationTimeoutMs':z[_0x5b7026(0x14a)]()[_0x5b7026(0x14f)]()[_0x5b7026(0x178)](),'linter':LinterConfigSchema,'mcp':McpConfigSchema,'sandbox':SandboxConfigSchema}),DEFAULT_CONFIG={'browsers':[_0x5b7026(0x17f)],'viewport':{'width':0x500,'height':0x2d0},'retry':{'count':0x0,'on':['transient']},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x5b7026(0x173)},'dialogPolicy':_0x5b7026(0x153),'testDir':_0x5b7026(0x165),'helpersDir':_0x5b7026(0x166),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x7530,'linter':{'enabled':!![],'rules':{'lint:deep-css':_0x5b7026(0x174),'lint:xpath':_0x5b7026(0x174),'lint:obfuscated-class':'warn','lint:pause-explicit':_0x5b7026(0x174),'lint:disambig-by-index':_0x5b7026(0x156),'lint:evaluate-discouraged':'warn','lint:scenario-in-root':_0x5b7026(0x15a),'lint:mustache-in-dsl':_0x5b7026(0x15a),'validator:unknown-function':_0x5b7026(0x15a)}},'mcp':{'transport':_0x5b7026(0x155)},'sandbox':{}};function _0x4a4e(_0x5a0c8d,_0x24a94e){_0x5a0c8d=_0x5a0c8d-0x149;var _0xbf3c28=_0xbf3c();var _0x4a4e14=_0xbf3c28[_0x5a0c8d];if(_0x4a4e['ZZiVPP']===undefined){var _0x3cbfd6=function(_0x5b8e52){var _0x1d90b9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x23a664='',_0x5dd330='';for(var _0x54bc48=0x0,_0x2de8ed,_0xc5f58c,_0x271a4b=0x0;_0xc5f58c=_0x5b8e52['charAt'](_0x271a4b++);~_0xc5f58c&&(_0x2de8ed=_0x54bc48%0x4?_0x2de8ed*0x40+_0xc5f58c:_0xc5f58c,_0x54bc48++%0x4)?_0x23a664+=String['fromCharCode'](0xff&_0x2de8ed>>(-0x2*_0x54bc48&0x6)):0x0){_0xc5f58c=_0x1d90b9['indexOf'](_0xc5f58c);}for(var _0x599abd=0x0,_0x439dac=_0x23a664['length'];_0x599abd<_0x439dac;_0x599abd++){_0x5dd330+='%'+('00'+_0x23a664['charCodeAt'](_0x599abd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5dd330);};_0x4a4e['BLwFta']=_0x3cbfd6,_0x4a4e['JKObLm']={},_0x4a4e['ZZiVPP']=!![];}var _0x25b54b=_0xbf3c28[0x0],_0x2f5e17=_0x5a0c8d+_0x25b54b,_0x298485=_0x4a4e['JKObLm'][_0x2f5e17];return!_0x298485?(_0x4a4e14=_0x4a4e['BLwFta'](_0x4a4e14),_0x4a4e['JKObLm'][_0x2f5e17]=_0x4a4e14):_0x4a4e14=_0x298485,_0x4a4e14;}export{BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,RetryConfigSchema,RetryReasonSchema,SandboxConfigSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema};
1
+ var _0x24740a=_0x202c;(function(_0x2e7bfe,_0x17cbeb){var _0x5d30b8={_0x2648ae:0x193,_0x5ea1b9:0x19f,_0x1fb823:0x19d,_0x2f0413:0x1a8,_0x2e20ee:0x192},_0x482484=_0x202c,_0x3038a0=_0x2e7bfe();while(!![]){try{var _0x3f2fa8=-parseInt(_0x482484(0x189))/0x1+-parseInt(_0x482484(_0x5d30b8._0x2648ae))/0x2+-parseInt(_0x482484(_0x5d30b8._0x5ea1b9))/0x3*(-parseInt(_0x482484(0x1b3))/0x4)+-parseInt(_0x482484(_0x5d30b8._0x1fb823))/0x5+parseInt(_0x482484(_0x5d30b8._0x2f0413))/0x6+-parseInt(_0x482484(_0x5d30b8._0x2e20ee))/0x7+parseInt(_0x482484(0x1a5))/0x8;if(_0x3f2fa8===_0x17cbeb)break;else _0x3038a0['push'](_0x3038a0['shift']());}catch(_0x3f5318){_0x3038a0['push'](_0x3038a0['shift']());}}}(_0x4907,0x97be5));function _0x4907(){var _0x351a15=['B2jQzwn0','otK0otG5Ewr1EeHv','BgLUDdPYzwDLEc1PBNzHBgLK','Dw5VDgvZDc9LmMuVx2HLBhbLCNm','Dw5PB24','lNvUB3rLC3qVzMfPBhvYzxm','y3jHC2G','BgLUDdPKAxnHBwjPzY1IEs1PBMrLEa','DMfSAwrHDg9YoMXPC3qTyxjN','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','mJyZmdGYnfLUr2HSuG','mJe4mZq0nKPorhLkuG','DxjS','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','BNvSBa','DMfSAwrHDg9YoNnLBwfUDgLJlwXVC3m','DMfSAwrHDg9YoMLMlxnOyxbL','D2vIA2L0','BwfUDwfS','CMvJB3jK','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','mJe0odCWmgnHCwXHCa','BgL0zxjHBa','ntKXDfrWzhPP','BgLUDdPNB3rVlwnVBMnHDa','DMfSAwrHDg9YoNn0zxaTC2HHCgu','y2HYB21L','zxjYB3i','yxjYyxK','mtmWodC3mJHItgfuB3m','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlwv4ChjLC3nPB24','zw51Bq','nJa5ntKWnhnNDvbezG','C3rKAw8','BMv0D29YAW','DMfSAwrHDg9YoMfYzY1RAw5K','BgLUDdP4Cgf0Aa','BNvTyMvY','DhjHBNnPzw50','B3b0Aw9UywW','DMfSAwrHDg9YoMzVCI1ZAgfWzq','BgLUDdPLy2HVlwfZC2vYDa','BgLUDdPTDxn0ywnOzs1PBI1KC2W','mtC1mdbcD3zWrLm','BgLUDdPSAw50lw9Rlw1PC3nPBMCTCMvHC29U','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlxn0yxrLBwvUDa','Cg9ZAxrPDMu','yM9VBgvHBG','BxnLzgDL','Aw50','zgvMyxvSDa','zMLYzwzVEa','BwLU','DMfSAwrHDg9YoNzHCI1ZAgfWzq','Dw5VDgvZDc9LmMu','DMfSAwrHDg9YoM1LDgeTC2HHCgu','DMfSAwrHDg9YoMfYAxr5','y2HYB21LlwjLDge','C3rYAw5N','D2fYBG','y2HYB21PDw0','BgLUDdPKzwvWlwnZCW','zgLZBwLZCW'];_0x4907=function(){return _0x351a15;};return _0x4907();}import{z}from'zod';var BrowserSchema=z[_0x24740a(0x1a7)](['chromium',_0x24740a(0x17c),_0x24740a(0x199)]),BrowserChannelSchema=z[_0x24740a(0x18c)]([z[_0x24740a(0x19e)](_0x24740a(0x1a2)),z[_0x24740a(0x19e)](_0x24740a(0x1b8)),z[_0x24740a(0x19e)](_0x24740a(0x182)),z[_0x24740a(0x196)]()])[_0x24740a(0x1af)](),ViewportSchema=z[_0x24740a(0x188)]({'width':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()[_0x24740a(0x1b6)](),'height':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()[_0x24740a(0x1b6)]()}),RetryReasonSchema=z[_0x24740a(0x1a7)]([_0x24740a(0x1ae),_0x24740a(0x1aa),_0x24740a(0x18e)]),RetryConfigSchema=z[_0x24740a(0x188)]({'count':z[_0x24740a(0x1ad)]()['int']()['min'](0x0)['max'](0xa),'on':z[_0x24740a(0x1a4)](RetryReasonSchema)}),FailureBundleConfigSchema=z['object']({'tier1':z['literal'](!![])['default'](!![]),'tier2':z[_0x24740a(0x1b7)](),'tier3':z[_0x24740a(0x188)]({'network':z[_0x24740a(0x1b7)](),'video':z['boolean']()}),'retention':z['object']({'runs':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()[_0x24740a(0x1b6)](),'days':z[_0x24740a(0x1ad)]()['int']()[_0x24740a(0x1b6)]()}),'storageDir':z[_0x24740a(0x183)]()[_0x24740a(0x17d)](0x1)}),DialogPolicySchema=z['enum'](['accept',_0x24740a(0x187),_0x24740a(0x19a)]),LinterRuleIdSchema=z[_0x24740a(0x1a7)]([_0x24740a(0x186),_0x24740a(0x1ac),'lint:obfuscated-class','lint:pause-explicit',_0x24740a(0x18f),_0x24740a(0x191),'lint:scenario-in-root',_0x24740a(0x1b2),_0x24740a(0x1a0),_0x24740a(0x18a),_0x24740a(0x1b1),_0x24740a(0x1b4),_0x24740a(0x195),_0x24740a(0x181),_0x24740a(0x1ab),'validator:step-coverage',_0x24740a(0x1a1),_0x24740a(0x180),'validator:function-shape',_0x24740a(0x1b0),_0x24740a(0x198),_0x24740a(0x17e),_0x24740a(0x1b5),_0x24740a(0x1a6),_0x24740a(0x19c),_0x24740a(0x197),_0x24740a(0x190),'validator:wrapped-format']),LinterSeveritySchema=z[_0x24740a(0x1a7)](['off',_0x24740a(0x184),'error']),LinterConfigSchema=z[_0x24740a(0x188)]({'enabled':z[_0x24740a(0x1b7)](),'rules':z[_0x24740a(0x19b)](LinterRuleIdSchema,LinterSeveritySchema)}),McpConfigSchema=z['object']({'transport':z[_0x24740a(0x19e)](_0x24740a(0x1a9))}),SandboxConfigSchema=z[_0x24740a(0x188)]({'shellCwd':z['string']()['optional'](),'shellTimeoutMs':z[_0x24740a(0x1ad)]()['int']()[_0x24740a(0x1b6)]()[_0x24740a(0x1af)](),'exportSecrets':z['array'](z['string']())[_0x24740a(0x1af)](),'database':z[_0x24740a(0x183)]()['optional'](),'apiBaseUrl':z[_0x24740a(0x183)]()[_0x24740a(0x194)]()[_0x24740a(0x1af)](),'uploadDir':z[_0x24740a(0x183)]()['optional']()}),WebServerConfigSchema=z[_0x24740a(0x188)]({'command':z[_0x24740a(0x183)]()[_0x24740a(0x17d)](0x1),'url':z[_0x24740a(0x183)]()[_0x24740a(0x194)](),'reuseExistingServer':z[_0x24740a(0x1b7)]()['default'](!![]),'timeoutMs':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()['positive']()[_0x24740a(0x1ba)](0xea60)}),UnotestConfigSchema=z[_0x24740a(0x188)]({'baseUrl':z[_0x24740a(0x183)]()[_0x24740a(0x194)]()[_0x24740a(0x1af)](),'webServer':WebServerConfigSchema[_0x24740a(0x1af)](),'browsers':z[_0x24740a(0x1a4)](BrowserSchema)[_0x24740a(0x17d)](0x1),'channel':BrowserChannelSchema,'viewport':ViewportSchema,'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':z['string']()[_0x24740a(0x1af)](),'testDir':z[_0x24740a(0x183)]()[_0x24740a(0x17d)](0x1),'helpersDir':z[_0x24740a(0x183)]()[_0x24740a(0x17d)](0x1),'defaultTimeoutMs':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()[_0x24740a(0x1b6)](),'defaultNavigationTimeoutMs':z[_0x24740a(0x1ad)]()[_0x24740a(0x1b9)]()[_0x24740a(0x1b6)](),'linter':LinterConfigSchema,'mcp':McpConfigSchema,'sandbox':SandboxConfigSchema}),DEFAULT_CONFIG={'browsers':[_0x24740a(0x185)],'viewport':{'width':0x500,'height':0x2d0},'retry':{'count':0x0,'on':['transient']},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x24740a(0x18d)},'dialogPolicy':'accept','testDir':_0x24740a(0x17f),'helpersDir':_0x24740a(0x18b),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x7530,'linter':{'enabled':!![],'rules':{'lint:deep-css':'warn','lint:xpath':_0x24740a(0x184),'lint:obfuscated-class':_0x24740a(0x184),'lint:pause-explicit':_0x24740a(0x184),'lint:disambig-by-index':'off','lint:evaluate-discouraged':'warn','lint:scenario-in-root':_0x24740a(0x1a3),'lint:mustache-in-dsl':'error','lint:goto-concat':_0x24740a(0x184),'lint:regex-invalid':_0x24740a(0x1a3),'lint:echo-assert':_0x24740a(0x184),'lint:lint-ok-missing-reason':_0x24740a(0x184),'validator:unknown-function':_0x24740a(0x1a3)}},'mcp':{'transport':_0x24740a(0x1a9)},'sandbox':{}};function _0x202c(_0x5b55f0,_0x1e1548){_0x5b55f0=_0x5b55f0-0x17c;var _0x49075b=_0x4907();var _0x202c4b=_0x49075b[_0x5b55f0];if(_0x202c['tyZDFh']===undefined){var _0xe49ede=function(_0x401a06){var _0x337267='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x3744b8='',_0x98677e='';for(var _0x5d0a3c=0x0,_0x50befd,_0x1f34a4,_0x56a82f=0x0;_0x1f34a4=_0x401a06['charAt'](_0x56a82f++);~_0x1f34a4&&(_0x50befd=_0x5d0a3c%0x4?_0x50befd*0x40+_0x1f34a4:_0x1f34a4,_0x5d0a3c++%0x4)?_0x3744b8+=String['fromCharCode'](0xff&_0x50befd>>(-0x2*_0x5d0a3c&0x6)):0x0){_0x1f34a4=_0x337267['indexOf'](_0x1f34a4);}for(var _0x2145f6=0x0,_0xfee7e3=_0x3744b8['length'];_0x2145f6<_0xfee7e3;_0x2145f6++){_0x98677e+='%'+('00'+_0x3744b8['charCodeAt'](_0x2145f6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x98677e);};_0x202c['pPVuVN']=_0xe49ede,_0x202c['TGtDoY']={},_0x202c['tyZDFh']=!![];}var _0x95650d=_0x49075b[0x0],_0x58923e=_0x5b55f0+_0x95650d,_0x39365d=_0x202c['TGtDoY'][_0x58923e];return!_0x39365d?(_0x202c4b=_0x202c['pPVuVN'](_0x202c4b),_0x202c['TGtDoY'][_0x58923e]=_0x202c4b):_0x202c4b=_0x39365d,_0x202c4b;}export{BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,RetryConfigSchema,RetryReasonSchema,SandboxConfigSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema};
@@ -1,5 +1,5 @@
1
- import { E as ElementHint, N as NetworkEntry, W as WebDriver, L as LaunchOptions, C as ContextOptions, D as DriverContext } from '../interfaces-MxHi1Air.js';
2
- export { A as ActionTimeout, a as CheckOptions, b as ClickOptions, c as CookieOptions, d as DriverPage, F as FillOptions, G as GotoOptions, H as HoverOptions, e as NavigationOptions, P as PressOptions, R as ReloadOptions, S as ScreenshotOptions, f as SelectOptions, V as Viewport, g as WaitOptions, h as WaitState } from '../interfaces-MxHi1Air.js';
1
+ import { E as ElementHint, N as NetworkEntry, W as WebDriver, L as LaunchOptions, C as ContextOptions, D as DriverContext } from '../interfaces-XvuefHHC.js';
2
+ export { A as ActionTimeout, a as CheckOptions, b as ClickOptions, c as CookieOptions, d as DriverPage, F as FillOptions, G as GotoOptions, H as HoverOptions, e as NavigationOptions, P as PressOptions, R as ReloadOptions, S as ScreenshotOptions, f as SelectOptions, V as Viewport, g as WaitOptions, h as WaitState } from '../interfaces-XvuefHHC.js';
3
3
  import '@unotest/protocol';
4
4
  import '../config/schema.js';
5
5
  import 'zod';
@@ -27,6 +27,8 @@ interface FakeBehavior {
27
27
  inputValueByDefault?: string;
28
28
  /** Default isVisible() response. Default: true. */
29
29
  isVisibleByDefault?: boolean;
30
+ /** Default isDisabled() response. Default: false. */
31
+ isDisabledByDefault?: boolean;
30
32
  /** Default checkedState() response — null = "not a checkable element",
31
33
  * the shape a plain <input type=text> reports. Default: null. */
32
34
  checkedStateByDefault?: boolean | null;
@@ -1 +1 @@
1
- function _0xdbf2(_0x9544a5,_0xb0786d){_0x9544a5=_0x9544a5-0x1d5;const _0x5b45d1=_0x5b45();let _0xdbf23d=_0x5b45d1[_0x9544a5];if(_0xdbf2['bhWgXE']===undefined){var _0x31e59f=function(_0x3137ce){const _0x4f9a21='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x21f477='',_0x2d21d9='';for(let _0x1e3740=0x0,_0x11e754,_0x1d4945,_0x4aab56=0x0;_0x1d4945=_0x3137ce['charAt'](_0x4aab56++);~_0x1d4945&&(_0x11e754=_0x1e3740%0x4?_0x11e754*0x40+_0x1d4945:_0x1d4945,_0x1e3740++%0x4)?_0x21f477+=String['fromCharCode'](0xff&_0x11e754>>(-0x2*_0x1e3740&0x6)):0x0){_0x1d4945=_0x4f9a21['indexOf'](_0x1d4945);}for(let _0x153f14=0x0,_0x45f74f=_0x21f477['length'];_0x153f14<_0x45f74f;_0x153f14++){_0x2d21d9+='%'+('00'+_0x21f477['charCodeAt'](_0x153f14)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2d21d9);};_0xdbf2['ZhUxWX']=_0x31e59f,_0xdbf2['xzbumb']={},_0xdbf2['bhWgXE']=!![];}const _0x703e46=_0x5b45d1[0x0],_0x1c4dea=_0x9544a5+_0x703e46,_0x54dbcf=_0xdbf2['xzbumb'][_0x1c4dea];return!_0x54dbcf?(_0xdbf23d=_0xdbf2['ZhUxWX'](_0xdbf23d),_0xdbf2['xzbumb'][_0x1c4dea]=_0xdbf23d):_0xdbf23d=_0x54dbcf,_0xdbf23d;}const _0x24eb6c=_0xdbf2;(function(_0x128207,_0x5e8c1a){const _0x1893b5={_0x51681f:0x217,_0x46b87e:0x224,_0x565ef5:0x214,_0x59a009:0x22c,_0x300e75:0x1d6,_0x5c6951:0x1e0},_0x5455ee=_0xdbf2,_0x33f39c=_0x128207();while(!![]){try{const _0x26b0e0=parseInt(_0x5455ee(_0x1893b5._0x51681f))/0x1*(-parseInt(_0x5455ee(0x1f3))/0x2)+-parseInt(_0x5455ee(0x226))/0x3*(parseInt(_0x5455ee(0x1d5))/0x4)+-parseInt(_0x5455ee(0x219))/0x5+parseInt(_0x5455ee(_0x1893b5._0x46b87e))/0x6+-parseInt(_0x5455ee(_0x1893b5._0x565ef5))/0x7*(parseInt(_0x5455ee(_0x1893b5._0x59a009))/0x8)+parseInt(_0x5455ee(_0x1893b5._0x300e75))/0x9+parseInt(_0x5455ee(_0x1893b5._0x5c6951))/0xa;if(_0x26b0e0===_0x5e8c1a)break;else _0x33f39c['push'](_0x33f39c['shift']());}catch(_0x59fce8){_0x33f39c['push'](_0x33f39c['shift']());}}}(_0x5b45,0x9e6ff));var __defProp=Object[_0x24eb6c(0x218)],__name=(_0x21f477,_0x2d21d9)=>__defProp(_0x21f477,_0x24eb6c(0x1e6),{'value':_0x2d21d9,'configurable':!![]});function _0x5b45(){const _0x9c98b8=['y29UDgv4Dhm','y3vYCMvUDfvYBa','C2f2zvn0B3jHz2vtDgf0zq','y29VA2LLCW','mZi4ntKZmtb1z0zizNq','A2LUza','iJ48l2rPDJ4','Aw5WDxrwywX1zuj5rgvMyxvSDa','C3rLChm','zg91yMXLq2XPy2S','BMfTzq','zMfRzsb0AxrSzq','zNjHBwvezxb0Aa','Dw5JAgvJAW','C2nVCgu','y29UBMvJDfnOyxjLza','C3vIC2nYAwjL','yMvOyxzPB3i','B3v0zxjive1m','D2fPDezVCG','Cg9WDxbpBKnSAwnR','Bwv0Ag9K','zMfRzs1WBMC','mtiWmdq2neDhs0LNyq','y3jLyxrLuMvJB3jKzxi','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','yxr0ywnOrxHPC3rPBMCGBM90ihn1ChbVCNrLzcbIEsbgywTLv2vIrhjPDMvY','z2v0tg9JywXtDg9YywDL','y2HLy2TLzfn0yxrL','y2XPy2S','Aw5WDxrwywX1zq','y2HLy2S','z29gB3j3yxjK','Dgv4DenVBNrLBNq','CMvJB3jK','B25ozxDqywDL','y291BNq','C2vSzwn0t3b0Aw9U','zxzHBhvHDgu','rMfRzvbHz2u','zMLSBa','ChvZAa','zxHPDezYyw1L','rhjPDMvYrxjYB3i','B3v0zxjiDg1SqNLszwy','CMvM','zxjYB3jpBK5LEhrby3rPB24','Bg9JywXtDg9YywDLu3rHDgu','z29cywnR','BMv0D29YA0vUDhjPzxm','yxr0CMLIDxrLC0j5rgvMyxvSDa','C2v0qwn0AxzLugfNzq','y2XPCgjVyxjKugfZDgu','ywn0AxzLswr4','C2nYB2XSsw50B1zPzxC','ywrK','mta3nJaZm3Pkt05PqG','CMvJB3jKzxi','BMv3q29UDgv4Da','mMXlBNrrwG','zgvMAw5LuhjVCgvYDhK','mJe3nZq5nwjMvujJzq','AxnwAxnPyMXLqNLezwzHDwX0','Bwf5yMvuAhjVDW','Bgf1BMnOzwq','D2fPDezVCLvYBa','ywjVDxq6yMXHBMS','BgvUz3rO','y29VA2LLu3rHDgu','CgfNzuXPC3q','C3bSAwnL','y29UC29SzuvUDhjPzxm','mJi5mZi4neHqvu5swq','pgrPDJ48l2rPDJ4','m2nosgvVDG','y2XVC2u','y3r4','CMvSB2fK','y2HLy2TLzfn0yxrLqNLezwzHDwX0','C2nYzwvUC2HVDa','mtzHEhr4u1K','pgrPDIbKyxrHlxvUB3rLC3qTCMvMpsi','zgvSzxrL','ywn0AxzLugfNzq','zNjLzxPL','DgL0Bgu','tg9JyxrVCKvYCM9Y','AxnwAxnPyMXL','ChjLC3m','lNbHz2u','BMv3ugfNzuXPC3rLBMvYCW','zxzHBhvHDgvpBKXVy2f0B3i','rMfRzvDLyKrYAxzLCG','DxbSB2fKrMLSzq','z2v0qxr0CMLIDxrL','Aw5PDgLHBfvYBa','zw1PDezHA2vqB3b1Ca','zMLSDgvY','zhjPDMvY','B25bzNrLCKnSAwnR','D2fPDezVCK5HDMLNyxrPB24','C2v0q29VA2LL','Bgf1BMnO','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','Aw5ZCgvJDevSzw1LBNq','CgfNzsbPBMrLEcbVDxqGB2yGCMfUz2u','y2fWDhvYzvn0ywnRvhjHy2u','y2fSBhngB3i','D2fPDezVCLrLEhq','Bg9JywXtDg9YywDL','zhjHz0fUzerYB3a','z290BW','y2fSBhm','ndqYmZKYoeTXvLv6tq','mJCXnZCZthvRChbr','z2v0q29VA2LL','C2v0tg9JywXtDg9YywDL','zNjHBwvtDgfJAW','zw50zxjgCMfTzq','BMv3q29UDgv4DcbJywXSzwqGyMvMB3jLigXHDw5JAcGP'];_0x5b45=function(){return _0x9c98b8;};return _0x5b45();}function subscribe(_0x1e3740,_0x11e754){const _0x4faace=_0x24eb6c;return _0x1e3740[_0x4faace(0x213)](_0x11e754),()=>{const _0x89871=_0x4faace;_0x1e3740[_0x89871(0x22e)](_0x11e754);};}__name(subscribe,_0x24eb6c(0x1ec));var UnotestError=class extends Error{static{__name(this,'UnotestError');}['context'];constructor(_0x1d4945,_0x4aab56={}){const _0x18d662={_0x101d82:0x1e6,_0x546917:0x246},_0x4af32a=_0x24eb6c;super(_0x1d4945),this[_0x4af32a(_0x18d662._0x101d82)]=new.target.name,this['context']=Object[_0x4af32a(0x230)]({..._0x4aab56}),typeof Error[_0x4af32a(0x246)]==='function'&&Error[_0x4af32a(_0x18d662._0x546917)](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,_0x24eb6c(0x207));}},LocatorError=class extends UnotestError{static{__name(this,_0x24eb6c(0x232));}};function createRecorder(){const _0x4f5fa5=_0x24eb6c,_0x153f14=[];let _0x45f74f=0x0;return{'push':__name(_0x8f622f=>_0x153f14[_0x4f5fa5(0x205)]({..._0x8f622f,'seq':_0x45f74f++}),'push'),'calls':__name(()=>_0x153f14,_0x4f5fa5(0x24c))};}__name(createRecorder,_0x24eb6c(0x1f4));var FakePage=class{constructor(_0x8608e7,_0x30fac5,_0x162608,_0x3404ef){const _0x31f603={_0x30040c:0x1ea},_0x3e617b=_0x24eb6c;this[_0x3e617b(0x215)]=_0x8608e7,this[_0x3e617b(0x1ed)]=_0x30fac5,this[_0x3e617b(_0x31f603._0x30040c)]=_0x162608,this[_0x3e617b(0x1dd)]=_0x3404ef;}['recorder'];[_0x24eb6c(0x1ed)];[_0x24eb6c(0x1ea)];static{__name(this,_0x24eb6c(0x203));}[_0x24eb6c(0x1dd)];[_0x24eb6c(0x23f)];[_0x24eb6c(0x1fe)](_0x98f53a,_0x46256b){const _0x2f487e={_0x58bebb:0x215,_0x3a123e:0x1ea},_0xb6e1e0=_0x24eb6c;this[_0xb6e1e0(_0x2f487e._0x58bebb)][_0xb6e1e0(0x205)]({'scope':this[_0xb6e1e0(_0x2f487e._0x3a123e)],'method':_0x98f53a,'args':_0x46256b});}[_0x24eb6c(0x21b)](){const _0x1a8a7d={_0x3cdbb6:0x1ed,_0x482fb0:0x20a,_0x37c5de:0x20a},_0x4c8465=_0x24eb6c;if(this[_0x4c8465(_0x1a8a7d._0x3cdbb6)][_0x4c8465(_0x1a8a7d._0x482fb0)]){const _0x3169bc=this['behavior'][_0x4c8465(_0x1a8a7d._0x37c5de)];this[_0x4c8465(0x1ed)][_0x4c8465(0x20a)]=void 0x0;throw _0x3169bc;}}['url'](){const _0x3ddc87=_0x24eb6c;return this[_0x3ddc87(0x1dd)];}async['title'](){const _0x5d6ab5={_0x5bf6c3:0x1fe,_0x3c36c0:0x1e7},_0x55db02=_0x24eb6c;return this[_0x55db02(_0x5d6ab5._0x5bf6c3)](_0x55db02(0x231),[]),_0x55db02(_0x5d6ab5._0x3c36c0);}async['click'](_0x535678,_0x32fadd){const _0x127bf6={_0xf61d2c:0x1f9},_0x4411ad=_0x24eb6c;this[_0x4411ad(0x1fe)](_0x4411ad(_0x127bf6._0xf61d2c),[_0x535678,_0x32fadd]),this['maybeThrow'](),this[_0x4411ad(0x23f)]?.();}async[_0x24eb6c(0x1e5)](_0x1dcedc,_0x5d9f53){const _0xf2b6d2=_0x24eb6c;this[_0xf2b6d2(0x1fe)]('doubleClick',[_0x1dcedc,_0x5d9f53]),this['maybeThrow']();}async[_0x24eb6c(0x204)](_0x1d0cb4,_0x5dfa7b,_0x3e69af){const _0x567433=_0x24eb6c;this[_0x567433(0x1fe)]('fill',[_0x1d0cb4,_0x5dfa7b,_0x3e69af]),this[_0x567433(0x21b)]();}async[_0x24eb6c(0x234)](_0x10649d,_0x4a6421,_0x93ed4c){const _0x4545e9=_0x24eb6c;this[_0x4545e9(0x1fe)](_0x4545e9(0x234),[_0x10649d,_0x4a6421,_0x93ed4c]),this[_0x4545e9(0x21b)]();}async[_0x24eb6c(0x1fb)](_0x34b2d5,_0x512c29){const _0x175786=_0x24eb6c;this['record']('check',[_0x34b2d5,_0x512c29]),this[_0x175786(0x21b)]();}async['uncheck'](_0x39d684,_0xc626cd){const _0x48af26={_0x278f4e:0x1e9},_0x2005d2=_0x24eb6c;this['record'](_0x2005d2(_0x48af26._0x278f4e),[_0x39d684,_0xc626cd]),this['maybeThrow']();}async[_0x24eb6c(0x201)](_0x32281e,_0x3707fc,_0x41f00f){const _0x419ca2={_0x3d9205:0x201,_0x78a16:0x21b},_0x308fb1=_0x24eb6c;this[_0x308fb1(0x1fe)](_0x308fb1(_0x419ca2._0x3d9205),[_0x32281e,_0x3707fc,_0x41f00f]),this[_0x308fb1(_0x419ca2._0x78a16)]();}async['hover'](_0x580c45,_0x5acaaa){const _0x235158=_0x24eb6c;this['record']('hover',[_0x580c45,_0x5acaaa]),this[_0x235158(0x21b)]();}async[_0x24eb6c(0x212)](_0x574c4){const _0x66fcc3={_0x36c9bf:0x21b},_0x5d152e=_0x24eb6c;this['record'](_0x5d152e(0x212),[_0x574c4]),this[_0x5d152e(_0x66fcc3._0x36c9bf)]();}async[_0x24eb6c(0x24a)](_0x583352,_0x5d7724,_0x29e748){const _0x157df6=_0x24eb6c;this['record']('dragAndDrop',[_0x583352,_0x5d7724,_0x29e748]),this[_0x157df6(0x21b)]();}async[_0x24eb6c(0x239)](_0x222902,_0xd8fbef){const _0x1bcd34=_0x24eb6c;this[_0x1bcd34(0x1fe)](_0x1bcd34(0x239),[_0x222902,_0xd8fbef]),this['maybeThrow']();}async[_0x24eb6c(0x210)](_0xc9e8b5,_0x20526d){const _0x46ef9d={_0x4ba593:0x1fe},_0xa05dbc=_0x24eb6c;this[_0xa05dbc(_0x46ef9d._0x4ba593)](_0xa05dbc(0x210),[_0xc9e8b5,_0x20526d]),this[_0xa05dbc(0x21b)]();}async[_0x24eb6c(0x200)](_0x4b2f3d){const _0x9c26b2={_0x50dd65:0x1fe,_0x118a57:0x1ed},_0x16276e=_0x24eb6c;return this[_0x16276e(_0x9c26b2._0x50dd65)]('count',[_0x4b2f3d]),this[_0x16276e(_0x9c26b2._0x118a57)]['countByDefault']??0x1;}async[_0x24eb6c(0x1fd)](_0x15a918){const _0x46a582=_0x24eb6c;return this[_0x46a582(0x1fe)](_0x46a582(0x1fd),[_0x15a918]),this[_0x46a582(0x1ed)]['textContentByDefault']??'';}async['inputValue'](_0x15f989){const _0x57ff10={_0x461aef:0x1e3},_0x19fd7e=_0x24eb6c;return this['record'](_0x19fd7e(0x1fa),[_0x15f989]),this[_0x19fd7e(0x1ed)][_0x19fd7e(_0x57ff10._0x461aef)]??'';}async['checkedState'](_0x165671){const _0x814455={_0xb94005:0x1ed},_0x434763=_0x24eb6c;return this[_0x434763(0x1fe)](_0x434763(0x1f8),[_0x165671]),this[_0x434763(_0x814455._0xb94005)][_0x434763(0x22a)]??null;}async[_0x24eb6c(0x233)](_0x5b1624){const _0xabc6c4={_0x4dec31:0x1fe,_0x5cbcd9:0x1ed},_0x5d516a=_0x24eb6c;return this[_0x5d516a(_0xabc6c4._0x4dec31)]('isVisible',[_0x5b1624]),this[_0x5d516a(_0xabc6c4._0x5cbcd9)][_0x5d516a(0x21a)]??!![];}async['getAttribute'](_0x56af15,_0x3d2336){const _0x158d49={_0x229f2e:0x20e},_0x2d415b=_0x24eb6c;return this['record'](_0x2d415b(0x23a),[_0x56af15,_0x3d2336]),this['behavior'][_0x2d415b(_0x158d49._0x229f2e)]?.[_0x3d2336]??null;}async[_0x24eb6c(0x1ef)](_0x25b749,_0x2271f2){const _0xb60979={_0x51a2be:0x1fe},_0x18f219=_0x24eb6c;this[_0x18f219(_0xb60979._0x51a2be)]('waitFor',[_0x25b749,_0x2271f2]);}async[_0x24eb6c(0x21d)](_0x5b0954,_0x2bd7e4){const _0x4aaa9d={_0x2550b6:0x1fe},_0x415c99=_0x24eb6c;this[_0x415c99(_0x4aaa9d._0x2550b6)]('waitForUrl',[_0x5b0954,_0x2bd7e4]);}async['waitForText'](_0x3cd73a,_0x29598f){const _0x45d064={_0x396315:0x1fe},_0x53e344=_0x24eb6c;this[_0x53e344(_0x45d064._0x396315)](_0x53e344(0x248),[_0x3cd73a,_0x29598f]);}async[_0x24eb6c(0x240)](_0x1b00ed){const _0x2fc2c0={_0x43f8a1:0x1fe},_0x88972d=_0x24eb6c;this[_0x88972d(_0x2fc2c0._0x43f8a1)](_0x88972d(0x240),[_0x1b00ed]);}async['waitForLoadState'](_0x5124ae,_0x5bef2a){const _0x2c36a8=_0x24eb6c;this[_0x2c36a8(0x1fe)]('waitForLoadState',[_0x5124ae,_0x5bef2a]);}async[_0x24eb6c(0x24b)](_0x271e1e,_0x4c2c58){this['record']('goto',[_0x271e1e,_0x4c2c58]),this['currentUrl']=_0x271e1e;}async['reload'](_0x50927f){const _0x4bdb49=_0x24eb6c;this[_0x4bdb49(0x1fe)](_0x4bdb49(0x229),[_0x50927f]);}async[_0x24eb6c(0x20c)](_0x47bd99){const _0x134dc6=_0x24eb6c;this[_0x134dc6(0x1fe)](_0x134dc6(0x20c),[_0x47bd99]);}async[_0x24eb6c(0x1fc)](_0x2d0f82){const _0x1d996f=_0x24eb6c;this[_0x1d996f(0x1fe)](_0x1d996f(0x1fc),[_0x2d0f82]);}async[_0x24eb6c(0x202)](_0x2c4184){const _0x2c6875={_0x992085:0x202},_0x35d9a0=_0x24eb6c;return this[_0x35d9a0(0x1fe)](_0x35d9a0(_0x2c6875._0x992085),[_0x2c4184]),void 0x0;}async[_0x24eb6c(0x237)](_0x5c6015,_0x31e840){const _0x22d37d={_0x1fa7f2:0x1fe},_0x293a0a=_0x24eb6c;return this[_0x293a0a(_0x22d37d._0x1fa7f2)](_0x293a0a(0x237),[_0x5c6015,_0x31e840]),void 0x0;}async[_0x24eb6c(0x244)](_0x5a01d9){const _0x2f8896={_0x4b4abb:0x1e1,_0x27838c:0x209},_0x118bf8=_0x24eb6c;this['record']('inspectElement',[_0x5a01d9]);if(_0x5a01d9[_0x118bf8(0x1e4)][_0x118bf8(0x21f)]!==0x1||_0x5a01d9[_0x118bf8(0x1e4)][0x0][_0x118bf8(_0x2f8896._0x4b4abb)]!==_0x118bf8(0x209))return null;const _0xfc18d0=_0x5a01d9[_0x118bf8(0x1e4)][0x0][_0x118bf8(_0x2f8896._0x27838c)],_0x5af36d=this[_0x118bf8(0x1ed)]['elementHintByRef']?.[_0xfc18d0];return _0x5af36d??null;}async['screenshot'](_0x427995){const _0x157150={_0xcb03d2:0x1fe,_0xcb396c:0x1f2},_0x57f108=_0x24eb6c;return this[_0x57f108(_0x157150._0xcb03d2)](_0x57f108(0x22b),[_0x427995]),Buffer['from'](_0x57f108(_0x157150._0xcb396c));}async['outerHTML'](_0x2c00aa){const _0x40b6e0={_0x39ff2f:0x21f,_0x53c6a2:0x1e1,_0x5ed824:0x208,_0xc9a98b:0x22d,_0xcce565:0x225},_0x3c09e2=_0x24eb6c;this['record'](_0x3c09e2(0x1ee),[_0x2c00aa]);if(_0x2c00aa['steps'][_0x3c09e2(_0x40b6e0._0x39ff2f)]===0x1&&_0x2c00aa['steps'][0x0][_0x3c09e2(_0x40b6e0._0x53c6a2)]==='ref'){const _0x3fff3d=_0x2c00aa[_0x3c09e2(0x1e4)][0x0][_0x3c09e2(0x209)];return this[_0x3c09e2(0x1ed)][_0x3c09e2(_0x40b6e0._0x5ed824)]?.[_0x3fff3d]??_0x3c09e2(_0x40b6e0._0xc9a98b)+_0x3fff3d+_0x3c09e2(0x1e2);}return _0x3c09e2(_0x40b6e0._0xcce565);}},FakeContext=class{constructor(_0x3b8f76,_0x4b2e65,_0x51d789){const _0x4e8b0a={_0x5d6e10:0x1ea,_0x1735c3:0x23b,_0x4b8786:0x1f0,_0x105394:0x20b,_0x4607b8:0x249},_0x1a40c6={_0x1b4dc2:0x23c},_0x130a89=_0x24eb6c;this['recorder']=_0x3b8f76,this['behavior']=_0x4b2e65,this[_0x130a89(_0x4e8b0a._0x5d6e10)]=_0x51d789;const _0x12128d=new FakePage(_0x3b8f76,_0x4b2e65,_0x51d789+'.page0',_0x4b2e65[_0x130a89(_0x4e8b0a._0x1735c3)]??_0x130a89(0x21e));_0x4b2e65[_0x130a89(_0x4e8b0a._0x4b8786)]&&(_0x12128d[_0x130a89(0x23f)]=()=>{const _0x43e691=_0x130a89;this[_0x43e691(_0x1a40c6._0x1b4dc2)](_0x4b2e65['popupOnClick']);}),this['pageList']=[_0x12128d],this[_0x130a89(_0x4e8b0a._0x105394)]={..._0x4b2e65[_0x130a89(_0x4e8b0a._0x4607b8)]??{}},this[_0x130a89(0x220)]={..._0x4b2e65[_0x130a89(0x1df)]??{}};}[_0x24eb6c(0x215)];[_0x24eb6c(0x1ed)];[_0x24eb6c(0x1ea)];static{__name(this,'FakeContext');}[_0x24eb6c(0x221)];[_0x24eb6c(0x211)]=0x0;['frameStack']=[];[_0x24eb6c(0x20b)];[_0x24eb6c(0x220)];['newPageListeners']=new Set();[_0x24eb6c(0x1fe)](_0x139aac,_0x130703){const _0x108d40=_0x24eb6c;this[_0x108d40(0x215)][_0x108d40(0x205)]({'scope':this['scope'],'method':_0x139aac,'args':_0x130703});}['pages'](){const _0x6dd6ca={_0x52adf1:0x221},_0x1b3a4d=_0x24eb6c;return this[_0x1b3a4d(_0x6dd6ca._0x52adf1)];}[_0x24eb6c(0x22f)](){const _0x1476f9={_0x515d85:0x211},_0x4d60ac=_0x24eb6c,_0x1a651d=this[_0x4d60ac(0x221)][this[_0x4d60ac(_0x1476f9._0x515d85)]];if(!_0x1a651d)throw new DriverError('no\x20active\x20page\x20in\x20context',{'activeIdx':this[_0x4d60ac(0x211)]});return _0x1a651d;}[_0x24eb6c(0x223)](){const _0x1e8dbf={_0x34e11a:0x1ed},_0x5f2fb7=_0x24eb6c;return this[_0x5f2fb7(_0x1e8dbf._0x34e11a)][_0x5f2fb7(0x223)]??[];}[_0x24eb6c(0x20d)](){const _0x402aac={_0x2c01fa:0x1ed},_0xb74bf3=_0x24eb6c;return this[_0xb74bf3(_0x402aac._0x2c01fa)][_0xb74bf3(0x20d)]??[];}async['setActivePage'](_0x27d940){const _0xb4aca8={_0xf2f070:0x221,_0x1f39e6:0x211,_0x27fbe1:0x21f},_0x1da57d=_0x24eb6c;this[_0x1da57d(0x1fe)](_0x1da57d(0x20f),[_0x27d940]);if(_0x27d940<0x0||_0x27d940>=this[_0x1da57d(_0xb4aca8._0xf2f070)][_0x1da57d(0x21f)])throw new DriverError(_0x1da57d(0x245),{'index':_0x27d940,'available':this[_0x1da57d(0x221)][_0x1da57d(0x21f)]});this[_0x1da57d(_0xb4aca8._0x1f39e6)]=_0x27d940,this['frameStack'][_0x1da57d(_0xb4aca8._0x27fbe1)]=0x0;}[_0x24eb6c(0x1ff)](_0x584606){const _0x528863={_0x37e146:0x236},_0x5ddc6e=_0x24eb6c;return subscribe(this[_0x5ddc6e(_0x528863._0x37e146)],_0x584606);}['emitFakePopup'](_0x9b6332){const _0x71a880={_0x4e05f1:0x235,_0x4b2dc2:0x221,_0x57b16d:0x236},_0x383042=_0x24eb6c,_0x4ece96=this[_0x383042(0x1ea)]+_0x383042(_0x71a880._0x4e05f1)+this['pageList'][_0x383042(0x21f)],_0xe2c612=new FakePage(this[_0x383042(0x215)],this[_0x383042(0x1ed)],_0x4ece96,_0x9b6332);this[_0x383042(0x221)][_0x383042(0x205)](_0xe2c612);const _0x5cc53e=this[_0x383042(_0x71a880._0x4b2dc2)][_0x383042(0x21f)]-0x1;for(const _0x2a8a47 of this[_0x383042(_0x71a880._0x57b16d)]){try{_0x2a8a47({'index':_0x5cc53e,'url':_0x9b6332});}catch{}}return _0x5cc53e;}['closeFakePage'](_0x2b561e){const _0x200b30={_0x3cc602:0x21f,_0x6bd3ca:0x245,_0x40b8e8:0x221},_0x50f740=_0x24eb6c;if(_0x2b561e<0x0||_0x2b561e>=this['pageList'][_0x50f740(_0x200b30._0x3cc602)])throw new DriverError(_0x50f740(_0x200b30._0x6bd3ca),{'index':_0x2b561e,'available':this[_0x50f740(_0x200b30._0x40b8e8)]['length']});this['pageList'][_0x50f740(0x222)](_0x2b561e,0x1);}async[_0x24eb6c(0x1da)](_0x5bb1d2){const _0x9f45ca={_0x479de6:0x1fe,_0x34486d:0x1e4},_0x20a0ff=_0x24eb6c;this[_0x20a0ff(_0x9f45ca._0x479de6)](_0x20a0ff(0x1da),[_0x5bb1d2]);if(!_0x5bb1d2[_0x20a0ff(_0x9f45ca._0x34486d)]['length'])throw new LocatorError('enterFrame\x20called\x20with\x20empty\x20locator',{'locator':_0x5bb1d2});this[_0x20a0ff(0x1d9)][_0x20a0ff(0x205)](_0x5bb1d2);}async['exitFrame'](){const _0x433f29={_0x3f95de:0x1d9,_0x592f0f:0x243},_0x3d424a=_0x24eb6c;this['record'](_0x3d424a(0x206),[]);if(this[_0x3d424a(_0x433f29._0x3f95de)]['length']===0x0)throw new DriverError(_0x3d424a(_0x433f29._0x592f0f),{});this['frameStack']['pop']();}async['setLocalStorage'](_0x45c7fb,_0x48d44f){const _0x40a59d={_0x3d4d4a:0x1fe},_0x407222=_0x24eb6c;this[_0x407222(_0x40a59d._0x3d4d4a)](_0x407222(0x1d8),[_0x45c7fb,_0x48d44f]),this['localStorageState'][_0x45c7fb]=_0x48d44f;}async[_0x24eb6c(0x1f7)](_0x14c8fa){const _0x210ab8=_0x24eb6c;return this['record'](_0x210ab8(0x1f7),[_0x14c8fa]),this[_0x210ab8(0x20b)][_0x14c8fa]??null;}async[_0x24eb6c(0x241)](_0x5e2f68,_0x1718f2,_0x35f6d2){const _0x42f6de=_0x24eb6c;this['record']('setCookie',[_0x5e2f68,_0x1718f2,_0x35f6d2]),this[_0x42f6de(0x220)][_0x5e2f68]=_0x1718f2;}async[_0x24eb6c(0x1d7)](_0x226e82){const _0x14b7c1={_0x4618f7:0x1d7,_0x52ef62:0x220},_0x4987cd=_0x24eb6c;return this['record'](_0x4987cd(_0x14b7c1._0x4618f7),[_0x226e82]),this[_0x4987cd(_0x14b7c1._0x52ef62)][_0x226e82]??null;}async[_0x24eb6c(0x1de)](_0x4b111c){const _0x49dd04={_0x110355:0x1fe,_0x543fcf:0x1de},_0x308abd=_0x24eb6c;this[_0x308abd(_0x49dd04._0x110355)](_0x308abd(_0x49dd04._0x543fcf),[_0x4b111c]);}async[_0x24eb6c(0x202)](_0x5a9ac1){const _0x3bb395=_0x24eb6c;return this[_0x3bb395(0x1fe)]('evaluate',[_0x5a9ac1]),void 0x0;}async[_0x24eb6c(0x227)](){this['record']('close',[]);}[_0x24eb6c(0x1e8)](){const _0x36e471={_0x1b1e67:0x1d9,_0x4db52a:0x21f},_0x27648f=_0x24eb6c;return this[_0x27648f(_0x36e471._0x1b1e67)][_0x27648f(_0x36e471._0x4db52a)];}},FakeWebDriver=class{constructor(_0x1c3cab={}){const _0x3ae429={_0x1884e8:0x215},_0x3338fe=_0x24eb6c;this['behavior']=_0x1c3cab,this[_0x3338fe(_0x3ae429._0x1884e8)]=createRecorder();}[_0x24eb6c(0x1ed)];static{__name(this,_0x24eb6c(0x238));}[_0x24eb6c(0x21c)]=![];[_0x24eb6c(0x215)];['contexts']=[];async[_0x24eb6c(0x242)](_0x1d60eb){const _0x3b0aee={_0x2c1a8e:0x23e,_0x7c2383:0x242},_0x219ce1=_0x24eb6c;this[_0x219ce1(0x215)]['push']({'scope':_0x219ce1(_0x3b0aee._0x2c1a8e),'method':_0x219ce1(_0x3b0aee._0x7c2383),'args':[_0x1d60eb]}),this[_0x219ce1(0x21c)]=!![];}async[_0x24eb6c(0x216)](_0x1d5c28){const _0x337879={_0x447921:0x215,_0x248a16:0x205,_0x1acfc7:0x21c,_0x2c79d1:0x1dc,_0x119b4d:0x21f},_0x31e5d8=_0x24eb6c;this[_0x31e5d8(_0x337879._0x447921)][_0x31e5d8(_0x337879._0x248a16)]({'scope':_0x31e5d8(0x23e),'method':_0x31e5d8(0x216),'args':[_0x1d5c28]});if(!this[_0x31e5d8(_0x337879._0x1acfc7)])throw new DriverError(_0x31e5d8(0x1db),{});const _0x31ce42=new FakeContext(this[_0x31e5d8(0x215)],this[_0x31e5d8(0x1ed)],_0x31e5d8(0x228)+this[_0x31e5d8(_0x337879._0x2c79d1)][_0x31e5d8(_0x337879._0x119b4d)]);return this[_0x31e5d8(0x1dc)]['push'](_0x31ce42),_0x31ce42;}async[_0x24eb6c(0x227)](){const _0x3ae219={_0x4bf993:0x23e,_0x3feac1:0x227},_0x3c5a66=_0x24eb6c;this[_0x3c5a66(0x215)][_0x3c5a66(0x205)]({'scope':_0x3c5a66(_0x3ae219._0x4bf993),'method':_0x3c5a66(_0x3ae219._0x3feac1),'args':[]}),this[_0x3c5a66(0x21c)]=![];}['wsEndpoint'](){return void 0x0;}async[_0x24eb6c(0x1eb)](){const _0x447a21={_0x2d4cc5:0x1f5},_0x7312a9=_0x24eb6c;throw new DriverError(_0x7312a9(_0x447a21._0x2d4cc5),{});}['attachExisting'](){const _0xbeb883={_0x1dadf3:0x1f6},_0x84439d=_0x24eb6c;throw new DriverError(_0x84439d(_0xbeb883._0x1dadf3),{});}[_0x24eb6c(0x24c)](){const _0x2f499f=_0x24eb6c;return this['recorder'][_0x2f499f(0x24c)]();}[_0x24eb6c(0x247)](_0x20f672){const _0x11fa73={_0x490cbf:0x23d},_0x55feeb=_0x24eb6c;return this[_0x55feeb(0x215)][_0x55feeb(0x24c)]()[_0x55feeb(_0x11fa73._0x490cbf)](_0x5c9348=>_0x5c9348[_0x55feeb(0x1f1)]===_0x20f672);}};export{FakeWebDriver};
1
+ const _0x5cfb26=_0x3c5a;(function(_0x51fc95,_0x1da58f){const _0x4dfb60={_0x780dbf:0x16e,_0x4de962:0x163,_0xc74b32:0x13a,_0x30e7ad:0x118},_0x24fa42=_0x3c5a,_0x4772a4=_0x51fc95();while(!![]){try{const _0x3df6d=-parseInt(_0x24fa42(0x138))/0x1+parseInt(_0x24fa42(0x168))/0x2+parseInt(_0x24fa42(_0x4dfb60._0x780dbf))/0x3+parseInt(_0x24fa42(_0x4dfb60._0x4de962))/0x4+parseInt(_0x24fa42(0x140))/0x5*(-parseInt(_0x24fa42(_0x4dfb60._0xc74b32))/0x6)+-parseInt(_0x24fa42(_0x4dfb60._0x30e7ad))/0x7*(-parseInt(_0x24fa42(0x12a))/0x8)+-parseInt(_0x24fa42(0x166))/0x9;if(_0x3df6d===_0x1da58f)break;else _0x4772a4['push'](_0x4772a4['shift']());}catch(_0x1104ef){_0x4772a4['push'](_0x4772a4['shift']());}}}(_0x56d0,0x649da));var __defProp=Object[_0x5cfb26(0x131)],__name=(_0x5688af,_0x5e9f0f)=>__defProp(_0x5688af,_0x5cfb26(0x150),{'value':_0x5e9f0f,'configurable':!![]});function subscribe(_0x36020a,_0x34d435){const _0x319a2b={_0x2123c4:0x125},_0x3efaac=_0x5cfb26;return _0x36020a[_0x3efaac(_0x319a2b._0x2123c4)](_0x34d435),()=>{_0x36020a['delete'](_0x34d435);};}function _0x56d0(){const _0x3170b9=['zxHPDezYyw1L','mJC1otuYuePQyKfL','zNjHBwvezxb0Aa','AxneAxnHyMXLzej5rgvMyxvSDa','nZG0mZi0ogfPv2jYqW','y29UDgv4Dhm','nJG3mJKWtuX2AhHb','zMfRzs1WBMC','zNjHBwvtDgfJAW','Aw5WDxrwywX1zuj5rgvMyxvSDa','C3vIC2nYAwjL','y2fSBhngB3i','mteWntKZoffgqxPrwa','Dgv4DenVBNrLBNq','DxjS','y2fWDhvYzvn0ywnRvhjHy2u','CMvM','y2HLy2S','C2nYzwvUC2HVDa','y3jLyxrLuMvJB3jKzxi','Bgf1BMnO','BM8Gywn0AxzLihbHz2uGAw4Gy29UDgv4Da','zNjVBq','D3nfBMrWB2LUDa','Aw5ZCgvJDevSzw1LBNq','zhjPDMvY','ywn0AxzLugfNzq','y29UC29SzuvUDhjPzxm','zg91yMXLq2XPy2S','zxjYB3jpBK5LEhrby3rPB24','ChvZAa','rMfRzunVBNrLEhq','zxzHBhvHDgvpBKXVy2f0B3i','CMvJB3jKzxi','C2v0tg9JywXtDg9YywDL','Bg9JywXtDg9YywDLu3rHDgu','D2fPDezVCKXVywrtDgf0zq','z2v0q29VA2LL','zMLSBa','BMv3ugfNzuXPC3rLBMvYCW','z29gB3j3yxjK','D2fPDezVCK5HDMLNyxrPB24','y29VA2LLCW','C2f2zvn0B3jHz2vtDgf0zq','CMvJB3jK','y2XVC2u','B3v0zxjiDg1SqNLszwy','mtrxBM9KDxG','y29UDgv4Da','D2fPDezVCG','AxneAxnHyMXLza','Aw5PDgLHBfvYBa','zMLSDgvY','AxnwAxnPyMXL','zxHPDezYyw1LignHBgXLzcb3AxrOig5VigzYyw1Lig9UihrOzsbZDgfJAW','y29UBMvJDfnOyxjLzcbUB3qGC3vWCg9YDgvKigj5iezHA2vxzwjeCML2zxi','y2XPy2S','B3v0zxjive1m','Bwv0Ag9K','z29cywnR','ywrK','CgfNzsbPBMrLEcbVDxqGB2yGCMfUz2u','y2XPCgjVyxjKugfZDgu','y2XVC2vgywTLugfNzq','ywn0AxzLswr4','mJK0mJmXmM92re5KEq','y29VA2LLu3rHDgu','Dw5JAgvJAW','zNvUy3rPB24','z2v0qxr0CMLIDxrL','zwXLBwvUDeHPBNrcEvjLzG','C2nVCgu','zgvMAw5LuhjVCgvYDhK','y3vYCMvUDfvYBa','y2fSBhm','BMv3q29UDgv4Da','CMvSB2fK','CgfNzuXPC3q','BMv0D29YA0vUDhjPzxm','mtq2nta1A3bxr0j0','rMfRzvbHz2u','ntiWntq4D1jlu2Hy','D2fPDezVCLvYBa','y291BNrcEurLzMf1Bhq','zw1PDezHA2vqB3b1Ca','y29UBMvJDfnOyxjLza','C2v0qwn0AxzLugfNzq','nvH5sNjuwa','CgfNzxm','yMvOyxzPB3i','C2vSzwn0t3b0Aw9U','vw5VDgvZDevYCM9Y','DgL0Bgu','pgrPDJ48l2rPDJ4','zw50zxjgCMfTzq','yxr0CMLIDxrLC0j5rgvMyxvSDa','C2nYB2XSsw50B1zPzxC','Dgv4DenVBNrLBNrcEurLzMf1Bhq','zxzHBhvHDgu','z290BW','Bgf1BMnOzwq','B25bzNrLCKnSAwnR','Ag92zxi','BMfTzq','DxbSB2fKrMLSzq','Cg9WDxbpBKnSAwnR','ChjLC3m','yxr0ywnOrxHPC3rPBMCGBM90ihn1ChbVCNrLzcbIEsbgywTLv2vIrhjPDMvY','Aw5WDxrwywX1zq','iJ48l2rPDJ4','Bwf5yMvuAhjVDW','A2LUza','D2fPDezVCLrLEhq','C2v0q29VA2LL','zhjHz0fUzerYB3a','BgvUz3rO','C3rLChm','y291BNq','y2HLy2TLzfn0yxrL','z2v0tg9JywXtDg9YywDL','rMfRzvDLyKrYAxzLCG'];_0x56d0=function(){return _0x3170b9;};return _0x56d0();}__name(subscribe,_0x5cfb26(0x16c));var UnotestError=class extends Error{static{__name(this,_0x5cfb26(0x144));}[_0x5cfb26(0x119)];constructor(_0x5c6d25,_0x1ed3f={}){const _0x23547e={_0x2ced66:0x12d,_0x341dea:0x171},_0xf0cfec=_0x5cfb26;super(_0x5c6d25),this[_0xf0cfec(0x150)]=new.target.name,this[_0xf0cfec(0x119)]=Object['freeze']({..._0x1ed3f}),typeof Error[_0xf0cfec(0x171)]===_0xf0cfec(_0x23547e._0x2ced66)&&Error[_0xf0cfec(_0x23547e._0x341dea)](this,new.target);}},DriverError=class extends UnotestError{static{__name(this,'DriverError');}},LocatorError=class extends UnotestError{static{__name(this,'LocatorError');}};function createRecorder(){const _0x159893=_0x5cfb26,_0x1e2eb1=[];let _0x48be32=0x0;return{'push':__name(_0x473d77=>_0x1e2eb1[_0x159893(0x180)]({..._0x473d77,'seq':_0x48be32++}),_0x159893(0x180)),'calls':__name(()=>_0x1e2eb1,'calls')};}__name(createRecorder,_0x5cfb26(0x175));var FakePage=class{constructor(_0x34b7d6,_0x11dc72,_0x2be135,_0x16723c){const _0x34db3f={_0xbe6ee7:0x142,_0x5ef387:0x130},_0x276e5a=_0x5cfb26;this['recorder']=_0x34b7d6,this[_0x276e5a(_0x34db3f._0xbe6ee7)]=_0x11dc72,this[_0x276e5a(_0x34db3f._0x5ef387)]=_0x2be135,this['currentUrl']=_0x16723c;}[_0x5cfb26(0x10a)];[_0x5cfb26(0x142)];[_0x5cfb26(0x130)];static{__name(this,_0x5cfb26(0x139));}['currentUrl'];['onAfterClick'];[_0x5cfb26(0x115)](_0x1678b0,_0x43a250){const _0x1c30a1=_0x5cfb26;this[_0x1c30a1(0x10a)][_0x1c30a1(0x180)]({'scope':this[_0x1c30a1(0x130)],'method':_0x1678b0,'args':_0x43a250});}[_0x5cfb26(0x157)](){const _0x5e5cc7={_0x34ff15:0x142,_0x22f91c:0x142,_0x52c406:0x17f},_0x3d2b66=_0x5cfb26;if(this[_0x3d2b66(_0x5e5cc7._0x34ff15)][_0x3d2b66(0x17f)]){const _0x5468e5=this[_0x3d2b66(_0x5e5cc7._0x22f91c)][_0x3d2b66(_0x5e5cc7._0x52c406)];this[_0x3d2b66(_0x5e5cc7._0x34ff15)]['errorOnNextAction']=void 0x0;throw _0x5468e5;}}[_0x5cfb26(0x170)](){const _0x2c6bf3=_0x5cfb26;return this[_0x2c6bf3(0x132)];}async['title'](){const _0x476903=_0x5cfb26;return this['record'](_0x476903(0x145),[]),'fake\x20title';}async[_0x5cfb26(0x121)](_0x5689ae,_0x50d961){const _0x5984f1={_0x1b3b11:0x157},_0x394bb5=_0x5cfb26;this[_0x394bb5(0x115)](_0x394bb5(0x121),[_0x5689ae,_0x50d961]),this[_0x394bb5(_0x5984f1._0x1b3b11)](),this[_0x394bb5(0x14e)]?.();}async[_0x5cfb26(0x17e)](_0x26edcb,_0x3ea071){const _0x5af4b4={_0x3a1ff0:0x115},_0x485e0a=_0x5cfb26;this[_0x485e0a(_0x5af4b4._0x3a1ff0)](_0x485e0a(0x17e),[_0x26edcb,_0x3ea071]),this[_0x485e0a(0x157)]();}async[_0x5cfb26(0x10f)](_0x59bb16,_0x4cda2c,_0x33fe53){const _0x39ad26=_0x5cfb26;this[_0x39ad26(0x115)](_0x39ad26(0x10f),[_0x59bb16,_0x4cda2c,_0x33fe53]),this[_0x39ad26(0x157)]();}async[_0x5cfb26(0x153)](_0x958d0b,_0x5dadc5,_0xe1d820){const _0x32000f={_0x741121:0x157},_0x13f8d0=_0x5cfb26;this[_0x13f8d0(0x115)]('press',[_0x958d0b,_0x5dadc5,_0xe1d820]),this[_0x13f8d0(_0x32000f._0x741121)]();}async[_0x5cfb26(0x173)](_0x218ecf,_0x52db21){const _0x423213=_0x5cfb26;this[_0x423213(0x115)](_0x423213(0x173),[_0x218ecf,_0x52db21]),this['maybeThrow']();}async[_0x5cfb26(0x12c)](_0x22c9ea,_0x4c68d6){const _0x5da986={_0x59da88:0x115,_0xa8924a:0x157},_0x432810=_0x5cfb26;this[_0x432810(_0x5da986._0x59da88)]('uncheck',[_0x22c9ea,_0x4c68d6]),this[_0x432810(_0x5da986._0xa8924a)]();}async[_0x5cfb26(0x143)](_0x54cb61,_0x81f60c,_0x3bfe09){const _0x592f9d=_0x5cfb26;this['record'](_0x592f9d(0x143),[_0x54cb61,_0x81f60c,_0x3bfe09]),this[_0x592f9d(0x157)]();}async[_0x5cfb26(0x14f)](_0x5de9f7,_0x3dc7ce){const _0x582d2a={_0x10a658:0x14f,_0x5e28ff:0x157},_0x3b2ac1=_0x5cfb26;this['record'](_0x3b2ac1(_0x582d2a._0x10a658),[_0x5de9f7,_0x3dc7ce]),this[_0x3b2ac1(_0x582d2a._0x5e28ff)]();}async[_0x5cfb26(0x149)](_0x255ced){const _0x6a69c7={_0xed566d:0x149},_0x56ff0c=_0x5cfb26;this[_0x56ff0c(0x115)](_0x56ff0c(_0x6a69c7._0xed566d),[_0x255ced]),this['maybeThrow']();}async[_0x5cfb26(0x15b)](_0x688760,_0x1bfc82,_0x39101b){const _0x3deda4={_0x52a34c:0x157},_0x8f28d5=_0x5cfb26;this[_0x8f28d5(0x115)]('dragAndDrop',[_0x688760,_0x1bfc82,_0x39101b]),this[_0x8f28d5(_0x3deda4._0x52a34c)]();}async['uploadFile'](_0x2949da,_0x423677){const _0x4db566=_0x5cfb26;this[_0x4db566(0x115)](_0x4db566(0x151),[_0x2949da,_0x423677]),this['maybeThrow']();}async[_0x5cfb26(0x127)](_0x17a596,_0x1ccbe0){const _0x20736f=_0x5cfb26;this[_0x20736f(0x115)](_0x20736f(0x127),[_0x17a596,_0x1ccbe0]),this[_0x20736f(0x157)]();}async[_0x5cfb26(0x15e)](_0x33471d){const _0x1acc78={_0x56c56d:0x13c},_0x3a00a3=_0x5cfb26;return this['record'](_0x3a00a3(0x15e),[_0x33471d]),this['behavior'][_0x3a00a3(_0x1acc78._0x56c56d)]??0x1;}async[_0x5cfb26(0x16f)](_0x351183){const _0x188201={_0x183f72:0x142,_0x3522a4:0x14a},_0x2e14dc=_0x5cfb26;return this['record']('textContent',[_0x351183]),this[_0x2e14dc(_0x188201._0x183f72)][_0x2e14dc(_0x188201._0x3522a4)]??'';}async['inputValue'](_0x2a5229){const _0x36da64={_0x3f7b64:0x142,_0xcdff6c:0x16b},_0x477816=_0x5cfb26;return this[_0x477816(0x115)](_0x477816(0x155),[_0x2a5229]),this[_0x477816(_0x36da64._0x3f7b64)][_0x477816(_0x36da64._0xcdff6c)]??'';}async[_0x5cfb26(0x15f)](_0x32a856){const _0x3e2a01={_0x14efdb:0x15f},_0x48a4f3=_0x5cfb26;return this[_0x48a4f3(0x115)](_0x48a4f3(_0x3e2a01._0x14efdb),[_0x32a856]),this['behavior']['checkedStateByDefault']??null;}async[_0x5cfb26(0x11e)](_0x373772){const _0x481a94={_0x522383:0x11e,_0x3fbe15:0x142},_0x5b5b18=_0x5cfb26;return this[_0x5b5b18(0x115)](_0x5b5b18(_0x481a94._0x522383),[_0x373772]),this[_0x5b5b18(_0x481a94._0x3fbe15)]['isVisibleByDefault']??!![];}async[_0x5cfb26(0x11b)](_0x145c89){const _0x3f92e9={_0x56a487:0x115,_0x1354ed:0x142,_0x4e9e4c:0x165},_0x54bd81=_0x5cfb26;return this[_0x54bd81(_0x3f92e9._0x56a487)](_0x54bd81(0x11b),[_0x145c89]),this[_0x54bd81(_0x3f92e9._0x1354ed)][_0x54bd81(_0x3f92e9._0x4e9e4c)]??![];}async[_0x5cfb26(0x12e)](_0x528541,_0x28e5d5){const _0x5b2beb={_0x6075:0x142},_0x34b8d3=_0x5cfb26;return this[_0x34b8d3(0x115)](_0x34b8d3(0x12e),[_0x528541,_0x28e5d5]),this[_0x34b8d3(_0x5b2beb._0x6075)][_0x34b8d3(0x148)]?.[_0x28e5d5]??null;}async[_0x5cfb26(0x11a)](_0x41e028,_0x2bfb95){const _0x4310fb={_0x3786a9:0x115,_0x577921:0x11a},_0x1d2c7a=_0x5cfb26;this[_0x1d2c7a(_0x4310fb._0x3786a9)](_0x1d2c7a(_0x4310fb._0x577921),[_0x41e028,_0x2bfb95]);}async[_0x5cfb26(0x13b)](_0x5a86b7,_0x41fd67){const _0x43229e={_0x2955a3:0x115},_0x85f457=_0x5cfb26;this[_0x85f457(_0x43229e._0x2955a3)]('waitForUrl',[_0x5a86b7,_0x41fd67]);}async[_0x5cfb26(0x159)](_0x21f78c,_0x58a913){const _0x6b03c2=_0x5cfb26;this['record'](_0x6b03c2(0x159),[_0x21f78c,_0x58a913]);}async[_0x5cfb26(0x112)](_0x352863){const _0x386ac5=_0x5cfb26;this[_0x386ac5(0x115)]('waitForNavigation',[_0x352863]);}async[_0x5cfb26(0x10d)](_0x3dd6a8,_0x18d591){const _0x1c0a49={_0x59d30c:0x115},_0x39ab41=_0x5cfb26;this[_0x39ab41(_0x1c0a49._0x59d30c)]('waitForLoadState',[_0x3dd6a8,_0x18d591]);}async[_0x5cfb26(0x14c)](_0x38c535,_0x38ff0d){const _0x24a955={_0x436177:0x115,_0x27c82f:0x132},_0x2084c4=_0x5cfb26;this[_0x2084c4(_0x24a955._0x436177)](_0x2084c4(0x14c),[_0x38c535,_0x38ff0d]),this[_0x2084c4(_0x24a955._0x27c82f)]=_0x38c535;}async['reload'](_0x5783df){const _0x2c6813=_0x5cfb26;this[_0x2c6813(0x115)](_0x2c6813(0x135),[_0x5783df]);}async['goBack'](_0x2ab8f3){const _0x166e97={_0x1fc93d:0x124},_0x55b0a5=_0x5cfb26;this['record'](_0x55b0a5(_0x166e97._0x1fc93d),[_0x2ab8f3]);}async[_0x5cfb26(0x111)](_0x6694fc){const _0x4cf8a8={_0x4aaf25:0x115,_0x455b9f:0x111},_0x2781de=_0x5cfb26;this[_0x2781de(_0x4cf8a8._0x4aaf25)](_0x2781de(_0x4cf8a8._0x455b9f),[_0x6694fc]);}async[_0x5cfb26(0x14b)](_0x44a1d6){const _0x94de0a=_0x5cfb26;return this['record'](_0x94de0a(0x14b),[_0x44a1d6]),void 0x0;}async[_0x5cfb26(0x182)](_0x4bc628,_0x4856b3){const _0x2a576f=_0x5cfb26;return this['record'](_0x2a576f(0x182),[_0x4bc628,_0x4856b3]),void 0x0;}async['inspectElement'](_0xd63746){const _0x4f622b={_0x35b213:0x17a,_0x4f5507:0x172,_0x1ce21e:0x15d},_0x5303f9=_0x5cfb26;this['record'](_0x5303f9(_0x4f622b._0x35b213),[_0xd63746]);if(_0xd63746['steps'][_0x5303f9(0x15c)]!==0x1||_0xd63746[_0x5303f9(0x15d)][0x0][_0x5303f9(0x158)]!==_0x5303f9(_0x4f622b._0x4f5507))return null;const _0x4fe4b3=_0xd63746[_0x5303f9(_0x4f622b._0x1ce21e)][0x0][_0x5303f9(_0x4f622b._0x4f5507)],_0x4da019=this['behavior'][_0x5303f9(0x12f)]?.[_0x4fe4b3];return _0x4da019??null;}async[_0x5cfb26(0x174)](_0x183482){const _0x177147={_0xb2748f:0x178,_0x4c6f16:0x169},_0x51527a=_0x5cfb26;return this[_0x51527a(0x115)](_0x51527a(0x174),[_0x183482]),Buffer[_0x51527a(_0x177147._0xb2748f)](_0x51527a(_0x177147._0x4c6f16));}async[_0x5cfb26(0x122)](_0xdff201){const _0x409389={_0x3a6d56:0x172,_0x2312ed:0x156,_0xc9ca1a:0x146},_0x5cd995=_0x5cfb26;this['record'](_0x5cd995(0x122),[_0xdff201]);if(_0xdff201['steps']['length']===0x1&&_0xdff201[_0x5cd995(0x15d)][0x0]['kind']===_0x5cd995(_0x409389._0x3a6d56)){const _0x7019b=_0xdff201[_0x5cd995(0x15d)][0x0][_0x5cd995(0x172)];return this[_0x5cd995(0x142)][_0x5cd995(0x117)]?.[_0x7019b]??'<div\x20data-unotest-ref=\x22'+_0x7019b+_0x5cd995(_0x409389._0x2312ed);}return _0x5cd995(_0x409389._0xc9ca1a);}},FakeContext=class{constructor(_0x26da35,_0x15a427,_0x41b195){const _0x2bc458={_0x1c21ae:0x142,_0x422694:0x130,_0x139886:0x152,_0x17c755:0x14e,_0x18bbbe:0x136,_0x2ea2c2:0x113},_0xfc6731=_0x5cfb26;this[_0xfc6731(0x10a)]=_0x26da35,this[_0xfc6731(_0x2bc458._0x1c21ae)]=_0x15a427,this[_0xfc6731(_0x2bc458._0x422694)]=_0x41b195;const _0x538e5b=new FakePage(_0x26da35,_0x15a427,_0x41b195+'.page0',_0x15a427[_0xfc6731(0x11c)]??'about:blank');_0x15a427[_0xfc6731(_0x2bc458._0x139886)]&&(_0x538e5b[_0xfc6731(_0x2bc458._0x17c755)]=()=>{const _0x3fe0ab=_0xfc6731;this[_0x3fe0ab(0x13d)](_0x15a427['popupOnClick']);}),this[_0xfc6731(_0x2bc458._0x18bbbe)]=[_0x538e5b],this[_0xfc6731(0x10c)]={..._0x15a427['localStorage']??{}},this['cookieState']={..._0x15a427[_0xfc6731(_0x2bc458._0x2ea2c2)]??{}};}[_0x5cfb26(0x10a)];[_0x5cfb26(0x142)];[_0x5cfb26(0x130)];static{__name(this,_0x5cfb26(0x181));}[_0x5cfb26(0x136)];[_0x5cfb26(0x129)]=0x0;[_0x5cfb26(0x16a)]=[];[_0x5cfb26(0x10c)];[_0x5cfb26(0x12b)];[_0x5cfb26(0x110)]=new Set();['record'](_0x4a6d7b,_0x2e337c){const _0x570d8d=_0x5cfb26;this[_0x570d8d(0x10a)][_0x570d8d(0x180)]({'scope':this[_0x570d8d(0x130)],'method':_0x4a6d7b,'args':_0x2e337c});}[_0x5cfb26(0x141)](){return this['pageList'];}[_0x5cfb26(0x17c)](){const _0x386904={_0x2a0cc7:0x136,_0x45cd99:0x129,_0x3838ba:0x177},_0x2c5030=_0x5cfb26,_0x25f98a=this[_0x2c5030(_0x386904._0x2a0cc7)][this[_0x2c5030(_0x386904._0x45cd99)]];if(!_0x25f98a)throw new DriverError(_0x2c5030(_0x386904._0x3838ba),{'activeIdx':this[_0x2c5030(_0x386904._0x45cd99)]});return _0x25f98a;}['consoleEntries'](){const _0x16062a={_0x494486:0x17d},_0x160e23=_0x5cfb26;return this[_0x160e23(0x142)][_0x160e23(_0x16062a._0x494486)]??[];}[_0x5cfb26(0x137)](){const _0x12e655=_0x5cfb26;return this[_0x12e655(0x142)][_0x12e655(0x137)]??[];}async[_0x5cfb26(0x13f)](_0x4c7302){const _0x47ebd7={_0x41eb90:0x15c,_0x391937:0x126,_0xc04f04:0x136},_0x4ba043=_0x5cfb26;this[_0x4ba043(0x115)]('setActivePage',[_0x4c7302]);if(_0x4c7302<0x0||_0x4c7302>=this[_0x4ba043(0x136)][_0x4ba043(_0x47ebd7._0x41eb90)])throw new DriverError(_0x4ba043(_0x47ebd7._0x391937),{'index':_0x4c7302,'available':this[_0x4ba043(_0x47ebd7._0xc04f04)][_0x4ba043(0x15c)]});this[_0x4ba043(0x129)]=_0x4c7302,this['frameStack']['length']=0x0;}['onNewPage'](_0x45bd51){const _0x4b3db0={_0x181f6f:0x110},_0x20258f=_0x5cfb26;return subscribe(this[_0x20258f(_0x4b3db0._0x181f6f)],_0x45bd51);}[_0x5cfb26(0x13d)](_0x3d3630){const _0x2f2740={_0xfdd8db:0x130,_0x220d3a:0x10a,_0x266b2d:0x136},_0x533576=_0x5cfb26,_0x382af7=this[_0x533576(_0x2f2740._0xfdd8db)]+'.page'+this['pageList'][_0x533576(0x15c)],_0x58debd=new FakePage(this[_0x533576(_0x2f2740._0x220d3a)],this[_0x533576(0x142)],_0x382af7,_0x3d3630);this['pageList']['push'](_0x58debd);const _0x8fc3b1=this[_0x533576(_0x2f2740._0x266b2d)][_0x533576(0x15c)]-0x1;for(const _0xe17fd9 of this[_0x533576(0x110)]){try{_0xe17fd9({'index':_0x8fc3b1,'url':_0x3d3630});}catch{}}return _0x8fc3b1;}[_0x5cfb26(0x128)](_0x4370a8){const _0x36b274={_0x3ec48d:0x136,_0x37c54b:0x15c},_0x5ab317=_0x5cfb26;if(_0x4370a8<0x0||_0x4370a8>=this[_0x5ab317(_0x36b274._0x3ec48d)][_0x5ab317(0x15c)])throw new DriverError(_0x5ab317(0x126),{'index':_0x4370a8,'available':this[_0x5ab317(0x136)][_0x5ab317(_0x36b274._0x37c54b)]});this[_0x5ab317(0x136)]['splice'](_0x4370a8,0x1);}async[_0x5cfb26(0x147)](_0xcc7501){const _0x54ee8a={_0x1cc586:0x115},_0x1b0823=_0x5cfb26;this[_0x1b0823(_0x54ee8a._0x1cc586)](_0x1b0823(0x147),[_0xcc7501]);if(!_0xcc7501[_0x1b0823(0x15d)][_0x1b0823(0x15c)])throw new LocatorError('enterFrame\x20called\x20with\x20empty\x20locator',{'locator':_0xcc7501});this[_0x1b0823(0x16a)][_0x1b0823(0x180)](_0xcc7501);}async[_0x5cfb26(0x162)](){const _0x589afc={_0x1b57ba:0x162},_0x57722c=_0x5cfb26;this['record'](_0x57722c(_0x589afc._0x1b57ba),[]);if(this[_0x57722c(0x16a)][_0x57722c(0x15c)]===0x0)throw new DriverError(_0x57722c(0x11f),{});this[_0x57722c(0x16a)]['pop']();}async[_0x5cfb26(0x10b)](_0x32e0b1,_0x5318c2){const _0x1441ad={_0x30c702:0x10b},_0x4b05a0=_0x5cfb26;this['record'](_0x4b05a0(_0x1441ad._0x30c702),[_0x32e0b1,_0x5318c2]),this[_0x4b05a0(0x10c)][_0x32e0b1]=_0x5318c2;}async[_0x5cfb26(0x160)](_0x53b078){const _0x1d07f0={_0x471f33:0x115},_0x1a678a=_0x5cfb26;return this[_0x1a678a(_0x1d07f0._0x471f33)]('getLocalStorage',[_0x53b078]),this[_0x1a678a(0x10c)][_0x53b078]??null;}async[_0x5cfb26(0x15a)](_0x1c02b9,_0xb06551,_0x5cc221){const _0x16d933={_0x19ecdc:0x12b},_0x3e1cd3=_0x5cfb26;this[_0x3e1cd3(0x115)]('setCookie',[_0x1c02b9,_0xb06551,_0x5cc221]),this[_0x3e1cd3(_0x16d933._0x19ecdc)][_0x1c02b9]=_0xb06551;}async['getCookie'](_0x1f1c94){const _0x50efe3={_0xc145e3:0x12b},_0x85652b=_0x5cfb26;return this['record'](_0x85652b(0x10e),[_0x1f1c94]),this[_0x85652b(_0x50efe3._0xc145e3)][_0x1f1c94]??null;}async[_0x5cfb26(0x114)](_0x5af63f){const _0x32fd25={_0x897cba:0x115},_0x4522c9=_0x5cfb26;this[_0x4522c9(_0x32fd25._0x897cba)](_0x4522c9(0x114),[_0x5af63f]);}async[_0x5cfb26(0x14b)](_0x3aa6c2){const _0x8b6ab6={_0x247f10:0x115},_0x278701=_0x5cfb26;return this[_0x278701(_0x8b6ab6._0x247f10)]('evaluate',[_0x3aa6c2]),void 0x0;}async[_0x5cfb26(0x116)](){const _0x16d698={_0x5b892f:0x115,_0x20b395:0x116},_0x11766e=_0x5cfb26;this[_0x11766e(_0x16d698._0x5b892f)](_0x11766e(_0x16d698._0x20b395),[]);}[_0x5cfb26(0x164)](){const _0x2e2fc4={_0x5f6b73:0x16a,_0x37469f:0x15c},_0x3910f6=_0x5cfb26;return this[_0x3910f6(_0x2e2fc4._0x5f6b73)][_0x3910f6(_0x2e2fc4._0x37469f)];}},FakeWebDriver=class{constructor(_0x51f512={}){const _0x2c03cf={_0x43840b:0x142},_0x4daf60=_0x5cfb26;this[_0x4daf60(_0x2c03cf._0x43840b)]=_0x51f512,this['recorder']=createRecorder();}[_0x5cfb26(0x142)];static{__name(this,_0x5cfb26(0x161));}[_0x5cfb26(0x14d)]=![];[_0x5cfb26(0x10a)];['contexts']=[];async[_0x5cfb26(0x176)](_0x392cf1){const _0x191d2c=_0x5cfb26;this[_0x191d2c(0x10a)][_0x191d2c(0x180)]({'scope':_0x191d2c(0x17b),'method':_0x191d2c(0x176),'args':[_0x392cf1]}),this['launched']=!![];}async['newContext'](_0x4de9d2){const _0x4a6e83={_0x16b496:0x10a,_0x47bf88:0x134,_0x34a34e:0x167,_0x53d507:0x15c,_0x10520b:0x180},_0x9c668b=_0x5cfb26;this[_0x9c668b(_0x4a6e83._0x16b496)][_0x9c668b(0x180)]({'scope':_0x9c668b(0x17b),'method':_0x9c668b(_0x4a6e83._0x47bf88),'args':[_0x4de9d2]});if(!this['launched'])throw new DriverError('newContext\x20called\x20before\x20launch()',{});const _0x86bbab=new FakeContext(this['recorder'],this[_0x9c668b(0x142)],'ctx'+this[_0x9c668b(_0x4a6e83._0x34a34e)][_0x9c668b(_0x4a6e83._0x53d507)]);return this[_0x9c668b(_0x4a6e83._0x34a34e)][_0x9c668b(_0x4a6e83._0x10520b)](_0x86bbab),_0x86bbab;}async[_0x5cfb26(0x116)](){const _0x1c192b={_0x2d7412:0x116},_0x54b301=_0x5cfb26;this[_0x54b301(0x10a)][_0x54b301(0x180)]({'scope':'driver','method':_0x54b301(_0x1c192b._0x2d7412),'args':[]}),this[_0x54b301(0x14d)]=![];}[_0x5cfb26(0x179)](){return void 0x0;}async[_0x5cfb26(0x13e)](){const _0x5505a9=_0x5cfb26;throw new DriverError(_0x5505a9(0x120),{});}['attachExisting'](){const _0x5304a3={_0x17c3b8:0x154},_0x4ccd49=_0x5cfb26;throw new DriverError(_0x4ccd49(_0x5304a3._0x17c3b8),{});}[_0x5cfb26(0x133)](){const _0xf55f93=_0x5cfb26;return this['recorder'][_0xf55f93(0x133)]();}[_0x5cfb26(0x16d)](_0x3a9993){const _0x222c6d={_0x180c5e:0x10a},_0x4e7b77=_0x5cfb26;return this[_0x4e7b77(_0x222c6d._0x180c5e)]['calls']()[_0x4e7b77(0x11d)](_0x475230=>_0x475230[_0x4e7b77(0x123)]===_0x3a9993);}};function _0x3c5a(_0x1faa9b,_0x45761b){_0x1faa9b=_0x1faa9b-0x10a;const _0x56d048=_0x56d0();let _0x3c5a0f=_0x56d048[_0x1faa9b];if(_0x3c5a['rffPZZ']===undefined){var _0xf807e=function(_0x23fdb2){const _0x546a34='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5688af='',_0x5e9f0f='';for(let _0x36020a=0x0,_0x34d435,_0x5c6d25,_0x1ed3f=0x0;_0x5c6d25=_0x23fdb2['charAt'](_0x1ed3f++);~_0x5c6d25&&(_0x34d435=_0x36020a%0x4?_0x34d435*0x40+_0x5c6d25:_0x5c6d25,_0x36020a++%0x4)?_0x5688af+=String['fromCharCode'](0xff&_0x34d435>>(-0x2*_0x36020a&0x6)):0x0){_0x5c6d25=_0x546a34['indexOf'](_0x5c6d25);}for(let _0x1e2eb1=0x0,_0x48be32=_0x5688af['length'];_0x1e2eb1<_0x48be32;_0x1e2eb1++){_0x5e9f0f+='%'+('00'+_0x5688af['charCodeAt'](_0x1e2eb1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5e9f0f);};_0x3c5a['KYWstg']=_0xf807e,_0x3c5a['SsjVAW']={},_0x3c5a['rffPZZ']=!![];}const _0x54af70=_0x56d048[0x0],_0x5e0e08=_0x1faa9b+_0x54af70,_0x2efce1=_0x3c5a['SsjVAW'][_0x5e0e08];return!_0x2efce1?(_0x3c5a0f=_0x3c5a['KYWstg'](_0x3c5a0f),_0x3c5a['SsjVAW'][_0x5e0e08]=_0x3c5a0f):_0x3c5a0f=_0x2efce1,_0x3c5a0f;}export{FakeWebDriver};
@@ -1,5 +1,5 @@
1
- import { i as LocatorValue, W as WebDriver, D as DriverContext, d as DriverPage } from '../interfaces-MxHi1Air.js';
2
- export { j as LocatorStep, k as appendStep, l as describeLocator, m as isLocatorValue, r as rootedAt } from '../interfaces-MxHi1Air.js';
1
+ import { i as LocatorValue, W as WebDriver, D as DriverContext, d as DriverPage } from '../interfaces-XvuefHHC.js';
2
+ export { j as LocatorStep, k as appendStep, l as describeLocator, m as isLocatorValue, r as rootedAt } from '../interfaces-XvuefHHC.js';
3
3
  import { Matcher, RegexLiteral } from '@unotest/protocol';
4
4
  import { ExecutionWalker, ExecutionEvent, RunResult, RunOptions } from '@unotest/dsl/executor';
5
5
  export { ExecutionError, ExecutionEvent, RunOptions, RunResult } from '@unotest/dsl/executor';
@@ -73,6 +73,10 @@ declare function chainGetByTitle(loc: LocatorValue, text: Matcher, options?: {
73
73
  interface VariableStore {
74
74
  has(name: string): boolean;
75
75
  get(name: string): string | undefined;
76
+ /** One-line, human/agent-readable summary of WHERE lookups searched
77
+ * (active environment + layer files, missing ones flagged). Optional so
78
+ * test fakes stay two-method; consumed by "variable not found" errors. */
79
+ describeSources?(): string;
76
80
  }
77
81
 
78
82
  interface Logger {
@@ -147,6 +151,10 @@ declare class TestRuntime {
147
151
  setVar(name: string, value: DslValue): void;
148
152
  getVar(name: string): DslValue;
149
153
  hasVar(name: string): boolean;
154
+ /** Direct external-variable lookup (`unotest/.env` / `.secrets`), no
155
+ * scope fallback, no throw. Used by shell() to resolve the
156
+ * `sandbox.exportSecrets` allowlist into subprocess env. */
157
+ externalVar(name: string): string | undefined;
150
158
  /** Snapshot for `inspect_runtime` MCP tool. */
151
159
  snapshotVars(): Record<string, DslValue>;
152
160
  }
@@ -197,6 +205,9 @@ interface ActiveRuntime {
197
205
  node: unknown;
198
206
  line: number;
199
207
  col: number;
208
+ /** Label of the enclosing `step("…")` block, when the failing
209
+ * statement ran inside one — the human-readable intent for reports. */
210
+ stepLabel?: string;
200
211
  error: {
201
212
  message: string;
202
213
  stack?: string;