@oxyhq/services 5.25.0 → 5.26.0

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 (444) hide show
  1. package/README.md +60 -8
  2. package/lib/commonjs/core/AuthManager.js +405 -0
  3. package/lib/commonjs/core/AuthManager.js.map +1 -0
  4. package/lib/commonjs/core/HttpService.js +39 -1
  5. package/lib/commonjs/core/HttpService.js.map +1 -1
  6. package/lib/commonjs/core/index.js +16 -0
  7. package/lib/commonjs/core/index.js.map +1 -1
  8. package/lib/commonjs/core/mixins/OxyServices.fedcm.js +38 -44
  9. package/lib/commonjs/core/mixins/OxyServices.fedcm.js.map +1 -1
  10. package/lib/commonjs/core/mixins/OxyServices.popup.js +9 -7
  11. package/lib/commonjs/core/mixins/OxyServices.popup.js.map +1 -1
  12. package/lib/commonjs/index.js +321 -18
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/shared/index.js +227 -0
  15. package/lib/commonjs/shared/index.js.map +1 -0
  16. package/lib/commonjs/shared/utils/colorUtils.js +161 -0
  17. package/lib/commonjs/shared/utils/colorUtils.js.map +1 -0
  18. package/lib/commonjs/shared/utils/debugUtils.js +84 -0
  19. package/lib/commonjs/shared/utils/debugUtils.js.map +1 -0
  20. package/lib/commonjs/shared/utils/errorUtils.js +190 -0
  21. package/lib/commonjs/shared/utils/errorUtils.js.map +1 -0
  22. package/lib/commonjs/shared/utils/index.js +196 -0
  23. package/lib/commonjs/shared/utils/index.js.map +1 -0
  24. package/lib/commonjs/shared/utils/networkUtils.js +213 -0
  25. package/lib/commonjs/shared/utils/networkUtils.js.map +1 -0
  26. package/lib/commonjs/shared/utils/themeUtils.js +118 -0
  27. package/lib/commonjs/shared/utils/themeUtils.js.map +1 -0
  28. package/lib/commonjs/ui/components/BottomSheetRouter.js +1 -1
  29. package/lib/commonjs/ui/components/FontLoader.js +1 -1
  30. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  31. package/lib/commonjs/ui/components/GroupedItem.js +1 -1
  32. package/lib/commonjs/ui/components/Header.js +1 -1
  33. package/lib/commonjs/ui/components/OxyProvider.js +9 -1
  34. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  35. package/lib/commonjs/ui/components/OxySignInButton.js +19 -20
  36. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  37. package/lib/commonjs/ui/components/ProfileCard.js +1 -1
  38. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  39. package/lib/commonjs/ui/components/QuickActions.js +1 -1
  40. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  41. package/lib/commonjs/ui/components/Section.js +1 -1
  42. package/lib/commonjs/ui/components/SectionTitle.js +1 -1
  43. package/lib/commonjs/ui/components/SignInModal.js +546 -0
  44. package/lib/commonjs/ui/components/SignInModal.js.map +1 -0
  45. package/lib/commonjs/ui/context/OxyContext.js +2 -1
  46. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  47. package/lib/commonjs/ui/hooks/{use-color-scheme.js → useColorScheme.js} +1 -1
  48. package/lib/commonjs/ui/hooks/useColorScheme.js.map +1 -0
  49. package/lib/commonjs/ui/hooks/useSessionSocket.js +6 -12
  50. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  51. package/lib/commonjs/ui/hooks/useThemeColors.js +1 -1
  52. package/lib/commonjs/ui/hooks/useThemeStyles.js +1 -1
  53. package/lib/commonjs/ui/navigation/bottomSheetManager.js +5 -2
  54. package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
  55. package/lib/commonjs/ui/navigation/routes.js +7 -8
  56. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  57. package/lib/commonjs/ui/screens/AccountCenterScreen.js +7 -7
  58. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +6 -6
  60. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +2 -2
  62. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +4 -4
  63. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/AppInfoScreen.js +1 -1
  65. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +1 -1
  66. package/lib/commonjs/ui/screens/FileManagementScreen.js +1 -1
  67. package/lib/commonjs/ui/screens/FollowersListScreen.js +18 -0
  68. package/lib/commonjs/ui/screens/FollowersListScreen.js.map +1 -0
  69. package/lib/commonjs/ui/screens/FollowingListScreen.js +18 -0
  70. package/lib/commonjs/ui/screens/FollowingListScreen.js.map +1 -0
  71. package/lib/commonjs/ui/screens/HelpSupportScreen.js +1 -1
  72. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/HistoryViewScreen.js +1 -1
  74. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +1 -1
  75. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +229 -0
  76. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -0
  77. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +1 -1
  78. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/OxyAuthScreen.js +9 -21
  80. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +1 -1
  82. package/lib/commonjs/ui/screens/ProfileScreen.js +1 -1
  83. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +1 -1
  85. package/lib/commonjs/ui/screens/UserListScreen.js +411 -0
  86. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -0
  87. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +1 -1
  88. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +1 -1
  89. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +1 -1
  90. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  91. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +1 -1
  92. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
  93. package/lib/commonjs/ui/stores/authStore.js +4 -6
  94. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  95. package/lib/commonjs/ui/utils/colorUtils.js +43 -46
  96. package/lib/commonjs/ui/utils/colorUtils.js.map +1 -1
  97. package/lib/commonjs/ui/utils/themeUtils.js +29 -39
  98. package/lib/commonjs/ui/utils/themeUtils.js.map +1 -1
  99. package/lib/commonjs/ui/utils/{user-utils.js → userUtils.js} +1 -1
  100. package/lib/commonjs/ui/utils/userUtils.js.map +1 -0
  101. package/lib/commonjs/utils/errorUtils.js +0 -13
  102. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  103. package/lib/commonjs/utils/hookUtils.js +8 -8
  104. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  105. package/lib/commonjs/web/WebOxyContext.js +273 -41
  106. package/lib/commonjs/web/WebOxyContext.js.map +1 -1
  107. package/lib/commonjs/web/index.js +177 -4
  108. package/lib/commonjs/web/index.js.map +1 -1
  109. package/lib/commonjs/web.js +12 -12
  110. package/lib/commonjs/web.js.map +1 -1
  111. package/lib/module/core/AuthManager.js +399 -0
  112. package/lib/module/core/AuthManager.js.map +1 -0
  113. package/lib/module/core/HttpService.js +39 -1
  114. package/lib/module/core/HttpService.js.map +1 -1
  115. package/lib/module/core/index.js +2 -0
  116. package/lib/module/core/index.js.map +1 -1
  117. package/lib/module/core/mixins/OxyServices.fedcm.js +38 -44
  118. package/lib/module/core/mixins/OxyServices.fedcm.js.map +1 -1
  119. package/lib/module/core/mixins/OxyServices.popup.js +9 -7
  120. package/lib/module/core/mixins/OxyServices.popup.js.map +1 -1
  121. package/lib/module/index.js +27 -2
  122. package/lib/module/index.js.map +1 -1
  123. package/lib/module/shared/index.js +37 -0
  124. package/lib/module/shared/index.js.map +1 -0
  125. package/lib/module/shared/utils/colorUtils.js +150 -0
  126. package/lib/module/shared/utils/colorUtils.js.map +1 -0
  127. package/lib/module/shared/utils/debugUtils.js +75 -0
  128. package/lib/module/shared/utils/debugUtils.js.map +1 -0
  129. package/lib/module/shared/utils/errorUtils.js +176 -0
  130. package/lib/module/shared/utils/errorUtils.js.map +1 -0
  131. package/lib/module/shared/utils/index.js +21 -0
  132. package/lib/module/shared/utils/index.js.map +1 -0
  133. package/lib/module/shared/utils/networkUtils.js +202 -0
  134. package/lib/module/shared/utils/networkUtils.js.map +1 -0
  135. package/lib/module/shared/utils/themeUtils.js +109 -0
  136. package/lib/module/shared/utils/themeUtils.js.map +1 -0
  137. package/lib/module/ui/components/BottomSheetRouter.js +1 -1
  138. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  139. package/lib/module/ui/components/FontLoader.js +1 -1
  140. package/lib/module/ui/components/FontLoader.js.map +1 -1
  141. package/lib/module/ui/components/GroupedItem.js +1 -1
  142. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  143. package/lib/module/ui/components/Header.js +1 -1
  144. package/lib/module/ui/components/Header.js.map +1 -1
  145. package/lib/module/ui/components/OxyProvider.js +9 -1
  146. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  147. package/lib/module/ui/components/OxySignInButton.js +20 -21
  148. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  149. package/lib/module/ui/components/ProfileCard.js +1 -1
  150. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  151. package/lib/module/ui/components/QuickActions.js +1 -1
  152. package/lib/module/ui/components/QuickActions.js.map +1 -1
  153. package/lib/module/ui/components/Section.js +1 -1
  154. package/lib/module/ui/components/Section.js.map +1 -1
  155. package/lib/module/ui/components/SectionTitle.js +1 -1
  156. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  157. package/lib/module/ui/components/SignInModal.js +536 -0
  158. package/lib/module/ui/components/SignInModal.js.map +1 -0
  159. package/lib/module/ui/context/OxyContext.js +1 -1
  160. package/lib/module/ui/context/OxyContext.js.map +1 -1
  161. package/lib/module/ui/hooks/{use-color-scheme.js → useColorScheme.js} +1 -1
  162. package/lib/module/ui/hooks/useColorScheme.js.map +1 -0
  163. package/lib/module/ui/hooks/useSessionSocket.js +6 -12
  164. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  165. package/lib/module/ui/hooks/useThemeColors.js +1 -1
  166. package/lib/module/ui/hooks/useThemeColors.js.map +1 -1
  167. package/lib/module/ui/hooks/useThemeStyles.js +1 -1
  168. package/lib/module/ui/hooks/useThemeStyles.js.map +1 -1
  169. package/lib/module/ui/navigation/bottomSheetManager.js +5 -2
  170. package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
  171. package/lib/module/ui/navigation/routes.js +7 -8
  172. package/lib/module/ui/navigation/routes.js.map +1 -1
  173. package/lib/module/ui/screens/AccountCenterScreen.js +7 -7
  174. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  175. package/lib/module/ui/screens/AccountOverviewScreen.js +6 -6
  176. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  177. package/lib/module/ui/screens/AccountSettingsScreen.js +2 -2
  178. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  179. package/lib/module/ui/screens/AccountSwitcherScreen.js +4 -4
  180. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  181. package/lib/module/ui/screens/AppInfoScreen.js +1 -1
  182. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  183. package/lib/module/ui/screens/EditProfileFieldScreen.js +1 -1
  184. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  185. package/lib/module/ui/screens/FileManagementScreen.js +1 -1
  186. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  187. package/lib/module/ui/screens/FollowersListScreen.js +13 -0
  188. package/lib/module/ui/screens/FollowersListScreen.js.map +1 -0
  189. package/lib/module/ui/screens/FollowingListScreen.js +13 -0
  190. package/lib/module/ui/screens/FollowingListScreen.js.map +1 -0
  191. package/lib/module/ui/screens/HelpSupportScreen.js +1 -1
  192. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  193. package/lib/module/ui/screens/HistoryViewScreen.js +1 -1
  194. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  195. package/lib/module/ui/screens/LanguageSelectorScreen.js +1 -1
  196. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  197. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +224 -0
  198. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -0
  199. package/lib/module/ui/screens/LegalDocumentsScreen.js +1 -1
  200. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  201. package/lib/module/ui/screens/OxyAuthScreen.js +9 -21
  202. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  203. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
  204. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  205. package/lib/module/ui/screens/ProfileScreen.js +1 -1
  206. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  207. package/lib/module/ui/screens/SavesCollectionsScreen.js +1 -1
  208. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  209. package/lib/module/ui/screens/UserListScreen.js +405 -0
  210. package/lib/module/ui/screens/UserListScreen.js.map +1 -0
  211. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +1 -1
  212. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  213. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +1 -1
  214. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  215. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +1 -1
  216. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  217. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  218. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  219. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +1 -1
  220. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  221. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  222. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  223. package/lib/module/ui/stores/authStore.js +4 -6
  224. package/lib/module/ui/stores/authStore.js.map +1 -1
  225. package/lib/module/ui/utils/colorUtils.js +7 -40
  226. package/lib/module/ui/utils/colorUtils.js.map +1 -1
  227. package/lib/module/ui/utils/themeUtils.js +7 -35
  228. package/lib/module/ui/utils/themeUtils.js.map +1 -1
  229. package/lib/module/ui/utils/{user-utils.js → userUtils.js} +1 -1
  230. package/lib/module/ui/utils/userUtils.js.map +1 -0
  231. package/lib/module/utils/errorUtils.js +0 -7
  232. package/lib/module/utils/errorUtils.js.map +1 -1
  233. package/lib/module/utils/hookUtils.js +8 -8
  234. package/lib/module/utils/hookUtils.js.map +1 -1
  235. package/lib/module/web/WebOxyContext.js +272 -41
  236. package/lib/module/web/WebOxyContext.js.map +1 -1
  237. package/lib/module/web/index.js +26 -5
  238. package/lib/module/web/index.js.map +1 -1
  239. package/lib/module/web.js +2 -1
  240. package/lib/module/web.js.map +1 -1
  241. package/lib/typescript/commonjs/core/AuthManager.d.ts +144 -0
  242. package/lib/typescript/commonjs/core/AuthManager.d.ts.map +1 -0
  243. package/lib/typescript/commonjs/core/HttpService.d.ts.map +1 -1
  244. package/lib/typescript/commonjs/core/index.d.ts +2 -0
  245. package/lib/typescript/commonjs/core/index.d.ts.map +1 -1
  246. package/lib/typescript/commonjs/core/mixins/OxyServices.fedcm.d.ts.map +1 -1
  247. package/lib/typescript/commonjs/core/mixins/OxyServices.popup.d.ts.map +1 -1
  248. package/lib/typescript/commonjs/index.d.ts +16 -2
  249. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  250. package/lib/typescript/commonjs/models/session.d.ts +4 -0
  251. package/lib/typescript/commonjs/models/session.d.ts.map +1 -1
  252. package/lib/typescript/commonjs/shared/index.d.ts +29 -0
  253. package/lib/typescript/commonjs/shared/index.d.ts.map +1 -0
  254. package/lib/typescript/commonjs/shared/utils/colorUtils.d.ts +105 -0
  255. package/lib/typescript/commonjs/shared/utils/colorUtils.d.ts.map +1 -0
  256. package/lib/typescript/commonjs/shared/utils/debugUtils.d.ts +49 -0
  257. package/lib/typescript/commonjs/shared/utils/debugUtils.d.ts.map +1 -0
  258. package/lib/typescript/commonjs/shared/utils/errorUtils.d.ts +98 -0
  259. package/lib/typescript/commonjs/shared/utils/errorUtils.d.ts.map +1 -0
  260. package/lib/typescript/commonjs/shared/utils/index.d.ts +14 -0
  261. package/lib/typescript/commonjs/shared/utils/index.d.ts.map +1 -0
  262. package/lib/typescript/commonjs/shared/utils/networkUtils.d.ts +140 -0
  263. package/lib/typescript/commonjs/shared/utils/networkUtils.d.ts.map +1 -0
  264. package/lib/typescript/commonjs/shared/utils/themeUtils.d.ts +91 -0
  265. package/lib/typescript/commonjs/shared/utils/themeUtils.d.ts.map +1 -0
  266. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts +1 -1
  267. package/lib/typescript/commonjs/ui/components/FontLoader.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts +18 -0
  271. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -0
  272. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +1 -2
  273. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/hooks/{use-color-scheme.d.ts → useColorScheme.d.ts} +1 -1
  275. package/lib/typescript/commonjs/ui/hooks/useColorScheme.d.ts.map +1 -0
  276. package/lib/typescript/commonjs/ui/hooks/useSessionSocket.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +2 -0
  278. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
  280. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts +9 -0
  282. package/lib/typescript/commonjs/ui/screens/FollowersListScreen.d.ts.map +1 -0
  283. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts +9 -0
  284. package/lib/typescript/commonjs/ui/screens/FollowingListScreen.d.ts.map +1 -0
  285. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts +5 -0
  286. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -0
  287. package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts +11 -0
  289. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -0
  290. package/lib/typescript/commonjs/ui/stores/authStore.d.ts.map +1 -1
  291. package/lib/typescript/commonjs/ui/utils/colorUtils.d.ts +7 -11
  292. package/lib/typescript/commonjs/ui/utils/colorUtils.d.ts.map +1 -1
  293. package/lib/typescript/commonjs/ui/utils/themeUtils.d.ts +6 -19
  294. package/lib/typescript/commonjs/ui/utils/themeUtils.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/ui/utils/{user-utils.d.ts → userUtils.d.ts} +1 -1
  296. package/lib/typescript/commonjs/ui/utils/userUtils.d.ts.map +1 -0
  297. package/lib/typescript/commonjs/utils/errorUtils.d.ts +0 -6
  298. package/lib/typescript/commonjs/utils/errorUtils.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/web/WebOxyContext.d.ts +117 -9
  300. package/lib/typescript/commonjs/web/WebOxyContext.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/web/index.d.ts +19 -8
  302. package/lib/typescript/commonjs/web/index.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/web.d.ts +2 -1
  304. package/lib/typescript/commonjs/web.d.ts.map +1 -1
  305. package/lib/typescript/module/core/AuthManager.d.ts +144 -0
  306. package/lib/typescript/module/core/AuthManager.d.ts.map +1 -0
  307. package/lib/typescript/module/core/HttpService.d.ts.map +1 -1
  308. package/lib/typescript/module/core/index.d.ts +2 -0
  309. package/lib/typescript/module/core/index.d.ts.map +1 -1
  310. package/lib/typescript/module/core/mixins/OxyServices.fedcm.d.ts.map +1 -1
  311. package/lib/typescript/module/core/mixins/OxyServices.popup.d.ts.map +1 -1
  312. package/lib/typescript/module/index.d.ts +16 -2
  313. package/lib/typescript/module/index.d.ts.map +1 -1
  314. package/lib/typescript/module/models/session.d.ts +4 -0
  315. package/lib/typescript/module/models/session.d.ts.map +1 -1
  316. package/lib/typescript/module/shared/index.d.ts +29 -0
  317. package/lib/typescript/module/shared/index.d.ts.map +1 -0
  318. package/lib/typescript/module/shared/utils/colorUtils.d.ts +105 -0
  319. package/lib/typescript/module/shared/utils/colorUtils.d.ts.map +1 -0
  320. package/lib/typescript/module/shared/utils/debugUtils.d.ts +49 -0
  321. package/lib/typescript/module/shared/utils/debugUtils.d.ts.map +1 -0
  322. package/lib/typescript/module/shared/utils/errorUtils.d.ts +98 -0
  323. package/lib/typescript/module/shared/utils/errorUtils.d.ts.map +1 -0
  324. package/lib/typescript/module/shared/utils/index.d.ts +14 -0
  325. package/lib/typescript/module/shared/utils/index.d.ts.map +1 -0
  326. package/lib/typescript/module/shared/utils/networkUtils.d.ts +140 -0
  327. package/lib/typescript/module/shared/utils/networkUtils.d.ts.map +1 -0
  328. package/lib/typescript/module/shared/utils/themeUtils.d.ts +91 -0
  329. package/lib/typescript/module/shared/utils/themeUtils.d.ts.map +1 -0
  330. package/lib/typescript/module/ui/components/FontLoader.d.ts +1 -1
  331. package/lib/typescript/module/ui/components/FontLoader.d.ts.map +1 -1
  332. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  333. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  334. package/lib/typescript/module/ui/components/SignInModal.d.ts +18 -0
  335. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -0
  336. package/lib/typescript/module/ui/context/OxyContext.d.ts +1 -2
  337. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  338. package/lib/typescript/module/ui/hooks/{use-color-scheme.d.ts → useColorScheme.d.ts} +1 -1
  339. package/lib/typescript/module/ui/hooks/useColorScheme.d.ts.map +1 -0
  340. package/lib/typescript/module/ui/hooks/useSessionSocket.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +2 -0
  342. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
  344. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts +9 -0
  346. package/lib/typescript/module/ui/screens/FollowersListScreen.d.ts.map +1 -0
  347. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts +9 -0
  348. package/lib/typescript/module/ui/screens/FollowingListScreen.d.ts.map +1 -0
  349. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts +5 -0
  350. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -0
  351. package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  352. package/lib/typescript/module/ui/screens/UserListScreen.d.ts +11 -0
  353. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -0
  354. package/lib/typescript/module/ui/stores/authStore.d.ts.map +1 -1
  355. package/lib/typescript/module/ui/utils/colorUtils.d.ts +7 -11
  356. package/lib/typescript/module/ui/utils/colorUtils.d.ts.map +1 -1
  357. package/lib/typescript/module/ui/utils/themeUtils.d.ts +6 -19
  358. package/lib/typescript/module/ui/utils/themeUtils.d.ts.map +1 -1
  359. package/lib/typescript/module/ui/utils/{user-utils.d.ts → userUtils.d.ts} +1 -1
  360. package/lib/typescript/module/ui/utils/userUtils.d.ts.map +1 -0
  361. package/lib/typescript/module/utils/errorUtils.d.ts +0 -6
  362. package/lib/typescript/module/utils/errorUtils.d.ts.map +1 -1
  363. package/lib/typescript/module/web/WebOxyContext.d.ts +117 -9
  364. package/lib/typescript/module/web/WebOxyContext.d.ts.map +1 -1
  365. package/lib/typescript/module/web/index.d.ts +19 -8
  366. package/lib/typescript/module/web/index.d.ts.map +1 -1
  367. package/lib/typescript/module/web.d.ts +2 -1
  368. package/lib/typescript/module/web.d.ts.map +1 -1
  369. package/package.json +8 -2
  370. package/src/core/AuthManager.ts +436 -0
  371. package/src/core/HttpService.ts +43 -1
  372. package/src/core/index.ts +4 -0
  373. package/src/core/mixins/OxyServices.fedcm.ts +37 -42
  374. package/src/core/mixins/OxyServices.popup.ts +10 -7
  375. package/src/index.ts +76 -11
  376. package/src/models/session.ts +4 -0
  377. package/src/shared/index.ts +82 -0
  378. package/src/shared/utils/colorUtils.ts +155 -0
  379. package/src/shared/utils/debugUtils.ts +73 -0
  380. package/src/shared/utils/errorUtils.ts +181 -0
  381. package/src/shared/utils/index.ts +59 -0
  382. package/src/shared/utils/networkUtils.ts +248 -0
  383. package/src/shared/utils/themeUtils.ts +115 -0
  384. package/src/ui/components/BottomSheetRouter.tsx +1 -1
  385. package/src/ui/components/FontLoader.tsx +1 -2
  386. package/src/ui/components/GroupedItem.tsx +1 -1
  387. package/src/ui/components/Header.tsx +1 -1
  388. package/src/ui/components/OxyProvider.tsx +10 -0
  389. package/src/ui/components/OxySignInButton.tsx +20 -22
  390. package/src/ui/components/ProfileCard.tsx +1 -1
  391. package/src/ui/components/QuickActions.tsx +1 -1
  392. package/src/ui/components/Section.tsx +1 -1
  393. package/src/ui/components/SectionTitle.tsx +1 -1
  394. package/src/ui/components/SignInModal.tsx +534 -0
  395. package/src/ui/context/OxyContext.tsx +1 -2
  396. package/src/ui/hooks/queries/queryKeys.ts +2 -2
  397. package/src/ui/hooks/useSessionSocket.ts +12 -17
  398. package/src/ui/hooks/useThemeColors.ts +1 -1
  399. package/src/ui/hooks/useThemeStyles.ts +1 -1
  400. package/src/ui/navigation/bottomSheetManager.ts +5 -1
  401. package/src/ui/navigation/routes.ts +8 -9
  402. package/src/ui/screens/AccountCenterScreen.tsx +7 -7
  403. package/src/ui/screens/AccountOverviewScreen.tsx +6 -6
  404. package/src/ui/screens/AccountSettingsScreen.tsx +2 -2
  405. package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
  406. package/src/ui/screens/AppInfoScreen.tsx +1 -1
  407. package/src/ui/screens/EditProfileFieldScreen.tsx +1 -1
  408. package/src/ui/screens/FileManagementScreen.tsx +1 -1
  409. package/src/ui/screens/FollowersListScreen.tsx +14 -0
  410. package/src/ui/screens/FollowingListScreen.tsx +14 -0
  411. package/src/ui/screens/HelpSupportScreen.tsx +1 -1
  412. package/src/ui/screens/HistoryViewScreen.tsx +1 -1
  413. package/src/ui/screens/LanguageSelectorScreen.tsx +1 -1
  414. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +231 -0
  415. package/src/ui/screens/LegalDocumentsScreen.tsx +1 -1
  416. package/src/ui/screens/OxyAuthScreen.tsx +10 -21
  417. package/src/ui/screens/PremiumSubscriptionScreen.tsx +1 -1
  418. package/src/ui/screens/ProfileScreen.tsx +1 -1
  419. package/src/ui/screens/SavesCollectionsScreen.tsx +1 -1
  420. package/src/ui/screens/UserListScreen.tsx +416 -0
  421. package/src/ui/screens/karma/KarmaAboutScreen.tsx +1 -1
  422. package/src/ui/screens/karma/KarmaCenterScreen.tsx +1 -1
  423. package/src/ui/screens/karma/KarmaFAQScreen.tsx +1 -1
  424. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +1 -1
  425. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +1 -1
  426. package/src/ui/screens/karma/KarmaRulesScreen.tsx +1 -1
  427. package/src/ui/stores/authStore.ts +5 -6
  428. package/src/ui/utils/colorUtils.ts +15 -43
  429. package/src/ui/utils/themeUtils.ts +14 -39
  430. package/src/utils/errorUtils.ts +1 -6
  431. package/src/utils/hookUtils.ts +8 -8
  432. package/src/web/WebOxyContext.tsx +331 -41
  433. package/src/web/index.ts +76 -6
  434. package/src/web.ts +1 -1
  435. package/lib/commonjs/ui/hooks/use-color-scheme.js.map +0 -1
  436. package/lib/commonjs/ui/utils/user-utils.js.map +0 -1
  437. package/lib/module/ui/hooks/use-color-scheme.js.map +0 -1
  438. package/lib/module/ui/utils/user-utils.js.map +0 -1
  439. package/lib/typescript/commonjs/ui/hooks/use-color-scheme.d.ts.map +0 -1
  440. package/lib/typescript/commonjs/ui/utils/user-utils.d.ts.map +0 -1
  441. package/lib/typescript/module/ui/hooks/use-color-scheme.d.ts.map +0 -1
  442. package/lib/typescript/module/ui/utils/user-utils.d.ts.map +0 -1
  443. /package/src/ui/hooks/{use-color-scheme.ts → useColorScheme.ts} +0 -0
  444. /package/src/ui/utils/{user-utils.ts → userUtils.ts} +0 -0
