-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirebaseConfig.js
More file actions
82 lines (68 loc) · 1.92 KB
/
firebaseConfig.js
File metadata and controls
82 lines (68 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
* Shared Firebase Configuration
* Ensures consistent Firebase setup across all microservices
*/
const admin = require('firebase-admin');
// Environment detection
const isDevelopment = process.env.NODE_ENV !== 'production';
const isEmulator = process.env.FIRESTORE_EMULATOR_HOST || process.env.FUNCTIONS_EMULATOR || process.env.NODE_ENV === 'development';
let firebaseApp = null;
/**
* Initialize Firebase Admin with proper emulator configuration
*/
function initializeFirebase() {
if (firebaseApp) {
return firebaseApp;
}
// Check if Firebase is already initialized
if (admin.apps.length > 0) {
firebaseApp = admin.apps[0];
return firebaseApp;
}
// Initialize Firebase Admin
const projectId = process.env.FIREBASE_PROJECT_ID;
if (!projectId) {
console.error('❌ FIREBASE_PROJECT_ID environment variable is required');
console.error('💡 Set it in your .env file or environment');
process.exit(1);
}
firebaseApp = admin.initializeApp({
projectId: projectId
});
// Configure Firestore for emulator if in development
if (isDevelopment && isEmulator) {
const db = admin.firestore();
// Set emulator host
if (process.env.FIRESTORE_EMULATOR_HOST) {
db.settings({
host: process.env.FIRESTORE_EMULATOR_HOST,
ssl: false
});
}
console.log('🔧 Firebase configured for emulator mode');
console.log(`📡 Firestore emulator: ${process.env.FIRESTORE_EMULATOR_HOST || 'localhost:8080'}`);
} else {
console.log('🚀 Firebase configured for production mode');
}
return firebaseApp;
}
/**
* Get Firestore instance with proper configuration
*/
function getFirestore() {
const app = initializeFirebase();
return app.firestore();
}
/**
* Get Firebase Admin instance
*/
function getAdmin() {
return initializeFirebase();
}
module.exports = {
initializeFirebase,
getFirestore,
getAdmin,
isDevelopment,
isEmulator
};