libp2p 0.36.2 → 0.37.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/LICENSE +3 -21
- package/README.md +13 -10
- package/dist/src/address-manager/index.d.ts +34 -52
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +81 -0
- package/dist/src/address-manager/index.js.map +1 -0
- package/dist/src/circuit/auto-relay.d.ts +24 -85
- package/dist/src/circuit/auto-relay.d.ts.map +1 -1
- package/dist/src/circuit/auto-relay.js +216 -0
- package/dist/src/circuit/auto-relay.js.map +1 -0
- package/dist/src/circuit/circuit/hop.d.ts +26 -53
- package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/hop.js +138 -0
- package/dist/src/circuit/circuit/hop.js.map +1 -0
- package/dist/src/circuit/circuit/stop.d.ts +18 -10
- package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stop.js +49 -0
- package/dist/src/circuit/circuit/stop.js.map +1 -0
- package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
- package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stream-handler.js +59 -0
- package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
- package/dist/src/circuit/circuit/utils.d.ts +3 -6
- package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/circuit/utils.js +43 -0
- package/dist/src/circuit/circuit/utils.js.map +1 -0
- package/dist/src/circuit/constants.d.ts +24 -6
- package/dist/src/circuit/constants.d.ts.map +1 -1
- package/dist/src/circuit/constants.js +26 -0
- package/dist/src/circuit/constants.js.map +1 -0
- package/dist/src/circuit/index.d.ts +41 -74
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/index.js +69 -0
- package/dist/src/circuit/index.js.map +1 -0
- package/dist/src/circuit/listener.d.ts +8 -3
- package/dist/src/circuit/listener.d.ts.map +1 -1
- package/dist/src/circuit/listener.js +62 -0
- package/dist/src/circuit/listener.js.map +1 -0
- package/dist/src/circuit/multicodec.d.ts +1 -1
- package/dist/src/circuit/multicodec.d.ts.map +1 -1
- package/dist/src/circuit/multicodec.js +2 -0
- package/dist/src/circuit/multicodec.js.map +1 -0
- package/dist/src/circuit/pb/index.d.ts +52 -0
- package/dist/src/circuit/pb/index.d.ts.map +1 -0
- package/dist/src/circuit/pb/index.js +98 -0
- package/dist/src/circuit/pb/index.js.map +1 -0
- package/dist/src/circuit/transport.d.ts +18 -78
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/circuit/transport.js +192 -0
- package/dist/src/circuit/transport.js.map +1 -0
- package/dist/src/circuit/utils.d.ts +5 -2
- package/dist/src/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/utils.js +11 -0
- package/dist/src/circuit/utils.js.map +1 -0
- package/dist/src/config.d.ts +3 -85
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +91 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dialler.js +105 -0
- package/dist/src/connection-manager/auto-dialler.js.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.js +83 -0
- package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
- package/dist/src/connection-manager/dialer/index.d.ts +104 -0
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/index.js +267 -0
- package/dist/src/connection-manager/dialer/index.js.map +1 -0
- package/dist/src/connection-manager/index.d.ts +102 -136
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +333 -0
- package/dist/src/connection-manager/index.js.map +1 -0
- package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
- package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
- package/dist/src/connection-manager/latency-monitor.js +220 -0
- package/dist/src/connection-manager/latency-monitor.js.map +1 -0
- package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
- package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
- package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
- package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
- package/dist/src/constants.d.ts +22 -10
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +27 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/content-routing/index.d.ts +27 -81
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +99 -0
- package/dist/src/content-routing/index.js.map +1 -0
- package/dist/src/content-routing/utils.d.ts +6 -49
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/content-routing/utils.js +42 -0
- package/dist/src/content-routing/utils.js.map +1 -0
- package/dist/src/dht/dht-content-routing.d.ts +10 -24
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.js +32 -0
- package/dist/src/dht/dht-content-routing.js.map +1 -0
- package/dist/src/dht/dht-peer-routing.d.ts +9 -24
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-peer-routing.js +26 -0
- package/dist/src/dht/dht-peer-routing.js.map +1 -0
- package/dist/src/dht/dummy-dht.d.ts +20 -0
- package/dist/src/dht/dummy-dht.d.ts.map +1 -0
- package/dist/src/dht/dummy-dht.js +46 -0
- package/dist/src/dht/dummy-dht.js.map +1 -0
- package/dist/src/errors.d.ts +70 -63
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +75 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/fetch/constants.d.ts +1 -1
- package/dist/src/fetch/constants.d.ts.map +1 -1
- package/dist/src/fetch/constants.js +3 -0
- package/dist/src/fetch/constants.js.map +1 -0
- package/dist/src/fetch/index.d.ts +30 -49
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +129 -0
- package/dist/src/fetch/index.js.map +1 -0
- package/dist/src/fetch/pb/proto.d.ts +27 -0
- package/dist/src/fetch/pb/proto.d.ts.map +1 -0
- package/dist/src/fetch/pb/proto.js +50 -0
- package/dist/src/fetch/pb/proto.js.map +1 -0
- package/dist/src/get-peer.d.ts +4 -11
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +43 -0
- package/dist/src/get-peer.js.map +1 -0
- package/dist/src/identify/consts.d.ts +9 -9
- package/dist/src/identify/consts.d.ts.map +1 -1
- package/dist/src/identify/consts.js +11 -0
- package/dist/src/identify/consts.js.map +1 -0
- package/dist/src/identify/index.d.ts +42 -96
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +322 -0
- package/dist/src/identify/index.js.map +1 -0
- package/dist/src/identify/pb/message.d.ts +16 -0
- package/dist/src/identify/pb/message.d.ts.map +1 -0
- package/dist/src/identify/pb/message.js +24 -0
- package/dist/src/identify/pb/message.js.map +1 -0
- package/dist/src/index.d.ts +150 -496
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/insecure/index.d.ts +9 -0
- package/dist/src/insecure/index.d.ts.map +1 -0
- package/dist/src/insecure/index.js +81 -0
- package/dist/src/insecure/index.js.map +1 -0
- package/dist/src/insecure/pb/proto.d.ts +29 -0
- package/dist/src/insecure/pb/proto.d.ts.map +1 -0
- package/dist/src/insecure/pb/proto.js +53 -0
- package/dist/src/insecure/pb/proto.js.map +1 -0
- package/dist/src/keychain/cms.d.ts +6 -14
- package/dist/src/keychain/cms.d.ts.map +1 -1
- package/dist/src/keychain/cms.js +129 -0
- package/dist/src/keychain/cms.js.map +1 -0
- package/dist/src/keychain/index.d.ts +60 -81
- package/dist/src/keychain/index.d.ts.map +1 -1
- package/dist/src/keychain/index.js +492 -0
- package/dist/src/keychain/index.js.map +1 -0
- package/dist/src/keychain/util.d.ts +3 -6
- package/dist/src/keychain/util.d.ts.map +1 -1
- package/dist/src/keychain/util.js +79 -0
- package/dist/src/keychain/util.js.map +1 -0
- package/dist/src/libp2p.d.ts +80 -0
- package/dist/src/libp2p.d.ts.map +1 -0
- package/dist/src/libp2p.js +397 -0
- package/dist/src/libp2p.js.map +1 -0
- package/dist/src/metrics/index.d.ts +47 -104
- package/dist/src/metrics/index.d.ts.map +1 -1
- package/dist/src/metrics/index.js +231 -0
- package/dist/src/metrics/index.js.map +1 -0
- package/dist/src/metrics/moving-average.d.ts +14 -0
- package/dist/src/metrics/moving-average.d.ts.map +1 -0
- package/dist/src/metrics/moving-average.js +40 -0
- package/dist/src/metrics/moving-average.js.map +1 -0
- package/dist/src/metrics/stats.d.ts +41 -93
- package/dist/src/metrics/stats.d.ts.map +1 -1
- package/dist/src/metrics/stats.js +183 -0
- package/dist/src/metrics/stats.js.map +1 -0
- package/dist/src/nat-manager.d.ts +42 -99
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +114 -0
- package/dist/src/nat-manager.js.map +1 -0
- package/dist/src/peer-record-updater.d.ts +15 -0
- package/dist/src/peer-record-updater.d.ts.map +1 -0
- package/dist/src/peer-record-updater.js +44 -0
- package/dist/src/peer-record-updater.js.map +1 -0
- package/dist/src/peer-routing.d.ts +40 -84
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +108 -0
- package/dist/src/peer-routing.js.map +1 -0
- package/dist/src/ping/constants.d.ts +4 -4
- package/dist/src/ping/constants.d.ts.map +1 -1
- package/dist/src/ping/constants.js +5 -0
- package/dist/src/ping/constants.js.map +1 -0
- package/dist/src/ping/index.d.ts +17 -31
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +57 -0
- package/dist/src/ping/index.js.map +1 -0
- package/dist/src/pnet/crypto.d.ts +15 -5
- package/dist/src/pnet/crypto.d.ts.map +1 -1
- package/dist/src/pnet/crypto.js +60 -0
- package/dist/src/pnet/crypto.js.map +1 -0
- package/dist/src/pnet/errors.d.ts +5 -5
- package/dist/src/pnet/errors.d.ts.map +1 -1
- package/dist/src/pnet/errors.js +6 -0
- package/dist/src/pnet/errors.js.map +1 -0
- package/dist/src/pnet/index.d.ts +12 -20
- package/dist/src/pnet/index.d.ts.map +1 -1
- package/dist/src/pnet/index.js +67 -0
- package/dist/src/pnet/index.js.map +1 -0
- package/dist/src/pnet/key-generator.d.ts +3 -7
- package/dist/src/pnet/key-generator.d.ts.map +1 -1
- package/dist/src/pnet/key-generator.js +25 -0
- package/dist/src/pnet/key-generator.js.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.js +37 -0
- package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
- package/dist/src/registrar.d.ts +26 -65
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +144 -0
- package/dist/src/registrar.js.map +1 -0
- package/dist/src/transport-manager.d.ts +36 -82
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +223 -0
- package/dist/src/transport-manager.js.map +1 -0
- package/dist/src/upgrader.d.ts +49 -129
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +402 -0
- package/dist/src/upgrader.js.map +1 -0
- package/dist/src/version.d.ts +3 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +3 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +144 -201
- package/src/address-manager/index.ts +130 -0
- package/src/circuit/README.md +16 -11
- package/src/circuit/auto-relay.ts +286 -0
- package/src/circuit/circuit/hop.ts +211 -0
- package/src/circuit/circuit/stop.ts +78 -0
- package/src/circuit/circuit/stream-handler.ts +86 -0
- package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
- package/src/circuit/constants.ts +31 -0
- package/src/circuit/index.ts +120 -0
- package/src/circuit/listener.ts +82 -0
- package/src/circuit/multicodec.ts +2 -0
- package/src/circuit/{protocol → pb}/index.proto +1 -1
- package/src/circuit/pb/index.ts +117 -0
- package/src/circuit/transport.ts +219 -0
- package/src/circuit/utils.ts +12 -0
- package/src/config.ts +99 -0
- package/src/connection-manager/auto-dialler.ts +154 -0
- package/src/connection-manager/dialer/auto-dialer.ts +59 -0
- package/src/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
- package/src/connection-manager/dialer/index.ts +382 -0
- package/src/connection-manager/index.ts +508 -0
- package/src/connection-manager/latency-monitor.ts +319 -0
- package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
- package/src/constants.ts +31 -0
- package/src/content-routing/index.ts +144 -0
- package/src/content-routing/utils.ts +54 -0
- package/src/dht/dht-content-routing.ts +43 -0
- package/src/dht/dht-peer-routing.ts +35 -0
- package/src/dht/dummy-dht.ts +60 -0
- package/src/errors.ts +73 -0
- package/src/fetch/README.md +1 -1
- package/src/fetch/constants.ts +3 -0
- package/src/fetch/index.ts +167 -0
- package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
- package/src/fetch/pb/proto.ts +65 -0
- package/src/get-peer.ts +57 -0
- package/src/identify/consts.ts +13 -0
- package/src/identify/index.ts +445 -0
- package/src/identify/{message.proto → pb/message.proto} +0 -0
- package/src/identify/pb/message.ts +37 -0
- package/src/index.ts +220 -0
- package/src/insecure/index.ts +101 -0
- package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
- package/src/insecure/pb/proto.ts +68 -0
- package/src/keychain/{cms.js → cms.ts} +62 -58
- package/src/keychain/index.ts +587 -0
- package/src/keychain/{util.js → util.ts} +7 -17
- package/src/libp2p.ts +538 -0
- package/src/metrics/index.ts +310 -0
- package/src/metrics/moving-average.ts +53 -0
- package/src/metrics/stats.ts +238 -0
- package/src/nat-manager.ts +194 -0
- package/src/peer-record-updater.ts +55 -0
- package/src/peer-routing.ts +186 -0
- package/src/ping/README.md +1 -1
- package/src/ping/constants.ts +5 -0
- package/src/ping/index.ts +84 -0
- package/src/pnet/README.md +2 -2
- package/src/pnet/crypto.ts +67 -0
- package/src/pnet/errors.ts +5 -0
- package/src/pnet/index.ts +97 -0
- package/src/pnet/key-generator.ts +28 -0
- package/src/pubsub/dummy-pubsub.ts +51 -0
- package/src/registrar.ts +189 -0
- package/src/transport-manager.ts +281 -0
- package/src/upgrader.ts +499 -0
- package/src/version.ts +3 -0
- package/dist/index.min.js +0 -55
- package/dist/src/circuit/protocol/index.d.ts +0 -173
- package/dist/src/dialer/dial-request.d.ts +0 -55
- package/dist/src/dialer/dial-request.d.ts.map +0 -1
- package/dist/src/dialer/index.d.ts +0 -182
- package/dist/src/dialer/index.d.ts.map +0 -1
- package/dist/src/fetch/proto.d.ts +0 -134
- package/dist/src/identify/message.d.ts +0 -95
- package/dist/src/insecure/plaintext.d.ts +0 -12
- package/dist/src/insecure/plaintext.d.ts.map +0 -1
- package/dist/src/insecure/proto.d.ts +0 -128
- package/dist/src/metrics/old-peers.d.ts +0 -3
- package/dist/src/metrics/old-peers.d.ts.map +0 -1
- package/dist/src/metrics/tracked-map.d.ts +0 -8
- package/dist/src/metrics/tracked-map.d.ts.map +0 -1
- package/dist/src/peer-store/address-book.d.ts +0 -67
- package/dist/src/peer-store/address-book.d.ts.map +0 -1
- package/dist/src/peer-store/index.d.ts +0 -58
- package/dist/src/peer-store/index.d.ts.map +0 -1
- package/dist/src/peer-store/key-book.d.ts +0 -40
- package/dist/src/peer-store/key-book.d.ts.map +0 -1
- package/dist/src/peer-store/metadata-book.d.ts +0 -58
- package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
- package/dist/src/peer-store/pb/peer.d.ts +0 -222
- package/dist/src/peer-store/proto-book.d.ts +0 -43
- package/dist/src/peer-store/proto-book.d.ts.map +0 -1
- package/dist/src/peer-store/store.d.ts +0 -73
- package/dist/src/peer-store/store.d.ts.map +0 -1
- package/dist/src/peer-store/types.d.ts +0 -202
- package/dist/src/peer-store/types.d.ts.map +0 -1
- package/dist/src/ping/util.d.ts +0 -5
- package/dist/src/ping/util.d.ts.map +0 -1
- package/dist/src/pubsub-adapter.d.ts +0 -22
- package/dist/src/pubsub-adapter.d.ts.map +0 -1
- package/dist/src/record/envelope/envelope.d.ts +0 -77
- package/dist/src/record/envelope/index.d.ts +0 -80
- package/dist/src/record/envelope/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/consts.d.ts +0 -4
- package/dist/src/record/peer-record/consts.d.ts.map +0 -1
- package/dist/src/record/peer-record/index.d.ts +0 -60
- package/dist/src/record/peer-record/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/peer-record.d.ts +0 -133
- package/dist/src/record/utils.d.ts +0 -12
- package/dist/src/record/utils.d.ts.map +0 -1
- package/dist/src/types.d.ts +0 -90
- package/dist/src/types.d.ts.map +0 -1
- package/src/address-manager/index.js +0 -96
- package/src/circuit/auto-relay.js +0 -302
- package/src/circuit/circuit/hop.js +0 -205
- package/src/circuit/circuit/stop.js +0 -81
- package/src/circuit/circuit/stream-handler.js +0 -94
- package/src/circuit/constants.js +0 -12
- package/src/circuit/index.js +0 -102
- package/src/circuit/listener.js +0 -75
- package/src/circuit/multicodec.js +0 -5
- package/src/circuit/protocol/index.d.ts +0 -173
- package/src/circuit/protocol/index.js +0 -530
- package/src/circuit/transport.js +0 -229
- package/src/circuit/utils.js +0 -17
- package/src/config.js +0 -114
- package/src/connection-manager/auto-dialler.js +0 -132
- package/src/connection-manager/index.js +0 -374
- package/src/connection-manager/latency-monitor.js +0 -264
- package/src/constants.js +0 -18
- package/src/content-routing/index.js +0 -163
- package/src/content-routing/utils.js +0 -89
- package/src/dht/dht-content-routing.js +0 -44
- package/src/dht/dht-peer-routing.js +0 -51
- package/src/dialer/index.js +0 -376
- package/src/errors.js +0 -66
- package/src/fetch/constants.js +0 -6
- package/src/fetch/index.js +0 -159
- package/src/fetch/proto.d.ts +0 -134
- package/src/fetch/proto.js +0 -333
- package/src/get-peer.js +0 -49
- package/src/identify/consts.js +0 -15
- package/src/identify/index.js +0 -384
- package/src/identify/message.d.ts +0 -95
- package/src/identify/message.js +0 -328
- package/src/index.js +0 -813
- package/src/insecure/plaintext.js +0 -95
- package/src/insecure/proto.d.ts +0 -128
- package/src/insecure/proto.js +0 -371
- package/src/keychain/index.js +0 -561
- package/src/metrics/index.js +0 -290
- package/src/metrics/old-peers.js +0 -16
- package/src/metrics/stats.js +0 -270
- package/src/metrics/tracked-map.js +0 -94
- package/src/nat-manager.js +0 -197
- package/src/peer-routing.js +0 -176
- package/src/peer-store/README.md +0 -145
- package/src/peer-store/address-book.js +0 -382
- package/src/peer-store/index.js +0 -121
- package/src/peer-store/key-book.js +0 -141
- package/src/peer-store/metadata-book.js +0 -250
- package/src/peer-store/pb/peer.d.ts +0 -222
- package/src/peer-store/pb/peer.js +0 -643
- package/src/peer-store/pb/peer.proto +0 -31
- package/src/peer-store/proto-book.js +0 -237
- package/src/peer-store/store.js +0 -263
- package/src/peer-store/types.ts +0 -245
- package/src/ping/constants.js +0 -8
- package/src/ping/index.js +0 -84
- package/src/ping/util.js +0 -18
- package/src/pnet/crypto.js +0 -84
- package/src/pnet/errors.js +0 -7
- package/src/pnet/index.js +0 -86
- package/src/pnet/key-generator.js +0 -33
- package/src/pubsub-adapter.js +0 -61
- package/src/record/README.md +0 -130
- package/src/record/envelope/envelope.d.ts +0 -77
- package/src/record/envelope/envelope.js +0 -243
- package/src/record/envelope/envelope.proto +0 -19
- package/src/record/envelope/index.js +0 -183
- package/src/record/peer-record/consts.js +0 -14
- package/src/record/peer-record/index.js +0 -113
- package/src/record/peer-record/peer-record.d.ts +0 -133
- package/src/record/peer-record/peer-record.js +0 -367
- package/src/record/peer-record/peer-record.proto +0 -18
- package/src/record/utils.js +0 -25
- package/src/registrar.js +0 -127
- package/src/transport-manager.js +0 -269
- package/src/types.ts +0 -98
- package/src/upgrader.js +0 -492
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:circuit:hop'), {
|
|
5
|
-
error: debug('libp2p:circuit:hop:err')
|
|
6
|
-
})
|
|
7
|
-
const errCode = require('err-code')
|
|
8
|
-
|
|
9
|
-
const PeerId = require('peer-id')
|
|
10
|
-
const { validateAddrs } = require('./utils')
|
|
11
|
-
const StreamHandler = require('./stream-handler')
|
|
12
|
-
const { CircuitRelay: CircuitPB } = require('../protocol')
|
|
13
|
-
const { pipe } = require('it-pipe')
|
|
14
|
-
const { codes: Errors } = require('../../errors')
|
|
15
|
-
|
|
16
|
-
const { stop } = require('./stop')
|
|
17
|
-
|
|
18
|
-
const multicodec = require('./../multicodec')
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @typedef {import('../protocol').ICircuitRelay} ICircuitRelay
|
|
22
|
-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
|
|
23
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
24
|
-
* @typedef {import('../transport')} Transport
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @typedef {Object} HopRequest
|
|
29
|
-
* @property {Connection} connection
|
|
30
|
-
* @property {ICircuitRelay} request
|
|
31
|
-
* @property {StreamHandler} streamHandler
|
|
32
|
-
* @property {Transport} circuit
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @param {HopRequest} options
|
|
37
|
-
* @returns {Promise<void>}
|
|
38
|
-
*/
|
|
39
|
-
async function handleHop ({
|
|
40
|
-
connection,
|
|
41
|
-
request,
|
|
42
|
-
streamHandler,
|
|
43
|
-
circuit
|
|
44
|
-
}) {
|
|
45
|
-
// Ensure hop is enabled
|
|
46
|
-
if (!circuit._options.hop.enabled) {
|
|
47
|
-
log('HOP request received but we are not acting as a relay')
|
|
48
|
-
return streamHandler.end({
|
|
49
|
-
type: CircuitPB.Type.STATUS,
|
|
50
|
-
code: CircuitPB.Status.HOP_CANT_SPEAK_RELAY
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Validate the HOP request has the required input
|
|
55
|
-
try {
|
|
56
|
-
validateAddrs(request, streamHandler)
|
|
57
|
-
} catch (/** @type {any} */ err) {
|
|
58
|
-
return log.error('invalid hop request via peer %s', connection.remotePeer.toB58String(), err)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (!request.dstPeer) {
|
|
62
|
-
log('HOP request received but we do not receive a dstPeer')
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Get the connection to the destination (stop) peer
|
|
67
|
-
const destinationPeer = new PeerId(request.dstPeer.id)
|
|
68
|
-
|
|
69
|
-
const destinationConnection = circuit._connectionManager.get(destinationPeer)
|
|
70
|
-
if (!destinationConnection && !circuit._options.hop.active) {
|
|
71
|
-
log('HOP request received but we are not connected to the destination peer')
|
|
72
|
-
return streamHandler.end({
|
|
73
|
-
type: CircuitPB.Type.STATUS,
|
|
74
|
-
code: CircuitPB.Status.HOP_NO_CONN_TO_DST
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// TODO: Handle being an active relay
|
|
79
|
-
if (!destinationConnection) {
|
|
80
|
-
return
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Handle the incoming HOP request by performing a STOP request
|
|
84
|
-
const stopRequest = {
|
|
85
|
-
type: CircuitPB.Type.STOP,
|
|
86
|
-
dstPeer: request.dstPeer,
|
|
87
|
-
srcPeer: request.srcPeer
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
let destinationStream
|
|
91
|
-
try {
|
|
92
|
-
destinationStream = await stop({
|
|
93
|
-
connection: destinationConnection,
|
|
94
|
-
request: stopRequest
|
|
95
|
-
})
|
|
96
|
-
} catch (/** @type {any} */ err) {
|
|
97
|
-
return log.error(err)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
log('hop request from %s is valid', connection.remotePeer.toB58String())
|
|
101
|
-
streamHandler.write({
|
|
102
|
-
type: CircuitPB.Type.STATUS,
|
|
103
|
-
code: CircuitPB.Status.SUCCESS
|
|
104
|
-
})
|
|
105
|
-
const sourceStream = streamHandler.rest()
|
|
106
|
-
|
|
107
|
-
// Short circuit the two streams to create the relayed connection
|
|
108
|
-
return pipe(
|
|
109
|
-
sourceStream,
|
|
110
|
-
destinationStream,
|
|
111
|
-
sourceStream
|
|
112
|
-
)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Performs a HOP request to a relay peer, to request a connection to another
|
|
117
|
-
* peer. A new, virtual, connection will be created between the two via the relay.
|
|
118
|
-
*
|
|
119
|
-
* @param {object} options
|
|
120
|
-
* @param {Connection} options.connection - Connection to the relay
|
|
121
|
-
* @param {ICircuitRelay} options.request
|
|
122
|
-
* @returns {Promise<MuxedStream>}
|
|
123
|
-
*/
|
|
124
|
-
async function hop ({
|
|
125
|
-
connection,
|
|
126
|
-
request
|
|
127
|
-
}) {
|
|
128
|
-
// Create a new stream to the relay
|
|
129
|
-
const { stream } = await connection.newStream([multicodec.relay])
|
|
130
|
-
// Send the HOP request
|
|
131
|
-
const streamHandler = new StreamHandler({ stream })
|
|
132
|
-
streamHandler.write(request)
|
|
133
|
-
|
|
134
|
-
const response = await streamHandler.read()
|
|
135
|
-
|
|
136
|
-
if (!response) {
|
|
137
|
-
throw errCode(new Error('HOP request had no response'), Errors.ERR_HOP_REQUEST_FAILED)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (response.code === CircuitPB.Status.SUCCESS) {
|
|
141
|
-
log('hop request was successful')
|
|
142
|
-
return streamHandler.rest()
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
log('hop request failed with code %d, closing stream', response.code)
|
|
146
|
-
streamHandler.close()
|
|
147
|
-
throw errCode(new Error(`HOP request failed with code ${response.code}`), Errors.ERR_HOP_REQUEST_FAILED)
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Performs a CAN_HOP request to a relay peer, in order to understand its capabilities.
|
|
152
|
-
*
|
|
153
|
-
* @param {object} options
|
|
154
|
-
* @param {Connection} options.connection - Connection to the relay
|
|
155
|
-
* @returns {Promise<boolean>}
|
|
156
|
-
*/
|
|
157
|
-
async function canHop ({
|
|
158
|
-
connection
|
|
159
|
-
}) {
|
|
160
|
-
// Create a new stream to the relay
|
|
161
|
-
const { stream } = await connection.newStream([multicodec.relay])
|
|
162
|
-
// Send the HOP request
|
|
163
|
-
const streamHandler = new StreamHandler({ stream })
|
|
164
|
-
streamHandler.write({
|
|
165
|
-
type: CircuitPB.Type.CAN_HOP
|
|
166
|
-
})
|
|
167
|
-
|
|
168
|
-
const response = await streamHandler.read()
|
|
169
|
-
await streamHandler.close()
|
|
170
|
-
|
|
171
|
-
if (!response || response.code !== CircuitPB.Status.SUCCESS) {
|
|
172
|
-
return false
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return true
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Creates an unencoded CAN_HOP response based on the Circuits configuration
|
|
180
|
-
*
|
|
181
|
-
* @param {Object} options
|
|
182
|
-
* @param {Connection} options.connection
|
|
183
|
-
* @param {StreamHandler} options.streamHandler
|
|
184
|
-
* @param {Transport} options.circuit
|
|
185
|
-
* @private
|
|
186
|
-
*/
|
|
187
|
-
function handleCanHop ({
|
|
188
|
-
connection,
|
|
189
|
-
streamHandler,
|
|
190
|
-
circuit
|
|
191
|
-
}) {
|
|
192
|
-
const canHop = circuit._options.hop.enabled
|
|
193
|
-
log('can hop (%s) request from %s', canHop, connection.remotePeer.toB58String())
|
|
194
|
-
streamHandler.end({
|
|
195
|
-
type: CircuitPB.Type.STATUS,
|
|
196
|
-
code: canHop ? CircuitPB.Status.SUCCESS : CircuitPB.Status.HOP_CANT_SPEAK_RELAY
|
|
197
|
-
})
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
module.exports = {
|
|
201
|
-
handleHop,
|
|
202
|
-
hop,
|
|
203
|
-
canHop,
|
|
204
|
-
handleCanHop
|
|
205
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:circuit:stop'), {
|
|
5
|
-
error: debug('libp2p:circuit:stop:err')
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
const { CircuitRelay: CircuitPB } = require('../protocol')
|
|
9
|
-
const multicodec = require('../multicodec')
|
|
10
|
-
const StreamHandler = require('./stream-handler')
|
|
11
|
-
const { validateAddrs } = require('./utils')
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
|
|
15
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
16
|
-
* @typedef {import('../protocol').ICircuitRelay} ICircuitRelay
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Handles incoming STOP requests
|
|
21
|
-
*
|
|
22
|
-
* @private
|
|
23
|
-
* @param {Object} options
|
|
24
|
-
* @param {Connection} options.connection
|
|
25
|
-
* @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)
|
|
26
|
-
* @param {StreamHandler} options.streamHandler
|
|
27
|
-
* @returns {Promise<MuxedStream>|void} Resolves a duplex iterable
|
|
28
|
-
*/
|
|
29
|
-
module.exports.handleStop = function handleStop ({
|
|
30
|
-
connection,
|
|
31
|
-
request,
|
|
32
|
-
streamHandler
|
|
33
|
-
}) {
|
|
34
|
-
// Validate the STOP request has the required input
|
|
35
|
-
try {
|
|
36
|
-
validateAddrs(request, streamHandler)
|
|
37
|
-
} catch (/** @type {any} */ err) {
|
|
38
|
-
return log.error('invalid stop request via peer %s', connection.remotePeer.toB58String(), err)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// The request is valid
|
|
42
|
-
log('stop request is valid')
|
|
43
|
-
streamHandler.write({
|
|
44
|
-
type: CircuitPB.Type.STATUS,
|
|
45
|
-
code: CircuitPB.Status.SUCCESS
|
|
46
|
-
})
|
|
47
|
-
return streamHandler.rest()
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Creates a STOP request
|
|
52
|
-
*
|
|
53
|
-
* @private
|
|
54
|
-
* @param {Object} options
|
|
55
|
-
* @param {Connection} options.connection
|
|
56
|
-
* @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)
|
|
57
|
-
* @returns {Promise<MuxedStream|void>} Resolves a duplex iterable
|
|
58
|
-
*/
|
|
59
|
-
module.exports.stop = async function stop ({
|
|
60
|
-
connection,
|
|
61
|
-
request
|
|
62
|
-
}) {
|
|
63
|
-
const { stream } = await connection.newStream([multicodec.relay])
|
|
64
|
-
log('starting stop request to %s', connection.remotePeer.toB58String())
|
|
65
|
-
const streamHandler = new StreamHandler({ stream })
|
|
66
|
-
|
|
67
|
-
streamHandler.write(request)
|
|
68
|
-
const response = await streamHandler.read()
|
|
69
|
-
|
|
70
|
-
if (!response) {
|
|
71
|
-
return streamHandler.close()
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (response.code === CircuitPB.Status.SUCCESS) {
|
|
75
|
-
log('stop request to %s was successful', connection.remotePeer.toB58String())
|
|
76
|
-
return streamHandler.rest()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
log('stop request failed with code %d', response.code)
|
|
80
|
-
streamHandler.close()
|
|
81
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:circuit:stream-handler'), {
|
|
5
|
-
error: debug('libp2p:circuit:stream-handler:err')
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
const lp = require('it-length-prefixed')
|
|
9
|
-
// @ts-ignore it-handshake does not export types
|
|
10
|
-
const handshake = require('it-handshake')
|
|
11
|
-
const { CircuitRelay } = require('../protocol')
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
15
|
-
* @typedef {import('../protocol').ICircuitRelay} ICircuitRelay
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
class StreamHandler {
|
|
19
|
-
/**
|
|
20
|
-
* Create a stream handler for connection
|
|
21
|
-
*
|
|
22
|
-
* @class
|
|
23
|
-
* @param {object} options
|
|
24
|
-
* @param {MuxedStream} options.stream - A duplex iterable
|
|
25
|
-
* @param {number} [options.maxLength = 4096] - max bytes length of message
|
|
26
|
-
*/
|
|
27
|
-
constructor ({ stream, maxLength = 4096 }) {
|
|
28
|
-
this.stream = stream
|
|
29
|
-
|
|
30
|
-
this.shake = handshake(this.stream)
|
|
31
|
-
// @ts-ignore options are not optional
|
|
32
|
-
this.decoder = lp.decode.fromReader(this.shake.reader, { maxDataLength: maxLength })
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Read and decode message
|
|
37
|
-
*
|
|
38
|
-
* @async
|
|
39
|
-
*/
|
|
40
|
-
async read () {
|
|
41
|
-
const msg = await this.decoder.next()
|
|
42
|
-
if (msg.value) {
|
|
43
|
-
const value = CircuitRelay.decode(msg.value.slice())
|
|
44
|
-
log('read message type', value.type)
|
|
45
|
-
return value
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
log('read received no value, closing stream')
|
|
49
|
-
// End the stream, we didn't get data
|
|
50
|
-
this.close()
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Encode and write array of buffers
|
|
55
|
-
*
|
|
56
|
-
* @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message
|
|
57
|
-
* @returns {void}
|
|
58
|
-
*/
|
|
59
|
-
write (msg) {
|
|
60
|
-
log('write message type %s', msg.type)
|
|
61
|
-
// @ts-ignore lp.encode expects type type 'Buffer | BufferList', not 'Uint8Array'
|
|
62
|
-
this.shake.write(lp.encode.single(CircuitRelay.encode(msg).finish()))
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Return the handshake rest stream and invalidate handler
|
|
67
|
-
*
|
|
68
|
-
* @returns {*} A duplex iterable
|
|
69
|
-
*/
|
|
70
|
-
rest () {
|
|
71
|
-
this.shake.rest()
|
|
72
|
-
return this.shake.stream
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message
|
|
77
|
-
*/
|
|
78
|
-
end (msg) {
|
|
79
|
-
this.write(msg)
|
|
80
|
-
this.close()
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Close the stream
|
|
85
|
-
*
|
|
86
|
-
* @returns {void}
|
|
87
|
-
*/
|
|
88
|
-
close () {
|
|
89
|
-
log('closing the stream')
|
|
90
|
-
this.rest().sink([])
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
module.exports = StreamHandler
|
package/src/circuit/constants.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const minute = 60 * 1000
|
|
4
|
-
|
|
5
|
-
module.exports = {
|
|
6
|
-
ADVERTISE_BOOT_DELAY: 15 * minute, // Delay before HOP relay service is advertised on the network
|
|
7
|
-
ADVERTISE_TTL: 30 * minute, // Delay Between HOP relay service advertisements on the network
|
|
8
|
-
CIRCUIT_PROTO_CODE: 290, // Multicodec code
|
|
9
|
-
HOP_METADATA_KEY: 'hop_relay', // PeerStore metadaBook key for HOP relay service
|
|
10
|
-
HOP_METADATA_VALUE: 'true', // PeerStore metadaBook value for HOP relay service
|
|
11
|
-
RELAY_RENDEZVOUS_NS: '/libp2p/relay' // Relay HOP relay service namespace for discovery
|
|
12
|
-
}
|
package/src/circuit/index.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:relay'), {
|
|
5
|
-
error: debug('libp2p:relay:err')
|
|
6
|
-
})
|
|
7
|
-
const { codes } = require('./../errors')
|
|
8
|
-
const {
|
|
9
|
-
setDelayedInterval,
|
|
10
|
-
clearDelayedInterval
|
|
11
|
-
// @ts-ignore set-delayed-interval does not export types
|
|
12
|
-
} = require('set-delayed-interval')
|
|
13
|
-
|
|
14
|
-
const AutoRelay = require('./auto-relay')
|
|
15
|
-
const { namespaceToCid } = require('./utils')
|
|
16
|
-
const {
|
|
17
|
-
RELAY_RENDEZVOUS_NS
|
|
18
|
-
} = require('./constants')
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @typedef {import('../')} Libp2p
|
|
22
|
-
*
|
|
23
|
-
* @typedef {Object} RelayAdvertiseOptions
|
|
24
|
-
* @property {number} [bootDelay = ADVERTISE_BOOT_DELAY]
|
|
25
|
-
* @property {boolean} [enabled = true]
|
|
26
|
-
* @property {number} [ttl = ADVERTISE_TTL]
|
|
27
|
-
*
|
|
28
|
-
* @typedef {Object} HopOptions
|
|
29
|
-
* @property {boolean} [enabled = false]
|
|
30
|
-
* @property {boolean} [active = false]
|
|
31
|
-
*
|
|
32
|
-
* @typedef {Object} AutoRelayOptions
|
|
33
|
-
* @property {number} [maxListeners = 2] - maximum number of relays to listen.
|
|
34
|
-
* @property {boolean} [enabled = false]
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
class Relay {
|
|
38
|
-
/**
|
|
39
|
-
* Creates an instance of Relay.
|
|
40
|
-
*
|
|
41
|
-
* @class
|
|
42
|
-
* @param {Libp2p} libp2p
|
|
43
|
-
*/
|
|
44
|
-
constructor (libp2p) {
|
|
45
|
-
this._libp2p = libp2p
|
|
46
|
-
this._options = {
|
|
47
|
-
...libp2p._config.relay
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Create autoRelay if enabled
|
|
51
|
-
this._autoRelay = this._options.autoRelay.enabled && new AutoRelay({ libp2p, ...this._options.autoRelay })
|
|
52
|
-
|
|
53
|
-
this._advertiseService = this._advertiseService.bind(this)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Start Relay service.
|
|
58
|
-
*
|
|
59
|
-
* @returns {void}
|
|
60
|
-
*/
|
|
61
|
-
start () {
|
|
62
|
-
// Advertise service if HOP enabled
|
|
63
|
-
const canHop = this._options.hop.enabled
|
|
64
|
-
|
|
65
|
-
if (canHop && this._options.advertise.enabled) {
|
|
66
|
-
this._timeout = setDelayedInterval(
|
|
67
|
-
this._advertiseService, this._options.advertise.ttl, this._options.advertise.bootDelay
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Stop Relay service.
|
|
74
|
-
*
|
|
75
|
-
* @returns {void}
|
|
76
|
-
*/
|
|
77
|
-
stop () {
|
|
78
|
-
clearDelayedInterval(this._timeout)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Advertise hop relay service in the network.
|
|
83
|
-
*
|
|
84
|
-
* @returns {Promise<void>}
|
|
85
|
-
*/
|
|
86
|
-
async _advertiseService () {
|
|
87
|
-
try {
|
|
88
|
-
const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)
|
|
89
|
-
await this._libp2p.contentRouting.provide(cid)
|
|
90
|
-
} catch (/** @type {any} */ err) {
|
|
91
|
-
if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {
|
|
92
|
-
log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)
|
|
93
|
-
// Stop the advertise
|
|
94
|
-
this.stop()
|
|
95
|
-
} else {
|
|
96
|
-
log.error(err)
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
module.exports = Relay
|
package/src/circuit/listener.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const { EventEmitter } = require('events')
|
|
4
|
-
const { Multiaddr } = require('multiaddr')
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @typedef {import('libp2p-interfaces/src/transport/types').Listener} Listener
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @param {import('../')} libp2p
|
|
12
|
-
* @returns {Listener} a transport listener
|
|
13
|
-
*/
|
|
14
|
-
module.exports = (libp2p) => {
|
|
15
|
-
const listeningAddrs = new Map()
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Add swarm handler and listen for incoming connections
|
|
19
|
-
*
|
|
20
|
-
* @param {Multiaddr} addr
|
|
21
|
-
* @returns {Promise<void>}
|
|
22
|
-
*/
|
|
23
|
-
async function listen (addr) {
|
|
24
|
-
const addrString = String(addr).split('/p2p-circuit').find(a => a !== '')
|
|
25
|
-
|
|
26
|
-
const relayConn = await libp2p.dial(new Multiaddr(addrString))
|
|
27
|
-
const relayedAddr = relayConn.remoteAddr.encapsulate('/p2p-circuit')
|
|
28
|
-
|
|
29
|
-
listeningAddrs.set(relayConn.remotePeer.toB58String(), relayedAddr)
|
|
30
|
-
listener.emit('listening')
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Get fixed up multiaddrs
|
|
35
|
-
*
|
|
36
|
-
* NOTE: This method will grab the peers multiaddrs and expand them such that:
|
|
37
|
-
*
|
|
38
|
-
* a) If it's an existing /p2p-circuit address for a specific relay i.e.
|
|
39
|
-
* `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit` this method will expand the
|
|
40
|
-
* address to `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit/ipfs/QmPeer` where
|
|
41
|
-
* `QmPeer` is this peers id
|
|
42
|
-
* b) If it's not a /p2p-circuit address, it will encapsulate the address as a /p2p-circuit
|
|
43
|
-
* addr, such when dialing over a relay with this address, it will create the circuit using
|
|
44
|
-
* the encapsulated transport address. This is useful when for example, a peer should only
|
|
45
|
-
* be dialed over TCP rather than any other transport
|
|
46
|
-
*
|
|
47
|
-
* @returns {Multiaddr[]}
|
|
48
|
-
*/
|
|
49
|
-
function getAddrs () {
|
|
50
|
-
const addrs = []
|
|
51
|
-
for (const addr of listeningAddrs.values()) {
|
|
52
|
-
addrs.push(addr)
|
|
53
|
-
}
|
|
54
|
-
return addrs
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/** @type Listener */
|
|
58
|
-
const listener = Object.assign(new EventEmitter(), {
|
|
59
|
-
close: () => Promise.resolve(),
|
|
60
|
-
listen,
|
|
61
|
-
getAddrs
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// Remove listeningAddrs when a peer disconnects
|
|
65
|
-
libp2p.connectionManager.on('peer:disconnect', (connection) => {
|
|
66
|
-
const deleted = listeningAddrs.delete(connection.remotePeer.toB58String())
|
|
67
|
-
|
|
68
|
-
if (deleted) {
|
|
69
|
-
// Announce listen addresses change
|
|
70
|
-
listener.emit('close')
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
return listener
|
|
75
|
-
}
|