expo-local-authentication 57.0.0 → 57.0.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/localauthentication/LocalAuthenticationModule.kt +70 -63
  4. package/expo-module.config.json +1 -1
  5. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2-sources.jar +0 -0
  6. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2-sources.jar.md5 +1 -0
  7. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2-sources.jar.sha1 +1 -0
  8. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2-sources.jar.sha256 +1 -0
  9. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2-sources.jar.sha512 +1 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.aar +0 -0
  11. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.aar.md5 +1 -0
  12. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.aar.sha1 +1 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.aar.sha256 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.aar.sha512 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/{57.0.0/expo.modules.localauthentication-57.0.0.module → 57.0.2/expo.modules.localauthentication-57.0.2.module} +22 -22
  16. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.module.md5 +1 -0
  17. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.module.sha1 +1 -0
  18. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.module.sha256 +1 -0
  19. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.module.sha512 +1 -0
  20. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/{57.0.0/expo.modules.localauthentication-57.0.0.pom → 57.0.2/expo.modules.localauthentication-57.0.2.pom} +1 -1
  21. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.pom.md5 +1 -0
  22. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.pom.sha1 +1 -0
  23. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.pom.sha256 +1 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.2/expo.modules.localauthentication-57.0.2.pom.sha512 +1 -0
  25. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/maven-metadata.xml +4 -4
  26. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/maven-metadata.xml.md5 +1 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/maven-metadata.xml.sha1 +1 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/maven-metadata.xml.sha256 +1 -1
  29. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/maven-metadata.xml.sha512 +1 -1
  30. package/package.json +3 -3
  31. package/plugin/tsconfig.tsbuildinfo +1 -1
  32. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0-sources.jar +0 -0
  33. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0-sources.jar.md5 +0 -1
  34. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0-sources.jar.sha1 +0 -1
  35. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0-sources.jar.sha256 +0 -1
  36. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0-sources.jar.sha512 +0 -1
  37. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.aar +0 -0
  38. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.aar.md5 +0 -1
  39. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.aar.sha1 +0 -1
  40. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.aar.sha256 +0 -1
  41. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.aar.sha512 +0 -1
  42. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.module.md5 +0 -1
  43. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.module.sha1 +0 -1
  44. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.module.sha256 +0 -1
  45. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.module.sha512 +0 -1
  46. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.pom.md5 +0 -1
  47. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.pom.sha1 +0 -1
  48. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.pom.sha256 +0 -1
  49. package/local-maven-repo/host/exp/exponent/expo.modules.localauthentication/57.0.0/expo.modules.localauthentication-57.0.0.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 57.0.2 — 2026-07-22
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [Android] Ensure concurrent `authenticateAsync` calls don't resolve the active prompt's promise ([#45954](https://github.com/expo/expo/pull/45954) by [@kitten](https://github.com/kitten))
18
+
19
+ ## 57.0.1 — 2026-07-15
20
+
21
+ _This version does not introduce any user-facing changes._
22
+
13
23
  ## 57.0.0 — 2026-06-25
14
24
 
15
25
  _This version does not introduce any user-facing changes._
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '57.0.0'
7
+ version = '57.0.2'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.localauthentication"
11
11
  defaultConfig {
12
12
  versionCode 30
13
- versionName "57.0.0"
13
+ versionName "57.0.2"
14
14
  }
15
15
  }
16
16
 
@@ -90,8 +90,6 @@ class LocalAuthenticationModule : Module() {
90
90
  return@AsyncFunction
91
91
  }
92
92
 
93
- this@LocalAuthenticationModule.authOptions = options
94
-
95
93
  // BiometricPrompt callbacks are invoked on the main thread so also run this there to avoid
96
94
  // having to do locking.
97
95
  appContext.mainQueue.launch {
@@ -100,16 +98,22 @@ class LocalAuthenticationModule : Module() {
100
98
  }
101
99
 
102
100
  AsyncFunction<Unit>("cancelAuthenticate") {
103
- biometricPrompt?.cancelAuthentication()
101
+ val current = activePromise
102
+ val currentPrompt = biometricPrompt
103
+ activePromise = null
104
+ biometricPrompt = null
104
105
  isAuthenticating = false
106
+ isRetryingWithDeviceCredentials = false
107
+ currentPrompt?.cancelAuthentication()
108
+ current?.resolve(createResponse(error = "user_cancel"))
105
109
  }.runOnQueue(Queues.MAIN)
106
110
 
107
111
  OnActivityResult { activity, (requestCode, resultCode, data) ->
108
112
  if (requestCode == DEVICE_CREDENTIAL_FALLBACK_CODE) {
109
113
  if (resultCode == Activity.RESULT_OK) {
110
- promise?.resolve(createResponse())
114
+ activePromise?.resolve(createResponse())
111
115
  } else {
112
- promise?.resolve(
116
+ activePromise?.resolve(
113
117
  createResponse(
114
118
  error = "user_cancel",
115
119
  warning = "Device Credentials canceled"
@@ -120,8 +124,7 @@ class LocalAuthenticationModule : Module() {
120
124
  isAuthenticating = false
121
125
  isRetryingWithDeviceCredentials = false
122
126
  biometricPrompt = null
123
- promise = null
124
- authOptions = null
127
+ activePromise = null
125
128
  } else if (activity is FragmentActivity) {
126
129
  // If the user uses PIN as an authentication method, the result will be passed to the `onActivityResult`.
127
130
  // Unfortunately, react-native doesn't pass this value to the underlying fragment - we won't resolve the promise.
@@ -141,67 +144,65 @@ class LocalAuthenticationModule : Module() {
141
144
  private val biometricManager by lazy { BiometricManager.from(context) }
142
145
  private val packageManager by lazy { context.packageManager }
143
146
  private var biometricPrompt: BiometricPrompt? = null
144
- private var promise: Promise? = null
145
- private var authOptions: AuthOptions? = null
147
+ private var activePromise: Promise? = null
146
148
  private var isRetryingWithDeviceCredentials = false
147
149
  private var isAuthenticating = false
148
150
 
149
- private val authenticationCallback: BiometricPrompt.AuthenticationCallback = object : BiometricPrompt.AuthenticationCallback() {
151
+ private fun buildAuthenticationCallback(
152
+ callPromise: Promise,
153
+ callOptions: AuthOptions
154
+ ): BiometricPrompt.AuthenticationCallback = object : BiometricPrompt.AuthenticationCallback() {
150
155
  override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
151
- isAuthenticating = false
152
- isRetryingWithDeviceCredentials = false
153
- biometricPrompt = null
154
- promise?.resolve(
155
- Bundle().apply {
156
- putBoolean("success", true)
157
- }
158
- )
159
- promise = null
160
- authOptions = null
156
+ finishCall(callPromise) {
157
+ callPromise.resolve(
158
+ Bundle().apply {
159
+ putBoolean("success", true)
160
+ }
161
+ )
162
+ }
161
163
  }
162
164
 
163
165
  override fun onAuthenticationError(errMsgId: Int, errString: CharSequence) {
164
- // Make sure to fallback to the Device Credentials if the Biometrics hardware is unavailable.
165
- if (isBiometricUnavailable(errMsgId) && isDeviceSecure && !isRetryingWithDeviceCredentials) {
166
- val options = authOptions
167
-
168
- if (options != null) {
169
- val disableDeviceFallback = options.disableDeviceFallback
170
-
171
- // Don't run the device credentials fallback if it's disabled.
172
- if (!disableDeviceFallback) {
173
- promise?.let {
174
- isRetryingWithDeviceCredentials = true
175
- promptDeviceCredentialsFallback(options, it)
176
- return
177
- }
178
- }
179
- }
166
+ if (
167
+ isBiometricUnavailable(errMsgId) &&
168
+ isDeviceSecure &&
169
+ !isRetryingWithDeviceCredentials &&
170
+ !callOptions.disableDeviceFallback &&
171
+ activePromise === callPromise
172
+ ) {
173
+ isRetryingWithDeviceCredentials = true
174
+ promptDeviceCredentialsFallback(callOptions, callPromise)
175
+ return
180
176
  }
181
-
182
- isAuthenticating = false
183
- isRetryingWithDeviceCredentials = false
184
- biometricPrompt = null
185
- promise?.resolve(
186
- createResponse(
187
- error = convertErrorCode(errMsgId),
188
- warning = errString.toString()
177
+ finishCall(callPromise) {
178
+ callPromise.resolve(
179
+ createResponse(
180
+ error = convertErrorCode(errMsgId),
181
+ warning = errString.toString()
182
+ )
189
183
  )
190
- )
191
- promise = null
192
- authOptions = null
184
+ }
185
+ }
186
+ }
187
+
188
+ // Drop late callbacks for a call whose promise was already settled by another path (e.g. cancelAuthenticate).
189
+ private inline fun finishCall(callPromise: Promise, resolve: () -> Unit) {
190
+ if (activePromise !== callPromise) {
191
+ return
193
192
  }
193
+ activePromise = null
194
+ biometricPrompt = null
195
+ isAuthenticating = false
196
+ isRetryingWithDeviceCredentials = false
197
+ resolve()
194
198
  }
195
199
 
196
200
  @UiThread
197
201
  private fun authenticate(fragmentActivity: FragmentActivity, options: AuthOptions, promise: Promise) {
198
202
  if (isAuthenticating) {
199
- this.promise?.resolve(
200
- createResponse(
201
- error = "app_cancel"
202
- )
203
- )
204
- this.promise = promise
203
+ // Reject the new call rather than supersede. AndroidX `BiometricPrompt` won't show a
204
+ // replacement prompt while the previous fragment is still detaching
205
+ promise.resolve(createResponse(error = "app_cancel"))
205
206
  return
206
207
  }
207
208
 
@@ -212,9 +213,9 @@ class LocalAuthenticationModule : Module() {
212
213
  }
213
214
 
214
215
  isAuthenticating = true
215
- this.promise = promise
216
+ activePromise = promise
216
217
  val executor: Executor = Executors.newSingleThreadExecutor()
217
- val localBiometricPrompt = BiometricPrompt(fragmentActivity, executor, authenticationCallback)
218
+ val localBiometricPrompt = BiometricPrompt(fragmentActivity, executor, buildAuthenticationCallback(promise, options))
218
219
  biometricPrompt = localBiometricPrompt
219
220
  val promptInfoBuilder = PromptInfo.Builder().apply {
220
221
  setTitle(options.promptMessage)
@@ -231,19 +232,23 @@ class LocalAuthenticationModule : Module() {
231
232
  try {
232
233
  localBiometricPrompt.authenticate(promptInfo)
233
234
  } catch (e: NullPointerException) {
234
- promise.reject(UnexpectedException("Canceled authentication due to an internal error", e))
235
+ finishCall(promise) {
236
+ promise.reject(UnexpectedException("Canceled authentication due to an internal error", e))
237
+ }
235
238
  }
236
239
  }
237
240
 
238
241
  private fun promptDeviceCredentialsFallback(options: AuthOptions, promise: Promise) {
239
242
  val fragmentActivity = appContext.throwingActivity as FragmentActivity?
240
243
  if (fragmentActivity == null) {
241
- promise.resolve(
242
- createResponse(
243
- error = "not_available",
244
- warning = "getCurrentActivity() returned null"
244
+ finishCall(promise) {
245
+ promise.resolve(
246
+ createResponse(
247
+ error = "not_available",
248
+ warning = "getCurrentActivity() returned null"
249
+ )
245
250
  )
246
- )
251
+ }
247
252
  return
248
253
  }
249
254
 
@@ -261,7 +266,7 @@ class LocalAuthenticationModule : Module() {
261
266
  }
262
267
 
263
268
  val executor: Executor = Executors.newSingleThreadExecutor()
264
- val localBiometricPrompt = BiometricPrompt(fragmentActivity, executor, authenticationCallback)
269
+ val localBiometricPrompt = BiometricPrompt(fragmentActivity, executor, buildAuthenticationCallback(promise, options))
265
270
 
266
271
  biometricPrompt = localBiometricPrompt
267
272
 
@@ -277,7 +282,9 @@ class LocalAuthenticationModule : Module() {
277
282
  try {
278
283
  localBiometricPrompt.authenticate(promptInfo)
279
284
  } catch (e: NullPointerException) {
280
- promise.reject(UnexpectedException("Canceled authentication due to an internal error", e))
285
+ finishCall(promise) {
286
+ promise.reject(UnexpectedException("Canceled authentication due to an internal error", e))
287
+ }
281
288
  }
282
289
  }
283
290
  }
@@ -8,7 +8,7 @@
8
8
  "publication": {
9
9
  "groupId": "host.exp.exponent",
10
10
  "artifactId": "expo.modules.localauthentication",
11
- "version": "57.0.0",
11
+ "version": "57.0.2",
12
12
  "repository": "local-maven-repo"
13
13
  }
14
14
  }
@@ -0,0 +1 @@
1
+ dee21666f55911b740b67ee0a5958ede41f9b064ba963c1e557d630c0b655aa34792dd2246447059851a797433648d7246af058193b12322398a3af7e9dbea3a
@@ -0,0 +1 @@
1
+ fe4769341cb031026b62ec18ea844190897aa18cb7eb46aadfaca98e197f3b1d
@@ -0,0 +1 @@
1
+ 10281105904c66229528c821a793b179f6a23f1780ba15b99a997ce9302cd8053b6a3f2365b32d88eedaa2061e79a31339e2357d8809228693f9684ca1237ee4
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.localauthentication",
6
- "version": "57.0.0",
6
+ "version": "57.0.2",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.localauthentication-57.0.0.aar",
28
- "url": "expo.modules.localauthentication-57.0.0.aar",
29
- "size": 35501,
30
- "sha512": "4a44b831cfa4d6a9c689ad7ab91f2184a0692d3835681cdf47feb72d62e0e1b05b09cb73c2e275206831f74e0ca7ed9ae1175a5b01cdd131e10a75dac76327f8",
31
- "sha256": "bdf50a9b78af4376530212c90f1388a7ee82bd7bf574c9d5547720062a7af8b0",
32
- "sha1": "1885e563d5cb8a0ed380c30b637dc6ba652d8d14",
33
- "md5": "e2c5748293a69304a68f89289fe0a014"
27
+ "name": "expo.modules.localauthentication-57.0.2.aar",
28
+ "url": "expo.modules.localauthentication-57.0.2.aar",
29
+ "size": 36985,
30
+ "sha512": "10281105904c66229528c821a793b179f6a23f1780ba15b99a997ce9302cd8053b6a3f2365b32d88eedaa2061e79a31339e2357d8809228693f9684ca1237ee4",
31
+ "sha256": "fe4769341cb031026b62ec18ea844190897aa18cb7eb46aadfaca98e197f3b1d",
32
+ "sha1": "7218fcc92707c8042666d1544a972a91f06803a0",
33
+ "md5": "0150dac9e5ce0d9736c6315c21965ea6"
34
34
  }
35
35
  ]
36
36
  },
@@ -74,13 +74,13 @@
74
74
  ],
75
75
  "files": [
76
76
  {
77
- "name": "expo.modules.localauthentication-57.0.0.aar",
78
- "url": "expo.modules.localauthentication-57.0.0.aar",
79
- "size": 35501,
80
- "sha512": "4a44b831cfa4d6a9c689ad7ab91f2184a0692d3835681cdf47feb72d62e0e1b05b09cb73c2e275206831f74e0ca7ed9ae1175a5b01cdd131e10a75dac76327f8",
81
- "sha256": "bdf50a9b78af4376530212c90f1388a7ee82bd7bf574c9d5547720062a7af8b0",
82
- "sha1": "1885e563d5cb8a0ed380c30b637dc6ba652d8d14",
83
- "md5": "e2c5748293a69304a68f89289fe0a014"
77
+ "name": "expo.modules.localauthentication-57.0.2.aar",
78
+ "url": "expo.modules.localauthentication-57.0.2.aar",
79
+ "size": 36985,
80
+ "sha512": "10281105904c66229528c821a793b179f6a23f1780ba15b99a997ce9302cd8053b6a3f2365b32d88eedaa2061e79a31339e2357d8809228693f9684ca1237ee4",
81
+ "sha256": "fe4769341cb031026b62ec18ea844190897aa18cb7eb46aadfaca98e197f3b1d",
82
+ "sha1": "7218fcc92707c8042666d1544a972a91f06803a0",
83
+ "md5": "0150dac9e5ce0d9736c6315c21965ea6"
84
84
  }
85
85
  ]
86
86
  },
@@ -94,13 +94,13 @@
94
94
  },
95
95
  "files": [
96
96
  {
97
- "name": "expo.modules.localauthentication-57.0.0-sources.jar",
98
- "url": "expo.modules.localauthentication-57.0.0-sources.jar",
99
- "size": 5234,
100
- "sha512": "15392aa544db2feb44b08131b902e9401960607eee319fc555b2488989131270bc9a159307cbf3a1a0d91f9a72c4899dd67ba7a246149fa3029578d2c397eef4",
101
- "sha256": "7d69bf4d2d25b9b46deb5915b3ff220b6dbd55e87160ce5bbcad411a4512036e",
102
- "sha1": "2153b4e4ffd9d596fd6b465d99f8e9332ad57603",
103
- "md5": "1bee3523afb417e98cc4a7de19e6abf9"
97
+ "name": "expo.modules.localauthentication-57.0.2-sources.jar",
98
+ "url": "expo.modules.localauthentication-57.0.2-sources.jar",
99
+ "size": 5378,
100
+ "sha512": "dee21666f55911b740b67ee0a5958ede41f9b064ba963c1e557d630c0b655aa34792dd2246447059851a797433648d7246af058193b12322398a3af7e9dbea3a",
101
+ "sha256": "69226978778a8e21c344ae49af86d68e2b43b3f62073b87b8dcbaeb4c63b65a5",
102
+ "sha1": "295f49fd78428d1cf802f547833e9cd2cf45a93c",
103
+ "md5": "d0dc05f492a3ad7130a67669585529cc"
104
104
  }
105
105
  ]
106
106
  }
@@ -0,0 +1 @@
1
+ 5a9272930cbf77adf449cae59f471205635e517c88f7ce3047bde8977a3e4440
@@ -0,0 +1 @@
1
+ 9fdbbd1c6ac2e8591cbaea76d63f0aa2f1a5ea7716463b4d0613ed78a383758b7717f103fb0912074ff6bbeab6f251b444c2adc80ec63b5d2b1f20925685f920
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.localauthentication</artifactId>
12
- <version>57.0.0</version>
12
+ <version>57.0.2</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.localauthentication</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ 4cee94f5e5c837d9fe12a963e74f4c08cde9d96f6cda6676e285f97ecd22ab9a
@@ -0,0 +1 @@
1
+ 36a6e9f1eb6176cb54a02670936b671839722ec868ab9c216ecc230ff5c8e7aaa19777851c8807ac0c3a211ed7bb04c5a3c495c6735a9c8d3d19145a80b17fd2
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.localauthentication</artifactId>
5
5
  <versioning>
6
- <latest>57.0.0</latest>
7
- <release>57.0.0</release>
6
+ <latest>57.0.2</latest>
7
+ <release>57.0.2</release>
8
8
  <versions>
9
- <version>57.0.0</version>
9
+ <version>57.0.2</version>
10
10
  </versions>
11
- <lastUpdated>20260625191733</lastUpdated>
11
+ <lastUpdated>20260722161444</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- ab0d69ad6bdbb0688bb79cf57b3c012d
1
+ c864a7125fab6aa0af79d36727d23fd4
@@ -1 +1 @@
1
- 8e9cd343a6b01c627e8b59f82e36f7f26151bb44
1
+ bb35cc35fd60ac4c7516a12e769fb2c154f0cd83
@@ -1 +1 @@
1
- 9ca91eea880787cdaa43f51ebc6ab5e215e2da1402e22a84369ce0e060174fb6
1
+ 53b1be45f24cd38e7566f727a961291ca5985d08db6ca7c4ad6590d9269c3d88
@@ -1 +1 @@
1
- e8b3155ad243d7279d5a6c4156b1ba2131a22715ac65a6452585e6f1c64305b44ff6bafa68f1bc2d2c73afd6db2f1938087705259f279a12ffbbbb5693a9cb6b
1
+ d92535f8607357d5d33168802898743f301709b40dc9a7d8ee21cc29f7a8280e3080035d120d981908e16045b8c5022d1e42d6e5aee220b46b9d54505992086f
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-local-authentication",
3
- "version": "57.0.0",
3
+ "version": "57.0.2",
4
4
  "description": "Provides an API for FaceID and TouchID (iOS) or the Fingerprint API (Android) to authenticate the user with a face or fingerprint scan.",
5
5
  "main": "build/LocalAuthentication.js",
6
6
  "types": "build/LocalAuthentication.d.ts",
@@ -34,13 +34,13 @@
34
34
  "devDependencies": {
35
35
  "@types/invariant": "^2.2.33",
36
36
  "@types/node": "^22.14.0",
37
- "expo": "57.0.0-preview.0",
37
+ "expo": "57.0.8",
38
38
  "expo-module-scripts": "56.0.3"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "expo": "*"
42
42
  },
43
- "gitHead": "e3eb896c5fdcd89e0cded98ff4e35c9db12cc9c0",
43
+ "gitHead": "a4789f1e53353f4929b0baddcfe5a7c622b99c71",
44
44
  "scripts": {
45
45
  "build": "expo-module build",
46
46
  "clean": "expo-module clean",
@@ -1 +1 @@
1
- {"root":["./src/index.ts","./src/withlocalauthentication.ts"],"version":"6.0.3"}
1
+ {"root":["./src/withlocalauthentication.ts"],"version":"5.9.2"}
@@ -1 +0,0 @@
1
- 7d69bf4d2d25b9b46deb5915b3ff220b6dbd55e87160ce5bbcad411a4512036e
@@ -1 +0,0 @@
1
- 15392aa544db2feb44b08131b902e9401960607eee319fc555b2488989131270bc9a159307cbf3a1a0d91f9a72c4899dd67ba7a246149fa3029578d2c397eef4
@@ -1 +0,0 @@
1
- bdf50a9b78af4376530212c90f1388a7ee82bd7bf574c9d5547720062a7af8b0
@@ -1 +0,0 @@
1
- 4a44b831cfa4d6a9c689ad7ab91f2184a0692d3835681cdf47feb72d62e0e1b05b09cb73c2e275206831f74e0ca7ed9ae1175a5b01cdd131e10a75dac76327f8
@@ -1 +0,0 @@
1
- 0fca69dd592feee115c3ab8cc1b593db2cc21d94ff8abbc775dca9fb5740a6ea
@@ -1 +0,0 @@
1
- 8724d99fae47da58191a66dcd44386ee061179ca2a7e1bea82e6af14e544e315f4ab2e24254847a90d632f7323382209054fd210320f63a4ef0c65c57e69bf35
@@ -1 +0,0 @@
1
- a701555712c86d4d660c33afe1b37093aaae1be0fdcc69cab9f06e845dd9ce18
@@ -1 +0,0 @@
1
- 40fe82683a762c3adb25d16949132e665a9812894f4c2b3dbaa8e2c8255a8985c74443e48c36f66346850943e6ff9ea9c8cdfd529f77c301a9210ed89e50932d