@oxyhq/services 5.14.0 → 5.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1157) hide show
  1. package/README.md +130 -54
  2. package/lib/commonjs/assets/assets/lottie/welcomeheader_background_op1.json +1 -0
  3. package/lib/commonjs/assets/lottie/welcomeheader_background_op1.json +1 -0
  4. package/lib/commonjs/core/HttpService.js +94 -4
  5. package/lib/commonjs/core/HttpService.js.map +1 -1
  6. package/lib/commonjs/core/OxyServices.base.js +3 -1
  7. package/lib/commonjs/core/OxyServices.base.js.map +1 -1
  8. package/lib/commonjs/core/mixins/OxyServices.assets.js +213 -22
  9. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
  10. package/lib/commonjs/core/mixins/OxyServices.auth.js +70 -99
  11. package/lib/commonjs/core/mixins/OxyServices.auth.js.map +1 -1
  12. package/lib/commonjs/crypto/index.js +33 -0
  13. package/lib/commonjs/crypto/index.js.map +1 -0
  14. package/lib/commonjs/crypto/keyManager.js +208 -0
  15. package/lib/commonjs/crypto/keyManager.js.map +1 -0
  16. package/lib/commonjs/crypto/recoveryPhrase.js +137 -0
  17. package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -0
  18. package/lib/commonjs/crypto/signatureService.js +251 -0
  19. package/lib/commonjs/crypto/signatureService.js.map +1 -0
  20. package/lib/commonjs/i18n/locales/en-US.json +4 -0
  21. package/lib/commonjs/index.js +22 -0
  22. package/lib/commonjs/index.js.map +1 -1
  23. package/lib/commonjs/ui/components/ActivityIndicator.js +203 -0
  24. package/lib/commonjs/ui/components/ActivityIndicator.js.map +1 -0
  25. package/lib/commonjs/ui/components/AutoHeightScrollView.js +46 -0
  26. package/lib/commonjs/ui/components/AutoHeightScrollView.js.map +1 -0
  27. package/lib/commonjs/ui/components/BottomSheet.js +407 -0
  28. package/lib/commonjs/ui/components/BottomSheet.js.map +1 -0
  29. package/lib/commonjs/ui/components/BottomSheetRouter.js +366 -0
  30. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -0
  31. package/lib/commonjs/ui/components/CrossFadeIcon.js +106 -0
  32. package/lib/commonjs/ui/components/CrossFadeIcon.js.map +1 -0
  33. package/lib/commonjs/ui/components/EmptyState.js +41 -0
  34. package/lib/commonjs/ui/components/EmptyState.js.map +1 -0
  35. package/lib/commonjs/ui/components/GroupedItem.js +87 -82
  36. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  37. package/lib/commonjs/ui/components/GroupedSection.js +25 -25
  38. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  39. package/lib/commonjs/ui/components/Header.js +111 -47
  40. package/lib/commonjs/ui/components/Header.js.map +1 -1
  41. package/lib/commonjs/ui/components/HelperText.js +103 -0
  42. package/lib/commonjs/ui/components/HelperText.js.map +1 -0
  43. package/lib/commonjs/ui/components/Icon.js +109 -0
  44. package/lib/commonjs/ui/components/Icon.js.map +1 -0
  45. package/lib/commonjs/ui/components/IconButton/IconButton.js +159 -0
  46. package/lib/commonjs/ui/components/IconButton/IconButton.js.map +1 -0
  47. package/lib/commonjs/ui/components/IconButton/utils.js +155 -0
  48. package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -0
  49. package/lib/commonjs/ui/components/LoadingState.js +47 -0
  50. package/lib/commonjs/ui/components/LoadingState.js.map +1 -0
  51. package/lib/commonjs/ui/components/OxyPayButton.js +1 -14
  52. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  53. package/lib/commonjs/ui/components/OxyProvider.js +41 -391
  54. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  55. package/lib/commonjs/ui/components/OxySignInButton.js +9 -13
  56. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  57. package/lib/commonjs/ui/components/ProfileCard.js +7 -4
  58. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  59. package/lib/commonjs/ui/components/QuickActions.js +7 -4
  60. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  61. package/lib/commonjs/ui/components/Section.js +4 -1
  62. package/lib/commonjs/ui/components/Section.js.map +1 -1
  63. package/lib/commonjs/ui/components/SectionTitle.js +6 -3
  64. package/lib/commonjs/ui/components/SectionTitle.js.map +1 -1
  65. package/lib/commonjs/ui/components/SettingRow.js +77 -0
  66. package/lib/commonjs/ui/components/SettingRow.js.map +1 -0
  67. package/lib/commonjs/ui/components/StepBasedScreen.js +188 -172
  68. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
  69. package/lib/commonjs/ui/components/Surface.js +258 -0
  70. package/lib/commonjs/ui/components/Surface.js.map +1 -0
  71. package/lib/commonjs/ui/components/TextField/Addons/Outline.js +46 -0
  72. package/lib/commonjs/ui/components/TextField/Addons/Outline.js.map +1 -0
  73. package/lib/commonjs/ui/components/TextField/Addons/Underline.js +53 -0
  74. package/lib/commonjs/ui/components/TextField/Addons/Underline.js.map +1 -0
  75. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js +155 -0
  76. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js.map +1 -0
  77. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js +144 -0
  78. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js.map +1 -0
  79. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js +137 -0
  80. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js.map +1 -0
  81. package/lib/commonjs/ui/components/TextField/Adornment/enums.js +22 -0
  82. package/lib/commonjs/ui/components/TextField/Adornment/enums.js.map +1 -0
  83. package/lib/commonjs/ui/components/TextField/Adornment/types.js +6 -0
  84. package/lib/commonjs/ui/components/TextField/Adornment/types.js.map +1 -0
  85. package/lib/commonjs/ui/components/TextField/Adornment/utils.js +62 -0
  86. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -0
  87. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js +176 -0
  88. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js.map +1 -0
  89. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js +84 -0
  90. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js.map +1 -0
  91. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js +377 -0
  92. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js.map +1 -0
  93. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js +361 -0
  94. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js.map +1 -0
  95. package/lib/commonjs/ui/components/TextField/constants.js +50 -0
  96. package/lib/commonjs/ui/components/TextField/constants.js.map +1 -0
  97. package/lib/commonjs/ui/components/TextField/helpers.js +490 -0
  98. package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -0
  99. package/lib/commonjs/ui/components/TextField/types.js +6 -0
  100. package/lib/commonjs/ui/components/TextField/types.js.map +1 -0
  101. package/lib/commonjs/ui/components/TextField.js +339 -0
  102. package/lib/commonjs/ui/components/TextField.js.map +1 -0
  103. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js +12 -0
  104. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +1 -0
  105. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js +258 -0
  106. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js.map +1 -0
  107. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js +107 -0
  108. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js.map +1 -0
  109. package/lib/commonjs/ui/components/TouchableRipple/utils.js +56 -0
  110. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -0
  111. package/lib/commonjs/ui/components/Typography/AnimatedText.js +62 -0
  112. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -0
  113. package/lib/commonjs/ui/components/Typography/types.js +26 -0
  114. package/lib/commonjs/ui/components/Typography/types.js.map +1 -0
  115. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +171 -0
  116. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -0
  117. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +409 -0
  118. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -0
  119. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +181 -0
  120. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -0
  121. package/lib/commonjs/ui/components/fileManagement/styles.js +868 -0
  122. package/lib/commonjs/ui/components/fileManagement/styles.js.map +1 -0
  123. package/lib/commonjs/ui/components/index.js +29 -1
  124. package/lib/commonjs/ui/components/index.js.map +1 -1
  125. package/lib/commonjs/ui/components/profile/EditBioModal.js +181 -0
  126. package/lib/commonjs/ui/components/profile/EditBioModal.js.map +1 -0
  127. package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js +207 -0
  128. package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js.map +1 -0
  129. package/lib/commonjs/ui/components/profile/EditEmailModal.js +184 -0
  130. package/lib/commonjs/ui/components/profile/EditEmailModal.js.map +1 -0
  131. package/lib/commonjs/ui/components/profile/EditLinksModal.js +315 -0
  132. package/lib/commonjs/ui/components/profile/EditLinksModal.js.map +1 -0
  133. package/lib/commonjs/ui/components/profile/EditLocationModal.js +273 -0
  134. package/lib/commonjs/ui/components/profile/EditLocationModal.js.map +1 -0
  135. package/lib/commonjs/ui/components/profile/EditUsernameModal.js +180 -0
  136. package/lib/commonjs/ui/components/profile/EditUsernameModal.js.map +1 -0
  137. package/lib/commonjs/ui/components/profile/TwoFactorSetupModal.js +467 -0
  138. package/lib/commonjs/ui/components/profile/TwoFactorSetupModal.js.map +1 -0
  139. package/lib/commonjs/ui/components/styles/overlay.js +85 -0
  140. package/lib/commonjs/ui/components/styles/overlay.js.map +1 -0
  141. package/lib/commonjs/ui/components/styles/shadow.js +132 -0
  142. package/lib/commonjs/ui/components/styles/shadow.js.map +1 -0
  143. package/lib/commonjs/ui/components/theming.js +116 -0
  144. package/lib/commonjs/ui/components/theming.js.map +1 -0
  145. package/lib/commonjs/ui/components/types.js +2 -0
  146. package/lib/commonjs/ui/components/types.js.map +1 -0
  147. package/lib/commonjs/ui/components/utils/forwardRef.js +18 -0
  148. package/lib/commonjs/ui/components/utils/forwardRef.js.map +1 -0
  149. package/lib/commonjs/ui/components/utils/hasTouchHandler.js +13 -0
  150. package/lib/commonjs/ui/components/utils/hasTouchHandler.js.map +1 -0
  151. package/lib/commonjs/ui/components/utils/roundLayoutSize.js +9 -0
  152. package/lib/commonjs/ui/components/utils/roundLayoutSize.js.map +1 -0
  153. package/lib/commonjs/ui/components/utils/splitStyles.js +50 -0
  154. package/lib/commonjs/ui/components/utils/splitStyles.js.map +1 -0
  155. package/lib/commonjs/ui/constants/iconColors.js +84 -0
  156. package/lib/commonjs/ui/constants/iconColors.js.map +1 -0
  157. package/lib/commonjs/ui/constants/spacing.js +50 -0
  158. package/lib/commonjs/ui/constants/spacing.js.map +1 -0
  159. package/lib/commonjs/ui/constants/theme.js +123 -0
  160. package/lib/commonjs/ui/constants/theme.js.map +1 -0
  161. package/lib/commonjs/ui/context/OxyContext.js +198 -853
  162. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  163. package/lib/commonjs/ui/context/ThemeContext.js +36 -0
  164. package/lib/commonjs/ui/context/ThemeContext.js.map +1 -0
  165. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +349 -0
  166. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -0
  167. package/lib/commonjs/ui/context/hooks/useDeviceManagement.js +73 -0
  168. package/lib/commonjs/ui/context/hooks/useDeviceManagement.js.map +1 -0
  169. package/lib/commonjs/ui/context/hooks/useLanguageManagement.js +112 -0
  170. package/lib/commonjs/ui/context/hooks/useLanguageManagement.js.map +1 -0
  171. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +261 -0
  172. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -0
  173. package/lib/commonjs/ui/context/hooks/useStorage.js +79 -0
  174. package/lib/commonjs/ui/context/hooks/useStorage.js.map +1 -0
  175. package/lib/commonjs/ui/context/utils/errorHandlers.js +90 -0
  176. package/lib/commonjs/ui/context/utils/errorHandlers.js.map +1 -0
  177. package/lib/commonjs/ui/context/utils/sessionHelpers.js +103 -0
  178. package/lib/commonjs/ui/context/utils/sessionHelpers.js.map +1 -0
  179. package/lib/commonjs/ui/context/utils/storageHelpers.js +119 -0
  180. package/lib/commonjs/ui/context/utils/storageHelpers.js.map +1 -0
  181. package/lib/commonjs/ui/hooks/index.js +14 -0
  182. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  183. package/lib/commonjs/ui/hooks/use-color-scheme.js +29 -0
  184. package/lib/commonjs/ui/hooks/use-color-scheme.js.map +1 -0
  185. package/lib/commonjs/ui/hooks/use-haptic-press.js +21 -0
  186. package/lib/commonjs/ui/hooks/use-haptic-press.js.map +1 -0
  187. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  188. package/lib/commonjs/ui/hooks/useDeviceManagement.js +73 -0
  189. package/lib/commonjs/ui/hooks/useDeviceManagement.js.map +1 -0
  190. package/lib/commonjs/ui/hooks/useLanguageManagement.js +112 -0
  191. package/lib/commonjs/ui/hooks/useLanguageManagement.js.map +1 -0
  192. package/lib/commonjs/ui/hooks/useProfileEditing.js +123 -0
  193. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -0
  194. package/lib/commonjs/ui/hooks/useSessionManagement.js +261 -0
  195. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -0
  196. package/lib/commonjs/ui/hooks/useStorage.js +79 -0
  197. package/lib/commonjs/ui/hooks/useStorage.js.map +1 -0
  198. package/lib/commonjs/ui/hooks/useThemeColors.js +31 -0
  199. package/lib/commonjs/ui/hooks/useThemeColors.js.map +1 -0
  200. package/lib/commonjs/ui/hooks/useThemeStyles.js +69 -0
  201. package/lib/commonjs/ui/hooks/useThemeStyles.js.map +1 -0
  202. package/lib/commonjs/ui/index.js +1 -4
  203. package/lib/commonjs/ui/index.js.map +1 -1
  204. package/lib/commonjs/ui/navigation/bottomSheetManager.js +180 -0
  205. package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -0
  206. package/lib/commonjs/ui/navigation/routes.js +80 -154
  207. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  208. package/lib/commonjs/ui/screens/AccountCenterScreen.js +67 -67
  209. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  210. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +217 -98
  211. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  212. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +514 -429
  213. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  214. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +44 -59
  215. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  216. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +12 -19
  217. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  218. package/lib/commonjs/ui/screens/AppInfoScreen.js +36 -43
  219. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  220. package/lib/commonjs/ui/screens/FeedbackScreen.js +14 -14
  221. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  222. package/lib/commonjs/ui/screens/FileManagementScreen.js +674 -1968
  223. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  224. package/lib/commonjs/ui/screens/HelpSupportScreen.js +26 -23
  225. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  226. package/lib/commonjs/ui/screens/HistoryViewScreen.js +19 -59
  227. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  228. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +79 -170
  229. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  230. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +13 -40
  231. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  232. package/lib/commonjs/ui/screens/OxyAuthScreen.js +436 -0
  233. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -0
  234. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +18 -24
  235. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  236. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +21 -9
  237. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  238. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +180 -252
  239. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  240. package/lib/commonjs/ui/screens/ProfileScreen.js +7 -5
  241. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  242. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +32 -70
  243. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  244. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +26 -99
  245. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  246. package/lib/commonjs/ui/screens/SessionManagementScreen.js +24 -16
  247. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  248. package/lib/commonjs/ui/screens/UserLinksScreen.js +8 -10
  249. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  250. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +64 -67
  251. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  252. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +11 -8
  253. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  254. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +124 -122
  255. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  256. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +99 -112
  257. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  258. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +12 -9
  259. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  260. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +552 -79
  261. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  262. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +12 -8
  263. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  264. package/lib/commonjs/ui/styles/authStyles.js +5 -11
  265. package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
  266. package/lib/commonjs/ui/styles/spacing.js +60 -2
  267. package/lib/commonjs/ui/styles/spacing.js.map +1 -1
  268. package/lib/commonjs/ui/styles/theme.js +1 -1
  269. package/lib/commonjs/ui/types/fileManagement.js +6 -0
  270. package/lib/commonjs/ui/types/fileManagement.js.map +1 -0
  271. package/lib/commonjs/ui/types/navigation.js +6 -0
  272. package/lib/commonjs/ui/types/navigation.js.map +1 -0
  273. package/lib/commonjs/ui/utils/colorUtils.js +52 -0
  274. package/lib/commonjs/ui/utils/colorUtils.js.map +1 -0
  275. package/lib/commonjs/ui/utils/errorHandlers.js +90 -0
  276. package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -0
  277. package/lib/commonjs/ui/utils/fileManagement.js +181 -0
  278. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -0
  279. package/lib/commonjs/ui/utils/sessionHelpers.js +103 -0
  280. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -0
  281. package/lib/commonjs/ui/utils/storageHelpers.js +119 -0
  282. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -0
  283. package/lib/commonjs/ui/utils/themeUtils.js +47 -0
  284. package/lib/commonjs/ui/utils/themeUtils.js.map +1 -0
  285. package/lib/commonjs/ui/utils/user-utils.js +53 -0
  286. package/lib/commonjs/ui/utils/user-utils.js.map +1 -0
  287. package/lib/commonjs/utils/errorUtils.js +14 -4
  288. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  289. package/lib/module/assets/assets/lottie/welcomeheader_background_op1.json +1 -0
  290. package/lib/module/assets/lottie/welcomeheader_background_op1.json +1 -0
  291. package/lib/module/core/HttpService.js +94 -4
  292. package/lib/module/core/HttpService.js.map +1 -1
  293. package/lib/module/core/OxyServices.base.js +3 -1
  294. package/lib/module/core/OxyServices.base.js.map +1 -1
  295. package/lib/module/core/mixins/OxyServices.assets.js +212 -20
  296. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  297. package/lib/module/core/mixins/OxyServices.auth.js +70 -99
  298. package/lib/module/core/mixins/OxyServices.auth.js.map +1 -1
  299. package/lib/module/crypto/index.js +16 -0
  300. package/lib/module/crypto/index.js.map +1 -0
  301. package/lib/module/crypto/keyManager.js +204 -0
  302. package/lib/module/crypto/keyManager.js.map +1 -0
  303. package/lib/module/crypto/recoveryPhrase.js +131 -0
  304. package/lib/module/crypto/recoveryPhrase.js.map +1 -0
  305. package/lib/module/crypto/signatureService.js +248 -0
  306. package/lib/module/crypto/signatureService.js.map +1 -0
  307. package/lib/module/i18n/locales/en-US.json +4 -0
  308. package/lib/module/index.js +2 -0
  309. package/lib/module/index.js.map +1 -1
  310. package/lib/module/ui/components/ActivityIndicator.js +198 -0
  311. package/lib/module/ui/components/ActivityIndicator.js.map +1 -0
  312. package/lib/module/ui/components/AutoHeightScrollView.js +41 -0
  313. package/lib/module/ui/components/AutoHeightScrollView.js.map +1 -0
  314. package/lib/module/ui/components/BottomSheet.js +402 -0
  315. package/lib/module/ui/components/BottomSheet.js.map +1 -0
  316. package/lib/module/ui/components/BottomSheetRouter.js +356 -0
  317. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -0
  318. package/lib/module/ui/components/CrossFadeIcon.js +101 -0
  319. package/lib/module/ui/components/CrossFadeIcon.js.map +1 -0
  320. package/lib/module/ui/components/EmptyState.js +36 -0
  321. package/lib/module/ui/components/EmptyState.js.map +1 -0
  322. package/lib/module/ui/components/GroupedItem.js +88 -82
  323. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  324. package/lib/module/ui/components/GroupedSection.js +23 -23
  325. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  326. package/lib/module/ui/components/Header.js +109 -46
  327. package/lib/module/ui/components/Header.js.map +1 -1
  328. package/lib/module/ui/components/HelperText.js +99 -0
  329. package/lib/module/ui/components/HelperText.js.map +1 -0
  330. package/lib/module/ui/components/Icon.js +102 -0
  331. package/lib/module/ui/components/Icon.js.map +1 -0
  332. package/lib/module/ui/components/IconButton/IconButton.js +153 -0
  333. package/lib/module/ui/components/IconButton/IconButton.js.map +1 -0
  334. package/lib/module/ui/components/IconButton/utils.js +149 -0
  335. package/lib/module/ui/components/IconButton/utils.js.map +1 -0
  336. package/lib/module/ui/components/LoadingState.js +42 -0
  337. package/lib/module/ui/components/LoadingState.js.map +1 -0
  338. package/lib/module/ui/components/OxyPayButton.js +1 -14
  339. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  340. package/lib/module/ui/components/OxyProvider.js +45 -396
  341. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  342. package/lib/module/ui/components/OxySignInButton.js +9 -13
  343. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  344. package/lib/module/ui/components/ProfileCard.js +7 -4
  345. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  346. package/lib/module/ui/components/QuickActions.js +7 -4
  347. package/lib/module/ui/components/QuickActions.js.map +1 -1
  348. package/lib/module/ui/components/Section.js +4 -1
  349. package/lib/module/ui/components/Section.js.map +1 -1
  350. package/lib/module/ui/components/SectionTitle.js +6 -3
  351. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  352. package/lib/module/ui/components/SettingRow.js +72 -0
  353. package/lib/module/ui/components/SettingRow.js.map +1 -0
  354. package/lib/module/ui/components/StepBasedScreen.js +190 -174
  355. package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
  356. package/lib/module/ui/components/Surface.js +252 -0
  357. package/lib/module/ui/components/Surface.js.map +1 -0
  358. package/lib/module/ui/components/TextField/Addons/Outline.js +40 -0
  359. package/lib/module/ui/components/TextField/Addons/Outline.js.map +1 -0
  360. package/lib/module/ui/components/TextField/Addons/Underline.js +47 -0
  361. package/lib/module/ui/components/TextField/Addons/Underline.js.map +1 -0
  362. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js +148 -0
  363. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js.map +1 -0
  364. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js +141 -0
  365. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js.map +1 -0
  366. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js +135 -0
  367. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js.map +1 -0
  368. package/lib/module/ui/components/TextField/Adornment/enums.js +18 -0
  369. package/lib/module/ui/components/TextField/Adornment/enums.js.map +1 -0
  370. package/lib/module/ui/components/TextField/Adornment/types.js +4 -0
  371. package/lib/module/ui/components/TextField/Adornment/types.js.map +1 -0
  372. package/lib/module/ui/components/TextField/Adornment/utils.js +57 -0
  373. package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -0
  374. package/lib/module/ui/components/TextField/Label/InputLabel.js +171 -0
  375. package/lib/module/ui/components/TextField/Label/InputLabel.js.map +1 -0
  376. package/lib/module/ui/components/TextField/Label/LabelBackground.js +78 -0
  377. package/lib/module/ui/components/TextField/Label/LabelBackground.js.map +1 -0
  378. package/lib/module/ui/components/TextField/TextFieldFlat.js +372 -0
  379. package/lib/module/ui/components/TextField/TextFieldFlat.js.map +1 -0
  380. package/lib/module/ui/components/TextField/TextFieldOutlined.js +355 -0
  381. package/lib/module/ui/components/TextField/TextFieldOutlined.js.map +1 -0
  382. package/lib/module/ui/components/TextField/constants.js +46 -0
  383. package/lib/module/ui/components/TextField/constants.js.map +1 -0
  384. package/lib/module/ui/components/TextField/helpers.js +472 -0
  385. package/lib/module/ui/components/TextField/helpers.js.map +1 -0
  386. package/lib/module/ui/components/TextField/types.js +4 -0
  387. package/lib/module/ui/components/TextField/types.js.map +1 -0
  388. package/lib/module/ui/components/TextField.js +333 -0
  389. package/lib/module/ui/components/TextField.js.map +1 -0
  390. package/lib/module/ui/components/TouchableRipple/Pressable.js +9 -0
  391. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +1 -0
  392. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js +253 -0
  393. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js.map +1 -0
  394. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js +101 -0
  395. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js.map +1 -0
  396. package/lib/module/ui/components/TouchableRipple/utils.js +50 -0
  397. package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -0
  398. package/lib/module/ui/components/Typography/AnimatedText.js +56 -0
  399. package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -0
  400. package/lib/module/ui/components/Typography/types.js +22 -0
  401. package/lib/module/ui/components/Typography/types.js.map +1 -0
  402. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +165 -0
  403. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -0
  404. package/lib/module/ui/components/fileManagement/FileViewer.js +402 -0
  405. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -0
  406. package/lib/module/ui/components/fileManagement/UploadPreview.js +175 -0
  407. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -0
  408. package/lib/module/ui/components/fileManagement/styles.js +864 -0
  409. package/lib/module/ui/components/fileManagement/styles.js.map +1 -0
  410. package/lib/module/ui/components/index.js +4 -1
  411. package/lib/module/ui/components/index.js.map +1 -1
  412. package/lib/module/ui/components/profile/EditBioModal.js +175 -0
  413. package/lib/module/ui/components/profile/EditBioModal.js.map +1 -0
  414. package/lib/module/ui/components/profile/EditDisplayNameModal.js +201 -0
  415. package/lib/module/ui/components/profile/EditDisplayNameModal.js.map +1 -0
  416. package/lib/module/ui/components/profile/EditEmailModal.js +178 -0
  417. package/lib/module/ui/components/profile/EditEmailModal.js.map +1 -0
  418. package/lib/module/ui/components/profile/EditLinksModal.js +309 -0
  419. package/lib/module/ui/components/profile/EditLinksModal.js.map +1 -0
  420. package/lib/module/ui/components/profile/EditLocationModal.js +267 -0
  421. package/lib/module/ui/components/profile/EditLocationModal.js.map +1 -0
  422. package/lib/module/ui/components/profile/EditUsernameModal.js +174 -0
  423. package/lib/module/ui/components/profile/EditUsernameModal.js.map +1 -0
  424. package/lib/module/ui/components/profile/TwoFactorSetupModal.js +460 -0
  425. package/lib/module/ui/components/profile/TwoFactorSetupModal.js.map +1 -0
  426. package/lib/module/ui/components/styles/overlay.js +80 -0
  427. package/lib/module/ui/components/styles/overlay.js.map +1 -0
  428. package/lib/module/ui/components/styles/shadow.js +128 -0
  429. package/lib/module/ui/components/styles/shadow.js.map +1 -0
  430. package/lib/module/ui/components/theming.js +111 -0
  431. package/lib/module/ui/components/theming.js.map +1 -0
  432. package/lib/module/ui/components/types.js +2 -0
  433. package/lib/module/ui/components/types.js.map +1 -0
  434. package/lib/module/ui/components/utils/forwardRef.js +13 -0
  435. package/lib/module/ui/components/utils/forwardRef.js.map +1 -0
  436. package/lib/module/ui/components/utils/hasTouchHandler.js +9 -0
  437. package/lib/module/ui/components/utils/hasTouchHandler.js.map +1 -0
  438. package/lib/module/ui/components/utils/roundLayoutSize.js +4 -0
  439. package/lib/module/ui/components/utils/roundLayoutSize.js.map +1 -0
  440. package/lib/module/ui/components/utils/splitStyles.js +46 -0
  441. package/lib/module/ui/components/utils/splitStyles.js.map +1 -0
  442. package/lib/module/ui/constants/iconColors.js +78 -0
  443. package/lib/module/ui/constants/iconColors.js.map +1 -0
  444. package/lib/module/ui/constants/spacing.js +45 -0
  445. package/lib/module/ui/constants/spacing.js.map +1 -0
  446. package/lib/module/ui/constants/theme.js +119 -0
  447. package/lib/module/ui/constants/theme.js.map +1 -0
  448. package/lib/module/ui/context/OxyContext.js +199 -855
  449. package/lib/module/ui/context/OxyContext.js.map +1 -1
  450. package/lib/module/ui/context/ThemeContext.js +29 -0
  451. package/lib/module/ui/context/ThemeContext.js.map +1 -0
  452. package/lib/module/ui/context/hooks/useAuthOperations.js +344 -0
  453. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -0
  454. package/lib/module/ui/context/hooks/useDeviceManagement.js +68 -0
  455. package/lib/module/ui/context/hooks/useDeviceManagement.js.map +1 -0
  456. package/lib/module/ui/context/hooks/useLanguageManagement.js +107 -0
  457. package/lib/module/ui/context/hooks/useLanguageManagement.js.map +1 -0
  458. package/lib/module/ui/context/hooks/useSessionManagement.js +256 -0
  459. package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -0
  460. package/lib/module/ui/context/hooks/useStorage.js +74 -0
  461. package/lib/module/ui/context/hooks/useStorage.js.map +1 -0
  462. package/lib/module/ui/context/utils/errorHandlers.js +83 -0
  463. package/lib/module/ui/context/utils/errorHandlers.js.map +1 -0
  464. package/lib/module/ui/context/utils/sessionHelpers.js +96 -0
  465. package/lib/module/ui/context/utils/sessionHelpers.js.map +1 -0
  466. package/lib/module/ui/context/utils/storageHelpers.js +111 -0
  467. package/lib/module/ui/context/utils/storageHelpers.js.map +1 -0
  468. package/lib/module/ui/hooks/index.js +2 -0
  469. package/lib/module/ui/hooks/index.js.map +1 -1
  470. package/lib/module/ui/hooks/use-color-scheme.js +26 -0
  471. package/lib/module/ui/hooks/use-color-scheme.js.map +1 -0
  472. package/lib/module/ui/hooks/use-haptic-press.js +17 -0
  473. package/lib/module/ui/hooks/use-haptic-press.js.map +1 -0
  474. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  475. package/lib/module/ui/hooks/useDeviceManagement.js +68 -0
  476. package/lib/module/ui/hooks/useDeviceManagement.js.map +1 -0
  477. package/lib/module/ui/hooks/useLanguageManagement.js +107 -0
  478. package/lib/module/ui/hooks/useLanguageManagement.js.map +1 -0
  479. package/lib/module/ui/hooks/useProfileEditing.js +118 -0
  480. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -0
  481. package/lib/module/ui/hooks/useSessionManagement.js +256 -0
  482. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -0
  483. package/lib/module/ui/hooks/useStorage.js +74 -0
  484. package/lib/module/ui/hooks/useStorage.js.map +1 -0
  485. package/lib/module/ui/hooks/useThemeColors.js +27 -0
  486. package/lib/module/ui/hooks/useThemeColors.js.map +1 -0
  487. package/lib/module/ui/hooks/useThemeStyles.js +64 -0
  488. package/lib/module/ui/hooks/useThemeStyles.js.map +1 -0
  489. package/lib/module/ui/index.js +2 -4
  490. package/lib/module/ui/index.js.map +1 -1
  491. package/lib/module/ui/navigation/bottomSheetManager.js +168 -0
  492. package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -0
  493. package/lib/module/ui/navigation/routes.js +77 -152
  494. package/lib/module/ui/navigation/routes.js.map +1 -1
  495. package/lib/module/ui/screens/AccountCenterScreen.js +67 -67
  496. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  497. package/lib/module/ui/screens/AccountOverviewScreen.js +218 -100
  498. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  499. package/lib/module/ui/screens/AccountSettingsScreen.js +515 -430
  500. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  501. package/lib/module/ui/screens/AccountSwitcherScreen.js +45 -60
  502. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  503. package/lib/module/ui/screens/AccountVerificationScreen.js +12 -19
  504. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  505. package/lib/module/ui/screens/AppInfoScreen.js +36 -43
  506. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  507. package/lib/module/ui/screens/FeedbackScreen.js +14 -14
  508. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  509. package/lib/module/ui/screens/FileManagementScreen.js +670 -1965
  510. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  511. package/lib/module/ui/screens/HelpSupportScreen.js +26 -23
  512. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  513. package/lib/module/ui/screens/HistoryViewScreen.js +22 -62
  514. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  515. package/lib/module/ui/screens/LanguageSelectorScreen.js +80 -171
  516. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  517. package/lib/module/ui/screens/LegalDocumentsScreen.js +16 -43
  518. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  519. package/lib/module/ui/screens/OxyAuthScreen.js +432 -0
  520. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -0
  521. package/lib/module/ui/screens/PaymentGatewayScreen.js +18 -24
  522. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  523. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +21 -9
  524. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  525. package/lib/module/ui/screens/PrivacySettingsScreen.js +167 -239
  526. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  527. package/lib/module/ui/screens/ProfileScreen.js +7 -5
  528. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  529. package/lib/module/ui/screens/SavesCollectionsScreen.js +35 -73
  530. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  531. package/lib/module/ui/screens/SearchSettingsScreen.js +29 -102
  532. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  533. package/lib/module/ui/screens/SessionManagementScreen.js +24 -16
  534. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  535. package/lib/module/ui/screens/UserLinksScreen.js +8 -10
  536. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  537. package/lib/module/ui/screens/WelcomeNewUserScreen.js +65 -68
  538. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  539. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +11 -8
  540. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  541. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +124 -121
  542. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  543. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +101 -114
  544. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  545. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +12 -9
  546. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  547. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +554 -81
  548. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  549. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +12 -8
  550. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  551. package/lib/module/ui/styles/authStyles.js +5 -11
  552. package/lib/module/ui/styles/authStyles.js.map +1 -1
  553. package/lib/module/ui/styles/spacing.js +12 -2
  554. package/lib/module/ui/styles/spacing.js.map +1 -1
  555. package/lib/module/ui/styles/theme.js +1 -1
  556. package/lib/module/ui/types/fileManagement.js +4 -0
  557. package/lib/module/ui/types/fileManagement.js.map +1 -0
  558. package/lib/module/ui/types/navigation.js +4 -0
  559. package/lib/module/ui/types/navigation.js.map +1 -0
  560. package/lib/module/ui/utils/colorUtils.js +46 -0
  561. package/lib/module/ui/utils/colorUtils.js.map +1 -0
  562. package/lib/module/ui/utils/errorHandlers.js +83 -0
  563. package/lib/module/ui/utils/errorHandlers.js.map +1 -0
  564. package/lib/module/ui/utils/fileManagement.js +172 -0
  565. package/lib/module/ui/utils/fileManagement.js.map +1 -0
  566. package/lib/module/ui/utils/sessionHelpers.js +96 -0
  567. package/lib/module/ui/utils/sessionHelpers.js.map +1 -0
  568. package/lib/module/ui/utils/storageHelpers.js +111 -0
  569. package/lib/module/ui/utils/storageHelpers.js.map +1 -0
  570. package/lib/module/ui/utils/themeUtils.js +41 -0
  571. package/lib/module/ui/utils/themeUtils.js.map +1 -0
  572. package/lib/module/ui/utils/user-utils.js +46 -0
  573. package/lib/module/ui/utils/user-utils.js.map +1 -0
  574. package/lib/module/utils/errorUtils.js +14 -4
  575. package/lib/module/utils/errorUtils.js.map +1 -1
  576. package/lib/typescript/core/HttpService.d.ts +48 -0
  577. package/lib/typescript/core/HttpService.d.ts.map +1 -1
  578. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  579. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  580. package/lib/typescript/core/mixins/OxyServices.assets.d.ts +23 -1
  581. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  582. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +70 -42
  583. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  584. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  585. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  586. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  587. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  588. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  589. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  590. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  591. package/lib/typescript/core/mixins/OxyServices.totp.d.ts.map +1 -1
  592. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  593. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  594. package/lib/typescript/core/mixins/index.d.ts +26 -34
  595. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  596. package/lib/typescript/crypto/index.d.ts +11 -0
  597. package/lib/typescript/crypto/index.d.ts.map +1 -0
  598. package/lib/typescript/crypto/keyManager.d.ts +73 -0
  599. package/lib/typescript/crypto/keyManager.d.ts.map +1 -0
  600. package/lib/typescript/crypto/recoveryPhrase.d.ts +57 -0
  601. package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -0
  602. package/lib/typescript/crypto/signatureService.d.ts +81 -0
  603. package/lib/typescript/crypto/signatureService.d.ts.map +1 -0
  604. package/lib/typescript/index.d.ts +2 -0
  605. package/lib/typescript/index.d.ts.map +1 -1
  606. package/lib/typescript/models/interfaces.d.ts +1 -0
  607. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  608. package/lib/typescript/types/bip39.d.ts +29 -0
  609. package/lib/typescript/types/color.d.ts +19 -0
  610. package/lib/typescript/types/elliptic.d.ts +61 -0
  611. package/lib/typescript/types/expo-crypto.d.ts +29 -0
  612. package/lib/typescript/types/expo-random.d.ts +9 -0
  613. package/lib/typescript/types/expo-secure-store.d.ts +21 -0
  614. package/lib/typescript/types/expo-vector-icons.d.ts +9 -0
  615. package/lib/typescript/ui/components/ActivityIndicator.d.ts +45 -0
  616. package/lib/typescript/ui/components/ActivityIndicator.d.ts.map +1 -0
  617. package/lib/typescript/ui/components/AutoHeightScrollView.d.ts +23 -0
  618. package/lib/typescript/ui/components/AutoHeightScrollView.d.ts.map +1 -0
  619. package/lib/typescript/ui/components/BottomSheet.d.ts +29 -0
  620. package/lib/typescript/ui/components/BottomSheet.d.ts.map +1 -0
  621. package/lib/typescript/ui/components/BottomSheetRouter.d.ts +14 -0
  622. package/lib/typescript/ui/components/BottomSheetRouter.d.ts.map +1 -0
  623. package/lib/typescript/ui/components/CrossFadeIcon.d.ts +27 -0
  624. package/lib/typescript/ui/components/CrossFadeIcon.d.ts.map +1 -0
  625. package/lib/typescript/ui/components/EmptyState.d.ts +8 -0
  626. package/lib/typescript/ui/components/EmptyState.d.ts.map +1 -0
  627. package/lib/typescript/ui/components/GroupedItem.d.ts +5 -9
  628. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  629. package/lib/typescript/ui/components/GroupedSection.d.ts +6 -7
  630. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
  631. package/lib/typescript/ui/components/Header.d.ts +6 -1
  632. package/lib/typescript/ui/components/Header.d.ts.map +1 -1
  633. package/lib/typescript/ui/components/HelperText.d.ts +47 -0
  634. package/lib/typescript/ui/components/HelperText.d.ts.map +1 -0
  635. package/lib/typescript/ui/components/Icon.d.ts +60 -0
  636. package/lib/typescript/ui/components/Icon.d.ts.map +1 -0
  637. package/lib/typescript/ui/components/IconButton/IconButton.d.ts +99 -0
  638. package/lib/typescript/ui/components/IconButton/IconButton.d.ts.map +1 -0
  639. package/lib/typescript/ui/components/IconButton/utils.d.ts +19 -0
  640. package/lib/typescript/ui/components/IconButton/utils.d.ts.map +1 -0
  641. package/lib/typescript/ui/components/LoadingState.d.ts +9 -0
  642. package/lib/typescript/ui/components/LoadingState.d.ts.map +1 -0
  643. package/lib/typescript/ui/components/OxyPayButton.d.ts.map +1 -1
  644. package/lib/typescript/ui/components/OxyProvider.d.ts +4 -5
  645. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  646. package/lib/typescript/ui/components/OxySignInButton.d.ts +3 -8
  647. package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -1
  648. package/lib/typescript/ui/components/ProfileCard.d.ts.map +1 -1
  649. package/lib/typescript/ui/components/QuickActions.d.ts.map +1 -1
  650. package/lib/typescript/ui/components/Section.d.ts +1 -1
  651. package/lib/typescript/ui/components/Section.d.ts.map +1 -1
  652. package/lib/typescript/ui/components/SectionTitle.d.ts +1 -1
  653. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -1
  654. package/lib/typescript/ui/components/SettingRow.d.ts +14 -0
  655. package/lib/typescript/ui/components/SettingRow.d.ts.map +1 -0
  656. package/lib/typescript/ui/components/StepBasedScreen.d.ts +3 -2
  657. package/lib/typescript/ui/components/StepBasedScreen.d.ts.map +1 -1
  658. package/lib/typescript/ui/components/Surface.d.ts +76 -0
  659. package/lib/typescript/ui/components/Surface.d.ts.map +1 -0
  660. package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts +16 -0
  661. package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts.map +1 -0
  662. package/lib/typescript/ui/components/TextField/Addons/Underline.d.ts +19 -0
  663. package/lib/typescript/ui/components/TextField/Addons/Underline.d.ts.map +1 -0
  664. package/lib/typescript/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +45 -0
  665. package/lib/typescript/ui/components/TextField/Adornment/TextFieldAdornment.d.ts.map +1 -0
  666. package/lib/typescript/ui/components/TextField/Adornment/TextFieldAffix.d.ts +73 -0
  667. package/lib/typescript/ui/components/TextField/Adornment/TextFieldAffix.d.ts.map +1 -0
  668. package/lib/typescript/ui/components/TextField/Adornment/TextFieldIcon.d.ts +78 -0
  669. package/lib/typescript/ui/components/TextField/Adornment/TextFieldIcon.d.ts.map +1 -0
  670. package/lib/typescript/ui/components/TextField/Adornment/enums.d.ts +13 -0
  671. package/lib/typescript/ui/components/TextField/Adornment/enums.d.ts.map +1 -0
  672. package/lib/typescript/ui/components/TextField/Adornment/types.d.ts +12 -0
  673. package/lib/typescript/ui/components/TextField/Adornment/types.d.ts.map +1 -0
  674. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +12 -0
  675. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -0
  676. package/lib/typescript/ui/components/TextField/Label/InputLabel.d.ts +5 -0
  677. package/lib/typescript/ui/components/TextField/Label/InputLabel.d.ts.map +1 -0
  678. package/lib/typescript/ui/components/TextField/Label/LabelBackground.d.ts +4 -0
  679. package/lib/typescript/ui/components/TextField/Label/LabelBackground.d.ts.map +1 -0
  680. package/lib/typescript/ui/components/TextField/TextFieldFlat.d.ts +4 -0
  681. package/lib/typescript/ui/components/TextField/TextFieldFlat.d.ts.map +1 -0
  682. package/lib/typescript/ui/components/TextField/TextFieldOutlined.d.ts +4 -0
  683. package/lib/typescript/ui/components/TextField/TextFieldOutlined.d.ts.map +1 -0
  684. package/lib/typescript/ui/components/TextField/constants.d.ts +32 -0
  685. package/lib/typescript/ui/components/TextField/constants.d.ts.map +1 -0
  686. package/lib/typescript/ui/components/TextField/helpers.d.ts +97 -0
  687. package/lib/typescript/ui/components/TextField/helpers.d.ts.map +1 -0
  688. package/lib/typescript/ui/components/TextField/types.d.ts +156 -0
  689. package/lib/typescript/ui/components/TextField/types.d.ts.map +1 -0
  690. package/lib/typescript/ui/components/TextField.d.ts +192 -0
  691. package/lib/typescript/ui/components/TextField.d.ts.map +1 -0
  692. package/lib/typescript/ui/components/TouchableRipple/Pressable.d.ts +13 -0
  693. package/lib/typescript/ui/components/TouchableRipple/Pressable.d.ts.map +1 -0
  694. package/lib/typescript/ui/components/TouchableRipple/TouchableRipple.d.ts +62 -0
  695. package/lib/typescript/ui/components/TouchableRipple/TouchableRipple.d.ts.map +1 -0
  696. package/lib/typescript/ui/components/TouchableRipple/TouchableRipple.native.d.ts +25 -0
  697. package/lib/typescript/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -0
  698. package/lib/typescript/ui/components/TouchableRipple/utils.d.ts +11 -0
  699. package/lib/typescript/ui/components/TouchableRipple/utils.d.ts.map +1 -0
  700. package/lib/typescript/ui/components/Typography/AnimatedText.d.ts +35 -0
  701. package/lib/typescript/ui/components/Typography/AnimatedText.d.ts.map +1 -0
  702. package/lib/typescript/ui/components/Typography/types.d.ts +19 -0
  703. package/lib/typescript/ui/components/Typography/types.d.ts.map +1 -0
  704. package/lib/typescript/ui/components/fileManagement/FileDetailsModal.d.ts +15 -0
  705. package/lib/typescript/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -0
  706. package/lib/typescript/ui/components/fileManagement/FileViewer.d.ts +18 -0
  707. package/lib/typescript/ui/components/fileManagement/FileViewer.d.ts.map +1 -0
  708. package/lib/typescript/ui/components/fileManagement/UploadPreview.d.ts +21 -0
  709. package/lib/typescript/ui/components/fileManagement/UploadPreview.d.ts.map +1 -0
  710. package/lib/typescript/ui/components/fileManagement/styles.d.ts +860 -0
  711. package/lib/typescript/ui/components/fileManagement/styles.d.ts.map +1 -0
  712. package/lib/typescript/ui/components/index.d.ts +4 -1
  713. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  714. package/lib/typescript/ui/components/profile/EditBioModal.d.ts +11 -0
  715. package/lib/typescript/ui/components/profile/EditBioModal.d.ts.map +1 -0
  716. package/lib/typescript/ui/components/profile/EditDisplayNameModal.d.ts +12 -0
  717. package/lib/typescript/ui/components/profile/EditDisplayNameModal.d.ts.map +1 -0
  718. package/lib/typescript/ui/components/profile/EditEmailModal.d.ts +11 -0
  719. package/lib/typescript/ui/components/profile/EditEmailModal.d.ts.map +1 -0
  720. package/lib/typescript/ui/components/profile/EditLinksModal.d.ts +18 -0
  721. package/lib/typescript/ui/components/profile/EditLinksModal.d.ts.map +1 -0
  722. package/lib/typescript/ui/components/profile/EditLocationModal.d.ts +20 -0
  723. package/lib/typescript/ui/components/profile/EditLocationModal.d.ts.map +1 -0
  724. package/lib/typescript/ui/components/profile/EditUsernameModal.d.ts +11 -0
  725. package/lib/typescript/ui/components/profile/EditUsernameModal.d.ts.map +1 -0
  726. package/lib/typescript/ui/components/profile/TwoFactorSetupModal.d.ts +11 -0
  727. package/lib/typescript/ui/components/profile/TwoFactorSetupModal.d.ts.map +1 -0
  728. package/lib/typescript/ui/components/styles/overlay.d.ts +4 -0
  729. package/lib/typescript/ui/components/styles/overlay.d.ts.map +1 -0
  730. package/lib/typescript/ui/components/styles/shadow.d.ts +3 -0
  731. package/lib/typescript/ui/components/styles/shadow.d.ts.map +1 -0
  732. package/lib/typescript/ui/components/theming.d.ts +8 -0
  733. package/lib/typescript/ui/components/theming.d.ts.map +1 -0
  734. package/lib/typescript/ui/components/types.d.ts +80 -0
  735. package/lib/typescript/ui/components/types.d.ts.map +1 -0
  736. package/lib/typescript/ui/components/utils/forwardRef.d.ts +12 -0
  737. package/lib/typescript/ui/components/utils/forwardRef.d.ts.map +1 -0
  738. package/lib/typescript/ui/components/utils/hasTouchHandler.d.ts +6 -0
  739. package/lib/typescript/ui/components/utils/hasTouchHandler.d.ts.map +1 -0
  740. package/lib/typescript/ui/components/utils/roundLayoutSize.d.ts +2 -0
  741. package/lib/typescript/ui/components/utils/roundLayoutSize.d.ts.map +1 -0
  742. package/lib/typescript/ui/components/utils/splitStyles.d.ts +20 -0
  743. package/lib/typescript/ui/components/utils/splitStyles.d.ts.map +1 -0
  744. package/lib/typescript/ui/constants/iconColors.d.ts +130 -0
  745. package/lib/typescript/ui/constants/iconColors.d.ts.map +1 -0
  746. package/lib/typescript/ui/constants/spacing.d.ts +33 -0
  747. package/lib/typescript/ui/constants/spacing.d.ts.map +1 -0
  748. package/lib/typescript/ui/constants/theme.d.ts +97 -0
  749. package/lib/typescript/ui/constants/theme.d.ts.map +1 -0
  750. package/lib/typescript/ui/context/OxyContext.d.ts +23 -17
  751. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  752. package/lib/typescript/ui/context/ThemeContext.d.ts +19 -0
  753. package/lib/typescript/ui/context/ThemeContext.d.ts.map +1 -0
  754. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +51 -0
  755. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -0
  756. package/lib/typescript/ui/context/hooks/useDeviceManagement.d.ts +27 -0
  757. package/lib/typescript/ui/context/hooks/useDeviceManagement.d.ts.map +1 -0
  758. package/lib/typescript/ui/context/hooks/useLanguageManagement.d.ts +25 -0
  759. package/lib/typescript/ui/context/hooks/useLanguageManagement.d.ts.map +1 -0
  760. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +39 -0
  761. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -0
  762. package/lib/typescript/ui/context/hooks/useStorage.d.ts +22 -0
  763. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +1 -0
  764. package/lib/typescript/ui/context/utils/errorHandlers.d.ts +30 -0
  765. package/lib/typescript/ui/context/utils/errorHandlers.d.ts.map +1 -0
  766. package/lib/typescript/ui/context/utils/sessionHelpers.d.ts +59 -0
  767. package/lib/typescript/ui/context/utils/sessionHelpers.d.ts.map +1 -0
  768. package/lib/typescript/ui/context/utils/storageHelpers.d.ts +31 -0
  769. package/lib/typescript/ui/context/utils/storageHelpers.d.ts.map +1 -0
  770. package/lib/typescript/ui/hooks/index.d.ts +2 -0
  771. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  772. package/lib/typescript/ui/hooks/use-color-scheme.d.ts +8 -0
  773. package/lib/typescript/ui/hooks/use-color-scheme.d.ts.map +1 -0
  774. package/lib/typescript/ui/hooks/use-haptic-press.d.ts +8 -0
  775. package/lib/typescript/ui/hooks/use-haptic-press.d.ts.map +1 -0
  776. package/lib/typescript/ui/hooks/useDeviceManagement.d.ts +27 -0
  777. package/lib/typescript/ui/hooks/useDeviceManagement.d.ts.map +1 -0
  778. package/lib/typescript/ui/hooks/useLanguageManagement.d.ts +25 -0
  779. package/lib/typescript/ui/hooks/useLanguageManagement.d.ts.map +1 -0
  780. package/lib/typescript/ui/hooks/useProfileEditing.d.ts +36 -0
  781. package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -0
  782. package/lib/typescript/ui/hooks/useSessionManagement.d.ts +39 -0
  783. package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -0
  784. package/lib/typescript/ui/hooks/useStorage.d.ts +22 -0
  785. package/lib/typescript/ui/hooks/useStorage.d.ts.map +1 -0
  786. package/lib/typescript/ui/hooks/useThemeColors.d.ts +94 -0
  787. package/lib/typescript/ui/hooks/useThemeColors.d.ts.map +1 -0
  788. package/lib/typescript/ui/hooks/useThemeStyles.d.ts +45 -0
  789. package/lib/typescript/ui/hooks/useThemeStyles.d.ts.map +1 -0
  790. package/lib/typescript/ui/index.d.ts +2 -2
  791. package/lib/typescript/ui/index.d.ts.map +1 -1
  792. package/lib/typescript/ui/navigation/bottomSheetManager.d.ts +74 -0
  793. package/lib/typescript/ui/navigation/bottomSheetManager.d.ts.map +1 -0
  794. package/lib/typescript/ui/navigation/routes.d.ts +4 -7
  795. package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
  796. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts +1 -1
  797. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  798. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +1 -1
  799. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  800. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +1 -1
  801. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  802. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts +1 -1
  803. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  804. package/lib/typescript/ui/screens/AccountVerificationScreen.d.ts +1 -1
  805. package/lib/typescript/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  806. package/lib/typescript/ui/screens/AppInfoScreen.d.ts +1 -1
  807. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  808. package/lib/typescript/ui/screens/FeedbackScreen.d.ts +1 -1
  809. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  810. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +1 -36
  811. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  812. package/lib/typescript/ui/screens/HelpSupportScreen.d.ts +1 -1
  813. package/lib/typescript/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  814. package/lib/typescript/ui/screens/HistoryViewScreen.d.ts +1 -1
  815. package/lib/typescript/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  816. package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts +1 -1
  817. package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  818. package/lib/typescript/ui/screens/LegalDocumentsScreen.d.ts +1 -1
  819. package/lib/typescript/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  820. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts +16 -0
  821. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts.map +1 -0
  822. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +1 -1
  823. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  824. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts +1 -1
  825. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  826. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts +1 -1
  827. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  828. package/lib/typescript/ui/screens/ProfileScreen.d.ts +1 -1
  829. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  830. package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts +1 -1
  831. package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  832. package/lib/typescript/ui/screens/SearchSettingsScreen.d.ts +1 -1
  833. package/lib/typescript/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  834. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts +1 -1
  835. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  836. package/lib/typescript/ui/screens/UserLinksScreen.d.ts +2 -2
  837. package/lib/typescript/ui/screens/UserLinksScreen.d.ts.map +1 -1
  838. package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts +1 -1
  839. package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  840. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts +1 -1
  841. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  842. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts +1 -1
  843. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  844. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +1 -1
  845. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts +1 -1
  846. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  847. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts +1 -1
  848. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  849. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts +1 -1
  850. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  851. package/lib/typescript/ui/stores/authStore.d.ts +1 -2
  852. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  853. package/lib/typescript/ui/styles/authStyles.d.ts +0 -10
  854. package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -1
  855. package/lib/typescript/ui/styles/spacing.d.ts +7 -1
  856. package/lib/typescript/ui/styles/spacing.d.ts.map +1 -1
  857. package/lib/typescript/ui/types/fileManagement.d.ts +41 -0
  858. package/lib/typescript/ui/types/fileManagement.d.ts.map +1 -0
  859. package/lib/typescript/ui/types/navigation.d.ts +36 -0
  860. package/lib/typescript/ui/types/navigation.d.ts.map +1 -0
  861. package/lib/typescript/ui/utils/colorUtils.d.ts +14 -0
  862. package/lib/typescript/ui/utils/colorUtils.d.ts.map +1 -0
  863. package/lib/typescript/ui/utils/errorHandlers.d.ts +30 -0
  864. package/lib/typescript/ui/utils/errorHandlers.d.ts.map +1 -0
  865. package/lib/typescript/ui/utils/fileManagement.d.ts +39 -0
  866. package/lib/typescript/ui/utils/fileManagement.d.ts.map +1 -0
  867. package/lib/typescript/ui/utils/sessionHelpers.d.ts +59 -0
  868. package/lib/typescript/ui/utils/sessionHelpers.d.ts.map +1 -0
  869. package/lib/typescript/ui/utils/storageHelpers.d.ts +31 -0
  870. package/lib/typescript/ui/utils/storageHelpers.d.ts.map +1 -0
  871. package/lib/typescript/ui/utils/themeUtils.d.ts +24 -0
  872. package/lib/typescript/ui/utils/themeUtils.d.ts.map +1 -0
  873. package/lib/typescript/ui/utils/user-utils.d.ts +29 -0
  874. package/lib/typescript/ui/utils/user-utils.d.ts.map +1 -0
  875. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  876. package/package.json +26 -15
  877. package/src/assets/lottie/welcomeheader_background_op1.json +1 -0
  878. package/src/core/HttpService.ts +97 -4
  879. package/src/core/OxyServices.base.ts +3 -1
  880. package/src/core/mixins/OxyServices.assets.ts +225 -27
  881. package/src/core/mixins/OxyServices.auth.ts +144 -80
  882. package/src/crypto/index.ts +21 -0
  883. package/src/crypto/keyManager.ts +214 -0
  884. package/src/crypto/recoveryPhrase.ts +147 -0
  885. package/src/crypto/signatureService.ts +280 -0
  886. package/src/i18n/locales/en-US.json +4 -0
  887. package/src/index.ts +13 -0
  888. package/src/models/interfaces.ts +1 -0
  889. package/src/types/bip39.d.ts +29 -0
  890. package/src/types/color.d.ts +19 -0
  891. package/src/types/elliptic.d.ts +61 -0
  892. package/src/types/expo-crypto.d.ts +29 -0
  893. package/src/types/expo-random.d.ts +9 -0
  894. package/src/types/expo-secure-store.d.ts +21 -0
  895. package/src/types/expo-vector-icons.d.ts +9 -0
  896. package/src/ui/components/ActivityIndicator.tsx +254 -0
  897. package/src/ui/components/AutoHeightScrollView.tsx +50 -0
  898. package/src/ui/components/BottomSheet.tsx +443 -0
  899. package/src/ui/components/BottomSheetRouter.tsx +407 -0
  900. package/src/ui/components/CrossFadeIcon.tsx +140 -0
  901. package/src/ui/components/EmptyState.tsx +39 -0
  902. package/src/ui/components/GroupedItem.tsx +98 -96
  903. package/src/ui/components/GroupedSection.tsx +24 -29
  904. package/src/ui/components/Header.tsx +129 -49
  905. package/src/ui/components/HelperText.tsx +160 -0
  906. package/src/ui/components/Icon.tsx +181 -0
  907. package/src/ui/components/IconButton/IconButton.tsx +235 -0
  908. package/src/ui/components/IconButton/utils.ts +190 -0
  909. package/src/ui/components/LoadingState.tsx +46 -0
  910. package/src/ui/components/OxyPayButton.tsx +1 -12
  911. package/src/ui/components/OxyProvider.tsx +49 -409
  912. package/src/ui/components/OxySignInButton.tsx +11 -18
  913. package/src/ui/components/ProfileCard.tsx +7 -4
  914. package/src/ui/components/QuickActions.tsx +7 -4
  915. package/src/ui/components/Section.tsx +6 -2
  916. package/src/ui/components/SectionTitle.tsx +7 -4
  917. package/src/ui/components/SettingRow.tsx +76 -0
  918. package/src/ui/components/StepBasedScreen.tsx +205 -187
  919. package/src/ui/components/Surface.tsx +384 -0
  920. package/src/ui/components/TextField/Addons/Outline.tsx +64 -0
  921. package/src/ui/components/TextField/Addons/Underline.tsx +78 -0
  922. package/src/ui/components/TextField/Adornment/TextFieldAdornment.tsx +208 -0
  923. package/src/ui/components/TextField/Adornment/TextFieldAffix.tsx +212 -0
  924. package/src/ui/components/TextField/Adornment/TextFieldIcon.tsx +195 -0
  925. package/src/ui/components/TextField/Adornment/enums.tsx +12 -0
  926. package/src/ui/components/TextField/Adornment/types.tsx +11 -0
  927. package/src/ui/components/TextField/Adornment/utils.ts +66 -0
  928. package/src/ui/components/TextField/Label/InputLabel.tsx +219 -0
  929. package/src/ui/components/TextField/Label/LabelBackground.tsx +100 -0
  930. package/src/ui/components/TextField/TextFieldFlat.tsx +488 -0
  931. package/src/ui/components/TextField/TextFieldOutlined.tsx +464 -0
  932. package/src/ui/components/TextField/constants.tsx +48 -0
  933. package/src/ui/components/TextField/helpers.tsx +612 -0
  934. package/src/ui/components/TextField/types.tsx +156 -0
  935. package/src/ui/components/TextField.tsx +578 -0
  936. package/src/ui/components/TouchableRipple/Pressable.tsx +41 -0
  937. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +146 -0
  938. package/src/ui/components/TouchableRipple/TouchableRipple.tsx +347 -0
  939. package/src/ui/components/TouchableRipple/utils.ts +66 -0
  940. package/src/ui/components/Typography/AnimatedText.tsx +107 -0
  941. package/src/ui/components/Typography/types.tsx +22 -0
  942. package/src/ui/components/fileManagement/FileDetailsModal.tsx +137 -0
  943. package/src/ui/components/fileManagement/FileViewer.tsx +380 -0
  944. package/src/ui/components/fileManagement/UploadPreview.tsx +175 -0
  945. package/src/ui/components/fileManagement/styles.ts +860 -0
  946. package/src/ui/components/index.ts +4 -1
  947. package/src/ui/components/profile/EditBioModal.tsx +184 -0
  948. package/src/ui/components/profile/EditDisplayNameModal.tsx +205 -0
  949. package/src/ui/components/profile/EditEmailModal.tsx +188 -0
  950. package/src/ui/components/profile/EditLinksModal.tsx +316 -0
  951. package/src/ui/components/profile/EditLocationModal.tsx +278 -0
  952. package/src/ui/components/profile/EditUsernameModal.tsx +183 -0
  953. package/src/ui/components/profile/TwoFactorSetupModal.tsx +442 -0
  954. package/src/ui/components/styles/overlay.tsx +88 -0
  955. package/src/ui/components/styles/shadow.tsx +136 -0
  956. package/src/ui/components/theming.tsx +114 -0
  957. package/src/ui/components/types.tsx +90 -0
  958. package/src/ui/components/utils/forwardRef.tsx +23 -0
  959. package/src/ui/components/utils/hasTouchHandler.tsx +23 -0
  960. package/src/ui/components/utils/roundLayoutSize.ts +2 -0
  961. package/src/ui/components/utils/splitStyles.ts +60 -0
  962. package/src/ui/constants/iconColors.ts +88 -0
  963. package/src/ui/constants/spacing.ts +45 -0
  964. package/src/ui/constants/theme.ts +120 -0
  965. package/src/ui/context/OxyContext.tsx +276 -894
  966. package/src/ui/context/ThemeContext.tsx +41 -0
  967. package/src/ui/context/hooks/useAuthOperations.ts +400 -0
  968. package/src/ui/context/hooks/useDeviceManagement.ts +108 -0
  969. package/src/ui/context/hooks/useLanguageManagement.ts +152 -0
  970. package/src/ui/context/hooks/useSessionManagement.ts +378 -0
  971. package/src/ui/context/hooks/useStorage.ts +104 -0
  972. package/src/ui/context/utils/errorHandlers.ts +136 -0
  973. package/src/ui/context/utils/sessionHelpers.ts +146 -0
  974. package/src/ui/context/utils/storageHelpers.ts +134 -0
  975. package/src/ui/hooks/index.ts +3 -1
  976. package/src/ui/hooks/use-color-scheme.ts +24 -0
  977. package/src/ui/hooks/use-haptic-press.ts +15 -0
  978. package/src/ui/hooks/useAssets.ts +1 -1
  979. package/src/ui/hooks/useDeviceManagement.ts +108 -0
  980. package/src/ui/hooks/useLanguageManagement.ts +152 -0
  981. package/src/ui/hooks/useProfileEditing.ts +151 -0
  982. package/src/ui/hooks/useSessionManagement.ts +378 -0
  983. package/src/ui/hooks/useStorage.ts +104 -0
  984. package/src/ui/hooks/useThemeColors.ts +26 -0
  985. package/src/ui/hooks/useThemeStyles.ts +85 -0
  986. package/src/ui/index.ts +1 -4
  987. package/src/ui/navigation/bottomSheetManager.ts +191 -0
  988. package/src/ui/navigation/routes.ts +107 -189
  989. package/src/ui/screens/AccountCenterScreen.tsx +67 -63
  990. package/src/ui/screens/AccountOverviewScreen.tsx +237 -95
  991. package/src/ui/screens/AccountSettingsScreen.tsx +546 -474
  992. package/src/ui/screens/AccountSwitcherScreen.tsx +113 -116
  993. package/src/ui/screens/AccountVerificationScreen.tsx +18 -20
  994. package/src/ui/screens/AppInfoScreen.tsx +37 -38
  995. package/src/ui/screens/FeedbackScreen.tsx +15 -12
  996. package/src/ui/screens/FileManagementScreen.tsx +764 -2026
  997. package/src/ui/screens/HelpSupportScreen.tsx +30 -23
  998. package/src/ui/screens/HistoryViewScreen.tsx +25 -56
  999. package/src/ui/screens/LanguageSelectorScreen.tsx +84 -170
  1000. package/src/ui/screens/LegalDocumentsScreen.tsx +18 -41
  1001. package/src/ui/screens/OxyAuthScreen.tsx +403 -0
  1002. package/src/ui/screens/PaymentGatewayScreen.tsx +20 -22
  1003. package/src/ui/screens/PremiumSubscriptionScreen.tsx +13 -10
  1004. package/src/ui/screens/PrivacySettingsScreen.tsx +150 -198
  1005. package/src/ui/screens/ProfileScreen.tsx +7 -6
  1006. package/src/ui/screens/SavesCollectionsScreen.tsx +39 -62
  1007. package/src/ui/screens/SearchSettingsScreen.tsx +36 -86
  1008. package/src/ui/screens/SessionManagementScreen.tsx +25 -17
  1009. package/src/ui/screens/UserLinksScreen.tsx +10 -11
  1010. package/src/ui/screens/WelcomeNewUserScreen.tsx +41 -41
  1011. package/src/ui/screens/karma/KarmaAboutScreen.tsx +13 -9
  1012. package/src/ui/screens/karma/KarmaCenterScreen.tsx +70 -70
  1013. package/src/ui/screens/karma/KarmaFAQScreen.tsx +96 -96
  1014. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +15 -10
  1015. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +605 -60
  1016. package/src/ui/screens/karma/KarmaRulesScreen.tsx +14 -9
  1017. package/src/ui/stores/authStore.ts +1 -1
  1018. package/src/ui/styles/authStyles.ts +5 -11
  1019. package/src/ui/styles/spacing.ts +21 -2
  1020. package/src/ui/styles/theme.ts +1 -1
  1021. package/src/ui/types/fileManagement.ts +51 -0
  1022. package/src/ui/types/navigation.ts +61 -0
  1023. package/src/ui/utils/colorUtils.ts +46 -0
  1024. package/src/ui/utils/errorHandlers.ts +136 -0
  1025. package/src/ui/utils/fileManagement.ts +190 -0
  1026. package/src/ui/utils/sessionHelpers.ts +146 -0
  1027. package/src/ui/utils/storageHelpers.ts +134 -0
  1028. package/src/ui/utils/themeUtils.ts +43 -0
  1029. package/src/ui/utils/user-utils.ts +58 -0
  1030. package/src/utils/errorUtils.ts +14 -4
  1031. package/lib/commonjs/ui/components/internal/TextField.js +0 -665
  1032. package/lib/commonjs/ui/components/internal/TextField.js.map +0 -1
  1033. package/lib/commonjs/ui/navigation/OxyRouter.js +0 -213
  1034. package/lib/commonjs/ui/navigation/OxyRouter.js.map +0 -1
  1035. package/lib/commonjs/ui/navigation/types.js +0 -13
  1036. package/lib/commonjs/ui/navigation/types.js.map +0 -1
  1037. package/lib/commonjs/ui/screens/AccountManagementDemo.js +0 -298
  1038. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +0 -1
  1039. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +0 -137
  1040. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +0 -1
  1041. package/lib/commonjs/ui/screens/SignInScreen.js +0 -270
  1042. package/lib/commonjs/ui/screens/SignInScreen.js.map +0 -1
  1043. package/lib/commonjs/ui/screens/SignUpScreen.js +0 -229
  1044. package/lib/commonjs/ui/screens/SignUpScreen.js.map +0 -1
  1045. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js +0 -135
  1046. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js.map +0 -1
  1047. package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js +0 -165
  1048. package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js.map +0 -1
  1049. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js +0 -159
  1050. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js.map +0 -1
  1051. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js +0 -144
  1052. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js.map +0 -1
  1053. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js +0 -358
  1054. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js.map +0 -1
  1055. package/lib/commonjs/ui/screens/steps/SignInTotpStep.js +0 -188
  1056. package/lib/commonjs/ui/screens/steps/SignInTotpStep.js.map +0 -1
  1057. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js +0 -509
  1058. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js.map +0 -1
  1059. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js +0 -200
  1060. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js.map +0 -1
  1061. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js +0 -185
  1062. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js.map +0 -1
  1063. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js +0 -138
  1064. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js.map +0 -1
  1065. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js +0 -150
  1066. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js.map +0 -1
  1067. package/lib/module/package.json +0 -1
  1068. package/lib/module/ui/components/internal/TextField.js +0 -660
  1069. package/lib/module/ui/components/internal/TextField.js.map +0 -1
  1070. package/lib/module/ui/navigation/OxyRouter.js +0 -209
  1071. package/lib/module/ui/navigation/OxyRouter.js.map +0 -1
  1072. package/lib/module/ui/navigation/types.js +0 -22
  1073. package/lib/module/ui/navigation/types.js.map +0 -1
  1074. package/lib/module/ui/screens/AccountManagementDemo.js +0 -295
  1075. package/lib/module/ui/screens/AccountManagementDemo.js.map +0 -1
  1076. package/lib/module/ui/screens/RecoverAccountScreen.js +0 -133
  1077. package/lib/module/ui/screens/RecoverAccountScreen.js.map +0 -1
  1078. package/lib/module/ui/screens/SignInScreen.js +0 -265
  1079. package/lib/module/ui/screens/SignInScreen.js.map +0 -1
  1080. package/lib/module/ui/screens/SignUpScreen.js +0 -224
  1081. package/lib/module/ui/screens/SignUpScreen.js.map +0 -1
  1082. package/lib/module/ui/screens/steps/RecoverRequestStep.js +0 -130
  1083. package/lib/module/ui/screens/steps/RecoverRequestStep.js.map +0 -1
  1084. package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js +0 -160
  1085. package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js.map +0 -1
  1086. package/lib/module/ui/screens/steps/RecoverSuccessStep.js +0 -154
  1087. package/lib/module/ui/screens/steps/RecoverSuccessStep.js.map +0 -1
  1088. package/lib/module/ui/screens/steps/RecoverVerifyStep.js +0 -139
  1089. package/lib/module/ui/screens/steps/RecoverVerifyStep.js.map +0 -1
  1090. package/lib/module/ui/screens/steps/SignInPasswordStep.js +0 -353
  1091. package/lib/module/ui/screens/steps/SignInPasswordStep.js.map +0 -1
  1092. package/lib/module/ui/screens/steps/SignInTotpStep.js +0 -183
  1093. package/lib/module/ui/screens/steps/SignInTotpStep.js.map +0 -1
  1094. package/lib/module/ui/screens/steps/SignInUsernameStep.js +0 -504
  1095. package/lib/module/ui/screens/steps/SignInUsernameStep.js.map +0 -1
  1096. package/lib/module/ui/screens/steps/SignUpIdentityStep.js +0 -195
  1097. package/lib/module/ui/screens/steps/SignUpIdentityStep.js.map +0 -1
  1098. package/lib/module/ui/screens/steps/SignUpSecurityStep.js +0 -180
  1099. package/lib/module/ui/screens/steps/SignUpSecurityStep.js.map +0 -1
  1100. package/lib/module/ui/screens/steps/SignUpSummaryStep.js +0 -133
  1101. package/lib/module/ui/screens/steps/SignUpSummaryStep.js.map +0 -1
  1102. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js +0 -145
  1103. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js.map +0 -1
  1104. package/lib/typescript/ui/components/internal/TextField.d.ts +0 -41
  1105. package/lib/typescript/ui/components/internal/TextField.d.ts.map +0 -1
  1106. package/lib/typescript/ui/navigation/OxyRouter.d.ts +0 -7
  1107. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +0 -1
  1108. package/lib/typescript/ui/navigation/types.d.ts +0 -141
  1109. package/lib/typescript/ui/navigation/types.d.ts.map +0 -1
  1110. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts +0 -8
  1111. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts.map +0 -1
  1112. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +0 -5
  1113. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +0 -1
  1114. package/lib/typescript/ui/screens/SignInScreen.d.ts +0 -5
  1115. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +0 -1
  1116. package/lib/typescript/ui/screens/SignUpScreen.d.ts +0 -5
  1117. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +0 -1
  1118. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts +0 -24
  1119. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts.map +0 -1
  1120. package/lib/typescript/ui/screens/steps/RecoverResetPasswordStep.d.ts +0 -24
  1121. package/lib/typescript/ui/screens/steps/RecoverResetPasswordStep.d.ts.map +0 -1
  1122. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts +0 -19
  1123. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts.map +0 -1
  1124. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts +0 -26
  1125. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts.map +0 -1
  1126. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts +0 -30
  1127. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts.map +0 -1
  1128. package/lib/typescript/ui/screens/steps/SignInTotpStep.d.ts +0 -19
  1129. package/lib/typescript/ui/screens/steps/SignInTotpStep.d.ts.map +0 -1
  1130. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts +0 -28
  1131. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts.map +0 -1
  1132. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts +0 -26
  1133. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts.map +0 -1
  1134. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts +0 -27
  1135. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts.map +0 -1
  1136. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts +0 -17
  1137. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts.map +0 -1
  1138. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts +0 -14
  1139. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts.map +0 -1
  1140. package/src/ui/components/internal/TextField.tsx +0 -808
  1141. package/src/ui/navigation/OxyRouter.tsx +0 -216
  1142. package/src/ui/navigation/types.ts +0 -164
  1143. package/src/ui/screens/AccountManagementDemo.tsx +0 -297
  1144. package/src/ui/screens/RecoverAccountScreen.tsx +0 -141
  1145. package/src/ui/screens/SignInScreen.tsx +0 -297
  1146. package/src/ui/screens/SignUpScreen.tsx +0 -239
  1147. package/src/ui/screens/steps/RecoverRequestStep.tsx +0 -143
  1148. package/src/ui/screens/steps/RecoverResetPasswordStep.tsx +0 -162
  1149. package/src/ui/screens/steps/RecoverSuccessStep.tsx +0 -148
  1150. package/src/ui/screens/steps/RecoverVerifyStep.tsx +0 -154
  1151. package/src/ui/screens/steps/SignInPasswordStep.tsx +0 -343
  1152. package/src/ui/screens/steps/SignInTotpStep.tsx +0 -163
  1153. package/src/ui/screens/steps/SignInUsernameStep.tsx +0 -560
  1154. package/src/ui/screens/steps/SignUpIdentityStep.tsx +0 -217
  1155. package/src/ui/screens/steps/SignUpSecurityStep.tsx +0 -207
  1156. package/src/ui/screens/steps/SignUpSummaryStep.tsx +0 -155
  1157. package/src/ui/screens/steps/SignUpWelcomeStep.tsx +0 -127
