2023-07-18 03:51:03 +00:00
|
|
|
import {
|
|
|
|
addQuery,
|
|
|
|
clearOpenPorts,
|
|
|
|
deleteQuery,
|
|
|
|
getAuthStatus,
|
|
|
|
getAuthStatusKnown,
|
|
|
|
getAuthStatusResolve,
|
|
|
|
getBlockForBootloader,
|
|
|
|
getKernelIframe,
|
|
|
|
getOpenPorts,
|
|
|
|
getQueries,
|
|
|
|
getQueriesNonce,
|
|
|
|
getQuery,
|
|
|
|
increaseQueriesNonce,
|
|
|
|
setAuthStatus,
|
|
|
|
setAuthStatusKnown,
|
|
|
|
} from "../../vars.js";
|
|
|
|
|
|
|
|
export function handleKernelMessage(event: MessageEvent) {
|
|
|
|
let data = event.data.data;
|
|
|
|
|
|
|
|
if (event.data.method === "kernelBridgeVersion") {
|
2023-07-19 09:06:08 +00:00
|
|
|
for (let [, port] of Object.entries(getOpenPorts())) {
|
|
|
|
try {
|
|
|
|
(port as any).postMessage(event.data);
|
|
|
|
} catch {}
|
|
|
|
}
|
2023-07-18 03:51:03 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event.origin !== "http://kernel.lume") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event.data.method === "log") {
|
|
|
|
if (data.isErr !== null && !data.isErr) {
|
|
|
|
console.log(data.message);
|
|
|
|
} else {
|
|
|
|
console.error(data.message);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event.data.method === "kernelAuthStatus") {
|
|
|
|
setAuthStatus(data);
|
|
|
|
if (!getAuthStatusKnown()) {
|
|
|
|
getAuthStatusResolve()();
|
|
|
|
setAuthStatusKnown(true);
|
|
|
|
console.log("bootloader is now initialized");
|
|
|
|
if (!getAuthStatus().loginComplete) {
|
|
|
|
console.log("user is not logged in: waiting until login is confirmed");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (let [, port] of Object.entries(getOpenPorts())) {
|
|
|
|
try {
|
|
|
|
(port as any).postMessage(event.data);
|
|
|
|
} catch {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data.logoutComplete === true) {
|
|
|
|
console.log("received logout signal, clearing all ports");
|
|
|
|
|
|
|
|
for (let [, port] of Object.entries(getOpenPorts())) {
|
|
|
|
try {
|
|
|
|
(port as any).disconnect();
|
|
|
|
} catch {}
|
|
|
|
}
|
|
|
|
clearOpenPorts();
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(event.data.nonce in getQueries())) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let receiveResult = getQuery(event.data.nonce);
|
|
|
|
if (event.data.method === "response") {
|
|
|
|
deleteQuery(event.data.nonce);
|
|
|
|
}
|
|
|
|
|
|
|
|
receiveResult(event.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function queryKernel(query: any): Promise<any> {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
let receiveResponse = function (data: any) {
|
|
|
|
resolve(data.data);
|
|
|
|
};
|
|
|
|
|
|
|
|
getBlockForBootloader().then(() => {
|
|
|
|
let nonce = getQueriesNonce();
|
|
|
|
increaseQueriesNonce();
|
|
|
|
query.nonce = nonce;
|
|
|
|
addQuery(nonce, receiveResponse);
|
|
|
|
if (getKernelIframe().contentWindow !== null) {
|
|
|
|
(getKernelIframe() as any).contentWindow.postMessage(
|
|
|
|
query,
|
|
|
|
"http://kernel.lume",
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
console.error(
|
|
|
|
"kernelFrame.contentWindow was null, cannot send message!",
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|