@@ -6,7 +6,6 @@ import type { BaseScreenProps } from '../types/navigation';
6
6
  // before OxyContext is fully initialized
7
7
 
8
8
  // Define all available route names
9
- // Note: SignIn has been replaced with OxyAuth for cross-app authentication via Oxy Accounts
10
9
  export type RouteName =
11
10
  | 'OxyAuth' // Sign in with Oxy (QR code / deep link to Accounts app)
12
11
  | 'AccountOverview'
@@ -31,23 +30,21 @@ export type RouteName =
31
30
  | 'UserLinks'
32
31
  | 'HistoryView'
33
32
  | 'SavesCollections'
34
- | 'EditProfile' // For backward compatibility, maps to AccountSettings
35
33
  | 'EditProfileField' // Dedicated screen for editing a single profile field
34
+ | 'LearnMoreUsernames' // Informational screen about usernames
36
35
  | 'KarmaCenter'
37
36
  | 'KarmaLeaderboard'
38
37
  | 'KarmaRewards'
39
38
  | 'KarmaRules'
40
39
  | 'AboutKarma'
41
40
  | 'KarmaFAQ'
42
- // Legacy aliases for backward compatibility
43
- | 'SignIn'; // Maps to OxyAuth
41
+ | 'FollowersList' // List of user's followers
42
+ | 'FollowingList'; // List of users being followed
44
43
 
