86 lines
2.7 KiB
JavaScript
86 lines
2.7 KiB
JavaScript
const router = require('express').Router();
|
|
const { createClient } = require('@supabase/supabase-js');
|
|
const { getSupabaseUrl, getSupabaseKey, getSupabaseServiceKey } = require('./get-constants');
|
|
|
|
let supabase = null;
|
|
let initializationPromise = null;
|
|
|
|
async function initSupabaseClient() {
|
|
console.log('🔄 [Supabase Client] Начинаем инициализацию...');
|
|
|
|
try {
|
|
console.log('🔄 [Supabase Client] Получаем конфигурацию...');
|
|
const supabaseUrl = await getSupabaseUrl();
|
|
const supabaseAnonKey = await getSupabaseKey();
|
|
const supabaseServiceRoleKey = await getSupabaseServiceKey();
|
|
|
|
|
|
if (!supabaseUrl || !supabaseServiceRoleKey) {
|
|
throw new Error('Missing required Supabase configuration');
|
|
}
|
|
|
|
supabase = createClient(supabaseUrl, supabaseServiceRoleKey);
|
|
|
|
return supabase;
|
|
|
|
} catch (error) {
|
|
console.error('❌ [Supabase Client] Ошибка инициализации:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
function getSupabaseClient() {
|
|
if (!supabase) {
|
|
throw new Error('Supabase client is not initialized. Call initSupabaseClient first.');
|
|
}
|
|
return supabase;
|
|
}
|
|
|
|
// POST /refresh-supabase-client
|
|
router.post('/refresh-supabase-client', async (req, res) => {
|
|
try {
|
|
await initSupabaseClient();
|
|
res.json({ success: true, message: 'Supabase client refreshed' });
|
|
} catch (error) {
|
|
console.error('❌ [Supabase Client] Ошибка обновления:', error);
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// GET /supabase-client-status
|
|
router.get('/supabase-client-status', (req, res) => {
|
|
console.log('🔍 [Supabase Client] Проверяем статус клиента...');
|
|
|
|
const isInitialized = !!supabase;
|
|
|
|
res.json({
|
|
initialized: isInitialized,
|
|
clientExists: !!supabase,
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
});
|
|
|
|
// Инициализация клиента при старте
|
|
initializationPromise = (async () => {
|
|
try {
|
|
await initSupabaseClient();
|
|
} catch (error) {
|
|
console.error('❌ [Supabase Client] Ошибка инициализации при старте:', error);
|
|
// Планируем повторную попытку через 5 секунд
|
|
setTimeout(async () => {
|
|
try {
|
|
await initSupabaseClient();
|
|
} catch (retryError) {
|
|
console.error('❌ [Supabase Client] Повторная инициализация неудачна:', retryError);
|
|
}
|
|
}, 5000);
|
|
}
|
|
})();
|
|
|
|
module.exports = {
|
|
getSupabaseClient,
|
|
initSupabaseClient,
|
|
supabaseRouter: router,
|
|
// Экспортируем промис инициализации для возможности ожидания
|
|
initializationPromise
|
|
}; |