@react-native-firebase/app-check 26.4.0 → 26.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/android/build.gradle +1 -0
- package/android/src/main/java/io/invertase/firebase/appcheck/NativeRNFBTurboAppCheck.java +67 -12
- package/android/src/main/java/io/invertase/firebase/appcheck/ReactNativeFirebaseAppCheckProvider.java +66 -30
- package/android/src/main/java/io/invertase/firebase/appcheck/ReactNativeFirebaseAppCheckProviderFactory.java +10 -10
- package/android/src/test/java/io/invertase/firebase/appcheck/ReactNativeFirebaseAppCheckProviderTest.java +408 -0
- package/dist/module/index.js +12 -5
- package/dist/module/index.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/lib/index.d.ts +7 -4
- package/dist/typescript/lib/index.d.ts.map +1 -1
- package/dist/typescript/lib/types/appcheck.d.ts +14 -9
- package/dist/typescript/lib/types/appcheck.d.ts.map +1 -1
- package/dist/typescript/lib/types/internal.d.ts +11 -12
- package/dist/typescript/lib/types/internal.d.ts.map +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/lib/index.ts +14 -5
- package/lib/types/appcheck.ts +14 -9
- package/lib/types/internal.ts +11 -12
- package/lib/version.ts +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
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
|
+
## [26.4.2](https://github.com/invertase/react-native-firebase/compare/v26.4.1...v26.4.2) (2026-11-10)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **app-check:** report provider setup failures and align Android provider readiness with iOS ([#9405](https://github.com/invertase/react-native-firebase/issues/9405)) ([0c56276](https://github.com/invertase/react-native-firebase/commit/0c56276075b2af3d452fe817c68e6bc1efcd81e9))
|
|
11
|
+
|
|
12
|
+
## [26.4.1](https://github.com/invertase/react-native-firebase/compare/v26.4.0...v26.4.1) (2026-10-23)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @react-native-firebase/app-check
|
|
15
|
+
|
|
6
16
|
## [26.4.0](https://github.com/invertase/react-native-firebase/compare/v26.3.3...v26.4.0) (2026-09-05)
|
|
7
17
|
|
|
8
18
|
### Bug Fixes
|
package/android/build.gradle
CHANGED
|
@@ -83,6 +83,53 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
83
83
|
return enabled;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
static String activateProviderName(boolean isDebuggable) {
|
|
87
|
+
return isDebuggable ? "debug" : "playIntegrity";
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// build.gradle stringifies an unset FIREBASE_APP_CHECK_DEBUG_TOKEN env var as "null".
|
|
91
|
+
static String buildConfigDebugToken(String buildConfigValue) {
|
|
92
|
+
return "null".equals(buildConfigValue) ? null : buildConfigValue;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static boolean isProviderNotReady(Throwable error) {
|
|
96
|
+
for (Throwable cause = error; cause != null; cause = cause.getCause()) {
|
|
97
|
+
if (cause instanceof ReactNativeFirebaseAppCheckProvider.ProviderNotReadyException) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
static String tokenErrorCode(Throwable error) {
|
|
105
|
+
return isProviderNotReady(error) ? "provider-not-ready" : "token-error";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static String tokenErrorMessage(Throwable error) {
|
|
109
|
+
if (isProviderNotReady(error)) {
|
|
110
|
+
return ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE;
|
|
111
|
+
}
|
|
112
|
+
return error != null ? error.getMessage() : null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
static String setupErrorMessage(Throwable error) {
|
|
116
|
+
String message = error != null ? error.getMessage() : null;
|
|
117
|
+
return message == null || message.isEmpty() ? "internal-error" : message;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
static boolean rejectIfProviderNotReady(
|
|
121
|
+
ReactNativeFirebaseAppCheckProviderFactory factory, String appName, Promise promise) {
|
|
122
|
+
if (factory.isProviderReady(appName)) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
Log.d(LOGTAG, "provider not ready for app " + appName + " (delegateProvider null)");
|
|
126
|
+
rejectPromiseWithCodeAndMessage(
|
|
127
|
+
promise,
|
|
128
|
+
"provider-not-ready",
|
|
129
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
|
|
86
133
|
public NativeRNFBTurboAppCheck(ReactApplicationContext reactContext) {
|
|
87
134
|
super(reactContext);
|
|
88
135
|
this.executorService = new TaskExecutorService("UniversalAppCheckModule");
|
|
@@ -134,7 +181,7 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
134
181
|
.installAppCheckProviderFactory(providerFactory);
|
|
135
182
|
promise.resolve(null);
|
|
136
183
|
} catch (Exception e) {
|
|
137
|
-
rejectPromiseWithCodeAndMessage(promise, "unknown",
|
|
184
|
+
rejectPromiseWithCodeAndMessage(promise, "unknown", setupErrorMessage(e), e.getMessage());
|
|
138
185
|
}
|
|
139
186
|
}
|
|
140
187
|
|
|
@@ -146,27 +193,27 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
146
193
|
FirebaseAppCheck.getInstance(FirebaseApp.getInstance(appName));
|
|
147
194
|
firebaseAppCheck.setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled);
|
|
148
195
|
|
|
149
|
-
|
|
196
|
+
boolean isDebuggable = isAppDebuggable();
|
|
197
|
+
String debugToken = null;
|
|
198
|
+
if (isDebuggable) {
|
|
150
199
|
Log.d(LOGTAG, "app is debuggable, configuring AppCheck for testing mode");
|
|
151
|
-
|
|
200
|
+
debugToken = buildConfigDebugToken(BuildConfig.FIREBASE_APP_CHECK_DEBUG_TOKEN);
|
|
201
|
+
if (debugToken != null) {
|
|
152
202
|
Log.d(LOGTAG, "debug app check token found in BuildConfig. Installing known token.");
|
|
153
|
-
providerFactory.configure(appName, "debug", BuildConfig.FIREBASE_APP_CHECK_DEBUG_TOKEN);
|
|
154
203
|
} else {
|
|
155
204
|
Log.d(
|
|
156
205
|
LOGTAG,
|
|
157
206
|
"no debug app check token found in BuildConfig. Check Log for dynamic test token to"
|
|
158
207
|
+ " configure in console.");
|
|
159
|
-
providerFactory.configure(appName, "debug", null);
|
|
160
208
|
}
|
|
161
|
-
} else {
|
|
162
|
-
providerFactory.configure(appName, "safetyNet", null);
|
|
163
209
|
}
|
|
210
|
+
providerFactory.configure(appName, activateProviderName(isDebuggable), debugToken);
|
|
164
211
|
|
|
165
212
|
FirebaseAppCheck.getInstance(FirebaseApp.getInstance(appName))
|
|
166
213
|
.installAppCheckProviderFactory(providerFactory);
|
|
167
214
|
promise.resolve(null);
|
|
168
215
|
} catch (Exception e) {
|
|
169
|
-
rejectPromiseWithCodeAndMessage(promise, "unknown",
|
|
216
|
+
rejectPromiseWithCodeAndMessage(promise, "unknown", setupErrorMessage(e), e.getMessage());
|
|
170
217
|
}
|
|
171
218
|
}
|
|
172
219
|
|
|
@@ -185,6 +232,9 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
185
232
|
public void getToken(String appName, boolean forceRefresh, Promise promise) {
|
|
186
233
|
Log.d(LOGTAG, "getToken appName/forceRefresh: " + appName + "/" + forceRefresh);
|
|
187
234
|
FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
|
|
235
|
+
if (rejectIfProviderNotReady(providerFactory, appName, promise)) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
188
238
|
Tasks.call(
|
|
189
239
|
getExecutor(),
|
|
190
240
|
() ->
|
|
@@ -198,12 +248,13 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
198
248
|
tokenResultMap.putString("token", task.getResult().getToken());
|
|
199
249
|
promise.resolve(tokenResultMap);
|
|
200
250
|
} else {
|
|
251
|
+
Exception exception = task.getException();
|
|
201
252
|
Log.e(
|
|
202
253
|
LOGTAG,
|
|
203
254
|
"RNFB: Unknown error while fetching AppCheck token "
|
|
204
|
-
+
|
|
255
|
+
+ tokenErrorMessage(exception));
|
|
205
256
|
rejectPromiseWithCodeAndMessage(
|
|
206
|
-
promise,
|
|
257
|
+
promise, tokenErrorCode(exception), tokenErrorMessage(exception));
|
|
207
258
|
}
|
|
208
259
|
});
|
|
209
260
|
}
|
|
@@ -212,6 +263,9 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
212
263
|
public void getLimitedUseToken(String appName, Promise promise) {
|
|
213
264
|
Log.d(LOGTAG, "getLimitedUseToken appName: " + appName);
|
|
214
265
|
FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
|
|
266
|
+
if (rejectIfProviderNotReady(providerFactory, appName, promise)) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
215
269
|
|
|
216
270
|
Tasks.call(
|
|
217
271
|
getExecutor(),
|
|
@@ -225,12 +279,13 @@ public class NativeRNFBTurboAppCheck extends NativeRNFBTurboAppCheckSpec {
|
|
|
225
279
|
tokenResultMap.putString("token", task.getResult().getToken());
|
|
226
280
|
promise.resolve(tokenResultMap);
|
|
227
281
|
} else {
|
|
282
|
+
Exception exception = task.getException();
|
|
228
283
|
Log.e(
|
|
229
284
|
LOGTAG,
|
|
230
285
|
"Unknown error while fetching limited-use AppCheck token "
|
|
231
|
-
+
|
|
286
|
+
+ tokenErrorMessage(exception));
|
|
232
287
|
rejectPromiseWithCodeAndMessage(
|
|
233
|
-
promise,
|
|
288
|
+
promise, tokenErrorCode(exception), tokenErrorMessage(exception));
|
|
234
289
|
}
|
|
235
290
|
});
|
|
236
291
|
}
|
|
@@ -20,6 +20,7 @@ package io.invertase.firebase.appcheck;
|
|
|
20
20
|
import android.util.Log;
|
|
21
21
|
import androidx.annotation.NonNull;
|
|
22
22
|
import com.google.android.gms.tasks.Task;
|
|
23
|
+
import com.google.android.gms.tasks.Tasks;
|
|
23
24
|
import com.google.firebase.FirebaseApp;
|
|
24
25
|
import com.google.firebase.appcheck.AppCheckProvider;
|
|
25
26
|
import com.google.firebase.appcheck.AppCheckToken;
|
|
@@ -36,13 +37,42 @@ import java.util.concurrent.Executors;
|
|
|
36
37
|
public class ReactNativeFirebaseAppCheckProvider implements AppCheckProvider {
|
|
37
38
|
private static final String LOGTAG = "RNFBAppCheck";
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
static final String PROVIDER_NOT_READY_MESSAGE =
|
|
41
|
+
"App Check provider is not ready. Call initializeAppCheck before requesting tokens.";
|
|
42
|
+
|
|
43
|
+
static final class ProviderNotReadyException extends IllegalStateException {
|
|
44
|
+
ProviderNotReadyException() {
|
|
45
|
+
super(PROVIDER_NOT_READY_MESSAGE);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
volatile AppCheckProvider delegateProvider;
|
|
40
50
|
|
|
41
51
|
@NonNull
|
|
42
52
|
@Override
|
|
43
53
|
public Task<AppCheckToken> getToken() {
|
|
54
|
+
AppCheckProvider delegate = delegateProvider;
|
|
55
|
+
if (delegate == null) {
|
|
56
|
+
return providerNotReady("getToken");
|
|
57
|
+
}
|
|
44
58
|
Log.d(LOGTAG, "Provider::getToken - delegating to native provider");
|
|
45
|
-
return
|
|
59
|
+
return delegate.getToken();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@NonNull
|
|
63
|
+
@Override
|
|
64
|
+
public Task<AppCheckToken> getLimitedUseToken() {
|
|
65
|
+
AppCheckProvider delegate = delegateProvider;
|
|
66
|
+
if (delegate == null) {
|
|
67
|
+
return providerNotReady("getLimitedUseToken");
|
|
68
|
+
}
|
|
69
|
+
Log.d(LOGTAG, "Provider::getLimitedUseToken - delegating to native provider");
|
|
70
|
+
return delegate.getLimitedUseToken();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private static Task<AppCheckToken> providerNotReady(String method) {
|
|
74
|
+
Log.d(LOGTAG, "Provider::" + method + " - provider not ready (no delegate configured)");
|
|
75
|
+
return Tasks.forException(new ProviderNotReadyException());
|
|
46
76
|
}
|
|
47
77
|
|
|
48
78
|
public void configure(String appName, String providerName, String debugToken) {
|
|
@@ -55,39 +85,16 @@ public class ReactNativeFirebaseAppCheckProvider implements AppCheckProvider {
|
|
|
55
85
|
+ "/"
|
|
56
86
|
+ (debugToken != null ? "(not shown)" : "null"));
|
|
57
87
|
|
|
58
|
-
|
|
59
|
-
|
|
88
|
+
// Reset first so a failed reconfigure cannot leave the previous delegate serving tokens.
|
|
89
|
+
delegateProvider = null;
|
|
60
90
|
|
|
91
|
+
try {
|
|
61
92
|
if ("debug".equals(providerName)) {
|
|
62
|
-
|
|
63
|
-
// the debug configuration may have a token, or may not
|
|
64
|
-
if (debugToken != null) {
|
|
65
|
-
// To use this token, create debug provider using local secret provider + standard thread
|
|
66
|
-
// pool
|
|
67
|
-
ExecutorService executor = Executors.newCachedThreadPool();
|
|
68
|
-
delegateProvider =
|
|
69
|
-
new DebugAppCheckProvider(
|
|
70
|
-
app,
|
|
71
|
-
new Provider<InternalDebugSecretProvider>() {
|
|
72
|
-
public InternalDebugSecretProvider get() {
|
|
73
|
-
return new InternalDebugSecretProvider() {
|
|
74
|
-
public String getDebugSecret() {
|
|
75
|
-
return debugToken;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
executor,
|
|
81
|
-
executor,
|
|
82
|
-
executor);
|
|
83
|
-
|
|
84
|
-
} else {
|
|
85
|
-
delegateProvider = DebugAppCheckProviderFactory.getInstance().create(app);
|
|
86
|
-
}
|
|
93
|
+
delegateProvider = createDebugProvider(getFirebaseApp(appName), debugToken);
|
|
87
94
|
}
|
|
88
95
|
|
|
89
96
|
if ("playIntegrity".equals(providerName)) {
|
|
90
|
-
delegateProvider =
|
|
97
|
+
delegateProvider = createPlayIntegrityProvider(getFirebaseApp(appName));
|
|
91
98
|
}
|
|
92
99
|
|
|
93
100
|
if (delegateProvider == null) {
|
|
@@ -103,4 +110,33 @@ public class ReactNativeFirebaseAppCheckProvider implements AppCheckProvider {
|
|
|
103
110
|
throw new RuntimeException(e.getMessage());
|
|
104
111
|
}
|
|
105
112
|
}
|
|
113
|
+
|
|
114
|
+
FirebaseApp getFirebaseApp(String appName) {
|
|
115
|
+
return FirebaseApp.getInstance(appName);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
AppCheckProvider createDebugProvider(FirebaseApp app, String debugToken) {
|
|
119
|
+
if (debugToken == null) {
|
|
120
|
+
return DebugAppCheckProviderFactory.getInstance().create(app);
|
|
121
|
+
}
|
|
122
|
+
ExecutorService executor = Executors.newCachedThreadPool();
|
|
123
|
+
return new DebugAppCheckProvider(
|
|
124
|
+
app,
|
|
125
|
+
new Provider<InternalDebugSecretProvider>() {
|
|
126
|
+
public InternalDebugSecretProvider get() {
|
|
127
|
+
return new InternalDebugSecretProvider() {
|
|
128
|
+
public String getDebugSecret() {
|
|
129
|
+
return debugToken;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
executor,
|
|
135
|
+
executor,
|
|
136
|
+
executor);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
AppCheckProvider createPlayIntegrityProvider(FirebaseApp app) {
|
|
140
|
+
return PlayIntegrityAppCheckProviderFactory.getInstance().create(app);
|
|
141
|
+
}
|
|
106
142
|
}
|
|
@@ -22,13 +22,14 @@ import androidx.annotation.NonNull;
|
|
|
22
22
|
import com.google.firebase.FirebaseApp;
|
|
23
23
|
import com.google.firebase.appcheck.AppCheckProvider;
|
|
24
24
|
import com.google.firebase.appcheck.AppCheckProviderFactory;
|
|
25
|
-
import java.util.
|
|
25
|
+
import java.util.Map;
|
|
26
|
+
import java.util.concurrent.ConcurrentHashMap;
|
|
26
27
|
|
|
27
28
|
public class ReactNativeFirebaseAppCheckProviderFactory implements AppCheckProviderFactory {
|
|
28
29
|
private static final String LOGTAG = "RNFBAppCheck";
|
|
29
30
|
|
|
30
31
|
// This object has one job - create + maintain control over one provider per app
|
|
31
|
-
public
|
|
32
|
+
public Map<String, ReactNativeFirebaseAppCheckProvider> providers = new ConcurrentHashMap<>();
|
|
32
33
|
|
|
33
34
|
// Our provider will serve as a facade to all the supported native providers,
|
|
34
35
|
// we will just pass through configuration calls to it
|
|
@@ -41,17 +42,16 @@ public class ReactNativeFirebaseAppCheckProviderFactory implements AppCheckProvi
|
|
|
41
42
|
+ providerName
|
|
42
43
|
+ (debugToken != null ? "/(not shown)" : "/null"));
|
|
43
44
|
|
|
44
|
-
ReactNativeFirebaseAppCheckProvider provider
|
|
45
|
-
|
|
46
|
-
// Look up the correct provider for the given appName, create it if not created
|
|
47
|
-
provider = providers.get(appName);
|
|
48
|
-
if (provider == null) {
|
|
49
|
-
provider = new ReactNativeFirebaseAppCheckProvider();
|
|
50
|
-
providers.put(appName, provider);
|
|
51
|
-
}
|
|
45
|
+
ReactNativeFirebaseAppCheckProvider provider =
|
|
46
|
+
providers.computeIfAbsent(appName, k -> new ReactNativeFirebaseAppCheckProvider());
|
|
52
47
|
provider.configure(appName, providerName, debugToken);
|
|
53
48
|
}
|
|
54
49
|
|
|
50
|
+
boolean isProviderReady(String appName) {
|
|
51
|
+
ReactNativeFirebaseAppCheckProvider provider = providers.get(appName);
|
|
52
|
+
return provider != null && provider.delegateProvider != null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
55
|
@NonNull
|
|
56
56
|
public AppCheckProvider create(FirebaseApp firebaseApp) {
|
|
57
57
|
String appName = firebaseApp.getName();
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
package io.invertase.firebase.appcheck;
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this library except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import static org.junit.Assert.assertEquals;
|
|
21
|
+
import static org.junit.Assert.assertFalse;
|
|
22
|
+
import static org.junit.Assert.assertNull;
|
|
23
|
+
import static org.junit.Assert.assertSame;
|
|
24
|
+
import static org.junit.Assert.assertThrows;
|
|
25
|
+
import static org.junit.Assert.assertTrue;
|
|
26
|
+
import static org.mockito.Mockito.mock;
|
|
27
|
+
import static org.mockito.Mockito.mockStatic;
|
|
28
|
+
import static org.mockito.Mockito.times;
|
|
29
|
+
import static org.mockito.Mockito.verify;
|
|
30
|
+
import static org.mockito.Mockito.verifyNoInteractions;
|
|
31
|
+
import static org.mockito.Mockito.when;
|
|
32
|
+
|
|
33
|
+
import android.util.Log;
|
|
34
|
+
import com.facebook.react.bridge.Arguments;
|
|
35
|
+
import com.facebook.react.bridge.Promise;
|
|
36
|
+
import com.facebook.react.bridge.WritableMap;
|
|
37
|
+
import com.google.android.gms.tasks.Task;
|
|
38
|
+
import com.google.android.gms.tasks.Tasks;
|
|
39
|
+
import com.google.firebase.FirebaseApp;
|
|
40
|
+
import com.google.firebase.appcheck.AppCheckProvider;
|
|
41
|
+
import com.google.firebase.appcheck.AppCheckToken;
|
|
42
|
+
import java.util.concurrent.ExecutionException;
|
|
43
|
+
import org.junit.After;
|
|
44
|
+
import org.junit.Before;
|
|
45
|
+
import org.junit.Test;
|
|
46
|
+
import org.mockito.MockedStatic;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* JVM coverage for {@link ReactNativeFirebaseAppCheckProvider} configure / token requests. Firebase
|
|
50
|
+
* lookups and native delegate construction are replaced through the package-private seams.
|
|
51
|
+
*/
|
|
52
|
+
public class ReactNativeFirebaseAppCheckProviderTest {
|
|
53
|
+
|
|
54
|
+
private static final class FakeDelegate implements AppCheckProvider {
|
|
55
|
+
final Task<AppCheckToken> task = Tasks.forException(new Exception("fake-delegate"));
|
|
56
|
+
final Task<AppCheckToken> limitedUseTask =
|
|
57
|
+
Tasks.forException(new Exception("fake-delegate-limited-use"));
|
|
58
|
+
int getTokenCount;
|
|
59
|
+
int getLimitedUseTokenCount;
|
|
60
|
+
|
|
61
|
+
@Override
|
|
62
|
+
public Task<AppCheckToken> getToken() {
|
|
63
|
+
getTokenCount++;
|
|
64
|
+
return task;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Override
|
|
68
|
+
public Task<AppCheckToken> getLimitedUseToken() {
|
|
69
|
+
getLimitedUseTokenCount++;
|
|
70
|
+
return limitedUseTask;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private static final class TestProvider extends ReactNativeFirebaseAppCheckProvider {
|
|
75
|
+
final FirebaseApp app = mock(FirebaseApp.class);
|
|
76
|
+
final FakeDelegate debugDelegate = new FakeDelegate();
|
|
77
|
+
final FakeDelegate playIntegrityDelegate = new FakeDelegate();
|
|
78
|
+
String lastAppName;
|
|
79
|
+
FirebaseApp lastDebugApp;
|
|
80
|
+
String lastDebugToken;
|
|
81
|
+
FirebaseApp lastPlayIntegrityApp;
|
|
82
|
+
RuntimeException getFirebaseAppFailure;
|
|
83
|
+
|
|
84
|
+
@Override
|
|
85
|
+
FirebaseApp getFirebaseApp(String appName) {
|
|
86
|
+
lastAppName = appName;
|
|
87
|
+
if (getFirebaseAppFailure != null) {
|
|
88
|
+
throw getFirebaseAppFailure;
|
|
89
|
+
}
|
|
90
|
+
return app;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@Override
|
|
94
|
+
AppCheckProvider createDebugProvider(FirebaseApp app, String debugToken) {
|
|
95
|
+
lastDebugApp = app;
|
|
96
|
+
lastDebugToken = debugToken;
|
|
97
|
+
return debugDelegate;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@Override
|
|
101
|
+
AppCheckProvider createPlayIntegrityProvider(FirebaseApp app) {
|
|
102
|
+
lastPlayIntegrityApp = app;
|
|
103
|
+
return playIntegrityDelegate;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private MockedStatic<Log> log;
|
|
108
|
+
|
|
109
|
+
@Before
|
|
110
|
+
public void setUp() {
|
|
111
|
+
log = mockStatic(Log.class);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@After
|
|
115
|
+
public void tearDown() {
|
|
116
|
+
log.close();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@Test
|
|
120
|
+
public void getToken_withoutConfigure_failsClosedInsteadOfThrowing() {
|
|
121
|
+
Task<AppCheckToken> task = new ReactNativeFirebaseAppCheckProvider().getToken();
|
|
122
|
+
|
|
123
|
+
assertTrue(task.isComplete());
|
|
124
|
+
assertFalse(task.isSuccessful());
|
|
125
|
+
assertTrue(task.getException() instanceof IllegalStateException);
|
|
126
|
+
assertEquals(
|
|
127
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
128
|
+
task.getException().getMessage());
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@Test
|
|
132
|
+
public void getLimitedUseToken_withoutConfigure_failsClosedInsteadOfThrowing() {
|
|
133
|
+
Task<AppCheckToken> task = new ReactNativeFirebaseAppCheckProvider().getLimitedUseToken();
|
|
134
|
+
|
|
135
|
+
assertTrue(task.isComplete());
|
|
136
|
+
assertFalse(task.isSuccessful());
|
|
137
|
+
assertTrue(task.getException() instanceof IllegalStateException);
|
|
138
|
+
assertEquals(
|
|
139
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
140
|
+
task.getException().getMessage());
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@Test
|
|
144
|
+
public void getLimitedUseToken_forwardsToDelegateLimitedUseToken() {
|
|
145
|
+
TestProvider provider = new TestProvider();
|
|
146
|
+
provider.configure("[DEFAULT]", "debug", "token-123");
|
|
147
|
+
|
|
148
|
+
assertSame(provider.debugDelegate.limitedUseTask, provider.getLimitedUseToken());
|
|
149
|
+
assertEquals(1, provider.debugDelegate.getLimitedUseTokenCount);
|
|
150
|
+
assertEquals(0, provider.debugDelegate.getTokenCount);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@Test
|
|
154
|
+
public void configure_debug_setsDelegateAndGetTokenDelegates() {
|
|
155
|
+
TestProvider provider = new TestProvider();
|
|
156
|
+
|
|
157
|
+
provider.configure("[DEFAULT]", "debug", "token-123");
|
|
158
|
+
|
|
159
|
+
assertSame(provider.debugDelegate, provider.delegateProvider);
|
|
160
|
+
assertEquals("[DEFAULT]", provider.lastAppName);
|
|
161
|
+
assertSame(provider.app, provider.lastDebugApp);
|
|
162
|
+
assertEquals("token-123", provider.lastDebugToken);
|
|
163
|
+
assertSame(provider.debugDelegate.task, provider.getToken());
|
|
164
|
+
assertEquals(1, provider.debugDelegate.getTokenCount);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@Test
|
|
168
|
+
public void configure_debugWithoutToken_passesNullToken() {
|
|
169
|
+
TestProvider provider = new TestProvider();
|
|
170
|
+
|
|
171
|
+
provider.configure("[DEFAULT]", "debug", null);
|
|
172
|
+
|
|
173
|
+
assertSame(provider.debugDelegate, provider.delegateProvider);
|
|
174
|
+
assertNull(provider.lastDebugToken);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@Test
|
|
178
|
+
public void configure_playIntegrity_setsDelegate() {
|
|
179
|
+
TestProvider provider = new TestProvider();
|
|
180
|
+
|
|
181
|
+
provider.configure("secondary", "playIntegrity", null);
|
|
182
|
+
|
|
183
|
+
assertSame(provider.playIntegrityDelegate, provider.delegateProvider);
|
|
184
|
+
assertEquals("secondary", provider.lastAppName);
|
|
185
|
+
assertSame(provider.app, provider.lastPlayIntegrityApp);
|
|
186
|
+
assertSame(provider.playIntegrityDelegate.task, provider.getToken());
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@Test
|
|
190
|
+
public void configure_unknownName_throwsWithValidProviderList() {
|
|
191
|
+
TestProvider provider = new TestProvider();
|
|
192
|
+
|
|
193
|
+
RuntimeException e =
|
|
194
|
+
assertThrows(
|
|
195
|
+
RuntimeException.class, () -> provider.configure("[DEFAULT]", "safetyNet", null));
|
|
196
|
+
assertEquals(
|
|
197
|
+
"Unknown provider name \"safetyNet\". Valid providers are: debug, playIntegrity.",
|
|
198
|
+
e.getMessage());
|
|
199
|
+
assertNull(provider.delegateProvider);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@Test
|
|
203
|
+
public void reconfigure_validThenInvalid_throwsAndClearsStaleDelegate() {
|
|
204
|
+
TestProvider provider = new TestProvider();
|
|
205
|
+
provider.configure("[DEFAULT]", "debug", "token-123");
|
|
206
|
+
|
|
207
|
+
RuntimeException e =
|
|
208
|
+
assertThrows(
|
|
209
|
+
RuntimeException.class, () -> provider.configure("[DEFAULT]", "safetyNet", null));
|
|
210
|
+
assertTrue(e.getMessage().contains("Unknown provider name \"safetyNet\""));
|
|
211
|
+
|
|
212
|
+
assertNull(provider.delegateProvider);
|
|
213
|
+
Task<AppCheckToken> task = provider.getToken();
|
|
214
|
+
assertFalse(task.isSuccessful());
|
|
215
|
+
assertEquals(
|
|
216
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
217
|
+
task.getException().getMessage());
|
|
218
|
+
assertEquals(0, provider.debugDelegate.getTokenCount);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@Test
|
|
222
|
+
public void reconfigure_firebaseAppLookupFails_throwsAndClearsStaleDelegate() {
|
|
223
|
+
TestProvider provider = new TestProvider();
|
|
224
|
+
provider.configure("[DEFAULT]", "debug", "token-123");
|
|
225
|
+
provider.getFirebaseAppFailure = new IllegalStateException("x");
|
|
226
|
+
|
|
227
|
+
RuntimeException e =
|
|
228
|
+
assertThrows(
|
|
229
|
+
RuntimeException.class, () -> provider.configure("[DEFAULT]", "debug", "token-123"));
|
|
230
|
+
assertEquals("x", e.getMessage());
|
|
231
|
+
|
|
232
|
+
assertNull(provider.delegateProvider);
|
|
233
|
+
Task<AppCheckToken> task = provider.getToken();
|
|
234
|
+
assertFalse(task.isSuccessful());
|
|
235
|
+
assertEquals(
|
|
236
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
237
|
+
task.getException().getMessage());
|
|
238
|
+
assertEquals(0, provider.debugDelegate.getTokenCount);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
@Test
|
|
242
|
+
public void reconfigure_switchesDelegate() {
|
|
243
|
+
TestProvider provider = new TestProvider();
|
|
244
|
+
provider.configure("[DEFAULT]", "debug", null);
|
|
245
|
+
|
|
246
|
+
provider.configure("[DEFAULT]", "playIntegrity", null);
|
|
247
|
+
|
|
248
|
+
assertSame(provider.playIntegrityDelegate, provider.delegateProvider);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
@Test
|
|
252
|
+
public void activateProviderName_releaseUsesPlayIntegrityDebuggableUsesDebug() {
|
|
253
|
+
assertEquals("playIntegrity", NativeRNFBTurboAppCheck.activateProviderName(false));
|
|
254
|
+
assertEquals("debug", NativeRNFBTurboAppCheck.activateProviderName(true));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
@Test
|
|
258
|
+
public void activateProviderName_releaseNameIsAcceptedByProvider() {
|
|
259
|
+
TestProvider provider = new TestProvider();
|
|
260
|
+
|
|
261
|
+
provider.configure("[DEFAULT]", NativeRNFBTurboAppCheck.activateProviderName(false), null);
|
|
262
|
+
|
|
263
|
+
assertSame(provider.playIntegrityDelegate, provider.delegateProvider);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@Test
|
|
267
|
+
public void buildConfigDebugToken_unsetSentinelComparedByValue() {
|
|
268
|
+
assertNull(NativeRNFBTurboAppCheck.buildConfigDebugToken(new String("null")));
|
|
269
|
+
assertNull(NativeRNFBTurboAppCheck.buildConfigDebugToken("null"));
|
|
270
|
+
assertEquals("abc-123", NativeRNFBTurboAppCheck.buildConfigDebugToken("abc-123"));
|
|
271
|
+
assertNull(NativeRNFBTurboAppCheck.buildConfigDebugToken(null));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
@Test
|
|
275
|
+
public void setupErrorMessage_usesExceptionMessageOrInternalErrorFallback() {
|
|
276
|
+
assertEquals(
|
|
277
|
+
"bad provider", NativeRNFBTurboAppCheck.setupErrorMessage(new Exception("bad provider")));
|
|
278
|
+
assertEquals("internal-error", NativeRNFBTurboAppCheck.setupErrorMessage(new Exception()));
|
|
279
|
+
assertEquals("internal-error", NativeRNFBTurboAppCheck.setupErrorMessage(new Exception("")));
|
|
280
|
+
assertEquals("internal-error", NativeRNFBTurboAppCheck.setupErrorMessage(null));
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
@Test
|
|
284
|
+
public void tokenErrorCode_providerNotReadyWrappedByTasksAwait_isProviderNotReady() {
|
|
285
|
+
Exception notReady = new ReactNativeFirebaseAppCheckProvider().getToken().getException();
|
|
286
|
+
Exception wrapped = new ExecutionException(notReady);
|
|
287
|
+
|
|
288
|
+
assertEquals("provider-not-ready", NativeRNFBTurboAppCheck.tokenErrorCode(wrapped));
|
|
289
|
+
assertEquals(
|
|
290
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
291
|
+
NativeRNFBTurboAppCheck.tokenErrorMessage(wrapped));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@Test
|
|
295
|
+
public void tokenErrorCode_limitedUseProviderNotReady_isProviderNotReady() {
|
|
296
|
+
Exception notReady =
|
|
297
|
+
new ReactNativeFirebaseAppCheckProvider().getLimitedUseToken().getException();
|
|
298
|
+
|
|
299
|
+
assertEquals("provider-not-ready", NativeRNFBTurboAppCheck.tokenErrorCode(notReady));
|
|
300
|
+
assertEquals(
|
|
301
|
+
"provider-not-ready",
|
|
302
|
+
NativeRNFBTurboAppCheck.tokenErrorCode(new ExecutionException(notReady)));
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
@Test
|
|
306
|
+
public void tokenErrorCode_otherFailures_isTokenError() {
|
|
307
|
+
Exception delegateFailure = new ExecutionException(new Exception("fake-delegate"));
|
|
308
|
+
Exception noFactory = new Exception("No AppCheckProvider installed.");
|
|
309
|
+
Exception sameMessage =
|
|
310
|
+
new IllegalStateException(ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE);
|
|
311
|
+
|
|
312
|
+
assertEquals("token-error", NativeRNFBTurboAppCheck.tokenErrorCode(delegateFailure));
|
|
313
|
+
assertEquals("token-error", NativeRNFBTurboAppCheck.tokenErrorCode(noFactory));
|
|
314
|
+
assertEquals("token-error", NativeRNFBTurboAppCheck.tokenErrorCode(sameMessage));
|
|
315
|
+
assertEquals(
|
|
316
|
+
"token-error",
|
|
317
|
+
NativeRNFBTurboAppCheck.tokenErrorCode(new ExecutionException((Throwable) null)));
|
|
318
|
+
assertEquals(
|
|
319
|
+
delegateFailure.getMessage(), NativeRNFBTurboAppCheck.tokenErrorMessage(delegateFailure));
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private static ReactNativeFirebaseAppCheckProviderFactory factoryWith(
|
|
323
|
+
String appName, ReactNativeFirebaseAppCheckProvider provider) {
|
|
324
|
+
ReactNativeFirebaseAppCheckProviderFactory factory =
|
|
325
|
+
new ReactNativeFirebaseAppCheckProviderFactory();
|
|
326
|
+
factory.providers.put(appName, provider);
|
|
327
|
+
return factory;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
@Test
|
|
331
|
+
public void isProviderReady_noProvider_isFalse() {
|
|
332
|
+
assertFalse(new ReactNativeFirebaseAppCheckProviderFactory().isProviderReady("[DEFAULT]"));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
@Test
|
|
336
|
+
public void isProviderReady_providerWithNullDelegate_isFalse() {
|
|
337
|
+
ReactNativeFirebaseAppCheckProviderFactory factory =
|
|
338
|
+
factoryWith("[DEFAULT]", new ReactNativeFirebaseAppCheckProvider());
|
|
339
|
+
|
|
340
|
+
assertFalse(factory.isProviderReady("[DEFAULT]"));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
@Test
|
|
344
|
+
public void isProviderReady_configuredProvider_isTrueOnlyForThatApp() {
|
|
345
|
+
TestProvider provider = new TestProvider();
|
|
346
|
+
provider.configure("[DEFAULT]", "debug", null);
|
|
347
|
+
ReactNativeFirebaseAppCheckProviderFactory factory = factoryWith("[DEFAULT]", provider);
|
|
348
|
+
|
|
349
|
+
assertTrue(factory.isProviderReady("[DEFAULT]"));
|
|
350
|
+
assertFalse(factory.isProviderReady("secondaryFromNative"));
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
@Test
|
|
354
|
+
public void isProviderReady_failedReconfigure_isFalse() {
|
|
355
|
+
TestProvider provider = new TestProvider();
|
|
356
|
+
provider.configure("[DEFAULT]", "debug", null);
|
|
357
|
+
ReactNativeFirebaseAppCheckProviderFactory factory = factoryWith("[DEFAULT]", provider);
|
|
358
|
+
|
|
359
|
+
assertThrows(RuntimeException.class, () -> provider.configure("[DEFAULT]", "safetyNet", null));
|
|
360
|
+
|
|
361
|
+
assertFalse(factory.isProviderReady("[DEFAULT]"));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
@Test
|
|
365
|
+
public void rejectIfProviderNotReady_notReady_rejectsWithProviderNotReady() {
|
|
366
|
+
Promise promise = mock(Promise.class);
|
|
367
|
+
WritableMap map = mock(WritableMap.class);
|
|
368
|
+
try (MockedStatic<Arguments> arguments = mockStatic(Arguments.class)) {
|
|
369
|
+
when(Arguments.createMap()).thenReturn(map);
|
|
370
|
+
|
|
371
|
+
assertTrue(
|
|
372
|
+
NativeRNFBTurboAppCheck.rejectIfProviderNotReady(
|
|
373
|
+
new ReactNativeFirebaseAppCheckProviderFactory(), "[DEFAULT]", promise));
|
|
374
|
+
assertTrue(
|
|
375
|
+
NativeRNFBTurboAppCheck.rejectIfProviderNotReady(
|
|
376
|
+
factoryWith("[DEFAULT]", new ReactNativeFirebaseAppCheckProvider()),
|
|
377
|
+
"[DEFAULT]",
|
|
378
|
+
promise));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
verify(promise, times(2))
|
|
382
|
+
.reject(
|
|
383
|
+
"provider-not-ready",
|
|
384
|
+
ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE,
|
|
385
|
+
map);
|
|
386
|
+
verify(map, times(2)).putString("code", "provider-not-ready");
|
|
387
|
+
verify(map, times(2))
|
|
388
|
+
.putString("message", ReactNativeFirebaseAppCheckProvider.PROVIDER_NOT_READY_MESSAGE);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
@Test
|
|
392
|
+
public void rejectIfProviderNotReady_ready_doesNotTouchPromise() {
|
|
393
|
+
TestProvider provider = new TestProvider();
|
|
394
|
+
provider.configure("[DEFAULT]", "debug", null);
|
|
395
|
+
Promise promise = mock(Promise.class);
|
|
396
|
+
|
|
397
|
+
assertFalse(
|
|
398
|
+
NativeRNFBTurboAppCheck.rejectIfProviderNotReady(
|
|
399
|
+
factoryWith("[DEFAULT]", provider), "[DEFAULT]", promise));
|
|
400
|
+
verifyNoInteractions(promise);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
@Test
|
|
404
|
+
public void tokenErrorCodeAndMessage_nullException_doNotThrow() {
|
|
405
|
+
assertEquals("token-error", NativeRNFBTurboAppCheck.tokenErrorCode(null));
|
|
406
|
+
assertNull(NativeRNFBTurboAppCheck.tokenErrorMessage(null));
|
|
407
|
+
}
|
|
408
|
+
}
|
package/dist/module/index.js
CHANGED
|
@@ -114,7 +114,7 @@ class FirebaseAppCheckModule extends FirebaseModule {
|
|
|
114
114
|
throw new Error('Invalid configuration: no android provider configured while on android platform.');
|
|
115
115
|
}
|
|
116
116
|
configurePromise = this.native.configureProvider(provider.providerOptions.android.provider, provider.providerOptions.android.debugToken);
|
|
117
|
-
} else if (Platform.OS === 'ios'
|
|
117
|
+
} else if (Platform.OS === 'ios') {
|
|
118
118
|
if (!isString(provider.providerOptions?.apple?.provider)) {
|
|
119
119
|
throw new Error('Invalid configuration: no apple provider configured while on apple platform.');
|
|
120
120
|
}
|
|
@@ -210,9 +210,12 @@ function getModularAppCheck(app) {
|
|
|
210
210
|
/**
|
|
211
211
|
* Initializes App Check for the given Firebase app.
|
|
212
212
|
*
|
|
213
|
-
* @remarks Returns synchronously for firebase-js-sdk parity;
|
|
214
|
-
*
|
|
215
|
-
*
|
|
213
|
+
* @remarks Returns synchronously for firebase-js-sdk parity; provider setup continues in the
|
|
214
|
+
* background (native SDK, or firebase-js-sdk web interop on macOS and web), and a failure during
|
|
215
|
+
* that setup is reported with `console.warn` instead of an unhandled promise rejection. Invalid
|
|
216
|
+
* options still throw synchronously. On native platforms use
|
|
217
|
+
* {@link ReactNativeFirebaseAppCheckProvider} to configure Device Check, App Attest, Play
|
|
218
|
+
* Integrity, or debug providers. firebase-js-sdk
|
|
216
219
|
* `ReCaptchaEnterpriseProvider` / `ReCaptchaV3Provider` are **web only** and have no RN equivalent.
|
|
217
220
|
*/
|
|
218
221
|
export function initializeAppCheck(app, options) {
|
|
@@ -221,7 +224,11 @@ export function initializeAppCheck(app, options) {
|
|
|
221
224
|
}
|
|
222
225
|
validateProviderName(options);
|
|
223
226
|
const appCheck = getModularAppCheck(app);
|
|
224
|
-
|
|
227
|
+
appCheck.initializeAppCheck(options).catch(error => {
|
|
228
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
229
|
+
// eslint-disable-next-line no-console
|
|
230
|
+
console.warn(`initializeAppCheck() could not configure the App Check provider for app '${appCheck.app.name}': ${message}`);
|
|
231
|
+
});
|
|
225
232
|
return appCheck;
|
|
226
233
|
}
|
|
227
234
|
export function getToken(appCheckInstance, forceRefresh) {
|
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isBoolean","isIOS","isObject","isString","isUndefined","isOther","parseListenerOrObserver","FirebaseModule","getOrCreateModularInstance","Platform","setReactNativeModule","fallBackModule","version","ReactNativeFirebaseAppCheckProvider","nativeModuleName","VALID_APPLE_PROVIDERS","VALID_ANDROID_PROVIDERS","hasProviderOptions","provider","undefined","providerOptions","validateProviderName","options","OS","name","android","includes","Error","join","apple","FirebaseAppCheckModule","constructor","app","config","customUrlOrRegion","emitter","addListener","eventNameForApp","event","emit","_listenerCount","getIsTokenRefreshEnabledDefault","isTokenAutoRefreshEnabled","newReactNativeFirebaseAppCheckProvider","initializeAppCheck","native","tokenRefresh","firebaseJson","app_check_token_auto_refresh","dataCollection","app_data_collection_default_enabled","configurePromise","configureProvider","debugToken","Promise","resolve","then","setTokenAutoRefreshEnabled","activate","siteKeyOrProvider","rnfbProvider","configure","web","siteKey","getToken","forceRefresh","getLimitedUseToken","onTokenChanged","onNextOrObserver","_onError","_onCompletion","console","warn","nextFn","subscription","addAppCheckListener","remove","removeAppCheckListener","namespace","nativeEvents","hasMultiAppSupport","hasCustomUrlOrRegionSupport","turboModule","SDK_VERSION","CustomProvider","getModularAppCheck","appCheck","appCheckInstance","isAutoRefreshEnabled","onError","onCompletion"],"sourceRoot":"../../lib","sources":["index.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["isBoolean","isIOS","isObject","isString","isUndefined","isOther","parseListenerOrObserver","FirebaseModule","getOrCreateModularInstance","Platform","setReactNativeModule","fallBackModule","version","ReactNativeFirebaseAppCheckProvider","nativeModuleName","VALID_APPLE_PROVIDERS","VALID_ANDROID_PROVIDERS","hasProviderOptions","provider","undefined","providerOptions","validateProviderName","options","OS","name","android","includes","Error","join","apple","FirebaseAppCheckModule","constructor","app","config","customUrlOrRegion","emitter","addListener","eventNameForApp","event","emit","_listenerCount","getIsTokenRefreshEnabledDefault","isTokenAutoRefreshEnabled","newReactNativeFirebaseAppCheckProvider","initializeAppCheck","native","tokenRefresh","firebaseJson","app_check_token_auto_refresh","dataCollection","app_data_collection_default_enabled","configurePromise","configureProvider","debugToken","Promise","resolve","then","setTokenAutoRefreshEnabled","activate","siteKeyOrProvider","rnfbProvider","configure","web","siteKey","getToken","forceRefresh","getLimitedUseToken","onTokenChanged","onNextOrObserver","_onError","_onCompletion","console","warn","nextFn","subscription","addAppCheckListener","remove","removeAppCheckListener","namespace","nativeEvents","hasMultiAppSupport","hasCustomUrlOrRegionSupport","turboModule","SDK_VERSION","CustomProvider","getModularAppCheck","appCheck","catch","error","message","String","appCheckInstance","isAutoRefreshEnabled","onError","onCompletion"],"sourceRoot":"../../lib","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import type { FirebaseApp } from '@react-native-firebase/app';
|
|
2
2
|
import './types/internal';
|
|
3
3
|
import type { AppCheck, AppCheckOptions, AppCheckTokenResult, PartialObserver, Unsubscribe } from './types/appcheck';
|
|
4
|
-
export declare const SDK_VERSION = "26.4.
|
|
4
|
+
export declare const SDK_VERSION = "26.4.2";
|
|
5
5
|
export { CustomProvider, ReactNativeFirebaseAppCheckProvider } from './providers';
|
|
6
6
|
/**
|
|
7
7
|
* Initializes App Check for the given Firebase app.
|
|
8
8
|
*
|
|
9
|
-
* @remarks Returns synchronously for firebase-js-sdk parity;
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* @remarks Returns synchronously for firebase-js-sdk parity; provider setup continues in the
|
|
10
|
+
* background (native SDK, or firebase-js-sdk web interop on macOS and web), and a failure during
|
|
11
|
+
* that setup is reported with `console.warn` instead of an unhandled promise rejection. Invalid
|
|
12
|
+
* options still throw synchronously. On native platforms use
|
|
13
|
+
* {@link ReactNativeFirebaseAppCheckProvider} to configure Device Check, App Attest, Play
|
|
14
|
+
* Integrity, or debug providers. firebase-js-sdk
|
|
12
15
|
* `ReCaptchaEnterpriseProvider` / `ReCaptchaV3Provider` are **web only** and have no RN equivalent.
|
|
13
16
|
*/
|
|
14
17
|
export declare function initializeAppCheck(app?: FirebaseApp, options?: AppCheckOptions): AppCheck;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,OAAO,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAEf,mBAAmB,EACnB,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAoP1B,eAAO,MAAM,WAAW,WAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,mCAAmC,EAAE,MAAM,aAAa,CAAC;AAMlF
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,OAAO,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAEf,mBAAmB,EACnB,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAoP1B,eAAO,MAAM,WAAW,WAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,mCAAmC,EAAE,MAAM,aAAa,CAAC;AAMlF;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAczF;AAED,wBAAgB,QAAQ,CACtB,gBAAgB,EAAE,QAAQ,EAC1B,YAAY,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAE3F;AAED,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,QAAQ,EAC1B,oBAAoB,EAAE,OAAO,GAC5B,IAAI,CAEN;AAED,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,QAAQ,EAC1B,QAAQ,EAAE,eAAe,CAAC,mBAAmB,CAAC,GAC7C,WAAW,CAAC;AAEf,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,QAAQ,EAC1B,MAAM,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,EAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAChC,YAAY,CAAC,EAAE,MAAM,IAAI,GACxB,WAAW,CAAC;AAiBf,mBAAmB,kBAAkB,CAAC"}
|
|
@@ -32,16 +32,17 @@ export interface AppCheckToken {
|
|
|
32
32
|
*/
|
|
33
33
|
export interface AppCheckOptions {
|
|
34
34
|
/**
|
|
35
|
-
* The App Check provider to use.
|
|
36
|
-
* or
|
|
37
|
-
*
|
|
35
|
+
* The App Check provider to use. On Android and iOS, use a configured
|
|
36
|
+
* `ReactNativeFirebaseAppCheckProvider` (or an object with `providerOptions`).
|
|
37
|
+
* On other platforms (macOS, web), use a `CustomProvider`.
|
|
38
38
|
*/
|
|
39
39
|
provider: CustomProvider | ReactNativeFirebaseAppCheckProvider | ReactNativeFirebaseAppCheckProviderConfig;
|
|
40
40
|
/**
|
|
41
|
-
* If true, enables SDK to automatically
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
41
|
+
* If true, enables SDK to automatically refresh AppCheck token as needed.
|
|
42
|
+
* On Android and iOS, if omitted (or not a boolean), it falls back to
|
|
43
|
+
* firebase.json `app_check_token_auto_refresh`, then firebase.json
|
|
44
|
+
* `app_data_collection_default_enabled`, then `true`.
|
|
45
|
+
* On other platforms (macOS, web), this fallback is not applied.
|
|
45
46
|
*/
|
|
46
47
|
isTokenAutoRefreshEnabled?: boolean;
|
|
47
48
|
}
|
|
@@ -73,8 +74,8 @@ export interface AppCheckTokenResult {
|
|
|
73
74
|
*/
|
|
74
75
|
export type AppCheckTokenListener = (token: AppCheckTokenResult) => void;
|
|
75
76
|
/**
|
|
76
|
-
* An App Check provider.
|
|
77
|
-
*
|
|
77
|
+
* An App Check provider. On Android and iOS, use `ReactNativeFirebaseAppCheckProvider`;
|
|
78
|
+
* on other platforms (macOS, web), use `CustomProvider`. For more on custom providers, see
|
|
78
79
|
* https://firebase.google.com/docs/app-check/web-custom-provider
|
|
79
80
|
* @public
|
|
80
81
|
*/
|
|
@@ -96,6 +97,7 @@ export interface ReactNativeFirebaseAppCheckProviderOptions {
|
|
|
96
97
|
}
|
|
97
98
|
/**
|
|
98
99
|
* Options for ReactNativeFirebaseAppCheckProvider on web.
|
|
100
|
+
* @deprecated Not read at runtime. On other platforms (macOS, web), use `CustomProvider`.
|
|
99
101
|
* @public
|
|
100
102
|
*/
|
|
101
103
|
export interface ReactNativeFirebaseAppCheckProviderWebOptions extends ReactNativeFirebaseAppCheckProviderOptions {
|
|
@@ -135,6 +137,9 @@ export interface ReactNativeFirebaseAppCheckProviderAndroidOptions extends React
|
|
|
135
137
|
* @public
|
|
136
138
|
*/
|
|
137
139
|
export type ReactNativeFirebaseAppCheckProviderOptionsMap = {
|
|
140
|
+
/**
|
|
141
|
+
* @deprecated Not read at runtime. On other platforms (macOS, web), use `CustomProvider`.
|
|
142
|
+
*/
|
|
138
143
|
web?: ReactNativeFirebaseAppCheckProviderWebOptions;
|
|
139
144
|
android?: ReactNativeFirebaseAppCheckProviderAndroidOptions;
|
|
140
145
|
apple?: ReactNativeFirebaseAppCheckProviderAppleOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appcheck.d.ts","sourceRoot":"","sources":["../../../../lib/types/appcheck.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AAExF,YAAY,EACV,WAAW,EACX,eAAe,GAChB,MAAM,qDAAqD,CAAC;AAC7D;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,EACJ,cAAc,GACd,mCAAmC,GACnC,yCAAyC,CAAC;IAE9C
|
|
1
|
+
{"version":3,"file":"appcheck.d.ts","sourceRoot":"","sources":["../../../../lib/types/appcheck.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AAExF,YAAY,EACV,WAAW,EACX,eAAe,GAChB,MAAM,qDAAqD,CAAC;AAC7D;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,EACJ,cAAc,GACd,mCAAmC,GACnC,yCAAyC,CAAC;IAE9C;;;;;;OAMG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,0CAA0C;IACzD;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,6CAA8C,SAAQ,0CAA0C;IAC/G;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,qBAAqB,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,+CAAgD,SAAQ,0CAA0C;IACjH;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,kCAAkC,CAAC;CACvF;AAED;;;GAGG;AACH,MAAM,WAAW,iDAAkD,SAAQ,0CAA0C;IACnH;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,6CAA6C,GAAG;IAC1D;;OAEG;IACH,GAAG,CAAC,EAAE,6CAA6C,CAAC;IACpD,OAAO,CAAC,EAAE,iDAAiD,CAAC;IAC5D,KAAK,CAAC,EAAE,+CAA+C,CAAC;IACxD,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,yCAAyC;IACxD,eAAe,EAAE,6CAA6C,CAAC;CAChE"}
|
|
@@ -23,29 +23,28 @@ export type AppCheckInternal = AppCheck & {
|
|
|
23
23
|
/**
|
|
24
24
|
* Activate App Check
|
|
25
25
|
* On iOS calling this activates App Check with the DeviceCheck provider, using the token auto refresh default or
|
|
26
|
-
* the specific value (if configured) in firebase.json.
|
|
27
|
-
*
|
|
28
|
-
* `appCheck/provider-not-ready`.
|
|
29
|
-
* On Android
|
|
26
|
+
* the specific value (if configured) in firebase.json.
|
|
27
|
+
* On Android and iOS, before `activate` or `initializeAppCheck` is called, the native App Check provider is pending
|
|
28
|
+
* and `getToken` / `getLimitedUseToken` fail closed with `appCheck/provider-not-ready`.
|
|
29
|
+
* On Android this configures the PlayIntegrity provider through `initializeAppCheck`, in debug and release builds.
|
|
30
30
|
* On both platforms you may use this method to alter the token refresh setting after startup.
|
|
31
31
|
* On iOS if you want to set a specific AppCheckProviderFactory (for instance to FIRAppCheckDebugProviderFactory or
|
|
32
32
|
* FIRAppAttestProvider) you must manually do that in your AppDelegate.m prior to calling [FIRApp configure]
|
|
33
33
|
*
|
|
34
34
|
* @deprecated use initializeAppCheck to gain access to all platform providers and firebase-js-sdk v9 compatibility
|
|
35
|
-
* @param siteKeyOrProvider - This is ignored, Android uses
|
|
36
|
-
* Android uses PlayIntegrityProviderFactory for release builds.
|
|
35
|
+
* @param siteKeyOrProvider - This is ignored, Android uses the PlayIntegrity provider.
|
|
37
36
|
* iOS uses DeviceCheckProviderFactory by default unless altered in AppDelegate.m manually
|
|
38
37
|
* @param isTokenAutoRefreshEnabled - If true, enables SDK to automatically
|
|
39
|
-
* refresh AppCheck token as needed. If
|
|
40
|
-
*
|
|
41
|
-
*
|
|
38
|
+
* refresh AppCheck token as needed. If not a boolean, it falls back to firebase.json
|
|
39
|
+
* `app_check_token_auto_refresh`, then firebase.json `app_data_collection_default_enabled`,
|
|
40
|
+
* then `true`.
|
|
42
41
|
*/
|
|
43
42
|
activate(siteKeyOrProvider: string | AppCheckProvider, isTokenAutoRefreshEnabled?: boolean): Promise<void>;
|
|
44
43
|
/**
|
|
45
|
-
* Alter the token auto refresh setting.
|
|
44
|
+
* Alter the token auto refresh setting.
|
|
46
45
|
* @param isTokenAutoRefreshEnabled - If true, the SDK automatically
|
|
47
|
-
* refreshes App Check tokens as needed. This overrides
|
|
48
|
-
* during `
|
|
46
|
+
* refreshes App Check tokens as needed. This overrides the value resolved
|
|
47
|
+
* during `initializeAppCheck()` / `activate()`.
|
|
49
48
|
*/
|
|
50
49
|
setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled: boolean): void;
|
|
51
50
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../lib/types/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yCAAyC,EACzC,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AAExE,KAAK,sBAAsB,GAAG,mBAAmB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,qDAAqD;IACrD,GAAG,EAAE,WAAW,CAAC;IAEjB;;OAEG;IACH,sCAAsC,IAAI,mCAAmC,CAAC;IAE9E;;;;;;;OAOG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../../lib/types/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yCAAyC,EACzC,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AAExE,KAAK,sBAAsB,GAAG,mBAAmB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,qDAAqD;IACrD,GAAG,EAAE,WAAW,CAAC;IAEjB;;OAEG;IACH,sCAAsC,IAAI,mCAAmC,CAAC;IAE9E;;;;;;;OAOG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CACN,iBAAiB,EAAE,MAAM,GAAG,gBAAgB,EAC5C,yBAAyB,CAAC,EAAE,OAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,0BAA0B,CAAC,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;IAErE;;;;;;;;OAQG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEnD;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,sBAAsB,CAAC,GAAG,MAAM,IAAI,CAAC;IAE9E;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CACZ,MAAM,EAAE,CAAC,WAAW,EAAE,sBAAsB,KAAK,IAAI,EACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAChC,YAAY,CAAC,EAAE,MAAM,IAAI,GACxB,WAAW,CAAC;IAEf;;OAEG;IACH,cAAc,CACZ,gBAAgB,EACZ,eAAe,CAAC,mBAAmB,CAAC,GACpC,CAAC,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,CAAC,EAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAChC,YAAY,CAAC,EAAE,MAAM,IAAI,GACxB,WAAW,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,mCAAmC,GACnC,yCAAyC,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEnD,mBAAmB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sBAAsB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,OAAO,QAAQ,+DAA+D,CAAC;IAC7E,UAAU,gCAAgC;QACxC,uBAAuB,EAAE,kBAAkB,CAAC;KAC7C;CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "26.4.
|
|
1
|
+
export declare const version = "26.4.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/index.ts
CHANGED
|
@@ -172,7 +172,7 @@ class FirebaseAppCheckModule extends FirebaseModule<typeof nativeModuleName> {
|
|
|
172
172
|
provider.providerOptions.android.provider,
|
|
173
173
|
provider.providerOptions.android.debugToken,
|
|
174
174
|
);
|
|
175
|
-
} else if (Platform.OS === 'ios'
|
|
175
|
+
} else if (Platform.OS === 'ios') {
|
|
176
176
|
if (!isString(provider.providerOptions?.apple?.provider)) {
|
|
177
177
|
throw new Error(
|
|
178
178
|
'Invalid configuration: no apple provider configured while on apple platform.',
|
|
@@ -297,9 +297,12 @@ function getModularAppCheck(app?: FirebaseApp): AppCheck {
|
|
|
297
297
|
/**
|
|
298
298
|
* Initializes App Check for the given Firebase app.
|
|
299
299
|
*
|
|
300
|
-
* @remarks Returns synchronously for firebase-js-sdk parity;
|
|
301
|
-
*
|
|
302
|
-
*
|
|
300
|
+
* @remarks Returns synchronously for firebase-js-sdk parity; provider setup continues in the
|
|
301
|
+
* background (native SDK, or firebase-js-sdk web interop on macOS and web), and a failure during
|
|
302
|
+
* that setup is reported with `console.warn` instead of an unhandled promise rejection. Invalid
|
|
303
|
+
* options still throw synchronously. On native platforms use
|
|
304
|
+
* {@link ReactNativeFirebaseAppCheckProvider} to configure Device Check, App Attest, Play
|
|
305
|
+
* Integrity, or debug providers. firebase-js-sdk
|
|
303
306
|
* `ReCaptchaEnterpriseProvider` / `ReCaptchaV3Provider` are **web only** and have no RN equivalent.
|
|
304
307
|
*/
|
|
305
308
|
export function initializeAppCheck(app?: FirebaseApp, options?: AppCheckOptions): AppCheck {
|
|
@@ -308,7 +311,13 @@ export function initializeAppCheck(app?: FirebaseApp, options?: AppCheckOptions)
|
|
|
308
311
|
}
|
|
309
312
|
validateProviderName(options);
|
|
310
313
|
const appCheck = getModularAppCheck(app);
|
|
311
|
-
|
|
314
|
+
(appCheck as AppCheckInternal).initializeAppCheck(options).catch((error: unknown) => {
|
|
315
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
316
|
+
// eslint-disable-next-line no-console
|
|
317
|
+
console.warn(
|
|
318
|
+
`initializeAppCheck() could not configure the App Check provider for app '${appCheck.app.name}': ${message}`,
|
|
319
|
+
);
|
|
320
|
+
});
|
|
312
321
|
return appCheck;
|
|
313
322
|
}
|
|
314
323
|
|
package/lib/types/appcheck.ts
CHANGED
|
@@ -55,9 +55,9 @@ export interface AppCheckToken {
|
|
|
55
55
|
*/
|
|
56
56
|
export interface AppCheckOptions {
|
|
57
57
|
/**
|
|
58
|
-
* The App Check provider to use.
|
|
59
|
-
* or
|
|
60
|
-
*
|
|
58
|
+
* The App Check provider to use. On Android and iOS, use a configured
|
|
59
|
+
* `ReactNativeFirebaseAppCheckProvider` (or an object with `providerOptions`).
|
|
60
|
+
* On other platforms (macOS, web), use a `CustomProvider`.
|
|
61
61
|
*/
|
|
62
62
|
provider:
|
|
63
63
|
| CustomProvider
|
|
@@ -65,10 +65,11 @@ export interface AppCheckOptions {
|
|
|
65
65
|
| ReactNativeFirebaseAppCheckProviderConfig;
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
|
-
* If true, enables SDK to automatically
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
68
|
+
* If true, enables SDK to automatically refresh AppCheck token as needed.
|
|
69
|
+
* On Android and iOS, if omitted (or not a boolean), it falls back to
|
|
70
|
+
* firebase.json `app_check_token_auto_refresh`, then firebase.json
|
|
71
|
+
* `app_data_collection_default_enabled`, then `true`.
|
|
72
|
+
* On other platforms (macOS, web), this fallback is not applied.
|
|
72
73
|
*/
|
|
73
74
|
isTokenAutoRefreshEnabled?: boolean;
|
|
74
75
|
}
|
|
@@ -104,8 +105,8 @@ export interface AppCheckTokenResult {
|
|
|
104
105
|
export type AppCheckTokenListener = (token: AppCheckTokenResult) => void;
|
|
105
106
|
|
|
106
107
|
/**
|
|
107
|
-
* An App Check provider.
|
|
108
|
-
*
|
|
108
|
+
* An App Check provider. On Android and iOS, use `ReactNativeFirebaseAppCheckProvider`;
|
|
109
|
+
* on other platforms (macOS, web), use `CustomProvider`. For more on custom providers, see
|
|
109
110
|
* https://firebase.google.com/docs/app-check/web-custom-provider
|
|
110
111
|
* @public
|
|
111
112
|
*/
|
|
@@ -129,6 +130,7 @@ export interface ReactNativeFirebaseAppCheckProviderOptions {
|
|
|
129
130
|
|
|
130
131
|
/**
|
|
131
132
|
* Options for ReactNativeFirebaseAppCheckProvider on web.
|
|
133
|
+
* @deprecated Not read at runtime. On other platforms (macOS, web), use `CustomProvider`.
|
|
132
134
|
* @public
|
|
133
135
|
*/
|
|
134
136
|
export interface ReactNativeFirebaseAppCheckProviderWebOptions extends ReactNativeFirebaseAppCheckProviderOptions {
|
|
@@ -172,6 +174,9 @@ export interface ReactNativeFirebaseAppCheckProviderAndroidOptions extends React
|
|
|
172
174
|
* @public
|
|
173
175
|
*/
|
|
174
176
|
export type ReactNativeFirebaseAppCheckProviderOptionsMap = {
|
|
177
|
+
/**
|
|
178
|
+
* @deprecated Not read at runtime. On other platforms (macOS, web), use `CustomProvider`.
|
|
179
|
+
*/
|
|
175
180
|
web?: ReactNativeFirebaseAppCheckProviderWebOptions;
|
|
176
181
|
android?: ReactNativeFirebaseAppCheckProviderAndroidOptions;
|
|
177
182
|
apple?: ReactNativeFirebaseAppCheckProviderAppleOptions;
|
package/lib/types/internal.ts
CHANGED
|
@@ -34,22 +34,21 @@ export type AppCheckInternal = AppCheck & {
|
|
|
34
34
|
/**
|
|
35
35
|
* Activate App Check
|
|
36
36
|
* On iOS calling this activates App Check with the DeviceCheck provider, using the token auto refresh default or
|
|
37
|
-
* the specific value (if configured) in firebase.json.
|
|
38
|
-
*
|
|
39
|
-
* `appCheck/provider-not-ready`.
|
|
40
|
-
* On Android
|
|
37
|
+
* the specific value (if configured) in firebase.json.
|
|
38
|
+
* On Android and iOS, before `activate` or `initializeAppCheck` is called, the native App Check provider is pending
|
|
39
|
+
* and `getToken` / `getLimitedUseToken` fail closed with `appCheck/provider-not-ready`.
|
|
40
|
+
* On Android this configures the PlayIntegrity provider through `initializeAppCheck`, in debug and release builds.
|
|
41
41
|
* On both platforms you may use this method to alter the token refresh setting after startup.
|
|
42
42
|
* On iOS if you want to set a specific AppCheckProviderFactory (for instance to FIRAppCheckDebugProviderFactory or
|
|
43
43
|
* FIRAppAttestProvider) you must manually do that in your AppDelegate.m prior to calling [FIRApp configure]
|
|
44
44
|
*
|
|
45
45
|
* @deprecated use initializeAppCheck to gain access to all platform providers and firebase-js-sdk v9 compatibility
|
|
46
|
-
* @param siteKeyOrProvider - This is ignored, Android uses
|
|
47
|
-
* Android uses PlayIntegrityProviderFactory for release builds.
|
|
46
|
+
* @param siteKeyOrProvider - This is ignored, Android uses the PlayIntegrity provider.
|
|
48
47
|
* iOS uses DeviceCheckProviderFactory by default unless altered in AppDelegate.m manually
|
|
49
48
|
* @param isTokenAutoRefreshEnabled - If true, enables SDK to automatically
|
|
50
|
-
* refresh AppCheck token as needed. If
|
|
51
|
-
*
|
|
52
|
-
*
|
|
49
|
+
* refresh AppCheck token as needed. If not a boolean, it falls back to firebase.json
|
|
50
|
+
* `app_check_token_auto_refresh`, then firebase.json `app_data_collection_default_enabled`,
|
|
51
|
+
* then `true`.
|
|
53
52
|
*/
|
|
54
53
|
activate(
|
|
55
54
|
siteKeyOrProvider: string | AppCheckProvider,
|
|
@@ -57,10 +56,10 @@ export type AppCheckInternal = AppCheck & {
|
|
|
57
56
|
): Promise<void>;
|
|
58
57
|
|
|
59
58
|
/**
|
|
60
|
-
* Alter the token auto refresh setting.
|
|
59
|
+
* Alter the token auto refresh setting.
|
|
61
60
|
* @param isTokenAutoRefreshEnabled - If true, the SDK automatically
|
|
62
|
-
* refreshes App Check tokens as needed. This overrides
|
|
63
|
-
* during `
|
|
61
|
+
* refreshes App Check tokens as needed. This overrides the value resolved
|
|
62
|
+
* during `initializeAppCheck()` / `activate()`.
|
|
64
63
|
*/
|
|
65
64
|
setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled: boolean): void;
|
|
66
65
|
|
package/lib/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '26.4.
|
|
2
|
+
export const version = '26.4.2';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-firebase/app-check",
|
|
3
|
-
"version": "26.4.
|
|
3
|
+
"version": "26.4.2",
|
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
|
5
5
|
"description": "React Native Firebase - App Check",
|
|
6
6
|
"main": "./dist/module/index.js",
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
"appCheck"
|
|
46
46
|
],
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@react-native-firebase/app": "26.4.
|
|
48
|
+
"@react-native-firebase/app": "26.4.2",
|
|
49
49
|
"expo": ">=47.0.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@react-native-firebase/app": "26.4.
|
|
52
|
+
"@react-native-firebase/app": "26.4.2",
|
|
53
53
|
"expo": "^55.0.18",
|
|
54
54
|
"react-native-builder-bob": "^0.41.0",
|
|
55
55
|
"typescript": "^6.0.3"
|
|
@@ -101,5 +101,5 @@
|
|
|
101
101
|
"node_modules/",
|
|
102
102
|
"dist/"
|
|
103
103
|
],
|
|
104
|
-
"gitHead": "
|
|
104
|
+
"gitHead": "8d24081586657530e6e0316afcc26989bff0f1d3"
|
|
105
105
|
}
|