@@ -1,143 +1,86 @@
1
1
  import type React from 'react';
2
- import { createContext, useContext, useEffect, useCallback, useMemo, useRef, useState, type ReactNode } from 'react';
2
+ import {
3
+ createContext,
4
+ useCallback,
5
+ useContext,
6
+ useEffect,
7
+ useMemo,
8
+ useRef,
9
+ useState,
10
+ type ReactNode,
11
+ } from 'react';
3
12
  import { OxyServices } from '../../core';
4
13
  import type { User, ApiError } from '../../models/interfaces';
5
- import type { SessionLoginResponse, ClientSession, MinimalUserData } from '../../models/session';
6
- import { normalizeAndSortSessions, mergeSessions, sessionsArraysEqual } from '../../utils/sessionUtils';
7
- import { DeviceManager } from '../../utils/deviceManager';
8
- import { useSessionSocket } from '../hooks/useSessionSocket';
14
+ import type { ClientSession } from '../../models/session';
9
15
  import { toast } from '../../lib/sonner';
10
- import { useAuthStore } from '../stores/authStore';
11
- import type { BottomSheetController } from '../navigation/types';
12
- import type { RouteName } from '../navigation/routes';
13
- import { getLanguageMetadata, getLanguageName, getNativeLanguageName, normalizeLanguageCode } from '../../utils/languageUtils';
14
- import type { LanguageMetadata } from '../../utils/languageUtils';
16
+ import { useAuthStore, type AuthState } from '../stores/authStore';
17
+ import { useShallow } from 'zustand/react/shallow';
18
+ import { useSessionSocket } from '../hooks/useSessionSocket';
15
19
  import type { UseFollowHook } from '../hooks/useFollow.types';
