react-native-nitro-auth 0.1.0 → 0.1.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 +20 -16
- package/android/src/main/cpp/PlatformAuth+Android.cpp +6 -1
- package/android/src/main/java/com/auth/AuthAdapter.kt +12 -29
- package/android/src/main/java/com/auth/GoogleSignInActivity.kt +1 -0
- package/cpp/JSONSerializer.hpp +2 -0
- package/ios/AuthAdapter.swift +3 -0
- package/ios/PlatformAuth+iOS.mm +3 -0
- package/lib/typescript/Auth.nitro.d.ts +1 -0
- package/lib/typescript/Auth.nitro.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/AuthUser.hpp +5 -1
- package/package.json +1 -1
- package/src/Auth.nitro.ts +1 -0
package/README.md
CHANGED
|
@@ -168,31 +168,35 @@ await requestScopes(["https://www.googleapis.com/auth/calendar.readonly"]);
|
|
|
168
168
|
console.log("Granted:", scopes);
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
-
###
|
|
171
|
+
### Offline Access (Server Auth Code)
|
|
172
172
|
|
|
173
|
-
|
|
173
|
+
If you need to access Google APIs from your backend (e.g., Google Calendar integration), you can use the `serverAuthCode`. This code is returned during login and can be exchanged for tokens on your server:
|
|
174
174
|
|
|
175
175
|
```ts
|
|
176
|
-
const
|
|
177
|
-
|
|
176
|
+
const { user } = useAuth();
|
|
177
|
+
|
|
178
|
+
if (user?.serverAuthCode) {
|
|
179
|
+
// Send this to your backend!
|
|
180
|
+
await api.verifyGoogleAccess(user.serverAuthCode);
|
|
181
|
+
}
|
|
178
182
|
```
|
|
179
183
|
|
|
180
184
|
## API Reference
|
|
181
185
|
|
|
182
186
|
### useAuth Hook
|
|
183
187
|
|
|
184
|
-
| Property | Type | Description
|
|
185
|
-
| ----------------- | --------------------------------- |
|
|
186
|
-
| `user` | `AuthUser \| undefined` | Current authenticated user
|
|
187
|
-
| `scopes` | `string[]` | Currently granted OAuth scopes
|
|
188
|
-
| `loading` | `boolean` | True during auth operations
|
|
189
|
-
| `error` | `Error \| undefined` | Last error that occurred
|
|
190
|
-
| `hasPlayServices` | `boolean` | (Android) True if Play Services available
|
|
191
|
-
| `login` | `(provider, options?) => Promise` | Start login flow
|
|
192
|
-
| `logout` | `() => void` | Clear session (synchronous)
|
|
193
|
-
| `requestScopes` | `(scopes) => Promise` | Request additional OAuth scopes
|
|
194
|
-
| `getAccessToken` | `() => Promise<string?>` | Get current access token (auto-refreshes)
|
|
195
|
-
| `refreshToken` | `() => Promise<AuthTokens>` | Explicitly refresh and return new tokens
|
|
188
|
+
| Property | Type | Description |
|
|
189
|
+
| ----------------- | --------------------------------- | ------------------------------------------------------ |
|
|
190
|
+
| `user` | `AuthUser \| undefined` | Current authenticated user (includes `serverAuthCode`) |
|
|
191
|
+
| `scopes` | `string[]` | Currently granted OAuth scopes |
|
|
192
|
+
| `loading` | `boolean` | True during auth operations |
|
|
193
|
+
| `error` | `Error \| undefined` | Last error that occurred |
|
|
194
|
+
| `hasPlayServices` | `boolean` | (Android) True if Play Services available |
|
|
195
|
+
| `login` | `(provider, options?) => Promise` | Start login flow |
|
|
196
|
+
| `logout` | `() => void` | Clear session (synchronous) |
|
|
197
|
+
| `requestScopes` | `(scopes) => Promise` | Request additional OAuth scopes |
|
|
198
|
+
| `getAccessToken` | `() => Promise<string?>` | Get current access token (auto-refreshes) |
|
|
199
|
+
| `refreshToken` | `() => Promise<AuthTokens>` | Explicitly refresh and return new tokens |
|
|
196
200
|
|
|
197
201
|
### SocialButton Props
|
|
198
202
|
|
|
@@ -148,7 +148,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeInitialize(JNI
|
|
|
148
148
|
|
|
149
149
|
extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeOnLoginSuccess(
|
|
150
150
|
JNIEnv* env, jclass,
|
|
151
|
-
jstring provider, jstring email, jstring name, jstring photo, jstring idToken, jstring accessToken, jobjectArray scopes, jobject expirationTime) {
|
|
151
|
+
jstring provider, jstring email, jstring name, jstring photo, jstring idToken, jstring accessToken, jstring serverAuthCode, jobjectArray scopes, jobject expirationTime) {
|
|
152
152
|
|
|
153
153
|
std::shared_ptr<Promise<AuthUser>> loginPromise;
|
|
154
154
|
std::shared_ptr<Promise<AuthUser>> scopesPromise;
|
|
@@ -193,6 +193,11 @@ extern "C" JNIEXPORT void JNICALL Java_com_auth_AuthAdapter_nativeOnLoginSuccess
|
|
|
193
193
|
user.accessToken = std::string(s);
|
|
194
194
|
env->ReleaseStringUTFChars(accessToken, s);
|
|
195
195
|
}
|
|
196
|
+
if (serverAuthCode) {
|
|
197
|
+
const char* s = env->GetStringUTFChars(serverAuthCode, nullptr);
|
|
198
|
+
user.serverAuthCode = std::string(s);
|
|
199
|
+
env->ReleaseStringUTFChars(serverAuthCode, s);
|
|
200
|
+
}
|
|
196
201
|
if (scopes) {
|
|
197
202
|
int len = env->GetArrayLength(scopes);
|
|
198
203
|
std::vector<std::string> scopeVec;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
package com.auth
|
|
2
2
|
|
|
3
|
-
import android.app.Activity
|
|
4
|
-
import android.app.Application
|
|
5
3
|
import android.content.Context
|
|
6
4
|
import android.os.Bundle
|
|
7
5
|
import android.util.Log
|
|
@@ -12,14 +10,12 @@ import com.google.android.gms.auth.api.signin.GoogleSignInOptions
|
|
|
12
10
|
import com.google.android.gms.common.GoogleApiAvailability
|
|
13
11
|
import com.google.android.gms.common.ConnectionResult
|
|
14
12
|
import com.google.android.gms.common.api.Scope
|
|
15
|
-
import java.lang.ref.WeakReference
|
|
16
13
|
|
|
17
|
-
object AuthAdapter
|
|
14
|
+
object AuthAdapter {
|
|
18
15
|
private const val TAG = "AuthAdapter"
|
|
19
16
|
private const val PREF_NAME = "nitro_auth"
|
|
20
17
|
|
|
21
18
|
private var appContext: Context? = null
|
|
22
|
-
private var currentActivityRef: WeakReference<Activity>? = null
|
|
23
19
|
private var googleSignInClient: GoogleSignInClient? = null
|
|
24
20
|
private var pendingScopes: List<String> = emptyList()
|
|
25
21
|
|
|
@@ -34,6 +30,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
34
30
|
photo: String?,
|
|
35
31
|
idToken: String?,
|
|
36
32
|
accessToken: String?,
|
|
33
|
+
serverAuthCode: String?,
|
|
37
34
|
scopes: Array<String>?,
|
|
38
35
|
expirationTime: Long?
|
|
39
36
|
)
|
|
@@ -49,7 +46,6 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
49
46
|
|
|
50
47
|
fun initialize(context: Context) {
|
|
51
48
|
appContext = context.applicationContext
|
|
52
|
-
(appContext as? Application)?.registerActivityLifecycleCallbacks(this)
|
|
53
49
|
try {
|
|
54
50
|
System.loadLibrary("NitroAuth")
|
|
55
51
|
nativeInitialize(appContext!!)
|
|
@@ -58,30 +54,12 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
58
54
|
}
|
|
59
55
|
}
|
|
60
56
|
|
|
61
|
-
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
|
|
62
|
-
currentActivityRef = WeakReference(activity)
|
|
63
|
-
}
|
|
64
|
-
override fun onActivityStarted(activity: Activity) {
|
|
65
|
-
currentActivityRef = WeakReference(activity)
|
|
66
|
-
}
|
|
67
|
-
override fun onActivityResumed(activity: Activity) {
|
|
68
|
-
currentActivityRef = WeakReference(activity)
|
|
69
|
-
}
|
|
70
|
-
override fun onActivityPaused(activity: Activity) {}
|
|
71
|
-
override fun onActivityStopped(activity: Activity) {}
|
|
72
|
-
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
|
|
73
|
-
override fun onActivityDestroyed(activity: Activity) {
|
|
74
|
-
if (currentActivityRef?.get() == activity) {
|
|
75
|
-
currentActivityRef = null
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
57
|
fun onSignInSuccess(account: GoogleSignInAccount, scopes: List<String>) {
|
|
80
58
|
val ctx = appContext ?: return
|
|
81
59
|
saveUser(ctx, "google", account.email, account.displayName,
|
|
82
|
-
account.photoUrl?.toString(), account.idToken, scopes)
|
|
60
|
+
account.photoUrl?.toString(), account.idToken, account.serverAuthCode, scopes)
|
|
83
61
|
nativeOnLoginSuccess("google", account.email, account.displayName,
|
|
84
|
-
account.photoUrl?.toString(), account.idToken, null, scopes.toTypedArray(), null)
|
|
62
|
+
account.photoUrl?.toString(), account.idToken, null, account.serverAuthCode, scopes.toTypedArray(), null)
|
|
85
63
|
}
|
|
86
64
|
|
|
87
65
|
fun onSignInError(errorCode: Int, message: String?) {
|
|
@@ -162,6 +140,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
162
140
|
}
|
|
163
141
|
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
|
164
142
|
.requestIdToken(clientId)
|
|
143
|
+
.requestServerAuthCode(clientId)
|
|
165
144
|
.requestEmail()
|
|
166
145
|
.build()
|
|
167
146
|
googleSignInClient = GoogleSignIn.getClient(ctx, gso)
|
|
@@ -192,6 +171,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
192
171
|
if (clientId != null) {
|
|
193
172
|
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
|
194
173
|
.requestIdToken(clientId)
|
|
174
|
+
.requestServerAuthCode(clientId)
|
|
195
175
|
.requestEmail()
|
|
196
176
|
.build()
|
|
197
177
|
GoogleSignIn.getClient(ctx, gso).signOut()
|
|
@@ -206,6 +186,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
206
186
|
if (clientId != null) {
|
|
207
187
|
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
|
208
188
|
.requestIdToken(clientId)
|
|
189
|
+
.requestServerAuthCode(clientId)
|
|
209
190
|
.requestEmail()
|
|
210
191
|
.build()
|
|
211
192
|
GoogleSignIn.getClient(ctx, gso).revokeAccess()
|
|
@@ -242,7 +223,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
242
223
|
val account = GoogleSignIn.getLastSignedInAccount(ctx)
|
|
243
224
|
if (account != null) {
|
|
244
225
|
nativeOnLoginSuccess("google", account.email, account.displayName,
|
|
245
|
-
account.photoUrl?.toString(), account.idToken, null,
|
|
226
|
+
account.photoUrl?.toString(), account.idToken, null, account.serverAuthCode,
|
|
246
227
|
account.grantedScopes?.map { it.scopeUri }?.toTypedArray(), null)
|
|
247
228
|
} else {
|
|
248
229
|
val json = getUserJson(ctx)
|
|
@@ -252,7 +233,8 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
252
233
|
val name = extractJsonValue(json, "name")
|
|
253
234
|
val photo = extractJsonValue(json, "photo")
|
|
254
235
|
val idToken = extractJsonValue(json, "idToken")
|
|
255
|
-
|
|
236
|
+
val serverAuthCode = extractJsonValue(json, "serverAuthCode")
|
|
237
|
+
nativeOnLoginSuccess(provider, email, name, photo, idToken, null, serverAuthCode, null, null)
|
|
256
238
|
} else {
|
|
257
239
|
nativeOnLoginError("No session")
|
|
258
240
|
}
|
|
@@ -266,7 +248,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
266
248
|
}
|
|
267
249
|
|
|
268
250
|
private fun saveUser(context: Context, provider: String, email: String?, name: String?,
|
|
269
|
-
photo: String?, idToken: String?, scopes: List<String>?) {
|
|
251
|
+
photo: String?, idToken: String?, serverAuthCode: String?, scopes: List<String>?) {
|
|
270
252
|
val pref = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
|
|
271
253
|
val json = StringBuilder()
|
|
272
254
|
json.append("{")
|
|
@@ -275,6 +257,7 @@ object AuthAdapter : Application.ActivityLifecycleCallbacks {
|
|
|
275
257
|
if (name != null) json.append(",\"name\":\"$name\"")
|
|
276
258
|
if (photo != null) json.append(",\"photo\":\"$photo\"")
|
|
277
259
|
if (idToken != null) json.append(",\"idToken\":\"$idToken\"")
|
|
260
|
+
if (serverAuthCode != null) json.append(",\"serverAuthCode\":\"$serverAuthCode\"")
|
|
278
261
|
if (scopes != null) {
|
|
279
262
|
json.append(",\"scopes\":[")
|
|
280
263
|
json.append(scopes.joinToString(",") { "\"$it\"" })
|
package/cpp/JSONSerializer.hpp
CHANGED
|
@@ -16,6 +16,7 @@ public:
|
|
|
16
16
|
if (user.name) json += "\"name\":\"" + *user.name + "\",";
|
|
17
17
|
if (user.photo) json += "\"photo\":\"" + *user.photo + "\",";
|
|
18
18
|
if (user.idToken) json += "\"idToken\":\"" + *user.idToken + "\",";
|
|
19
|
+
if (user.serverAuthCode) json += "\"serverAuthCode\":\"" + *user.serverAuthCode + "\",";
|
|
19
20
|
if (user.scopes) {
|
|
20
21
|
json += "\"scopes\":[";
|
|
21
22
|
for (size_t i = 0; i < user.scopes->size(); ++i) {
|
|
@@ -49,6 +50,7 @@ public:
|
|
|
49
50
|
user.name = extract("name");
|
|
50
51
|
user.photo = extract("photo");
|
|
51
52
|
user.idToken = extract("idToken");
|
|
53
|
+
user.serverAuthCode = extract("serverAuthCode");
|
|
52
54
|
|
|
53
55
|
return user;
|
|
54
56
|
}
|
package/ios/AuthAdapter.swift
CHANGED
|
@@ -40,6 +40,7 @@ public class AuthAdapter: NSObject {
|
|
|
40
40
|
"photo": user.profile?.imageURL(withDimension: 300)?.absoluteString ?? "",
|
|
41
41
|
"idToken": user.idToken?.tokenString ?? "",
|
|
42
42
|
"accessToken": user.accessToken.tokenString,
|
|
43
|
+
"serverAuthCode": result?.serverAuthCode ?? "",
|
|
43
44
|
"expirationTime": (user.accessToken.expirationDate?.timeIntervalSince1970 ?? 0) * 1000
|
|
44
45
|
]
|
|
45
46
|
completion(data as NSDictionary, nil)
|
|
@@ -103,6 +104,7 @@ public class AuthAdapter: NSObject {
|
|
|
103
104
|
"photo": user.profile?.imageURL(withDimension: 300)?.absoluteString ?? "",
|
|
104
105
|
"idToken": user.idToken?.tokenString ?? "",
|
|
105
106
|
"accessToken": user.accessToken.tokenString,
|
|
107
|
+
"serverAuthCode": result?.serverAuthCode ?? "",
|
|
106
108
|
"expirationTime": (user.accessToken.expirationDate?.timeIntervalSince1970 ?? 0) * 1000
|
|
107
109
|
]
|
|
108
110
|
completion(data as NSDictionary, nil)
|
|
@@ -153,6 +155,7 @@ public class AuthAdapter: NSObject {
|
|
|
153
155
|
"photo": user.profile?.imageURL(withDimension: 300)?.absoluteString ?? "",
|
|
154
156
|
"idToken": user.idToken?.tokenString ?? "",
|
|
155
157
|
"accessToken": user.accessToken.tokenString,
|
|
158
|
+
"serverAuthCode": "",
|
|
156
159
|
"expirationTime": (user.accessToken.expirationDate?.timeIntervalSince1970 ?? 0) * 1000
|
|
157
160
|
]
|
|
158
161
|
completion(data as NSDictionary)
|
package/ios/PlatformAuth+iOS.mm
CHANGED
|
@@ -37,6 +37,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::login(AuthProvider provider, co
|
|
|
37
37
|
user.photo = std::string([[data objectForKey:@"photo"] UTF8String]);
|
|
38
38
|
user.idToken = std::string([[data objectForKey:@"idToken"] UTF8String]);
|
|
39
39
|
if ([data objectForKey:@"accessToken"]) user.accessToken = std::string([[data objectForKey:@"accessToken"] UTF8String]);
|
|
40
|
+
if ([data objectForKey:@"serverAuthCode"]) user.serverAuthCode = std::string([[data objectForKey:@"serverAuthCode"] UTF8String]);
|
|
40
41
|
if ([data objectForKey:@"expirationTime"]) user.expirationTime = [[data objectForKey:@"expirationTime"] doubleValue];
|
|
41
42
|
|
|
42
43
|
promise->resolve(user);
|
|
@@ -66,6 +67,7 @@ std::shared_ptr<Promise<AuthUser>> PlatformAuth::requestScopes(const std::vector
|
|
|
66
67
|
user.photo = std::string([[data objectForKey:@"photo"] UTF8String]);
|
|
67
68
|
user.idToken = std::string([[data objectForKey:@"idToken"] UTF8String]);
|
|
68
69
|
if ([data objectForKey:@"accessToken"]) user.accessToken = std::string([[data objectForKey:@"accessToken"] UTF8String]);
|
|
70
|
+
if ([data objectForKey:@"serverAuthCode"]) user.serverAuthCode = std::string([[data objectForKey:@"serverAuthCode"] UTF8String]);
|
|
69
71
|
if ([data objectForKey:@"expirationTime"]) user.expirationTime = [[data objectForKey:@"expirationTime"] doubleValue];
|
|
70
72
|
promise->resolve(user);
|
|
71
73
|
}];
|
|
@@ -102,6 +104,7 @@ std::shared_ptr<Promise<std::optional<AuthUser>>> PlatformAuth::silentRestore()
|
|
|
102
104
|
user.photo = std::string([[data objectForKey:@"photo"] UTF8String]);
|
|
103
105
|
user.idToken = std::string([[data objectForKey:@"idToken"] UTF8String]);
|
|
104
106
|
if ([data objectForKey:@"accessToken"]) user.accessToken = std::string([[data objectForKey:@"accessToken"] UTF8String]);
|
|
107
|
+
if ([data objectForKey:@"serverAuthCode"]) user.serverAuthCode = std::string([[data objectForKey:@"serverAuthCode"] UTF8String]);
|
|
105
108
|
if ([data objectForKey:@"expirationTime"]) user.expirationTime = [[data objectForKey:@"expirationTime"] doubleValue];
|
|
106
109
|
promise->resolve(user);
|
|
107
110
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../src/Auth.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9C,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,eAAe,GACf,qBAAqB,GACrB,sBAAsB,GACtB,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACxE,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9C,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,IAAI,IAAI,CAAC;IAEf,kBAAkB,CAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,GAC7C,MAAM,IAAI,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"Auth.nitro.d.ts","sourceRoot":"","sources":["../../src/Auth.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9C,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,eAAe,GACf,qBAAqB,GACrB,sBAAsB,GACtB,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACxE,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9C,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,IAAI,IAAI,CAAC;IAEf,kBAAkB,CAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,GAC7C,MAAM,IAAI,CAAC;CACf"}
|
|
@@ -44,12 +44,13 @@ namespace margelo::nitro::NitroAuth {
|
|
|
44
44
|
std::optional<std::string> photo SWIFT_PRIVATE;
|
|
45
45
|
std::optional<std::string> idToken SWIFT_PRIVATE;
|
|
46
46
|
std::optional<std::string> accessToken SWIFT_PRIVATE;
|
|
47
|
+
std::optional<std::string> serverAuthCode SWIFT_PRIVATE;
|
|
47
48
|
std::optional<std::vector<std::string>> scopes SWIFT_PRIVATE;
|
|
48
49
|
std::optional<double> expirationTime SWIFT_PRIVATE;
|
|
49
50
|
|
|
50
51
|
public:
|
|
51
52
|
AuthUser() = default;
|
|
52
|
-
explicit AuthUser(AuthProvider provider, std::optional<std::string> email, std::optional<std::string> name, std::optional<std::string> photo, std::optional<std::string> idToken, std::optional<std::string> accessToken, std::optional<std::vector<std::string>> scopes, std::optional<double> expirationTime): provider(provider), email(email), name(name), photo(photo), idToken(idToken), accessToken(accessToken), scopes(scopes), expirationTime(expirationTime) {}
|
|
53
|
+
explicit AuthUser(AuthProvider provider, std::optional<std::string> email, std::optional<std::string> name, std::optional<std::string> photo, std::optional<std::string> idToken, std::optional<std::string> accessToken, std::optional<std::string> serverAuthCode, std::optional<std::vector<std::string>> scopes, std::optional<double> expirationTime): provider(provider), email(email), name(name), photo(photo), idToken(idToken), accessToken(accessToken), serverAuthCode(serverAuthCode), scopes(scopes), expirationTime(expirationTime) {}
|
|
53
54
|
};
|
|
54
55
|
|
|
55
56
|
} // namespace margelo::nitro::NitroAuth
|
|
@@ -68,6 +69,7 @@ namespace margelo::nitro {
|
|
|
68
69
|
JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "photo")),
|
|
69
70
|
JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "idToken")),
|
|
70
71
|
JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "accessToken")),
|
|
72
|
+
JSIConverter<std::optional<std::string>>::fromJSI(runtime, obj.getProperty(runtime, "serverAuthCode")),
|
|
71
73
|
JSIConverter<std::optional<std::vector<std::string>>>::fromJSI(runtime, obj.getProperty(runtime, "scopes")),
|
|
72
74
|
JSIConverter<std::optional<double>>::fromJSI(runtime, obj.getProperty(runtime, "expirationTime"))
|
|
73
75
|
);
|
|
@@ -80,6 +82,7 @@ namespace margelo::nitro {
|
|
|
80
82
|
obj.setProperty(runtime, "photo", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.photo));
|
|
81
83
|
obj.setProperty(runtime, "idToken", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.idToken));
|
|
82
84
|
obj.setProperty(runtime, "accessToken", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.accessToken));
|
|
85
|
+
obj.setProperty(runtime, "serverAuthCode", JSIConverter<std::optional<std::string>>::toJSI(runtime, arg.serverAuthCode));
|
|
83
86
|
obj.setProperty(runtime, "scopes", JSIConverter<std::optional<std::vector<std::string>>>::toJSI(runtime, arg.scopes));
|
|
84
87
|
obj.setProperty(runtime, "expirationTime", JSIConverter<std::optional<double>>::toJSI(runtime, arg.expirationTime));
|
|
85
88
|
return obj;
|
|
@@ -98,6 +101,7 @@ namespace margelo::nitro {
|
|
|
98
101
|
if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "photo"))) return false;
|
|
99
102
|
if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "idToken"))) return false;
|
|
100
103
|
if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "accessToken"))) return false;
|
|
104
|
+
if (!JSIConverter<std::optional<std::string>>::canConvert(runtime, obj.getProperty(runtime, "serverAuthCode"))) return false;
|
|
101
105
|
if (!JSIConverter<std::optional<std::vector<std::string>>>::canConvert(runtime, obj.getProperty(runtime, "scopes"))) return false;
|
|
102
106
|
if (!JSIConverter<std::optional<double>>::canConvert(runtime, obj.getProperty(runtime, "expirationTime"))) return false;
|
|
103
107
|
return true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-nitro-auth",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "High-performance authentication library for React Native with Google Sign-In and Apple Sign-In support, powered by Nitro Modules (JSI)",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|