File size: 1,461 Bytes
ab6bbce | 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 | // 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 };
|