55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { initializeApp, getApps, getApp } from "firebase/app";
|
|
import { getAuth } from "firebase/auth";
|
|
import { getDatabase } from "firebase/database";
|
|
|
|
// As variáveis de ambiente devem ser configuradas no Vercel e no ficheiro .env.local
|
|
const firebaseConfig = {
|
|
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
|
|
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
|
|
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
|
|
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
|
|
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
|
|
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
|
|
databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL || "https://namesa-429c1-default-rtdb.firebaseio.com"
|
|
};
|
|
|
|
// Validate that all required environment variables are present
|
|
const requiredEnvVars = [
|
|
"NEXT_PUBLIC_FIREBASE_API_KEY",
|
|
"NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN",
|
|
"NEXT_PUBLIC_FIREBASE_PROJECT_ID",
|
|
"NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET",
|
|
"NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID",
|
|
"NEXT_PUBLIC_FIREBASE_APP_ID",
|
|
];
|
|
|
|
const missingVars = requiredEnvVars.filter(
|
|
(key) => !process.env[key]
|
|
);
|
|
|
|
if (missingVars.length > 0) {
|
|
console.error(
|
|
"[Firebase] Missing environment variables:",
|
|
missingVars.join(", "),
|
|
"\nPlease ensure all Firebase environment variables are set in .env.local or your hosting platform."
|
|
);
|
|
}
|
|
|
|
// Initialize Firebase only once — prevents duplicate app errors in development (HMR) and SSR
|
|
let app;
|
|
try {
|
|
app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApp();
|
|
} catch (error: any) {
|
|
if (error?.code === "app/duplicate-app") {
|
|
app = getApp();
|
|
} else {
|
|
throw new Error(
|
|
`[Firebase] Failed to initialize: ${error?.message || "Unknown error"}. Check your environment variables.`
|
|
);
|
|
}
|
|
}
|
|
|
|
export const auth = getAuth(app);
|
|
export const db = getDatabase(app);
|
|
export default app;
|