react-native-nitro-auth 0.5.0 → 0.5.1

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/README.md CHANGED
@@ -95,6 +95,9 @@ Fastest way to confirm the package and Microsoft login work:
95
95
  In the app, tap **Sign in with Microsoft**. A browser or in-app tab opens; sign in with a Microsoft/personal account, then you should return to the app with the user shown (email, name, provider MICROSOFT).
96
96
  If you see "configuration_error", check `MICROSOFT_CLIENT_ID` and that the redirect URI in Azure matches your app (e.g. `msauth://com.auth.example/<client-id>` for the example app).
97
97
 
98
+ > [!TIP]
99
+ > In the example app on Android, you can toggle **Legacy Google Sign-In** to compare Credential Manager vs legacy GoogleSignIn (and to get `serverAuthCode`).
100
+
98
101
  ### Expo Setup
99
102
 
100
103
  Add the plugin to `app.json` or `app.config.js`:
@@ -725,6 +728,15 @@ await login("google", {
725
728
  > [!NOTE]
726
729
  > One-Tap requires Google Play Services. You can check `hasPlayServices` from `useAuth()` and show a fallback UI if needed.
727
730
 
731
+ ### Android Legacy Google Sign-In (Server Auth Code)
732
+
733
+ Credential Manager is the recommended default on Android, but it **does not return** `serverAuthCode`.
734
+ If your backend requires `serverAuthCode`, opt into the legacy flow:
735
+
736
+ ```ts
737
+ await login("google", { useLegacyGoogleSignIn: true });
738
+ ```
739
+
728
740
  ### Force Account Picker
729
741
 
730
742
  When connecting additional services (like Google Calendar), you may want to let users pick a different account than the one they signed in with. Use `forceAccountPicker` to clear any cached session and show the account picker:
@@ -802,6 +814,7 @@ This is useful for scenarios where:
802
814
  | `useOneTap` | `boolean` | Android | Enable Google One-Tap (Credential Manager) |
803
815
  | `useSheet` | `boolean` | iOS | Enable iOS Google Sign-In Sheet |
804
816
  | `forceAccountPicker` | `boolean` | All | Always show the account selection screen |
817
+ | `useLegacyGoogleSignIn` | `boolean` | Android | Use legacy Google Sign-In (supports `serverAuthCode`) |
805
818
  | `tenant` | `string` | Microsoft | Azure AD tenant (`common`, `organizations`, etc.) |
806
819
  | `prompt` | `string` | Microsoft | Prompt behavior (`login`, `consent`, `select_account`, `none`) |
807
820
 
@@ -51,6 +51,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
51
51
  std::optional<std::string> prompt;
52
52
  bool useOneTap = false;
53
53
  bool forceAccountPicker = false;
54
+ bool useLegacyGoogleSignIn = false;
54
55
 
55
56
  if (options) {
56
57
  if (options->scopes) scopes = *options->scopes;
@@ -66,6 +67,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
66
67
  }
67
68
  useOneTap = options->useOneTap.value_or(false);
68
69
  forceAccountPicker = options->forceAccountPicker.value_or(false);
70
+ useLegacyGoogleSignIn = options->useLegacyGoogleSignIn.value_or(false);
69
71
  }
70
72
 
71
73
  JNIEnv* env = Environment::current();
@@ -81,7 +83,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
81
83
 
82
84
  jclass adapterClass = env->FindClass("com/auth/AuthAdapter");
83
85
  jmethodID loginMethod = env->GetStaticMethodID(adapterClass, "loginSync",
84
- "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V");
86
+ "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;Ljava/lang/String;)V");
85
87
  env->CallStaticVoidMethod(adapterClass, loginMethod,
86
88
  contextPtr,
87
89
  make_jstring(providerStr).get(),
@@ -90,6 +92,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
90
92
  jLoginHint,
91
93
  (jboolean)useOneTap,
92
94
  (jboolean)forceAccountPicker,
95
+ (jboolean)useLegacyGoogleSignIn,
93
96
  jTenant,
94
97
  jPrompt);
