one 2.6.17 → 2.6.19

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 (294) hide show
  1. package/One.podspec +2 -0
  2. package/android/src/main/java/com/margelo/nitro/one/HybridOneDevice.kt +124 -0
  3. package/android/src/main/java/com/margelo/nitro/one/HybridOneHaptics.kt +31 -0
  4. package/android/src/main/java/com/margelo/nitro/one/HybridOneImageManipulator.kt +25 -5
  5. package/android/src/main/java/com/margelo/nitro/one/HybridOneKeepAwake.kt +34 -9
  6. package/android/src/main/java/com/margelo/nitro/one/HybridOneSecureStore.kt +269 -78
  7. package/dist/cjs/index.cjs +3 -0
  8. package/dist/cjs/index.native.cjs +3 -0
  9. package/dist/cjs/index.native.js +3 -0
  10. package/dist/cjs/index.native.js.map +1 -1
  11. package/dist/cjs/one.cjs +1 -0
  12. package/dist/cjs/one.native.cjs +1 -0
  13. package/dist/cjs/one.native.js +1 -0
  14. package/dist/cjs/one.native.js.map +1 -1
  15. package/dist/cjs/platform/extras.cjs +4 -0
  16. package/dist/cjs/platform/extras.native.cjs +4 -0
  17. package/dist/cjs/platform/extras.native.js +4 -0
  18. package/dist/cjs/platform/extras.native.js.map +1 -1
  19. package/dist/cjs/platform/haptics/index.cjs +3 -0
  20. package/dist/cjs/platform/haptics/index.native.cjs +4 -0
  21. package/dist/cjs/platform/haptics/index.native.js +4 -0
  22. package/dist/cjs/platform/haptics/index.native.js.map +1 -1
  23. package/dist/cjs/platform/haptics/validation.cjs +28 -0
  24. package/dist/cjs/platform/haptics/validation.native.cjs +28 -0
  25. package/dist/cjs/platform/haptics/validation.native.js +28 -0
  26. package/dist/cjs/platform/haptics/validation.native.js.map +1 -1
  27. package/dist/cjs/platform/image-manipulator/index.cjs +10 -3
  28. package/dist/cjs/platform/image-manipulator/index.native.cjs +1 -0
  29. package/dist/cjs/platform/image-manipulator/index.native.js +1 -0
  30. package/dist/cjs/platform/image-manipulator/index.native.js.map +1 -1
  31. package/dist/cjs/platform/index.cjs +1 -0
  32. package/dist/cjs/platform/index.native.cjs +1 -0
  33. package/dist/cjs/platform/index.native.js +1 -0
  34. package/dist/cjs/platform/index.native.js.map +1 -1
  35. package/dist/cjs/platform/keep-awake/index.cjs +53 -14
  36. package/dist/cjs/platform/keep-awake/index.native.cjs +29 -2
  37. package/dist/cjs/platform/keep-awake/index.native.js +29 -2
  38. package/dist/cjs/platform/keep-awake/index.native.js.map +1 -1
  39. package/dist/cjs/platform/keep-awake/unavailable.cjs +11 -1
  40. package/dist/cjs/platform/keep-awake/unavailable.native.cjs +11 -1
  41. package/dist/cjs/platform/keep-awake/unavailable.native.js +11 -1
  42. package/dist/cjs/platform/keep-awake/unavailable.native.js.map +1 -1
  43. package/dist/cjs/platform/keep-awake/validate.cjs +15 -1
  44. package/dist/cjs/platform/keep-awake/validate.native.cjs +15 -1
  45. package/dist/cjs/platform/keep-awake/validate.native.js +15 -1
  46. package/dist/cjs/platform/keep-awake/validate.native.js.map +1 -1
  47. package/dist/cjs/platform/localization/index.cjs +100 -0
  48. package/dist/cjs/platform/localization/index.native.cjs +71 -0
  49. package/dist/cjs/platform/localization/index.native.js +73 -0
  50. package/dist/cjs/platform/localization/index.native.js.map +1 -0
  51. package/dist/cjs/platform/localization/map.cjs +86 -0
  52. package/dist/cjs/platform/localization/map.native.cjs +90 -0
  53. package/dist/cjs/platform/localization/map.native.js +92 -0
  54. package/dist/cjs/platform/localization/map.native.js.map +1 -0
  55. package/dist/cjs/platform/localization/types.cjs +16 -0
  56. package/dist/cjs/platform/localization/types.native.cjs +18 -0
  57. package/dist/cjs/platform/localization/types.native.js +20 -0
  58. package/dist/cjs/platform/localization/types.native.js.map +1 -0
  59. package/dist/cjs/platform/secure-store/index.cjs +12 -6
  60. package/dist/cjs/platform/secure-store/index.native.cjs +18 -12
  61. package/dist/cjs/platform/secure-store/index.native.js +18 -12
  62. package/dist/cjs/platform/secure-store/index.native.js.map +1 -1
  63. package/dist/cjs/platform/secure-store/types.cjs +16 -0
  64. package/dist/cjs/platform/secure-store/types.native.cjs +18 -0
  65. package/dist/cjs/platform/secure-store/types.native.js +20 -0
  66. package/dist/cjs/platform/secure-store/types.native.js.map +1 -0
  67. package/dist/cjs/platform/secure-store/validate.cjs +34 -0
  68. package/dist/cjs/platform/secure-store/validate.native.cjs +34 -0
  69. package/dist/cjs/platform/secure-store/validate.native.js +34 -0
  70. package/dist/cjs/platform/secure-store/validate.native.js.map +1 -1
  71. package/dist/esm/index.js +2 -2
  72. package/dist/esm/index.mjs +2 -2
  73. package/dist/esm/index.native.js +2 -2
  74. package/dist/esm/one.mjs +2 -1
  75. package/dist/esm/one.mjs.map +1 -1
  76. package/dist/esm/one.native.js +2 -1
  77. package/dist/esm/one.native.js.map +1 -1
  78. package/dist/esm/platform/extras.mjs +2 -1
  79. package/dist/esm/platform/extras.native.js +2 -1
  80. package/dist/esm/platform/haptics/index.mjs +4 -1
  81. package/dist/esm/platform/haptics/index.mjs.map +1 -1
  82. package/dist/esm/platform/haptics/index.native.js +5 -1
  83. package/dist/esm/platform/haptics/index.native.js.map +1 -1
  84. package/dist/esm/platform/haptics/validation.mjs +27 -1
  85. package/dist/esm/platform/haptics/validation.mjs.map +1 -1
  86. package/dist/esm/platform/haptics/validation.native.js +27 -1
  87. package/dist/esm/platform/haptics/validation.native.js.map +1 -1
  88. package/dist/esm/platform/image-manipulator/index.mjs +10 -3
  89. package/dist/esm/platform/image-manipulator/index.mjs.map +1 -1
  90. package/dist/esm/platform/image-manipulator/index.native.js +1 -0
  91. package/dist/esm/platform/image-manipulator/index.native.js.map +1 -1
  92. package/dist/esm/platform/index.mjs +2 -2
  93. package/dist/esm/platform/index.mjs.map +1 -1
  94. package/dist/esm/platform/index.native.js +2 -2
  95. package/dist/esm/platform/index.native.js.map +1 -1
  96. package/dist/esm/platform/keep-awake/index.mjs +51 -15
  97. package/dist/esm/platform/keep-awake/index.mjs.map +1 -1
  98. package/dist/esm/platform/keep-awake/index.native.js +27 -3
  99. package/dist/esm/platform/keep-awake/index.native.js.map +1 -1
  100. package/dist/esm/platform/keep-awake/unavailable.mjs +12 -2
  101. package/dist/esm/platform/keep-awake/unavailable.mjs.map +1 -1
  102. package/dist/esm/platform/keep-awake/unavailable.native.js +12 -2
  103. package/dist/esm/platform/keep-awake/unavailable.native.js.map +1 -1
  104. package/dist/esm/platform/keep-awake/validate.mjs +10 -1
  105. package/dist/esm/platform/keep-awake/validate.mjs.map +1 -1
  106. package/dist/esm/platform/keep-awake/validate.native.js +10 -1
  107. package/dist/esm/platform/keep-awake/validate.native.js.map +1 -1
  108. package/dist/esm/platform/localization/index.mjs +77 -0
  109. package/dist/esm/platform/localization/index.mjs.map +1 -0
  110. package/dist/esm/platform/localization/index.native.js +46 -0
  111. package/dist/esm/platform/localization/index.native.js.map +1 -0
  112. package/dist/esm/platform/localization/map.mjs +59 -0
  113. package/dist/esm/platform/localization/map.mjs.map +1 -0
  114. package/dist/esm/platform/localization/map.native.js +61 -0
  115. package/dist/esm/platform/localization/map.native.js.map +1 -0
  116. package/dist/esm/platform/localization/types.mjs +0 -0
  117. package/dist/esm/platform/localization/types.native.js +0 -0
  118. package/dist/esm/platform/secure-store/index.mjs +13 -7
  119. package/dist/esm/platform/secure-store/index.mjs.map +1 -1
  120. package/dist/esm/platform/secure-store/index.native.js +19 -13
  121. package/dist/esm/platform/secure-store/index.native.js.map +1 -1
  122. package/dist/esm/platform/secure-store/types.mjs +0 -0
  123. package/dist/esm/platform/secure-store/types.native.js +0 -0
  124. package/dist/esm/platform/secure-store/validate.mjs +33 -1
  125. package/dist/esm/platform/secure-store/validate.mjs.map +1 -1
  126. package/dist/esm/platform/secure-store/validate.native.js +33 -1
  127. package/dist/esm/platform/secure-store/validate.native.js.map +1 -1
  128. package/ios/Nitro/HybridOneDevice.swift +117 -0
  129. package/ios/Nitro/HybridOneHaptics.swift +4 -0
  130. package/ios/Nitro/HybridOneImageManipulator.swift +25 -8
  131. package/ios/Nitro/HybridOneKeepAwake.swift +34 -2
  132. package/ios/Nitro/HybridOneSecureStore.swift +112 -46
  133. package/ios/Tests/ImageManipulator/Package.swift +12 -0
  134. package/ios/Tests/ImageManipulator/README.md +21 -0
  135. package/ios/Tests/ImageManipulator/Sources/NitroModules/Promise.swift +33 -0
  136. package/ios/Tests/ImageManipulator/Sources/OneImageManipulatorCore/Types.swift +41 -0
  137. package/ios/Tests/ImageManipulator/Sources/SDWebImageWebPCoder/SDImageWebPCoder.swift +23 -0
  138. package/nitrogen/generated/android/c++/JAndroidHaptic.hpp +109 -0
  139. package/nitrogen/generated/android/c++/JCalendarInfo.hpp +70 -0
  140. package/nitrogen/generated/android/c++/JHapticImpact.hpp +3 -3
  141. package/nitrogen/generated/android/c++/JHybridOneDeviceSpec.cpp +52 -0
  142. package/nitrogen/generated/android/c++/JHybridOneDeviceSpec.hpp +3 -0
  143. package/nitrogen/generated/android/c++/JHybridOneHapticsSpec.cpp +8 -0
  144. package/nitrogen/generated/android/c++/JHybridOneHapticsSpec.hpp +1 -0
  145. package/nitrogen/generated/android/c++/JHybridOneImageManipulatorSpec.cpp +5 -1
  146. package/nitrogen/generated/android/c++/JHybridOneKeepAwakeSpec.cpp +31 -0
  147. package/nitrogen/generated/android/c++/JHybridOneKeepAwakeSpec.hpp +2 -0
  148. package/nitrogen/generated/android/c++/JHybridOneSecureStoreSpec.cpp +26 -19
  149. package/nitrogen/generated/android/c++/JHybridOneSecureStoreSpec.hpp +6 -6
  150. package/nitrogen/generated/android/c++/JImageTransformOptions.hpp +7 -1
  151. package/nitrogen/generated/android/c++/JLocaleInfo.hpp +110 -0
  152. package/nitrogen/generated/android/c++/JOneImageFlip.hpp +58 -0
  153. package/nitrogen/generated/android/c++/JOneImageFormat.hpp +3 -0
  154. package/nitrogen/generated/android/c++/JSecureStoreAccessibility.hpp +73 -0
  155. package/nitrogen/generated/android/c++/JSecureStoreOptions.hpp +76 -0
  156. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AndroidHaptic.kt +40 -0
  157. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/CalendarInfo.kt +66 -0
  158. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HapticImpact.kt +2 -2
  159. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneDeviceSpec.kt +17 -0
  160. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneHapticsSpec.kt +4 -0
  161. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneKeepAwakeSpec.kt +8 -0
  162. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneSecureStoreSpec.kt +6 -6
  163. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/ImageTransformOptions.kt +7 -2
  164. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/LocaleInfo.kt +116 -0
  165. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/OneImageFlip.kt +23 -0
  166. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/OneImageFormat.kt +2 -1
  167. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SecureStoreAccessibility.kt +28 -0
  168. package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SecureStoreOptions.kt +71 -0
  169. package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.hpp +133 -51
  170. package/nitrogen/generated/ios/One-Swift-Cxx-Umbrella.hpp +19 -1
  171. package/nitrogen/generated/ios/c++/HybridOneDeviceSpecSwift.hpp +31 -0
  172. package/nitrogen/generated/ios/c++/HybridOneHapticsSpecSwift.hpp +9 -0
  173. package/nitrogen/generated/ios/c++/HybridOneImageManipulatorSpecSwift.hpp +4 -1
  174. package/nitrogen/generated/ios/c++/HybridOneKeepAwakeSpecSwift.hpp +18 -1
  175. package/nitrogen/generated/ios/c++/HybridOneSecureStoreSpecSwift.hpp +18 -13
  176. package/nitrogen/generated/ios/swift/AndroidHaptic.swift +108 -0
  177. package/nitrogen/generated/ios/swift/CalendarInfo.swift +96 -0
  178. package/nitrogen/generated/ios/swift/HapticImpact.swift +4 -4
  179. package/nitrogen/generated/ios/swift/HybridOneDeviceSpec.swift +3 -0
  180. package/nitrogen/generated/ios/swift/HybridOneDeviceSpec_cxx.swift +56 -0
  181. package/nitrogen/generated/ios/swift/HybridOneHapticsSpec.swift +1 -0
  182. package/nitrogen/generated/ios/swift/HybridOneHapticsSpec_cxx.swift +11 -0
  183. package/nitrogen/generated/ios/swift/HybridOneKeepAwakeSpec.swift +3 -1
  184. package/nitrogen/generated/ios/swift/HybridOneKeepAwakeSpec_cxx.swift +41 -3
  185. package/nitrogen/generated/ios/swift/HybridOneSecureStoreSpec.swift +6 -6
  186. package/nitrogen/generated/ios/swift/HybridOneSecureStoreSpec_cxx.swift +12 -12
  187. package/nitrogen/generated/ios/swift/ImageTransformOptions.swift +16 -5
  188. package/nitrogen/generated/ios/swift/LocaleInfo.swift +250 -0
  189. package/nitrogen/generated/ios/swift/OneImageFlip.swift +40 -0
  190. package/nitrogen/generated/ios/swift/OneImageFormat.swift +4 -0
  191. package/nitrogen/generated/ios/swift/SecureStoreAccessibility.swift +60 -0
  192. package/nitrogen/generated/ios/swift/SecureStoreOptions.swift +107 -0
  193. package/nitrogen/generated/shared/c++/AndroidHaptic.hpp +144 -0
  194. package/nitrogen/generated/shared/c++/CalendarInfo.hpp +96 -0
  195. package/nitrogen/generated/shared/c++/HapticImpact.hpp +5 -5
  196. package/nitrogen/generated/shared/c++/HybridOneDeviceSpec.cpp +3 -0
  197. package/nitrogen/generated/shared/c++/HybridOneDeviceSpec.hpp +11 -0
  198. package/nitrogen/generated/shared/c++/HybridOneHapticsSpec.cpp +1 -0
  199. package/nitrogen/generated/shared/c++/HybridOneHapticsSpec.hpp +4 -0
  200. package/nitrogen/generated/shared/c++/HybridOneKeepAwakeSpec.cpp +2 -0
  201. package/nitrogen/generated/shared/c++/HybridOneKeepAwakeSpec.hpp +4 -1
  202. package/nitrogen/generated/shared/c++/HybridOneSecureStoreSpec.hpp +9 -7
  203. package/nitrogen/generated/shared/c++/ImageTransformOptions.hpp +8 -1
  204. package/nitrogen/generated/shared/c++/LocaleInfo.hpp +136 -0
  205. package/nitrogen/generated/shared/c++/OneImageFlip.hpp +76 -0
  206. package/nitrogen/generated/shared/c++/OneImageFormat.hpp +4 -0
  207. package/nitrogen/generated/shared/c++/SecureStoreAccessibility.hpp +96 -0
  208. package/nitrogen/generated/shared/c++/SecureStoreOptions.hpp +102 -0
  209. package/package.json +15 -15
  210. package/src/index.ts +3 -0
  211. package/src/one.test.ts +2 -0
  212. package/src/one.ts +3 -0
  213. package/src/platform/extras.ts +3 -0
  214. package/src/platform/haptics/index.native.ts +13 -3
  215. package/src/platform/haptics/index.ts +12 -3
  216. package/src/platform/haptics/types.ts +25 -0
  217. package/src/platform/haptics/validation.ts +31 -1
  218. package/src/platform/image-manipulator/index.native.ts +3 -0
  219. package/src/platform/image-manipulator/index.ts +10 -3
  220. package/src/platform/index.native.ts +3 -2
  221. package/src/platform/index.ts +3 -2
  222. package/src/platform/keep-awake/index.native.ts +31 -2
  223. package/src/platform/keep-awake/index.ts +66 -17
  224. package/src/platform/keep-awake/unavailable.ts +12 -2
  225. package/src/platform/keep-awake/validate.ts +16 -0
  226. package/src/platform/localization/index.native.ts +47 -0
  227. package/src/platform/localization/index.ts +90 -0
  228. package/src/platform/localization/map.ts +77 -0
  229. package/src/platform/localization/types.ts +36 -0
  230. package/src/platform/secure-store/index.native.ts +26 -13
  231. package/src/platform/secure-store/index.ts +20 -7
  232. package/src/platform/secure-store/types.ts +33 -0
  233. package/src/platform/secure-store/validate.ts +48 -0
  234. package/src/platform/specs/OneDevice.nitro.ts +34 -0
  235. package/src/platform/specs/OneHaptics.nitro.ts +4 -1
  236. package/src/platform/specs/OneImageManipulator.nitro.ts +4 -1
  237. package/src/platform/specs/OneKeepAwake.nitro.ts +2 -0
  238. package/src/platform/specs/OneSecureStore.nitro.ts +12 -8
  239. package/types/index.d.ts +1 -1
  240. package/types/index.d.ts.map +1 -1
  241. package/types/one.d.ts +2 -1
  242. package/types/one.d.ts.map +1 -1
  243. package/types/platform/extras.d.ts +3 -0
  244. package/types/platform/extras.d.ts.map +1 -1
  245. package/types/platform/haptics/index.d.ts +2 -2
  246. package/types/platform/haptics/index.d.ts.map +1 -1
  247. package/types/platform/haptics/index.native.d.ts +2 -2
  248. package/types/platform/haptics/index.native.d.ts.map +1 -1
  249. package/types/platform/haptics/types.d.ts +3 -0
  250. package/types/platform/haptics/types.d.ts.map +1 -1
  251. package/types/platform/haptics/validation.d.ts +3 -1
  252. package/types/platform/haptics/validation.d.ts.map +1 -1
  253. package/types/platform/image-manipulator/index.d.ts +1 -1
  254. package/types/platform/image-manipulator/index.d.ts.map +1 -1
  255. package/types/platform/image-manipulator/index.native.d.ts +1 -1
  256. package/types/platform/image-manipulator/index.native.d.ts.map +1 -1
  257. package/types/platform/index.d.ts +3 -3
  258. package/types/platform/index.d.ts.map +1 -1
  259. package/types/platform/index.native.d.ts +3 -3
  260. package/types/platform/index.native.d.ts.map +1 -1
  261. package/types/platform/keep-awake/index.d.ts +3 -0
  262. package/types/platform/keep-awake/index.d.ts.map +1 -1
  263. package/types/platform/keep-awake/index.native.d.ts +5 -0
  264. package/types/platform/keep-awake/index.native.d.ts.map +1 -1
  265. package/types/platform/keep-awake/unavailable.d.ts +4 -0
  266. package/types/platform/keep-awake/unavailable.d.ts.map +1 -1
  267. package/types/platform/keep-awake/validate.d.ts +3 -0
  268. package/types/platform/keep-awake/validate.d.ts.map +1 -1
  269. package/types/platform/localization/index.d.ts +7 -0
  270. package/types/platform/localization/index.d.ts.map +1 -0
  271. package/types/platform/localization/index.native.d.ts +7 -0
  272. package/types/platform/localization/index.native.d.ts.map +1 -0
  273. package/types/platform/localization/map.d.ts +9 -0
  274. package/types/platform/localization/map.d.ts.map +1 -0
  275. package/types/platform/localization/types.d.ts +31 -0
  276. package/types/platform/localization/types.d.ts.map +1 -0
  277. package/types/platform/secure-store/index.d.ts +8 -7
  278. package/types/platform/secure-store/index.d.ts.map +1 -1
  279. package/types/platform/secure-store/index.native.d.ts +8 -7
  280. package/types/platform/secure-store/index.native.d.ts.map +1 -1
  281. package/types/platform/secure-store/types.d.ts +24 -0
  282. package/types/platform/secure-store/types.d.ts.map +1 -0
  283. package/types/platform/secure-store/validate.d.ts +3 -0
  284. package/types/platform/secure-store/validate.d.ts.map +1 -1
  285. package/types/platform/specs/OneDevice.nitro.d.ts +25 -0
  286. package/types/platform/specs/OneDevice.nitro.d.ts.map +1 -1
  287. package/types/platform/specs/OneHaptics.nitro.d.ts +2 -1
  288. package/types/platform/specs/OneHaptics.nitro.d.ts.map +1 -1
  289. package/types/platform/specs/OneImageManipulator.nitro.d.ts +3 -1
  290. package/types/platform/specs/OneImageManipulator.nitro.d.ts.map +1 -1
  291. package/types/platform/specs/OneKeepAwake.nitro.d.ts +2 -0
  292. package/types/platform/specs/OneKeepAwake.nitro.d.ts.map +1 -1
  293. package/types/platform/specs/OneSecureStore.nitro.d.ts +8 -6
  294. package/types/platform/specs/OneSecureStore.nitro.d.ts.map +1 -1
