@browserbasehq/orca 3.1.0-patch.1 → 3.1.0-patch.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/cjs/cli.js +45 -17
  2. package/dist/cjs/cli.js.map +2 -2
  3. package/dist/cjs/index.js +192 -123
  4. package/dist/cjs/index.js.map +3 -3
  5. package/dist/cjs/lib/logger.d.ts +1 -1
  6. package/dist/cjs/lib/modelUtils.d.ts +3 -0
  7. package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -1
  8. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -1
  9. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +2 -1
  10. package/dist/cjs/lib/v3/agent/tools/index.d.ts +2 -2
  11. package/dist/cjs/lib/v3/api.d.ts +16 -1
  12. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
  13. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  14. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +12 -12
  15. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  16. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +2 -2
  17. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  18. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +1 -0
  19. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  20. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +1 -0
  21. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +1 -1
  22. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +1 -0
  23. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  24. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +1 -0
  25. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  26. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +2 -2
  27. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  28. package/dist/cjs/lib/v3/types/public/api.d.ts +8 -0
  29. package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
  30. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
  31. package/dist/cjs/tests/agent-execution-model.test.js +139 -0
  32. package/dist/cjs/tests/agent-execution-model.test.js.map +7 -0
  33. package/dist/cjs/tests/api-multiregion.test.js +73 -0
  34. package/dist/cjs/tests/api-multiregion.test.js.map +7 -0
  35. package/dist/cjs/tests/model-utils.test.js +43 -0
  36. package/dist/cjs/tests/model-utils.test.js.map +7 -0
  37. package/dist/cjs/tests/public-api/export-surface.test.js +1 -0
  38. package/dist/cjs/tests/public-api/export-surface.test.js.map +1 -1
  39. package/dist/cjs/tests/public-api/llm-and-agents.test.js +1 -0
  40. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +1 -1
  41. package/dist/cjs/tests/public-api/public-error-types.test.js +3 -1
  42. package/dist/cjs/tests/public-api/public-error-types.test.js.map +2 -2
  43. package/dist/cjs/tests/public-api/v3-core.test.js +1 -0
  44. package/dist/cjs/tests/public-api/v3-core.test.js.map +1 -1
  45. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +2 -0
  46. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +1 -1
  47. package/dist/cjs/tests/understudy-command-exception.test.js +52 -0
  48. package/dist/cjs/tests/understudy-command-exception.test.js.map +7 -0
  49. package/dist/esm/index.d.ts +2 -2
  50. package/dist/esm/lib/logger.d.ts +1 -1
  51. package/dist/esm/lib/modelUtils.d.ts +3 -0
  52. package/dist/esm/lib/modelUtils.js +7 -2
  53. package/dist/esm/lib/modelUtils.js.map +1 -1
  54. package/dist/esm/lib/v3/agent/tools/act.d.ts +2 -1
  55. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  56. package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -1
  57. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  58. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +2 -1
  59. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  60. package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
  61. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  62. package/dist/esm/lib/v3/api.d.ts +16 -1
  63. package/dist/esm/lib/v3/api.js +41 -5
  64. package/dist/esm/lib/v3/api.js.map +1 -1
  65. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
  66. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +22 -20
  67. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  68. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  69. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  70. package/dist/esm/lib/v3/llm/aisdk.js +5 -2
  71. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  72. package/dist/esm/lib/v3/shutdown/supervisor.js +36 -17
  73. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  74. package/dist/esm/lib/v3/shutdown/supervisorClient.js +2 -1
  75. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  76. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +12 -12
  77. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  78. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +2 -2
  79. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  80. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +1 -0
  81. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  82. package/dist/esm/lib/v3/tests/locator-fill.spec.js +1 -0
  83. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +1 -1
  84. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +1 -0
  85. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  86. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +1 -0
  87. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  88. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +2 -2
  89. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  90. package/dist/esm/lib/v3/types/public/api.d.ts +8 -0
  91. package/dist/esm/lib/v3/types/public/api.js +5 -3
  92. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  93. package/dist/esm/lib/v3/types/public/index.d.ts +1 -0
  94. package/dist/esm/lib/v3/types/public/index.js.map +1 -1
  95. package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
  96. package/dist/esm/lib/v3/types/public/sdkErrors.js +12 -6
  97. package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
  98. package/dist/esm/lib/v3/v3.js +7 -8
  99. package/dist/esm/lib/v3/v3.js.map +1 -1
  100. package/dist/esm/tests/agent-execution-model.test.js +139 -0
  101. package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
  102. package/dist/esm/tests/api-multiregion.test.js +73 -0
  103. package/dist/esm/tests/api-multiregion.test.js.map +7 -0
  104. package/dist/esm/tests/model-utils.test.js +43 -0
  105. package/dist/esm/tests/model-utils.test.js.map +7 -0
  106. package/dist/esm/tests/public-api/export-surface.test.js +1 -0
  107. package/dist/esm/tests/public-api/export-surface.test.js.map +1 -1
  108. package/dist/esm/tests/public-api/llm-and-agents.test.js +1 -0
  109. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +1 -1
  110. package/dist/esm/tests/public-api/public-error-types.test.js +3 -1
  111. package/dist/esm/tests/public-api/public-error-types.test.js.map +2 -2
  112. package/dist/esm/tests/public-api/v3-core.test.js +1 -0
  113. package/dist/esm/tests/public-api/v3-core.test.js.map +1 -1
  114. package/dist/esm/tests/snapshot-capture-orchestration.test.js +2 -0
  115. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +1 -1
  116. package/dist/esm/tests/understudy-command-exception.test.js +55 -0
  117. package/dist/esm/tests/understudy-command-exception.test.js.map +7 -0
  118. package/package.json +1 -3
