import type { EventEmitter } from "node:events"; import type { AsyncTaskManager } from "../services/async-task-manager"; import type { ChunkService } from "../services/chunk"; import type { FileService } from "../services/file"; import type { Result } from "../utils/result"; import type { AcceleratorOptions, AsyncChunkTask, AsyncConversionTask, ChunkDocumentResponse, ChunkFileUploadParams, ConversionFileResult, ConversionOptions, ConversionTarget, ConvertDocumentResponse, ConvertDocumentsRequest, FileSource, FileUploadParams, HealthCheckResponse, HierarchicalChunkerOptionsDocumentsRequest, HttpSource, HybridChunkerOptionsDocumentsRequest, LayoutOptions, OcrEngine, OcrOptions, PdfBackend, PresignedUrlConvertDocumentResponse, ProcessingPipeline, S3Source, TableMode, TargetConversionResult, TaskStatusResponse } from "./api"; import type { ImageInput, WebClientEvents, WebOCRResult, WebProcessOptions } from "./web"; export interface ProgressUpdate { stage: string; percentage?: number; message?: string; taskId?: string; position?: number; status?: string; timestamp: number; source?: "websocket" | "http"; memoryUsage?: NodeJS.MemoryUsage; uploadedBytes?: number; totalBytes?: number; bytesPerSecond?: number; } export interface ProcessingError { message: string; code?: string; details?: unknown; } export interface S3Config { bucket: string; key?: string; region?: string; endpoint?: string; access_key_id?: string; secret_access_key?: string; session_token?: string; verify_ssl?: boolean; } export type SafeConversionResult = Result; export type SafeFileConversionResult = Result; export interface ProgressConfig { method?: "websocket" | "http" | "hybrid"; websocketTimeout?: number; httpPollInterval?: number; onProgress?: (progress: ProgressUpdate) => void; onComplete?: (result: unknown) => Promise | void; onError?: (error: Error) => Promise | void; onWebhook?: (webhookData: Record) => Promise | void; } export interface DoclingSharedConfig { defaultOptions?: ConversionOptions; retries?: number; timeout?: number; waitSeconds?: number; pollingRetries?: number; ocr_engine?: OcrEngine; ocr_options?: OcrOptions; pdf_backend?: PdfBackend; table_mode?: TableMode; pipeline?: ProcessingPipeline; accelerator_options?: AcceleratorOptions; layout_options?: LayoutOptions; } export type DoclingConfig = ({ api: { baseUrl: string; apiKey?: string; timeout?: number; retries?: number; headers?: Record; }; cli?: never; web?: never; progress?: ProgressConfig; } & DoclingSharedConfig) | ({ cli: { outputDir?: string; verbose?: boolean; progressBar?: boolean; tempDir?: string; concurrency?: number; }; api?: never; web?: never; progress?: ProgressConfig; } & DoclingSharedConfig) | { web: { device?: "webgpu" | "wasm" | "auto"; modelId?: string; maxNewTokens?: number; wasmPaths?: Record; workerUrl?: string; }; api?: never; cli?: never; }; export interface DoclingAPIConfig extends DoclingSharedConfig { type: "api"; baseUrl: string; apiKey?: string; timeout?: number; retries?: number; headers?: Record; progress?: ProgressConfig; } export interface DoclingCLIConfig extends DoclingSharedConfig { type: "cli"; outputDir?: string; verbose?: boolean; progressBar?: boolean; tempDir?: string; concurrency?: number; progress?: ProgressConfig; pythonPath?: string; doclingPath?: string; } export interface DoclingClientBase { readonly type: "api" | "cli" | "web"; convert(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; extractText(file: Uint8Array | string, filename: string, options?: Omit): Promise; toHtml(file: Uint8Array | string, filename: string, options?: Omit): Promise; toMarkdown(file: Uint8Array | string, filename: string, options?: Omit): Promise; convertDocument(file: Uint8Array | string, filename: string, options: ConversionOptions): Promise; process(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; convertToFile(file: Uint8Array | string, filename: string, options: ConversionOptions): Promise; safeConvert(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; safeConvertToFile(file: Uint8Array | string, filename: string, options: ConversionOptions): Promise; } export interface DoclingAPI extends DoclingClientBase { readonly files: FileService; readonly chunks: ChunkService; convertSync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; convertAsync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; convertStream(inputStream: NodeJS.ReadableStream, filename: string, options?: ConversionOptions): Promise; convertStreamToFile(inputStream: NodeJS.ReadableStream, filename: string, options: ConversionOptions): Promise; convert(file: Uint8Array | string, filename: string, options?: ConversionOptions, progress?: ProgressConfig): Promise; toHtml(file: Uint8Array | string, filename: string, options?: Omit, progress?: ProgressConfig): Promise; toMarkdown(file: Uint8Array | string, filename: string, options?: Omit, progress?: ProgressConfig): Promise; convertDocument(file: Uint8Array | string, filename: string, options: ConversionOptions, progress?: ProgressConfig): Promise; process(file: Uint8Array | string, filename: string, options?: ConversionOptions, progress?: ProgressConfig): Promise; convertToFile(file: Uint8Array | string, filename: string, options: ConversionOptions, progress?: ProgressConfig): Promise; getTaskManager(): AsyncTaskManager; health(): Promise; convertSource(request: ConvertDocumentsRequest): Promise; convertFile(params: FileUploadParams): Promise; convertSourceAsync(request: ConvertDocumentsRequest): Promise; convertFileAsync(params: FileUploadParams): Promise; convertFileAsyncToZip(params: FileUploadParams): Promise; pollTaskStatus(taskId: string, waitSeconds?: number): Promise; getTaskResult(taskId: string): Promise; getTaskResultFile(taskId: string): Promise; convertFromUrl(url: string, options?: ConversionOptions, headers?: Record): Promise; convertFromFile(filePath: string, options?: ConversionOptions): Promise; convertFromBuffer(buffer: Uint8Array, filename: string, options?: ConversionOptions): Promise; convertFromBase64(base64String: string, filename: string, options?: ConversionOptions): Promise; convertFromS3(s3Config: S3Config, options?: ConversionOptions): Promise; convertWithTarget(sources: (HttpSource | FileSource | S3Source)[], target: ConversionTarget, options?: ConversionOptions): Promise; chunkHybridSync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; chunkHierarchicalSync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; chunkHybridAsync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; chunkHierarchicalAsync(file: Uint8Array | string, filename: string, options?: ConversionOptions): Promise; chunkHybridFileAsync(params: ChunkFileUploadParams): Promise; chunkHierarchicalFileAsync(params: ChunkFileUploadParams): Promise; chunkHybridSource(request: HybridChunkerOptionsDocumentsRequest): Promise; chunkHierarchicalSource(request: HierarchicalChunkerOptionsDocumentsRequest): Promise; chunkHybridSourceAsync(request: HybridChunkerOptionsDocumentsRequest): Promise; chunkHierarchicalSourceAsync(request: HierarchicalChunkerOptionsDocumentsRequest): Promise; } export interface DoclingCLI extends DoclingClientBase { watch(directory: string, options?: { outputDir?: string; recursive?: boolean; patterns?: string[]; debounce?: number; }): Promise; batch(files: string[], options?: ConversionOptions & { outputDir?: string; parallel?: boolean; maxConcurrency?: number; }): Promise<{ success: boolean; results: Array<{ file: string; success: boolean; output?: string; error?: string; }>; }>; processDirectory(directoryPath: string, options?: ConversionOptions): Promise<{ success: boolean; results: ConvertDocumentResponse[]; totalFiles: number; }>; readonly progress: EventEmitter; setOutputDir(dir: string): void; validateFiles(files: string[]): Promise<{ valid: string[]; invalid: Array<{ file: string; reason: string; }>; }>; } export interface DoclingWeb extends DoclingClientBase { readonly type: "web"; initialize(): Promise; destroy(): void; readonly ready: boolean; readonly processing: boolean; processImage(input: ImageInput, options?: WebProcessOptions): Promise; on(event: K, callback: (data: WebClientEvents[K]) => void): this; off(event: K, callback: (data: WebClientEvents[K]) => void): this; clearCache(): Promise; getCacheSize(): Promise; } export type DoclingClient = T extends { api: unknown; } ? DoclingAPI : T extends { cli: unknown; } ? DoclingCLI : T extends { web: unknown; } ? DoclingWeb : DoclingAPI; export type DoclingInstance = DoclingClient; export declare function isAPIConfig(config: DoclingConfig): config is Extract; export declare function isCLIConfig(config: DoclingConfig): config is Extract; export declare function isWebConfig(config: DoclingConfig): config is Extract;