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