@oxyhq/services 5.17.17 → 5.17.18

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 (403) hide show
  1. package/README.md +32 -38
  2. package/lib/commonjs/core/CrossDomainAuth.js +277 -0
  3. package/lib/commonjs/core/CrossDomainAuth.js.map +1 -0
  4. package/lib/commonjs/core/HttpService.js +82 -15
  5. package/lib/commonjs/core/HttpService.js.map +1 -1
  6. package/lib/commonjs/core/OxyServices.base.js +11 -3
  7. package/lib/commonjs/core/OxyServices.base.js.map +1 -1
  8. package/lib/commonjs/core/OxyServices.js +4 -1
  9. package/lib/commonjs/core/OxyServices.js.map +1 -1
  10. package/lib/commonjs/core/index.js +30 -0
  11. package/lib/commonjs/core/index.js.map +1 -1
  12. package/lib/commonjs/core/mixins/OxyServices.assets.js +16 -3
  13. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
  14. package/lib/commonjs/core/mixins/OxyServices.auth.js +73 -32
  15. package/lib/commonjs/core/mixins/OxyServices.auth.js.map +1 -1
  16. package/lib/commonjs/core/mixins/OxyServices.fedcm.js +289 -0
  17. package/lib/commonjs/core/mixins/OxyServices.fedcm.js.map +1 -0
  18. package/lib/commonjs/core/mixins/OxyServices.popup.js +352 -0
  19. package/lib/commonjs/core/mixins/OxyServices.popup.js.map +1 -0
  20. package/lib/commonjs/core/mixins/OxyServices.redirect.js +378 -0
  21. package/lib/commonjs/core/mixins/OxyServices.redirect.js.map +1 -0
  22. package/lib/commonjs/core/mixins/OxyServices.user.js +35 -24
  23. package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
  24. package/lib/commonjs/core/mixins/index.js +27 -15
  25. package/lib/commonjs/core/mixins/index.js.map +1 -1
  26. package/lib/commonjs/crypto/index.js +30 -0
  27. package/lib/commonjs/crypto/index.js.map +1 -1
  28. package/lib/commonjs/crypto/keyManager.js +902 -0
  29. package/lib/commonjs/crypto/keyManager.js.map +1 -0
  30. package/lib/commonjs/crypto/polyfill.js +14 -5
  31. package/lib/commonjs/crypto/polyfill.js.map +1 -1
  32. package/lib/commonjs/crypto/recoveryPhrase.js +152 -0
  33. package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -0
  34. package/lib/commonjs/crypto/signatureService.js +289 -0
  35. package/lib/commonjs/crypto/signatureService.js.map +1 -0
  36. package/lib/commonjs/i18n/locales/en-US.json +1 -1
  37. package/lib/commonjs/index.js +40 -26
  38. package/lib/commonjs/index.js.map +1 -1
  39. package/lib/commonjs/models/interfaces.js +0 -15
  40. package/lib/commonjs/models/interfaces.js.map +1 -1
  41. package/lib/commonjs/ui/components/BottomSheetRouter.js +9 -1
  42. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  43. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  44. package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
  45. package/lib/commonjs/ui/components/OxyProvider.js +41 -11
  46. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  47. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
  48. package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
  49. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
  50. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
  51. package/lib/commonjs/ui/context/OxyContext.js +110 -199
  52. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  53. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +150 -19
  54. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  55. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +279 -0
  56. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -0
  57. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +79 -72
  58. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  59. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +38 -51
  60. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  61. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +3 -3
  62. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  63. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +18 -12
  64. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  65. package/lib/commonjs/ui/hooks/useProfileEditing.js +3 -5
  66. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  67. package/lib/commonjs/ui/hooks/useSessionManagement.js +4 -8
  68. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  69. package/lib/commonjs/ui/hooks/useSessionSocket.js +162 -315
  70. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  71. package/lib/commonjs/ui/hooks/useStorage.js +24 -58
  72. package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
  73. package/lib/commonjs/ui/index.js +50 -21
  74. package/lib/commonjs/ui/index.js.map +1 -1
  75. package/lib/commonjs/ui/navigation/routes.js +5 -1
  76. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  77. package/lib/commonjs/ui/screens/AccountCenterScreen.js +2 -2
  78. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -24
  81. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
  83. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/OxyAuthScreen.js +134 -66
  85. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +6 -13
  87. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  88. package/lib/commonjs/ui/stores/accountStore.js +2 -4
  89. package/lib/commonjs/ui/stores/accountStore.js.map +1 -1
  90. package/lib/commonjs/ui/stores/authStore.js +45 -32
  91. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  92. package/lib/commonjs/ui/styles/spacing.js +54 -2
  93. package/lib/commonjs/ui/styles/spacing.js.map +1 -1
  94. package/lib/commonjs/ui/utils/avatarUtils.js +37 -41
  95. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  96. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  97. package/lib/commonjs/utils/errorUtils.js +13 -0
  98. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  99. package/lib/commonjs/utils/validationUtils.js +15 -1
  100. package/lib/commonjs/utils/validationUtils.js.map +1 -1
  101. package/lib/module/core/CrossDomainAuth.js +271 -0
  102. package/lib/module/core/CrossDomainAuth.js.map +1 -0
  103. package/lib/module/core/HttpService.js +82 -15
  104. package/lib/module/core/HttpService.js.map +1 -1
  105. package/lib/module/core/OxyServices.base.js +11 -4
  106. package/lib/module/core/OxyServices.base.js.map +1 -1
  107. package/lib/module/core/OxyServices.js +4 -1
  108. package/lib/module/core/OxyServices.js.map +1 -1
  109. package/lib/module/core/index.js +6 -1
  110. package/lib/module/core/index.js.map +1 -1
  111. package/lib/module/core/mixins/OxyServices.assets.js +16 -3
  112. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  113. package/lib/module/core/mixins/OxyServices.auth.js +73 -32
  114. package/lib/module/core/mixins/OxyServices.auth.js.map +1 -1
  115. package/lib/module/core/mixins/OxyServices.fedcm.js +286 -0
  116. package/lib/module/core/mixins/OxyServices.fedcm.js.map +1 -0
  117. package/lib/module/core/mixins/OxyServices.popup.js +349 -0
  118. package/lib/module/core/mixins/OxyServices.popup.js.map +1 -0
  119. package/lib/module/core/mixins/OxyServices.redirect.js +375 -0
  120. package/lib/module/core/mixins/OxyServices.redirect.js.map +1 -0
  121. package/lib/module/core/mixins/OxyServices.user.js +35 -24
  122. package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
  123. package/lib/module/core/mixins/index.js +15 -3
  124. package/lib/module/core/mixins/index.js.map +1 -1
  125. package/lib/module/crypto/index.js +8 -4
  126. package/lib/module/crypto/index.js.map +1 -1
  127. package/lib/module/crypto/keyManager.js +899 -0
  128. package/lib/module/crypto/keyManager.js.map +1 -0
  129. package/lib/module/crypto/polyfill.js +6 -5
  130. package/lib/module/crypto/polyfill.js.map +1 -1
  131. package/lib/module/crypto/recoveryPhrase.js +147 -0
  132. package/lib/module/crypto/recoveryPhrase.js.map +1 -0
  133. package/lib/module/crypto/signatureService.js +286 -0
  134. package/lib/module/crypto/signatureService.js.map +1 -0
  135. package/lib/module/i18n/locales/en-US.json +1 -1
  136. package/lib/module/index.js +6 -9
  137. package/lib/module/index.js.map +1 -1
  138. package/lib/module/models/interfaces.js +0 -15
  139. package/lib/module/models/interfaces.js.map +1 -1
  140. package/lib/module/ui/components/BottomSheetRouter.js +6 -2
  141. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  142. package/lib/module/ui/components/Icon.js.map +1 -1
  143. package/lib/module/ui/components/IconButton/utils.js.map +1 -1
  144. package/lib/module/ui/components/OxyProvider.js +41 -11
  145. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  146. package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
  147. package/lib/module/ui/components/TextField/helpers.js.map +1 -1
  148. package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
  149. package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
  150. package/lib/module/ui/context/OxyContext.js +112 -191
  151. package/lib/module/ui/context/OxyContext.js.map +1 -1
  152. package/lib/module/ui/context/hooks/useAuthOperations.js +150 -19
  153. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  154. package/lib/module/ui/context/hooks/useSessionManagement.js +274 -0
  155. package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -0
  156. package/lib/module/ui/hooks/mutations/useAccountMutations.js +80 -72
  157. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  158. package/lib/module/ui/hooks/queries/useAccountQueries.js +31 -44
  159. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  160. package/lib/module/ui/hooks/queries/useSecurityQueries.js +1 -1
  161. package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  162. package/lib/module/ui/hooks/queries/useServicesQueries.js +13 -7
  163. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  164. package/lib/module/ui/hooks/useProfileEditing.js +3 -5
  165. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  166. package/lib/module/ui/hooks/useSessionManagement.js +4 -8
  167. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  168. package/lib/module/ui/hooks/useSessionSocket.js +162 -315
  169. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  170. package/lib/module/ui/hooks/useStorage.js +25 -59
  171. package/lib/module/ui/hooks/useStorage.js.map +1 -1
  172. package/lib/module/ui/index.js +15 -10
  173. package/lib/module/ui/index.js.map +1 -1
  174. package/lib/module/ui/navigation/routes.js +5 -1
  175. package/lib/module/ui/navigation/routes.js.map +1 -1
  176. package/lib/module/ui/screens/AccountCenterScreen.js +2 -2
  177. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  178. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  179. package/lib/module/ui/screens/AccountSettingsScreen.js +29 -24
  180. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  181. package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
  182. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  183. package/lib/module/ui/screens/OxyAuthScreen.js +135 -68
  184. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  185. package/lib/module/ui/screens/PrivacySettingsScreen.js +6 -13
  186. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  187. package/lib/module/ui/stores/accountStore.js +2 -4
  188. package/lib/module/ui/stores/accountStore.js.map +1 -1
  189. package/lib/module/ui/stores/authStore.js +45 -32
  190. package/lib/module/ui/stores/authStore.js.map +1 -1
  191. package/lib/module/ui/styles/spacing.js +6 -2
  192. package/lib/module/ui/styles/spacing.js.map +1 -1
  193. package/lib/module/ui/utils/avatarUtils.js +37 -40
  194. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  195. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  196. package/lib/module/utils/errorUtils.js +7 -0
  197. package/lib/module/utils/errorUtils.js.map +1 -1
  198. package/lib/module/utils/validationUtils.js +13 -0
  199. package/lib/module/utils/validationUtils.js.map +1 -1
  200. package/lib/typescript/core/CrossDomainAuth.d.ts +161 -0
  201. package/lib/typescript/core/CrossDomainAuth.d.ts.map +1 -0
  202. package/lib/typescript/core/HttpService.d.ts +1 -1
  203. package/lib/typescript/core/HttpService.d.ts.map +1 -1
  204. package/lib/typescript/core/OxyServices.base.d.ts +0 -6
  205. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  206. package/lib/typescript/core/OxyServices.d.ts +5 -36
  207. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  208. package/lib/typescript/core/index.d.ts +4 -0
  209. package/lib/typescript/core/index.d.ts.map +1 -1
  210. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  211. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  212. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +40 -20
  213. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  214. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  215. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  216. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts +195 -0
  217. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts.map +1 -0
  218. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  219. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  220. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  221. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  222. package/lib/typescript/core/mixins/OxyServices.popup.d.ts +206 -0
  223. package/lib/typescript/core/mixins/OxyServices.popup.d.ts.map +1 -0
  224. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  225. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts +246 -0
  226. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts.map +1 -0
  227. package/lib/typescript/core/mixins/OxyServices.security.d.ts.map +1 -1
  228. package/lib/typescript/core/mixins/OxyServices.user.d.ts +6 -4
  229. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  230. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  231. package/lib/typescript/core/mixins/index.d.ts +220 -8
  232. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  233. package/lib/typescript/crypto/index.d.ts +6 -3
  234. package/lib/typescript/crypto/index.d.ts.map +1 -1
  235. package/lib/typescript/crypto/keyManager.d.ts +190 -0
  236. package/lib/typescript/crypto/keyManager.d.ts.map +1 -0
  237. package/lib/typescript/crypto/polyfill.d.ts +4 -3
  238. package/lib/typescript/crypto/polyfill.d.ts.map +1 -1
  239. package/lib/typescript/crypto/recoveryPhrase.d.ts +59 -0
  240. package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -0
  241. package/lib/typescript/crypto/signatureService.d.ts +87 -0
  242. package/lib/typescript/crypto/signatureService.d.ts.map +1 -0
  243. package/lib/typescript/index.d.ts +5 -6
  244. package/lib/typescript/index.d.ts.map +1 -1
  245. package/lib/typescript/models/interfaces.d.ts +2 -14
  246. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  247. package/lib/typescript/models/session.d.ts +0 -9
  248. package/lib/typescript/models/session.d.ts.map +1 -1
  249. package/lib/typescript/types/bip39.d.ts +32 -0
  250. package/lib/typescript/ui/components/BottomSheetRouter.d.ts +5 -0
  251. package/lib/typescript/ui/components/BottomSheetRouter.d.ts.map +1 -1
  252. package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
  253. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  254. package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts +2 -2
  255. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
  256. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
  257. package/lib/typescript/ui/components/TextField/helpers.d.ts +8 -8
  258. package/lib/typescript/ui/components/TextField/types.d.ts +1 -0
  259. package/lib/typescript/ui/components/TextField/types.d.ts.map +1 -1
  260. package/lib/typescript/ui/components/types.d.ts +4 -0
  261. package/lib/typescript/ui/components/types.d.ts.map +1 -1
  262. package/lib/typescript/ui/context/OxyContext.d.ts +57 -3
  263. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  264. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -3
  265. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  266. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +41 -0
  267. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -0
  268. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  269. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  270. package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  271. package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -1
  272. package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
  273. package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -2
  274. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  275. package/lib/typescript/ui/hooks/useStorage.d.ts +3 -9
  276. package/lib/typescript/ui/hooks/useStorage.d.ts.map +1 -1
  277. package/lib/typescript/ui/index.d.ts +6 -2
  278. package/lib/typescript/ui/index.d.ts.map +1 -1
  279. package/lib/typescript/ui/navigation/routes.d.ts +1 -1
  280. package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
  281. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  282. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts +1 -1
  283. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  284. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  285. package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -1
  286. package/lib/typescript/ui/stores/authStore.d.ts +8 -7
  287. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  288. package/lib/typescript/ui/styles/spacing.d.ts +5 -0
  289. package/lib/typescript/ui/styles/spacing.d.ts.map +1 -1
  290. package/lib/typescript/ui/types/navigation.d.ts +2 -1
  291. package/lib/typescript/ui/types/navigation.d.ts.map +1 -1
  292. package/lib/typescript/ui/utils/avatarUtils.d.ts +2 -13
  293. package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
  294. package/lib/typescript/ui/utils/storageHelpers.d.ts +0 -3
  295. package/lib/typescript/ui/utils/storageHelpers.d.ts.map +1 -1
  296. package/lib/typescript/utils/errorUtils.d.ts +6 -0
  297. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  298. package/lib/typescript/utils/validationUtils.d.ts +8 -0
  299. package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
  300. package/package.json +8 -7
  301. package/src/core/CrossDomainAuth.ts +307 -0
  302. package/src/core/HttpService.ts +99 -16
  303. package/src/core/OxyServices.base.ts +20 -3
  304. package/src/core/OxyServices.ts +7 -3
  305. package/src/core/index.ts +9 -1
  306. package/src/core/mixins/OxyServices.assets.ts +14 -3
  307. package/src/core/mixins/OxyServices.auth.ts +105 -36
  308. package/src/core/mixins/OxyServices.fedcm.ts +315 -0
  309. package/src/core/mixins/OxyServices.popup.ts +402 -0
  310. package/src/core/mixins/OxyServices.redirect.ts +397 -0
  311. package/src/core/mixins/OxyServices.user.ts +39 -24
  312. package/src/core/mixins/index.ts +19 -3
  313. package/src/crypto/index.ts +16 -5
  314. package/src/crypto/keyManager.ts +966 -0
  315. package/src/crypto/polyfill.ts +6 -5
  316. package/src/crypto/recoveryPhrase.ts +166 -0
  317. package/src/crypto/signatureService.ts +323 -0
  318. package/src/i18n/locales/en-US.json +1 -1
  319. package/src/index.ts +19 -15
  320. package/src/models/interfaces.ts +4 -16
  321. package/src/models/session.ts +2 -11
  322. package/src/types/bip39.d.ts +32 -0
  323. package/src/ui/components/BottomSheetRouter.tsx +6 -1
  324. package/src/ui/components/Icon.tsx +1 -1
  325. package/src/ui/components/IconButton/utils.ts +1 -1
  326. package/src/ui/components/OxyProvider.tsx +44 -12
  327. package/src/ui/components/TextField/Addons/Outline.tsx +2 -2
  328. package/src/ui/components/TextField/Adornment/utils.ts +2 -2
  329. package/src/ui/components/TextField/helpers.tsx +10 -10
  330. package/src/ui/components/TextField/types.tsx +1 -1
  331. package/src/ui/components/TouchableRipple/utils.ts +2 -2
  332. package/src/ui/components/Typography/AnimatedText.tsx +2 -2
  333. package/src/ui/components/types.tsx +6 -0
  334. package/src/ui/context/OxyContext.tsx +173 -195
  335. package/src/ui/context/hooks/useAuthOperations.ts +177 -36
  336. package/src/ui/context/hooks/useSessionManagement.ts +399 -0
  337. package/src/ui/hooks/mutations/useAccountMutations.ts +83 -76
  338. package/src/ui/hooks/queries/useAccountQueries.ts +29 -35
  339. package/src/ui/hooks/queries/useSecurityQueries.ts +1 -1
  340. package/src/ui/hooks/queries/useServicesQueries.ts +14 -6
  341. package/src/ui/hooks/useProfileEditing.ts +3 -3
  342. package/src/ui/hooks/useSessionManagement.ts +5 -10
  343. package/src/ui/hooks/useSessionSocket.ts +46 -175
  344. package/src/ui/hooks/useStorage.ts +24 -76
  345. package/src/ui/index.ts +22 -13
  346. package/src/ui/navigation/routes.ts +6 -2
  347. package/src/ui/screens/AccountCenterScreen.tsx +2 -2
  348. package/src/ui/screens/AccountOverviewScreen.tsx +1 -1
  349. package/src/ui/screens/AccountSettingsScreen.tsx +34 -37
  350. package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
  351. package/src/ui/screens/OxyAuthScreen.tsx +138 -64
  352. package/src/ui/screens/PrivacySettingsScreen.tsx +6 -12
  353. package/src/ui/stores/accountStore.ts +1 -11
  354. package/src/ui/stores/authStore.ts +43 -44
  355. package/src/ui/styles/spacing.ts +15 -2
  356. package/src/ui/types/navigation.ts +2 -2
  357. package/src/ui/utils/avatarUtils.ts +39 -46
  358. package/src/ui/utils/storageHelpers.ts +0 -4
  359. package/src/utils/__tests__/validationUtils.test.ts +16 -1
  360. package/src/utils/errorUtils.ts +8 -1
  361. package/src/utils/validationUtils.ts +12 -0
  362. package/lib/commonjs/core/services/SessionService.js +0 -163
  363. package/lib/commonjs/core/services/SessionService.js.map +0 -1
  364. package/lib/commonjs/core/services/TokenService.js +0 -220
  365. package/lib/commonjs/core/services/TokenService.js.map +0 -1
  366. package/lib/commonjs/crypto/types.js +0 -2
  367. package/lib/commonjs/crypto/types.js.map +0 -1
  368. package/lib/commonjs/ui/context/OxyContextBase.js +0 -21
  369. package/lib/commonjs/ui/context/OxyContextBase.js.map +0 -1
  370. package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
  371. package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
  372. package/lib/commonjs/ui/hooks/useAvatarPicker.js +0 -56
  373. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +0 -1
  374. package/lib/module/core/services/SessionService.js +0 -159
  375. package/lib/module/core/services/SessionService.js.map +0 -1
  376. package/lib/module/core/services/TokenService.js +0 -217
  377. package/lib/module/core/services/TokenService.js.map +0 -1
  378. package/lib/module/crypto/types.js +0 -2
  379. package/lib/module/crypto/types.js.map +0 -1
  380. package/lib/module/ui/context/OxyContextBase.js +0 -16
  381. package/lib/module/ui/context/OxyContextBase.js.map +0 -1
  382. package/lib/module/ui/context/hooks/useStorage.js +0 -74
  383. package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
  384. package/lib/module/ui/hooks/useAvatarPicker.js +0 -50
  385. package/lib/module/ui/hooks/useAvatarPicker.js.map +0 -1
  386. package/lib/typescript/core/services/SessionService.d.ts +0 -78
  387. package/lib/typescript/core/services/SessionService.d.ts.map +0 -1
  388. package/lib/typescript/core/services/TokenService.d.ts +0 -72
  389. package/lib/typescript/core/services/TokenService.d.ts.map +0 -1
  390. package/lib/typescript/crypto/types.d.ts +0 -22
  391. package/lib/typescript/crypto/types.d.ts.map +0 -1
  392. package/lib/typescript/ui/context/OxyContextBase.d.ts +0 -63
  393. package/lib/typescript/ui/context/OxyContextBase.d.ts.map +0 -1
  394. package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
  395. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
  396. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts +0 -19
  397. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts.map +0 -1
  398. package/src/core/services/SessionService.ts +0 -173
  399. package/src/core/services/TokenService.ts +0 -237
  400. package/src/crypto/types.ts +0 -23
  401. package/src/ui/context/OxyContextBase.tsx +0 -78
  402. package/src/ui/context/hooks/useStorage.ts +0 -104
  403. package/src/ui/hooks/useAvatarPicker.ts +0 -61
