diff --git a/src/definitions.ts b/src/definitions.ts index 72cd73a..f9b3ca4 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -32,3 +32,14 @@ export interface RCReturnDataArray { value: any[]; source: string; } + +export interface FirebaseInitOptions { + apiKey: string; + authDomain: string; + databaseURL: string; + projectId: string; + storageBucket: string; + messagingSenderId: string; + appId: string; + measurementId: string; +} diff --git a/src/web.ts b/src/web.ts index 9a591ac..0f1d8af 100644 --- a/src/web.ts +++ b/src/web.ts @@ -4,6 +4,7 @@ import { RCValueOption, RCReturnData, RCReturnDataArray, + FirebaseInitOptions, } from "./definitions"; declare var window: any; @@ -11,6 +12,8 @@ declare var window: any; export class FirebaseRemoteConfigWeb extends WebPlugin implements FirebaseRemoteConfigPlugin { + readonly options_missing_mssg = "Firebase options are missing"; + public readonly ready: Promise; private readyResolver: Function; private remoteConfigRef: any; @@ -37,19 +40,24 @@ export class FirebaseRemoteConfigWeb this.configure(); } - initializeFirebase(options: any): Promise { + /** + * Configure and Initialize FirebaseApp if not present + * @param options - web app's Firebase configuration + * @returns firebase analytics object reference + * Platform: Web + */ + initializeFirebase(options: FirebaseInitOptions): Promise { return new Promise(async (resolve, reject) => { await this.ready; - if (options && !this.isFirebaseInitialized()) { - const app = window.firebase.initializeApp(options); - this.remoteConfigRef = app.remoteConfig(); - - resolve(); + if (!options) { + reject(this.options_missing_mssg); return; } - reject("Firebase App already initialized."); + const app = this.isFirebaseInitialized() ? window.firebase : window.firebase.initializeApp(options); + this.remoteConfigRef = app.remoteConfig(); + resolve(this.remoteConfigRef); }); }