UNPKG

ai-ip-plugin

Version:

AI-IP Plugin for MCP Workflow Management with SSE streaming and event handling

91 lines 2.99 kB
"use strict"; /** * Stream Processor - Handles SSE stream processing */ Object.defineProperty(exports, "__esModule", { value: true }); exports.StreamProcessor = void 0; class StreamProcessor { /** * Process SSE stream */ async processStream(reader, handlers) { const decoder = new TextDecoder(); let buffer = ''; try { handlers.onopen?.(); while (true) { const { done, value } = await reader.read(); if (done) { break; } buffer += decoder.decode(value, { stream: true }); // Process complete messages const { processedData, remainingBuffer } = this.processBuffer(buffer); buffer = remainingBuffer; // Handle each parsed event for (const { event, data } of processedData) { // Call specific event handler if exists if (event && typeof handlers[event] === 'function') { handlers[event](data); } // Also call general onmessage handler handlers.onmessage?.({ event, data }); } } } catch (error) { handlers.onerror?.(error); } finally { try { reader.releaseLock(); } catch (error) { // Ignore lock release errors } } } /** * Process buffer and extract complete SSE messages */ processBuffer(buffer) { const parts = buffer.split('\n\n'); const remainingBuffer = parts.pop() || ''; const processedData = []; for (const part of parts) { if (!part.trim()) continue; let event = 'message'; let data = ''; for (const line of part.split('\n')) { if (line.startsWith('event:')) { event = line.replace('event:', '').trim(); } else if (line.startsWith('data:')) { data += line.replace('data:', '').trim(); } } let parsed = data; try { parsed = JSON.parse(data); } catch { // Keep as string if not valid JSON } processedData.push({ event, data: parsed }); } return { processedData, remainingBuffer }; } /** * Create a simple SSE handler for testing */ createTestHandler() { return { onopen: () => console.log('SSE connection opened'), onerror: (error) => console.error('SSE error:', error), onmessage: ({ event, data }) => console.log('SSE message:', event, data) }; } } exports.StreamProcessor = StreamProcessor; //# sourceMappingURL=StreamProcessor.js.map