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 };