firecrawl_process.ts•2.16 kB
import {
ErrorType,
ProcessingProvider,
ProcessingResult,
ProviderError,
} from '../../common/types.js';
import { FirecrawlActionsProvider } from '../processing/firecrawl_actions/index.js';
import { FirecrawlCrawlProvider } from '../processing/firecrawl_crawl/index.js';
import { FirecrawlExtractProvider } from '../processing/firecrawl_extract/index.js';
import { FirecrawlMapProvider } from '../processing/firecrawl_map/index.js';
import { FirecrawlScrapeProvider } from '../processing/firecrawl_scrape/index.js';
export type FirecrawlMode =
| 'scrape'
| 'crawl'
| 'map'
| 'extract'
| 'actions';
export interface UnifiedFirecrawlProcessingProvider {
name: string;
description: string;
process_content(
url: string | string[],
extract_depth?: 'basic' | 'advanced',
mode?: FirecrawlMode,
): Promise<ProcessingResult>;
}
export class UnifiedFirecrawlProvider
implements UnifiedFirecrawlProcessingProvider
{
name = 'firecrawl_process';
description =
'Extract web content with Firecrawl. Modes: scrape (single page), crawl (deep crawl), map (URL discovery), extract (structured data), actions (interactive).';
private providers: Map<FirecrawlMode, ProcessingProvider> =
new Map();
constructor() {
this.providers.set('scrape', new FirecrawlScrapeProvider());
this.providers.set('crawl', new FirecrawlCrawlProvider());
this.providers.set('map', new FirecrawlMapProvider());
this.providers.set('extract', new FirecrawlExtractProvider());
this.providers.set('actions', new FirecrawlActionsProvider());
}
async process_content(
url: string | string[],
extract_depth: 'basic' | 'advanced' = 'basic',
mode: FirecrawlMode = 'scrape',
): Promise<ProcessingResult> {
if (!mode) {
throw new ProviderError(
ErrorType.INVALID_INPUT,
'Mode parameter is required',
this.name,
);
}
const selectedProvider = this.providers.get(mode);
if (!selectedProvider) {
throw new ProviderError(
ErrorType.INVALID_INPUT,
`Invalid mode: ${mode}. Valid options: ${Array.from(this.providers.keys()).join(', ')}`,
this.name,
);
}
return selectedProvider.process_content(url, extract_depth);
}
}