@mendable/firecrawl-js 4.42.3 → 4.42.4

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.42.3",
15
+ version: "4.42.4",
16
16
  description: "JavaScript SDK for the Firecrawl API: web scraping, crawling, web search, and scientific literature search over a research paper index of PubMed, bioRxiv, medRxiv and arXiv abstracts",
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.42.3",
42
+ version: "4.42.4",
43
43
  description: "JavaScript SDK for the Firecrawl API: web scraping, crawling, web search, and scientific literature search over a research paper index of PubMed, bioRxiv, medRxiv and arXiv abstracts",
44
44
  main: "dist/index.js",
45
45
  types: "dist/index.d.ts",
@@ -2875,7 +2875,7 @@ var FirecrawlApp = class {
2875
2875
  "Content-Type": "application/json",
2876
2876
  Authorization: `Bearer ${this.apiKey}`
2877
2877
  };
2878
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2878
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2879
2879
  if (jsonData?.extract?.schema) {
2880
2880
  jsonData = {
2881
2881
  ...jsonData,
@@ -2939,7 +2939,7 @@ var FirecrawlApp = class {
2939
2939
  lang: params?.lang ?? "en",
2940
2940
  country: params?.country ?? "us",
2941
2941
  location: params?.location,
2942
- origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}`,
2942
+ origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}`,
2943
2943
  timeout: params?.timeout ?? 6e4,
2944
2944
  scrapeOptions: params?.scrapeOptions ?? { formats: [] }
2945
2945
  };
@@ -2994,7 +2994,7 @@ var FirecrawlApp = class {
2994
2994
  */
2995
2995
  async crawlUrl(url, params, pollInterval = 2, idempotencyKey) {
2996
2996
  const headers = this.prepareHeaders(idempotencyKey);
2997
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2997
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2998
2998
  try {
2999
2999
  const response = await this.postRequest(
3000
3000
  this.apiUrl + `/v1/crawl`,
@@ -3018,7 +3018,7 @@ var FirecrawlApp = class {
3018
3018
  }
3019
3019
  async asyncCrawlUrl(url, params, idempotencyKey) {
3020
3020
  const headers = this.prepareHeaders(idempotencyKey);
3021
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3021
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3022
3022
  try {
3023
3023
  const response = await this.postRequest(
3024
3024
  this.apiUrl + `/v1/crawl`,
@@ -3177,7 +3177,7 @@ var FirecrawlApp = class {
3177
3177
  */
3178
3178
  async mapUrl(url, params) {
3179
3179
  const headers = this.prepareHeaders();
3180
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3180
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3181
3181
  try {
3182
3182
  const response = await this.postRequest(
3183
3183
  this.apiUrl + `/v1/map`,
@@ -3206,7 +3206,7 @@ var FirecrawlApp = class {
3206
3206
  */
3207
3207
  async batchScrapeUrls(urls, params, pollInterval = 2, idempotencyKey, webhook, ignoreInvalidURLs, maxConcurrency) {
3208
3208
  const headers = this.prepareHeaders(idempotencyKey);
3209
- let jsonData = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3209
+ let jsonData = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3210
3210
  if (jsonData?.extract?.schema) {
3211
3211
  jsonData = {
3212
3212
  ...jsonData,
@@ -3248,7 +3248,7 @@ var FirecrawlApp = class {
3248
3248
  }
3249
3249
  async asyncBatchScrapeUrls(urls, params, idempotencyKey, webhook, ignoreInvalidURLs) {
3250
3250
  const headers = this.prepareHeaders(idempotencyKey);
3251
- let jsonData = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3251
+ let jsonData = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3252
3252
  try {
3253
3253
  const response = await this.postRequest(
3254
3254
  this.apiUrl + `/v1/batch/scrape`,
@@ -3392,7 +3392,7 @@ var FirecrawlApp = class {
3392
3392
  try {
3393
3393
  const response = await this.postRequest(
3394
3394
  this.apiUrl + `/v1/extract`,
3395
- { ...jsonData, schema: jsonSchema, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3395
+ { ...jsonData, schema: jsonSchema, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3396
3396
  headers
3397
3397
  );
3398
3398
  if (response.status === 200) {
@@ -3445,7 +3445,7 @@ var FirecrawlApp = class {
3445
3445
  try {
3446
3446
  const response = await this.postRequest(
3447
3447
  this.apiUrl + `/v1/extract`,
3448
- { ...jsonData, schema: jsonSchema, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3448
+ { ...jsonData, schema: jsonSchema, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3449
3449
  headers
3450
3450
  );
3451
3451
  if (response.status === 200) {
@@ -3727,7 +3727,7 @@ var FirecrawlApp = class {
3727
3727
  */
3728
3728
  async asyncDeepResearch(query, params) {
3729
3729
  const headers = this.prepareHeaders();
3730
- let jsonData = { query, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3730
+ let jsonData = { query, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3731
3731
  if (jsonData?.jsonOptions?.schema) {
3732
3732
  jsonData = {
3733
3733
  ...jsonData,
@@ -3846,7 +3846,7 @@ var FirecrawlApp = class {
3846
3846
  async __asyncDeepResearch(topic, params) {
3847
3847
  const headers = this.prepareHeaders();
3848
3848
  try {
3849
- let jsonData = { topic, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3849
+ let jsonData = { topic, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3850
3850
  const response = await this.postRequest(
3851
3851
  `${this.apiUrl}/v1/deep-research`,
3852
3852
  jsonData,
@@ -3946,7 +3946,7 @@ var FirecrawlApp = class {
3946
3946
  */
3947
3947
  async asyncGenerateLLMsText(url, params) {
3948
3948
  const headers = this.prepareHeaders();
3949
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3949
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3950
3950
  try {
3951
3951
  const response = await this.postRequest(
3952
3952
  `${this.apiUrl}/v1/llmstxt`,
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  require_package
3
- } from "./chunk-AMV6GR2H.js";
3
+ } from "./chunk-TALYWLKJ.js";
4
4
 
5
5
  // src/v2/utils/httpClient.ts
6
6
  import axios from "axios";
@@ -2706,7 +2706,7 @@ var FirecrawlApp = class {
2706
2706
  if (typeof process !== "undefined" && process.env && process.env.npm_package_version) {
2707
2707
  return process.env.npm_package_version;
2708
2708
  }
2709
- const packageJson = await import("./package-RQDQRVLO.js");
2709
+ const packageJson = await import("./package-NTEZDZT4.js");
2710
2710
  return packageJson.default.version;
2711
2711
  } catch (error) {
2712
2712
  const isTest = typeof process !== "undefined" && (process.env.JEST_WORKER_ID != null || false);
@@ -2743,7 +2743,7 @@ var FirecrawlApp = class {
2743
2743
  "Content-Type": "application/json",
2744
2744
  Authorization: `Bearer ${this.apiKey}`
2745
2745
  };
2746
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2746
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2747
2747
  if (jsonData?.extract?.schema) {
2748
2748
  jsonData = {
2749
2749
  ...jsonData,
@@ -2807,7 +2807,7 @@ var FirecrawlApp = class {
2807
2807
  lang: params?.lang ?? "en",
2808
2808
  country: params?.country ?? "us",
2809
2809
  location: params?.location,
2810
- origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}`,
2810
+ origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}`,
2811
2811
  timeout: params?.timeout ?? 6e4,
2812
2812
  scrapeOptions: params?.scrapeOptions ?? { formats: [] }
2813
2813
  };
@@ -2862,7 +2862,7 @@ var FirecrawlApp = class {
2862
2862
  */
2863
2863
  async crawlUrl(url, params, pollInterval = 2, idempotencyKey) {
2864
2864
  const headers = this.prepareHeaders(idempotencyKey);
2865
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2865
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2866
2866
  try {
2867
2867
  const response = await this.postRequest(
2868
2868
  this.apiUrl + `/v1/crawl`,
@@ -2886,7 +2886,7 @@ var FirecrawlApp = class {
2886
2886
  }
2887
2887
  async asyncCrawlUrl(url, params, idempotencyKey) {
2888
2888
  const headers = this.prepareHeaders(idempotencyKey);
2889
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2889
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
2890
2890
  try {
2891
2891
  const response = await this.postRequest(
2892
2892
  this.apiUrl + `/v1/crawl`,
@@ -3045,7 +3045,7 @@ var FirecrawlApp = class {
3045
3045
  */
3046
3046
  async mapUrl(url, params) {
3047
3047
  const headers = this.prepareHeaders();
3048
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3048
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3049
3049
  try {
3050
3050
  const response = await this.postRequest(
3051
3051
  this.apiUrl + `/v1/map`,
@@ -3074,7 +3074,7 @@ var FirecrawlApp = class {
3074
3074
  */
3075
3075
  async batchScrapeUrls(urls, params, pollInterval = 2, idempotencyKey, webhook, ignoreInvalidURLs, maxConcurrency) {
3076
3076
  const headers = this.prepareHeaders(idempotencyKey);
3077
- let jsonData = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3077
+ let jsonData = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3078
3078
  if (jsonData?.extract?.schema) {
3079
3079
  jsonData = {
3080
3080
  ...jsonData,
@@ -3116,7 +3116,7 @@ var FirecrawlApp = class {
3116
3116
  }
3117
3117
  async asyncBatchScrapeUrls(urls, params, idempotencyKey, webhook, ignoreInvalidURLs) {
3118
3118
  const headers = this.prepareHeaders(idempotencyKey);
3119
- let jsonData = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3119
+ let jsonData = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3120
3120
  try {
3121
3121
  const response = await this.postRequest(
3122
3122
  this.apiUrl + `/v1/batch/scrape`,
@@ -3260,7 +3260,7 @@ var FirecrawlApp = class {
3260
3260
  try {
3261
3261
  const response = await this.postRequest(
3262
3262
  this.apiUrl + `/v1/extract`,
3263
- { ...jsonData, schema: jsonSchema, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3263
+ { ...jsonData, schema: jsonSchema, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3264
3264
  headers
3265
3265
  );
3266
3266
  if (response.status === 200) {
@@ -3313,7 +3313,7 @@ var FirecrawlApp = class {
3313
3313
  try {
3314
3314
  const response = await this.postRequest(
3315
3315
  this.apiUrl + `/v1/extract`,
3316
- { ...jsonData, schema: jsonSchema, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3316
+ { ...jsonData, schema: jsonSchema, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` },
3317
3317
  headers
3318
3318
  );
3319
3319
  if (response.status === 200) {
@@ -3595,7 +3595,7 @@ var FirecrawlApp = class {
3595
3595
  */
3596
3596
  async asyncDeepResearch(query, params) {
3597
3597
  const headers = this.prepareHeaders();
3598
- let jsonData = { query, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3598
+ let jsonData = { query, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3599
3599
  if (jsonData?.jsonOptions?.schema) {
3600
3600
  jsonData = {
3601
3601
  ...jsonData,
@@ -3714,7 +3714,7 @@ var FirecrawlApp = class {
3714
3714
  async __asyncDeepResearch(topic, params) {
3715
3715
  const headers = this.prepareHeaders();
3716
3716
  try {
3717
- let jsonData = { topic, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3717
+ let jsonData = { topic, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3718
3718
  const response = await this.postRequest(
3719
3719
  `${this.apiUrl}/v1/deep-research`,
3720
3720
  jsonData,
@@ -3814,7 +3814,7 @@ var FirecrawlApp = class {
3814
3814
  */
3815
3815
  async asyncGenerateLLMsText(url, params) {
3816
3816
  const headers = this.prepareHeaders();
3817
- let jsonData = { url, ...params, origin: typeof params.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3817
+ let jsonData = { url, ...params, origin: typeof params?.origin === "string" && params.origin.includes("mcp") ? params.origin : `js-sdk@${this.version}` };
3818
3818
  try {
3819
3819
  const response = await this.postRequest(
3820
3820
  `${this.apiUrl}/v1/llmstxt`,
@@ -1,4 +1,4 @@
1
1
  import {
2
2
  require_package
3
- } from "./chunk-AMV6GR2H.js";
3
+ } from "./chunk-TALYWLKJ.js";
4
4
  export default require_package();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mendable/firecrawl-js",
3
- "version": "4.42.3",
3
+ "version": "4.42.4",
4
4
  "description": "JavaScript SDK for the Firecrawl API: web scraping, crawling, web search, and scientific literature search over a research paper index of PubMed, bioRxiv, medRxiv and arXiv abstracts",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,70 @@
1
+ import { describe, test, expect, jest, beforeEach, afterEach } from "@jest/globals";
2
+ import axios from "axios";
3
+ import FirecrawlApp from "../../../v1";
4
+
5
+ const API_URL = "https://api.firecrawl.dev";
6
+
7
+ class FakeWebSocket {
8
+ onopen: unknown = null;
9
+ onmessage: unknown = null;
10
+ onerror: unknown = null;
11
+ onclose: unknown = null;
12
+ close() {}
13
+ }
14
+
15
+ describe("v1 methods work without params", () => {
16
+ let app: FirecrawlApp;
17
+ let posts: Array<{ url: string; data: any }>;
18
+ const originalWebSocket = (globalThis as any).WebSocket;
19
+
20
+ beforeEach(() => {
21
+ app = new FirecrawlApp({ apiKey: "fc-test", apiUrl: API_URL });
22
+ posts = [];
23
+ jest.spyOn(axios, "post").mockImplementation(async (url: string, data?: any) => {
24
+ posts.push({ url, data });
25
+ return { status: 200, data: { success: true, id: "job-1", data: [], links: [] } };
26
+ });
27
+ jest.spyOn(axios, "get").mockImplementation(async () => ({
28
+ status: 200,
29
+ data: { success: true, status: "completed", data: [{ markdown: "ok" }] },
30
+ }));
31
+ (globalThis as any).WebSocket = FakeWebSocket;
32
+ });
33
+
34
+ afterEach(() => {
35
+ jest.restoreAllMocks();
36
+ (globalThis as any).WebSocket = originalWebSocket;
37
+ });
38
+
39
+ const cases: Array<[string, string, (app: any) => Promise<unknown>]> = [
40
+ ["scrapeUrl", "/v1/scrape", app => app.scrapeUrl("https://example.com")],
41
+ ["search", "/v1/search", app => app.search("firecrawl")],
42
+ ["crawlUrl", "/v1/crawl", app => app.crawlUrl("https://example.com")],
43
+ ["asyncCrawlUrl", "/v1/crawl", app => app.asyncCrawlUrl("https://example.com")],
44
+ ["crawlUrlAndWatch", "/v1/crawl", app => app.crawlUrlAndWatch("https://example.com")],
45
+ ["mapUrl", "/v1/map", app => app.mapUrl("https://example.com")],
46
+ ["batchScrapeUrls", "/v1/batch/scrape", app => app.batchScrapeUrls(["https://example.com"])],
47
+ ["asyncBatchScrapeUrls", "/v1/batch/scrape", app => app.asyncBatchScrapeUrls(["https://example.com"])],
48
+ ["batchScrapeUrlsAndWatch", "/v1/batch/scrape", app => app.batchScrapeUrlsAndWatch(["https://example.com"])],
49
+ ["extract", "/v1/extract", app => app.extract(["https://example.com"])],
50
+ ["asyncExtract", "/v1/extract", app => app.asyncExtract(["https://example.com"])],
51
+ ["deepResearch", "/v1/deep-research", app => app.deepResearch("firecrawl")],
52
+ ["asyncDeepResearch", "/v1/deep-research", app => app.asyncDeepResearch("firecrawl")],
53
+ ["__deepResearch", "/v1/deep-research", app => app.__deepResearch("firecrawl")],
54
+ ["__asyncDeepResearch", "/v1/deep-research", app => app.__asyncDeepResearch("firecrawl")],
55
+ ["generateLLMsText", "/v1/llmstxt", app => app.generateLLMsText("https://example.com")],
56
+ ["asyncGenerateLLMsText", "/v1/llmstxt", app => app.asyncGenerateLLMsText("https://example.com")],
57
+ ];
58
+
59
+ test.each(cases)("%s sends the default origin", async (_method, path, call) => {
60
+ await expect(call(app)).resolves.toBeDefined();
61
+ expect(posts).toHaveLength(1);
62
+ expect(posts[0].url).toBe(`${API_URL}${path}`);
63
+ expect(posts[0].data.origin).toBe(`js-sdk@${app.version}`);
64
+ });
65
+
66
+ test("an mcp origin passed in params is still forwarded", async () => {
67
+ await app.batchScrapeUrls(["https://example.com"], { origin: "mcp-server" } as any);
68
+ expect(posts[0].data.origin).toBe("mcp-server");
69
+ });
70
+ });
package/src/v1/index.ts CHANGED
@@ -726,7 +726,7 @@ export default class FirecrawlApp {
726
726
  "Content-Type": "application/json",
727
727
  Authorization: `Bearer ${this.apiKey}`,
728
728
  } as AxiosRequestHeaders;
729
- let jsonData: any = { url, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
729
+ let jsonData: any = { url, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
730
730
  if (jsonData?.extract?.schema) {
731
731
  jsonData = {
732
732
  ...jsonData,
@@ -793,7 +793,7 @@ export default class FirecrawlApp {
793
793
  lang: params?.lang ?? "en",
794
794
  country: params?.country ?? "us",
795
795
  location: params?.location,
796
- origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}`,
796
+ origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}`,
797
797
  timeout: params?.timeout ?? 60000,
798
798
  scrapeOptions: params?.scrapeOptions ?? { formats: [] },
799
799
  };
@@ -857,7 +857,7 @@ export default class FirecrawlApp {
857
857
  idempotencyKey?: string
858
858
  ): Promise<CrawlStatusResponse | ErrorResponse> {
859
859
  const headers = this.prepareHeaders(idempotencyKey);
860
- let jsonData: any = { url, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
860
+ let jsonData: any = { url, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
861
861
  try {
862
862
  const response: AxiosResponse = await this.postRequest(
863
863
  this.apiUrl + `/v1/crawl`,
@@ -886,7 +886,7 @@ export default class FirecrawlApp {
886
886
  idempotencyKey?: string
887
887
  ): Promise<CrawlResponse | ErrorResponse> {
888
888
  const headers = this.prepareHeaders(idempotencyKey);
889
- let jsonData: any = { url, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
889
+ let jsonData: any = { url, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
890
890
  try {
891
891
  const response: AxiosResponse = await this.postRequest(
892
892
  this.apiUrl + `/v1/crawl`,
@@ -1062,7 +1062,7 @@ export default class FirecrawlApp {
1062
1062
  */
1063
1063
  async mapUrl(url: string, params?: MapParams): Promise<MapResponse | ErrorResponse> {
1064
1064
  const headers = this.prepareHeaders();
1065
- let jsonData: any = { url, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1065
+ let jsonData: any = { url, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1066
1066
 
1067
1067
  try {
1068
1068
  const response: AxiosResponse = await this.postRequest(
@@ -1101,7 +1101,7 @@ export default class FirecrawlApp {
1101
1101
  maxConcurrency?: number,
1102
1102
  ): Promise<BatchScrapeStatusResponse | ErrorResponse> {
1103
1103
  const headers = this.prepareHeaders(idempotencyKey);
1104
- let jsonData: any = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1104
+ let jsonData: any = { urls, webhook, ignoreInvalidURLs, maxConcurrency, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1105
1105
  if (jsonData?.extract?.schema) {
1106
1106
  jsonData = {
1107
1107
  ...jsonData,
@@ -1150,7 +1150,7 @@ export default class FirecrawlApp {
1150
1150
  ignoreInvalidURLs?: boolean,
1151
1151
  ): Promise<BatchScrapeResponse | ErrorResponse> {
1152
1152
  const headers = this.prepareHeaders(idempotencyKey);
1153
- let jsonData: any = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1153
+ let jsonData: any = { urls, webhook, ignoreInvalidURLs, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1154
1154
  try {
1155
1155
  const response: AxiosResponse = await this.postRequest(
1156
1156
  this.apiUrl + `/v1/batch/scrape`,
@@ -1314,7 +1314,7 @@ export default class FirecrawlApp {
1314
1314
  try {
1315
1315
  const response: AxiosResponse = await this.postRequest(
1316
1316
  this.apiUrl + `/v1/extract`,
1317
- { ...jsonData, schema: jsonSchema, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` },
1317
+ { ...jsonData, schema: jsonSchema, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` },
1318
1318
  headers
1319
1319
  );
1320
1320
 
@@ -1374,7 +1374,7 @@ export default class FirecrawlApp {
1374
1374
  try {
1375
1375
  const response: AxiosResponse = await this.postRequest(
1376
1376
  this.apiUrl + `/v1/extract`,
1377
- { ...jsonData, schema: jsonSchema, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` },
1377
+ { ...jsonData, schema: jsonSchema, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` },
1378
1378
  headers
1379
1379
  );
1380
1380
 
@@ -1742,7 +1742,7 @@ export default class FirecrawlApp {
1742
1742
  */
1743
1743
  async asyncDeepResearch(query: string, params: DeepResearchParams<zt.ZodSchema>): Promise<DeepResearchResponse | ErrorResponse> {
1744
1744
  const headers = this.prepareHeaders();
1745
- let jsonData: any = { query, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1745
+ let jsonData: any = { query, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1746
1746
 
1747
1747
  if (jsonData?.jsonOptions?.schema) {
1748
1748
  jsonData = {
@@ -1890,7 +1890,7 @@ export default class FirecrawlApp {
1890
1890
  async __asyncDeepResearch(topic: string, params: DeepResearchParams): Promise<DeepResearchResponse | ErrorResponse> {
1891
1891
  const headers = this.prepareHeaders();
1892
1892
  try {
1893
- let jsonData: any = { topic, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1893
+ let jsonData: any = { topic, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
1894
1894
  const response: AxiosResponse = await this.postRequest(
1895
1895
  `${this.apiUrl}/v1/deep-research`,
1896
1896
  jsonData,
@@ -2005,7 +2005,7 @@ export default class FirecrawlApp {
2005
2005
  */
2006
2006
  async asyncGenerateLLMsText(url: string, params?: GenerateLLMsTextParams): Promise<GenerateLLMsTextResponse | ErrorResponse> {
2007
2007
  const headers = this.prepareHeaders();
2008
- let jsonData: any = { url, ...params, origin: typeof (params as any).origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
2008
+ let jsonData: any = { url, ...params, origin: typeof (params as any)?.origin === "string" && (params as any).origin.includes("mcp") ? (params as any).origin : `js-sdk@${this.version}` };
2009
2009
  try {
2010
2010
  const response: AxiosResponse = await this.postRequest(
2011
2011
  `${this.apiUrl}/v1/llmstxt`,