95
98
 
@@ -1,3 +1,5 @@
1
+ @file:Suppress("DEPRECATION")
2
+
1
3
  package com.auth
2
4
 
3
5
  import android.content.Context
@@ -157,7 +159,18 @@ object AuthAdapter {
157
159
  }
158
160
 
159
161
  @JvmStatic
160
- fun loginSync(context: Context, provider: String, googleClientId: String?, scopes: Array<String>?, loginHint: String?, useOneTap: Boolean, forceAccountPicker: Boolean = false, tenant: String? = null, prompt: String? = null) {
162
+ fun loginSync(
163
+ context: Context,
164
+ provider: String,
165
+ googleClientId: String?,
166
+ scopes: Array<String>?,
167
+ loginHint: String?,
168
+ useOneTap: Boolean,
169
+ forceAccountPicker: Boolean = false,
170
+ useLegacyGoogleSignIn: Boolean = false,
171
+ tenant: String? = null,
172
+ prompt: String? = null
173
+ ) {
161
174
  if (provider == "apple") {
162
175
  nativeOnLoginError("unsupported_provider", "Apple Sign-In is not supported on Android.")
163
176
  return
@@ -183,13 +196,12 @@ object AuthAdapter {
183
196
  val requestedScopes = scopes?.toList() ?: listOf("email", "profile")
184
197
  pendingScopes = requestedScopes
185
198
 
186
- if (useOneTap && !forceAccountPicker) {
187
- loginOneTap(context, clientId, requestedScopes)
188
- } else {
189
- val intent = GoogleSignInActivity.createIntent(ctx, clientId, requestedScopes.toTypedArray(), loginHint, forceAccountPicker)
190
- intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
191
- ctx.startActivity(intent)
199
+ if (useLegacyGoogleSignIn) {
200
+ loginLegacy(context, clientId, requestedScopes, loginHint, forceAccountPicker)
201
+ return
192
202
  }
203
+
204
+ loginOneTap(context, clientId, requestedScopes, loginHint, forceAccountPicker, useOneTap)
193
205
  }
194
206
 
195
207
  private fun loginMicrosoft(context: Context, scopes: Array<String>?, loginHint: String?, tenant: String?, prompt: String?) {
@@ -470,18 +482,25 @@ object AuthAdapter {
470
482
  }
471
483
  }
472
484
 
473
- private fun loginOneTap(context: Context, clientId: String, scopes: List<String>) {
485
+ private fun loginOneTap(
486
+ context: Context,
487
+ clientId: String,
488
+ scopes: List<String>,
489
+ loginHint: String?,
490
+ forceAccountPicker: Boolean,
491
+ useOneTap: Boolean
492
+ ) {
474
493
  val activity = currentActivity ?: context as? Activity
475
494
  if (activity == null) {
476
495
  Log.w(TAG, "No Activity context available for One-Tap, falling back to legacy")
477
- return loginLegacy(context, clientId, scopes)
496
+ return loginLegacy(context, clientId, scopes, loginHint, forceAccountPicker)
478
497
  }
479
498
 
480
499
  val credentialManager = CredentialManager.create(activity)
481
500
  val googleIdOption = GetGoogleIdOption.Builder()
482
501
  .setFilterByAuthorizedAccounts(false)
483
502
  .setServerClientId(clientId)
484
- .setAutoSelectEnabled(false)
503
+ .setAutoSelectEnabled(useOneTap && !forceAccountPicker)
485
504
  .build()
486
505
 
487
506
  val request = GetCredentialRequest.Builder()
@@ -494,14 +513,26 @@ object AuthAdapter {
494
513
  handleCredentialResponse(result, scopes)
495
514
  } catch (e: Exception) {
496
515
  Log.w(TAG, "One-Tap failed, falling back to legacy: ${e.message}")
497
- loginLegacy(context, clientId, scopes)
516
+ loginLegacy(context, clientId, scopes, loginHint, forceAccountPicker)
498
517
  }
499
518
  }
500
519
  }
501
520
 
502
- private fun loginLegacy(context: Context, clientId: String, scopes: List<String>) {
521
+ private fun loginLegacy(
522
+ context: Context,
523
+ clientId: String,
524
+ scopes: List<String>,
525
+ loginHint: String?,
526
+ forceAccountPicker: Boolean
527
+ ) {
503
528
  val ctx = appContext ?: context.applicationContext
504
- val intent = GoogleSignInActivity.createIntent(ctx, clientId, scopes.toTypedArray(), null)
529
+ val intent = GoogleSignInActivity.createIntent(
530
+ ctx,
531
+ clientId,
532
+ scopes.toTypedArray(),
533
+ loginHint,
534
+ forceAccountPicker
535
+ )
505
536
  intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
506
537
  ctx.startActivity(intent)
507
538
  }
@@ -1,3 +1,5 @@
1
+ @file:Suppress("DEPRECATION")
2
+
1
3
  package com.auth
2
4
 
3
5
  import android.app.Activity
@@ -84,4 +86,3 @@ class GoogleSignInActivity : ComponentActivity() {
84
86
  }
85
87
  }
86
88
  }
87
-
@@ -1,3 +1,5 @@
1
+ @file:Suppress("DEPRECATION")
2
+
1
3
  package com.auth
2
4
 
3
5
  import com.facebook.react.ReactPackage
@@ -11,6 +11,8 @@ export interface LoginOptions {
11
11
  useSheet?: boolean;
12
12
  /** Force account picker to show, ignoring any cached session or loginHint */
13
13
  forceAccountPicker?: boolean;
14
+ /** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
15
+ useLegacyGoogleSignIn?: boolean;
14
16
  /** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
15
17
  tenant?: string;
16
18
  /** (Microsoft only) Prompt behavior for login */
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export interface LoginOptions {
11
11
  useSheet?: boolean;
12
12
  /** Force account picker to show, ignoring any cached session or loginHint */
13
13
  forceAccountPicker?: boolean;
14
+ /** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
15
+ useLegacyGoogleSignIn?: boolean;
14
16
  /** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
15
17
  tenant?: string;
16
18
  /** (Microsoft only) Prompt behavior for login */
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../../src/Auth.nitro.ts"],"names":[],"mappings":"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"}
@@ -48,12 +48,13 @@ namespace margelo::nitro::NitroAuth {
48
48
  std::optional<bool> useOneTap SWIFT_PRIVATE;
49
49
  std::optional<bool> useSheet SWIFT_PRIVATE;
50
50
  std::optional<bool> forceAccountPicker SWIFT_PRIVATE;
51
+ std::optional<bool> useLegacyGoogleSignIn SWIFT_PRIVATE;
51
52
  std::optional<std::string> tenant SWIFT_PRIVATE;
52
53
  std::optional<MicrosoftPrompt> prompt SWIFT_PRIVATE;
53
54
 
54
55
  public:
55
56
  LoginOptions() = default;
56
- explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet, std::optional<bool> forceAccountPicker, std::optional<std::string> tenant, std::optional<MicrosoftPrompt> prompt): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet), forceAccountPicker(forceAccountPicker), tenant(tenant), prompt(prompt) {}
57
+ explicit LoginOptions(std::optional<std::vector<std::string>> scopes, std::optional<std::string> loginHint, std::optional<bool> useOneTap, std::optional<bool> useSheet, std::optional<bool> forceAccountPicker, std::optional<bool> useLegacyGoogleSignIn, std::optional<std::string> tenant, std::optional<MicrosoftPrompt> prompt): scopes(scopes), loginHint(loginHint), useOneTap(useOneTap), useSheet(useSheet), forceAccountPicker(forceAccountPicker), useLegacyGoogleSignIn(useLegacyGoogleSignIn), tenant(tenant), prompt(prompt) {}
57
58
 
58
59
  public:
59
60
  friend bool operator==(const LoginOptions& lhs, const LoginOptions& rhs) = default;
@@ -74,6 +75,7 @@ namespace margelo::nitro {
74
75
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"))),
75
76
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet"))),
76
77
  JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"))),
78
+ JSIConverter<std::optional<bool>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn"))),
77
79
  JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant"))),
78
80
  JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))
79
81
  );
@@ -85,6 +87,7 @@ namespace margelo::nitro {
85
87
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "useOneTap"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useOneTap));
86
88
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "useSheet"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useSheet));
87
89
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.forceAccountPicker));
90
+ obj.setProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn"), JSIConverter<std::optional<bool>>::toJSI(runtime, arg.useLegacyGoogleSignIn));
88
91
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "tenant"), JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.tenant));
89
92
  obj.setProperty(runtime, PropNameIDCache::get(runtime, "prompt"), JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::toJSI(runtime, arg.prompt));
