@crawlee/stagehand 4.0.0-beta.121 → 4.0.0-beta.123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.mjs CHANGED
@@ -3,13 +3,13 @@ import mod from "./index.js";
3
3
  export default mod;
4
4
  export const API_PROCESSED_REQUESTS_DELAY_MILLIS = mod.API_PROCESSED_REQUESTS_DELAY_MILLIS;
5
5
  export const ApifyLogAdapter = mod.ApifyLogAdapter;
6
+ export const ArgumentValidationError = mod.ArgumentValidationError;
6
7
  export const AutoscaledPool = mod.AutoscaledPool;
7
8
  export const BLOCKED_STATUS_CODES = mod.BLOCKED_STATUS_CODES;
8
9
  export const BaseCrawleeLogger = mod.BaseCrawleeLogger;
9
10
  export const BasicCrawler = mod.BasicCrawler;
10
11
  export const BrowserCrawler = mod.BrowserCrawler;
11
12
  export const BrowserLauncher = mod.BrowserLauncher;
12
- export const ClientLoadSignal = mod.ClientLoadSignal;
13
13
  export const ConcurrencySystem = mod.ConcurrencySystem;
14
14
  export const Configuration = mod.Configuration;
15
15
  export const ContextPipeline = mod.ContextPipeline;
@@ -75,6 +75,7 @@ export const Snapshotter = mod.Snapshotter;
75
75
  export const StagehandCrawler = mod.StagehandCrawler;
76
76
  export const StateValidationError = mod.StateValidationError;
77
77
  export const Statistics = mod.Statistics;
78
+ export const StorageBackendLoadSignal = mod.StorageBackendLoadSignal;
78
79
  export const StorageInstanceManager = mod.StorageInstanceManager;
79
80
  export const StorageStatsTracker = mod.StorageStatsTracker;
80
81
  export const StorageTransaction = mod.StorageTransaction;
@@ -84,8 +85,8 @@ export const activeStorageTransaction = mod.activeStorageTransaction;
84
85
  export const applyRequestTransform = mod.applyRequestTransform;
85
86
  export const assertJsonSerializable = mod.assertJsonSerializable;
86
87
  export const bindMethodsToServiceLocator = mod.bindMethodsToServiceLocator;
87
- export const browserCrawlerEnqueueLinks = mod.browserCrawlerEnqueueLinks;
88
88
  export const browserPoolCookieToToughCookie = mod.browserPoolCookieToToughCookie;
89
+ export const buildEnqueueStrategyPatterns = mod.buildEnqueueStrategyPatterns;
89
90
  export const coerceBoolean = mod.coerceBoolean;
90
91
  export const coerceNumber = mod.coerceNumber;
91
92
  export const constructGlobObjectsFromGlobs = mod.constructGlobObjectsFromGlobs;
@@ -103,7 +104,6 @@ export const createStorageTransaction = mod.createStorageTransaction;
103
104
  export const currentStorageTransaction = mod.currentStorageTransaction;
104
105
  export const defaultRoute = mod.defaultRoute;
105
106
  export const deserializeArray = mod.deserializeArray;
106
- export const enqueueLinks = mod.enqueueLinks;
107
107
  export const evaluateLoadSignalSample = mod.evaluateLoadSignalSample;
108
108
  export const extractUrlsFromPage = mod.extractUrlsFromPage;
109
109
  export const field = mod.field;
@@ -117,6 +117,7 @@ export const log = mod.log;
117
117
  export const mergeCookies = mod.mergeCookies;
118
118
  export const navigationDeadlineKey = mod.navigationDeadlineKey;
119
119
  export const operationRejectedInTransaction = mod.operationRejectedInTransaction;
120
+ export const parseArgument = mod.parseArgument;
120
121
  export const parseRetryAfterHeader = mod.parseRetryAfterHeader;
121
122
  export const parseValue = mod.parseValue;
122
123
  export const purgeDefaultStorages = mod.purgeDefaultStorages;
