fix(admin): wait longer for slow get_version instead of aborting a 200
Preferred host had a 3.5s abort while the response arrived around 7s, so DevTools showed OK and the UI still showed a connection error. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+18
-9
@@ -23,7 +23,9 @@
|
|||||||
const AUTH_TOKEN_KEY = 'peransa_token';
|
const AUTH_TOKEN_KEY = 'peransa_token';
|
||||||
const VERSION_RETRY_ROUNDS = 3;
|
const VERSION_RETRY_ROUNDS = 3;
|
||||||
const CONFIG_RETRY_ROUNDS = 3;
|
const CONFIG_RETRY_ROUNDS = 3;
|
||||||
const CONFIG_TIMEOUT = 12000;
|
const VERSION_FETCH_TIMEOUT_MS = 20000;
|
||||||
|
const CONFIG_FETCH_TIMEOUT_MS = 25000;
|
||||||
|
const CONFIG_TIMEOUT = 60000;
|
||||||
|
|
||||||
let configTimeoutId;
|
let configTimeoutId;
|
||||||
let mainScriptLoaded = false;
|
let mainScriptLoaded = false;
|
||||||
@@ -381,13 +383,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const contentType = response.headers.get('content-type') || '';
|
const contentType = response.headers.get('content-type') || '';
|
||||||
|
const text = await response.text();
|
||||||
|
const trimmed = text.trim();
|
||||||
|
|
||||||
if (!contentType.includes('application/json')) {
|
if (contentType.includes('application/json') || trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
||||||
const text = await response.text();
|
try {
|
||||||
throw new Error('Response is not JSON. Received: ' + text.substring(0, 100));
|
return JSON.parse(trimmed);
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error('Response is not JSON. Received: ' + trimmed.substring(0, 100));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return await response.json();
|
if (trimmed) {
|
||||||
|
return trimmed;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Response is empty');
|
||||||
} finally {
|
} finally {
|
||||||
window.clearTimeout(timeoutId);
|
window.clearTimeout(timeoutId);
|
||||||
}
|
}
|
||||||
@@ -400,10 +411,9 @@
|
|||||||
for (let round = 1; round <= rounds; round++) {
|
for (let round = 1; round <= rounds; round++) {
|
||||||
for (let index = 0; index < urls.length; index++) {
|
for (let index = 0; index < urls.length; index++) {
|
||||||
const url = urls[index];
|
const url = urls[index];
|
||||||
const timeout = index === urls.length - 1 ? 6000 : 3500;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await fetchJson(url, timeout);
|
const data = await fetchJson(url, VERSION_FETCH_TIMEOUT_MS);
|
||||||
const version = normalizeVersionResponse(data);
|
const version = normalizeVersionResponse(data);
|
||||||
if (!version) {
|
if (!version) {
|
||||||
throw new Error('Version response is empty');
|
throw new Error('Version response is empty');
|
||||||
@@ -429,10 +439,9 @@
|
|||||||
for (let round = 1; round <= rounds; round++) {
|
for (let round = 1; round <= rounds; round++) {
|
||||||
for (let index = 0; index < urls.length; index++) {
|
for (let index = 0; index < urls.length; index++) {
|
||||||
const url = urls[index];
|
const url = urls[index];
|
||||||
const timeout = index === urls.length - 1 ? 7000 : 4000;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const config = await fetchJson(url, timeout);
|
const config = await fetchJson(url, CONFIG_FETCH_TIMEOUT_MS);
|
||||||
|
|
||||||
if (!config || typeof config !== 'object') {
|
if (!config || typeof config !== 'object') {
|
||||||
throw new Error('Config response is invalid');
|
throw new Error('Config response is invalid');
|
||||||
|
|||||||
Reference in New Issue
Block a user