@oxyhq/services 5.17.16 → 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 -192
  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 +78 -64
  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 -184
  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 +79 -64
  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 -185
  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 +82 -65
  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, invalidateAccountQueries } 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,76 +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
- // Only invalidate specific queries that need refresh (not everything)
228
- invalidateAccountQueries(queryClient);
229
-
230
- appLogger.debug('Profile update complete', { component: 'OxyContext' });
231
- },
232
- onError: (error) => {
233
- appLogger.error('Profile update failed', error, { component: 'OxyContext' });
234
- toast.error(error instanceof Error ? error.message : 'Failed to update profile');
235
- },
236
- });
237
-
238
- const updateProfile = useCallback(
239
- async (updates: Partial<User>): Promise<User> => {
240
- return await updateProfileMutation.mutateAsync(updates);
241
- },
242
- [updateProfileMutation]
243
- );
244
-
245
254
  const {
246
- completeSignIn,
255
+ signIn,
247
256
  logout,
248
257
  logoutAll,
249
258
  } = useAuthOperations({
@@ -266,9 +275,12 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
266
275
  logger,
267
276
  });
268
277
 
278
+ // Clear all account data (sessions, cache, etc.)
269
279
  const clearAllAccountData = useCallback(async (): Promise<void> => {
280
+ // Clear TanStack Query cache (in-memory)
270
281
  queryClient.clear();
271
282
 
283
+ // Clear persisted query cache
272
284
  if (storage) {
273
285
  try {
274
286
  await clearQueryCache(storage);
@@ -277,68 +289,16 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
277
289
  }
278
290
  }
279
291
 
292
+ // Clear session state (sessions, activeSessionId, storage)
280
293
  await clearSessionState();
281
294
 
295
+ // Reset account store
282
296
  useAccountStore.getState().reset();
283
297
 
298
+ // Clear HTTP service cache
284
299
  oxyServices.clearCache();
285
300
  }, [queryClient, storage, clearSessionState, logger, oxyServices]);
286
301
 
287
- useEffect(() => {
288
- if (!storage) return;
289
-
290
- let wasOffline = false;
291
- let checkTimeout: NodeJS.Timeout | null = null;
292
-
293
- const scheduleNextCheck = () => {
294
- if (checkTimeout) {
295
- clearTimeout(checkTimeout);
296
- }
297
- checkTimeout = setTimeout(() => {
298
- checkNetworkStatus();
299
- }, 30000); // Check every 30 seconds
300
- };
301
-
302
- const checkNetworkStatus = async () => {
303
- try {
304
- // Try a lightweight health check to see if we're online
305
- await oxyServices.healthCheck();
306
-
307
- // If we were offline and now we're online
308
- if (wasOffline) {
309
- logger('Network reconnected - setting online state');
310
- setOnline(true);
311
- // TanStack Query will automatically retry pending mutations
312
- // Session management will handle token refresh if needed
313
- wasOffline = false;
314
- } else {
315
- // We're online and were already online
316
- setOnline(true);
317
- }
318
- } catch (error) {
319
- // Network check failed - we're offline
320
- if (!wasOffline) {
321
- if (__DEV__) {
322
- logger('Network appears offline - suspending authentication');
323
- }
324
- setOnline(false); // This will set isAuthenticated to false
325
- }
326
- wasOffline = true;
327
- } finally {
328
- scheduleNextCheck();
329
- }
330
- };
331
-
332
- // Check immediately
333
- checkNetworkStatus();
334
-
335
- return () => {
336
- if (checkTimeout) {
337
- clearTimeout(checkTimeout);
338
- }
339
- };
340
- }, [oxyServices, storage, logger, setOnline]);
341
-
342
302
  const { getDeviceSessions, logoutAllDeviceSessions, updateDeviceName } = useDeviceManagement({
343
303
  oxyServices,
344
304
  activeSessionId,
@@ -385,7 +345,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
385
345
  logger('Session validation failed during init', validationError);
386
346
  } else if (__DEV__ && isTimeoutOrNetworkError(validationError)) {
387
347
  // Only log timeouts in dev mode for debugging
388
- 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);
389
349
  }