45
44
  // Lazy screen loaders - functions that return screen components on-demand
46
45
  // This breaks the require cycle by deferring imports until screens are actually needed
47
46
  const screenLoaders: Record<RouteName, () => ComponentType<BaseScreenProps>> = {
48
47
  OxyAuth: () => require('../screens/OxyAuthScreen').default,
49
- // Legacy alias - SignIn now maps to OxyAuth
50
- SignIn: () => require('../screens/OxyAuthScreen').default,
51
48
  AccountOverview: () => require('../screens/AccountOverviewScreen').default,
52
49
  AccountSettings: () => require('../screens/AccountSettingsScreen').default,
53
50
  AccountCenter: () => require('../screens/AccountCenterScreen').default,
@@ -70,10 +67,9 @@ const screenLoaders: Record<RouteName, () => ComponentType<BaseScreenProps>> = {
70
67
  UserLinks: () => require('../screens/UserLinksScreen').default,
71
68
  HistoryView: () => require('../screens/HistoryViewScreen').default,
72
69
  SavesCollections: () => require('../screens/SavesCollectionsScreen').default,
73
- // Backward compatibility - EditProfile maps to AccountSettings
74
- EditProfile: () => require('../screens/AccountSettingsScreen').default,
75
- // Dedicated screen for editing a single profile field
76
70
  EditProfileField: () => require('../screens/EditProfileFieldScreen').default,
71
+ // Informational screens
72
+ LearnMoreUsernames: () => require('../screens/LearnMoreUsernamesScreen').default,
77
73
  // Karma screens
78
74
  KarmaCenter: () => require('../screens/karma/KarmaCenterScreen').default,
79
75
  KarmaLeaderboard: () => require('../screens/karma/KarmaLeaderboardScreen').default,
@@ -81,6 +77,9 @@ const screenLoaders: Record<RouteName, () => ComponentType<BaseScreenProps>> = {
81
77
  KarmaRules: () => require('../screens/karma/KarmaRulesScreen').default,
82
78
  AboutKarma: () => require('../screens/karma/KarmaAboutScreen').default,
83
79
  KarmaFAQ: () => require('../screens/karma/KarmaFAQScreen').default,
80
+ // User list screens (followers/following)
81
+ FollowersList: () => require('../screens/FollowersListScreen').default,
82
+ FollowingList: () => require('../screens/FollowingListScreen').default,
84
83
  };
85
84
 
86
85
  // Cache loaded components to avoid re-requiring
@@ -23,7 +23,7 @@ import GroupedSection from '../components/GroupedSection';
23
23
  import GroupedItem from '../components/GroupedItem';
24
24
  import { useI18n } from '../hooks/useI18n';
25
25
  import { useThemeStyles } from '../hooks/useThemeStyles';
26
- import { useColorScheme } from '../hooks/use-color-scheme';
26
+ import { useColorScheme } from '../hooks/useColorScheme';
27
27
  import { Colors } from '../constants/theme';
28
28
  import { normalizeColorScheme, normalizeTheme } from '../utils/themeUtils';
29
29
  import { useOxy } from '../context/OxyContext';
@@ -92,7 +92,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
92
92
  <ProfileCard
93
93
  user={user}
94
94
  theme={normalizedTheme}
95
- onEditPress={() => navigate?.('EditProfile', { activeTab: 'profile' })}
95
+ onEditPress={() => navigate?.('AccountSettings', { activeTab: 'profile' })}
96
96
  onClosePress={onClose}
97
97
  showCloseButton={!!onClose}
98
98
  />
@@ -105,7 +105,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
105
105
  theme={normalizedTheme}
106
106
  actions={useMemo(() => [
107
107
  { id: 'overview', icon: 'account-circle', iconColor: colors.iconSecurity, title: t('accountCenter.quickActions.overview') || 'Overview', onPress: () => navigate?.('AccountOverview') },
108
- { id: 'settings', icon: 'cog', iconColor: colors.iconData, title: t('accountCenter.quickActions.editProfile') || 'Edit Profile', onPress: () => navigate?.('EditProfile') },
108
+ { id: 'settings', icon: 'cog', iconColor: colors.iconData, title: t('accountCenter.quickActions.editProfile') || 'Edit Profile', onPress: () => navigate?.('AccountSettings') },
109
109
  { id: 'sessions', icon: 'shield-check', iconColor: colors.iconSecurity, title: t('accountCenter.quickActions.sessions') || 'Sessions', onPress: () => navigate?.('SessionManagement') },
110
110
  { id: 'premium', icon: 'star', iconColor: colors.iconPayments, title: t('accountCenter.quickActions.premium') || 'Premium', onPress: () => navigate?.('PremiumSubscription') },
111
111
  ...(user?.isPremium ? [{ id: 'billing', icon: 'card', iconColor: colors.iconPersonalInfo, title: t('accountCenter.quickActions.billing') || 'Billing', onPress: () => navigate?.('PaymentGateway') }] : []),
@@ -133,7 +133,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
133
133
  iconColor: colors.iconData,
134
134
  title: t('accountCenter.items.editProfile.title') || 'Edit Profile',
135
135
  subtitle: t('accountCenter.items.editProfile.subtitle') || 'Manage your profile and preferences',
136
- onPress: () => navigate?.('EditProfile'),
136
+ onPress: () => navigate?.('AccountSettings'),
137
137
  },
138
138
  {
139
139
  id: 'sessions',
@@ -191,7 +191,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
191
191
  iconColor: colors.iconPersonalInfo,
192
192
  title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
193
193
  subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
194
- onPress: () => navigate?.('SignIn'),
194
+ onPress: () => navigate?.('OxyAuth'),
195
195
  },
196
196
  ], [sessions.length, navigate, t, colors])}
197
197
 
@@ -210,7 +210,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
210
210
  iconColor: colors.iconPersonalInfo,
211
211
  title: t('accountCenter.items.addAccount.title') || 'Add Another Account',
212
212
  subtitle: t('accountCenter.items.addAccount.subtitle') || 'Sign in with a different account',
213
- onPress: () => navigate?.('SignIn'),
213
+ onPress: () => navigate?.('OxyAuth'),
214
214
  },
