import * as admin from 'firebase-admin' import { credential } from 'firebase-admin' import { FirebaseApp, initializeApp } from 'firebase/app' export class Firebender { private firebaseAdminApp: admin.app.App private firebaseClientApp: FirebaseApp get firebaseAdmin(): admin.app.App { return this.firebaseAdminApp || this.buildFirebaseAdmin() } get firebaseClient(): FirebaseApp { return this.firebaseClientApp || this.buildFirebaseClient() } private buildFirebaseAdmin(): admin.app.App { return (this.firebaseAdminApp = admin.apps[0] || admin.initializeApp( { credential: credential.cert({ projectId: globalThis.secret.firebase_service_account.project_id, clientEmail: globalThis.secret.firebase_service_account.client_email, privateKey: globalThis.secret.firebase_service_account.private_key, }), storageBucket: globalThis.secret.firebase_storage_bucket, }, 'firebase-admin', )) } private buildFirebaseClient(): FirebaseApp { return (this.firebaseClientApp = initializeApp( { apiKey: globalThis.secret.firebase_config.api_key, authDomain: globalThis.secret.firebase_config.auth_domain, projectId: globalThis.secret.firebase_config.project_id, appId: globalThis.secret.firebase_config.app_id, measurementId: globalThis.secret.firebase_config.measurement_id, }, 'firebase-client', )) } }