import * as utils from "./utils"; import { Analytics, getAnalytics, logEvent } from "firebase/analytics"; import { initializeApp, FirebaseApp } from "firebase/app"; import { Auth, User, connectAuthEmulator, getAuth, onAuthStateChanged, signInAnonymously, signOut, } from "firebase/auth"; import { getFirestore, Firestore, connectFirestoreEmulator } from "firebase/firestore"; import { firebaseConfig } from "./config"; export interface InstanceHolder { app: FirebaseApp; analytics?: Analytics; firestore?: Firestore; auth?: Auth; } export let instance: InstanceHolder | null = null; export interface InitializeParameters { firestore?: boolean; auth?: boolean; } // const search = new URLSearchParams(location.search); export let idToken = ""; const fallbackHosts = ["localhost", "0.0.0.0", "127.0.0.1", "192.168.1.15"]; /** * Firebaseを初期化する * @param params Firebaseのうち利用する機能 * @returns Firebaseのインスタンス * idToken取得のタイミングでイベントが欲しいのでfirebase.tsか出張中 * TODO firebase.ts内に戻す */ export function initialize(params: InitializeParameters = {}) { // initParams = params; // Note: analyticsの有効をここでしたいのだが、getAnalyticsを呼べばいいのかよくわからない! if (instance == null) { const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); instance = { app, analytics, }; } const pos = fallbackHosts.indexOf(location.hostname); if (params.firestore && instance.firestore == null) { instance.firestore = getFirestore(instance.app); if (utils.isDebugMode() && pos !== -1) { connectFirestoreEmulator(instance.firestore, fallbackHosts[pos], 8080); } } if (params.auth && instance.auth == null) { instance.auth = getAuth(instance.app); if (utils.isDebugMode() && pos !== -1) { connectAuthEmulator(instance.auth, `http://${fallbackHosts[pos]}:9099`, { disableWarnings: true }); } } return instance; } export { logEvent, signOut, signInAnonymously, onAuthStateChanged, User };