@getanthill/datastore
Version:
Event-Sourced Datastore
58 lines (57 loc) • 2.14 kB
TypeScript
/// <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>;
}