@@ -124,6 +125,7 @@ export const rejectOperationInTransaction = mod.rejectOperationInTransaction;
124
125
  export const remainingNavigationWindowMillis = mod.remainingNavigationWindowMillis;
125
126
  export const resolveBaseUrlForEnqueueLinksFiltering = mod.resolveBaseUrlForEnqueueLinksFiltering;
126
127
  export const resolveStorageIdentifier = mod.resolveStorageIdentifier;
128
+ export const schemas = mod.schemas;
127
129
  export const serializeArray = mod.serializeArray;
128
130
  export const serializeValue = mod.serializeValue;
129
131
  export const serviceLocator = mod.serviceLocator;
@@ -133,6 +135,7 @@ export const supportsDomainThrottling = mod.supportsDomainThrottling;
133
135
  export const toughCookieToBrowserPoolCookie = mod.toughCookieToBrowserPoolCookie;
134
136
  export const tryAbsoluteURL = mod.tryAbsoluteURL;
135
137
  export const updateEnqueueLinksPatternCache = mod.updateEnqueueLinksPatternCache;
138
+ export const urlPatternSchema = mod.urlPatternSchema;
136
139
  export const useState = mod.useState;
137
140
  export const validateGlobPattern = mod.validateGlobPattern;
138
141
  export const validateUserData = mod.validateUserData;
@@ -4,7 +4,7 @@ import { BrowserCrawler } from '@crawlee/browser';
4
4
  import type { Dictionary } from '@crawlee/types';
5
5
  // @ts-ignore optional peer dependency or compatibility with es2022
6
6
  import type { LaunchOptions, Page, Response } from 'playwright';
7
- import type { z } from 'zod';
7
+ import { z } from 'zod';
8
8
  import type { StagehandLaunchContext } from './stagehand-launcher';
9
9
  import type { StagehandPlugin } from './stagehand-plugin';
