react-native-credentials-manager 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,7 +20,9 @@ A React Native library that implements the [Credential Manager](https://develope
20
20
 
21
21
  ## Platform Support
22
22
 
23
- - ✅ **Android**: Full implementation with Credential Manager API (Android 14+ / API 34+)
23
+ - ✅ **Android**: Implementation with Credential Manager API (Android 4.4+ / API 19+)
24
+ - **Android 4.4+ (API 19+)**: Username/password storage and federated sign-in (Google Sign-In)
25
+ - **Android 9+ (API 28+)**: Full passkey (FIDO2/WebAuthn) support
24
26
  - ✅ **iOS**: Full implementation with AuthenticationServices (iOS 16.0+)
25
27
 
26
28
  ### Platform-Specific Features
@@ -32,182 +34,12 @@ A React Native library that implements the [Credential Manager](https://develope
32
34
  | Manual Password Storage | ✅ Credential Manager API | ❌ Not supported (iOS limitation) |
33
35
  | Third-party Sign In | ✅ Google Sign In | ✅ Apple Sign In |
34
36
 
35
- > [!NOTE] > **iOS Implementation**: This library strictly follows Apple's Authentication Services framework. Manual password storage is not supported on iOS as it's not part of Apple's official Authentication Services APIs. Use AutoFill passwords instead.
36
-
37
37
  > [!IMPORTANT]
38
38
  > 📚 **Documentation has moved!** The complete documentation is now available at [https://docs.benjamineruvieru.com/docs/react-native-credentials-manager/](https://docs.benjamineruvieru.com/docs/react-native-credentials-manager/)
39
39
 
40
- ## Platform-Specific Parameters
41
-
42
- When using this library, be aware that some parameters are platform-specific:
43
-
44
- | Function | Parameter | Platform Support | Notes |
45
- | ---------------------- | --------------------------------------- | ---------------- | ----------------------------------------------------------------- |
46
- | `signUpWithPasskeys()` | `preferImmediatelyAvailableCredentials` | Android only | This parameter is ignored on iOS |
47
- | `signUpWithPassword()` | All parameters | Android only | This function is not supported on iOS and will throw an error |
48
- | `signIn()` | `googleSignIn` | Android only | This parameter is ignored on iOS |
49
- | `signIn()` | `appleSignIn` | iOS only | This parameter is ignored on Android |
50
- | `signUpWithGoogle()` | All parameters | Cross-platform | Uses Google Sign-In on Android, Apple Sign-In on iOS |
51
- | `signUpWithApple()` | All parameters | iOS only | This function is not supported on Android and will throw an error |
52
-
53
- ### Handling Platform Differences
54
-
55
- To handle these platform differences, you can use conditional code:
56
-
57
- ```typescript
58
- // For passkey registration
59
- await signUpWithPasskeys(
60
- requestJson,
61
- Platform.OS === 'android' ? true : false // preferImmediatelyAvailableCredentials
62
- );
63
-
64
- // For sign-in
65
- await signIn(
66
- [
67
- 'passkeys',
68
- 'password',
69
- Platform.OS === 'android' ? 'google-signin' : 'apple-signin',
70
- ],
71
- {
72
- passkeys: passkeyParams,
73
- ...(Platform.OS === 'android'
74
- ? { googleSignIn: { serverClientId: 'your-client-id' } }
75
- : { appleSignIn: { requestedScopes: ['fullName', 'email'] } }),
76
- }
77
- );
78
- ```
79
-
80
- ## iOS Setup Requirements
81
-
82
- ### 1. Associated Domains
83
-
84
- Add the Associated Domains capability to your iOS app:
85
-
86
- 1. In Xcode, select your project
87
- 2. Go to Signing & Capabilities
88
- 3. Add "Associated Domains" capability
89
- 4. Add your domain with the `webcredentials` service: `webcredentials:yourdomain.com`
90
-
91
- ### 2. Apple App Site Association (AASA)
92
-
93
- Ensure your domain has a proper AASA file at `https://yourdomain.com/.well-known/apple-app-site-association`:
94
-
95
- ```json
96
- {
97
- "webcredentials": {
98
- "apps": ["TEAMID.com.yourcompany.yourapp"]
99
- }
100
- }
101
- ```
102
-
103
- ### 3. Apple Sign In Setup (Optional)
104
-
105
- If using Apple Sign In, configure it in your Apple Developer account:
106
-
107
- 1. Enable "Sign In with Apple" capability in Xcode
108
- 2. Configure Sign In with Apple in your Apple Developer account
109
- 3. Add your app's bundle identifier to the Sign In with Apple configuration
110
-
111
- ## Quick Example
112
-
113
- ```typescript
114
- import {
115
- signUpWithPasskeys,
116
- signUpWithPassword, // Android only - throws error on iOS
117
- signUpWithGoogle, // Cross-platform: Google on Android, Apple on iOS
118
- signUpWithApple, // iOS-specific function
119
- signIn,
120
- signOut,
121
- type Credential,
122
- type AppleCredential,
123
- type GoogleCredential,
124
- type AppleSignInParams,
125
- type GoogleSignInParams,
126
- } from 'react-native-credentials-manager';
127
-
128
- // Sign up with passkey (works on both platforms)
129
- const passkeyResult = await signUpWithPasskeys({
130
- challenge: 'base64-challenge',
131
- rp: { name: 'Your App', id: 'yourdomain.com' },
132
- user: { id: 'user-id', name: 'username', displayName: 'User Name' },
133
- // ... other WebAuthn options
134
- });
135
-
136
- // Password handling - platform differences
137
- try {
138
- // This will work on Android but throw an error on iOS
139
- await signUpWithPassword({ username: 'user', password: 'pass' });
140
- } catch (error) {
141
- if (Platform.OS === 'ios') {
142
- console.log(
143
- 'Manual password storage not supported on iOS. Use AutoFill instead.'
144
- );
145
- }
146
- }
147
-
148
- // Unified sign in (supports passkeys, AutoFill passwords, and platform sign-in)
149
- const credential = await signIn(
150
- ['passkeys', 'password', 'google-signin'], // 'google-signin' becomes 'apple-signin' on iOS
151
- {
152
- passkeys: { challenge: 'base64-challenge', rpId: 'yourdomain.com' },
153
- googleSignIn: { serverClientId: 'your-client-id' },
154
- }
155
- );
156
-
157
- // Platform-specific sign-up methods
158
- if (Platform.OS === 'ios') {
159
- // Direct Apple Sign In (iOS only) - uses AuthenticationServices
160
- const appleCredential = await signUpWithApple({
161
- requestedScopes: ['fullName', 'email'],
162
- });
163
- } else {
164
- // Google Sign In (Android only)
165
- const googleCredential = await signUpWithGoogle({
166
- serverClientId: 'your-client-id',
167
- });
168
- }
169
-
170
- // Cross-platform sign-up (automatically uses the appropriate method)
171
- const credential = await signUpWithGoogle({
172
- serverClientId: 'your-client-id', // Used on Android, ignored on iOS
173
- });
174
- // Returns GoogleCredential on Android, AppleCredential on iOS
175
-
176
- // Handle different credential types
177
- if (credential.type === 'passkey') {
178
- console.log('Passkey authentication:', credential.authenticationResponseJson);
179
- } else if (credential.type === 'password') {
180
- console.log('AutoFill Password:', credential.username, credential.password);
181
- } else if (credential.type === 'google-signin') {
182
- console.log('Google Sign In:', credential.idToken);
183
- } else if (credential.type === 'apple-signin') {
184
- console.log('Apple Sign In:', credential.idToken, credential.email);
185
- }
186
- ```
187
-
188
- ## Cross-Platform Compatibility
189
-
190
- The library provides excellent cross-platform compatibility while respecting platform limitations:
191
-
192
- - **`signUpWithGoogle()`**: Cross-platform function
193
- - Android: Uses Google Sign In
194
- - iOS: Automatically uses Apple Sign In (AuthenticationServices)
195
- - **`signUpWithApple()`**: iOS-specific function
196
- - iOS: Uses Apple Sign In (AuthenticationServices)
197
- - Android: Rejects with clear error message
198
- - **`signUpWithPassword()`**: Platform-specific behavior
199
- - Android: Uses Credential Manager API
200
- - iOS: Rejects (manual storage not supported by AuthenticationServices)
201
- - **AutoFill Passwords**: Available on both platforms through `signIn` method
202
- - **Error handling**: Platform-specific errors are handled gracefully
203
-
204
- ## iOS AuthenticationServices Integration
205
-
206
- The iOS implementation strictly follows Apple's Authentication Services framework:
207
-
208
- - **Passkeys**: `ASAuthorizationPlatformPublicKeyCredentialProvider`
209
- - **AutoFill Passwords**: `ASAuthorizationPasswordProvider`
210
- - **Apple Sign In**: `ASAuthorizationAppleIDProvider`
211
- - **No Custom Keychain**: Manual credential storage is handled by the system
40
+ > [!NOTE] > **iOS Implementation**: This library strictly follows Apple's Authentication Services framework. Manual password storage is not supported on iOS as it's not part of Apple's official Authentication Services APIs. Use AutoFill passwords instead.
212
41
 
213
- This ensures compliance with Apple's security guidelines and provides the best user experience on iOS.
42
+ > [!NOTE] > **Android Implementation**: Features are available based on Android version:
43
+ >
44
+ > - **API 19+**: Basic credential storage and Google Sign-In
45
+ > - **API 28+**: Passkey support added
@@ -229,7 +229,7 @@ class CredentialHandler(
229
229
  serverClientId: String,
230
230
  autoSelectEnabled: Boolean,
231
231
  ): GetGoogleIdOption {
232
- Log.d("CredentialManager", "getGoogleId - setFilterByAuthorizedAccounts: $setFilterByAuthorizedAccounts")
232
+ Log.d("CredentialManager", "getGoogleId - setFilterByAuthorizedAccounts: $setFilterByAuthorizedAccounts autoSelectEnabled: $autoSelectEnabled")
233
233
 
234
234
  return GetGoogleIdOption
235
235
  .Builder()
@@ -131,6 +131,8 @@ class CredentialsManagerModule(
131
131
  val data = credentialHandler.handleSignInResult(result)
132
132
  promise.resolve(data)
133
133
  } catch (e: GetCredentialException) {
134
+ Log.d("CredentialManager", "First sign in attempt failed", e)
135
+
134
136
  when (e) {
135
137
  is NoCredentialException -> {
136
138
  try {
@@ -20,8 +20,6 @@ function signUpWithPassword({
20
20
  password
21
21
  }) {
22
22
  if (_reactNative.Platform.OS === 'ios') {
23
- // iOS only supports AutoFill passwords through Apple's Authentication Services
24
- // Manual password storage is not supported
25
23
  return Promise.reject(new Error('Manual password storage is not supported on iOS. Use AutoFill passwords through signIn method instead.'));
26
24
  }
27
25
  return _NativeCredentialsManager.default.signUpWithPassword({
@@ -30,33 +28,25 @@ function signUpWithPassword({
30
28
  });
31
29
  }
32
30
  function signIn(options, params) {
33
- // Transform options for iOS compatibility
34
- const processedOptions = options.map(option => {
35
- if (option === 'google-signin' && _reactNative.Platform.OS === 'ios') {
36
- // Automatically replace google-signin with apple-signin on iOS
37
- return 'apple-signin';
38
- }
39
- return option;
40
- });
41
-
42
- // Prepare parameters for both platforms
43
31
  const signInParams = {
44
- ...params,
45
- googleSignIn: {
46
- serverClientId: params?.googleSignIn?.serverClientId ?? '',
47
- nonce: params?.googleSignIn?.nonce ?? '',
48
- autoSelectEnabled: params?.googleSignIn?.autoSelectEnabled ?? true
49
- }
32
+ passkeys: params.passkeys
50
33
  };
34
+ if (options.includes('google-signin')) {
35
+ signInParams.googleSignIn = {
36
+ serverClientId: params.googleSignIn?.serverClientId ?? '',
37
+ nonce: params.googleSignIn?.nonce ?? '',
38
+ autoSelectEnabled: params.googleSignIn?.autoSelectEnabled ?? true
39
+ };
40
+ }
51
41
 
52
42
  // If we have Apple Sign In option on iOS, add Apple params
53
- if (_reactNative.Platform.OS === 'ios' && processedOptions.includes('apple-signin')) {
43
+ if (_reactNative.Platform.OS === 'ios' && options.includes('apple-signin')) {
54
44
  signInParams.appleSignIn = {
55
- nonce: params?.appleSignIn?.nonce || params?.googleSignIn?.nonce || '',
56
- requestedScopes: params?.appleSignIn?.requestedScopes || ['fullName', 'email']
45
+ nonce: params.appleSignIn?.nonce ?? '',
46
+ requestedScopes: params.appleSignIn?.requestedScopes ?? ['fullName', 'email']
57
47
  };
58
48
  }
59
- return _NativeCredentialsManager.default.signIn(processedOptions, signInParams);
49
+ return _NativeCredentialsManager.default.signIn([...options], signInParams);
60
50
  }
61
51
  function signUpWithGoogle(params) {
62
52
  if (_reactNative.Platform.OS === 'ios') {
@@ -1 +1 @@
1
- {"version":3,"names":["_NativeCredentialsManager","_interopRequireDefault","require","_reactNative","e","__esModule","default","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","CredentialsManager","signUpWithPassword","username","password","Platform","OS","Promise","reject","Error","signIn","options","params","processedOptions","map","option","signInParams","googleSignIn","serverClientId","nonce","autoSelectEnabled","includes","appleSignIn","requestedScopes","signUpWithGoogle","signUpWithApple","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_NativeCredentialsManager","_interopRequireDefault","require","_reactNative","e","__esModule","default","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","CredentialsManager","signUpWithPassword","username","password","Platform","OS","Promise","reject","Error","signIn","options","params","signInParams","passkeys","includes","googleSignIn","serverClientId","nonce","autoSelectEnabled","appleSignIn","requestedScopes","signUpWithGoogle","signUpWithApple","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;AAAA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AASA,IAAAC,YAAA,GAAAD,OAAA;AAAwC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAsBjC,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,EAAmB;EAClB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,wGACF,CACF,CAAC;EACH;EACA,OAAOR,iCAAkB,CAACC,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AACtE;AAEO,SAASO,MAAMA,CACpBC,OAAU,EACVC,MAIC,EACyB;EAC1B,MAAMC,YAWL,GAAG;IACFC,QAAQ,EAAEF,MAAM,CAACE;EACnB,CAAC;EAED,IAAIH,OAAO,CAACI,QAAQ,CAAC,eAAe,CAAC,EAAE;IACrCF,YAAY,CAACG,YAAY,GAAG;MAC1BC,cAAc,EAAEL,MAAM,CAACI,YAAY,EAAEC,cAAc,IAAI,EAAE;MACzDC,KAAK,EAAEN,MAAM,CAACI,YAAY,EAAEE,KAAK,IAAI,EAAE;MACvCC,iBAAiB,EAAEP,MAAM,CAACI,YAAY,EAAEG,iBAAiB,IAAI;IAC/D,CAAC;EACH;;EAEA;EACA,IAAId,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAIK,OAAO,CAACI,QAAQ,CAAC,cAAc,CAAC,EAAE;IAC7DF,YAAY,CAACO,WAAW,GAAG;MACzBF,KAAK,EAAEN,MAAM,CAACQ,WAAW,EAAEF,KAAK,IAAI,EAAE;MACtCG,eAAe,EAAET,MAAM,CAACQ,WAAW,EAAEC,eAAe,IAAI,CACtD,UAAU,EACV,OAAO;IAEX,CAAC;EACH;EAEA,OAAOpB,iCAAkB,CAACS,MAAM,CAAC,CAAC,GAAGC,OAAO,CAAC,EAAEE,YAAY,CAAC;AAG9D;AAEO,SAASS,gBAAgBA,CAC9BV,MAA0B,EACC;EAC3B,IAAIP,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,0EACF,CACF,CAAC;EACH;EAEA,OAAOR,iCAAkB,CAACqB,gBAAgB,CAAC;IACzC,GAAGV,MAAM;IACTM,KAAK,EAAEN,MAAM,CAACM,KAAK,IAAI,EAAE;IACzBC,iBAAiB,EAAEP,MAAM,CAACO,iBAAiB,IAAI;EACjD,CAAC,CAAC;AACJ;AAEO,SAASI,eAAeA,CAC7BX,MAAyB,GAAG,CAAC,CAAC,EACJ;EAC1B,IAAIP,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,0EACF,CACF,CAAC;EACH;;EAEA;EACA,OAAOR,iCAAkB,CAACsB,eAAe,CAAC;IACxCL,KAAK,EAAEN,MAAM,CAACM,KAAK,IAAI,EAAE;IACzBG,eAAe,EAAET,MAAM,CAACS,eAAe,IAAI,CAAC,UAAU,EAAE,OAAO;EACjE,CAAC,CAAC;AACJ;AAEO,SAASG,OAAOA,CAAA,EAAkB;EACvC,OAAOvB,iCAAkB,CAACuB,OAAO,CAAC,CAAC;AACrC;;AAEA","ignoreList":[]}
@@ -10,8 +10,6 @@ export function signUpWithPassword({
10
10
  password
11
11
  }) {
12
12
  if (Platform.OS === 'ios') {
13
- // iOS only supports AutoFill passwords through Apple's Authentication Services
14
- // Manual password storage is not supported
15
13
  return Promise.reject(new Error('Manual password storage is not supported on iOS. Use AutoFill passwords through signIn method instead.'));
16
14
  }
17
15
  return CredentialsManager.signUpWithPassword({
@@ -20,33 +18,25 @@ export function signUpWithPassword({
20
18
  });
21
19
  }
22
20
  export function signIn(options, params) {
23
- // Transform options for iOS compatibility
24
- const processedOptions = options.map(option => {
25
- if (option === 'google-signin' && Platform.OS === 'ios') {
26
- // Automatically replace google-signin with apple-signin on iOS
27
- return 'apple-signin';
28
- }
29
- return option;
30
- });
31
-
32
- // Prepare parameters for both platforms
33
21
  const signInParams = {
34
- ...params,
35
- googleSignIn: {
36
- serverClientId: params?.googleSignIn?.serverClientId ?? '',
37
- nonce: params?.googleSignIn?.nonce ?? '',
38
- autoSelectEnabled: params?.googleSignIn?.autoSelectEnabled ?? true
39
- }
22
+ passkeys: params.passkeys
40
23
  };
24
+ if (options.includes('google-signin')) {
25
+ signInParams.googleSignIn = {
26
+ serverClientId: params.googleSignIn?.serverClientId ?? '',
27
+ nonce: params.googleSignIn?.nonce ?? '',
28
+ autoSelectEnabled: params.googleSignIn?.autoSelectEnabled ?? true
29
+ };
30
+ }
41
31
 
42
32
  // If we have Apple Sign In option on iOS, add Apple params
43
- if (Platform.OS === 'ios' && processedOptions.includes('apple-signin')) {
33
+ if (Platform.OS === 'ios' && options.includes('apple-signin')) {
44
34
  signInParams.appleSignIn = {
45
- nonce: params?.appleSignIn?.nonce || params?.googleSignIn?.nonce || '',
46
- requestedScopes: params?.appleSignIn?.requestedScopes || ['fullName', 'email']
35
+ nonce: params.appleSignIn?.nonce ?? '',
36
+ requestedScopes: params.appleSignIn?.requestedScopes ?? ['fullName', 'email']
47
37
  };
48
38
  }
49
- return CredentialsManager.signIn(processedOptions, signInParams);
39
+ return CredentialsManager.signIn([...options], signInParams);
50
40
  }
51
41
  export function signUpWithGoogle(params) {
52
42
  if (Platform.OS === 'ios') {
@@ -1 +1 @@
1
- {"version":3,"names":["CredentialsManager","Platform","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","signUpWithPassword","username","password","OS","Promise","reject","Error","signIn","options","params","processedOptions","map","option","signInParams","googleSignIn","serverClientId","nonce","autoSelectEnabled","includes","appleSignIn","requestedScopes","signUpWithGoogle","signUpWithApple","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CredentialsManager","Platform","signUpWithPasskeys","requestJson","preferImmediatelyAvailableCredentials","signUpWithPassword","username","password","OS","Promise","reject","Error","signIn","options","params","signInParams","passkeys","includes","googleSignIn","serverClientId","nonce","autoSelectEnabled","appleSignIn","requestedScopes","signUpWithGoogle","signUpWithApple","signOut"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,+BAA4B;AAS3D,SAASC,QAAQ,QAAQ,cAAc;AAsBvC,OAAO,SAASC,kBAAkBA,CAChCC,WAAmB,EACnBC,qCAA8C,GAAG,KAAK,EACrC;EACjB,OAAOJ,kBAAkB,CAACE,kBAAkB,CAC1CC,WAAW,EACXC,qCACF,CAAC;AACH;AAEA,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,QAAQ;EACRC;AAIF,CAAC,EAAmB;EAClB,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,wGACF,CACF,CAAC;EACH;EACA,OAAOX,kBAAkB,CAACK,kBAAkB,CAAC;IAAEE,QAAQ;IAAED;EAAS,CAAC,CAAC;AACtE;AAEA,OAAO,SAASM,MAAMA,CACpBC,OAAU,EACVC,MAIC,EACyB;EAC1B,MAAMC,YAWL,GAAG;IACFC,QAAQ,EAAEF,MAAM,CAACE;EACnB,CAAC;EAED,IAAIH,OAAO,CAACI,QAAQ,CAAC,eAAe,CAAC,EAAE;IACrCF,YAAY,CAACG,YAAY,GAAG;MAC1BC,cAAc,EAAEL,MAAM,CAACI,YAAY,EAAEC,cAAc,IAAI,EAAE;MACzDC,KAAK,EAAEN,MAAM,CAACI,YAAY,EAAEE,KAAK,IAAI,EAAE;MACvCC,iBAAiB,EAAEP,MAAM,CAACI,YAAY,EAAEG,iBAAiB,IAAI;IAC/D,CAAC;EACH;;EAEA;EACA,IAAIpB,QAAQ,CAACO,EAAE,KAAK,KAAK,IAAIK,OAAO,CAACI,QAAQ,CAAC,cAAc,CAAC,EAAE;IAC7DF,YAAY,CAACO,WAAW,GAAG;MACzBF,KAAK,EAAEN,MAAM,CAACQ,WAAW,EAAEF,KAAK,IAAI,EAAE;MACtCG,eAAe,EAAET,MAAM,CAACQ,WAAW,EAAEC,eAAe,IAAI,CACtD,UAAU,EACV,OAAO;IAEX,CAAC;EACH;EAEA,OAAOvB,kBAAkB,CAACY,MAAM,CAAC,CAAC,GAAGC,OAAO,CAAC,EAAEE,YAAY,CAAC;AAG9D;AAEA,OAAO,SAASS,gBAAgBA,CAC9BV,MAA0B,EACC;EAC3B,IAAIb,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,0EACF,CACF,CAAC;EACH;EAEA,OAAOX,kBAAkB,CAACwB,gBAAgB,CAAC;IACzC,GAAGV,MAAM;IACTM,KAAK,EAAEN,MAAM,CAACM,KAAK,IAAI,EAAE;IACzBC,iBAAiB,EAAEP,MAAM,CAACO,iBAAiB,IAAI;EACjD,CAAC,CAAC;AACJ;AAEA,OAAO,SAASI,eAAeA,CAC7BX,MAAyB,GAAG,CAAC,CAAC,EACJ;EAC1B,IAAIb,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAOC,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CACP,0EACF,CACF,CAAC;EACH;;EAEA;EACA,OAAOX,kBAAkB,CAACyB,eAAe,CAAC;IACxCL,KAAK,EAAEN,MAAM,CAACM,KAAK,IAAI,EAAE;IACzBG,eAAe,EAAET,MAAM,CAACS,eAAe,IAAI,CAAC,UAAU,EAAE,OAAO;EACjE,CAAC,CAAC;AACJ;AAEA,OAAO,SAASG,OAAOA,CAAA,EAAkB;EACvC,OAAO1B,kBAAkB,CAAC0B,OAAO,CAAC,CAAC;AACrC;;AAEA","ignoreList":[]}
@@ -4,12 +4,12 @@ type CredObject = {
4
4
  username: string;
5
5
  password: string;
6
6
  };
7
- type PasswordCredential = {
7
+ export type PasswordCredential = {
8
8
  type: 'password';
9
9
  username: string;
10
10
  password: string;
11
11
  };
12
- type PasskeyCredential = {
12
+ export type PasskeyCredential = {
13
13
  type: 'passkey';
14
14
  authenticationResponseJson: string;
15
15
  };
@@ -57,7 +57,7 @@ export interface Spec extends TurboModule {
57
57
  /**
58
58
  * Sign in with various methods
59
59
  * - 'passkeys': Supported on both platforms
60
- * - 'password': Supported on both platforms (uses AutoFill)
60
+ * - 'password': Supported on android
61
61
  * - 'google-signin': Android only
62
62
  * - 'apple-signin': iOS only (not available on Android)
63
63
  */
@@ -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,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAGnB,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAGF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,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;AAGF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,CAAC;AAGpB,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;OAIG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;;OAMG;IACH,MAAM,CACJ,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExE;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;;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,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAGnB,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAGF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,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;AAGF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,CAAC;AAGpB,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;OAIG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;;OAMG;IACH,MAAM,CACJ,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExE;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;;AAED,wBAA4E"}
@@ -1,4 +1,4 @@
1
- import type { Credential, GoogleCredential, AppleCredential, SignInOption } from './NativeCredentialsManager';
1
+ import type { Credential, GoogleCredential, AppleCredential, SignInOption, PasskeyCredential, PasswordCredential } from './NativeCredentialsManager';
2
2
  type GoogleSignInParams = {
3
3
  nonce?: string;
4
4
  serverClientId: string;
@@ -8,18 +8,25 @@ type AppleSignInParams = {
8
8
  nonce?: string;
9
9
  requestedScopes?: ('fullName' | 'email')[];
10
10
  };
11
+ type CredentialMap = {
12
+ 'passkeys': PasskeyCredential;
13
+ 'password': PasswordCredential;
14
+ 'google-signin': GoogleCredential;
15
+ 'apple-signin': AppleCredential;
16
+ };
17
+ type SignInResult<T extends readonly SignInOption[]> = CredentialMap[T[number]];
11
18
  export declare function signUpWithPasskeys(requestJson: Object, preferImmediatelyAvailableCredentials?: boolean): Promise<Object>;
12
19
  export declare function signUpWithPassword({ username, password, }: {
13
20
  username: string;
14
21
  password: string;
15
22
  }): Promise<Object>;
16
- export declare function signIn(options: SignInOption[], params: {
23
+ export declare function signIn<T extends readonly SignInOption[]>(options: T, params: {
17
24
  passkeys?: Object;
18
25
  googleSignIn?: GoogleSignInParams;
19
26
  appleSignIn?: AppleSignInParams;
20
- }): Promise<Credential>;
21
- export declare function signUpWithGoogle(params: GoogleSignInParams): Promise<GoogleCredential | AppleCredential>;
27
+ }): Promise<SignInResult<T>>;
28
+ export declare function signUpWithGoogle(params: GoogleSignInParams): Promise<GoogleCredential>;
22
29
  export declare function signUpWithApple(params?: AppleSignInParams): Promise<AppleCredential>;
23
30
  export declare function signOut(): Promise<null>;
24
- export type { Credential, GoogleCredential, AppleCredential, SignInOption, GoogleSignInParams, AppleSignInParams, };
31
+ export type { Credential, GoogleCredential, AppleCredential, SignInOption, GoogleSignInParams, AppleSignInParams, PasskeyCredential, PasswordCredential, };
25
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,4BAA4B,CAAC;AAGpC,KAAK,kBAAkB,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5C,CAAC;AAEF,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,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,GAAG,eAAe,CAAC,CAc7C;AAED,wBAAgB,eAAe,CAC7B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;AAGD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAGpC,KAAK,kBAAkB,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5C,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,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,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,EACtD,OAAO,EAAE,CAAC,EACV,MAAM,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAsC1B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED,wBAAgB,eAAe,CAC7B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;AAGD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,CAAC"}
@@ -4,12 +4,12 @@ type CredObject = {
4
4
  username: string;
5
5
  password: string;
6
6
  };
7
- type PasswordCredential = {
7
+ export type PasswordCredential = {
8
8
  type: 'password';
9
9
  username: string;
10
10
  password: string;
11
11
  };
12
- type PasskeyCredential = {
12
+ export type PasskeyCredential = {
13
13
  type: 'passkey';
14
14
  authenticationResponseJson: string;
15
15
  };
@@ -57,7 +57,7 @@ export interface Spec extends TurboModule {
57
57
  /**
58
58
  * Sign in with various methods
59
59
  * - 'passkeys': Supported on both platforms
60
- * - 'password': Supported on both platforms (uses AutoFill)
60
+ * - 'password': Supported on android
61
61
  * - 'google-signin': Android only
62
62
  * - 'apple-signin': iOS only (not available on Android)
63
63
  */
@@ -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,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAGnB,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAGF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,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;AAGF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,CAAC;AAGpB,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;OAIG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;;OAMG;IACH,MAAM,CACJ,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExE;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;;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,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,UAAU,GACV,eAAe,GACf,cAAc,CAAC;AAGnB,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAGF,KAAK,kBAAkB,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,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;AAGF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,UAAU,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,CAAC;AAGpB,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;;;OAIG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,qCAAqC,EAAE,OAAO,GAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;OAGG;IACH,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;;;OAMG;IACH,MAAM,CACJ,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAExE;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErE;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;;AAED,wBAA4E"}
@@ -1,4 +1,4 @@
1
- import type { Credential, GoogleCredential, AppleCredential, SignInOption } from './NativeCredentialsManager';
1
+ import type { Credential, GoogleCredential, AppleCredential, SignInOption, PasskeyCredential, PasswordCredential } from './NativeCredentialsManager';
2
2
  type GoogleSignInParams = {
3
3
  nonce?: string;
4
4
  serverClientId: string;
@@ -8,18 +8,25 @@ type AppleSignInParams = {
8
8
  nonce?: string;
9
9
  requestedScopes?: ('fullName' | 'email')[];
10
10
  };
11
+ type CredentialMap = {
12
+ 'passkeys': PasskeyCredential;
13
+ 'password': PasswordCredential;
14
+ 'google-signin': GoogleCredential;
15
+ 'apple-signin': AppleCredential;
16
+ };
17
+ type SignInResult<T extends readonly SignInOption[]> = CredentialMap[T[number]];
11
18
  export declare function signUpWithPasskeys(requestJson: Object, preferImmediatelyAvailableCredentials?: boolean): Promise<Object>;
12
19
  export declare function signUpWithPassword({ username, password, }: {
13
20
  username: string;
14
21
  password: string;
15
22
  }): Promise<Object>;
16
- export declare function signIn(options: SignInOption[], params: {
23
+ export declare function signIn<T extends readonly SignInOption[]>(options: T, params: {
17
24
  passkeys?: Object;
18
25
  googleSignIn?: GoogleSignInParams;
19
26
  appleSignIn?: AppleSignInParams;
20
- }): Promise<Credential>;
21
- export declare function signUpWithGoogle(params: GoogleSignInParams): Promise<GoogleCredential | AppleCredential>;
27
+ }): Promise<SignInResult<T>>;
28
+ export declare function signUpWithGoogle(params: GoogleSignInParams): Promise<GoogleCredential>;
22
29
  export declare function signUpWithApple(params?: AppleSignInParams): Promise<AppleCredential>;
23
30
  export declare function signOut(): Promise<null>;
24
- export type { Credential, GoogleCredential, AppleCredential, SignInOption, GoogleSignInParams, AppleSignInParams, };
31
+ export type { Credential, GoogleCredential, AppleCredential, SignInOption, GoogleSignInParams, AppleSignInParams, PasskeyCredential, PasswordCredential, };
25
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,4BAA4B,CAAC;AAGpC,KAAK,kBAAkB,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5C,CAAC;AAEF,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,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,GACA,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,GAAG,eAAe,CAAC,CAc7C;AAED,wBAAgB,eAAe,CAC7B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;AAGD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAGpC,KAAK,kBAAkB,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5C,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhF,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,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,YAAY,EAAE,EACtD,OAAO,EAAE,CAAC,EACV,MAAM,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAsC1B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED,wBAAgB,eAAe,CAC7B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvC;AAGD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-credentials-manager",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "A React Native library that implements the Credential Manager API for Android. This library allows you to manage passwords and passkeys in your React Native applications.",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -13,14 +13,14 @@ type CredObject = {
13
13
  password: string;
14
14
  };
15
15
 
16
- type PasswordCredential = {
16
+ export type PasswordCredential = {
17
17
  type: 'password';
18
18
  username: string;
19
19
  password: string;
20
20
  };
21
21
 
22
22
  // Passkey authentication types
23
- type PasskeyCredential = {
23
+ export type PasskeyCredential = {
24
24
  type: 'passkey';
25
25
  authenticationResponseJson: string;
26
26
  };
@@ -87,7 +87,7 @@ export interface Spec extends TurboModule {
87
87
  /**
88
88
  * Sign in with various methods
89
89
  * - 'passkeys': Supported on both platforms
90
- * - 'password': Supported on both platforms (uses AutoFill)
90
+ * - 'password': Supported on android
91
91
  * - 'google-signin': Android only
92
92
  * - 'apple-signin': iOS only (not available on Android)
93
93
  */
package/src/index.tsx CHANGED
@@ -4,6 +4,8 @@ import type {
4
4
  GoogleCredential,
5
5
  AppleCredential,
6
6
  SignInOption,
7
+ PasskeyCredential,
8
+ PasswordCredential,
7
9
  } from './NativeCredentialsManager';
8
10
  import { Platform } from 'react-native';
9
11
 
@@ -18,6 +20,15 @@ type AppleSignInParams = {
18
20
  requestedScopes?: ('fullName' | 'email')[];
19
21
  };
20
22
 
23
+ type CredentialMap = {
24
+ 'passkeys': PasskeyCredential;
25
+ 'password': PasswordCredential;
26
+ 'google-signin': GoogleCredential;
27
+ 'apple-signin': AppleCredential;
28
+ };
29
+
30
+ type SignInResult<T extends readonly SignInOption[]> = CredentialMap[T[number]];
31
+
21
32
  export function signUpWithPasskeys(
22
33
  requestJson: Object,
23
34
  preferImmediatelyAvailableCredentials: boolean = false
@@ -36,8 +47,6 @@ export function signUpWithPassword({
36
47
  password: string;
37
48
  }): Promise<Object> {
38
49
  if (Platform.OS === 'ios') {
39
- // iOS only supports AutoFill passwords through Apple's Authentication Services
40
- // Manual password storage is not supported
41
50
  return Promise.reject(
42
51
  new Error(
43
52
  'Manual password storage is not supported on iOS. Use AutoFill passwords through signIn method instead.'
@@ -47,50 +56,56 @@ export function signUpWithPassword({
47
56
  return CredentialsManager.signUpWithPassword({ password, username });
48
57
  }
49
58
 
50
- export function signIn(
51
- options: SignInOption[],
59
+ export function signIn<T extends readonly SignInOption[]>(
60
+ options: T,
52
61
  params: {
53
62
  passkeys?: Object;
54
63
  googleSignIn?: GoogleSignInParams;
55
64
  appleSignIn?: AppleSignInParams;
56
65
  }
57
- ): Promise<Credential> {
58
- // Transform options for iOS compatibility
59
- const processedOptions = options.map((option) => {
60
- if (option === 'google-signin' && Platform.OS === 'ios') {
61
- // Automatically replace google-signin with apple-signin on iOS
62
- return 'apple-signin';
63
- }
64
- return option;
65
- });
66
-
67
- // Prepare parameters for both platforms
68
- const signInParams: any = {
69
- ...params,
70
- googleSignIn: {
71
- serverClientId: params?.googleSignIn?.serverClientId ?? '',
72
- nonce: params?.googleSignIn?.nonce ?? '',
73
- autoSelectEnabled: params?.googleSignIn?.autoSelectEnabled ?? true,
74
- },
66
+ ): Promise<SignInResult<T>> {
67
+ const signInParams: {
68
+ passkeys?: Object;
69
+ googleSignIn?: {
70
+ serverClientId: string;
71
+ nonce: string;
72
+ autoSelectEnabled: boolean;
73
+ };
74
+ appleSignIn?: {
75
+ nonce: string;
76
+ requestedScopes: ('fullName' | 'email')[];
77
+ };
78
+ } = {
79
+ passkeys: params.passkeys,
75
80
  };
76
81
 
82
+ if (options.includes('google-signin')) {
83
+ signInParams.googleSignIn = {
84
+ serverClientId: params.googleSignIn?.serverClientId ?? '',
85
+ nonce: params.googleSignIn?.nonce ?? '',
86
+ autoSelectEnabled: params.googleSignIn?.autoSelectEnabled ?? true,
87
+ };
88
+ }
89
+
77
90
  // If we have Apple Sign In option on iOS, add Apple params
78
- if (Platform.OS === 'ios' && processedOptions.includes('apple-signin')) {
91
+ if (Platform.OS === 'ios' && options.includes('apple-signin')) {
79
92
  signInParams.appleSignIn = {
80
- nonce: params?.appleSignIn?.nonce || params?.googleSignIn?.nonce || '',
81
- requestedScopes: params?.appleSignIn?.requestedScopes || [
93
+ nonce: params.appleSignIn?.nonce ?? '',
94
+ requestedScopes: params.appleSignIn?.requestedScopes ?? [
82
95
  'fullName',
83
96
  'email',
84
97
  ],
85
98
  };
86
99
  }
87
100
 
88
- return CredentialsManager.signIn(processedOptions, signInParams);
101
+ return CredentialsManager.signIn([...options], signInParams) as Promise<
102
+ SignInResult<T>
103
+ >;
89
104
  }
90
105
 
91
106
  export function signUpWithGoogle(
92
107
  params: GoogleSignInParams
93
- ): Promise<GoogleCredential | AppleCredential> {
108
+ ): Promise<GoogleCredential> {
94
109
  if (Platform.OS === 'ios') {
95
110
  return Promise.reject(
96
111
  new Error(
@@ -136,4 +151,6 @@ export type {
136
151
  SignInOption,
137
152
  GoogleSignInParams,
138
153
  AppleSignInParams,
154
+ PasskeyCredential,
155
+ PasswordCredential,
139
156
  };