/** Коллбэки для SSE-стрима */ export interface StreamCallbacks { onData: (data: any, event: string) => void; onError?: (error: Error) => void; onComplete?: () => void; } /** Управление стримом: abort + промис завершения */ export interface StreamResponse { abort: () => void; promise: Promise; } /** Управление стримом через init/subscribe: abort + промис + streamId */ export interface InitStreamResponse { abort: () => void; promise: Promise; streamId: Promise; } export default class Endpoint { name: string; config: any; /** * GET request for API V5 * * @return {Promise} */ getData(name: string, params?: object, options?: object): Promise; /** * POST request for API V5 * * @return {Promise} */ setData(name: string, data?: object, params?: object): Promise; /** * POST-стрим через SSE. * URL: /good/api/v5/stream/{структура}/{метод} * * @return {StreamResponse} — abort() для отмены, promise для ожидания завершения */ setStream(name: string, data?: object, params?: object, callbacks?: StreamCallbacks): StreamResponse; /** * Инициализация стрима (фаза 1 нового механизма). * POST на /good/api/v5/stream/init/{структура}/{метод} → streamId */ streamInit(name: string, data?: object, params?: object): Promise; /** * Подписка на стрим по streamId (фаза 2 нового механизма). * GET на /api/v5/stream/subscribe/{streamId} */ streamSubscribe(streamId: string, callbacks?: StreamCallbacks): StreamResponse; /** * Стрим через init/subscribe (новый механизм Directual). * 1. POST на /good/api/v5/stream/init/{структура}/{метод} → streamId * 2. GET на /api/v5/stream/subscribe/{streamId} → SSE-стрим * * Объединяет обе фазы, API коллбэков идентичен setStream. */ initStream(name: string, data?: object, params?: object, callbacks?: StreamCallbacks): InitStreamResponse; /** * Собирает URL для стрим-эндпоинта с query-параметрами */ private buildStreamUrl; /** * URL для init-эндпоинта: /good/api/v5/stream/init/{структура}/{метод} */ private buildStreamInitUrl; /** * Читает SSE-стрим, парсит события, дёргает коллбэки. * При abort тихо завершается без ошибки. */ private processStream; }