This repository has been archived on 2023-12-17. You can view files and clone it, but cannot push or open issues or pull requests.
extension/src/main/background/bridge.ts

68 lines
1.3 KiB
TypeScript

import {
addQuery,
deleteOpenPort,
getAuthStatus,
getBlockForBootloader,
getBridgeLoadedResolve,
getKernelIframe,
getOpenPorts,
getPortsNonce,
increasePortsNonce,
setOpenPort,
} from "../../vars.js";
function handleBridgeMessage(
port: any,
portNonce: number,
data: any,
domain: string,
) {
if (data.method === "bridgeLoaded") {
getBridgeLoadedResolve()();
return;
}
if (!("nonce" in data)) {
return;
}
if (data.method === "response") {
window.postMessage(data);
return;
}
if (data.method !== "queryUpdate") {
addQuery(data.nonce, (response: any) => {
if (portNonce in getOpenPorts()) {
port.postMessage(response);
}
});
data["domain"] = domain;
}
getKernelIframe().contentWindow!.postMessage(data, "http://kernel.lume");
}
export function bridgeListener(port: any) {
let portNonce = getPortsNonce();
increasePortsNonce();
setOpenPort(portNonce, port);
port.onDisconnect.addListener(() => {
deleteOpenPort(portNonce);
});
let domain = new URL(port.sender.url).hostname;
port.onMessage.addListener(function (data: any) {
handleBridgeMessage(port, portNonce, data, domain);
});
getBlockForBootloader().then(() => {
port.postMessage({
method: "kernelAuthStatus",
data: getAuthStatus(),
});
});
}