-
Notifications
You must be signed in to change notification settings - Fork 436
/
index.ts
124 lines (104 loc) · 2.96 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import type { Connection, MultiaddrConnection } from '../connection/index.js'
import type { TypedEventTarget } from '../event-target.js'
import type { AbortOptions } from '../index.js'
import type { StreamMuxerFactory } from '../stream-muxer/index.js'
import type { Multiaddr } from '@multiformats/multiaddr'
export interface ListenerEvents {
'connection': CustomEvent<Connection>
'listening': CustomEvent
'error': CustomEvent<Error>
'close': CustomEvent
}
export interface Listener extends TypedEventTarget<ListenerEvents> {
/**
* Start a listener
*/
listen(multiaddr: Multiaddr): Promise<void>
/**
* Get listen addresses
*/
getAddrs(): Multiaddr[]
/**
* Close listener
*
* @returns {Promise<void>}
*/
close(): Promise<void>
}
export const transportSymbol = Symbol.for('@libp2p/transport')
export interface ConnectionHandler { (connection: Connection): void }
export interface MultiaddrFilter { (multiaddrs: Multiaddr[]): Multiaddr[] }
export interface CreateListenerOptions {
handler?: ConnectionHandler
upgrader: Upgrader
}
export interface DialOptions extends AbortOptions {
upgrader: Upgrader
}
/**
* A libp2p transport is understood as something that offers a dial and listen interface to establish connections.
*/
export interface Transport {
/**
* Used to identify the transport
*/
[Symbol.toStringTag]: string
/**
* Used by the isTransport function
*/
[transportSymbol]: true
/**
* Dial a given multiaddr.
*/
dial(ma: Multiaddr, options: DialOptions): Promise<Connection>
/**
* Create transport listeners.
*/
createListener(options: CreateListenerOptions): Listener
/**
* Takes a list of `Multiaddr`s and returns only addresses that are valid for
* the transport to listen on
*/
listenFilter: MultiaddrFilter
/**
* Takes a list of `Multiaddr`s and returns only addresses that are vali for
* the transport to dial
*/
dialFilter: MultiaddrFilter
}
export function isTransport (other: any): other is Transport {
return other != null && Boolean(other[transportSymbol])
}
/**
* Enum Transport Manager Fault Tolerance values
*/
export enum FaultTolerance {
/**
* should be used for failing in any listen circumstance
*/
FATAL_ALL = 0,
/**
* should be used for not failing when not listening
*/
NO_FATAL
}
export interface UpgraderOptions {
skipEncryption?: boolean
skipProtection?: boolean
muxerFactory?: StreamMuxerFactory
/**
* The passed MultiaddrConnection has limits place on duration and/or data
* transfer amounts so is not expected to be open for very long.
*/
transient?: boolean
}
export interface Upgrader {
/**
* Upgrades an outbound connection on `transport.dial`.
*/
upgradeOutbound(maConn: MultiaddrConnection, opts?: UpgraderOptions): Promise<Connection>
/**
* Upgrades an inbound connection on transport listener.
*/
upgradeInbound(maConn: MultiaddrConnection, opts?: UpgraderOptions): Promise<Connection>
}