tim / firebase.js
Aqso's picture
Create firebase.js
ab6bbce verified
// firebase.js — Firebase Admin SDK Init (HF Spaces compatible)
const admin = require("firebase-admin");
require("dotenv").config();
let db = null;
function initFirebase() {
if (admin.apps.length > 0) return admin.app();
// HF Spaces kadang escape \\n jadi \n — normalize dulu
const rawKey = process.env.FIREBASE_PRIVATE_KEY || "";
const privateKey = rawKey.includes("\\n")
? rawKey.replace(/\\n/g, "\n")
: rawKey;
if (!process.env.FIREBASE_PROJECT_ID) {
console.error("⚠️ FIREBASE_PROJECT_ID tidak ditemukan! Set di HF Spaces Secrets.");
return null;
}
const serviceAccount = {
type: "service_account",
project_id: process.env.FIREBASE_PROJECT_ID,
private_key_id: process.env.FIREBASE_PRIVATE_KEY_ID,
private_key: privateKey,
client_email: process.env.FIREBASE_CLIENT_EMAIL,
client_id: process.env.FIREBASE_CLIENT_ID,
auth_uri: "https://accounts.google.com/o/oauth2/auth",
token_uri: "https://oauth2.googleapis.com/token",
};
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: process.env.FIREBASE_DATABASE_URL,
});
console.log("✅ Firebase initialized — project:", process.env.FIREBASE_PROJECT_ID);
return admin.app();
}
function getDB() {
if (!db) {
initFirebase();
db = admin.firestore();
db.settings({ ignoreUndefinedProperties: true });
}
return db;
}
module.exports = { initFirebase, getDB, admin };