UNPKG

1.73 kBTypeScriptView Raw
1/// <reference types="node" />
2import { AccountInfo } from './accounts';
3import Stats from '../services/stats';
4export interface MiddlewareDefinition {
5 type: string;
6 options?: object;
7}
8export interface MiddlewareServices {
9 stats: Stats;
10 getInfo(accountId: string): AccountInfo;
11 getOwnAddress(): string;
12 sendData(data: Buffer, accountId: string): Promise<Buffer>;
13 sendMoney(amount: string, accountId: string): Promise<void>;
14}
15export interface MiddlewareCallback<T, U> {
16 (val: T): Promise<U>;
17}
18export interface MiddlewareMethod<T, U> {
19 (val: T, next: MiddlewareCallback<T, U>): Promise<U>;
20}
21export interface MiddlewareMethods {
22 data: MiddlewareMethod<Buffer, Buffer>;
23 money: MiddlewareMethod<string, void>;
24}
25export interface PipelineEntry<T, U> {
26 name: string;
27 method: MiddlewareMethod<T, U>;
28}
29export interface Pipeline<T, U> {
30 insertFirst(entry: PipelineEntry<T, U>): void;
31 insertLast(entry: PipelineEntry<T, U>): void;
32 insertBefore(middlewareName: string, entry: PipelineEntry<T, U>): void;
33 insertAfter(middlewareName: string, entry: PipelineEntry<T, U>): void;
34 getMethods(): MiddlewareMethod<T, U>[];
35}
36export interface Pipelines {
37 readonly startup: Pipeline<void, void>;
38 readonly teardown: Pipeline<void, void>;
39 readonly incomingData: Pipeline<Buffer, Buffer>;
40 readonly incomingMoney: Pipeline<string, void>;
41 readonly outgoingData: Pipeline<Buffer, Buffer>;
42 readonly outgoingMoney: Pipeline<string, void>;
43}
44export interface Middleware {
45 applyToPipelines: (pipelines: Pipelines, accountId: string) => Promise<void>;
46}
47export interface MiddlewareConstructor {
48 new (options: object, api: MiddlewareServices): Middleware;
49}