react-native-nitro-auth 0.5.12 → 0.6.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.
- package/CHANGELOG.md +23 -0
- package/README.md +88 -13
- package/android/build.gradle +4 -4
- package/android/gradle.properties +2 -2
- package/android/src/main/cpp/PlatformAuth+Android.cpp +87 -4
- package/android/src/main/java/com/auth/AuthAdapter.kt +85 -48
- package/android/src/main/java/com/auth/GoogleSignInActivity.kt +12 -2
- package/cpp/HybridAuth.cpp +168 -18
- package/cpp/HybridAuth.hpp +7 -0
- package/cpp/PlatformAuth.hpp +1 -0
- package/ios/AuthAdapter.swift +98 -24
- package/ios/PlatformAuth+iOS.mm +37 -1
- package/lib/commonjs/Auth.web.js +74 -21
- package/lib/commonjs/Auth.web.js.map +1 -1
- package/lib/commonjs/create-auth-service.js +10 -0
- package/lib/commonjs/create-auth-service.js.map +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +12 -0
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/provider-options.js +6 -0
- package/lib/commonjs/provider-options.js.map +1 -0
- package/lib/commonjs/service.js.map +1 -1
- package/lib/commonjs/service.web.js.map +1 -1
- package/lib/commonjs/use-auth.js +21 -1
- package/lib/commonjs/use-auth.js.map +1 -1
- package/lib/module/Auth.web.js +74 -21
- package/lib/module/Auth.web.js.map +1 -1
- package/lib/module/create-auth-service.js +10 -0
- package/lib/module/create-auth-service.js.map +1 -1
- package/lib/module/global.d.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/provider-options.js +4 -0
- package/lib/module/provider-options.js.map +1 -0
- package/lib/module/service.js.map +1 -1
- package/lib/module/service.web.js.map +1 -1
- package/lib/module/use-auth.js +21 -1
- package/lib/module/use-auth.js.map +1 -1
- package/lib/typescript/commonjs/Auth.nitro.d.ts +11 -0
- package/lib/typescript/commonjs/Auth.nitro.d.ts.map +1 -1
- package/lib/typescript/commonjs/Auth.web.d.ts +4 -0
- package/lib/typescript/commonjs/Auth.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/create-auth-service.d.ts +2 -1
- package/lib/typescript/commonjs/create-auth-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +1 -0
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/provider-options.d.ts +23 -0
- package/lib/typescript/commonjs/provider-options.d.ts.map +1 -0
- package/lib/typescript/commonjs/service.d.ts +2 -2
- package/lib/typescript/commonjs/service.d.ts.map +1 -1
- package/lib/typescript/commonjs/service.web.d.ts +2 -2
- package/lib/typescript/commonjs/service.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/use-auth.d.ts +4 -2
- package/lib/typescript/commonjs/use-auth.d.ts.map +1 -1
- package/lib/typescript/module/Auth.nitro.d.ts +11 -0
- package/lib/typescript/module/Auth.nitro.d.ts.map +1 -1
- package/lib/typescript/module/Auth.web.d.ts +4 -0
- package/lib/typescript/module/Auth.web.d.ts.map +1 -1
- package/lib/typescript/module/create-auth-service.d.ts +2 -1
- package/lib/typescript/module/create-auth-service.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +1 -0
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/provider-options.d.ts +23 -0
- package/lib/typescript/module/provider-options.d.ts.map +1 -0
- package/lib/typescript/module/service.d.ts +2 -2
- package/lib/typescript/module/service.d.ts.map +1 -1
- package/lib/typescript/module/service.web.d.ts +2 -2
- package/lib/typescript/module/service.web.d.ts.map +1 -1
- package/lib/typescript/module/use-auth.d.ts +4 -2
- package/lib/typescript/module/use-auth.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/AuthUser.hpp +17 -1
- package/nitrogen/generated/shared/c++/HybridAuthSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridAuthSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/LoginOptions.hpp +25 -1
- package/package.json +2 -2
- package/src/Auth.nitro.ts +11 -0
- package/src/Auth.web.ts +99 -16
- package/src/create-auth-service.ts +19 -9
- package/src/global.d.ts +2 -1
- package/src/index.ts +1 -0
- package/src/index.web.ts +1 -0
- package/src/provider-options.ts +62 -0
- package/src/service.ts +2 -1
- package/src/service.web.ts +2 -2
- package/src/use-auth.ts +22 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.0 - 2026-05-14
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added provider option support for Google nonce, hosted domain, OpenID realm, authorized-account filtering, verified phone number requests, refresh-code forcing, and Android legacy Google sign-in.
|
|
8
|
+
- Added Apple nonce and authorization-code/user-id result support.
|
|
9
|
+
- Added Microsoft tenant and prompt option coverage across native and web flows.
|
|
10
|
+
- Added `revokeAccess()` to the native/web auth API and `useAuth()` hook.
|
|
11
|
+
- Added native logging hooks and platform-gated example controls for supported provider options only.
|
|
12
|
+
- Added provider-specific TypeScript option types for `AuthService.login()` and `useAuth().login()`.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Updated Nitro Modules and native SDK dependencies, including Android Credential Manager, Activity, Browser, and API 36 targets.
|
|
17
|
+
- Hardened native and web promise handling so stale sign-in, scope, restore, revoke, and token operations settle consistently.
|
|
18
|
+
- Updated Android Google sign-out to avoid noisy Credential Manager cleanup during normal logout while preserving deep cleanup through revoke access.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Fixed Android Metro watcher noise from transient Bun `node_modules/.old-*` directories in the example app.
|
|
23
|
+
- Fixed Android Google cancellation handling so cancellations are not reported as unknown failures.
|
|
24
|
+
- Fixed native session cleanup paths to reject pending work before clearing provider state.
|
|
25
|
+
|
|
3
26
|
## 0.5.12 - 2026-05-13
|
|
4
27
|
|
|
5
28
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# react-native-nitro-auth
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|

