Merge pull request #1034 from mendableai/sdk/fixed-none-undefined-on-response

[SDK] fixed none and undefined on response
This commit is contained in:
Nicolas 2025-01-04 16:31:41 -03:00 committed by GitHub
commit ceb2104960
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 80 additions and 23 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@mendable/firecrawl-js", "name": "@mendable/firecrawl-js",
"version": "1.11.2", "version": "1.11.3",
"description": "JavaScript SDK for Firecrawl API", "description": "JavaScript SDK for Firecrawl API",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@ -565,23 +565,39 @@ export default class FirecrawlApp {
if ("data" in statusData) { if ("data" in statusData) {
let data = statusData.data; let data = statusData.data;
while (typeof statusData === 'object' && 'next' in statusData) { while (typeof statusData === 'object' && 'next' in statusData) {
if (data.length === 0) {
break
}
statusData = (await this.getRequest(statusData.next, headers)).data; statusData = (await this.getRequest(statusData.next, headers)).data;
data = data.concat(statusData.data); data = data.concat(statusData.data);
} }
allData = data; allData = data;
} }
} }
return ({
let resp: CrawlStatusResponse | ErrorResponse = {
success: response.data.success, success: response.data.success,
status: response.data.status, status: response.data.status,
total: response.data.total, total: response.data.total,
completed: response.data.completed, completed: response.data.completed,
creditsUsed: response.data.creditsUsed, creditsUsed: response.data.creditsUsed,
expiresAt: new Date(response.data.expiresAt), expiresAt: new Date(response.data.expiresAt),
next: response.data.next, data: allData
data: allData, }
error: response.data.error,
}) if (!response.data.success && response.data.error) {
resp = {
...resp,
success: false,
error: response.data.error
} as ErrorResponse;
}
if (response.data.next) {
(resp as CrawlStatusResponse).next = response.data.next;
}
return resp;
} else { } else {
this.handleError(response, "check crawl status"); this.handleError(response, "check crawl status");
} }
@ -799,23 +815,39 @@ export default class FirecrawlApp {
if ("data" in statusData) { if ("data" in statusData) {
let data = statusData.data; let data = statusData.data;
while (typeof statusData === 'object' && 'next' in statusData) { while (typeof statusData === 'object' && 'next' in statusData) {
if (data.length === 0) {
break
}
statusData = (await this.getRequest(statusData.next, headers)).data; statusData = (await this.getRequest(statusData.next, headers)).data;
data = data.concat(statusData.data); data = data.concat(statusData.data);
} }
allData = data; allData = data;
} }
} }
return ({
let resp: BatchScrapeStatusResponse | ErrorResponse = {
success: response.data.success, success: response.data.success,
status: response.data.status, status: response.data.status,
total: response.data.total, total: response.data.total,
completed: response.data.completed, completed: response.data.completed,
creditsUsed: response.data.creditsUsed, creditsUsed: response.data.creditsUsed,
expiresAt: new Date(response.data.expiresAt), expiresAt: new Date(response.data.expiresAt),
next: response.data.next, data: allData
data: allData, }
error: response.data.error,
}) if (!response.data.success && response.data.error) {
resp = {
...resp,
success: false,
error: response.data.error
} as ErrorResponse;
}
if (response.data.next) {
(resp as BatchScrapeStatusResponse).next = response.data.next;
}
return resp;
} else { } else {
this.handleError(response, "check batch scrape status"); this.handleError(response, "check batch scrape status");
} }
@ -971,6 +1003,9 @@ export default class FirecrawlApp {
if ("data" in statusData) { if ("data" in statusData) {
let data = statusData.data; let data = statusData.data;
while (typeof statusData === 'object' && 'next' in statusData) { while (typeof statusData === 'object' && 'next' in statusData) {
if (data.length === 0) {
break
}
statusResponse = await this.getRequest(statusData.next, headers); statusResponse = await this.getRequest(statusData.next, headers);
statusData = statusResponse.data; statusData = statusResponse.data;
data = data.concat(statusData.data); data = data.concat(statusData.data);

View File

@ -13,7 +13,7 @@ import os
from .firecrawl import FirecrawlApp # noqa from .firecrawl import FirecrawlApp # noqa
__version__ = "1.8.0" __version__ = "1.8.1"
# Define the logger for the Firecrawl project # Define the logger for the Firecrawl project
logger: logging.Logger = logging.getLogger("firecrawl") logger: logging.Logger = logging.getLogger("firecrawl")

View File

@ -250,6 +250,8 @@ class FirecrawlApp:
if 'data' in status_data: if 'data' in status_data:
data = status_data['data'] data = status_data['data']
while 'next' in status_data: while 'next' in status_data:
if len(status_data['data']) == 0:
break
next_url = status_data.get('next') next_url = status_data.get('next')
if not next_url: if not next_url:
logger.warning("Expected 'next' URL is missing.") logger.warning("Expected 'next' URL is missing.")
@ -266,17 +268,25 @@ class FirecrawlApp:
logger.error(f"Error during pagination request: {e}") logger.error(f"Error during pagination request: {e}")
break break
status_data['data'] = data status_data['data'] = data
return { response = {
'success': True,
'status': status_data.get('status'), 'status': status_data.get('status'),
'total': status_data.get('total'), 'total': status_data.get('total'),
'completed': status_data.get('completed'), 'completed': status_data.get('completed'),
'creditsUsed': status_data.get('creditsUsed'), 'creditsUsed': status_data.get('creditsUsed'),
'expiresAt': status_data.get('expiresAt'), 'expiresAt': status_data.get('expiresAt'),
'data': status_data.get('data'), 'data': status_data.get('data')
'error': status_data.get('error'), }
'next': status_data.get('next', None)
if 'error' in status_data:
response['error'] = status_data['error']
if 'next' in status_data:
response['next'] = status_data['next']
return {
'success': False if 'error' in status_data else True,
**response
} }
else: else:
self._handle_error(response, 'check crawl status') self._handle_error(response, 'check crawl status')
@ -459,6 +469,8 @@ class FirecrawlApp:
if 'data' in status_data: if 'data' in status_data:
data = status_data['data'] data = status_data['data']
while 'next' in status_data: while 'next' in status_data:
if len(status_data['data']) == 0:
break
next_url = status_data.get('next') next_url = status_data.get('next')
if not next_url: if not next_url:
logger.warning("Expected 'next' URL is missing.") logger.warning("Expected 'next' URL is missing.")
@ -476,16 +488,24 @@ class FirecrawlApp:
break break
status_data['data'] = data status_data['data'] = data
return { response = {
'success': True,
'status': status_data.get('status'), 'status': status_data.get('status'),
'total': status_data.get('total'), 'total': status_data.get('total'),
'completed': status_data.get('completed'), 'completed': status_data.get('completed'),
'creditsUsed': status_data.get('creditsUsed'), 'creditsUsed': status_data.get('creditsUsed'),
'expiresAt': status_data.get('expiresAt'), 'expiresAt': status_data.get('expiresAt'),
'data': status_data.get('data'), 'data': status_data.get('data')
'error': status_data.get('error'), }
'next': status_data.get('next', None)
if 'error' in status_data:
response['error'] = status_data['error']
if 'next' in status_data:
response['next'] = status_data['next']
return {
'success': False if 'error' in status_data else True,
**response
} }
else: else:
self._handle_error(response, 'check batch scrape status') self._handle_error(response, 'check batch scrape status')
@ -669,6 +689,8 @@ class FirecrawlApp:
if 'data' in status_data: if 'data' in status_data:
data = status_data['data'] data = status_data['data']
while 'next' in status_data: while 'next' in status_data:
if len(status_data['data']) == 0:
break
status_response = self._get_request(status_data['next'], headers) status_response = self._get_request(status_data['next'], headers)
status_data = status_response.json() status_data = status_response.json()
data.extend(status_data.get('data', [])) data.extend(status_data.get('data', []))