///
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;
}