feat: Add Custom Api Url Param for Self-hosted FireCrawl endpoint (#3480)

* feat: Add Custom api url for Self-hoseted FireCrawl endpoint

* Update FireCrawlApi.credential.ts

---------

Co-authored-by: Henry Heng <henryheng@flowiseai.com>
This commit is contained in:
ZacharyQin 2024-11-09 08:44:17 +08:00 committed by GitHub
parent 835b1511d7
commit b01772302e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 4 deletions

View File

@ -10,7 +10,7 @@ class FireCrawlApiCredential implements INodeCredential {
constructor() { constructor() {
this.label = 'FireCrawl API' this.label = 'FireCrawl API'
this.name = 'fireCrawlApi' this.name = 'fireCrawlApi'
this.version = 1.0 this.version = 2.0
this.description = this.description =
'You can find the FireCrawl API token on your <a target="_blank" href="https://www.firecrawl.dev/">FireCrawl account</a> page.' 'You can find the FireCrawl API token on your <a target="_blank" href="https://www.firecrawl.dev/">FireCrawl account</a> page.'
this.inputs = [ this.inputs = [
@ -18,6 +18,12 @@ class FireCrawlApiCredential implements INodeCredential {
label: 'FireCrawl API', label: 'FireCrawl API',
name: 'firecrawlApiToken', name: 'firecrawlApiToken',
type: 'password' type: 'password'
},
{
label: 'FireCrawl API URL',
name: 'firecrawlApiUrl',
type: 'string',
default: 'https://api.firecrawl.dev'
} }
] ]
} }

View File

@ -194,19 +194,21 @@ class FirecrawlApp {
interface FirecrawlLoaderParameters { interface FirecrawlLoaderParameters {
url: string url: string
apiKey?: string apiKey?: string
apiUrl?: string
mode?: 'crawl' | 'scrape' mode?: 'crawl' | 'scrape'
params?: Record<string, unknown> params?: Record<string, unknown>
} }
class FireCrawlLoader extends BaseDocumentLoader { class FireCrawlLoader extends BaseDocumentLoader {
private apiKey: string private apiKey: string
private apiUrl: string
private url: string private url: string
private mode: 'crawl' | 'scrape' private mode: 'crawl' | 'scrape'
private params?: Record<string, unknown> private params?: Record<string, unknown>
constructor(loaderParams: FirecrawlLoaderParameters) { constructor(loaderParams: FirecrawlLoaderParameters) {
super() super()
const { apiKey, url, mode = 'crawl', params } = loaderParams const { apiKey, apiUrl, url, mode = 'crawl', params } = loaderParams
if (!apiKey) { if (!apiKey) {
throw new Error('Firecrawl API key not set. You can set it as FIRECRAWL_API_KEY in your .env file, or pass it to Firecrawl.') throw new Error('Firecrawl API key not set. You can set it as FIRECRAWL_API_KEY in your .env file, or pass it to Firecrawl.')
} }
@ -215,10 +217,11 @@ class FireCrawlLoader extends BaseDocumentLoader {
this.url = url this.url = url
this.mode = mode this.mode = mode
this.params = params this.params = params
this.apiUrl = apiUrl || 'https://api.firecrawl.dev'
} }
public async load(): Promise<DocumentInterface[]> { public async load(): Promise<DocumentInterface[]> {
const app = new FirecrawlApp({ apiKey: this.apiKey }) const app = new FirecrawlApp({ apiKey: this.apiKey, apiUrl: this.apiUrl })
let firecrawlDocs: FirecrawlDocument[] let firecrawlDocs: FirecrawlDocument[]
if (this.mode === 'scrape') { if (this.mode === 'scrape') {
@ -319,6 +322,7 @@ class FireCrawl_DocumentLoaders implements INode {
const onlyMainContent = nodeData.inputs?.onlyMainContent as boolean const onlyMainContent = nodeData.inputs?.onlyMainContent as boolean
const credentialData = await getCredentialData(nodeData.credential ?? '', options) const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const firecrawlApiToken = getCredentialParam('firecrawlApiToken', credentialData, nodeData) const firecrawlApiToken = getCredentialParam('firecrawlApiToken', credentialData, nodeData)
const firecrawlApiUrl = getCredentialParam('firecrawlApiUrl', credentialData, nodeData, 'https://api.firecrawl.dev')
const urlPatternsExcludes = nodeData.inputs?.urlPatternsExcludes const urlPatternsExcludes = nodeData.inputs?.urlPatternsExcludes
? (nodeData.inputs.urlPatternsExcludes.split(',') as string[]) ? (nodeData.inputs.urlPatternsExcludes.split(',') as string[])
@ -331,6 +335,7 @@ class FireCrawl_DocumentLoaders implements INode {
url, url,
mode: crawlerType as 'crawl' | 'scrape', mode: crawlerType as 'crawl' | 'scrape',
apiKey: firecrawlApiToken, apiKey: firecrawlApiToken,
apiUrl: firecrawlApiUrl,
params: { params: {
crawlerOptions: { crawlerOptions: {
includes: urlPatternsIncludes, includes: urlPatternsIncludes,
@ -344,7 +349,6 @@ class FireCrawl_DocumentLoaders implements INode {
} }
} }
} }
const loader = new FireCrawlLoader(input) const loader = new FireCrawlLoader(input)
let docs = [] let docs = []