private-voice-agent / src /workers /pocket-bootstrap.ts
aut4rk's picture
Deploy static voice agent
009fd18 verified
Raw
History Blame
2.29 kB
console.info("[PocketBootstrap] worker module starting");
self.addEventListener("error", (event) => {
console.error("[PocketBootstrap] error event", {
message: event.message,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
});
});
self.addEventListener("unhandledrejection", (event) => {
console.error("[PocketBootstrap] unhandled rejection", event.reason);
});
const postBootstrapError = (error: unknown) => {
const message =
error instanceof Error ? `${error.name}: ${error.message}` : String(error);
self.postMessage({
type: "error",
error: `Pocket bootstrap failed: ${message}`,
});
};
const queuedMessages: unknown[] = [];
let vendorMessageHandler:
| ((event: MessageEvent) => void | Promise<void>)
| null = null;
const forwardOrQueueMessage = (event: MessageEvent) => {
if (vendorMessageHandler) {
void vendorMessageHandler(event);
return;
}
queuedMessages.push(event.data);
console.info("[PocketBootstrap] queued message", {
type:
typeof event.data === "object" &&
event.data !== null &&
"type" in (event.data as Record<string, unknown>)
? (event.data as { type?: unknown }).type
: "unknown",
});
};
self.addEventListener("message", forwardOrQueueMessage);
void (async () => {
try {
const vendorWorkerUrl = new URL(
"/pocket-tts/inference-worker.js",
self.location.origin,
).toString();
console.info("[PocketBootstrap] importing vendor worker");
await import(/* @vite-ignore */ vendorWorkerUrl);
console.info("[PocketBootstrap] vendor worker imported");
if (typeof self.onmessage !== "function") {
throw new Error("Vendor worker did not install a message handler.");
}
vendorMessageHandler = self.onmessage.bind(self);
console.info("[PocketBootstrap] vendor handler ready", {
queuedMessages: queuedMessages.length,
});
while (queuedMessages.length > 0) {
const data = queuedMessages.shift();
await vendorMessageHandler(
new MessageEvent("message", {
data,
}),
);
}
} catch (error) {
console.error("[PocketBootstrap] vendor worker import failed", error);
postBootstrapError(error);
throw error;
}
})();
export {};