20
+ import { useStorage } from '../hooks/useStorage';
21
+ import { useLanguageManagement } from '../hooks/useLanguageManagement';
22
+ import { useSessionManagement } from '../hooks/useSessionManagement';
23
+ import { useAuthOperations } from './hooks/useAuthOperations';
24
+ import { useDeviceManagement } from '../hooks/useDeviceManagement';
25
+ import { getStorageKeys } from '../utils/storageHelpers';
26
+ import { isInvalidSessionError } from '../utils/errorHandlers';
27
+ import type { RouteName } from '../navigation/routes';
28
+ import { showBottomSheet as globalShowBottomSheet } from '../navigation/bottomSheetManager';
16
29
 
17
- // Define the context shape
18
30
  export interface OxyContextState {
19
- // Authentication state
20
- user: User | null; // Current active user (loaded from server)
21
- minimalUser: MinimalUserData | null; // Minimal user data for UI
22
- sessions: ClientSession[]; // All active sessions
31
+ user: User | null;
32
+ sessions: ClientSession[];
23
33
  activeSessionId: string | null;
24
- isAuthenticated: boolean; // Single source of truth for authentication - use this instead of service methods
34
+ isAuthenticated: boolean;
25
35
  isLoading: boolean;
26
- isTokenReady: boolean; // Whether the token has been loaded/restored and is ready for use
36
+ isTokenReady: boolean;
27
37
  error: string | null;
28
-
29
- // Language state
30
38
  currentLanguage: string;
31
- currentLanguageMetadata: LanguageMetadata | null; // Full language metadata (name, nativeName, etc.)
32
- currentLanguageName: string; // Language name (e.g., 'English')
33
- currentNativeLanguageName: string; // Native language name (e.g., 'Español')
34
-
35
- // Auth methods
36
- login: (username: string, password: string, deviceName?: string) => Promise<User>;
39
+ currentLanguageMetadata: ReturnType<typeof useLanguageManagement>['metadata'];
40
+ currentLanguageName: string;
41
+ currentNativeLanguageName: string;
42
+
43
+ // Identity management (public key authentication)
44
+ createIdentity: (username: string, email?: string) => Promise<{ user: User; recoveryPhrase: string[] }>;
45
+ importIdentity: (phrase: string, username?: string, email?: string) => Promise<User>;
46
+ signIn: (deviceName?: string) => Promise<User>;
47
+ hasIdentity: () => Promise<boolean>;
48
+ getPublicKey: () => Promise<string | null>;
49
+
50
+ // Session management
37
51
  logout: (targetSessionId?: string) => Promise<void>;
38
52
  logoutAll: () => Promise<void>;
39
- signUp: (username: string, email: string, password: string) => Promise<User>;
40
- completeMfaLogin?: (mfaToken: string, code: string) => Promise<User>;
41
-
42
- // Multi-session methods
43
53
  switchSession: (sessionId: string) => Promise<void>;
44
54
  removeSession: (sessionId: string) => Promise<void>;
45
55
  refreshSessions: () => Promise<void>;
46
-
47
- // Language methods
48
56
  setLanguage: (languageId: string) => Promise<void>;
49
-
50
- // Device management methods
51
- getDeviceSessions: () => Promise<any[]>;
57
+ getDeviceSessions: () => Promise<
58
+ Array<{
59
+ sessionId: string;
60
+ deviceId: string;
61
+ deviceName?: string;
62
+ lastActive?: string;
63
+ expiresAt?: string;
64
+ }>
65
+ >;
52
66
  logoutAllDeviceSessions: () => Promise<void>;
53
67
  updateDeviceName: (deviceName: string) => Promise<void>;
54
-
55
- // Access to services
56
68
  oxyServices: OxyServices;
57
- bottomSheetRef?: React.RefObject<BottomSheetController | null>;
58
-
59
- // Methods to directly control the bottom sheet
60
- showBottomSheet?: (screenOrConfig?: RouteName | string | { screen: RouteName | string; props?: Record<string, any> }) => void;
61
- hideBottomSheet?: () => void;
62
-
63
- // Legacy hook access (for backward compatibility)
64
69
  useFollow?: UseFollowHook;
70
+ showBottomSheet?: (screenOrConfig: RouteName | { screen: RouteName; props?: Record<string, unknown> }) => void;
65
71
  }
