@nativescript/firebase-remote-config
Version:
NativeScript Firebase - Remote Config
251 lines • 7.96 kB
JavaScript
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