78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import * as admin from 'firebase-admin';
|
|
|
|
// Initialize Firebase Admin SDK
|
|
// During build time on Vercel, env vars might not be available, so we skip initialization
|
|
const projectId = process.env.FIREBASE_PROJECT_ID;
|
|
const clientEmail = process.env.FIREBASE_CLIENT_EMAIL;
|
|
const privateKey = process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, '\n');
|
|
|
|
if (!admin.apps.length) {
|
|
// Only initialize if we have credentials (skip during build)
|
|
if (projectId && clientEmail && privateKey) {
|
|
try {
|
|
console.log('[Firebase Admin] Initializing...');
|
|
console.log('[Firebase Admin] Project ID:', projectId);
|
|
console.log('[Firebase Admin] Client Email:', clientEmail);
|
|
console.log('[Firebase Admin] Private Key length:', privateKey?.length);
|
|
|
|
admin.initializeApp({
|
|
credential: admin.credential.cert({
|
|
projectId,
|
|
clientEmail,
|
|
privateKey,
|
|
}),
|
|
storageBucket: `${projectId}.firebasestorage.app`,
|
|
});
|
|
|
|
console.log('[Firebase Admin] Initialized successfully!');
|
|
} catch (error) {
|
|
console.error('[Firebase Admin] Initialization failed:', error);
|
|
}
|
|
} else {
|
|
console.log('[Firebase Admin] Skipping initialization - credentials not available (likely build time)');
|
|
}
|
|
}
|
|
|
|
// Helper to ensure admin is initialized
|
|
function ensureInitialized() {
|
|
if (!projectId || !clientEmail || !privateKey) {
|
|
throw new Error('Firebase Admin credentials not configured');
|
|
}
|
|
|
|
if (!admin.apps.length) {
|
|
// Try to initialize if not done yet
|
|
admin.initializeApp({
|
|
credential: admin.credential.cert({
|
|
projectId,
|
|
clientEmail,
|
|
privateKey,
|
|
}),
|
|
storageBucket: `${projectId}.firebasestorage.app`,
|
|
});
|
|
}
|
|
}
|
|
|
|
// Export admin services with lazy initialization
|
|
export function getAdminAuth() {
|
|
ensureInitialized();
|
|
return admin.auth();
|
|
}
|
|
|
|
export function getAdminDb() {
|
|
ensureInitialized();
|
|
return admin.firestore();
|
|
}
|
|
|
|
export function getAdminStorage() {
|
|
ensureInitialized();
|
|
return admin.storage();
|
|
}
|
|
|
|
// Legacy exports for backward compatibility (will work at runtime)
|
|
export const adminAuth = admin.apps.length > 0 ? admin.auth() : ({} as any);
|
|
export const adminDb = admin.apps.length > 0 ? admin.firestore() : ({} as any);
|
|
export const adminStorage = admin.apps.length > 0 ? admin.storage() : ({} as any);
|
|
|
|
export default admin;
|
|
|