Skip to content

Commit f64d645

Browse files
authored
Merge pull request #1331 from joshunrau/devel
fix service worker assets not loading on gateway with help of Claude
2 parents c51defd + 81723c2 commit f64d645

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "opendatacapture",
33
"type": "module",
4-
"version": "1.13.5",
4+
"version": "1.13.6",
55
"private": true,
66
"packageManager": "pnpm@10.7.0",
77
"license": "Apache-2.0",

packages/runtime-internal/src/interactive/bootstrap.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,26 @@ if (!bundle) {
5050
await navigator.serviceWorker.register('./worker.js', {
5151
scope: './'
5252
});
53-
await navigator.serviceWorker.ready.then((registration) => {
54-
registration.active?.postMessage({
55-
staticAssets: instrument.content.staticAssets,
56-
type: 'STATIC_ASSETS'
53+
const registration = await navigator.serviceWorker.ready;
54+
if (!navigator.serviceWorker.controller) {
55+
await new Promise((resolve) => {
56+
navigator.serviceWorker.addEventListener('controllerchange', resolve, { once: true });
5757
});
58+
}
59+
const { port1, port2 } = new MessageChannel();
60+
await new Promise((resolve) => {
61+
port1.onmessage = (event) => {
62+
if (event.data?.type === 'STATIC_ASSETS_READY') {
63+
resolve(undefined);
64+
}
65+
};
66+
registration.active?.postMessage(
67+
{
68+
staticAssets: instrument.content.staticAssets,
69+
type: 'STATIC_ASSETS'
70+
},
71+
[port2]
72+
);
5873
});
5974
}
6075

packages/runtime-internal/src/interactive/worker.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
/// <reference lib="webworker" />
22

3+
const worker = /** @type {ServiceWorkerGlobalScope} */ (/** @type {unknown} */ (self));
4+
35
/** @type {Map<string, string>} */
46
const staticAssets = new Map();
57

8+
worker.addEventListener('install', () => {
9+
worker.skipWaiting();
10+
});
11+
12+
worker.addEventListener('activate', (event) => {
13+
event.waitUntil(worker.clients.claim());
14+
});
15+
616
/**
717
* Converts a data URL (base64 or plain) into a Fetch API Response object.
818
*
@@ -49,9 +59,10 @@ addEventListener('message', (event) => {
4959
Object.entries(data.staticAssets).forEach(([key, value]) => {
5060
staticAssets.set(key, value);
5161
});
62+
event.ports[0]?.postMessage({ type: 'STATIC_ASSETS_READY' });
5263
});
5364

54-
self.addEventListener('fetch', (_event) => {
65+
worker.addEventListener('fetch', (_event) => {
5566
if (!staticAssets) {
5667
console.error('staticAssets is not defined');
5768
return;

0 commit comments

Comments
 (0)