UNPKG

1.69 kBPlain TextView Raw
1import { AccountInfo } from './accounts'
2import Stats from '../services/stats'
3
4export interface MiddlewareDefinition {
5 type: string,
6 options?: object
7}
8
9/**
10 * Services the connector exposes to middleware.
11 */
12export 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
20export interface MiddlewareCallback<T,U> {
21 (val: T): Promise<U>
22}
23
24export interface MiddlewareMethod<T,U> {
25 (val: T, next: MiddlewareCallback<T,U>): Promise<U>
26}
27
28export interface MiddlewareMethods {
29 data: MiddlewareMethod<Buffer, Buffer>
30 money: MiddlewareMethod<string, void>
31}
32
33export interface PipelineEntry<T,U> {
34 name: string,
35 method: MiddlewareMethod<T,U>
36}
37
38export 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
46export 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
55export interface Middleware {
56 applyToPipelines: (pipelines: Pipelines, accountId: string) => Promise<void>
57}
58
59export interface MiddlewareConstructor {
60 new (options: object, api: MiddlewareServices): Middleware
61}