@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,237 +0,0 @@
1
- /**
2
- * TokenService - Single Source of Truth for Token Management
3
- *
4
- * Handles all token storage, retrieval, refresh, and validation.
5
- * Used by HttpService, SocketService, and other services that need tokens.
6
- *
7
- * Architecture:
8
- * - Single storage location (no duplication)
9
- * - Automatic token refresh when expiring soon
10
- * - Type-safe token payload handling
11
- * - userId is always MongoDB ObjectId, never publicKey
12
- */
13
-
14
- import { jwtDecode } from 'jwt-decode';
15
-
16
- /**
17
- * AccessTokenPayload - Matches the token payload structure from API
18
- * userId is always MongoDB ObjectId (24 hex characters), never publicKey
19
- */
20
- interface AccessTokenPayload {
21
- userId: string; // MongoDB ObjectId - PRIMARY IDENTIFIER
22
- sessionId: string; // Session UUID
23
- deviceId: string; // Device identifier
24
- type: 'access';
25
- iat?: number; // Issued at (added by JWT)
26
- exp?: number; // Expiration (added by JWT)
27
- }
28
-
29
- interface TokenStore {
30
- accessToken: string | null;
31
- refreshToken: string | null;
32
- }
33
-
34
- /**
35
- * TokenService - Singleton pattern for global token management
36
- */
37
- class TokenService {
38
- private static instance: TokenService;
39
- private tokenStore: TokenStore = {
40
- accessToken: null,
41
- refreshToken: null,
42
- };
43
- private refreshPromise: Promise<void> | null = null;
44
- private baseURL: string | null = null;
45
-
46
- private constructor() {}
47
-
48
- static getInstance(): TokenService {
49
- if (!TokenService.instance) {
50
- TokenService.instance = new TokenService();
51
- }
52
- return TokenService.instance;
53
- }
54
-
55
- /**
56
- * Initialize TokenService with base URL for refresh requests
57
- */
58
- initialize(baseURL: string): void {
59
- this.baseURL = baseURL;
60
- }
61
-
62
- /**
63
- * Get current access token
64
- */
65
- getAccessToken(): string | null {
66
- return this.tokenStore.accessToken;
67
- }
68
-
69
- /**
70
- * Get current refresh token
71
- */
72
- getRefreshToken(): string | null {
73
- return this.tokenStore.refreshToken;
74
- }
75
-
76
- /**
77
- * Set tokens (called after login or token refresh)
78
- */
79
- setTokens(accessToken: string, refreshToken: string = ''): void {
80
- this.tokenStore.accessToken = accessToken;
81
- this.tokenStore.refreshToken = refreshToken || this.tokenStore.refreshToken;
82
- }
83
-
84
- /**
85
- * Clear all tokens (called on logout)
86
- */
87
- clearTokens(): void {
88
- this.tokenStore.accessToken = null;
89
- this.tokenStore.refreshToken = null;
90
- this.refreshPromise = null;
91
- }
92
-
93
- /**
94
- * Check if access token exists
95
- */
96
- hasAccessToken(): boolean {
97
- return !!this.tokenStore.accessToken;
98
- }
99
-
100
- /**
101
- * Check if token is expiring soon (within 60 seconds)
102
- */
103
- isTokenExpiringSoon(): boolean {
104
- const token = this.tokenStore.accessToken;
105
- if (!token) return false;
106
-
107
- try {
108
- const decoded = jwtDecode<AccessTokenPayload>(token);
109
- if (!decoded.exp) return false;
110
-
111
- const currentTime = Math.floor(Date.now() / 1000);
112
- return decoded.exp - currentTime < 60; // Expiring within 60 seconds
113
- } catch {
114
- return false;
115
- }
116
- }
117
-
118
- /**
119
- * Get userId from current access token
120
- * Returns MongoDB ObjectId (never publicKey)
121
- */
122
- getUserIdFromToken(): string | null {
123
- const token = this.tokenStore.accessToken;
124
- if (!token) return null;
125
-
126
- try {
127
- const decoded = jwtDecode<AccessTokenPayload>(token);
128
- return decoded.userId || null;
129
- } catch {
130
- return null;
131
- }
132
- }
133
-
134
- /**
135
- * Refresh access token if expiring soon
136
- * Returns promise that resolves when token is refreshed (or already valid)
137
- */
138
- async refreshTokenIfNeeded(): Promise<void> {
139
- // If already refreshing, wait for that promise
140
- if (this.refreshPromise) {
141
- return this.refreshPromise;
142
- }
143
-
144
- const hasToken = !!this.tokenStore.accessToken;
145
- const needsRefresh = this.isTokenExpiringSoon();
146
-
147
- // If no access token but we have refresh token, attempt refresh once
148
- if (!hasToken && this.tokenStore.refreshToken) {
149
- this.refreshPromise = this._performRefresh();
150
- try {
151
- await this.refreshPromise;
152
- } finally {
153
- this.refreshPromise = null;
154
- }
155
- return;
156
- }
157
-
158
- // If token not expiring soon, no refresh needed
159
- if (!needsRefresh) {
160
- return;
161
- }
162
-
163
- // Start refresh
164
- this.refreshPromise = this._performRefresh();
165
-
166
- try {
167
- await this.refreshPromise;
168
- } finally {
169
- this.refreshPromise = null;
170
- }
171
- }
172
-
173
- /**
174
- * Perform token refresh
175
- */
176
- private async _performRefresh(): Promise<void> {
177
- const refreshToken = this.tokenStore.refreshToken;
178
- if (!refreshToken) {
179
- throw new Error('No refresh token to refresh');
180
- }
181
-
182
- try {
183
- if (!this.baseURL) {
184
- throw new Error('TokenService not initialized with baseURL');
185
- }
186
-
187
- const refreshUrl = `${this.baseURL}/api/auth/refresh`;
188
- const response = await fetch(refreshUrl, {
189
- method: 'POST',
190
- headers: {
191
- 'Accept': 'application/json',
192
- 'Content-Type': 'application/json',
193
- },
194
- body: JSON.stringify({ refreshToken }),
195
- signal: AbortSignal.timeout(5000),
196
- });
197
-
198
- if (!response.ok) {
199
- throw new Error(`Token refresh failed: ${response.status}`);
200
- }
201
-
202
- const { accessToken: newToken, refreshToken: newRefresh } = await response.json();
203
-
204
- if (!newToken) {
205
- throw new Error('No access token in refresh response');
206
- }
207
-
208
- // Validate new token has correct userId format (ObjectId)
209
- const newDecoded = jwtDecode<AccessTokenPayload>(newToken);
210
- if (newDecoded.userId && !/^[0-9a-fA-F]{24}$/.test(newDecoded.userId)) {
211
- throw new Error(`Invalid userId format in refreshed token: ${newDecoded.userId.substring(0, 20)}...`);
212
- }
213
-
214
- this.setTokens(newToken, newRefresh || refreshToken);
215
- } catch (error) {
216
- // Clear tokens on refresh failure (likely expired or invalid)
217
- this.clearTokens();
218
- throw error;
219
- }
220
- }
221
-
222
- /**
223
- * Get authorization header with automatic refresh
224
- */
225
- async getAuthHeader(): Promise<string | null> {
226
- // Refresh if needed
227
- await this.refreshTokenIfNeeded().catch(() => {
228
- // Ignore refresh errors, will use current token or return null
229
- });
230
-
231
- const token = this.tokenStore.accessToken;
232
- return token ? `Bearer ${token}` : null;
233
- }
234
- }
235
-
236
- // Export singleton instance
237
- export const tokenService = TokenService.getInstance();
@@ -1,23 +0,0 @@
1
- /**
2
- * Cryptographic types for authentication and backup
3
- */
4
-
5
- /**
6
- * Encrypted backup data structure
7
- * Used for identity backup files
8
- */
9
- export interface BackupData {
10
- /** Base64-encoded encrypted private key */
11
- encrypted: string;
12
- /** Hex-encoded salt used for key derivation */
13
- salt: string;
14
- /** Hex-encoded initialization vector */
15
- iv: string;
16
- /** Public key associated with the encrypted private key */
17
- publicKey: string;
18
- /** Encryption algorithm used (optional, for backward compatibility) */
19
- algorithm?: 'xor' | 'aes-256-gcm';
20
- /** Format version (optional, for backward compatibility) */
21
- version?: string;
22
- }
23
-
@@ -1,78 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
- import type { ReactNode } from 'react';
3
- import type { OxyServices } from '../../core';
4
- import type { User, ApiError } from '../../models/interfaces';
5
- import type { ClientSession, SessionLoginResponse } from '../../models/session';
6
- import type { UseFollowHook } from '../hooks/useFollow.types';
7
- import type { useLanguageManagement } from '../hooks/useLanguageManagement';
8
- import type { RouteName } from '../navigation/routes';
9
-
10
- export interface OxyContextState {
11
- user: User | null;
12
- sessions: ClientSession[];
13
- activeSessionId: string | null;
14
- currentDeviceId: string | null;
15
- isAuthenticated: boolean;
16
- isLoading: boolean;
17
- isTokenReady: boolean;
18
- isStorageReady: boolean;
19
- error: string | null;
20
- currentLanguage: string;
21
- currentLanguageMetadata: ReturnType<typeof useLanguageManagement>['metadata'];
22
- currentLanguageName: string;
23
- currentNativeLanguageName: string;
24
-
25
- // Authentication (Services SDK only handles tokens/sessions, NOT identity)
26
- // Identity management (KeyManager, SignatureService, challenge signing) belongs ONLY in Accounts app
27
- // completeSignIn accepts already-verified session data from Accounts app
28
- completeSignIn: (sessionResponse: SessionLoginResponse) => Promise<User>;
29
-
30
- // Session management
31
- logout: (targetSessionId?: string) => Promise<void>;
32
- logoutAll: () => Promise<void>;
33
- switchSession: (sessionId: string) => Promise<void>;
34
- removeSession: (sessionId: string) => Promise<void>;
35
- refreshSessions: () => Promise<void>;
36
- setLanguage: (languageId: string) => Promise<void>;
37
- getDeviceSessions: () => Promise<
38
- Array<{
39
- sessionId: string;
40
- deviceId: string;
41
- deviceName?: string;
42
- lastActive?: string;
43
- expiresAt?: string;
44
- }>
45
- >;
46
- logoutAllDeviceSessions: () => Promise<void>;
47
- updateDeviceName: (deviceName: string) => Promise<void>;
48
- clearSessionState: () => Promise<void>;
49
- clearAllAccountData: () => Promise<void>;
50
- oxyServices: OxyServices;
51
- useFollow?: UseFollowHook;
52
- showBottomSheet?: (screenOrConfig: RouteName | { screen: RouteName; props?: Record<string, unknown> }) => void;
53
- openAvatarPicker: () => void;
54
- updateProfile: (updates: Partial<User>) => Promise<User>;
55
- }
56
-
57
- export const OxyContext = createContext<OxyContextState | null>(null);
58
-
59
- export interface OxyContextProviderProps {
60
- children: ReactNode;
61
- oxyServices?: OxyServices;
62
- baseURL?: string;
63
- storageKeyPrefix?: string;
64
- onAuthStateChange?: (user: User | null) => void;
65
- onError?: (error: ApiError) => void;
66
- }
67
-
68
- /**
69
- * Hook to access the Oxy context.
70
- * Must be used within an OxyContextProvider.
71
- */
72
- export const useOxy = (): OxyContextState => {
73
- const context = useContext(OxyContext);
74
- if (!context) {
75
- throw new Error('useOxy must be used within an OxyContextProvider');
76
- }
77
- return context;
78
- };
@@ -1,104 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
- import type { ApiError } from '../../../models/interfaces';
3
- import { createPlatformStorage, type StorageInterface } from '../../utils/storageHelpers';
4
- import { extractErrorMessage } from '../../utils/errorHandlers';
5
-
6
- export interface UseStorageOptions {
7
- onError?: (error: ApiError) => void;
8
- logger?: (message: string, error?: unknown) => void;
9
- errorCode?: string;
10
- }
11
-
12
- export interface UseStorageResult {
13
- storage: StorageInterface | null;
14
- isReady: boolean;
15
- error: string | null;
16
- refresh: () => Promise<StorageInterface | null>;
17
- withStorage: <T>(callback: (storage: StorageInterface) => Promise<T>) => Promise<T | null>;
18
- }
19
-
20
- const DEFAULT_ERROR_CODE = 'STORAGE_INIT_ERROR';
21
-
22
- /**
23
- * React hook that exposes a platform-agnostic storage reference.
24
- * Handles initialization, error propagation, and lazy re-initialization.
25
- *
26
- * @param options - Optional configuration for error reporting and logging
27
- */
28
- export const useStorage = ({
29
- onError,
30
- logger,
31
- errorCode = DEFAULT_ERROR_CODE,
32
- }: UseStorageOptions = {}): UseStorageResult => {
33
- const [storage, setStorage] = useState<StorageInterface | null>(null);
34
- const [error, setError] = useState<string | null>(null);
35
- const initializingRef = useRef<Promise<StorageInterface | null> | null>(null);
36
-
37
- const notifyError = useCallback(
38
- (err: unknown) => {
39
- const message = extractErrorMessage(err, 'Failed to initialize storage');
40
- setError(message);
41
-
42
- if (logger) {
43
- logger(message, err);
44
- }
45
-
46
- onError?.({
47
- message,
48
- code: errorCode,
49
- status: 500,
50
- });
51
- },
52
- [errorCode, logger, onError],
53
- );
54
-
55
- const createStorageInstance = useCallback(async (): Promise<StorageInterface | null> => {
56
- try {
57
- const platformStorage = await createPlatformStorage();
58
- setStorage(platformStorage);
59
- setError(null);
60
- return platformStorage;
61
- } catch (err) {
62
- notifyError(err);
63
- setStorage(null);
64
- return null;
65
- }
66
- }, [notifyError]);
67
-
68
- const refresh = useCallback(async (): Promise<StorageInterface | null> => {
69
- if (!initializingRef.current) {
70
- initializingRef.current = createStorageInstance().finally(() => {
71
- initializingRef.current = null;
72
- });
73
- }
74
-
75
- return initializingRef.current;
76
- }, [createStorageInstance]);
77
-
78
- useEffect(() => {
79
- refresh().catch((err) => {
80
- notifyError(err);
81
- });
82
- }, [refresh, notifyError]);
83
-
84
- const withStorage = useCallback(
85
- async <T,>(callback: (resolvedStorage: StorageInterface) => Promise<T>): Promise<T | null> => {
86
- const resolvedStorage = storage ?? (await refresh());
87
- if (!resolvedStorage) {
88
- return null;
89
- }
90
- return callback(resolvedStorage);
91
- },
92
- [refresh, storage],
93
- );
94
-
95
- return {
96
- storage,
97
- isReady: Boolean(storage) && !error,
98
- error,
99
- refresh,
100
- withStorage,
101
- };
102
- };
103
-
104
-
@@ -1,61 +0,0 @@
1
- /**
2
- * Provides avatar picker action wired to bottom sheet selection and profile update.
3
- */
4
- import { useCallback } from 'react';
5
- import type { QueryClient } from '@tanstack/react-query';
6
- import { toast } from '../../lib/sonner';
7
- import { translate } from '../../i18n';
8
- import { updateAvatarVisibility, updateProfileWithAvatar } from '../utils/avatarUtils';
9
- import type { OxyServices } from '../../core';
10
- import type { RouteName } from '../navigation/routes';
11
-
12
- interface UseAvatarPickerOptions {
13
- oxyServices: OxyServices;
14
- currentLanguage: string;
15
- activeSessionId: string | null;
16
- currentDeviceId: string | null;
17
- queryClient: QueryClient;
18
- showBottomSheet: (screenOrConfig: RouteName | { screen: RouteName; props?: Record<string, unknown> }) => void;
19
- }
20
-
21
- export const useAvatarPicker = ({
22
- oxyServices,
23
- currentLanguage,
24
- activeSessionId,
25
- currentDeviceId,
26
- queryClient,
27
- showBottomSheet,
28
- }: UseAvatarPickerOptions) => {
29
- const openAvatarPicker = useCallback(() => {
30
- showBottomSheet({
31
- screen: 'FileManagement' as RouteName,
32
- props: {
33
- selectMode: true,
34
- multiSelect: false,
35
- disabledMimeTypes: ['video/', 'audio/', 'application/pdf'],
36
- afterSelect: 'none',
37
- onSelect: async (file: any) => {
38
- if (!file.contentType.startsWith('image/')) {
39
- toast.error(translate(currentLanguage, 'editProfile.toasts.selectImage') || 'Please select an image file');
40
- return;
41
- }
42
- try {
43
- await updateAvatarVisibility(file.id, oxyServices, 'OxyContext');
44
- await updateProfileWithAvatar(
45
- { avatar: file.id },
46
- oxyServices,
47
- activeSessionId,
48
- queryClient,
49
- { deviceId: currentDeviceId || undefined }
50
- );
51
- toast.success(translate(currentLanguage, 'editProfile.toasts.avatarUpdated') || 'Avatar updated');
52
- } catch (e: any) {
53
- toast.error(e.message || translate(currentLanguage, 'editProfile.toasts.updateAvatarFailed') || 'Failed to update avatar');
54
- }
55
- },
56
- },
57
- });
58
- }, [activeSessionId, currentDeviceId, currentLanguage, oxyServices, queryClient, showBottomSheet]);
59
-
60
- return { openAvatarPicker };
61
- };