90
93
  return obj;
@@ -102,6 +105,7 @@ namespace margelo::nitro {
102
105
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useOneTap")))) return false;
103
106
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useSheet")))) return false;
104
107
  if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "forceAccountPicker")))) return false;
108
+ if (!JSIConverter<std::optional<bool>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "useLegacyGoogleSignIn")))) return false;
105
109
  if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "tenant")))) return false;
106
110
  if (!JSIConverter<std::optional<margelo::nitro::NitroAuth::MicrosoftPrompt>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "prompt")))) return false;
107
111
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-auth",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "High-performance authentication library for React Native with Google Sign-In, Apple Sign-In, and Microsoft Sign-In support, powered by Nitro Modules (JSI)",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -79,12 +79,12 @@
79
79
  },
80
80
  "devDependencies": {
81
81
  "@expo/config-plugins": "^54.0.4",
82
- "@react-native/babel-preset": "^0.83.1",
83
- "@testing-library/react": "^16.3.2",
84
- "@types/node": "^25.2.1",
85
- "jest-environment-jsdom": "^30.2.0",
86
- "react": "19.2.4",
87
- "react-native": "0.83.1",
82
+ "@react-native/babel-preset": "^0.81.0",
83
+ "@testing-library/react": "^16.1.0",
84
+ "@types/node": "^22.14.0",
85
+ "jest-environment-jsdom": "^29.7.0",
86
+ "react": "19.1.0",
87
+ "react-native": "0.81.5",
88
88
  "react-native-nitro-modules": "^0.33.7",
89
89
  "react-native-web": "^0.21.2",
90
90
  "typescript": "^5.9.3"
@@ -92,7 +92,7 @@
92
92
  "peerDependencies": {
93
93
  "react": "*",
94
94
  "react-native": ">=0.75.0",
95
- "react-native-nitro-modules": ">=0.33.0"
95
+ "react-native-nitro-modules": ">=0.33.7"
96
96
  },
97
97
  "react-native-builder-bob": {
98
98
  "source": "src",
package/src/Auth.nitro.ts CHANGED
@@ -27,6 +27,8 @@ export interface LoginOptions {
27
27
  useSheet?: boolean;
28
28
  /** Force account picker to show, ignoring any cached session or loginHint */
29
29
  forceAccountPicker?: boolean;
30
+ /** (Android only) Use legacy Google Sign-In flow (e.g. for serverAuthCode) */
31
+ useLegacyGoogleSignIn?: boolean;
30
32
  /** (Microsoft only) Azure AD tenant - "common", "organizations", "consumers", or tenant ID */
31
33
  tenant?: string;
32
34
  /** (Microsoft only) Prompt behavior for login */