Remove offline mode

The offline mode was removed to focus on resolving connection issues instead of providing a workaround.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-15 15:06:37 +00:00
parent e52ca26cef
commit 60adc4ce1f
8 changed files with 268 additions and 391 deletions

View File

@@ -16,35 +16,6 @@ export const hasCorsIssue = (error: any): boolean => {
);
};
/**
* Supabase 연결 상태 확인
*/
export const checkSupabaseConnection = async (): Promise<boolean> => {
try {
const { data, error } = await supabase.auth.getSession();
// 오류가 없으면 연결 성공
if (!error) {
return true;
}
// 오류 메시지 확인
if (error.message && (
error.message.includes('Failed to fetch') ||
error.message.includes('Network') ||
error.message.includes('CORS')
)) {
return false;
}
// 다른 오류는 연결은 됐지만 세션/인증 관련 오류이므로 연결은 성공
return true;
} catch (err) {
console.error('Supabase 연결 확인 중 오류:', err);
return false;
}
};
/**
* 서버 연결 상태 검사
*/
@@ -59,15 +30,22 @@ export const verifyServerConnection = async (): Promise<{
// Supabase URL 가져오기
const supabaseUrl = supabase.auth.url;
if (!supabaseUrl) {
return {
connected: false,
message: 'Supabase URL이 설정되지 않았습니다. 설정 페이지에서 구성하세요.'
};
}
// 단순 헬스 체크 요청
try {
const response = await fetch(`${supabaseUrl}/`, {
const response = await fetch(`${supabaseUrl}/auth/v1/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
'Content-Type': 'application/json',
'apikey': localStorage.getItem('supabase_key') || ''
},
// 연결 확인만을 위한 요청이므로 짧은 타임아웃 설정
signal: AbortSignal.timeout(3000)
signal: AbortSignal.timeout(5000) // 타임아웃 시간 증가
});
const elapsed = Date.now() - start;
@@ -87,28 +65,27 @@ export const verifyServerConnection = async (): Promise<{
};
}
} catch (fetchError: any) {
console.error('기본 연결 확인 실패, 대체 경로 시도:', fetchError);
// 대체 경로로 재시도
console.error('기본 연결 확인 실패, 상태 확인 시도:', fetchError);
try {
const altResponse = await fetch(`${supabaseUrl}/auth/v1/`, {
// 대체 경로로 상태 확인
const altResponse = await fetch(`${supabaseUrl}/`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
signal: AbortSignal.timeout(3000)
signal: AbortSignal.timeout(5000)
});
// 어떤 응답이라도 오면 서버가 살아있다고 간주
const elapsed = Date.now() - start;
return {
connected: true,
message: `서버 연결 성공 (대체 경로, 응답 시간: ${elapsed}ms)`,
message: `서버 연결 성공 (기본 경로, 응답 시간: ${elapsed}ms)`,
statusCode: altResponse.status
};
} catch (altError) {
// 두 가지 경로 모두 실패
console.error('대체 경로 확인도 실패:', altError);
console.error('기본 경로 확인도 실패:', altError);
throw fetchError; // 원래 에러를 던짐
}
}
@@ -140,3 +117,62 @@ export const verifyServerConnection = async (): Promise<{
};
}
};
/**
* 강화된 서버 연결 검사: 다양한 경로로 시도
*/
export const verifySupabaseConnection = async (): Promise<{
connected: boolean;
message: string;
statusCode?: number;
details?: string;
}> => {
const supabaseUrl = localStorage.getItem('supabase_url');
if (!supabaseUrl) {
return {
connected: false,
message: 'Supabase URL이 설정되지 않았습니다'
};
}
// 무작위 쿼리 파라미터를 추가하여 캐시 방지
const cacheParam = `?_nocache=${Date.now()}`;
// 다양한 경로를 순차적으로 시도
const paths = [
'/auth/v1/',
'/',
'/rest/v1/',
'/storage/v1/'
];
for (const path of paths) {
try {
const response = await fetch(`${supabaseUrl}${path}${cacheParam}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
signal: AbortSignal.timeout(5000)
});
// 어떤 응답이든 서버가 살아있다는 신호로 간주
return {
connected: true,
message: `서버 연결 성공 (${path})`,
statusCode: response.status,
details: `${response.status} ${response.statusText}`
};
} catch (error) {
console.warn(`${path} 경로 연결 실패:`, error);
// 계속 다음 경로 시도
}
}
// 모든 경로 시도 실패
return {
connected: false,
message: '모든 Supabase 경로에 대한 연결 시도 실패',
details: '네트워크 연결 또는 서버 주소를 확인하세요'
};
};