/// import yargs from 'yargs'; import express from 'express'; import WebSocket from 'ws'; import { Observable, ObservedValueOf } from 'rxjs'; import { IncomingMessage } from 'http'; import * as Joi from 'joi'; import { IAction } from './action'; import { TaggedLogger, BasicLogger } from './logging'; export interface ICommandLineArgs { http: boolean; watch: boolean; cert?: string; key?: string; host?: string; port: number; envFile?: string; } export declare type ServiceDeps = { logger: BasicLogger; } & D; export declare type EndpointsHandler = (app: express.Express, deps: ServiceDeps) => Promise; export interface IServiceConfig { defaultPort: number; logger?: () => Promise; buildDeps?: () => Promise; endpoints?: EndpointsHandler; sockets?: (deps: ServiceDeps) => Promise; background?: (deps: ServiceDeps) => Promise; spy?: (spy: ReturnType, deps: ServiceDeps) => Promise; argsBuilder?: ArgsBuilder; serviceConfigModuleId?: string; watchPatterns?: string[]; shouldUseDefaultBackgroundOperations?: boolean; shouldUseDefaultEndpoints?: boolean; shouldLoadEnvFiles?: boolean; } export interface IBackgroundEpicContext { logger: TaggedLogger; } export interface IBackgroundEpic { (events: Observable, ctx: IBackgroundEpicContext & D, ...args: R): Observable; buildDeps?: () => D; } export declare type BackgroundEpic = IBackgroundEpic; export interface ISocketEpicsMap { [path: string]: AnySocketEpic; } export interface ISocketEpicAttributes { send?: (socket: WebSocket, data: O) => Promise; actionSchemaByType?: (type: string) => Joi.ObjectSchema | null; logOnConnection?: (socket: WebSocket, request: IncomingMessage & { id: string; }) => { [key: string]: string | undefined; }; completedSocketWarningTimeout?: number; completedSocketWaitTimeout?: number; watchModeDetachBehaviour?: 'disconnect' | 'unsubscribe'; debugStats?: boolean; buildDeps?: () => D; } export interface ISocketEpicContext { id: string; request: IncomingMessage & { id: string; }; binary: Observable; subscribe: () => Observable; publish: () => (events: Observable) => Observable; logger: TaggedLogger; takeUntilClosed: () => (stream: Observable) => Observable; } export interface ISocketEpic extends ISocketEpicAttributes { (commands: Observable, ctx: ISocketEpicContext & D, ...args: R): Observable; } export declare const makeSocketEpic: >(epic: E) => E; export declare type AnySocketEpic = SocketEpic; export declare type AnyEpic = (commands: Observable, ctx: IBackgroundEpicContext | ISocketEpicContext, ...args: R) => Observable; export declare type SocketEpic = ISocketEpic; declare type ArgsBuilder = (args: yargs.Argv) => yargs.Argv; export declare type InputOfEpic = ObservedValueOf[0]>; export declare type OutputOfEpic = ObservedValueOf>; export declare type DependenciesOfBackgroundEpic = Exclude[1], IBackgroundEpicContext> extends never ? {} : Exclude[1], IBackgroundEpicContext>; export declare type DependenciesOfSocketEpic = Exclude[1], ISocketEpicContext> extends never ? {} : Exclude[1], ISocketEpicContext>; export {};