/** * @license * Copyright 2024 Nuraly, Laabidi Aymen * SPDX-License-Identifier: MIT */ import { Socket } from 'socket.io-client'; import type { ChatbotProvider, ProviderCapabilities, ProviderConfig, ChatbotContext } from '../core/types.js'; import type { ChatbotFile } from '../chatbot.types.js'; /** * Workflow socket provider configuration */ export interface WorkflowSocketProviderConfig extends ProviderConfig { /** Socket.io server URL (default: window.location.origin) */ socketUrl?: string; /** Socket.io path (default: /socket.io/workflow) */ socketPath?: string; /** Workflow ID to trigger */ workflowId: string; /** HTTP trigger endpoint template (default: /api/v1/workflows/{workflowId}/trigger/chat) */ triggerEndpoint?: string; /** Custom headers for HTTP trigger */ headers?: Record; /** Response timeout in ms (default: 60000) */ responseTimeout?: number; /** Build custom input payload */ buildInput?: (text: string, context: ChatbotContext) => any; /** Extract final response from execution completed data */ extractResponse?: (data: any) => string; /** Callback when execution starts with executionId */ onExecutionStart?: (executionId: string, workflowId: string) => void; /** Callback when a chat message is received (for real-time display, including retries) */ onMessage?: (message: string) => void; } /** * Workflow Socket Provider for chatbot * * Triggers workflows via HTTP and receives real-time updates via socket.io. * CHAT_OUTPUT nodes in the workflow send messages to the chatbot in real-time. * * @example Basic usage * ```typescript * const provider = new WorkflowSocketProvider(); * await provider.connect({ * workflowId: 'abc-123-def' * }); * * const controller = new ChatbotCoreController({ * provider * }); * ``` * * @example With custom input builder * ```typescript * const provider = new WorkflowSocketProvider(); * await provider.connect({ * workflowId: 'abc-123-def', * buildInput: (text, context) => ({ * message: text, * threadId: context.currentThread?.id, * userId: context.metadata.userId * }) * }); * ``` */ export declare class WorkflowSocketProvider implements ChatbotProvider { readonly id = "workflow-socket"; readonly name = "Workflow Socket Provider"; readonly capabilities: ProviderCapabilities; protected socket: Socket | null; protected config: WorkflowSocketProviderConfig | null; protected connected: boolean; /** Called when a workflow node starts executing */ onNodeStarted?: (nodeName: string) => void; /** Called when a workflow node completes */ onNodeCompleted?: (nodeName: string) => void; protected readonly sessionId: string; protected activeExecutions: Map void; reject: (error: Error) => void; completed: boolean; }>; connect(config: WorkflowSocketProviderConfig): Promise; protected subscribeToWorkflow(workflowId: string): void; protected subscribeToExecution(executionId: string): void; protected setupEventListeners(): void; protected _handleEvent(event: string, data: any): void; disconnect(): Promise; isConnected(): boolean; sendMessage(text: string, context: ChatbotContext): AsyncIterator; protected buildInput(text: string, context: ChatbotContext): any; /** * Change the workflow ID (useful for switching between workflows) */ setWorkflowId(workflowId: string): void; /** * Get the underlying socket instance */ getSocket(): Socket | null; /** * Upload file - for workflow provider, files are sent with the message payload * Converts file to base64 for backend processing (e.g., OCR) */ uploadFile(file: File): Promise; /** * Convert a File to base64 string */ private fileToBase64; /** * Determine ChatbotFileType from mime type */ private determineFileType; protected formatError(title: string, description: string): string; onError(error: Error): void; } //# sourceMappingURL=workflow-socket-provider.d.ts.map