/// import { AccountInfo } from './accounts'; import Stats from '../services/stats'; export interface MiddlewareDefinition { type: string; options?: object; } export interface MiddlewareServices { stats: Stats; getInfo(accountId: string): AccountInfo; getOwnAddress(): string; sendData(data: Buffer, accountId: string): Promise; sendMoney(amount: string, accountId: string): Promise; } export interface MiddlewareCallback { (val: T): Promise; } export interface MiddlewareMethod { (val: T, next: MiddlewareCallback): Promise; } export interface MiddlewareMethods { data: MiddlewareMethod; money: MiddlewareMethod; } export interface PipelineEntry { name: string; method: MiddlewareMethod; } export interface Pipeline { insertFirst(entry: PipelineEntry): void; insertLast(entry: PipelineEntry): void; insertBefore(middlewareName: string, entry: PipelineEntry): void; insertAfter(middlewareName: string, entry: PipelineEntry): void; getMethods(): MiddlewareMethod[]; } export interface Pipelines { readonly startup: Pipeline; readonly teardown: Pipeline; readonly incomingData: Pipeline; readonly incomingMoney: Pipeline; readonly outgoingData: Pipeline; readonly outgoingMoney: Pipeline; } export interface Middleware { applyToPipelines: (pipelines: Pipelines, accountId: string) => Promise; } export interface MiddlewareConstructor { new (options: object, api: MiddlewareServices): Middleware; }