fix and update
This commit is contained in:
@@ -18,11 +18,6 @@ export function AppBootstrapScreen({
|
||||
<p className="mt-2 max-w-sm text-center text-sm text-[#667085]">
|
||||
Сервер авторизации временно недоступен. Обычно помогает повтор через несколько секунд.
|
||||
</p>
|
||||
{onRetry ? (
|
||||
<Button className="mt-6 rounded-xl" onClick={onRetry}>
|
||||
Повторить подключение
|
||||
</Button>
|
||||
) : null}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
@@ -33,6 +28,11 @@ export function AppBootstrapScreen({
|
||||
</p>
|
||||
</>
|
||||
)}
|
||||
{onRetry ? (
|
||||
<Button className="mt-6 rounded-xl" variant={error ? 'default' : 'secondary'} onClick={onRetry}>
|
||||
Повторить подключение
|
||||
</Button>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
setIsApiReady(false);
|
||||
|
||||
try {
|
||||
await waitForStableGateway(3);
|
||||
await waitForStableGateway(1);
|
||||
const session = await fetchAuthSession(accessToken);
|
||||
applySessionState(session, { setUser, setToken, activatePinLock, clearPinLock });
|
||||
initialBootstrapDoneRef.current = true;
|
||||
@@ -287,7 +287,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
for (let bootstrapAttempt = 0; bootstrapAttempt < 4; bootstrapAttempt += 1) {
|
||||
try {
|
||||
if (isInitialBootstrap) {
|
||||
await waitForStableGateway(3);
|
||||
await waitForStableGateway(1);
|
||||
}
|
||||
|
||||
if (currentToken) {
|
||||
@@ -343,11 +343,9 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
} catch (error) {
|
||||
if (isGatewayUnavailableError(error) && isInitialBootstrap && bootstrapAttempt + 1 < 4) {
|
||||
invalidateApiGatewayReady();
|
||||
if (bootstrapAttempt >= 1) {
|
||||
setBootstrapError(
|
||||
'Не удалось подключиться к серверу API (502). Подождите несколько секунд и нажмите «Повторить».'
|
||||
);
|
||||
}
|
||||
setBootstrapError(
|
||||
'Не удалось подключиться к серверу API (502). Подождите несколько секунд и нажмите «Повторить».'
|
||||
);
|
||||
await new Promise((resolve) => setTimeout(resolve, 1200));
|
||||
continue;
|
||||
}
|
||||
@@ -372,6 +370,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
setBootstrapError('Не удалось подключиться к серверу API. Подождите несколько секунд и нажмите «Повторить».');
|
||||
setIsApiReady(false);
|
||||
setIsSessionReady(false);
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
if (message) showToast(message);
|
||||
@@ -632,6 +631,16 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
Boolean(hasStoredSession || token) &&
|
||||
(isLoading || !isApiReady || !isSessionReady);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (!isBootstrapping || bootstrapError) return;
|
||||
const timer = window.setTimeout(() => {
|
||||
setBootstrapError(
|
||||
'Сервер API не отвечает. Если недавно перезапускали контейнеры — подождите 10–20 секунд и нажмите «Повторить».'
|
||||
);
|
||||
}, 18000);
|
||||
return () => window.clearTimeout(timer);
|
||||
}, [bootstrapError, isBootstrapping]);
|
||||
|
||||
return (
|
||||
<AuthContext.Provider
|
||||
value={{
|
||||
@@ -661,16 +670,15 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
||||
{isBootstrapping ? (
|
||||
<AppBootstrapScreen
|
||||
error={bootstrapError}
|
||||
onRetry={
|
||||
bootstrapError
|
||||
? () => {
|
||||
setBootstrapError(null);
|
||||
initialBootstrapDoneRef.current = false;
|
||||
invalidateApiGatewayReady();
|
||||
void refreshProfile();
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
onRetry={() => {
|
||||
setBootstrapError(null);
|
||||
initialBootstrapDoneRef.current = false;
|
||||
invalidateApiGatewayReady();
|
||||
setIsLoading(true);
|
||||
setIsApiReady(false);
|
||||
setIsSessionReady(false);
|
||||
void refreshProfile();
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
children
|
||||
|
||||
@@ -684,7 +684,7 @@ export function buildSystemSettingPayload(setting: Pick<SystemSetting, 'key' | '
|
||||
const GATEWAY_RETRY_STATUS = new Set([502, 503, 504]);
|
||||
const GATEWAY_RETRY_ATTEMPTS = 4;
|
||||
const GATEWAY_STABLE_PROBE_INTERVAL_MS = 800;
|
||||
const GATEWAY_STABLE_MAX_ROUNDS = 12;
|
||||
const GATEWAY_STABLE_MAX_ROUNDS = 8;
|
||||
const API_MAX_CONCURRENT = 6;
|
||||
const API_BURST_MAX_CONCURRENT = 2;
|
||||
const API_BURST_WINDOW_MS = 5000;
|
||||
|
||||
Reference in New Issue
Block a user