UNPKG

@nativescript/firebase-remote-config

Version:

NativeScript Firebase - Remote Config

251 lines 7.96 kB
import { firebase, FirebaseApp, FirebaseError, serialize } from '@nativescript/firebase-core'; let defaultRemoteConfig; const fb = firebase(); Object.defineProperty(fb, 'remoteConfig', { value: (app) => { if (!app) { if (!defaultRemoteConfig) { defaultRemoteConfig = new RemoteConfig(); } return defaultRemoteConfig; } return new RemoteConfig(app); }, writable: false, }); export class ConfigValue { static fromNative(value) { if (value instanceof FIRRemoteConfigValue) { const val = new ConfigValue(); val._native = value; return val; } return null; } get native() { return this._native; } get ios() { return this.native; } asBoolean() { return this.native.boolValue; } asNumber() { return this.native.numberValue; } asString() { return this.native.stringValue; } getSource() { switch (this.native.source) { case 1 /* FIRRemoteConfigSource.Default */: return 'default'; case 2 /* FIRRemoteConfigSource.Static */: return 'static'; case 0 /* FIRRemoteConfigSource.Remote */: return 'remote'; } } } export class ConfigSettings { static fromNative(config) { if (config instanceof FIRRemoteConfigSettings) { const val = new ConfigSettings(); val._native = config; return val; } return null; } get native() { return this._native; } get ios() { return this.native; } get fetchTimeMillis() { return this.native.fetchTimeout * 1000; } set fetchTimeMillis(value) { this.native.fetchTimeout = value / 1000; } get minimumFetchIntervalMillis() { return this.native.minimumFetchInterval * 1000; } set minimumFetchIntervalMillis(value) { this.native.minimumFetchInterval = value / 1000; } } export class RemoteConfig { constructor(app) { if (app?.native) { this._native = FIRRemoteConfig.remoteConfigWithApp(app.native); } else { if (defaultRemoteConfig) { return defaultRemoteConfig; } defaultRemoteConfig = this; this._native = FIRRemoteConfig.remoteConfig(); } } get native() { return this._native; } get ios() { return this.native; } get app() { if (!this._app) { // @ts-ignore this._app = FirebaseApp.fromNative(this.native.app); } return this._app; } get fetchTimeMillis() { return this.native.lastFetchTime?.getTime?.(); } get lastFetchStatus() { switch (this.native.lastFetchStatus) { case 2 /* FIRRemoteConfigFetchStatus.Failure */: return 'failure'; case 1 /* FIRRemoteConfigFetchStatus.Success */: return 'success'; case 0 /* FIRRemoteConfigFetchStatus.NoFetchYet */: return 'no_fetch_yet'; case 3 /* FIRRemoteConfigFetchStatus.Throttled */: return 'throttled'; } } get settings() { return ConfigSettings.fromNative(this.native.configSettings); } set settings(value) { this.native.configSettings = value.native; } activate() { return new Promise((resolve, reject) => { this.native.activateWithCompletion((done, error) => { if (error) { const err = FirebaseError.fromNative(error); reject(err); } else { resolve(done); } }); }); } ensureInitialized() { return new Promise((resolve, reject) => { this.native.ensureInitializedWithCompletionHandler((error) => { if (error) { const err = FirebaseError.fromNative(error); reject(err); } else { resolve(); } }); }); } fetch(expirationDurationSeconds) { return new Promise((resolve, reject) => { if (typeof expirationDurationSeconds === 'number') { this.native.fetchWithExpirationDurationCompletionHandler(expirationDurationSeconds, (status, error) => { if (error) { const err = FirebaseError.fromNative(error); reject(err); } else { resolve(); } }); } else { this.native.fetchWithCompletionHandler((error) => { if (error) { const err = FirebaseError.fromNative(error); reject(err); } else { resolve(); } }); } }); } fetchAndActivate() { return new Promise((resolve, reject) => { this.native.fetchAndActivateWithCompletionHandler((status, error) => { if (error) { const err = FirebaseError.fromNative(error); const userInfo = error.userInfo; if (userInfo && userInfo.objectForKey('ActivationFailureReason') !== null && userInfo.objectForKey('ActivationFailureReason')?.indexOf?.('already activate') > -1) { resolve(true); } else { reject(err); } } else { if (status === 0 /* FIRRemoteConfigFetchAndActivateStatus.SuccessFetchedFromRemote */) { resolve(true); } else { resolve(false); } } }); }); } getAll() { const ks = NSMutableSet.new(); ks.addObjectsFromArray(this.native.allKeysFromSource(2 /* FIRRemoteConfigSource.Static */)); ks.addObjectsFromArray(this.native.allKeysFromSource(1 /* FIRRemoteConfigSource.Default */)); ks.addObjectsFromArray(this.native.allKeysFromSource(0 /* FIRRemoteConfigSource.Remote */)); const objects = ks.allObjects; const count = objects.count; const all = {}; for (let i = 0; i < count; i++) { const key = objects.objectAtIndex(i); all[key] = ConfigValue.fromNative(this.native.configValueForKey(key)); } return all; } getBoolean(key) { return this.getValue(key)?.asBoolean?.(); } getNumber(key) { return this.getValue(key)?.asNumber?.(); } getString(key) { return this.getValue(key)?.asString?.(); } getValue(key) { return ConfigValue.fromNative(this.native.configValueForKey(key)); } reset() { return Promise.resolve(); } setDefaults(defaults) { return new Promise((resolve, reject) => { this.native.setDefaults(serialize(defaults)); resolve(); }); } setDefaultsFromResource(resourceName) { return new Promise((resolve, reject) => { if (NSBundle.mainBundle.pathForResourceOfType(resourceName, 'plist')) { this.native.setDefaultsFromPlistFileName(resourceName); resolve(); } else { reject({ message: 'The specified resource name was not found.', }); } }); } } //# sourceMappingURL=index.ios.js.map