firecrawl 4.29.2 → 4.30.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.
@@ -12,7 +12,7 @@ var require_package = __commonJS({
12
12
  "package.json"(exports, module) {
13
13
  module.exports = {
14
14
  name: "@mendable/firecrawl-js",
15
- version: "4.29.2",
15
+ version: "4.30.0",
16
16
  description: "JavaScript SDK for Firecrawl API",
17
17
  main: "dist/index.js",
18
18
  types: "dist/index.d.ts",
package/dist/index.cjs CHANGED
@@ -39,7 +39,7 @@ var require_package = __commonJS({
39
39
  "package.json"(exports2, module2) {
40
40
  module2.exports = {
41
41
  name: "@mendable/firecrawl-js",
42
- version: "4.29.2",
42
+ version: "4.30.0",
43
43
  description: "JavaScript SDK for Firecrawl API",
44
44
  main: "dist/index.js",
45
45
  types: "dist/index.d.ts",
@@ -721,6 +721,8 @@ function prepareSearchPayload(req) {
721
721
  payload.integration = req.integration.trim();
722
722
  if (req.origin) payload.origin = req.origin;
723
723
  if (req.enterprise) payload.enterprise = req.enterprise;
724
+ if (req.threatProtection != null)
725
+ payload.threatProtection = req.threatProtection;
724
726
  if (req.scrapeOptions) {
725
727
  ensureValidScrapeOptions(req.scrapeOptions);
726
728
  payload.scrapeOptions = req.scrapeOptions;
@@ -797,6 +799,8 @@ function prepareMapPayload(url, options) {
797
799
  payload.integration = options.integration.trim();
798
800
  if (options.origin) payload.origin = options.origin;
799
801
  if (options.location != null) payload.location = options.location;
802
+ if (options.threatProtection != null)
803
+ payload.threatProtection = options.threatProtection;
800
804
  }
801
805
  return payload;
802
806
  }
@@ -1229,6 +1233,8 @@ function prepareExtractPayload(args) {
1229
1233
  if (args.origin) body.origin = args.origin;
1230
1234
  if (args.agent) body.agent = args.agent;
1231
1235
  if (args.webhook != null) body.webhook = args.webhook;
1236
+ if (args.threatProtection != null)
1237
+ body.threatProtection = args.threatProtection;
1232
1238
  if (args.scrapeOptions) {
1233
1239
  ensureValidScrapeOptions(args.scrapeOptions);
1234
1240
  body.scrapeOptions = args.scrapeOptions;
@@ -1286,6 +1292,8 @@ function prepareAgentPayload(args) {
1286
1292
  if (args.strictConstrainToURLs !== null && args.strictConstrainToURLs !== void 0) body.strictConstrainToURLs = args.strictConstrainToURLs;
1287
1293
  if (args.model !== null && args.model !== void 0) body.model = args.model;
1288
1294
  if (args.webhook != null) body.webhook = args.webhook;
1295
+ if (args.threatProtection != null)
1296
+ body.threatProtection = args.threatProtection;
1289
1297
  return body;
1290
1298
  }
1291
1299
  async function startAgent(http, args) {
package/dist/index.d.cts CHANGED
@@ -141,6 +141,7 @@ interface ScrapeOptions {
141
141
  storeInCache?: boolean;
142
142
  lockdown?: boolean;
143
143
  redactPII?: boolean | RedactPIIOptions;
144
+ threatProtection?: ThreatProtectionOptions;
144
145
  profile?: {
145
146
  name: string;
146
147
  saveChanges?: boolean;
@@ -165,13 +166,33 @@ interface RedactPIIOptions {
165
166
  */
166
167
  replaceStyle?: "tag" | "mask" | "remove";
167
168
  }
169
+ /**
170
+ * Enterprise: per-request field-level override of your team's threat
171
+ * protection policy. Requires threat protection to be enabled for your team
172
+ * and request overrides to be allowed in the team configuration. Only the
173
+ * fields you provide replace the team policy's values.
174
+ */
175
+ interface ThreatProtectionOptions {
176
+ /** "off" disables scanning for this request; "normal" applies the policy. */
177
+ mode?: "off" | "normal";
178
+ /** Block verdicts at or above this risk score (integer 0-100). */
179
+ riskScoreThreshold?: number;
180
+ /** Exact domains or globs like "*.example.com" to always block (max 1000). */
181
+ blacklist?: string[];
182
+ /** Exact domains or globs to always allow; wins over everything (max 1000). */
183
+ whitelist?: string[];
184
+ /** Lowercase TLDs without the leading dot, e.g. "zip" (max 1000). */
185
+ blockedTlds?: string[];
186
+ /** Behavior when scanning is unavailable: "closed" blocks, "open" allows. */
187
+ failurePolicy?: "open" | "closed";
188
+ }
168
189
  type ParseFileData = Blob | File | Buffer | Uint8Array | ArrayBuffer | string;
169
190
  interface ParseFile {
170
191
  data: ParseFileData;
171
192
  filename: string;
172
193
  contentType?: string;
173
194
  }
174
- type ParseOptions = Omit<ScrapeOptions, "formats" | "waitFor" | "mobile" | "actions" | "location" | "maxAge" | "minAge" | "storeInCache" | "lockdown" | "proxy"> & {
195
+ type ParseOptions = Omit<ScrapeOptions, "formats" | "waitFor" | "mobile" | "actions" | "location" | "maxAge" | "minAge" | "storeInCache" | "lockdown" | "proxy" | "threatProtection"> & {
175
196
  formats?: ParseFormatOption[];
176
197
  proxy?: "basic" | "auto";
177
198
  };
@@ -530,6 +551,7 @@ interface SearchRequest {
530
551
  * your team.
531
552
  */
532
553
  enterprise?: Array<"default" | "anon" | "zdr">;
554
+ threatProtection?: ThreatProtectionOptions;
533
555
  integration?: string;
534
556
  origin?: string;
535
557
  }
@@ -610,6 +632,7 @@ interface MapOptions {
610
632
  integration?: string;
611
633
  origin?: string;
612
634
  location?: LocationConfig$1;
635
+ threatProtection?: ThreatProtectionOptions;
613
636
  }
614
637
  type FeedbackRating = "good" | "partial" | "bad";
615
638
  type EndpointFeedbackEndpoint = "search" | "scrape" | "parse" | "map";
@@ -1250,6 +1273,7 @@ declare function prepareExtractPayload(args: {
1250
1273
  origin?: string;
1251
1274
  agent?: AgentOptions$1;
1252
1275
  webhook?: string | WebhookConfig | null;
1276
+ threatProtection?: ThreatProtectionOptions;
1253
1277
  }): Record<string, unknown>;
1254
1278
  /**
1255
1279
  * @deprecated The extract endpoint is in maintenance mode and its use is discouraged.
@@ -1267,6 +1291,7 @@ declare function prepareAgentPayload(args: {
1267
1291
  strictConstrainToURLs?: boolean;
1268
1292
  model?: "spark-1-pro" | "spark-1-mini";
1269
1293
  webhook?: string | AgentWebhookConfig;
1294
+ threatProtection?: ThreatProtectionOptions;
1270
1295
  }): Record<string, unknown>;
1271
1296
  declare function startAgent(http: HttpClient, args: Parameters<typeof prepareAgentPayload>[0]): Promise<AgentResponse>;
1272
1297
 
@@ -2629,4 +2654,4 @@ declare class Firecrawl extends FirecrawlClient {
2629
2654
  get v1(): FirecrawlApp;
2630
2655
  }
2631
2656
 
2632
- 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 EndpointFeedbackEndpoint, type EndpointFeedbackRequest, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, type FeedbackMissingContent, type FeedbackRating, type FeedbackResponse, type FeedbackValuableSource, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientInput, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type GetPaperOptions, type GitHubScoreBreakdown, type GitHubSearchItem, type GitHubSearchResponse, type HighlightsFormat, type IdMap, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type MenuAvailability, type MenuImage, type MenuItem, type MenuItemIdentifiers, type MenuMerchant, type MenuPrice, type MenuProfile, type MenuSection, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorCrawlTargetResult, type MonitorEmailNotification, type MonitorEmailRecipientSubscription, type MonitorJsonFieldDiff, type MonitorNotification, type MonitorPageDiff, type MonitorPageJudgment, type MonitorPageSnapshot, type MonitorSchedule, type MonitorScrapeTarget, type MonitorScrapeTargetResult, type MonitorSearchTarget, type MonitorSearchTargetResult, type MonitorSummary, type MonitorTarget, type MonitorTargetResult, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type PaperMetadata, type PaperMetadataResponse, type PaperResult, type PaperSignals, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type Passage, type PressAction, type ProductAvailability, type ProductImage, type ProductPrice, type ProductProfile, type ProductSale, type ProductVariant, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ReadPaperResponse, type RedactPIIEntity, type RedactPIIOptions, ResearchClient, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchFeedbackRequest, type SearchGithubOptions, type SearchPapersOptions, type SearchPapersResponse, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type SimilarPapersOptions, type SimilarPapersResponse, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };
2657
+ 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 EndpointFeedbackEndpoint, type EndpointFeedbackRequest, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, type FeedbackMissingContent, type FeedbackRating, type FeedbackResponse, type FeedbackValuableSource, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientInput, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type GetPaperOptions, type GitHubScoreBreakdown, type GitHubSearchItem, type GitHubSearchResponse, type HighlightsFormat, type IdMap, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type MenuAvailability, type MenuImage, type MenuItem, type MenuItemIdentifiers, type MenuMerchant, type MenuPrice, type MenuProfile, type MenuSection, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorCrawlTargetResult, type MonitorEmailNotification, type MonitorEmailRecipientSubscription, type MonitorJsonFieldDiff, type MonitorNotification, type MonitorPageDiff, type MonitorPageJudgment, type MonitorPageSnapshot, type MonitorSchedule, type MonitorScrapeTarget, type MonitorScrapeTargetResult, type MonitorSearchTarget, type MonitorSearchTargetResult, type MonitorSummary, type MonitorTarget, type MonitorTargetResult, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type PaperMetadata, type PaperMetadataResponse, type PaperResult, type PaperSignals, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type Passage, type PressAction, type ProductAvailability, type ProductImage, type ProductPrice, type ProductProfile, type ProductSale, type ProductVariant, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ReadPaperResponse, type RedactPIIEntity, type RedactPIIOptions, ResearchClient, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchFeedbackRequest, type SearchGithubOptions, type SearchPapersOptions, type SearchPapersResponse, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type SimilarPapersOptions, type SimilarPapersResponse, type ThreatProtectionOptions, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };
package/dist/index.d.ts CHANGED
@@ -141,6 +141,7 @@ interface ScrapeOptions {
141
141
  storeInCache?: boolean;
142
142
  lockdown?: boolean;
143
143
  redactPII?: boolean | RedactPIIOptions;
144
+ threatProtection?: ThreatProtectionOptions;
144
145
  profile?: {
145
146
  name: string;
146
147
  saveChanges?: boolean;
@@ -165,13 +166,33 @@ interface RedactPIIOptions {
165
166
  */
166
167
  replaceStyle?: "tag" | "mask" | "remove";
167
168
  }
169
+ /**
170
+ * Enterprise: per-request field-level override of your team's threat
171
+ * protection policy. Requires threat protection to be enabled for your team
172
+ * and request overrides to be allowed in the team configuration. Only the
173
+ * fields you provide replace the team policy's values.
174
+ */
175
+ interface ThreatProtectionOptions {
176
+ /** "off" disables scanning for this request; "normal" applies the policy. */
177
+ mode?: "off" | "normal";
178
+ /** Block verdicts at or above this risk score (integer 0-100). */
179
+ riskScoreThreshold?: number;
180
+ /** Exact domains or globs like "*.example.com" to always block (max 1000). */
181
+ blacklist?: string[];
182
+ /** Exact domains or globs to always allow; wins over everything (max 1000). */
183
+ whitelist?: string[];
184
+ /** Lowercase TLDs without the leading dot, e.g. "zip" (max 1000). */
185
+ blockedTlds?: string[];
186
+ /** Behavior when scanning is unavailable: "closed" blocks, "open" allows. */
187
+ failurePolicy?: "open" | "closed";
188
+ }
168
189
  type ParseFileData = Blob | File | Buffer | Uint8Array | ArrayBuffer | string;
169
190
  interface ParseFile {
170
191
  data: ParseFileData;
171
192
  filename: string;
172
193
  contentType?: string;
173
194
  }
174
- type ParseOptions = Omit<ScrapeOptions, "formats" | "waitFor" | "mobile" | "actions" | "location" | "maxAge" | "minAge" | "storeInCache" | "lockdown" | "proxy"> & {
195
+ type ParseOptions = Omit<ScrapeOptions, "formats" | "waitFor" | "mobile" | "actions" | "location" | "maxAge" | "minAge" | "storeInCache" | "lockdown" | "proxy" | "threatProtection"> & {
175
196
  formats?: ParseFormatOption[];
176
197
  proxy?: "basic" | "auto";
177
198
  };
@@ -530,6 +551,7 @@ interface SearchRequest {
530
551
  * your team.
531
552
  */
532
553
  enterprise?: Array<"default" | "anon" | "zdr">;
554
+ threatProtection?: ThreatProtectionOptions;
533
555
  integration?: string;
534
556
  origin?: string;
535
557
  }
@@ -610,6 +632,7 @@ interface MapOptions {
610
632
  integration?: string;
611
633
  origin?: string;
612
634
  location?: LocationConfig$1;
635
+ threatProtection?: ThreatProtectionOptions;
613
636
  }
614
637
  type FeedbackRating = "good" | "partial" | "bad";
615
638
  type EndpointFeedbackEndpoint = "search" | "scrape" | "parse" | "map";
@@ -1250,6 +1273,7 @@ declare function prepareExtractPayload(args: {
1250
1273
  origin?: string;
1251
1274
  agent?: AgentOptions$1;
1252
1275
  webhook?: string | WebhookConfig | null;
1276
+ threatProtection?: ThreatProtectionOptions;
1253
1277
  }): Record<string, unknown>;
1254
1278
  /**
1255
1279
  * @deprecated The extract endpoint is in maintenance mode and its use is discouraged.
@@ -1267,6 +1291,7 @@ declare function prepareAgentPayload(args: {
1267
1291
  strictConstrainToURLs?: boolean;
1268
1292
  model?: "spark-1-pro" | "spark-1-mini";
1269
1293
  webhook?: string | AgentWebhookConfig;
1294
+ threatProtection?: ThreatProtectionOptions;
1270
1295
  }): Record<string, unknown>;
1271
1296
  declare function startAgent(http: HttpClient, args: Parameters<typeof prepareAgentPayload>[0]): Promise<AgentResponse>;
1272
1297
 
@@ -2629,4 +2654,4 @@ declare class Firecrawl extends FirecrawlClient {
2629
2654
  get v1(): FirecrawlApp;
2630
2655
  }
2631
2656
 
2632
- 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 EndpointFeedbackEndpoint, type EndpointFeedbackRequest, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, type FeedbackMissingContent, type FeedbackRating, type FeedbackResponse, type FeedbackValuableSource, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientInput, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type GetPaperOptions, type GitHubScoreBreakdown, type GitHubSearchItem, type GitHubSearchResponse, type HighlightsFormat, type IdMap, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type MenuAvailability, type MenuImage, type MenuItem, type MenuItemIdentifiers, type MenuMerchant, type MenuPrice, type MenuProfile, type MenuSection, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorCrawlTargetResult, type MonitorEmailNotification, type MonitorEmailRecipientSubscription, type MonitorJsonFieldDiff, type MonitorNotification, type MonitorPageDiff, type MonitorPageJudgment, type MonitorPageSnapshot, type MonitorSchedule, type MonitorScrapeTarget, type MonitorScrapeTargetResult, type MonitorSearchTarget, type MonitorSearchTargetResult, type MonitorSummary, type MonitorTarget, type MonitorTargetResult, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type PaperMetadata, type PaperMetadataResponse, type PaperResult, type PaperSignals, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type Passage, type PressAction, type ProductAvailability, type ProductImage, type ProductPrice, type ProductProfile, type ProductSale, type ProductVariant, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ReadPaperResponse, type RedactPIIEntity, type RedactPIIOptions, ResearchClient, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchFeedbackRequest, type SearchGithubOptions, type SearchPapersOptions, type SearchPapersResponse, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type SimilarPapersOptions, type SimilarPapersResponse, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };
2657
+ 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 EndpointFeedbackEndpoint, type EndpointFeedbackRequest, type ErrorDetails, type ExecuteJavascriptAction, type ExtractResponse$1 as ExtractResponse, type FeedbackMissingContent, type FeedbackRating, type FeedbackResponse, type FeedbackValuableSource, Firecrawl, FirecrawlApp as FirecrawlAppV1, FirecrawlClient, type FirecrawlClientInput, type FirecrawlClientOptions, type Format, type FormatOption, type FormatString, type GetMonitorCheckOptions, type GetPaperOptions, type GitHubScoreBreakdown, type GitHubSearchItem, type GitHubSearchResponse, type HighlightsFormat, type IdMap, JobTimeoutError, type JsonFormat, type ListMonitorChecksOptions, type ListMonitorsOptions, type LocationConfig$1 as LocationConfig, type MapData, type MapOptions, type MenuAvailability, type MenuImage, type MenuItem, type MenuItemIdentifiers, type MenuMerchant, type MenuPrice, type MenuProfile, type MenuSection, type Monitor, type MonitorCheck, type MonitorCheckDetail, type MonitorCheckPage, type MonitorCrawlTarget, type MonitorCrawlTargetResult, type MonitorEmailNotification, type MonitorEmailRecipientSubscription, type MonitorJsonFieldDiff, type MonitorNotification, type MonitorPageDiff, type MonitorPageJudgment, type MonitorPageSnapshot, type MonitorSchedule, type MonitorScrapeTarget, type MonitorScrapeTargetResult, type MonitorSearchTarget, type MonitorSearchTargetResult, type MonitorSummary, type MonitorTarget, type MonitorTargetResult, type MonitorWebhookConfig, type PDFAction, type PaginationConfig, type PaperMetadata, type PaperMetadataResponse, type PaperResult, type PaperSignals, type ParseFile, type ParseFileData, type ParseFormat, type ParseFormatOption, type ParseFormatString, type ParseOptions, type Passage, type PressAction, type ProductAvailability, type ProductImage, type ProductPrice, type ProductProfile, type ProductSale, type ProductVariant, type QueryFormat, type QuestionFormat, type QueueStatusResponse$1 as QueueStatusResponse, type ReadPaperResponse, type RedactPIIEntity, type RedactPIIOptions, ResearchClient, type ScrapeAction, type ScrapeBrowserDeleteResponse, type ScrapeExecuteRequest, type ScrapeExecuteResponse, type ScrapeOptions, type ScreenshotAction, type ScreenshotFormat, type ScrollAction, SdkError, type SearchData, type SearchFeedbackRequest, type SearchGithubOptions, type SearchPapersOptions, type SearchPapersResponse, type SearchRequest, type SearchResultImages, type SearchResultNews, type SearchResultWeb, type SimilarPapersOptions, type SimilarPapersResponse, type ThreatProtectionOptions, type TokenUsage, type TokenUsageHistoricalPeriod, type TokenUsageHistoricalResponse, type UpdateMonitorRequest, type Viewport, type WaitAction, Watcher, type WatcherOptions, type WebhookConfig, type WriteAction, Firecrawl as default };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  require_package
3
- } from "./chunk-N3GO36OX.js";
3
+ } from "./chunk-OZ7DDARD.js";
4
4
 
5
5
  // src/v2/utils/httpClient.ts
6
6
  import axios from "axios";
@@ -588,6 +588,8 @@ function prepareSearchPayload(req) {
588
588
  payload.integration = req.integration.trim();
589
589
  if (req.origin) payload.origin = req.origin;
590
590
  if (req.enterprise) payload.enterprise = req.enterprise;
591
+ if (req.threatProtection != null)
592
+ payload.threatProtection = req.threatProtection;
591
593
  if (req.scrapeOptions) {
592
594
  ensureValidScrapeOptions(req.scrapeOptions);
593
595
  payload.scrapeOptions = req.scrapeOptions;
@@ -664,6 +666,8 @@ function prepareMapPayload(url, options) {
664
666
  payload.integration = options.integration.trim();
665
667
  if (options.origin) payload.origin = options.origin;
666
668
  if (options.location != null) payload.location = options.location;
669
+ if (options.threatProtection != null)
670
+ payload.threatProtection = options.threatProtection;
667
671
  }
668
672
  return payload;
669
673
  }
@@ -1096,6 +1100,8 @@ function prepareExtractPayload(args) {
1096
1100
  if (args.origin) body.origin = args.origin;
1097
1101
  if (args.agent) body.agent = args.agent;
1098
1102
  if (args.webhook != null) body.webhook = args.webhook;
1103
+ if (args.threatProtection != null)
1104
+ body.threatProtection = args.threatProtection;
1099
1105
  if (args.scrapeOptions) {
1100
1106
  ensureValidScrapeOptions(args.scrapeOptions);
1101
1107
  body.scrapeOptions = args.scrapeOptions;
@@ -1153,6 +1159,8 @@ function prepareAgentPayload(args) {
1153
1159
  if (args.strictConstrainToURLs !== null && args.strictConstrainToURLs !== void 0) body.strictConstrainToURLs = args.strictConstrainToURLs;
1154
1160
  if (args.model !== null && args.model !== void 0) body.model = args.model;
1155
1161
  if (args.webhook != null) body.webhook = args.webhook;
1162
+ if (args.threatProtection != null)
1163
+ body.threatProtection = args.threatProtection;
1156
1164
  return body;
1157
1165
  }
1158
1166
  async function startAgent(http, args) {
@@ -2303,7 +2311,7 @@ var FirecrawlApp = class {
2303
2311
  if (typeof process !== "undefined" && process.env && process.env.npm_package_version) {
2304
2312
  return process.env.npm_package_version;
2305
2313
  }
2306
- const packageJson = await import("./package-VAY7ZMTB.js");
2314
+ const packageJson = await import("./package-ZZWOLTXM.js");
2307
2315
  return packageJson.default.version;
2308
2316
  } catch (error) {
2309
2317
  const isTest = typeof process !== "undefined" && (process.env.JEST_WORKER_ID != null || false);
@@ -1,4 +1,4 @@
1
1
  import {
2
2
  require_package
3
- } from "./chunk-N3GO36OX.js";
3
+ } from "./chunk-OZ7DDARD.js";
4
4
  export default require_package();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firecrawl",
3
- "version": "4.29.2",
3
+ "version": "4.30.0",
4
4
  "description": "JavaScript SDK for Firecrawl API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,123 @@
1
+ import { describe, test, expect, jest } from "@jest/globals";
2
+ import { scrape } from "../../../v2/methods/scrape";
3
+ import { startBatchScrape } from "../../../v2/methods/batch";
4
+ import { startCrawl } from "../../../v2/methods/crawl";
5
+ import { search } from "../../../v2/methods/search";
6
+ import { map } from "../../../v2/methods/map";
7
+ import { startExtract } from "../../../v2/methods/extract";
8
+ import { startAgent } from "../../../v2/methods/agent";
9
+ import type { ThreatProtectionOptions } from "../../../v2/types";
10
+
11
+ const threatProtection: ThreatProtectionOptions = {
12
+ mode: "normal",
13
+ riskScoreThreshold: 80,
14
+ blacklist: ["*.blocked.example.com"],
15
+ whitelist: ["allowed.example.com"],
16
+ blockedTlds: ["zip"],
17
+ failurePolicy: "open",
18
+ };
19
+
20
+ function makeHttp(data: Record<string, unknown>) {
21
+ const post = jest.fn(async () => ({ status: 200, data }));
22
+ return {
23
+ post,
24
+ prepareHeaders: jest.fn(() => undefined),
25
+ } as any;
26
+ }
27
+
28
+ describe("v2 threatProtection request serialization", () => {
29
+ test("scrape sends threatProtection at top level", async () => {
30
+ const http = makeHttp({ success: true, data: {} });
31
+ await scrape(http, "https://example.com", { threatProtection });
32
+ expect(http.post).toHaveBeenCalledWith(
33
+ "/v2/scrape",
34
+ expect.objectContaining({ url: "https://example.com", threatProtection }),
35
+ {},
36
+ );
37
+ });
38
+
39
+ test("batch scrape sends threatProtection at top level", async () => {
40
+ const http = makeHttp({ success: true, id: "job", url: "u" });
41
+ await startBatchScrape(http, ["https://example.com"], {
42
+ options: { threatProtection },
43
+ });
44
+ expect(http.post).toHaveBeenCalledWith(
45
+ "/v2/batch/scrape",
46
+ expect.objectContaining({
47
+ urls: ["https://example.com"],
48
+ threatProtection,
49
+ }),
50
+ expect.anything(),
51
+ );
52
+ });
53
+
54
+ test("crawl sends threatProtection under scrapeOptions", async () => {
55
+ const http = makeHttp({ success: true, id: "job", url: "u" });
56
+ await startCrawl(http, {
57
+ url: "https://example.com",
58
+ scrapeOptions: { threatProtection },
59
+ });
60
+ expect(http.post).toHaveBeenCalledWith(
61
+ "/v2/crawl",
62
+ expect.objectContaining({
63
+ scrapeOptions: expect.objectContaining({ threatProtection }),
64
+ }),
65
+ );
66
+ });
67
+
68
+ test("search sends threatProtection at top level and under scrapeOptions", async () => {
69
+ const http = makeHttp({ success: true, data: {} });
70
+ await search(http, {
71
+ query: "firecrawl",
72
+ threatProtection,
73
+ scrapeOptions: { threatProtection },
74
+ });
75
+ expect(http.post).toHaveBeenCalledWith(
76
+ "/v2/search",
77
+ expect.objectContaining({
78
+ threatProtection,
79
+ scrapeOptions: expect.objectContaining({ threatProtection }),
80
+ }),
81
+ {},
82
+ );
83
+ });
84
+
85
+ test("map sends threatProtection at top level", async () => {
86
+ const http = makeHttp({ success: true, links: [] });
87
+ await map(http, "https://example.com", { threatProtection });
88
+ expect(http.post).toHaveBeenCalledWith(
89
+ "/v2/map",
90
+ expect.objectContaining({ threatProtection }),
91
+ {},
92
+ );
93
+ });
94
+
95
+ test("extract sends threatProtection at top level", async () => {
96
+ const http = makeHttp({ success: true, id: "job" });
97
+ await startExtract(http, {
98
+ urls: ["https://example.com"],
99
+ prompt: "extract",
100
+ threatProtection,
101
+ });
102
+ expect(http.post).toHaveBeenCalledWith(
103
+ "/v2/extract",
104
+ expect.objectContaining({ threatProtection }),
105
+ );
106
+ });
107
+
108
+ test("agent sends threatProtection at top level", async () => {
109
+ const http = makeHttp({ success: true, id: "job", status: "processing" });
110
+ await startAgent(http, { prompt: "find pricing", threatProtection });
111
+ expect(http.post).toHaveBeenCalledWith(
112
+ "/v2/agent",
113
+ expect.objectContaining({ threatProtection }),
114
+ );
115
+ });
116
+
117
+ test("threatProtection is omitted when not provided", async () => {
118
+ const http = makeHttp({ success: true, data: {} });
119
+ await scrape(http, "https://example.com", { onlyMainContent: true });
120
+ const body = http.post.mock.calls[0][1] as Record<string, unknown>;
121
+ expect(body).not.toHaveProperty("threatProtection");
122
+ });
123
+ });
@@ -1,4 +1,4 @@
1
- import { type AgentResponse, type AgentStatusResponse, type AgentWebhookConfig } from "../types";
1
+ import { type AgentResponse, type AgentStatusResponse, type AgentWebhookConfig, type ThreatProtectionOptions } from "../types";
2
2
  import { HttpClient } from "../utils/httpClient";
3
3
  import { normalizeAxiosError, throwForBadResponse } from "../utils/errorHandler";
4
4
  import { isZodSchema, zodSchemaToJsonSchema } from "../../utils/zodSchemaToJson";
@@ -14,6 +14,7 @@ function prepareAgentPayload(args: {
14
14
  strictConstrainToURLs?: boolean;
15
15
  model?: "spark-1-pro" | "spark-1-mini";
16
16
  webhook?: string | AgentWebhookConfig;
17
+ threatProtection?: ThreatProtectionOptions;
17
18
  }): Record<string, unknown> {
18
19
  const body: Record<string, unknown> = {};
19
20
  if (args.urls) body.urls = args.urls;
@@ -27,6 +28,8 @@ function prepareAgentPayload(args: {
27
28
  if (args.strictConstrainToURLs !== null && args.strictConstrainToURLs !== undefined) body.strictConstrainToURLs = args.strictConstrainToURLs;
28
29
  if (args.model !== null && args.model !== undefined) body.model = args.model;
29
30
  if (args.webhook != null) body.webhook = args.webhook;
31
+ if (args.threatProtection != null)
32
+ body.threatProtection = args.threatProtection;
30
33
  return body;
31
34
  }
32
35
 
@@ -1,4 +1,4 @@
1
- import { type ExtractResponse, type ScrapeOptions, type AgentOptions, type WebhookConfig } from "../types";
1
+ import { type ExtractResponse, type ScrapeOptions, type AgentOptions, type ThreatProtectionOptions, type WebhookConfig } from "../types";
2
2
  import { HttpClient } from "../utils/httpClient";
3
3
  import { ensureValidScrapeOptions } from "../utils/validation";
4
4
  import { normalizeAxiosError, throwForBadResponse } from "../utils/errorHandler";
@@ -19,6 +19,7 @@ function prepareExtractPayload(args: {
19
19
  origin?: string;
20
20
  agent?: AgentOptions;
21
21
  webhook?: string | WebhookConfig | null;
22
+ threatProtection?: ThreatProtectionOptions;
22
23
  }): Record<string, unknown> {
23
24
  const body: Record<string, unknown> = {};
24
25
  if (args.urls) body.urls = args.urls;
@@ -35,6 +36,8 @@ function prepareExtractPayload(args: {
35
36
  if (args.origin) body.origin = args.origin;
36
37
  if (args.agent) body.agent = args.agent;
37
38
  if (args.webhook != null) body.webhook = args.webhook;
39
+ if (args.threatProtection != null)
40
+ body.threatProtection = args.threatProtection;
38
41
  if (args.scrapeOptions) {
39
42
  ensureValidScrapeOptions(args.scrapeOptions);
40
43
  body.scrapeOptions = args.scrapeOptions;
@@ -24,6 +24,8 @@ function prepareMapPayload(
24
24
  payload.integration = options.integration.trim();
25
25
  if (options.origin) payload.origin = options.origin;
26
26
  if (options.location != null) payload.location = options.location;
27
+ if (options.threatProtection != null)
28
+ payload.threatProtection = options.threatProtection;
27
29
  }
28
30
  return payload;
29
31
  }
@@ -41,6 +41,8 @@ function prepareSearchPayload(req: SearchRequest): Record<string, unknown> {
41
41
  payload.integration = req.integration.trim();
42
42
  if (req.origin) payload.origin = req.origin;
43
43
  if (req.enterprise) payload.enterprise = req.enterprise;
44
+ if (req.threatProtection != null)
45
+ payload.threatProtection = req.threatProtection;
44
46
  if (req.scrapeOptions) {
45
47
  ensureValidScrapeOptions(req.scrapeOptions as ScrapeOptions);
46
48
  payload.scrapeOptions = req.scrapeOptions;
package/src/v2/types.ts CHANGED
@@ -208,6 +208,7 @@ export interface ScrapeOptions {
208
208
  storeInCache?: boolean;
209
209
  lockdown?: boolean;
210
210
  redactPII?: boolean | RedactPIIOptions;
211
+ threatProtection?: ThreatProtectionOptions;
211
212
  profile?: {
212
213
  name: string;
213
214
  saveChanges?: boolean;
@@ -241,6 +242,27 @@ export interface RedactPIIOptions {
241
242
  replaceStyle?: "tag" | "mask" | "remove";
242
243
  }
243
244
 
245
+ /**
246
+ * Enterprise: per-request field-level override of your team's threat
247
+ * protection policy. Requires threat protection to be enabled for your team
248
+ * and request overrides to be allowed in the team configuration. Only the
249
+ * fields you provide replace the team policy's values.
250
+ */
251
+ export interface ThreatProtectionOptions {
252
+ /** "off" disables scanning for this request; "normal" applies the policy. */
253
+ mode?: "off" | "normal";
254
+ /** Block verdicts at or above this risk score (integer 0-100). */
255
+ riskScoreThreshold?: number;
256
+ /** Exact domains or globs like "*.example.com" to always block (max 1000). */
257
+ blacklist?: string[];
258
+ /** Exact domains or globs to always allow; wins over everything (max 1000). */
259
+ whitelist?: string[];
260
+ /** Lowercase TLDs without the leading dot, e.g. "zip" (max 1000). */
261
+ blockedTlds?: string[];
262
+ /** Behavior when scanning is unavailable: "closed" blocks, "open" allows. */
263
+ failurePolicy?: "open" | "closed";
264
+ }
265
+
244
266
  export type ParseFileData =
245
267
  | Blob
246
268
  | File
@@ -267,6 +289,7 @@ export type ParseOptions = Omit<
267
289
  | "storeInCache"
268
290
  | "lockdown"
269
291
  | "proxy"
292
+ | "threatProtection"
270
293
  > & {
271
294
  formats?: ParseFormatOption[];
272
295
  proxy?: "basic" | "auto";
@@ -681,6 +704,7 @@ export interface SearchRequest {
681
704
  * your team.
682
705
  */
683
706
  enterprise?: Array<"default" | "anon" | "zdr">;
707
+ threatProtection?: ThreatProtectionOptions;
684
708
  integration?: string;
685
709
  origin?: string;
686
710
  }
@@ -769,6 +793,7 @@ export interface MapOptions {
769
793
  integration?: string;
770
794
  origin?: string;
771
795
  location?: LocationConfig;
796
+ threatProtection?: ThreatProtectionOptions;
772
797
  }
773
798
 
774
799
  export type FeedbackRating = "good" | "partial" | "bad";