@@ -2,9 +2,18 @@ package com.margelo.nitro.one
2
2
 
3
3
  import android.content.Context
4
4
  import android.content.SharedPreferences
5
+ import android.os.Build
6
+ import android.os.Handler
7
+ import android.os.Looper
5
8
  import android.security.keystore.KeyGenParameterSpec
9
+ import android.security.keystore.KeyPermanentlyInvalidatedException
6
10
  import android.security.keystore.KeyProperties
11
+ import android.security.keystore.UserNotAuthenticatedException
7
12
  import android.util.Base64
13
+ import androidx.biometric.BiometricManager
14
+ import androidx.biometric.BiometricPrompt
15
+ import androidx.core.content.ContextCompat
16
+ import androidx.fragment.app.FragmentActivity
8
17
  import com.margelo.nitro.NitroModules
9
18
  import com.margelo.nitro.core.Promise
10
19
  import java.security.InvalidKeyException
@@ -14,56 +23,79 @@ import javax.crypto.KeyGenerator
14
23
  import javax.crypto.SecretKey
15
24
  import javax.crypto.spec.GCMParameterSpec
16
25
 
17
- // string key-value storage matching expo-secure-store's item api. every
18
- // value is AES-256-GCM ciphertext under a key that never leaves
19
- // AndroidKeyStore: a fresh 12-byte iv per write, prepended to the blob and
20
- // kept in a private preferences file. EncryptedSharedPreferences is
21
- // deprecated, so this is one purpose-built path instead of that wrapper.
22
- // writes commit to disk before resolving, so a relaunch right after a set
23
- // still reads the value. a missing key reads null; deleting one resolves
24
- // all the same, and delete never touches the keystore, so it also clears
25
- // entries whose key is gone.
26
+ // string key-value storage matching expo-secure-store's item api and its
27
+ // options. every value is AES-256-GCM ciphertext under a key that never
28
+ // leaves AndroidKeyStore: a fresh 12-byte iv per write, prepended to the blob
29
+ // and kept in a private preferences file. the keychainService option names
30
+ // the key alias (and its preferences file), as in expo, and an authenticated
31
+ // item uses the "<alias>:auth" alias whose key requires user authentication
32
+ // per use and is invalidated when biometrics change. the default alias and
33
+ // file are the ones used before options existed, so existing values read
34
+ // back unchanged. writes commit to disk before resolving, a write clears the
35
+ // other mode's entry, and delete never touches the keystore, so it also
36
+ // clears entries whose key is gone. the biometric prompt needs a foreground
37
+ // activity, so the sync verbs throw for an authenticated item instead of
38
+ // prompting. keychainAccessible and accessGroup are ios-only, as in expo.
26
39
  class HybridOneSecureStore : HybridOneSecureStoreSpec() {
40
+ private val mainHandler = Handler(Looper.getMainLooper())
41
+
27
42
  private fun context(): Context =
28
43
  NitroModules.applicationContext
29
44
  ?: throw IllegalStateException("SecureStore: React context is not ready")
30
45
 
31
- private fun prefs(): SharedPreferences =
32
- context().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
46
+ private fun alias(options: SecureStoreOptions, authenticated: Boolean): String {
47
+ val base = options.keychainService?.let { "$KEY_ALIAS:$it" } ?: KEY_ALIAS
48
+ return if (authenticated) "$base:auth" else base
49
+ }
50
+
51
+ private fun prefs(alias: String): SharedPreferences {
52
+ val name = if (alias == KEY_ALIAS) {
53
+ PREFS_NAME
54
+ } else {
55
+ PREFS_NAME + "_" + Base64.encodeToString(
56
+ alias.toByteArray(Charsets.UTF_8),
57
+ Base64.URL_SAFE or Base64.NO_WRAP or Base64.NO_PADDING
58
+ )
59
+ }
60
+ return context().getSharedPreferences(name, Context.MODE_PRIVATE)
61
+ }
33
62
 
34
63
  private fun keyStore(): KeyStore =
35
64
  KeyStore.getInstance("AndroidKeyStore").apply { load(null) }
36
65
 
37
- private fun generateKey(): SecretKey {
66
+ private fun generateKey(alias: String, requireAuthentication: Boolean): SecretKey {
38
67
  val generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
39
- val spec = KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
68
+ val builder = KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
40
69
  .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
41
70
  .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
42
71
  .setKeySize(256)
43
72
  .setRandomizedEncryptionRequired(true)
44
- .build()
45
- generator.init(spec)
73
+ if (requireAuthentication) {
74
+ builder.setUserAuthenticationRequired(true)
75
+ if (Build.VERSION.SDK_INT >= 24) {
76
+ builder.setInvalidatedByBiometricEnrollment(true)
77
+ }
78
+ }
79
+ generator.init(builder.build())
46
80
  return generator.generateKey()
47
81
  }
48
82
 
49
- // bumped on every rekey, so a write that failed under an older key knows
50
- // another write already replaced it.
51
- private var keyGeneration = 0
83
+ // bumped on every rekey per alias, so a write that failed under an older
84
+ // key knows another write already replaced it.
85
+ private val keyGenerations = mutableMapOf<String, Int>()
52
86
 
53
87
  // two writes can both fail under the dropped key. only the first rekeys;
54
88
  // the second seals under that fresh key instead of orphaning the value
55
89
  // the first one just wrote.
56
90
  @Synchronized
57
- private fun rekey(failedGeneration: Int): SecretKey {
58
- if (failedGeneration != keyGeneration) return currentKey().second
59
- deleteKey()
60
- keyGeneration += 1
61
- return generateKey()
62
- }
63
-
64
- private fun deleteKey() {
91
+ private fun rekey(alias: String, requireAuthentication: Boolean, failedGeneration: Int): SecretKey {
92
+ if (failedGeneration != (keyGenerations[alias] ?: 0)) {
93
+ return currentKey(alias, requireAuthentication).second
94
+ }
65
95
  val store = keyStore()
66
- if (store.containsAlias(KEY_ALIAS)) store.deleteEntry(KEY_ALIAS)
96
+ if (store.containsAlias(alias)) store.deleteEntry(alias)
97
+ keyGenerations[alias] = (keyGenerations[alias] ?: 0) + 1
98
+ return generateKey(alias, requireAuthentication)
67
99
  }
68
100
 
69
101
  // promises run on a thread pool: without the lock, two first writes can
@@ -71,50 +103,64 @@ class HybridOneSecureStore : HybridOneSecureStoreSpec() {
71
103
  // minting a missing key is a rekey too: it advances the generation, so a
72
104
  // write still holding the dropped key cannot rekey over the new one.
73
105
  @Synchronized
74
- private fun currentKey(): Pair<Int, SecretKey> {
75
- val existing = (keyStore().getEntry(KEY_ALIAS, null) as? KeyStore.SecretKeyEntry)?.secretKey
76
- if (existing != null) return keyGeneration to existing
77
- keyGeneration += 1
78
- return keyGeneration to generateKey()
106
+ private fun currentKey(alias: String, requireAuthentication: Boolean): Pair<Int, SecretKey> {
107
+ val existing = (keyStore().getEntry(alias, null) as? KeyStore.SecretKeyEntry)?.secretKey
108
+ val generation = keyGenerations[alias] ?: 0
109
+ if (existing != null) return generation to existing
110
+ val next = generation + 1
111
+ keyGenerations[alias] = next
112
+ return next to generateKey(alias, requireAuthentication)
79
113
  }
80
114
 
81
- private fun encryptWith(key: SecretKey, value: String): String {
115
+ private fun encryptCipher(alias: String, requireAuthentication: Boolean): Cipher {
116
+ val (generation, key) = currentKey(alias, requireAuthentication)
82
117
  val cipher = Cipher.getInstance("AES/GCM/NoPadding")
83
- cipher.init(Cipher.ENCRYPT_MODE, key)
84
- val ciphertext = cipher.doFinal(value.toByteArray(Charsets.UTF_8))
85
- val blob = cipher.iv + ciphertext
86
- return Base64.encodeToString(blob, Base64.NO_WRAP)
87
- }
88
-
89
- private fun encrypt(value: String): String {
90
- val (generation, key) = currentKey()
91
118
  try {
92
- return encryptWith(key, value)
119
+ cipher.init(Cipher.ENCRYPT_MODE, key)
93
120
  } catch (e: InvalidKeyException) {
94
- // the keystore dropped the key (a restore can do this): mint a
95
- // fresh key and write once more under it.
96
- return encryptWith(rekey(generation), value)
121
+ // the keystore dropped the key (a restore can do this), or an
122
+ // auth key was invalidated by a biometric change: mint a fresh
123
+ // key and seal the new value under it.
124
+ cipher.init(Cipher.ENCRYPT_MODE, rekey(alias, requireAuthentication, generation))
97
125
  }
126
+ return cipher
98
127
  }
99
128
 
100
- private fun decrypt(blob: String): String {
101
- val bytes =
102
- try {
103
- Base64.decode(blob, Base64.NO_WRAP)
104
- } catch (e: IllegalArgumentException) {
105
- throw SecureStoreException("the stored value is not a secure-store blob")
106
- }
129
+ private fun seal(cipher: Cipher, value: String): String {
130
+ val ciphertext = cipher.doFinal(value.toByteArray(Charsets.UTF_8))
131
+ return Base64.encodeToString(cipher.iv + ciphertext, Base64.NO_WRAP)
132
+ }
133
+
134
+ private fun blobBytes(blob: String): ByteArray {
135
+ val bytes = try {
136
+ Base64.decode(blob, Base64.NO_WRAP)
137
+ } catch (e: IllegalArgumentException) {
138
+ throw SecureStoreException("the stored value is not a secure-store blob")
139
+ }
107
140
  if (bytes.size < IV_BYTES + 1) {
108
141
  throw SecureStoreException("the stored value is not a secure-store blob")
109
142
  }
143
+ return bytes
144
+ }
145
+
146
+ private fun decryptCipher(blob: String, alias: String, requireAuthentication: Boolean): Pair<Cipher, ByteArray> {
147
+ val bytes = blobBytes(blob)
110
148
  val cipher = Cipher.getInstance("AES/GCM/NoPadding")
149
+ cipher.init(
150
+ Cipher.DECRYPT_MODE,
151
+ currentKey(alias, requireAuthentication).second,
152
+ GCMParameterSpec(GCM_BITS, bytes, 0, IV_BYTES)
153
+ )
154
+ return cipher to bytes
155
+ }
156
+
157
+ private fun open(cipher: Cipher, bytes: ByteArray): String =
158
+ String(cipher.doFinal(bytes, IV_BYTES, bytes.size - IV_BYTES), Charsets.UTF_8)
159
+
160
+ private fun decrypt(blob: String, alias: String): String {
161
+ val (cipher, bytes) = decryptCipher(blob, alias, false)
111
162
  try {
112
- cipher.init(
113
- Cipher.DECRYPT_MODE,
114
- currentKey().second,
115
- GCMParameterSpec(GCM_BITS, bytes, 0, IV_BYTES)
116
- )
117
- return String(cipher.doFinal(bytes, IV_BYTES, bytes.size - IV_BYTES), Charsets.UTF_8)
163
+ return open(cipher, bytes)
118
164
  } catch (e: Exception) {
119
165
  throw SecureStoreException("the stored value could not be decrypted")
120
166
  }
@@ -124,50 +170,195 @@ class HybridOneSecureStore : HybridOneSecureStoreSpec() {
124
170
  private fun <T> guarded(code: String, verb: String, body: () -> T): T =
125
171
  try {
126
172
  body()
173
+ } catch (e: UserNotAuthenticatedException) {
174
+ throw OneNativeError(
175
+ code, "SecureStore.$verb: this item requires authentication; use the async verb")
176
+ } catch (e: KeyPermanentlyInvalidatedException) {
177
+ throw OneNativeError(
178
+ code, "SecureStore.$verb: the authentication key was invalidated when biometrics changed")
179
+ } catch (e: OneNativeError) {
180
+ throw e
127
181
  } catch (e: Exception) {
128
182
  throw OneNativeError(code, "SecureStore.$verb: ${e.message}")
129
183
  }
130
184
 
131
- private fun read(key: String): String? {
132
- val blob = prefs().getString(key, null) ?: return null
133
- return decrypt(blob)
185
+ private fun readPlain(key: String, options: SecureStoreOptions): String? {
186
+ val alias = alias(options, false)
187
+ val blob = prefs(alias).getString(key, null) ?: return null
188
+ return decrypt(blob, alias)
134
189
  }
135
190
 
136
- private fun write(key: String, value: String) {
137
- if (!prefs().edit().putString(key, encrypt(value)).commit()) {
191
+ private fun authBlob(key: String, options: SecureStoreOptions): String? =
192
+ prefs(alias(options, true)).getString(key, null)
193
+
194
+ private fun writeBlob(key: String, blob: String, options: SecureStoreOptions, authenticated: Boolean) {
195
+ if (!prefs(alias(options, authenticated)).edit().putString(key, blob).commit()) {
138
196
  throw SecureStoreException("the write could not be committed to disk")
139
197
  }
198
+ // one value per key across the two modes.
199
+ prefs(alias(options, !authenticated)).edit().remove(key).commit()
140
200
  }
141
201
 
142
- private fun remove(key: String) {
143
- if (!prefs().edit().remove(key).commit()) {
144
- throw SecureStoreException("the delete could not be committed to disk")
202
+ private fun removeEverywhere(key: String, options: SecureStoreOptions) {
203
+ for (authenticated in listOf(false, true)) {
204
+ if (!prefs(alias(options, authenticated)).edit().remove(key).commit()) {
205
+ throw SecureStoreException("the delete could not be committed to disk")
206
+ }
145
207
  }
146
208
  }
147
209
 
148
- override fun getItem(key: String): Promise<String?> =
149
- Promise.async { guarded("E_SECURE_STORE_GET", "getItem") { read(key) } }
210
+ // runs finish with the prompt-unlocked cipher on the main thread: the
211
+ // blobs are short strings, so doFinal there is not a frame of work.
212
+ private fun <T> prompt(
213
+ cipher: Cipher,
214
+ options: SecureStoreOptions,
215
+ code: String,
216
+ verb: String,
217
+ promise: Promise<T>,
218
+ finish: (Cipher) -> T
219
+ ) {
220
+ mainHandler.post {
221
+ val activity = NitroModules.applicationContext?.currentActivity as? FragmentActivity
222
+ if (activity == null || activity.isFinishing || activity.isDestroyed) {
223
+ promise.reject(
224
+ OneNativeError(code, "SecureStore.$verb: no fragment activity to present the prompt"))
225
+ return@post
226
+ }
227
+ val info = BiometricPrompt.PromptInfo.Builder()
228
+ .setTitle(options.authenticationPrompt ?: DEFAULT_PROMPT)
229
+ .setNegativeButtonText("Cancel")
230
+ .setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG)
231
+ .build()
232
+ val biometric = BiometricPrompt(
233
+ activity,
234
+ ContextCompat.getMainExecutor(activity),
235
+ object : BiometricPrompt.AuthenticationCallback() {
236
+ override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
237
+ val unlocked = result.cryptoObject?.cipher
238
+ if (unlocked == null) {
239
+ promise.reject(OneNativeError(code, "SecureStore.$verb: authentication returned no cipher"))
240
+ return
241
+ }
242
+ try {
243
+ promise.resolve(finish(unlocked))
244
+ } catch (e: Exception) {
245
+ promise.reject(storageError(code, verb, e))
246
+ }
247
+ }
150
248
 
151
- override fun setItem(key: String, value: String): Promise<Unit> =
152
- Promise.async { guarded("E_SECURE_STORE_SET", "setItem") { write(key, value) } }
249
+ override fun onAuthenticationError(errorCode: Int, message: CharSequence) {
250
+ val text = if (message.isEmpty()) "authentication failed" else message.toString()
251
+ promise.reject(OneNativeError(code, "SecureStore.$verb: $text"))
252
+ }
153
253
 
154
- override fun deleteItem(key: String): Promise<Unit> =
155
- Promise.async { guarded("E_SECURE_STORE_DELETE", "deleteItem") { remove(key) } }
254
+ override fun onAuthenticationFailed() {
255
+ // a bad read is not terminal; the prompt stays up.
256
+ }
257
+ }
258
+ )
259
+ try {
260
+ biometric.authenticate(info, BiometricPrompt.CryptoObject(cipher))
261
+ } catch (e: Exception) {
262
+ promise.reject(storageError(code, verb, e))
263
+ }
264
+ }
265
+ }
156
266
 
157
- override fun getItemSync(key: String): String? =
158
- guarded("E_SECURE_STORE_GET", "getItemSync") { read(key) }
267
+ private fun storageError(code: String, verb: String, error: Exception): OneNativeError =
268
+ when (error) {
269
+ is OneNativeError -> error
270
+ is KeyPermanentlyInvalidatedException -> OneNativeError(
271
+ code, "SecureStore.$verb: the authentication key was invalidated when biometrics changed")
272
+ else -> OneNativeError(code, "SecureStore.$verb: ${error.message}")
273
+ }
159
274
 
160
- override fun setItemSync(key: String, value: String) =
161
- guarded("E_SECURE_STORE_SET", "setItemSync") { write(key, value) }
275
+ // a plain hit resolves without a prompt; only a miss looks at the auth
276
+ // entry. a corrupt plain blob is an error, not a miss.
277
+ override fun getItem(key: String, options: SecureStoreOptions): Promise<String?> {
278
+ val plainAlias = alias(options, false)
279
+ if (prefs(plainAlias).getString(key, null) != null) {
280
+ return Promise.async { guarded("E_SECURE_STORE_GET", "getItem") { readPlain(key, options) } }
281
+ }
282
+ return authGet(key, options)
283
+ }
284
+
285
+ // a biometric change invalidates the auth key for good, and its item
286
+ // reads as null, as in expo.
287
+ private fun authGet(key: String, options: SecureStoreOptions): Promise<String?> {
288
+ val blob = authBlob(key, options) ?: return Promise.resolved(null)
289
+ val promise = Promise<String?>()
290
+ try {
291
+ val (cipher, bytes) = decryptCipher(blob, alias(options, true), true)
292
+ prompt(cipher, options, "E_SECURE_STORE_GET", "getItem", promise) { open(it, bytes) }
293
+ } catch (e: KeyPermanentlyInvalidatedException) {
294
+ promise.resolve(null)
295
+ } catch (e: Exception) {
296
+ promise.reject(storageError("E_SECURE_STORE_GET", "getItem", e))
297
+ }
298
+ return promise
299
+ }
300
+
301
+ override fun setItem(key: String, value: String, options: SecureStoreOptions): Promise<Unit> {
302
+ if (options.requireAuthentication != true) {
303
+ return Promise.async {
304
+ guarded("E_SECURE_STORE_SET", "setItem") {
305
+ writeBlob(key, seal(encryptCipher(alias(options, false), false), value), options, false)
306
+ }
307
+ }
308
+ }
309
+ val promise = Promise<Unit>()
310
+ try {
311
+ val cipher = encryptCipher(alias(options, true), true)
312
+ prompt(cipher, options, "E_SECURE_STORE_SET", "setItem", promise) {
313
+ writeBlob(key, seal(it, value), options, true)
314
+ }
315
+ } catch (e: Exception) {
316
+ promise.reject(storageError("E_SECURE_STORE_SET", "setItem", e))
317
+ }
318
+ return promise
319
+ }
320
+
321
+ override fun deleteItem(key: String, options: SecureStoreOptions): Promise<Unit> =
322
+ Promise.async { guarded("E_SECURE_STORE_DELETE", "deleteItem") { removeEverywhere(key, options) } }
323
+
324
+ override fun getItemSync(key: String, options: SecureStoreOptions): String? =
325
+ guarded("E_SECURE_STORE_GET", "getItemSync") {
326
+ readPlain(key, options) ?: authBlob(key, options)?.let { blob ->
327
+ val (cipher, bytes) = try {
328
+ decryptCipher(blob, alias(options, true), true)
329
+ } catch (e: KeyPermanentlyInvalidatedException) {
330
+ return@guarded null
331
+ }
332
+ try {
333
+ open(cipher, bytes)
334
+ } catch (e: UserNotAuthenticatedException) {
335
+ throw OneNativeError(
336
+ "E_SECURE_STORE_GET",
337
+ "SecureStore.getItemSync: this item requires authentication; use SecureStore.getItem")
338
+ }
339
+ }
340
+ }
341
+
342
+ override fun setItemSync(key: String, value: String, options: SecureStoreOptions) {
343
+ if (options.requireAuthentication == true) {
344
+ throw OneNativeError(
345
+ "E_SECURE_STORE_SET",
346
+ "SecureStore.setItemSync: requireAuthentication needs a prompt; use SecureStore.setItem")
347
+ }
348
+ guarded("E_SECURE_STORE_SET", "setItemSync") {
349
+ writeBlob(key, seal(encryptCipher(alias(options, false), false), value), options, false)
350
+ }
351
+ }
162
352
 
163
- override fun deleteItemSync(key: String) =
164
- guarded("E_SECURE_STORE_DELETE", "deleteItemSync") { remove(key) }
353
+ override fun deleteItemSync(key: String, options: SecureStoreOptions) =
354
+ guarded("E_SECURE_STORE_DELETE", "deleteItemSync") { removeEverywhere(key, options) }
165
355
 
166
356
  private class SecureStoreException(message: String) : Exception(message)
167
357
 
168
358
  companion object {
169
359
  private const val PREFS_NAME = "One.SecureStore"
170
360
  private const val KEY_ALIAS = "One.SecureStore"
361
+ private const val DEFAULT_PROMPT = "Authenticate to access this item"
171
362
  private const val IV_BYTES = 12
172
363
  private const val GCM_BITS = 128
173
364
  }
@@ -83,6 +83,7 @@ __export(index_exports, {
83
83
  useBatteryLevel: () => import_platform.useBatteryLevel,
84
84
  useBatteryState: () => import_platform.useBatteryState,
85
85
  useBlocker: () => import_useBlocker.useBlocker,
86
+ useCalendars: () => import_platform.useCalendars,
86
87
  useDrawer: () => import_useDrawer.useDrawer,
87
88
  useFocusEffect: () => import_useFocusEffect.useFocusEffect,
88
89
  useFonts: () => import_platform.useFonts,
@@ -90,10 +91,12 @@ __export(index_exports, {
90
91
  useHeaderHeight: () => import_useHeaderHeight.useHeaderHeight,
91
92
  useHinge: () => import_platform.useHinge,
92
93
  useIsFocused: () => import_core.useIsFocused,
94
+ useKeepAwake: () => import_platform.useKeepAwake,
93
95
  useLinkTo: () => import_useLinkTo.useLinkTo,
94
96
  useLoader: () => import_useLoader.useLoader,
95
97
  useLoaderState: () => import_useLoader.useLoaderState,
96
98
  useLocalSearchParams: () => import_hooks.useLocalSearchParams,
99
+ useLocales: () => import_platform.useLocales,
97
100
  useLowPowerMode: () => import_platform.useLowPowerMode,
98
101
  useMatch: () => import_useMatches.useMatch,
99
102
  useMatches: () => import_useMatches.useMatches,
@@ -85,6 +85,7 @@ __export(index_exports, {
85
85
  useBatteryLevel: () => import_platform.useBatteryLevel,
86
86
  useBatteryState: () => import_platform.useBatteryState,
87
87
  useBlocker: () => import_useBlocker.useBlocker,
88
+ useCalendars: () => import_platform.useCalendars,
88
89
  useDrawer: () => import_useDrawer.useDrawer,
89
90
  useFocusEffect: () => import_useFocusEffect.useFocusEffect,
90
91
  useFonts: () => import_platform.useFonts,
@@ -92,10 +93,12 @@ __export(index_exports, {
92
93
  useHeaderHeight: () => import_useHeaderHeight.useHeaderHeight,
93
94
  useHinge: () => import_platform.useHinge,
94
95
  useIsFocused: () => import_core.useIsFocused,
96
+ useKeepAwake: () => import_platform.useKeepAwake,
95
97
  useLinkTo: () => import_useLinkTo.useLinkTo,
96
98
  useLoader: () => import_useLoader.useLoader,
97
99
  useLoaderState: () => import_useLoader.useLoaderState,
98
100
  useLocalSearchParams: () => import_hooks.useLocalSearchParams,
101
+ useLocales: () => import_platform.useLocales,
99
102
  useLowPowerMode: () => import_platform.useLowPowerMode,
100
103
  useMatch: () => import_useMatches.useMatch,
101
104
  useMatches: () => import_useMatches.useMatches,
@@ -85,6 +85,7 @@ __export(index_exports, {
85
85
  useBatteryLevel: () => import_platform.useBatteryLevel,
86
86
  useBatteryState: () => import_platform.useBatteryState,
87
87
  useBlocker: () => import_useBlocker.useBlocker,
88
+ useCalendars: () => import_platform.useCalendars,
88
89
  useDrawer: () => import_useDrawer.useDrawer,
89
90
  useFocusEffect: () => import_useFocusEffect.useFocusEffect,
90
91
  useFonts: () => import_platform.useFonts,
@@ -92,10 +93,12 @@ __export(index_exports, {
92
93
  useHeaderHeight: () => import_useHeaderHeight.useHeaderHeight,
93
94
  useHinge: () => import_platform.useHinge,
94
95
  useIsFocused: () => import_core.useIsFocused,
96
+ useKeepAwake: () => import_platform.useKeepAwake,
95
97
  useLinkTo: () => import_useLinkTo.useLinkTo,
96
98
  useLoader: () => import_useLoader.useLoader,
97
99
  useLoaderState: () => import_useLoader.useLoaderState,
98
100
  useLocalSearchParams: () => import_hooks.useLocalSearchParams,
101
+ useLocales: () => import_platform.useLocales,
99
102
  useLowPowerMode: () => import_platform.useLowPowerMode,
100
103
  useMatch: () => import_useMatches.useMatch,
101
104
  useMatches: () => import_useMatches.useMatches,
@@ -1 +1 @@
1
- {"version":3,"file":"index.native.js","names":[],"sources":["cjs/index.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, \"default\"), secondTarget && __copyProps(secondTarget, mod, \"default\"));\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n ErrorBoundary: () => import_ErrorBoundary.ErrorBoundary,\n Head: () => import_head.Head,\n Link: () => import_Link.Link,\n LoadProgressBar: () => import_LoadProgressBar.LoadProgressBar,\n NamedSlot: () => import_Navigator.NamedSlot,\n Navigator: () => import_Navigator2.Navigator,\n One: () => import_one.One,\n ParamValidationError: () => import_validateParams.ParamValidationError,\n Presentations: () => import_Presentations.Presentations,\n Protected: () => import_Protected.Protected,\n Redirect: () => import_Redirect.Redirect,\n Root: () => import_Root.Root,\n RouteValidationError: () => import_validateParams.RouteValidationError,\n SafeAreaView: () => import_safe_area_context.SafeAreaView,\n ScrollBehavior: () => import_ScrollBehavior.ScrollBehavior,\n Slot: () => import_Navigator2.Slot,\n SourceInspector: () => import_SourceInspector.SourceInspector,\n Stack: () => import_Stack.Stack,\n Tabs: () => import_Tabs.Tabs,\n closeIntercept: () => import_interceptRoutes.closeIntercept,\n createAPIRoute: () => import_createAPIRoute.createAPIRoute,\n createApp: () => import_createApp.createApp,\n createMiddleware: () => import_createMiddleware.createMiddleware,\n createRoute: () => import_createRoute.createRoute,\n getHinge: () => import_platform.getHinge,\n getLinking: () => import_getLinking.getLinking,\n getLoaderTimingHistory: () => import_useLoader.getLoaderTimingHistory,\n getServerData: () => import_one_server_only.getServerData,\n getSizeClass: () => import_platform.getSizeClass,\n getURL: () => import_getURL.getURL,\n handleSkewError: () => import_dynamicImport.handleSkewError,\n href: () => import_href.href,\n isChunkLoadError: () => import_dynamicImport.isChunkLoadError,\n isInterceptedNavigation: () => import_interceptRoutes.isInterceptedNavigation,\n isResponse: () => import_isResponse.isResponse,\n lazyWithRetry: () => import_lazyWithRetry.lazyWithRetry,\n loadWithRetry: () => import_dynamicImport.loadWithRetry,\n onClientLoaderResolve: () => import_clientLoaderResolver.onClientLoaderResolve,\n onHingeChange: () => import_platform.onHingeChange,\n redirect: () => import_redirect.redirect,\n refetchLoader: () => import_useLoader.refetchLoader,\n registerPreloadedRoute: () => import_useViteRoutes.registerPreloadedRoute,\n removeParams: () => import_removeParams.removeParams,\n render: () => import_render.render,\n route: () => import_createRoute.route,\n router: () => import_imperative_api.router,\n routerStore: () => _routerStore,\n setClientMatches: () => import_useMatches.setClientMatches,\n setResponseHeaders: () => import_one_server_only.setResponseHeaders,\n setServerData: () => import_one_server_only.setServerData,\n useActiveParams: () => import_hooks.useActiveParams,\n useAudioPlayer: () => import_platform.useAudioPlayer,\n useAudioPlayerStatus: () => import_platform.useAudioPlayerStatus,\n useBatteryLevel: () => import_platform.useBatteryLevel,\n useBatteryState: () => import_platform.useBatteryState,\n useBlocker: () => import_useBlocker.useBlocker,\n useDrawer: () => import_useDrawer.useDrawer,\n useFocusEffect: () => import_useFocusEffect.useFocusEffect,\n useFonts: () => import_platform.useFonts,\n useGlobalSearchParams: () => import_hooks.useGlobalSearchParams,\n useHeaderHeight: () => import_useHeaderHeight.useHeaderHeight,\n useHinge: () => import_platform.useHinge,\n useIsFocused: () => import_core.useIsFocused,\n useLinkTo: () => import_useLinkTo.useLinkTo,\n useLoader: () => import_useLoader.useLoader,\n useLoaderState: () => import_useLoader.useLoaderState,\n useLocalSearchParams: () => import_hooks.useLocalSearchParams,\n useLowPowerMode: () => import_platform.useLowPowerMode,\n useMatch: () => import_useMatches.useMatch,\n useMatches: () => import_useMatches.useMatches,\n useNativeState: () => import_platform.useNativeState,\n useNavigation: () => import_useNavigation.useNavigation,\n useNavigationContainerRef: () => import_hooks.useNavigationContainerRef,\n useNetworkState: () => import_platform.useNetworkState,\n usePageMatch: () => import_useMatches.usePageMatch,\n useParams: () => import_hooks.useParams,\n usePathname: () => import_hooks.usePathname,\n usePowerState: () => import_platform.usePowerState,\n usePreventScreenCapture: () => import_platform.usePreventScreenCapture,\n useReservedRegions: () => import_platform.useReservedRegions,\n useReservedRegionsReady: () => import_platform.useReservedRegionsReady,\n useRootNavigationState: () => import_hooks.useRootNavigationState,\n useRouter: () => import_hooks.useRouter,\n useSafeAreaFrame: () => import_safe_area_context.useSafeAreaFrame,\n useSafeAreaInsets: () => import_safe_area_context.useSafeAreaInsets,\n useScrollGroup: () => import_useScrollGroup.useScrollGroup,\n useSearchParams: () => import_hooks.useSearchParams,\n useSegments: () => import_hooks.useSegments,\n useServerHeadInsertion: () => import_useServerHeadInsertion.useServerHeadInsertion,\n useSitemap: () => import_sitemap.useSitemap,\n useSizeClass: () => import_platform.useSizeClass,\n useSpanning: () => import_platform.useSpanning,\n useStack: () => import_useStack.useStack,\n useTabs: () => import_useTabs.useTabs,\n useUnstableGlobalHref: () => import_hooks.useUnstableGlobalHref,\n useValidationState: () => import_router.useValidationState,\n useWindowSegments: () => import_platform.useWindowSegments,\n validateParams: () => import_validateParams.validateParams,\n watchFile: () => import_watchFile.watchFile,\n withLayoutContext: () => import_withLayoutContext.withLayoutContext,\n zodParamValidator: () => import_validateParams.zodParamValidator\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_createApp = require(\"./createApp\");\nvar import_one = require(\"./one\");\nvar import_platform = require(\"./platform\");\nvar import_core = require(\"@react-navigation/core\");\nvar import_useHeaderHeight = require(\"./useHeaderHeight\");\n__reExport(index_exports, require(\"@vxrn/color-scheme\"), module.exports);\nvar import_safe_area_context = require(\"./safe-area-context\");\nvar import_clientLoaderResolver = require(\"./clientLoaderResolver\");\nvar import_createMiddleware = require(\"./createMiddleware\");\nvar import_createAPIRoute = require(\"./createAPIRoute\");\nvar import_getURL = require(\"./getURL\");\nvar import_head = require(\"./head\");\nvar import_hooks = require(\"./hooks\");\nvar import_href = require(\"./href\");\nvar import_getLinking = require(\"./link/getLinking\");\nvar import_sitemap = require(\"./router/sitemap\");\nvar import_Presentations = require(\"./headless/Presentations\");\nvar import_useStack = require(\"./headless/useStack\");\nvar import_Stack = require(\"./layouts/Stack\");\nvar import_Tabs = require(\"./layouts/Tabs\");\nvar import_Protected = require(\"./views/Protected\");\nvar import_useTabs = require(\"./headless/useTabs\");\nvar import_useDrawer = require(\"./headless/useDrawer\");\nvar import_withLayoutContext = require(\"./layouts/withLayoutContext\");\nvar import_Link = require(\"./link/Link\");\nvar import_Redirect = require(\"./link/Redirect\");\nvar import_useLinkTo = require(\"./link/useLinkTo\");\nvar import_Root = require(\"./Root\");\nvar import_render = require(\"./render\");\nvar import_createRoute = require(\"./router/createRoute\");\nvar import_interceptRoutes = require(\"./router/interceptRoutes\");\nvar import_Navigator = require(\"./views/Navigator\");\nvar import_imperative_api = require(\"./router/imperative-api\");\nvar _routerStore = __toESM(require(\"./router/router\"), 1);\nvar import_useNavigation = require(\"./router/useNavigation\");\nvar import_useViteRoutes = require(\"./router/useViteRoutes\");\nvar import_useBlocker = require(\"./useBlocker\");\nvar import_validateParams = require(\"./validateParams\");\nvar import_router = require(\"./router/router\");\nvar import_useFocusEffect = require(\"./useFocusEffect\");\nvar import_useLoader = require(\"./useLoader\");\nvar import_useMatches = require(\"./useMatches\");\nvar import_useServerHeadInsertion = require(\"./useServerHeadInsertion\");\nvar import_isResponse = require(\"./utils/isResponse\");\nvar import_redirect = require(\"./utils/redirect\");\nvar import_removeParams = require(\"./utils/removeParams\");\nvar import_watchFile = require(\"./utils/watchFile\");\nvar import_lazyWithRetry = require(\"./lazyWithRetry\");\nvar import_dynamicImport = require(\"./utils/dynamicImport\");\nvar import_ErrorBoundary = require(\"./views/ErrorBoundary\");\nvar import_LoadProgressBar = require(\"./views/LoadProgressBar\");\nvar import_Navigator2 = require(\"./views/Navigator\");\nvar import_ScrollBehavior = require(\"./views/ScrollBehavior\");\nvar import_SourceInspector = require(\"./views/SourceInspector\");\nvar import_useScrollGroup = require(\"./useScrollGroup\");\nvar import_one_server_only = require(\"./vite/one-server-only\");\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.native.js","names":[],"sources":["cjs/index.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, \"default\"), secondTarget && __copyProps(secondTarget, mod, \"default\"));\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n ErrorBoundary: () => import_ErrorBoundary.ErrorBoundary,\n Head: () => import_head.Head,\n Link: () => import_Link.Link,\n LoadProgressBar: () => import_LoadProgressBar.LoadProgressBar,\n NamedSlot: () => import_Navigator.NamedSlot,\n Navigator: () => import_Navigator2.Navigator,\n One: () => import_one.One,\n ParamValidationError: () => import_validateParams.ParamValidationError,\n Presentations: () => import_Presentations.Presentations,\n Protected: () => import_Protected.Protected,\n Redirect: () => import_Redirect.Redirect,\n Root: () => import_Root.Root,\n RouteValidationError: () => import_validateParams.RouteValidationError,\n SafeAreaView: () => import_safe_area_context.SafeAreaView,\n ScrollBehavior: () => import_ScrollBehavior.ScrollBehavior,\n Slot: () => import_Navigator2.Slot,\n SourceInspector: () => import_SourceInspector.SourceInspector,\n Stack: () => import_Stack.Stack,\n Tabs: () => import_Tabs.Tabs,\n closeIntercept: () => import_interceptRoutes.closeIntercept,\n createAPIRoute: () => import_createAPIRoute.createAPIRoute,\n createApp: () => import_createApp.createApp,\n createMiddleware: () => import_createMiddleware.createMiddleware,\n createRoute: () => import_createRoute.createRoute,\n getHinge: () => import_platform.getHinge,\n getLinking: () => import_getLinking.getLinking,\n getLoaderTimingHistory: () => import_useLoader.getLoaderTimingHistory,\n getServerData: () => import_one_server_only.getServerData,\n getSizeClass: () => import_platform.getSizeClass,\n getURL: () => import_getURL.getURL,\n handleSkewError: () => import_dynamicImport.handleSkewError,\n href: () => import_href.href,\n isChunkLoadError: () => import_dynamicImport.isChunkLoadError,\n isInterceptedNavigation: () => import_interceptRoutes.isInterceptedNavigation,\n isResponse: () => import_isResponse.isResponse,\n lazyWithRetry: () => import_lazyWithRetry.lazyWithRetry,\n loadWithRetry: () => import_dynamicImport.loadWithRetry,\n onClientLoaderResolve: () => import_clientLoaderResolver.onClientLoaderResolve,\n onHingeChange: () => import_platform.onHingeChange,\n redirect: () => import_redirect.redirect,\n refetchLoader: () => import_useLoader.refetchLoader,\n registerPreloadedRoute: () => import_useViteRoutes.registerPreloadedRoute,\n removeParams: () => import_removeParams.removeParams,\n render: () => import_render.render,\n route: () => import_createRoute.route,\n router: () => import_imperative_api.router,\n routerStore: () => _routerStore,\n setClientMatches: () => import_useMatches.setClientMatches,\n setResponseHeaders: () => import_one_server_only.setResponseHeaders,\n setServerData: () => import_one_server_only.setServerData,\n useActiveParams: () => import_hooks.useActiveParams,\n useAudioPlayer: () => import_platform.useAudioPlayer,\n useAudioPlayerStatus: () => import_platform.useAudioPlayerStatus,\n useBatteryLevel: () => import_platform.useBatteryLevel,\n useBatteryState: () => import_platform.useBatteryState,\n useBlocker: () => import_useBlocker.useBlocker,\n useCalendars: () => import_platform.useCalendars,\n useDrawer: () => import_useDrawer.useDrawer,\n useFocusEffect: () => import_useFocusEffect.useFocusEffect,\n useFonts: () => import_platform.useFonts,\n useGlobalSearchParams: () => import_hooks.useGlobalSearchParams,\n useHeaderHeight: () => import_useHeaderHeight.useHeaderHeight,\n useHinge: () => import_platform.useHinge,\n useIsFocused: () => import_core.useIsFocused,\n useKeepAwake: () => import_platform.useKeepAwake,\n useLinkTo: () => import_useLinkTo.useLinkTo,\n useLoader: () => import_useLoader.useLoader,\n useLoaderState: () => import_useLoader.useLoaderState,\n useLocalSearchParams: () => import_hooks.useLocalSearchParams,\n useLocales: () => import_platform.useLocales,\n useLowPowerMode: () => import_platform.useLowPowerMode,\n useMatch: () => import_useMatches.useMatch,\n useMatches: () => import_useMatches.useMatches,\n useNativeState: () => import_platform.useNativeState,\n useNavigation: () => import_useNavigation.useNavigation,\n useNavigationContainerRef: () => import_hooks.useNavigationContainerRef,\n useNetworkState: () => import_platform.useNetworkState,\n usePageMatch: () => import_useMatches.usePageMatch,\n useParams: () => import_hooks.useParams,\n usePathname: () => import_hooks.usePathname,\n usePowerState: () => import_platform.usePowerState,\n usePreventScreenCapture: () => import_platform.usePreventScreenCapture,\n useReservedRegions: () => import_platform.useReservedRegions,\n useReservedRegionsReady: () => import_platform.useReservedRegionsReady,\n useRootNavigationState: () => import_hooks.useRootNavigationState,\n useRouter: () => import_hooks.useRouter,\n useSafeAreaFrame: () => import_safe_area_context.useSafeAreaFrame,\n useSafeAreaInsets: () => import_safe_area_context.useSafeAreaInsets,\n useScrollGroup: () => import_useScrollGroup.useScrollGroup,\n useSearchParams: () => import_hooks.useSearchParams,\n useSegments: () => import_hooks.useSegments,\n useServerHeadInsertion: () => import_useServerHeadInsertion.useServerHeadInsertion,\n useSitemap: () => import_sitemap.useSitemap,\n useSizeClass: () => import_platform.useSizeClass,\n useSpanning: () => import_platform.useSpanning,\n useStack: () => import_useStack.useStack,\n useTabs: () => import_useTabs.useTabs,\n useUnstableGlobalHref: () => import_hooks.useUnstableGlobalHref,\n useValidationState: () => import_router.useValidationState,\n useWindowSegments: () => import_platform.useWindowSegments,\n validateParams: () => import_validateParams.validateParams,\n watchFile: () => import_watchFile.watchFile,\n withLayoutContext: () => import_withLayoutContext.withLayoutContext,\n zodParamValidator: () => import_validateParams.zodParamValidator\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_createApp = require(\"./createApp\");\nvar import_one = require(\"./one\");\nvar import_platform = require(\"./platform\");\nvar import_core = require(\"@react-navigation/core\");\nvar import_useHeaderHeight = require(\"./useHeaderHeight\");\n__reExport(index_exports, require(\"@vxrn/color-scheme\"), module.exports);\nvar import_safe_area_context = require(\"./safe-area-context\");\nvar import_clientLoaderResolver = require(\"./clientLoaderResolver\");\nvar import_createMiddleware = require(\"./createMiddleware\");\nvar import_createAPIRoute = require(\"./createAPIRoute\");\nvar import_getURL = require(\"./getURL\");\nvar import_head = require(\"./head\");\nvar import_hooks = require(\"./hooks\");\nvar import_href = require(\"./href\");\nvar import_getLinking = require(\"./link/getLinking\");\nvar import_sitemap = require(\"./router/sitemap\");\nvar import_Presentations = require(\"./headless/Presentations\");\nvar import_useStack = require(\"./headless/useStack\");\nvar import_Stack = require(\"./layouts/Stack\");\nvar import_Tabs = require(\"./layouts/Tabs\");\nvar import_Protected = require(\"./views/Protected\");\nvar import_useTabs = require(\"./headless/useTabs\");\nvar import_useDrawer = require(\"./headless/useDrawer\");\nvar import_withLayoutContext = require(\"./layouts/withLayoutContext\");\nvar import_Link = require(\"./link/Link\");\nvar import_Redirect = require(\"./link/Redirect\");\nvar import_useLinkTo = require(\"./link/useLinkTo\");\nvar import_Root = require(\"./Root\");\nvar import_render = require(\"./render\");\nvar import_createRoute = require(\"./router/createRoute\");\nvar import_interceptRoutes = require(\"./router/interceptRoutes\");\nvar import_Navigator = require(\"./views/Navigator\");\nvar import_imperative_api = require(\"./router/imperative-api\");\nvar _routerStore = __toESM(require(\"./router/router\"), 1);\nvar import_useNavigation = require(\"./router/useNavigation\");\nvar import_useViteRoutes = require(\"./router/useViteRoutes\");\nvar import_useBlocker = require(\"./useBlocker\");\nvar import_validateParams = require(\"./validateParams\");\nvar import_router = require(\"./router/router\");\nvar import_useFocusEffect = require(\"./useFocusEffect\");\nvar import_useLoader = require(\"./useLoader\");\nvar import_useMatches = require(\"./useMatches\");\nvar import_useServerHeadInsertion = require(\"./useServerHeadInsertion\");\nvar import_isResponse = require(\"./utils/isResponse\");\nvar import_redirect = require(\"./utils/redirect\");\nvar import_removeParams = require(\"./utils/removeParams\");\nvar import_watchFile = require(\"./utils/watchFile\");\nvar import_lazyWithRetry = require(\"./lazyWithRetry\");\nvar import_dynamicImport = require(\"./utils/dynamicImport\");\nvar import_ErrorBoundary = require(\"./views/ErrorBoundary\");\nvar import_LoadProgressBar = require(\"./views/LoadProgressBar\");\nvar import_Navigator2 = require(\"./views/Navigator\");\nvar import_ScrollBehavior = require(\"./views/ScrollBehavior\");\nvar import_SourceInspector = require(\"./views/SourceInspector\");\nvar import_useScrollGroup = require(\"./useScrollGroup\");\nvar import_one_server_only = require(\"./vite/one-server-only\");\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}
package/dist/cjs/one.cjs CHANGED
@@ -96,6 +96,7 @@ const One = Object.freeze({
96
96
  Purchases: import_platform.Purchases,
97
97
  ImageManipulator: import_platform.ImageManipulator,
98
98
  Device: import_platform.Device,
99
+ Localization: import_platform.Localization,
99
100
  Motion: import_platform.Motion,
100
101
  BackgroundTasks: import_platform.BackgroundTasks,
101
102
  AppIntents: import_platform.AppIntents,
@@ -99,6 +99,7 @@ var One = Object.freeze({
99
99
  Purchases: import_platform.Purchases,
100
100
  ImageManipulator: import_platform.ImageManipulator,
101
101
  Device: import_platform.Device,
102
+ Localization: import_platform.Localization,
102
103
  Motion: import_platform.Motion,
103
104
  BackgroundTasks: import_platform.BackgroundTasks,
104
105
  AppIntents: import_platform.AppIntents,
@@ -99,6 +99,7 @@ var One = Object.freeze({
99
99
  Purchases: import_platform.Purchases,
100
100
  ImageManipulator: import_platform.ImageManipulator,
101
101
  Device: import_platform.Device,
102
+ Localization: import_platform.Localization,
102
103
  Motion: import_platform.Motion,
103
104
  BackgroundTasks: import_platform.BackgroundTasks,
104
105
  AppIntents: import_platform.AppIntents,