66
72
 
67
- // Create the context with default values
68
73
  const OxyContext = createContext<OxyContextState | null>(null);
69
74
 
70
- // Props for the OxyContextProvider
71
75
  export interface OxyContextProviderProps {
72
76
  children: ReactNode;
73
- oxyServices?: OxyServices; // Now optional - will be created automatically if not provided
74
- baseURL?: string; // New: API base URL for automatic service creation
77
+ oxyServices?: OxyServices;
78
+ baseURL?: string;
75
79
  storageKeyPrefix?: string;
76
80
  onAuthStateChange?: (user: User | null) => void;
77
- onError?: (error: ApiError) => void; // New: Error callback
78
- bottomSheetRef?: React.RefObject<BottomSheetController | null>;
79
- }
80
-
81
- // Platform storage implementation
82
- interface StorageInterface {
83
- getItem: (key: string) => Promise<string | null>;
84
- setItem: (key: string, value: string) => Promise<void>;
85
- removeItem: (key: string) => Promise<void>;
86
- clear: () => Promise<void>;
87
- }
88
-
89
- // Web localStorage implementation
90
- class WebStorage implements StorageInterface {
91
- async getItem(key: string): Promise<string | null> {
92
- return localStorage.getItem(key);
93
- }
94
-
95
- async setItem(key: string, value: string): Promise<void> {
96
- localStorage.setItem(key, value);
97
- }
98
-
99
- async removeItem(key: string): Promise<void> {
100
- localStorage.removeItem(key);
101
- }
102
-
103
- async clear(): Promise<void> {
104
- localStorage.clear();
105
- }
81
+ onError?: (error: ApiError) => void;
106
82
  }
