@react-native-firebase/auth 25.1.0 → 26.0.0

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.
Files changed (115) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/RNFBAuth.podspec +14 -6
  3. package/android/build.gradle +23 -0
  4. package/android/src/main/java/io/invertase/firebase/auth/{ReactNativeFirebaseAuthModule.java → NativeRNFBTurboAuth.java} +122 -102
  5. package/android/src/main/java/io/invertase/firebase/auth/ReactNativeFirebaseAuthPackage.java +1 -1
  6. package/android/src/main/java/io/invertase/firebase/auth/ReactNativeFirebaseAuthSyncException.java +35 -0
  7. package/android/src/main/java/io/invertase/firebase/auth/generated/java/com/facebook/fbreact/specs/NativeRNFBTurboAuthSpec.java +308 -0
  8. package/android/src/main/java/io/invertase/firebase/auth/generated/jni/CMakeLists.txt +36 -0
  9. package/android/src/main/java/io/invertase/firebase/auth/generated/jni/RNFBAuthTurboModules-generated.cpp +392 -0
  10. package/android/src/main/java/io/invertase/firebase/auth/generated/jni/RNFBAuthTurboModules.h +31 -0
  11. package/android/src/main/java/io/invertase/firebase/auth/generated/jni/react/renderer/components/RNFBAuthTurboModules/RNFBAuthTurboModulesJSI-generated.cpp +538 -0
  12. package/android/src/main/java/io/invertase/firebase/auth/generated/jni/react/renderer/components/RNFBAuthTurboModules/RNFBAuthTurboModulesJSI.h +611 -0
  13. package/app.plugin.js +1 -1
  14. package/dist/module/ConfirmationResult.js.map +1 -1
  15. package/dist/module/MultiFactorResolver.js.map +1 -1
  16. package/dist/module/PhoneAuthListener.js +3 -4
  17. package/dist/module/PhoneAuthListener.js.map +1 -1
  18. package/dist/module/TotpMultiFactorGenerator.js +1 -1
  19. package/dist/module/TotpMultiFactorGenerator.js.map +1 -1
  20. package/dist/module/TotpSecret.js +15 -9
  21. package/dist/module/TotpSecret.js.map +1 -1
  22. package/dist/module/User.js +1 -1
  23. package/dist/module/User.js.map +1 -1
  24. package/dist/module/getMultiFactorResolver.js +2 -2
  25. package/dist/module/getMultiFactorResolver.js.map +1 -1
  26. package/dist/module/index.js +1221 -6
  27. package/dist/module/index.js.map +1 -1
  28. package/dist/module/internal/syncNativeError.js +75 -0
  29. package/dist/module/internal/syncNativeError.js.map +1 -0
  30. package/dist/module/multiFactor.js +5 -3
  31. package/dist/module/multiFactor.js.map +1 -1
  32. package/dist/module/providers/PhoneAuthProvider.js +4 -4
  33. package/dist/module/providers/PhoneAuthProvider.js.map +1 -1
  34. package/dist/module/types/auth.js.map +1 -1
  35. package/dist/module/version.js +1 -1
  36. package/dist/module/web/RNFBAuthModule.js +13 -7
  37. package/dist/module/web/RNFBAuthModule.js.map +1 -1
  38. package/dist/typescript/lib/ConfirmationResult.d.ts +2 -2
  39. package/dist/typescript/lib/ConfirmationResult.d.ts.map +1 -1
  40. package/dist/typescript/lib/MultiFactorResolver.d.ts +6 -6
  41. package/dist/typescript/lib/MultiFactorResolver.d.ts.map +1 -1
  42. package/dist/typescript/lib/PhoneAuthListener.d.ts +1 -4
  43. package/dist/typescript/lib/PhoneAuthListener.d.ts.map +1 -1
  44. package/dist/typescript/lib/TotpSecret.d.ts +2 -4
  45. package/dist/typescript/lib/TotpSecret.d.ts.map +1 -1
  46. package/dist/typescript/lib/User.d.ts +13 -13
  47. package/dist/typescript/lib/User.d.ts.map +1 -1
  48. package/dist/typescript/lib/getMultiFactorResolver.d.ts +5 -5
  49. package/dist/typescript/lib/getMultiFactorResolver.d.ts.map +1 -1
  50. package/dist/typescript/lib/index.d.ts +377 -4
  51. package/dist/typescript/lib/index.d.ts.map +1 -1
  52. package/dist/typescript/lib/internal/syncNativeError.d.ts +6 -0
  53. package/dist/typescript/lib/internal/syncNativeError.d.ts.map +1 -0
  54. package/dist/typescript/lib/multiFactor.d.ts +9 -9
  55. package/dist/typescript/lib/multiFactor.d.ts.map +1 -1
  56. package/dist/typescript/lib/providers/PhoneAuthProvider.d.ts.map +1 -1
  57. package/dist/typescript/lib/types/auth.d.ts +13 -0
  58. package/dist/typescript/lib/types/auth.d.ts.map +1 -1
  59. package/dist/typescript/lib/types/internal.d.ts +44 -47
  60. package/dist/typescript/lib/types/internal.d.ts.map +1 -1
  61. package/dist/typescript/lib/version.d.ts +1 -1
  62. package/dist/typescript/lib/web/RNFBAuthModule.d.ts +4 -4
  63. package/dist/typescript/lib/web/RNFBAuthModule.d.ts.map +1 -1
  64. package/ios/RNFBAuth/RNFBAuthModule.h +2 -2
  65. package/ios/RNFBAuth/{RNFBAuthModule.m → RNFBAuthModule.mm} +408 -297
  66. package/ios/RNFBAuth.xcodeproj/project.pbxproj +8 -8
  67. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  68. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  69. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  70. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  71. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  72. package/ios/generated/RCTThirdPartyComponentsProvider.mm +23 -0
  73. package/ios/generated/RNFBAuthTurboModules/RNFBAuthTurboModules-generated.mm +459 -0
  74. package/ios/generated/RNFBAuthTurboModules/RNFBAuthTurboModules.h +341 -0
  75. package/ios/generated/RNFBAuthTurboModulesJSI-generated.cpp +538 -0
  76. package/ios/generated/RNFBAuthTurboModulesJSI.h +611 -0
  77. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  78. package/lib/ConfirmationResult.ts +3 -6
  79. package/lib/MultiFactorResolver.ts +8 -8
  80. package/lib/PhoneAuthListener.ts +6 -10
  81. package/lib/TotpMultiFactorGenerator.ts +1 -1
  82. package/lib/TotpSecret.ts +22 -9
  83. package/lib/User.ts +27 -38
  84. package/lib/getMultiFactorResolver.ts +9 -11
  85. package/lib/index.ts +1836 -6
  86. package/lib/internal/syncNativeError.ts +89 -0
  87. package/lib/multiFactor.ts +25 -16
  88. package/lib/providers/PhoneAuthProvider.ts +9 -22
  89. package/lib/types/auth.ts +15 -0
  90. package/lib/types/internal.ts +54 -63
  91. package/lib/version.ts +1 -1
  92. package/lib/web/RNFBAuthModule.ts +13 -10
  93. package/package.json +30 -5
  94. package/plugin/build/app.plugin.d.ts +2 -0
  95. package/plugin/build/app.plugin.js +6 -0
  96. package/plugin/src/app.plugin.ts +3 -0
  97. package/plugin/tsconfig.tsbuildinfo +1 -1
  98. package/react-native.config.js +9 -0
  99. package/specs/NativeRNFBTurboAuth.ts +143 -0
  100. package/typedoc.json +0 -1
  101. package/dist/module/modular.js +0 -793
  102. package/dist/module/modular.js.map +0 -1
  103. package/dist/module/namespaced.js +0 -522
  104. package/dist/module/namespaced.js.map +0 -1
  105. package/dist/module/types/namespaced.js +0 -62
  106. package/dist/module/types/namespaced.js.map +0 -1
  107. package/dist/typescript/lib/modular.d.ts +0 -370
  108. package/dist/typescript/lib/modular.d.ts.map +0 -1
  109. package/dist/typescript/lib/namespaced.d.ts +0 -12
  110. package/dist/typescript/lib/namespaced.d.ts.map +0 -1
  111. package/dist/typescript/lib/types/namespaced.d.ts +0 -2185
  112. package/dist/typescript/lib/types/namespaced.d.ts.map +0 -1
  113. package/lib/modular.ts +0 -1166
  114. package/lib/namespaced.ts +0 -849
  115. package/lib/types/namespaced.ts +0 -2350
