import type { AnyObject, Source, Telemetry } from '../typings'; import type Core from './Core'; import { EventEmitter } from 'events'; import { EventSource } from 'eventsource'; import AMQPClient from '../services/amqp'; import { MessageOptions, Route } from '../services/broker'; export interface StreamConfig { baseUrl?: string; token?: string; debug?: boolean; telemetry?: Telemetry; connector: 'http' | 'amqp'; amqp?: any; } export type StreamHandler = (event: AnyObject, route?: Route, headers?: AnyObject, opts?: MessageOptions) => Promise | boolean; export type StreamClose = () => void; export interface StreamAMQPOptions { output?: string; reconnect?: boolean; reconnectionInterval?: number; reconnectionMaxAttempts?: number; connectionMaxLifeSpanInSeconds?: number; queueName?: string; queryAsJSONSchema?: boolean; } export default class Streams extends EventEmitter { static ERRORS: { ERROR_STREAM_MAX_RECONNECTION_ATTEMPTS_REACHED: Error; }; config: StreamConfig; private _core; private _telemetry?; private _streams; constructor(config: Partial, core: Core); getEventSource(url: string, headers?: Record): EventSource; getAMQPClient(options?: StreamAMQPOptions): AMQPClient; getStreamId(model: string, source: string, query?: object): string; private getStreamCloseMethod; /** * Streaming API * @beta */ listen(model: string, source: Source, query?: AnyObject, options?: AnyObject): Promise; close(streamId: string): void; closeAll(): void; streamAMQP(handler: StreamHandler, model: string, source: Source, query?: AnyObject, options?: StreamAMQPOptions): Promise; /** * @deprecated in favor of streamHTTP */ stream(...args: any): Promise; /** * Stream route to listen for specific documents update from the * Datastore */ streamHTTP(handler: StreamHandler, model?: string, source?: Source, query?: AnyObject): Promise; }