libp2p 0.42.2-593deefe → 0.42.2-5e63ee2d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +30 -30
- package/dist/src/address-manager/index.d.ts +1 -10
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +46 -29
- package/dist/src/address-manager/index.js.map +1 -1
- package/dist/src/autonat/constants.d.ts +4 -0
- package/dist/src/autonat/constants.d.ts.map +1 -0
- package/dist/src/autonat/constants.js +4 -0
- package/dist/src/autonat/constants.js.map +1 -0
- package/dist/src/autonat/index.d.ts +64 -0
- package/dist/src/autonat/index.d.ts.map +1 -0
- package/dist/src/autonat/index.js +417 -0
- package/dist/src/autonat/index.js.map +1 -0
- package/dist/src/autonat/pb/index.d.ts +57 -0
- package/dist/src/autonat/pb/index.d.ts.map +1 -0
- package/dist/src/autonat/pb/index.js +250 -0
- package/dist/src/autonat/pb/index.js.map +1 -0
- package/dist/src/circuit/constants.d.ts +29 -3
- package/dist/src/circuit/constants.d.ts.map +1 -1
- package/dist/src/circuit/constants.js +32 -5
- package/dist/src/circuit/constants.js.map +1 -1
- package/dist/src/circuit/index.d.ts +16 -61
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/index.js +2 -1
- package/dist/src/circuit/index.js.map +1 -1
- package/dist/src/circuit/server/advert-service.d.ts +43 -0
- package/dist/src/circuit/server/advert-service.d.ts.map +1 -0
- package/dist/src/circuit/server/advert-service.js +69 -0
- package/dist/src/circuit/server/advert-service.js.map +1 -0
- package/dist/src/circuit/server/index.d.ts +60 -0
- package/dist/src/circuit/server/index.d.ts.map +1 -0
- package/dist/src/circuit/server/index.js +287 -0
- package/dist/src/circuit/server/index.js.map +1 -0
- package/dist/src/circuit/{reservation-store.d.ts → server/reservation-store.d.ts} +17 -10
- package/dist/src/circuit/server/reservation-store.d.ts.map +1 -0
- package/dist/src/circuit/server/reservation-store.js +57 -0
- package/dist/src/circuit/server/reservation-store.js.map +1 -0
- package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
- package/dist/src/circuit/{reservation-voucher.js → server/reservation-voucher.js} +1 -1
- package/dist/src/circuit/server/reservation-voucher.js.map +1 -0
- package/dist/src/circuit/transport/discovery.d.ts +45 -0
- package/dist/src/circuit/transport/discovery.d.ts.map +1 -0
- package/dist/src/circuit/transport/discovery.js +82 -0
- package/dist/src/circuit/transport/discovery.js.map +1 -0
- package/dist/src/circuit/transport/index.d.ts +33 -0
- package/dist/src/circuit/transport/index.d.ts.map +1 -0
- package/dist/src/circuit/transport/index.js +225 -0
- package/dist/src/circuit/transport/index.js.map +1 -0
- package/dist/src/circuit/transport/listener.d.ts +9 -0
- package/dist/src/circuit/transport/listener.d.ts.map +1 -0
- package/dist/src/circuit/transport/listener.js +76 -0
- package/dist/src/circuit/transport/listener.js.map +1 -0
- package/dist/src/circuit/transport/reservation-store.d.ts +60 -0
- package/dist/src/circuit/transport/reservation-store.d.ts.map +1 -0
- package/dist/src/circuit/transport/reservation-store.js +165 -0
- package/dist/src/circuit/transport/reservation-store.js.map +1 -0
- package/dist/src/circuit/utils.d.ts +4 -2
- package/dist/src/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/utils.js +75 -102
- package/dist/src/circuit/utils.js.map +1 -1
- package/dist/src/components.d.ts +2 -1
- package/dist/src/components.d.ts.map +1 -1
- package/dist/src/components.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +17 -20
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection/index.d.ts +2 -2
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/index.js +1 -1
- package/dist/src/connection/index.js.map +1 -1
- package/dist/src/connection-manager/auto-dialler.d.ts +0 -4
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dialler.js +0 -9
- package/dist/src/connection-manager/auto-dialler.js.map +1 -1
- package/dist/src/connection-manager/dialer/dial-request.js +1 -1
- package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
- package/dist/src/connection-manager/dialer/index.d.ts +2 -1
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.js +3 -3
- package/dist/src/connection-manager/dialer/index.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +0 -4
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +1 -1
- package/dist/src/connection-manager/index.js.map +1 -1
- package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
- package/dist/src/connection-manager/latency-monitor.js +1 -1
- package/dist/src/connection-manager/latency-monitor.js.map +1 -1
- package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
- package/dist/src/content-routing/index.d.ts +6 -4
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +1 -1
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/content-routing/utils.d.ts +3 -3
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.d.ts +2 -1
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.js.map +1 -1
- package/dist/src/dht/dht-peer-routing.d.ts +3 -2
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-peer-routing.js.map +1 -1
- package/dist/src/dht/dummy-dht.d.ts +1 -1
- package/dist/src/dht/dummy-dht.d.ts.map +1 -1
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/identify/index.d.ts +3 -1
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +12 -7
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/index.d.ts +13 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/insecure/index.d.ts.map +1 -1
- package/dist/src/insecure/index.js.map +1 -1
- package/dist/src/libp2p.d.ts +6 -4
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +19 -28
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +3 -1
- package/dist/src/nat-manager.js.map +1 -1
- package/dist/src/peer-record-updater.d.ts.map +1 -1
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/pnet/crypto.d.ts +1 -1
- package/dist/src/pnet/crypto.d.ts.map +1 -1
- package/dist/src/pnet/crypto.js +1 -1
- package/dist/src/pnet/crypto.js.map +1 -1
- package/dist/src/pnet/key-generator.d.ts.map +1 -1
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +1 -1
- package/dist/src/transport-manager.js.map +1 -1
- package/dist/src/upgrader.d.ts +2 -1
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +19 -14
- package/dist/src/upgrader.js.map +1 -1
- package/package.json +23 -18
- package/src/address-manager/index.ts +62 -35
- package/src/autonat/constants.ts +4 -0
- package/src/autonat/index.ts +567 -0
- package/src/autonat/pb/index.proto +35 -0
- package/src/autonat/pb/index.ts +320 -0
- package/src/circuit/constants.ts +40 -5
- package/src/circuit/index.ts +17 -67
- package/src/circuit/server/advert-service.ts +108 -0
- package/src/circuit/server/index.ts +421 -0
- package/src/circuit/server/reservation-store.ts +111 -0
- package/src/circuit/{reservation-voucher.ts → server/reservation-voucher.ts} +3 -3
- package/src/circuit/transport/discovery.ts +127 -0
- package/src/circuit/transport/index.ts +325 -0
- package/src/circuit/transport/listener.ts +99 -0
- package/src/circuit/transport/reservation-store.ts +249 -0
- package/src/circuit/utils.ts +78 -115
- package/src/components.ts +9 -8
- package/src/config.ts +17 -20
- package/src/connection/index.ts +7 -7
- package/src/connection-manager/auto-dialler.ts +4 -20
- package/src/connection-manager/dialer/dial-request.ts +1 -1
- package/src/connection-manager/dialer/index.ts +10 -9
- package/src/connection-manager/index.ts +14 -19
- package/src/connection-manager/latency-monitor.ts +9 -9
- package/src/connection-manager/visibility-change-emitter.ts +4 -4
- package/src/content-routing/index.ts +10 -8
- package/src/content-routing/utils.ts +3 -3
- package/src/dht/dht-content-routing.ts +3 -2
- package/src/dht/dht-peer-routing.ts +3 -2
- package/src/dht/dummy-dht.ts +1 -1
- package/src/fetch/index.ts +7 -7
- package/src/identify/index.ts +22 -17
- package/src/index.ts +14 -7
- package/src/insecure/index.ts +2 -1
- package/src/libp2p.ts +33 -41
- package/src/nat-manager.ts +9 -7
- package/src/peer-record-updater.ts +4 -4
- package/src/peer-routing.ts +4 -4
- package/src/ping/index.ts +4 -4
- package/src/pnet/crypto.ts +3 -3
- package/src/pnet/key-generator.ts +1 -1
- package/src/registrar.ts +8 -8
- package/src/transport-manager.ts +10 -10
- package/src/upgrader.ts +20 -19
- package/src/version.ts +1 -1
- package/dist/src/circuit/client.d.ts +0 -81
- package/dist/src/circuit/client.d.ts.map +0 -1
- package/dist/src/circuit/client.js +0 -285
- package/dist/src/circuit/client.js.map +0 -1
- package/dist/src/circuit/hop.d.ts +0 -23
- package/dist/src/circuit/hop.d.ts.map +0 -1
- package/dist/src/circuit/hop.js +0 -167
- package/dist/src/circuit/hop.js.map +0 -1
- package/dist/src/circuit/interfaces.d.ts +0 -27
- package/dist/src/circuit/interfaces.d.ts.map +0 -1
- package/dist/src/circuit/interfaces.js +0 -2
- package/dist/src/circuit/interfaces.js.map +0 -1
- package/dist/src/circuit/listener.d.ts +0 -9
- package/dist/src/circuit/listener.d.ts.map +0 -1
- package/dist/src/circuit/listener.js +0 -62
- package/dist/src/circuit/listener.js.map +0 -1
- package/dist/src/circuit/multicodec.d.ts +0 -3
- package/dist/src/circuit/multicodec.d.ts.map +0 -1
- package/dist/src/circuit/multicodec.js +0 -3
- package/dist/src/circuit/multicodec.js.map +0 -1
- package/dist/src/circuit/relay.d.ts +0 -34
- package/dist/src/circuit/relay.d.ts.map +0 -1
- package/dist/src/circuit/relay.js +0 -61
- package/dist/src/circuit/relay.js.map +0 -1
- package/dist/src/circuit/reservation-store.d.ts.map +0 -1
- package/dist/src/circuit/reservation-store.js +0 -59
- package/dist/src/circuit/reservation-store.js.map +0 -1
- package/dist/src/circuit/reservation-voucher.d.ts.map +0 -1
- package/dist/src/circuit/reservation-voucher.js.map +0 -1
- package/dist/src/circuit/stop.d.ts +0 -19
- package/dist/src/circuit/stop.d.ts.map +0 -1
- package/dist/src/circuit/stop.js +0 -67
- package/dist/src/circuit/stop.js.map +0 -1
- package/dist/src/circuit/transport.d.ts +0 -66
- package/dist/src/circuit/transport.d.ts.map +0 -1
- package/dist/src/circuit/transport.js +0 -238
- package/dist/src/circuit/transport.js.map +0 -1
- package/src/circuit/client.ts +0 -381
- package/src/circuit/hop.ts +0 -210
- package/src/circuit/interfaces.ts +0 -28
- package/src/circuit/listener.ts +0 -83
- package/src/circuit/multicodec.ts +0 -3
- package/src/circuit/relay.ts +0 -87
- package/src/circuit/reservation-store.ts +0 -106
- package/src/circuit/stop.ts +0 -92
- package/src/circuit/transport.ts +0 -313
- /package/dist/src/circuit/{reservation-voucher.d.ts → server/reservation-voucher.d.ts} +0 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/* eslint-disable import/export */
|
|
2
|
+
/* eslint-disable complexity */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
6
|
+
|
|
7
|
+
import { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'
|
|
8
|
+
import type { Codec } from 'protons-runtime'
|
|
9
|
+
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
10
|
+
|
|
11
|
+
export interface Message {
|
|
12
|
+
type?: Message.MessageType
|
|
13
|
+
dial?: Message.Dial
|
|
14
|
+
dialResponse?: Message.DialResponse
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export namespace Message {
|
|
18
|
+
export enum MessageType {
|
|
19
|
+
DIAL = 'DIAL',
|
|
20
|
+
DIAL_RESPONSE = 'DIAL_RESPONSE'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
enum __MessageTypeValues {
|
|
24
|
+
DIAL = 0,
|
|
25
|
+
DIAL_RESPONSE = 1
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export namespace MessageType {
|
|
29
|
+
export const codec = (): Codec<MessageType> => {
|
|
30
|
+
return enumeration<MessageType>(__MessageTypeValues)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export enum ResponseStatus {
|
|
35
|
+
OK = 'OK',
|
|
36
|
+
E_DIAL_ERROR = 'E_DIAL_ERROR',
|
|
37
|
+
E_DIAL_REFUSED = 'E_DIAL_REFUSED',
|
|
38
|
+
E_BAD_REQUEST = 'E_BAD_REQUEST',
|
|
39
|
+
E_INTERNAL_ERROR = 'E_INTERNAL_ERROR'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
enum __ResponseStatusValues {
|
|
43
|
+
OK = 0,
|
|
44
|
+
E_DIAL_ERROR = 100,
|
|
45
|
+
E_DIAL_REFUSED = 101,
|
|
46
|
+
E_BAD_REQUEST = 200,
|
|
47
|
+
E_INTERNAL_ERROR = 300
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export namespace ResponseStatus {
|
|
51
|
+
export const codec = (): Codec<ResponseStatus> => {
|
|
52
|
+
return enumeration<ResponseStatus>(__ResponseStatusValues)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface PeerInfo {
|
|
57
|
+
id?: Uint8Array
|
|
58
|
+
addrs: Uint8Array[]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export namespace PeerInfo {
|
|
62
|
+
let _codec: Codec<PeerInfo>
|
|
63
|
+
|
|
64
|
+
export const codec = (): Codec<PeerInfo> => {
|
|
65
|
+
if (_codec == null) {
|
|
66
|
+
_codec = message<PeerInfo>((obj, w, opts = {}) => {
|
|
67
|
+
if (opts.lengthDelimited !== false) {
|
|
68
|
+
w.fork()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (obj.id != null) {
|
|
72
|
+
w.uint32(10)
|
|
73
|
+
w.bytes(obj.id)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (obj.addrs != null) {
|
|
77
|
+
for (const value of obj.addrs) {
|
|
78
|
+
w.uint32(18)
|
|
79
|
+
w.bytes(value)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (opts.lengthDelimited !== false) {
|
|
84
|
+
w.ldelim()
|
|
85
|
+
}
|
|
86
|
+
}, (reader, length) => {
|
|
87
|
+
const obj: any = {
|
|
88
|
+
addrs: []
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const end = length == null ? reader.len : reader.pos + length
|
|
92
|
+
|
|
93
|
+
while (reader.pos < end) {
|
|
94
|
+
const tag = reader.uint32()
|
|
95
|
+
|
|
96
|
+
switch (tag >>> 3) {
|
|
97
|
+
case 1:
|
|
98
|
+
obj.id = reader.bytes()
|
|
99
|
+
break
|
|
100
|
+
case 2:
|
|
101
|
+
obj.addrs.push(reader.bytes())
|
|
102
|
+
break
|
|
103
|
+
default:
|
|
104
|
+
reader.skipType(tag & 7)
|
|
105
|
+
break
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return obj
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return _codec
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export const encode = (obj: Partial<PeerInfo>): Uint8Array => {
|
|
117
|
+
return encodeMessage(obj, PeerInfo.codec())
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList): PeerInfo => {
|
|
121
|
+
return decodeMessage(buf, PeerInfo.codec())
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface Dial {
|
|
126
|
+
peer?: Message.PeerInfo
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export namespace Dial {
|
|
130
|
+
let _codec: Codec<Dial>
|
|
131
|
+
|
|
132
|
+
export const codec = (): Codec<Dial> => {
|
|
133
|
+
if (_codec == null) {
|
|
134
|
+
_codec = message<Dial>((obj, w, opts = {}) => {
|
|
135
|
+
if (opts.lengthDelimited !== false) {
|
|
136
|
+
w.fork()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (obj.peer != null) {
|
|
140
|
+
w.uint32(10)
|
|
141
|
+
Message.PeerInfo.codec().encode(obj.peer, w)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (opts.lengthDelimited !== false) {
|
|
145
|
+
w.ldelim()
|
|
146
|
+
}
|
|
147
|
+
}, (reader, length) => {
|
|
148
|
+
const obj: any = {}
|
|
149
|
+
|
|
150
|
+
const end = length == null ? reader.len : reader.pos + length
|
|
151
|
+
|
|
152
|
+
while (reader.pos < end) {
|
|
153
|
+
const tag = reader.uint32()
|
|
154
|
+
|
|
155
|
+
switch (tag >>> 3) {
|
|
156
|
+
case 1:
|
|
157
|
+
obj.peer = Message.PeerInfo.codec().decode(reader, reader.uint32())
|
|
158
|
+
break
|
|
159
|
+
default:
|
|
160
|
+
reader.skipType(tag & 7)
|
|
161
|
+
break
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return obj
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return _codec
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export const encode = (obj: Partial<Dial>): Uint8Array => {
|
|
173
|
+
return encodeMessage(obj, Dial.codec())
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList): Dial => {
|
|
177
|
+
return decodeMessage(buf, Dial.codec())
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface DialResponse {
|
|
182
|
+
status?: Message.ResponseStatus
|
|
183
|
+
statusText?: string
|
|
184
|
+
addr?: Uint8Array
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export namespace DialResponse {
|
|
188
|
+
let _codec: Codec<DialResponse>
|
|
189
|
+
|
|
190
|
+
export const codec = (): Codec<DialResponse> => {
|
|
191
|
+
if (_codec == null) {
|
|
192
|
+
_codec = message<DialResponse>((obj, w, opts = {}) => {
|
|
193
|
+
if (opts.lengthDelimited !== false) {
|
|
194
|
+
w.fork()
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (obj.status != null) {
|
|
198
|
+
w.uint32(8)
|
|
199
|
+
Message.ResponseStatus.codec().encode(obj.status, w)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (obj.statusText != null) {
|
|
203
|
+
w.uint32(18)
|
|
204
|
+
w.string(obj.statusText)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (obj.addr != null) {
|
|
208
|
+
w.uint32(26)
|
|
209
|
+
w.bytes(obj.addr)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (opts.lengthDelimited !== false) {
|
|
213
|
+
w.ldelim()
|
|
214
|
+
}
|
|
215
|
+
}, (reader, length) => {
|
|
216
|
+
const obj: any = {}
|
|
217
|
+
|
|
218
|
+
const end = length == null ? reader.len : reader.pos + length
|
|
219
|
+
|
|
220
|
+
while (reader.pos < end) {
|
|
221
|
+
const tag = reader.uint32()
|
|
222
|
+
|
|
223
|
+
switch (tag >>> 3) {
|
|
224
|
+
case 1:
|
|
225
|
+
obj.status = Message.ResponseStatus.codec().decode(reader)
|
|
226
|
+
break
|
|
227
|
+
case 2:
|
|
228
|
+
obj.statusText = reader.string()
|
|
229
|
+
break
|
|
230
|
+
case 3:
|
|
231
|
+
obj.addr = reader.bytes()
|
|
232
|
+
break
|
|
233
|
+
default:
|
|
234
|
+
reader.skipType(tag & 7)
|
|
235
|
+
break
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return obj
|
|
240
|
+
})
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return _codec
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export const encode = (obj: Partial<DialResponse>): Uint8Array => {
|
|
247
|
+
return encodeMessage(obj, DialResponse.codec())
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList): DialResponse => {
|
|
251
|
+
return decodeMessage(buf, DialResponse.codec())
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
let _codec: Codec<Message>
|
|
256
|
+
|
|
257
|
+
export const codec = (): Codec<Message> => {
|
|
258
|
+
if (_codec == null) {
|
|
259
|
+
_codec = message<Message>((obj, w, opts = {}) => {
|
|
260
|
+
if (opts.lengthDelimited !== false) {
|
|
261
|
+
w.fork()
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (obj.type != null) {
|
|
265
|
+
w.uint32(8)
|
|
266
|
+
Message.MessageType.codec().encode(obj.type, w)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (obj.dial != null) {
|
|
270
|
+
w.uint32(18)
|
|
271
|
+
Message.Dial.codec().encode(obj.dial, w)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (obj.dialResponse != null) {
|
|
275
|
+
w.uint32(26)
|
|
276
|
+
Message.DialResponse.codec().encode(obj.dialResponse, w)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (opts.lengthDelimited !== false) {
|
|
280
|
+
w.ldelim()
|
|
281
|
+
}
|
|
282
|
+
}, (reader, length) => {
|
|
283
|
+
const obj: any = {}
|
|
284
|
+
|
|
285
|
+
const end = length == null ? reader.len : reader.pos + length
|
|
286
|
+
|
|
287
|
+
while (reader.pos < end) {
|
|
288
|
+
const tag = reader.uint32()
|
|
289
|
+
|
|
290
|
+
switch (tag >>> 3) {
|
|
291
|
+
case 1:
|
|
292
|
+
obj.type = Message.MessageType.codec().decode(reader)
|
|
293
|
+
break
|
|
294
|
+
case 2:
|
|
295
|
+
obj.dial = Message.Dial.codec().decode(reader, reader.uint32())
|
|
296
|
+
break
|
|
297
|
+
case 3:
|
|
298
|
+
obj.dialResponse = Message.DialResponse.codec().decode(reader, reader.uint32())
|
|
299
|
+
break
|
|
300
|
+
default:
|
|
301
|
+
reader.skipType(tag & 7)
|
|
302
|
+
break
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return obj
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return _codec
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export const encode = (obj: Partial<Message>): Uint8Array => {
|
|
314
|
+
return encodeMessage(obj, Message.codec())
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList): Message => {
|
|
318
|
+
return decodeMessage(buf, Message.codec())
|
|
319
|
+
}
|
|
320
|
+
}
|
package/src/circuit/constants.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const second = 1000
|
|
2
|
+
const minute = 60 * second
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Delay before HOP relay service is advertised on the network
|
|
@@ -21,17 +22,51 @@ export const CIRCUIT_PROTO_CODE = 290
|
|
|
21
22
|
export const RELAY_RENDEZVOUS_NS = '/libp2p/relay'
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
|
-
*
|
|
25
|
+
* The maximum number of relay reservations the relay server will accept
|
|
25
26
|
*/
|
|
26
|
-
export const
|
|
27
|
+
export const DEFAULT_MAX_RESERVATION_STORE_SIZE = 15
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* How often to check for reservation expiry
|
|
31
|
+
*/
|
|
32
|
+
export const DEFAULT_MAX_RESERVATION_CLEAR_INTERVAL = 300 * second
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* How often to check for reservation expiry
|
|
36
|
+
*/
|
|
37
|
+
export const DEFAULT_MAX_RESERVATION_TTL = 2 * 60 * minute
|
|
38
|
+
|
|
39
|
+
export const DEFAULT_RESERVATION_CONCURRENCY = 1
|
|
40
|
+
|
|
41
|
+
export const RELAY_SOURCE_TAG = 'circuit-relay-source'
|
|
42
|
+
|
|
43
|
+
export const RELAY_TAG = 'circuit-relay-relay'
|
|
29
44
|
|
|
30
45
|
// circuit v2 connection limits
|
|
31
46
|
// https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go#L61-L66
|
|
32
47
|
|
|
33
48
|
// 2 min is the default connection duration
|
|
34
|
-
export const DEFAULT_DURATION_LIMIT = 2 *
|
|
49
|
+
export const DEFAULT_DURATION_LIMIT = 2 * minute
|
|
35
50
|
|
|
36
51
|
// 128k is the default data limit
|
|
37
52
|
export const DEFAULT_DATA_LIMIT = BigInt(1 << 17)
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The hop protocol
|
|
56
|
+
*/
|
|
57
|
+
export const RELAY_V2_HOP_CODEC = '/libp2p/circuit/relay/0.2.0/hop'
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* the stop protocol
|
|
61
|
+
*/
|
|
62
|
+
export const RELAY_V2_STOP_CODEC = '/libp2p/circuit/relay/0.2.0/stop'
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Hop messages must be exchanged inside this timeout
|
|
66
|
+
*/
|
|
67
|
+
export const DEFAULT_HOP_TIMEOUT = 30 * second
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* How long to wait before starting to advertise the relay service
|
|
71
|
+
*/
|
|
72
|
+
export const DEFAULT_ADVERT_BOOT_DELAY = 30 * second
|
package/src/circuit/index.ts
CHANGED
|
@@ -1,73 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
advertise: RelayAdvertiseConfig
|
|
11
|
-
hop: HopConfig
|
|
12
|
-
reservationManager: RelayReservationManagerConfig
|
|
1
|
+
import type { EventEmitter } from '@libp2p/interfaces/events'
|
|
2
|
+
import type { PeerMap } from '@libp2p/peer-collections'
|
|
3
|
+
import type { Limit } from './pb/index.js'
|
|
4
|
+
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
5
|
+
|
|
6
|
+
export interface RelayReservation {
|
|
7
|
+
expire: Date
|
|
8
|
+
addr: Multiaddr
|
|
9
|
+
limit?: Limit
|
|
13
10
|
}
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export interface RelayReservationManagerConfig {
|
|
20
|
-
/**
|
|
21
|
-
* enable or disable autorelay (default: false)
|
|
22
|
-
*/
|
|
23
|
-
enabled?: boolean
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* maximum number of relays to listen (default: 1)
|
|
27
|
-
*/
|
|
28
|
-
maxReservations?: number
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Configures using the node as a HOP relay
|
|
33
|
-
*/
|
|
34
|
-
export interface HopConfig {
|
|
35
|
-
/**
|
|
36
|
-
* If true this node will function as a limited relay (default: false)
|
|
37
|
-
*/
|
|
38
|
-
enabled?: boolean
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* timeout for hop requests to complete
|
|
42
|
-
*/
|
|
43
|
-
timeout: number
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* If false, no connection limits will be applied to relayed connections (default: true)
|
|
47
|
-
*/
|
|
48
|
-
applyConnectionLimits?: boolean
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Limits to apply to incoming relay connections - relayed connections will be closed if
|
|
52
|
-
* these limits are exceeded.
|
|
53
|
-
*/
|
|
54
|
-
limit?: {
|
|
55
|
-
/**
|
|
56
|
-
* How long to relay a connection for in milliseconds (default: 2m)
|
|
57
|
-
*/
|
|
58
|
-
duration?: number
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* How many bytes to allow to be transferred over a relayed connection (default: 128k)
|
|
62
|
-
*/
|
|
63
|
-
data?: bigint
|
|
64
|
-
}
|
|
12
|
+
export interface CircuitRelayServiceEvents {
|
|
13
|
+
'relay:reservation': CustomEvent<RelayReservation>
|
|
14
|
+
'relay:advert:success': CustomEvent<unknown>
|
|
15
|
+
'relay:advert:error': CustomEvent<Error>
|
|
65
16
|
}
|
|
66
17
|
|
|
67
|
-
export interface
|
|
68
|
-
|
|
69
|
-
enabled?: boolean
|
|
70
|
-
ttl?: number
|
|
18
|
+
export interface CircuitRelayService extends EventEmitter<CircuitRelayServiceEvents> {
|
|
19
|
+
reservations: PeerMap<RelayReservation>
|
|
71
20
|
}
|
|
72
21
|
|
|
73
|
-
export {
|
|
22
|
+
export { circuitRelayServer } from './server/index.js'
|
|
23
|
+
export { circuitRelayTransport } from './transport/index.js'
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger'
|
|
2
|
+
import { codes } from '../../errors.js'
|
|
3
|
+
import { namespaceToCid } from '../utils.js'
|
|
4
|
+
import {
|
|
5
|
+
DEFAULT_ADVERT_BOOT_DELAY,
|
|
6
|
+
RELAY_RENDEZVOUS_NS
|
|
7
|
+
} from '../constants.js'
|
|
8
|
+
import type { Startable } from '@libp2p/interfaces/startable'
|
|
9
|
+
import type { ContentRouting } from '@libp2p/interface-content-routing'
|
|
10
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
|
|
11
|
+
import pRetry from 'p-retry'
|
|
12
|
+
|
|
13
|
+
const log = logger('libp2p:circuit-relay:advert-service')
|
|
14
|
+
|
|
15
|
+
export interface AdvertServiceInit {
|
|
16
|
+
/**
|
|
17
|
+
* How long to wait after startup to begin advertising the service
|
|
18
|
+
* - if some configured content routers take a while to warm up (for
|
|
19
|
+
* example, the DHT needs some peers to be able to publish) this
|
|
20
|
+
* value should be high enough that they will have warmed up
|
|
21
|
+
*/
|
|
22
|
+
bootDelay?: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface AdvertServiceComponents {
|
|
26
|
+
contentRouting: ContentRouting
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface AdvertServiceEvents {
|
|
30
|
+
'advert:success': CustomEvent<unknown>
|
|
31
|
+
'advert:error': CustomEvent<Error>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class AdvertService extends EventEmitter<AdvertServiceEvents> implements Startable {
|
|
35
|
+
private readonly contentRouting: ContentRouting
|
|
36
|
+
private timeout?: any
|
|
37
|
+
private started: boolean
|
|
38
|
+
private readonly bootDelay: number
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Creates an instance of Relay
|
|
42
|
+
*/
|
|
43
|
+
constructor (components: AdvertServiceComponents, init?: AdvertServiceInit) {
|
|
44
|
+
super()
|
|
45
|
+
|
|
46
|
+
this.contentRouting = components.contentRouting
|
|
47
|
+
this.bootDelay = init?.bootDelay ?? DEFAULT_ADVERT_BOOT_DELAY
|
|
48
|
+
this.started = false
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
isStarted (): boolean {
|
|
52
|
+
return this.started
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Start Relay service
|
|
57
|
+
*/
|
|
58
|
+
start (): void {
|
|
59
|
+
if (this.started) {
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Advertise service if HOP enabled and advertising enabled
|
|
64
|
+
this.timeout = setTimeout(() => {
|
|
65
|
+
this._advertiseService().catch(err => {
|
|
66
|
+
log.error('could not advertise service', err)
|
|
67
|
+
})
|
|
68
|
+
}, this.bootDelay)
|
|
69
|
+
|
|
70
|
+
this.started = true
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Stop Relay service
|
|
75
|
+
*/
|
|
76
|
+
stop (): void {
|
|
77
|
+
try {
|
|
78
|
+
clearTimeout(this.timeout)
|
|
79
|
+
} catch (err) { }
|
|
80
|
+
|
|
81
|
+
this.started = false
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Advertise hop relay service in the network.
|
|
86
|
+
*/
|
|
87
|
+
async _advertiseService (): Promise<void> {
|
|
88
|
+
await pRetry(async () => {
|
|
89
|
+
try {
|
|
90
|
+
const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
|
|
91
|
+
await this.contentRouting.provide(cid)
|
|
92
|
+
|
|
93
|
+
this.dispatchEvent(new CustomEvent('advert:success'))
|
|
94
|
+
} catch (err: any) {
|
|
95
|
+
this.safeDispatchEvent('advert:error', { detail: err })
|
|
96
|
+
|
|
97
|
+
if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
|
|
98
|
+
log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
|
|
99
|
+
this.stop()
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
log.error('could not advertise service', err)
|
|
104
|
+
throw err
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
}
|