()
| 45 | } |
| 46 | |
| 47 | export function init() { |
| 48 | const apiTag = document.getElementById('mailvelope-api'); |
| 49 | if (apiTag) { |
| 50 | if (apiTag.dataset.version !== prefs.version) { |
| 51 | window.setTimeout(() => { |
| 52 | window.dispatchEvent(new CustomEvent('mailvelope-disconnect', {detail: {version: prefs.version}})); |
| 53 | }, 1); |
| 54 | } |
| 55 | return; |
| 56 | } |
| 57 | if (!window.mailvelope) { |
| 58 | const element = document.createElement('script'); |
| 59 | element.id = 'mailvelope-api'; |
| 60 | element.src = chrome.runtime.getURL('client-API/mailvelope-client-api.js'); |
| 61 | element.dataset.version = prefs.version; |
| 62 | document.head.append(element); |
| 63 | } |
| 64 | controllerPort = EventHandler.connect(`api-${getUUID()}`); |
| 65 | const port = { |
| 66 | onMessage: { |
| 67 | addListener(listener) { |
| 68 | window.addEventListener('message', event => { |
| 69 | if (!isValidOrigin(event.origin) || |
| 70 | event.data.mvelo_extension || |
| 71 | !event.data.mvelo_client) { |
| 72 | return; |
| 73 | } |
| 74 | const {mvelo_client, ...data} = event.data; |
| 75 | try { |
| 76 | checkTypes(data); |
| 77 | if (data.identifier) { |
| 78 | if (data.identifier.includes(KEYRING_DELIMITER)) { |
| 79 | throw new MvError('Identifier invalid.', 'INVALID_IDENTIFIER'); |
| 80 | } |
| 81 | data.keyringId = host + KEYRING_DELIMITER + data.identifier; |
| 82 | } else { |
| 83 | data.keyringId = MAIN_KEYRING_ID; |
| 84 | } |
| 85 | listener(data); |
| 86 | } catch (e) { |
| 87 | if (data._reply) { |
| 88 | port.postMessage({...data, event: '_reply', error: mapError(e)}); |
| 89 | } else { |
| 90 | throw e; |
| 91 | } |
| 92 | } |
| 93 | }); |
| 94 | } |
| 95 | }, |
| 96 | postMessage(options) { |
| 97 | options.mvelo_extension = true; |
| 98 | const targetOrigin = getTargetOrigin(); |
| 99 | window.postMessage(options, targetOrigin); |
| 100 | } |
| 101 | }; |
| 102 | clientPort = new EventHandler(port); |
| 103 | registerClientEventHandler(); |
| 104 | } |
nothing calls this directly
no test coverage detected