Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(oidc): force sw update when new registration appears (release) #1449

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion examples/react-oidc-demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"url": "https://github.com/AxaGuilDEv/react-oidc.git"
},
"scripts": {
"start": "vite",
"start": "pnpm prestart && pnpm vite",
"prestart": "node ./node_modules/@axa-fr/react-oidc/bin/copy-service-worker-files.mjs public",
"build": "vite build",
"serve": "vite preview",
"clean": "rimraf dist",
Expand Down
7 changes: 6 additions & 1 deletion packages/oidc-client/src/initWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ export const initWorkerAsync = async (
registration = await configuration.service_worker_register(serviceWorkerRelativeUrl);
} else {
registration = await navigator.serviceWorker.register(serviceWorkerRelativeUrl);

if (registration.active && registration.waiting) {
console.log('Detected new service worker waiting, unregistering and reloading');
await configuration.service_worker_update_require_callback?.(registration, stopKeepAlive);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi @wermanoid thank you for your PullRequest !
I'am not sure to understand why we nee 2 time await configuration.service_worker_update_require_callback?.(registration, stopKeepAlive); ? may you help me to understand?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there are cases when new service worker is added, when old one is still running. This leads to case when SW is just hanging in waitting state and never starts, as original SW is still running as usual.

As far as I understand now, oidc is able to update SW only when running SW version and oidc version mismatch.
But we had cases when ui was redeployed and that leads to case, when 2 SW of same internal oidc version appeared in browser.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanh you @wermanoid I will test your version tomorrow! sorry for the delay.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @guillaume-chervet , any chance to verify? Or can I help somehow to move forward?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked it referring to my Issue #1400

I can't reproduce the sw mismatched versions issue anymore in demo app running from wermanoid:fix/update-sw-registration

}
}

try {
Expand Down Expand Up @@ -151,7 +156,7 @@ export const initWorkerAsync = async (
console.warn(
`Service worker ${serviceWorkerVersion} version mismatch with js client version ${codeVersion}, unregistering and reloading`,
);
await oidcConfiguration.service_worker_update_require_callback(registration, stopKeepAlive);
await oidcConfiguration.service_worker_update_require_callback?.(registration, stopKeepAlive);
}

// @ts-ignore
Expand Down
Loading