10
10
  /**
@@ -315,101 +315,123 @@ export declare class StagehandCrawler<ContextExtension = Dictionary<never>, Exte
315
315
  browserPlugins: [StagehandPlugin];
316
316
  }, LaunchOptions, StagehandCrawlingContext, ContextExtension, ExtendedContext, Routes> {
317
317
  protected static optionsShape: {
318
- // @ts-ignore optional peer dependency or compatibility with es2022
319
- stagehandOptions: import("ow", { with: { "resolution-mode": "import" } }).ObjectPredicate<object> & import("ow", { with: { "resolution-mode": "import" } }).BasePredicate<object | undefined>;
320
- // @ts-ignore optional peer dependency or compatibility with es2022
321
- browserPoolOptions: import("ow", { with: { "resolution-mode": "import" } }).ObjectPredicate<object> & import("ow", { with: { "resolution-mode": "import" } }).BasePredicate<object | undefined>;
322
- // @ts-ignore optional peer dependency or compatibility with es2022
323
- navigationTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
324
- // @ts-ignore optional peer dependency or compatibility with es2022
325
- preNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
326
- // @ts-ignore optional peer dependency or compatibility with es2022
327
- postNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
328
- // @ts-ignore optional peer dependency or compatibility with es2022
329
- launchContext: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
330
- // @ts-ignore optional peer dependency or compatibility with es2022
331
- headless: import("ow").AnyPredicate<string | boolean>;
332
- // @ts-ignore optional peer dependency or compatibility with es2022
333
- browserPool: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
334
- // @ts-ignore optional peer dependency or compatibility with es2022
335
- remoteBrowser: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
336
- // @ts-ignore optional peer dependency or compatibility with es2022
337
- saveResponseCookies: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
338
- // @ts-ignore optional peer dependency or compatibility with es2022
339
- proxyConfiguration: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
340
- // @ts-ignore optional peer dependency or compatibility with es2022
341
- contextPipelineBuilder: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
342
- // @ts-ignore optional peer dependency or compatibility with es2022
343
- extendContext: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
344
- // @ts-ignore optional peer dependency or compatibility with es2022
345
- requestList: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
346
- // @ts-ignore optional peer dependency or compatibility with es2022
347
- requestQueue: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
348
- // @ts-ignore optional peer dependency or compatibility with es2022
349
- requestManager: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
350
- // @ts-ignore optional peer dependency or compatibility with es2022
351
- requestHandler: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
352
- // @ts-ignore optional peer dependency or compatibility with es2022
353
- requestHandlerTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
354
- // @ts-ignore optional peer dependency or compatibility with es2022
355
- errorHandler: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
356
- // @ts-ignore optional peer dependency or compatibility with es2022
357
- failedRequestHandler: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
358
- // @ts-ignore optional peer dependency or compatibility with es2022
359
- maxRequestRetries: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
360
- // @ts-ignore optional peer dependency or compatibility with es2022
361
- sameDomainDelaySecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
362
- // @ts-ignore optional peer dependency or compatibility with es2022
363
- maxRequestsPerCrawl: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
364
- // @ts-ignore optional peer dependency or compatibility with es2022
365
- maxCrawlDepth: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
366
- // @ts-ignore optional peer dependency or compatibility with es2022
367
- taskLoopOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
368
- // @ts-ignore optional peer dependency or compatibility with es2022
369
- concurrencySystem: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
370
- // @ts-ignore optional peer dependency or compatibility with es2022
371
- sessionPool: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
372
- // @ts-ignore optional peer dependency or compatibility with es2022
373
- statusMessageLoggingInterval: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
374
- // @ts-ignore optional peer dependency or compatibility with es2022
375
- statusMessageCallback: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
376
- // @ts-ignore optional peer dependency or compatibility with es2022
377
- additionalHttpErrorStatusCodes: import("ow").ArrayPredicate<number>;
378
- // @ts-ignore optional peer dependency or compatibility with es2022
379
- ignoreHttpErrorStatusCodes: import("ow").ArrayPredicate<number>;
380
- // @ts-ignore optional peer dependency or compatibility with es2022
381
- blockedStatusCodes: import("ow").ArrayPredicate<number>;
382
- // @ts-ignore optional peer dependency or compatibility with es2022
383
- retryOnBlocked: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
384
- // @ts-ignore optional peer dependency or compatibility with es2022
385
- respectRobotsTxtFile: import("ow").AnyPredicate<boolean | object>;
386
- // @ts-ignore optional peer dependency or compatibility with es2022
387
- transactionalStorage: import("ow").BasePredicate<boolean | Partial<import("@crawlee/browser").StorageWritePolicy> | undefined>;
388
- // @ts-ignore optional peer dependency or compatibility with es2022
389
- onSkippedRequest: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
390
- // @ts-ignore optional peer dependency or compatibility with es2022
391
- httpClient: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
392
- // @ts-ignore optional peer dependency or compatibility with es2022
393
- configuration: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
394
- // @ts-ignore optional peer dependency or compatibility with es2022
395
- storageBackend: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
396
- // @ts-ignore optional peer dependency or compatibility with es2022
397
- eventManager: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
398
- // @ts-ignore optional peer dependency or compatibility with es2022
399
- logger: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
400
- // @ts-ignore optional peer dependency or compatibility with es2022
401
- minConcurrency: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
402
- // @ts-ignore optional peer dependency or compatibility with es2022
403
- maxConcurrency: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
404
- // @ts-ignore optional peer dependency or compatibility with es2022
405
- maxRequestsPerMinute: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
406
- // @ts-ignore optional peer dependency or compatibility with es2022
407
- keepAlive: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
408
- // @ts-ignore optional peer dependency or compatibility with es2022
409
- statistics: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
410
- // @ts-ignore optional peer dependency or compatibility with es2022
411
- id: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
318
+ stagehandOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
319
+ browserPoolOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
320
+ navigationTimeoutSecs: z.ZodDefault<z.ZodCustom<number, number>>;
321
+ preNavigationHooks: z.ZodDefault<z.ZodCustom<unknown[], unknown[]>>;
322
+ postNavigationHooks: z.ZodDefault<z.ZodCustom<unknown[], unknown[]>>;
323
+ launchContext: z.ZodDefault<z.ZodCustom<Dictionary, Dictionary>>;
324
+ headless: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
325
+ browserPool: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
326
+ remoteBrowser: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
327
+ saveResponseCookies: z.ZodDefault<z.ZodBoolean>;
328
+ proxyConfiguration: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
329
+ ignoreIframes: z.ZodDefault<z.ZodBoolean>;
330
+ ignoreShadowRoots: z.ZodDefault<z.ZodBoolean>;
331
+ contextPipelineBuilder: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
332
+ extendContext: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
333
+ requestList: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
334
+ requestQueue: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
335
+ requestManager: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
336
+ requestHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
337
+ requestHandlerTimeoutSecs: z.ZodOptional<z.ZodCustom<number, number>>;
338
+ errorHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
339
+ failedRequestHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
340
+ maxRequestRetries: z.ZodDefault<z.ZodCustom<number, number>>;
341
+ sameDomainDelaySecs: z.ZodDefault<z.ZodCustom<number, number>>;
342
+ maxRequestsPerCrawl: z.ZodOptional<z.ZodCustom<number, number>>;
343
+ maxCrawlDepth: z.ZodOptional<z.ZodCustom<number, number>>;
344
+ taskLoopOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
345
+ concurrencySystem: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
346
+ sessionPool: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
347
+ statusMessageLoggingInterval: z.ZodDefault<z.ZodCustom<number, number>>;
348
+ statusMessageCallback: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
349
+ additionalHttpErrorStatusCodes: z.ZodDefault<z.ZodArray<z.ZodCustom<number, number>>>;
350
+ ignoreHttpErrorStatusCodes: z.ZodDefault<z.ZodArray<z.ZodCustom<number, number>>>;
351
+ blockedStatusCodes: z.ZodOptional<z.ZodArray<z.ZodCustom<number, number>>>;
352
+ retryOnBlocked: z.ZodDefault<z.ZodBoolean>;
353
+ respectRobotsTxtFile: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<Dictionary, Dictionary>]>>;
354
+ transactionalStorage: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
355
+ requestQueue: z.ZodOptional<z.ZodEnum<{
356
+ deferred: "deferred";
357
+ writeThrough: "writeThrough";
358
+ }>>;
359
+ }, z.core.$strict>]>>;
360
+ onSkippedRequest: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
361
+ // @ts-ignore optional peer dependency or compatibility with es2022
362
+ httpClient: z.ZodOptional<z.ZodCustom<import("@crawlee/http-client").BaseHttpClient, import("@crawlee/http-client").BaseHttpClient>>;
363
+ // @ts-ignore optional peer dependency or compatibility with es2022
364
+ configuration: z.ZodOptional<z.ZodCustom<import("@crawlee/browser").Configuration, import("@crawlee/browser").Configuration>>;
365
+ storageBackend: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
366
+ // @ts-ignore optional peer dependency or compatibility with es2022
367
+ eventManager: z.ZodOptional<z.ZodCustom<import("@crawlee/browser").EventManager, import("@crawlee/browser").EventManager>>;
368
+ logger: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
369
+ minConcurrency: z.ZodOptional<z.ZodCustom<number, number>>;
370
+ maxConcurrency: z.ZodOptional<z.ZodCustom<number, number>>;
371
+ maxRequestsPerMinute: z.ZodOptional<z.ZodCustom<number, number>>;
372
+ keepAlive: z.ZodOptional<z.ZodBoolean>;
373
+ statistics: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
374
+ id: z.ZodOptional<z.ZodString>;
412
375
  };
376
+ protected static optionsSchema: z.ZodObject<{
377
+ stagehandOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
378
+ browserPoolOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
379
+ navigationTimeoutSecs: z.ZodDefault<z.ZodCustom<number, number>>;
380
+ preNavigationHooks: z.ZodDefault<z.ZodCustom<unknown[], unknown[]>>;
381
+ postNavigationHooks: z.ZodDefault<z.ZodCustom<unknown[], unknown[]>>;
382
+ launchContext: z.ZodDefault<z.ZodCustom<Dictionary, Dictionary>>;
383
+ headless: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
384
+ browserPool: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
385
+ remoteBrowser: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
386
+ saveResponseCookies: z.ZodDefault<z.ZodBoolean>;
387
+ proxyConfiguration: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
388
+ ignoreIframes: z.ZodDefault<z.ZodBoolean>;
389
+ ignoreShadowRoots: z.ZodDefault<z.ZodBoolean>;
390
+ contextPipelineBuilder: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
391
+ extendContext: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
392
+ requestList: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
393
+ requestQueue: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
394
+ requestManager: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
395
+ requestHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
396
+ requestHandlerTimeoutSecs: z.ZodOptional<z.ZodCustom<number, number>>;
397
+ errorHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
398
+ failedRequestHandler: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
399
+ maxRequestRetries: z.ZodDefault<z.ZodCustom<number, number>>;
400
+ sameDomainDelaySecs: z.ZodDefault<z.ZodCustom<number, number>>;
401
+ maxRequestsPerCrawl: z.ZodOptional<z.ZodCustom<number, number>>;
402
+ maxCrawlDepth: z.ZodOptional<z.ZodCustom<number, number>>;
403
+ taskLoopOptions: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
404
+ concurrencySystem: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
405
+ sessionPool: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
406
+ statusMessageLoggingInterval: z.ZodDefault<z.ZodCustom<number, number>>;
407
+ statusMessageCallback: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
408
+ additionalHttpErrorStatusCodes: z.ZodDefault<z.ZodArray<z.ZodCustom<number, number>>>;
409
+ ignoreHttpErrorStatusCodes: z.ZodDefault<z.ZodArray<z.ZodCustom<number, number>>>;
410
+ blockedStatusCodes: z.ZodOptional<z.ZodArray<z.ZodCustom<number, number>>>;
411
+ retryOnBlocked: z.ZodDefault<z.ZodBoolean>;
412
+ respectRobotsTxtFile: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<Dictionary, Dictionary>]>>;
413
+ transactionalStorage: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
414
+ requestQueue: z.ZodOptional<z.ZodEnum<{
415
+ deferred: "deferred";
416
+ writeThrough: "writeThrough";
417
+ }>>;
418
+ }, z.core.$strict>]>>;
419
+ onSkippedRequest: z.ZodOptional<z.ZodCustom<(...args: any[]) => unknown, (...args: any[]) => unknown>>;
420
+ // @ts-ignore optional peer dependency or compatibility with es2022
421
+ httpClient: z.ZodOptional<z.ZodCustom<import("@crawlee/http-client").BaseHttpClient, import("@crawlee/http-client").BaseHttpClient>>;
422
+ // @ts-ignore optional peer dependency or compatibility with es2022
423
+ configuration: z.ZodOptional<z.ZodCustom<import("@crawlee/browser").Configuration, import("@crawlee/browser").Configuration>>;
424
+ storageBackend: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
425
+ // @ts-ignore optional peer dependency or compatibility with es2022
426
+ eventManager: z.ZodOptional<z.ZodCustom<import("@crawlee/browser").EventManager, import("@crawlee/browser").EventManager>>;
427
+ logger: z.ZodOptional<z.ZodType<Dictionary<any>, unknown, z.core.$ZodTypeInternals<Dictionary<any>, unknown>>>;
428
+ minConcurrency: z.ZodOptional<z.ZodCustom<number, number>>;
429
+ maxConcurrency: z.ZodOptional<z.ZodCustom<number, number>>;
430
+ maxRequestsPerMinute: z.ZodOptional<z.ZodCustom<number, number>>;
431
+ keepAlive: z.ZodOptional<z.ZodBoolean>;
432
+ statistics: z.ZodOptional<z.ZodCustom<Dictionary, Dictionary>>;
433
+ id: z.ZodOptional<z.ZodString>;
434
+ }, z.core.$strict>;
413
435
  /**
414
436
  * Creates a new instance of StagehandCrawler.
415
437
  *
@@ -2,9 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StagehandCrawler = void 0;
4
4
  exports.createStagehandRouter = createStagehandRouter;
5
- const tslib_1 = require("tslib");
6
5
  const browser_1 = require("@crawlee/browser");
7
- const ow_1 = tslib_1.__importDefault(require("ow"));
6
+ const zod_1 = require("zod");
8
7
  const stagehand_launcher_1 = require("./stagehand-launcher");
9
8
  const stagehand_utils_1 = require("./utils/stagehand-utils");
10
9
  /**
@@ -59,19 +58,20 @@ const stagehand_utils_1 = require("./utils/stagehand-utils");
59
58
  class StagehandCrawler extends browser_1.BrowserCrawler {
60
59
  static optionsShape = {
61
60
  ...browser_1.BrowserCrawler.optionsShape,
62
- stagehandOptions: ow_1.default.optional.object,
63
- browserPoolOptions: ow_1.default.optional.object,
61
+ stagehandOptions: browser_1.schemas.anyObject.optional(),
62
+ browserPoolOptions: browser_1.schemas.anyObject.optional(),
64
63
  };
64
+ static optionsSchema = zod_1.z.strictObject(StagehandCrawler.optionsShape);
65
65
  /**
66
66
  * Creates a new instance of StagehandCrawler.
67
67
  *
68
68
  * @param options - Crawler configuration options
69
69
  */
