$ git clone https://github.com/ether/etherpad-lite.git
$ cd etherpad-lite
$ bin/run.sh
$ npm install ep_cursortrace
$ bin/fastRun.sh
Now, with two different browser profiles or browsers, access an arbitrary pad, e.g., http://0.0.0.0:9001/p/test . This yields two different stacktraces:
[2020-11-29 19:06:26.200] [WARN] client - Uncaught ReferenceError: nodes is not defined -- {
errorId: 'ghbpCdnfKlzu1yVyPJNm',
type: 'Uncaught exception',
msg: 'Uncaught ReferenceError: nodes is not defined',
url: 'http://0.0.0.0:9001/p/test',
source: 'http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=67cf214c',
linenumber: 65,
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) [...]',
stack: 'ReferenceError: nodes is not defined\n' +
' at wrap (eval at j (http://0.0.0.0:9001/static/js/require-kernel.js?v=67cf214c:10:1408), <anonymous>:5:498)\n' +
' at Object.exports.handleClientMessage_CUSTOM [as hook_fn] (eval at j (http://0.0.0.0:9001/static/js/require-kernel.js?v=67cf214c:10:1408), <anonymous>:5:3065)\n' +
' at callHookFnSync (http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=67cf214c:65:1586)\n' +
' at http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=67cf214c:65:3706\n' +
' at Array.map (<anonymous>)\n' +
' at Object.exports.callAll (http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=67cf214c:65:3690)\n' +
' at Object.handleMessageFromServer (http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=67cf214c:38:6146)\n' +
' at r.<anonymous> (http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=67cf214c:3:4719)\n' +
' at r.emit (http://0.0.0.0:9001/socket.io/socket.io.js?v=67cf214c:6:19839)\n' +
' at r.onevent (http://0.0.0.0:9001/socket.io/socket.io.js?v=67cf214c:8:10571)'
[2020-11-29 19:07:11.208] [WARN] client - ReferenceError: assignment to undeclared variable nodes -- {
errorId: 'moEzQA0v3dG2KeCqAYpi',
type: 'Uncaught exception',
msg: 'ReferenceError: assignment to undeclared variable nodes',
url: 'http://0.0.0.0:9001/p/test',
source: 'http://0.0.0.0:9001/static/js/require-kernel.js?v=68c37cb4 line 10 > Function',
linenumber: 5,
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) [...]',
stack: 'wrap@http://0.0.0.0:9001/static/js/require-kernel.js?v=68c37cb4 line 10 > Function:5:512\n' +
'ep_cursortrace/static/js/main.js/exports.handleClientMessage_CUSTOM@http://0.0.0.0:9001/static/js/require-kernel.js?v=68c37cb4 line 10 > Function:5:3064\n' +
'callHookFnSync@http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=68c37cb4:65:1586\n' +
'ep_etherpad-lite/static/js/pluginfw/hooks.js/exports.callAll/<@http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=68c37cb4:65:3720\n' +
'ep_etherpad-lite/static/js/pluginfw/hooks.js/exports.callAll@http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/ace2_common.js?callback=require.define&v=68c37cb4:65:3690\n' +
'handleMessageFromServer@http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=68c37cb4:38:6146\n' +
'handshake/<@http://0.0.0.0:9001/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=68c37cb4:3:4719\n' +
'r.prototype.emit@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:19839\n' +
'r.prototype.onevent@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:10571\n' +
'r.prototype.onpacket@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:10193\n' +
't.exports/<@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:12354\n' +
'r.prototype.emit@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:19839\n' +
'r.prototype.ondecoded@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:25583\n' +
't.exports/<@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:12354\n' +
'r.prototype.emit@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:19839\n' +
'a.prototype.add@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:12498\n' +
'r.prototype.ondata@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:25536\n' +
't.exports/<@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:12354\n' +
'r.prototype.emit@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:19839\n' +
'r.prototype.onPacket@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:7:2948\n' +
'r.prototype.setTransport/<@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:7:560\n' +
'r.prototype.emit@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:6:19839\n' +
'r.prototype.onPacket@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:7:15217\n' +
'r.prototype.onData@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:7:15166\n' +
'r.prototype.addEventListeners/this.ws.onmessage@http://0.0.0.0:9001/socket.io/socket.io.js?v=68c37cb4:8:6594\n'
Editing in one browser causes the exception to be shown for the other browser and vice versa.