|
|
5
5
|

|
|
6
6
|

|
|
@@ -232,29 +232,45 @@ tokensUnsubscribe();
|
|
|
232
232
|
await login("google", {
|
|
233
233
|
scopes: ["email", "profile"],
|
|
234
234
|
loginHint: "user@example.com",
|
|
235
|
+
nonce: "opaque-nonce",
|
|
235
236
|
useOneTap: true,
|
|
236
|
-
useSheet: true,
|
|
237
237
|
forceAccountPicker: true,
|
|
238
|
+
filterByAuthorizedAccounts: true,
|
|
238
239
|
useLegacyGoogleSignIn: true,
|
|
240
|
+
forceCodeForRefreshToken: true,
|
|
241
|
+
hostedDomain: "company.com",
|
|
242
|
+
requestVerifiedPhoneNumber: true,
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
await login("apple", {
|
|
246
|
+
scopes: ["email", "name"],
|
|
247
|
+
nonce: "opaque-nonce",
|
|
239
248
|
});
|
|
240
249
|
|
|
241
250
|
await login("microsoft", {
|
|
242
251
|
scopes: ["openid", "profile", "email", "offline_access", "User.Read"],
|
|
252
|
+
loginHint: "user@example.com",
|
|
243
253
|
tenant: "organizations",
|
|
244
254
|
prompt: "select_account",
|
|
245
255
|
});
|
|
246
256
|
```
|
|
247
257
|
|
|
248
|
-
| Option
|
|
249
|
-
|
|
|
250
|
-
| `scopes`
|
|
251
|
-
| `loginHint`
|
|
252
|
-
| `
|
|
253
|
-
| `
|
|
254
|
-
| `
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
+
| Option | Provider | Platform | Notes |
|
|
259
|
+
| ---------------------------- | ------------ | ---------------- | ----------------------------------------------------------- |
|
|
260
|
+
| `scopes` | All | iOS, Android, web | Requested OAuth scopes. Apple is unavailable on Android. |
|
|
261
|
+
| `loginHint` | Google, Microsoft | iOS, Android, web | Prefills account selection when supported by the provider. |
|
|
262
|
+
| `nonce` | Google, Apple | iOS, Android, web | Passed to provider ID-token flows when the SDK supports it. |
|
|
263
|
+
| `useOneTap` | Google | Android | Enables Credential Manager auto-select. |
|
|
264
|
+
| `useSheet` | Google | iOS | Compatibility alias; prefer `forceAccountPicker`. |
|
|
265
|
+
| `forceAccountPicker` | Google | iOS, Android, web | Forces an account picker. Android uses the legacy chooser. |
|
|
266
|
+
| `filterByAuthorizedAccounts` | Google | Android | Limits Credential Manager to authorized accounts. |
|
|
267
|
+
| `useLegacyGoogleSignIn` | Google | Android | Uses legacy Google Sign-In for server auth code flows. |
|
|
268
|
+
| `forceCodeForRefreshToken` | Google | Android | Forces a new server auth code on the legacy Google path. |
|
|
269
|
+
| `hostedDomain` | Google | iOS, Android, web | Hints or filters Google Workspace hosted-domain accounts. |
|
|
270
|
+
| `openIDRealm` | Google | iOS, web | Adds OpenID realm support where the SDK exposes it. |
|
|
271
|
+
| `requestVerifiedPhoneNumber` | Google | Android | Requests verified phone number through Credential Manager. |
|
|
272
|
+
| `tenant` | Microsoft | iOS, Android, web | Overrides configured tenant. |
|
|
273
|
+
| `prompt` | Microsoft | iOS, Android, web | `login`, `consent`, `select_account`, or `none`. |
|
|
258
274
|
|
|
259
275
|
## Incremental Scopes
|
|
260
276
|
|
|
@@ -357,6 +373,18 @@ Main exports:
|
|
|
357
373
|
- `AuthUser`
|
|
358
374
|
- `AuthTokens`
|
|
359
375
|
- `LoginOptions`
|
|
376
|
+
- `ProviderLoginOptions`
|
|
377
|
+
- `LoginOptionsByProvider`
|
|
378
|
+
- `GoogleLoginOptions`
|
|
379
|
+
- `GoogleIOSLoginOptions`
|
|
380
|
+
- `GoogleAndroidLoginOptions`
|
|
381
|
+
- `GoogleWebLoginOptions`
|
|
382
|
+
- `AppleLoginOptions`
|
|
383
|
+
- `AppleIOSLoginOptions`
|
|
384
|
+
- `AppleWebLoginOptions`
|
|
385
|
+
- `MicrosoftLoginOptions`
|
|
386
|
+
- `AuthLogin`
|
|
387
|
+
- `TypedAuth`
|
|
360
388
|
|
|
361
389
|
### useAuth()
|
|
362
390
|
|
|
@@ -371,12 +399,54 @@ type UseAuthReturn = {
|
|
|
371
399
|
logout(): void;
|
|
372
400
|
requestScopes(scopes: string[]): Promise<void>;
|
|
373
401
|
revokeScopes(scopes: string[]): Promise<void>;
|
|
402
|
+
revokeAccess(): Promise<void>;
|
|
374
403
|
getAccessToken(): Promise<string | undefined>;
|
|
375
404
|
refreshToken(): Promise<AuthTokens>;
|
|
376
405
|
silentRestore(): Promise<void>;
|
|
377
406
|
};
|
|
378
407
|
```
|
|
379
408
|
|
|
409
|
+
### Strong Login Types
|
|
410
|
+
|
|
411
|
+
`AuthService.login()` and `useAuth().login()` infer the allowed option object from the provider argument.
|
|
412
|
+
|
|
413
|
+
```ts
|
|
414
|
+
await AuthService.login("apple", {
|
|
415
|
+
nonce: "opaque-nonce",
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
await AuthService.login("microsoft", {
|
|
419
|
+
tenant: "organizations",
|
|
420
|
+
prompt: "select_account",
|
|
421
|
+
});
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Provider/platform option helpers are exported for config builders and AI-generated integrations:
|
|
425
|
+
|
|
426
|
+
```ts
|
|
427
|
+
import type {
|
|
428
|
+
GoogleAndroidLoginOptions,
|
|
429
|
+
GoogleIOSLoginOptions,
|
|
430
|
+
MicrosoftLoginOptions,
|
|
431
|
+
} from "react-native-nitro-auth";
|
|
432
|
+
|
|
433
|
+
const androidGoogleOptions = {
|
|
434
|
+
useOneTap: true,
|
|
435
|
+
filterByAuthorizedAccounts: true,
|
|
436
|
+
requestVerifiedPhoneNumber: true,
|
|
437
|
+
} satisfies GoogleAndroidLoginOptions;
|
|
438
|
+
|
|
439
|
+
const iosGoogleOptions = {
|
|
440
|
+
hostedDomain: "company.com",
|
|
441
|
+
openIDRealm: "https://example.com",
|
|
442
|
+
} satisfies GoogleIOSLoginOptions;
|
|
443
|
+
|
|
444
|
+
const microsoftOptions = {
|
|
445
|
+
tenant: "organizations",
|
|
446
|
+
prompt: "select_account",
|
|
447
|
+
} satisfies MicrosoftLoginOptions;
|
|
448
|
+
```
|
|
449
|
+
|
|
380
450
|
### AuthUser
|
|
381
451
|
|
|
382
452
|
```ts
|
|
@@ -389,6 +459,10 @@ type AuthUser = {
|
|
|
389
459
|
accessToken?: string;
|
|
390
460
|
refreshToken?: string;
|
|
391
461
|
serverAuthCode?: string;
|
|
462
|
+
authorizationCode?: string;
|
|
463
|
+
userId?: string;
|
|
464
|
+
phoneNumber?: string;
|
|
465
|
+
hostedDomain?: string;
|
|
392
466
|
scopes?: string[];
|
|
393
467
|
expirationTime?: number;
|
|
394
468
|
underlyingError?: string;
|
|
@@ -411,7 +485,8 @@ The demo includes:
|
|
|
411
485
|
|
|
412
486
|
- Provider cards for Google, Apple, and Microsoft.
|
|
413
487
|
- Token and scope operations.
|
|
414
|
-
- Silent restore
|
|
488
|
+
- Silent restore, account picker, revoke access, and native logging actions.
|
|
489
|
+
- Platform-gated controls for each supported Google, Apple, and Microsoft option.
|
|
415
490
|
- App-owned disk snapshot example with `react-native-nitro-storage`.
|
|
416
491
|
- Runtime smoke tests for the public API.
|
|
417
492
|
|
package/android/build.gradle
CHANGED
|
@@ -96,13 +96,13 @@ dependencies {
|
|
|
96
96
|
implementation "com.google.android.gms:play-services-auth:21.5.1"
|
|
97
97
|
|
|
98
98
|
// Activity result APIs
|
|
99
|
-
implementation "androidx.activity:activity-ktx:1.
|
|
99
|
+
implementation "androidx.activity:activity-ktx:1.13.0"
|
|
100
100
|
|
|
101
101
|
// Custom Tabs (Microsoft OAuth in-app browser)
|
|
102
|
-
implementation "androidx.browser:browser:1.
|
|
102
|
+
implementation "androidx.browser:browser:1.10.0"
|
|
103
103
|
|
|
104
104
|
// Google Credential Manager (One-Tap / Passkeys)
|
|
105
|
-
implementation "androidx.credentials:credentials:1.
|
|
106
|
-
implementation "androidx.credentials:credentials-play-services-auth:1.
|
|
105
|
+
implementation "androidx.credentials:credentials:1.6.0"
|
|
106
|
+
implementation "androidx.credentials:credentials-play-services-auth:1.6.0"
|
|
107
107
|
implementation "com.google.android.libraries.identity.googleid:googleid:1.2.0"
|
|
108
108
|
}
|
|
@@ -25,6 +25,7 @@ static jmethodID gRefreshMethod = nullptr;
|
|
|
25
25
|
static jmethodID gRestoreMethod = nullptr;
|
|
26
26
|
static jmethodID gHasPlayMethod = nullptr;
|
|
27
27
|
static jmethodID gLogoutMethod = nullptr;
|
|
28
|
+
static jmethodID gRevokeAccessMethod = nullptr;
|
|
28
29
|
|
|
29
30
|
// Call from JNI_OnUnload or dispose to prevent stale refs after a module reload.
|
|
30
31
|
static void clearCachedJniRefs(JNIEnv* env) {
|
|
@@ -38,13 +39,14 @@ static void clearCachedJniRefs(JNIEnv* env) {
|
|
|
38
39
|
gRestoreMethod = nullptr;
|
|
39
40
|
gHasPlayMethod = nullptr;
|
|
40
41
|
gLogoutMethod = nullptr;
|
|
42
|
+
gRevokeAccessMethod = nullptr;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
static void ensureAuthAdapterMethods(JNIEnv* env) {
|
|
44
46
|
if (gAuthAdapterClass != nullptr && gLoginMethod != nullptr
|
|
45
47
|
&& gRequestScopesMethod != nullptr && gRefreshMethod != nullptr
|
|
46
48
|
&& gRestoreMethod != nullptr && gHasPlayMethod != nullptr
|
|
47
|
-
&& gLogoutMethod != nullptr) {
|
|
49
|
+
&& gLogoutMethod != nullptr && gRevokeAccessMethod != nullptr) {
|
|
48
50
|
return;
|
|
49
51
|
}
|
|
50
52
|
|
|
@@ -61,7 +63,7 @@ static void ensureAuthAdapterMethods(JNIEnv* env) {
|
|
|
61
63
|
gLoginMethod = env->GetStaticMethodID(
|
|
62
64
|
gAuthAdapterClass,
|
|
63
65
|
"loginSync",
|
|
64
|
-
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;
|
|
66
|
+
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"
|
|
65
67
|
);
|
|
66
68
|
}
|
|
67
69
|
if (gRequestScopesMethod == nullptr) {
|
|
@@ -99,6 +101,13 @@ static void ensureAuthAdapterMethods(JNIEnv* env) {
|
|
|
99
101
|
"(Landroid/content/Context;)V"
|
|
100
102
|
);
|
|
101
103
|
}
|
|
104
|
+
if (gRevokeAccessMethod == nullptr) {
|
|
105
|
+
gRevokeAccessMethod = env->GetStaticMethodID(
|
|
106
|
+
gAuthAdapterClass,
|
|
107
|
+
"revokeAccessSync",
|
|
108
|
+
"(Landroid/content/Context;)V"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, const std::optional<LoginOptions>& options) {
|
|
@@ -127,16 +136,25 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
127
136
|
|
|
128
137
|
std::vector<std::string> scopes = {"email", "profile"};
|
|
129
138
|
std::optional<std::string> loginHint;
|
|
139
|
+
std::optional<std::string> nonce;
|
|
130
140
|
std::optional<std::string> tenant;
|
|
131
141
|
std::optional<std::string> prompt;
|
|
142
|
+
std::optional<std::string> hostedDomain;
|
|
143
|
+
std::optional<std::string> openIDRealm;
|
|
132
144
|
bool useOneTap = false;
|
|
133
145
|
bool forceAccountPicker = false;
|
|
134
146
|
bool useLegacyGoogleSignIn = false;
|
|
147
|
+
bool filterByAuthorizedAccounts = false;
|
|
148
|
+
bool forceCodeForRefreshToken = false;
|
|
149
|
+
bool requestVerifiedPhoneNumber = false;
|
|
135
150
|
|
|
136
151
|
if (options) {
|
|
137
152
|
if (options->scopes) scopes = *options->scopes;
|
|
138
153
|
loginHint = options->loginHint;
|
|
154
|
+
nonce = options->nonce;
|
|
139
155
|
tenant = options->tenant;
|
|
156
|
+
hostedDomain = options->hostedDomain;
|
|
157
|
+
openIDRealm = options->openIDRealm;
|
|
140
158
|
if (options->prompt.has_value()) {
|
|
141
159
|
switch (options->prompt.value()) {
|
|
142
160
|
case MicrosoftPrompt::LOGIN: prompt = "login"; break;
|
|
@@ -148,6 +166,9 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
148
166
|
useOneTap = options->useOneTap.value_or(false);
|
|
149
167
|
forceAccountPicker = options->forceAccountPicker.value_or(false);
|
|
150
168
|
useLegacyGoogleSignIn = options->useLegacyGoogleSignIn.value_or(false);
|
|
169
|
+
filterByAuthorizedAccounts = options->filterByAuthorizedAccounts.value_or(false);
|
|
170
|
+
forceCodeForRefreshToken = options->forceCodeForRefreshToken.value_or(false);
|
|
171
|
+
requestVerifiedPhoneNumber = options->requestVerifiedPhoneNumber.value_or(false);
|
|
151
172
|
}
|
|
152
173
|
|
|
153
174
|
JNIEnv* env = Environment::current();
|
|
@@ -170,18 +191,30 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
170
191
|
|
|
171
192
|
local_ref<JString> providerRef = make_jstring(providerStr);
|
|
172
193
|
local_ref<JString> loginHintRef;
|
|
194
|
+
local_ref<JString> nonceRef;
|
|
173
195
|
local_ref<JString> tenantRef;
|
|
174
196
|
local_ref<JString> promptRef;
|
|
197
|
+
local_ref<JString> hostedDomainRef;
|
|
198
|
+
local_ref<JString> openIDRealmRef;
|
|
175
199
|
|
|
176
200
|
if (loginHint.has_value()) {
|
|
177
201
|
loginHintRef = make_jstring(loginHint.value());
|
|
178
202
|
}
|
|
203
|
+
if (nonce.has_value()) {
|
|
204
|
+
nonceRef = make_jstring(nonce.value());
|
|
205
|
+
}
|
|
179
206
|
if (tenant.has_value()) {
|
|
180
207
|
tenantRef = make_jstring(tenant.value());
|
|
181
208
|
}
|
|
182
209
|
if (prompt.has_value()) {
|
|
183
210
|
promptRef = make_jstring(prompt.value());
|
|
184
211
|
}
|
|
212
|
+
if (hostedDomain.has_value()) {
|
|
213
|
+
hostedDomainRef = make_jstring(hostedDomain.value());
|
|
214
|
+
}
|
|
215
|
+
if (openIDRealm.has_value()) {
|
|
216
|
+
openIDRealmRef = make_jstring(openIDRealm.value());
|
|
217
|
+
}
|
|
185
218
|
|
|
186
219
|
env->CallStaticVoidMethod(gAuthAdapterClass, gLoginMethod,
|
|
187
220
|
contextPtr,
|
|
@@ -189,11 +222,17 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
189
222
|
nullptr,
|
|
190
223
|
jScopes,
|
|
191
224
|
loginHintRef.get(),
|
|
225
|
+
nonceRef.get(),
|
|
192
226
|
(jboolean)useOneTap,
|
|
193
227
|
(jboolean)forceAccountPicker,
|
|
194
228
|
(jboolean)useLegacyGoogleSignIn,
|
|
229
|
+
(jboolean)filterByAuthorizedAccounts,
|
|
230
|
+
(jboolean)forceCodeForRefreshToken,
|
|
231
|
+
(jboolean)requestVerifiedPhoneNumber,
|
|
195
232
|
tenantRef.get(),
|
|
196
|
-
promptRef.get()
|
|
233
|
+
promptRef.get(),
|
|
234
|
+
hostedDomainRef.get(),
|
|
235
|
+
openIDRealmRef.get());
|
|
197
236
|
|
|
198
237
|
env->DeleteLocalRef(jScopes);
|
|
199
238
|
env->DeleteLocalRef(stringClass);
|
|
@@ -396,13 +435,42 @@ void PlatformAuth::logout() {
|
|
|
396
435
|
}
|
|
397
436
|
}
|
|
398
437
|
|
|
438
|
+
std::shared_ptr<Promise<void>> PlatformAuth::revokeAccess() {
|
|
439
|
+
auto promise = Promise<void>::create();
|
|
440
|
+
auto contextPtr = static_cast<jobject>(AuthCache::getAndroidContext());
|
|
441
|
+
if (!contextPtr) {
|
|
442
|
+
promise->resolve();
|
|
443
|
+
return promise;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
JNIEnv* env = Environment::current();
|
|
447
|
+
try {
|
|
448
|
+
ensureAuthAdapterMethods(env);
|
|
449
|
+
} catch (...) {
|
|
450
|
+
promise->reject(std::current_exception());
|
|
451
|
+
return promise;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
env->CallStaticVoidMethod(gAuthAdapterClass, gRevokeAccessMethod, contextPtr);
|
|
455
|
+
|
|
456
|
+
if (env->ExceptionCheck()) {
|
|
457
|
+
env->ExceptionDescribe();
|
|
458
|
+
env->ExceptionClear();
|
|
459
|
+
promise->reject(std::make_exception_ptr(std::runtime_error("JNI call failed")));
|
|
460
|
+
return promise;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
promise->resolve();
|
|
464
|
+
return promise;
|
|
465
|
+
}
|
|
466
|
+
|
|
399
467
|
extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeInitialize(JNIEnv*, jclass, jobject context) {
|
|
400
468
|
AuthCache::setAndroidContext(context);
|
|
401
469
|
}
|
|
402
470
|
|
|
403
471
|
extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeOnLoginSuccess(
|
|
404
472
|
JNIEnv* env, jclass,
|
|
405
|
-
jstring origin, jstring provider, jstring email, jstring name, jstring photo, jstring idToken, jstring accessToken, jstring serverAuthCode, jobjectArray scopes, jobject expirationTime) {
|
|
473
|
+
jstring origin, jstring provider, jstring email, jstring name, jstring photo, jstring idToken, jstring accessToken, jstring serverAuthCode, jstring userId, jstring phoneNumber, jstring hostedDomain, jobjectArray scopes, jobject expirationTime) {
|
|
406
474
|
|
|
407
475
|
const char* originCStr = env->GetStringUTFChars(origin, nullptr);
|
|
408
476
|
std::string originStr(originCStr);
|
|
@@ -467,6 +535,21 @@ extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeOnLoginSuccess
|
|
|
467
535
|
user.serverAuthCode = std::string(s);
|
|
468
536
|
env->ReleaseStringUTFChars(serverAuthCode, s);
|
|
469
537
|
}
|
|
538
|
+
if (userId) {
|
|
539
|
+
const char* s = env->GetStringUTFChars(userId, nullptr);
|
|
540
|
+
user.userId = std::string(s);
|
|
541
|
+
env->ReleaseStringUTFChars(userId, s);
|
|
542
|
+
}
|
|
543
|
+
if (phoneNumber) {
|
|
544
|
+
const char* s = env->GetStringUTFChars(phoneNumber, nullptr);
|
|
545
|
+
user.phoneNumber = std::string(s);
|
|
546
|
+
env->ReleaseStringUTFChars(phoneNumber, s);
|
|
547
|
+
}
|
|
548
|
+
if (hostedDomain) {
|
|
549
|
+
const char* s = env->GetStringUTFChars(hostedDomain, nullptr);
|
|
550
|
+
user.hostedDomain = std::string(s);
|
|
551
|
+
env->ReleaseStringUTFChars(hostedDomain, s);
|
|
552
|
+
}
|
|
470
553
|
if (scopes) {
|
|
471
554
|
int len = env->GetArrayLength(scopes);
|
|
472
555
|
std::vector<std::string> scopeVec;
|