* refactor: switch ExternalAPI to Fetch API * fix: add missing auth token in Plex request * fix: send proper URL params * ci: try to fix format checker * ci: ci: try to fix format checker * ci: try to fix format checker * refactor: make tautulli use the ExternalAPI class * refactor: add rate limit to fetch api * refactor: add rate limit to fetch api * refactor: switch server from axios to fetch api * refactor: switch frontend from axios to fetch api * fix: switch from URL objects to strings * fix: use the right search params for ExternalAPI * fix: better log for ExternalAPI errors * feat: add retry to external API requests * fix: try to fix network errors with IPv6 * fix: imageProxy rate limit * revert: remove retry to external API requests * feat: set IPv4 first as an option * fix(jellyfinapi): add missing argument in JellyfinAPI constructor * refactor: clean the rate limit utility
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
/* eslint-disable no-console */
|
|
import useSettings from '@app/hooks/useSettings';
|
|
import { useUser } from '@app/hooks/useUser';
|
|
import { useEffect } from 'react';
|
|
|
|
const ServiceWorkerSetup = () => {
|
|
const { currentSettings } = useSettings();
|
|
const { user } = useUser();
|
|
useEffect(() => {
|
|
if ('serviceWorker' in navigator && user?.id) {
|
|
navigator.serviceWorker
|
|
.register('/sw.js')
|
|
.then(async (registration) => {
|
|
console.log(
|
|
'[SW] Registration successful, scope is:',
|
|
registration.scope
|
|
);
|
|
|
|
if (currentSettings.enablePushRegistration) {
|
|
const sub = await registration.pushManager.subscribe({
|
|
userVisibleOnly: true,
|
|
applicationServerKey: currentSettings.vapidPublic,
|
|
});
|
|
|
|
const parsedSub = JSON.parse(JSON.stringify(sub));
|
|
|
|
if (parsedSub.keys.p256dh && parsedSub.keys.auth) {
|
|
const res = await fetch('/api/v1/user/registerPushSubscription', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
endpoint: parsedSub.endpoint,
|
|
p256dh: parsedSub.keys.p256dh,
|
|
auth: parsedSub.keys.auth,
|
|
}),
|
|
});
|
|
if (!res.ok) throw new Error();
|
|
}
|
|
}
|
|
})
|
|
.catch(function (error) {
|
|
console.log('[SW] Service worker registration failed, error:', error);
|
|
});
|
|
}
|
|
}, [
|
|
user,
|
|
currentSettings.vapidPublic,
|
|
currentSettings.enablePushRegistration,
|
|
]);
|
|
return null;
|
|
};
|
|
|
|
export default ServiceWorkerSetup;
|