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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connection-manager/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,57 @@
|
|
|
1
|
-
export = LatencyMonitor;
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @property {number} events How many events were called
|
|
5
|
-
* @property {number} minMS What was the min time for a cb to be called
|
|
6
|
-
* @property {number} maxMS What was the max time for a cb to be called
|
|
7
|
-
* @property {number} avgMs What was the average time for a cb to be called
|
|
8
|
-
* @property {number} lengthMs How long this interval was in ms
|
|
9
|
-
*
|
|
10
|
-
* @typedef {Object} LatencyMonitorOptions
|
|
11
|
-
* @property {number} [latencyCheckIntervalMs=500] - How often to add a latency check event (ms)
|
|
12
|
-
* @property {number} [dataEmitIntervalMs=5000] - How often to summarize latency check events. null or 0 disables event firing
|
|
13
|
-
* @property {Function} [asyncTestFn] - What cb-style async function to use
|
|
14
|
-
* @property {number} [latencyRandomPercentage=5] - What percent (+/-) of latencyCheckIntervalMs should we randomly use? This helps avoid alignment to other events.
|
|
2
|
+
* This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)
|
|
15
3
|
*/
|
|
4
|
+
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
5
|
+
export interface LatencyMonitorEvents {
|
|
6
|
+
'data': CustomEvent<SummaryObject>;
|
|
7
|
+
}
|
|
8
|
+
export interface LatencyMonitorInit {
|
|
9
|
+
/**
|
|
10
|
+
* How often to add a latency check event (ms)
|
|
11
|
+
*/
|
|
12
|
+
latencyCheckIntervalMs?: number;
|
|
13
|
+
/**
|
|
14
|
+
* How often to summarize latency check events. null or 0 disables event firing
|
|
15
|
+
*/
|
|
16
|
+
dataEmitIntervalMs?: number;
|
|
17
|
+
/**
|
|
18
|
+
* What cb-style async function to use
|
|
19
|
+
*/
|
|
20
|
+
asyncTestFn?: (cb: () => void) => void;
|
|
21
|
+
/**
|
|
22
|
+
* What percent (+/-) of latencyCheckIntervalMs should we randomly use? This helps avoid alignment to other events.
|
|
23
|
+
*/
|
|
24
|
+
latencyRandomPercentage?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface SummaryObject {
|
|
27
|
+
/**
|
|
28
|
+
* How many events were called
|
|
29
|
+
*/
|
|
30
|
+
events: number;
|
|
31
|
+
/**
|
|
32
|
+
* What was the min time for a cb to be called
|
|
33
|
+
*/
|
|
34
|
+
minMs: number;
|
|
35
|
+
/**
|
|
36
|
+
* What was the max time for a cb to be called
|
|
37
|
+
*/
|
|
38
|
+
maxMs: number;
|
|
39
|
+
/**
|
|
40
|
+
* What was the average time for a cb to be called
|
|
41
|
+
*/
|
|
42
|
+
avgMs: number;
|
|
43
|
+
/**
|
|
44
|
+
* How long this interval was in ms
|
|
45
|
+
*/
|
|
46
|
+
lengthMs: number;
|
|
47
|
+
}
|
|
48
|
+
interface LatencyData {
|
|
49
|
+
startTime: number;
|
|
50
|
+
events: number;
|
|
51
|
+
minMs: number;
|
|
52
|
+
maxMs: number;
|
|
53
|
+
totalMs: number;
|
|
54
|
+
}
|
|
16
55
|
/**
|
|
17
56
|
* A class to monitor latency of any async function which works in a browser or node. This works by periodically calling
|
|
18
57
|
* the asyncTestFn and timing how long it takes the callback to be called. It can also periodically emit stats about this.
|
|
@@ -31,115 +70,51 @@ export = LatencyMonitor;
|
|
|
31
70
|
* const monitor = new LatencyMonitor({latencyCheckIntervalMs: 1000, dataEmitIntervalMs: 60000, asyncTestFn:ping});
|
|
32
71
|
* monitor.on('data', (summary) => console.log('Ping Pong Latency: %O', summary));
|
|
33
72
|
*/
|
|
34
|
-
declare class LatencyMonitor extends EventEmitter {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
73
|
+
export declare class LatencyMonitor extends EventEmitter<LatencyMonitorEvents> {
|
|
74
|
+
private readonly latencyCheckIntervalMs;
|
|
75
|
+
private readonly latencyRandomPercentage;
|
|
76
|
+
private readonly latencyCheckMultiply;
|
|
77
|
+
private readonly latencyCheckSubtract;
|
|
78
|
+
private readonly dataEmitIntervalMs?;
|
|
79
|
+
private readonly asyncTestFn?;
|
|
80
|
+
private readonly now;
|
|
81
|
+
private readonly getDeltaMS;
|
|
82
|
+
private visibilityChangeEmitter?;
|
|
83
|
+
private latencyData;
|
|
84
|
+
private checkLatencyID?;
|
|
85
|
+
private emitIntervalID?;
|
|
86
|
+
constructor(init?: LatencyMonitorInit);
|
|
46
87
|
start(): void;
|
|
47
|
-
now: (() => number) | NodeJS.HRTime | undefined;
|
|
48
|
-
getDeltaMS: ((startTime: any) => number) | undefined;
|
|
49
|
-
_latencyData: {
|
|
50
|
-
startTime: number | [number, number];
|
|
51
|
-
minMs: number;
|
|
52
|
-
maxMs: number;
|
|
53
|
-
events: number;
|
|
54
|
-
totalMs: number;
|
|
55
|
-
} | undefined;
|
|
56
|
-
_visibilityChangeEmitter: VisibilityChangeEmitter | undefined;
|
|
57
88
|
stop(): void;
|
|
58
89
|
/**
|
|
59
90
|
* Start internal timers
|
|
60
91
|
*
|
|
61
92
|
* @private
|
|
62
93
|
*/
|
|
63
|
-
|
|
64
|
-
_emitIntervalID: NodeJS.Timer | undefined;
|
|
94
|
+
_startTimers(): void;
|
|
65
95
|
/**
|
|
66
96
|
* Stop internal timers
|
|
67
97
|
*
|
|
68
98
|
* @private
|
|
69
99
|
*/
|
|
70
|
-
|
|
71
|
-
_checkLatencyID: NodeJS.Timeout | undefined;
|
|
100
|
+
_stopTimers(): void;
|
|
72
101
|
/**
|
|
73
102
|
* Emit summary only if there were events. It might not have any events if it was forced via a page hidden/show
|
|
74
103
|
*
|
|
75
104
|
* @private
|
|
76
105
|
*/
|
|
77
|
-
|
|
106
|
+
_emitSummary(): void;
|
|
78
107
|
/**
|
|
79
108
|
* Calling this function will end the collection period. If a timing event was already fired and somewhere in the queue,
|
|
80
109
|
* it will not count for this time period
|
|
81
|
-
*
|
|
82
|
-
* @returns {SummaryObject}
|
|
83
110
|
*/
|
|
84
111
|
getSummary(): SummaryObject;
|
|
85
112
|
/**
|
|
86
113
|
* Randomly calls an async fn every roughly latencyCheckIntervalMs (plus some randomness). If no async fn is found,
|
|
87
114
|
* it will simply report on event loop latency.
|
|
88
|
-
*
|
|
89
|
-
* @private
|
|
90
115
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
startTime: number | [number, number];
|
|
94
|
-
minMs: number;
|
|
95
|
-
maxMs: number;
|
|
96
|
-
events: number;
|
|
97
|
-
totalMs: number;
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
declare namespace LatencyMonitor {
|
|
101
|
-
export { SummaryObject, LatencyMonitorOptions };
|
|
116
|
+
checkLatency(): void;
|
|
117
|
+
initLatencyData(): LatencyData;
|
|
102
118
|
}
|
|
103
|
-
|
|
104
|
-
import VisibilityChangeEmitter = require("./visibility-change-emitter");
|
|
105
|
-
type SummaryObject = {
|
|
106
|
-
/**
|
|
107
|
-
* How many events were called
|
|
108
|
-
*/
|
|
109
|
-
events: number;
|
|
110
|
-
/**
|
|
111
|
-
* What was the min time for a cb to be called
|
|
112
|
-
*/
|
|
113
|
-
minMS: number;
|
|
114
|
-
/**
|
|
115
|
-
* What was the max time for a cb to be called
|
|
116
|
-
*/
|
|
117
|
-
maxMS: number;
|
|
118
|
-
/**
|
|
119
|
-
* What was the average time for a cb to be called
|
|
120
|
-
*/
|
|
121
|
-
avgMs: number;
|
|
122
|
-
/**
|
|
123
|
-
* How long this interval was in ms
|
|
124
|
-
*/
|
|
125
|
-
lengthMs: number;
|
|
126
|
-
};
|
|
127
|
-
type LatencyMonitorOptions = {
|
|
128
|
-
/**
|
|
129
|
-
* - How often to add a latency check event (ms)
|
|
130
|
-
*/
|
|
131
|
-
latencyCheckIntervalMs?: number | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* - How often to summarize latency check events. null or 0 disables event firing
|
|
134
|
-
*/
|
|
135
|
-
dataEmitIntervalMs?: number | undefined;
|
|
136
|
-
/**
|
|
137
|
-
* - What cb-style async function to use
|
|
138
|
-
*/
|
|
139
|
-
asyncTestFn?: Function | undefined;
|
|
140
|
-
/**
|
|
141
|
-
* - What percent (+/-) of latencyCheckIntervalMs should we randomly use? This helps avoid alignment to other events.
|
|
142
|
-
*/
|
|
143
|
-
latencyRandomPercentage?: number | undefined;
|
|
144
|
-
};
|
|
119
|
+
export {};
|
|
145
120
|
//# sourceMappingURL=latency-monitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latency-monitor.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/latency-monitor.
|
|
1
|
+
{"version":3,"file":"latency-monitor.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/latency-monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAMrE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAEtC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA0B;IAEvD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,uBAAuB,CAAC,CAAyB;IACzD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAE1B,IAAI,GAAE,kBAAuB;IA8C1C,KAAK;IAwBL,IAAI;IAIJ;;;;OAIG;IACH,YAAY;IAgBZ;;;;OAIG;IACH,WAAW;IAWX;;;;OAIG;IACH,YAAY;IASZ;;;OAGG;IACH,UAAU,IAAK,aAAa;IAmB5B;;;OAGG;IACH,YAAY;IAiDZ,eAAe,IAAK,WAAW;CAShC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)
|
|
3
|
+
*/
|
|
4
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
5
|
+
import { VisibilityChangeEmitter } from './visibility-change-emitter.js';
|
|
6
|
+
import { logger } from '@libp2p/logger';
|
|
7
|
+
const log = logger('libp2p:connection-manager:latency-monitor');
|
|
8
|
+
/**
|
|
9
|
+
* A class to monitor latency of any async function which works in a browser or node. This works by periodically calling
|
|
10
|
+
* the asyncTestFn and timing how long it takes the callback to be called. It can also periodically emit stats about this.
|
|
11
|
+
* This can be disabled and stats can be pulled via setting dataEmitIntervalMs = 0.
|
|
12
|
+
*
|
|
13
|
+
* @extends {EventEmitter}
|
|
14
|
+
*
|
|
15
|
+
* The default implementation is an event loop latency monitor. This works by firing periodic events into the event loop
|
|
16
|
+
* and timing how long it takes to get back.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const monitor = new LatencyMonitor();
|
|
20
|
+
* monitor.on('data', (summary) => console.log('Event Loop Latency: %O', summary));
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const monitor = new LatencyMonitor({latencyCheckIntervalMs: 1000, dataEmitIntervalMs: 60000, asyncTestFn:ping});
|
|
24
|
+
* monitor.on('data', (summary) => console.log('Ping Pong Latency: %O', summary));
|
|
25
|
+
*/
|
|
26
|
+
export class LatencyMonitor extends EventEmitter {
|
|
27
|
+
constructor(init = {}) {
|
|
28
|
+
super();
|
|
29
|
+
const { latencyCheckIntervalMs, dataEmitIntervalMs, asyncTestFn, latencyRandomPercentage } = init;
|
|
30
|
+
// 0 isn't valid here, so its ok to use ||
|
|
31
|
+
this.latencyCheckIntervalMs = latencyCheckIntervalMs ?? 500; // 0.5s
|
|
32
|
+
this.latencyRandomPercentage = latencyRandomPercentage ?? 10;
|
|
33
|
+
this.latencyCheckMultiply = 2 * (this.latencyRandomPercentage / 100.0) * this.latencyCheckIntervalMs;
|
|
34
|
+
this.latencyCheckSubtract = this.latencyCheckMultiply / 2;
|
|
35
|
+
this.dataEmitIntervalMs = (dataEmitIntervalMs === null || dataEmitIntervalMs === 0)
|
|
36
|
+
? undefined
|
|
37
|
+
: dataEmitIntervalMs ?? 5 * 1000; // 5s
|
|
38
|
+
log('latencyCheckIntervalMs: %s dataEmitIntervalMs: %s', this.latencyCheckIntervalMs, this.dataEmitIntervalMs);
|
|
39
|
+
if (this.dataEmitIntervalMs != null) {
|
|
40
|
+
log('Expecting ~%s events per summary', this.latencyCheckIntervalMs / this.dataEmitIntervalMs);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
log('Not emitting summaries');
|
|
44
|
+
}
|
|
45
|
+
this.asyncTestFn = asyncTestFn; // If there is no asyncFn, we measure latency
|
|
46
|
+
// If process: use high resolution timer
|
|
47
|
+
if (globalThis.process?.hrtime != null) {
|
|
48
|
+
log('Using process.hrtime for timing');
|
|
49
|
+
this.now = globalThis.process.hrtime; // eslint-disable-line no-undef
|
|
50
|
+
this.getDeltaMS = (startTime) => {
|
|
51
|
+
const hrtime = this.now(startTime);
|
|
52
|
+
return (hrtime[0] * 1000) + (hrtime[1] / 1000000);
|
|
53
|
+
};
|
|
54
|
+
// Let's try for a timer that only monotonically increases
|
|
55
|
+
}
|
|
56
|
+
else if (typeof window !== 'undefined' && window.performance?.now != null) {
|
|
57
|
+
log('Using performance.now for timing');
|
|
58
|
+
this.now = window.performance.now.bind(window.performance);
|
|
59
|
+
this.getDeltaMS = (startTime) => Math.round(this.now() - startTime);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
log('Using Date.now for timing');
|
|
63
|
+
this.now = Date.now;
|
|
64
|
+
this.getDeltaMS = (startTime) => this.now() - startTime;
|
|
65
|
+
}
|
|
66
|
+
this.latencyData = this.initLatencyData();
|
|
67
|
+
}
|
|
68
|
+
start() {
|
|
69
|
+
// We check for isBrowser because of browsers set max rates of timeouts when a page is hidden,
|
|
70
|
+
// so we fall back to another library
|
|
71
|
+
// See: http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs
|
|
72
|
+
if (isBrowser()) {
|
|
73
|
+
this.visibilityChangeEmitter = new VisibilityChangeEmitter();
|
|
74
|
+
this.visibilityChangeEmitter.addEventListener('visibilityChange', (evt) => {
|
|
75
|
+
const { detail: pageInFocus } = evt;
|
|
76
|
+
if (pageInFocus) {
|
|
77
|
+
this._startTimers();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this._emitSummary();
|
|
81
|
+
this._stopTimers();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (this.visibilityChangeEmitter?.isVisible() === true) {
|
|
86
|
+
this._startTimers();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
stop() {
|
|
90
|
+
this._stopTimers();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Start internal timers
|
|
94
|
+
*
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
_startTimers() {
|
|
98
|
+
// Timer already started, ignore this
|
|
99
|
+
if (this.checkLatencyID != null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.checkLatency();
|
|
103
|
+
if (this.dataEmitIntervalMs != null) {
|
|
104
|
+
this.emitIntervalID = setInterval(() => this._emitSummary(), this.dataEmitIntervalMs);
|
|
105
|
+
if (typeof this.emitIntervalID.unref === 'function') {
|
|
106
|
+
this.emitIntervalID.unref(); // Doesn't block exit
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Stop internal timers
|
|
112
|
+
*
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
115
|
+
_stopTimers() {
|
|
116
|
+
if (this.checkLatencyID != null) {
|
|
117
|
+
clearTimeout(this.checkLatencyID);
|
|
118
|
+
this.checkLatencyID = undefined;
|
|
119
|
+
}
|
|
120
|
+
if (this.emitIntervalID != null) {
|
|
121
|
+
clearInterval(this.emitIntervalID);
|
|
122
|
+
this.emitIntervalID = undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Emit summary only if there were events. It might not have any events if it was forced via a page hidden/show
|
|
127
|
+
*
|
|
128
|
+
* @private
|
|
129
|
+
*/
|
|
130
|
+
_emitSummary() {
|
|
131
|
+
const summary = this.getSummary();
|
|
132
|
+
if (summary.events > 0) {
|
|
133
|
+
this.dispatchEvent(new CustomEvent('data', {
|
|
134
|
+
detail: summary
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Calling this function will end the collection period. If a timing event was already fired and somewhere in the queue,
|
|
140
|
+
* it will not count for this time period
|
|
141
|
+
*/
|
|
142
|
+
getSummary() {
|
|
143
|
+
// We might want to adjust for the number of expected events
|
|
144
|
+
// Example: first 1 event it comes back, then such a long blocker that the next emit check comes
|
|
145
|
+
// Then this fires - looks like no latency!!
|
|
146
|
+
const latency = {
|
|
147
|
+
events: this.latencyData.events,
|
|
148
|
+
minMs: this.latencyData.minMs,
|
|
149
|
+
maxMs: this.latencyData.maxMs,
|
|
150
|
+
avgMs: this.latencyData.events > 0
|
|
151
|
+
? this.latencyData.totalMs / this.latencyData.events
|
|
152
|
+
: Number.POSITIVE_INFINITY,
|
|
153
|
+
lengthMs: this.getDeltaMS(this.latencyData.startTime)
|
|
154
|
+
};
|
|
155
|
+
this.latencyData = this.initLatencyData(); // Clear
|
|
156
|
+
log.trace('Summary: %O', latency);
|
|
157
|
+
return latency;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Randomly calls an async fn every roughly latencyCheckIntervalMs (plus some randomness). If no async fn is found,
|
|
161
|
+
* it will simply report on event loop latency.
|
|
162
|
+
*/
|
|
163
|
+
checkLatency() {
|
|
164
|
+
// Randomness is needed to avoid alignment by accident to regular things in the event loop
|
|
165
|
+
const randomness = (Math.random() * this.latencyCheckMultiply) - this.latencyCheckSubtract;
|
|
166
|
+
// We use this to ensure that in case some overlap somehow, we don't take the wrong startTime/offset
|
|
167
|
+
const localData = {
|
|
168
|
+
deltaOffset: Math.ceil(this.latencyCheckIntervalMs + randomness),
|
|
169
|
+
startTime: this.now()
|
|
170
|
+
};
|
|
171
|
+
const cb = () => {
|
|
172
|
+
// We are already stopped, ignore this datapoint
|
|
173
|
+
if (this.checkLatencyID == null) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const deltaMS = this.getDeltaMS(localData.startTime) - localData.deltaOffset;
|
|
177
|
+
this.checkLatency(); // Start again ASAP
|
|
178
|
+
// Add the data point. If this gets complex, refactor it
|
|
179
|
+
this.latencyData.events++;
|
|
180
|
+
this.latencyData.minMs = Math.min(this.latencyData.minMs, deltaMS);
|
|
181
|
+
this.latencyData.maxMs = Math.max(this.latencyData.maxMs, deltaMS);
|
|
182
|
+
this.latencyData.totalMs += deltaMS;
|
|
183
|
+
log.trace('MS: %s Data: %O', deltaMS, this.latencyData);
|
|
184
|
+
};
|
|
185
|
+
log.trace('localData: %O', localData);
|
|
186
|
+
this.checkLatencyID = setTimeout(() => {
|
|
187
|
+
// This gets rid of including event loop
|
|
188
|
+
if (this.asyncTestFn != null) {
|
|
189
|
+
// Clear timing related things
|
|
190
|
+
localData.deltaOffset = 0;
|
|
191
|
+
localData.startTime = this.now();
|
|
192
|
+
this.asyncTestFn(cb);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// setTimeout is not more accurate than 1ms, so this will ensure positive numbers. Add 1 to emitted data to remove.
|
|
196
|
+
// This is not the best, but for now it'll be just fine. This isn't meant to be sub ms accurate.
|
|
197
|
+
localData.deltaOffset -= 1;
|
|
198
|
+
// If there is no function to test, we mean check latency which is a special case that is really cb => cb()
|
|
199
|
+
// We avoid that for the few extra function all overheads. Also, we want to keep the timers different
|
|
200
|
+
cb();
|
|
201
|
+
}
|
|
202
|
+
}, localData.deltaOffset);
|
|
203
|
+
if (typeof this.checkLatencyID.unref === 'function') {
|
|
204
|
+
this.checkLatencyID.unref(); // Doesn't block exit
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
initLatencyData() {
|
|
208
|
+
return {
|
|
209
|
+
startTime: this.now(),
|
|
210
|
+
minMs: Number.POSITIVE_INFINITY,
|
|
211
|
+
maxMs: Number.NEGATIVE_INFINITY,
|
|
212
|
+
events: 0,
|
|
213
|
+
totalMs: 0
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function isBrowser() {
|
|
218
|
+
return typeof globalThis.window !== 'undefined';
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=latency-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latency-monitor.js","sourceRoot":"","sources":["../../../src/connection-manager/latency-monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,MAAM,GAAG,GAAG,MAAM,CAAC,2CAA2C,CAAC,CAAA;AA+D/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAkC;IAepE,YAAa,OAA2B,EAAE;QACxC,KAAK,EAAE,CAAA;QAEP,MAAM,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAA;QAEjG,0CAA0C;QAC1C,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,GAAG,CAAA,CAAC,OAAO;QACnE,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,IAAI,EAAE,CAAA;QAC5D,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACpG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;QAEzD,IAAI,CAAC,kBAAkB,GAAG,CAAC,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,CAAC,CAAC;YACjF,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,kBAAkB,IAAI,CAAC,GAAG,IAAI,CAAA,CAAC,KAAK;QACxC,GAAG,CAAC,mDAAmD,EACrD,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACvD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;YACnC,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAA;SAC/F;aAAM;YACL,GAAG,CAAC,wBAAwB,CAAC,CAAA;SAC9B;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA,CAAC,6CAA6C;QAE5E,wCAAwC;QACxC,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE;YACtC,GAAG,CAAC,iCAAiC,CAAC,CAAA;YACtC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAA,CAAC,+BAA+B;YACpE,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAClC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;YACnD,CAAC,CAAA;YACD,0DAA0D;SAC3D;aAAM,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE;YAC3E,GAAG,CAAC,kCAAkC,CAAC,CAAA;YACvC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAC1D,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAA;SACpE;aAAM;YACL,GAAG,CAAC,2BAA2B,CAAC,CAAA;YAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;YACnB,IAAI,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;SACxD;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;IAC3C,CAAC;IAED,KAAK;QACH,8FAA8F;QAC9F,qCAAqC;QACrC,wGAAwG;QACxG,IAAI,SAAS,EAAE,EAAE;YACf,IAAI,CAAC,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAA;YAE5D,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAA;gBAEnC,IAAI,WAAW,EAAE;oBACf,IAAI,CAAC,YAAY,EAAE,CAAA;iBACpB;qBAAM;oBACL,IAAI,CAAC,YAAY,EAAE,CAAA;oBACnB,IAAI,CAAC,WAAW,EAAE,CAAA;iBACnB;YACH,CAAC,CAAC,CAAA;SACH;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YACtD,IAAI,CAAC,YAAY,EAAE,CAAA;SACpB;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,qCAAqC;QACrC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC/B,OAAM;SACP;QAED,IAAI,CAAC,YAAY,EAAE,CAAA;QAEnB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;YACnC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACrF,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,KAAK,UAAU,EAAE;gBACnD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA,CAAC,qBAAqB;aAClD;SACF;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC/B,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACjC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;SAChC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC/B,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;SAChC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAgB,MAAM,EAAE;gBACxD,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC,CAAA;SACJ;IACH,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,4DAA4D;QAC5D,gGAAgG;QAChG,4CAA4C;QAC5C,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YAC/B,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YAC7B,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YAC7B,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;gBACpD,CAAC,CAAC,MAAM,CAAC,iBAAiB;YAC5B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;SACtD,CAAA;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA,CAAC,QAAQ;QAElD,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACjC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,0FAA0F;QAC1F,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAA;QAE1F,oGAAoG;QACpG,MAAM,SAAS,GAAG;YAChB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;YAChE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;QAED,MAAM,EAAE,GAAG,GAAG,EAAE;YACd,gDAAgD;YAChD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;gBAC/B,OAAM;aACP;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,WAAW,CAAA;YAC5E,IAAI,CAAC,YAAY,EAAE,CAAA,CAAC,mBAAmB;YAEvC,wDAAwD;YACxD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAA;YACzB,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAClE,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAClE,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAA;YACnC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QACzD,CAAC,CAAA;QACD,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;QAErC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,wCAAwC;YACxC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC5B,8BAA8B;gBAC9B,SAAS,CAAC,WAAW,GAAG,CAAC,CAAA;gBACzB,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAChC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;aACrB;iBAAM;gBACL,mHAAmH;gBACnH,gGAAgG;gBAChG,SAAS,CAAC,WAAW,IAAI,CAAC,CAAA;gBAC1B,2GAA2G;gBAC3G,qGAAqG;gBACrG,EAAE,EAAE,CAAA;aACL;QACH,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QAEzB,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,KAAK,UAAU,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA,CAAC,qBAAqB;SAClD;IACH,CAAC;IAED,eAAe;QACb,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,MAAM,CAAC,iBAAiB;YAC/B,KAAK,EAAE,MAAM,CAAC,iBAAiB;YAC/B,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;SACX,CAAA;IACH,CAAC;CACF;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,CAAA;AACjD,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
5
|
+
interface VisibilityChangeEmitterEvents {
|
|
6
|
+
'visibilityChange': CustomEvent<boolean>;
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* Listen to page visibility change events (i.e. when the page is focused / blurred) by an event emitter.
|
|
4
10
|
*
|
|
@@ -21,12 +27,9 @@ export = VisibilityChangeEmitter;
|
|
|
21
27
|
* // To access the visibility state directly, call:
|
|
22
28
|
* console.log('Am I focused now? ' + myVisibilityEmitter.isVisible());
|
|
23
29
|
*/
|
|
24
|
-
declare class VisibilityChangeEmitter extends EventEmitter {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
* @class
|
|
29
|
-
*/
|
|
30
|
+
export declare class VisibilityChangeEmitter extends EventEmitter<VisibilityChangeEmitterEvents> {
|
|
31
|
+
private hidden;
|
|
32
|
+
private visibilityChange;
|
|
30
33
|
constructor();
|
|
31
34
|
/**
|
|
32
35
|
* document.hidden and document.visibilityChange are the two variables we need to check for;
|
|
@@ -37,23 +40,19 @@ declare class VisibilityChangeEmitter extends EventEmitter {
|
|
|
37
40
|
*
|
|
38
41
|
* @private
|
|
39
42
|
*/
|
|
40
|
-
|
|
41
|
-
_hidden: string | undefined;
|
|
42
|
-
_visibilityChange: string | undefined;
|
|
43
|
+
_initializeVisibilityVarNames(): void;
|
|
43
44
|
/**
|
|
44
45
|
* Adds an event listener on the document that listens to changes in document.visibilityChange
|
|
45
46
|
* (or whatever name by which the visibilityChange variable is known in the browser)
|
|
46
47
|
*
|
|
47
48
|
* @private
|
|
48
49
|
*/
|
|
49
|
-
|
|
50
|
+
_addVisibilityChangeListener(): void;
|
|
50
51
|
/**
|
|
51
52
|
* The function returns ```true``` if the page is visible or ```false``` if the page is not visible and
|
|
52
53
|
* ```undefined``` if the page visibility API is not supported by the browser.
|
|
53
|
-
*
|
|
54
|
-
* @returns {boolean | void} whether the page is now visible or not (undefined is unknown)
|
|
55
54
|
*/
|
|
56
|
-
isVisible(): boolean |
|
|
55
|
+
isVisible(): boolean | undefined;
|
|
57
56
|
/**
|
|
58
57
|
* The function that is called when document.visibilityChange has changed
|
|
59
58
|
* It emits an event called visibilityChange and sends the value of document.hidden as a
|
|
@@ -61,7 +60,7 @@ declare class VisibilityChangeEmitter extends EventEmitter {
|
|
|
61
60
|
*
|
|
62
61
|
* @private
|
|
63
62
|
*/
|
|
64
|
-
|
|
63
|
+
_handleVisibilityChange(): void;
|
|
65
64
|
}
|
|
66
|
-
|
|
65
|
+
export {};
|
|
67
66
|
//# sourceMappingURL=visibility-change-emitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visibility-change-emitter.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/visibility-change-emitter.
|
|
1
|
+
{"version":3,"file":"visibility-change-emitter.d.ts","sourceRoot":"","sources":["../../../src/connection-manager/visibility-change-emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAKrE,UAAU,6BAA6B;IACrC,kBAAkB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CACzC;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,uBAAwB,SAAQ,YAAY,CAAC,6BAA6B,CAAC;IACtF,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAAQ;;IAchC;;;;;;;;OAQG;IACH,6BAA6B;IAyB7B;;;;;OAKG;IACH,4BAA4B;IAU5B;;;OAGG;IACH,SAAS;IAUT;;;;;;OAMG;IACH,uBAAuB;CAUxB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)
|
|
3
|
+
*/
|
|
4
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
5
|
+
import { logger } from '@libp2p/logger';
|
|
6
|
+
const log = logger('libp2p:connection-manager:latency-monitor:visibility-change-emitter');
|
|
7
|
+
/**
|
|
8
|
+
* Listen to page visibility change events (i.e. when the page is focused / blurred) by an event emitter.
|
|
9
|
+
*
|
|
10
|
+
* Warning: This does not work on all browsers, but should work on all modern browsers
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
*
|
|
14
|
+
* const myVisibilityEmitter = new VisibilityChangeEmitter();
|
|
15
|
+
*
|
|
16
|
+
* myVisibilityEmitter.on('visibilityChange', (pageInFocus) => {
|
|
17
|
+
* if ( pageInFocus ){
|
|
18
|
+
* // Page is in focus
|
|
19
|
+
* console.log('In focus');
|
|
20
|
+
* }
|
|
21
|
+
* else {
|
|
22
|
+
* // Page is blurred
|
|
23
|
+
* console.log('Out of focus');
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
26
|
+
* // To access the visibility state directly, call:
|
|
27
|
+
* console.log('Am I focused now? ' + myVisibilityEmitter.isVisible());
|
|
28
|
+
*/
|
|
29
|
+
export class VisibilityChangeEmitter extends EventEmitter {
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
this.hidden = 'hidden';
|
|
33
|
+
this.visibilityChange = 'visibilityChange';
|
|
34
|
+
if (globalThis.document != null) {
|
|
35
|
+
this._initializeVisibilityVarNames();
|
|
36
|
+
this._addVisibilityChangeListener();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* document.hidden and document.visibilityChange are the two variables we need to check for;
|
|
41
|
+
* Since these variables are named differently in different browsers, this function sets
|
|
42
|
+
* the appropriate name based on the browser being used. Once executed, tha actual names of
|
|
43
|
+
* document.hidden and document.visibilityChange are found in this._hidden and this._visibilityChange
|
|
44
|
+
* respectively
|
|
45
|
+
*
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
_initializeVisibilityVarNames() {
|
|
49
|
+
let hidden = 'hidden';
|
|
50
|
+
let visibilityChange = 'visibilitychange';
|
|
51
|
+
if (typeof globalThis.document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support
|
|
52
|
+
hidden = 'hidden';
|
|
53
|
+
visibilityChange = 'visibilitychange';
|
|
54
|
+
// @ts-expect-error mozHidden is a non-standard field name
|
|
55
|
+
}
|
|
56
|
+
else if (typeof globalThis.document.mozHidden !== 'undefined') {
|
|
57
|
+
hidden = 'mozHidden';
|
|
58
|
+
visibilityChange = 'mozvisibilitychange';
|
|
59
|
+
// @ts-expect-error msHidden is a non-standard field name
|
|
60
|
+
}
|
|
61
|
+
else if (typeof globalThis.document.msHidden !== 'undefined') {
|
|
62
|
+
hidden = 'msHidden';
|
|
63
|
+
visibilityChange = 'msvisibilitychange';
|
|
64
|
+
// @ts-expect-error webkitHidden is a non-standard field name
|
|
65
|
+
}
|
|
66
|
+
else if (typeof globalThis.document.webkitHidden !== 'undefined') {
|
|
67
|
+
hidden = 'webkitHidden';
|
|
68
|
+
visibilityChange = 'webkitvisibilitychange';
|
|
69
|
+
}
|
|
70
|
+
this.hidden = hidden;
|
|
71
|
+
this.visibilityChange = visibilityChange;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Adds an event listener on the document that listens to changes in document.visibilityChange
|
|
75
|
+
* (or whatever name by which the visibilityChange variable is known in the browser)
|
|
76
|
+
*
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
_addVisibilityChangeListener() {
|
|
80
|
+
// @ts-expect-error cannot index document object with string key
|
|
81
|
+
if (typeof globalThis.document.addEventListener === 'undefined' || typeof document[this.hidden] === 'undefined') {
|
|
82
|
+
log('Checking page visibility requires a browser that supports the Page Visibility API.');
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Handle page visibility change
|
|
86
|
+
globalThis.document.addEventListener(this.visibilityChange, this._handleVisibilityChange.bind(this), false);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The function returns ```true``` if the page is visible or ```false``` if the page is not visible and
|
|
91
|
+
* ```undefined``` if the page visibility API is not supported by the browser.
|
|
92
|
+
*/
|
|
93
|
+
isVisible() {
|
|
94
|
+
// @ts-expect-error cannot index document object with string key
|
|
95
|
+
if (this.hidden === undefined || document[this.hidden] === undefined) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
// @ts-expect-error cannot index document object with string key
|
|
99
|
+
return document[this.hidden] == null;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The function that is called when document.visibilityChange has changed
|
|
103
|
+
* It emits an event called visibilityChange and sends the value of document.hidden as a
|
|
104
|
+
* parameter
|
|
105
|
+
*
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
_handleVisibilityChange() {
|
|
109
|
+
// @ts-expect-error cannot index document object with string key
|
|
110
|
+
const visible = globalThis.document[this.hidden] === false;
|
|
111
|
+
log(visible ? 'Page Visible' : 'Page Hidden');
|
|
112
|
+
// Emit the event
|
|
113
|
+
this.dispatchEvent(new CustomEvent('visibilityChange', {
|
|
114
|
+
detail: visible
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=visibility-change-emitter.js.map
|