diff --git a/src/connection.ts b/src/connection.ts index 37167f5..2bcdfc8 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -32,8 +32,8 @@ export type WorkerResponse = { error?: Error, } -type BroadcastMessage = { - type: "getPath" | "path", +export type BroadcastMessage = { + type: "getPath" | "path" | "refreshPort", path?: string, } @@ -89,8 +89,13 @@ export class WorkerConnection { // @ts-expect-error if (self.clients) { // running in a ServiceWorker - // ask a window for the worker port + // ask a window for the worker port, register for refreshPort this.port = searchForPort(); + this.channel.onmessage = (event: MessageEvent) => { + if (event.data.type === "refreshPort") { + this.port = searchForPort(); + } + } } else if (workerPath && SharedWorker) { // running in a window, was passed a workerPath // create the SharedWorker and help other bare-mux clients get the workerPath diff --git a/src/worker.ts b/src/worker.ts index e62e415..816a896 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -1,9 +1,12 @@ import { BareTransport } from "./baretypes"; -import { WorkerMessage, WorkerResponse } from "./connection" +import { BroadcastMessage, WorkerMessage, WorkerResponse } from "./connection" let currentTransport: BareTransport | null = null; let currentTransportName: string = ""; +const channel = new BroadcastChannel("bare-mux"); +channel.postMessage({ type: "refreshPort" }); + function noClients(): Error { // @ts-expect-error mdn error constructor: new Error(message, options) return new Error("there are no bare clients", {