107
83
 
108
- // React Native AsyncStorage implementation
109
- let AsyncStorage: StorageInterface;
110
-
111
- // Determine the platform and set up storage
112
- const isReactNative = (): boolean => {
113
- return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
114
- };
115
-
116
- // Get appropriate storage for the platform
117
- const getStorage = async (): Promise<StorageInterface> => {
118
- if (isReactNative()) {
119
- if (!AsyncStorage) {
120
- try {
121
- const asyncStorageModule = await import('@react-native-async-storage/async-storage');
122
- AsyncStorage = (asyncStorageModule.default as unknown) as StorageInterface;
123
- } catch (error) {
124
- console.error('Failed to import AsyncStorage:', error);
125
- throw new Error('AsyncStorage is required in React Native environment');
126
- }
127
- }
128
- return AsyncStorage;
129
- }
130
-
131
- return new WebStorage();
132
- };
133
-
134
- // Storage keys for sessions
135
- const getStorageKeys = (prefix = 'oxy_session') => ({
136
- activeSessionId: `${prefix}_active_session_id`, // Only store the active session ID
137
- sessionIds: `${prefix}_session_ids`, // Store all session IDs for quick account loading
138
- language: `${prefix}_language`, // Store the selected language
139
- });
140
-
141
84
  let cachedUseFollowHook: UseFollowHook | null = null;