215
215
  ], [navigate, t, colors])}
216
216
 
@@ -228,7 +228,7 @@ const AccountCenterScreen: React.FC<BaseScreenProps> = ({
228
228
  iconColor: colors.iconStorage,
229
229
  title: t('accountCenter.items.notifications.title') || 'Notifications',
230
230
  subtitle: t('accountCenter.items.notifications.subtitle') || 'Manage notification settings',
231
- onPress: () => navigate?.('EditProfile', { activeTab: 'notifications' }),
231
+ onPress: () => navigate?.('AccountSettings', { activeTab: 'notifications' }),
232
232
  }] : []),
233
233
  {
234
234
  id: 'language',
@@ -23,8 +23,8 @@ import { Ionicons } from '@expo/vector-icons';
23
23
  import { Section, GroupedSection, GroupedItem } from '../components';
24
24
  import { useI18n } from '../hooks/useI18n';
25
25
  import { useThemeStyles } from '../hooks/useThemeStyles';
26
- import { getDisplayName, getShortDisplayName } from '../utils/user-utils';
27
- import { useColorScheme } from '../hooks/use-color-scheme';
26
+ import { getDisplayName, getShortDisplayName } from '../utils/userUtils';
27
+ import { useColorScheme } from '../hooks/useColorScheme';
28
28
  import { normalizeTheme } from '../utils/themeUtils';
29
29
  import { useOxy } from '../context/OxyContext';
30
30
  import { useUsersBySessions } from '../hooks/queries/useAccountQueries';
@@ -389,7 +389,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
389
389
  iconColor: baseThemeStyles.colors.iconSecurity,
390
390
  title: displayName,
391
391
  subtitle: user ? (user.email || user.username) : (t('common.status.loading') || 'Loading...'),
392
- onPress: () => navigate?.('EditProfile', { activeTab: 'profile' }),
392
+ onPress: () => navigate?.('AccountSettings', { activeTab: 'profile' }),
393
393
  },