@@ -17,15 +17,18 @@ package io.invertase.firebase.auth;
17
17
  *
18
18
  */
19
19
 
20
+ import static io.invertase.firebase.common.ReactNativeFirebaseModule.rejectPromiseWithCodeAndMessage;
21
+ import static io.invertase.firebase.common.ReactNativeFirebaseModule.rejectPromiseWithExceptionMap;
22
+
20
23
  import android.app.Activity;
21
24
  import android.net.Uri;
22
25
  import android.os.Parcel;
23
26
  import android.util.Log;
24
27
  import androidx.annotation.NonNull;
28
+ import com.facebook.fbreact.specs.NativeRNFBTurboAuthSpec;
25
29
  import com.facebook.react.bridge.Arguments;
26
30
  import com.facebook.react.bridge.Promise;
27
31
  import com.facebook.react.bridge.ReactApplicationContext;
28
- import com.facebook.react.bridge.ReactMethod;
29
32
  import com.facebook.react.bridge.ReadableArray;
30
33
  import com.facebook.react.bridge.ReadableMap;
31
34
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
@@ -72,11 +75,11 @@ import com.google.firebase.auth.TotpSecret;
72
75
  import com.google.firebase.auth.TwitterAuthProvider;
73
76
  import com.google.firebase.auth.UserInfo;
