UNPKG

@getanthill/datastore

Version:

Event-Sourced Datastore

163 lines (162 loc) 7.64 kB
/// <reference types="node" /> import type { RawAxiosRequestHeaders, AxiosResponse, RawAxiosResponseHeaders, AxiosResponseHeaders } from 'axios'; import type { DatastoreImportFixture, ModelConfig, Telemetry } from '../typings'; import { EventEmitter } from 'events'; import Core from './Core'; import Streams, { StreamClose, StreamHandler } from './Streams'; import GraphQL from './GraphQL'; import { Iteration, MultiQuery } from './utils'; export declare const ERROR_MISSING_MODEL_NAME: Error; export declare const ERROR_MISSING_CORRELATION_ID: Error; export declare const ERROR_MISSING_JSON_PATCH: Error; export declare const ERROR_STREAM_MAX_RECONNECTION_ATTEMPTS_REACHED: Error; export interface DatastoreConfig { baseUrl?: string; token?: string; timeout?: number; debug?: boolean; telemetry?: Telemetry; connector?: 'http' | 'amqp'; walk?: { maxPageSize?: number; }; } export default class Datastore extends EventEmitter { name: string; config: DatastoreConfig; telemetry?: Telemetry; core: Core; streams: Streams; graphql: GraphQL; constructor(config?: DatastoreConfig); heartbeat(): Promise<AxiosResponse>; _checkCorrelationIdExistence(correlationId: string): void; _checkModelNameExistence(model: Partial<ModelConfig> | undefined): void; getModels(): Promise<AxiosResponse>; getGraph(): Promise<AxiosResponse>; getModel(model: string): Promise<AxiosResponse>; rotateEncryptionKeys(models?: string[]): Promise<AxiosResponse>; createModel(modelConfig: ModelConfig): Promise<AxiosResponse>; updateModel(modelConfig: Partial<ModelConfig>): Promise<AxiosResponse>; createModelIndexes(modelConfig?: ModelConfig): Promise<AxiosResponse>; getSchema(modelName: string): Promise<AxiosResponse>; encrypt(modelName: string, data: object[], fields?: string[]): Promise<AxiosResponse>; decrypt(modelName: string, data: object[], fields?: string[]): Promise<AxiosResponse>; create(modelName: string, payload: object, headers?: RawAxiosRequestHeaders): Promise<AxiosResponse>; apply(modelName: string, correlationId: string, eventType: string, eventVersion: string, payload: object, headers?: RawAxiosRequestHeaders): Promise<AxiosResponse>; update<T>(modelName: string, correlationId: string, payload: T, headers?: RawAxiosRequestHeaders): Promise<AxiosResponse>; patch(modelName: string, correlationId: string, jsonPatch: object[], headers?: RawAxiosRequestHeaders): Promise<AxiosResponse>; get(modelName: string, correlationId: string): Promise<AxiosResponse>; count(model: string, query: object, source?: string): Promise<number>; find(model: string, query: object, page?: number, pageSize?: number, headers?: { page?: number; 'page-size'?: number; 'cursor-last-id'?: string; }): Promise<AxiosResponse>; events(model: string, correlationId: string, page?: number, pageSize?: number): Promise<AxiosResponse>; allEvents(model: string, query?: object, page?: number, pageSize?: number, headers?: { page?: number; 'page-size'?: number; 'cursor-last-id'?: string; }): Promise<AxiosResponse>; firstEventVersion(model: string, query: object, sort: any, defaultValue: number, headers?: { page?: number; 'page-size'?: number; 'cursor-last-id'?: string; }): Promise<number>; minEventsVersion(model: string, query: object, headers?: { page?: number; 'page-size'?: number; 'cursor-last-id'?: string; }): Promise<number>; maxEventsVersion(model: string, query: object, headers?: { page?: number; 'page-size'?: number; 'cursor-last-id'?: string; }): Promise<number>; version(model: string, correlationId: string, version: number | Date | string): Promise<AxiosResponse>; at(model: string, correlationId: string, date: Date | string): Promise<AxiosResponse>; restore(model: string, correlationId: string, version: number): Promise<AxiosResponse>; snapshot(model: string, correlationId: string): Promise<AxiosResponse>; data(model: string, correlationId: string, models?: string[]): Promise<AxiosResponse>; archive(model: string, correlationId: string, deep?: boolean, models?: string[]): Promise<AxiosResponse>; unarchive(model: string, correlationId: string, deep?: boolean, models?: string[]): Promise<AxiosResponse>; delete(model: string, correlationId: string, deep?: boolean, models?: string[]): Promise<AxiosResponse>; aggregate(pipeline: any[], headers?: any): Promise<AxiosResponse>; _interpolate(str: string, params: any): string; import(data: DatastoreImportFixture[], modelConfigs: { [key: string]: ModelConfig; }, options?: { dryRun: boolean; }, entities?: Map<string, object>): Promise<Map<string, object>>; walkNext(model: string, query: object, source: string, page: number, pageSize: number, opts: { current_version: number; version_ordered?: boolean; cursor_last_id?: string; cursor_last_correlation_id: string; headers?: any; }): Promise<AxiosResponse<any, any>>; static walkMulti(datastores: Map<string, Datastore>, queries: MultiQuery[], handler: (res: any, query: MultiQuery, queryIteration: Iteration) => any, opts?: { page_size: number; sort_handler?: (a: any, b: any) => any; sleep?: number; version_ordered?: boolean; handle_in_order?: boolean; handle_in_parallel?: boolean; chunk_size?: number; is_mutating?: boolean; }): Promise<void>; walk(model: string, query: object, handler: (...args: any[]) => Promise<void> | void, pageSize?: number, source?: MultiQuery['source'], headers?: any, opts?: { sleep?: number; version_ordered?: boolean; handle_in_order?: boolean; handle_in_parallel?: boolean; chunk_size?: number; is_mutating?: boolean; }): Promise<void>; updateOverwhelmingly<T>(model: string, query: object, handler: (entity: T) => Promise<T>, progress: (stats: { total: number; done: number; error: number; progress: number; restored: number; }, entity: T, headers: RawAxiosResponseHeaders | AxiosResponseHeaders) => void, pageSize?: number): Promise<{ total: number; done: number; error: number; progress: number; restored: number; }>; /** * @deprecated in favor to `datastore.streams.getStreamId` */ _streamId(model: string, source: string, query?: object): string; /** * @deprecated in favor to `datastore.streams.listen` */ listen(model: string, source: 'events' | 'entities', query?: object, options?: any): Promise<StreamClose>; /** * @deprecated in favor to `datastore.streams.close` */ close(streamId: string): void; /** * @deprecated in favor to `datastore.streams.closeAll` */ closeAll(): void; /** * @deprecated in favor to `datastore.streams.stream` */ stream(handler: StreamHandler, model?: string, source?: 'entities' | 'events', data?: object[]): Promise<StreamClose>; /** * @deprecated in favor of `datastore.graphql.query` */ query(query: string, variables?: { [key: string]: string[]; }, operationName?: string): Promise<AxiosResponse>; /** * @deprecated in favor of `datastore.graphql.mutation` */ mutation(query: string, variables?: { [key: string]: string[]; }, operationName?: string): Promise<AxiosResponse>; }