Files
ToBePlayed-Frontend/src/hooks/useSteamProfile.js
T
lobo d9a39dda22 feat(auth): use the cookie session and refresh on 401
The token is no longer stored; a tbp_session flag remembers the
login. apiFetch renews the session once on a 401 and sends the
request again. Parallel requests and other tabs share one refresh,
because Auth revokes the session when a refresh token is used twice.
Only a 401 from the refresh ends the session; a 502 or no network
shows the normal error.
2026-09-25 13:45:08 +02:00

36 lines
1.2 KiB
JavaScript

import {useEffect, useState} from 'react';
import {apiFetch} from '../utils/api.js';
import {sessionStamp} from '../utils/auth.js';
/**
* The user's Steam name and avatar from Core, or null while loading, without a Steam ID or on any error. Only
* decoration, so a failed call shows the default icon and never ends the session. Loads again after a new login
* or a settings save (see sessionStamp) on the next render, e.g. the next navigation.
*/
export default function useSteamProfile(enabled) {
const [profile, setProfile] = useState(null);
const stamp = sessionStamp();
useEffect(() => {
if (!enabled || !stamp) {
setProfile(null);
return undefined;
}
let cancelled = false;
(async () => {
try {
const response = await apiFetch(`${import.meta.env.VITE_CORE_API_URL}/api/library/steam-profile`);
const data = response.ok ? await response.json() : null;
if (!cancelled) setProfile(data);
} catch {
if (!cancelled) setProfile(null);
}
})();
return () => {
cancelled = true;
};
}, [enabled, stamp]);
return profile;
}