74
77
  import com.google.firebase.auth.UserProfileChangeRequest;
75
- import io.invertase.firebase.app.ReactNativeFirebaseAppModule;
78
+ import io.invertase.firebase.app.NativeRNFBTurboApp;
76
79
  import io.invertase.firebase.common.ReactNativeFirebaseEvent;
77
80
  import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter;
78
- import io.invertase.firebase.common.ReactNativeFirebaseModule;
79
81
  import io.invertase.firebase.common.SharedUtils;
82
+ import io.invertase.firebase.common.TaskExecutorService;
80
83
  import java.text.SimpleDateFormat;
81
84
  import java.util.ArrayList;
82
85
  import java.util.Date;
@@ -86,13 +89,14 @@ import java.util.List;
86
89
  import java.util.Locale;
87
90
  import java.util.Map;
88
91
  import java.util.Objects;
92
+ import java.util.concurrent.ExecutorService;
89
93
  import java.util.concurrent.TimeUnit;
90
94
  import java.util.regex.Matcher;
91
95
  import java.util.regex.Pattern;
92
96
  import javax.annotation.Nullable;
93
97
 
94
98
  @SuppressWarnings({"ThrowableResultOfMethodCallIgnored", "JavaDoc"})
95
- class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
99
+ public class NativeRNFBTurboAuth extends NativeRNFBTurboAuthSpec {
96
100
  // Easier to use would be Instant and DateTimeFormatter, but these are only available in API 26+
97
101
  // According to https://stackoverflow.com/a/2202300 this is not the optimal solution, but we only
98
102
  // get a unix timestamp so we can hardcode the timezone.
@@ -116,8 +120,15 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
116
120
  // https://github.com/invertase/react-native-firebase/issues/4911
117
121
  private HashMap<String, AuthCredential> credentials = new HashMap<>();
118
122
 
119
- ReactNativeFirebaseAuthModule(ReactApplicationContext reactContext) {
120
- super(reactContext, TAG);
123
+ private final TaskExecutorService executorService;
124
+
125
+ public NativeRNFBTurboAuth(ReactApplicationContext reactContext) {
126
+ super(reactContext);
127
+ executorService = new TaskExecutorService("NativeRNFBTurboAuth");
128
+ }
129
+
130
+ private ExecutorService getExecutor() {
131
+ return executorService.getExecutor();
121
132
  }
122
133
 
123
134
  @Override
@@ -161,19 +172,19 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
161
172
  mTotpSecrets.clear();
162
173
  }
163
174
 
164
- @ReactMethod
175
+ @Override
165
176
  public void configureAuthDomain(final String appName) {
166
177
  Log.d(TAG, "configureAuthDomain");
167
178
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
168
179
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
169
- String authDomain = ReactNativeFirebaseAppModule.authDomains.get(appName);
180
+ String authDomain = NativeRNFBTurboApp.authDomains.get(appName);
170
181
  Log.d(TAG, "configureAuthDomain - app " + appName + " domain? " + authDomain);
171
182
  if (authDomain != null) {
172
183
  firebaseAuth.setCustomAuthDomain(authDomain);
173
184
  }
174
185
  }
175
186
 
176
- @ReactMethod
187
+ @Override
177
188
  public void getCustomAuthDomain(final String appName, final Promise promise) {
178
189
  Log.d(TAG, "configureAuthDomain");
179
190
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -182,7 +193,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
182
193
  }
183
194
 
184
195
  /** Add a new auth state listener - if one doesn't exist already */
185
- @ReactMethod
196
+ @Override
186
197
  public void addAuthStateListener(final String appName) {
187
198
  Log.d(TAG, "addAuthStateListener");
188
199
 
@@ -215,7 +226,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
215
226
  }
216
227
 
217
228
  /** Removes the current auth state listener */
218
- @ReactMethod
229
+ @Override
219
230
  public void removeAuthStateListener(String appName) {
220
231
  Log.d(TAG, "removeAuthStateListener");
221
232
 
@@ -231,7 +242,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
231
242
  }
232
243
 
233
244
  /** Add a new id token listener - if one doesn't exist already */
234
- @ReactMethod
245
+ @Override
235
246
  public void addIdTokenListener(final String appName) {
236
247
  Log.d(TAG, "addIdTokenListener");
237
248
 
@@ -265,7 +276,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
265
276
  }
266
277
 
267
278
  /** Removes the current id token listener */
268
- @ReactMethod
279
+ @Override
269
280
  public void removeIdTokenListener(String appName) {
270
281
  Log.d(TAG, "removeIdTokenListener");
271
282
 
@@ -292,7 +303,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
292
303
  * @param forceRecaptchaFlow
293
304
  * @param promise
294
305
  */
295
- @ReactMethod
306
+ @Override
296
307
  public void forceRecaptchaFlowForTesting(
297
308
  String appName, boolean forceRecaptchaFlow, Promise promise) {
298
309
  Log.d(TAG, "forceRecaptchaFlowForTesting");
@@ -315,7 +326,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
315
326
  * @param smsCode
316
327
  * @param promise
317
328
  */
318
- @ReactMethod
329
+ @Override
319
330
  public void setAutoRetrievedSmsCodeForPhoneNumber(
320
331
  String appName, String phoneNumber, String smsCode, Promise promise) {
321
332
  Log.d(TAG, "setAutoRetrievedSmsCodeForPhoneNumber");
@@ -333,7 +344,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
333
344
  * @param disabled
334
345
  * @param promise
335
346
  */
336
- @ReactMethod
347
+ @Override
337
348
  public void setAppVerificationDisabledForTesting(
338
349
  String appName, boolean disabled, Promise promise) {
339
350
  Log.d(TAG, "setAppVerificationDisabledForTesting");
@@ -344,7 +355,12 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
344
355
  promise.resolve(null);
345
356
  }
346
357
 
347
- @ReactMethod
358
+ @Override
359
+ public void useUserAccessGroup(String appName, String userAccessGroup, Promise promise) {
360
+ promise.resolve(null);
361
+ }
362
+
363
+ @Override
348
364
  public void signOut(String appName, Promise promise) {
349
365
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
350
366
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -358,8 +374,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
358
374
  }
359
375
  }
360
376
 
361
- @ReactMethod
362
- private void signInAnonymously(String appName, final Promise promise) {
377
+ @Override
378
+ public void signInAnonymously(String appName, final Promise promise) {
363
379
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
364
380
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
365
381
 
@@ -385,8 +401,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
385
401
  * @param password
386
402
  * @param promise
387
403
  */
388
- @ReactMethod
389
- private void createUserWithEmailAndPassword(
404
+ @Override
405
+ public void createUserWithEmailAndPassword(
390
406
  String appName, final String email, final String password, final Promise promise) {
391
407
  Log.d(TAG, "createUserWithEmailAndPassword");
392
408
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -411,14 +427,13 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
411
427
  * isSignInWithEmailLink
412
428
  *
413
429
  * @param email
414
- * @param promise
415
430
  */
416
- @ReactMethod
417
- public void isSignInWithEmailLink(String appName, String emailLink, final Promise promise) {
431
+ @Override
432
+ public boolean isSignInWithEmailLink(String appName, String emailLink) {
418
433
  Log.d(TAG, "isSignInWithEmailLink");
419
434
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
420
435
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
421
- promise.resolve(firebaseAuth.isSignInWithEmailLink(emailLink));
436
+ return firebaseAuth.isSignInWithEmailLink(emailLink);
422
437
  }
423
438
 
424
439
  /**
@@ -428,8 +443,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
428
443
  * @param password
429
444
  * @param promise
430
445
  */
431
- @ReactMethod
432
- private void signInWithEmailAndPassword(
446
+ @Override
447
+ public void signInWithEmailAndPassword(
433
448
  String appName, final String email, final String password, final Promise promise) {
434
449
  Log.d(TAG, "signInWithEmailAndPassword");
435
450
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -457,8 +472,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
457
472
  * @param emailLink
458
473
  * @param promise
459
474
  */
460
- @ReactMethod
461
- private void signInWithEmailLink(
475
+ @Override
476
+ public void signInWithEmailLink(
462
477
  String appName, final String email, final String emailLink, final Promise promise) {
463
478
  Log.d(TAG, "signInWithEmailLink");
464
479
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -483,8 +498,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
483
498
  }
484
499
  }
485
500
 
486
- @ReactMethod
487
- private void signInWithCustomToken(String appName, final String token, final Promise promise) {
501
+ @Override
502
+ public void signInWithCustomToken(String appName, final String token, final Promise promise) {
488
503
  Log.d(TAG, "signInWithCustomToken");
489
504
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
490
505
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -509,7 +524,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
509
524
  * @param authorizationCode
510
525
  * @param promise
511
526
  */
512
- @ReactMethod
527
+ @Override
513
528
  public void revokeToken(String appName, final String authorizationCode, final Promise promise) {
514
529
  Log.d(TAG, "revokeToken");
515
530
 
@@ -524,7 +539,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
524
539
  * @param email
525
540
  * @param promise
526
541
  */
527
- @ReactMethod
542
+ @Override
528
543
  public void sendPasswordResetEmail(
529
544
  String appName, final String email, ReadableMap actionCodeSettings, final Promise promise) {
530
545
  Log.d(TAG, "sendPasswordResetEmail");
@@ -559,7 +574,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
559
574
  * @param email
560
575
  * @param promise
561
576
  */
562
- @ReactMethod
577
+ @Override
563
578
  public void sendSignInLinkToEmail(
564
579
  String appName, String email, ReadableMap actionCodeSettings, final Promise promise) {
565
580
  Log.d(TAG, "sendSignInLinkToEmail");
@@ -589,12 +604,12 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
589
604
  * ---------------------- */
590
605
 
591
606
  /**
592
- * delete
607
+ * deleteUser
593
608
  *
594
609
  * @param promise Promise
595
610
  */
596
- @ReactMethod
597
- public void delete(String appName, final Promise promise) {
611
+ @Override
612
+ public void deleteUser(String appName, final Promise promise) {
598
613
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
599
614
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
600
615
 
@@ -625,7 +640,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
625
640
  *
626
641
  * @param promise
627
642
  */
628
- @ReactMethod
643
+ @Override
629
644
  public void reload(String appName, final Promise promise) {
630
645
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
631
646
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -658,7 +673,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
658
673
  *
659
674
  * @param promise
660
675
  */
661
- @ReactMethod
676
+ @Override
662
677
  public void sendEmailVerification(
663
678
  String appName, ReadableMap actionCodeSettings, final Promise promise) {
664
679
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -697,7 +712,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
697
712
  *
698
713
  * @param promise
699
714
  */
700
- @ReactMethod
715
+ @Override
701
716
  public void verifyBeforeUpdateEmail(
702
717
  String appName, String email, ReadableMap actionCodeSettings, final Promise promise) {
703
718
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -738,7 +753,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
738
753
  * @param email
739
754
  * @param promise
740
755
  */
741
- @ReactMethod
756
+ @Override
742
757
  public void updateEmail(String appName, final String email, final Promise promise) {
743
758
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
744
759
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -772,7 +787,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
772
787
  * @param password
773
788
  * @param promise
774
789
  */
775
- @ReactMethod
790
+ @Override
776
791
  public void updatePassword(String appName, final String password, final Promise promise) {
777
792
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
778
793
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -808,8 +823,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
808
823
  * @param authSecret
809
824
  * @param promise
810
825
  */
811
- @ReactMethod
812
- private void updatePhoneNumber(
826
+ @Override
827
+ public void updatePhoneNumber(
813
828
  String appName, String provider, String authToken, String authSecret, final Promise promise) {
814
829
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
815
830
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -856,7 +871,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
856
871
  * @param props
857
872
  * @param promise
858
873
  */
859
- @ReactMethod
874
+ @Override
860
875
  public void updateProfile(String appName, ReadableMap props, final Promise promise) {
861
876
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
862
877
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -898,8 +913,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
898
913
  }
899
914
  }
900
915
 
901
- @ReactMethod
902
- private void signInWithCredential(
916
+ @Override
917
+ public void signInWithCredential(
903
918
  String appName, String provider, String authToken, String authSecret, final Promise promise) {
904
919
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
905
920
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -930,8 +945,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
930
945
  }
931
946
  }
932
947
 
933
- @ReactMethod
934
- private void signInWithProvider(String appName, ReadableMap provider, final Promise promise) {
948
+ @Override
949
+ public void signInWithProvider(String appName, ReadableMap provider, final Promise promise) {
935
950
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
936
951
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
937
952
 
@@ -1003,7 +1018,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1003
1018
  * @param appName
1004
1019
  * @param phoneNumber
1005
1020
  */
1006
- @ReactMethod
1021
+ @Override
1007
1022
  public void signInWithPhoneNumber(
1008
1023
  String appName, final String phoneNumber, final boolean forceResend, final Promise promise) {
1009
1024
  Log.d(TAG, "signInWithPhoneNumber");
@@ -1112,7 +1127,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1112
1127
  }
1113
1128
  }
1114
1129
 
1115
- @ReactMethod
1130
+ @Override
1116
1131
  public void getSession(final String appName, final Promise promise) {
1117
1132
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1118
1133
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -1135,7 +1150,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1135
1150
  });
1136
1151
  }
1137
1152
 
1138
- @ReactMethod
1153
+ @Override
1139
1154
  public void unenrollMultiFactor(
1140
1155
  final String appName, final String factorUID, final Promise promise) {
1141
1156
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -1155,7 +1170,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1155
1170
  });
1156
1171
  }
1157
1172
 
1158
- @ReactMethod
1173
+ @Override
1159
1174
  public void verifyPhoneNumberWithMultiFactorInfo(
1160
1175
  final String appName, final String hintUid, final String sessionKey, final Promise promise) {
1161
1176
  final MultiFactorResolver resolver = mCachedResolvers.get(sessionKey);
@@ -1224,7 +1239,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1224
1239
  PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptions);
1225
1240
  }
1226
1241
 
1227
- @ReactMethod
1242
+ @Override
1228
1243
  public void verifyPhoneNumberForMultiFactor(
1229
1244
  final String appName,
1230
1245
  final String phoneNumber,
@@ -1274,7 +1289,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1274
1289
  PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptions);
1275
1290
  }
1276
1291
 
1277
- @ReactMethod
1292
+ @Override
1278
1293
  public void finalizeMultiFactorEnrollment(
1279
1294
  final String appName,
1280
1295
  final String verificationId,
@@ -1305,24 +1320,19 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1305
1320
  });
1306
1321
  }
1307
1322
 
1308
- @ReactMethod
1309
- public void generateQrCodeUrl(
1310
- final String appName,
1311
- final String secretKey,
1312
- final String account,
1313
- final String issuer,
1314
- final Promise promise) {
1323
+ @Override
1324
+ public String generateQrCodeUrl(
1325
+ final String appName, final String secretKey, final String account, final String issuer) {
1315
1326
 
1316
1327
  TotpSecret secret = mTotpSecrets.get(secretKey);
1317
1328
  if (secret == null) {
1318
- rejectPromiseWithCodeAndMessage(
1319
- promise, "invalid-multi-factor-secret", "can't find secret for provided key");
1320
- return;
1329
+ throw new ReactNativeFirebaseAuthSyncException(
1330
+ "invalid-multi-factor-secret", "can't find secret for provided key");
1321
1331
  }
1322
- promise.resolve(secret.generateQrCodeUrl(account, issuer));
1332
+ return secret.generateQrCodeUrl(account, issuer);
1323
1333
  }
1324
1334
 
1325
- @ReactMethod
1335
+ @Override
1326
1336
  public void openInOtpApp(final String appName, final String secretKey, final String qrCodeUri) {
1327
1337
  TotpSecret secret = mTotpSecrets.get(secretKey);
1328
1338
  if (secret != null) {
@@ -1330,7 +1340,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1330
1340
  }
1331
1341
  }
1332
1342
 
1333
- @ReactMethod
1343
+ @Override
1334
1344
  public void finalizeTotpEnrollment(
1335
1345
  final String appName,
1336
1346
  final String totpSecret,
@@ -1408,7 +1418,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1408
1418
  });
1409
1419
  }
1410
1420
 
1411
- @ReactMethod
1421
+ @Override
1412
1422
  public void resolveMultiFactorSignIn(
1413
1423
  final String appName,
1414
1424
  final String session,
@@ -1421,7 +1431,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1421
1431
  resolveMultiFactorCredential(credential, session, promise);
1422
1432
  }
1423
1433
 
1424
- @ReactMethod
1434
+ @Override
1425
1435
  public void resolveTotpSignIn(
1426
1436
  final String appName,
1427
1437
  final String sessionKey,
@@ -1456,7 +1466,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1456
1466
  });
1457
1467
  }
1458
1468
 
1459
- @ReactMethod
1469
+ @Override
1460
1470
  public void generateTotpSecret(
1461
1471
  final String appName, final String sessionKey, final Promise promise) {
1462
1472
 
@@ -1485,7 +1495,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1485
1495
  });
1486
1496
  }
1487
1497
 
1488
- @ReactMethod
1498
+ @Override
1489
1499
  public void confirmationResultConfirm(
1490
1500
  String appName, final String verificationCode, final Promise promise) {
1491
1501
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -1526,12 +1536,12 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1526
1536
  * @param phoneNumber
1527
1537
  * @param timeout
1528
1538
  */
1529
- @ReactMethod
1539
+ @Override
1530
1540
  public void verifyPhoneNumber(
1531
1541
  final String appName,
1532
1542
  final String phoneNumber,
1533
1543
  final String requestKey,
1534
- final int timeout,
1544
+ final double timeout,
1535
1545
  final boolean forceResend) {
1536
1546
  Log.d(TAG, "verifyPhoneNumber:" + phoneNumber);
1537
1547
 
@@ -1625,10 +1635,15 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1625
1635
  if (forceResend && mForceResendingToken != null) {
1626
1636
  PhoneAuthProvider.getInstance(firebaseAuth)
1627
1637
  .verifyPhoneNumber(
1628
- phoneNumber, timeout, TimeUnit.SECONDS, activity, callbacks, mForceResendingToken);
1638
+ phoneNumber,
1639
+ (long) timeout,
1640
+ TimeUnit.SECONDS,
1641
+ activity,
1642
+ callbacks,
1643
+ mForceResendingToken);
1629
1644
  } else {
1630
1645
  PhoneAuthProvider.getInstance(firebaseAuth)
1631
- .verifyPhoneNumber(phoneNumber, timeout, TimeUnit.SECONDS, activity, callbacks);
1646
+ .verifyPhoneNumber(phoneNumber, (long) timeout, TimeUnit.SECONDS, activity, callbacks);
1632
1647
  }
1633
1648
  }
1634
1649
  }
@@ -1640,7 +1655,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1640
1655
  * @param newPassword
1641
1656
  * @param promise
1642
1657
  */
1643
- @ReactMethod
1658
+ @Override
1644
1659
  public void confirmPasswordReset(
1645
1660
  String appName, String code, String newPassword, final Promise promise) {
1646
1661
  Log.d(TAG, "confirmPasswordReset");
@@ -1670,7 +1685,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1670
1685
  * @param code
1671
1686
  * @param promise
1672
1687
  */
1673
- @ReactMethod
1688
+ @Override
1674
1689
  public void applyActionCode(String appName, String code, final Promise promise) {
1675
1690
  Log.d(TAG, "applyActionCode");
1676
1691
 
@@ -1697,7 +1712,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1697
1712
  * @param code
1698
1713
  * @param promise
1699
1714
  */
1700
- @ReactMethod
1715
+ @Override
1701
1716
  public void checkActionCode(String appName, String code, final Promise promise) {
1702
1717
  Log.d(TAG, "checkActionCode");
1703
1718
 
@@ -1760,8 +1775,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1760
1775
  * @param authSecret
1761
1776
  * @param promise
1762
1777
  */
1763
- @ReactMethod
1764
- private void linkWithCredential(
1778
+ @Override
1779
+ public void linkWithCredential(
1765
1780
  String appName, String provider, String authToken, String authSecret, final Promise promise) {
1766
1781
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1767
1782
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -1814,8 +1829,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1814
1829
  * @param provider
1815
1830
  * @param promise
1816
1831
  */
1817
- @ReactMethod
1818
- private void linkWithProvider(String appName, ReadableMap provider, final Promise promise) {
1832
+ @Override
1833
+ public void linkWithProvider(String appName, ReadableMap provider, final Promise promise) {
1819
1834
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1820
1835
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
1821
1836
 
@@ -1888,7 +1903,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1888
1903
  }
1889
1904
  }
1890
1905
 
1891
- @ReactMethod
1906
+ @Override
1892
1907
  public void unlink(final String appName, final String providerId, final Promise promise) {
1893
1908
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1894
1909
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -1914,8 +1929,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1914
1929
  }
1915
1930
  }
1916
1931
 
1917
- @ReactMethod
1918
- private void reauthenticateWithCredential(
1932
+ @Override
1933
+ public void reauthenticateWithCredential(
1919
1934
  String appName, String provider, String authToken, String authSecret, final Promise promise) {
1920
1935
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1921
1936
  final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -1957,8 +1972,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
1957
1972
  * @param provider
1958
1973
  * @param promise
1959
1974
  */
1960
- @ReactMethod
1961
- private void reauthenticateWithProvider(
1975
+ @Override
1976
+ public void reauthenticateWithProvider(
1962
1977
  String appName, ReadableMap provider, final Promise promise) {
1963
1978
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
1964
1979
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -2046,7 +2061,12 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2046
2061
  case "facebook.com":
2047
2062
  return FacebookAuthProvider.getCredential(authToken);
2048
2063
  case "google.com":
2049
- return GoogleAuthProvider.getCredential(authToken, authSecret);
2064
+ // Firebase Android rejects empty tokens; id-token-only and access-token-only flows require
2065
+ // null.
2066
+ // https://firebase.google.com/docs/reference/android/com/google/firebase/auth/GoogleAuthProvider#getCredential(java.lang.String,java.lang.String)
2067
+ String googleIdToken = (authToken == null || authToken.isEmpty()) ? null : authToken;
2068
+ String googleAccessToken = (authSecret == null || authSecret.isEmpty()) ? null : authSecret;
2069
+ return GoogleAuthProvider.getCredential(googleIdToken, googleAccessToken);
2050
2070
  case "twitter.com":
2051
2071
  return TwitterAuthProvider.getCredential(authToken, authSecret);
2052
2072
  case "github.com":
@@ -2104,8 +2124,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2104
2124
  * @param forceRefresh
2105
2125
  * @param promise
2106
2126
  */
2107
- @ReactMethod
2108
- public void getIdToken(String appName, Boolean forceRefresh, final Promise promise) {
2127
+ @Override
2128
+ public void getIdToken(String appName, boolean forceRefresh, final Promise promise) {
2109
2129
  Log.d(TAG, "getIdToken");
2110
2130
 
2111
2131
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -2140,8 +2160,8 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2140
2160
  * @param forceRefresh
2141
2161
  * @param promise
2142
2162
  */
2143
- @ReactMethod
2144
- public void getIdTokenResult(String appName, Boolean forceRefresh, final Promise promise) {
2163
+ @Override
2164
+ public void getIdTokenResult(String appName, boolean forceRefresh, final Promise promise) {
2145
2165
  Log.d(TAG, "getIdTokenResult");
2146
2166
 
2147
2167
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -2201,7 +2221,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2201
2221
  * @param email
2202
2222
  * @param promise
2203
2223
  */
2204
- @ReactMethod
2224
+ @Override
2205
2225
  public void fetchSignInMethodsForEmail(String appName, String email, final Promise promise) {
2206
2226
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
2207
2227
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -2240,7 +2260,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2240
2260
  * @param appName
2241
2261
  * @param code
2242
2262
  */
2243
- @ReactMethod
2263
+ @Override
2244
2264
  public void setLanguageCode(String appName, String code) {
2245
2265
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
2246
2266
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -2259,7 +2279,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2259
2279
  * @param tenantId
2260
2280
  * @param promise
2261
2281
  */
2262
- @ReactMethod
2282
+ @Override
2263
2283
  public void setTenantId(String appName, String tenantId, final Promise promise) {
2264
2284
  try {
2265
2285
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
@@ -2276,7 +2296,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2276
2296
  *
2277
2297
  * @param appName
2278
2298
  */
2279
- @ReactMethod
2299
+ @Override
2280
2300
  public void useDeviceLanguage(String appName) {
2281
2301
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
2282
2302
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
@@ -2284,7 +2304,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2284
2304
  firebaseAuth.useAppLanguage();
2285
2305
  }
2286
2306
 
2287
- @ReactMethod
2307
+ @Override
2288
2308
  public void verifyPasswordResetCode(String appName, String code, final Promise promise) {
2289
2309
  Log.d(TAG, "verifyPasswordResetCode");
2290
2310
 
@@ -2307,14 +2327,14 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2307
2327
  });
2308
2328
  }
2309
2329
 
2310
- @ReactMethod
2311
- public void useEmulator(String appName, String host, int port) {
2330
+ @Override
2331
+ public void useEmulator(String appName, String host, double port) {
2312
2332
 
2313
2333
  if (emulatorConfigs.get(appName) == null) {
2314
2334
  emulatorConfigs.put(appName, "true");
2315
2335
  FirebaseApp firebaseApp = FirebaseApp.getInstance(appName);
2316
2336
  FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
2317
- firebaseAuth.useEmulator(host, port);
2337
+ firebaseAuth.useEmulator(host, (int) port);
2318
2338
  }
2319
2339
  }
2320
2340
 
@@ -2804,7 +2824,7 @@ class ReactNativeFirebaseAuthModule extends ReactNativeFirebaseModule {
2804
2824
  * @return
2805
2825
  */
2806
2826
  @Override
2807
- public Map<String, Object> getConstants() {
2827
+ protected Map<String, Object> getTypedExportedConstants() {
2808
2828
  Map<String, Object> constants = new HashMap<>();
2809
2829
 
2810
2830
  List<FirebaseApp> firebaseAppList = FirebaseApp.getApps(getReactApplicationContext());