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:
parent
835b1511d7
commit
b01772302e
|
|
@ -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'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 = []
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue