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,6 @@
|
|
|
1
|
+
export const INVALID_PEER = 'Not a valid peer connection';
|
|
2
|
+
export const INVALID_PSK = 'Your private shared key is invalid';
|
|
3
|
+
export const NO_LOCAL_ID = 'No local private key provided';
|
|
4
|
+
export const NO_HANDSHAKE_CONNECTION = 'No connection for the handshake provided';
|
|
5
|
+
export const STREAM_ENDED = 'Stream ended prematurely';
|
|
6
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pnet/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,6BAA6B,CAAA;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,oCAAoC,CAAA;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAA;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,0CAA0C,CAAA;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAA"}
|
package/dist/src/pnet/index.d.ts
CHANGED
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { MultiaddrConnection } from '@libp2p/interfaces/transport';
|
|
2
|
+
import type { ConnectionProtector } from '@libp2p/interfaces/connection';
|
|
3
|
+
export { generateKey } from './key-generator.js';
|
|
4
|
+
export interface ProtectorInit {
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
psk: Uint8Array;
|
|
7
|
+
}
|
|
8
|
+
export declare class PreSharedKeyConnectionProtector implements ConnectionProtector {
|
|
9
|
+
tag: string;
|
|
10
|
+
private readonly psk;
|
|
11
|
+
private readonly enabled;
|
|
6
12
|
/**
|
|
7
13
|
* Takes a Private Shared Key (psk) and provides a `protect` method
|
|
8
14
|
* for wrapping existing connections in a private encryption stream.
|
|
9
|
-
*
|
|
10
|
-
* @param {Uint8Array} keyBuffer - The private shared key buffer
|
|
11
|
-
* @class
|
|
12
15
|
*/
|
|
13
|
-
constructor(
|
|
14
|
-
psk: Uint8Array;
|
|
15
|
-
tag: string | undefined;
|
|
16
|
+
constructor(init: ProtectorInit);
|
|
16
17
|
/**
|
|
17
18
|
* Takes a given Connection and creates a private encryption stream
|
|
18
19
|
* between its two peers from the PSK the Protector instance was
|
|
19
20
|
* created with.
|
|
20
|
-
*
|
|
21
|
-
* @param {MultiaddrConnection} connection - The connection to protect
|
|
22
|
-
* @returns {Promise<MultiaddrConnection>} A protected duplex iterable
|
|
23
21
|
*/
|
|
24
22
|
protect(connection: MultiaddrConnection): Promise<MultiaddrConnection>;
|
|
25
23
|
}
|
|
26
|
-
declare namespace Protector {
|
|
27
|
-
export { Errors as errors, generate, MultiaddrConnection };
|
|
28
|
-
}
|
|
29
|
-
type MultiaddrConnection = import('libp2p-interfaces/src/transport/types').MultiaddrConnection;
|
|
30
|
-
import Errors = require("./errors");
|
|
31
|
-
declare var generate: typeof import("./key-generator");
|
|
32
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pnet/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pnet/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAIxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,EAAE,UAAU,CAAA;CAChB;AAED,qBAAa,+BAAgC,YAAW,mBAAmB;IAClE,GAAG,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;OAGG;gBACU,IAAI,EAAE,aAAa;IAahC;;;;OAIG;IACG,OAAO,CAAE,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA2C9E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { pipe } from 'it-pipe';
|
|
3
|
+
import errCode from 'err-code';
|
|
4
|
+
import { duplexPair } from 'it-pair/duplex';
|
|
5
|
+
import { randomBytes } from '@libp2p/crypto';
|
|
6
|
+
import * as Errors from './errors.js';
|
|
7
|
+
import { codes } from '../errors.js';
|
|
8
|
+
import { createBoxStream, createUnboxStream, decodeV1PSK } from './crypto.js';
|
|
9
|
+
import { handshake } from 'it-handshake';
|
|
10
|
+
import { NONCE_LENGTH } from './key-generator.js';
|
|
11
|
+
const log = logger('libp2p:pnet');
|
|
12
|
+
export { generateKey } from './key-generator.js';
|
|
13
|
+
export class PreSharedKeyConnectionProtector {
|
|
14
|
+
/**
|
|
15
|
+
* Takes a Private Shared Key (psk) and provides a `protect` method
|
|
16
|
+
* for wrapping existing connections in a private encryption stream.
|
|
17
|
+
*/
|
|
18
|
+
constructor(init) {
|
|
19
|
+
this.enabled = init.enabled !== false;
|
|
20
|
+
if (this.enabled) {
|
|
21
|
+
const decodedPSK = decodeV1PSK(init.psk);
|
|
22
|
+
this.psk = decodedPSK.psk;
|
|
23
|
+
this.tag = decodedPSK.tag ?? '';
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.psk = new Uint8Array();
|
|
27
|
+
this.tag = '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Takes a given Connection and creates a private encryption stream
|
|
32
|
+
* between its two peers from the PSK the Protector instance was
|
|
33
|
+
* created with.
|
|
34
|
+
*/
|
|
35
|
+
async protect(connection) {
|
|
36
|
+
if (!this.enabled) {
|
|
37
|
+
return connection;
|
|
38
|
+
}
|
|
39
|
+
if (connection == null) {
|
|
40
|
+
throw errCode(new Error(Errors.NO_HANDSHAKE_CONNECTION), codes.ERR_INVALID_PARAMETERS);
|
|
41
|
+
}
|
|
42
|
+
// Exchange nonces
|
|
43
|
+
log('protecting the connection');
|
|
44
|
+
const localNonce = randomBytes(NONCE_LENGTH);
|
|
45
|
+
const shake = handshake(connection);
|
|
46
|
+
shake.write(localNonce);
|
|
47
|
+
const result = await shake.reader.next(NONCE_LENGTH);
|
|
48
|
+
if (result.value == null) {
|
|
49
|
+
throw errCode(new Error(Errors.STREAM_ENDED), codes.ERR_INVALID_PARAMETERS);
|
|
50
|
+
}
|
|
51
|
+
const remoteNonce = result.value.slice();
|
|
52
|
+
shake.rest();
|
|
53
|
+
// Create the boxing/unboxing pipe
|
|
54
|
+
log('exchanged nonces');
|
|
55
|
+
const [internal, external] = duplexPair();
|
|
56
|
+
pipe(external,
|
|
57
|
+
// Encrypt all outbound traffic
|
|
58
|
+
createBoxStream(localNonce, this.psk), shake.stream,
|
|
59
|
+
// Decrypt all inbound traffic
|
|
60
|
+
createUnboxStream(remoteNonce, this.psk), external).catch(log.error);
|
|
61
|
+
return {
|
|
62
|
+
...connection,
|
|
63
|
+
...internal
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pnet/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
export = generate;
|
|
2
1
|
/**
|
|
3
2
|
* Generates a PSK that can be used in a libp2p-pnet private network
|
|
4
3
|
*
|
|
5
4
|
* @param {Uint8Array} bytes - An object to write the psk into
|
|
6
5
|
* @returns {void}
|
|
7
6
|
*/
|
|
8
|
-
declare function
|
|
9
|
-
declare
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
declare var NONCE_LENGTH: number;
|
|
13
|
-
declare const KEY_LENGTH: 32;
|
|
7
|
+
export declare function generateKey(bytes: Uint8Array): void;
|
|
8
|
+
export declare const NONCE_LENGTH = 24;
|
|
9
|
+
export declare const KEY_LENGTH = 32;
|
|
14
10
|
//# sourceMappingURL=key-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-generator.d.ts","sourceRoot":"","sources":["../../../src/pnet/key-generator.
|
|
1
|
+
{"version":3,"file":"key-generator.d.ts","sourceRoot":"","sources":["../../../src/pnet/key-generator.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAE,KAAK,EAAE,UAAU,QAK7C;AAED,eAAO,MAAM,YAAY,KAAK,CAAA;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { randomBytes } from '@libp2p/crypto';
|
|
2
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
3
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
+
/**
|
|
5
|
+
* Generates a PSK that can be used in a libp2p-pnet private network
|
|
6
|
+
*
|
|
7
|
+
* @param {Uint8Array} bytes - An object to write the psk into
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
export function generateKey(bytes) {
|
|
11
|
+
const psk = uint8ArrayToString(randomBytes(KEY_LENGTH), 'base16');
|
|
12
|
+
const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk);
|
|
13
|
+
bytes.set(key);
|
|
14
|
+
}
|
|
15
|
+
export const NONCE_LENGTH = 24;
|
|
16
|
+
export const KEY_LENGTH = 32;
|
|
17
|
+
try {
|
|
18
|
+
if (require.main === module) {
|
|
19
|
+
// @ts-expect-error
|
|
20
|
+
generate(process.stdout);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=key-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-generator.js","sourceRoot":"","sources":["../../../src/pnet/key-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAE,KAAiB;IAC5C,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjE,MAAM,GAAG,GAAG,oBAAoB,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAA;IAE3E,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAA;AAC9B,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAA;AAE5B,IAAI;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;QAC3B,mBAAmB;QACnB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;KACzB;CACF;AAAC,OAAO,KAAU,EAAE;CAEpB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
2
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
3
|
+
import type { PublishResult, PubSub, PubSubEvents, StrictNoSign, StrictSign } from '@libp2p/interfaces/pubsub';
|
|
4
|
+
export declare class DummyPubSub extends EventEmitter<PubSubEvents> implements PubSub {
|
|
5
|
+
isStarted(): boolean;
|
|
6
|
+
start(): void | Promise<void>;
|
|
7
|
+
stop(): void | Promise<void>;
|
|
8
|
+
get globalSignaturePolicy(): typeof StrictSign | typeof StrictNoSign;
|
|
9
|
+
get multicodecs(): string[];
|
|
10
|
+
getPeers(): PeerId[];
|
|
11
|
+
getTopics(): string[];
|
|
12
|
+
subscribe(): void;
|
|
13
|
+
unsubscribe(): void;
|
|
14
|
+
getSubscribers(): PeerId[];
|
|
15
|
+
publish(): Promise<PublishResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=dummy-pubsub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy-pubsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/dummy-pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAI9G,qBAAa,WAAY,SAAQ,YAAY,CAAC,YAAY,CAAE,YAAW,MAAM;IAC3E,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9B,IAAI,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7B,IAAI,qBAAqB,IAAK,OAAO,UAAU,GAAG,OAAO,YAAY,CAEpE;IAED,IAAI,WAAW,IAAK,MAAM,EAAE,CAE3B;IAED,QAAQ,IAAK,MAAM,EAAE;IAIrB,SAAS,IAAK,MAAM,EAAE;IAItB,SAAS,IAAK,IAAI;IAIlB,WAAW,IAAK,IAAI;IAIpB,cAAc,IAAK,MAAM,EAAE;IAIrB,OAAO,IAAK,OAAO,CAAC,aAAa,CAAC;CAGzC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EventEmitter } from '@libp2p/interfaces/events';
|
|
2
|
+
import errCode from 'err-code';
|
|
3
|
+
import { messages, codes } from '../errors.js';
|
|
4
|
+
export class DummyPubSub extends EventEmitter {
|
|
5
|
+
isStarted() {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
start() {
|
|
9
|
+
}
|
|
10
|
+
stop() {
|
|
11
|
+
}
|
|
12
|
+
get globalSignaturePolicy() {
|
|
13
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
14
|
+
}
|
|
15
|
+
get multicodecs() {
|
|
16
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
17
|
+
}
|
|
18
|
+
getPeers() {
|
|
19
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
20
|
+
}
|
|
21
|
+
getTopics() {
|
|
22
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
23
|
+
}
|
|
24
|
+
subscribe() {
|
|
25
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
26
|
+
}
|
|
27
|
+
unsubscribe() {
|
|
28
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
29
|
+
}
|
|
30
|
+
getSubscribers() {
|
|
31
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
32
|
+
}
|
|
33
|
+
async publish() {
|
|
34
|
+
throw errCode(new Error(messages.PUBSUB_DISABLED), codes.ERR_PUBSUB_DISABLED);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=dummy-pubsub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dummy-pubsub.js","sourceRoot":"","sources":["../../../src/pubsub/dummy-pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,OAAO,WAAY,SAAQ,YAA0B;IACzD,SAAS;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK;IAEL,CAAC;IAED,IAAI;IAEJ,CAAC;IAED,IAAI,qBAAqB;QACvB,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,WAAW;QACb,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,SAAS;QACP,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,SAAS;QACP,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,WAAW;QACT,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC/E,CAAC;CACF"}
|
package/dist/src/registrar.d.ts
CHANGED
|
@@ -1,82 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* @typedef {import('libp2p-interfaces/src/connection').Connection} Connection
|
|
7
|
-
* @typedef {import('./').HandlerProps} HandlerProps
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
*/
|
|
1
|
+
import { Topology } from '@libp2p/interfaces/topology';
|
|
2
|
+
import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar';
|
|
3
|
+
import type { PeerProtocolsChangeData } from '@libp2p/interfaces/peer-store';
|
|
4
|
+
import type { Connection } from '@libp2p/interfaces/connection';
|
|
5
|
+
import type { Components } from '@libp2p/interfaces/components';
|
|
12
6
|
/**
|
|
13
7
|
* Responsible for notifying registered protocols of events in the network.
|
|
14
8
|
*/
|
|
15
|
-
declare class Registrar {
|
|
9
|
+
export declare class DefaultRegistrar implements Registrar {
|
|
10
|
+
private readonly topologies;
|
|
11
|
+
private readonly handlers;
|
|
12
|
+
private readonly components;
|
|
13
|
+
constructor(components: Components);
|
|
14
|
+
getProtocols(): string[];
|
|
15
|
+
getHandler(protocol: string): StreamHandler;
|
|
16
|
+
getTopologies(protocol: string): Topology[];
|
|
16
17
|
/**
|
|
17
|
-
*
|
|
18
|
-
* @param {PeerStore} props.peerStore
|
|
19
|
-
* @param {ConnectionManager} props.connectionManager
|
|
20
|
-
* @class
|
|
18
|
+
* Registers the `handler` for each protocol
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
|
-
peerStore: PeerStore;
|
|
24
|
-
connectionManager: ConnectionManager;
|
|
25
|
-
});
|
|
26
|
-
peerStore: import("./peer-store/types").PeerStore;
|
|
27
|
-
connectionManager: import("./connection-manager");
|
|
20
|
+
handle(protocols: string | string[], handler: StreamHandler): Promise<void>;
|
|
28
21
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @type {Map<string, Topology>}
|
|
32
|
-
*/
|
|
33
|
-
topologies: Map<string, Topology>;
|
|
34
|
-
/** @type {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void} */
|
|
35
|
-
_handle: (protocols: string[] | string, handler: (props: HandlerProps) => void) => void;
|
|
36
|
-
/**
|
|
37
|
-
* Remove a disconnected peer from the record
|
|
38
|
-
*
|
|
39
|
-
* @param {Connection} connection
|
|
40
|
-
* @returns {void}
|
|
22
|
+
* Removes the handler for each protocol. The protocol
|
|
23
|
+
* will no longer be supported on streams.
|
|
41
24
|
*/
|
|
42
|
-
|
|
25
|
+
unhandle(protocols: string | string[]): Promise<void>;
|
|
43
26
|
/**
|
|
44
|
-
*
|
|
45
|
-
*/
|
|
46
|
-
set handle(arg: (protocols: string[] | string, handler: (props: HandlerProps) => void) => void);
|
|
47
|
-
/**
|
|
48
|
-
* @returns {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void}
|
|
27
|
+
* Register handlers for a set of multicodecs given
|
|
49
28
|
*/
|
|
50
|
-
|
|
29
|
+
register(protocols: string | string[], topology: Topology): Promise<string>;
|
|
51
30
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* @param {PeerId} peerId
|
|
55
|
-
* @returns {Connection | null}
|
|
31
|
+
* Unregister topology
|
|
56
32
|
*/
|
|
57
|
-
|
|
33
|
+
unregister(id: string): void;
|
|
58
34
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* @param {Topology} topology - protocol topology
|
|
62
|
-
* @returns {Promise<string>} registrar identifier
|
|
35
|
+
* Remove a disconnected peer from the record
|
|
63
36
|
*/
|
|
64
|
-
|
|
37
|
+
_onDisconnect(evt: CustomEvent<Connection>): void;
|
|
65
38
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* @param {string} id - registrar identifier
|
|
69
|
-
* @returns {boolean} unregistered successfully
|
|
39
|
+
* Check if a new peer support the multicodecs for this topology
|
|
70
40
|
*/
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
declare namespace Registrar {
|
|
74
|
-
export { PeerId, PeerStore, ConnectionManager, Connection, HandlerProps };
|
|
41
|
+
_onProtocolChange(evt: CustomEvent<PeerProtocolsChangeData>): void;
|
|
75
42
|
}
|
|
76
|
-
import Topology = require("libp2p-interfaces/src/topology");
|
|
77
|
-
type Connection = import("libp2p-interfaces/src/connection/connection");
|
|
78
|
-
type PeerId = import('peer-id');
|
|
79
|
-
type PeerStore = import('./peer-store/types').PeerStore;
|
|
80
|
-
type ConnectionManager = import('./connection-manager');
|
|
81
|
-
type HandlerProps = import('./').HandlerProps;
|
|
82
43
|
//# sourceMappingURL=registrar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/registrar.
|
|
1
|
+
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/registrar.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAc/D;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0D;IACrF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAE1B,UAAU,EAAE,UAAU;IAcnC,YAAY;IAcZ,UAAU,CAAE,QAAQ,EAAE,MAAM;IAU5B,aAAa,CAAE,QAAQ,EAAE,MAAM;IAY/B;;OAEG;IACG,MAAM,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAelF;;;OAGG;IACG,QAAQ,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAW5C;;OAEG;IACG,QAAQ,CAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlF;;OAEG;IACH,UAAU,CAAE,EAAE,EAAE,MAAM;IAItB;;OAEG;IACH,aAAa,CAAE,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;IAgB3C;;OAEG;IACH,iBAAiB,CAAE,GAAG,EAAE,WAAW,CAAC,uBAAuB,CAAC;CAwB7D"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import errCode from 'err-code';
|
|
3
|
+
import { codes } from './errors.js';
|
|
4
|
+
import { isTopology } from '@libp2p/interfaces/topology';
|
|
5
|
+
const log = logger('libp2p:registrar');
|
|
6
|
+
function supportsProtocol(peerProtocols, topologyProtocols) {
|
|
7
|
+
for (const peerProtocol of peerProtocols) {
|
|
8
|
+
if (topologyProtocols.includes(peerProtocol)) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Responsible for notifying registered protocols of events in the network.
|
|
16
|
+
*/
|
|
17
|
+
export class DefaultRegistrar {
|
|
18
|
+
constructor(components) {
|
|
19
|
+
this.topologies = new Map();
|
|
20
|
+
this.handlers = new Map();
|
|
21
|
+
this.components = components;
|
|
22
|
+
this._onDisconnect = this._onDisconnect.bind(this);
|
|
23
|
+
this._onProtocolChange = this._onProtocolChange.bind(this);
|
|
24
|
+
this.components.getConnectionManager().addEventListener('peer:disconnect', this._onDisconnect);
|
|
25
|
+
// happens after identify
|
|
26
|
+
this.components.getPeerStore().addEventListener('change:protocols', this._onProtocolChange);
|
|
27
|
+
}
|
|
28
|
+
getProtocols() {
|
|
29
|
+
const protocols = new Set();
|
|
30
|
+
for (const topology of this.topologies.values()) {
|
|
31
|
+
topology.protocols.forEach(protocol => protocols.add(protocol));
|
|
32
|
+
}
|
|
33
|
+
for (const protocol of this.handlers.keys()) {
|
|
34
|
+
protocols.add(protocol);
|
|
35
|
+
}
|
|
36
|
+
return Array.from(protocols).sort();
|
|
37
|
+
}
|
|
38
|
+
getHandler(protocol) {
|
|
39
|
+
const handler = this.handlers.get(protocol);
|
|
40
|
+
if (handler == null) {
|
|
41
|
+
throw new Error(`No handler registered for protocol ${protocol}`);
|
|
42
|
+
}
|
|
43
|
+
return handler;
|
|
44
|
+
}
|
|
45
|
+
getTopologies(protocol) {
|
|
46
|
+
const output = [];
|
|
47
|
+
for (const { topology, protocols } of this.topologies.values()) {
|
|
48
|
+
if (protocols.includes(protocol)) {
|
|
49
|
+
output.push(topology);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return output;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Registers the `handler` for each protocol
|
|
56
|
+
*/
|
|
57
|
+
async handle(protocols, handler) {
|
|
58
|
+
const protocolList = Array.isArray(protocols) ? protocols : [protocols];
|
|
59
|
+
for (const protocol of protocolList) {
|
|
60
|
+
if (this.handlers.has(protocol)) {
|
|
61
|
+
throw errCode(new Error(`Handler already registered for protocol ${protocol}`), codes.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);
|
|
62
|
+
}
|
|
63
|
+
this.handlers.set(protocol, handler);
|
|
64
|
+
}
|
|
65
|
+
// Add new protocols to self protocols in the Protobook
|
|
66
|
+
await this.components.getPeerStore().protoBook.add(this.components.getPeerId(), protocolList);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Removes the handler for each protocol. The protocol
|
|
70
|
+
* will no longer be supported on streams.
|
|
71
|
+
*/
|
|
72
|
+
async unhandle(protocols) {
|
|
73
|
+
const protocolList = Array.isArray(protocols) ? protocols : [protocols];
|
|
74
|
+
protocolList.forEach(protocol => {
|
|
75
|
+
this.handlers.delete(protocol);
|
|
76
|
+
});
|
|
77
|
+
// Remove protocols from self protocols in the Protobook
|
|
78
|
+
await this.components.getPeerStore().protoBook.remove(this.components.getPeerId(), protocolList);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register handlers for a set of multicodecs given
|
|
82
|
+
*/
|
|
83
|
+
async register(protocols, topology) {
|
|
84
|
+
if (!isTopology(topology)) {
|
|
85
|
+
log.error('topology must be an instance of interfaces/topology');
|
|
86
|
+
throw errCode(new Error('topology must be an instance of interfaces/topology'), codes.ERR_INVALID_PARAMETERS);
|
|
87
|
+
}
|
|
88
|
+
// Create topology
|
|
89
|
+
const id = `${(Math.random() * 1e9).toString(36)}${Date.now()}`;
|
|
90
|
+
this.topologies.set(id, {
|
|
91
|
+
topology,
|
|
92
|
+
protocols: Array.isArray(protocols) ? protocols : [protocols]
|
|
93
|
+
});
|
|
94
|
+
// Set registrar
|
|
95
|
+
await topology.setRegistrar(this);
|
|
96
|
+
return id;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Unregister topology
|
|
100
|
+
*/
|
|
101
|
+
unregister(id) {
|
|
102
|
+
this.topologies.delete(id);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Remove a disconnected peer from the record
|
|
106
|
+
*/
|
|
107
|
+
_onDisconnect(evt) {
|
|
108
|
+
const connection = evt.detail;
|
|
109
|
+
void this.components.getPeerStore().protoBook.get(connection.remotePeer)
|
|
110
|
+
.then(peerProtocols => {
|
|
111
|
+
for (const { topology, protocols } of this.topologies.values()) {
|
|
112
|
+
if (supportsProtocol(peerProtocols, protocols)) {
|
|
113
|
+
topology.onDisconnect(connection.remotePeer);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
.catch(err => {
|
|
118
|
+
log.error(err);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if a new peer support the multicodecs for this topology
|
|
123
|
+
*/
|
|
124
|
+
_onProtocolChange(evt) {
|
|
125
|
+
const { peerId, protocols, oldProtocols } = evt.detail;
|
|
126
|
+
const removed = oldProtocols.filter(protocol => !protocols.includes(protocol));
|
|
127
|
+
const added = protocols.filter(protocol => !oldProtocols.includes(protocol));
|
|
128
|
+
for (const { topology, protocols } of this.topologies.values()) {
|
|
129
|
+
if (supportsProtocol(removed, protocols)) {
|
|
130
|
+
topology.onDisconnect(peerId);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
for (const { topology, protocols } of this.topologies.values()) {
|
|
134
|
+
if (supportsProtocol(added, protocols)) {
|
|
135
|
+
const connection = this.components.getConnectionManager().getConnections(peerId)[0];
|
|
136
|
+
if (connection == null) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
topology.onConnect(peerId, connection);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=registrar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registrar.js","sourceRoot":"","sources":["../../src/registrar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAA;AAMlE,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAEtC,SAAS,gBAAgB,CAAE,aAAuB,EAAE,iBAA2B;IAC7E,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;QACxC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAK3B,YAAa,UAAsB;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1D,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAE9F,yBAAyB;QACzB,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7F,CAAC;IAED,YAAY;QACV,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;QAEnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC/C,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;SAChE;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;YAC3C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;SACxB;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,UAAU,CAAE,QAAgB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAE3C,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAA;SAClE;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,aAAa,CAAE,QAAgB;QAC7B,MAAM,MAAM,GAAe,EAAE,CAAA;QAE7B,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC9D,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aACtB;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAE,SAA4B,EAAE,OAAsB;QAChE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAEvE,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC/B,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAA;aAC/H;YAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;SACrC;QAED,uDAAuD;QACvD,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAA;IAC/F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAE,SAA4B;QAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAEvE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,wDAAwD;QACxD,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC,CAAA;IAClG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAE,SAA4B,EAAE,QAAkB;QAC9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACzB,GAAG,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAA;YAChE,MAAM,OAAO,CAAC,IAAI,KAAK,CAAC,qDAAqD,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;SAC9G;QAED,kBAAkB;QAClB,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAE/D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE;YACtB,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SAC9D,CAAC,CAAA;QAEF,gBAAgB;QAChB,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAEjC,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;OAEG;IACH,UAAU,CAAE,EAAU;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa,CAAE,GAA4B;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAA;QAE7B,KAAK,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;aACrE,IAAI,CAAC,aAAa,CAAC,EAAE;YACpB,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;gBAC9D,IAAI,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE;oBAC9C,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;iBAC7C;aACF;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAE,GAAyC;QAC1D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,CAAA;QAEtD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QAE5E,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC9D,IAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;gBACxC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;aAC9B;SACF;QAED,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC9D,IAAI,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;gBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEnF,IAAI,UAAU,IAAI,IAAI,EAAE;oBACtB,SAAQ;iBACT;gBAED,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;aACvC;SACF;IACH,CAAC;CACF"}
|