react-native-credentials-manager 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +65 -3
  2. package/android/build.gradle +9 -9
  3. package/android/generated/java/com/credentialsmanager/NativeCredentialsManagerSpec.java +8 -0
  4. package/android/generated/jni/RNCredentialsManagerSpec-generated.cpp +12 -0
  5. package/android/generated/jni/react/renderer/components/RNCredentialsManagerSpec/RNCredentialsManagerSpecJSI-generated.cpp +13 -0
  6. package/android/generated/jni/react/renderer/components/RNCredentialsManagerSpec/RNCredentialsManagerSpecJSI.h +118 -0
  7. package/android/src/main/java/com/credentialsmanager/CredentialsManagerModuleImpl.kt +7 -0
  8. package/android/src/main/java/com/credentialsmanager/CredentialsManagerPackage.kt +6 -5
  9. package/android/src/main/java/com/credentialsmanager/handlers/CredentialHandler.kt +178 -0
  10. package/android/src/main/java/com/credentialsmanager/handlers/ErrorHandler.kt +56 -0
  11. package/android/src/newarch/java/com/credentialsmanager/CredentialsManagerModule.kt +138 -0
  12. package/android/src/oldarch/java/com/credentialsmanager/CredentialsManagerModule.kt +127 -0
  13. package/ios/generated/RNCredentialsManagerSpec/RNCredentialsManagerSpec-generated.mm +20 -0
  14. package/ios/generated/RNCredentialsManagerSpec/RNCredentialsManagerSpec.h +37 -0
  15. package/ios/generated/RNCredentialsManagerSpecJSI-generated.cpp +13 -0
  16. package/ios/generated/RNCredentialsManagerSpecJSI.h +118 -0
  17. package/lib/commonjs/NativeCredentialsManager.js.map +1 -1
  18. package/lib/commonjs/index.js +12 -0
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/module/NativeCredentialsManager.js.map +1 -1
  21. package/lib/module/index.js +10 -0
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/typescript/commonjs/src/NativeCredentialsManager.d.ts +16 -0
  24. package/lib/typescript/commonjs/src/NativeCredentialsManager.d.ts.map +1 -1
  25. package/lib/typescript/commonjs/src/index.d.ts +7 -1
  26. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  27. package/lib/typescript/module/src/NativeCredentialsManager.d.ts +16 -0
  28. package/lib/typescript/module/src/NativeCredentialsManager.d.ts.map +1 -1
  29. package/lib/typescript/module/src/index.d.ts +7 -1
  30. package/lib/typescript/module/src/index.d.ts.map +1 -1
  31. package/package.json +15 -3
  32. package/src/NativeCredentialsManager.ts +17 -0
  33. package/src/index.tsx +17 -1
  34. package/android/src/main/java/com/credentialsmanager/CredentialsManagerModule.kt +0 -212