70
70
  constructor(options = {}) {
71
- (0, ow_1.default)(options, 'StagehandCrawlerOptions', ow_1.default.object.exactShape(StagehandCrawler.optionsShape));
72
- const { stagehandOptions = {}, launchContext = {}, contextPipelineBuilder, ...browserCrawlerOptions } = options;
71
+ const parsedOptions = (0, browser_1.parseArgument)(options, StagehandCrawler.optionsSchema, 'StagehandCrawlerOptions');
72
+ const { stagehandOptions = {}, launchContext, contextPipelineBuilder, ...browserCrawlerOptions } = parsedOptions;
73
73
  const browserPoolOptions = {
74
- ...options.browserPoolOptions,
74
+ ...parsedOptions.browserPoolOptions,
75
75
  };
76
76
  // Create launcher with Stagehand plugin
77
77
  const launcher = new stagehand_launcher_1.StagehandLauncher({
@@ -2,6 +2,7 @@ import type { BrowserLaunchContext } from '@crawlee/browser';
2
2
  import { BrowserLauncher, Configuration } from '@crawlee/browser';
3
3
  // @ts-ignore optional peer dependency or compatibility with es2022
4
4
  import type { BrowserType, LaunchOptions } from 'playwright';
5
+ import { z } from 'zod';
5
6
  import type { StagehandOptions } from './stagehand-crawler';
6
7
  import { StagehandPlugin } from './stagehand-plugin';
7
8
  /**
@@ -58,28 +59,38 @@ export declare class StagehandLauncher extends BrowserLauncher<StagehandPlugin>
58
59
  readonly configuration: Configuration;
59
60
  protected static optionsShape: {
60
61
  // @ts-ignore optional peer dependency or compatibility with es2022
61
- launcher: import("ow", { with: { "resolution-mode": "import" } }).ObjectPredicate<object> & import("ow", { with: { "resolution-mode": "import" } }).BasePredicate<object | undefined>;
62
+ launcher: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
62
63
  // @ts-ignore optional peer dependency or compatibility with es2022
63
- launchContextOptions: import("ow", { with: { "resolution-mode": "import" } }).ObjectPredicate<object> & import("ow", { with: { "resolution-mode": "import" } }).BasePredicate<object | undefined>;
64
+ launchContextOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
64
65
  // @ts-ignore optional peer dependency or compatibility with es2022
65
- stagehandOptions: import("ow", { with: { "resolution-mode": "import" } }).ObjectPredicate<object> & import("ow", { with: { "resolution-mode": "import" } }).BasePredicate<object | undefined>;
66
+ stagehandOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
67
+ proxyUrl: z.ZodOptional<z.ZodURL>;
68
+ useChrome: z.ZodOptional<z.ZodBoolean>;
69
+ useIncognitoPages: z.ZodOptional<z.ZodBoolean>;
70
+ browserPerProxy: z.ZodOptional<z.ZodBoolean>;
71
+ ignoreProxyCertificate: z.ZodOptional<z.ZodBoolean>;
72
+ userDataDir: z.ZodOptional<z.ZodString>;
66
73
  // @ts-ignore optional peer dependency or compatibility with es2022
67
- proxyUrl: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
68
- // @ts-ignore optional peer dependency or compatibility with es2022
69
- useChrome: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
70
- // @ts-ignore optional peer dependency or compatibility with es2022
71
- useIncognitoPages: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
72
- // @ts-ignore optional peer dependency or compatibility with es2022
73
- browserPerProxy: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
74
+ launchOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
75
+ userAgent: z.ZodOptional<z.ZodString>;
76
+ };
77
+ protected static optionsSchema: z.ZodObject<{
74
78
  // @ts-ignore optional peer dependency or compatibility with es2022
75
- ignoreProxyCertificate: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
79
+ launcher: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
76
80
  // @ts-ignore optional peer dependency or compatibility with es2022
77
- userDataDir: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
81
+ launchContextOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
78
82
  // @ts-ignore optional peer dependency or compatibility with es2022
79
- launchOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
83
+ stagehandOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
84
+ proxyUrl: z.ZodOptional<z.ZodURL>;
85
+ useChrome: z.ZodOptional<z.ZodBoolean>;
86
+ useIncognitoPages: z.ZodOptional<z.ZodBoolean>;
87
+ browserPerProxy: z.ZodOptional<z.ZodBoolean>;
88
+ ignoreProxyCertificate: z.ZodOptional<z.ZodBoolean>;
89
+ userDataDir: z.ZodOptional<z.ZodString>;
80
90
  // @ts-ignore optional peer dependency or compatibility with es2022
81
- userAgent: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
82
- };
91
+ launchOptions: z.ZodOptional<z.ZodCustom<import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary, import("@crawlee/types", { with: { "resolution-mode": "import" } }).Dictionary>>;
92
+ userAgent: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strict>;
83
94
  /**
84
95
  * All StagehandLauncher parameters are passed via the launchContext object.
85
96
  */
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StagehandLauncher = void 0;
4
- const tslib_1 = require("tslib");
5
4
  const browser_1 = require("@crawlee/browser");
6
- const ow_1 = tslib_1.__importDefault(require("ow"));
5
+ const zod_1 = require("zod");
7
6
  const stagehand_plugin_1 = require("./stagehand-plugin");
8
7
  /**
9
8
  * StagehandLauncher is based on BrowserLauncher and creates StagehandPlugin instances.
@@ -15,24 +14,26 @@ class StagehandLauncher extends browser_1.BrowserLauncher {
15
14
  configuration;
16
15
  static optionsShape = {
17
16
  ...browser_1.BrowserLauncher.optionsShape,
18
- launcher: ow_1.default.optional.object,
19
- launchContextOptions: ow_1.default.optional.object,
20
- stagehandOptions: ow_1.default.optional.object,
17
+ // Passthrough schemas — the launcher module object must keep its prototype through parsing.
18
+ launcher: browser_1.schemas.anyObject.optional(),
19
+ launchContextOptions: browser_1.schemas.anyObject.optional(),
20
+ stagehandOptions: browser_1.schemas.anyObject.optional(),
21
21
  };
22
+ static optionsSchema = zod_1.z.strictObject(StagehandLauncher.optionsShape);
22
23
  #stagehandOptions;
23
24
  /**
24
25
  * All StagehandLauncher parameters are passed via the launchContext object.
25
26
  */
26
27
  constructor(launchContext = {}, configuration = browser_1.Configuration.getGlobalConfiguration()) {
27
- (0, ow_1.default)(launchContext, 'StagehandLaunchContext', ow_1.default.object.exactShape(StagehandLauncher.optionsShape));
28
- const { launcher = browser_1.BrowserLauncher.requireLauncherOrThrow('playwright', 'apify/actor-node-playwright-*').chromium, stagehandOptions = {}, } = launchContext;
29
- const { launchOptions = {}, ...rest } = launchContext;
28
+ const parsedContext = (0, browser_1.parseArgument)(launchContext, StagehandLauncher.optionsSchema, 'StagehandLaunchContext');
29
+ const { launcher = browser_1.BrowserLauncher.requireLauncherOrThrow('playwright', 'apify/actor-node-playwright-*').chromium, stagehandOptions = {}, } = parsedContext;
30
+ const { launchOptions = {}, ...rest } = parsedContext;
30
31
  // Call super first before initializing properties
31
32
  super({
32
33
  ...rest,
33
34
  launchOptions: {
34
35
  ...launchOptions,
35
- executablePath: getDefaultExecutablePath(launchContext, configuration),
36
+ executablePath: getDefaultExecutablePath(parsedContext, configuration),
36
37
  },
37
38
  launcher,
38
39
  }, configuration);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crawlee/stagehand",
3
- "version": "4.0.0-beta.121",
3
+ "version": "4.0.0-beta.123",
4
4
  "description": "AI-powered web crawling with Stagehand integration for Crawlee - enables natural language browser automation with act(), extract(), and observe() methods.",
5
5
  "engines": {
6
6
  "node": ">=22.0.0"
@@ -57,18 +57,17 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@apify/timeout": "^0.4.4",
60
- "@crawlee/browser": "4.0.0-beta.121",
61
- "@crawlee/browser-pool": "4.0.0-beta.121",
62
- "@crawlee/core": "4.0.0-beta.121",
63
- "@crawlee/types": "4.0.0-beta.121",
64
- "@crawlee/utils": "4.0.0-beta.121",
65
- "ow": "^2.0.0",
66
- "tslib": "^2.8.1"
60
+ "@crawlee/browser": "4.0.0-beta.123",
61
+ "@crawlee/browser-pool": "4.0.0-beta.123",
62
+ "@crawlee/core": "4.0.0-beta.123",
63
+ "@crawlee/types": "4.0.0-beta.123",
64
+ "@crawlee/utils": "4.0.0-beta.123",
65
+ "tslib": "^2.8.1",
66
+ "zod": "^4.4.3"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "@browserbasehq/stagehand": "^3.0.0",
70
- "playwright": "*",
71
- "zod": "^3.0.0 || ^4.0.0"
70
+ "playwright": "*"
72
71
  },
73
72
  "peerDependenciesMeta": {
74
73
  "@browserbasehq/stagehand": {
@@ -76,15 +75,11 @@
76
75
  },
77
76
  "playwright": {
78
77
  "optional": true
79
- },
80
- "zod": {
81
- "optional": true
82
78
  }
83
79
  },
84
80
  "devDependencies": {
85
81
  "@browserbasehq/stagehand": "3.0.7",
86
- "playwright": "^1.60.0",
87
- "zod": "^4.3.5"
82
+ "playwright": "^1.60.0"
88
83
  },
89
84
  "lerna": {
90
85
  "command": {
@@ -93,5 +88,5 @@
93
88
  }
94
89
  }
95
90
  },
96
- "gitHead": "5027317de626f5ba6de5047ae9341a898258cc5a"
91
+ "gitHead": "f77648095c6a3f5ed8815c7620ea765db430ae44"
97
92
  }