68 lines
1.3 KiB
TypeScript
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(),
|
|
});
|
|
});
|
|
}
|