394
394
  ]}
395
395
  />
@@ -405,7 +405,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
405
405
  iconColor: baseThemeStyles.colors.iconPersonalInfo,
406
406
  title: t('accountOverview.items.editProfile.title'),
407
407
  subtitle: t('accountOverview.items.editProfile.subtitle'),
408
- onPress: () => navigate?.('EditProfile', { activeTab: 'profile' }),
408
+ onPress: () => navigate?.('AccountSettings', { activeTab: 'profile' }),
409
409
  },
410
410
  {
411
411
  id: 'security-privacy',
@@ -413,7 +413,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
413
413
  iconColor: baseThemeStyles.colors.iconSecurity,
414
414
  title: t('accountOverview.items.security.title'),
415
415
  subtitle: t('accountOverview.items.security.subtitle'),
416
- onPress: () => navigate?.('EditProfile', { activeTab: 'password' }),
416
+ onPress: () => navigate?.('AccountSettings', { activeTab: 'password' }),
417
417
  },
418
418
  {
419
419
  id: 'notifications',
@@ -421,7 +421,7 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
421
421
  iconColor: baseThemeStyles.colors.iconStorage,
422
422
  title: t('accountOverview.items.notifications.title'),
423
423
  subtitle: t('accountOverview.items.notifications.subtitle'),
424
- onPress: () => navigate?.('EditProfile', { activeTab: 'notifications' }),
424
+ onPress: () => navigate?.('AccountSettings', { activeTab: 'notifications' }),
425
425
  },
