@@ -10,6 +10,43 @@ import { Server as DPTServer } from './server'
10
10
11
11
const debug = createDebugLogger ( 'devp2p:dpt' )
12
12
13
+ export interface PeerInfo {
14
+ id ?: Uint8Array | Buffer
15
+ address ?: string
16
+ udpPort ?: number | null
17
+ tcpPort ?: number | null
18
+ }
19
+
20
+ export interface DPTOptions {
21
+ /**
22
+ * Timeout for peer requests
23
+ *
24
+ * Default: 10s
25
+ */
26
+ timeout ?: number
27
+
28
+ /**
29
+ * Network info to send a long a request
30
+ *
31
+ * Default: 0.0.0.0, no UDP or TCP port provided
32
+ */
33
+ endpoint ?: PeerInfo
34
+
35
+ /**
36
+ * Function for socket creation
37
+ *
38
+ * Default: dgram-created socket
39
+ */
40
+ createSocket ?: Function
41
+
42
+ /**
43
+ * Interval for peer table refresh
44
+ *
45
+ * Default: 60s
46
+ */
47
+ refreshInterval ?: number
48
+ }
49
+
13
50
export class DPT extends EventEmitter {
14
51
privateKey : Buffer
15
52
banlist : BanList
@@ -19,7 +56,7 @@ export class DPT extends EventEmitter {
19
56
private _server : DPTServer
20
57
private _refreshIntervalId : NodeJS . Timeout
21
58
22
- constructor ( privateKey : Buffer , options : any ) {
59
+ constructor ( privateKey : Buffer , options : DPTOptions ) {
23
60
super ( )
24
61
25
62
this . privateKey = Buffer . from ( privateKey )
@@ -28,14 +65,14 @@ export class DPT extends EventEmitter {
28
65
this . banlist = new BanList ( )
29
66
30
67
this . _kbucket = new KBucket ( this . _id )
31
- this . _kbucket . on ( 'added' , ( peer ) => this . emit ( 'peer:added' , peer ) )
32
- this . _kbucket . on ( 'removed' , ( peer ) => this . emit ( 'peer:removed' , peer ) )
68
+ this . _kbucket . on ( 'added' , ( peer : PeerInfo ) => this . emit ( 'peer:added' , peer ) )
69
+ this . _kbucket . on ( 'removed' , ( peer : PeerInfo ) => this . emit ( 'peer:removed' , peer ) )
33
70
this . _kbucket . on ( 'ping' , this . _onKBucketPing )
34
71
35
72
this . _server = new DPTServer ( this , this . privateKey , {
36
- createSocket : options . createSocket ,
37
73
timeout : options . timeout ,
38
74
endpoint : options . endpoint ,
75
+ createSocket : options . createSocket ,
39
76
} )
40
77
this . _server . once ( 'listening' , ( ) => this . emit ( 'listening' ) )
41
78
this . _server . once ( 'close' , ( ) => this . emit ( 'close' ) )
@@ -55,7 +92,7 @@ export class DPT extends EventEmitter {
55
92
this . _server . destroy ( ...args )
56
93
}
57
94
58
- _onKBucketPing ( oldPeers : any [ ] , newPeer : any ) : void {
95
+ _onKBucketPing ( oldPeers : PeerInfo [ ] , newPeer : PeerInfo ) : void {
59
96
if ( this . banlist . has ( newPeer ) ) return
60
97
61
98
let count = 0
@@ -81,15 +118,15 @@ export class DPT extends EventEmitter {
81
118
for ( const peer of peers ) this . addPeer ( peer ) . catch ( ( ) => { } )
82
119
}
83
120
84
- async bootstrap ( peer : any ) : Promise < void > {
121
+ async bootstrap ( peer : PeerInfo ) : Promise < void > {
85
122
debug ( `bootstrap with peer ${ peer . address } :${ peer . udpPort } ` )
86
123
87
124
peer = await this . addPeer ( peer )
88
125
if ( ! this . _id ) return
89
126
this . _server . findneighbours ( peer , this . _id )
90
127
}
91
128
92
- async addPeer ( obj : any ) : Promise < any > {
129
+ async addPeer ( obj : PeerInfo ) : Promise < any > {
93
130
if ( this . banlist . has ( obj ) ) throw new Error ( 'Peer is banned' )
94
131
debug ( `attempt adding peer ${ obj . address } :${ obj . udpPort } ` )
95
132
@@ -109,23 +146,23 @@ export class DPT extends EventEmitter {
109
146
}
110
147
}
111
148
112
- getPeer ( obj : any ) : any {
149
+ getPeer ( obj : string | Buffer | PeerInfo ) {
113
150
return this . _kbucket . get ( obj )
114
151
}
115
152
116
- getPeers ( ) : any [ ] {
153
+ getPeers ( ) {
117
154
return this . _kbucket . getAll ( )
118
155
}
119
156
120
- getClosestPeers ( id : string ) : any {
157
+ getClosestPeers ( id : string ) {
121
158
return this . _kbucket . closest ( id )
122
159
}
123
160
124
161
removePeer ( obj : any ) {
125
162
this . _kbucket . remove ( obj )
126
163
}
127
164
128
- banPeer ( obj : any , maxAge ?: number ) {
165
+ banPeer ( obj : string | Buffer | PeerInfo , maxAge ?: number ) {
129
166
this . banlist . add ( obj , maxAge )
130
167
this . _kbucket . remove ( obj )
131
168
}
0 commit comments