mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-02-01 15:52:51 +00:00
Update peer config to use webRTC browsert-server transport with autorelay
This commit is contained in:
parent
f54af33717
commit
6903ecdad4
@ -1,2 +1 @@
|
||||
REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/
|
||||
REACT_APP_RELAY_NODE=
|
||||
REACT_APP_RELAY_NODE=
|
@ -19,13 +19,6 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo
|
||||
yarn build
|
||||
```
|
||||
|
||||
* (Optional) Run a local signalling server:
|
||||
|
||||
```bash
|
||||
# In packages/peer
|
||||
yarn signal-server
|
||||
```
|
||||
|
||||
* (Optional) Run a local relay node:
|
||||
|
||||
```bash
|
||||
@ -35,11 +28,11 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo
|
||||
|
||||
* `signal-server`: multiaddr of a signalling server (default: local signalling server multiaddr)
|
||||
|
||||
* Set the signalling server and relay node multiaddrs in the [env](./.env) file:
|
||||
* Set the relay node multiaddr in the [env](./.env) file:
|
||||
|
||||
```
|
||||
REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/
|
||||
REACT_APP_RELAY_NODE=/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star/p2p/12D3KooWRzH3ZRFP6RDbs2EKA8jSrD4Y6VYtLnCRMj3mYCiMHCJP
|
||||
REACT_APP_RELAY_NODE=/ip4/0.0.0.0/udp/56352/webrtc/certhash/uEiDc_lNCEKrl3Jm_jhlqNlBc6y5xMKwjIvWxeIPqluHppg/p2p/12D3KooWHSZqWZ5vtKVooz2XCU6v2FjVQnQxhA2hANFN4VYyDfp3
|
||||
|
||||
```
|
||||
|
||||
* Start the react app in development mode:
|
||||
|
@ -14,7 +14,7 @@ function App() {
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
if (peer) {
|
||||
await peer.init(process.env.REACT_APP_SIGNAL_SERVER, process.env.REACT_APP_RELAY_NODE)
|
||||
await peer.init(process.env.REACT_APP_RELAY_NODE)
|
||||
console.log(`Peer ID is ${peer.peerId!.toString()}`);
|
||||
|
||||
peer.subscribeMessage((peerId, message) => {
|
||||
|
@ -31,6 +31,7 @@
|
||||
"@libp2p/floodsub": "^5.0.0",
|
||||
"@libp2p/mplex": "^7.1.1",
|
||||
"@libp2p/pubsub-peer-discovery": "^7.0.1",
|
||||
"@libp2p/webrtc": "^1.0.1",
|
||||
"@libp2p/webrtc-star": "^5.0.3",
|
||||
"@libp2p/websockets": "^5.0.2",
|
||||
"@multiformats/multiaddr": "^11.1.4",
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
import { createLibp2p, Libp2p } from 'libp2p';
|
||||
// For nodejs.
|
||||
import wrtc from 'wrtc';
|
||||
import assert from 'assert';
|
||||
import { pipe } from 'it-pipe';
|
||||
import * as lp from 'it-length-prefixed';
|
||||
@ -13,7 +12,7 @@ import { pushable, Pushable } from 'it-pushable';
|
||||
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
||||
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
||||
|
||||
import { webRTCStar, WebRTCStarTuple } from '@libp2p/webrtc-star';
|
||||
import { webRTC } from '@libp2p/webrtc';
|
||||
import { noise } from '@chainsafe/libp2p-noise';
|
||||
import { mplex } from '@libp2p/mplex';
|
||||
import type { Stream as P2PStream, Connection } from '@libp2p/interface-connection';
|
||||
@ -21,69 +20,43 @@ import type { PeerInfo } from '@libp2p/interface-peer-info';
|
||||
import { PeerId } from '@libp2p/interface-peer-id';
|
||||
import { multiaddr, Multiaddr } from '@multiformats/multiaddr';
|
||||
import { bootstrap } from '@libp2p/bootstrap';
|
||||
import { floodsub } from '@libp2p/floodsub';
|
||||
import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery';
|
||||
// import { floodsub } from '@libp2p/floodsub';
|
||||
// import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery';
|
||||
|
||||
export const PROTOCOL = '/chat/1.0.0';
|
||||
export const DEFAULT_SIGNAL_SERVER_URL = '/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star';
|
||||
|
||||
export class Peer {
|
||||
_node?: Libp2p
|
||||
_wrtcStar: WebRTCStarTuple
|
||||
_relayNodeMultiaddr?: Multiaddr
|
||||
|
||||
_remotePeerIds: PeerId[] = []
|
||||
_peerStreamMap: Map<string, Pushable<string>> = new Map()
|
||||
_messageHandlers: Array<(peerId: PeerId, message: string) => void> = []
|
||||
|
||||
constructor (nodejs?: boolean) {
|
||||
// Instantiation in nodejs.
|
||||
if (nodejs) {
|
||||
this._wrtcStar = webRTCStar({ wrtc });
|
||||
} else {
|
||||
this._wrtcStar = webRTCStar();
|
||||
}
|
||||
}
|
||||
|
||||
get peerId (): PeerId | undefined {
|
||||
return this._node?.peerId;
|
||||
}
|
||||
|
||||
async init (signalServerURL = DEFAULT_SIGNAL_SERVER_URL, relayNodeURL?: string): Promise<void> {
|
||||
let peerDiscovery: any;
|
||||
if (relayNodeURL) {
|
||||
console.log('Bootstrapping relay node');
|
||||
this._relayNodeMultiaddr = multiaddr(relayNodeURL);
|
||||
peerDiscovery = [
|
||||
bootstrap({
|
||||
list: [this._relayNodeMultiaddr.toString()]
|
||||
}),
|
||||
pubsubPeerDiscovery({
|
||||
interval: 1000
|
||||
})
|
||||
];
|
||||
} else {
|
||||
peerDiscovery = [this._wrtcStar.discovery];
|
||||
}
|
||||
async init (relayNodeURL?: string): Promise<void> {
|
||||
console.log('Bootstrapping relay node');
|
||||
this._relayNodeMultiaddr = multiaddr(relayNodeURL);
|
||||
const peerDiscovery = [
|
||||
bootstrap({
|
||||
list: [this._relayNodeMultiaddr.toString()]
|
||||
})
|
||||
// pubsubPeerDiscovery({
|
||||
// interval: 1000
|
||||
// })
|
||||
];
|
||||
|
||||
this._node = await createLibp2p({
|
||||
addresses: {
|
||||
// Add the signaling server address, along with our PeerId to our multiaddrs list
|
||||
// libp2p will automatically attempt to dial to the signaling server so that it can
|
||||
// receive inbound connections from other peers
|
||||
listen: [
|
||||
// Public signal servers
|
||||
// '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
|
||||
// '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star'
|
||||
signalServerURL
|
||||
]
|
||||
},
|
||||
transports: [
|
||||
this._wrtcStar.transport
|
||||
webRTC()
|
||||
],
|
||||
connectionEncryption: [noise()],
|
||||
streamMuxers: [mplex()],
|
||||
pubsub: floodsub(),
|
||||
// pubsub: floodsub(),
|
||||
peerDiscovery,
|
||||
relay: {
|
||||
enabled: true,
|
||||
|
60
yarn.lock
60
yarn.lock
@ -1367,7 +1367,7 @@
|
||||
resolved "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz"
|
||||
integrity sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==
|
||||
|
||||
"@chainsafe/libp2p-noise@^10.2.0":
|
||||
"@chainsafe/libp2p-noise@^10.0.0", "@chainsafe/libp2p-noise@^10.2.0":
|
||||
version "10.2.0"
|
||||
resolved "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-10.2.0.tgz"
|
||||
integrity sha512-nXw09UwSE5JCiB5Dte6j0b0Qe+KbtepJvaPz/f5JyxcoyUfLE/t7XWRZAZmcuWBeVWWpOItnK5WmW8uocoiwCQ==
|
||||
@ -4450,6 +4450,32 @@
|
||||
socket.io-client "^4.1.2"
|
||||
uint8arrays "^4.0.2"
|
||||
|
||||
"@libp2p/webrtc@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@libp2p/webrtc/-/webrtc-1.0.1.tgz#fb5c4ab87ae49f257cc0632d14b42c751a6a1618"
|
||||
integrity sha512-T3YKdDhAmIdoJnsOCSPG0mnfoqtX3pQ/g7VNin3c0S4c069wxBxYA20MUgOtATB3MDlxyjYQ4U6cZrWNyMB9lA==
|
||||
dependencies:
|
||||
"@chainsafe/libp2p-noise" "^10.0.0"
|
||||
"@libp2p/interface-connection" "^3.0.2"
|
||||
"@libp2p/interface-peer-id" "^1.0.5"
|
||||
"@libp2p/interface-stream-muxer" "^3.0.0"
|
||||
"@libp2p/interface-transport" "^2.0.0"
|
||||
"@libp2p/logger" "^2.0.0"
|
||||
"@libp2p/peer-id" "^1.1.15"
|
||||
"@multiformats/multiaddr" "^11.0.3"
|
||||
"@protobuf-ts/runtime" "^2.8.0"
|
||||
err-code "^3.0.1"
|
||||
it-length-prefixed "^8.0.3"
|
||||
it-merge "^2.0.0"
|
||||
it-pipe "^2.0.4"
|
||||
it-pushable "^3.1.0"
|
||||
it-stream-types "^1.0.4"
|
||||
multiformats "^10.0.0"
|
||||
multihashes "^4.0.3"
|
||||
p-defer "^4.0.0"
|
||||
uint8arraylist "^2.3.3"
|
||||
uint8arrays "^4.0.2"
|
||||
|
||||
"@libp2p/websockets@^5.0.2":
|
||||
version "5.0.2"
|
||||
resolved "https://registry.npmjs.org/@libp2p/websockets/-/websockets-5.0.2.tgz"
|
||||
@ -4481,6 +4507,11 @@
|
||||
tweetnacl "^1.0.3"
|
||||
tweetnacl-util "^0.15.1"
|
||||
|
||||
"@multiformats/base-x@^4.0.1":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121"
|
||||
integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==
|
||||
|
||||
"@multiformats/mafmt@^11.0.2", "@multiformats/mafmt@^11.0.3":
|
||||
version "11.0.3"
|
||||
resolved "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-11.0.3.tgz"
|
||||
@ -4495,7 +4526,7 @@
|
||||
dependencies:
|
||||
"@multiformats/multiaddr" "^11.0.0"
|
||||
|
||||
"@multiformats/multiaddr@^11.0.0", "@multiformats/multiaddr@^11.0.5", "@multiformats/multiaddr@^11.1.4":
|
||||
"@multiformats/multiaddr@^11.0.0", "@multiformats/multiaddr@^11.0.3", "@multiformats/multiaddr@^11.0.5", "@multiformats/multiaddr@^11.1.4":
|
||||
version "11.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-11.1.4.tgz#55be2da1d82973af1f9f38415143b894ec2d095c"
|
||||
integrity sha512-eaFX7Pp5DNVoSk5xlWbmKwHmo1+ab90VT0xzWSocoXj9IkShx+lYm7Zo4tmfX8RnwTNGzBSZqY5G4jmqvYFoPg==
|
||||
@ -4766,6 +4797,11 @@
|
||||
glob-promise "^3.4.0"
|
||||
path "^0.12.7"
|
||||
|
||||
"@protobuf-ts/runtime@^2.8.0":
|
||||
version "2.8.2"
|
||||
resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.8.2.tgz#5d5424a6ae7fb846c3f4d0f2dd6448db65bb69d6"
|
||||
integrity sha512-PVxsH81y9kEbHldxxG/8Y3z2mTXWQytRl8zNS0mTPUjkEC+8GUX6gj6LsA8EFp25fAs9V0ruh+aNWmPccEI9MA==
|
||||
|
||||
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz"
|
||||
@ -17173,6 +17209,13 @@ multibase@^0.7.0:
|
||||
base-x "^3.0.8"
|
||||
buffer "^5.5.0"
|
||||
|
||||
multibase@^4.0.1:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.6.tgz#6e624341483d6123ca1ede956208cb821b440559"
|
||||
integrity sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==
|
||||
dependencies:
|
||||
"@multiformats/base-x" "^4.0.1"
|
||||
|
||||
multibase@~0.6.0:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz"
|
||||
@ -17233,6 +17276,15 @@ multihashes@^0.4.15, multihashes@~0.4.15:
|
||||
multibase "^0.7.0"
|
||||
varint "^5.0.0"
|
||||
|
||||
multihashes@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-4.0.3.tgz#426610539cd2551edbf533adeac4c06b3b90fb05"
|
||||
integrity sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==
|
||||
dependencies:
|
||||
multibase "^4.0.1"
|
||||
uint8arrays "^3.0.0"
|
||||
varint "^5.0.2"
|
||||
|
||||
multimatch@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz"
|
||||
@ -22790,7 +22842,7 @@ uint8-varint@^1.0.1, uint8-varint@^1.0.2:
|
||||
uint8arraylist "^2.0.0"
|
||||
uint8arrays "^4.0.2"
|
||||
|
||||
uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1:
|
||||
uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.3.3, uint8arraylist@^2.4.1:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.3.tgz"
|
||||
integrity sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==
|
||||
@ -23226,7 +23278,7 @@ value-or-promise@1.0.11:
|
||||
resolved "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz"
|
||||
integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==
|
||||
|
||||
varint@^5.0.0:
|
||||
varint@^5.0.0, varint@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz"
|
||||
integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==
|
||||
|
Loading…
Reference in New Issue
Block a user