142
85
 
143
86
  const loadUseFollowHook = (): UseFollowHook => {
@@ -154,7 +97,7 @@ const loadUseFollowHook = (): UseFollowHook => {
154
97
  if (__DEV__) {
155
98
  console.warn(
156
99
  'useFollow hook is not available. Please import useFollow from @oxyhq/services directly.',
157
- error
100
+ error,
158
101
  );
159
102
  }
160
103
 
@@ -174,9 +117,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
174
117
  storageKeyPrefix = 'oxy_session',
175
118
  onAuthStateChange,
176
119
  onError,
177
- bottomSheetRef,
178
120
  }) => {
179
- // Create oxyServices automatically if not provided
180
121
  const oxyServicesRef = useRef<OxyServices | null>(null);
181
122
 
182
123
  if (!oxyServicesRef.current) {
@@ -191,806 +132,251 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
191
132
 
192
133
  const oxyServices = oxyServicesRef.current;
193
134
 
194
- // Zustand state
195
- const user = useAuthStore((state) => state.user);
196
- const isAuthenticated = useAuthStore((state) => state.isAuthenticated);
197
- const isLoading = useAuthStore((state) => state.isLoading);
198
- const error = useAuthStore((state) => state.error);
199
- const loginSuccess = useAuthStore((state) => state.loginSuccess);
200
- const loginFailure = useAuthStore((state) => state.loginFailure);
201
- const logoutStore = useAuthStore((state) => state.logout);
202
-
203
- // Local state for non-auth fields
204
- const [minimalUser, setMinimalUser] = useState<MinimalUserData | null>(null);
205
- const [sessions, setSessions] = useState<ClientSession[]>([]);
206
- const [activeSessionId, setActiveSessionId] = useState<string | null>(null);
207
-
208
- // Track in-flight refresh to prevent duplicate calls
209
- const refreshInFlightRef = useRef<Promise<void> | null>(null);
210
-
211
- // Track recently removed session IDs to avoid validating them (cleared after 5 seconds)
212
- const removedSessionsRef = useRef<Set<string>>(new Set());
213
-
214
- const [storage, setStorage] = useState<StorageInterface | null>(null);
215
- const [currentLanguage, setCurrentLanguage] = useState<string>('en-US');
216
- const useFollowHook = useMemo(() => loadUseFollowHook(), []);
217
-
218
- // Storage keys (memoized to prevent infinite loops) - declared early for use in helpers
219
- const keys = useMemo(() => getStorageKeys(storageKeyPrefix), [storageKeyPrefix]);
135
+ const {
136
+ user,
137
+ isAuthenticated,
138
+ isLoading,
139
+ error,
140
+ loginSuccess,
141
+ loginFailure,
142
+ logoutStore,
143
+ } = useAuthStore(
144
+ useShallow((state: AuthState) => ({
145
+ user: state.user,
146
+ isAuthenticated: state.isAuthenticated,
147
+ isLoading: state.isLoading,
148
+ error: state.error,
149
+ loginSuccess: state.loginSuccess,
150
+ loginFailure: state.loginFailure,
151
+ logoutStore: state.logout,
152
+ })),
153
+ );
220
154
 
221
- // Helper to apply language preference from user/server
222
- const applyLanguagePreference = useCallback(async (user: User): Promise<void> => {
223
- const userLanguage = (user as Record<string, unknown>)?.language as string | undefined;
224
- if (!userLanguage || !storage) return;
155
+ const [tokenReady, setTokenReady] = useState(true);
156
+ const initializedRef = useRef(false);
157
+ const setAuthState = useAuthStore.setState;
225
158
 
226
- try {
227
- const serverLang = normalizeLanguageCode(userLanguage);
228
- await storage.setItem(keys.language, serverLang);
229
- setCurrentLanguage(serverLang);
230
- } catch (e) {
231
- if (__DEV__) {
232
- console.warn('Failed to apply server language preference', e);
233
- }
159
+ const logger = useCallback((message: string, err?: unknown) => {
160
+ if (__DEV__) {
161
+ console.warn(`[OxyContext] ${message}`, err);
234
162
  }
235
- }, [storage, keys.language]);
236
-
237
- const mapSessionsToClient = useCallback((sessions: Array<{
238
- sessionId: string;
239
- deviceId?: string;
240
- expiresAt?: string;
241
- lastActive?: string;
242
- user?: { id?: string; _id?: { toString(): string } };
243
- userId?: string;
244
- isCurrent?: boolean;
245
- }>, fallbackDeviceId?: string, fallbackUserId?: string): ClientSession[] => {
246
- return sessions.map((s: any) => ({
247
- sessionId: s.sessionId,
248
- deviceId: s.deviceId || fallbackDeviceId || '',
249
- expiresAt: s.expiresAt || new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),
250
- lastActive: s.lastActive || new Date().toISOString(),
251
- userId: s.user?.id || s.userId || (s.user?._id?.toString()) || fallbackUserId || '',
252
- isCurrent: Boolean(s.isCurrent),
253
- }));
254
163
  }, []);
255
164
 
256
- // Save all session IDs to storage for quick loading on initialization
257
- const saveSessionIds = useCallback(async (sessionIds: string[]): Promise<void> => {
258
- if (!storage) return;
259
- try {
260
- const uniqueIds = Array.from(new Set(sessionIds));
261
- await storage.setItem(keys.sessionIds, JSON.stringify(uniqueIds));
262
- } catch (err) {
263
- if (__DEV__) {
264
- console.warn('Failed to save session IDs:', err);
265
- }
266
- }
267
- }, [storage, keys.sessionIds]);
165
+ const storageKeys = useMemo(() => getStorageKeys(storageKeyPrefix), [storageKeyPrefix]);
268
166
 
269
- const updateSessions = useCallback((newSessions: ClientSession[], mergeWithExisting = false) => {
270
- setSessions((prevSessions) => {
271
- const sessionsToProcess = mergeWithExisting
272
- ? mergeSessions(prevSessions, newSessions, activeSessionId, false)
273
- : normalizeAndSortSessions(newSessions, activeSessionId, false);
274
-
275
- // Save all session IDs to storage
276
- if (storage) {
277
- const allSessionIds = sessionsToProcess.map(s => s.sessionId);
278
- saveSessionIds(allSessionIds).catch(() => {
279
- // Ignore errors - non-critical
280
- });
281
- }
282
-
283
- return sessionsArraysEqual(prevSessions, sessionsToProcess) ? prevSessions : sessionsToProcess;
284
- });
285
- }, [activeSessionId, storage, saveSessionIds]);
286
-
287
- // Token ready state - start optimistically so children render immediately
288
- const [tokenReady, setTokenReady] = useState(true);
167
+ const { storage } = useStorage({ onError, logger });
289
168
 
290
- // Clear all storage
291
- const clearAllStorage = useCallback(async (): Promise<void> => {
292
- if (!storage) return;
293
- try {
294
- await storage.removeItem(keys.activeSessionId);
295
- await storage.removeItem(keys.sessionIds);
296
- } catch (err) {
297
- if (__DEV__) {
298
- console.error('Clear storage error:', err);
299
- }
300
- onError?.({ message: 'Failed to clear storage', code: 'STORAGE_ERROR', status: 500 });
301
- }
302
- }, [storage, keys, onError]);
169
+ const {
170
+ currentLanguage,
171
+ metadata: currentLanguageMetadata,
172
+ languageName: currentLanguageName,
173
+ nativeLanguageName: currentNativeLanguageName,
174
+ setLanguage,
175
+ applyLanguagePreference,
176
+ } = useLanguageManagement({
177
+ storage,
178
+ languageKey: storageKeys.language,
179
+ onError,
180
+ logger,
181
+ });
303
182
 
304
- // Initialize storage
305
- useEffect(() => {
306
- const initStorage = async () => {
307
- try {
308
- const platformStorage = await getStorage();
309
- setStorage(platformStorage);
310
- } catch (error) {
311
- const errorMessage = error instanceof Error ? error.message : 'Failed to initialize storage';
312
- useAuthStore.setState({ error: errorMessage });
313
- onError?.({ message: errorMessage, code: 'STORAGE_INIT_ERROR', status: 500 });
314
- }
315
- };
316
- initStorage();
317
- }, [onError]);
183
+ const {
184
+ sessions,
185
+ activeSessionId,
186
+ setActiveSessionId,
187
+ updateSessions,
188
+ switchSession,
189
+ refreshSessions,
190
+ clearSessionState,
191
+ saveActiveSessionId,
192
+ trackRemovedSession,
193
+ } = useSessionManagement({
194
+ oxyServices,
195
+ storage,
196
+ storageKeyPrefix,
197
+ loginSuccess,
198
+ logoutStore,
199
+ applyLanguagePreference,
200
+ onAuthStateChange,
201
+ onError,
202
+ setAuthError: (message) => setAuthState({ error: message }),
203
+ logger,
204
+ setTokenReady,
205
+ });
318
206
 
319
- // Initialize authentication state
320
- // Note: We don't set isLoading during initialization to avoid showing spinners
321
- // Children render immediately and can check isTokenReady/isAuthenticated themselves
322
- useEffect(() => {
323
- const initAuth = async () => {
324
- if (!storage) return;
325
- // Don't set isLoading during initialization - let it happen in background
326
- try {
327
- // Load saved language preference
328
- const savedLanguageRaw = await storage.getItem(keys.language);
329
- const savedLanguage = normalizeLanguageCode(savedLanguageRaw) || savedLanguageRaw;
330
- if (savedLanguage) {
331
- setCurrentLanguage(savedLanguage);
332
- }
207
+ const {
208
+ createIdentity,
209
+ importIdentity,
210
+ signIn,
211
+ logout,
212
+ logoutAll,
213
+ hasIdentity,
214
+ getPublicKey,
215
+ } = useAuthOperations({
216
+ oxyServices,
217
+ storage,
218
+ sessions,
219
+ activeSessionId,
220
+ setActiveSessionId,
221
+ updateSessions,
222
+ saveActiveSessionId,
223
+ clearSessionState,
224
+ switchSession,
225
+ applyLanguagePreference,
226
+ onAuthStateChange,
227
+ onError,
228
+ loginSuccess,
229
+ loginFailure,
230
+ logoutStore,
231
+ setAuthState,
232
+ logger,
233
+ });
333
234
 
334
- // Load all stored session IDs and validate them
335
- const storedSessionIdsJson = await storage.getItem(keys.sessionIds);
336
- const storedSessionIds: string[] = storedSessionIdsJson ? JSON.parse(storedSessionIdsJson) : [];
337
-
338
- // Try to restore active session from storage
339
- const storedActiveSessionId = await storage.getItem(keys.activeSessionId);
340
- const validSessions: ClientSession[] = [];
341
-
342
- // If we have stored session IDs, validate them (even without active session)
343
- if (storedSessionIds.length > 0) {
344
- if (__DEV__) {
345
- console.log('Loading stored sessions on init:', storedSessionIds.length);
346
- }
347
-
348
- // Validate each stored session ID and build session list
349
- for (const sessionId of storedSessionIds) {
350
- try {
351
- const validation = await oxyServices.validateSession(sessionId, { useHeaderValidation: true });
352
- if (validation.valid && validation.user) {
353
- validSessions.push({
354
- sessionId,
355
- userId: validation.user.id?.toString() || '',
356
- deviceId: '',
357
- expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),
358
- lastActive: new Date().toISOString(),
359
- isCurrent: sessionId === storedActiveSessionId,
360
- });
361
- }
362
- } catch (e) {
363
- // Session invalid, skip it
364
- if (__DEV__) {
365
- console.warn('Session validation failed for:', sessionId, e);
366
- }
367
- }
368
- }
369
-
370
- // Update sessions list with validated sessions (even if no active session)
371
- if (validSessions.length > 0) {
372
- updateSessions(validSessions, false);
373
- }
374
- }
375
-
376
- // If we have an active session, authenticate with it
377
- if (storedActiveSessionId) {
378
- try {
379
- const validation = await oxyServices.validateSession(storedActiveSessionId, { useHeaderValidation: true });
380
- if (validation.valid) {
381
- setActiveSessionId(storedActiveSessionId);
382
- await oxyServices.getTokenBySession(storedActiveSessionId);
383
- const fullUser = await oxyServices.getUserBySession(storedActiveSessionId);
384
- loginSuccess(fullUser);
385
- setMinimalUser({ id: fullUser.id, username: fullUser.username, avatar: fullUser.avatar });
235
+ const { getDeviceSessions, logoutAllDeviceSessions, updateDeviceName } = useDeviceManagement({
236
+ oxyServices,
237
+ activeSessionId,
238
+ onError,
239
+ clearSessionState,
240
+ logger,
241
+ });
386
242
 
387
- await applyLanguagePreference(fullUser);
243
+ const useFollowHook = loadUseFollowHook();
388
244
 
389
- try {
390
- const deviceSessions = await oxyServices.getDeviceSessions(storedActiveSessionId);
391
- const allDeviceSessions = mapSessionsToClient(deviceSessions, undefined, fullUser.id);
392
- updateSessions(allDeviceSessions, true);
393
- } catch (e) {
394
- if (__DEV__) {
395
- console.warn('Failed to get device sessions on init, falling back to user sessions:', e);
396
- }
397
- const serverSessions = await oxyServices.getSessionsBySessionId(storedActiveSessionId);
398
- updateSessions(mapSessionsToClient(serverSessions, undefined, fullUser.id), false);
399
- }
400
- onAuthStateChange?.(fullUser);
401
- } else {
402
- // Active session invalid, remove it but keep other sessions
403
- await storage.removeItem(keys.activeSessionId);
404
- // Update session list to remove invalid active session
405
- updateSessions(validSessions.filter(s => s.sessionId !== storedActiveSessionId), false);
406
- }
407
- } catch (e) {
408
- if (__DEV__) {
409
- console.error('Active session validation error', e);
410
- }
411
- // Remove invalid active session but keep other sessions
412
- await storage.removeItem(keys.activeSessionId);
413
- updateSessions(validSessions.filter(s => s.sessionId !== storedActiveSessionId), false);
414
- }
415
- }
416
- setTokenReady(true);
417
- } catch (e) {
418
- if (__DEV__) {
419
- console.error('Auth init error', e);
420
- }
421
- await clearAllStorage();
422
- setTokenReady(true);
423
- }
424
- };
425
- initAuth();
426
- }, [storage, oxyServices, keys, onAuthStateChange, loginSuccess, clearAllStorage, applyLanguagePreference, mapSessionsToClient, updateSessions]);
245
+ const restoreSessionsFromStorage = useCallback(async (): Promise<void> => {
246
+ if (!storage) {
247
+ return;
248
+ }
427
249
 
428
- // Save active session ID to storage (only session ID, no user data)
429
- const saveActiveSessionId = useCallback(async (sessionId: string): Promise<void> => {
430
- if (!storage) return;
431
- await storage.setItem(keys.activeSessionId, sessionId);
432
- }, [storage, keys.activeSessionId]);
250
+ setTokenReady(false);
433
251
 
434
- const switchToSession = useCallback(async (sessionId: string): Promise<void> => {
435
252
  try {
436
- const validation = await oxyServices.validateSession(sessionId, { useHeaderValidation: true });
437
- if (!validation.valid) {
438
- updateSessions(sessions.filter(s => s.sessionId !== sessionId), false);
439
- throw new Error('Session is invalid or expired');
440
- }
441
-
442
- if (!validation.user) {
443
- throw new Error('User data not available from session validation');
444
- }
445
-
446
- const fullUser = validation.user;
447
- await oxyServices.getTokenBySession(sessionId);
448
- setTokenReady(true);
449
-
450
- setActiveSessionId(sessionId);
451
- loginSuccess(fullUser);
452
- setMinimalUser({
453
- id: fullUser.id,
454
- username: fullUser.username,
455
- avatar: fullUser.avatar
456
- });
253
+ const storedSessionIdsJson = await storage.getItem(storageKeys.sessionIds);
254
+ const storedSessionIds: string[] = storedSessionIdsJson ? JSON.parse(storedSessionIdsJson) : [];
255
+ const storedActiveSessionId = await storage.getItem(storageKeys.activeSessionId);
457
256
 
458
- await saveActiveSessionId(sessionId);
459
- await applyLanguagePreference(fullUser);
257
+ const validSessions: ClientSession[] = [];
460
258
 
461
- oxyServices.getDeviceSessions(sessionId)
462
- .then((deviceSessions) => {
463
- const allDeviceSessions = mapSessionsToClient(deviceSessions, undefined, fullUser.id);
464
- updateSessions(allDeviceSessions, true);
465
- })
466
- .catch((error) => {
467
- if (__DEV__) console.warn('Failed to get device sessions after switch:', error);
468
- });
469
-
470
- onAuthStateChange?.(fullUser);
471
- } catch (error: any) {
472
- const isInvalidSession = error?.response?.status === 401 ||
473
- error?.message?.includes('Invalid or expired session') ||
474
- error?.message?.includes('Session is invalid');
475
-
476
- if (isInvalidSession) {
477
- updateSessions(sessions.filter(s => s.sessionId !== sessionId), false);
478
-
479
- if (sessionId === activeSessionId && sessions.length > 1) {
480
- const otherSessions = sessions.filter(s => s.sessionId !== sessionId);
481
- for (const otherSession of otherSessions) {
482
- try {
483
- const otherValidation = await oxyServices.validateSession(otherSession.sessionId, { useHeaderValidation: true });
484
- if (otherValidation.valid) {
485
- await switchToSession(otherSession.sessionId);
486
- return;
487
- }
488
- } catch {
489
- // Continue to next session
490
- continue;
259
+ if (storedSessionIds.length > 0) {
260
+ for (const sessionId of storedSessionIds) {
261
+ try {
262
+ const validation = await oxyServices.validateSession(sessionId, { useHeaderValidation: true });
263
+ if (validation?.valid && validation.user) {
264
+ const now = new Date();
265
+ validSessions.push({
266
+ sessionId,
267
+ deviceId: '',
268
+ expiresAt: new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000).toISOString(),
269
+ lastActive: now.toISOString(),
270
+ userId: validation.user.id?.toString() ?? '',
271
+ isCurrent: sessionId === storedActiveSessionId,
272
+ });
491
273
  }
274
+ } catch (validationError) {
275
+ logger('Session validation failed during init', validationError);
492
276
  }
493
277
  }
494
- }
495
-
496
- const errorMessage = error instanceof Error ? error.message : 'Failed to switch session';
497
- if (__DEV__) {
498
- console.error('Switch session error:', error);
499
- }
500
- useAuthStore.setState({ error: errorMessage });
501
- onError?.({ message: errorMessage, code: isInvalidSession ? 'INVALID_SESSION' : 'SESSION_SWITCH_ERROR', status: isInvalidSession ? 401 : 500 });
502
- setTokenReady(false);
503
- throw error; // Re-throw so calling code can handle it
504
- }
505
- }, [oxyServices, onAuthStateChange, loginSuccess, saveActiveSessionId, applyLanguagePreference, mapSessionsToClient, onError, activeSessionId, sessions]);
506
-
507
- const login = useCallback(async (username: string, password: string, deviceName?: string): Promise<User> => {
508
- if (!storage) throw new Error('Storage not initialized');
509
- useAuthStore.setState({ isLoading: true, error: null });
510
-
511
- try {
512
- const deviceFingerprint = DeviceManager.getDeviceFingerprint();
513
- const deviceInfo = await DeviceManager.getDeviceInfo();
514
278
 
515
- const response = await oxyServices.signIn(
516
- username,
517
- password,
518
- deviceName || deviceInfo.deviceName || DeviceManager.getDefaultDeviceName(),
519
- deviceFingerprint
520
- );
521
-
522
- // Handle MFA requirement
523
- if (response && 'mfaRequired' in response && response.mfaRequired) {
524
- const mfaError = new Error('Multi-factor authentication required') as Error & {
525
- code: string;
526
- mfaToken?: string;
527
- expiresAt?: string;
528
- };
529
- mfaError.code = 'MFA_REQUIRED';
530
- mfaError.mfaToken = (response as { mfaToken?: string }).mfaToken;
531
- mfaError.expiresAt = (response as { expiresAt?: string }).expiresAt;
532
- throw mfaError;
533
- }
534
-
535
- const sessionResponse = response as SessionLoginResponse;
536
-
537
- await oxyServices.getTokenBySession(sessionResponse.sessionId);
538
- const fullUser = await oxyServices.getUserBySession(sessionResponse.sessionId);
539
-
540
- let allDeviceSessions: ClientSession[] = [];
541
- try {
542
- const deviceSessions = await oxyServices.getDeviceSessions(sessionResponse.sessionId);
543
- allDeviceSessions = mapSessionsToClient(deviceSessions, sessionResponse.deviceId, fullUser.id);
544
- } catch (error) {
545
- if (__DEV__) {
546
- console.warn('Failed to get device sessions, falling back to user sessions:', error);
279
+ if (validSessions.length > 0) {
280
+ updateSessions(validSessions, { merge: false });
547
281
  }
548
- const serverSessions = await oxyServices.getSessionsBySessionId(sessionResponse.sessionId);
549
- allDeviceSessions = mapSessionsToClient(serverSessions, undefined, fullUser.id);
550
282
  }
551
283
 
552
- const userUserId = fullUser.id?.toString();
553
- const existingSession = allDeviceSessions.find(
554
- s => s.userId?.toString() === userUserId && s.sessionId !== sessionResponse.sessionId
555
- );
556
-
557
- if (existingSession) {
284
+ if (storedActiveSessionId) {
558
285
  try {
559
- await oxyServices.logoutSession(sessionResponse.sessionId, sessionResponse.sessionId);
560
- } catch (logoutError) {
561
- if (__DEV__) {
562
- console.warn('Failed to logout duplicate session:', logoutError);
563
- }
564
- }
565
- await switchToSession(existingSession.sessionId);
566
- loginSuccess(fullUser);
567
- setMinimalUser(sessionResponse.user);
568
- updateSessions(allDeviceSessions.filter(s => s.sessionId !== sessionResponse.sessionId), false);
569
- onAuthStateChange?.(fullUser);
570
- return fullUser;
571
- }
572
-
573
- setActiveSessionId(sessionResponse.sessionId);
574
- await saveActiveSessionId(sessionResponse.sessionId);
575
- loginSuccess(fullUser);
576
- setMinimalUser(sessionResponse.user);
577
- updateSessions(allDeviceSessions, true);
578
-
579
- onAuthStateChange?.(fullUser);
580
- return fullUser;
581
- } catch (error) {
582
- const errorMessage = error instanceof Error ? error.message : 'Login failed';
583
- loginFailure(errorMessage);
584
- onError?.({ message: errorMessage, code: 'LOGIN_ERROR', status: 401 });
585
- throw error;
586
- } finally {
587
- useAuthStore.setState({ isLoading: false });
588
- }
589
- }, [storage, oxyServices, saveActiveSessionId, loginSuccess, onAuthStateChange, loginFailure, mapSessionsToClient, onError, sessions, switchToSession]);
590
-
591
- // Clear session state without calling API (for remote removals)
592
- const clearSessionState = useCallback(async (): Promise<void> => {
593
- updateSessions([], false);
594
- setActiveSessionId(null);
595
- logoutStore();
596
- setMinimalUser(null);
597
- await clearAllStorage();
598
- onAuthStateChange?.(null);
599
- }, [updateSessions, logoutStore, clearAllStorage, onAuthStateChange]);
600
-
601
- // Logout method
602
- const logout = useCallback(async (targetSessionId?: string): Promise<void> => {
603
- if (!activeSessionId) return;
604
-
605
- try {
606
- const sessionToLogout = targetSessionId || activeSessionId;
607
- await oxyServices.logoutSession(activeSessionId, sessionToLogout);
608
-
609
- const filteredSessions = sessions.filter(s => s.sessionId !== sessionToLogout);
610
- updateSessions(filteredSessions, false);
611
-
612
- if (sessionToLogout === activeSessionId) {
613
- if (filteredSessions.length > 0) {
614
- await switchToSession(filteredSessions[0].sessionId);
615
- } else {
616
- setActiveSessionId(null);
617
- logoutStore();
618
- setMinimalUser(null);
619
- await storage?.removeItem(keys.activeSessionId);
620
-
621
- if (onAuthStateChange) {
622
- onAuthStateChange(null);
286
+ await switchSession(storedActiveSessionId);
287
+ } catch (switchError) {
288
+ if (isInvalidSessionError(switchError)) {
289
+ await storage.removeItem(storageKeys.activeSessionId);
290
+ updateSessions(
291
+ validSessions.filter((session) => session.sessionId !== storedActiveSessionId),
292
+ { merge: false },
293
+ );
294
+ } else {
295
+ logger('Active session validation error', switchError);
623
296
  }
624
297
  }
625
298
  }
626
299
  } catch (error) {
627
- // Check if error is 401 (session already removed remotely)
628
- const is401Error = (error as any)?.response?.status === 401 ||
629
- (error as any)?.message?.includes('Invalid or expired session') ||
630
- (error as any)?.message?.includes('Session is invalid');
631
-
632
- if (is401Error && targetSessionId === activeSessionId) {
633
- // Session was already removed remotely, clear state without API call
634
- await clearSessionState();
635
- return;
636
- }
637
-
638
- const errorMessage = error instanceof Error ? error.message : 'Logout failed';
639
300
  if (__DEV__) {
640
- console.error('Logout error:', error);
301
+ console.error('Auth init error', error);
641
302
  }
642
- useAuthStore.setState({ error: errorMessage });
643
- onError?.({ message: errorMessage, code: 'LOGOUT_ERROR', status: 500 });
644
- }
645
- }, [activeSessionId, oxyServices, sessions, switchToSession, logoutStore, storage, keys.activeSessionId, onAuthStateChange, onError, clearSessionState]);
646
-
647
- const logoutAll = useCallback(async (): Promise<void> => {
648
- if (!activeSessionId) {
649
- const error = new Error('No active session found');
650
- useAuthStore.setState({ error: error.message });
651
- onError?.({ message: error.message, code: 'NO_SESSION_ERROR', status: 404 });
652
- throw error;
653
- }
654
-
655
- try {
656
- await oxyServices.logoutAllSessions(activeSessionId);
657
-
658
- updateSessions([], false);
659
- setActiveSessionId(null);
660
- logoutStore();
661
- setMinimalUser(null);
662
- await clearAllStorage();
663
- onAuthStateChange?.(null);
664
- } catch (error) {
665
- const errorMessage = error instanceof Error ? error.message : 'Logout all failed';
666
- useAuthStore.setState({ error: errorMessage });
667
- onError?.({ message: errorMessage, code: 'LOGOUT_ALL_ERROR', status: 500 });
668
- throw error;
669
- }
670
- }, [activeSessionId, oxyServices, logoutStore, clearAllStorage, onAuthStateChange, onError]);
671
-
672
- // Token restoration is handled in initAuth and switchToSession
673
- // No separate effect needed - children render immediately with isTokenReady available
674
-
675
- // Sign up method
676
- const signUp = useCallback(async (username: string, email: string, password: string): Promise<User> => {
677
- if (!storage) throw new Error('Storage not initialized');
678
-
679
- useAuthStore.setState({ isLoading: true, error: null });
680
-
681
- try {
682
- await oxyServices.signUp(username, email, password);
683
- const user = await login(username, password);
684
- return user;
685
- } catch (error) {
686
- const errorMessage = error instanceof Error ? error.message : 'Sign up failed';
687
- loginFailure(errorMessage);
688
- onError?.({ message: errorMessage, code: 'SIGNUP_ERROR', status: 400 });
689
- throw error;
690
- } finally {
691
- useAuthStore.setState({ isLoading: false });
692
- }
693
- }, [storage, oxyServices, login, loginFailure, onError]);
694
-
695
- // Complete MFA login by verifying TOTP
696
- const completeMfaLogin = useCallback(async (mfaToken: string, code: string): Promise<User> => {
697
- if (!storage) throw new Error('Storage not initialized');
698
- useAuthStore.setState({ isLoading: true, error: null });
699
- try {
700
- const response = await oxyServices.verifyTotpLogin(mfaToken, code);
701
-
702
- // Set as active session
703
- setActiveSessionId(response.sessionId);
704
- await saveActiveSessionId(response.sessionId);
705
-
706
- // Fetch access token and user data
707
- await oxyServices.getTokenBySession(response.sessionId);
708
- const fullUser = await oxyServices.getUserBySession(response.sessionId);
709
-
710
- loginSuccess(fullUser);
711
- setMinimalUser({ id: fullUser.id, username: fullUser.username, avatar: fullUser.avatar });
712
- await applyLanguagePreference(fullUser);
713
-
714
- // Get all device sessions to support multiple accounts
715
- try {
716
- const deviceSessions = await oxyServices.getDeviceSessions(response.sessionId);
717
- const allDeviceSessions = mapSessionsToClient(deviceSessions, undefined, fullUser.id);
718
- updateSessions(allDeviceSessions, true);
719
- } catch (error) {
720
- // Fallback to user sessions if device sessions fail
721
- if (__DEV__) {
722
- console.warn('Failed to get device sessions for MFA, falling back to user sessions:', error);
723
- }
724
- const serverSessions = await oxyServices.getSessionsBySessionId(response.sessionId);
725
- const userSessions = mapSessionsToClient(serverSessions, undefined, fullUser.id);
726
-
727
- updateSessions(userSessions, true);
728
- }
729
-
730
- onAuthStateChange?.(fullUser);
731
- return fullUser;
732
- } catch (error) {
733
- const errorMessage = error instanceof Error ? error.message : 'MFA verification failed';
734
- loginFailure(errorMessage);
735
- onError?.({ message: errorMessage, code: 'MFA_ERROR', status: 401 });
736
- throw error;
303
+ await clearSessionState();
737
304
  } finally {
738
- useAuthStore.setState({ isLoading: false });
739
- }
740
- }, [storage, oxyServices, loginSuccess, loginFailure, saveActiveSessionId, onAuthStateChange, applyLanguagePreference, onError]);
741
-
742
- const switchSession = useCallback(async (sessionId: string): Promise<void> => {
743
- await switchToSession(sessionId);
744
- }, [switchToSession]);
745
-
746
- const removeSession = useCallback(async (sessionId: string): Promise<void> => {
747
- await logout(sessionId);
748
- }, [logout]);
749
-
750
- const refreshSessions = useCallback(async (): Promise<void> => {
751
- if (!activeSessionId) return;
752
-
753
- // If a refresh is already in progress, return the existing promise
754
- if (refreshInFlightRef.current) {
755
- return refreshInFlightRef.current;
756
- }
757
-
758
- // Create the refresh promise
759
- const refreshPromise = (async () => {
760
- try {
761
- const deviceSessions = await oxyServices.getDeviceSessions(activeSessionId);
762
- const allDeviceSessions = mapSessionsToClient(deviceSessions, undefined, user?.id);
763
- updateSessions(allDeviceSessions, true);
764
- } catch (error) {
765
- if (__DEV__) {
766
- console.warn('Failed to refresh device sessions, falling back to user sessions:', error);
767
- }
768
- try {
769
- const serverSessions = await oxyServices.getSessionsBySessionId(activeSessionId);
770
- const userSessions = mapSessionsToClient(serverSessions, undefined, user?.id);
771
- updateSessions(userSessions, true);
772
- } catch (fallbackError) {
773
- if (__DEV__) {
774
- console.error('Refresh sessions error:', fallbackError);
775
- }
776
-
777
- // Check if the error is a 401 (session removed/invalid)
778
- const is401Error = (fallbackError as any)?.response?.status === 401 ||
779
- (fallbackError as any)?.message?.includes('Invalid or expired session') ||
780
- (fallbackError as any)?.message?.includes('Session is invalid');
781
-
782
- // If 401 error, don't try to validate other sessions - they may have been removed too
783
- // Instead, check if current session is in removed sessions list
784
- if (is401Error && removedSessionsRef.current.has(activeSessionId || '')) {
785
- // Current session was removed, clear all and logout
786
- updateSessions([], false);
787
- setActiveSessionId(null);
788
- logoutStore();
789
- setMinimalUser(null);
790
- await clearAllStorage();
791
- onAuthStateChange?.(null);
792
- return;
793
- }
794
-
795
- // If the current session is invalid, try to find another valid session
796
- // But skip sessions that were recently removed
797
- if (sessions.length > 1) {
798
- const otherSessions = sessions.filter(
799
- s => s.sessionId !== activeSessionId && !removedSessionsRef.current.has(s.sessionId)
800
- );
801
-
802
- for (const session of otherSessions) {
803
- try {
804
- const validation = await oxyServices.validateSession(session.sessionId, {
805
- useHeaderValidation: true
806
- });
807
- if (validation.valid) {
808
- await switchToSession(session.sessionId);
809
- return;
810
- }
811
- } catch (validationError: any) {
812
- // If validation returns 401, mark this session as removed
813
- const isValidation401 = validationError?.response?.status === 401 ||
814
- validationError?.message?.includes('Invalid or expired session');
815
-
816
- if (isValidation401) {
817
- removedSessionsRef.current.add(session.sessionId);
818
- // Clear from tracking after 5 seconds
819
- setTimeout(() => {
820
- removedSessionsRef.current.delete(session.sessionId);
821
- }, 5000);
822
- }
823
- continue;
824
- }
825
- }
826
- }
827
-
828
- // No valid sessions found, clear all
829
- updateSessions([], false);
830
- setActiveSessionId(null);
831
- logoutStore();
832
- setMinimalUser(null);
833
- await clearAllStorage();
834
- onAuthStateChange?.(null);
835
- }
836
- } finally {
837
- // Clear the in-flight ref when done
838
- refreshInFlightRef.current = null;
839
- }
840
- })();
841
-
842
- refreshInFlightRef.current = refreshPromise;
843
- return refreshPromise;
844
- }, [activeSessionId, oxyServices, user?.id, updateSessions, sessions, switchToSession, logoutStore, clearAllStorage, onAuthStateChange, mapSessionsToClient]);
845
-
846
- // Device management methods
847
- const getDeviceSessions = useCallback(async (): Promise<Array<{
848
- sessionId: string;
849
- deviceId: string;
850
- deviceName?: string;
851
- lastActive?: string;
852
- expiresAt?: string;
853
- }>> => {
854
- if (!activeSessionId) throw new Error('No active session');
855
- try {
856
- return await oxyServices.getDeviceSessions(activeSessionId);
857
- } catch (error) {
858
- const errorMessage = error instanceof Error ? error.message : 'Failed to get device sessions';
859
- onError?.({ message: errorMessage, code: 'GET_DEVICE_SESSIONS_ERROR', status: 500 });
860
- throw error;
861
- }
862
- }, [activeSessionId, oxyServices, onError]);
863
-
864
- const logoutAllDeviceSessions = useCallback(async (): Promise<void> => {
865
- if (!activeSessionId) throw new Error('No active session');
866
-
867
- try {
868
- await oxyServices.logoutAllDeviceSessions(activeSessionId);
869
- updateSessions([], false);
870
- setActiveSessionId(null);
871
- logoutStore();
872
- setMinimalUser(null);
873
- await clearAllStorage();
874
- onAuthStateChange?.(null);
875
- } catch (error) {
876
- const errorMessage = error instanceof Error ? error.message : 'Failed to logout all device sessions';
877
- onError?.({ message: errorMessage, code: 'LOGOUT_ALL_DEVICES_ERROR', status: 500 });
878
- throw error;
879
- }
880
- }, [activeSessionId, oxyServices, logoutStore, clearAllStorage, onAuthStateChange, onError]);
881
-
882
- const updateDeviceName = useCallback(async (deviceName: string): Promise<void> => {
883
- if (!activeSessionId) throw new Error('No active session');
884
-
885
- try {
886
- await oxyServices.updateDeviceName(activeSessionId, deviceName);
887
- await DeviceManager.updateDeviceName(deviceName);
888
- } catch (error) {
889
- const errorMessage = error instanceof Error ? error.message : 'Failed to update device name';
890
- onError?.({ message: errorMessage, code: 'UPDATE_DEVICE_NAME_ERROR', status: 500 });
891
- throw error;
305
+ setTokenReady(true);
892
306
  }
893
- }, [activeSessionId, oxyServices, onError]);
894
-
895
- // Language management method
896
- const setLanguage = useCallback(async (languageId: string): Promise<void> => {
897
- if (!storage) throw new Error('Storage not initialized');
307
+ }, [
308
+ clearSessionState,
309
+ logger,
310
+ oxyServices,
311
+ storage,
312
+ storageKeys.activeSessionId,
313
+ storageKeys.sessionIds,
314
+ switchSession,
315
+ updateSessions,
316
+ ]);
898
317
 
899
- try {
900
- await storage.setItem(keys.language, languageId);
901
- setCurrentLanguage(languageId);
902
- } catch (error) {
903
- const errorMessage = error instanceof Error ? error.message : 'Failed to save language preference';
904
- onError?.({ message: errorMessage, code: 'LANGUAGE_SAVE_ERROR', status: 500 });
905
- throw error;
318
+ useEffect(() => {
319
+ if (!storage || initializedRef.current) {
320
+ return;
906
321
  }
907
- }, [storage, keys.language, onError]);
908
-
909
- // Bottom sheet control methods
910
- const showBottomSheet = useCallback((screenOrConfig?: RouteName | string | { screen: RouteName | string; props?: Record<string, any> }) => {
911
- if (__DEV__) console.log('showBottomSheet called with:', screenOrConfig);
912
322
 
913
- if (bottomSheetRef?.current) {
914
- if (__DEV__) console.log('bottomSheetRef is available');
323
+ initializedRef.current = true;
324
+ void restoreSessionsFromStorage();
325
+ }, [restoreSessionsFromStorage, storage]);
915
326
 
916
- // First, show the bottom sheet
917
- if (bottomSheetRef.current.expand) {
918
- if (__DEV__) console.log('Expanding bottom sheet');
919
- bottomSheetRef.current.expand();
920
- } else if (bottomSheetRef.current.present) {
921
- if (__DEV__) console.log('Presenting bottom sheet');
922
- bottomSheetRef.current.present();
923
- } else if (__DEV__) {
924
- console.warn('No expand or present method available on bottomSheetRef');
925
- }
327
+ const activeSession = activeSessionId
328
+ ? sessions.find((session) => session.sessionId === activeSessionId)
329
+ : undefined;
330
+ const currentDeviceId = activeSession?.deviceId ?? null;
926
331
 
927
- // Then navigate to the specified screen if provided
928
- if (screenOrConfig) {
929
- // Add a small delay to ensure the bottom sheet is opened first
930
- setTimeout(() => {
931
- if (typeof screenOrConfig === 'string') {
932
- // Simple screen name
933
- if (__DEV__) console.log('Navigating to screen:', screenOrConfig);
934
- bottomSheetRef.current?.navigate?.(screenOrConfig);
935
- } else {
936
- // Screen with props
937
- if (__DEV__) console.log('Navigating to screen with props:', screenOrConfig.screen, screenOrConfig.props);
938
- bottomSheetRef.current?.navigate?.(screenOrConfig.screen, screenOrConfig.props);
939
- }
940
- }, 100);
941
- }
942
- } else if (__DEV__) {
943
- console.warn('bottomSheetRef is not available. Pass a bottomSheetRef to OxyProvider.');
944
- }
945
- }, [bottomSheetRef]);
332
+ const userId = user?.id;
946
333
 
947
- const hideBottomSheet = useCallback(() => {
948
- if (bottomSheetRef?.current) {
949
- bottomSheetRef.current.dismiss?.();
950
- }
951
- }, [bottomSheetRef]);
334
+ const refreshSessionsWithUser = useCallback(
335
+ () => refreshSessions(userId),
336
+ [refreshSessions, userId],
337
+ );
952
338
 
953
- // Get current deviceId from active session
954
- const currentDeviceId = useMemo(() => {
955
- if (!activeSessionId || !sessions.length) return null;
956
- const activeSession = sessions.find(s => s.sessionId === activeSessionId);
957
- return activeSession?.deviceId || null;
958
- }, [activeSessionId, sessions]);
339
+ const handleSessionRemoved = useCallback(
340
+ (sessionId: string) => {
341
+ trackRemovedSession(sessionId);
342
+ },
343
+ [trackRemovedSession],
344
+ );
959
345
 
960
- // Callback to track removed sessions
961
- const handleSessionRemoved = useCallback((sessionId: string) => {
962
- // Add to removed sessions tracking
963
- removedSessionsRef.current.add(sessionId);
964
- // Clear from tracking after 5 seconds
965
- setTimeout(() => {
966
- removedSessionsRef.current.delete(sessionId);
967
- }, 5000);
968
- }, []);
346
+ const handleRemoteSignOut = useCallback(() => {
347
+ toast.info('You have been signed out remotely.');
348
+ logout().catch((remoteError) => logger('Failed to process remote sign out', remoteError));
349
+ }, [logger, logout]);
969
350
 
970
- // Integrate socket for real-time session updates
971
351
  useSessionSocket({
972
- userId: user?.id,
352
+ userId,
973
353
  activeSessionId,
974
354
  currentDeviceId,
975
- refreshSessions,
355
+ refreshSessions: refreshSessionsWithUser,
976
356
  logout,
977
357
  clearSessionState,
978
358
  baseURL: oxyServices.getBaseURL(),
979
- onRemoteSignOut: useCallback(() => {
980
- toast.info('You have been signed out remotely.');
981
- logout();
982
- }, [logout]),
359
+ onRemoteSignOut: handleRemoteSignOut,
983
360
  onSessionRemoved: handleSessionRemoved,
984
361
  });
985
362
 
986
- // Compute language metadata from currentLanguage
987
- const languageMetadata = useMemo(() => getLanguageMetadata(currentLanguage), [currentLanguage]);
988
- const languageName = useMemo(() => getLanguageName(currentLanguage), [currentLanguage]);
989
- const nativeLanguageName = useMemo(() => getNativeLanguageName(currentLanguage), [currentLanguage]);
363
+ const switchSessionForContext = useCallback(
364
+ async (sessionId: string): Promise<void> => {
365
+ await switchSession(sessionId);
366
+ },
367
+ [switchSession],
368
+ );
369
+
370
+ // Create showBottomSheet function that uses the global function
371
+ const showBottomSheetForContext = useCallback(
372
+ (screenOrConfig: RouteName | { screen: RouteName; props?: Record<string, unknown> }) => {
373
+ globalShowBottomSheet(screenOrConfig);
374
+ },
375
+ [],
376
+ );
990
377
 
991
378
  const contextValue: OxyContextState = useMemo(() => ({
992
379
  user,
993
- minimalUser,
994
380
  sessions,
995
381
  activeSessionId,
996
382
  isAuthenticated,
@@ -998,59 +384,56 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
998
384
  isTokenReady: tokenReady,
999
385
  error,
1000
386
  currentLanguage,
1001
- currentLanguageMetadata: languageMetadata,
1002
- currentLanguageName: languageName,
1003
- currentNativeLanguageName: nativeLanguageName,
1004
- login,
387
+ currentLanguageMetadata,
388
+ currentLanguageName,
389
+ currentNativeLanguageName,
390
+ createIdentity,
391
+ importIdentity,
392
+ signIn,
393
+ hasIdentity,
394
+ getPublicKey,
1005
395
  logout,
1006
396
  logoutAll,
1007
- signUp,
1008
- completeMfaLogin,
1009
- switchSession,
1010
- removeSession,
1011
- refreshSessions,
397
+ switchSession: switchSessionForContext,
398
+ removeSession: logout,
399
+ refreshSessions: refreshSessionsWithUser,
1012
400
  setLanguage,
1013
401
  getDeviceSessions,
1014
402
  logoutAllDeviceSessions,
1015
403
  updateDeviceName,
1016
404
  oxyServices,
1017
- bottomSheetRef,
1018
- showBottomSheet,
1019
- hideBottomSheet,
1020
405
  useFollow: useFollowHook,
406
+ showBottomSheet: showBottomSheetForContext,
1021
407
  }), [
1022
- user?.id, // Only depend on user ID, not the entire user object
1023
- minimalUser?.id,
1024
- sessions.length, // Only depend on sessions count, not the entire array
1025
408
  activeSessionId,
409
+ createIdentity,
410
+ importIdentity,
411
+ signIn,
412
+ hasIdentity,
413
+ getPublicKey,
414
+ currentLanguage,
415
+ currentLanguageMetadata,
416
+ currentLanguageName,
417
+ currentNativeLanguageName,
418
+ error,
419
+ getDeviceSessions,
1026
420
  isAuthenticated,
1027
421
  isLoading,
1028
- tokenReady,
1029
- error,
1030
- currentLanguage,
1031
- languageMetadata,
1032
- languageName,
1033
- nativeLanguageName,
1034
- login,
1035
422
  logout,
1036
423
  logoutAll,
1037
- signUp,
1038
- completeMfaLogin,
1039
- switchSession,
1040
- removeSession,
1041
- refreshSessions,
1042
- setLanguage,
1043
- getDeviceSessions,
1044
424
  logoutAllDeviceSessions,
1045
- updateDeviceName,
1046
425
  oxyServices,
1047
- bottomSheetRef,
1048
- showBottomSheet,
1049
- hideBottomSheet,
426
+ refreshSessionsWithUser,
427
+ sessions,
428
+ setLanguage,
429
+ switchSessionForContext,
430
+ tokenReady,
431
+ updateDeviceName,
1050
432
  useFollowHook,
433
+ user,
434
+ showBottomSheetForContext,
1051
435
  ]);
1052
436
 
1053
- // Always render children - let the consuming app decide how to handle token loading state
1054
437
  return (
1055
438
  <OxyContext.Provider value={contextValue}>
1056
439
  {children}
@@ -1058,10 +441,8 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
1058
441
  );
1059
442
  };
1060
443
 
1061
- // Alias for backward compatibility
1062
444
  export const OxyContextProvider = OxyProvider;
1063
445
 
1064
- // Hook to use the context
1065
446
  export const useOxy = (): OxyContextState => {
1066
447
  const context = useContext(OxyContext);
1067
448
  if (!context) {
@@ -1072,3 +453,4 @@ export const useOxy = (): OxyContextState => {
1072
453
 
1073
454
  export default OxyContext;
1074
455
 
456
+