@geogirafe/lib-geoportal 1.2.0-dev.2896420147 → 1.2.0-dev.2899998274
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"1.2.0-dev.
|
|
1
|
+
{"version":"1.2.0-dev.2899998274", "build":"2899998274", "date":"01/10/2026"}
|
|
@@ -175,7 +175,7 @@ export default class GeoGirafeApp {
|
|
|
175
175
|
}
|
|
176
176
|
let sw;
|
|
177
177
|
try {
|
|
178
|
-
sw = await this.
|
|
178
|
+
sw = await this.waitForServiceWorkerControl();
|
|
179
179
|
}
|
|
180
180
|
catch (err) {
|
|
181
181
|
throw new Error(`Service worker registration failed. ${err}`, { cause: err });
|
|
@@ -213,22 +213,36 @@ export default class GeoGirafeApp {
|
|
|
213
213
|
this.context.stateManager.state.application.isAuthInitialized = true;
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
|
-
async
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
async waitForServiceWorkerControl() {
|
|
217
|
+
const sw = navigator.serviceWorker;
|
|
218
|
+
const registration = await sw.register('service-worker.js', { type: 'module' });
|
|
219
|
+
// If a service worker already controls the current page, everything is ready.
|
|
220
|
+
// `registration.active` only tells us that a service worker is active for the registration;
|
|
221
|
+
// `sw.controller` tells us that it actually controls this page.
|
|
222
|
+
if (sw.controller) {
|
|
223
|
+
return sw.controller;
|
|
220
224
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
225
|
+
// The page is not currently controlled by a service worker.
|
|
226
|
+
// This can happen, for example, after a force refresh (Ctrl+F5), even though
|
|
227
|
+
// an active service worker already exists. In that case, the service worker's
|
|
228
|
+
// `activate` event is not triggered again, so the `clients.claim()` call from
|
|
229
|
+
// the activation phase cannot take control of this newly loaded page.
|
|
230
|
+
// If an active service worker already exists, explicitly ask it to claim the
|
|
231
|
+
// current page. The service worker handles this message by calling `clients.claim()`.
|
|
232
|
+
const active = registration.active;
|
|
233
|
+
if (active) {
|
|
234
|
+
active.postMessage({ type: 'claim' });
|
|
224
235
|
}
|
|
236
|
+
// Wait until the service worker takes control of the current page.
|
|
237
|
+
// Once `clients.claim()` succeeds, the browser updates `sw.controller` and
|
|
238
|
+
// dispatches the `controllerchange` event.
|
|
225
239
|
return new Promise((resolve) => {
|
|
226
|
-
sw.addEventListener('
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
resolve(
|
|
240
|
+
sw.addEventListener('controllerchange', () => {
|
|
241
|
+
const controller = navigator.serviceWorker.controller;
|
|
242
|
+
if (controller) {
|
|
243
|
+
resolve(controller);
|
|
230
244
|
}
|
|
231
|
-
});
|
|
245
|
+
}, { once: true });
|
|
232
246
|
});
|
|
233
247
|
}
|
|
234
248
|
}
|
|
@@ -99,9 +99,7 @@ export default class AuthManager extends GirafeSingleton {
|
|
|
99
99
|
this.issuerManager.finalizeLoginWorkflow();
|
|
100
100
|
}
|
|
101
101
|
else if (this.state.oauth.status === 'loggedOut') {
|
|
102
|
-
|
|
103
|
-
await this.gmfManager.getAnonymousUserInfo();
|
|
104
|
-
this.issuerManager.finalizeLoginWorkflow();
|
|
102
|
+
await this.handleLoggedOut();
|
|
105
103
|
}
|
|
106
104
|
else if (this.state.oauth.status === 'loginFailed') {
|
|
107
105
|
this.issuerManager.handleErrorFromIssuer();
|
|
@@ -112,6 +110,17 @@ export default class AuthManager extends GirafeSingleton {
|
|
|
112
110
|
throw error;
|
|
113
111
|
}
|
|
114
112
|
}
|
|
113
|
+
async handleLoggedOut() {
|
|
114
|
+
try {
|
|
115
|
+
// Get the anonymous rights
|
|
116
|
+
await this.gmfManager.getAnonymousUserInfo();
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
// The anonymous rights could not be loaded
|
|
120
|
+
this.context.errorManager.pushMessage('no-anonymous-rights', 'The default anonymous rights could not be loaded', 'warning');
|
|
121
|
+
}
|
|
122
|
+
this.issuerManager.finalizeLoginWorkflow();
|
|
123
|
+
}
|
|
115
124
|
async tokensChanged() {
|
|
116
125
|
await this.serviceWorkerHelper.sendMessageToServiceWorker({ access_token: this.state.oauth.tokens?.access_token });
|
|
117
126
|
}
|
|
@@ -37,6 +37,10 @@ sw.addEventListener('fetch', (event) => {
|
|
|
37
37
|
event.respondWith(handleFetchEvent(event));
|
|
38
38
|
});
|
|
39
39
|
function handleMessage(event) {
|
|
40
|
+
if (event.data?.type === 'claim') {
|
|
41
|
+
event.waitUntil(sw.clients.claim());
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
40
44
|
if (!swHelper.isOriginAllowed(self.location.origin, event.origin)) {
|
|
41
45
|
console.warn(`Message ignored: origin not allowed (${event.origin})`);
|
|
42
46
|
return;
|
|
@@ -64,11 +68,6 @@ function handleActivate(event) {
|
|
|
64
68
|
if ('clients' in sw) {
|
|
65
69
|
await swHelperReady;
|
|
66
70
|
await sw.clients.claim();
|
|
67
|
-
const clientsList = await sw.clients.matchAll({ type: 'window' });
|
|
68
|
-
for (const client of clientsList) {
|
|
69
|
-
client.navigate(client.url);
|
|
70
|
-
log('Page reloaded by the service worker.');
|
|
71
|
-
}
|
|
72
71
|
}
|
|
73
72
|
})());
|
|
74
73
|
}
|