const cbor = require('borc'); const assert = require('assert'); // Create WebSocket connection. const ws = new WebSocket('ws://localhost:40000'); ws.binaryType = 'arraybuffer'; // handle user auth within the socket itself // https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html let user = null; function user_login(res) { [struct, created] = res; user = created; console.log(created); return send({ method: 'cryp_generate', params: { level: 64 }}); } function new_cryp(cryp) { console.log('got a new cryp'); } const handlers = { 'cryp_generate': new_cryp, 'user_login': user_login, 'user_create': user_login, }; function receive(res) { if (res.err) return console.error(res.err); const { method, params } = res; return handlers[method](params); } function send(msg) { msg.token = user && user.token; ws.send(cbor.encode(msg)); } // Connection opened ws.addEventListener('open', function (event) { send({ method: 'user_create', params: { name: 'somebodyelse', password: 'grepgrepgrep' }}); }); // Listen for messages ws.addEventListener('message', function (event) { console.log('Message from server ', event.data); const blob = new Uint8Array(event.data); const decoded = cbor.decode(blob); console.log(decoded); return receive(decoded); }); ws.addEventListener('error', function (event) { console.error('WebSocket error', event); user = null; }); ws.addEventListener('close', function (event) { console.error('WebSocket closed', event); user = null; });