feat: add initial fallback registry support
This commit is contained in:
parent
704f2089c1
commit
5cc457d78b
|
@ -13,10 +13,12 @@ import {
|
||||||
import {
|
import {
|
||||||
deriveChildKey,
|
deriveChildKey,
|
||||||
downloadSmallObject,
|
downloadSmallObject,
|
||||||
|
hexToBytes,
|
||||||
verifyCid,
|
verifyCid,
|
||||||
} from "@lumeweb/libweb";
|
} from "@lumeweb/libweb";
|
||||||
import type { moduleQuery, presentKeyData } from "@lumeweb/libkernel/module";
|
import type { moduleQuery, presentKeyData } from "@lumeweb/libkernel/module";
|
||||||
import { readableStreamToUint8Array } from "binconv";
|
import { readableStreamToUint8Array } from "binconv";
|
||||||
|
import { getSavedRegistryEntry } from "./registry.js";
|
||||||
|
|
||||||
// WorkerLaunchFn is the type signature of the function that launches the
|
// WorkerLaunchFn is the type signature of the function that launches the
|
||||||
// worker to set up for processing a query.
|
// worker to set up for processing a query.
|
||||||
|
@ -308,16 +310,22 @@ function handleModuleCall(
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isRegistryEntry = false;
|
||||||
|
try {
|
||||||
|
isRegistryEntry = hexToBytes(event.data.data.module)?.length === 32;
|
||||||
|
} catch {}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
typeof event.data.data.module !== "string" ||
|
typeof event.data.data.module !== "string" ||
|
||||||
!verifyCid(event.data.data.module)
|
(!verifyCid(event.data.data.module) && !isRegistryEntry)
|
||||||
) {
|
) {
|
||||||
logErr("moduleCall", "received moduleCall with malformed module");
|
logErr("moduleCall", "received moduleCall with malformed module");
|
||||||
respondErr(
|
respondErr(
|
||||||
event,
|
event,
|
||||||
messagePortal,
|
messagePortal,
|
||||||
isWorker,
|
isWorker,
|
||||||
"'module' field in moduleCall is expected to be a base58 encoded blake3 hash + filesize",
|
"'module' field in moduleCall is expected to be a base58 encoded blake3 hash + filesize or a registry entry pubkey",
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -372,10 +380,22 @@ function handleModuleCall(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Load any overrides.
|
let moduleDomain = event.data.data.module; // Can change with overrides.
|
||||||
const finalModule = event.data.data.module; // Can change with overrides.
|
let finalModule = moduleDomain; // Can change with overrides.
|
||||||
const moduleDomain = event.data.data.module; // Does not change with overrides.
|
|
||||||
|
|
||||||
|
if (isRegistryEntry) {
|
||||||
|
finalModule = getSavedRegistryEntry(moduleDomain);
|
||||||
|
if (!finalModule) {
|
||||||
|
logErr("moduleCall", "received moduleCall with no known registry entry");
|
||||||
|
respondErr(
|
||||||
|
event,
|
||||||
|
messagePortal,
|
||||||
|
isWorker,
|
||||||
|
"registry entry for module is not found",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Define a helper function to create a new query to the module. It will
|
// Define a helper function to create a new query to the module. It will
|
||||||
// both open a query on the module and also send an update message to the
|
// both open a query on the module and also send an update message to the
|
||||||
// caller with the kernel nonce for this query so that the caller can
|
// caller with the kernel nonce for this query so that the caller can
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
const DEFAULT_MODULE_REGISTRY = new Map<string, string>(Object.entries({}));
|
||||||
|
const REGISTRY_ITEM_ID = "registry";
|
||||||
|
|
||||||
|
Object.freeze(DEFAULT_MODULE_REGISTRY);
|
||||||
|
|
||||||
|
export function getSavedRegistryEntry(pubkey: string) {
|
||||||
|
const savedEntries = new Map<string, string>(
|
||||||
|
Object.entries(window.localStorage.getItem(REGISTRY_ITEM_ID) ?? {}),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (savedEntries.has(pubkey)) {
|
||||||
|
return savedEntries.get(pubkey) as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEFAULT_MODULE_REGISTRY.has(pubkey)) {
|
||||||
|
DEFAULT_MODULE_REGISTRY.get(pubkey) as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
Loading…
Reference in New Issue