@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.
- package/README.md +2 -2
- package/lib/commonjs/index.js +10 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/AccountMenu.js +297 -226
- package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
- package/lib/commonjs/ui/components/AccountMenuButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
- package/lib/commonjs/ui/components/SignInModal.js +23 -14
- package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
- package/lib/commonjs/ui/components/accountMenuRows.js +18 -30
- package/lib/commonjs/ui/components/accountMenuRows.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +33 -65
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +7 -13
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAuth.js +9 -39
- package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
- package/lib/commonjs/ui/hooks/useDeviceAccounts.js +285 -0
- package/lib/commonjs/ui/hooks/useDeviceAccounts.js.map +1 -0
- package/lib/commonjs/ui/hooks/useSessionManagement.js +5 -6
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +4 -5
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/hooks/useWebSSO.js +1 -1
- package/lib/commonjs/ui/navigation/routes.js +7 -7
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +21 -12
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +18 -20
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +4 -4
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/{karma/KarmaAboutScreen.js → trust/TrustAboutScreen.js} +11 -11
- package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/{karma/KarmaCenterScreen.js → trust/TrustCenterScreen.js} +91 -41
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/{karma/KarmaFAQScreen.js → trust/TrustFAQScreen.js} +11 -11
- package/lib/commonjs/ui/screens/{karma/KarmaFAQScreen.js.map → trust/TrustFAQScreen.js.map} +1 -1
- package/lib/commonjs/ui/screens/{karma/KarmaLeaderboardScreen.js → trust/TrustLeaderboardScreen.js} +63 -42
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/{karma/KarmaRewardsScreen.js → trust/TrustRewardsScreen.js} +54 -54
- package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/{karma/KarmaRulesScreen.js → trust/TrustRulesScreen.js} +45 -16
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/trust/trustTier.js +23 -0
- package/lib/commonjs/ui/screens/trust/trustTier.js.map +1 -0
- package/lib/commonjs/utils/deviceFlowSignIn.js +12 -10
- package/lib/commonjs/utils/deviceFlowSignIn.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/AccountMenu.js +297 -226
- package/lib/module/ui/components/AccountMenu.js.map +1 -1
- package/lib/module/ui/components/AccountMenuButton.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +1 -1
- package/lib/module/ui/components/SignInModal.js +23 -14
- package/lib/module/ui/components/SignInModal.js.map +1 -1
- package/lib/module/ui/components/accountMenuRows.js +18 -30
- package/lib/module/ui/components/accountMenuRows.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +33 -65
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +7 -13
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/hooks/useAuth.js +9 -39
- package/lib/module/ui/hooks/useAuth.js.map +1 -1
- package/lib/module/ui/hooks/useDeviceAccounts.js +281 -0
- package/lib/module/ui/hooks/useDeviceAccounts.js.map +1 -0
- package/lib/module/ui/hooks/useSessionManagement.js +5 -6
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +4 -5
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/hooks/useWebSSO.js +1 -1
- package/lib/module/ui/navigation/routes.js +7 -7
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +21 -12
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +18 -20
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +4 -4
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/{karma/KarmaAboutScreen.js → trust/TrustAboutScreen.js} +11 -11
- package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -0
- package/lib/module/ui/screens/{karma/KarmaCenterScreen.js → trust/TrustCenterScreen.js} +92 -42
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -0
- package/lib/module/ui/screens/{karma/KarmaFAQScreen.js → trust/TrustFAQScreen.js} +11 -11
- package/lib/module/ui/screens/{karma/KarmaFAQScreen.js.map → trust/TrustFAQScreen.js.map} +1 -1
- package/lib/module/ui/screens/{karma/KarmaLeaderboardScreen.js → trust/TrustLeaderboardScreen.js} +63 -42
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -0
- package/lib/module/ui/screens/{karma/KarmaRewardsScreen.js → trust/TrustRewardsScreen.js} +54 -54
- package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -0
- package/lib/module/ui/screens/{karma/KarmaRulesScreen.js → trust/TrustRulesScreen.js} +45 -16
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -0
- package/lib/module/ui/screens/trust/trustTier.js +19 -0
- package/lib/module/ui/screens/trust/trustTier.js.map +1 -0
- package/lib/module/utils/deviceFlowSignIn.js +13 -10
- package/lib/module/utils/deviceFlowSignIn.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +3 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +30 -10
- package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/accountMenuRows.d.ts +19 -12
- package/lib/typescript/commonjs/ui/components/accountMenuRows.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +3 -3
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +1 -7
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +3 -7
- package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useDeviceAccounts.d.ts +133 -0
- package/lib/typescript/commonjs/ui/hooks/useDeviceAccounts.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useWebSSO.d.ts +1 -1
- package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ui/screens/{karma/KarmaAboutScreen.d.ts.map → trust/TrustAboutScreen.d.ts.map} +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -0
- package/lib/typescript/{module/ui/screens/karma/KarmaFAQScreen.d.ts → commonjs/ui/screens/trust/TrustFAQScreen.d.ts} +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ui/screens/{karma/KarmaRewardsScreen.d.ts.map → trust/TrustRewardsScreen.d.ts.map} +1 -1
- package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts +5 -0
- package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts +9 -0
- package/lib/typescript/commonjs/ui/screens/trust/trustTier.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/types/navigation.d.ts +1 -1
- package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts +11 -9
- package/lib/typescript/commonjs/utils/deviceFlowSignIn.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +3 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/AccountMenu.d.ts +30 -10
- package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SignInModal.d.ts +1 -1
- package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/accountMenuRows.d.ts +19 -12
- package/lib/typescript/module/ui/components/accountMenuRows.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/OxyContext.d.ts +3 -3
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +1 -7
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useAuth.d.ts +3 -7
- package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useDeviceAccounts.d.ts +133 -0
- package/lib/typescript/module/ui/hooks/useDeviceAccounts.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useWebSSO.d.ts +1 -1
- package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts +5 -0
- package/lib/typescript/module/ui/screens/{karma/KarmaAboutScreen.d.ts.map → trust/TrustAboutScreen.d.ts.map} +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts +5 -0
- package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -0
- package/lib/typescript/{commonjs/ui/screens/karma/KarmaFAQScreen.d.ts → module/ui/screens/trust/TrustFAQScreen.d.ts} +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts +5 -0
- package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts +5 -0
- package/lib/typescript/module/ui/screens/{karma/KarmaRewardsScreen.d.ts.map → trust/TrustRewardsScreen.d.ts.map} +1 -1
- package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts +5 -0
- package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/trust/trustTier.d.ts +9 -0
- package/lib/typescript/module/ui/screens/trust/trustTier.d.ts.map +1 -0
- package/lib/typescript/module/ui/types/navigation.d.ts +1 -1
- package/lib/typescript/module/utils/deviceFlowSignIn.d.ts +11 -9
- package/lib/typescript/module/utils/deviceFlowSignIn.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +10 -1
- package/src/ui/components/AccountMenu.tsx +311 -253
- package/src/ui/components/AccountMenuButton.tsx +2 -2
- package/src/ui/components/OxySignInButton.tsx +1 -1
- package/src/ui/components/SignInModal.tsx +26 -16
- package/src/ui/components/accountMenuRows.ts +28 -40
- package/src/ui/context/OxyContext.tsx +43 -61
- package/src/ui/context/hooks/useAuthOperations.ts +7 -13
- package/src/ui/hooks/useAuth.ts +11 -48
- package/src/ui/hooks/useDeviceAccounts.ts +348 -0
- package/src/ui/hooks/useSessionManagement.ts +5 -14
- package/src/ui/hooks/useSessionSocket.ts +4 -5
- package/src/ui/hooks/useWebSSO.ts +1 -1
- package/src/ui/navigation/routes.ts +13 -13
- package/src/ui/screens/OxyAuthScreen.tsx +21 -12
- package/src/ui/screens/ProfileScreen.tsx +15 -17
- package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
- package/src/ui/screens/{karma/KarmaAboutScreen.tsx → trust/TrustAboutScreen.tsx} +15 -15
- package/src/ui/screens/{karma/KarmaCenterScreen.tsx → trust/TrustCenterScreen.tsx} +87 -41
- package/src/ui/screens/{karma/KarmaFAQScreen.tsx → trust/TrustFAQScreen.tsx} +10 -10
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +101 -0
- package/src/ui/screens/{karma/KarmaRewardsScreen.tsx → trust/TrustRewardsScreen.tsx} +54 -54
- package/src/ui/screens/{karma/KarmaRulesScreen.tsx → trust/TrustRulesScreen.tsx} +27 -13
- package/src/ui/screens/trust/trustTier.ts +20 -0
- package/src/ui/types/navigation.ts +1 -2
- package/src/utils/__tests__/deviceFlowSignIn.test.ts +2 -3
- package/src/utils/deviceFlowSignIn.ts +18 -12
- package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +0 -1
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +0 -1
- package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +0 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +0 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +0 -1
- package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +0 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +0 -1
- package/lib/typescript/commonjs/ui/screens/karma/KarmaAboutScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/karma/KarmaCenterScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/karma/KarmaCenterScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/karma/KarmaLeaderboardScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/karma/KarmaRewardsScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/karma/KarmaRulesScreen.d.ts +0 -5
- package/lib/typescript/commonjs/ui/screens/karma/KarmaRulesScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/karma/KarmaAboutScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/karma/KarmaCenterScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/karma/KarmaCenterScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/karma/KarmaLeaderboardScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/karma/KarmaRewardsScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/karma/KarmaRulesScreen.d.ts +0 -5
- package/lib/typescript/module/ui/screens/karma/KarmaRulesScreen.d.ts.map +0 -1
- 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,
|
|
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
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
// `
|
|
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
|
-
//
|
|
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.
|
|
169
|
-
//
|
|
170
|
-
//
|
|
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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
|
|
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
|
|
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
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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","
|
|
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
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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
|
-
//
|
|
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 = () => {
|