let app = Elm.Background.Background.init(); app.ports.consoleLog.subscribe(message => console.log(message)); app.ports.localStorageGet.subscribe(key => app.ports.localStorageRecv.send([key, window.localStorage.getItem(key) ?? "{}"])); let requestResolveMap = {}; let responseResolveMap = {}; browser.webRequest.onBeforeSendHeaders.addListener( requestDetails => { let resolve; let p = new Promise((r, _) => resolve = r); requestResolveMap[requestDetails.requestId] = resolve; app.ports.incomingRequest.send([requestDetails.requestId, JSON.stringify(requestDetails)]); return p; }, {urls: [""]}, ["blocking", "requestHeaders"] ); browser.webRequest.onHeadersReceived.addListener( responseDetails => { let resolve; let p = new Promise((r, _) => resolve = r); responseResolveMap[responseDetails.requestId] = resolve; app.ports.incomingResponse.send([responseDetails.requestId, JSON.stringify(responseDetails)]); return p; }, {urls: [""]}, ["blocking", "responseHeaders"] ); app.ports.modifyRequest.subscribe(([id, body]) => { requestResolveMap[id](body) delete requestResolveMap[id]; }); app.ports.modifyResponse.subscribe(([id, body]) => { responseResolveMap[id](body) delete responseResolveMap[id]; }); browser.runtime.onMessage.addListener(() => app.ports.refresh.send("")); browser.browserAction.onClicked.addListener(() => { let createProperties = { active: true, url: "app.html", }; browser.tabs.create(createProperties); });