@oxyhq/services 10.1.0 → 10.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/index.js +10 -0
  3. package/lib/commonjs/index.js.map +1 -1
  4. package/lib/commonjs/ui/components/AccountMenu.js +297 -226
  5. package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
  6. package/lib/commonjs/ui/components/AccountMenuButton.js.map +1 -1
  7. package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
  8. package/lib/commonjs/ui/components/SignInModal.js +23 -14
  9. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  10. package/lib/commonjs/ui/components/accountMenuRows.js +18 -30
  11. package/lib/commonjs/ui/components/accountMenuRows.js.map +1 -1
  12. package/lib/commonjs/ui/context/OxyContext.js +33 -65
  13. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  14. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +7 -13
  15. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  16. package/lib/commonjs/ui/hooks/useAuth.js +9 -39
  17. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  18. package/lib/commonjs/ui/hooks/useDeviceAccounts.js +285 -0
  19. package/lib/commonjs/ui/hooks/useDeviceAccounts.js.map +1 -0
  20. package/lib/commonjs/ui/hooks/useSessionManagement.js +5 -6
  21. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  22. package/lib/commonjs/ui/hooks/useSessionSocket.js +4 -5
  23. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  24. package/lib/commonjs/ui/hooks/useWebSSO.js +1 -1
  25. package/lib/commonjs/ui/navigation/routes.js +7 -7
  26. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  27. package/lib/commonjs/ui/screens/OxyAuthScreen.js +21 -12
  28. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  29. package/lib/commonjs/ui/screens/ProfileScreen.js +18 -20
  30. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  31. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +4 -4
  32. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  33. package/lib/commonjs/ui/screens/{karma/KarmaAboutScreen.js → trust/TrustAboutScreen.js} +11 -11
  34. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -0
  35. package/lib/commonjs/ui/screens/{karma/KarmaCenterScreen.js → trust/TrustCenterScreen.js} +91 -41
  36. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -0
  37. package/lib/commonjs/ui/screens/{karma/KarmaFAQScreen.js → trust/TrustFAQScreen.js} +11 -11
  38. package/lib/commonjs/ui/screens/{karma/KarmaFAQScreen.js.map → trust/TrustFAQScreen.js.map} +1 -1
  39. package/lib/commonjs/ui/screens/{karma/KarmaLeaderboardScreen.js → trust/TrustLeaderboardScreen.js} +63 -42
  40. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -0
  41. package/lib/commonjs/ui/screens/{karma/KarmaRewardsScreen.js → trust/TrustRewardsScreen.js} +54 -54
  42. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -0
  43. package/lib/commonjs/ui/screens/{karma/KarmaRulesScreen.js → trust/TrustRulesScreen.js} +45 -16
  44. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -0
  45. package/lib/commonjs/ui/screens/trust/trustTier.js +23 -0
  46. package/lib/commonjs/ui/screens/trust/trustTier.js.map +1 -0
  47. package/lib/commonjs/utils/deviceFlowSignIn.js +12 -10
  48. package/lib/commonjs/utils/deviceFlowSignIn.js.map +1 -1
  49. package/lib/module/index.js +3 -0
  50. package/lib/module/index.js.map +1 -1
  51. package/lib/module/ui/components/AccountMenu.js +297 -226
  52. package/lib/module/ui/components/AccountMenu.js.map +1 -1
  53. package/lib/module/ui/components/AccountMenuButton.js.map +1 -1
  54. package/lib/module/ui/components/OxySignInButton.js +1 -1
  55. package/lib/module/ui/components/SignInModal.js +23 -14
  56. package/lib/module/ui/components/SignInModal.js.map +1 -1
  57. package/lib/module/ui/components/accountMenuRows.js +18 -30
  58. package/lib/module/ui/components/accountMenuRows.js.map +1 -1
  59. package/lib/module/ui/context/OxyContext.js +33 -65
  60. package/lib/module/ui/context/OxyContext.js.map +1 -1
  61. package/lib/module/ui/context/hooks/useAuthOperations.js +7 -13
  62. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  63. package/lib/module/ui/hooks/useAuth.js +9 -39
  64. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  65. package/lib/module/ui/hooks/useDeviceAccounts.js +281 -0
  66. package/lib/module/ui/hooks/useDeviceAccounts.js.map +1 -0
  67. package/lib/module/ui/hooks/useSessionManagement.js +5 -6
  68. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  69. package/lib/module/ui/hooks/useSessionSocket.js +4 -5
  70. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  71. package/lib/module/ui/hooks/useWebSSO.js +1 -1
  72. package/lib/module/ui/navigation/routes.js +7 -7
  73. package/lib/module/ui/navigation/routes.js.map +1 -1
  74. package/lib/module/ui/screens/OxyAuthScreen.js +21 -12
  75. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  76. package/lib/module/ui/screens/ProfileScreen.js +18 -20
  77. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  78. package/lib/module/ui/screens/WelcomeNewUserScreen.js +4 -4
  79. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  80. package/lib/module/ui/screens/{karma/KarmaAboutScreen.js → trust/TrustAboutScreen.js} +11 -11
  81. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -0
  82. package/lib/module/ui/screens/{karma/KarmaCenterScreen.js → trust/TrustCenterScreen.js} +92 -42
  83. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -0
  84. package/lib/module/ui/screens/{karma/KarmaFAQScreen.js → trust/TrustFAQScreen.js} +11 -11
  85. package/lib/module/ui/screens/{karma/KarmaFAQScreen.js.map → trust/TrustFAQScreen.js.map} +1 -1
  86. package/lib/module/ui/screens/{karma/KarmaLeaderboardScreen.js → trust/TrustLeaderboardScreen.js} +63 -42
  87. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -0
  88. package/lib/module/ui/screens/{karma/KarmaRewardsScreen.js → trust/TrustRewardsScreen.js} +54 -54
  89. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -0
  90. package/lib/module/ui/screens/{karma/KarmaRulesScreen.js → trust/TrustRulesScreen.js} +45 -16
  91. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -0
  92. package/lib/module/ui/screens/trust/trustTier.js +19 -0
  93. package/lib/module/ui/screens/trust/trustTier.js.map +1 -0
  94. package/lib/module/utils/deviceFlowSignIn.js +13 -10
  95. package/lib/module/utils/deviceFlowSignIn.js.map +1 -1
  96. package/lib/typescript/commonjs/index.d.ts +3 -1
  97. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  98. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +30 -10
  99. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
  100. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts +1 -1
  101. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/ui/components/accountMenuRows.d.ts +19 -12
  103. package/lib/typescript/commonjs/ui/components/accountMenuRows.d.ts.map +1 -1
  104. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +3 -3
  105. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  107. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +1 -7
  108. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  109. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +3 -7
  110. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  111. package/lib/typescript/commonjs/ui/hooks/useDeviceAccounts.d.ts +133 -0
  112. package/lib/typescript/commonjs/ui/hooks/useDeviceAccounts.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/ui/hooks/useSessionSocket.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/ui/hooks/useWebSSO.d.ts +1 -1
  116. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
  117. package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts +5 -0
  120. package/lib/typescript/commonjs/ui/screens/{karma/KarmaAboutScreen.d.ts.map → trust/TrustAboutScreen.d.ts.map} +1 -1
  121. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts +5 -0
  122. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -0
  123. package/lib/typescript/{module/ui/screens/karma/KarmaFAQScreen.d.ts → commonjs/ui/screens/trust/TrustFAQScreen.d.ts} +1 -1
  124. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts +5 -0
  126. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -0
  127. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts +5 -0
  128. package/lib/typescript/commonjs/ui/screens/{karma/KarmaRewardsScreen.d.ts.map → trust/TrustRewardsScreen.d.ts.map} +1 -1
  129. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts +5 -0
  130. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts +9 -0
  132. package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/ui/types/navigation.d.ts +1 -1
  134. package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts +11 -9
  135. package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts.map +1 -1
  136. package/lib/typescript/module/index.d.ts +3 -1
  137. package/lib/typescript/module/index.d.ts.map +1 -1
  138. package/lib/typescript/module/ui/components/AccountMenu.d.ts +30 -10
  139. package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
  140. package/lib/typescript/module/ui/components/SignInModal.d.ts +1 -1
  141. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  142. package/lib/typescript/module/ui/components/accountMenuRows.d.ts +19 -12
  143. package/lib/typescript/module/ui/components/accountMenuRows.d.ts.map +1 -1
  144. package/lib/typescript/module/ui/context/OxyContext.d.ts +3 -3
  145. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  146. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  147. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +1 -7
  148. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  149. package/lib/typescript/module/ui/hooks/useAuth.d.ts +3 -7
  150. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  151. package/lib/typescript/module/ui/hooks/useDeviceAccounts.d.ts +133 -0
  152. package/lib/typescript/module/ui/hooks/useDeviceAccounts.d.ts.map +1 -0
  153. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  154. package/lib/typescript/module/ui/hooks/useSessionSocket.d.ts.map +1 -1
  155. package/lib/typescript/module/ui/hooks/useWebSSO.d.ts +1 -1
  156. package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
  157. package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  158. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  159. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts +5 -0
  160. package/lib/typescript/module/ui/screens/{karma/KarmaAboutScreen.d.ts.map → trust/TrustAboutScreen.d.ts.map} +1 -1
  161. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts +5 -0
  162. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -0
  163. package/lib/typescript/{commonjs/ui/screens/karma/KarmaFAQScreen.d.ts → module/ui/screens/trust/TrustFAQScreen.d.ts} +1 -1
  164. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -0
  165. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts +5 -0
  166. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -0
  167. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts +5 -0
  168. package/lib/typescript/module/ui/screens/{karma/KarmaRewardsScreen.d.ts.map → trust/TrustRewardsScreen.d.ts.map} +1 -1
  169. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts +5 -0
  170. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -0
  171. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts +9 -0
  172. package/lib/typescript/module/ui/screens/trust/trustTier.d.ts.map +1 -0
  173. package/lib/typescript/module/ui/types/navigation.d.ts +1 -1
  174. package/lib/typescript/module/utils/deviceFlowSignIn.d.ts +11 -9
  175. package/lib/typescript/module/utils/deviceFlowSignIn.d.ts.map +1 -1
  176. package/package.json +1 -1
  177. package/src/index.ts +10 -1
  178. package/src/ui/components/AccountMenu.tsx +311 -253
  179. package/src/ui/components/AccountMenuButton.tsx +2 -2
  180. package/src/ui/components/OxySignInButton.tsx +1 -1
  181. package/src/ui/components/SignInModal.tsx +26 -16
  182. package/src/ui/components/accountMenuRows.ts +28 -40
  183. package/src/ui/context/OxyContext.tsx +43 -61
  184. package/src/ui/context/hooks/useAuthOperations.ts +7 -13
  185. package/src/ui/hooks/useAuth.ts +11 -48
  186. package/src/ui/hooks/useDeviceAccounts.ts +348 -0
  187. package/src/ui/hooks/useSessionManagement.ts +5 -14
  188. package/src/ui/hooks/useSessionSocket.ts +4 -5
  189. package/src/ui/hooks/useWebSSO.ts +1 -1
  190. package/src/ui/navigation/routes.ts +13 -13
  191. package/src/ui/screens/OxyAuthScreen.tsx +21 -12
  192. package/src/ui/screens/ProfileScreen.tsx +15 -17
  193. package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
  194. package/src/ui/screens/{karma/KarmaAboutScreen.tsx → trust/TrustAboutScreen.tsx} +15 -15
  195. package/src/ui/screens/{karma/KarmaCenterScreen.tsx → trust/TrustCenterScreen.tsx} +87 -41
  196. package/src/ui/screens/{karma/KarmaFAQScreen.tsx → trust/TrustFAQScreen.tsx} +10 -10
  197. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +101 -0
  198. package/src/ui/screens/{karma/KarmaRewardsScreen.tsx → trust/TrustRewardsScreen.tsx} +54 -54
  199. package/src/ui/screens/{karma/KarmaRulesScreen.tsx → trust/TrustRulesScreen.tsx} +27 -13
  200. package/src/ui/screens/trust/trustTier.ts +20 -0
  201. package/src/ui/types/navigation.ts +1 -2
  202. package/src/utils/__tests__/deviceFlowSignIn.test.ts +2 -3
  203. package/src/utils/deviceFlowSignIn.ts +18 -12
  204. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +0 -1
  205. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +0 -1
  206. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +0 -1
  207. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +0 -1
  208. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +0 -1
  209. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +0 -1
  210. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +0 -1
  211. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +0 -1
  212. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +0 -1
  213. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +0 -1
  214. package/lib/typescript/commonjs/ui/screens/karma/KarmaAboutScreen.d.ts +0 -5
  215. package/lib/typescript/commonjs/ui/screens/karma/KarmaCenterScreen.d.ts +0 -5
  216. package/lib/typescript/commonjs/ui/screens/karma/KarmaCenterScreen.d.ts.map +0 -1
  217. package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +0 -1
  218. package/lib/typescript/commonjs/ui/screens/karma/KarmaLeaderboardScreen.d.ts +0 -5
  219. package/lib/typescript/commonjs/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +0 -1
  220. package/lib/typescript/commonjs/ui/screens/karma/KarmaRewardsScreen.d.ts +0 -5
  221. package/lib/typescript/commonjs/ui/screens/karma/KarmaRulesScreen.d.ts +0 -5
  222. package/lib/typescript/commonjs/ui/screens/karma/KarmaRulesScreen.d.ts.map +0 -1
  223. package/lib/typescript/module/ui/screens/karma/KarmaAboutScreen.d.ts +0 -5
  224. package/lib/typescript/module/ui/screens/karma/KarmaCenterScreen.d.ts +0 -5
  225. package/lib/typescript/module/ui/screens/karma/KarmaCenterScreen.d.ts.map +0 -1
  226. package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +0 -1
  227. package/lib/typescript/module/ui/screens/karma/KarmaLeaderboardScreen.d.ts +0 -5
  228. package/lib/typescript/module/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +0 -1
  229. package/lib/typescript/module/ui/screens/karma/KarmaRewardsScreen.d.ts +0 -5
  230. package/lib/typescript/module/ui/screens/karma/KarmaRulesScreen.d.ts +0 -5
  231. package/lib/typescript/module/ui/screens/karma/KarmaRulesScreen.d.ts.map +0 -1
  232. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +0 -88
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { useQuery } from '@tanstack/react-query';
5
+ import { getAccountDisplayName, getAccountFallbackHandle } from '@oxyhq/core';
6
+ import { useOxy } from "../context/OxyContext.js";
7
+ import { useI18n } from "./useI18n.js";
8
+ import { queryKeys } from "./queries/queryKeys.js";
9
+
10
+ /**
11
+ * The per-account user shape carried by a {@link DeviceAccount}. Either:
12
+ * - the minimal projection returned by `POST /auth/refresh-all`
13
+ * ({@link RefreshAllAccountUser}, the shared apex path), or
14
+ * - the SDK's canonical {@link User} document (the active row on the local
15
+ * fallback path, which already has the full user loaded in `useOxy()`).
16
+ *
17
+ * Both satisfy `getAccountDisplayName`'s `DisplayNameUserShape`, so display
18
+ * resolution is uniform across paths.
19
+ */
20
+
21
+ /**
22
+ * One signed-in account on this device, fully hydrated for the account
23
+ * chooser. Unlike the old `AccountMenu` behaviour (which only carried the
24
+ * ACTIVE session's user), EVERY entry here carries real per-account
25
+ * `displayName` / `email` / `avatarUrl` / `color`.
26
+ */
27
+
28
+ /**
29
+ * Resolve which entries are the current account, robustly.
30
+ *
31
+ * Primary signal: `entry.sessionId === activeSessionId`. On the web shared-apex
32
+ * path, `refreshAllSessions()` returns SERVER-side session ids that may not
33
+ * equal the locally-stored `activeSessionId` (a different storage namespace /
34
+ * server perspective), so a pure `sessionId` match can flag NO row as current —
35
+ * the bug that surfaced as "Not signed in" even while authenticated.
36
+ *
37
+ * Fallbacks, applied only when the `sessionId` match found nothing AND the user
38
+ * is authenticated:
39
+ * 1. Match the live `user.id` against each entry's per-account user id.
40
+ * 2. If still nothing and there is exactly one account, mark that one current.
41
+ *
42
+ * At most ONE entry is ever marked current.
43
+ *
44
+ * Pure & side-effect free so it is unit-testable without rendering React.
45
+ */
46
+ export function markCurrentAccount(accounts, activeSessionId, liveUserId, isAuthenticated) {
47
+ const bySession = accounts.map(account => ({
48
+ ...account,
49
+ isCurrent: Boolean(activeSessionId) && account.sessionId === activeSessionId
50
+ }));
51
+ if (bySession.some(account => account.isCurrent) || !isAuthenticated) {
52
+ return bySession;
53
+ }
54
+
55
+ // No row matched by session id: fall back to the live user's id, marking at
56
+ // most the FIRST matching entry current (never more than one).
57
+ if (liveUserId) {
58
+ let matched = false;
59
+ const byUser = bySession.map(account => {
60
+ if (!matched && account.user.id === liveUserId) {
61
+ matched = true;
62
+ return {
63
+ ...account,
64
+ isCurrent: true
65
+ };
66
+ }
67
+ return account;
68
+ });
69
+ if (matched) {
70
+ return byUser;
71
+ }
72
+ }
73
+
74
+ // Authenticated, nothing matched, but there is exactly one account → it must
75
+ // be the current one (single-account shared-apex / cross-domain case).
76
+ if (bySession.length === 1) {
77
+ return [{
78
+ ...bySession[0],
79
+ isCurrent: true
80
+ }];
81
+ }
82
+ return bySession;
83
+ }
84
+
85
+ /**
86
+ * Resolve every account signed in on this device for the unified account
87
+ * switcher, with real per-account name / email / avatar / color.
88
+ *
89
+ * ## Data sources (web vs native)
90
+ *
91
+ * - **Web on a `*.oxy.so` host** → `oxyServices.refreshAllSessions()` returns
92
+ * the full apex device-account list (identical to what `auth.oxy.so` sees,
93
+ * because the `Domain=oxy.so` refresh cookies reach `api.oxy.so`). Used
94
+ * directly — this is the `fromSharedApex: true` path.
95
+ * - **Cross-domain web (non-`oxy.so` apex)** OR **native (no browser cookies)**
96
+ * → `refreshAllSessions()` yields `{ accounts: [] }` (the apex cookies never
97
+ * reach the request: cross-domain by `Domain`, native by having no cookie
98
+ * jar at all; a 401 is also normalised to `{ accounts: [] }` inside the
99
+ * core mixin). In that case we FALL BACK to the SDK's local multi-account
100
+ * list from `useOxy()` (`sessions` + `activeSessionId` + the active `user`).
101
+ * This is the `fromSharedApex: false` path.
102
+ *
103
+ * The fallback decision is purely data-driven: **if `refreshAllSessions()`
104
+ * returns >0 accounts, use the shared path; otherwise fall back to local
105
+ * `useOxy()` sessions.** No host sniffing is needed — the cookie scoping does
106
+ * the discrimination for us, and the same code path works on native (where the
107
+ * fetch returns `{ accounts: [] }`).
108
+ *
109
+ * ## Why React Query (not a `useRef`/`useState` start-once like the auth app)
110
+ *
111
+ * The auth app's `use-device-accounts.ts` hand-rolls a `startedRef` because it
112
+ * has no React Query. The SDK does. `refreshAllSessions()` ROTATES single-use
113
+ * refresh cookies on every call, so it must run AT MOST ONCE per page load:
114
+ * we model that with `staleTime: Infinity` + `gcTime: Infinity` +
115
+ * `refetchOnWindowFocus/Reconnect/Mount: false` + `retry: false`. React Query
116
+ * dedupes concurrent mounts and caches the single result for the page's
117
+ * lifetime — the exact "run once" guarantee the auth app documents, but
118
+ * without the manual ref/state machinery.
119
+ *
120
+ * ## Validation note (intentionally NO zod re-parse)
121
+ *
122
+ * The auth app's hook calls `fetch` directly, so IT must `safeParse` the wire
123
+ * response with `@oxyhq/contracts`. This hook calls
124
+ * `oxyServices.refreshAllSessions()`, whose core mixin ALREADY validates and
125
+ * normalises the wire response (skips entries missing required fields,
126
+ * normalises `authuser` null→0, builds the `RefreshAllAccountUser` shape) — the
127
+ * mixin is the single source of truth. Re-validating the SDK's own already-typed
128
+ * output here would be redundant double-validation, so we do not re-parse.
129
+ *
130
+ * ## Error handling
131
+ *
132
+ * `refreshAllSessions()` already maps 401/404/abort to `{ accounts: [] }`
133
+ * internally. Any OTHER failure (network, 5xx) propagates as a thrown error and
134
+ * is surfaced by React Query (`query.isError`) — never swallowed. Callers that
135
+ * don't care can ignore it; the hook still returns the local fallback list so
136
+ * the chooser stays usable.
137
+ */
138
+ export function useDeviceAccounts() {
139
+ const {
140
+ oxyServices,
141
+ sessions,
142
+ activeSessionId,
143
+ user,
144
+ isAuthenticated
145
+ } = useOxy();
146
+ const {
147
+ locale
148
+ } = useI18n();
149
+
150
+ // Stable, per-API-origin query key. `refreshAllSessions` resolves against
151
+ // the session base url derived from `getBaseURL()`, so keying on it scopes
152
+ // the cached result to the API the provider is pointed at.
153
+ const baseURL = oxyServices.getBaseURL();
154
+ const query = useQuery({
155
+ queryKey: [...queryKeys.accounts.all, 'deviceAccounts', baseURL],
156
+ queryFn: () => oxyServices.refreshAllSessions(),
157
+ // Only attempt the shared apex path while signed in. When logged out
158
+ // there is nothing to enumerate and the fallback (also empty) is used.
159
+ enabled: isAuthenticated,
160
+ // Single-use cookie rotation → run at most once per page load.
161
+ staleTime: Number.POSITIVE_INFINITY,
162
+ gcTime: Number.POSITIVE_INFINITY,
163
+ refetchOnWindowFocus: false,
164
+ refetchOnReconnect: false,
165
+ refetchOnMount: false,
166
+ retry: false
167
+ });
168
+ const sharedAccounts = query.data?.accounts ?? [];
169
+ const fromSharedApex = sharedAccounts.length > 0;
170
+ const accounts = useMemo(() => {
171
+ const resolveAvatarUrl = avatar => avatar ? oxyServices.getFileDownloadUrl(avatar, 'thumb') : undefined;
172
+
173
+ // Build a single current-account row from the live `useOxy().user`. Used
174
+ // as a last-resort fallback when neither the shared-apex probe nor the
175
+ // local session store yielded a row but the user IS authenticated (e.g.
176
+ // a cross-domain host where the apex probe returned empty before the
177
+ // local session store hydrated). The signed-in user must ALWAYS be
178
+ // represented. Email is the REAL email or the `@handle` line — never a
179
+ // synthesized `username@oxy.so`.
180
+ const liveUserRow = () => {
181
+ if (!isAuthenticated || !user || !activeSessionId) {
182
+ return [];
183
+ }
184
+ const displayName = getAccountDisplayName(user, locale);
185
+ const handle = getAccountFallbackHandle(user);
186
+ const secondaryHandle = handle ? `@${handle}` : null;
187
+ return [{
188
+ sessionId: activeSessionId,
189
+ authuser: undefined,
190
+ isCurrent: true,
191
+ displayName,
192
+ email: user.email ?? secondaryHandle,
193
+ avatarUrl: resolveAvatarUrl(user.avatar),
194
+ color: user.color ?? null,
195
+ user
196
+ }];
197
+ };
198
+ let built;
199
+ if (fromSharedApex) {
200
+ // Shared apex path: every entry carries a real per-account user.
201
+ built = sharedAccounts.map(entry => {
202
+ // `entry.user` is non-null on the refresh-all path; the core
203
+ // mixin skips entries without a valid user. The fallback below
204
+ // keeps rendering defensive if a server response is incomplete.
205
+ const accountUser = entry.user ?? {
206
+ id: '',
207
+ username: ''
208
+ };
209
+ const displayName = getAccountDisplayName(accountUser, locale);
210
+ const handle = getAccountFallbackHandle(accountUser);
211
+ const email = entry.user?.email ?? null;
212
+ const secondaryHandle = handle ? `@${handle}` : null;
213
+ return {
214
+ sessionId: entry.sessionId,
215
+ authuser: entry.authuser,
216
+ // Provisional; finalised by `markCurrentAccount` below so the
217
+ // shared-apex path is robust to server/local session-id skew.
218
+ isCurrent: false,
219
+ displayName,
220
+ // Real email, or null (NEVER synthesized). The UI uses the
221
+ // `@handle` line only when email is genuinely absent.
222
+ email: email ?? secondaryHandle,
223
+ avatarUrl: resolveAvatarUrl(entry.user?.avatar),
224
+ color: entry.user?.color ?? null,
225
+ user: accountUser
226
+ };
227
+ });
228
+ } else {
229
+ // Local fallback path: build from the SDK's multi-session store. The
230
+ // active session row gets the full loaded `user`; inactive fallback
231
+ // rows carry only what the `ClientSession` exposes (no synthesized
232
+ // identity — they show the active user's data only when active).
233
+ built = (sessions ?? []).map(session => {
234
+ const isCurrent = session.sessionId === activeSessionId;
235
+ const accountUser = isCurrent && user ? user : {
236
+ id: session.userId ?? '',
237
+ username: ''
238
+ };
239
+ const displayName = getAccountDisplayName(accountUser, locale);
240
+ const handle = getAccountFallbackHandle(accountUser);
241
+ const email = isCurrent && user?.email ? user.email : null;
242
+ const secondaryHandle = handle ? `@${handle}` : null;
243
+ const avatar = isCurrent && user ? user.avatar : undefined;
244
+ const color = isCurrent && user?.color ? user.color : null;
245
+ return {
246
+ sessionId: session.sessionId,
247
+ authuser: session.authuser,
248
+ isCurrent,
249
+ displayName,
250
+ email: email ?? secondaryHandle,
251
+ avatarUrl: resolveAvatarUrl(avatar),
252
+ color,
253
+ user: accountUser
254
+ };
255
+ });
256
+ }
257
+
258
+ // Robust current-account detection: tolerate server/local session-id
259
+ // skew on the shared-apex path by falling back to the live user's id and
260
+ // the single-account heuristic.
261
+ const flagged = markCurrentAccount(built, activeSessionId, user?.id ?? null, isAuthenticated);
262
+
263
+ // The signed-in user must ALWAYS be represented. If detection produced
264
+ // an empty list yet the user is authenticated, synthesize a single
265
+ // current row from the live `useOxy().user`.
266
+ if (flagged.length === 0) {
267
+ return liveUserRow();
268
+ }
269
+ return flagged;
270
+ }, [fromSharedApex, sharedAccounts, sessions, activeSessionId, user, isAuthenticated, locale, oxyServices]);
271
+ return {
272
+ accounts,
273
+ // `isLoading` only reflects the shared probe while it's the relevant
274
+ // source. Once we know we're on the fallback (probe settled with 0
275
+ // accounts) the local list is synchronously available.
276
+ isLoading: isAuthenticated && query.isLoading,
277
+ currentSessionId: activeSessionId ?? null,
278
+ fromSharedApex
279
+ };
280
+ }
281
+ //# sourceMappingURL=useDeviceAccounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","useQuery","getAccountDisplayName","getAccountFallbackHandle","useOxy","useI18n","queryKeys","markCurrentAccount","accounts","activeSessionId","liveUserId","isAuthenticated","bySession","map","account","isCurrent","Boolean","sessionId","some","matched","byUser","user","id","length","useDeviceAccounts","oxyServices","sessions","locale","baseURL","getBaseURL","query","queryKey","all","queryFn","refreshAllSessions","enabled","staleTime","Number","POSITIVE_INFINITY","gcTime","refetchOnWindowFocus","refetchOnReconnect","refetchOnMount","retry","sharedAccounts","data","fromSharedApex","resolveAvatarUrl","avatar","getFileDownloadUrl","undefined","liveUserRow","displayName","handle","secondaryHandle","authuser","email","avatarUrl","color","built","entry","accountUser","username","session","userId","flagged","isLoading","currentSessionId"],"sourceRoot":"../../../../src","sources":["ui/hooks/useDeviceAccounts.ts"],"mappings":"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","ignoreList":[]}
@@ -143,14 +143,13 @@ export const useSessionManagement = ({
143
143
  onAuthStateChange?.(null);
144
144
  }, [clearSessionStorage, logoutStore, onAuthStateChange, oxyServices, queryClient, storage, logger]);
