@neurosity/sdk
Version:
Neurosity SDK
65 lines (64 loc) • 2.27 kB
JavaScript
import firebase from "firebase/app";
import "firebase/database";
import "firebase/auth";
import "firebase/functions";
import "firebase/firestore";
import { config } from "./config";
export const SERVER_TIMESTAMP = firebase.database.ServerValue.TIMESTAMP;
export const __firebase = firebase;
/**
* @hidden
*/
export class FirebaseApp {
constructor(options) {
this.app = this.getApp(options.deviceId);
this.standalone = this.app.name === options.deviceId;
if (options.emulator) {
this.connectEmulators(options);
}
}
getApp(deviceId) {
const moduleApps = firebase.apps;
const browserApps = typeof window !== "undefined" &&
"firebase" in window &&
"apps" in window.firebase
? window["firebase"]["apps"]
: [];
const neurosityApp = [...moduleApps, ...browserApps].find((app) => app.name === "[DEFAULT]" &&
app.options.databaseURL === config.databaseURL);
if (neurosityApp) {
return neurosityApp;
}
if (deviceId) {
const neurosityAppName = deviceId;
const neurosityApp = moduleApps.find((app) => app.name === neurosityAppName);
return neurosityApp
? neurosityApp
: firebase.initializeApp(config, neurosityAppName);
}
return firebase.initializeApp(config);
}
connectEmulators(options) {
const { emulatorHost, emulatorAuthPort, emulatorDatabasePort, emulatorFunctionsPort, emulatorFirestorePort, emulatorOptions } = options;
this.app.auth().useEmulator(`http://${emulatorHost}:${emulatorAuthPort}`);
this.app
.database()
.useEmulator(emulatorHost, emulatorDatabasePort, emulatorOptions);
this.app.functions().useEmulator(emulatorHost, emulatorFunctionsPort);
this.app
.firestore()
.useEmulator(emulatorHost, emulatorFirestorePort, emulatorOptions);
}
goOnline() {
this.app.database().goOnline();
}
goOffline() {
this.app.database().goOffline();
}
disconnect() {
if (this.standalone) {
return this.app.delete();
}
return Promise.resolve();
}
}