(() => { const internals = { port: null, onMessage(message) { internals[message.action](message.data); }, async joinAudioCall(data) { try { const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true }); 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.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;