145
145
  const activateSession = useCallback(async (sessionId, user) => {
146
- await oxyServices.getTokenBySession(sessionId);
147
146
  setTokenReady?.(true);
148
147
  setActiveSessionId(sessionId);
149
148
  loginSuccess(user);
150
149
  await saveActiveSessionId(sessionId);
151
150
  await applyLanguagePreference(user);
152
151
  onAuthStateChange?.(user);
153
- }, [applyLanguagePreference, loginSuccess, onAuthStateChange, oxyServices, saveActiveSessionId, setTokenReady]);
152
+ }, [applyLanguagePreference, loginSuccess, onAuthStateChange, saveActiveSessionId, setTokenReady]);
154
153
  const removalTimerIdsRef = useRef(new Set());
155
154
  const trackRemovedSession = useCallback(sessionId => {
156
155
  removedSessionsRef.current.add(sessionId);
@@ -192,10 +191,10 @@ export const useSessionManagement = ({
192
191
  // `refreshAllSessions` it carries its `authuser` slot index. We
193
192
  // proactively plant that slot's access token via the httpOnly
194
193
  // refresh cookie BEFORE validating, so the bearer-protected
195
- // validate/getCurrentUser calls don't need a token that was never
196
- // in memory (cold reload / different browser tab). The native path
197
- // has no per-session cookies and continues to rely on
198
- // `validateSession` + `getTokenBySession` directly.
194
+ // validate/getCurrentUser calls have the correct in-memory token
195
+ // after a cold reload or account switch in another tab. The native
196
+ // path arrives here only after a bearer has been planted by
197
+ // `claimSessionByToken` or secure shared-session restore.
199
198
  if (isWebBrowser()) {
200
199
  const targetSession = sessionsRef.current.find(s => s.sessionId === sessionId);
201
200
  const targetAuthuser = targetSession?.authuser;
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","mergeSessions","normalizeAndSortSessions","sessionsArraysEqual","fetchSessionsWithFallback","validateSessionBatch","getStorageKeys","handleAuthError","isInvalidSessionError","clearQueryCache","isWebBrowser","writeActiveAuthuser","DEFAULT_SAVE_ERROR_MESSAGE","CLEAR_STORAGE_ERROR","useSessionManagement","oxyServices","storage","storageKeyPrefix","loginSuccess","logoutStore","applyLanguagePreference","onAuthStateChange","onError","setAuthError","logger","setTokenReady","queryClient","sessions","setSessions","activeSessionId","setActiveSessionId","sessionsRef","current","activeSessionIdRef","refreshInFlightRef","removedSessionsRef","Set","lastRefreshRef","storageKeys","saveSessionIds","sessionIds","uniqueIds","Array","from","setItem","JSON","stringify","error","__DEV__","console","warn","updateSessions","incoming","options","prevSessions","processed","merge","map","session","sessionId","saveActiveSessionId","defaultMessage","code","removeActiveSessionId","removeItem","clearSessionStorage","clearSessionState","clearTokens","clear","activateSession","user","getTokenBySession","removalTimerIdsRef","trackRemovedSession","add","timerId","setTimeout","delete","forEach","clearTimeout","findReplacementSession","length","validationResults","maxConcurrency","validSession","find","result","valid","validation","validateSession","useHeaderValidation","switchSession","targetSession","s","targetAuthuser","authuser","refreshed","refreshTokenViaCookie","Error","httpService","setTokens","accessToken","deviceSessions","fallbackUserId","id","invalidSession","filter","otherSessionIds","has","replacementUser","refreshSessions","activeUserId","now","Date","refreshPromise","otherSessions","isRefreshInFlight","Boolean"],"sourceRoot":"../../../../src","sources":["ui/hooks/useSessionManagement.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","mergeSessions","normalizeAndSortSessions","sessionsArraysEqual","fetchSessionsWithFallback","validateSessionBatch","getStorageKeys","handleAuthError","isInvalidSessionError","clearQueryCache","isWebBrowser","writeActiveAuthuser","DEFAULT_SAVE_ERROR_MESSAGE","CLEAR_STORAGE_ERROR","useSessionManagement","oxyServices","storage","storageKeyPrefix","loginSuccess","logoutStore","applyLanguagePreference","onAuthStateChange","onError","setAuthError","logger","setTokenReady","queryClient","sessions","setSessions","activeSessionId","setActiveSessionId","sessionsRef","current","activeSessionIdRef","refreshInFlightRef","removedSessionsRef","Set","lastRefreshRef","storageKeys","saveSessionIds","sessionIds","uniqueIds","Array","from","setItem","JSON","stringify","error","__DEV__","console","warn","updateSessions","incoming","options","prevSessions","processed","merge","map","session","sessionId","saveActiveSessionId","defaultMessage","code","removeActiveSessionId","removeItem","clearSessionStorage","clearSessionState","clearTokens","clear","activateSession","user","removalTimerIdsRef","trackRemovedSession","add","timerId","setTimeout","delete","forEach","clearTimeout","findReplacementSession","length","validationResults","maxConcurrency","validSession","find","result","valid","validation","validateSession","useHeaderValidation","switchSession","targetSession","s","targetAuthuser","authuser","refreshed","refreshTokenViaCookie","Error","httpService","setTokens","accessToken","deviceSessions","fallbackUserId","id","invalidSession","filter","otherSessionIds","has","replacementUser","refreshSessions","activeUserId","now","Date","refreshPromise","otherSessions","isRefreshInFlight","Boolean"],"sourceRoot":"../../../../src","sources":["ui/hooks/useSessionManagement.ts"],"mappings":"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","ignoreList":[]}
@@ -118,8 +118,7 @@ export function useSessionSocket({
118
118
  // appear in the switch. Anything unknown falls through to `default`,
119
119
  // which is intentionally a no-op for session lifecycle — it only logs
120
120
  // in dev. This guards against future server-side event additions
121
- // (e.g. `session_created`) accidentally triggering sign-out via a
122
- // "legacy fallback" branch.
121
+ // accidentally triggering sign-out.
123
122
  switch (data.type) {
124
123
  case 'session_removed':
125
124
  {
@@ -165,9 +164,9 @@ export function useSessionSocket({
165
164
  case 'session_update':
166
165
  {
167
166
  // Lifecycle event for the current user. Just resync the sessions
168
- // list — never sign out. Historically this branch had a legacy
169
- // fallback that compared `data.sessionId === currentActiveSessionId`
170
- // and signed the user out if true, which was catastrophic: a
167
+ // list — never sign out. A prior implementation compared
168
+ // `data.sessionId === currentActiveSessionId` and signed the user
169
+ // out if true, which was catastrophic: a
171
170
  // `session_created` event fired immediately after a successful
172
171
  // sign-in carries the user's NEW (now-active) session id, which
173
172
  // matched and triggered an instant remote sign-out toast on every
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","io","toast","logger","createDebugLogger","debug","useSessionSocket","userId","activeSessionId","currentDeviceId","refreshSessions","clearSessionState","baseURL","getAccessToken","onRemoteSignOut","onSessionRemoved","socketRef","refreshSessionsRef","clearSessionStateRef","onRemoteSignOutRef","onSessionRemovedRef","activeSessionIdRef","currentDeviceIdRef","getAccessTokenRef","current","disconnect","transports","auth","cb","token","socket","handleConnect","log","id","refreshSessionsSafe","catch","error","__DEV__","component","triggerLocalSignOut","toastMessage","errorContext","info","Error","String","handleSessionUpdate","data","currentActiveSessionId","currentDeviceIdValue","type","sessionId","sessionIds","deviceId","includes","warn","on","off"],"sourceRoot":"../../../../src","sources":["ui/hooks/useSessionSocket.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","io","toast","logger","createDebugLogger","debug","useSessionSocket","userId","activeSessionId","currentDeviceId","refreshSessions","clearSessionState","baseURL","getAccessToken","onRemoteSignOut","onSessionRemoved","socketRef","refreshSessionsRef","clearSessionStateRef","onRemoteSignOutRef","onSessionRemovedRef","activeSessionIdRef","currentDeviceIdRef","getAccessTokenRef","current","disconnect","transports","auth","cb","token","socket","handleConnect","log","id","refreshSessionsSafe","catch","error","__DEV__","component","triggerLocalSignOut","toastMessage","errorContext","info","Error","String","handleSessionUpdate","data","currentActiveSessionId","currentDeviceIdValue","type","sessionId","sessionIds","deviceId","includes","warn","on","off"],"sourceRoot":"../../../../src","sources":["ui/hooks/useSessionSocket.ts"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@
10
10
  * without relying on third-party cookies.
11
11
  *
12
12
  * For browsers without FedCM support, users will need to click a sign-in button
13
- * which triggers a popup-based authentication flow.
13
+ * which triggers redirect authentication.
14
14
  *
15
15
  * This is called automatically by OxyContext on web platforms.
16
16
  *
@@ -33,13 +33,13 @@ const screenLoaders = {
33
33
  EditProfileField: () => require('../screens/EditProfileFieldScreen').default,
34
34
  // Informational screens
35
35
  LearnMoreUsernames: () => require('../screens/LearnMoreUsernamesScreen').default,
36
- // Karma screens
37
- KarmaCenter: () => require('../screens/karma/KarmaCenterScreen').default,
38
- KarmaLeaderboard: () => require('../screens/karma/KarmaLeaderboardScreen').default,
39
- KarmaRewards: () => require('../screens/karma/KarmaRewardsScreen').default,
40
- KarmaRules: () => require('../screens/karma/KarmaRulesScreen').default,
41
- AboutKarma: () => require('../screens/karma/KarmaAboutScreen').default,
42
- KarmaFAQ: () => require('../screens/karma/KarmaFAQScreen').default,
36
+ // Oxy Trust screens
37
+ TrustCenter: () => require('../screens/trust/TrustCenterScreen').default,
38
+ TrustLeaderboard: () => require('../screens/trust/TrustLeaderboardScreen').default,
39
+ TrustRewards: () => require('../screens/trust/TrustRewardsScreen').default,
40
+ TrustRules: () => require('../screens/trust/TrustRulesScreen').default,
41
+ AboutTrust: () => require('../screens/trust/TrustAboutScreen').default,
42
+ TrustFAQ: () => require('../screens/trust/TrustFAQScreen').default,
43
43
  // User list screens (followers/following)
44
44
  FollowersList: () => require('../screens/FollowersListScreen').default,
45
45
  FollowingList: () => require('../screens/FollowingListScreen').default,
@@ -1 +1 @@
1
- {"version":3,"names":["screenLoaders","OxyAuth","require","default","ManageAccount","AccountVerification","PaymentGateway","Profile","LanguageSelector","PrivacySettings","SearchSettings","FileManagement","HelpSupport","FAQ","Feedback","LegalDocuments","AppInfo","PremiumSubscription","WelcomeNewUser","UserLinks","HistoryView","SavesCollections","EditProfileField","LearnMoreUsernames","KarmaCenter","KarmaLeaderboard","KarmaRewards","KarmaRules","AboutKarma","KarmaFAQ","FollowersList","FollowingList","CreateManagedAccount","AvatarCrop","Notifications","ConnectedApps","Preferences","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","isValidRoute","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","DEFAULT_SHEET_CONFIG","scrollable","manualActivation","dynamicBackdrop","getSheetConfig","screenProps"],"sourceRoot":"../../../../src","sources":["ui/navigation/routes.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["screenLoaders","OxyAuth","require","default","ManageAccount","AccountVerification","PaymentGateway","Profile","LanguageSelector","PrivacySettings","SearchSettings","FileManagement","HelpSupport","FAQ","Feedback","LegalDocuments","AppInfo","PremiumSubscription","WelcomeNewUser","UserLinks","HistoryView","SavesCollections","EditProfileField","LearnMoreUsernames","TrustCenter","TrustLeaderboard","TrustRewards","TrustRules","AboutTrust","TrustFAQ","FollowersList","FollowingList","CreateManagedAccount","AvatarCrop","Notifications","ConnectedApps","Preferences","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","isValidRoute","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","DEFAULT_SHEET_CONFIG","scrollable","manualActivation","dynamicBackdrop","getSheetConfig","screenProps"],"sourceRoot":"../../../../src","sources":["ui/navigation/routes.ts"],"mappings":"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","ignoreList":[]}
@@ -117,13 +117,12 @@ const OxyAuthScreen = ({
117
117
  // `claimSessionByToken` — the device-flow equivalent of OAuth's
118
118
  // code-for-token exchange (RFC 8628 §3.4).
119
119
  //
120
- // Without that exchange the SDK has no bearer token, so the subsequent
121
- // `switchSession` -> `getTokenBySession` call (`GET /session/token/:id`) 401s
122
- // against the C1-hardened API the session is authorized server-side but the
123
- // app never becomes authenticated and the sheet sits "Waiting for
124
- // authorization..." forever. Once `claimSessionByToken` plants the tokens in
125
- // the HttpService, the rest of the session wiring flows through the normal
126
- // `switchSession` path. This mirrors `SignInModal`'s web flow exactly.
120
+ // Without that exchange the SDK has no bearer token the session is
121
+ // authorized server-side but the app never becomes authenticated and the
122
+ // sheet sits "Waiting for authorization..." forever. Once
123
+ // `claimSessionByToken` plants the tokens in the HttpService, the rest of the
124
+ // session wiring flows through the normal `switchSession` path. This mirrors
125
+ // `SignInModal`'s web flow exactly.
127
126
  const handleAuthSuccess = useCallback(async (sessionId, sessionToken) => {
128
127
  if (isProcessingRef.current) return;
129
128
  isProcessingRef.current = true;
@@ -189,8 +188,11 @@ const OxyAuthScreen = ({
189
188
  });
190
189
  socket.on('connect_error', err => {
191
190
  debug.log('Socket connection error, falling back to polling:', err instanceof Error ? err.message : null);
192
- // Fall back to polling if socket fails
191
+ // Realtime transport errored reflect the honest connection state. The
192
+ // poll is already running (started unconditionally in
193
+ // `generateAuthSession`), so `startPolling` here is a no-op backstop.
193
194
  socket.disconnect();
195
+ setConnectionType('polling');
194
196
  startPolling(sessionToken);
195
197
  });
196
198
  socket.on('disconnect', () => {
@@ -198,9 +200,13 @@ const OxyAuthScreen = ({
198
200
  });
199
201
  }, [oxyServices, handleAuthSuccess]);
200
202
 
201
- // Start polling for authorization (fallback)
203
+ // Start polling for authorization.
204
+ //
205
+ // Idempotent: if a poll interval is already running this is a no-op, so the
206
+ // `connect_error` path (which also calls this) cannot stack a second interval
207
+ // on top of the always-on poll started in `generateAuthSession`.
202
208
  const startPolling = useCallback(sessionToken => {
203
- setConnectionType('polling');
209
+ if (pollingIntervalRef.current) return;
204
210
  pollingIntervalRef.current = setInterval(async () => {
205
211
  if (isProcessingRef.current) return;
206
212
  try {
@@ -274,14 +280,17 @@ const OxyAuthScreen = ({
274
280
  });
275
281
  setIsWaiting(true);
276
282
 
277
- // Try socket first, will fall back to polling if needed
283
+ // Socket is the fast path; the poll is a transport-independent backstop
284
+ // that guarantees completion even if the socket connects but silently
285
+ // never delivers auth_update (RN transport / idle-timeout).
278
286
  connectSocket(sessionToken);
287
+ startPolling(sessionToken);
279
288
  } catch (err) {
280
289
  setError((err instanceof Error ? err.message : null) || 'Failed to create auth session');
281
290
  } finally {
282
291
  setIsLoading(false);
283
292
  }
284
- }, [oxyServices, connectSocket, clientId]);
293
+ }, [oxyServices, connectSocket, startPolling, clientId]);
285
294
 
286
295
  // Generate a random session token
287
296
  const generateSessionToken = () => {