426
426
  {
427
427
  id: 'premium-subscription',
@@ -17,11 +17,11 @@ import { useAuthStore } from '../stores/authStore';
17
17
  import { GroupedSection } from '../components';
18
18
  import { useI18n } from '../hooks/useI18n';
19
19
  import { useThemeStyles } from '../hooks/useThemeStyles';
20
- import { useColorScheme } from '../hooks/use-color-scheme';
20
+ import { useColorScheme } from '../hooks/useColorScheme';
21
21
  import { Colors } from '../constants/theme';
22
22
  import { normalizeColorScheme } from '../utils/themeUtils';
23
23
  import type { ProfileFieldType } from './EditProfileFieldScreen';
24
- import { getDisplayName } from '../utils/user-utils';
24
+ import { getDisplayName } from '../utils/userUtils';
25
25
  import { useOxy } from '../context/OxyContext';
26
26
  import { useCurrentUser } from '../hooks/queries/useAccountQueries';
27
27
  import { useUploadAvatar } from '../hooks/mutations/useAccountMutations';
@@ -24,7 +24,7 @@ import Avatar from '../components/Avatar';
24
24
  import { Header, GroupedSection, LoadingState } from '../components';
25
25
  import { useI18n } from '../hooks/useI18n';
26
26
  import { useThemeStyles } from '../hooks/useThemeStyles';
27
- import { useColorScheme } from '../hooks/use-color-scheme';
27
+ import { useColorScheme } from '../hooks/useColorScheme';
28
28
  import { normalizeTheme } from '../utils/themeUtils';
29
29
  import { useOxy } from '../context/OxyContext';
30
30
 
@@ -460,7 +460,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
460
460
  iconColor: '#007AFF',
461
461
  title: 'Add Another Account',
462
462
  subtitle: 'Sign in with a different account',
463
- onPress: () => navigate?.('SignIn'),
463
+ onPress: () => navigate?.('OxyAuth'),
464
464
  },
