1 |
|
2 | import { AccountInfo } from './accounts';
|
3 | import Stats from '../services/stats';
|
4 | export interface MiddlewareDefinition {
|
5 | type: string;
|
6 | options?: object;
|
7 | }
|
8 | export 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 | }
|
15 | export interface MiddlewareCallback<T, U> {
|
16 | (val: T): Promise<U>;
|
17 | }
|
18 | export interface MiddlewareMethod<T, U> {
|
19 | (val: T, next: MiddlewareCallback<T, U>): Promise<U>;
|
20 | }
|
21 | export interface MiddlewareMethods {
|
22 | data: MiddlewareMethod<Buffer, Buffer>;
|
23 | money: MiddlewareMethod<string, void>;
|
24 | }
|
25 | export interface PipelineEntry<T, U> {
|
26 | name: string;
|
27 | method: MiddlewareMethod<T, U>;
|
28 | }
|
29 | export 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 | }
|
36 | export 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 | }
|
44 | export interface Middleware {
|
45 | applyToPipelines: (pipelines: Pipelines, accountId: string) => Promise<void>;
|
46 | }
|
47 | export interface MiddlewareConstructor {
|
48 | new (options: object, api: MiddlewareServices): Middleware;
|
49 | }
|