@@ -1,45 +1,91 @@
1
1
  import type React from 'react';
2
2
  import {
3
+ createContext,
3
4
  useCallback,
5
+ useContext,
4
6
  useEffect,
5
7
  useMemo,
6
8
  useRef,
7
9
  useState,
10
+ type ReactNode,
8
11
  } from 'react';
9
- import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
10
- import { toast } from '../../lib/sonner';
11
12
  import { OxyServices } from '../../core';
12
- import type { User } from '../../models/interfaces';
13
+ import type { User, ApiError } from '../../models/interfaces';
13
14
  import type { ClientSession } from '../../models/session';
14
- import { logger as appLogger } from '../../utils/loggerUtils';
15
- import { useAuthOperations } from './hooks/useAuthOperations';
16
- import { useAvatarPicker } from '../hooks/useAvatarPicker';
15
+ import { toast } from '../../lib/sonner';
16
+ import { useAuthStore, type AuthState } from '../stores/authStore';
17
+ import { useShallow } from 'zustand/react/shallow';
17
18
  import { useSessionSocket } from '../hooks/useSessionSocket';
18
19
  import type { UseFollowHook } from '../hooks/useFollow.types';
19
- import { useDeviceManagement } from '../hooks/useDeviceManagement';
20
20
  import { useLanguageManagement } from '../hooks/useLanguageManagement';