@@ -0,0 +1,138 @@
1
+ package com.credentialsmanager
2
+ import android.util.Log
3
+ import androidx.credentials.exceptions.CreateCredentialException
4
+ import androidx.credentials.exceptions.GetCredentialException
5
+ import androidx.credentials.exceptions.NoCredentialException
6
+ import com.credentialsmanager.handlers.CredentialHandler
7
+ import com.credentialsmanager.handlers.ErrorHandler
8
+ import com.facebook.react.bridge.Promise
9
+ import com.facebook.react.bridge.ReactApplicationContext
10
+ import com.facebook.react.bridge.ReadableMap
11
+ import kotlinx.coroutines.CoroutineScope
12
+ import kotlinx.coroutines.Dispatchers
13
+ import kotlinx.coroutines.launch
14
+ import androidx.credentials.exceptions.ClearCredentialException
15
+
16
+ class CredentialsManagerModule(
17
+ reactContext: ReactApplicationContext,
18
+ ) : NativeCredentialsManagerSpec(reactContext) {
19
+ private val coroutineScope = CoroutineScope(Dispatchers.IO)
20
+ private val credentialHandler = CredentialHandler(reactContext)
21
+
22
+ private var implementation: CredentialsManagerModuleImpl = CredentialsManagerModuleImpl()
23
+
24
+ override fun getName(): String = CredentialsManagerModuleImpl.NAME
25
+
26
+ override fun signUpWithPasskeys(
27
+ requestJson: ReadableMap,
28
+ preferImmediatelyAvailableCredentials: Boolean,
29
+ promise: Promise,
30
+ ) {
31
+ val jsonString = requestJson.toString()
32
+
33
+ coroutineScope.launch {
34
+ try {
35
+ val response =
36
+ credentialHandler.createPasskey(
37
+ jsonString,
38
+ preferImmediatelyAvailableCredentials,
39
+ )
40
+
41
+ response?.let {
42
+ promise.resolve(it)
43
+ } ?: promise.reject("ERROR", "No response received")
44
+ } catch (e: CreateCredentialException) {
45
+ ErrorHandler.handleCredentialError(e)
46
+ promise.reject("ERROR", e.message.toString())
47
+ }
48
+ }
49
+ }
50
+
51
+ override fun signUpWithPassword(credObject: ReadableMap) {
52
+ val username = credObject.getString("username") ?: ""
53
+ val password = credObject.getString("password") ?: ""
54
+ coroutineScope.launch {
55
+ try {
56
+ credentialHandler.createPassword(username, password)
57
+ } catch (e: CreateCredentialException) {
58
+ ErrorHandler.handleCredentialError(e)
59
+ }
60
+ }
61
+ }
62
+
63
+ override fun signInWithSavedCredentials(
64
+ requestJson: ReadableMap,
65
+ promise: Promise,
66
+ ) {
67
+ val jsonString = requestJson.toString()
68
+ coroutineScope.launch {
69
+ val data = credentialHandler.getSavedCredentials(jsonString)
70
+ promise.resolve(data)
71
+ }
72
+ }
73
+
74
+ override fun signOut(
75
+ promise: Promise,
76
+ ) {
77
+ coroutineScope.launch {
78
+ try {
79
+ credentialHandler.signOut()
80
+ promise.resolve(null)}
81
+ catch (e: ClearCredentialException) {
82
+ Log.e("CredentialManager", "Error during sign out", e)
83
+ promise.reject("ERROR", e.message.toString())
84
+ }
85
+ }
86
+ }
87
+
88
+ override fun signInWithGoogle(
89
+ requestObject: ReadableMap,
90
+ promise: Promise,
91
+ ) {
92
+ val nonce = requestObject.getString("nonce") ?: ""
93
+ val serverClientId = requestObject.getString("serverClientId") ?: ""
94
+ val autoSelectEnabled = requestObject.getBoolean("autoSelectEnabled")
95
+
96
+ val googleIdOption =
97
+ credentialHandler.getGoogleId(
98
+ setFilterByAuthorizedAccounts = true,
99
+ nonce = nonce,
100
+ serverClientId = serverClientId,
101
+ autoSelectEnabled = autoSelectEnabled,
102
+ )
103
+ coroutineScope.launch {
104
+ try {
105
+ val result = credentialHandler.googleSignInRequest(googleIdOption)
106
+ val data = credentialHandler.handleSignInResult(result)
107
+ promise.resolve(data)
108
+ } catch (e: GetCredentialException) {
109
+ when (e) {
110
+ is NoCredentialException -> {
111
+ try {
112
+ Log.d("CredentialManager", "NoCredentialException")
113
+ val googleIdOption2 =
114
+ credentialHandler.getGoogleId(
115
+ setFilterByAuthorizedAccounts = false,
116
+ nonce = nonce,
117
+ serverClientId = serverClientId,
118
+ autoSelectEnabled = autoSelectEnabled,
119
+ )
120
+ val result2 = credentialHandler.googleSignInRequest(googleIdOption2)
121
+ val data2 = credentialHandler.handleSignInResult(result2)
122
+ promise.resolve(data2)
123
+ } catch (e2: GetCredentialException) {
124
+ ErrorHandler.handleGetCredentialError(e2)
125
+ Log.e("CredentialManager", "Error during sign in", e2)
126
+ promise.reject("ERROR", e2.message.toString())
127
+ }
128
+ }
129
+ else -> {
130
+ ErrorHandler.handleGetCredentialError(e)
131
+ Log.e("CredentialManager", "Error during sign in", e)
132
+ promise.reject("ERROR", e.message.toString())
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,127 @@
1
+ package com.credentialsmanager
2
+ import androidx.credentials.exceptions.CreateCredentialException
3
+ import com.credentialsmanager.handlers.CredentialHandler
4
+ import com.credentialsmanager.handlers.ErrorHandler
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
8
+ import com.facebook.react.bridge.ReadableMap
9
+ import com.facebook.react.module.annotations.ReactModule
10
+ import kotlinx.coroutines.CoroutineScope
11
+ import kotlinx.coroutines.Dispatchers
12
+ import kotlinx.coroutines.launch
13
+
14
+ @ReactModule(name = CredentialsManagerModuleImpl.NAME)
15
+ class CredentialsManagerModule(
16
+ reactContext: ReactApplicationContext,
17
+ ) : ReactContextBaseJavaModule(reactContext) {
18
+ private val coroutineScope = CoroutineScope(Dispatchers.IO)
19
+ private val credentialHandler = CredentialHandler(reactContext)
20
+
21
+ private var implementation: CredentialsManagerModuleImpl = CredentialsManagerModuleImpl()
22
+
23
+ override fun getName(): String = CredentialsManagerModuleImpl.NAME
24
+
25
+ @ReactMethod
26
+ fun signUpWithPasskeys(
27
+ requestJson: ReadableMap,
28
+ preferImmediatelyAvailableCredentials: Boolean,
29
+ promise: Promise,
30
+ ) {
31
+ val jsonString = requestJson.toString()
32
+
33
+ coroutineScope.launch {
34
+ try {
35
+ val response =
36
+ credentialHandler.createPasskey(
37
+ jsonString,
38
+ preferImmediatelyAvailableCredentials,
39
+ )
40
+
41
+ response?.let {
42
+ promise.resolve(it)
43
+ } ?: promise.reject("ERROR", "No response received")
44
+ } catch (e: CreateCredentialException) {
45
+ ErrorHandler.handleCredentialError(e)
46
+ promise.reject("ERROR", e.message.toString())
47
+ }
48
+ }
49
+ }
50
+
51
+ @ReactMethod
52
+ fun signUpWithPassword(credObject: ReadableMap) {
53
+ val username = credObject.getString("username") ?: ""
54
+ val password = credObject.getString("password") ?: ""
55
+ coroutineScope.launch {
56
+ try {
57
+ credentialHandler.createPassword(username, password)
58
+ } catch (e: CreateCredentialException) {
59
+ ErrorHandler.handleCredentialError(e)
60
+ }
61
+ }
62
+ }
63
+
64
+ @ReactMethod
65
+ fun signInWithSavedCredentials(
66
+ requestJson: ReadableMap,
67
+ promise: Promise,
68
+ ) {
69
+ val jsonString = requestJson.toString()
70
+ coroutineScope.launch {
71
+ val data = credentialHandler.getSavedCredentials(jsonString)
72
+ promise.resolve(data)
73
+ }
74
+ }
75
+
76
+ @ReactMethod
77
+ fun signInWithGoogle(
78
+ requestObject: ReadableMap,
79
+ promise: Promise,
80
+ ) {
81
+ val nonce = requestObject.getString("nonce") ?: ""
82
+ val serverClientId = requestObject.getString("serverClientId") ?: ""
83
+ val autoSelectEnabled = requestObject.getBoolean("autoSelectEnabled")
84
+
85
+ val googleIdOption =
86
+ credentialHandler.getGoogleId(
87
+ setFilterByAuthorizedAccounts = false,
88
+ nonce = nonce,
89
+ serverClientId = serverClientId,
90
+ autoSelectEnabled = autoSelectEnabled,
91
+ )
92
+ coroutineScope.launch {
93
+ try {
94
+ val result = credentialHandler.googleSignInRequest(googleIdOption)
95
+ val data = credentialHandler.handleSignInResult(result)
96
+ promise.resolve(data)
97
+ } catch (e: GetCredentialException) {
98
+ when (e) {
99
+ is NoCredentialException -> {
100
+ try {
101
+ Log.d("CredentialManager", "NoCredentialException")
102
+ val googleIdOption =
103
+ credentialHandler.getGoogleId(
104
+ setFilterByAuthorizedAccounts = false,
105
+ nonce = nonce,
106
+ serverClientId = serverClientId,
107
+ autoSelectEnabled = autoSelectEnabled,
108
+ )
109
+ val result = credentialHandler.googleSignInRequest(googleIdOption)
110
+ val data = credentialHandler.handleSignInResult(result)
111
+ promise.resolve(data)
112
+ } catch (e: GetCredentialException) {
113
+ ErrorHandler.handleGetCredentialError(e)
114
+ Log.e("CredentialManager", "Error during sign in", e)
115
+ promise.reject("ERROR", e.message.toString())
116
+ }
117
+ }
118
+ else -> {
119
+ ErrorHandler.handleGetCredentialError(e)
120
+ Log.e("CredentialManager", "Error during sign in", e)
121
+ promise.reject("ERROR", e.message.toString())
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
@@ -29,6 +29,12 @@
29
29
  return facebook::react::managedPointer<JS::NativeCredentialsManager::CredObject>(json);
30
30
  }
31
31
  @end
32
+ @implementation RCTCxxConvert (NativeCredentialsManager_SpecSignInWithGoogleParams)
33
+ + (RCTManagedPointer *)JS_NativeCredentialsManager_SpecSignInWithGoogleParams:(id)json
34
+ {
35
+ return facebook::react::managedPointer<JS::NativeCredentialsManager::SpecSignInWithGoogleParams>(json);
36
+ }
37
+ @end
32
38
  namespace facebook::react {
33
39
 
34
40
  static facebook::jsi::Value __hostFunction_NativeCredentialsManagerSpecJSI_signUpWithPasskeys(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
@@ -43,6 +49,14 @@ namespace facebook::react {
43
49
  return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, PromiseKind, "signInWithSavedCredentials", @selector(signInWithSavedCredentials:resolve:reject:), args, count);
44
50
  }
45
51
 
52
+ static facebook::jsi::Value __hostFunction_NativeCredentialsManagerSpecJSI_signInWithGoogle(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
53
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, PromiseKind, "signInWithGoogle", @selector(signInWithGoogle:resolve:reject:), args, count);
54
+ }
55
+
56
+ static facebook::jsi::Value __hostFunction_NativeCredentialsManagerSpecJSI_signOut(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
57
+ return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, PromiseKind, "signOut", @selector(signOut:reject:), args, count);
58
+ }
59
+
46
60
  NativeCredentialsManagerSpecJSI::NativeCredentialsManagerSpecJSI(const ObjCTurboModule::InitParams &params)
47
61
  : ObjCTurboModule(params) {
48
62
 
@@ -54,5 +68,11 @@ namespace facebook::react {
54
68
 
55
69
  methodMap_["signInWithSavedCredentials"] = MethodMetadata {1, __hostFunction_NativeCredentialsManagerSpecJSI_signInWithSavedCredentials};
56
70
 
71
+
72
+ methodMap_["signInWithGoogle"] = MethodMetadata {1, __hostFunction_NativeCredentialsManagerSpecJSI_signInWithGoogle};
73
+ setMethodArgConversionSelector(@"signInWithGoogle", 0, @"JS_NativeCredentialsManager_SpecSignInWithGoogleParams:");
74
+
75
+ methodMap_["signOut"] = MethodMetadata {0, __hostFunction_NativeCredentialsManagerSpecJSI_signOut};
76
+
57
77
  }
58
78
  } // namespace facebook::react
@@ -48,6 +48,23 @@ namespace JS {
48
48
  @interface RCTCxxConvert (NativeCredentialsManager_CredObject)
49
49
  + (RCTManagedPointer *)JS_NativeCredentialsManager_CredObject:(id)json;
50
50
  @end
51
+ namespace JS {
52
+ namespace NativeCredentialsManager {
53
+ struct SpecSignInWithGoogleParams {
54
+ NSString *nonce() const;
55
+ NSString *serverClientId() const;
56
+ bool autoSelectEnabled() const;
57
+
58
+ SpecSignInWithGoogleParams(NSDictionary *const v) : _v(v) {}
59
+ private:
60
+ NSDictionary *_v;
61
+ };
62
+ }
63
+ }
64
+
65
+ @interface RCTCxxConvert (NativeCredentialsManager_SpecSignInWithGoogleParams)
66
+ + (RCTManagedPointer *)JS_NativeCredentialsManager_SpecSignInWithGoogleParams:(id)json;
67
+ @end
51
68
  @protocol NativeCredentialsManagerSpec <RCTBridgeModule, RCTTurboModule>
52
69
 
53
70
  - (void)signUpWithPasskeys:(NSDictionary *)requestJson
@@ -58,6 +75,11 @@ preferImmediatelyAvailableCredentials:(BOOL)preferImmediatelyAvailableCredential
58
75
  - (void)signInWithSavedCredentials:(NSDictionary *)requestJson
59
76
  resolve:(RCTPromiseResolveBlock)resolve
60
77
  reject:(RCTPromiseRejectBlock)reject;
78
+ - (void)signInWithGoogle:(JS::NativeCredentialsManager::SpecSignInWithGoogleParams &)params
79
+ resolve:(RCTPromiseResolveBlock)resolve
80
+ reject:(RCTPromiseRejectBlock)reject;
81
+ - (void)signOut:(RCTPromiseResolveBlock)resolve
82
+ reject:(RCTPromiseRejectBlock)reject;
61
83
 
62
84
  @end
63
85
 
@@ -89,5 +111,20 @@ inline NSString *JS::NativeCredentialsManager::CredObject::password() const
89
111
  id const p = _v[@"password"];
90
112
  return RCTBridgingToString(p);
91
113
  }
114
+ inline NSString *JS::NativeCredentialsManager::SpecSignInWithGoogleParams::nonce() const
115
+ {
116
+ id const p = _v[@"nonce"];
117
+ return RCTBridgingToString(p);
118
+ }
119
+ inline NSString *JS::NativeCredentialsManager::SpecSignInWithGoogleParams::serverClientId() const
120
+ {
121
+ id const p = _v[@"serverClientId"];
122
+ return RCTBridgingToString(p);
123
+ }
124
+ inline bool JS::NativeCredentialsManager::SpecSignInWithGoogleParams::autoSelectEnabled() const
125
+ {
126
+ id const p = _v[@"autoSelectEnabled"];
127
+ return RCTBridgingToBool(p);
128
+ }
92
129
  NS_ASSUME_NONNULL_END
93
130
  #endif // RNCredentialsManagerSpec_H
@@ -31,12 +31,25 @@ static jsi::Value __hostFunction_NativeCredentialsManagerCxxSpecJSI_signInWithSa
31
31
  count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt)
32
32
  );
33
33
  }
34
+ static jsi::Value __hostFunction_NativeCredentialsManagerCxxSpecJSI_signInWithGoogle(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
35
+ return static_cast<NativeCredentialsManagerCxxSpecJSI *>(&turboModule)->signInWithGoogle(
36
+ rt,
37
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt)
38
+ );
39
+ }
40
+ static jsi::Value __hostFunction_NativeCredentialsManagerCxxSpecJSI_signOut(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
41
+ return static_cast<NativeCredentialsManagerCxxSpecJSI *>(&turboModule)->signOut(
42
+ rt
43
+ );
44
+ }
34
45
 
35
46
  NativeCredentialsManagerCxxSpecJSI::NativeCredentialsManagerCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
36
47
  : TurboModule("CredentialsManager", jsInvoker) {
37
48
  methodMap_["signUpWithPasskeys"] = MethodMetadata {2, __hostFunction_NativeCredentialsManagerCxxSpecJSI_signUpWithPasskeys};
38
49
  methodMap_["signUpWithPassword"] = MethodMetadata {1, __hostFunction_NativeCredentialsManagerCxxSpecJSI_signUpWithPassword};
39
50
  methodMap_["signInWithSavedCredentials"] = MethodMetadata {1, __hostFunction_NativeCredentialsManagerCxxSpecJSI_signInWithSavedCredentials};
51
+ methodMap_["signInWithGoogle"] = MethodMetadata {1, __hostFunction_NativeCredentialsManagerCxxSpecJSI_signInWithGoogle};
52
+ methodMap_["signOut"] = MethodMetadata {0, __hostFunction_NativeCredentialsManagerCxxSpecJSI_signOut};
40
53
  }
41
54
 
42
55
 
@@ -62,6 +62,106 @@ struct NativeCredentialsManagerCredObjectBridging {
62
62
  }
63
63
  };
64
64
 
65
+
66
+
67
+ #pragma mark - NativeCredentialsManagerGoogleCredential
68
+
69
+ template <typename P0, typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
70
+ struct NativeCredentialsManagerGoogleCredential {
71
+ P0 type;
72
+ P1 id;
73
+ P2 idToken;
74
+ P3 displayName;
75
+ P4 familyName;
76
+ P5 givenName;
77
+ P6 profilePicture;
78
+ P7 phoneNumber;
79
+ bool operator==(const NativeCredentialsManagerGoogleCredential &other) const {
80
+ return type == other.type && id == other.id && idToken == other.idToken && displayName == other.displayName && familyName == other.familyName && givenName == other.givenName && profilePicture == other.profilePicture && phoneNumber == other.phoneNumber;
81
+ }
82
+ };
83
+
84
+ template <typename T>
85
+ struct NativeCredentialsManagerGoogleCredentialBridging {
86
+ static T types;
87
+
88
+ static T fromJs(
89
+ jsi::Runtime &rt,
90
+ const jsi::Object &value,
91
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
92
+ T result{
93
+ bridging::fromJs<decltype(types.type)>(rt, value.getProperty(rt, "type"), jsInvoker),
94
+ bridging::fromJs<decltype(types.id)>(rt, value.getProperty(rt, "id"), jsInvoker),
95
+ bridging::fromJs<decltype(types.idToken)>(rt, value.getProperty(rt, "idToken"), jsInvoker),
96
+ bridging::fromJs<decltype(types.displayName)>(rt, value.getProperty(rt, "displayName"), jsInvoker),
97
+ bridging::fromJs<decltype(types.familyName)>(rt, value.getProperty(rt, "familyName"), jsInvoker),
98
+ bridging::fromJs<decltype(types.givenName)>(rt, value.getProperty(rt, "givenName"), jsInvoker),
99
+ bridging::fromJs<decltype(types.profilePicture)>(rt, value.getProperty(rt, "profilePicture"), jsInvoker),
100
+ bridging::fromJs<decltype(types.phoneNumber)>(rt, value.getProperty(rt, "phoneNumber"), jsInvoker)};
101
+ return result;
102
+ }
103
+
104
+ #ifdef DEBUG
105
+ static jsi::String typeToJs(jsi::Runtime &rt, decltype(types.type) value) {
106
+ return bridging::toJs(rt, value);
107
+ }
108
+
109
+ static jsi::String idToJs(jsi::Runtime &rt, decltype(types.id) value) {
110
+ return bridging::toJs(rt, value);
111
+ }
112
+
113
+ static jsi::String idTokenToJs(jsi::Runtime &rt, decltype(types.idToken) value) {
114
+ return bridging::toJs(rt, value);
115
+ }
116
+
117
+ static jsi::String displayNameToJs(jsi::Runtime &rt, decltype(types.displayName) value) {
118
+ return bridging::toJs(rt, value);
119
+ }
120
+
121
+ static jsi::String familyNameToJs(jsi::Runtime &rt, decltype(types.familyName) value) {
122
+ return bridging::toJs(rt, value);
123
+ }
124
+
125
+ static jsi::String givenNameToJs(jsi::Runtime &rt, decltype(types.givenName) value) {
126
+ return bridging::toJs(rt, value);
127
+ }
128
+
129
+ static jsi::String profilePictureToJs(jsi::Runtime &rt, decltype(types.profilePicture) value) {
130
+ return bridging::toJs(rt, value);
131
+ }
132
+
133
+ static jsi::String phoneNumberToJs(jsi::Runtime &rt, decltype(types.phoneNumber) value) {
134
+ return bridging::toJs(rt, value);
135
+ }
136
+ #endif
137
+
138
+ static jsi::Object toJs(
139
+ jsi::Runtime &rt,
140
+ const T &value,
141
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
142
+ auto result = facebook::jsi::Object(rt);
143
+ result.setProperty(rt, "type", bridging::toJs(rt, value.type, jsInvoker));
144
+ result.setProperty(rt, "id", bridging::toJs(rt, value.id, jsInvoker));
145
+ result.setProperty(rt, "idToken", bridging::toJs(rt, value.idToken, jsInvoker));
146
+ if (value.displayName) {
147
+ result.setProperty(rt, "displayName", bridging::toJs(rt, value.displayName.value(), jsInvoker));
148
+ }
149
+ if (value.familyName) {
150
+ result.setProperty(rt, "familyName", bridging::toJs(rt, value.familyName.value(), jsInvoker));
151
+ }
152
+ if (value.givenName) {
153
+ result.setProperty(rt, "givenName", bridging::toJs(rt, value.givenName.value(), jsInvoker));
154
+ }
155
+ if (value.profilePicture) {
156
+ result.setProperty(rt, "profilePicture", bridging::toJs(rt, value.profilePicture.value(), jsInvoker));
157
+ }
158
+ if (value.phoneNumber) {
159
+ result.setProperty(rt, "phoneNumber", bridging::toJs(rt, value.phoneNumber.value(), jsInvoker));
160
+ }
161
+ return result;
162
+ }
163
+ };
164
+
65
165
  class JSI_EXPORT NativeCredentialsManagerCxxSpecJSI : public TurboModule {
66
166
  protected:
67
167
  NativeCredentialsManagerCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
@@ -70,6 +170,8 @@ public:
70
170
  virtual jsi::Value signUpWithPasskeys(jsi::Runtime &rt, jsi::Object requestJson, bool preferImmediatelyAvailableCredentials) = 0;
71
171
  virtual void signUpWithPassword(jsi::Runtime &rt, jsi::Object credObject) = 0;
72
172
  virtual jsi::Value signInWithSavedCredentials(jsi::Runtime &rt, jsi::Object requestJson) = 0;
173
+ virtual jsi::Value signInWithGoogle(jsi::Runtime &rt, jsi::Object params) = 0;
174
+ virtual jsi::Value signOut(jsi::Runtime &rt) = 0;
73
175
 
74
176
  };
75
177
 
@@ -124,6 +226,22 @@ private:
124
226
  return bridging::callFromJs<jsi::Value>(
125
227
  rt, &T::signInWithSavedCredentials, jsInvoker_, instance_, std::move(requestJson));
126
228
  }
229
+ jsi::Value signInWithGoogle(jsi::Runtime &rt, jsi::Object params) override {
230
+ static_assert(
231
+ bridging::getParameterCount(&T::signInWithGoogle) == 2,
232
+ "Expected signInWithGoogle(...) to have 2 parameters");
233
+
234
+ return bridging::callFromJs<jsi::Value>(
235
+ rt, &T::signInWithGoogle, jsInvoker_, instance_, std::move(params));
236
+ }
237
+ jsi::Value signOut(jsi::Runtime &rt) override {
238
+ static_assert(
239
+ bridging::getParameterCount(&T::signOut) == 1,
240
+ "Expected signOut(...) to have 1 parameters");
241
+
242
+ return bridging::callFromJs<jsi::Value>(
243
+ rt, &T::signOut, jsInvoker_, instance_);
244
+ }
127
245
 
128
246
  private:
129
247
  friend class NativeCredentialsManagerCxxSpec;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeCredentialsManager.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA8BpCC,gCAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeCredentialsManager.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA+CpCC,gCAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.signInWithGoogle = signInWithGoogle;
6
7
  exports.signInWithSavedCredentials = signInWithSavedCredentials;
8
+ exports.signOut = signOut;
7
9
  exports.signUpWithPasskeys = signUpWithPasskeys;
8
10
  exports.signUpWithPassword = signUpWithPassword;
9
11
  var _NativeCredentialsManager = _interopRequireDefault(require("./NativeCredentialsManager.js"));
@@ -23,4 +25,14 @@ function signUpWithPassword({
23
25
  function signInWithSavedCredentials(requestJson) {
24
26
  return _NativeCredentialsManager.default.signInWithSavedCredentials(requestJson);
25
27
  }
28
+ function signInWithGoogle(params) {
29
+ return _NativeCredentialsManager.default.signInWithGoogle({
30
+ ...params,
31
+ nonce: params.nonce ?? '',
32
+ autoSelectEnabled: params.autoSelectEnabled ?? true
33
+ });
34
+ }
35
+ function signOut() {
36
+ return _NativeCredentialsManager.default.signOut();
37
+ }
26
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_NativeCredentialsManager","_interopRequireDefault","require","e","__esModule","default","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","CredentialsManager","signUpWithPassword","username","password","signInWithSavedCredentials"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;AAAA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4D,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGrD,SAASG,kBAAkBA,CAChCC,WAAmB,EACnBC,qCAA8C,GAAG,KAAK,EACrC;EACjB,OAAOC,iCAAkB,CAACH,kBAAkB,CAC1CC,WAAW,EACXC,qCACF,CAAC;AACH;AAEO,SAASE,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACDH,iCAAkB,CAACC,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AAC/D;AAEO,SAASE,0BAA0BA,CACxCN,WAAmB,EACE;EACrB,OAAOE,iCAAkB,CAACI,0BAA0B,CAACN,WAAW,CAAC;AACnE","ignoreList":[]}
1
+ {"version":3,"names":["_NativeCredentialsManager","_interopRequireDefault","require","e","__esModule","default","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","CredentialsManager","signUpWithPassword","username","password","signInWithSavedCredentials","signInWithGoogle","params","nonce","autoSelectEnabled","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;AAAA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4D,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGrD,SAASG,kBAAkBA,CAChCC,WAAmB,EACnBC,qCAA8C,GAAG,KAAK,EACrC;EACjB,OAAOC,iCAAkB,CAACH,kBAAkB,CAC1CC,WAAW,EACXC,qCACF,CAAC;AACH;AAEO,SAASE,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACDH,iCAAkB,CAACC,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AAC/D;AAEO,SAASE,0BAA0BA,CACxCN,WAAmB,EACE;EACrB,OAAOE,iCAAkB,CAACI,0BAA0B,CAACN,WAAW,CAAC;AACnE;AAEO,SAASO,gBAAgBA,CAACC,MAIhC,EAA6B;EAC5B,OAAON,iCAAkB,CAACK,gBAAgB,CAAC;IACzC,GAAGC,MAAM;IACTC,KAAK,EAAED,MAAM,CAACC,KAAK,IAAI,EAAE;IACzBC,iBAAiB,EAAEF,MAAM,CAACE,iBAAiB,IAAI;EACjD,CAAC,CAAC;AACJ;AAEO,SAASC,OAAOA,CAAA,EAAkB;EACvC,OAAOT,iCAAkB,CAACS,OAAO,CAAC,CAAC;AACrC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeCredentialsManager.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AA8BlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeCredentialsManager.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AA+ClD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
@@ -16,4 +16,14 @@ export function signUpWithPassword({
16
16
  export function signInWithSavedCredentials(requestJson) {
17
17
  return CredentialsManager.signInWithSavedCredentials(requestJson);
18
18
  }
19
+ export function signInWithGoogle(params) {
20
+ return CredentialsManager.signInWithGoogle({
21
+ ...params,
22
+ nonce: params.nonce ?? '',
23
+ autoSelectEnabled: params.autoSelectEnabled ?? true
24
+ });
25
+ }
26
+ export function signOut() {
27
+ return CredentialsManager.signOut();
28
+ }
19
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CredentialsManager","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","signUpWithPassword","username","password","signInWithSavedCredentials"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,+BAA4B;AAG3D,OAAO,SAASC,kBAAkBA,CAChCC,WAAmB,EACnBC,qCAA8C,GAAG,KAAK,EACrC;EACjB,OAAOH,kBAAkB,CAACC,kBAAkB,CAC1CC,WAAW,EACXC,qCACF,CAAC;AACH;AAEA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACDN,kBAAkB,CAACI,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AAC/D;AAEA,OAAO,SAASE,0BAA0BA,CACxCL,WAAmB,EACE;EACrB,OAAOF,kBAAkB,CAACO,0BAA0B,CAACL,WAAW,CAAC;AACnE","ignoreList":[]}
1
+ {"version":3,"names":["CredentialsManager","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","signUpWithPassword","username","password","signInWithSavedCredentials","signInWithGoogle","params","nonce","autoSelectEnabled","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,+BAA4B;AAG3D,OAAO,SAASC,kBAAkBA,CAChCC,WAAmB,EACnBC,qCAA8C,GAAG,KAAK,EACrC;EACjB,OAAOH,kBAAkB,CAACC,kBAAkB,CAC1CC,WAAW,EACXC,qCACF,CAAC;AACH;AAEA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACDN,kBAAkB,CAACI,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AAC/D;AAEA,OAAO,SAASE,0BAA0BA,CACxCL,WAAmB,EACE;EACrB,OAAOF,kBAAkB,CAACO,0BAA0B,CAACL,WAAW,CAAC;AACnE;AAEA,OAAO,SAASM,gBAAgBA,CAACC,MAIhC,EAA6B;EAC5B,OAAOT,kBAAkB,CAACQ,gBAAgB,CAAC;IACzC,GAAGC,MAAM;IACTC,KAAK,EAAED,MAAM,CAACC,KAAK,IAAI,EAAE;IACzBC,iBAAiB,EAAEF,MAAM,CAACE,iBAAiB,IAAI;EACjD,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,OAAOA,CAAA,EAAkB;EACvC,OAAOZ,kBAAkB,CAACY,OAAO,CAAC,CAAC;AACrC","ignoreList":[]}
@@ -7,6 +7,16 @@ type PasskeyCredential = {
7
7
  type: 'passkey';
8
8
  authenticationResponseJson: string;
9
9
  };
10
+ export type GoogleCredential = {
11
+ type: 'google-signin';
12
+ id: string;
13
+ idToken: string;
14
+ displayName?: string;
15
+ familyName?: string;
16
+ givenName?: string;
17
+ profilePicture?: string;
18
+ phoneNumber?: string;
19
+ };
10
20
  type PasswordCredential = {
11
21
  type: 'password';
12
22
  username: string;
@@ -17,6 +27,12 @@ export interface Spec extends TurboModule {
17
27
  signUpWithPasskeys(requestJson: Object, preferImmediatelyAvailableCredentials: boolean): Promise<Object>;
18
28
  signUpWithPassword(credObject: CredObject): void;
19
29
  signInWithSavedCredentials(requestJson: Object): Promise<Credential>;
30
+ signInWithGoogle(params: {
31
+ nonce: string;
32
+ serverClientId: string;
33
+ autoSelectEnabled: boolean;
34
+ }): Promise<GoogleCredential>;
35
+ signOut(): Promise<null>;
20
36
  }
21
37
  declare const _default: Spec;
22
38
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeCredentialsManager.d.ts","sourceRoot":"","sources":["../../../../src/NativeCredentialsManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEhE,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAEjD,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACtE;;AAED,wBAA4E"}
1
+ {"version":3,"file":"NativeCredentialsManager.d.ts","sourceRoot":"","sources":["../../../../src/NativeCredentialsManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEhE,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAEjD,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrE,gBAAgB,CAAC,MAAM,EAAE;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;;AAED,wBAA4E"}
@@ -1,8 +1,14 @@
1
- import type { Credential } from './NativeCredentialsManager';
1
+ import type { Credential, GoogleCredential } from './NativeCredentialsManager';
2
2
  export declare function signUpWithPasskeys(requestJson: Object, preferImmediatelyAvailableCredentials?: boolean): Promise<Object>;
3
3
  export declare function signUpWithPassword({ username, password, }: {
4
4
  username: string;
5
5
  password: string;
6
6
  }): void;
7
7
  export declare function signInWithSavedCredentials(requestJson: Object): Promise<Credential>;
8
+ export declare function signInWithGoogle(params: {
9
+ nonce?: string;
10
+ serverClientId: string;
11
+ autoSelectEnabled?: boolean;
12
+ }): Promise<GoogleCredential>;
13
+ export declare function signOut(): Promise<null>;
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,qCAAqC,GAAE,OAAe,GACrD,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,QAEA;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAErB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE/E,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,qCAAqC,GAAE,OAAe,GACrD,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,QAEA;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAM5B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC"}