2026-10-17 20:52:12 -04:00
|
|
|
export function pushSessionToSW(baseUrl?: string, accessToken?: string, userId?: string) {
|
2026-02-14 11:41:36 +05:30
|
|
|
if (!('serviceWorker' in navigator)) return;
|
|
|
|
|
if (!navigator.serviceWorker.controller) return;
|
|
|
|
|
|
|
|
|
|
navigator.serviceWorker.controller.postMessage({
|
|
|
|
|
type: 'setSession',
|
|
|
|
|
accessToken,
|
|
|
|
|
baseUrl,
|
2026-10-17 20:52:12 -04:00
|
|
|
userId,
|
2026-02-14 11:41:36 +05:30
|
|
|
});
|
|
|
|
|
}
|
2026-10-25 19:11:56 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Resolves once media requests can carry the session: immediately-ish when a
|
|
|
|
|
* service worker already controls the page, otherwise when one takes control
|
|
|
|
|
* (first visit / just updated) or after `timeoutMs`. Used to retry a media
|
|
|
|
|
* load that raced the worker's activation and went out without a token.
|
|
|
|
|
*/
|
|
|
|
|
export function whenMediaAuthReady(timeoutMs = 3000): Promise<void> {
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
const sw = 'serviceWorker' in navigator ? navigator.serviceWorker : undefined;
|
|
|
|
|
if (!sw || sw.controller) {
|
|
|
|
|
window.setTimeout(resolve, 500);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const done = () => {
|
|
|
|
|
sw.removeEventListener('controllerchange', done);
|
|
|
|
|
resolve();
|
|
|
|
|
};
|
|
|
|
|
sw.addEventListener('controllerchange', done);
|
|
|
|
|
window.setTimeout(done, timeoutMs);
|
|
|
|
|
});
|
|
|
|
|
}
|