@react-native-firebase/remote-config 20.1.0 → 20.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +6 -0
- package/lib/index.js +14 -31
- package/lib/version.js +1 -1
- package/lib/web/RNFBConfigModule.android.js +2 -0
- package/lib/web/RNFBConfigModule.ios.js +2 -0
- package/lib/web/RNFBConfigModule.js +116 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,12 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [20.2.0](https://github.com/invertase/react-native-firebase/compare/v20.1.0...v20.2.0) (2024-07-15)
|
7
|
+
|
8
|
+
### Features
|
9
|
+
|
10
|
+
- **Other:** Add Remote Config support ([#7895](https://github.com/invertase/react-native-firebase/issues/7895)) ([a41e556](https://github.com/invertase/react-native-firebase/commit/a41e5568869320fb91afc01403ed402e5312e15c))
|
11
|
+
|
6
12
|
## [20.1.0](https://github.com/invertase/react-native-firebase/compare/v20.0.0...v20.1.0) (2024-06-04)
|
7
13
|
|
8
14
|
**Note:** Version bump only for package @react-native-firebase/remote-config
|
package/lib/index.js
CHANGED
@@ -29,8 +29,9 @@ import {
|
|
29
29
|
FirebaseModule,
|
30
30
|
getFirebaseRoot,
|
31
31
|
} from '@react-native-firebase/app/lib/internal';
|
32
|
+
import { setReactNativeModule } from '@react-native-firebase/app/lib/internal/nativeModule';
|
33
|
+
import fallBackModule from './web/RNFBConfigModule';
|
32
34
|
import version from './version';
|
33
|
-
import { Platform } from 'react-native';
|
34
35
|
|
35
36
|
export {
|
36
37
|
getRemoteConfig,
|
@@ -84,7 +85,6 @@ class FirebaseConfigModule extends FirebaseModule {
|
|
84
85
|
};
|
85
86
|
this._lastFetchTime = -1;
|
86
87
|
this._values = {};
|
87
|
-
this._isWeb = Platform.OS !== 'ios' && Platform.OS !== 'android';
|
88
88
|
this._configUpdateListenerCount = 0;
|
89
89
|
}
|
90
90
|
|
@@ -178,14 +178,10 @@ class FirebaseConfigModule extends FirebaseModule {
|
|
178
178
|
|
179
179
|
setConfigSettings(settings) {
|
180
180
|
const updatedSettings = {};
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
//iOS & Android expect seconds & different property names
|
186
|
-
updatedSettings.fetchTimeout = this._settings.fetchTimeMillis / 1000;
|
187
|
-
updatedSettings.minimumFetchInterval = this._settings.minimumFetchIntervalMillis / 1000;
|
188
|
-
}
|
181
|
+
|
182
|
+
updatedSettings.fetchTimeout = this._settings.fetchTimeMillis / 1000;
|
183
|
+
updatedSettings.minimumFetchInterval = this._settings.minimumFetchIntervalMillis / 1000;
|
184
|
+
|
189
185
|
const apiCalled = arguments[1] == true ? 'settings' : 'setConfigSettings';
|
190
186
|
if (!isObject(settings)) {
|
191
187
|
throw new Error(`firebase.remoteConfig().${apiCalled}(*): settings must set an object.`);
|
@@ -197,11 +193,7 @@ class FirebaseConfigModule extends FirebaseModule {
|
|
197
193
|
`firebase.remoteConfig().${apiCalled}(): 'settings.minimumFetchIntervalMillis' must be a number type in milliseconds.`,
|
198
194
|
);
|
199
195
|
} else {
|
200
|
-
|
201
|
-
updatedSettings.minimumFetchIntervalMillis = settings.minimumFetchIntervalMillis;
|
202
|
-
} else {
|
203
|
-
updatedSettings.minimumFetchInterval = settings.minimumFetchIntervalMillis / 1000;
|
204
|
-
}
|
196
|
+
updatedSettings.minimumFetchInterval = settings.minimumFetchIntervalMillis / 1000;
|
205
197
|
}
|
206
198
|
}
|
207
199
|
|
@@ -211,11 +203,7 @@ class FirebaseConfigModule extends FirebaseModule {
|
|
211
203
|
`firebase.remoteConfig().${apiCalled}(): 'settings.fetchTimeMillis' must be a number type in milliseconds.`,
|
212
204
|
);
|
213
205
|
} else {
|
214
|
-
|
215
|
-
updatedSettings.fetchTimeMillis = settings.fetchTimeMillis;
|
216
|
-
} else {
|
217
|
-
updatedSettings.fetchTimeout = settings.fetchTimeMillis / 1000;
|
218
|
-
}
|
206
|
+
updatedSettings.fetchTimeout = settings.fetchTimeMillis / 1000;
|
219
207
|
}
|
220
208
|
}
|
221
209
|
|
@@ -348,17 +336,10 @@ class FirebaseConfigModule extends FirebaseModule {
|
|
348
336
|
this._lastFetchStatus = constants.lastFetchStatus;
|
349
337
|
}
|
350
338
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
};
|
356
|
-
} else {
|
357
|
-
this._settings = {
|
358
|
-
fetchTimeMillis: constants.fetchTimeout * 1000,
|
359
|
-
minimumFetchIntervalMillis: constants.minimumFetchInterval * 1000,
|
360
|
-
};
|
361
|
-
}
|
339
|
+
this._settings = {
|
340
|
+
fetchTimeMillis: constants.fetchTimeout * 1000,
|
341
|
+
minimumFetchIntervalMillis: constants.minimumFetchInterval * 1000,
|
342
|
+
};
|
362
343
|
|
363
344
|
this._values = Object.freeze(constants.values);
|
364
345
|
}
|
@@ -391,3 +372,5 @@ export default createModuleNamespace({
|
|
391
372
|
// config().X(...);
|
392
373
|
// firebase.remoteConfig().X(...);
|
393
374
|
export const firebase = getFirebaseRoot();
|
375
|
+
|
376
|
+
setReactNativeModule(nativeModuleName, fallBackModule);
|
package/lib/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
// Generated by genversion.
|
2
|
-
module.exports = '20.
|
2
|
+
module.exports = '20.2.0';
|
@@ -0,0 +1,116 @@
|
|
1
|
+
import {
|
2
|
+
getApp,
|
3
|
+
getRemoteConfig,
|
4
|
+
activate,
|
5
|
+
ensureInitialized,
|
6
|
+
fetchAndActivate,
|
7
|
+
fetchConfig,
|
8
|
+
getAll,
|
9
|
+
makeIDBAvailable,
|
10
|
+
} from '@react-native-firebase/app/lib/internal/web/firebaseRemoteConfig';
|
11
|
+
import { guard } from '@react-native-firebase/app/lib/internal/web/utils';
|
12
|
+
|
13
|
+
let configSettingsForInstance = {
|
14
|
+
// [APP_NAME]: RemoteConfigSettings
|
15
|
+
};
|
16
|
+
let defaultConfigForInstance = {
|
17
|
+
// [APP_NAME]: { [key: string]: string | number | boolean }
|
18
|
+
};
|
19
|
+
|
20
|
+
function makeGlobalsAvailable() {
|
21
|
+
navigator.onLine = true;
|
22
|
+
makeIDBAvailable();
|
23
|
+
}
|
24
|
+
|
25
|
+
function getRemoteConfigInstanceForApp(appName, overrides /*: RemoteConfigSettings */) {
|
26
|
+
makeGlobalsAvailable();
|
27
|
+
const configSettings = configSettingsForInstance[appName] ?? {
|
28
|
+
minimumFetchIntervalMillis: 43200000,
|
29
|
+
fetchTimeoutMillis: 60000,
|
30
|
+
};
|
31
|
+
const defaultConfig = defaultConfigForInstance[appName] ?? {};
|
32
|
+
Object.assign(configSettings, overrides);
|
33
|
+
const app = getApp(appName);
|
34
|
+
const instance = getRemoteConfig(app);
|
35
|
+
for (const key in configSettings) {
|
36
|
+
instance.settings[key] = configSettings[key];
|
37
|
+
}
|
38
|
+
instance.defaultConfig = defaultConfig;
|
39
|
+
return instance;
|
40
|
+
}
|
41
|
+
|
42
|
+
async function resultAndConstants(instance, result) {
|
43
|
+
const response = { result };
|
44
|
+
const valuesRaw = getAll(instance);
|
45
|
+
const values = {};
|
46
|
+
for (const key in valuesRaw) {
|
47
|
+
const raw = valuesRaw[key];
|
48
|
+
values[key] = {
|
49
|
+
source: raw.getSource(),
|
50
|
+
value: raw.asString(),
|
51
|
+
};
|
52
|
+
}
|
53
|
+
response.constants = {
|
54
|
+
values,
|
55
|
+
lastFetchTime: instance.fetchTimeMillis === -1 ? 0 : instance.fetchTimeMillis,
|
56
|
+
lastFetchStatus: instance.lastFetchStatus.replace(/-/g, '_'),
|
57
|
+
minimumFetchInterval: instance.settings.minimumFetchIntervalMillis
|
58
|
+
? instance.settings.minimumFetchIntervalMillis / 1000
|
59
|
+
: 43200,
|
60
|
+
fetchTimeout: instance.settings.fetchTimeoutMillis
|
61
|
+
? instance.settings.fetchTimeoutMillis / 1000
|
62
|
+
: 60,
|
63
|
+
};
|
64
|
+
return response;
|
65
|
+
}
|
66
|
+
|
67
|
+
export default {
|
68
|
+
activate(appName) {
|
69
|
+
return guard(async () => {
|
70
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName);
|
71
|
+
return resultAndConstants(remoteConfig, await activate(remoteConfig));
|
72
|
+
});
|
73
|
+
},
|
74
|
+
setConfigSettings(appName, settings) {
|
75
|
+
return guard(async () => {
|
76
|
+
configSettingsForInstance[appName] = {
|
77
|
+
minimumFetchIntervalMillis: settings.minimumFetchInterval * 1000,
|
78
|
+
fetchTimeoutMillis: settings.fetchTimeout * 1000,
|
79
|
+
};
|
80
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName, settings);
|
81
|
+
return resultAndConstants(remoteConfig, null);
|
82
|
+
});
|
83
|
+
},
|
84
|
+
fetch(appName, expirationDurationSeconds) {
|
85
|
+
return guard(async () => {
|
86
|
+
let overrides = {};
|
87
|
+
if (expirationDurationSeconds != -1) {
|
88
|
+
overrides.minimumFetchIntervalMillis = expirationDurationSeconds * 1000;
|
89
|
+
}
|
90
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName, overrides);
|
91
|
+
await fetchConfig(remoteConfig);
|
92
|
+
return resultAndConstants(remoteConfig, null);
|
93
|
+
});
|
94
|
+
},
|
95
|
+
fetchAndActivate(appName) {
|
96
|
+
return guard(async () => {
|
97
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName);
|
98
|
+
const activated = await fetchAndActivate(remoteConfig);
|
99
|
+
return resultAndConstants(remoteConfig, activated);
|
100
|
+
});
|
101
|
+
},
|
102
|
+
ensureInitialized(appName) {
|
103
|
+
return guard(async () => {
|
104
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName);
|
105
|
+
await ensureInitialized(remoteConfig);
|
106
|
+
return resultAndConstants(remoteConfig, null);
|
107
|
+
});
|
108
|
+
},
|
109
|
+
setDefaults(appName, defaults) {
|
110
|
+
return guard(async () => {
|
111
|
+
defaultConfigForInstance[appName] = defaults;
|
112
|
+
const remoteConfig = getRemoteConfigInstanceForApp(appName);
|
113
|
+
return resultAndConstants(remoteConfig, null);
|
114
|
+
});
|
115
|
+
},
|
116
|
+
};
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@react-native-firebase/remote-config",
|
3
|
-
"version": "20.
|
3
|
+
"version": "20.2.0",
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
5
5
|
"description": "React Native Firebase - React Native Firebase provides native integration with Remote Config, allowing you to change the appearance and/or functionality of your app without requiring an app update.",
|
6
6
|
"main": "lib/index.js",
|
@@ -24,11 +24,11 @@
|
|
24
24
|
"remote-config"
|
25
25
|
],
|
26
26
|
"peerDependencies": {
|
27
|
-
"@react-native-firebase/analytics": "20.
|
28
|
-
"@react-native-firebase/app": "20.
|
27
|
+
"@react-native-firebase/analytics": "20.2.0",
|
28
|
+
"@react-native-firebase/app": "20.2.0"
|
29
29
|
},
|
30
30
|
"publishConfig": {
|
31
31
|
"access": "public"
|
32
32
|
},
|
33
|
-
"gitHead": "
|
33
|
+
"gitHead": "82c50138d07e673213cd8dee5ce9a2f9b5656649"
|
34
34
|
}
|