(() => { const io = require('socket.io-client'); const internals = { kSocketUrl: 'https://junction.unlimited.pizza/', port: null, socket: null, peers: 0, onMessage(message) { internals[message.action](message.data); }, async joinAudioCall(data) { try { const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true }); internals.socket = io(internals.kSocketUrl, { transports: ['websocket'] }); internals.socket.on('error', function(error) { console.error('GENERAL ERROR', error); }); internals.socket.on('connect_error', function(error) { console.error('CONNNECT ERROR', error); }); internals.socket.on('connect', function() { console.log("Connected to signaling server, group: ", data.currentUrl); internals.socket.emit('join', { 'url': data.currentUrl, }); }); internals.socket.on('disconnect', function() { console.log("disconnected from signaling server"); }); internals.socket.on('addPeer', function(data) { console.log(data); internals.peers++; console.log(`There are now ${internals.peers} participants`); }); internals.socket.on('removePeer', function() { internals.peers--; console.log(`There are now ${internals.peers} participants`); }); internals.createAudioElement(data.tada); } catch (err) { internals.port.postMessage({ action: 'error' }); internals.port.disconnect(); internals.createAudioElement(data.tada); } }, hangUp() { document.querySelectorAll('.junction-call-audio').forEach((audioElement) => audioElement.remove()); internals.socket.close(); internals.port.disconnect(); }, createAudioElement(source, type = 'audio/wav') { const audioElement = document.createElement('audio'); audioElement.setAttribute('class', 'junction-call-audio'); audioElement.src = source; audioElement.autoplay = 'autoplay'; audioElement.type = type; document.querySelector('body').appendChild(audioElement); } }; internals.port = chrome.runtime.connect({ name:"content" }); internals.port.onMessage.addListener(internals.onMessage); })(); // Indicates to the background script that we executed correctly true;