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,139 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
2
|
+
import type { MovingAverages, Stats, TransferStats } from '@libp2p/interfaces/metrics';
|
|
3
|
+
export interface StatsEvents {
|
|
4
|
+
'update': CustomEvent<TransferStats>;
|
|
5
|
+
}
|
|
6
|
+
export interface StatsInit {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
initialCounters: ['dataReceived', 'dataSent'];
|
|
9
|
+
movingAverageIntervals: number[];
|
|
10
|
+
computeThrottleMaxQueueSize: number;
|
|
11
|
+
computeThrottleTimeout: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class DefaultStats extends EventEmitter<StatsEvents> implements Stats {
|
|
14
|
+
private readonly enabled;
|
|
15
|
+
queue: Array<[string, number, number]>;
|
|
16
|
+
private stats;
|
|
17
|
+
private frequencyLastTime;
|
|
18
|
+
private frequencyAccumulators;
|
|
19
|
+
private movingAverages;
|
|
20
|
+
private timeout?;
|
|
21
|
+
private readonly computeThrottleMaxQueueSize;
|
|
22
|
+
private readonly computeThrottleTimeout;
|
|
23
|
+
private readonly movingAverageIntervals;
|
|
7
24
|
/**
|
|
8
25
|
* A queue based manager for stat processing
|
|
9
|
-
*
|
|
10
|
-
* @class
|
|
11
|
-
* @param {string[]} initialCounters
|
|
12
|
-
* @param {any} options
|
|
13
26
|
*/
|
|
14
|
-
constructor(
|
|
15
|
-
_options: any;
|
|
16
|
-
_queue: any[];
|
|
17
|
-
/** @type {{ dataReceived: Big, dataSent: Big }} */
|
|
18
|
-
_stats: {
|
|
19
|
-
dataReceived: Big;
|
|
20
|
-
dataSent: Big;
|
|
21
|
-
};
|
|
22
|
-
_frequencyLastTime: number;
|
|
23
|
-
_frequencyAccumulators: {};
|
|
24
|
-
/** @type {{ dataReceived: IMovingAverage[], dataSent: IMovingAverage[] }} */
|
|
25
|
-
_movingAverages: {
|
|
26
|
-
dataReceived: IMovingAverage[];
|
|
27
|
-
dataSent: IMovingAverage[];
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* If there are items in the queue, they will will be processed and
|
|
31
|
-
* the frequency for all items will be updated based on the Timestamp
|
|
32
|
-
* of the last item in the queue. The `update` event will also be emitted
|
|
33
|
-
* with the latest stats.
|
|
34
|
-
*
|
|
35
|
-
* If there are no items in the queue, no action is taken.
|
|
36
|
-
*
|
|
37
|
-
* @private
|
|
38
|
-
* @returns {void}
|
|
39
|
-
*/
|
|
40
|
-
private _update;
|
|
27
|
+
constructor(init: StatsInit);
|
|
41
28
|
/**
|
|
42
29
|
* Initializes the internal timer if there are items in the queue. This
|
|
43
30
|
* should only need to be called if `Stats.stop` was previously called, as
|
|
44
|
-
* `Stats.push` will also start the processing
|
|
45
|
-
*
|
|
46
|
-
* @returns {void}
|
|
31
|
+
* `Stats.push` will also start the processing
|
|
47
32
|
*/
|
|
48
33
|
start(): void;
|
|
49
34
|
/**
|
|
50
35
|
* Stops processing and computing of stats by clearing the internal
|
|
51
|
-
* timer
|
|
52
|
-
*
|
|
53
|
-
* @returns {void}
|
|
36
|
+
* timer
|
|
54
37
|
*/
|
|
55
38
|
stop(): void;
|
|
56
|
-
_timeout: any;
|
|
57
39
|
/**
|
|
58
40
|
* Returns a clone of the current stats.
|
|
59
41
|
*/
|
|
60
|
-
|
|
61
|
-
dataReceived: Big;
|
|
62
|
-
dataSent: Big;
|
|
63
|
-
};
|
|
42
|
+
getSnapshot(): TransferStats;
|
|
64
43
|
/**
|
|
65
44
|
* Returns a clone of the internal movingAverages
|
|
66
45
|
*/
|
|
67
|
-
|
|
68
|
-
dataReceived: IMovingAverage[];
|
|
69
|
-
dataSent: IMovingAverage[];
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Returns a plain JSON object of the stats
|
|
73
|
-
*
|
|
74
|
-
* @returns {*}
|
|
75
|
-
*/
|
|
76
|
-
toJSON(): any;
|
|
46
|
+
getMovingAverages(): MovingAverages;
|
|
77
47
|
/**
|
|
78
48
|
* Pushes the given operation data to the queue, along with the
|
|
79
49
|
* current Timestamp, then resets the update timer.
|
|
80
|
-
*
|
|
81
|
-
* @param {string} counter
|
|
82
|
-
* @param {number} inc
|
|
83
|
-
* @returns {void}
|
|
84
50
|
*/
|
|
85
51
|
push(counter: string, inc: number): void;
|
|
86
52
|
/**
|
|
87
53
|
* Resets the timeout for triggering updates.
|
|
88
|
-
*
|
|
89
|
-
* @private
|
|
90
|
-
* @returns {void}
|
|
91
54
|
*/
|
|
92
|
-
|
|
55
|
+
_resetComputeTimeout(): void;
|
|
93
56
|
/**
|
|
94
57
|
* Calculates and returns the timeout for the next update based on
|
|
95
58
|
* the urgency of the update.
|
|
59
|
+
*/
|
|
60
|
+
_nextTimeout(): number;
|
|
61
|
+
/**
|
|
62
|
+
* If there are items in the queue, they will will be processed and
|
|
63
|
+
* the frequency for all items will be updated based on the Timestamp
|
|
64
|
+
* of the last item in the queue. The `update` event will also be emitted
|
|
65
|
+
* with the latest stats.
|
|
96
66
|
*
|
|
97
|
-
*
|
|
98
|
-
* @returns {number}
|
|
67
|
+
* If there are no items in the queue, no action is taken.
|
|
99
68
|
*/
|
|
100
|
-
|
|
69
|
+
_update(): void;
|
|
101
70
|
/**
|
|
102
71
|
* For each key in the stats, the frequency and moving averages
|
|
103
72
|
* will be updated via Stats._updateFrequencyFor based on the time
|
|
104
73
|
* difference between calls to this method.
|
|
105
|
-
*
|
|
106
|
-
* @private
|
|
107
|
-
* @param {Timestamp} latestTime
|
|
108
|
-
* @returns {void}
|
|
109
74
|
*/
|
|
110
|
-
|
|
75
|
+
_updateFrequency(latestTime: number): void;
|
|
111
76
|
/**
|
|
112
77
|
* Updates the `movingAverages` for the given `key` and also
|
|
113
78
|
* resets the `frequencyAccumulator` for the `key`.
|
|
114
|
-
*
|
|
115
|
-
* @private
|
|
116
|
-
* @param {string} key
|
|
117
|
-
* @param {number} timeDiffMS - Time in milliseconds
|
|
118
|
-
* @param {Timestamp} latestTime - Time in ticks
|
|
119
|
-
* @returns {void}
|
|
120
79
|
*/
|
|
121
|
-
|
|
80
|
+
_updateFrequencyFor(key: 'dataReceived' | 'dataSent', timeDiffMS: number, latestTime: number): void;
|
|
122
81
|
/**
|
|
123
82
|
* For the given operation, `op`, the stats and `frequencyAccumulator`
|
|
124
83
|
* will be updated or initialized if they don't already exist.
|
|
125
|
-
*
|
|
126
|
-
* @private
|
|
127
|
-
* @param {{string, number}[]} op
|
|
128
|
-
* @throws {InvalidNumber}
|
|
129
|
-
* @returns {void}
|
|
130
84
|
*/
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
declare namespace Stats {
|
|
134
|
-
export { IMovingAverage, Big };
|
|
85
|
+
_applyOp(op: [string, number, number]): void;
|
|
135
86
|
}
|
|
136
|
-
import { EventEmitter } from "events";
|
|
137
|
-
type IMovingAverage = import('@vascosantos/moving-average').IMovingAverage;
|
|
138
|
-
type Big = import('bignumber.js').BigNumber;
|
|
139
87
|
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/metrics/stats.
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/metrics/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAIrE,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEtF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;IAC7C,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAChC,2BAA2B,EAAE,MAAM,CAAA;IACnC,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,WAAW,CAAE,YAAW,KAAK;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7C,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IAEjD;;OAEG;gBACU,IAAI,EAAE,SAAS;IAmC5B;;;;OAIG;IACH,KAAK;IAUL;;;OAGG;IACH,IAAI;IAOJ;;OAEG;IACH,WAAW;IAIX;;OAEG;IACH,iBAAiB,IAAK,cAAc;IAIpC;;;OAGG;IACH,IAAI,CAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKlC;;OAEG;IACH,oBAAoB;IAIpB;;;OAGG;IACH,YAAY;IAOZ;;;;;;;OAOG;IACH,OAAO;IAqBP;;;;OAIG;IACH,gBAAgB,CAAE,UAAU,EAAE,MAAM;IASpC;;;OAGG;IACH,mBAAmB,CAAE,GAAG,EAAE,cAAc,GAAG,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAwB7F;;;OAGG;IACH,QAAQ,CAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CA2BvC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
2
|
+
import { createMovingAverage } from './moving-average.js';
|
|
3
|
+
// @ts-expect-error no types
|
|
4
|
+
import retimer from 'retimer';
|
|
5
|
+
export class DefaultStats extends EventEmitter {
|
|
6
|
+
/**
|
|
7
|
+
* A queue based manager for stat processing
|
|
8
|
+
*/
|
|
9
|
+
constructor(init) {
|
|
10
|
+
super();
|
|
11
|
+
this.enabled = init.enabled;
|
|
12
|
+
this.queue = [];
|
|
13
|
+
this.stats = {
|
|
14
|
+
dataReceived: 0n,
|
|
15
|
+
dataSent: 0n
|
|
16
|
+
};
|
|
17
|
+
this.frequencyLastTime = Date.now();
|
|
18
|
+
this.frequencyAccumulators = {};
|
|
19
|
+
this.movingAverages = {
|
|
20
|
+
dataReceived: [],
|
|
21
|
+
dataSent: []
|
|
22
|
+
};
|
|
23
|
+
this.computeThrottleMaxQueueSize = init.computeThrottleMaxQueueSize;
|
|
24
|
+
this.computeThrottleTimeout = init.computeThrottleTimeout;
|
|
25
|
+
this._update = this._update.bind(this);
|
|
26
|
+
this.movingAverageIntervals = init.movingAverageIntervals;
|
|
27
|
+
for (let i = 0; i < init.initialCounters.length; i++) {
|
|
28
|
+
const key = init.initialCounters[i];
|
|
29
|
+
this.stats[key] = 0n;
|
|
30
|
+
this.movingAverages[key] = [];
|
|
31
|
+
for (let k = 0; k < this.movingAverageIntervals.length; k++) {
|
|
32
|
+
const interval = this.movingAverageIntervals[k];
|
|
33
|
+
const ma = this.movingAverages[key][interval] = createMovingAverage(interval);
|
|
34
|
+
ma.push(this.frequencyLastTime, 0);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Initializes the internal timer if there are items in the queue. This
|
|
40
|
+
* should only need to be called if `Stats.stop` was previously called, as
|
|
41
|
+
* `Stats.push` will also start the processing
|
|
42
|
+
*/
|
|
43
|
+
start() {
|
|
44
|
+
if (!this.enabled) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this.queue.length > 0) {
|
|
48
|
+
this._resetComputeTimeout();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Stops processing and computing of stats by clearing the internal
|
|
53
|
+
* timer
|
|
54
|
+
*/
|
|
55
|
+
stop() {
|
|
56
|
+
if (this.timeout != null) {
|
|
57
|
+
this.timeout.clear();
|
|
58
|
+
this.timeout = null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns a clone of the current stats.
|
|
63
|
+
*/
|
|
64
|
+
getSnapshot() {
|
|
65
|
+
return Object.assign({}, this.stats);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns a clone of the internal movingAverages
|
|
69
|
+
*/
|
|
70
|
+
getMovingAverages() {
|
|
71
|
+
return Object.assign({}, this.movingAverages);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Pushes the given operation data to the queue, along with the
|
|
75
|
+
* current Timestamp, then resets the update timer.
|
|
76
|
+
*/
|
|
77
|
+
push(counter, inc) {
|
|
78
|
+
this.queue.push([counter, inc, Date.now()]);
|
|
79
|
+
this._resetComputeTimeout();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resets the timeout for triggering updates.
|
|
83
|
+
*/
|
|
84
|
+
_resetComputeTimeout() {
|
|
85
|
+
this.timeout = retimer(this._update, this._nextTimeout());
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Calculates and returns the timeout for the next update based on
|
|
89
|
+
* the urgency of the update.
|
|
90
|
+
*/
|
|
91
|
+
_nextTimeout() {
|
|
92
|
+
// calculate the need for an update, depending on the queue length
|
|
93
|
+
const urgency = this.queue.length / this.computeThrottleMaxQueueSize;
|
|
94
|
+
const timeout = Math.max(this.computeThrottleTimeout * (1 - urgency), 0);
|
|
95
|
+
return timeout;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* If there are items in the queue, they will will be processed and
|
|
99
|
+
* the frequency for all items will be updated based on the Timestamp
|
|
100
|
+
* of the last item in the queue. The `update` event will also be emitted
|
|
101
|
+
* with the latest stats.
|
|
102
|
+
*
|
|
103
|
+
* If there are no items in the queue, no action is taken.
|
|
104
|
+
*/
|
|
105
|
+
_update() {
|
|
106
|
+
this.timeout = null;
|
|
107
|
+
if (this.queue.length > 0) {
|
|
108
|
+
let last = ['', 0, 0];
|
|
109
|
+
for (last of this.queue) {
|
|
110
|
+
this._applyOp(last);
|
|
111
|
+
}
|
|
112
|
+
this.queue = [];
|
|
113
|
+
if (last.length > 2 && last[0] !== '') {
|
|
114
|
+
this._updateFrequency(last[2]); // contains timestamp of last op
|
|
115
|
+
}
|
|
116
|
+
this.dispatchEvent(new CustomEvent('update', {
|
|
117
|
+
detail: this.stats
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* For each key in the stats, the frequency and moving averages
|
|
123
|
+
* will be updated via Stats._updateFrequencyFor based on the time
|
|
124
|
+
* difference between calls to this method.
|
|
125
|
+
*/
|
|
126
|
+
_updateFrequency(latestTime) {
|
|
127
|
+
const timeDiff = latestTime - this.frequencyLastTime;
|
|
128
|
+
this._updateFrequencyFor('dataReceived', timeDiff, latestTime);
|
|
129
|
+
this._updateFrequencyFor('dataSent', timeDiff, latestTime);
|
|
130
|
+
this.frequencyLastTime = latestTime;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Updates the `movingAverages` for the given `key` and also
|
|
134
|
+
* resets the `frequencyAccumulator` for the `key`.
|
|
135
|
+
*/
|
|
136
|
+
_updateFrequencyFor(key, timeDiffMS, latestTime) {
|
|
137
|
+
const count = this.frequencyAccumulators[key] ?? 0;
|
|
138
|
+
this.frequencyAccumulators[key] = 0;
|
|
139
|
+
// if `timeDiff` is zero, `hz` becomes Infinity, so we fallback to 1ms
|
|
140
|
+
const safeTimeDiff = timeDiffMS ?? 1;
|
|
141
|
+
const hz = (count / safeTimeDiff) * 1000;
|
|
142
|
+
let movingAverages = this.movingAverages[key];
|
|
143
|
+
if (movingAverages == null) {
|
|
144
|
+
movingAverages = this.movingAverages[key] = [];
|
|
145
|
+
}
|
|
146
|
+
const intervals = this.movingAverageIntervals;
|
|
147
|
+
for (let i = 0; i < intervals.length; i++) {
|
|
148
|
+
const movingAverageInterval = intervals[i];
|
|
149
|
+
let movingAverage = movingAverages[movingAverageInterval];
|
|
150
|
+
if (movingAverage == null) {
|
|
151
|
+
movingAverage = movingAverages[movingAverageInterval] = createMovingAverage(movingAverageInterval);
|
|
152
|
+
}
|
|
153
|
+
movingAverage.push(latestTime, hz);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* For the given operation, `op`, the stats and `frequencyAccumulator`
|
|
158
|
+
* will be updated or initialized if they don't already exist.
|
|
159
|
+
*/
|
|
160
|
+
_applyOp(op) {
|
|
161
|
+
const key = op[0];
|
|
162
|
+
const inc = op[1];
|
|
163
|
+
if (typeof inc !== 'number') {
|
|
164
|
+
throw new Error('invalid increment number');
|
|
165
|
+
}
|
|
166
|
+
let n;
|
|
167
|
+
if (!Object.prototype.hasOwnProperty.call(this.stats, key)) {
|
|
168
|
+
// @ts-expect-error cannot index type with key
|
|
169
|
+
n = this.stats[key] = 0n;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
// @ts-expect-error cannot index type with key
|
|
173
|
+
n = this.stats[key];
|
|
174
|
+
}
|
|
175
|
+
// @ts-expect-error cannot index type with key
|
|
176
|
+
this.stats[key] = n + BigInt(inc);
|
|
177
|
+
if (this.frequencyAccumulators[key] == null) {
|
|
178
|
+
this.frequencyAccumulators[key] = 0;
|
|
179
|
+
}
|
|
180
|
+
this.frequencyAccumulators[key] += inc;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/metrics/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,121 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { NatAPI } from '@achingbrain/nat-port-mapper';
|
|
2
|
+
import type { Startable } from '@libp2p/interfaces/startable';
|
|
3
|
+
import type { Components } from '@libp2p/interfaces/components';
|
|
4
|
+
export interface PMPOptions {
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @param {NatManagerProperties & NatManagerOptions} options
|
|
6
|
+
* Whether to enable PMP as well as UPnP
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
_peerId: import("peer-id");
|
|
9
|
-
_addressManager: import("./address-manager");
|
|
10
|
-
_transportManager: import("./transport-manager");
|
|
11
|
-
_enabled: boolean;
|
|
12
|
-
_externalIp: string | undefined;
|
|
13
|
-
_options: {
|
|
14
|
-
description: string;
|
|
15
|
-
ttl: number;
|
|
16
|
-
autoUpdate: true;
|
|
17
|
-
gateway: string | undefined;
|
|
18
|
-
enablePMP: boolean;
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Starts the NAT manager
|
|
22
|
-
*/
|
|
23
|
-
start(): void;
|
|
24
|
-
_start(): Promise<void>;
|
|
25
|
-
_getClient(): {
|
|
26
|
-
/**
|
|
27
|
-
* @param {...any} args
|
|
28
|
-
* @returns {Promise<void>}
|
|
29
|
-
*/
|
|
30
|
-
map: (...args: any[]) => Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* @param {...any} args
|
|
33
|
-
* @returns {Promise<void>}
|
|
34
|
-
*/
|
|
35
|
-
destroy: (...args: any[]) => Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* @param {...any} args
|
|
38
|
-
* @returns {Promise<string>}
|
|
39
|
-
*/
|
|
40
|
-
externalIp: (...args: any[]) => Promise<string>;
|
|
41
|
-
};
|
|
42
|
-
_client: {
|
|
43
|
-
/**
|
|
44
|
-
* @param {...any} args
|
|
45
|
-
* @returns {Promise<void>}
|
|
46
|
-
*/
|
|
47
|
-
map: (...args: any[]) => Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* @param {...any} args
|
|
50
|
-
* @returns {Promise<void>}
|
|
51
|
-
*/
|
|
52
|
-
destroy: (...args: any[]) => Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* @param {...any} args
|
|
55
|
-
* @returns {Promise<string>}
|
|
56
|
-
*/
|
|
57
|
-
externalIp: (...args: any[]) => Promise<string>;
|
|
58
|
-
} | null | undefined;
|
|
59
|
-
/**
|
|
60
|
-
* Stops the NAT manager
|
|
61
|
-
*
|
|
62
|
-
* @async
|
|
63
|
-
*/
|
|
64
|
-
stop(): Promise<void>;
|
|
8
|
+
enabled?: boolean;
|
|
65
9
|
}
|
|
66
|
-
|
|
67
|
-
export { PeerId, TransportManager, AddressManager, NatManagerProperties, NatManagerOptions };
|
|
68
|
-
}
|
|
69
|
-
type NatManagerProperties = {
|
|
10
|
+
export interface NatManagerInit {
|
|
70
11
|
/**
|
|
71
|
-
*
|
|
12
|
+
* Whether to enable the NAT manager
|
|
72
13
|
*/
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* - A transport manager
|
|
76
|
-
*/
|
|
77
|
-
transportManager: TransportManager;
|
|
14
|
+
enabled: boolean;
|
|
78
15
|
/**
|
|
79
|
-
*
|
|
16
|
+
* Pass a value to use instead of auto-detection
|
|
80
17
|
*/
|
|
81
|
-
|
|
82
|
-
};
|
|
83
|
-
type NatManagerOptions = {
|
|
18
|
+
externalAddress?: string;
|
|
84
19
|
/**
|
|
85
|
-
*
|
|
20
|
+
* Pass a value to use instead of auto-detection
|
|
86
21
|
*/
|
|
87
|
-
|
|
22
|
+
localAddress?: string;
|
|
88
23
|
/**
|
|
89
|
-
*
|
|
24
|
+
* A string value to use for the port mapping description on the gateway
|
|
90
25
|
*/
|
|
91
|
-
|
|
26
|
+
description?: string;
|
|
92
27
|
/**
|
|
93
|
-
*
|
|
28
|
+
* How long UPnP port mappings should last for in seconds (minimum 1200)
|
|
94
29
|
*/
|
|
95
|
-
|
|
30
|
+
ttl?: number;
|
|
96
31
|
/**
|
|
97
|
-
*
|
|
32
|
+
* Whether to automatically refresh UPnP port mappings when their TTL is reached
|
|
98
33
|
*/
|
|
99
|
-
|
|
34
|
+
keepAlive: boolean;
|
|
100
35
|
/**
|
|
101
|
-
*
|
|
36
|
+
* Pass a value to use instead of auto-detection
|
|
102
37
|
*/
|
|
103
|
-
|
|
38
|
+
gateway?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare class NatManager implements Startable {
|
|
41
|
+
private readonly components;
|
|
42
|
+
private readonly enabled;
|
|
43
|
+
private readonly externalAddress?;
|
|
44
|
+
private readonly localAddress?;
|
|
45
|
+
private readonly description;
|
|
46
|
+
private readonly ttl;
|
|
47
|
+
private readonly keepAlive;
|
|
48
|
+
private readonly gateway?;
|
|
49
|
+
private started;
|
|
50
|
+
private client?;
|
|
51
|
+
constructor(components: Components, init: NatManagerInit);
|
|
52
|
+
isStarted(): boolean;
|
|
104
53
|
/**
|
|
105
|
-
*
|
|
54
|
+
* Starts the NAT manager
|
|
106
55
|
*/
|
|
107
|
-
|
|
56
|
+
start(): void;
|
|
57
|
+
_start(): Promise<void>;
|
|
58
|
+
_getClient(): Promise<NatAPI>;
|
|
108
59
|
/**
|
|
109
|
-
*
|
|
60
|
+
* Stops the NAT manager
|
|
110
61
|
*/
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
* - Whether to enable PMP as well as UPnP
|
|
114
|
-
*/
|
|
115
|
-
enabled?: boolean | undefined;
|
|
116
|
-
} | undefined;
|
|
117
|
-
};
|
|
118
|
-
type PeerId = import('peer-id');
|
|
119
|
-
type TransportManager = import('./transport-manager');
|
|
120
|
-
type AddressManager = import('./address-manager');
|
|
62
|
+
stop(): Promise<void>;
|
|
63
|
+
}
|
|
121
64
|
//# sourceMappingURL=nat-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nat-manager.d.ts","sourceRoot":"","sources":["../../src/nat-manager.
|
|
1
|
+
{"version":3,"file":"nat-manager.d.ts","sourceRoot":"","sources":["../../src/nat-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAS9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAS/D,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,SAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAQ;gBAEV,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc;IAiBzD,SAAS;IAIT;;OAEG;IACH,KAAK;IAcC,MAAM;IAkDN,UAAU;IAehB;;OAEG;IACG,IAAI;CAYX"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { upnpNat } from '@achingbrain/nat-port-mapper';
|
|
2
|
+
import { logger } from '@libp2p/logger';
|
|
3
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
4
|
+
import { isBrowser } from 'wherearewe';
|
|
5
|
+
import isPrivateIp from 'private-ip';
|
|
6
|
+
import * as pkg from './version.js';
|
|
7
|
+
import errCode from 'err-code';
|
|
8
|
+
import { codes } from './errors.js';
|
|
9
|
+
import { isLoopback } from '@libp2p/utils/multiaddr/is-loopback';
|
|
10
|
+
const log = logger('libp2p:nat');
|
|
11
|
+
const DEFAULT_TTL = 7200;
|
|
12
|
+
function highPort(min = 1024, max = 65535) {
|
|
13
|
+
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
14
|
+
}
|
|
15
|
+
export class NatManager {
|
|
16
|
+
constructor(components, init) {
|
|
17
|
+
this.components = components;
|
|
18
|
+
this.started = false;
|
|
19
|
+
this.enabled = init.enabled;
|
|
20
|
+
this.externalAddress = init.externalAddress;
|
|
21
|
+
this.localAddress = init.localAddress;
|
|
22
|
+
this.description = init.description ?? `${pkg.name}@${pkg.version} ${this.components.getPeerId().toString()}`;
|
|
23
|
+
this.ttl = init.ttl ?? DEFAULT_TTL;
|
|
24
|
+
this.keepAlive = init.keepAlive ?? true;
|
|
25
|
+
this.gateway = init.gateway;
|
|
26
|
+
if (this.ttl < DEFAULT_TTL) {
|
|
27
|
+
throw errCode(new Error(`NatManager ttl should be at least ${DEFAULT_TTL} seconds`), codes.ERR_INVALID_PARAMETERS);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
isStarted() {
|
|
31
|
+
return this.started;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Starts the NAT manager
|
|
35
|
+
*/
|
|
36
|
+
start() {
|
|
37
|
+
if (isBrowser || !this.enabled || this.started) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.started = true;
|
|
41
|
+
// done async to not slow down startup
|
|
42
|
+
this._start().catch((err) => {
|
|
43
|
+
// hole punching errors are non-fatal
|
|
44
|
+
log.error(err);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async _start() {
|
|
48
|
+
const addrs = this.components.getTransportManager().getAddrs();
|
|
49
|
+
for (const addr of addrs) {
|
|
50
|
+
// try to open uPnP ports for each thin waist address
|
|
51
|
+
const { family, host, port, transport } = addr.toOptions();
|
|
52
|
+
if (!addr.isThinWaistAddress() || transport !== 'tcp') {
|
|
53
|
+
// only bare tcp addresses
|
|
54
|
+
// eslint-disable-next-line no-continue
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (isLoopback(addr)) {
|
|
58
|
+
// eslint-disable-next-line no-continue
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (family !== 4) {
|
|
62
|
+
// ignore ipv6
|
|
63
|
+
// eslint-disable-next-line no-continue
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const client = await this._getClient();
|
|
67
|
+
const publicIp = this.externalAddress ?? await client.externalIp();
|
|
68
|
+
if (isPrivateIp(publicIp)) {
|
|
69
|
+
throw new Error(`${publicIp} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`);
|
|
70
|
+
}
|
|
71
|
+
const publicPort = highPort();
|
|
72
|
+
log(`opening uPnP connection from ${publicIp}:${publicPort} to ${host}:${port}`);
|
|
73
|
+
await client.map({
|
|
74
|
+
publicPort,
|
|
75
|
+
localPort: port,
|
|
76
|
+
localAddress: this.localAddress,
|
|
77
|
+
protocol: transport.toUpperCase() === 'TCP' ? 'TCP' : 'UDP'
|
|
78
|
+
});
|
|
79
|
+
this.components.getAddressManager().addObservedAddr(Multiaddr.fromNodeAddress({
|
|
80
|
+
family: 4,
|
|
81
|
+
address: publicIp,
|
|
82
|
+
port: publicPort
|
|
83
|
+
}, transport));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async _getClient() {
|
|
87
|
+
if (this.client != null) {
|
|
88
|
+
return this.client;
|
|
89
|
+
}
|
|
90
|
+
this.client = await upnpNat({
|
|
91
|
+
description: this.description,
|
|
92
|
+
ttl: this.ttl,
|
|
93
|
+
keepAlive: this.keepAlive,
|
|
94
|
+
gateway: this.gateway
|
|
95
|
+
});
|
|
96
|
+
return this.client;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Stops the NAT manager
|
|
100
|
+
*/
|
|
101
|
+
async stop() {
|
|
102
|
+
if (isBrowser || this.client == null) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await this.client.close();
|
|
107
|
+
this.client = undefined;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
log.error(err);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=nat-manager.js.map
|