465
465
  {
466
466
  id: 'device-management',
@@ -561,7 +561,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
561
561
  iconColor: '#ccc',
562
562
  title: t('accountSwitcher.empty.title') || 'No saved accounts',
563
563
  subtitle: t('accountSwitcher.empty.subtitle') || 'Add another account to switch between them quickly',
564
- onPress: () => navigate?.('SignIn'),
564
+ onPress: () => navigate?.('OxyAuth'),
565
565
  customContent: (
566
566
  <View style={styles.emptyStateContainer}>
567
567
  <OxyIcon name="person-outline" size={48} color="#ccc" />
@@ -571,7 +571,7 @@ const ModernAccountSwitcherScreen: React.FC<BaseScreenProps> = ({
571
571
  </Text>
572
572
  <TouchableOpacity
573
573
  style={styles.addAccountButton}
574
- onPress={() => navigate?.('SignIn')}
574
+ onPress={() => navigate?.('OxyAuth')}
575
575
  >
576
576
  <Text style={styles.addAccountButtonText}>{t('accountCenter.sections.addAccount') || 'Add Account'}</Text>
577
577
  </TouchableOpacity>
@@ -23,7 +23,7 @@ import { Ionicons } from '@expo/vector-icons';
23
23
  import OxyServicesLogo from '../../assets/icons/OxyServices';
24
24
  import { Section, GroupedSection } from '../components';
25
25
  import { useThemeStyles } from '../hooks/useThemeStyles';
26
- import { useColorScheme } from '../hooks/use-color-scheme';
26
+ import { useColorScheme } from '../hooks/useColorScheme';
27
27
  import { useOxy } from '../context/OxyContext';
28
28
 
29
29
 
@@ -14,7 +14,7 @@ import {
14
14
  import { Ionicons } from '@expo/vector-icons';
15
15
  import type { BaseScreenProps } from '../types/navigation';
16
16
  import { useThemeStyles } from '../hooks/useThemeStyles';
17
- import { useColorScheme } from '../hooks/use-color-scheme';
17
+ import { useColorScheme } from '../hooks/useColorScheme';
18
18
  import { normalizeTheme } from '../utils/themeUtils';
19
19
  import { Header } from '../components';
20
20
  import { useI18n } from '../hooks/useI18n';
@@ -38,7 +38,7 @@ import Header from '../components/Header';
38
38
  import JustifiedPhotoGrid from '../components/photogrid/JustifiedPhotoGrid';
39
39
  import { GroupedSection } from '../components';
40
40
  import { useThemeStyles } from '../hooks/useThemeStyles';
41
- import { useColorScheme } from '../hooks/use-color-scheme';
41
+ import { useColorScheme } from '../hooks/useColorScheme';
42
42
  import { normalizeTheme } from '../utils/themeUtils';
43
43
  import { useOxy } from '../context/OxyContext';
44
44
  import { useUploadFile } from '../hooks/mutations/useAccountMutations';
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { BaseScreenProps } from '../types/navigation';
3
+ import UserListScreen from './UserListScreen';
4
+
5
+ interface FollowersListScreenProps extends BaseScreenProps {
6
+ userId: string;
7
+ initialCount?: number;
8
+ }
9
+
10
+ const FollowersListScreen: React.FC<FollowersListScreenProps> = (props) => {
11
+ return <UserListScreen {...props} mode="followers" />;
12
+ };
13
+
14
+ export default FollowersListScreen;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { BaseScreenProps } from '../types/navigation';
3
+ import UserListScreen from './UserListScreen';
4
+
5
+ interface FollowingListScreenProps extends BaseScreenProps {
6
+ userId: string;
7
+ initialCount?: number;
8
+ }
9
+
10
+ const FollowingListScreen: React.FC<FollowingListScreenProps> = (props) => {
11
+ return <UserListScreen {...props} mode="following" />;
12
+ };
13
+
14
+ export default FollowingListScreen;
@@ -12,7 +12,7 @@ import { toast } from '../../lib/sonner';
12
12
  import { Header, Section, GroupedSection } from '../components';
13
13
  import { useI18n } from '../hooks/useI18n';
14
14
  import { useThemeStyles } from '../hooks/useThemeStyles';
15
- import { useColorScheme } from '../hooks/use-color-scheme';
15
+ import { useColorScheme } from '../hooks/useColorScheme';
16
16
 
17
17
  const HelpSupportScreen: React.FC<BaseScreenProps> = ({
18
18
  onClose,
@@ -10,7 +10,7 @@ import { confirmAction } from '../utils/confirmAction';
10
10
  import { Header, Section, GroupedSection, LoadingState, EmptyState } from '../components';
11
11
  import { useI18n } from '../hooks/useI18n';
12
12
  import { useThemeStyles } from '../hooks/useThemeStyles';
13
- import { useColorScheme } from '../hooks/use-color-scheme';
13
+ import { useColorScheme } from '../hooks/useColorScheme';
14
14
  import { useOxy } from '../context/OxyContext';
15
15
 
16
16
  interface HistoryItem {
@@ -9,7 +9,7 @@ import {
9
9
  } from 'react-native';
10
10
  import type { BaseScreenProps } from '../types/navigation';
11
11
  import { useThemeStyles } from '../hooks/useThemeStyles';
12
- import { useColorScheme } from '../hooks/use-color-scheme';
12
+ import { useColorScheme } from '../hooks/useColorScheme';
13
13
  import { normalizeTheme } from '../utils/themeUtils';
14
14
  import { Ionicons } from '@expo/vector-icons';
15
15
  import { toast } from '../../lib/sonner';
@@ -0,0 +1,231 @@
1
+ import React, { useState, useCallback, useMemo } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ TouchableOpacity,
6
+ StyleSheet,
7
+ ScrollView,
8
+ } from 'react-native';
9
+ import { Ionicons } from '@expo/vector-icons';
10
+ import type { BaseScreenProps } from '../types/navigation';
11
+ import { useThemeStyles } from '../hooks/useThemeStyles';
12
+
13
+ interface InfoSection {
14
+ id: string;
15
+ title: string;
16
+ content: string;
17
+ icon: string;
18
+ }
19
+
20
+ const INFO_SECTIONS: InfoSection[] = [
21
+ {
22
+ id: 'what',
23
+ title: 'What is a username?',
24
+ content: 'Your username is your unique identifier on Oxy. It\'s how other people find and mention you. Think of it like your handle on social media - it\'s public and represents your identity across all Oxy apps.',
25
+ icon: 'at-outline',
26
+ },
27
+ {
28
+ id: 'rules',
29
+ title: 'Username rules',
30
+ content: 'Usernames can only contain lowercase letters (a-z) and numbers (0-9). They must be at least 4 characters long. Special characters, spaces, and uppercase letters are not allowed to keep usernames simple and easy to remember.',
31
+ icon: 'list-outline',
32
+ },
33
+ {
34
+ id: 'unique',
35
+ title: 'Why must it be unique?',
36
+ content: 'Each username can only belong to one person. This ensures that when someone searches for you or mentions you, they find the right person. It also prevents confusion and impersonation.',
37
+ icon: 'finger-print-outline',
38
+ },
39
+ {
40
+ id: 'change',
41
+ title: 'Can I change it later?',
42
+ content: 'Yes! You can change your username anytime in your account settings. Keep in mind that your old username will become available for others to use, and people who knew your old username will need to find you with the new one.',
43
+ icon: 'refresh-outline',
44
+ },
45
+ {
46
+ id: 'tips',
47
+ title: 'Tips for choosing a username',
48
+ content: 'Choose something memorable and easy to spell. Avoid using personal information like your birth year or phone number. Consider using a name that represents you across all contexts - professional and personal.',
49
+ icon: 'bulb-outline',
50
+ },
51
+ ];
52
+
53
+ const LearnMoreUsernamesScreen: React.FC<BaseScreenProps> = ({
54
+ theme,
55
+ }) => {
56
+ const themeStyles = useThemeStyles(theme || 'light');
57
+ const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set(['what'])); // Start with first section expanded
58
+
59
+ const toggleExpanded = useCallback((id: string) => {
60
+ setExpandedIds(prev => {
61
+ const next = new Set(prev);
62
+ if (next.has(id)) {
63
+ next.delete(id);
64
+ } else {
65
+ next.add(id);
66
+ }
67
+ return next;
68
+ });
69
+ }, []);
70
+
71
+ const styles = useMemo(() => createStyles(themeStyles), [themeStyles]);
72
+
73
+ return (
74
+ <View style={[styles.container, { backgroundColor: themeStyles.backgroundColor }]}>
75
+ <ScrollView
76
+ style={styles.content}
77
+ showsVerticalScrollIndicator={false}
78
+ contentContainerStyle={styles.contentContainer}
79
+ >
80
+ <View style={styles.introSection}>
81
+ <View style={[styles.introIcon, { backgroundColor: themeStyles.primaryColor + '15' }]}>
82
+ <Ionicons name="at" size={32} color={themeStyles.primaryColor} />
83
+ </View>
84
+ <Text style={[styles.introTitle, { color: themeStyles.textColor }]}>
85
+ Your unique identity
86
+ </Text>
87
+ <Text style={[styles.introText, { color: themeStyles.mutedTextColor }]}>
88
+ Your username is how people find and recognize you across all Oxy apps.
89
+ </Text>
90
+ </View>
91
+
92
+ {INFO_SECTIONS.map((section, index) => {
93
+ const isExpanded = expandedIds.has(section.id);
94
+ return (
95
+ <View
96
+ key={section.id}
97
+ style={[
98
+ styles.section,
99
+ { backgroundColor: themeStyles.secondaryBackgroundColor, borderColor: themeStyles.borderColor },
100
+ index === 0 && styles.sectionFirst,
101
+ ]}
102
+ >
103
+ <TouchableOpacity
104
+ style={styles.sectionHeader}
105
+ onPress={() => toggleExpanded(section.id)}
106
+ accessibilityRole="button"
107
+ accessibilityLabel={section.title}
108
+ accessibilityHint={isExpanded ? 'Collapse section' : 'Expand section'}
109
+ accessibilityState={{ expanded: isExpanded }}
110
+ >
111
+ <View style={[styles.sectionIconContainer, { backgroundColor: themeStyles.primaryColor + '15' }]}>
112
+ <Ionicons
113
+ name={section.icon}
114
+ size={20}
115
+ color={themeStyles.primaryColor}
116
+ />
117
+ </View>
118
+ <Text style={[styles.sectionTitle, { color: themeStyles.textColor }]}>
119
+ {section.title}
120
+ </Text>
121
+ <Ionicons
122
+ name={isExpanded ? 'chevron-up' : 'chevron-down'}
123
+ size={20}
124
+ color={themeStyles.mutedTextColor}
125
+ />
126
+ </TouchableOpacity>
127
+ {isExpanded && (
128
+ <View style={[styles.sectionContent, { borderTopColor: themeStyles.borderColor }]}>
129
+ <Text style={[styles.sectionText, { color: themeStyles.mutedTextColor }]}>
130
+ {section.content}
131
+ </Text>
132
+ </View>
133
+ )}
134
+ </View>
135
+ );
136
+ })}
137
+
138
+ <View style={styles.footer}>
139
+ <Text style={[styles.footerText, { color: themeStyles.mutedTextColor }]}>
140
+ Need more help? Visit our Help Center for additional information.
141
+ </Text>
142
+ </View>
143
+ </ScrollView>
144
+ </View>
145
+ );
146
+ };
147
+
148
+ const createStyles = (themeStyles: ReturnType<typeof useThemeStyles>) => StyleSheet.create({
149
+ container: {
150
+ flex: 1,
151
+ },
152
+ content: {
153
+ flex: 1,
154
+ },
155
+ contentContainer: {
156
+ padding: 16,
157
+ paddingBottom: 32,
158
+ },
159
+ introSection: {
160
+ alignItems: 'center',
161
+ paddingVertical: 24,
162
+ paddingHorizontal: 16,
163
+ },
164
+ introIcon: {
165
+ width: 64,
166
+ height: 64,
167
+ borderRadius: 32,
168
+ alignItems: 'center',
169
+ justifyContent: 'center',
170
+ marginBottom: 16,
171
+ },
172
+ introTitle: {
173
+ fontSize: 24,
174
+ fontWeight: '700',
175
+ marginBottom: 8,
176
+ textAlign: 'center',
177
+ },
178
+ introText: {
179
+ fontSize: 16,
180
+ lineHeight: 24,
181
+ textAlign: 'center',
182
+ },
183
+ section: {
184
+ borderRadius: 12,
185
+ borderWidth: 1,
186
+ marginBottom: 12,
187
+ overflow: 'hidden',
188
+ },
189
+ sectionFirst: {
190
+ marginTop: 8,
191
+ },
192
+ sectionHeader: {
193
+ flexDirection: 'row',
194
+ alignItems: 'center',
195
+ padding: 16,
196
+ },
197
+ sectionIconContainer: {
198
+ width: 36,
199
+ height: 36,
200
+ borderRadius: 18,
201
+ alignItems: 'center',
202
+ justifyContent: 'center',
203
+ marginRight: 12,
204
+ },
205
+ sectionTitle: {
206
+ flex: 1,
207
+ fontSize: 16,
208
+ fontWeight: '600',
209
+ marginRight: 12,
210
+ },
211
+ sectionContent: {
212
+ padding: 16,
213
+ paddingTop: 12,
214
+ borderTopWidth: 1,
215
+ },
216
+ sectionText: {
217
+ fontSize: 14,
218
+ lineHeight: 22,
219
+ },
220
+ footer: {
221
+ marginTop: 16,
222
+ paddingHorizontal: 16,
223
+ },
224
+ footerText: {
225
+ fontSize: 14,
226
+ textAlign: 'center',
227
+ lineHeight: 20,
228
+ },
229
+ });
230
+
231
+ export default LearnMoreUsernamesScreen;
@@ -10,7 +10,7 @@ import { toast } from '../../lib/sonner';
10
10
  import { Header, Section, GroupedSection, LoadingState } from '../components';
11
11
  import { useI18n } from '../hooks/useI18n';
12
12
  import { useThemeStyles } from '../hooks/useThemeStyles';
13
- import { useColorScheme } from '../hooks/use-color-scheme';
13
+ import { useColorScheme } from '../hooks/useColorScheme';
14
14
 
15
15
  const LegalDocumentsScreen: React.FC<BaseScreenProps> = ({
16
16
  onClose,
@@ -28,6 +28,9 @@ import { useThemeColors } from '../styles';
28
28
  import { useOxy } from '../context/OxyContext';
29
29
  import QRCode from 'react-native-qrcode-svg';
30
30
  import OxyLogo from '../components/OxyLogo';
31
+ import { createDebugLogger } from '../../shared/utils/debugUtils';
32
+
33
+ const debug = createDebugLogger('OxyAuthScreen');
31
34
 
32
35
  const OXY_ACCOUNTS_WEB_URL = 'https://accounts.oxy.so';
33
36
  const OXY_AUTH_WEB_URL = 'https://auth.oxy.so';
@@ -150,9 +153,7 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
150
153
  }
151
154
  }
152
155
  } catch (err) {
153
- if (__DEV__) {
154
- console.error('Error completing auth:', err);
155
- }
156
+ debug.error('Error completing auth:', err);
156
157
  setError('Authorization successful but failed to complete sign in. Please try again.');
157
158
  isProcessingRef.current = false;
158
159
  }
@@ -173,24 +174,18 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
173
174
  socketRef.current = socket;
174
175
 
175
176
  socket.on('connect', () => {
176
- if (__DEV__) {
177
- console.log('Auth socket connected');
178
- }
177
+ debug.log('Auth socket connected');
179
178
  // Join the room for this session token
180
179
  socket.emit('join', sessionToken);
181
180
  setConnectionType('socket');
182
181
  });
183
182
 
184
183
  socket.on('joined', () => {
185
- if (__DEV__) {
186
- console.log('Joined auth session room');
187
- }
184
+ debug.log('Joined auth session room');
188
185
  });
189
186
 
190
187
  socket.on('auth_update', (payload: AuthUpdatePayload) => {
191
- if (__DEV__) {
192
- console.log('Auth update received:', payload);
193
- }
188
+ debug.log('Auth update received:', payload);
194
189
 
195
190
  if (payload.status === 'authorized' && payload.sessionId) {
196
191
  cleanup();
@@ -205,18 +200,14 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
205
200
  });
206
201
 
207
202
  socket.on('connect_error', (err) => {
208
- if (__DEV__) {
209
- console.log('Socket connection error, falling back to polling:', err.message);
210
- }
203
+ debug.log('Socket connection error, falling back to polling:', err.message);
211
204
  // Fall back to polling if socket fails
212
205
  socket.disconnect();
213
206
  startPolling(sessionToken);
214
207
  });
215
208
 
216
209
  socket.on('disconnect', () => {
217
- if (__DEV__) {
218
- console.log('Auth socket disconnected');
219
- }
210
+ debug.log('Auth socket disconnected');
220
211
  });
221
212
  }, [oxyServices, handleAuthSuccess]);
222
213
 
@@ -247,9 +238,7 @@ const OxyAuthScreen: React.FC<BaseScreenProps> = ({
247
238
  }
248
239
  } catch (err) {
249
240
  // Silent fail for polling - will retry
250
- if (__DEV__) {
251
- console.log('Auth polling error:', err);
252
- }
241
+ debug.log('Auth polling error:', err);
253
242
  }
254
243
  }, POLLING_INTERVAL_MS);
255
244
  }, [oxyServices, handleAuthSuccess]);
@@ -21,7 +21,7 @@ import Avatar from '../components/Avatar';
21
21
  import { useI18n } from '../hooks/useI18n';
22
22
  import { useThemeStyles } from '../hooks/useThemeStyles';
23
23
  import { normalizeTheme } from '../utils/themeUtils';
24
- import { useColorScheme } from '../hooks/use-color-scheme';
24
+ import { useColorScheme } from '../hooks/useColorScheme';
25
25
  import { useOxy } from '../context/OxyContext';
26
26
 
27
27
  interface SubscriptionPlan {