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
package/src/upgrader.js
DELETED
|
@@ -1,492 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:upgrader'), {
|
|
5
|
-
error: debug('libp2p:upgrader:err')
|
|
6
|
-
})
|
|
7
|
-
const errCode = require('err-code')
|
|
8
|
-
const Multistream = require('multistream-select')
|
|
9
|
-
const { Connection } = require('libp2p-interfaces/src/connection')
|
|
10
|
-
const PeerId = require('peer-id')
|
|
11
|
-
const { pipe } = require('it-pipe')
|
|
12
|
-
// @ts-ignore mutable-proxy does not export types
|
|
13
|
-
const mutableProxy = require('mutable-proxy')
|
|
14
|
-
|
|
15
|
-
const { codes } = require('./errors')
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
|
|
19
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory
|
|
20
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').Muxer} Muxer
|
|
21
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
22
|
-
* @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto
|
|
23
|
-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
|
|
24
|
-
* @typedef {import('multiaddr').Multiaddr} Multiaddr
|
|
25
|
-
* @typedef {import('./types').ConnectionGater} ConnectionGater
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @typedef CryptoResult
|
|
30
|
-
* @property {MultiaddrConnection} conn A duplex iterable
|
|
31
|
-
* @property {PeerId} remotePeer
|
|
32
|
-
* @property {string} protocol
|
|
33
|
-
*/
|
|
34
|
-
|
|
35
|
-
class Upgrader {
|
|
36
|
-
/**
|
|
37
|
-
* @param {object} options
|
|
38
|
-
* @param {PeerId} options.localPeer
|
|
39
|
-
* @param {ConnectionGater} options.connectionGater
|
|
40
|
-
*
|
|
41
|
-
* @param {import('./metrics')} [options.metrics]
|
|
42
|
-
* @param {Map<string, Crypto>} [options.cryptos]
|
|
43
|
-
* @param {Map<string, MuxerFactory>} [options.muxers]
|
|
44
|
-
* @param {(connection: Connection) => void} options.onConnection - Called when a connection is upgraded
|
|
45
|
-
* @param {(connection: Connection) => void} options.onConnectionEnd
|
|
46
|
-
*/
|
|
47
|
-
constructor ({
|
|
48
|
-
localPeer,
|
|
49
|
-
metrics,
|
|
50
|
-
connectionGater,
|
|
51
|
-
cryptos = new Map(),
|
|
52
|
-
muxers = new Map(),
|
|
53
|
-
onConnectionEnd = () => {},
|
|
54
|
-
onConnection = () => {}
|
|
55
|
-
}) {
|
|
56
|
-
this.connectionGater = connectionGater
|
|
57
|
-
this.localPeer = localPeer
|
|
58
|
-
this.metrics = metrics
|
|
59
|
-
this.cryptos = cryptos
|
|
60
|
-
this.muxers = muxers
|
|
61
|
-
/** @type {import("./pnet") | null} */
|
|
62
|
-
this.protector = null
|
|
63
|
-
this.protocols = new Map()
|
|
64
|
-
this.onConnection = onConnection
|
|
65
|
-
this.onConnectionEnd = onConnectionEnd
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Upgrades an inbound connection
|
|
70
|
-
*
|
|
71
|
-
* @async
|
|
72
|
-
* @param {MultiaddrConnection} maConn
|
|
73
|
-
* @returns {Promise<Connection>}
|
|
74
|
-
*/
|
|
75
|
-
async upgradeInbound (maConn) {
|
|
76
|
-
let encryptedConn
|
|
77
|
-
let remotePeer
|
|
78
|
-
let upgradedConn
|
|
79
|
-
let Muxer
|
|
80
|
-
let cryptoProtocol
|
|
81
|
-
let setPeer
|
|
82
|
-
let proxyPeer
|
|
83
|
-
|
|
84
|
-
if (await this.connectionGater.denyInboundConnection(maConn)) {
|
|
85
|
-
throw errCode(new Error('The multiaddr connection is blocked by gater.acceptConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (this.metrics) {
|
|
89
|
-
({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
|
|
90
|
-
const idString = (Math.random() * 1e9).toString(36) + Date.now()
|
|
91
|
-
setPeer({ toB58String: () => idString })
|
|
92
|
-
maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
log('Starting the inbound connection upgrade')
|
|
96
|
-
|
|
97
|
-
// Protect
|
|
98
|
-
let protectedConn = maConn
|
|
99
|
-
if (this.protector) {
|
|
100
|
-
protectedConn = await this.protector.protect(maConn)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
try {
|
|
104
|
-
// Encrypt the connection
|
|
105
|
-
({
|
|
106
|
-
conn: encryptedConn,
|
|
107
|
-
remotePeer,
|
|
108
|
-
protocol: cryptoProtocol
|
|
109
|
-
} = await this._encryptInbound(this.localPeer, protectedConn, this.cryptos))
|
|
110
|
-
|
|
111
|
-
if (await this.connectionGater.denyInboundEncryptedConnection(remotePeer, encryptedConn)) {
|
|
112
|
-
throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Multiplex the connection
|
|
116
|
-
if (this.muxers.size) {
|
|
117
|
-
({ stream: upgradedConn, Muxer } = await this._multiplexInbound(encryptedConn, this.muxers))
|
|
118
|
-
} else {
|
|
119
|
-
upgradedConn = encryptedConn
|
|
120
|
-
}
|
|
121
|
-
} catch (/** @type {any} */ err) {
|
|
122
|
-
log.error('Failed to upgrade inbound connection', err)
|
|
123
|
-
await maConn.close(err)
|
|
124
|
-
throw err
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (await this.connectionGater.denyInboundUpgradedConnection(remotePeer, encryptedConn)) {
|
|
128
|
-
throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (this.metrics) {
|
|
132
|
-
this.metrics.updatePlaceholder(proxyPeer, remotePeer)
|
|
133
|
-
setPeer(remotePeer)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
log('Successfully upgraded inbound connection')
|
|
137
|
-
|
|
138
|
-
return this._createConnection({
|
|
139
|
-
cryptoProtocol,
|
|
140
|
-
direction: 'inbound',
|
|
141
|
-
maConn,
|
|
142
|
-
upgradedConn,
|
|
143
|
-
Muxer,
|
|
144
|
-
remotePeer
|
|
145
|
-
})
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Upgrades an outbound connection
|
|
150
|
-
*
|
|
151
|
-
* @async
|
|
152
|
-
* @param {MultiaddrConnection} maConn
|
|
153
|
-
* @returns {Promise<Connection>}
|
|
154
|
-
*/
|
|
155
|
-
async upgradeOutbound (maConn) {
|
|
156
|
-
const idStr = maConn.remoteAddr.getPeerId()
|
|
157
|
-
if (!idStr) {
|
|
158
|
-
throw errCode(new Error('outbound connection must have a peer id'), codes.ERR_INVALID_MULTIADDR)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
const remotePeerId = PeerId.createFromB58String(idStr)
|
|
162
|
-
|
|
163
|
-
if (await this.connectionGater.denyOutboundConnection(remotePeerId, maConn)) {
|
|
164
|
-
throw errCode(new Error('The multiaddr connection is blocked by connectionGater.denyOutboundConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
let encryptedConn
|
|
168
|
-
let remotePeer
|
|
169
|
-
let upgradedConn
|
|
170
|
-
let cryptoProtocol
|
|
171
|
-
let Muxer
|
|
172
|
-
let setPeer
|
|
173
|
-
let proxyPeer
|
|
174
|
-
|
|
175
|
-
if (this.metrics) {
|
|
176
|
-
({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())
|
|
177
|
-
const idString = (Math.random() * 1e9).toString(36) + Date.now()
|
|
178
|
-
setPeer({ toB58String: () => idString })
|
|
179
|
-
maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
log('Starting the outbound connection upgrade')
|
|
183
|
-
|
|
184
|
-
// Protect
|
|
185
|
-
let protectedConn = maConn
|
|
186
|
-
if (this.protector) {
|
|
187
|
-
protectedConn = await this.protector.protect(maConn)
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
try {
|
|
191
|
-
// Encrypt the connection
|
|
192
|
-
({
|
|
193
|
-
conn: encryptedConn,
|
|
194
|
-
remotePeer,
|
|
195
|
-
protocol: cryptoProtocol
|
|
196
|
-
} = await this._encryptOutbound(this.localPeer, protectedConn, remotePeerId, this.cryptos))
|
|
197
|
-
|
|
198
|
-
if (await this.connectionGater.denyOutboundEncryptedConnection(remotePeer, encryptedConn)) {
|
|
199
|
-
throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Multiplex the connection
|
|
203
|
-
if (this.muxers.size) {
|
|
204
|
-
({ stream: upgradedConn, Muxer } = await this._multiplexOutbound(encryptedConn, this.muxers))
|
|
205
|
-
} else {
|
|
206
|
-
upgradedConn = encryptedConn
|
|
207
|
-
}
|
|
208
|
-
} catch (/** @type {any} */ err) {
|
|
209
|
-
log.error('Failed to upgrade outbound connection', err)
|
|
210
|
-
await maConn.close(err)
|
|
211
|
-
throw err
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (await this.connectionGater.denyOutboundUpgradedConnection(remotePeer, encryptedConn)) {
|
|
215
|
-
throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (this.metrics) {
|
|
219
|
-
this.metrics.updatePlaceholder(proxyPeer, remotePeer)
|
|
220
|
-
setPeer(remotePeer)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
log('Successfully upgraded outbound connection')
|
|
224
|
-
|
|
225
|
-
return this._createConnection({
|
|
226
|
-
cryptoProtocol,
|
|
227
|
-
direction: 'outbound',
|
|
228
|
-
maConn,
|
|
229
|
-
upgradedConn,
|
|
230
|
-
Muxer,
|
|
231
|
-
remotePeer
|
|
232
|
-
})
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* A convenience method for generating a new `Connection`
|
|
237
|
-
*
|
|
238
|
-
* @private
|
|
239
|
-
* @param {object} options
|
|
240
|
-
* @param {string} options.cryptoProtocol - The crypto protocol that was negotiated
|
|
241
|
-
* @param {'inbound' | 'outbound'} options.direction - One of ['inbound', 'outbound']
|
|
242
|
-
* @param {MultiaddrConnection} options.maConn - The transport layer connection
|
|
243
|
-
* @param {MuxedStream | MultiaddrConnection} options.upgradedConn - A duplex connection returned from multiplexer and/or crypto selection
|
|
244
|
-
* @param {MuxerFactory} [options.Muxer] - The muxer to be used for muxing
|
|
245
|
-
* @param {PeerId} options.remotePeer - The peer the connection is with
|
|
246
|
-
* @returns {Connection}
|
|
247
|
-
*/
|
|
248
|
-
_createConnection ({
|
|
249
|
-
cryptoProtocol,
|
|
250
|
-
direction,
|
|
251
|
-
maConn,
|
|
252
|
-
upgradedConn,
|
|
253
|
-
Muxer,
|
|
254
|
-
remotePeer
|
|
255
|
-
}) {
|
|
256
|
-
/** @type {import("libp2p-interfaces/src/stream-muxer/types").Muxer} */
|
|
257
|
-
let muxer
|
|
258
|
-
/** @type {import("libp2p-interfaces/src/connection/connection").CreatedMuxedStream | undefined} */
|
|
259
|
-
let newStream
|
|
260
|
-
/** @type {Connection} */
|
|
261
|
-
let connection // eslint-disable-line prefer-const
|
|
262
|
-
|
|
263
|
-
if (Muxer) {
|
|
264
|
-
// Create the muxer
|
|
265
|
-
muxer = new Muxer({
|
|
266
|
-
// Run anytime a remote stream is created
|
|
267
|
-
onStream: async muxedStream => {
|
|
268
|
-
if (!connection) return
|
|
269
|
-
const mss = new Multistream.Listener(muxedStream)
|
|
270
|
-
try {
|
|
271
|
-
const { stream, protocol } = await mss.handle(Array.from(this.protocols.keys()))
|
|
272
|
-
log('%s: incoming stream opened on %s', direction, protocol)
|
|
273
|
-
if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })
|
|
274
|
-
connection.addStream(muxedStream, { protocol })
|
|
275
|
-
this._onStream({ connection, stream: { ...muxedStream, ...stream }, protocol })
|
|
276
|
-
} catch (/** @type {any} */ err) {
|
|
277
|
-
log.error(err)
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
// Run anytime a stream closes
|
|
281
|
-
onStreamEnd: muxedStream => {
|
|
282
|
-
connection.removeStream(muxedStream.id)
|
|
283
|
-
}
|
|
284
|
-
})
|
|
285
|
-
|
|
286
|
-
newStream = async (protocols) => {
|
|
287
|
-
log('%s: starting new stream on %s', direction, protocols)
|
|
288
|
-
const muxedStream = muxer.newStream()
|
|
289
|
-
const mss = new Multistream.Dialer(muxedStream)
|
|
290
|
-
try {
|
|
291
|
-
const { stream, protocol } = await mss.select(protocols)
|
|
292
|
-
if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })
|
|
293
|
-
return { stream: { ...muxedStream, ...stream }, protocol }
|
|
294
|
-
} catch (/** @type {any} */ err) {
|
|
295
|
-
log.error('could not create new stream', err)
|
|
296
|
-
throw errCode(err, codes.ERR_UNSUPPORTED_PROTOCOL)
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// Pipe all data through the muxer
|
|
301
|
-
pipe(upgradedConn, muxer, upgradedConn).catch(log.error)
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
const _timeline = maConn.timeline
|
|
305
|
-
maConn.timeline = new Proxy(_timeline, {
|
|
306
|
-
set: (...args) => {
|
|
307
|
-
if (connection && args[1] === 'close' && args[2] && !_timeline.close) {
|
|
308
|
-
// Wait for close to finish before notifying of the closure
|
|
309
|
-
(async () => {
|
|
310
|
-
try {
|
|
311
|
-
if (connection.stat.status === 'open') {
|
|
312
|
-
await connection.close()
|
|
313
|
-
}
|
|
314
|
-
} catch (/** @type {any} */ err) {
|
|
315
|
-
log.error(err)
|
|
316
|
-
} finally {
|
|
317
|
-
this.onConnectionEnd(connection)
|
|
318
|
-
}
|
|
319
|
-
})().catch(err => {
|
|
320
|
-
log.error(err)
|
|
321
|
-
})
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
return Reflect.set(...args)
|
|
325
|
-
}
|
|
326
|
-
})
|
|
327
|
-
maConn.timeline.upgraded = Date.now()
|
|
328
|
-
|
|
329
|
-
const errConnectionNotMultiplexed = () => {
|
|
330
|
-
throw errCode(new Error('connection is not multiplexed'), codes.ERR_CONNECTION_NOT_MULTIPLEXED)
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Create the connection
|
|
334
|
-
connection = new Connection({
|
|
335
|
-
localAddr: maConn.localAddr,
|
|
336
|
-
remoteAddr: maConn.remoteAddr,
|
|
337
|
-
localPeer: this.localPeer,
|
|
338
|
-
remotePeer: remotePeer,
|
|
339
|
-
stat: {
|
|
340
|
-
direction,
|
|
341
|
-
// @ts-ignore
|
|
342
|
-
timeline: maConn.timeline,
|
|
343
|
-
multiplexer: Muxer && Muxer.multicodec,
|
|
344
|
-
encryption: cryptoProtocol
|
|
345
|
-
},
|
|
346
|
-
newStream: newStream || errConnectionNotMultiplexed,
|
|
347
|
-
getStreams: () => muxer ? muxer.streams : errConnectionNotMultiplexed(),
|
|
348
|
-
close: async () => {
|
|
349
|
-
await maConn.close()
|
|
350
|
-
// Ensure remaining streams are aborted
|
|
351
|
-
if (muxer) {
|
|
352
|
-
muxer.streams.map(stream => stream.abort())
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
})
|
|
356
|
-
|
|
357
|
-
this.onConnection(connection)
|
|
358
|
-
|
|
359
|
-
return connection
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Routes incoming streams to the correct handler
|
|
364
|
-
*
|
|
365
|
-
* @private
|
|
366
|
-
* @param {object} options
|
|
367
|
-
* @param {Connection} options.connection - The connection the stream belongs to
|
|
368
|
-
* @param {MuxedStream} options.stream
|
|
369
|
-
* @param {string} options.protocol
|
|
370
|
-
*/
|
|
371
|
-
_onStream ({ connection, stream, protocol }) {
|
|
372
|
-
const handler = this.protocols.get(protocol)
|
|
373
|
-
handler({ connection, stream, protocol })
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Attempts to encrypt the incoming `connection` with the provided `cryptos`.
|
|
378
|
-
*
|
|
379
|
-
* @private
|
|
380
|
-
* @async
|
|
381
|
-
* @param {PeerId} localPeer - The initiators PeerId
|
|
382
|
-
* @param {*} connection
|
|
383
|
-
* @param {Map<string, Crypto>} cryptos
|
|
384
|
-
* @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
|
385
|
-
*/
|
|
386
|
-
async _encryptInbound (localPeer, connection, cryptos) {
|
|
387
|
-
const mss = new Multistream.Listener(connection)
|
|
388
|
-
const protocols = Array.from(cryptos.keys())
|
|
389
|
-
log('handling inbound crypto protocol selection', protocols)
|
|
390
|
-
|
|
391
|
-
try {
|
|
392
|
-
const { stream, protocol } = await mss.handle(protocols)
|
|
393
|
-
const crypto = cryptos.get(protocol)
|
|
394
|
-
log('encrypting inbound connection...')
|
|
395
|
-
|
|
396
|
-
if (!crypto) {
|
|
397
|
-
throw new Error(`no crypto module found for ${protocol}`)
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
return {
|
|
401
|
-
...await crypto.secureInbound(localPeer, stream),
|
|
402
|
-
protocol
|
|
403
|
-
}
|
|
404
|
-
} catch (/** @type {any} */ err) {
|
|
405
|
-
throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* Attempts to encrypt the given `connection` with the provided `cryptos`.
|
|
411
|
-
* The first `Crypto` module to succeed will be used
|
|
412
|
-
*
|
|
413
|
-
* @private
|
|
414
|
-
* @async
|
|
415
|
-
* @param {PeerId} localPeer - The initiators PeerId
|
|
416
|
-
* @param {MultiaddrConnection} connection
|
|
417
|
-
* @param {PeerId} remotePeerId
|
|
418
|
-
* @param {Map<string, Crypto>} cryptos
|
|
419
|
-
* @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used
|
|
420
|
-
*/
|
|
421
|
-
async _encryptOutbound (localPeer, connection, remotePeerId, cryptos) {
|
|
422
|
-
const mss = new Multistream.Dialer(connection)
|
|
423
|
-
const protocols = Array.from(cryptos.keys())
|
|
424
|
-
log('selecting outbound crypto protocol', protocols)
|
|
425
|
-
|
|
426
|
-
try {
|
|
427
|
-
const { stream, protocol } = await mss.select(protocols)
|
|
428
|
-
const crypto = cryptos.get(protocol)
|
|
429
|
-
log('encrypting outbound connection to %j', remotePeerId)
|
|
430
|
-
|
|
431
|
-
if (!crypto) {
|
|
432
|
-
throw new Error(`no crypto module found for ${protocol}`)
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
return {
|
|
436
|
-
...await crypto.secureOutbound(localPeer, stream, remotePeerId),
|
|
437
|
-
protocol
|
|
438
|
-
}
|
|
439
|
-
} catch (/** @type {any} */ err) {
|
|
440
|
-
throw errCode(err, codes.ERR_ENCRYPTION_FAILED)
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
/**
|
|
445
|
-
* Selects one of the given muxers via multistream-select. That
|
|
446
|
-
* muxer will be used for all future streams on the connection.
|
|
447
|
-
*
|
|
448
|
-
* @private
|
|
449
|
-
* @async
|
|
450
|
-
* @param {MultiaddrConnection} connection - A basic duplex connection to multiplex
|
|
451
|
-
* @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with
|
|
452
|
-
* @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection
|
|
453
|
-
*/
|
|
454
|
-
async _multiplexOutbound (connection, muxers) {
|
|
455
|
-
const dialer = new Multistream.Dialer(connection)
|
|
456
|
-
const protocols = Array.from(muxers.keys())
|
|
457
|
-
log('outbound selecting muxer %s', protocols)
|
|
458
|
-
try {
|
|
459
|
-
const { stream, protocol } = await dialer.select(protocols)
|
|
460
|
-
log('%s selected as muxer protocol', protocol)
|
|
461
|
-
const Muxer = muxers.get(protocol)
|
|
462
|
-
return { stream, Muxer }
|
|
463
|
-
} catch (/** @type {any} */ err) {
|
|
464
|
-
throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/**
|
|
469
|
-
* Registers support for one of the given muxers via multistream-select. The
|
|
470
|
-
* selected muxer will be used for all future streams on the connection.
|
|
471
|
-
*
|
|
472
|
-
* @private
|
|
473
|
-
* @async
|
|
474
|
-
* @param {MultiaddrConnection} connection - A basic duplex connection to multiplex
|
|
475
|
-
* @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with
|
|
476
|
-
* @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection
|
|
477
|
-
*/
|
|
478
|
-
async _multiplexInbound (connection, muxers) {
|
|
479
|
-
const listener = new Multistream.Listener(connection)
|
|
480
|
-
const protocols = Array.from(muxers.keys())
|
|
481
|
-
log('inbound handling muxers %s', protocols)
|
|
482
|
-
try {
|
|
483
|
-
const { stream, protocol } = await listener.handle(protocols)
|
|
484
|
-
const Muxer = muxers.get(protocol)
|
|
485
|
-
return { stream, Muxer }
|
|
486
|
-
} catch (/** @type {any} */ err) {
|
|
487
|
-
throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
module.exports = Upgrader
|