390
350
  }
391
351
  }
@@ -410,7 +370,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
410
370
  } else if (isTimeoutOrNetworkError(switchError)) {
411
371
  // Timeout/network error - non-critical, don't block
412
372
  if (__DEV__) {
413
- 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);
414
374
  }
415
375
  } else {
416
376
  // Only log unexpected errors
@@ -420,7 +380,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
420
380
  }
421
381
  } catch (error) {
422
382
  if (__DEV__) {
423
- 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' });
424
384
  }
425
385
  await clearSessionState();
426
386
  } finally {
@@ -451,11 +411,10 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
451
411
  : undefined;
452
412
  const currentDeviceId = activeSession?.deviceId ?? null;
453
413
 
454
- // Get userId from JWT token (MongoDB ObjectId) for socket room matching
455
- const userId = oxyServices.getCurrentUserId();
414
+ const userId = user?.id;
456
415
 
457
416
  const refreshSessionsWithUser = useCallback(
458
- () => refreshSessions(userId || undefined),
417
+ () => refreshSessions(userId),
459
418
  [refreshSessions, userId],
460
419
  );
461
420
 
@@ -479,7 +438,6 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
479
438
  logout,
480
439
  clearSessionState,
481
440
  baseURL: oxyServices.getBaseURL(),
482
- getAccessToken: () => oxyServices.getAccessToken(),
483
441
  onRemoteSignOut: handleRemoteSignOut,
484
442
  onSessionRemoved: handleSessionRemoved,
485
443
  });
@@ -498,30 +456,55 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
498
456
  },
499
457
  [],
500
458
  );
501
- const { openAvatarPicker } = useAvatarPicker({
502
- oxyServices,
503
- currentLanguage,
504
- activeSessionId,
505
- currentDeviceId,
506
- queryClient,
507
- showBottomSheet: showBottomSheetForContext,
508
- });
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]);
509
494
 
510
495
  const contextValue: OxyContextState = useMemo(() => ({
511
496
  user,
512
497
  sessions,
513
498
  activeSessionId,
514
- currentDeviceId,
515
499
  isAuthenticated,
516
500
  isLoading,
517
501
  isTokenReady: tokenReady,
518
- isStorageReady,
519
502
  error,
520
503
  currentLanguage,
521
504
  currentLanguageMetadata,
522
505
  currentLanguageName,
523
506
  currentNativeLanguageName,
524
- completeSignIn,
507
+ signIn,
525
508
  logout,
526
509
  logoutAll,
527
510
  switchSession: switchSessionForContext,
@@ -537,11 +520,9 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
537
520
  useFollow: useFollowHook,
538
521
  showBottomSheet: showBottomSheetForContext,
539
522
  openAvatarPicker,
540
- updateProfile,
541
523
  }), [
542
524
  activeSessionId,
543
- currentDeviceId,
544
- completeSignIn,
525
+ signIn,
545
526
  currentLanguage,
546
527
  currentLanguageMetadata,
547
528
  currentLanguageName,
@@ -559,14 +540,12 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
559
540
  setLanguage,
560
541
  switchSessionForContext,
561
542
  tokenReady,
562
- isStorageReady,
563
543
  updateDeviceName,
564
544
  clearAllAccountData,
565
545
  useFollowHook,
566
546
  user,
567
547
  showBottomSheetForContext,
568
548
  openAvatarPicker,
569
- updateProfile,
570
549
  ]);
571
550
 
572
551
  return (
@@ -578,4 +557,13 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
578
557
 
579
558
  export const OxyContextProvider = OxyProvider;
580
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
+
581
568
  export default OxyContext;
569
+