firecrawl 4.23.0 → 4.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Firecrawl Node SDK
2
2
 
3
- The Firecrawl Node SDK is a library that allows you to easily search, scrape, and interact with the web, and output the data in a format ready for use with language models (LLMs). It provides a simple and intuitive interface for the Firecrawl API.
3
+ The Firecrawl Node SDK is a library that lets you easily search, scrape, and interact with the web for AI agents returning clean Markdown or structured data your agents can ship with. It provides a simple and intuitive interface for the Firecrawl API.
4
4
 
5
5
  ## Installation
6
6
 
@@ -8,7 +8,7 @@ var require_package = __commonJS({
8
8
  "package.json"(exports, module) {
9
9
  module.exports = {
10
10
  name: "@mendable/firecrawl-js",
11
- version: "4.23.0",
11
+ version: "4.24.0",
12
12
  description: "JavaScript SDK for Firecrawl API",
13
13
  main: "dist/index.js",
14
14
  types: "dist/index.d.ts",
package/dist/index.cjs CHANGED
@@ -35,7 +35,7 @@ var require_package = __commonJS({
35
35
  "package.json"(exports2, module2) {
36
36
  module2.exports = {
37
37
  name: "@mendable/firecrawl-js",
38
- version: "4.23.0",
38
+ version: "4.24.0",
39
39
  description: "JavaScript SDK for Firecrawl API",
40
40
  main: "dist/index.js",
41
41
  types: "dist/index.d.ts",
package/dist/index.d.cts CHANGED
@@ -4,7 +4,7 @@ import { AxiosResponse, AxiosRequestHeaders } from 'axios';
4
4
  import { EventEmitter } from 'events';
5
5
  import { TypedEventTarget } from 'typescript-event-target';
6
6
 
7
- type FormatString = 'markdown' | 'html' | 'rawHtml' | 'links' | 'images' | 'screenshot' | 'summary' | 'changeTracking' | 'json' | 'attributes' | 'branding' | 'audio' | 'video';
7
+ type FormatString = "markdown" | "html" | "rawHtml" | "links" | "images" | "screenshot" | "summary" | "changeTracking" | "json" | "attributes" | "branding" | "audio" | "video";
8
8
  interface Viewport {
9
9
  width: number;
10
10
  height: number;
@@ -13,12 +13,12 @@ interface Format {
13
13
  type: FormatString;
14
14
  }
15
15
  interface JsonFormat extends Format {
16
- type: 'json';
16
+ type: "json";
17
17
  prompt?: string;
18
18
  schema?: Record<string, unknown> | ZodTypeAny;
19
19
  }
20
20
  interface ScreenshotFormat {
21
- type: 'screenshot';
21
+ type: "screenshot";
22
22
  fullPage?: boolean;
23
23
  quality?: number;
24
24
  viewport?: Viewport | {
@@ -27,35 +27,35 @@ interface ScreenshotFormat {
27
27
  };
28
28
  }
29
29
  interface ChangeTrackingFormat extends Format {
30
- type: 'changeTracking';
31
- modes: ('git-diff' | 'json')[];
30
+ type: "changeTracking";
31
+ modes: ("git-diff" | "json")[];
32
32
  schema?: Record<string, unknown>;
33
33
  prompt?: string;
34
34
  tag?: string;
35
35
  }
36
36
  interface AttributesFormat extends Format {
37
- type: 'attributes';
37
+ type: "attributes";
38
38
  selectors: Array<{
39
39
  selector: string;
40
40
  attribute: string;
41
41
  }>;
42
42
  }
43
43
  interface QuestionFormat {
44
- type: 'question';
44
+ type: "question";
45
45
  question: string;
46
46
  }
47
47
  interface HighlightsFormat {
48
- type: 'highlights';
48
+ type: "highlights";
49
49
  query: string;
50
50
  }
51
51
  /** @deprecated Use QuestionFormat or HighlightsFormat instead. */
52
52
  interface QueryFormat {
53
- type: 'query';
53
+ type: "query";
54
54
  prompt: string;
55
- mode?: 'freeform' | 'directQuote';
55
+ mode?: "freeform" | "directQuote";
56
56
  }
57
57
  type FormatOption = FormatString | Format | JsonFormat | ChangeTrackingFormat | ScreenshotFormat | AttributesFormat | QuestionFormat | HighlightsFormat | QueryFormat;
58
- type ParseFormatString = Exclude<FormatString, 'screenshot' | 'changeTracking' | 'branding' | 'audio' | 'video'>;
58
+ type ParseFormatString = Exclude<FormatString, "screenshot" | "changeTracking" | "branding" | "audio" | "video">;
59
59
  interface ParseFormat {
60
60
  type: ParseFormatString;
61
61
  }
@@ -65,12 +65,12 @@ interface LocationConfig$1 {
65
65
  languages?: string[];
66
66
  }
67
67
  interface WaitAction {
68
- type: 'wait';
68
+ type: "wait";
69
69
  milliseconds?: number;
70
70
  selector?: string;
71
71
  }
72
72
  interface ScreenshotAction {
73
- type: 'screenshot';
73
+ type: "screenshot";
74
74
  fullPage?: boolean;
75
75
  quality?: number;
76
76
  viewport?: Viewport | {
@@ -79,32 +79,32 @@ interface ScreenshotAction {
79
79
  };
80
80
  }
81
81
  interface ClickAction {
82
- type: 'click';
82
+ type: "click";
83
83
  selector: string;
84
84
  }
85
85
  interface WriteAction {
86
- type: 'write';
86
+ type: "write";
87
87
  text: string;
88
88
  }
89
89
  interface PressAction {
90
- type: 'press';
90
+ type: "press";
91
91
  key: string;
92
92
  }
93
93
  interface ScrollAction {
94
- type: 'scroll';
95
- direction: 'up' | 'down';
94
+ type: "scroll";
95
+ direction: "up" | "down";
96
96
  selector?: string;
97
97
  }
98
98
  interface ScrapeAction {
99
- type: 'scrape';
99
+ type: "scrape";
100
100
  }
101
101
  interface ExecuteJavascriptAction {
102
- type: 'executeJavascript';
102
+ type: "executeJavascript";
103
103
  script: string;
104
104
  }
105
105
  interface PDFAction {
106
- type: 'pdf';
107
- format?: 'A0' | 'A1' | 'A2' | 'A3' | 'A4' | 'A5' | 'A6' | 'Letter' | 'Legal' | 'Tabloid' | 'Ledger';
106
+ type: "pdf";
107
+ format?: "A0" | "A1" | "A2" | "A3" | "A4" | "A5" | "A6" | "Letter" | "Legal" | "Tabloid" | "Ledger";
108
108
  landscape?: boolean;
109
109
  scale?: number;
110
110
  }
@@ -119,8 +119,8 @@ interface ScrapeOptions {
119
119
  waitFor?: number;
120
120
  mobile?: boolean;
121
121
  parsers?: Array<string | {
122
- type: 'pdf';
123
- mode?: 'fast' | 'auto' | 'ocr';
122
+ type: "pdf";
123
+ mode?: "fast" | "auto" | "ocr";
124
124
  maxPages?: number;
125
125
  }>;
126
126
  actions?: ActionOption[];
@@ -130,7 +130,7 @@ interface ScrapeOptions {
130
130
  fastMode?: boolean;
131
131
  useMock?: string;
132
132
  blockAds?: boolean;
133
- proxy?: 'basic' | 'stealth' | 'enhanced' | 'auto' | string;
133
+ proxy?: "basic" | "stealth" | "enhanced" | "auto" | string;
134
134
  maxAge?: number;
135
135
  minAge?: number;
136
136
  storeInCache?: boolean;
@@ -148,17 +148,17 @@ interface ParseFile {
148
148
  filename: string;
149
149
  contentType?: string;
150
150
  }
151
- type ParseOptions = Omit<ScrapeOptions, 'formats' | 'waitFor' | 'mobile' | 'actions' | 'location' | 'maxAge' | 'minAge' | 'storeInCache' | 'lockdown' | 'proxy'> & {
151
+ type ParseOptions = Omit<ScrapeOptions, "formats" | "waitFor" | "mobile" | "actions" | "location" | "maxAge" | "minAge" | "storeInCache" | "lockdown" | "proxy"> & {
152
152
  formats?: ParseFormatOption[];
153
- proxy?: 'basic' | 'auto';
153
+ proxy?: "basic" | "auto";
154
154
  };
155
155
  interface WebhookConfig {
156
156
  url: string;
157
157
  headers?: Record<string, string>;
158
158
  metadata?: Record<string, string>;
159
- events?: Array<'completed' | 'failed' | 'page' | 'started'>;
159
+ events?: Array<"completed" | "failed" | "page" | "started">;
160
160
  }
161
- type AgentWebhookEvent = 'started' | 'action' | 'completed' | 'failed' | 'cancelled';
161
+ type AgentWebhookEvent = "started" | "action" | "completed" | "failed" | "cancelled";
162
162
  interface AgentWebhookConfig {
163
163
  url: string;
164
164
  headers?: Record<string, string>;
@@ -166,7 +166,7 @@ interface AgentWebhookConfig {
166
166
  events?: AgentWebhookEvent[];
167
167
  }
168
168
  interface BrandingProfile {
169
- colorScheme?: 'light' | 'dark';
169
+ colorScheme?: "light" | "dark";
170
170
  logo?: string | null;
171
171
  fonts?: Array<{
172
172
  family: string;
@@ -283,8 +283,8 @@ interface BrandingProfile {
283
283
  [key: string]: string | undefined;
284
284
  };
285
285
  personality?: {
286
- tone: 'professional' | 'playful' | 'modern' | 'traditional' | 'minimalist' | 'bold';
287
- energy: 'low' | 'medium' | 'high';
286
+ tone: "professional" | "playful" | "modern" | "traditional" | "minimalist" | "bold";
287
+ energy: "low" | "medium" | "high";
288
288
  targetAudience: string;
289
289
  };
290
290
  [key: string]: unknown;
@@ -327,8 +327,8 @@ interface DocumentMetadata {
327
327
  numPages?: number;
328
328
  contentType?: string;
329
329
  timezone?: string;
330
- proxyUsed?: 'basic' | 'stealth';
331
- cacheState?: 'hit' | 'miss';
330
+ proxyUsed?: "basic" | "stealth";
331
+ cacheState?: "hit" | "miss";
332
332
  cachedAt?: string;
333
333
  creditsUsed?: number;
334
334
  concurrencyLimited?: boolean;
@@ -399,14 +399,14 @@ interface SearchData {
399
399
  images?: Array<SearchResultImages | Document>;
400
400
  }
401
401
  interface CategoryOption {
402
- type: 'github' | 'research' | 'pdf';
402
+ type: "github" | "research" | "pdf";
403
403
  }
404
404
  interface SearchRequest {
405
405
  query: string;
406
- sources?: Array<'web' | 'news' | 'images' | {
407
- type: 'web' | 'news' | 'images';
406
+ sources?: Array<"web" | "news" | "images" | {
407
+ type: "web" | "news" | "images";
408
408
  }>;
409
- categories?: Array<'github' | 'research' | 'pdf' | CategoryOption>;
409
+ categories?: Array<"github" | "research" | "pdf" | CategoryOption>;
410
410
  includeDomains?: string[];
411
411
  excludeDomains?: string[];
412
412
  limit?: number;
@@ -423,7 +423,7 @@ interface CrawlOptions {
423
423
  excludePaths?: string[] | null;
424
424
  includePaths?: string[] | null;
425
425
  maxDiscoveryDepth?: number | null;
426
- sitemap?: 'skip' | 'include' | 'only';
426
+ sitemap?: "skip" | "include" | "only";
427
427
  ignoreQueryParameters?: boolean;
428
428
  deduplicateSimilarURLs?: boolean;
429
429
  limit?: number | null;
@@ -447,7 +447,7 @@ interface CrawlResponse$1 {
447
447
  }
448
448
  interface CrawlJob {
449
449
  id: string;
450
- status: 'scraping' | 'completed' | 'failed' | 'cancelled';
450
+ status: "scraping" | "completed" | "failed" | "cancelled";
451
451
  total: number;
452
452
  completed: number;
453
453
  creditsUsed?: number;
@@ -473,7 +473,7 @@ interface BatchScrapeResponse$1 {
473
473
  }
474
474
  interface BatchScrapeJob {
475
475
  id: string;
476
- status: 'scraping' | 'completed' | 'failed' | 'cancelled';
476
+ status: "scraping" | "completed" | "failed" | "cancelled";
477
477
  completed: number;
478
478
  total: number;
479
479
  creditsUsed?: number;
@@ -486,7 +486,7 @@ interface MapData {
486
486
  }
487
487
  interface MapOptions {
488
488
  search?: string;
489
- sitemap?: 'only' | 'include' | 'skip';
489
+ sitemap?: "only" | "include" | "skip";
490
490
  includeSubdomains?: boolean;
491
491
  ignoreQueryParameters?: boolean;
492
492
  limit?: number;
@@ -515,13 +515,13 @@ interface MonitorWebhookConfig {
515
515
  }
516
516
  interface MonitorScrapeTarget {
517
517
  id?: string;
518
- type: 'scrape';
518
+ type: "scrape";
519
519
  urls: string[];
520
520
  scrapeOptions?: ScrapeOptions;
521
521
  }
522
522
  interface MonitorCrawlTarget {
523
523
  id?: string;
524
- type: 'crawl';
524
+ type: "crawl";
525
525
  url: string;
526
526
  crawlOptions?: CrawlOptions;
527
527
  scrapeOptions?: ScrapeOptions;
@@ -537,7 +537,7 @@ interface CreateMonitorRequest {
537
537
  }
538
538
  interface UpdateMonitorRequest {
539
539
  name?: string;
540
- status?: 'active' | 'paused';
540
+ status?: "active" | "paused";
541
541
  schedule?: MonitorSchedule;
542
542
  webhook?: MonitorWebhookConfig | null;
543
543
  notification?: MonitorNotification | null;
@@ -555,7 +555,7 @@ interface MonitorSummary {
555
555
  interface Monitor {
556
556
  id: string;
557
557
  name: string;
558
- status: 'active' | 'paused' | 'deleted';
558
+ status: "active" | "paused" | "deleted";
559
559
  schedule: MonitorSchedule;
560
560
  nextRunAt?: string | null;
561
561
  lastRunAt?: string | null;
@@ -572,15 +572,15 @@ interface Monitor {
572
572
  interface MonitorCheck {
573
573
  id: string;
574
574
  monitorId: string;
575
- status: 'queued' | 'running' | 'completed' | 'failed' | 'partial' | 'skipped_overlap';
576
- trigger: 'scheduled' | 'manual';
575
+ status: "queued" | "running" | "completed" | "failed" | "partial" | "skipped_overlap";
576
+ trigger: "scheduled" | "manual";
577
577
  scheduledFor?: string | null;
578
578
  startedAt?: string | null;
579
579
  finishedAt?: string | null;
580
580
  estimatedCredits?: number | null;
581
581
  reservedCredits?: number | null;
582
582
  actualCredits?: number | null;
583
- billingStatus: 'not_applicable' | 'reserved' | 'confirmed' | 'released' | 'failed';
583
+ billingStatus: "not_applicable" | "reserved" | "confirmed" | "released" | "failed";
584
584
  summary: MonitorSummary;
585
585
  targetResults?: unknown;
586
586
  notificationStatus?: unknown;
@@ -588,17 +588,50 @@ interface MonitorCheck {
588
588
  createdAt: string;
589
589
  updatedAt: string;
590
590
  }
591
+ /** Per-field diff for monitors that requested JSON extraction. */
592
+ interface MonitorJsonFieldDiff {
593
+ [field: string]: {
594
+ previous: unknown;
595
+ current: unknown;
596
+ };
597
+ }
598
+ /**
599
+ * Diff payload returned alongside a monitor page when its scrape produced
600
+ * a change. The shape depends on what the monitor's formats asked for:
601
+ *
602
+ * - markdown-only monitors → `{ text, json }` where `json` is the
603
+ * `parseDiff` AST (a `{ files: [...] }` object).
604
+ * - JSON-extraction monitors → `{ json }` where `json` is the per-field
605
+ * `{ previous, current }` map.
606
+ * - Mixed (JSON + git-diff) monitors → both `text` (markdown sidecar)
607
+ * and `json` (field-level diff) are present.
608
+ */
609
+ interface MonitorPageDiff {
610
+ text?: string;
611
+ /** Markdown variants: parseDiff AST. JSON variants: per-field diff. */
612
+ json?: MonitorJsonFieldDiff | {
613
+ files: unknown[];
614
+ };
615
+ }
616
+ /**
617
+ * Snapshot of the current JSON extraction at this run. Present on JSON
618
+ * and mixed-mode monitors; absent for markdown-only.
619
+ */
620
+ interface MonitorPageSnapshot {
621
+ json?: Record<string, unknown>;
622
+ }
591
623
  interface MonitorCheckPage {
592
624
  id: string;
593
625
  targetId: string;
594
626
  url: string;
595
- status: 'same' | 'new' | 'changed' | 'removed' | 'error';
627
+ status: "same" | "new" | "changed" | "removed" | "error";
596
628
  previousScrapeId?: string | null;
597
629
  currentScrapeId?: string | null;
598
630
  statusCode?: number | null;
599
631
  error?: string | null;
600
632
  metadata?: unknown;
601
- diff?: unknown;
633
+ diff?: MonitorPageDiff | null;
634
+ snapshot?: MonitorPageSnapshot | null;
602
635
  createdAt: string;
603
636
  }
604
637
  interface MonitorCheckDetail extends MonitorCheck {
@@ -618,7 +651,7 @@ type GetMonitorCheckOptions = PaginationConfig & {
618
651
  interface ExtractResponse$1 {
619
652
  success?: boolean;
620
653
  id?: string;
621
- status?: 'processing' | 'completed' | 'failed' | 'cancelled';
654
+ status?: "processing" | "completed" | "failed" | "cancelled";
622
655
  data?: unknown;
623
656
  error?: string;
624
657
  warning?: string;
@@ -635,15 +668,15 @@ interface AgentResponse {
635
668
  }
636
669
  interface AgentStatusResponse {
637
670
  success: boolean;
638
- status: 'processing' | 'completed' | 'failed';
671
+ status: "processing" | "completed" | "failed";
639
672
  error?: string;
640
673
  data?: unknown;
641
- model?: 'spark-1-pro' | 'spark-1-mini';
674
+ model?: "spark-1-pro" | "spark-1-mini";
642
675
  expiresAt: string;
643
676
  creditsUsed?: number;
644
677
  }
645
678
  interface AgentOptions$1 {
646
- model: 'FIRE-1' | 'v3-beta';
679
+ model: "FIRE-1" | "v3-beta";
647
680
  }
648
681
  interface ConcurrencyCheck {
649
682
  concurrency: number;
@@ -716,7 +749,7 @@ declare class SdkError extends Error {
716
749
  }
717
750
  declare class JobTimeoutError extends SdkError {
718
751
  timeoutSeconds: number;
719
- constructor(jobId: string, timeoutSeconds: number, jobType?: 'batch' | 'crawl');
752
+ constructor(jobId: string, timeoutSeconds: number, jobType?: "batch" | "crawl");
720
753
  }
721
754
  interface QueueStatusResponse$1 {
722
755
  success: boolean;
@@ -2111,4 +2144,4 @@ declare class Firecrawl extends FirecrawlClient {
2111
2144
  get v1(): FirecrawlApp;
2112
2145
  }
2113
2146
 
2114
- export { type ActionOption, type ActiveCrawl, type ActiveCrawlsResponse, type AgentOptions$1 as AgentOptions, type AgentResponse, type AgentStatusResponse, type AgentWebhookConfig, type AgentWebhookEvent, type AttributesFormat, type BatchScrapeJob, type BatchScrapeOptions, type BatchScrapeResponse$1 as BatchScrapeResponse, type BrandingProfile, type BrowserCreateResponse, type BrowserDeleteResponse, type BrowserExecuteResponse, type BrowserListResponse, type BrowserSession, type CategoryOption, type ChangeTrackingFormat, type ClickAction, type ConcurrencyCheck, type CrawlErrorsResponse$1 as CrawlErrorsResponse, type CrawlJob, type CrawlOptions, type CrawlResponse$1 as CrawlResponse, type CreateMonitorRequest, type CreditUsage, type CreditUsageHistoricalPeriod, type CreditUsageHistoricalResponse, type Document, type DocumentMetadata, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type HighlightsFormat, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorEmailNotification, type MonitorNotification, type MonitorSchedule, type MonitorScrapeTarget, type MonitorSummary, type MonitorTarget, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type PressAction, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };
2147
+ export { type ActionOption, type ActiveCrawl, type ActiveCrawlsResponse, type AgentOptions$1 as AgentOptions, type AgentResponse, type AgentStatusResponse, type AgentWebhookConfig, type AgentWebhookEvent, type AttributesFormat, type BatchScrapeJob, type BatchScrapeOptions, type BatchScrapeResponse$1 as BatchScrapeResponse, type BrandingProfile, type BrowserCreateResponse, type BrowserDeleteResponse, type BrowserExecuteResponse, type BrowserListResponse, type BrowserSession, type CategoryOption, type ChangeTrackingFormat, type ClickAction, type ConcurrencyCheck, type CrawlErrorsResponse$1 as CrawlErrorsResponse, type CrawlJob, type CrawlOptions, type CrawlResponse$1 as CrawlResponse, type CreateMonitorRequest, type CreditUsage, type CreditUsageHistoricalPeriod, type CreditUsageHistoricalResponse, type Document, type DocumentMetadata, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type HighlightsFormat, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorEmailNotification, type MonitorJsonFieldDiff, type MonitorNotification, type MonitorPageDiff, type MonitorPageSnapshot, type MonitorSchedule, type MonitorScrapeTarget, type MonitorSummary, type MonitorTarget, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type PressAction, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };