UNPKG

@getanthill/datastore

Version:

Event-Sourced Datastore

58 lines (57 loc) 2.14 kB
/// <reference types="node" /> 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<void> | 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<StreamConfig>, core: Core); getEventSource(url: string, headers?: EventSource.EventSourceInitDict): 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<StreamClose>; close(streamId: string): void; closeAll(): void; streamAMQP(handler: StreamHandler, model: string, source: Source, query?: AnyObject, options?: StreamAMQPOptions): Promise<StreamClose>; /** * @deprecated in favor of streamHTTP */ stream(...args: any): Promise<StreamClose>; /** * Stream route to listen for specific documents update from the * Datastore */ streamHTTP(handler: StreamHandler, model?: string, source?: Source, query?: AnyObject): Promise<StreamClose>; }