21
21
  import { useSessionManagement } from '../hooks/useSessionManagement';
22
- import { useStorage } from '../hooks/useStorage';
23
- import { useAccountStore } from '../stores/accountStore';
24
- import { useAuthStore, type AuthState } from '../stores/authStore';
25
- import { queryKeys } from '../hooks/queries/queryKeys';
26
- import { clearQueryCache } from '../hooks/queryClient';
22
+ import { useAuthOperations } from './hooks/useAuthOperations';
23
+ import { useDeviceManagement } from '../hooks/useDeviceManagement';
24
+ import { getStorageKeys, createPlatformStorage, type StorageInterface } from '../utils/storageHelpers';
25
+ import { isInvalidSessionError, isTimeoutOrNetworkError } from '../utils/errorHandlers';
27
26
  import type { RouteName } from '../navigation/routes';
28
27
  import { showBottomSheet as globalShowBottomSheet } from '../navigation/bottomSheetManager';
29
- import { getStorageKeys } from '../utils/storageHelpers';
30
- import { isInvalidSessionError, isTimeoutOrNetworkError } from '../utils/errorHandlers';
31
- import { refreshAccountInStore } from '../utils/avatarUtils';
32
- import { useShallow } from 'zustand/react/shallow';
33
-
34
- import {
35
- OxyContext,
36
- useOxy,
37
- type OxyContextState,
38
- type OxyContextProviderProps,
39
- } from './OxyContextBase';
40
-
41
- export { OxyContext, useOxy };
42
- export type { OxyContextState, OxyContextProviderProps };
28
+ import { useQueryClient } from '@tanstack/react-query';
29
+ import { clearQueryCache } from '../hooks/queryClient';
30
+ import { translate } from '../../i18n';
31
+ import { updateAvatarVisibility, updateProfileWithAvatar } from '../utils/avatarUtils';
32
+ import { useAccountStore } from '../stores/accountStore';
33
+ import { logger as loggerUtil } from '../../utils/loggerUtils';
34
+
35
+ export interface OxyContextState {
36
+ user: User | null;
37
+ sessions: ClientSession[];
38
+ activeSessionId: string | null;
39
+ isAuthenticated: boolean;
40
+ isLoading: boolean;
41
+ isTokenReady: boolean;
42
+ error: string | null;
43
+ currentLanguage: string;
44
+ currentLanguageMetadata: ReturnType<typeof useLanguageManagement>['metadata'];
45
+ currentLanguageName: string;
46
+ currentNativeLanguageName: string;
47
+
48
+ // Authentication
49
+ signIn: (publicKey: string, deviceName?: string) => Promise<User>;
50
+
51
+ // Session management
52
+ logout: (targetSessionId?: string) => Promise<void>;
53
+ logoutAll: () => Promise<void>;
54
+ switchSession: (sessionId: string) => Promise<void>;
55
+ removeSession: (sessionId: string) => Promise<void>;
56
+ refreshSessions: () => Promise<void>;
57
+ setLanguage: (languageId: string) => Promise<void>;
58
+ getDeviceSessions: () => Promise<
59
+ Array<{
60
+ sessionId: string;
61
+ deviceId: string;
62
+ deviceName?: string;
63
+ lastActive?: string;
64
+ expiresAt?: string;
65
+ }>
66
+ >;
67
+ logoutAllDeviceSessions: () => Promise<void>;
68
+ updateDeviceName: (deviceName: string) => Promise<void>;
69
+ clearSessionState: () => Promise<void>;
70
+ clearAllAccountData: () => Promise<void>;
71
+ oxyServices: OxyServices;
72
+ useFollow?: UseFollowHook;
73
+ showBottomSheet?: (screenOrConfig: RouteName | { screen: RouteName; props?: Record<string, unknown> }) => void;
74
+ openAvatarPicker: () => void;
75
+ }
76
+
77
+ const OxyContext = createContext<OxyContextState | null>(null);
78
+
79
+ export interface OxyContextProviderProps {
80
+ children: ReactNode;
81
+ oxyServices?: OxyServices;
82
+ baseURL?: string;
83
+ authWebUrl?: string;
84
+ authRedirectUri?: string;
85
+ storageKeyPrefix?: string;
86
+ onAuthStateChange?: (user: User | null) => void;
87
+ onError?: (error: ApiError) => void;
88
+ }
43
89
 
