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/bootloader/kernel.ts

83 lines
1.8 KiB
TypeScript

import {
addContextToErr,
bufToStr,
downloadObject,
Err,
getActivePortals,
hexToBuf,
} from "@lumeweb/libweb";
import { sendAuthUpdate } from "./util.js";
import { log, logErr } from "@lumeweb/libkernel/kernel";
import {
defaultKernelLink,
setBootloaderPortals,
setKernelLoaded,
setLoginComplete,
} from "./vars.js";
export function boot() {
let userKeyString = window.localStorage.getItem("key");
if (userKeyString === null) {
sendAuthUpdate();
return;
}
let [decodedSeed, errHTB] = hexToBuf(userKeyString);
if (errHTB !== null) {
logErr(addContextToErr(errHTB, "seed could not be decoded from hex"));
sendAuthUpdate();
return;
}
log("user is already logged in, attempting to load kernel");
setLoginComplete(true);
sendAuthUpdate();
loadKernel();
}
export async function loadKernel() {
let [kernelCode, err] = await downloadDefaultKernel();
if (err !== null) {
let extErr = addContextToErr(err, "unable to download kernel");
setKernelLoaded(extErr);
logErr(extErr);
sendAuthUpdate();
return;
}
setBootloaderPortals(getActivePortals());
try {
eval(kernelCode);
setKernelLoaded("success");
sendAuthUpdate();
log("kernel successfully loaded");
return;
} catch (err: any) {
let extErr = addContextToErr(err, "unable to eval kernel");
setKernelLoaded(extErr);
logErr(extErr);
logErr(err.toString());
console.error(extErr);
console.error(err);
sendAuthUpdate();
return;
}
}
async function downloadKernel(
kernelCid: string,
): Promise<[kernelCode: string, err: Err]> {
const [code, err] = await downloadObject(kernelCid);
if (err != null) {
return ["", err];
}
return [code, null];
}
function downloadDefaultKernel(): Promise<[kernelCode: string, err: Err]> {
return downloadKernel(defaultKernelLink);
}