react-native-nitro-auth 0.1.4 → 0.1.5
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 +50 -0
- package/android/build.gradle +7 -2
- package/android/src/main/cpp/PlatformAuth+Android.cpp +14 -3
- package/android/src/main/java/com/auth/AuthAdapter.kt +100 -3
- package/cpp/HybridAuth.cpp +58 -13
- package/cpp/HybridAuth.hpp +8 -0
- package/cpp/PlatformAuth.hpp +2 -1
- package/ios/PlatformAuth+iOS.mm +22 -4
- package/lib/commonjs/Auth.web.js +48 -10
- package/lib/commonjs/Auth.web.js.map +1 -1
- package/lib/commonjs/AuthStorage.nitro.js +6 -0
- package/lib/commonjs/AuthStorage.nitro.js.map +1 -0
- 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/module/Auth.web.js +48 -10
- package/lib/module/Auth.web.js.map +1 -1
- package/lib/module/AuthStorage.nitro.js +4 -0
- package/lib/module/AuthStorage.nitro.js.map +1 -0
- 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/typescript/Auth.nitro.d.ts +4 -0
- package/lib/typescript/Auth.nitro.d.ts.map +1 -1
- package/lib/typescript/Auth.web.d.ts +8 -1
- package/lib/typescript/Auth.web.d.ts.map +1 -1
- package/lib/typescript/AuthStorage.nitro.d.ts +19 -0
- package/lib/typescript/AuthStorage.nitro.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +1 -0
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/nitrogen/generated/android/NitroAuth+autolinking.cmake +1 -0
- package/nitrogen/generated/shared/c++/HybridAuthSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridAuthSpec.hpp +6 -0
- package/nitrogen/generated/shared/c++/HybridAuthStorageAdapterSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridAuthStorageAdapterSpec.hpp +65 -0
- package/nitrogen/generated/shared/c++/LoginOptions.hpp +6 -2
- package/package.json +1 -1
- package/react-native-nitro-auth.podspec +1 -1
- package/src/Auth.nitro.ts +5 -0
- package/src/Auth.web.ts +71 -11
- package/src/AuthStorage.nitro.ts +17 -0
- package/src/index.ts +1 -0
- package/src/index.web.ts +1 -0
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# react-native-nitro-auth
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/react-native-nitro-auth)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nitro.margelo.com)
|
|
6
|
+
|
|
3
7
|
🚀 **High-performance, JSI-powered Authentication for React Native.**
|
|
4
8
|
|
|
5
9
|
Nitro Auth is a modern authentication library for React Native built on top of [Nitro Modules](https://github.com/mrousavy/nitro). It provides a unified, type-safe API for Google and Apple Sign-In with zero-bridge overhead.
|
|
@@ -23,6 +27,9 @@ Nitro Auth is designed to replace legacy modules like `@react-native-google-sign
|
|
|
23
27
|
- **Expo Ready**: Comes with a powerful Config Plugin for zero-config setup.
|
|
24
28
|
- **Cross-Platform**: Unified API for iOS, Android, and Web.
|
|
25
29
|
- **Auto-Refresh**: Synchronous access to tokens with automatic silent refresh.
|
|
30
|
+
- **Google One-Tap**: Modern login experience on Android using Credential Manager.
|
|
31
|
+
- **Custom Storage**: Pluggable storage adapters for secure persistence (e.g., Keychain).
|
|
32
|
+
- **Refresh Interceptors**: Listen to token updates globally.
|
|
26
33
|
|
|
27
34
|
## Installation
|
|
28
35
|
|
|
@@ -182,6 +189,49 @@ if (user?.serverAuthCode) {
|
|
|
182
189
|
}
|
|
183
190
|
```
|
|
184
191
|
|
|
192
|
+
### Custom Storage Adapter
|
|
193
|
+
|
|
194
|
+
By default, Nitro Auth uses standard local storage. You can provide a custom adapter for better security (e.g., using `react-native-keychain`):
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
import { AuthService, AuthStorageAdapter } from "react-native-nitro-auth";
|
|
198
|
+
|
|
199
|
+
const myStorage: AuthStorageAdapter = {
|
|
200
|
+
save: (key, value) => {
|
|
201
|
+
/* Save to Keychain */
|
|
202
|
+
},
|
|
203
|
+
load: (key) => {
|
|
204
|
+
/* Load from Keychain */
|
|
205
|
+
},
|
|
206
|
+
remove: (key) => {
|
|
207
|
+
/* Clear from Keychain */
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
AuthService.setStorageAdapter(myStorage);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Token Refresh Listeners
|
|
215
|
+
|
|
216
|
+
Perfect for updating your API client (e.g., Axios/Fetch) whenever tokens are refreshed in the background:
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
AuthService.onTokensRefreshed((tokens) => {
|
|
220
|
+
console.log("Tokens were updated!", tokens.accessToken);
|
|
221
|
+
apiClient.defaults.headers.common[
|
|
222
|
+
"Authorization"
|
|
223
|
+
] = `Bearer ${tokens.accessToken}`;
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Google One-Tap (Android)
|
|
228
|
+
|
|
229
|
+
Explicitly enable the modern One-Tap flow on Android:
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
await login("google", { useOneTap: true });
|
|
233
|
+
```
|
|
234
|
+
|
|
185
235
|
## API Reference
|
|
186
236
|
|
|
187
237
|
### useAuth Hook
|
package/android/build.gradle
CHANGED
|
@@ -89,12 +89,17 @@ repositories {
|
|
|
89
89
|
|
|
90
90
|
dependencies {
|
|
91
91
|
implementation "com.facebook.react:react-native:+"
|
|
92
|
-
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.
|
|
92
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.24"
|
|
93
93
|
implementation project(":react-native-nitro-modules")
|
|
94
94
|
|
|
95
95
|
// Google Sign-In SDK (full scope support)
|
|
96
|
-
implementation "com.google.android.gms:play-services-auth:21.
|
|
96
|
+
implementation "com.google.android.gms:play-services-auth:21.2.0"
|
|
97
97
|
|
|
98
98
|
// Activity result APIs
|
|
99
99
|
implementation "androidx.activity:activity-ktx:1.9.3"
|
|
100
|
+
|
|
101
|
+
// Google Credential Manager (One-Tap / Passkeys)
|
|
102
|
+
implementation "androidx.credentials:credentials:1.5.0"
|
|
103
|
+
implementation "androidx.credentials:credentials-play-services-auth:1.5.0"
|
|
104
|
+
implementation "com.google.android.libraries.identity.googleid:googleid:1.1.1"
|
|
100
105
|
}
|
|
@@ -24,7 +24,7 @@ static std::shared_ptr<Promise<AuthTokens>> gRefreshPromise;
|
|
|
24
24
|
static std::shared_ptr<Promise<std::optional<AuthUser>>> gSilentPromise;
|
|
25
25
|
static std::mutex gMutex;
|
|
26
26
|
|
|
27
|
-
std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, const std::
|
|
27
|
+
std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, const std::optional<LoginOptions>& options) {
|
|
28
28
|
auto promise = Promise<AuthUser>::create();
|
|
29
29
|
auto contextPtr = static_cast<jobject>(AuthCache::getAndroidContext());
|
|
30
30
|
if (!contextPtr) {
|
|
@@ -38,6 +38,16 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
std::string providerStr = (provider == AuthProvider::GOOGLE) ? "google" : "apple";
|
|
41
|
+
std::vector<std::string> scopes = {"email", "profile"};
|
|
42
|
+
std::optional<std::string> loginHint;
|
|
43
|
+
bool useOneTap = false;
|
|
44
|
+
|
|
45
|
+
if (options) {
|
|
46
|
+
if (options->scopes) scopes = *options->scopes;
|
|
47
|
+
loginHint = options->loginHint;
|
|
48
|
+
useOneTap = options->useOneTap.value_or(false);
|
|
49
|
+
}
|
|
50
|
+
|
|
41
51
|
JNIEnv* env = Environment::current();
|
|
42
52
|
jclass stringClass = env->FindClass("java/lang/String");
|
|
43
53
|
jobjectArray jScopes = env->NewObjectArray(scopes.size(), stringClass, nullptr);
|
|
@@ -48,13 +58,14 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
48
58
|
jstring jLoginHint = loginHint.has_value() ? make_jstring(loginHint.value()).get() : nullptr;
|
|
49
59
|
jclass adapterClass = env->FindClass("com/auth/AuthAdapter");
|
|
50
60
|
jmethodID loginMethod = env->GetStaticMethodID(adapterClass, "loginSync",
|
|
51
|
-
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V");
|
|
61
|
+
"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Z)V");
|
|
52
62
|
env->CallStaticVoidMethod(adapterClass, loginMethod,
|
|
53
63
|
contextPtr,
|
|
54
64
|
make_jstring(providerStr).get(),
|
|
55
65
|
nullptr,
|
|
56
66
|
jScopes,
|
|
57
|
-
jLoginHint
|
|
67
|
+
jLoginHint,
|
|
68
|
+
(jboolean)useOneTap);
|
|
58
69
|
|
|
59
70
|
return promise;
|
|
60
71
|
}
|
|
@@ -10,12 +10,23 @@ import com.google.android.gms.auth.api.signin.GoogleSignInOptions
|
|
|
10
10
|
import com.google.android.gms.common.GoogleApiAvailability
|
|
11
11
|
import com.google.android.gms.common.ConnectionResult
|
|
12
12
|
import com.google.android.gms.common.api.Scope
|
|
13
|
+
import androidx.credentials.CredentialManager
|
|
14
|
+
import androidx.credentials.GetCredentialRequest
|
|
15
|
+
import androidx.credentials.GetCredentialResponse
|
|
16
|
+
import com.google.android.libraries.identity.googleid.GetGoogleIdOption
|
|
17
|
+
import com.google.android.libraries.identity.googleid.GoogleIdTokenCredential
|
|
18
|
+
import kotlinx.coroutines.CoroutineScope
|
|
19
|
+
import kotlinx.coroutines.Dispatchers
|
|
20
|
+
import kotlinx.coroutines.launch
|
|
21
|
+
import android.app.Activity
|
|
22
|
+
import android.app.Application
|
|
13
23
|
|
|
14
24
|
object AuthAdapter {
|
|
15
25
|
private const val TAG = "AuthAdapter"
|
|
16
26
|
private const val PREF_NAME = "nitro_auth"
|
|
17
27
|
|
|
18
28
|
private var appContext: Context? = null
|
|
29
|
+
private var currentActivity: Activity? = null
|
|
19
30
|
private var googleSignInClient: GoogleSignInClient? = null
|
|
20
31
|
private var pendingScopes: List<String> = emptyList()
|
|
21
32
|
|
|
@@ -45,7 +56,19 @@ object AuthAdapter {
|
|
|
45
56
|
private external fun nativeOnRefreshError(error: String)
|
|
46
57
|
|
|
47
58
|
fun initialize(context: Context) {
|
|
48
|
-
|
|
59
|
+
val app = context.applicationContext as? Application
|
|
60
|
+
appContext = app
|
|
61
|
+
|
|
62
|
+
app?.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {
|
|
63
|
+
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { currentActivity = activity }
|
|
64
|
+
override fun onActivityStarted(activity: Activity) { currentActivity = activity }
|
|
65
|
+
override fun onActivityResumed(activity: Activity) { currentActivity = activity }
|
|
66
|
+
override fun onActivityPaused(activity: Activity) { if (currentActivity == activity) currentActivity = null }
|
|
67
|
+
override fun onActivityStopped(activity: Activity) { if (currentActivity == activity) currentActivity = null }
|
|
68
|
+
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
|
|
69
|
+
override fun onActivityDestroyed(activity: Activity) { if (currentActivity == activity) currentActivity = null }
|
|
70
|
+
})
|
|
71
|
+
|
|
49
72
|
try {
|
|
50
73
|
System.loadLibrary("NitroAuth")
|
|
51
74
|
nativeInitialize(appContext!!)
|
|
@@ -73,7 +96,7 @@ object AuthAdapter {
|
|
|
73
96
|
}
|
|
74
97
|
|
|
75
98
|
@JvmStatic
|
|
76
|
-
fun loginSync(context: Context, provider: String, googleClientId: String?, scopes: Array<String>?, loginHint: String
|
|
99
|
+
fun loginSync(context: Context, provider: String, googleClientId: String?, scopes: Array<String>?, loginHint: String?, useOneTap: Boolean) {
|
|
77
100
|
if (provider == "apple") {
|
|
78
101
|
nativeOnLoginError("Apple Sign-In is not supported on Android.")
|
|
79
102
|
return
|
|
@@ -94,10 +117,84 @@ object AuthAdapter {
|
|
|
94
117
|
val requestedScopes = scopes?.toList() ?: listOf("email", "profile")
|
|
95
118
|
pendingScopes = requestedScopes
|
|
96
119
|
|
|
97
|
-
|
|
120
|
+
if (useOneTap) {
|
|
121
|
+
loginOneTap(context, clientId, requestedScopes)
|
|
122
|
+
} else {
|
|
123
|
+
val intent = GoogleSignInActivity.createIntent(ctx, clientId, requestedScopes.toTypedArray(), loginHint)
|
|
124
|
+
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
125
|
+
ctx.startActivity(intent)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private fun loginOneTap(context: Context, clientId: String, scopes: List<String>) {
|
|
130
|
+
val activity = currentActivity ?: context as? Activity
|
|
131
|
+
if (activity == null) {
|
|
132
|
+
Log.w(TAG, "No Activity context available for One-Tap, falling back to legacy")
|
|
133
|
+
return loginLegacy(context, clientId, scopes)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
val credentialManager = CredentialManager.create(activity)
|
|
137
|
+
val googleIdOption = GetGoogleIdOption.Builder()
|
|
138
|
+
.setFilterByAuthorizedAccounts(false)
|
|
139
|
+
.setServerClientId(clientId)
|
|
140
|
+
.setAutoSelectEnabled(false) // Disable auto-select for testing so the sheet always shows
|
|
141
|
+
.build()
|
|
142
|
+
|
|
143
|
+
val request = GetCredentialRequest.Builder()
|
|
144
|
+
.addCredentialOption(googleIdOption)
|
|
145
|
+
.build()
|
|
146
|
+
|
|
147
|
+
CoroutineScope(Dispatchers.Main).launch {
|
|
148
|
+
try {
|
|
149
|
+
val result = credentialManager.getCredential(context = activity, request = request)
|
|
150
|
+
handleCredentialResponse(result, scopes)
|
|
151
|
+
} catch (e: Exception) {
|
|
152
|
+
Log.w(TAG, "One-Tap failed, falling back to legacy: ${e.message}")
|
|
153
|
+
loginLegacy(context, clientId, scopes)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
private fun loginLegacy(context: Context, clientId: String, scopes: List<String>) {
|
|
159
|
+
val ctx = appContext ?: context.applicationContext
|
|
160
|
+
val intent = GoogleSignInActivity.createIntent(ctx, clientId, scopes.toTypedArray(), null)
|
|
161
|
+
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
98
162
|
ctx.startActivity(intent)
|
|
99
163
|
}
|
|
100
164
|
|
|
165
|
+
private fun handleCredentialResponse(response: GetCredentialResponse, scopes: List<String>) {
|
|
166
|
+
val credential = response.credential
|
|
167
|
+
val googleIdTokenCredential = try {
|
|
168
|
+
if (credential is GoogleIdTokenCredential) {
|
|
169
|
+
credential
|
|
170
|
+
} else if (credential.type == "com.google.android.libraries.identity.googleid.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL") {
|
|
171
|
+
GoogleIdTokenCredential.createFrom(credential.data)
|
|
172
|
+
} else {
|
|
173
|
+
null
|
|
174
|
+
}
|
|
175
|
+
} catch (e: Exception) {
|
|
176
|
+
Log.e(TAG, "Failed to parse Google ID token credential: ${e.message}")
|
|
177
|
+
null
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (googleIdTokenCredential != null) {
|
|
181
|
+
nativeOnLoginSuccess(
|
|
182
|
+
"google",
|
|
183
|
+
googleIdTokenCredential.id,
|
|
184
|
+
googleIdTokenCredential.displayName,
|
|
185
|
+
googleIdTokenCredential.profilePictureUri?.toString(),
|
|
186
|
+
googleIdTokenCredential.idToken,
|
|
187
|
+
null,
|
|
188
|
+
null,
|
|
189
|
+
scopes.toTypedArray(),
|
|
190
|
+
null
|
|
191
|
+
)
|
|
192
|
+
} else {
|
|
193
|
+
Log.w(TAG, "Unsupported credential type: ${credential.type}")
|
|
194
|
+
nativeOnLoginError("Unsupported credential type: ${credential.type}")
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
101
198
|
@JvmStatic
|
|
102
199
|
fun requestScopesSync(context: Context, scopes: Array<String>) {
|
|
103
200
|
val ctx = appContext ?: context.applicationContext
|
package/cpp/HybridAuth.cpp
CHANGED
|
@@ -29,7 +29,14 @@ bool HybridAuth::getHasPlayServices() {
|
|
|
29
29
|
|
|
30
30
|
void HybridAuth::loadFromCache() {
|
|
31
31
|
std::lock_guard<std::mutex> lock(_mutex);
|
|
32
|
-
|
|
32
|
+
std::optional<std::string> json;
|
|
33
|
+
|
|
34
|
+
if (_storageAdapter) {
|
|
35
|
+
json = _storageAdapter->load("nitro_auth_user");
|
|
36
|
+
} else {
|
|
37
|
+
json = AuthCache::getUserJson();
|
|
38
|
+
}
|
|
39
|
+
|
|
33
40
|
if (json) {
|
|
34
41
|
_currentUser = JSONSerializer::deserialize(*json);
|
|
35
42
|
if (_currentUser && _currentUser->scopes) {
|
|
@@ -41,9 +48,17 @@ void HybridAuth::loadFromCache() {
|
|
|
41
48
|
void HybridAuth::saveToCache(const std::optional<AuthUser>& user) {
|
|
42
49
|
if (user) {
|
|
43
50
|
auto json = JSONSerializer::serialize(*user);
|
|
44
|
-
|
|
51
|
+
if (_storageAdapter) {
|
|
52
|
+
_storageAdapter->save("nitro_auth_user", json);
|
|
53
|
+
} else {
|
|
54
|
+
AuthCache::setUserJson(json);
|
|
55
|
+
}
|
|
45
56
|
} else {
|
|
46
|
-
|
|
57
|
+
if (_storageAdapter) {
|
|
58
|
+
_storageAdapter->remove("nitro_auth_user");
|
|
59
|
+
} else {
|
|
60
|
+
AuthCache::clear();
|
|
61
|
+
}
|
|
47
62
|
}
|
|
48
63
|
}
|
|
49
64
|
|
|
@@ -73,6 +88,17 @@ std::function<void()> HybridAuth::onAuthStateChanged(const std::function<void(co
|
|
|
73
88
|
};
|
|
74
89
|
}
|
|
75
90
|
|
|
91
|
+
std::function<void()> HybridAuth::onTokensRefreshed(const std::function<void(const AuthTokens&)>& callback) {
|
|
92
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
|
93
|
+
int id = _nextTokenListenerId++;
|
|
94
|
+
_tokenListeners[id] = callback;
|
|
95
|
+
|
|
96
|
+
return [this, id]() {
|
|
97
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
|
98
|
+
_tokenListeners.erase(id);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
76
102
|
void HybridAuth::logout() {
|
|
77
103
|
{
|
|
78
104
|
std::lock_guard<std::mutex> lock(_mutex);
|
|
@@ -86,20 +112,16 @@ void HybridAuth::logout() {
|
|
|
86
112
|
|
|
87
113
|
std::shared_ptr<Promise<void>> HybridAuth::login(AuthProvider provider, const std::optional<LoginOptions>& options) {
|
|
88
114
|
auto promise = Promise<void>::create();
|
|
89
|
-
std::vector<std::string> scopes;
|
|
90
|
-
std::optional<std::string> loginHint;
|
|
91
|
-
if (options) {
|
|
92
|
-
if (options->scopes) scopes = *options->scopes;
|
|
93
|
-
loginHint = options->loginHint;
|
|
94
|
-
}
|
|
95
115
|
|
|
96
|
-
auto loginPromise = PlatformAuth::login(provider,
|
|
97
|
-
loginPromise->addOnResolvedListener([this, promise,
|
|
116
|
+
auto loginPromise = PlatformAuth::login(provider, options);
|
|
117
|
+
loginPromise->addOnResolvedListener([this, promise, options](const AuthUser& user) {
|
|
98
118
|
{
|
|
99
119
|
std::lock_guard<std::mutex> lock(_mutex);
|
|
100
120
|
_currentUser = user;
|
|
101
|
-
|
|
102
|
-
|
|
121
|
+
if (options && options->scopes) {
|
|
122
|
+
_grantedScopes = *options->scopes;
|
|
123
|
+
}
|
|
124
|
+
if (_currentUser) _currentUser->scopes = _grantedScopes;
|
|
103
125
|
saveToCache(_currentUser);
|
|
104
126
|
}
|
|
105
127
|
notifyAuthStateChanged();
|
|
@@ -202,6 +224,7 @@ std::shared_ptr<Promise<AuthTokens>> HybridAuth::refreshToken() {
|
|
|
202
224
|
saveToCache(_currentUser);
|
|
203
225
|
}
|
|
204
226
|
}
|
|
227
|
+
notifyTokensRefreshed(tokens);
|
|
205
228
|
notifyAuthStateChanged();
|
|
206
229
|
promise->resolve(tokens);
|
|
207
230
|
});
|
|
@@ -216,4 +239,26 @@ void HybridAuth::setLoggingEnabled(bool enabled) {
|
|
|
216
239
|
sLoggingEnabled = enabled;
|
|
217
240
|
}
|
|
218
241
|
|
|
242
|
+
void HybridAuth::setStorageAdapter(const std::optional<std::shared_ptr<HybridAuthStorageAdapterSpec>>& adapter) {
|
|
243
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
|
244
|
+
_storageAdapter = adapter.value_or(nullptr);
|
|
245
|
+
if (_storageAdapter) {
|
|
246
|
+
loadFromCache();
|
|
247
|
+
notifyAuthStateChanged();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
void HybridAuth::notifyTokensRefreshed(const AuthTokens& tokens) {
|
|
252
|
+
std::vector<std::function<void(const AuthTokens&)>> listeners;
|
|
253
|
+
{
|
|
254
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
|
255
|
+
for (auto const& [id, listener] : _tokenListeners) {
|
|
256
|
+
listeners.push_back(listener);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
for (const auto& listener : listeners) {
|
|
260
|
+
listener(tokens);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
219
264
|
} // namespace margelo::nitro::NitroAuth
|
package/cpp/HybridAuth.hpp
CHANGED
|
@@ -28,18 +28,26 @@ public:
|
|
|
28
28
|
|
|
29
29
|
void logout() override;
|
|
30
30
|
std::function<void()> onAuthStateChanged(const std::function<void(const std::optional<AuthUser>&)>& callback) override;
|
|
31
|
+
std::function<void()> onTokensRefreshed(const std::function<void(const AuthTokens&)>& callback) override;
|
|
31
32
|
void setLoggingEnabled(bool enabled) override;
|
|
33
|
+
void setStorageAdapter(const std::optional<std::shared_ptr<HybridAuthStorageAdapterSpec>>& adapter) override;
|
|
32
34
|
|
|
33
35
|
private:
|
|
34
36
|
void loadFromCache();
|
|
35
37
|
void saveToCache(const std::optional<AuthUser>& user);
|
|
36
38
|
void notifyAuthStateChanged();
|
|
39
|
+
void notifyTokensRefreshed(const AuthTokens& tokens);
|
|
37
40
|
|
|
38
41
|
private:
|
|
39
42
|
std::optional<AuthUser> _currentUser;
|
|
40
43
|
std::vector<std::string> _grantedScopes;
|
|
41
44
|
std::map<int, std::function<void(const std::optional<AuthUser>&)>> _listeners;
|
|
42
45
|
int _nextListenerId = 0;
|
|
46
|
+
|
|
47
|
+
std::shared_ptr<HybridAuthStorageAdapterSpec> _storageAdapter;
|
|
48
|
+
std::map<int, std::function<void(const AuthTokens&)>> _tokenListeners;
|
|
49
|
+
int _nextTokenListenerId = 0;
|
|
50
|
+
|
|
43
51
|
std::mutex _mutex;
|
|
44
52
|
|
|
45
53
|
static constexpr auto TAG = "Auth";
|
package/cpp/PlatformAuth.hpp
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#include "AuthProvider.hpp"
|
|
4
4
|
#include "AuthUser.hpp"
|
|
5
5
|
#include "AuthTokens.hpp"
|
|
6
|
+
#include "LoginOptions.hpp"
|
|
6
7
|
#include <NitroModules/Promise.hpp>
|
|
7
8
|
#include <memory>
|
|
8
9
|
#include <vector>
|
|
@@ -14,7 +15,7 @@ using namespace margelo::nitro;
|
|
|
14
15
|
|
|
15
16
|
class PlatformAuth {
|
|
16
17
|
public:
|
|
17
|
-
static std::shared_ptr<Promise<AuthUser>> login(AuthProvider provider, const std::
|
|
18
|
+
static std::shared_ptr<Promise<AuthUser>> login(AuthProvider provider, const std::optional<LoginOptions>& options = std::nullopt);
|
|
18
19
|
static std::shared_ptr<Promise<AuthUser>> requestScopes(const std::vector<std::string>& scopes);
|
|
19
20
|
static std::shared_ptr<Promise<AuthTokens>> refreshToken();
|
|
20
21
|
static std::shared_ptr<Promise<std::optional<AuthUser>>> silentRestore();
|
package/ios/PlatformAuth+iOS.mm
CHANGED
|
@@ -11,14 +11,32 @@
|
|
|
11
11
|
#import "react_native_nitro_auth-Swift.h"
|
|
12
12
|
#endif
|
|
13
13
|
|
|
14
|
+
#include "LoginOptions.hpp"
|
|
15
|
+
|
|
14
16
|
namespace margelo::nitro::NitroAuth {
|
|
15
17
|
|
|
16
|
-
std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, const std::
|
|
18
|
+
std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, const std::optional<LoginOptions>& options) {
|
|
17
19
|
auto promise = Promise<AuthUser>::create();
|
|
18
20
|
NSString* providerStr = provider == AuthProvider::GOOGLE ? @"google" : @"apple";
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
NSString* hintStr =
|
|
21
|
+
|
|
22
|
+
NSMutableArray* scopesArray = [NSMutableArray array];
|
|
23
|
+
NSString* hintStr = nil;
|
|
24
|
+
|
|
25
|
+
if (options.has_value()) {
|
|
26
|
+
if (options->scopes.has_value()) {
|
|
27
|
+
for (const auto& scope : *options->scopes) {
|
|
28
|
+
[scopesArray addObject:[NSString stringWithUTF8String:scope.c_str()]];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (options->loginHint.has_value()) {
|
|
32
|
+
hintStr = [NSString stringWithUTF8String:options->loginHint->c_str()];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Default scopes if none provided
|
|
37
|
+
if (scopesArray.count == 0) {
|
|
38
|
+
[scopesArray addObjectsFromArray:@[@"openid", @"email", @"profile"]];
|
|
39
|
+
}
|
|
22
40
|
|
|
23
41
|
[AuthAdapter loginWithProvider:providerStr scopes:scopesArray loginHint:hintStr completion:^(NSDictionary* _Nullable data, NSString* _Nullable error) {
|
|
24
42
|
if (error != nil) {
|
package/lib/commonjs/Auth.web.js
CHANGED
|
@@ -19,24 +19,35 @@ const getConfig = () => {
|
|
|
19
19
|
class AuthWeb {
|
|
20
20
|
_grantedScopes = [];
|
|
21
21
|
_listeners = [];
|
|
22
|
+
_tokenListeners = [];
|
|
22
23
|
constructor() {
|
|
23
|
-
|
|
24
|
+
this.loadFromCache();
|
|
25
|
+
}
|
|
26
|
+
loadFromCache() {
|
|
27
|
+
const cached = this._storageAdapter ? this._storageAdapter.load(CACHE_KEY) : localStorage.getItem(CACHE_KEY);
|
|
24
28
|
if (cached) {
|
|
25
29
|
try {
|
|
26
30
|
this._currentUser = JSON.parse(cached);
|
|
27
31
|
} catch {
|
|
28
|
-
|
|
32
|
+
this.removeFromCache(CACHE_KEY);
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
|
-
const scopes = localStorage.getItem(SCOPES_KEY);
|
|
35
|
+
const scopes = this._storageAdapter ? this._storageAdapter.load(SCOPES_KEY) : localStorage.getItem(SCOPES_KEY);
|
|
32
36
|
if (scopes) {
|
|
33
37
|
try {
|
|
34
38
|
this._grantedScopes = JSON.parse(scopes);
|
|
35
39
|
} catch {
|
|
36
|
-
|
|
40
|
+
this.removeFromCache(SCOPES_KEY);
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
}
|
|
44
|
+
removeFromCache(key) {
|
|
45
|
+
if (this._storageAdapter) {
|
|
46
|
+
this._storageAdapter.remove(key);
|
|
47
|
+
} else {
|
|
48
|
+
localStorage.removeItem(key);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
40
51
|
get currentUser() {
|
|
41
52
|
return this._currentUser;
|
|
42
53
|
}
|
|
@@ -53,6 +64,12 @@ class AuthWeb {
|
|
|
53
64
|
this._listeners = this._listeners.filter(l => l !== callback);
|
|
54
65
|
};
|
|
55
66
|
}
|
|
67
|
+
onTokensRefreshed(callback) {
|
|
68
|
+
this._tokenListeners.push(callback);
|
|
69
|
+
return () => {
|
|
70
|
+
this._tokenListeners = this._tokenListeners.filter(l => l !== callback);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
56
73
|
notify() {
|
|
57
74
|
this._listeners.forEach(l => l(this._currentUser));
|
|
58
75
|
}
|
|
@@ -93,7 +110,11 @@ class AuthWeb {
|
|
|
93
110
|
async revokeScopes(scopes) {
|
|
94
111
|
_logger.logger.log("Revoking scopes:", scopes);
|
|
95
112
|
this._grantedScopes = this._grantedScopes.filter(s => !scopes.includes(s));
|
|
96
|
-
|
|
113
|
+
if (this._storageAdapter) {
|
|
114
|
+
this._storageAdapter.save(SCOPES_KEY, JSON.stringify(this._grantedScopes));
|
|
115
|
+
} else {
|
|
116
|
+
localStorage.setItem(SCOPES_KEY, JSON.stringify(this._grantedScopes));
|
|
117
|
+
}
|
|
97
118
|
if (this._currentUser) {
|
|
98
119
|
this._currentUser.scopes = this._grantedScopes;
|
|
99
120
|
this.updateUser(this._currentUser);
|
|
@@ -118,10 +139,12 @@ class AuthWeb {
|
|
|
118
139
|
}
|
|
119
140
|
_logger.logger.log("Refreshing tokens...");
|
|
120
141
|
await this.loginGoogle(this._grantedScopes.length > 0 ? this._grantedScopes : DEFAULT_SCOPES);
|
|
121
|
-
|
|
142
|
+
const tokens = {
|
|
122
143
|
accessToken: this._currentUser.accessToken,
|
|
123
144
|
idToken: this._currentUser.idToken
|
|
124
145
|
};
|
|
146
|
+
this._tokenListeners.forEach(l => l(tokens));
|
|
147
|
+
return tokens;
|
|
125
148
|
}
|
|
126
149
|
mapError(error) {
|
|
127
150
|
if (error instanceof Error) {
|
|
@@ -192,7 +215,11 @@ class AuthWeb {
|
|
|
192
215
|
const code = params.get("code");
|
|
193
216
|
if (idToken) {
|
|
194
217
|
this._grantedScopes = scopes;
|
|
195
|
-
|
|
218
|
+
if (this._storageAdapter) {
|
|
219
|
+
this._storageAdapter.save(SCOPES_KEY, JSON.stringify(scopes));
|
|
220
|
+
} else {
|
|
221
|
+
localStorage.setItem(SCOPES_KEY, JSON.stringify(scopes));
|
|
222
|
+
}
|
|
196
223
|
const user = {
|
|
197
224
|
provider: "google",
|
|
198
225
|
idToken,
|
|
@@ -264,18 +291,29 @@ class AuthWeb {
|
|
|
264
291
|
logout() {
|
|
265
292
|
this._currentUser = undefined;
|
|
266
293
|
this._grantedScopes = [];
|
|
267
|
-
|
|
268
|
-
|
|
294
|
+
this.removeFromCache(CACHE_KEY);
|
|
295
|
+
this.removeFromCache(SCOPES_KEY);
|
|
269
296
|
this.notify();
|
|
270
297
|
}
|
|
271
298
|
updateUser(user) {
|
|
272
299
|
this._currentUser = user;
|
|
273
|
-
|
|
300
|
+
if (this._storageAdapter) {
|
|
301
|
+
this._storageAdapter.save(CACHE_KEY, JSON.stringify(user));
|
|
302
|
+
} else {
|
|
303
|
+
localStorage.setItem(CACHE_KEY, JSON.stringify(user));
|
|
304
|
+
}
|
|
274
305
|
this.notify();
|
|
275
306
|
}
|
|
276
307
|
setLoggingEnabled(enabled) {
|
|
277
308
|
_logger.logger.setEnabled(enabled);
|
|
278
309
|
}
|
|
310
|
+
setStorageAdapter(adapter) {
|
|
311
|
+
this._storageAdapter = adapter;
|
|
312
|
+
if (adapter) {
|
|
313
|
+
this.loadFromCache();
|
|
314
|
+
this.notify();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
279
317
|
name = "Auth";
|
|
280
318
|
dispose() {}
|
|
281
319
|
equals(other) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_logger","require","CACHE_KEY","SCOPES_KEY","DEFAULT_SCOPES","getConfig","Constants","default","expoConfig","extra","AuthWeb","_grantedScopes","_listeners","constructor","cached","localStorage","getItem","_currentUser","JSON","parse","removeItem","scopes","currentUser","grantedScopes","hasPlayServices","onAuthStateChanged","callback","push","filter","l","notify","forEach","login","provider","options","loginHint","logger","log","loginGoogle","loginApple","e","error","mapError","message","requestScopes","Error","newScopes","Set","catch","revokeScopes","s","includes","setItem","stringify","updateUser","getAccessToken","expirationTime","now","Date","refreshToken","accessToken","length","idToken","msg","toLowerCase","String","config","clientId","googleWebClientId","Promise","resolve","reject","redirectUri","window","location","origin","authUrl","URL","searchParams","set","join","Math","random","toString","slice","width","height","left","screenX","outerWidth","top","screenY","outerHeight","popup","open","checkInterval","setInterval","closed","clearInterval","url","href","startsWith","close","hash","params","URLSearchParams","get","expiresIn","code","user","undefined","serverAuthCode","parseInt","decodeGoogleJwt","token","payload","split","decoded","atob","email","name","photo","picture","appleWebClientId","script","document","createElement","src","async","onload","AppleID","auth","init","scope","redirectURI","usePopup","signIn","then","response","authorization","id_token","firstName","lastName","trim","onerror","head","appendChild","logout","setLoggingEnabled","enabled","setEnabled","dispose","equals","other","AuthModule","exports"],"sourceRoot":"../../src","sources":["Auth.web.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_logger","require","CACHE_KEY","SCOPES_KEY","DEFAULT_SCOPES","getConfig","Constants","default","expoConfig","extra","AuthWeb","_grantedScopes","_listeners","_tokenListeners","constructor","loadFromCache","cached","_storageAdapter","load","localStorage","getItem","_currentUser","JSON","parse","removeFromCache","scopes","key","remove","removeItem","currentUser","grantedScopes","hasPlayServices","onAuthStateChanged","callback","push","filter","l","onTokensRefreshed","notify","forEach","login","provider","options","loginHint","logger","log","loginGoogle","loginApple","e","error","mapError","message","requestScopes","Error","newScopes","Set","catch","revokeScopes","s","includes","save","stringify","setItem","updateUser","getAccessToken","expirationTime","now","Date","refreshToken","accessToken","length","tokens","idToken","msg","toLowerCase","String","config","clientId","googleWebClientId","Promise","resolve","reject","redirectUri","window","location","origin","authUrl","URL","searchParams","set","join","Math","random","toString","slice","width","height","left","screenX","outerWidth","top","screenY","outerHeight","popup","open","checkInterval","setInterval","closed","clearInterval","url","href","startsWith","close","hash","params","URLSearchParams","get","expiresIn","code","user","undefined","serverAuthCode","parseInt","decodeGoogleJwt","token","payload","split","decoded","atob","email","name","photo","picture","appleWebClientId","script","document","createElement","src","async","onload","AppleID","auth","init","scope","redirectURI","usePopup","signIn","then","response","authorization","id_token","firstName","lastName","trim","onerror","head","appendChild","logout","setLoggingEnabled","enabled","setEnabled","setStorageAdapter","adapter","dispose","equals","other","AuthModule","exports"],"sourceRoot":"../../src","sources":["Auth.web.ts"],"mappings":"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","ignoreList":[]}
|