44
90
  let cachedUseFollowHook: UseFollowHook | null = null;
45
91
 
@@ -55,7 +101,7 @@ const loadUseFollowHook = (): UseFollowHook => {
55
101
  return cachedUseFollowHook;
56
102
  } catch (error) {
57
103
  if (__DEV__) {
58
- appLogger.warn(
104
+ loggerUtil.warn(
59
105
  'useFollow hook is not available. Please import useFollow from @oxyhq/services directly.',
60
106
  { component: 'OxyContext', method: 'loadUseFollowHook' },
61
107
  error
@@ -75,6 +121,8 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
75
121
  children,
76
122
  oxyServices: providedOxyServices,
77
123
  baseURL,
124
+ authWebUrl,
125
+ authRedirectUri,
78
126
  storageKeyPrefix = 'oxy_session',
79
127
  onAuthStateChange,
80
128
  onError,
@@ -85,7 +133,11 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
85
133
  if (providedOxyServices) {
86
134
  oxyServicesRef.current = providedOxyServices;
87
135
  } else if (baseURL) {
88
- oxyServicesRef.current = new OxyServices({ baseURL });
136
+ oxyServicesRef.current = new OxyServices({
137
+ baseURL,
138
+ authWebUrl,
139
+ authRedirectUri,
140
+ });
89
141
  } else {
90
142
  throw new Error('Either oxyServices or baseURL must be provided to OxyContextProvider');
91
143
  }
@@ -94,21 +146,19 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
94
146
  const oxyServices = oxyServicesRef.current;
95
147
 
96
148
  const {
149
+ user,
97
150
  isAuthenticated,
98
- isOnline,
99
151
  isLoading,
100
152
  error,
101
- setOnline,
102
153
  loginSuccess,
103
154
  loginFailure,
104
155
  logoutStore,
105
156
  } = useAuthStore(
106
157
  useShallow((state: AuthState) => ({
158
+ user: state.user,
107
159
  isAuthenticated: state.isAuthenticated,
108
- isOnline: state.isOnline,
109
160
  isLoading: state.isLoading,
110
161
  error: state.error,
111
- setOnline: state.setOnline,
112
162
  loginSuccess: state.loginSuccess,
113
163
  loginFailure: state.loginFailure,
114
164
  logoutStore: state.logout,
@@ -121,17 +171,44 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
121
171
 
122
172
  const logger = useCallback((message: string, err?: unknown) => {
123
173
  if (__DEV__) {
124
- if (err !== undefined) {
125
- console.warn(`[OxyContext] ${message}`, err);
126
- } else {
127
- console.warn(`[OxyContext] ${message}`);
128
- }
174
+ console.warn(`[OxyContext] ${message}`, err);
129
175
  }
130
176
  }, []);
131
177
 
132
178
  const storageKeys = useMemo(() => getStorageKeys(storageKeyPrefix), [storageKeyPrefix]);
133
179
 
134
- const { storage, isReady: isStorageReady } = useStorage({ onError, logger });
180
+ // Simple storage initialization - no complex hook needed
181
+ const storageRef = useRef<StorageInterface | null>(null);
182
+ const [storage, setStorage] = useState<StorageInterface | null>(null);
183
+
184
+ useEffect(() => {
185
+ let mounted = true;
186
+ createPlatformStorage()
187
+ .then((storageInstance) => {
188
+ if (mounted) {
189
+ storageRef.current = storageInstance;
190
+ setStorage(storageInstance);
191
+ }
192
+ })
193
+ .catch((err) => {
194
+ if (mounted) {
195
+ logger('Failed to initialize storage', err);
196
+ onError?.({
197
+ message: 'Failed to initialize storage',
198
+ code: 'STORAGE_INIT_ERROR',
199
+ status: 500,
200
+ });
201
+ }
202
+ });
203
+
204
+ return () => {
205
+ mounted = false;
206
+ };
207
+ }, [logger, onError]);
208
+
209
+
210
+ // Offline queuing is now handled by TanStack Query mutations
211
+ // No need for custom offline queue
135
212
 
136
213
  const {
137
214
  currentLanguage,
@@ -174,86 +251,8 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
174
251
  queryClient,
175
252
  });
176
253
 
177
- const { data: userData } = useQuery({
178
- queryKey: queryKeys.accounts.current(),
179
- queryFn: async () => {
180
- appLogger.debug('Fetching current user', {
181
- component: 'OxyContext',
182
- sessionId: activeSessionId ?? undefined
183
- });
184
- if (!activeSessionId) {
185
- throw new Error('No active session');
186
- }
187
- const data = await oxyServices.getUserBySession(activeSessionId);
188
- appLogger.debug('Current user fetched', {
189
- component: 'OxyContext',
190
- username: data.username
191
- });
192
- return data;
193
- },
194
- enabled: isAuthenticated && !!activeSessionId && tokenReady,
195
- staleTime: 30000, // 30 seconds - reduces unnecessary refetches
196
- gcTime: 5 * 60 * 1000, // 5 minutes - keeps data in cache longer
197
- retry: false,
198
- refetchOnMount: 'always',
199
- refetchOnWindowFocus: false,
200
- });
201
- const user = userData ?? null;
202
-
203
- // Profile update mutation - defined inline to avoid circular dependency with useOxy()
204
- const updateProfileMutation = useMutation({
205
- mutationFn: async (updates: Partial<User>) => {
206
- appLogger.debug('Updating profile', { component: 'OxyContext', updates });
207
- return await oxyServices.updateProfile(updates);
208
- },
209
- onSuccess: async (data, updates) => {
210
- appLogger.debug('Profile update successful', {
211
- component: 'OxyContext',
212
- username: data.username,
213
- updatedFields: Object.keys(updates)
214
- });
215
-
216
- // Update cache with server response
217
- queryClient.setQueryData(queryKeys.accounts.current(), data);
218
- if (activeSessionId) {
219
- queryClient.setQueryData(queryKeys.users.profile(activeSessionId), data);
220
- }
221
-
222
- // Refresh accountStore with all updated profile data (synchronizes immediately)
223
- if (activeSessionId && oxyServices) {
224
- refreshAccountInStore(activeSessionId, data, oxyServices);
225
- }
226
-
227
- // Force refetch of all active queries to ensure UI updates immediately
228
- // Using refetchQueries instead of invalidateQueries to bypass staleTime
229
- await Promise.all([
230
- queryClient.refetchQueries({
231
- queryKey: queryKeys.accounts.all,
232
- type: 'active'
233
- }),
234
- queryClient.refetchQueries({
235
- queryKey: queryKeys.users.all,
236
- type: 'active'
237
- })
238
- ]);
239
-
240
- appLogger.debug('Profile update complete', { component: 'OxyContext' });
241
- },
242
- onError: (error) => {
243
- appLogger.error('Profile update failed', error, { component: 'OxyContext' });
244
- toast.error(error instanceof Error ? error.message : 'Failed to update profile');
245
- },
246
- });
247
-
248
- const updateProfile = useCallback(
249
- async (updates: Partial<User>): Promise<User> => {
250
- return await updateProfileMutation.mutateAsync(updates);
251
- },
252
- [updateProfileMutation]
253
- );
254
-
255
254
  const {
256
- completeSignIn,
255
+ signIn,
257
256
  logout,
258
257
  logoutAll,
259
258
  } = useAuthOperations({
@@ -276,9 +275,12 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
276
275
  logger,
277
276
  });
278
277
 
278
+ // Clear all account data (sessions, cache, etc.)
279
279
  const clearAllAccountData = useCallback(async (): Promise<void> => {
280
+ // Clear TanStack Query cache (in-memory)
280
281
  queryClient.clear();
281
282
 
283
+ // Clear persisted query cache
282
284
  if (storage) {
283
285
  try {
284
286
  await clearQueryCache(storage);
@@ -287,68 +289,16 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
287
289
  }
288
290
  }
289
291
 
292
+ // Clear session state (sessions, activeSessionId, storage)
290
293
  await clearSessionState();
291
294
 
295
+ // Reset account store
292
296
  useAccountStore.getState().reset();
293
297
 
298
+ // Clear HTTP service cache
294
299
  oxyServices.clearCache();
295
300
  }, [queryClient, storage, clearSessionState, logger, oxyServices]);
296
301
 
297
- useEffect(() => {
298
- if (!storage) return;
299
-
300
- let wasOffline = false;
301
- let checkTimeout: NodeJS.Timeout | null = null;
302
-
303
- const scheduleNextCheck = () => {
304
- if (checkTimeout) {
305
- clearTimeout(checkTimeout);
306
- }
307
- checkTimeout = setTimeout(() => {
308
- checkNetworkStatus();
309
- }, 30000); // Check every 30 seconds
310
- };
311
-
312
- const checkNetworkStatus = async () => {
313
- try {
314
- // Try a lightweight health check to see if we're online
315
- await oxyServices.healthCheck();
316
-
317
- // If we were offline and now we're online
318
- if (wasOffline) {
319
- logger('Network reconnected - setting online state');
320
- setOnline(true);
321
- // TanStack Query will automatically retry pending mutations
322
- // Session management will handle token refresh if needed
323
- wasOffline = false;
324
- } else {
325
- // We're online and were already online
326
- setOnline(true);
327
- }
328
- } catch (error) {
329
- // Network check failed - we're offline
330
- if (!wasOffline) {
331
- if (__DEV__) {
332
- logger('Network appears offline - suspending authentication');
333
- }
334
- setOnline(false); // This will set isAuthenticated to false
335
- }
336
- wasOffline = true;
337
- } finally {
338
- scheduleNextCheck();
339
- }
340
- };
341
-
342
- // Check immediately
343
- checkNetworkStatus();
344
-
345
- return () => {
346
- if (checkTimeout) {
347
- clearTimeout(checkTimeout);
348
- }
349
- };
350
- }, [oxyServices, storage, logger, setOnline]);
351
-
352
302
  const { getDeviceSessions, logoutAllDeviceSessions, updateDeviceName } = useDeviceManagement({
353
303
  oxyServices,
354
304
  activeSessionId,
@@ -395,7 +345,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
395
345
  logger('Session validation failed during init', validationError);
396
346
  } else if (__DEV__ && isTimeoutOrNetworkError(validationError)) {
397
347
  // Only log timeouts in dev mode for debugging
398
- appLogger.debug('Session validation timeout (expected when offline)', { component: 'OxyContext', method: 'restoreSessionsFromStorage' }, validationError as unknown);
348
+ loggerUtil.debug('Session validation timeout (expected when offline)', { component: 'OxyContext', method: 'restoreSessionsFromStorage' }, validationError as unknown);
399
349
  }
400
350
  }
401
351
  }
@@ -420,7 +370,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
420
370
  } else if (isTimeoutOrNetworkError(switchError)) {
421
371
  // Timeout/network error - non-critical, don't block
422
372
  if (__DEV__) {
423
- appLogger.debug('Active session validation timeout (expected when offline)', { component: 'OxyContext', method: 'restoreSessionsFromStorage' }, switchError as unknown);
373
+ loggerUtil.debug('Active session validation timeout (expected when offline)', { component: 'OxyContext', method: 'restoreSessionsFromStorage' }, switchError as unknown);
424
374
  }
425
375
  } else {
426
376
  // Only log unexpected errors
@@ -430,7 +380,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
430
380
  }
431
381
  } catch (error) {
432
382
  if (__DEV__) {
433
- appLogger.error('Auth init error', error, { component: 'OxyContext', method: 'restoreSessionsFromStorage' });
383
+ loggerUtil.error('Auth init error', error instanceof Error ? error : new Error(String(error)), { component: 'OxyContext', method: 'restoreSessionsFromStorage' });
434
384
  }
435
385
  await clearSessionState();
436
386
  } finally {
@@ -461,11 +411,10 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
461
411
  : undefined;
462
412
  const currentDeviceId = activeSession?.deviceId ?? null;
463
413
 
464
- // Get userId from JWT token (MongoDB ObjectId) for socket room matching
465
- const userId = oxyServices.getCurrentUserId();
414
+ const userId = user?.id;
466
415
 
467
416
  const refreshSessionsWithUser = useCallback(
468
- () => refreshSessions(userId || undefined),
417
+ () => refreshSessions(userId),
469
418
  [refreshSessions, userId],
470
419
  );
471
420
 
@@ -489,7 +438,6 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
489
438
  logout,
490
439
  clearSessionState,
491
440
  baseURL: oxyServices.getBaseURL(),
492
- getAccessToken: () => oxyServices.getAccessToken(),
493
441
  onRemoteSignOut: handleRemoteSignOut,
494
442
  onSessionRemoved: handleSessionRemoved,
495
443
  });
@@ -508,30 +456,55 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
508
456
  },
509
457
  [],
510
458
  );
511
- const { openAvatarPicker } = useAvatarPicker({
512
- oxyServices,
513
- currentLanguage,
514
- activeSessionId,
515
- currentDeviceId,
516
- queryClient,
517
- showBottomSheet: showBottomSheetForContext,
518
- });
459
+
460
+ // Create openAvatarPicker function
461
+ const openAvatarPicker = useCallback(() => {
462
+ showBottomSheetForContext({
463
+ screen: 'FileManagement' as RouteName,
464
+ props: {
465
+ selectMode: true,
466
+ multiSelect: false,
467
+ disabledMimeTypes: ['video/', 'audio/', 'application/pdf'],
468
+ afterSelect: 'none', // Don't navigate away - stay on current screen
469
+ onSelect: async (file: any) => {
470
+ if (!file.contentType.startsWith('image/')) {
471
+ toast.error(translate(currentLanguage, 'editProfile.toasts.selectImage') || 'Please select an image file');
472
+ return;
473
+ }
474
+ try {
475
+ // Update file visibility to public for avatar
476
+ await updateAvatarVisibility(file.id, oxyServices, 'OxyContext');
477
+
478
+ // Update user profile (handles query invalidation and accountStore update)
479
+ await updateProfileWithAvatar(
480
+ { avatar: file.id },
481
+ oxyServices,
482
+ activeSessionId,
483
+ queryClient
484
+ );
485
+
486
+ toast.success(translate(currentLanguage, 'editProfile.toasts.avatarUpdated') || 'Avatar updated');
487
+ } catch (e: any) {
488
+ toast.error(e.message || translate(currentLanguage, 'editProfile.toasts.updateAvatarFailed') || 'Failed to update avatar');
489
+ }
490
+ },
491
+ },
492
+ });
493
+ }, [oxyServices, currentLanguage, showBottomSheetForContext, activeSessionId, queryClient]);
519
494
 
520
495
  const contextValue: OxyContextState = useMemo(() => ({
521
496
  user,
522
497
  sessions,
523
498
  activeSessionId,
524
- currentDeviceId,
525
499
  isAuthenticated,
526
500
  isLoading,
527
501
  isTokenReady: tokenReady,
528
- isStorageReady,
529
502
  error,
530
503
  currentLanguage,
531
504
  currentLanguageMetadata,
532
505
  currentLanguageName,
533
506
  currentNativeLanguageName,
534
- completeSignIn,
507
+ signIn,
535
508
  logout,
536
509
  logoutAll,
537
510
  switchSession: switchSessionForContext,
@@ -547,11 +520,9 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
547
520
  useFollow: useFollowHook,
548
521
  showBottomSheet: showBottomSheetForContext,
549
522
  openAvatarPicker,
550
- updateProfile,
551
523
  }), [
552
524
  activeSessionId,
553
- currentDeviceId,
554
- completeSignIn,
525
+ signIn,
555
526
  currentLanguage,
556
527
  currentLanguageMetadata,
557
528
  currentLanguageName,
@@ -569,14 +540,12 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
569
540
  setLanguage,
570
541
  switchSessionForContext,
571
542
  tokenReady,
572
- isStorageReady,
573
543
  updateDeviceName,
574
544
  clearAllAccountData,
575
545
  useFollowHook,
576
546
  user,
577
547
  showBottomSheetForContext,
578
548
  openAvatarPicker,
579
- updateProfile,
580
549
  ]);
581
550
 
582
551
  return (
@@ -588,4 +557,13 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
588
557
 
589
558
  export const OxyContextProvider = OxyProvider;
590
559
 
560
+ export const useOxy = (): OxyContextState => {
561
+ const context = useContext(OxyContext);
562
+ if (!context) {
563
+ throw new Error('useOxy must be used within an OxyContextProvider');
564
+ }
565
+ return context;
566
+ };
567
+
591
568
  export default OxyContext;
569
+