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
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { TimeoutController } from 'timeout-abort-controller';
|
|
3
|
+
const log = logger('libp2p:dialer:auto-dialer');
|
|
4
|
+
export class AutoDialer {
|
|
5
|
+
constructor(components, init) {
|
|
6
|
+
this.components = components;
|
|
7
|
+
this.enabled = init.enabled;
|
|
8
|
+
this.minConnections = init.minConnections;
|
|
9
|
+
this.dialTimeout = init.dialTimeout;
|
|
10
|
+
}
|
|
11
|
+
handle(evt) {
|
|
12
|
+
const { detail: peer } = evt;
|
|
13
|
+
if (!this.enabled) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const connections = this.components.getConnectionManager().getConnections(peer.id);
|
|
17
|
+
// If auto dialing is on and we have no connection to the peer, check if we should dial
|
|
18
|
+
if (connections.length === 0) {
|
|
19
|
+
const minConnections = this.minConnections ?? 0;
|
|
20
|
+
const allConnections = this.components.getConnectionManager().getConnections();
|
|
21
|
+
if (minConnections > allConnections.length) {
|
|
22
|
+
log('auto-dialing discovered peer %p with timeout %d', peer.id, this.dialTimeout);
|
|
23
|
+
const controller = new TimeoutController(this.dialTimeout);
|
|
24
|
+
void this.components.getConnectionManager().openConnection(peer.id, {
|
|
25
|
+
signal: controller.signal
|
|
26
|
+
})
|
|
27
|
+
.catch(err => {
|
|
28
|
+
log.error('could not connect to discovered peer %p with %o', peer.id, err);
|
|
29
|
+
})
|
|
30
|
+
.finally(() => {
|
|
31
|
+
controller.clear();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=auto-dialer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-dialer.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/auto-dialer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,GAAG,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAA;AAQ/C,MAAM,OAAO,UAAU;IAMrB,YAAa,UAAsB,EAAE,IAAoB;QACvD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IACrC,CAAC;IAEM,MAAM,CAAE,GAA0B;QACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAM;SACP;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAElF,uFAAuF;QACvF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAA;YAE/C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,EAAE,CAAA;YAE9E,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE;gBAC1C,GAAG,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;gBAEjF,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAE1D,KAAK,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE;oBAClE,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;qBACC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,GAAG,CAAC,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBAC5E,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACZ,UAAU,CAAC,KAAK,EAAE,CAAA;gBACpB,CAAC,CAAC,CAAA;aACL;SACF;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
2
|
+
import type { Connection } from '@libp2p/interfaces/connection';
|
|
3
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
4
|
+
import type { Dialer } from './index.js';
|
|
5
|
+
export interface DialAction {
|
|
6
|
+
(m: Multiaddr, options: AbortOptions): Promise<Connection>;
|
|
7
|
+
}
|
|
8
|
+
export interface DialRequestOptions {
|
|
9
|
+
addrs: Multiaddr[];
|
|
10
|
+
dialAction: DialAction;
|
|
11
|
+
dialer: Dialer;
|
|
12
|
+
}
|
|
13
|
+
export declare class DialRequest {
|
|
14
|
+
private readonly addrs;
|
|
15
|
+
private readonly dialer;
|
|
16
|
+
private readonly dialAction;
|
|
17
|
+
/**
|
|
18
|
+
* Manages running the `dialAction` on multiple provided `addrs` in parallel
|
|
19
|
+
* up to a maximum determined by the number of tokens returned
|
|
20
|
+
* from `dialer.getTokens`. Once a DialRequest is created, it can be
|
|
21
|
+
* started using `DialRequest.run(options)`. Once a single dial has succeeded,
|
|
22
|
+
* all other dials in the request will be cancelled.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options: DialRequestOptions);
|
|
25
|
+
run(options?: AbortOptions): Promise<Connection>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=dial-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dial-request.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAIxC,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC;;;;;;OAMG;gBACU,OAAO,EAAE,kBAAkB;IAYlC,GAAG,CAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;CA+D5D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import errCode from 'err-code';
|
|
2
|
+
import { anySignal } from 'any-signal';
|
|
3
|
+
import FIFO from 'p-fifo';
|
|
4
|
+
// @ts-expect-error setMaxListeners is missing from the node 16 types
|
|
5
|
+
import { setMaxListeners } from 'events';
|
|
6
|
+
import { codes } from '../../errors.js';
|
|
7
|
+
import { logger } from '@libp2p/logger';
|
|
8
|
+
const log = logger('libp2p:dialer:dial-request');
|
|
9
|
+
export class DialRequest {
|
|
10
|
+
/**
|
|
11
|
+
* Manages running the `dialAction` on multiple provided `addrs` in parallel
|
|
12
|
+
* up to a maximum determined by the number of tokens returned
|
|
13
|
+
* from `dialer.getTokens`. Once a DialRequest is created, it can be
|
|
14
|
+
* started using `DialRequest.run(options)`. Once a single dial has succeeded,
|
|
15
|
+
* all other dials in the request will be cancelled.
|
|
16
|
+
*/
|
|
17
|
+
constructor(options) {
|
|
18
|
+
const { addrs, dialAction, dialer } = options;
|
|
19
|
+
this.addrs = addrs;
|
|
20
|
+
this.dialer = dialer;
|
|
21
|
+
this.dialAction = dialAction;
|
|
22
|
+
}
|
|
23
|
+
async run(options = {}) {
|
|
24
|
+
const tokens = this.dialer.getTokens(this.addrs.length);
|
|
25
|
+
// If no tokens are available, throw
|
|
26
|
+
if (tokens.length < 1) {
|
|
27
|
+
throw errCode(new Error('No dial tokens available'), codes.ERR_NO_DIAL_TOKENS);
|
|
28
|
+
}
|
|
29
|
+
const tokenHolder = new FIFO();
|
|
30
|
+
for (const token of tokens) {
|
|
31
|
+
void tokenHolder.push(token).catch(err => {
|
|
32
|
+
log.error(err);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const dialAbortControllers = this.addrs.map(() => {
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
try {
|
|
38
|
+
// fails on node < 15.4
|
|
39
|
+
setMaxListeners?.(Infinity, controller.signal);
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
return controller;
|
|
43
|
+
});
|
|
44
|
+
if (options.signal != null) {
|
|
45
|
+
try {
|
|
46
|
+
// fails on node < 15.4
|
|
47
|
+
setMaxListeners?.(Infinity, options.signal);
|
|
48
|
+
}
|
|
49
|
+
catch { }
|
|
50
|
+
}
|
|
51
|
+
let completedDials = 0;
|
|
52
|
+
try {
|
|
53
|
+
return await Promise.any(this.addrs.map(async (addr, i) => {
|
|
54
|
+
const token = await tokenHolder.shift(); // get token
|
|
55
|
+
let conn;
|
|
56
|
+
try {
|
|
57
|
+
const signal = dialAbortControllers[i].signal;
|
|
58
|
+
conn = await this.dialAction(addr, { ...options, signal: (options.signal != null) ? anySignal([signal, options.signal]) : signal });
|
|
59
|
+
// Remove the successful AbortController so it is not aborted
|
|
60
|
+
dialAbortControllers.splice(i, 1);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
completedDials++;
|
|
64
|
+
// If we have more or equal dials remaining than tokens, recycle the token, otherwise release it
|
|
65
|
+
if (this.addrs.length - completedDials >= tokens.length) {
|
|
66
|
+
void tokenHolder.push(token).catch(err => {
|
|
67
|
+
log.error(err);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return conn;
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
dialAbortControllers.map(c => c.abort()); // success/failure happened, abort everything else
|
|
79
|
+
tokens.forEach(token => this.dialer.releaseToken(token)); // release tokens back to the dialer
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=dial-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dial-request.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/dial-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Multiaddr, Resolver } from '@multiformats/multiaddr';
|
|
2
|
+
import { TimeoutController } from 'timeout-abort-controller';
|
|
3
|
+
import { DialRequest } from './dial-request.js';
|
|
4
|
+
import type { Connection } from '@libp2p/interfaces/connection';
|
|
5
|
+
import type { AbortOptions } from '@libp2p/interfaces';
|
|
6
|
+
import type { Startable } from '@libp2p/interfaces/startable';
|
|
7
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
8
|
+
import { Components, Initializable } from '@libp2p/interfaces/components';
|
|
9
|
+
import type { AddressSorter } from '@libp2p/interfaces/peer-store';
|
|
10
|
+
import type { ComponentMetricsTracker } from '@libp2p/interfaces/metrics';
|
|
11
|
+
export interface DialTarget {
|
|
12
|
+
id: string;
|
|
13
|
+
addrs: Multiaddr[];
|
|
14
|
+
}
|
|
15
|
+
export interface PendingDial {
|
|
16
|
+
dialRequest: DialRequest;
|
|
17
|
+
controller: TimeoutController;
|
|
18
|
+
promise: Promise<Connection>;
|
|
19
|
+
destroy: () => void;
|
|
20
|
+
}
|
|
21
|
+
export interface PendingDialTarget {
|
|
22
|
+
resolve: (value: any) => void;
|
|
23
|
+
reject: (err: Error) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface DialerInit {
|
|
26
|
+
/**
|
|
27
|
+
* Sort the known addresses of a peer before trying to dial
|
|
28
|
+
*/
|
|
29
|
+
addressSorter?: AddressSorter;
|
|
30
|
+
/**
|
|
31
|
+
* Number of max concurrent dials
|
|
32
|
+
*/
|
|
33
|
+
maxParallelDials?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Number of max addresses to dial for a given peer
|
|
36
|
+
*/
|
|
37
|
+
maxAddrsToDial?: number;
|
|
38
|
+
/**
|
|
39
|
+
* How long a dial attempt is allowed to take
|
|
40
|
+
*/
|
|
41
|
+
dialTimeout?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Number of max concurrent dials per peer
|
|
44
|
+
*/
|
|
45
|
+
maxDialsPerPeer?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Multiaddr resolvers to use when dialing
|
|
48
|
+
*/
|
|
49
|
+
resolvers?: Record<string, Resolver>;
|
|
50
|
+
metrics?: ComponentMetricsTracker;
|
|
51
|
+
}
|
|
52
|
+
export declare class Dialer implements Startable, Initializable {
|
|
53
|
+
private components;
|
|
54
|
+
private readonly addressSorter;
|
|
55
|
+
private readonly maxAddrsToDial;
|
|
56
|
+
private readonly timeout;
|
|
57
|
+
private readonly maxDialsPerPeer;
|
|
58
|
+
tokens: number[];
|
|
59
|
+
pendingDials: Map<string, PendingDial>;
|
|
60
|
+
pendingDialTargets: Map<string, PendingDialTarget>;
|
|
61
|
+
private started;
|
|
62
|
+
constructor(init?: DialerInit);
|
|
63
|
+
init(components: Components): void;
|
|
64
|
+
isStarted(): boolean;
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Clears any pending dials
|
|
68
|
+
*/
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Connects to a given `peer` by dialing all of its known addresses.
|
|
72
|
+
* The dial to the first address that is successfully able to upgrade a connection
|
|
73
|
+
* will be used.
|
|
74
|
+
*/
|
|
75
|
+
dial(peer: PeerId | Multiaddr, options?: AbortOptions): Promise<Connection>;
|
|
76
|
+
/**
|
|
77
|
+
* Connects to a given `peer` by dialing all of its known addresses.
|
|
78
|
+
* The dial to the first address that is successfully able to upgrade a connection
|
|
79
|
+
* will be used.
|
|
80
|
+
*/
|
|
81
|
+
_createCancellableDialTarget(peer: PeerId): Promise<DialTarget>;
|
|
82
|
+
/**
|
|
83
|
+
* Creates a DialTarget. The DialTarget is used to create and track
|
|
84
|
+
* the DialRequest to a given peer.
|
|
85
|
+
* If a multiaddr is received it should be the first address attempted.
|
|
86
|
+
* Multiaddrs not supported by the available transports will be filtered out.
|
|
87
|
+
*/
|
|
88
|
+
_createDialTarget(peer: PeerId): Promise<DialTarget>;
|
|
89
|
+
/**
|
|
90
|
+
* Creates a PendingDial that wraps the underlying DialRequest
|
|
91
|
+
*/
|
|
92
|
+
_createPendingDial(dialTarget: DialTarget, options?: AbortOptions): PendingDial;
|
|
93
|
+
getTokens(num: number): number[];
|
|
94
|
+
releaseToken(token: number): void;
|
|
95
|
+
/**
|
|
96
|
+
* Resolve multiaddr recursively
|
|
97
|
+
*/
|
|
98
|
+
_resolve(ma: Multiaddr): Promise<Multiaddr[]>;
|
|
99
|
+
/**
|
|
100
|
+
* Resolve a given multiaddr. If this fails, an empty array will be returned
|
|
101
|
+
*/
|
|
102
|
+
_resolveRecord(ma: Multiaddr): Promise<Multiaddr[]>;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import all from 'it-all';
|
|
3
|
+
import filter from 'it-filter';
|
|
4
|
+
import { pipe } from 'it-pipe';
|
|
5
|
+
import errCode from 'err-code';
|
|
6
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
7
|
+
import { TimeoutController } from 'timeout-abort-controller';
|
|
8
|
+
import { AbortError } from '@libp2p/interfaces/errors';
|
|
9
|
+
import { anySignal } from 'any-signal';
|
|
10
|
+
// @ts-expect-error setMaxListeners is missing from the node 16 types
|
|
11
|
+
import { setMaxListeners } from 'events';
|
|
12
|
+
import { DialRequest } from './dial-request.js';
|
|
13
|
+
import { publicAddressesFirst } from '@libp2p/utils/address-sort';
|
|
14
|
+
import { trackedMap } from '@libp2p/tracked-map';
|
|
15
|
+
import { codes } from '../../errors.js';
|
|
16
|
+
import { DIAL_TIMEOUT, MAX_PARALLEL_DIALS, MAX_PER_PEER_DIALS, MAX_ADDRS_TO_DIAL } from '../../constants.js';
|
|
17
|
+
import { getPeer } from '../../get-peer.js';
|
|
18
|
+
import sort from 'it-sort';
|
|
19
|
+
import { Components } from '@libp2p/interfaces/components';
|
|
20
|
+
import map from 'it-map';
|
|
21
|
+
const log = logger('libp2p:dialer');
|
|
22
|
+
const METRICS_COMPONENT = 'dialler';
|
|
23
|
+
const METRICS_PENDING_DIALS = 'pending-dials';
|
|
24
|
+
const METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets';
|
|
25
|
+
export class Dialer {
|
|
26
|
+
constructor(init = {}) {
|
|
27
|
+
this.components = new Components();
|
|
28
|
+
this.started = false;
|
|
29
|
+
this.addressSorter = init.addressSorter ?? publicAddressesFirst;
|
|
30
|
+
this.maxAddrsToDial = init.maxAddrsToDial ?? MAX_ADDRS_TO_DIAL;
|
|
31
|
+
this.timeout = init.dialTimeout ?? DIAL_TIMEOUT;
|
|
32
|
+
this.maxDialsPerPeer = init.maxDialsPerPeer ?? MAX_PER_PEER_DIALS;
|
|
33
|
+
this.tokens = [...new Array(init.maxParallelDials ?? MAX_PARALLEL_DIALS)].map((_, index) => index);
|
|
34
|
+
this.pendingDials = trackedMap({
|
|
35
|
+
component: METRICS_COMPONENT,
|
|
36
|
+
metric: METRICS_PENDING_DIALS,
|
|
37
|
+
metrics: init.metrics
|
|
38
|
+
});
|
|
39
|
+
this.pendingDialTargets = trackedMap({
|
|
40
|
+
component: METRICS_COMPONENT,
|
|
41
|
+
metric: METRICS_PENDING_DIAL_TARGETS,
|
|
42
|
+
metrics: init.metrics
|
|
43
|
+
});
|
|
44
|
+
for (const [key, value] of Object.entries(init.resolvers ?? {})) {
|
|
45
|
+
Multiaddr.resolvers.set(key, value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
init(components) {
|
|
49
|
+
this.components = components;
|
|
50
|
+
}
|
|
51
|
+
isStarted() {
|
|
52
|
+
return this.started;
|
|
53
|
+
}
|
|
54
|
+
async start() {
|
|
55
|
+
this.started = true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clears any pending dials
|
|
59
|
+
*/
|
|
60
|
+
async stop() {
|
|
61
|
+
this.started = false;
|
|
62
|
+
for (const dial of this.pendingDials.values()) {
|
|
63
|
+
try {
|
|
64
|
+
dial.controller.abort();
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
log.error(err);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
this.pendingDials.clear();
|
|
71
|
+
for (const pendingTarget of this.pendingDialTargets.values()) {
|
|
72
|
+
pendingTarget.reject(new AbortError('Dialer was destroyed'));
|
|
73
|
+
}
|
|
74
|
+
this.pendingDialTargets.clear();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Connects to a given `peer` by dialing all of its known addresses.
|
|
78
|
+
* The dial to the first address that is successfully able to upgrade a connection
|
|
79
|
+
* will be used.
|
|
80
|
+
*/
|
|
81
|
+
async dial(peer, options = {}) {
|
|
82
|
+
const { id, multiaddrs } = getPeer(peer);
|
|
83
|
+
if (this.components.getPeerId().equals(id)) {
|
|
84
|
+
throw errCode(new Error('Tried to dial self'), codes.ERR_DIALED_SELF);
|
|
85
|
+
}
|
|
86
|
+
log('check multiaddrs %p', id);
|
|
87
|
+
if (multiaddrs != null && multiaddrs.length > 0) {
|
|
88
|
+
log('storing multiaddrs %p', id, multiaddrs);
|
|
89
|
+
await this.components.getPeerStore().addressBook.add(id, multiaddrs);
|
|
90
|
+
}
|
|
91
|
+
if (await this.components.getConnectionGater().denyDialPeer(id)) {
|
|
92
|
+
throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED);
|
|
93
|
+
}
|
|
94
|
+
log('creating dial target for %p', id);
|
|
95
|
+
const dialTarget = await this._createCancellableDialTarget(id);
|
|
96
|
+
if (dialTarget.addrs.length === 0) {
|
|
97
|
+
throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES);
|
|
98
|
+
}
|
|
99
|
+
const pendingDial = this.pendingDials.get(dialTarget.id) ?? this._createPendingDial(dialTarget, options);
|
|
100
|
+
try {
|
|
101
|
+
const connection = await pendingDial.promise;
|
|
102
|
+
log('dial succeeded to %s', dialTarget.id);
|
|
103
|
+
return connection;
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
log('dial failed to %s', dialTarget.id, err);
|
|
107
|
+
// Error is a timeout
|
|
108
|
+
if (pendingDial.controller.signal.aborted) {
|
|
109
|
+
err.code = codes.ERR_TIMEOUT;
|
|
110
|
+
}
|
|
111
|
+
log.error(err);
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
pendingDial.destroy();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Connects to a given `peer` by dialing all of its known addresses.
|
|
120
|
+
* The dial to the first address that is successfully able to upgrade a connection
|
|
121
|
+
* will be used.
|
|
122
|
+
*/
|
|
123
|
+
async _createCancellableDialTarget(peer) {
|
|
124
|
+
// Make dial target promise cancellable
|
|
125
|
+
const id = `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
|
|
126
|
+
const cancellablePromise = new Promise((resolve, reject) => {
|
|
127
|
+
this.pendingDialTargets.set(id, { resolve, reject });
|
|
128
|
+
});
|
|
129
|
+
try {
|
|
130
|
+
const dialTarget = await Promise.race([
|
|
131
|
+
this._createDialTarget(peer),
|
|
132
|
+
cancellablePromise
|
|
133
|
+
]);
|
|
134
|
+
return dialTarget;
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
this.pendingDialTargets.delete(id);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Creates a DialTarget. The DialTarget is used to create and track
|
|
142
|
+
* the DialRequest to a given peer.
|
|
143
|
+
* If a multiaddr is received it should be the first address attempted.
|
|
144
|
+
* Multiaddrs not supported by the available transports will be filtered out.
|
|
145
|
+
*/
|
|
146
|
+
async _createDialTarget(peer) {
|
|
147
|
+
const knownAddrs = await pipe(await this.components.getPeerStore().addressBook.get(peer), (source) => filter(source, async (address) => {
|
|
148
|
+
return !(await this.components.getConnectionGater().denyDialMultiaddr(peer, address.multiaddr));
|
|
149
|
+
}), (source) => sort(source, this.addressSorter), (source) => map(source, (address) => {
|
|
150
|
+
const ma = address.multiaddr;
|
|
151
|
+
if (peer.toString() === ma.getPeerId()) {
|
|
152
|
+
return ma;
|
|
153
|
+
}
|
|
154
|
+
return ma.encapsulate(`/p2p/${peer.toString()}`);
|
|
155
|
+
}), async (source) => await all(source));
|
|
156
|
+
const addrs = [];
|
|
157
|
+
for (const a of knownAddrs) {
|
|
158
|
+
const resolvedAddrs = await this._resolve(a);
|
|
159
|
+
resolvedAddrs.forEach(ra => addrs.push(ra));
|
|
160
|
+
}
|
|
161
|
+
// Multiaddrs not supported by the available transports will be filtered out.
|
|
162
|
+
const supportedAddrs = addrs.filter(a => this.components.getTransportManager().transportForMultiaddr(a));
|
|
163
|
+
if (supportedAddrs.length > this.maxAddrsToDial) {
|
|
164
|
+
await this.components.getPeerStore().delete(peer);
|
|
165
|
+
throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES);
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
id: peer.toString(),
|
|
169
|
+
addrs: supportedAddrs
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Creates a PendingDial that wraps the underlying DialRequest
|
|
174
|
+
*/
|
|
175
|
+
_createPendingDial(dialTarget, options = {}) {
|
|
176
|
+
/**
|
|
177
|
+
* @param {Multiaddr} addr
|
|
178
|
+
* @param {{ signal: { aborted: any; }; }} options
|
|
179
|
+
*/
|
|
180
|
+
const dialAction = async (addr, options = {}) => {
|
|
181
|
+
if (options.signal?.aborted === true) {
|
|
182
|
+
throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED);
|
|
183
|
+
}
|
|
184
|
+
return await this.components.getTransportManager().dial(addr, options);
|
|
185
|
+
};
|
|
186
|
+
const dialRequest = new DialRequest({
|
|
187
|
+
addrs: dialTarget.addrs,
|
|
188
|
+
dialAction,
|
|
189
|
+
dialer: this
|
|
190
|
+
});
|
|
191
|
+
// Combine the timeout signal and options.signal, if provided
|
|
192
|
+
const timeoutController = new TimeoutController(this.timeout);
|
|
193
|
+
const signals = [timeoutController.signal];
|
|
194
|
+
(options.signal != null) && signals.push(options.signal);
|
|
195
|
+
const signal = anySignal(signals);
|
|
196
|
+
// this signal will potentially be used while dialing lots of
|
|
197
|
+
// peers so prevent MaxListenersExceededWarning appearing in the console
|
|
198
|
+
try {
|
|
199
|
+
// fails on node < 15.4
|
|
200
|
+
setMaxListeners?.(Infinity, signal);
|
|
201
|
+
}
|
|
202
|
+
catch { }
|
|
203
|
+
const pendingDial = {
|
|
204
|
+
dialRequest,
|
|
205
|
+
controller: timeoutController,
|
|
206
|
+
promise: dialRequest.run({ ...options, signal }),
|
|
207
|
+
destroy: () => {
|
|
208
|
+
timeoutController.clear();
|
|
209
|
+
this.pendingDials.delete(dialTarget.id);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
this.pendingDials.set(dialTarget.id, pendingDial);
|
|
213
|
+
return pendingDial;
|
|
214
|
+
}
|
|
215
|
+
getTokens(num) {
|
|
216
|
+
const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length);
|
|
217
|
+
const tokens = this.tokens.splice(0, total);
|
|
218
|
+
log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length);
|
|
219
|
+
return tokens;
|
|
220
|
+
}
|
|
221
|
+
releaseToken(token) {
|
|
222
|
+
// Guard against duplicate releases
|
|
223
|
+
if (this.tokens.includes(token)) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
log('token %d released', token);
|
|
227
|
+
this.tokens.push(token);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Resolve multiaddr recursively
|
|
231
|
+
*/
|
|
232
|
+
async _resolve(ma) {
|
|
233
|
+
// TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place
|
|
234
|
+
// Now only supporting resolve for dnsaddr
|
|
235
|
+
const resolvableProto = ma.protoNames().includes('dnsaddr');
|
|
236
|
+
// Multiaddr is not resolvable? End recursion!
|
|
237
|
+
if (!resolvableProto) {
|
|
238
|
+
return [ma];
|
|
239
|
+
}
|
|
240
|
+
const resolvedMultiaddrs = await this._resolveRecord(ma);
|
|
241
|
+
const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map(async (nm) => {
|
|
242
|
+
return await this._resolve(nm);
|
|
243
|
+
}));
|
|
244
|
+
const addrs = recursiveMultiaddrs.flat();
|
|
245
|
+
return addrs.reduce((array, newM) => {
|
|
246
|
+
if (array.find(m => m.equals(newM)) == null) {
|
|
247
|
+
array.push(newM);
|
|
248
|
+
}
|
|
249
|
+
return array;
|
|
250
|
+
}, ([]));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Resolve a given multiaddr. If this fails, an empty array will be returned
|
|
254
|
+
*/
|
|
255
|
+
async _resolveRecord(ma) {
|
|
256
|
+
try {
|
|
257
|
+
ma = new Multiaddr(ma.toString()); // Use current multiaddr module
|
|
258
|
+
const multiaddrs = await ma.resolve();
|
|
259
|
+
return multiaddrs;
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
log.error(`multiaddr ${ma.toString()} could not be resolved`, err);
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/connection-manager/dialer/index.ts"],"names":[],"mappings":"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"}
|