diff --git a/deno.jsonc b/deno.jsonc
index f532f072..205283ff 100644
--- a/deno.jsonc
+++ b/deno.jsonc
@@ -99,7 +99,7 @@
"./common/element.js": "./src/common/element.js",
"./common/signal.js": "./src/common/signal.js",
"./common/worker.js": "./src/common/worker.js",
- "./common/worker/rpc.js": "./src/common/worker/rpc.js",
+ "./common/worker/rpc-channel.js": "./src/common/worker/rpc-channel.js",
"./common/utils.js": "./src/common/utils.js",
"./components/artwork/audio-metadata/element.js": "./src/components/artwork/audio-metadata/element.js",
"./components/artwork/audio-metadata/worker.js": "./src/components/artwork/audio-metadata/worker.js",
@@ -188,7 +188,7 @@
"./components/output/common.js": "./src/components/output/common.js",
"./components/output/polymorphic/indexed-db/constants.js": "./src/components/output/polymorphic/indexed-db/constants.js",
"./components/output/polymorphic/indexed-db/element.js": "./src/components/output/polymorphic/indexed-db/element.js",
- "./components/output/polymorphic/indexed-db/worker.js": "./src/components/output/polymorphic/indexed-db/worker.js",
+
"./components/output/raw/atproto-passkey/element.js": "./src/components/output/raw/atproto-passkey/element.js",
"./components/output/raw/atproto-space/element.js": "./src/components/output/raw/atproto-space/element.js",
"./components/supplement/last.fm/element.js": "./src/components/supplement/last.fm/element.js",
@@ -330,8 +330,9 @@
"src/common/**/*.d.ts",
"src/components/**/*.js",
"specs/components/**/*.d.ts",
- "src/definitions/**/*.json",
+ "src/**/*.json",
"src/definitions/**/*.ts",
+ "src/oauth/**/*.js",
],
},
"permissions": {
diff --git a/src/common/worker.js b/src/common/worker.js
index 4da58bdb..f589108b 100644
--- a/src/common/worker.js
+++ b/src/common/worker.js
@@ -1,4 +1,3 @@
-///
import { getTransferables } from "@okikio/transferables";
import { debounceMicrotask } from "@vicary/debounce-microtask";
import { xxh32 } from "xxh32";
@@ -26,16 +25,27 @@ export { getTransferables } from "@okikio/transferables";
// Previously we checked `globalThis.onmessage === null`, but Safari initialises
// that property as `undefined` rather than `null`, causing the check to fail.
+/**
+ * Detects whether we're running inside a dedicated worker's global scope.
+ * Uses the constructor name rather than the `DedicatedWorkerGlobalScope`
+ * global, so this module doesn't need the `webworker` TS lib (JSR disallows
+ * `/// ` in published files).
+ *
+ * @param {unknown} context
+ * @returns {boolean}
+ */
+function isDedicatedWorkerScope(context) {
+ return /** @type {any} */ (context)?.constructor?.name ===
+ "DedicatedWorkerGlobalScope";
+}
+
/** @type {MessageEvent[]} */
const _earlyMessages = [];
/** @type {null | (() => void)} */
let _flushEarlyMessages = null;
-if (
- typeof DedicatedWorkerGlobalScope !== "undefined" &&
- globalThis instanceof DedicatedWorkerGlobalScope
-) {
+if (isDedicatedWorkerScope(globalThis)) {
const handler = /** @type {EventListener} */ ((event) => {
_earlyMessages.push(/** @type {MessageEvent} */ (event));
});
@@ -63,10 +73,7 @@ export function ostiary(
callback,
context = /** @type {T} */ (/** @type {unknown} */ (globalThis)),
) {
- if (
- typeof DedicatedWorkerGlobalScope !== "undefined" &&
- context instanceof DedicatedWorkerGlobalScope
- ) {
+ if (isDedicatedWorkerScope(context)) {
callback(context, true, crypto.randomUUID());
// Replay any messages that arrived before the handler was registered.
@@ -211,7 +218,8 @@ export function announce(
) {
const a = announcement(name, args);
const transferables = getTransferables(a);
- (context ?? globalThis).postMessage(a, { transfer: transferables });
+ /** @type {MessengerRealm} */ (/** @type {unknown} */ (context ?? globalThis))
+ .postMessage(a, { transfer: transferables });
}
/**