@@ -9,7 +9,7 @@ export interface LoggerOptions {
9
9
  /**
10
10
  * Creates a configured Pino logger instance
11
11
  */
12
- export declare function createLogger(options?: LoggerOptions): import("pino").Logger<never, boolean>;
12
+ export declare function createLogger(options?: LoggerOptions): pino.Logger<never, boolean>;
13
13
  /**
14
14
  * StagehandLogger class that wraps Pino for our specific needs
15
15
  *
@@ -1,4 +1,7 @@
1
1
  import { ClientOptions, ModelConfiguration } from "./v3/types/public/model.js";
2
+ export declare function extractModelName(model?: string | {
3
+ modelName: string;
4
+ }): string | undefined;
2
5
  export declare function splitModelName(model: string): {
3
6
  provider: string;
4
7
  modelName: string;
@@ -1,6 +1,7 @@
1
1
  import type { V3 } from "../../v3.js";
2
2
  import type { Action } from "../../types/public/methods.js";
3
- export declare const actTool: (v3: V3, executionModel?: string) => import("ai").Tool<{
3
+ import type { AgentModelConfig } from "../../types/public/agent.js";
4
+ export declare const actTool: (v3: V3, executionModel?: string | AgentModelConfig) => import("ai").Tool<{
4
5
  action: string;
5
6
  }, {
6
7
  success: boolean;
@@ -1,5 +1,6 @@
1
1
  import type { V3 } from "../../v3.js";
2
- export declare const extractTool: (v3: V3, executionModel?: string) => import("ai").Tool<{
2
+ import type { AgentModelConfig } from "../../types/public/agent.js";
3
+ export declare const extractTool: (v3: V3, executionModel?: string | AgentModelConfig) => import("ai").Tool<{
3
4
  instruction: string;
4
5
  schema?: {
5
6
  [x: string]: unknown;
@@ -1,6 +1,7 @@
1
1
  import type { V3 } from "../../v3.js";
2
2
  import type { Action } from "../../types/public/methods.js";
3
- export declare const fillFormTool: (v3: V3, executionModel?: string) => import("ai").Tool<{
3
+ import type { AgentModelConfig } from "../../types/public/agent.js";
4
+ export declare const fillFormTool: (v3: V3, executionModel?: string | AgentModelConfig) => import("ai").Tool<{
4
5
  fields: {
5
6
  action: string;
6
7
  value: string;
@@ -18,9 +18,9 @@ import { searchTool } from "./search.js";
18
18
  import type { ToolSet, InferUITools } from "ai";
19
19
  import type { V3 } from "../../v3.js";
20
20
  import type { LogLine } from "../../types/public/logs.js";
21
- import type { AgentToolMode } from "../../types/public/agent.js";
21
+ import type { AgentToolMode, AgentModelConfig } from "../../types/public/agent.js";
22
22
  export interface V3AgentToolOptions {
23
- executionModel?: string;
23
+ executionModel?: string | AgentModelConfig;
24
24
  logger?: (message: LogLine) => void;
25
25
  /**
26
26
  * Tool mode determines which set of tools are available.
@@ -1,6 +1,20 @@
1
- import type { Action, ActResult, AgentConfig, AgentExecuteOptions, AgentResult, ExtractResult, LogLine, StagehandMetrics, ActOptions, ExtractOptions, ObserveOptions, Api } from "./types/public/index.js";
1
+ import type { Action, ActResult, AgentConfig, AgentExecuteOptions, AgentResult, ExtractResult, LogLine, StagehandMetrics, BrowserbaseRegion, ActOptions, ExtractOptions, ObserveOptions, Api } from "./types/public/index.js";
2
2
  import type { SerializableResponse, AgentCacheTransferPayload } from "./types/private/index.js";
3
3
  import type { StagehandZodSchema } from "./zodCompat.js";
4
+ /**
5
+ * Mapping of Browserbase regions to their corresponding Stagehand API base URLs.
6
+ * Users should configure their client to hit the API endpoint that matches
7
+ * the region where their browser session is running.
8
+ */
9
+ export declare const REGION_API_URLS: Record<BrowserbaseRegion, string>;
10
+ /**
11
+ * Returns the full API URL (with /v1 suffix) for a given Browserbase region.
12
+ * If no region is specified or the region is unknown, defaults to us-west-2.
13
+ *
14
+ * @param region - The Browserbase region (e.g., "us-west-2", "eu-central-1")
15
+ * @returns The full API URL including /v1 suffix
16
+ */
17
+ export declare function getApiUrlForRegion(region: BrowserbaseRegion | undefined): string;
4
18
  /**
5
19
  * Constructor parameters for StagehandAPIClient
6
20
  */
@@ -56,6 +70,7 @@ export declare class StagehandAPIClient {
56
70
  private sessionId?;
57
71
  private modelApiKey;
58
72
  private modelProvider?;
73
+ private region?;
59
74
  private logger;
60
75
  private fetchWithCookies;
61
76
  private lastFinishedEventData;
@@ -1,9 +1,6 @@
1
1
  import { Frame } from "../../understudy/frame.js";
2
2
  import { Locator } from "../../understudy/locator.js";
3
3
  import type { Page } from "../../understudy/page.js";
4
- export declare class UnderstudyCommandException extends Error {
5
- constructor(message: string);
6
- }
7
4
  export interface UnderstudyMethodHandlerContext {
8
5
  method: string;
9
6
  locator: Locator;
@@ -2,7 +2,7 @@ import { LogLine } from "../types/public/logs.js";
2
2
  import { V3 } from "../v3.js";
3
3
  import { ToolSet } from "ai";
4
4
  import { LLMClient } from "../llm/LLMClient.js";
5
- import { AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, AgentStreamResult, AgentToolMode } from "../types/public/agent.js";
5
+ import { AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, AgentStreamResult, AgentToolMode, AgentModelConfig } from "../types/public/agent.js";
6
6
  export declare class V3AgentHandler {
7
7
  private v3;
8
8
  private logger;
@@ -11,7 +11,7 @@ export declare class V3AgentHandler {
11
11
  private systemInstructions?;
12
12
  private mcpTools?;
13
13
  private mode;
14
- constructor(v3: V3, logger: (message: LogLine) => void, llmClient: LLMClient, executionModel?: string, systemInstructions?: string, mcpTools?: ToolSet, mode?: AgentToolMode);
14
+ constructor(v3: V3, logger: (message: LogLine) => void, llmClient: LLMClient, executionModel?: string | AgentModelConfig, systemInstructions?: string, mcpTools?: ToolSet, mode?: AgentToolMode);
15
15
  private prepareAgent;
16
16
  private createPrepareStep;
17
17
  private createStepHandler;
@@ -201,8 +201,8 @@ import_test.test.describe("Stagehand agent callbacks behavior", () => {
201
201
  await agent.execute({
202
202
  instruction: "test",
203
203
  callbacks: {
204
- onChunk: () => {
205
- }
204
+ onChunk: (() => {
205
+ })
206
206
  }
207
207
  });
208
208
  throw new Error("Expected error to be thrown");
@@ -223,8 +223,8 @@ import_test.test.describe("Stagehand agent callbacks behavior", () => {
223
223
  await agent.execute({
224
224
  instruction: "test",
225
225
  callbacks: {
226
- onFinish: () => {
227
- }
226
+ onFinish: (() => {
227
+ })
228
228
  }
229
229
  });
230
230
  throw new Error("Expected error to be thrown");
@@ -245,8 +245,8 @@ import_test.test.describe("Stagehand agent callbacks behavior", () => {
245
245
  await agent.execute({
246
246
  instruction: "test",
247
247
  callbacks: {
248
- onError: () => {
249
- }
248
+ onError: (() => {
249
+ })
250
250
  }
251
251
  });
252
252
  throw new Error("Expected error to be thrown");
@@ -267,8 +267,8 @@ import_test.test.describe("Stagehand agent callbacks behavior", () => {
267
267
  await agent.execute({
268
268
  instruction: "test",
269
269
  callbacks: {
270
- onAbort: () => {
271
- }
270
+ onAbort: (() => {
271
+ })
272
272
  }
273
273
  });
274
274
  throw new Error("Expected error to be thrown");
@@ -289,10 +289,10 @@ import_test.test.describe("Stagehand agent callbacks behavior", () => {
289
289
  await agent.execute({
290
290
  instruction: "test",
291
291
  callbacks: {
292
- onChunk: () => {
293
- },
294
- onFinish: () => {
295
- }
292
+ onChunk: (() => {
293
+ }),
294
+ onFinish: (() => {
295
+ })
296
296
  }
297
297
  });
298
298
  throw new Error("Expected error to be thrown");
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/agent-callbacks.spec.ts"],
4
4
  "sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport type { StepResult, ToolSet } from \"ai\";\nimport { StreamingCallbacksInNonStreamingModeError } from \"../types/public/sdkErrors.js\";\n\ntest.describe(\"Stagehand agent callbacks behavior\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3({\n ...v3TestConfig,\n experimental: true, // Required for callbacks and streaming\n });\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test.describe(\"Non-streaming callbacks (stream: false)\", () => {\n test(\"onStepFinish callback is called for each step\", async () => {\n test.setTimeout(60000);\n\n const stepFinishEvents: StepResult<ToolSet>[] = [];\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction:\n \"What is the title of this page? Mark the task as complete after answering.\",\n maxSteps: 5,\n callbacks: {\n onStepFinish: async (event) => {\n stepFinishEvents.push(event);\n },\n },\n });\n\n // Should have at least one step finish event\n expect(stepFinishEvents.length).toBeGreaterThan(0);\n\n // Each event should have expected properties\n for (const event of stepFinishEvents) {\n expect(event).toHaveProperty(\"finishReason\");\n expect(event).toHaveProperty(\"text\");\n }\n });\n\n test(\"prepareStep callback is called before each step\", async () => {\n test.setTimeout(60000);\n\n let prepareStepCallCount = 0;\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction: \"Simply describe the page briefly.\",\n maxSteps: 3,\n callbacks: {\n prepareStep: async (stepContext) => {\n prepareStepCallCount++;\n return stepContext;\n },\n },\n });\n\n // prepareStep should have been called at least once\n expect(prepareStepCallCount).toBeGreaterThan(0);\n });\n\n test(\"callbacks receive tool call information\", async () => {\n test.setTimeout(60000);\n\n const toolCalls: Array<{ toolName: string; input: unknown }> = [];\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction:\n \"Take a screenshot and describe what you see briefly. Then mark the task as complete.\",\n maxSteps: 3,\n callbacks: {\n onStepFinish: async (event) => {\n if (event.toolCalls) {\n for (const tc of event.toolCalls) {\n toolCalls.push({\n toolName: tc.toolName,\n input: tc.input,\n });\n }\n }\n },\n },\n });\n\n // Should have captured at least one tool call (e.g. screenshot)\n expect(toolCalls.length).toBeGreaterThan(0);\n expect(\n toolCalls.some(\n (tc) => tc.toolName === \"screenshot\" || tc.toolName === \"ariaTree\",\n ),\n ).toBe(true);\n });\n });\n\n test.describe(\"Streaming callbacks (stream: true)\", () => {\n test(\"onStepFinish callback is called for each step in stream mode\", async () => {\n test.setTimeout(60000);\n\n const stepFinishEvents: StepResult<ToolSet>[] = [];\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"What is this page? Describe it briefly.\",\n maxSteps: 5,\n callbacks: {\n onStepFinish: async (event) => {\n stepFinishEvents.push(event);\n },\n },\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n // Wait for result to complete\n await streamResult.result;\n\n // Should have at least one step finish event\n expect(stepFinishEvents.length).toBeGreaterThan(0);\n });\n\n test(\"onChunk callback is called for each chunk\", async () => {\n test.setTimeout(60000);\n\n let chunkCount = 0;\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"Say hello briefly and describe the page.\",\n maxSteps: 3,\n callbacks: {\n onChunk: async () => {\n chunkCount++;\n },\n },\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n await streamResult.result;\n\n // Should have received chunks\n expect(chunkCount).toBeGreaterThan(0);\n });\n\n test(\"onFinish callback is called when stream completes\", async () => {\n test.setTimeout(60000);\n\n let finishCalled = false;\n let finishEvent: unknown = null;\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"Simply describe the page briefly.\",\n maxSteps: 3,\n callbacks: {\n onFinish: (event) => {\n finishCalled = true;\n finishEvent = event;\n },\n },\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n await streamResult.result;\n\n // onFinish should have been called\n expect(finishCalled).toBe(true);\n expect(finishEvent).not.toBeNull();\n });\n\n test(\"prepareStep callback works in stream mode\", async () => {\n test.setTimeout(60000);\n\n let prepareStepCallCount = 0;\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"Simply describe the page briefly.\",\n maxSteps: 3,\n callbacks: {\n prepareStep: async (stepContext) => {\n prepareStepCallCount++;\n return stepContext;\n },\n },\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n await streamResult.result;\n\n // prepareStep should have been called at least once\n expect(prepareStepCallCount).toBeGreaterThan(0);\n });\n });\n\n test.describe(\"Streaming-only callbacks runtime validation\", () => {\n test(\"throws StreamingCallbacksInNonStreamingModeError when onChunk is used\", async () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n try {\n await agent.execute({\n instruction: \"test\",\n callbacks: {\n onChunk: (() => {}) as never,\n },\n });\n throw new Error(\"Expected error to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(StreamingCallbacksInNonStreamingModeError);\n expect(\n (error as StreamingCallbacksInNonStreamingModeError).invalidCallbacks,\n ).toEqual([\"onChunk\"]);\n }\n });\n\n test(\"throws StreamingCallbacksInNonStreamingModeError when onFinish is used\", async () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n try {\n await agent.execute({\n instruction: \"test\",\n callbacks: {\n onFinish: (() => {}) as never,\n },\n });\n throw new Error(\"Expected error to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(StreamingCallbacksInNonStreamingModeError);\n expect(\n (error as StreamingCallbacksInNonStreamingModeError).invalidCallbacks,\n ).toEqual([\"onFinish\"]);\n }\n });\n\n test(\"throws StreamingCallbacksInNonStreamingModeError when onError is used\", async () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n try {\n await agent.execute({\n instruction: \"test\",\n callbacks: {\n onError: (() => {}) as never,\n },\n });\n throw new Error(\"Expected error to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(StreamingCallbacksInNonStreamingModeError);\n expect(\n (error as StreamingCallbacksInNonStreamingModeError).invalidCallbacks,\n ).toEqual([\"onError\"]);\n }\n });\n\n test(\"throws StreamingCallbacksInNonStreamingModeError when onAbort is used\", async () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n try {\n await agent.execute({\n instruction: \"test\",\n callbacks: {\n onAbort: (() => {}) as never,\n },\n });\n throw new Error(\"Expected error to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(StreamingCallbacksInNonStreamingModeError);\n expect(\n (error as StreamingCallbacksInNonStreamingModeError).invalidCallbacks,\n ).toEqual([\"onAbort\"]);\n }\n });\n\n test(\"error includes all invalid callbacks when multiple are used\", async () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n try {\n await agent.execute({\n instruction: \"test\",\n callbacks: {\n onChunk: (() => {}) as never,\n onFinish: (() => {}) as never,\n },\n });\n throw new Error(\"Expected error to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(StreamingCallbacksInNonStreamingModeError);\n expect(\n (error as StreamingCallbacksInNonStreamingModeError).invalidCallbacks,\n ).toEqual([\"onChunk\", \"onFinish\"]);\n }\n });\n });\n\n test.describe(\"Combined callbacks\", () => {\n test(\"multiple callbacks can be used together\", async () => {\n test.setTimeout(60000);\n\n let prepareStepCount = 0;\n let stepFinishCount = 0;\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction: \"Simply describe the page briefly.\",\n maxSteps: 3,\n callbacks: {\n prepareStep: async (stepContext) => {\n prepareStepCount++;\n return stepContext;\n },\n onStepFinish: async () => {\n stepFinishCount++;\n },\n },\n });\n\n // Both callbacks should have been called\n expect(prepareStepCount).toBeGreaterThan(0);\n expect(stepFinishCount).toBeGreaterThan(0);\n });\n\n test(\"streaming with multiple callbacks\", async () => {\n test.setTimeout(60000);\n\n let prepareStepCount = 0;\n let stepFinishCount = 0;\n let chunkCount = 0;\n let finishCalled = false;\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"Say hello briefly and describe the page.\",\n maxSteps: 3,\n callbacks: {\n prepareStep: async (stepContext) => {\n prepareStepCount++;\n return stepContext;\n },\n onStepFinish: async () => {\n stepFinishCount++;\n },\n onChunk: async () => {\n chunkCount++;\n },\n onFinish: () => {\n finishCalled = true;\n },\n },\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n await streamResult.result;\n\n // All callbacks should have been called\n expect(prepareStepCount).toBeGreaterThan(0);\n expect(stepFinishCount).toBeGreaterThan(0);\n expect(chunkCount).toBeGreaterThan(0);\n expect(finishCalled).toBe(true);\n });\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,uBAA6B;AAE7B,uBAA0D;AAE1D,iBAAK,SAAS,sCAAsC,MAAM;AACxD,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG;AAAA,MACV,GAAG;AAAA,MACH,cAAc;AAAA;AAAA,IAChB,CAAC;AACD,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACpC,CAAC;AAED,mBAAK,SAAS,2CAA2C,MAAM;AAC7D,0BAAK,iDAAiD,YAAY;AAChE,uBAAK,WAAW,GAAK;AAErB,YAAM,mBAA0C,CAAC;AAEjD,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,MAAM,QAAQ;AAAA,QAClB,aACE;AAAA,QACF,UAAU;AAAA,QACV,WAAW;AAAA,UACT,cAAc,OAAO,UAAU;AAC7B,6BAAiB,KAAK,KAAK;AAAA,UAC7B;AAAA,QACF;AAAA,MACF,CAAC;AAGD,8BAAO,iBAAiB,MAAM,EAAE,gBAAgB,CAAC;AAGjD,iBAAW,SAAS,kBAAkB;AACpC,gCAAO,KAAK,EAAE,eAAe,cAAc;AAC3C,gCAAO,KAAK,EAAE,eAAe,MAAM;AAAA,MACrC;AAAA,IACF,CAAC;AAED,0BAAK,mDAAmD,YAAY;AAClE,uBAAK,WAAW,GAAK;AAErB,UAAI,uBAAuB;AAE3B,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,MAAM,QAAQ;AAAA,QAClB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,aAAa,OAAO,gBAAgB;AAClC;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AAGD,8BAAO,oBAAoB,EAAE,gBAAgB,CAAC;AAAA,IAChD,CAAC;AAED,0BAAK,2CAA2C,YAAY;AAC1D,uBAAK,WAAW,GAAK;AAErB,YAAM,YAAyD,CAAC;AAEhE,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,MAAM,QAAQ;AAAA,QAClB,aACE;AAAA,QACF,UAAU;AAAA,QACV,WAAW;AAAA,UACT,cAAc,OAAO,UAAU;AAC7B,gBAAI,MAAM,WAAW;AACnB,yBAAW,MAAM,MAAM,WAAW;AAChC,0BAAU,KAAK;AAAA,kBACb,UAAU,GAAG;AAAA,kBACb,OAAO,GAAG;AAAA,gBACZ,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAGD,8BAAO,UAAU,MAAM,EAAE,gBAAgB,CAAC;AAC1C;AAAA,QACE,UAAU;AAAA,UACR,CAAC,OAAO,GAAG,aAAa,gBAAgB,GAAG,aAAa;AAAA,QAC1D;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb,CAAC;AAAA,EACH,CAAC;AAED,mBAAK,SAAS,sCAAsC,MAAM;AACxD,0BAAK,gEAAgE,YAAY;AAC/E,uBAAK,WAAW,GAAK;AAErB,YAAM,mBAA0C,CAAC;AAEjD,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,eAAe,MAAM,MAAM,QAAQ;AAAA,QACvC,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,cAAc,OAAO,UAAU;AAC7B,6BAAiB,KAAK,KAAK;AAAA,UAC7B;AAAA,QACF;AAAA,MACF,CAAC;AAID,uBAAiB,KAAK,aAAa,YAAY;AAAA,MAE/C;AAGA,YAAM,aAAa;AAGnB,8BAAO,iBAAiB,MAAM,EAAE,gBAAgB,CAAC;AAAA,IACnD,CAAC;AAED,0BAAK,6CAA6C,YAAY;AAC5D,uBAAK,WAAW,GAAK;AAErB,UAAI,aAAa;AAEjB,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,eAAe,MAAM,MAAM,QAAQ;AAAA,QACvC,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,SAAS,YAAY;AACnB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAID,uBAAiB,KAAK,aAAa,YAAY;AAAA,MAE/C;AAEA,YAAM,aAAa;AAGnB,8BAAO,UAAU,EAAE,gBAAgB,CAAC;AAAA,IACtC,CAAC;AAED,0BAAK,qDAAqD,YAAY;AACpE,uBAAK,WAAW,GAAK;AAErB,UAAI,eAAe;AACnB,UAAI,cAAuB;AAE3B,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,eAAe,MAAM,MAAM,QAAQ;AAAA,QACvC,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,UAAU,CAAC,UAAU;AACnB,2BAAe;AACf,0BAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF,CAAC;AAID,uBAAiB,KAAK,aAAa,YAAY;AAAA,MAE/C;AAEA,YAAM,aAAa;AAGnB,8BAAO,YAAY,EAAE,KAAK,IAAI;AAC9B,8BAAO,WAAW,EAAE,IAAI,SAAS;AAAA,IACnC,CAAC;AAED,0BAAK,6CAA6C,YAAY;AAC5D,uBAAK,WAAW,GAAK;AAErB,UAAI,uBAAuB;AAE3B,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,eAAe,MAAM,MAAM,QAAQ;AAAA,QACvC,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,aAAa,OAAO,gBAAgB;AAClC;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AAID,uBAAiB,KAAK,aAAa,YAAY;AAAA,MAE/C;AAEA,YAAM,aAAa;AAGnB,8BAAO,oBAAoB,EAAE,gBAAgB,CAAC;AAAA,IAChD,CAAC;AAAA,EACH,CAAC;AAED,mBAAK,SAAS,+CAA+C,MAAM;AACjE,0BAAK,yEAAyE,YAAY;AACxF,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,UAAI;AACF,cAAM,MAAM,QAAQ;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,YACT,UAAU,MAAM;AAAA,YAAC;AAAA,UACnB;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C,SAAS,OAAO;AACd,gCAAO,KAAK,EAAE,eAAe,0DAAyC;AACtE;AAAA,UACG,MAAoD;AAAA,QACvD,EAAE,QAAQ,CAAC,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AAED,0BAAK,0EAA0E,YAAY;AACzF,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,UAAI;AACF,cAAM,MAAM,QAAQ;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,YACT,WAAW,MAAM;AAAA,YAAC;AAAA,UACpB;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C,SAAS,OAAO;AACd,gCAAO,KAAK,EAAE,eAAe,0DAAyC;AACtE;AAAA,UACG,MAAoD;AAAA,QACvD,EAAE,QAAQ,CAAC,UAAU,CAAC;AAAA,MACxB;AAAA,IACF,CAAC;AAED,0BAAK,yEAAyE,YAAY;AACxF,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,UAAI;AACF,cAAM,MAAM,QAAQ;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,YACT,UAAU,MAAM;AAAA,YAAC;AAAA,UACnB;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C,SAAS,OAAO;AACd,gCAAO,KAAK,EAAE,eAAe,0DAAyC;AACtE;AAAA,UACG,MAAoD;AAAA,QACvD,EAAE,QAAQ,CAAC,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AAED,0BAAK,yEAAyE,YAAY;AACxF,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,UAAI;AACF,cAAM,MAAM,QAAQ;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,YACT,UAAU,MAAM;AAAA,YAAC;AAAA,UACnB;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C,SAAS,OAAO;AACd,gCAAO,KAAK,EAAE,eAAe,0DAAyC;AACtE;AAAA,UACG,MAAoD;AAAA,QACvD,EAAE,QAAQ,CAAC,SAAS,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AAED,0BAAK,+DAA+D,YAAY;AAC9E,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,UAAI;AACF,cAAM,MAAM,QAAQ;AAAA,UAClB,aAAa;AAAA,UACb,WAAW;AAAA,YACT,UAAU,MAAM;AAAA,YAAC;AAAA,YACjB,WAAW,MAAM;AAAA,YAAC;AAAA,UACpB;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C,SAAS,OAAO;AACd,gCAAO,KAAK,EAAE,eAAe,0DAAyC;AACtE;AAAA,UACG,MAAoD;AAAA,QACvD,EAAE,QAAQ,CAAC,WAAW,UAAU,CAAC;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,mBAAK,SAAS,sBAAsB,MAAM;AACxC,0BAAK,2CAA2C,YAAY;AAC1D,uBAAK,WAAW,GAAK;AAErB,UAAI,mBAAmB;AACvB,UAAI,kBAAkB;AAEtB,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,MAAM,QAAQ;AAAA,QAClB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,aAAa,OAAO,gBAAgB;AAClC;AACA,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,YAAY;AACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAGD,8BAAO,gBAAgB,EAAE,gBAAgB,CAAC;AAC1C,8BAAO,eAAe,EAAE,gBAAgB,CAAC;AAAA,IAC3C,CAAC;AAED,0BAAK,qCAAqC,YAAY;AACpD,uBAAK,WAAW,GAAK;AAErB,UAAI,mBAAmB;AACvB,UAAI,kBAAkB;AACtB,UAAI,aAAa;AACjB,UAAI,eAAe;AAEnB,YAAM,QAAQ,GAAG,MAAM;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,YAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AACjC,YAAM,KAAK,KAAK,qBAAqB;AAErC,YAAM,eAAe,MAAM,MAAM,QAAQ;AAAA,QACvC,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,UACT,aAAa,OAAO,gBAAgB;AAClC;AACA,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,YAAY;AACxB;AAAA,UACF;AAAA,UACA,SAAS,YAAY;AACnB;AAAA,UACF;AAAA,UACA,UAAU,MAAM;AACd,2BAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF,CAAC;AAID,uBAAiB,KAAK,aAAa,YAAY;AAAA,MAE/C;AAEA,YAAM,aAAa;AAGnB,8BAAO,gBAAgB,EAAE,gBAAgB,CAAC;AAC1C,8BAAO,eAAe,EAAE,gBAAgB,CAAC;AACzC,8BAAO,UAAU,EAAE,gBAAgB,CAAC;AACpC,8BAAO,YAAY,EAAE,KAAK,IAAI;AAAA,IAChC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }
@@ -72,7 +72,7 @@ import_test.test.describe("context.addInitScript", () => {
72
72
  });
73
73
  (0, import_test.test)("applies script (with args) to newly created pages", async () => {
74
74
  const payload = { greeting: "hi", nested: { count: 2 } };
75
- const initPayload = (arg) => {
75
+ const initPayload = ((arg) => {
76
76
  function setPayload() {
77
77
  const root = document.documentElement;
78
78
  if (!root) return;
@@ -85,7 +85,7 @@ import_test.test.describe("context.addInitScript", () => {
85
85
  } else {
86
86
  setPayload();
87
87
  }
88
- };
88
+ });
89
89
  await ctx.addInitScript(initPayload, payload);
90
90
  const newPage = await ctx.newPage();
91
91
  await newPage.goto(toDataUrl("<html><body>child</body></html>"), {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/context-addInitScript.spec.ts"],
4
4
  "sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport { V3Context } from \"../understudy/context.js\";\n\nconst toDataUrl = (html: string): string =>\n `data:text/html,${encodeURIComponent(html)}`;\n\ntest.describe(\"context.addInitScript\", () => {\n let v3: V3;\n let ctx: V3Context;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n ctx = v3.context;\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"runs before inline document scripts on navigation\", async () => {\n const page = await ctx.awaitActivePage();\n\n await ctx.addInitScript(() => {\n (window as unknown as { __fromContextInit?: string }).__fromContextInit =\n \"injected-value\";\n });\n\n const html = `<!DOCTYPE html>\n <html>\n <body>\n <script>\n var value = (window && window.__fromContextInit) || 'missing';\n document.body.dataset.initWitness = value;\n </script>\n </body>\n </html>`;\n\n await page.goto(toDataUrl(html), { waitUntil: \"load\" });\n\n const observed = await page.evaluate(() => {\n return document.body.dataset.initWitness;\n });\n expect(observed).toBe(\"injected-value\");\n });\n\n test(\"re-applies the script on every navigation for the same page\", async () => {\n const page = await ctx.awaitActivePage();\n\n await ctx.addInitScript(`\n (function () {\n function markVisit() {\n var root = document.documentElement;\n if (!root) return;\n var current = Number(window.name || \"0\");\n var next = current + 1;\n window.name = String(next);\n root.dataset.visitCount = String(next);\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", markVisit, {\n once: true,\n });\n } else {\n markVisit();\n }\n })();\n `);\n\n await page.goto(toDataUrl(\"<html><body>first</body></html>\"), {\n waitUntil: \"load\",\n });\n const first = await page.evaluate(() => {\n return Number(document.documentElement.dataset.visitCount ?? \"0\");\n });\n expect(first).toBe(1);\n\n await page.goto(toDataUrl(\"<html><body>second</body></html>\"), {\n waitUntil: \"load\",\n });\n const second = await page.evaluate(() => {\n return Number(document.documentElement.dataset.visitCount ?? \"0\");\n });\n expect(second).toBe(2);\n });\n\n test(\"applies script (with args) to newly created pages\", async () => {\n const payload = { greeting: \"hi\", nested: { count: 2 } };\n\n const initPayload = ((arg) => {\n function setPayload() {\n const root = document.documentElement;\n if (!root) return;\n root.dataset.initPayload = JSON.stringify(arg);\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", setPayload, {\n once: true,\n });\n } else {\n setPayload();\n }\n }) as (arg: typeof payload) => void;\n await ctx.addInitScript(initPayload, payload);\n\n const newPage = await ctx.newPage();\n await newPage.goto(toDataUrl(\"<html><body>child</body></html>\"), {\n waitUntil: \"load\",\n });\n\n const observed = await newPage.evaluate(() => {\n const raw = document.documentElement.dataset.initPayload;\n return raw ? JSON.parse(raw) : undefined;\n });\n expect(observed).toEqual(payload);\n });\n\n test(\"applies script to newPage(url) on initial document\", async () => {\n const payload = { marker: \"newPageUrl\" };\n\n await ctx.addInitScript((arg) => {\n function setPayload(): void {\n const root = document.documentElement;\n if (!root) return;\n root.dataset.initPayload = JSON.stringify(arg);\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", setPayload, {\n once: true,\n });\n } else {\n setPayload();\n }\n }, payload);\n\n const newPage = await ctx.newPage(\n toDataUrl(\"<html><body>new page</body></html>\"),\n );\n await newPage.waitForLoadState(\"load\");\n\n const observed = await newPage.evaluate(() => {\n const raw = document.documentElement.dataset.initPayload;\n return raw ? JSON.parse(raw) : undefined;\n });\n expect(observed).toEqual(payload);\n });\n\n test(\"applies script to pages opened via link clicks\", async () => {\n const payload = { marker: \"linkClick\" };\n\n await ctx.addInitScript((arg) => {\n function setPayload(): void {\n const root = document.documentElement;\n if (!root) return;\n root.dataset.initPayload = JSON.stringify(arg);\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", setPayload, {\n once: true,\n });\n } else {\n setPayload();\n }\n }, payload);\n\n const popupUrl = toDataUrl(\"<html><body>popup</body></html>\");\n const openerHtml =\n \"<!DOCTYPE html>\" +\n \"<html><body>\" +\n '<a id=\"open\" target=\"_blank\" href=\"' +\n popupUrl +\n '\">open</a>' +\n \"</body></html>\";\n\n const opener = await ctx.awaitActivePage();\n await opener.goto(toDataUrl(openerHtml), { waitUntil: \"load\" });\n await opener.locator(\"#open\").click();\n\n const openerId = opener.targetId();\n const deadline = Date.now() + 2000;\n let popup = ctx.pages().find((p) => p.targetId() !== openerId);\n while (!popup && Date.now() < deadline) {\n await opener.waitForTimeout(25);\n popup = ctx.pages().find((p) => p.targetId() !== openerId);\n }\n if (!popup) {\n throw new Error(\"Popup page was not created\");\n }\n\n await popup.waitForLoadState(\"load\");\n\n const observed = await popup.evaluate(() => {\n const raw = document.documentElement.dataset.initPayload;\n return raw ? JSON.parse(raw) : undefined;\n });\n expect(observed).toEqual(payload);\n });\n\n test(\"context.addInitScript installs a function callable from page.evaluate\", async () => {\n const page = await ctx.awaitActivePage();\n\n await ctx.addInitScript(() => {\n // installed before any navigation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n window.sayHelloFromStagehand = () => \"hello from stagehand\";\n });\n\n await page.goto(\"https://example.com\", { waitUntil: \"domcontentloaded\" });\n\n const result = await page.evaluate(() => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n return window.sayHelloFromStagehand();\n });\n\n expect(result).toBe(\"hello from stagehand\");\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -9,6 +9,7 @@ import_test.test.describe("Locator content methods (textContent, innerHtml, inne
9
9
  });
10
10
  import_test.test.afterEach(async () => {
11
11
  await v3?.close?.().catch((e) => {
12
+ void e;
12
13
  });
13
14
  });
14
15
  (0, import_test.test)("Locator.textContent() returns raw text including hidden content", async () => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/locator-content-methods.spec.ts"],
4
4
  "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator content methods (textContent, innerHtml, innerText, inputValue)\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch((e) => {\n void e;\n });\n });\n\n test(\"Locator.textContent() returns raw text including hidden content\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"content\">\n Hello\n <span style=\"display:none\">Hidden</span>\n World\n </div>\n </body></html>`,\n ),\n );\n\n const content = await page.mainFrame().locator(\"#content\").textContent();\n // textContent includes all text nodes, even hidden ones\n expect(content).toContain(\"Hello\");\n expect(content).toContain(\"Hidden\");\n expect(content).toContain(\"World\");\n });\n\n test(\"Locator.innerText() returns visible text only\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"content\">\n Visible\n <span style=\"display:none\">Hidden</span>\n Text\n </div>\n </body></html>`,\n ),\n );\n\n const text = await page.mainFrame().locator(\"#content\").innerText();\n // innerText is layout-aware and excludes hidden elements\n expect(text).toContain(\"Visible\");\n expect(text).toContain(\"Text\");\n expect(text).not.toContain(\"Hidden\");\n });\n\n test(\"Locator.innerHtml() returns HTML markup\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"container\">\n <p class=\"para\">Hello</p>\n <strong>World</strong>\n </div>\n </body></html>`,\n ),\n );\n\n const html = await page.mainFrame().locator(\"#container\").innerHtml();\n expect(html).toContain('<p class=\"para\">Hello</p>');\n expect(html).toContain(\"<strong>World</strong>\");\n });\n\n test(\"Locator.inputValue() reads value from input elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"text-input\" type=\"text\" value=\"hello world\" />\n <textarea id=\"textarea\">multi\nline\ntext</textarea>\n <input id=\"number-input\" type=\"number\" value=\"42\" />\n </body></html>`,\n ),\n );\n\n const textValue = await page\n .mainFrame()\n .locator(\"#text-input\")\n .inputValue();\n expect(textValue).toBe(\"hello world\");\n\n const taValue = await page.mainFrame().locator(\"#textarea\").inputValue();\n expect(taValue).toBe(\"multi\\nline\\ntext\");\n\n const numValue = await page\n .mainFrame()\n .locator(\"#number-input\")\n .inputValue();\n expect(numValue).toBe(\"42\");\n });\n\n test(\"Locator.textContent() on empty elements returns empty string\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"empty\"></div>\n <span id=\"whitespace\"> </span>\n </body></html>`,\n ),\n );\n\n const empty = await page.mainFrame().locator(\"#empty\").textContent();\n expect(empty).toBe(\"\");\n\n const whitespace = await page\n .mainFrame()\n .locator(\"#whitespace\")\n .textContent();\n expect(whitespace.trim()).toBe(\"\");\n });\n\n test(\"Locator.innerText() with nested elements and formatting\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"formatted\">\n <p>Line 1</p>\n <p>Line 2</p>\n <ul>\n <li>Item 1</li>\n <li>Item 2</li>\n </ul>\n </div>\n </body></html>`,\n ),\n );\n\n const text = await page.mainFrame().locator(\"#formatted\").innerText();\n expect(text).toContain(\"Line 1\");\n expect(text).toContain(\"Line 2\");\n expect(text).toContain(\"Item 1\");\n expect(text).toContain(\"Item 2\");\n });\n\n test(\"Locator.inputValue() on contenteditable elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"editable\" contenteditable=\"true\">Editable content</div>\n </body></html>`,\n ),\n );\n\n const value = await page.mainFrame().locator(\"#editable\").inputValue();\n expect(value).toBe(\"Editable content\");\n });\n\n test(\"Locator.innerHtml() preserves attributes and structure\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"complex\">\n <a href=\"/link\" class=\"link-class\">Link</a>\n <img src=\"image.png\" alt=\"test\" />\n </div>\n </body></html>`,\n ),\n );\n\n const html = await page.mainFrame().locator(\"#complex\").innerHtml();\n expect(html).toContain('href=\"/link\"');\n expect(html).toContain('class=\"link-class\"');\n expect(html).toContain('src=\"image.png\"');\n expect(html).toContain('alt=\"test\"');\n });\n\n test(\"Locator.textContent() vs innerText() with script/style tags\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"mixed\">\n Visible text\n <script>console.log('script');</script>\n <style>body { color: red; }</style>\n More visible\n </div>\n </body></html>`,\n ),\n );\n\n const textContent = await page.mainFrame().locator(\"#mixed\").textContent();\n // textContent includes script content\n expect(textContent).toContain(\"Visible text\");\n expect(textContent).toContain(\"More visible\");\n\n const innerText = await page.mainFrame().locator(\"#mixed\").innerText();\n // innerText excludes script/style\n expect(innerText).toContain(\"Visible text\");\n expect(innerText).toContain(\"More visible\");\n expect(innerText).not.toContain(\"console.log\");\n });\n\n test(\"Locator.inputValue() returns empty string for non-input elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"div\">Not an input</div>\n <input id=\"empty-input\" type=\"text\" value=\"\" />\n </body></html>`,\n ),\n );\n\n const divValue = await page.mainFrame().locator(\"#div\").inputValue();\n expect(divValue).toBe(\"\");\n\n const emptyInput = await page\n .mainFrame()\n .locator(\"#empty-input\")\n .inputValue();\n expect(emptyInput).toBe(\"\");\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,uBAA6B;AAE7B,iBAAK,SAAS,2EAA2E,MAAM;AAC7F,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,6BAAY;AACxB,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM;AAC/B,WAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AAED,wBAAK,mEAAmE,YAAY;AAClF,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,UAAU,MAAM,KAAK,UAAU,EAAE,QAAQ,UAAU,EAAE,YAAY;AAEvE,4BAAO,OAAO,EAAE,UAAU,OAAO;AACjC,4BAAO,OAAO,EAAE,UAAU,QAAQ;AAClC,4BAAO,OAAO,EAAE,UAAU,OAAO;AAAA,EACnC,CAAC;AAED,wBAAK,iDAAiD,YAAY;AAChE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,EAAE,QAAQ,UAAU,EAAE,UAAU;AAElE,4BAAO,IAAI,EAAE,UAAU,SAAS;AAChC,4BAAO,IAAI,EAAE,UAAU,MAAM;AAC7B,4BAAO,IAAI,EAAE,IAAI,UAAU,QAAQ;AAAA,EACrC,CAAC;AAED,wBAAK,2CAA2C,YAAY;AAC1D,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMF;AAAA,IACJ;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,EAAE,QAAQ,YAAY,EAAE,UAAU;AACpE,4BAAO,IAAI,EAAE,UAAU,2BAA2B;AAClD,4BAAO,IAAI,EAAE,UAAU,wBAAwB;AAAA,EACjD,CAAC;AAED,wBAAK,wDAAwD,YAAY;AACvE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,YAAY,MAAM,KACrB,UAAU,EACV,QAAQ,aAAa,EACrB,WAAW;AACd,4BAAO,SAAS,EAAE,KAAK,aAAa;AAEpC,UAAM,UAAU,MAAM,KAAK,UAAU,EAAE,QAAQ,WAAW,EAAE,WAAW;AACvE,4BAAO,OAAO,EAAE,KAAK,mBAAmB;AAExC,UAAM,WAAW,MAAM,KACpB,UAAU,EACV,QAAQ,eAAe,EACvB,WAAW;AACd,4BAAO,QAAQ,EAAE,KAAK,IAAI;AAAA,EAC5B,CAAC;AAED,wBAAK,gEAAgE,YAAY;AAC/E,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA,MAIF;AAAA,IACJ;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,QAAQ,QAAQ,EAAE,YAAY;AACnE,4BAAO,KAAK,EAAE,KAAK,EAAE;AAErB,UAAM,aAAa,MAAM,KACtB,UAAU,EACV,QAAQ,aAAa,EACrB,YAAY;AACf,4BAAO,WAAW,KAAK,CAAC,EAAE,KAAK,EAAE;AAAA,EACnC,CAAC;AAED,wBAAK,2DAA2D,YAAY;AAC1E,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUF;AAAA,IACJ;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,EAAE,QAAQ,YAAY,EAAE,UAAU;AACpE,4BAAO,IAAI,EAAE,UAAU,QAAQ;AAC/B,4BAAO,IAAI,EAAE,UAAU,QAAQ;AAC/B,4BAAO,IAAI,EAAE,UAAU,QAAQ;AAC/B,4BAAO,IAAI,EAAE,UAAU,QAAQ;AAAA,EACjC,CAAC;AAED,wBAAK,oDAAoD,YAAY;AACnE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA,MAGF;AAAA,IACJ;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,QAAQ,WAAW,EAAE,WAAW;AACrE,4BAAO,KAAK,EAAE,KAAK,kBAAkB;AAAA,EACvC,CAAC;AAED,wBAAK,0DAA0D,YAAY;AACzE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMF;AAAA,IACJ;AAEA,UAAM,OAAO,MAAM,KAAK,UAAU,EAAE,QAAQ,UAAU,EAAE,UAAU;AAClE,4BAAO,IAAI,EAAE,UAAU,cAAc;AACrC,4BAAO,IAAI,EAAE,UAAU,oBAAoB;AAC3C,4BAAO,IAAI,EAAE,UAAU,iBAAiB;AACxC,4BAAO,IAAI,EAAE,UAAU,YAAY;AAAA,EACrC,CAAC;AAED,wBAAK,+DAA+D,YAAY;AAC9E,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQF;AAAA,IACJ;AAEA,UAAM,cAAc,MAAM,KAAK,UAAU,EAAE,QAAQ,QAAQ,EAAE,YAAY;AAEzE,4BAAO,WAAW,EAAE,UAAU,cAAc;AAC5C,4BAAO,WAAW,EAAE,UAAU,cAAc;AAE5C,UAAM,YAAY,MAAM,KAAK,UAAU,EAAE,QAAQ,QAAQ,EAAE,UAAU;AAErE,4BAAO,SAAS,EAAE,UAAU,cAAc;AAC1C,4BAAO,SAAS,EAAE,UAAU,cAAc;AAC1C,4BAAO,SAAS,EAAE,IAAI,UAAU,aAAa;AAAA,EAC/C,CAAC;AAED,wBAAK,oEAAoE,YAAY;AACnF,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA,MAIF;AAAA,IACJ;AAEA,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,QAAQ,MAAM,EAAE,WAAW;AACnE,4BAAO,QAAQ,EAAE,KAAK,EAAE;AAExB,UAAM,aAAa,MAAM,KACtB,UAAU,EACV,QAAQ,cAAc,EACtB,WAAW;AACd,4BAAO,UAAU,EAAE,KAAK,EAAE;AAAA,EAC5B,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }
@@ -10,6 +10,7 @@ import_test.test.describe("Locator.fill()", () => {
10
10
  });
11
11
  import_test.test.afterEach(async () => {
12
12
  await v3?.close?.().catch((e) => {
13
+ void e;
13
14
  });
14
15
  });
15
16
  (0, import_test.test)("fills date inputs via value setter even when beforeinput blocks insertText", async () => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/locator-fill.spec.ts"],
4
4
  "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { StagehandLocatorError } from \"../types/public/sdkErrors.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator.fill()\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch((e) => {\n void e;\n });\n });\n\n test(\"fills date inputs via value setter even when beforeinput blocks insertText\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"date\" type=\"date\" />\n <script>\n const input = document.getElementById('date');\n input.addEventListener('beforeinput', (e) => {\n if (e && e.inputType === 'insertText') e.preventDefault();\n });\n </script>\n </body></html>`,\n ),\n );\n\n const dateInput = page.mainFrame().locator(\"xpath=/html/body/input\");\n await dateInput.fill(\"2026-01-01\");\n\n const value = await dateInput.inputValue();\n expect(value).toBe(\"2026-01-01\");\n });\n\n test(\"xpath case: throws StagehandLocatorError when fill encounters an exception\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"date\" type=\"date\" />\n </body></html>`,\n ),\n );\n\n await page.waitForSelector(\"xpath=/html/body/input\");\n\n await page.evaluate(() => {\n const input = document.querySelector(\"input\");\n Object.defineProperty(input, \"isConnected\", {\n get() {\n throw new Error(\"boom\");\n },\n });\n });\n\n const dateInput = page.mainFrame().locator(\"xpath=/html/body/input\");\n let error: unknown;\n try {\n await dateInput.fill(\"2026-01-01\");\n } catch (err) {\n error = err;\n }\n\n expect(error).toBeInstanceOf(StagehandLocatorError);\n if (error instanceof Error) {\n // Log the message so it's visible in test output.\n expect(error.message).toContain(\"Error Filling Element\");\n expect(error.message).toContain(\"selector: xpath=/html/body/input\");\n expect(error.message).toContain(\"boom\");\n }\n });\n\n test(\"css selector case: throws StagehandLocatorError when fill encounters an exception\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"date\" type=\"date\" />\n </body></html>`,\n ),\n );\n\n await page.waitForSelector(\"#date\");\n\n // Override in main world\n await page.evaluate(() => {\n const input = document.querySelector(\"input\");\n Object.defineProperty(input, \"isConnected\", {\n get() {\n throw new Error(\"boom\");\n },\n configurable: true,\n });\n });\n\n // Also override in the isolated world that CSS selectors use\n const frameId = page.mainFrameId();\n const { executionContextId } = await page.sendCDP<{\n executionContextId: number;\n }>(\"Page.createIsolatedWorld\", {\n frameId,\n worldName: \"v3-world\",\n });\n\n await page.sendCDP(\"Runtime.evaluate\", {\n expression: `(() => {\n const input = document.querySelector('input');\n if (input) {\n Object.defineProperty(input, 'isConnected', {\n get() { throw new Error(\"boom\"); },\n configurable: true\n });\n }\n })()`,\n contextId: executionContextId,\n });\n\n const dateInput = page.mainFrame().locator(\"#date\");\n let error: unknown;\n try {\n await dateInput.fill(\"2026-01-01\");\n } catch (err) {\n error = err;\n }\n\n expect(error).toBeInstanceOf(StagehandLocatorError);\n if (error instanceof Error) {\n expect(error.message).toContain(\"Error Filling Element\");\n expect(error.message).toContain(\"selector: #date\");\n expect(error.message).toContain(\"boom\");\n }\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -9,6 +9,7 @@ import_test.test.describe("Locator input methods (fill, type, hover, isVisible,
9
9
  });
10
10
  import_test.test.afterEach(async () => {
11
11
  await v3?.close?.().catch((e) => {
12
+ void e;
12
13
  });
13
14
  });
14
15
  (0, import_test.test)("Locator.fill() sets input value directly", async () => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/locator-input-methods.spec.ts"],
4
4
  "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator input methods (fill, type, hover, isVisible, isChecked)\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch((e) => {\n void e;\n });\n });\n\n test(\"Locator.fill() sets input value directly\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"name\" type=\"text\" />\n <div id=\"out\"></div>\n </body></html>`,\n ),\n );\n\n const input = page.mainFrame().locator(\"#name\");\n await input.fill(\"Hello World\");\n\n const value = await input.inputValue();\n expect(value).toBe(\"Hello World\");\n });\n\n test(\"Locator.type() types text character by character\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"search\" type=\"text\" />\n </body></html>`,\n ),\n );\n\n const input = page.mainFrame().locator(\"#search\");\n await input.type(\"test123\", { delay: 10 });\n\n const value = await input.inputValue();\n expect(value).toBe(\"test123\");\n });\n\n test(\"Locator.hover() moves mouse to element center\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button id=\"btn\" onmouseover=\"this.dataset.hovered='true'\" onmouseout=\"this.dataset.hovered='false'\">Hover Me</button>\n </body></html>`,\n ),\n );\n\n const btn = page.mainFrame().locator(\"#btn\");\n await btn.hover();\n\n const hovered = await page.mainFrame().evaluate(() => {\n const b = document.getElementById(\"btn\") as HTMLButtonElement | null;\n return b?.dataset.hovered === \"true\";\n });\n\n expect(hovered).toBe(true);\n });\n\n test(\"Locator.isVisible() returns true for visible elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"visible\">I am visible</div>\n <div id=\"hidden\" style=\"display:none\">I am hidden</div>\n <div id=\"invisible\" style=\"visibility:hidden\">I am invisible</div>\n <div id=\"transparent\" style=\"opacity:0\">I am transparent</div>\n <div id=\"zero-size\" style=\"width:0;height:0\">Zero size</div>\n </body></html>`,\n ),\n );\n\n const visible = await page.mainFrame().locator(\"#visible\").isVisible();\n expect(visible).toBe(true);\n\n const hidden = await page.mainFrame().locator(\"#hidden\").isVisible();\n expect(hidden).toBe(false);\n\n const invisible = await page.mainFrame().locator(\"#invisible\").isVisible();\n expect(invisible).toBe(false);\n\n const transparent = await page\n .mainFrame()\n .locator(\"#transparent\")\n .isVisible();\n expect(transparent).toBe(false);\n\n const zeroSize = await page.mainFrame().locator(\"#zero-size\").isVisible();\n expect(zeroSize).toBe(false);\n });\n\n test(\"Locator.isChecked() detects checkbox state\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"checked\" type=\"checkbox\" checked />\n <input id=\"unchecked\" type=\"checkbox\" />\n <input id=\"radio-selected\" type=\"radio\" name=\"opt\" checked />\n <input id=\"radio-unselected\" type=\"radio\" name=\"opt\" />\n </body></html>`,\n ),\n );\n\n const checked = await page.mainFrame().locator(\"#checked\").isChecked();\n expect(checked).toBe(true);\n\n const unchecked = await page.mainFrame().locator(\"#unchecked\").isChecked();\n expect(unchecked).toBe(false);\n\n const radioSelected = await page\n .mainFrame()\n .locator(\"#radio-selected\")\n .isChecked();\n expect(radioSelected).toBe(true);\n\n const radioUnselected = await page\n .mainFrame()\n .locator(\"#radio-unselected\")\n .isChecked();\n expect(radioUnselected).toBe(false);\n });\n\n test(\"Locator.fill() on textarea\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <textarea id=\"ta\"></textarea>\n </body></html>`,\n ),\n );\n\n const ta = page.mainFrame().locator(\"#ta\");\n await ta.fill(\"Multi\\nline\\ntext\");\n\n const value = await ta.inputValue();\n expect(value).toBe(\"Multi\\nline\\ntext\");\n });\n\n test(\"Locator.fill() clears and sets new value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"inp\" type=\"text\" value=\"initial\" />\n </body></html>`,\n ),\n );\n\n const inp = page.mainFrame().locator(\"#inp\");\n\n let value = await inp.inputValue();\n expect(value).toBe(\"initial\");\n\n await inp.fill(\"replaced\");\n value = await inp.inputValue();\n expect(value).toBe(\"replaced\");\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -9,6 +9,7 @@ import_test.test.describe("Locator.selectOption() method", () => {
9
9
  });
10
10
  import_test.test.afterEach(async () => {
11
11
  await v3?.close?.().catch((e) => {
12
+ void e;
12
13
  });
13
14
  });
14
15
  (0, import_test.test)("selectOption() selects single option by value", async () => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/locator-select-option.spec.ts"],
4
4
  "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator.selectOption() method\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch((e) => {\n void e; // ignore cleanup errors\n });\n });\n\n test(\"selectOption() selects single option by value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"fruit\">\n <option value=\"\">-- Choose --</option>\n <option value=\"apple\">Apple</option>\n <option value=\"banana\">Banana</option>\n <option value=\"cherry\">Cherry</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#fruit\");\n const selected = await select.selectOption(\"banana\");\n\n expect(selected).toEqual([\"banana\"]);\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"fruit\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"banana\");\n });\n\n test(\"selectOption() selects option by label/text\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"country\">\n <option value=\"us\">United States</option>\n <option value=\"uk\">United Kingdom</option>\n <option value=\"ca\">Canada</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#country\");\n const selected = await select.selectOption(\"United Kingdom\");\n\n expect(selected).toEqual([\"uk\"]);\n });\n\n test(\"selectOption() selects multiple options in multiple select\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"colors\" multiple>\n <option value=\"red\">Red</option>\n <option value=\"green\">Green</option>\n <option value=\"blue\">Blue</option>\n <option value=\"yellow\">Yellow</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#colors\");\n const selected = await select.selectOption([\"red\", \"blue\"]);\n\n expect(selected.sort()).toEqual([\"blue\", \"red\"]);\n\n const values = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"colors\") as HTMLSelectElement | null;\n return Array.from(s?.selectedOptions ?? []).map((o) => o.value);\n });\n expect(values.sort()).toEqual([\"blue\", \"red\"]);\n });\n\n test(\"selectOption() deselects previous option on single select\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"size\">\n <option value=\"s\">Small</option>\n <option value=\"m\" selected>Medium</option>\n <option value=\"l\">Large</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#size\");\n\n let value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"size\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"m\");\n\n await select.selectOption(\"l\");\n\n value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"size\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"l\");\n });\n\n test(\"selectOption() triggers change event\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"opt\">\n <option value=\"a\">Option A</option>\n <option value=\"b\">Option B</option>\n </select>\n <div id=\"out\"></div>\n <script>\n const select = document.getElementById('opt');\n const out = document.getElementById('out');\n select.addEventListener('change', () => {\n out.textContent = 'changed-' + select.value;\n });\n </script>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#opt\");\n await select.selectOption(\"b\");\n\n const output = await page.mainFrame().evaluate(() => {\n const out = document.getElementById(\"out\");\n return out?.textContent;\n });\n expect(output).toBe(\"changed-b\");\n });\n\n test(\"selectOption() with optgroup structure\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"grouped\">\n <optgroup label=\"Fruits\">\n <option value=\"apple\">Apple</option>\n <option value=\"orange\">Orange</option>\n </optgroup>\n <optgroup label=\"Vegetables\">\n <option value=\"carrot\">Carrot</option>\n <option value=\"celery\">Celery</option>\n </optgroup>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#grouped\");\n await select.selectOption(\"celery\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"grouped\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"celery\");\n });\n\n test(\"selectOption() returns array of selected values\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"multi\" multiple>\n <option value=\"1\">One</option>\n <option value=\"2\">Two</option>\n <option value=\"3\">Three</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#multi\");\n const selected = await select.selectOption([\"1\", \"3\"]);\n\n expect(selected).toContain(\"1\");\n expect(selected).toContain(\"3\");\n expect(selected.length).toBe(2);\n });\n\n test(\"selectOption() with empty string value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"opt\">\n <option value=\"\">None</option>\n <option value=\"yes\">Yes</option>\n <option value=\"no\">No</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#opt\");\n const selected = await select.selectOption(\"\");\n\n expect(selected).toEqual([\"\"]);\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"opt\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"\");\n });\n\n test(\"selectOption() with numeric values\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"nums\">\n <option value=\"1\">One</option>\n <option value=\"2\">Two</option>\n <option value=\"10\">Ten</option>\n <option value=\"100\">Hundred</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#nums\");\n await select.selectOption(\"10\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"nums\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"10\");\n });\n\n test(\"selectOption() with disabled option\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"mixed\">\n <option value=\"a\">Available</option>\n <option value=\"b\" disabled>Unavailable</option>\n <option value=\"c\">Available</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#mixed\");\n // Should still select disabled option if explicitly requested\n await select.selectOption(\"b\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"mixed\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"b\");\n });\n});\n"],
5
- "mappings": "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",
5
+ "mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,uBAA6B;AAE7B,iBAAK,SAAS,iCAAiC,MAAM;AACnD,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,6BAAY;AACxB,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM;AAC/B,WAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AAED,wBAAK,iDAAiD,YAAY;AAChE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,QAAQ;AAChD,UAAM,WAAW,MAAM,OAAO,aAAa,QAAQ;AAEnD,4BAAO,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;AAEnC,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAClD,YAAM,IAAI,SAAS,eAAe,OAAO;AACzC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,QAAQ;AAAA,EAC7B,CAAC;AAED,wBAAK,+CAA+C,YAAY;AAC9D,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,UAAU;AAClD,UAAM,WAAW,MAAM,OAAO,aAAa,gBAAgB;AAE3D,4BAAO,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC;AAED,wBAAK,8DAA8D,YAAY;AAC7E,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,SAAS;AACjD,UAAM,WAAW,MAAM,OAAO,aAAa,CAAC,OAAO,MAAM,CAAC;AAE1D,4BAAO,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,QAAQ,KAAK,CAAC;AAE/C,UAAM,SAAS,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AACnD,YAAM,IAAI,SAAS,eAAe,QAAQ;AAC1C,aAAO,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IAChE,CAAC;AACD,4BAAO,OAAO,KAAK,CAAC,EAAE,QAAQ,CAAC,QAAQ,KAAK,CAAC;AAAA,EAC/C,CAAC;AAED,wBAAK,6DAA6D,YAAY;AAC5E,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,OAAO;AAE/C,QAAI,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAChD,YAAM,IAAI,SAAS,eAAe,MAAM;AACxC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,GAAG;AAEtB,UAAM,OAAO,aAAa,GAAG;AAE7B,YAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAC5C,YAAM,IAAI,SAAS,eAAe,MAAM;AACxC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,GAAG;AAAA,EACxB,CAAC;AAED,wBAAK,wCAAwC,YAAY;AACvD,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,MAAM;AAC9C,UAAM,OAAO,aAAa,GAAG;AAE7B,UAAM,SAAS,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AACnD,YAAM,MAAM,SAAS,eAAe,KAAK;AACzC,aAAO,KAAK;AAAA,IACd,CAAC;AACD,4BAAO,MAAM,EAAE,KAAK,WAAW;AAAA,EACjC,CAAC;AAED,wBAAK,0CAA0C,YAAY;AACzD,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,UAAU;AAClD,UAAM,OAAO,aAAa,QAAQ;AAElC,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAClD,YAAM,IAAI,SAAS,eAAe,SAAS;AAC3C,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,QAAQ;AAAA,EAC7B,CAAC;AAED,wBAAK,mDAAmD,YAAY;AAClE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,QAAQ;AAChD,UAAM,WAAW,MAAM,OAAO,aAAa,CAAC,KAAK,GAAG,CAAC;AAErD,4BAAO,QAAQ,EAAE,UAAU,GAAG;AAC9B,4BAAO,QAAQ,EAAE,UAAU,GAAG;AAC9B,4BAAO,SAAS,MAAM,EAAE,KAAK,CAAC;AAAA,EAChC,CAAC;AAED,wBAAK,0CAA0C,YAAY;AACzD,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,MAAM;AAC9C,UAAM,WAAW,MAAM,OAAO,aAAa,EAAE;AAE7C,4BAAO,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;AAE7B,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAClD,YAAM,IAAI,SAAS,eAAe,KAAK;AACvC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,EAAE;AAAA,EACvB,CAAC;AAED,wBAAK,sCAAsC,YAAY;AACrD,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,OAAO;AAC/C,UAAM,OAAO,aAAa,IAAI;AAE9B,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAClD,YAAM,IAAI,SAAS,eAAe,MAAM;AACxC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,IAAI;AAAA,EACzB,CAAC;AAED,wBAAK,uCAAuC,YAAY;AACtD,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE;AAAA,QACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOF;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,UAAU,EAAE,QAAQ,QAAQ;AAEhD,UAAM,OAAO,aAAa,GAAG;AAE7B,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM;AAClD,YAAM,IAAI,SAAS,eAAe,OAAO;AACzC,aAAO,GAAG;AAAA,IACZ,CAAC;AACD,4BAAO,KAAK,EAAE,KAAK,GAAG;AAAA,EACxB,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }
@@ -62,7 +62,7 @@ import_test.test.describe("page.addInitScript", () => {
62
62
  (0, import_test.test)("supports passing arguments to function sources", async () => {
63
63
  const page = await ctx.awaitActivePage();
64
64
  const payload = { greeting: "hi", nested: { count: 1 } };
65
- const initPayload = (arg) => {
65
+ const initPayload = ((arg) => {
66
66
  function setPayload() {
67
67
  const root = document.documentElement;
68
68
  if (!root) return;
@@ -75,7 +75,7 @@ import_test.test.describe("page.addInitScript", () => {
75
75
  } else {
76
76
  setPayload();
77
77
  }
78
- };
78
+ });
79
79
  await page.addInitScript(initPayload, payload);
80
80
  await page.goto(`${EXAMPLE_URL}/?page=payload`, {
81
81
  waitUntil: "domcontentloaded"
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../lib/v3/tests/page-addInitScript.spec.ts"],
4
4
  "sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport { V3Context } from \"../understudy/context.js\";\n\nconst EXAMPLE_URL = \"https://example.com\";\n\ntest.describe(\"page.addInitScript\", () => {\n let v3: V3;\n let ctx: V3Context;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n ctx = v3.context;\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"runs scripts on real network navigations\", async () => {\n const page = await ctx.awaitActivePage();\n\n await page.addInitScript(() => {\n (window as unknown as { __fromPageInit?: string }).__fromPageInit =\n \"page-level\";\n });\n\n await page.goto(EXAMPLE_URL, { waitUntil: \"domcontentloaded\" });\n\n const observed = await page.evaluate(() => {\n return (window as unknown as { __fromPageInit?: string }).__fromPageInit;\n });\n\n expect(observed).toBe(\"page-level\");\n });\n\n test(\"scopes scripts to the page only\", async () => {\n const first = await ctx.awaitActivePage();\n\n await first.addInitScript(`\n (function () {\n function markScope() {\n var root = document.documentElement;\n if (!root) return;\n root.dataset.scopeWitness = \"page-one\";\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", markScope, {\n once: true,\n });\n } else {\n markScope();\n }\n })();\n `);\n\n await first.goto(`${EXAMPLE_URL}/?page=one`, {\n waitUntil: \"domcontentloaded\",\n });\n\n const second = await ctx.newPage();\n await second.goto(`${EXAMPLE_URL}/?page=two`, {\n waitUntil: \"domcontentloaded\",\n });\n\n const firstValue = await first.evaluate(() => {\n return document.documentElement.dataset.scopeWitness ?? \"missing\";\n });\n const secondValue = await second.evaluate(() => {\n return document.documentElement.dataset.scopeWitness ?? \"missing\";\n });\n\n expect(firstValue).toBe(\"page-one\");\n expect(secondValue).toBe(\"missing\");\n });\n\n test(\"supports passing arguments to function sources\", async () => {\n const page = await ctx.awaitActivePage();\n const payload = { greeting: \"hi\", nested: { count: 1 } };\n\n const initPayload = ((arg) => {\n function setPayload() {\n const root = document.documentElement;\n if (!root) return;\n root.dataset.pageInitPayload = JSON.stringify(arg);\n }\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", setPayload, {\n once: true,\n });\n } else {\n setPayload();\n }\n }) as (arg: typeof payload) => void;\n await page.addInitScript(initPayload, payload);\n\n await page.goto(`${EXAMPLE_URL}/?page=payload`, {\n waitUntil: \"domcontentloaded\",\n });\n\n const observed = await page.evaluate(() => {\n const raw = document.documentElement.dataset.pageInitPayload;\n return raw ? JSON.parse(raw) : undefined;\n });\n\n expect(observed).toEqual(payload);\n });\n});\n"],
5
- "mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,uBAA6B;AAG7B,MAAM,cAAc;AAEpB,iBAAK,SAAS,sBAAsB,MAAM;AACxC,MAAI;AACJ,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,6BAAY;AACxB,UAAM,GAAG,KAAK;AACd,UAAM,GAAG;AAAA,EACX,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACpC,CAAC;AAED,wBAAK,4CAA4C,YAAY;AAC3D,UAAM,OAAO,MAAM,IAAI,gBAAgB;AAEvC,UAAM,KAAK,cAAc,MAAM;AAC7B,MAAC,OAAkD,iBACjD;AAAA,IACJ,CAAC;AAED,UAAM,KAAK,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC;AAE9D,UAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AACzC,aAAQ,OAAkD;AAAA,IAC5D,CAAC;AAED,4BAAO,QAAQ,EAAE,KAAK,YAAY;AAAA,EACpC,CAAC;AAED,wBAAK,mCAAmC,YAAY;AAClD,UAAM,QAAQ,MAAM,IAAI,gBAAgB;AAExC,UAAM,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAezB;AAED,UAAM,MAAM,KAAK,GAAG,WAAW,cAAc;AAAA,MAC3C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,SAAS,MAAM,IAAI,QAAQ;AACjC,UAAM,OAAO,KAAK,GAAG,WAAW,cAAc;AAAA,MAC5C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,aAAa,MAAM,MAAM,SAAS,MAAM;AAC5C,aAAO,SAAS,gBAAgB,QAAQ,gBAAgB;AAAA,IAC1D,CAAC;AACD,UAAM,cAAc,MAAM,OAAO,SAAS,MAAM;AAC9C,aAAO,SAAS,gBAAgB,QAAQ,gBAAgB;AAAA,IAC1D,CAAC;AAED,4BAAO,UAAU,EAAE,KAAK,UAAU;AAClC,4BAAO,WAAW,EAAE,KAAK,SAAS;AAAA,EACpC,CAAC;AAED,wBAAK,kDAAkD,YAAY;AACjE,UAAM,OAAO,MAAM,IAAI,gBAAgB;AACvC,UAAM,UAAU,EAAE,UAAU,MAAM,QAAQ,EAAE,OAAO,EAAE,EAAE;AAEvD,UAAM,cAAe,CAAC,QAAQ;AAC5B,eAAS,aAAa;AACpB,cAAM,OAAO,SAAS;AACtB,YAAI,CAAC,KAAM;AACX,aAAK,QAAQ,kBAAkB,KAAK,UAAU,GAAG;AAAA,MACnD;AACA,UAAI,SAAS,eAAe,WAAW;AACrC,iBAAS,iBAAiB,oBAAoB,YAAY;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AAAA,MACH,OAAO;AACL,mBAAW;AAAA,MACb;AAAA,IACF;AACA,UAAM,KAAK,cAAc,aAAa,OAAO;AAE7C,UAAM,KAAK,KAAK,GAAG,WAAW,kBAAkB;AAAA,MAC9C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AACzC,YAAM,MAAM,SAAS,gBAAgB,QAAQ;AAC7C,aAAO,MAAM,KAAK,MAAM,GAAG,IAAI;AAAA,IACjC,CAAC;AAED,4BAAO,QAAQ,EAAE,QAAQ,OAAO;AAAA,EAClC,CAAC;AACH,CAAC;",
5
+ "mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,uBAA6B;AAG7B,MAAM,cAAc;AAEpB,iBAAK,SAAS,sBAAsB,MAAM;AACxC,MAAI;AACJ,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,6BAAY;AACxB,UAAM,GAAG,KAAK;AACd,UAAM,GAAG;AAAA,EACX,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACpC,CAAC;AAED,wBAAK,4CAA4C,YAAY;AAC3D,UAAM,OAAO,MAAM,IAAI,gBAAgB;AAEvC,UAAM,KAAK,cAAc,MAAM;AAC7B,MAAC,OAAkD,iBACjD;AAAA,IACJ,CAAC;AAED,UAAM,KAAK,KAAK,aAAa,EAAE,WAAW,mBAAmB,CAAC;AAE9D,UAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AACzC,aAAQ,OAAkD;AAAA,IAC5D,CAAC;AAED,4BAAO,QAAQ,EAAE,KAAK,YAAY;AAAA,EACpC,CAAC;AAED,wBAAK,mCAAmC,YAAY;AAClD,UAAM,QAAQ,MAAM,IAAI,gBAAgB;AAExC,UAAM,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAezB;AAED,UAAM,MAAM,KAAK,GAAG,WAAW,cAAc;AAAA,MAC3C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,SAAS,MAAM,IAAI,QAAQ;AACjC,UAAM,OAAO,KAAK,GAAG,WAAW,cAAc;AAAA,MAC5C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,aAAa,MAAM,MAAM,SAAS,MAAM;AAC5C,aAAO,SAAS,gBAAgB,QAAQ,gBAAgB;AAAA,IAC1D,CAAC;AACD,UAAM,cAAc,MAAM,OAAO,SAAS,MAAM;AAC9C,aAAO,SAAS,gBAAgB,QAAQ,gBAAgB;AAAA,IAC1D,CAAC;AAED,4BAAO,UAAU,EAAE,KAAK,UAAU;AAClC,4BAAO,WAAW,EAAE,KAAK,SAAS;AAAA,EACpC,CAAC;AAED,wBAAK,kDAAkD,YAAY;AACjE,UAAM,OAAO,MAAM,IAAI,gBAAgB;AACvC,UAAM,UAAU,EAAE,UAAU,MAAM,QAAQ,EAAE,OAAO,EAAE,EAAE;AAEvD,UAAM,eAAe,CAAC,QAAQ;AAC5B,eAAS,aAAa;AACpB,cAAM,OAAO,SAAS;AACtB,YAAI,CAAC,KAAM;AACX,aAAK,QAAQ,kBAAkB,KAAK,UAAU,GAAG;AAAA,MACnD;AACA,UAAI,SAAS,eAAe,WAAW;AACrC,iBAAS,iBAAiB,oBAAoB,YAAY;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AAAA,MACH,OAAO;AACL,mBAAW;AAAA,MACb;AAAA,IACF;AACA,UAAM,KAAK,cAAc,aAAa,OAAO;AAE7C,UAAM,KAAK,KAAK,GAAG,WAAW,kBAAkB;AAAA,MAC9C,WAAW;AAAA,IACb,CAAC;AAED,UAAM,WAAW,MAAM,KAAK,SAAS,MAAM;AACzC,YAAM,MAAM,SAAS,gBAAgB,QAAQ;AAC7C,aAAO,MAAM,KAAK,MAAM,GAAG,IAAI;AAAA,IACjC,CAAC;AAED,4BAAO,QAAQ,EAAE,QAAQ,OAAO;AAAA,EAClC,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }
@@ -260,6 +260,13 @@ export declare const ProxyConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
260
260
  username: z.ZodOptional<z.ZodString>;
261
261
  password: z.ZodOptional<z.ZodString>;
262
262
  }, z.core.$strip>], "type">;
263
+ /** Browserbase region identifier for multi-region support */
264
+ export declare const BrowserbaseRegionSchema: z.ZodEnum<{
265
+ "us-west-2": "us-west-2";
266
+ "us-east-1": "us-east-1";
267
+ "eu-central-1": "eu-central-1";
268
+ "ap-southeast-1": "ap-southeast-1";
269
+ }>;
263
270
  /** Browserbase session creation parameters */
264
271
  export declare const BrowserbaseSessionCreateParamsSchema: z.ZodObject<{
265
272
  projectId: z.ZodOptional<z.ZodString>;
@@ -1174,6 +1181,7 @@ export type BrowserbaseBrowserSettings = z.infer<typeof BrowserbaseBrowserSettin
1174
1181
  export type BrowserbaseProxyGeolocation = z.infer<typeof BrowserbaseProxyGeolocationSchema>;
1175
1182
  export type BrowserbaseProxyConfig = z.infer<typeof BrowserbaseProxyConfigSchema>;
1176
1183
  export type ExternalProxyConfig = z.infer<typeof ExternalProxyConfigSchema>;
1184
+ export type BrowserbaseRegion = z.infer<typeof BrowserbaseRegionSchema>;
1177
1185
  export type BrowserbaseSessionCreateParams = z.infer<typeof BrowserbaseSessionCreateParamsSchema>;
1178
1186
  export type SessionStartRequest = z.infer<typeof SessionStartRequestSchema>;
1179
1187
  export type SessionStartResult = z.infer<typeof SessionStartResultSchema>;
@@ -1,5 +1,6 @@
1
1
  export * from "./agent.js";
2
2
  export * as Api from "./api.js";
3
+ export type { BrowserbaseRegion } from "./api.js";
3
4
  export * from "./apiErrors.js";
4
5
  export * from "./logs.js";
5
6
  export * from "./methods.js";