libp2p 0.42.2 → 0.43.0
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/README.md +4 -4
- package/dist/index.min.js +29 -29
- 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 +31 -6
- package/dist/src/circuit/constants.d.ts.map +1 -1
- package/dist/src/circuit/constants.js +37 -7
- 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 -68
- package/dist/src/circuit/index.js.map +1 -1
- package/dist/src/circuit/pb/index.d.ts +83 -43
- package/dist/src/circuit/pb/index.d.ts.map +1 -1
- package/dist/src/circuit/pb/index.js +363 -127
- package/dist/src/circuit/pb/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/server/reservation-store.d.ts +49 -0
- 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 +18 -0
- package/dist/src/circuit/server/reservation-voucher.d.ts.map +1 -0
- package/dist/src/circuit/server/reservation-voucher.js +33 -0
- 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 +7 -0
- package/dist/src/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/utils.js +87 -0
- 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 +13 -13
- package/dist/src/components.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +21 -25
- 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 +4 -4
- 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 +18 -18
- package/dist/src/connection-manager/auto-dialler.js.map +1 -1
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/dial-request.js +13 -6
- package/dist/src/connection-manager/dialer/dial-request.js.map +1 -1
- package/dist/src/connection-manager/dialer/index.d.ts +10 -1
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -1
- package/dist/src/connection-manager/dialer/index.js +24 -9
- package/dist/src/connection-manager/dialer/index.js.map +1 -1
- package/dist/src/connection-manager/index.d.ts +1 -4
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +8 -5
- 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 +9 -9
- 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/content-routing/utils.js +2 -2
- package/dist/src/content-routing/utils.js.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 +2 -2
- 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 +2 -2
- 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/dht/dummy-dht.js +12 -12
- package/dist/src/dht/dummy-dht.js.map +1 -1
- package/dist/src/errors.d.ts +2 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +6 -6
- package/dist/src/fetch/index.js.map +1 -1
- package/dist/src/fetch/pb/proto.d.ts +3 -3
- package/dist/src/fetch/pb/proto.d.ts.map +1 -1
- package/dist/src/fetch/pb/proto.js +4 -3
- package/dist/src/fetch/pb/proto.js.map +1 -1
- package/dist/src/get-peer.js +2 -2
- package/dist/src/get-peer.js.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 +19 -14
- package/dist/src/identify/index.js.map +1 -1
- package/dist/src/identify/pb/message.d.ts +2 -2
- package/dist/src/identify/pb/message.d.ts.map +1 -1
- package/dist/src/identify/pb/message.js +1 -0
- package/dist/src/identify/pb/message.js.map +1 -1
- package/dist/src/index.d.ts +14 -8
- 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/insecure/pb/proto.d.ts +3 -3
- package/dist/src/insecure/pb/proto.d.ts.map +1 -1
- package/dist/src/insecure/pb/proto.js +4 -5
- package/dist/src/insecure/pb/proto.js.map +1 -1
- package/dist/src/libp2p.d.ts +7 -3
- package/dist/src/libp2p.d.ts.map +1 -1
- package/dist/src/libp2p.js +35 -35
- package/dist/src/libp2p.js.map +1 -1
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +5 -3
- 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/peer-routing.js +5 -5
- package/dist/src/peer-routing.js.map +1 -1
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +2 -2
- package/dist/src/ping/index.js.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/index.js +3 -3
- package/dist/src/pnet/index.js.map +1 -1
- package/dist/src/pnet/key-generator.d.ts.map +1 -1
- package/dist/src/pubsub/dummy-pubsub.js +9 -9
- package/dist/src/pubsub/dummy-pubsub.js.map +1 -1
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +4 -4
- package/dist/src/registrar.js.map +1 -1
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +8 -9
- 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 +38 -33
- package/dist/src/upgrader.js.map +1 -1
- package/dist/typedoc-urls.json +19 -6
- package/package.json +36 -33
- 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 +48 -7
- package/src/circuit/index.ts +17 -129
- package/src/circuit/pb/index.proto +57 -32
- package/src/circuit/pb/index.ts +448 -138
- 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/server/reservation-voucher.ts +51 -0
- 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 +108 -0
- package/src/components.ts +22 -21
- package/src/config.ts +21 -25
- package/src/connection/index.ts +10 -10
- package/src/connection-manager/auto-dialler.ts +36 -40
- package/src/connection-manager/dialer/dial-request.ts +13 -6
- package/src/connection-manager/dialer/index.ts +34 -15
- package/src/connection-manager/index.ts +22 -23
- 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 +18 -16
- package/src/content-routing/utils.ts +5 -5
- package/src/dht/dht-content-routing.ts +5 -4
- package/src/dht/dht-peer-routing.ts +5 -4
- package/src/dht/dummy-dht.ts +13 -13
- package/src/errors.ts +2 -1
- package/src/fetch/index.ts +13 -13
- package/src/fetch/pb/proto.ts +8 -7
- package/src/get-peer.ts +3 -3
- package/src/identify/index.ts +29 -24
- package/src/identify/pb/message.ts +3 -2
- package/src/index.ts +15 -8
- package/src/insecure/index.ts +2 -1
- package/src/insecure/pb/proto.ts +8 -9
- package/src/libp2p.ts +52 -46
- package/src/nat-manager.ts +11 -9
- package/src/peer-record-updater.ts +4 -4
- package/src/peer-routing.ts +9 -9
- package/src/ping/index.ts +6 -6
- package/src/pnet/crypto.ts +3 -3
- package/src/pnet/index.ts +3 -3
- package/src/pnet/key-generator.ts +1 -1
- package/src/pubsub/dummy-pubsub.ts +9 -9
- package/src/registrar.ts +12 -12
- package/src/transport-manager.ts +17 -18
- package/src/upgrader.ts +43 -42
- package/src/version.ts +1 -1
- package/dist/src/circuit/auto-relay.d.ts +0 -46
- package/dist/src/circuit/auto-relay.d.ts.map +0 -1
- package/dist/src/circuit/auto-relay.js +0 -220
- package/dist/src/circuit/auto-relay.js.map +0 -1
- package/dist/src/circuit/circuit/hop.d.ts +0 -42
- package/dist/src/circuit/circuit/hop.d.ts.map +0 -1
- package/dist/src/circuit/circuit/hop.js +0 -142
- package/dist/src/circuit/circuit/hop.js.map +0 -1
- package/dist/src/circuit/circuit/stop.d.ts +0 -24
- package/dist/src/circuit/circuit/stop.d.ts.map +0 -1
- package/dist/src/circuit/circuit/stop.js +0 -51
- package/dist/src/circuit/circuit/stop.js.map +0 -1
- package/dist/src/circuit/circuit/stream-handler.d.ts +0 -40
- package/dist/src/circuit/circuit/stream-handler.d.ts.map +0 -1
- package/dist/src/circuit/circuit/stream-handler.js +0 -59
- package/dist/src/circuit/circuit/stream-handler.js.map +0 -1
- package/dist/src/circuit/circuit/utils.d.ts +0 -7
- package/dist/src/circuit/circuit/utils.d.ts.map +0 -1
- package/dist/src/circuit/circuit/utils.js +0 -43
- package/dist/src/circuit/circuit/utils.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 -2
- package/dist/src/circuit/multicodec.d.ts.map +0 -1
- package/dist/src/circuit/multicodec.js +0 -2
- package/dist/src/circuit/multicodec.js.map +0 -1
- package/dist/src/circuit/transport.d.ts +0 -51
- package/dist/src/circuit/transport.d.ts.map +0 -1
- package/dist/src/circuit/transport.js +0 -223
- package/dist/src/circuit/transport.js.map +0 -1
- package/dist/src/keychain/cms.d.ts +0 -33
- package/dist/src/keychain/cms.d.ts.map +0 -1
- package/dist/src/keychain/cms.js +0 -129
- package/dist/src/keychain/cms.js.map +0 -1
- package/dist/src/keychain/index.d.ts +0 -151
- package/dist/src/keychain/index.d.ts.map +0 -1
- package/dist/src/keychain/index.js +0 -519
- package/dist/src/keychain/index.js.map +0 -1
- package/dist/src/keychain/util.d.ts +0 -21
- package/dist/src/keychain/util.d.ts.map +0 -1
- package/dist/src/keychain/util.js +0 -79
- package/dist/src/keychain/util.js.map +0 -1
- package/src/circuit/IMPLEMENTATION_NOTES.md +0 -128
- package/src/circuit/README.md +0 -111
- package/src/circuit/auto-relay.ts +0 -292
- package/src/circuit/circuit/hop.ts +0 -220
- package/src/circuit/circuit/stop.ts +0 -83
- package/src/circuit/circuit/stream-handler.ts +0 -87
- package/src/circuit/circuit/utils.ts +0 -44
- package/src/circuit/listener.ts +0 -83
- package/src/circuit/multicodec.ts +0 -2
- package/src/circuit/transport.ts +0 -278
- package/src/keychain/README.md +0 -55
- package/src/keychain/cms.ts +0 -150
- package/src/keychain/doc/private-key.png +0 -0
- package/src/keychain/doc/private-key.xml +0 -1
- package/src/keychain/index.ts +0 -629
- package/src/keychain/util.ts +0 -82
|
@@ -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
|
|
@@ -16,16 +17,56 @@ export const ADVERTISE_TTL = 30 * minute
|
|
|
16
17
|
export const CIRCUIT_PROTO_CODE = 290
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
+
* Relay HOP relay service namespace for discovery
|
|
20
21
|
*/
|
|
21
|
-
export const
|
|
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
|
/**
|
|
29
|
-
*
|
|
30
|
+
* How often to check for reservation expiry
|
|
30
31
|
*/
|
|
31
|
-
export const
|
|
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'
|
|
44
|
+
|
|
45
|
+
// circuit v2 connection limits
|
|
46
|
+
// https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go#L61-L66
|
|
47
|
+
|
|
48
|
+
// 2 min is the default connection duration
|
|
49
|
+
export const DEFAULT_DURATION_LIMIT = 2 * minute
|
|
50
|
+
|
|
51
|
+
// 128k is the default data limit
|
|
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,135 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
RELAY_RENDEZVOUS_NS
|
|
12
|
-
} from './constants.js'
|
|
13
|
-
import type { AddressSorter, PeerStore } from '@libp2p/interface-peer-store'
|
|
14
|
-
import type { Startable } from '@libp2p/interfaces/startable'
|
|
15
|
-
import type { ContentRouting } from '@libp2p/interface-content-routing'
|
|
16
|
-
import type { ConnectionManager } from '@libp2p/interface-connection-manager'
|
|
17
|
-
import type { TransportManager } from '@libp2p/interface-transport'
|
|
18
|
-
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
19
|
-
import type { StreamHandlerOptions } from '@libp2p/interface-registrar'
|
|
20
|
-
|
|
21
|
-
export interface RelayConfig extends StreamHandlerOptions {
|
|
22
|
-
enabled: boolean
|
|
23
|
-
advertise: RelayAdvertiseConfig
|
|
24
|
-
hop: HopConfig
|
|
25
|
-
autoRelay: AutoRelayConfig
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface HopConfig {
|
|
29
|
-
enabled?: boolean
|
|
30
|
-
active?: boolean
|
|
31
|
-
timeout: number
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const log = logger('libp2p:relay')
|
|
35
|
-
|
|
36
|
-
export interface RelayAdvertiseConfig {
|
|
37
|
-
bootDelay?: number
|
|
38
|
-
enabled?: boolean
|
|
39
|
-
ttl?: number
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface AutoRelayConfig {
|
|
43
|
-
enabled?: boolean
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* maximum number of relays to listen
|
|
47
|
-
*/
|
|
48
|
-
maxListeners: number
|
|
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
|
|
49
10
|
}
|
|
50
11
|
|
|
51
|
-
export interface
|
|
52
|
-
|
|
12
|
+
export interface CircuitRelayServiceEvents {
|
|
13
|
+
'relay:reservation': CustomEvent<RelayReservation>
|
|
14
|
+
'relay:advert:success': CustomEvent<unknown>
|
|
15
|
+
'relay:advert:error': CustomEvent<Error>
|
|
53
16
|
}
|
|
54
17
|
|
|
55
|
-
export interface
|
|
56
|
-
|
|
57
|
-
contentRouting: ContentRouting
|
|
58
|
-
peerStore: PeerStore
|
|
59
|
-
connectionManager: ConnectionManager
|
|
60
|
-
transportManager: TransportManager
|
|
18
|
+
export interface CircuitRelayService extends EventEmitter<CircuitRelayServiceEvents> {
|
|
19
|
+
reservations: PeerMap<RelayReservation>
|
|
61
20
|
}
|
|
62
21
|
|
|
63
|
-
export
|
|
64
|
-
|
|
65
|
-
private readonly init: RelayInit
|
|
66
|
-
// @ts-expect-error this field isn't used anywhere?
|
|
67
|
-
private readonly autoRelay?: AutoRelay
|
|
68
|
-
private timeout?: any
|
|
69
|
-
private started: boolean
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Creates an instance of Relay
|
|
73
|
-
*/
|
|
74
|
-
constructor (components: RelayComponents, init: RelayInit) {
|
|
75
|
-
this.components = components
|
|
76
|
-
// Create autoRelay if enabled
|
|
77
|
-
this.autoRelay = init.autoRelay?.enabled !== false
|
|
78
|
-
? new AutoRelay(components, {
|
|
79
|
-
addressSorter: init.addressSorter,
|
|
80
|
-
...init.autoRelay
|
|
81
|
-
})
|
|
82
|
-
: undefined
|
|
83
|
-
|
|
84
|
-
this.started = false
|
|
85
|
-
this.init = init
|
|
86
|
-
this._advertiseService = this._advertiseService.bind(this)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
isStarted () {
|
|
90
|
-
return this.started
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Start Relay service
|
|
95
|
-
*/
|
|
96
|
-
async start () {
|
|
97
|
-
// Advertise service if HOP enabled
|
|
98
|
-
if (this.init.hop.enabled !== false && this.init.advertise.enabled !== false) {
|
|
99
|
-
this.timeout = setDelayedInterval(
|
|
100
|
-
this._advertiseService, this.init.advertise.ttl, this.init.advertise.bootDelay
|
|
101
|
-
)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
this.started = true
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Stop Relay service
|
|
109
|
-
*/
|
|
110
|
-
async stop () {
|
|
111
|
-
if (this.timeout != null) {
|
|
112
|
-
clearDelayedInterval(this.timeout)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
this.started = false
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Advertise hop relay service in the network.
|
|
120
|
-
*/
|
|
121
|
-
async _advertiseService () {
|
|
122
|
-
try {
|
|
123
|
-
const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
|
|
124
|
-
await this.components.contentRouting.provide(cid)
|
|
125
|
-
} catch (err: any) {
|
|
126
|
-
if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
|
|
127
|
-
log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
|
|
128
|
-
// Stop the advertise
|
|
129
|
-
await this.stop()
|
|
130
|
-
} else {
|
|
131
|
-
log.error(err)
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
22
|
+
export { circuitRelayServer } from './server/index.js'
|
|
23
|
+
export { circuitRelayTransport } from './transport/index.js'
|
|
@@ -1,42 +1,67 @@
|
|
|
1
1
|
syntax = "proto3";
|
|
2
2
|
|
|
3
|
-
message
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
HOP_DST_ADDR_TOO_LONG = 221;
|
|
9
|
-
HOP_SRC_MULTIADDR_INVALID = 250;
|
|
10
|
-
HOP_DST_MULTIADDR_INVALID = 251;
|
|
11
|
-
HOP_NO_CONN_TO_DST = 260;
|
|
12
|
-
HOP_CANT_DIAL_DST = 261;
|
|
13
|
-
HOP_CANT_OPEN_DST_STREAM = 262;
|
|
14
|
-
HOP_CANT_SPEAK_RELAY = 270;
|
|
15
|
-
HOP_CANT_RELAY_TO_SELF = 280;
|
|
16
|
-
STOP_SRC_ADDR_TOO_LONG = 320;
|
|
17
|
-
STOP_DST_ADDR_TOO_LONG = 321;
|
|
18
|
-
STOP_SRC_MULTIADDR_INVALID = 350;
|
|
19
|
-
STOP_DST_MULTIADDR_INVALID = 351;
|
|
20
|
-
STOP_RELAY_REFUSED = 390;
|
|
21
|
-
MALFORMED_MESSAGE = 400;
|
|
3
|
+
message HopMessage {
|
|
4
|
+
enum Type {
|
|
5
|
+
RESERVE = 0;
|
|
6
|
+
CONNECT = 1;
|
|
7
|
+
STATUS = 2;
|
|
22
8
|
}
|
|
23
9
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
10
|
+
// the presence of this field is enforced at application level
|
|
11
|
+
optional Type type = 1;
|
|
12
|
+
|
|
13
|
+
optional Peer peer = 2;
|
|
14
|
+
optional Reservation reservation = 3;
|
|
15
|
+
optional Limit limit = 4;
|
|
16
|
+
|
|
17
|
+
optional Status status = 5;
|
|
18
|
+
}
|
|
30
19
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
20
|
+
message StopMessage {
|
|
21
|
+
enum Type {
|
|
22
|
+
CONNECT = 0;
|
|
23
|
+
STATUS = 1;
|
|
34
24
|
}
|
|
35
25
|
|
|
36
|
-
|
|
26
|
+
// the presence of this field is enforced at application level
|
|
27
|
+
optional Type type = 1;
|
|
28
|
+
|
|
29
|
+
optional Peer peer = 2;
|
|
30
|
+
optional Limit limit = 3;
|
|
31
|
+
|
|
32
|
+
optional Status status = 4;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
message Peer {
|
|
36
|
+
bytes id = 1;
|
|
37
|
+
repeated bytes addrs = 2;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
message Reservation {
|
|
41
|
+
uint64 expire = 1; // Unix expiration time (UTC)
|
|
42
|
+
repeated bytes addrs = 2; // relay addrs for reserving peer
|
|
43
|
+
optional bytes voucher = 3; // reservation voucher
|
|
44
|
+
}
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
optional
|
|
46
|
+
message Limit {
|
|
47
|
+
optional uint32 duration = 1; // seconds
|
|
48
|
+
optional uint64 data = 2; // bytes
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
enum Status {
|
|
52
|
+
UNUSED = 0;
|
|
53
|
+
OK = 100;
|
|
54
|
+
RESERVATION_REFUSED = 200;
|
|
55
|
+
RESOURCE_LIMIT_EXCEEDED = 201;
|
|
56
|
+
PERMISSION_DENIED = 202;
|
|
57
|
+
CONNECTION_FAILED = 203;
|
|
58
|
+
NO_RESERVATION = 204;
|
|
59
|
+
MALFORMED_MESSAGE = 400;
|
|
60
|
+
UNEXPECTED_MESSAGE = 401;
|
|
61
|
+
}
|
|
40
62
|
|
|
41
|
-
|
|
63
|
+
message ReservationVoucher {
|
|
64
|
+
bytes relay = 1;
|
|
65
|
+
bytes peer = 2;
|
|
66
|
+
uint64 expiration = 3;
|
|
42
67
|
}
|