import { AccountInfo } from './accounts' import Stats from '../services/stats' export interface MiddlewareDefinition { type: string, options?: object } /** * Services the connector exposes to middleware. */ 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 }