feat: enhance token retrieval for service worker with multi-account support
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
import { useSpecVersions } from './useSpecVersions';
|
import { useSpecVersions } from './useSpecVersions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether to use authenticated media endpoints.
|
||||||
|
* @returns true if the server supports authenticated media (Matrix v1.11+)
|
||||||
|
*/
|
||||||
export const useMediaAuthentication = (): boolean => {
|
export const useMediaAuthentication = (): boolean => {
|
||||||
const { versions, unstable_features: unstableFeatures } = useSpecVersions();
|
const { versions, unstable_features: unstableFeatures } = useSpecVersions();
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,30 @@ if ('serviceWorker' in navigator) {
|
|||||||
navigator.serviceWorker.register(swUrl);
|
navigator.serviceWorker.register(swUrl);
|
||||||
navigator.serviceWorker.addEventListener('message', (event) => {
|
navigator.serviceWorker.addEventListener('message', (event) => {
|
||||||
if (event.data?.type === 'token' && event.data?.responseKey) {
|
if (event.data?.type === 'token' && event.data?.responseKey) {
|
||||||
// Get the token for SW.
|
// Get access token from the current session
|
||||||
const token = localStorage.getItem('cinny_access_token') ?? undefined;
|
let token: string | undefined;
|
||||||
|
|
||||||
|
// First check the new multi-account session storage
|
||||||
|
const sessionsJson = localStorage.getItem('matrixSessions');
|
||||||
|
const currentUserId = localStorage.getItem('currentSessionUserId');
|
||||||
|
|
||||||
|
if (sessionsJson && currentUserId) {
|
||||||
|
try {
|
||||||
|
const sessions = JSON.parse(sessionsJson);
|
||||||
|
const currentSession = sessions.find((s: { userId: string }) => s.userId === currentUserId);
|
||||||
|
if (currentSession?.accessToken) {
|
||||||
|
token = currentSession.accessToken;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// JSON parse failed, fall through to fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback to old single-account storage (for migration)
|
||||||
|
if (!token) {
|
||||||
|
token = localStorage.getItem('cinny_access_token') ?? undefined;
|
||||||
|
}
|
||||||
|
|
||||||
event.source!.postMessage({
|
event.source!.postMessage({
|
||||||
responseKey: event.data.responseKey,
|
responseKey: event.data.responseKey,
|
||||||
token,
|
token,
|
||||||
|
|||||||
Reference in New Issue
Block a user