@react-native-firebase/app-check 26.4.1 → 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 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
+ ## [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
+
6
12
  ## [26.4.1](https://github.com/invertase/react-native-firebase/compare/v26.4.0...v26.4.1) (2026-10-23)
7
13
 
8
14
  **Note:** Version bump only for package @react-native-firebase/app-check
@@ -105,6 +105,7 @@ dependencies {
105
105
  implementation "com.google.firebase:firebase-appcheck-debug"
106
106
 
107
107
  testImplementation "junit:junit:4.13.2"
108
+ testImplementation "org.mockito:mockito-core:5.14.2"
108
109
  }
109
110
 
110
111
  ReactNative.shared.applyPackageVersion()
@@ -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", "internal-error", e.getMessage());
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
- if (isAppDebuggable()) {
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
- if (BuildConfig.FIREBASE_APP_CHECK_DEBUG_TOKEN != "null") {
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", "internal-error", e.getMessage());
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
- + task.getException().getMessage());
255
+ + tokenErrorMessage(exception));
205
256
  rejectPromiseWithCodeAndMessage(
206
- promise, "token-error", task.getException().getMessage());
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
- + task.getException().getMessage());
286
+ + tokenErrorMessage(exception));
232
287
  rejectPromiseWithCodeAndMessage(
233
- promise, "token-error", task.getException().getMessage());
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
- AppCheckProvider delegateProvider;
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 delegateProvider.getToken();
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
- try {
59
- FirebaseApp app = FirebaseApp.getInstance(appName);
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 = PlayIntegrityAppCheckProviderFactory.getInstance().create(app);
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.HashMap;
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 HashMap<String, ReactNativeFirebaseAppCheckProvider> providers = new HashMap<>();
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
+ }
@@ -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' || Platform.OS === 'macos') {
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; native provider setup continues in
214
- * the background. On native platforms use {@link ReactNativeFirebaseAppCheckProvider} to configure
215
- * Device Check, App Attest, Play Integrity, or debug providers. firebase-js-sdk
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
- void appCheck.initializeAppCheck(options);
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) {
@@ -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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","ignoreList":[]}
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":[]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  // Generated by genversion.
4
- export const version = '26.4.1';
4
+ export const version = '26.4.2';
5
5
  //# sourceMappingURL=version.js.map
@@ -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.1";
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; native provider setup continues in
10
- * the background. On native platforms use {@link ReactNativeFirebaseAppCheckProvider} to configure
11
- * Device Check, App Attest, Play Integrity, or debug providers. firebase-js-sdk
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;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAQzF;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"}
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. This can be either the built-in reCAPTCHA provider
36
- * or a custom provider. For convenience, you can also pass an object with providerOptions
37
- * directly, which will be accepted by the runtime.
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
- * refresh AppCheck token as needed. If undefined, the value will default
43
- * to the value of `app.automaticDataCollectionEnabled`. That property
44
- * defaults to false and can be set in the app config.
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. This can be either the built-in reCAPTCHA provider
77
- * or a custom provider. For more on custom providers, see
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;;;;;OAKG;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;;;GAGG;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,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"}
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. Before `activate` or `initializeAppCheck` is called, the
27
- * native App Check provider is pending and `getToken` / `getLimitedUseToken` fail closed with
28
- * `appCheck/provider-not-ready`.
29
- * On Android if you call this it will install the PlayIntegrity provider in release builds, the Debug provider if debuggable.
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 DebugProviderFactory if the app is debuggable (https://firebase.google.com/docs/app-check/android/debug-provider)
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 undefined, the value will default
40
- * to the value of `app.automaticDataCollectionEnabled`. That property
41
- * defaults to false and can be set in the app config.
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. By default it will take the value of automaticDataCollectionEnabled from Info.plist / AndroidManifest.xml
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 any value set
48
- * during `activate()` or taken by default from automaticDataCollectionEnabled in plist / android manifest
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;;;;;;;;;;;;;;;;;;;OAmBG;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
+ {"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";
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' || Platform.OS === 'macos') {
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; native provider setup continues in
301
- * the background. On native platforms use {@link ReactNativeFirebaseAppCheckProvider} to configure
302
- * Device Check, App Attest, Play Integrity, or debug providers. firebase-js-sdk
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
- void (appCheck as AppCheckInternal).initializeAppCheck(options);
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
 
@@ -55,9 +55,9 @@ export interface AppCheckToken {
55
55
  */
56
56
  export interface AppCheckOptions {
57
57
  /**
58
- * The App Check provider to use. This can be either the built-in reCAPTCHA provider
59
- * or a custom provider. For convenience, you can also pass an object with providerOptions
60
- * directly, which will be accepted by the runtime.
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
- * refresh AppCheck token as needed. If undefined, the value will default
70
- * to the value of `app.automaticDataCollectionEnabled`. That property
71
- * defaults to false and can be set in the app config.
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. This can be either the built-in reCAPTCHA provider
108
- * or a custom provider. For more on custom providers, see
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;
@@ -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. Before `activate` or `initializeAppCheck` is called, the
38
- * native App Check provider is pending and `getToken` / `getLimitedUseToken` fail closed with
39
- * `appCheck/provider-not-ready`.
40
- * On Android if you call this it will install the PlayIntegrity provider in release builds, the Debug provider if debuggable.
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 DebugProviderFactory if the app is debuggable (https://firebase.google.com/docs/app-check/android/debug-provider)
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 undefined, the value will default
51
- * to the value of `app.automaticDataCollectionEnabled`. That property
52
- * defaults to false and can be set in the app config.
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. By default it will take the value of automaticDataCollectionEnabled from Info.plist / AndroidManifest.xml
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 any value set
63
- * during `activate()` or taken by default from automaticDataCollectionEnabled in plist / android manifest
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.1';
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.1",
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.1",
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.1",
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": "a3efad5f425135a5d2e66857ffae84ebaa02a7ba"
104
+ "gitHead": "8d24081586657530e6e0316afcc26989bff0f1d3"
105
105
  }