implement logging

This commit is contained in:
Kevin Jahns 2019-12-06 14:29:39 +01:00
parent 75f7b4d35a
commit 8313039459
4 changed files with 43 additions and 25 deletions

View file

@ -41,6 +41,24 @@ Peers using the same signalling server will find each other. You can specify sev
const provider = new WebrtcProvider('prosemirror', ydoc, { signalling: ['wss://y-webrtc-ckynwnzncc.now.sh', 'ws://localhost:4444'] })
```
### Logging
`y-webrtc` uses the `lib0/logging.js` logging library. By default this library disables logging. You can enable it by specifying the `log` environment / localStorage variable:
```js
// enable logging for all modules
localStorage.log = 'true'
// enable logging only for y-webrtc
localStorage.log = 'y-webrtc'
// by specifying a regex variables
localStorage.log = '^y.*'
```
```sh
# enable y-webrtc logging in nodejs
DEBUG='y-webrtc' node index.js
```
## License
Yjs is licensed under the [MIT License](./LICENSE).

30
package-lock.json generated
View file

@ -789,8 +789,7 @@
"get-browser-rtc": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz",
"integrity": "sha1-u81AyEUaftTvXDc7gWmkCd0dEdk=",
"dev": true
"integrity": "sha1-u81AyEUaftTvXDc7gWmkCd0dEdk="
},
"get-stdin": {
"version": "6.0.0",
@ -894,8 +893,7 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"inquirer": {
"version": "5.2.0",
@ -1074,10 +1072,9 @@
}
},
"lib0": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.1.4.tgz",
"integrity": "sha512-SYuWdjePgd59jd24BdRZeJ9mA/82InL2lE6ED2os+n5LUE6NoWmMxeAlNRTYahHBbJakdcpf/d0wULC4oFAX1w==",
"dev": true
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.1.5.tgz",
"integrity": "sha512-BsbgxGUp38sPqD+OmmmAVSuWh8f9EQ3RXVa7oGOlW8ux+UtPeKT5uSKvyFM3ufD2DDUk/epYxM5cc//zwYBE9Q=="
},
"load-json-file": {
"version": "2.0.0",
@ -1164,8 +1161,7 @@
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"mute-stream": {
"version": "0.0.7",
@ -1423,14 +1419,12 @@
"queue-microtask": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.1.2.tgz",
"integrity": "sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ==",
"dev": true
"integrity": "sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ=="
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
@ -1466,7 +1460,6 @@
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@ -1645,8 +1638,7 @@
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
"safer-buffer": {
"version": "2.1.2",
@ -1691,7 +1683,6 @@
"version": "9.6.2",
"resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.6.2.tgz",
"integrity": "sha512-EOKoImCaqtNvXIntxT1CBBK/3pVi7tMAoJ3shdyd9qk3zLm3QPiRLb/sPC1G2xvKJkJc5fkQjCXqRZ0AknwTig==",
"dev": true,
"requires": {
"debug": "^4.0.1",
"get-browser-rtc": "^1.0.0",
@ -1704,7 +1695,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
@ -1831,7 +1821,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
"safe-buffer": "~5.2.0"
}
@ -1950,8 +1939,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"validate-npm-package-license": {
"version": "3.0.4",

View file

@ -40,7 +40,7 @@
},
"dependencies": {
"simple-peer": "^9.6.2",
"lib0": "^0.1.4"
"lib0": "^0.1.5"
},
"devDependencies": {
"rollup": "^1.27.8",
@ -50,7 +50,7 @@
"rollup-plugin-terser": "^5.1.2",
"standard": "^12.0.1",
"y-protocols": "^0.1.0",
"lib0": "^0.1.4",
"lib0": "^0.1.5",
"yjs": "13.0.0-102"
},
"peerDependenies": {

View file

@ -11,6 +11,10 @@ import Peer from 'simple-peer/simplepeer.min.js'
import * as syncProtocol from 'y-protocols/sync.js'
import * as awarenessProtocol from 'y-protocols/awareness.js'
import * as logging from 'lib0/logging.js'
const log = logging.createModuleLogger('y-webrtc')
const messageSync = 0
const messageQueryAwareness = 3
const messageAwareness = 1
@ -44,6 +48,7 @@ const checkIsSynced = webrtcRoom => {
if ((!synced && webrtcRoom.synced) || (synced && !webrtcRoom.synced)) {
webrtcRoom.synced = synced
webrtcRoom.provider.emit('synced', [{ synced }])
log('synced ', logging.BOLD, webrtcRoom.name, logging.UNBOLD, ' with all peers')
}
}
@ -71,6 +76,7 @@ const readPeerMessage = (peerConn, buf) => {
const syncMessageType = syncProtocol.readSyncMessage(decoder, encoder, doc, webrtcRoom.provider)
if (syncMessageType === syncProtocol.messageYjsSyncStep2 && !webrtcRoom.synced) {
peerConn.syncedRooms.add(roomName)
log('synced ', logging.BOLD, roomName, logging.UNBOLD, ' with ', logging.BOLD, peerConn.remotePeerId)
checkIsSynced(webrtcRoom)
}
if (syncMessageType === syncProtocol.messageYjsSyncStep1) {
@ -122,6 +128,7 @@ export class WebrtcConn {
* @param {Array<string>} announcedTopics
*/
constructor (signalingConn, initiator, remotePeerId, announcedTopics) {
log('establishing connection to ', logging.BOLD, remotePeerId)
this.remotePeerId = remotePeerId
this.closed = false
this.connected = false
@ -137,6 +144,7 @@ export class WebrtcConn {
signalingConn.send({ type: 'publish', topics: announcedTopics, to: remotePeerId, from: peerId, messageType: 'signal', data })
})
this.peer.on('connect', () => {
log('connected to ', logging.BOLD, remotePeerId)
this.connected = true
announcedTopics.forEach(roomName => {
const room = webrtcRooms.get(roomName)
@ -172,8 +180,10 @@ export class WebrtcConn {
checkIsSynced(room)
})
this.peer.destroy()
log('closed connection to ', logging.BOLD, remotePeerId)
})
this.peer.on('error', () => {
this.peer.on('error', err => {
log('error in connection to ', logging.BOLD, remotePeerId, ': ', err)
this.connected = false
this.closed = true
})
@ -232,6 +242,8 @@ export class SignallingConn extends ws.WebsocketClient {
}
}
})
this.on('connect', () => log(`connected (${url})`))
this.on('disconnect', () => log(`disconnect (${url})`))
}
/**
* @param {Array<string>} rooms
@ -255,7 +267,7 @@ export class WebrtcProvider extends Observable {
* @param {Object} [opts]
* @param {Array<string>} [opts.signalling]
*/
constructor (room, doc, { signalling = ['wss://y-webrtc-hrxsloqrim.now.sh'] } = {}) {
constructor (room, doc, { signalling = ['wss://y-webrtc-hrxsloqrim.now.sh', 'wss://y-webrtc-signalling-eu.herokuapp.com', 'wss://y-webrtc-signalling-us.herokuapp.com/'] } = {}) {
super()
this.room = room
this.doc = doc