libp2p 0.36.2 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -21
- package/README.md +13 -10
- package/dist/src/address-manager/index.d.ts +34 -52
- package/dist/src/address-manager/index.d.ts.map +1 -1
- package/dist/src/address-manager/index.js +81 -0
- package/dist/src/address-manager/index.js.map +1 -0
- package/dist/src/circuit/auto-relay.d.ts +24 -85
- package/dist/src/circuit/auto-relay.d.ts.map +1 -1
- package/dist/src/circuit/auto-relay.js +216 -0
- package/dist/src/circuit/auto-relay.js.map +1 -0
- package/dist/src/circuit/circuit/hop.d.ts +26 -53
- package/dist/src/circuit/circuit/hop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/hop.js +138 -0
- package/dist/src/circuit/circuit/hop.js.map +1 -0
- package/dist/src/circuit/circuit/stop.d.ts +18 -10
- package/dist/src/circuit/circuit/stop.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stop.js +49 -0
- package/dist/src/circuit/circuit/stop.js.map +1 -0
- package/dist/src/circuit/circuit/stream-handler.d.ts +19 -38
- package/dist/src/circuit/circuit/stream-handler.d.ts.map +1 -1
- package/dist/src/circuit/circuit/stream-handler.js +59 -0
- package/dist/src/circuit/circuit/stream-handler.js.map +1 -0
- package/dist/src/circuit/circuit/utils.d.ts +3 -6
- package/dist/src/circuit/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/circuit/utils.js +43 -0
- package/dist/src/circuit/circuit/utils.js.map +1 -0
- package/dist/src/circuit/constants.d.ts +24 -6
- package/dist/src/circuit/constants.d.ts.map +1 -1
- package/dist/src/circuit/constants.js +26 -0
- package/dist/src/circuit/constants.js.map +1 -0
- package/dist/src/circuit/index.d.ts +41 -74
- package/dist/src/circuit/index.d.ts.map +1 -1
- package/dist/src/circuit/index.js +69 -0
- package/dist/src/circuit/index.js.map +1 -0
- package/dist/src/circuit/listener.d.ts +8 -3
- package/dist/src/circuit/listener.d.ts.map +1 -1
- package/dist/src/circuit/listener.js +62 -0
- package/dist/src/circuit/listener.js.map +1 -0
- package/dist/src/circuit/multicodec.d.ts +1 -1
- package/dist/src/circuit/multicodec.d.ts.map +1 -1
- package/dist/src/circuit/multicodec.js +2 -0
- package/dist/src/circuit/multicodec.js.map +1 -0
- package/dist/src/circuit/pb/index.d.ts +52 -0
- package/dist/src/circuit/pb/index.d.ts.map +1 -0
- package/dist/src/circuit/pb/index.js +98 -0
- package/dist/src/circuit/pb/index.js.map +1 -0
- package/dist/src/circuit/transport.d.ts +18 -78
- package/dist/src/circuit/transport.d.ts.map +1 -1
- package/dist/src/circuit/transport.js +192 -0
- package/dist/src/circuit/transport.js.map +1 -0
- package/dist/src/circuit/utils.d.ts +5 -2
- package/dist/src/circuit/utils.d.ts.map +1 -1
- package/dist/src/circuit/utils.js +11 -0
- package/dist/src/circuit/utils.js.map +1 -0
- package/dist/src/config.d.ts +3 -85
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +91 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/connection-manager/auto-dialler.d.ts +24 -41
- package/dist/src/connection-manager/auto-dialler.d.ts.map +1 -1
- package/dist/src/connection-manager/auto-dialler.js +105 -0
- package/dist/src/connection-manager/auto-dialler.js.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts +16 -0
- package/dist/src/connection-manager/dialer/auto-dialer.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js +37 -0
- package/dist/src/connection-manager/dialer/auto-dialer.js.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts +27 -0
- package/dist/src/connection-manager/dialer/dial-request.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/dial-request.js +83 -0
- package/dist/src/connection-manager/dialer/dial-request.js.map +1 -0
- package/dist/src/connection-manager/dialer/index.d.ts +104 -0
- package/dist/src/connection-manager/dialer/index.d.ts.map +1 -0
- package/dist/src/connection-manager/dialer/index.js +267 -0
- package/dist/src/connection-manager/dialer/index.js.map +1 -0
- package/dist/src/connection-manager/index.d.ts +102 -136
- package/dist/src/connection-manager/index.d.ts.map +1 -1
- package/dist/src/connection-manager/index.js +333 -0
- package/dist/src/connection-manager/index.js.map +1 -0
- package/dist/src/connection-manager/latency-monitor.d.ts +72 -97
- package/dist/src/connection-manager/latency-monitor.d.ts.map +1 -1
- package/dist/src/connection-manager/latency-monitor.js +220 -0
- package/dist/src/connection-manager/latency-monitor.js.map +1 -0
- package/dist/src/connection-manager/visibility-change-emitter.d.ts +15 -16
- package/dist/src/connection-manager/visibility-change-emitter.d.ts.map +1 -1
- package/dist/src/connection-manager/visibility-change-emitter.js +118 -0
- package/dist/src/connection-manager/visibility-change-emitter.js.map +1 -0
- package/dist/src/constants.d.ts +22 -10
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +27 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/content-routing/index.d.ts +27 -81
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +99 -0
- package/dist/src/content-routing/index.js.map +1 -0
- package/dist/src/content-routing/utils.d.ts +6 -49
- package/dist/src/content-routing/utils.d.ts.map +1 -1
- package/dist/src/content-routing/utils.js +42 -0
- package/dist/src/content-routing/utils.js.map +1 -0
- package/dist/src/dht/dht-content-routing.d.ts +10 -24
- package/dist/src/dht/dht-content-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-content-routing.js +32 -0
- package/dist/src/dht/dht-content-routing.js.map +1 -0
- package/dist/src/dht/dht-peer-routing.d.ts +9 -24
- package/dist/src/dht/dht-peer-routing.d.ts.map +1 -1
- package/dist/src/dht/dht-peer-routing.js +26 -0
- package/dist/src/dht/dht-peer-routing.js.map +1 -0
- package/dist/src/dht/dummy-dht.d.ts +20 -0
- package/dist/src/dht/dummy-dht.d.ts.map +1 -0
- package/dist/src/dht/dummy-dht.js +46 -0
- package/dist/src/dht/dummy-dht.js.map +1 -0
- package/dist/src/errors.d.ts +70 -63
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +75 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/fetch/constants.d.ts +1 -1
- package/dist/src/fetch/constants.d.ts.map +1 -1
- package/dist/src/fetch/constants.js +3 -0
- package/dist/src/fetch/constants.js.map +1 -0
- package/dist/src/fetch/index.d.ts +30 -49
- package/dist/src/fetch/index.d.ts.map +1 -1
- package/dist/src/fetch/index.js +129 -0
- package/dist/src/fetch/index.js.map +1 -0
- package/dist/src/fetch/pb/proto.d.ts +27 -0
- package/dist/src/fetch/pb/proto.d.ts.map +1 -0
- package/dist/src/fetch/pb/proto.js +50 -0
- package/dist/src/fetch/pb/proto.js.map +1 -0
- package/dist/src/get-peer.d.ts +4 -11
- package/dist/src/get-peer.d.ts.map +1 -1
- package/dist/src/get-peer.js +43 -0
- package/dist/src/get-peer.js.map +1 -0
- package/dist/src/identify/consts.d.ts +9 -9
- package/dist/src/identify/consts.d.ts.map +1 -1
- package/dist/src/identify/consts.js +11 -0
- package/dist/src/identify/consts.js.map +1 -0
- package/dist/src/identify/index.d.ts +42 -96
- package/dist/src/identify/index.d.ts.map +1 -1
- package/dist/src/identify/index.js +322 -0
- package/dist/src/identify/index.js.map +1 -0
- package/dist/src/identify/pb/message.d.ts +16 -0
- package/dist/src/identify/pb/message.d.ts.map +1 -0
- package/dist/src/identify/pb/message.js +24 -0
- package/dist/src/identify/pb/message.js.map +1 -0
- package/dist/src/index.d.ts +150 -496
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/insecure/index.d.ts +9 -0
- package/dist/src/insecure/index.d.ts.map +1 -0
- package/dist/src/insecure/index.js +81 -0
- package/dist/src/insecure/index.js.map +1 -0
- package/dist/src/insecure/pb/proto.d.ts +29 -0
- package/dist/src/insecure/pb/proto.d.ts.map +1 -0
- package/dist/src/insecure/pb/proto.js +53 -0
- package/dist/src/insecure/pb/proto.js.map +1 -0
- package/dist/src/keychain/cms.d.ts +6 -14
- package/dist/src/keychain/cms.d.ts.map +1 -1
- package/dist/src/keychain/cms.js +129 -0
- package/dist/src/keychain/cms.js.map +1 -0
- package/dist/src/keychain/index.d.ts +60 -81
- package/dist/src/keychain/index.d.ts.map +1 -1
- package/dist/src/keychain/index.js +492 -0
- package/dist/src/keychain/index.js.map +1 -0
- package/dist/src/keychain/util.d.ts +3 -6
- package/dist/src/keychain/util.d.ts.map +1 -1
- package/dist/src/keychain/util.js +79 -0
- package/dist/src/keychain/util.js.map +1 -0
- package/dist/src/libp2p.d.ts +80 -0
- package/dist/src/libp2p.d.ts.map +1 -0
- package/dist/src/libp2p.js +397 -0
- package/dist/src/libp2p.js.map +1 -0
- package/dist/src/metrics/index.d.ts +47 -104
- package/dist/src/metrics/index.d.ts.map +1 -1
- package/dist/src/metrics/index.js +231 -0
- package/dist/src/metrics/index.js.map +1 -0
- package/dist/src/metrics/moving-average.d.ts +14 -0
- package/dist/src/metrics/moving-average.d.ts.map +1 -0
- package/dist/src/metrics/moving-average.js +40 -0
- package/dist/src/metrics/moving-average.js.map +1 -0
- package/dist/src/metrics/stats.d.ts +41 -93
- package/dist/src/metrics/stats.d.ts.map +1 -1
- package/dist/src/metrics/stats.js +183 -0
- package/dist/src/metrics/stats.js.map +1 -0
- package/dist/src/nat-manager.d.ts +42 -99
- package/dist/src/nat-manager.d.ts.map +1 -1
- package/dist/src/nat-manager.js +114 -0
- package/dist/src/nat-manager.js.map +1 -0
- package/dist/src/peer-record-updater.d.ts +15 -0
- package/dist/src/peer-record-updater.d.ts.map +1 -0
- package/dist/src/peer-record-updater.js +44 -0
- package/dist/src/peer-record-updater.js.map +1 -0
- package/dist/src/peer-routing.d.ts +40 -84
- package/dist/src/peer-routing.d.ts.map +1 -1
- package/dist/src/peer-routing.js +108 -0
- package/dist/src/peer-routing.js.map +1 -0
- package/dist/src/ping/constants.d.ts +4 -4
- package/dist/src/ping/constants.d.ts.map +1 -1
- package/dist/src/ping/constants.js +5 -0
- package/dist/src/ping/constants.js.map +1 -0
- package/dist/src/ping/index.d.ts +17 -31
- package/dist/src/ping/index.d.ts.map +1 -1
- package/dist/src/ping/index.js +57 -0
- package/dist/src/ping/index.js.map +1 -0
- package/dist/src/pnet/crypto.d.ts +15 -5
- package/dist/src/pnet/crypto.d.ts.map +1 -1
- package/dist/src/pnet/crypto.js +60 -0
- package/dist/src/pnet/crypto.js.map +1 -0
- package/dist/src/pnet/errors.d.ts +5 -5
- package/dist/src/pnet/errors.d.ts.map +1 -1
- package/dist/src/pnet/errors.js +6 -0
- package/dist/src/pnet/errors.js.map +1 -0
- package/dist/src/pnet/index.d.ts +12 -20
- package/dist/src/pnet/index.d.ts.map +1 -1
- package/dist/src/pnet/index.js +67 -0
- package/dist/src/pnet/index.js.map +1 -0
- package/dist/src/pnet/key-generator.d.ts +3 -7
- package/dist/src/pnet/key-generator.d.ts.map +1 -1
- package/dist/src/pnet/key-generator.js +25 -0
- package/dist/src/pnet/key-generator.js.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts +17 -0
- package/dist/src/pubsub/dummy-pubsub.d.ts.map +1 -0
- package/dist/src/pubsub/dummy-pubsub.js +37 -0
- package/dist/src/pubsub/dummy-pubsub.js.map +1 -0
- package/dist/src/registrar.d.ts +26 -65
- package/dist/src/registrar.d.ts.map +1 -1
- package/dist/src/registrar.js +144 -0
- package/dist/src/registrar.js.map +1 -0
- package/dist/src/transport-manager.d.ts +36 -82
- package/dist/src/transport-manager.d.ts.map +1 -1
- package/dist/src/transport-manager.js +223 -0
- package/dist/src/transport-manager.js.map +1 -0
- package/dist/src/upgrader.d.ts +49 -129
- package/dist/src/upgrader.d.ts.map +1 -1
- package/dist/src/upgrader.js +402 -0
- package/dist/src/upgrader.js.map +1 -0
- package/dist/src/version.d.ts +3 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +3 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +144 -201
- package/src/address-manager/index.ts +130 -0
- package/src/circuit/README.md +16 -11
- package/src/circuit/auto-relay.ts +286 -0
- package/src/circuit/circuit/hop.ts +211 -0
- package/src/circuit/circuit/stop.ts +78 -0
- package/src/circuit/circuit/stream-handler.ts +86 -0
- package/src/circuit/circuit/{utils.js → utils.ts} +9 -25
- package/src/circuit/constants.ts +31 -0
- package/src/circuit/index.ts +120 -0
- package/src/circuit/listener.ts +82 -0
- package/src/circuit/multicodec.ts +2 -0
- package/src/circuit/{protocol → pb}/index.proto +1 -1
- package/src/circuit/pb/index.ts +117 -0
- package/src/circuit/transport.ts +219 -0
- package/src/circuit/utils.ts +12 -0
- package/src/config.ts +99 -0
- package/src/connection-manager/auto-dialler.ts +154 -0
- package/src/connection-manager/dialer/auto-dialer.ts +59 -0
- package/src/{dialer/dial-request.js → connection-manager/dialer/dial-request.ts} +60 -51
- package/src/connection-manager/dialer/index.ts +382 -0
- package/src/connection-manager/index.ts +508 -0
- package/src/connection-manager/latency-monitor.ts +319 -0
- package/src/connection-manager/{visibility-change-emitter.js → visibility-change-emitter.ts} +48 -38
- package/src/constants.ts +31 -0
- package/src/content-routing/index.ts +144 -0
- package/src/content-routing/utils.ts +54 -0
- package/src/dht/dht-content-routing.ts +43 -0
- package/src/dht/dht-peer-routing.ts +35 -0
- package/src/dht/dummy-dht.ts +60 -0
- package/src/errors.ts +73 -0
- package/src/fetch/README.md +1 -1
- package/src/fetch/constants.ts +3 -0
- package/src/fetch/index.ts +167 -0
- package/src/fetch/{proto.proto → pb/proto.proto} +0 -0
- package/src/fetch/pb/proto.ts +65 -0
- package/src/get-peer.ts +57 -0
- package/src/identify/consts.ts +13 -0
- package/src/identify/index.ts +445 -0
- package/src/identify/{message.proto → pb/message.proto} +0 -0
- package/src/identify/pb/message.ts +37 -0
- package/src/index.ts +220 -0
- package/src/insecure/index.ts +101 -0
- package/src/insecure/{proto.proto → pb/proto.proto} +0 -0
- package/src/insecure/pb/proto.ts +68 -0
- package/src/keychain/{cms.js → cms.ts} +62 -58
- package/src/keychain/index.ts +587 -0
- package/src/keychain/{util.js → util.ts} +7 -17
- package/src/libp2p.ts +538 -0
- package/src/metrics/index.ts +310 -0
- package/src/metrics/moving-average.ts +53 -0
- package/src/metrics/stats.ts +238 -0
- package/src/nat-manager.ts +194 -0
- package/src/peer-record-updater.ts +55 -0
- package/src/peer-routing.ts +186 -0
- package/src/ping/README.md +1 -1
- package/src/ping/constants.ts +5 -0
- package/src/ping/index.ts +84 -0
- package/src/pnet/README.md +2 -2
- package/src/pnet/crypto.ts +67 -0
- package/src/pnet/errors.ts +5 -0
- package/src/pnet/index.ts +97 -0
- package/src/pnet/key-generator.ts +28 -0
- package/src/pubsub/dummy-pubsub.ts +51 -0
- package/src/registrar.ts +189 -0
- package/src/transport-manager.ts +281 -0
- package/src/upgrader.ts +499 -0
- package/src/version.ts +3 -0
- package/dist/index.min.js +0 -55
- package/dist/src/circuit/protocol/index.d.ts +0 -173
- package/dist/src/dialer/dial-request.d.ts +0 -55
- package/dist/src/dialer/dial-request.d.ts.map +0 -1
- package/dist/src/dialer/index.d.ts +0 -182
- package/dist/src/dialer/index.d.ts.map +0 -1
- package/dist/src/fetch/proto.d.ts +0 -134
- package/dist/src/identify/message.d.ts +0 -95
- package/dist/src/insecure/plaintext.d.ts +0 -12
- package/dist/src/insecure/plaintext.d.ts.map +0 -1
- package/dist/src/insecure/proto.d.ts +0 -128
- package/dist/src/metrics/old-peers.d.ts +0 -3
- package/dist/src/metrics/old-peers.d.ts.map +0 -1
- package/dist/src/metrics/tracked-map.d.ts +0 -8
- package/dist/src/metrics/tracked-map.d.ts.map +0 -1
- package/dist/src/peer-store/address-book.d.ts +0 -67
- package/dist/src/peer-store/address-book.d.ts.map +0 -1
- package/dist/src/peer-store/index.d.ts +0 -58
- package/dist/src/peer-store/index.d.ts.map +0 -1
- package/dist/src/peer-store/key-book.d.ts +0 -40
- package/dist/src/peer-store/key-book.d.ts.map +0 -1
- package/dist/src/peer-store/metadata-book.d.ts +0 -58
- package/dist/src/peer-store/metadata-book.d.ts.map +0 -1
- package/dist/src/peer-store/pb/peer.d.ts +0 -222
- package/dist/src/peer-store/proto-book.d.ts +0 -43
- package/dist/src/peer-store/proto-book.d.ts.map +0 -1
- package/dist/src/peer-store/store.d.ts +0 -73
- package/dist/src/peer-store/store.d.ts.map +0 -1
- package/dist/src/peer-store/types.d.ts +0 -202
- package/dist/src/peer-store/types.d.ts.map +0 -1
- package/dist/src/ping/util.d.ts +0 -5
- package/dist/src/ping/util.d.ts.map +0 -1
- package/dist/src/pubsub-adapter.d.ts +0 -22
- package/dist/src/pubsub-adapter.d.ts.map +0 -1
- package/dist/src/record/envelope/envelope.d.ts +0 -77
- package/dist/src/record/envelope/index.d.ts +0 -80
- package/dist/src/record/envelope/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/consts.d.ts +0 -4
- package/dist/src/record/peer-record/consts.d.ts.map +0 -1
- package/dist/src/record/peer-record/index.d.ts +0 -60
- package/dist/src/record/peer-record/index.d.ts.map +0 -1
- package/dist/src/record/peer-record/peer-record.d.ts +0 -133
- package/dist/src/record/utils.d.ts +0 -12
- package/dist/src/record/utils.d.ts.map +0 -1
- package/dist/src/types.d.ts +0 -90
- package/dist/src/types.d.ts.map +0 -1
- package/src/address-manager/index.js +0 -96
- package/src/circuit/auto-relay.js +0 -302
- package/src/circuit/circuit/hop.js +0 -205
- package/src/circuit/circuit/stop.js +0 -81
- package/src/circuit/circuit/stream-handler.js +0 -94
- package/src/circuit/constants.js +0 -12
- package/src/circuit/index.js +0 -102
- package/src/circuit/listener.js +0 -75
- package/src/circuit/multicodec.js +0 -5
- package/src/circuit/protocol/index.d.ts +0 -173
- package/src/circuit/protocol/index.js +0 -530
- package/src/circuit/transport.js +0 -229
- package/src/circuit/utils.js +0 -17
- package/src/config.js +0 -114
- package/src/connection-manager/auto-dialler.js +0 -132
- package/src/connection-manager/index.js +0 -374
- package/src/connection-manager/latency-monitor.js +0 -264
- package/src/constants.js +0 -18
- package/src/content-routing/index.js +0 -163
- package/src/content-routing/utils.js +0 -89
- package/src/dht/dht-content-routing.js +0 -44
- package/src/dht/dht-peer-routing.js +0 -51
- package/src/dialer/index.js +0 -376
- package/src/errors.js +0 -66
- package/src/fetch/constants.js +0 -6
- package/src/fetch/index.js +0 -159
- package/src/fetch/proto.d.ts +0 -134
- package/src/fetch/proto.js +0 -333
- package/src/get-peer.js +0 -49
- package/src/identify/consts.js +0 -15
- package/src/identify/index.js +0 -384
- package/src/identify/message.d.ts +0 -95
- package/src/identify/message.js +0 -328
- package/src/index.js +0 -813
- package/src/insecure/plaintext.js +0 -95
- package/src/insecure/proto.d.ts +0 -128
- package/src/insecure/proto.js +0 -371
- package/src/keychain/index.js +0 -561
- package/src/metrics/index.js +0 -290
- package/src/metrics/old-peers.js +0 -16
- package/src/metrics/stats.js +0 -270
- package/src/metrics/tracked-map.js +0 -94
- package/src/nat-manager.js +0 -197
- package/src/peer-routing.js +0 -176
- package/src/peer-store/README.md +0 -145
- package/src/peer-store/address-book.js +0 -382
- package/src/peer-store/index.js +0 -121
- package/src/peer-store/key-book.js +0 -141
- package/src/peer-store/metadata-book.js +0 -250
- package/src/peer-store/pb/peer.d.ts +0 -222
- package/src/peer-store/pb/peer.js +0 -643
- package/src/peer-store/pb/peer.proto +0 -31
- package/src/peer-store/proto-book.js +0 -237
- package/src/peer-store/store.js +0 -263
- package/src/peer-store/types.ts +0 -245
- package/src/ping/constants.js +0 -8
- package/src/ping/index.js +0 -84
- package/src/ping/util.js +0 -18
- package/src/pnet/crypto.js +0 -84
- package/src/pnet/errors.js +0 -7
- package/src/pnet/index.js +0 -86
- package/src/pnet/key-generator.js +0 -33
- package/src/pubsub-adapter.js +0 -61
- package/src/record/README.md +0 -130
- package/src/record/envelope/envelope.d.ts +0 -77
- package/src/record/envelope/envelope.js +0 -243
- package/src/record/envelope/envelope.proto +0 -19
- package/src/record/envelope/index.js +0 -183
- package/src/record/peer-record/consts.js +0 -14
- package/src/record/peer-record/index.js +0 -113
- package/src/record/peer-record/peer-record.d.ts +0 -133
- package/src/record/peer-record/peer-record.js +0 -367
- package/src/record/peer-record/peer-record.proto +0 -18
- package/src/record/utils.js +0 -25
- package/src/registrar.js +0 -127
- package/src/transport-manager.js +0 -269
- package/src/types.ts +0 -98
- package/src/upgrader.js +0 -492
package/src/peer-store/types.ts
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import type PeerId from 'peer-id'
|
|
2
|
-
import type { Multiaddr } from 'multiaddr'
|
|
3
|
-
import type Envelope from '../record/envelope'
|
|
4
|
-
import type { PublicKey } from 'libp2p-interfaces/src/keys/types'
|
|
5
|
-
|
|
6
|
-
export interface Address {
|
|
7
|
-
/**
|
|
8
|
-
* Peer multiaddr
|
|
9
|
-
*/
|
|
10
|
-
multiaddr: Multiaddr
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Obtained from a signed peer record
|
|
14
|
-
*/
|
|
15
|
-
isCertified: boolean
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface Peer {
|
|
19
|
-
/**
|
|
20
|
-
* Peer's peer-id instance
|
|
21
|
-
*/
|
|
22
|
-
id: PeerId
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Peer's addresses containing its multiaddrs and metadata
|
|
26
|
-
*/
|
|
27
|
-
addresses: Address[]
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Peer's supported protocols
|
|
31
|
-
*/
|
|
32
|
-
protocols: string[]
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Peer's metadata map
|
|
36
|
-
*/
|
|
37
|
-
metadata: Map<string, Uint8Array>
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* May be set if the key that this Peer has is an RSA key
|
|
41
|
-
*/
|
|
42
|
-
pubKey?: PublicKey
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* The last peer record envelope received
|
|
46
|
-
*/
|
|
47
|
-
peerRecordEnvelope?: Uint8Array
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface CertifiedRecord {
|
|
51
|
-
raw: Uint8Array
|
|
52
|
-
seqNumber: number
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface AddressBookEntry {
|
|
56
|
-
addresses: Address[]
|
|
57
|
-
record: CertifiedRecord
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface Book<Type> {
|
|
61
|
-
/**
|
|
62
|
-
* Get the known data of a peer
|
|
63
|
-
*/
|
|
64
|
-
get: (peerId: PeerId) => Promise<Type>
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Set the known data of a peer
|
|
68
|
-
*/
|
|
69
|
-
set: (peerId: PeerId, data: Type) => Promise<void>
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Remove the known data of a peer
|
|
73
|
-
*/
|
|
74
|
-
delete: (peerId: PeerId) => Promise<void>
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* AddressBook containing a map of peerIdStr to Address.
|
|
79
|
-
*/
|
|
80
|
-
export interface AddressBook {
|
|
81
|
-
/**
|
|
82
|
-
* ConsumePeerRecord adds addresses from a signed peer record contained in a record envelope.
|
|
83
|
-
* This will return a boolean that indicates if the record was successfully processed and added
|
|
84
|
-
* into the AddressBook
|
|
85
|
-
*/
|
|
86
|
-
consumePeerRecord: (envelope: Envelope) => Promise<boolean>
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Get the raw Envelope for a peer. Returns
|
|
90
|
-
* undefined if no Envelope is found
|
|
91
|
-
*/
|
|
92
|
-
getRawEnvelope: (peerId: PeerId) => Promise<Uint8Array | undefined>
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Get an Envelope containing a PeerRecord for the given peer.
|
|
96
|
-
* Returns undefined if no record exists.
|
|
97
|
-
*/
|
|
98
|
-
getPeerRecord: (peerId: PeerId) => Promise<Envelope | undefined>
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Add known addresses of a provided peer.
|
|
102
|
-
* If the peer is not known, it is set with the given addresses.
|
|
103
|
-
*/
|
|
104
|
-
add: (peerId: PeerId, multiaddrs: Multiaddr[]) => Promise<void>
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Set the known addresses of a peer
|
|
108
|
-
*/
|
|
109
|
-
set: (peerId: PeerId, data: Multiaddr[]) => Promise<void>
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Return the known addresses of a peer
|
|
113
|
-
*/
|
|
114
|
-
get: (peerId: PeerId) => Promise<Address[]>
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Get the known multiaddrs for a given peer. All returned multiaddrs
|
|
118
|
-
* will include the encapsulated `PeerId` of the peer.
|
|
119
|
-
*/
|
|
120
|
-
getMultiaddrsForPeer: (peerId: PeerId, addressSorter?: (ms: Address[]) => Address[]) => Promise<Multiaddr[]>
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* KeyBook containing a map of peerIdStr to their PeerId with public keys.
|
|
125
|
-
*/
|
|
126
|
-
export interface KeyBook {
|
|
127
|
-
/**
|
|
128
|
-
* Get the known data of a peer
|
|
129
|
-
*/
|
|
130
|
-
get: (peerId: PeerId) => Promise<PublicKey | undefined>
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Set the known data of a peer
|
|
134
|
-
*/
|
|
135
|
-
set: (peerId: PeerId, data: PublicKey) => Promise<void>
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Remove the known data of a peer
|
|
139
|
-
*/
|
|
140
|
-
delete: (peerId: PeerId) => Promise<void>
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* MetadataBook containing a map of peerIdStr to their metadata Map.
|
|
145
|
-
*/
|
|
146
|
-
export interface MetadataBook extends Book<Map<string, Uint8Array>> {
|
|
147
|
-
/**
|
|
148
|
-
* Set a specific metadata value
|
|
149
|
-
*/
|
|
150
|
-
setValue: (peerId: PeerId, key: string, value: Uint8Array) => Promise<void>
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Get specific metadata value, if it exists
|
|
154
|
-
*/
|
|
155
|
-
getValue: (peerId: PeerId, key: string) => Promise<Uint8Array | undefined>
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Deletes the provided peer metadata key from the book
|
|
159
|
-
*/
|
|
160
|
-
deleteValue: (peerId: PeerId, key: string) => Promise<void>
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* ProtoBook containing a map of peerIdStr to supported protocols.
|
|
165
|
-
*/
|
|
166
|
-
export interface ProtoBook extends Book<string[]> {
|
|
167
|
-
/**
|
|
168
|
-
* Adds known protocols of a provided peer.
|
|
169
|
-
* If the peer was not known before, it will be added.
|
|
170
|
-
*/
|
|
171
|
-
add: (peerId: PeerId, protocols: string[]) => Promise<void>
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Removes known protocols of a provided peer.
|
|
175
|
-
* If the protocols did not exist before, nothing will be done.
|
|
176
|
-
*/
|
|
177
|
-
remove: (peerId: PeerId, protocols: string[]) => Promise<void>
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export interface PeerProtocolsChangeEvent {
|
|
181
|
-
peerId: PeerId
|
|
182
|
-
protocols: string[]
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export interface PeerMultiaddrsChangeEvent {
|
|
186
|
-
peerId: PeerId
|
|
187
|
-
multiaddrs: Multiaddr[]
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export interface PeerPublicKeyChangeEvent {
|
|
191
|
-
peerId: PeerId
|
|
192
|
-
pubKey?: PublicKey
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
export interface PeerMetadataChangeEvent {
|
|
196
|
-
peerId: PeerId
|
|
197
|
-
metadata: Map<string, Uint8Array>
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export type EventName = 'peer' | 'change:protocols' | 'change:multiaddrs' | 'change:pubkey' | 'change:metadata'
|
|
201
|
-
|
|
202
|
-
export interface PeerStoreEvents {
|
|
203
|
-
'peer': (event: PeerId) => void
|
|
204
|
-
'change:protocols': (event: PeerProtocolsChangeEvent) => void
|
|
205
|
-
'change:multiaddrs': (event: PeerMultiaddrsChangeEvent) => void
|
|
206
|
-
'change:pubkey': (event: PeerPublicKeyChangeEvent) => void
|
|
207
|
-
'change:metadata': (event: PeerMetadataChangeEvent) => void
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
export interface PeerStore {
|
|
211
|
-
addressBook: AddressBook
|
|
212
|
-
keyBook: KeyBook
|
|
213
|
-
metadataBook: MetadataBook
|
|
214
|
-
protoBook: ProtoBook
|
|
215
|
-
|
|
216
|
-
getPeers: () => AsyncIterable<Peer>
|
|
217
|
-
delete: (peerId: PeerId) => Promise<void>
|
|
218
|
-
has: (peerId: PeerId) => Promise<boolean>
|
|
219
|
-
get: (peerId: PeerId) => Promise<Peer>
|
|
220
|
-
on: <U extends keyof PeerStoreEvents>(
|
|
221
|
-
event: U, listener: PeerStoreEvents[U]
|
|
222
|
-
) => this
|
|
223
|
-
once: <U extends keyof PeerStoreEvents>(
|
|
224
|
-
event: U, listener: PeerStoreEvents[U]
|
|
225
|
-
) => this
|
|
226
|
-
emit: <U extends keyof PeerStoreEvents>(
|
|
227
|
-
event: U, ...args: Parameters<PeerStoreEvents[U]>
|
|
228
|
-
) => boolean
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export interface Store {
|
|
232
|
-
has: (peerId: PeerId) => Promise<boolean>
|
|
233
|
-
save: (peer: Peer) => Promise<Peer>
|
|
234
|
-
load: (peerId: PeerId) => Promise<Peer>
|
|
235
|
-
merge: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
|
|
236
|
-
mergeOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
|
|
237
|
-
patch: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
|
|
238
|
-
patchOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>
|
|
239
|
-
all: () => AsyncIterable<Peer>
|
|
240
|
-
|
|
241
|
-
lock: {
|
|
242
|
-
readLock: () => Promise<() => void>
|
|
243
|
-
writeLock: () => Promise<() => void>
|
|
244
|
-
}
|
|
245
|
-
}
|
package/src/ping/constants.js
DELETED
package/src/ping/index.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:ping'), {
|
|
5
|
-
error: debug('libp2p:ping:err')
|
|
6
|
-
})
|
|
7
|
-
const errCode = require('err-code')
|
|
8
|
-
const { codes } = require('../errors')
|
|
9
|
-
const crypto = require('libp2p-crypto')
|
|
10
|
-
const { pipe } = require('it-pipe')
|
|
11
|
-
// @ts-ignore it-buffer has no types exported
|
|
12
|
-
const { toBuffer } = require('it-buffer')
|
|
13
|
-
const { collect, take } = require('streaming-iterables')
|
|
14
|
-
const { equals } = require('uint8arrays/equals')
|
|
15
|
-
|
|
16
|
-
const { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } = require('./constants')
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @typedef {import('../')} Libp2p
|
|
20
|
-
* @typedef {import('multiaddr').Multiaddr} Multiaddr
|
|
21
|
-
* @typedef {import('peer-id')} PeerId
|
|
22
|
-
* @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
class PingService {
|
|
26
|
-
/**
|
|
27
|
-
* @param {import('../')} libp2p
|
|
28
|
-
*/
|
|
29
|
-
static getProtocolStr (libp2p) {
|
|
30
|
-
return `/${libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @param {Libp2p} libp2p
|
|
35
|
-
*/
|
|
36
|
-
constructor (libp2p) {
|
|
37
|
-
this._libp2p = libp2p
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* A handler to register with Libp2p to process ping messages
|
|
42
|
-
*
|
|
43
|
-
* @param {Object} options
|
|
44
|
-
* @param {MuxedStream} options.stream
|
|
45
|
-
*/
|
|
46
|
-
handleMessage ({ stream }) {
|
|
47
|
-
return pipe(stream, stream)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Ping a given peer and wait for its response, getting the operation latency.
|
|
52
|
-
*
|
|
53
|
-
* @param {PeerId|Multiaddr} peer
|
|
54
|
-
* @returns {Promise<number>}
|
|
55
|
-
*/
|
|
56
|
-
async ping (peer) {
|
|
57
|
-
const protocol = `/${this._libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`
|
|
58
|
-
// @ts-ignore multiaddr might not have toB58String
|
|
59
|
-
log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)
|
|
60
|
-
|
|
61
|
-
const connection = await this._libp2p.dial(peer)
|
|
62
|
-
const { stream } = await connection.newStream(protocol)
|
|
63
|
-
|
|
64
|
-
const start = Date.now()
|
|
65
|
-
const data = crypto.randomBytes(PING_LENGTH)
|
|
66
|
-
|
|
67
|
-
const [result] = await pipe(
|
|
68
|
-
[data],
|
|
69
|
-
stream,
|
|
70
|
-
(/** @type {MuxedStream} */ stream) => take(1, stream),
|
|
71
|
-
toBuffer,
|
|
72
|
-
collect
|
|
73
|
-
)
|
|
74
|
-
const end = Date.now()
|
|
75
|
-
|
|
76
|
-
if (!equals(data, result)) {
|
|
77
|
-
throw errCode(new Error('Received wrong ping ack'), codes.ERR_WRONG_PING_ACK)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return end - start
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
module.exports = PingService
|
package/src/ping/util.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const crypto = require('libp2p-crypto')
|
|
4
|
-
const constants = require('./constants')
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @param {number} length
|
|
8
|
-
*/
|
|
9
|
-
function rnd (length) {
|
|
10
|
-
if (!length) {
|
|
11
|
-
length = constants.PING_LENGTH
|
|
12
|
-
}
|
|
13
|
-
return crypto.randomBytes(length)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
module.exports = {
|
|
17
|
-
rnd
|
|
18
|
-
}
|
package/src/pnet/crypto.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:pnet'), {
|
|
5
|
-
trace: debug('libp2p:pnet:trace'),
|
|
6
|
-
error: debug('libp2p:pnet:err')
|
|
7
|
-
})
|
|
8
|
-
|
|
9
|
-
const Errors = require('./errors')
|
|
10
|
-
// @ts-ignore xsalsa20 has no types exported
|
|
11
|
-
const xsalsa20 = require('xsalsa20')
|
|
12
|
-
const KEY_LENGTH = require('./key-generator').KEY_LENGTH
|
|
13
|
-
const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
|
|
14
|
-
const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Creates a stream iterable to encrypt messages in a private network
|
|
18
|
-
*
|
|
19
|
-
* @param {Uint8Array} nonce - The nonce to use in encryption
|
|
20
|
-
* @param {Uint8Array} psk - The private shared key to use in encryption
|
|
21
|
-
* @returns {*} a through iterable
|
|
22
|
-
*/
|
|
23
|
-
module.exports.createBoxStream = (nonce, psk) => {
|
|
24
|
-
const xor = xsalsa20(nonce, psk)
|
|
25
|
-
|
|
26
|
-
return (/** @type {AsyncIterable<Uint8Array>} */ source) => (async function * () {
|
|
27
|
-
for await (const chunk of source) {
|
|
28
|
-
yield Uint8Array.from(xor.update(chunk.slice()))
|
|
29
|
-
}
|
|
30
|
-
})()
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Creates a stream iterable to decrypt messages in a private network
|
|
35
|
-
*
|
|
36
|
-
* @param {Uint8Array} nonce - The nonce of the remote peer
|
|
37
|
-
* @param {Uint8Array} psk - The private shared key to use in decryption
|
|
38
|
-
* @returns {*} a through iterable
|
|
39
|
-
*/
|
|
40
|
-
module.exports.createUnboxStream = (nonce, psk) => {
|
|
41
|
-
return (/** @type {AsyncIterable<Uint8Array>} */ source) => (async function * () {
|
|
42
|
-
const xor = xsalsa20(nonce, psk)
|
|
43
|
-
log.trace('Decryption enabled')
|
|
44
|
-
|
|
45
|
-
for await (const chunk of source) {
|
|
46
|
-
yield Uint8Array.from(xor.update(chunk.slice()))
|
|
47
|
-
}
|
|
48
|
-
})()
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Decode the version 1 psk from the given Uint8Array
|
|
53
|
-
*
|
|
54
|
-
* @param {Uint8Array} pskBuffer
|
|
55
|
-
* @throws {INVALID_PSK}
|
|
56
|
-
* @returns {{ tag?: string, codecName?: string, psk: Uint8Array }} The PSK metadata (tag, codecName, psk)
|
|
57
|
-
*/
|
|
58
|
-
module.exports.decodeV1PSK = (pskBuffer) => {
|
|
59
|
-
try {
|
|
60
|
-
// This should pull from multibase/multicodec to allow for
|
|
61
|
-
// more encoding flexibility. Ideally we'd consume the codecs
|
|
62
|
-
// from the buffer line by line to evaluate the next line
|
|
63
|
-
// programmatically instead of making assumptions about the
|
|
64
|
-
// encodings of each line.
|
|
65
|
-
const metadata = uint8ArrayToString(pskBuffer).split(/(?:\r\n|\r|\n)/g)
|
|
66
|
-
const pskTag = metadata.shift()
|
|
67
|
-
const codec = metadata.shift()
|
|
68
|
-
const pskString = metadata.shift()
|
|
69
|
-
const psk = pskString && uint8ArrayFromString(pskString, 'base16')
|
|
70
|
-
|
|
71
|
-
if (!psk || psk.byteLength !== KEY_LENGTH) {
|
|
72
|
-
throw new Error(Errors.INVALID_PSK)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return {
|
|
76
|
-
tag: pskTag,
|
|
77
|
-
codecName: codec,
|
|
78
|
-
psk: psk
|
|
79
|
-
}
|
|
80
|
-
} catch (/** @type {any} */ err) {
|
|
81
|
-
log.error(err)
|
|
82
|
-
throw new Error(Errors.INVALID_PSK)
|
|
83
|
-
}
|
|
84
|
-
}
|
package/src/pnet/errors.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
module.exports.INVALID_PEER = 'Not a valid peer connection'
|
|
4
|
-
module.exports.INVALID_PSK = 'Your private shared key is invalid'
|
|
5
|
-
module.exports.NO_LOCAL_ID = 'No local private key provided'
|
|
6
|
-
module.exports.NO_HANDSHAKE_CONNECTION = 'No connection for the handshake provided'
|
|
7
|
-
module.exports.STREAM_ENDED = 'Stream ended prematurely'
|
package/src/pnet/index.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')
|
|
4
|
-
const log = Object.assign(debug('libp2p:pnet'), {
|
|
5
|
-
error: debug('libp2p:pnet:err')
|
|
6
|
-
})
|
|
7
|
-
const { pipe } = require('it-pipe')
|
|
8
|
-
const errcode = require('err-code')
|
|
9
|
-
// @ts-ignore it-pair has no types exported
|
|
10
|
-
const duplexPair = require('it-pair/duplex')
|
|
11
|
-
const crypto = require('libp2p-crypto')
|
|
12
|
-
const Errors = require('./errors')
|
|
13
|
-
const {
|
|
14
|
-
codes: { ERR_INVALID_PARAMETERS }
|
|
15
|
-
} = require('../errors')
|
|
16
|
-
const {
|
|
17
|
-
createBoxStream,
|
|
18
|
-
createUnboxStream,
|
|
19
|
-
decodeV1PSK
|
|
20
|
-
} = require('./crypto')
|
|
21
|
-
// @ts-ignore it-handshake has no types exported
|
|
22
|
-
const handshake = require('it-handshake')
|
|
23
|
-
const { NONCE_LENGTH } = require('./key-generator')
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
class Protector {
|
|
30
|
-
/**
|
|
31
|
-
* Takes a Private Shared Key (psk) and provides a `protect` method
|
|
32
|
-
* for wrapping existing connections in a private encryption stream.
|
|
33
|
-
*
|
|
34
|
-
* @param {Uint8Array} keyBuffer - The private shared key buffer
|
|
35
|
-
* @class
|
|
36
|
-
*/
|
|
37
|
-
constructor (keyBuffer) {
|
|
38
|
-
const decodedPSK = decodeV1PSK(keyBuffer)
|
|
39
|
-
this.psk = decodedPSK.psk
|
|
40
|
-
this.tag = decodedPSK.tag
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Takes a given Connection and creates a private encryption stream
|
|
45
|
-
* between its two peers from the PSK the Protector instance was
|
|
46
|
-
* created with.
|
|
47
|
-
*
|
|
48
|
-
* @param {MultiaddrConnection} connection - The connection to protect
|
|
49
|
-
* @returns {Promise<MultiaddrConnection>} A protected duplex iterable
|
|
50
|
-
*/
|
|
51
|
-
async protect (connection) {
|
|
52
|
-
if (!connection) {
|
|
53
|
-
throw errcode(new Error(Errors.NO_HANDSHAKE_CONNECTION), ERR_INVALID_PARAMETERS)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Exchange nonces
|
|
57
|
-
log('protecting the connection')
|
|
58
|
-
const localNonce = crypto.randomBytes(NONCE_LENGTH)
|
|
59
|
-
|
|
60
|
-
const shake = handshake(connection)
|
|
61
|
-
shake.write(localNonce)
|
|
62
|
-
|
|
63
|
-
const result = await shake.reader.next(NONCE_LENGTH)
|
|
64
|
-
const remoteNonce = result.value.slice()
|
|
65
|
-
shake.rest()
|
|
66
|
-
|
|
67
|
-
// Create the boxing/unboxing pipe
|
|
68
|
-
log('exchanged nonces')
|
|
69
|
-
const [internal, external] = duplexPair()
|
|
70
|
-
pipe(
|
|
71
|
-
external,
|
|
72
|
-
// Encrypt all outbound traffic
|
|
73
|
-
createBoxStream(localNonce, this.psk),
|
|
74
|
-
shake.stream,
|
|
75
|
-
// Decrypt all inbound traffic
|
|
76
|
-
createUnboxStream(remoteNonce, this.psk),
|
|
77
|
-
external
|
|
78
|
-
).catch(log.error)
|
|
79
|
-
|
|
80
|
-
return internal
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
module.exports = Protector
|
|
85
|
-
module.exports.errors = Errors
|
|
86
|
-
module.exports.generate = require('./key-generator')
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const crypto = require('libp2p-crypto')
|
|
4
|
-
const KEY_LENGTH = 32
|
|
5
|
-
const { toString: uint8ArrayToString } = require('uint8arrays/to-string')
|
|
6
|
-
const { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Generates a PSK that can be used in a libp2p-pnet private network
|
|
10
|
-
*
|
|
11
|
-
* @param {Uint8Array} bytes - An object to write the psk into
|
|
12
|
-
* @returns {void}
|
|
13
|
-
*/
|
|
14
|
-
function generate (bytes) {
|
|
15
|
-
const psk = uint8ArrayToString(crypto.randomBytes(KEY_LENGTH), 'base16')
|
|
16
|
-
const key = uint8ArrayFromString('/key/swarm/psk/1.0.0/\n/base16/\n' + psk)
|
|
17
|
-
|
|
18
|
-
bytes.set(key)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
module.exports = generate
|
|
22
|
-
module.exports.NONCE_LENGTH = 24
|
|
23
|
-
module.exports.KEY_LENGTH = KEY_LENGTH
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
// @ts-ignore This condition will always return 'false' since the types 'Module | undefined'
|
|
27
|
-
if (require.main === module) {
|
|
28
|
-
// @ts-ignore
|
|
29
|
-
generate(process.stdout)
|
|
30
|
-
}
|
|
31
|
-
} catch (/** @type {any} */ error) {
|
|
32
|
-
|
|
33
|
-
}
|
package/src/pubsub-adapter.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
// Pubsub adapter to keep API with handlers while not removed.
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import('libp2p-interfaces/src/pubsub').InMessage} InMessage
|
|
6
|
-
* @typedef {import('libp2p-interfaces/src/pubsub')} PubsubRouter
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @param {{new(...args: any[]): PubsubRouter}} PubsubRouter
|
|
11
|
-
* @param {import('.')} libp2p
|
|
12
|
-
* @param {{ enabled: boolean; } & import(".").PubsubLocalOptions & import("libp2p-interfaces/src/pubsub").PubsubOptions} options
|
|
13
|
-
*/
|
|
14
|
-
function pubsubAdapter (PubsubRouter, libp2p, options) {
|
|
15
|
-
/** @type {PubsubRouter & { _subscribeAdapter: PubsubRouter['subscribe'], _unsubscribeAdapter: PubsubRouter['unsubscribe'] }} */
|
|
16
|
-
// @ts-ignore we set the extra _subscribeAdapter and _unsubscribeAdapter properties afterwards
|
|
17
|
-
const pubsub = new PubsubRouter(libp2p, options)
|
|
18
|
-
pubsub._subscribeAdapter = pubsub.subscribe
|
|
19
|
-
pubsub._unsubscribeAdapter = pubsub.unsubscribe
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Subscribes to a given topic.
|
|
23
|
-
*
|
|
24
|
-
* @override
|
|
25
|
-
* @param {string} topic
|
|
26
|
-
* @param {(msg: InMessage) => void} [handler]
|
|
27
|
-
* @returns {void}
|
|
28
|
-
*/
|
|
29
|
-
function subscribe (topic, handler) {
|
|
30
|
-
// Bind provided handler
|
|
31
|
-
handler && pubsub.on(topic, handler)
|
|
32
|
-
pubsub._subscribeAdapter(topic)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Unsubscribe from the given topic.
|
|
37
|
-
*
|
|
38
|
-
* @override
|
|
39
|
-
* @param {string} topic
|
|
40
|
-
* @param {(msg: InMessage) => void} [handler]
|
|
41
|
-
* @returns {void}
|
|
42
|
-
*/
|
|
43
|
-
function unsubscribe (topic, handler) {
|
|
44
|
-
if (!handler) {
|
|
45
|
-
pubsub.removeAllListeners(topic)
|
|
46
|
-
} else {
|
|
47
|
-
pubsub.removeListener(topic, handler)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (pubsub.listenerCount(topic) === 0) {
|
|
51
|
-
pubsub._unsubscribeAdapter(topic)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
pubsub.subscribe = subscribe
|
|
56
|
-
pubsub.unsubscribe = unsubscribe
|
|
57
|
-
|
|
58
|
-
return pubsub
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
module.exports = pubsubAdapter
|