fix: await store sync using fresh token during login/init flow

This commit is contained in:
root
2025-11-09 16:35:13 +01:00
parent 30e78d7682
commit cc0d83430d

View File

@@ -276,7 +276,8 @@ function App() {
reason: 'login-auto', reason: 'login-auto',
startJob: !bootstrapResult?.storeRefreshJob, startJob: !bootstrapResult?.storeRefreshJob,
reuseOverlay: true, reuseOverlay: true,
block: true block: true,
tokenOverride: data.token
}); });
} }
updateSyncProgress('Login abgeschlossen', 98); updateSyncProgress('Login abgeschlossen', 98);
@@ -334,14 +335,15 @@ function App() {
} }
}, [session?.token, authorizedFetch]); }, [session?.token, authorizedFetch]);
const fetchStoresList = useCallback(async () => { const fetchStoresList = useCallback(async (tokenOverride) => {
if (!session?.token) { const tokenToUse = tokenOverride || session?.token;
if (!tokenToUse) {
return; return;
} }
setStatus(''); setStatus('');
setError(''); setError('');
try { try {
const response = await authorizedFetch('/api/stores'); const response = await authorizedFetch('/api/stores', {}, tokenToUse);
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP ${response.status}`); throw new Error(`HTTP ${response.status}`);
} }
@@ -355,8 +357,9 @@ function App() {
}, [session?.token, authorizedFetch]); }, [session?.token, authorizedFetch]);
const syncStoresWithProgress = useCallback( const syncStoresWithProgress = useCallback(
async ({ block = false, reason = 'manual', startJob = true, reuseOverlay = false } = {}) => { async ({ block = false, reason = 'manual', startJob = true, reuseOverlay = false, tokenOverride } = {}) => {
if (!session?.token) { const effectiveToken = tokenOverride || session?.token;
if (!effectiveToken) {
return; return;
} }
if (!reuseOverlay) { if (!reuseOverlay) {
@@ -372,7 +375,7 @@ function App() {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ force: true, reason }) body: JSON.stringify({ force: true, reason })
}); }, effectiveToken);
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP ${response.status}`); throw new Error(`HTTP ${response.status}`);
} }
@@ -386,7 +389,7 @@ function App() {
let completed = false; let completed = false;
while (!completed) { while (!completed) {
const statusResp = await authorizedFetch('/api/stores/refresh/status'); const statusResp = await authorizedFetch('/api/stores/refresh/status', {}, effectiveToken);
if (!statusResp.ok) { if (!statusResp.ok) {
throw new Error(`HTTP ${statusResp.status}`); throw new Error(`HTTP ${statusResp.status}`);
} }
@@ -430,8 +433,8 @@ function App() {
} }
} }
await fetchStoresList(); await fetchStoresList(effectiveToken);
await fetchConfig(undefined, { silent: true }); await fetchConfig(effectiveToken, { silent: true });
setStatus('Betriebe aktualisiert.'); setStatus('Betriebe aktualisiert.');
setTimeout(() => setStatus(''), 3000); setTimeout(() => setStatus(''), 3000);
} catch (err) { } catch (err) {
@@ -490,7 +493,8 @@ function App() {
reason: 'session-auto', reason: 'session-auto',
startJob: !result?.storeRefreshJob, startJob: !result?.storeRefreshJob,
reuseOverlay: true, reuseOverlay: true,
block: true block: true,
tokenOverride: storedToken
}); });
} }
} }