@oxyhq/services 5.16.29 → 5.16.30

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 (84) hide show
  1. package/lib/commonjs/index.js +64 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/hooks/auth/index.js +37 -0
  4. package/lib/commonjs/ui/hooks/auth/index.js.map +1 -0
  5. package/lib/commonjs/ui/hooks/auth/useUsernameValidation.js +171 -0
  6. package/lib/commonjs/ui/hooks/auth/useUsernameValidation.js.map +1 -0
  7. package/lib/commonjs/ui/hooks/index.js +20 -0
  8. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  9. package/lib/commonjs/ui/hooks/mutations/index.js +12 -0
  10. package/lib/commonjs/ui/hooks/mutations/index.js.map +1 -1
  11. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +45 -1
  12. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  13. package/lib/commonjs/ui/hooks/queries/index.js +12 -0
  14. package/lib/commonjs/ui/hooks/queries/index.js.map +1 -1
  15. package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -1
  16. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  17. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +43 -1
  18. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  19. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +76 -97
  20. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  21. package/lib/module/index.js +3 -3
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/ui/hooks/auth/index.js +7 -0
  24. package/lib/module/ui/hooks/auth/index.js.map +1 -0
  25. package/lib/module/ui/hooks/auth/useUsernameValidation.js +167 -0
  26. package/lib/module/ui/hooks/auth/useUsernameValidation.js.map +1 -0
  27. package/lib/module/ui/hooks/index.js +1 -0
  28. package/lib/module/ui/hooks/index.js.map +1 -1
  29. package/lib/module/ui/hooks/mutations/index.js +1 -1
  30. package/lib/module/ui/hooks/mutations/index.js.map +1 -1
  31. package/lib/module/ui/hooks/mutations/useAccountMutations.js +42 -0
  32. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  33. package/lib/module/ui/hooks/queries/index.js +1 -1
  34. package/lib/module/ui/hooks/queries/index.js.map +1 -1
  35. package/lib/module/ui/hooks/queries/queryKeys.js +3 -1
  36. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  37. package/lib/module/ui/hooks/queries/useAccountQueries.js +40 -0
  38. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  39. package/lib/module/ui/screens/PrivacySettingsScreen.js +77 -98
  40. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  41. package/lib/typescript/index.d.ts +4 -2
  42. package/lib/typescript/index.d.ts.map +1 -1
  43. package/lib/typescript/ui/hooks/auth/index.d.ts +6 -0
  44. package/lib/typescript/ui/hooks/auth/index.d.ts.map +1 -0
  45. package/lib/typescript/ui/hooks/auth/useUsernameValidation.d.ts +32 -0
  46. package/lib/typescript/ui/hooks/auth/useUsernameValidation.d.ts.map +1 -0
  47. package/lib/typescript/ui/hooks/index.d.ts +1 -0
  48. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  49. package/lib/typescript/ui/hooks/mutations/index.d.ts +1 -1
  50. package/lib/typescript/ui/hooks/mutations/index.d.ts.map +1 -1
  51. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts +12 -0
  52. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  53. package/lib/typescript/ui/hooks/queries/index.d.ts +1 -1
  54. package/lib/typescript/ui/hooks/queries/index.d.ts.map +1 -1
  55. package/lib/typescript/ui/hooks/queries/queryKeys.d.ts +2 -0
  56. package/lib/typescript/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  57. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts +12 -0
  58. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  59. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/index.ts +6 -0
  62. package/src/ui/hooks/auth/index.ts +6 -0
  63. package/src/ui/hooks/auth/useUsernameValidation.ts +177 -0
  64. package/src/ui/hooks/index.ts +2 -1
  65. package/src/ui/hooks/mutations/index.ts +2 -0
  66. package/src/ui/hooks/mutations/useAccountMutations.ts +36 -0
  67. package/src/ui/hooks/queries/index.ts +2 -0
  68. package/src/ui/hooks/queries/queryKeys.ts +2 -0
  69. package/src/ui/hooks/queries/useAccountQueries.ts +34 -0
  70. package/src/ui/screens/PrivacySettingsScreen.tsx +67 -101
  71. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +0 -281
  72. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +0 -1
  73. package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
  74. package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
  75. package/lib/module/ui/context/hooks/useSessionManagement.js +0 -276
  76. package/lib/module/ui/context/hooks/useSessionManagement.js.map +0 -1
  77. package/lib/module/ui/context/hooks/useStorage.js +0 -74
  78. package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
  79. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +0 -41
  80. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +0 -1
  81. package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
  82. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
  83. package/src/ui/context/hooks/useSessionManagement.ts +0 -401
  84. package/src/ui/context/hooks/useStorage.ts +0 -104
@@ -1,10 +1,9 @@
1
- import React, { useState, useCallback, useEffect, useMemo } from 'react';
1
+ import React, { useState, useCallback, useMemo } from 'react';
2
2
  import {
3
3
  View,
4
4
  Text,
5
5
  StyleSheet,
6
6
  ScrollView,
7
- ActivityIndicator,
8
7
  TouchableOpacity,
9
8
  } from 'react-native';
10
9
  import type { BaseScreenProps } from '../types/navigation';
@@ -15,6 +14,8 @@ import { useThemeStyles } from '../hooks/useThemeStyles';
15
14
  import { normalizeTheme } from '../utils/themeUtils';
16
15
  import type { BlockedUser, RestrictedUser } from '../../models/interfaces';
17
16
  import { useOxy } from '../context/OxyContext';
17
+ import { usePrivacySettings, useBlockedUsers, useRestrictedUsers } from '../hooks/queries';
18
+ import { useUpdatePrivacySettings, useUnblockUser, useUnrestrictUser } from '../hooks/mutations';
18
19
 
19
20
  interface PrivacySettings {
20
21
  isPrivateAccount: boolean;
@@ -44,8 +45,20 @@ const PrivacySettingsScreen: React.FC<BaseScreenProps> = ({
44
45
  goBack,
45
46
  }) => {
46
47
  // Use useOxy() hook for OxyContext values
47
- const { oxyServices, user } = useOxy();
48
+ const { oxyServices } = useOxy();
48
49
  const { t } = useI18n();
50
+
51
+ // TanStack Query hooks for server state
52
+ const { data: privacySettingsData, isLoading: isLoadingSettings, error: settingsError } = usePrivacySettings();
53
+ const { data: blockedUsers = [], isLoading: isLoadingBlocked } = useBlockedUsers();
54
+ const { data: restrictedUsers = [], isLoading: isLoadingRestricted } = useRestrictedUsers();
55
+
56
+ // Mutations
57
+ const updatePrivacySettingsMutation = useUpdatePrivacySettings();
58
+ const unblockUserMutation = useUnblockUser();
59
+ const unrestrictUserMutation = useUnrestrictUser();
60
+
61
+ // Client state for optimistic UI updates
49
62
  const [settings, setSettings] = useState<PrivacySettings>({
50
63
  isPrivateAccount: false,
51
64
  hideOnlineStatus: false,
@@ -67,111 +80,64 @@ const PrivacySettingsScreen: React.FC<BaseScreenProps> = ({
67
80
  autoFilter: true,
68
81
  muteKeywords: false,
69
82
  });
70
- const [isLoading, setIsLoading] = useState(true);
71
- const [isSaving, setIsSaving] = useState(false);
72
- const [blockedUsers, setBlockedUsers] = useState<BlockedUser[]>([]);
73
- const [restrictedUsers, setRestrictedUsers] = useState<RestrictedUser[]>([]);
74
- const [isLoadingUsers, setIsLoadingUsers] = useState(false);
75
-
76
- // Load settings and users
77
- useEffect(() => {
78
- const loadSettings = async () => {
79
- try {
80
- setIsLoading(true);
81
- // Use getCurrentUserId() which returns MongoDB ObjectId from JWT token
82
- // Never use user?.id as it may be set to publicKey
83
- const userId = oxyServices?.getCurrentUserId();
84
- if (userId && oxyServices) {
85
- const privacySettings = await oxyServices.getPrivacySettings(userId);
86
- if (privacySettings) {
87
- setSettings(privacySettings);
88
- }
89
- }
90
- } catch (error) {
91
- console.error('Failed to load privacy settings:', error);
92
- toast.error(t('privacySettings.loadError') || 'Failed to load privacy settings');
93
- } finally {
94
- setIsLoading(false);
95
- }
96
- };
97
-
98
- loadSettings();
99
- }, [oxyServices, t]);
100
-
101
- // Load blocked and restricted users
102
- useEffect(() => {
103
- const loadUsers = async () => {
104
- if (!oxyServices) return;
105
- try {
106
- setIsLoadingUsers(true);
107
- const [blocked, restricted] = await Promise.all([
108
- oxyServices.getBlockedUsers(),
109
- oxyServices.getRestrictedUsers(),
110
- ]);
111
- setBlockedUsers(blocked);
112
- setRestrictedUsers(restricted);
113
- } catch (error) {
114
- console.error('Failed to load blocked/restricted users:', error);
115
- } finally {
116
- setIsLoadingUsers(false);
117
- }
118
- };
119
-
120
- loadUsers();
121
- }, [oxyServices]);
83
+
84
+ // Update local state when server data changes
85
+ React.useEffect(() => {
86
+ if (privacySettingsData) {
87
+ setSettings(privacySettingsData as PrivacySettings);
88
+ }
89
+ }, [privacySettingsData]);
90
+
91
+ // Show error toast if settings failed to load
92
+ React.useEffect(() => {
93
+ if (settingsError) {
94
+ toast.error(t('privacySettings.loadError') || 'Failed to load privacy settings');
95
+ }
96
+ }, [settingsError, t]);
97
+
98
+ const isLoading = isLoadingSettings;
99
+ const isSaving = updatePrivacySettingsMutation.isPending;
100
+ const isLoadingUsers = isLoadingBlocked || isLoadingRestricted;
122
101
 
123
102
  const updateSetting = useCallback(async (key: keyof PrivacySettings, value: boolean) => {
124
- try {
125
- setIsSaving(true);
126
- const newSettings = { ...settings, [key]: value };
127
- setSettings(newSettings);
128
-
129
- // Use getCurrentUserId() which returns MongoDB ObjectId from JWT token
130
- // Never use user?.id as it may be set to publicKey
131
- const userId = oxyServices?.getCurrentUserId();
132
- if (userId && oxyServices) {
133
- await oxyServices.updatePrivacySettings({ [key]: value }, userId);
134
- toast.success(t('privacySettings.updated') || 'Privacy settings updated');
103
+ // Optimistic update
104
+ const newSettings = { ...settings, [key]: value };
105
+ setSettings(newSettings);
106
+
107
+ // Use mutation hook
108
+ updatePrivacySettingsMutation.mutate(
109
+ { settings: { [key]: value } },
110
+ {
111
+ onError: () => {
112
+ // Revert on error
113
+ setSettings(settings);
114
+ toast.error(t('privacySettings.updateError') || 'Failed to update privacy setting');
115
+ },
135
116
  }
136
- } catch (error) {
137
- console.error(`Failed to update ${key}:`, error);
138
- toast.error(t('privacySettings.updateError') || 'Failed to update privacy setting');
139
- // Revert on error
140
- setSettings(settings);
141
- } finally {
142
- setIsSaving(false);
143
- }
144
- }, [settings, oxyServices, t]);
117
+ );
118
+ }, [settings, updatePrivacySettingsMutation, t]);
145
119
 
146
120
  const handleUnblock = useCallback(async (userId: string) => {
147
- if (!oxyServices) return;
148
- try {
149
- await oxyServices.unblockUser(userId);
150
- setBlockedUsers(prev => prev.filter(u => {
151
- const id = typeof u.blockedId === 'string' ? u.blockedId : u.blockedId._id;
152
- return id !== userId;
153
- }));
154
- toast.success(t('privacySettings.userUnblocked') || 'User unblocked');
155
- } catch (error) {
156
- console.error('Failed to unblock user:', error);
157
- toast.error(t('privacySettings.unblockError') || 'Failed to unblock user');
158
- }
159
- }, [oxyServices, t]);
121
+ unblockUserMutation.mutate(userId, {
122
+ onSuccess: () => {
123
+ toast.success(t('privacySettings.userUnblocked') || 'User unblocked');
124
+ },
125
+ onError: () => {
126
+ toast.error(t('privacySettings.unblockError') || 'Failed to unblock user');
127
+ },
128
+ });
129
+ }, [unblockUserMutation, t]);
160
130
 
161
131
  const handleUnrestrict = useCallback(async (userId: string) => {
162
- if (!oxyServices) return;
163
- try {
164
- await oxyServices.unrestrictUser(userId);
165
- setRestrictedUsers(prev => prev.filter(u => {
166
- const id = typeof u.restrictedId === 'string' ? u.restrictedId : u.restrictedId._id;
167
- return id !== userId;
168
- }));
169
- toast.success(t('privacySettings.userUnrestricted') || 'User unrestricted');
170
- } catch (error) {
171
- console.error('Failed to unrestrict user:', error);
172
- toast.error(t('privacySettings.unrestrictError') || 'Failed to unrestrict user');
173
- }
174
- }, [oxyServices, t]);
132
+ unrestrictUserMutation.mutate(userId, {
133
+ onSuccess: () => {
134
+ toast.success(t('privacySettings.userUnrestricted') || 'User unrestricted');
135
+ },
136
+ onError: () => {
137
+ toast.error(t('privacySettings.unrestrictError') || 'Failed to unrestrict user');
138
+ },
139
+ });
140
+ }, [unrestrictUserMutation, t]);
175
141
 
176
142
  // Helper to extract user info from blocked/restricted objects
177
143
  const extractUserInfo = useCallback((
@@ -1,281 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useSessionManagement = void 0;
7
- var _react = require("react");
8
- var _sessionUtils = require("../../../utils/sessionUtils");
9
- var _sessionHelpers = require("../../utils/sessionHelpers");
10
- var _storageHelpers = require("../../utils/storageHelpers");
11
- var _errorHandlers = require("../../utils/errorHandlers");
12
- var _queryClient = require("../../hooks/queryClient");
13
- const DEFAULT_SAVE_ERROR_MESSAGE = 'Failed to save session data';
14
- const CLEAR_STORAGE_ERROR = 'Failed to clear storage';
15
-
16
- /**
17
- * Manage session state, persistence, and high-level multi-session operations.
18
- *
19
- * @param options - Session management configuration
20
- */
21
- const useSessionManagement = ({
22
- oxyServices,
23
- storage,
24
- storageKeyPrefix,
25
- loginSuccess,
26
- logoutStore,
27
- applyLanguagePreference,
28
- onAuthStateChange,
29
- onError,
30
- setAuthError,
31
- logger,
32
- setTokenReady,
33
- queryClient
34
- }) => {
35
- const [sessions, setSessions] = (0, _react.useState)([]);
36
- const [activeSessionId, setActiveSessionId] = (0, _react.useState)(null);
37
- const refreshInFlightRef = (0, _react.useRef)(null);
38
- const removedSessionsRef = (0, _react.useRef)(new Set());
39
- const lastRefreshRef = (0, _react.useRef)(0);
40
- const storageKeys = (0, _react.useMemo)(() => (0, _storageHelpers.getStorageKeys)(storageKeyPrefix), [storageKeyPrefix]);
41
- const saveSessionIds = (0, _react.useCallback)(async sessionIds => {
42
- if (!storage) return;
43
- try {
44
- const uniqueIds = Array.from(new Set(sessionIds));
45
- await storage.setItem(storageKeys.sessionIds, JSON.stringify(uniqueIds));
46
- } catch (error) {
47
- if (logger) {
48
- logger(DEFAULT_SAVE_ERROR_MESSAGE, error);
49
- } else if (__DEV__) {
50
- console.warn('Failed to save session IDs:', error);
51
- }
52
- }
53
- }, [logger, storage, storageKeys.sessionIds]);
54
- const updateSessions = (0, _react.useCallback)((incoming, options = {}) => {
55
- setSessions(prevSessions => {
56
- const processed = options.merge ? (0, _sessionUtils.mergeSessions)(prevSessions, incoming, activeSessionId, false) : (0, _sessionUtils.normalizeAndSortSessions)(incoming, activeSessionId, false);
57
- if (storage) {
58
- void saveSessionIds(processed.map(session => session.sessionId));
59
- }
60
- if ((0, _sessionUtils.sessionsArraysEqual)(prevSessions, processed)) {
61
- return prevSessions;
62
- }
63
- return processed;
64
- });
65
- }, [activeSessionId, saveSessionIds, storage]);
66
- const saveActiveSessionId = (0, _react.useCallback)(async sessionId => {
67
- if (!storage) return;
68
- try {
69
- await storage.setItem(storageKeys.activeSessionId, sessionId);
70
- } catch (error) {
71
- (0, _errorHandlers.handleAuthError)(error, {
72
- defaultMessage: DEFAULT_SAVE_ERROR_MESSAGE,
73
- code: 'SESSION_PERSISTENCE_ERROR',
74
- onError,
75
- setAuthError,
76
- logger
77
- });
78
- }
79
- }, [logger, onError, setAuthError, storage, storageKeys.activeSessionId]);
80
- const removeActiveSessionId = (0, _react.useCallback)(async () => {
81
- if (!storage) return;
82
- try {
83
- await storage.removeItem(storageKeys.activeSessionId);
84
- } catch (error) {
85
- (0, _errorHandlers.handleAuthError)(error, {
86
- defaultMessage: DEFAULT_SAVE_ERROR_MESSAGE,
87
- code: 'SESSION_PERSISTENCE_ERROR',
88
- onError,
89
- setAuthError,
90
- logger
91
- });
92
- }
93
- }, [logger, onError, setAuthError, storage, storageKeys.activeSessionId]);
94
- const clearSessionStorage = (0, _react.useCallback)(async () => {
95
- if (!storage) return;
96
- try {
97
- await storage.removeItem(storageKeys.activeSessionId);
98
- await storage.removeItem(storageKeys.sessionIds);
99
- // Clear identity sync state
100
- await storage.removeItem('oxy_identity_synced').catch(() => {});
101
- } catch (error) {
102
- (0, _errorHandlers.handleAuthError)(error, {
103
- defaultMessage: CLEAR_STORAGE_ERROR,
104
- code: 'STORAGE_ERROR',
105
- onError,
106
- setAuthError,
107
- logger
108
- });
109
- }
110
- }, [logger, onError, setAuthError, storage, storageKeys.activeSessionId, storageKeys.sessionIds]);
111
- const clearSessionState = (0, _react.useCallback)(async () => {
112
- setSessions([]);
113
- setActiveSessionId(null);
114
- logoutStore();
115
-
116
- // Clear TanStack Query cache (in-memory)
117
- if (queryClient) {
118
- queryClient.clear();
119
- }
120
-
121
- // Clear persisted query cache
122
- if (storage) {
123
- try {
124
- await (0, _queryClient.clearQueryCache)(storage);
125
- } catch (error) {
126
- if (logger) {
127
- logger('Failed to clear persisted query cache', error);
128
- }
129
- }
130
- }
131
- await clearSessionStorage();
132
- onAuthStateChange?.(null);
133
- }, [clearSessionStorage, logoutStore, onAuthStateChange, queryClient, storage, logger]);
134
- const activateSession = (0, _react.useCallback)(async (sessionId, user) => {
135
- await oxyServices.getTokenBySession(sessionId);
136
- setTokenReady?.(true);
137
- setActiveSessionId(sessionId);
138
- loginSuccess(user);
139
- await saveActiveSessionId(sessionId);
140
- await applyLanguagePreference(user);
141
- onAuthStateChange?.(user);
142
- }, [applyLanguagePreference, loginSuccess, onAuthStateChange, oxyServices, saveActiveSessionId, setTokenReady]);
143
- const trackRemovedSession = (0, _react.useCallback)(sessionId => {
144
- removedSessionsRef.current.add(sessionId);
145
- setTimeout(() => {
146
- removedSessionsRef.current.delete(sessionId);
147
- }, 5000);
148
- }, []);
149
- const findReplacementSession = (0, _react.useCallback)(async sessionIds => {
150
- if (!sessionIds.length) {
151
- return null;
152
- }
153
- const validationResults = await (0, _sessionHelpers.validateSessionBatch)(oxyServices, sessionIds, {
154
- maxConcurrency: 3
155
- });
156
- const validSession = validationResults.find(result => result.valid);
157
- if (!validSession) {
158
- return null;
159
- }
160
- const validation = await oxyServices.validateSession(validSession.sessionId, {
161
- useHeaderValidation: true
162
- });
163
- if (!validation?.valid || !validation.user) {
164
- return null;
165
- }
166
- const user = validation.user;
167
- await activateSession(validSession.sessionId, user);
168
- return user;
169
- }, [activateSession, oxyServices]);
170
- const switchSession = (0, _react.useCallback)(async sessionId => {
171
- try {
172
- const validation = await oxyServices.validateSession(sessionId, {
173
- useHeaderValidation: true
174
- });
175
- if (!validation?.valid) {
176
- throw new Error('Session is invalid or expired');
177
- }
178
- if (!validation.user) {
179
- throw new Error('User data not available from session validation');
180
- }
181
- const user = validation.user;
182
- await activateSession(sessionId, user);
183
- try {
184
- const deviceSessions = await (0, _sessionHelpers.fetchSessionsWithFallback)(oxyServices, sessionId, {
185
- fallbackUserId: user.id,
186
- logger
187
- });
188
- updateSessions(deviceSessions, {
189
- merge: true
190
- });
191
- } catch (error) {
192
- if (__DEV__) {
193
- console.warn('Failed to synchronize sessions after switch:', error);
194
- }
195
- }
196
- return user;
197
- } catch (error) {
198
- const invalidSession = (0, _errorHandlers.isInvalidSessionError)(error);
199
- if (invalidSession) {
200
- updateSessions(sessions.filter(session => session.sessionId !== sessionId), {
201
- merge: false
202
- });
203
- if (sessionId === activeSessionId) {
204
- const otherSessionIds = sessions.filter(session => session.sessionId !== sessionId && !removedSessionsRef.current.has(session.sessionId)).map(session => session.sessionId);
205
- const replacementUser = await findReplacementSession(otherSessionIds);
206
- if (replacementUser) {
207
- return replacementUser;
208
- }
209
- }
210
- }
211
- (0, _errorHandlers.handleAuthError)(error, {
212
- defaultMessage: 'Failed to switch session',
213
- code: invalidSession ? 'INVALID_SESSION' : 'SESSION_SWITCH_ERROR',
214
- onError,
215
- setAuthError,
216
- logger
217
- });
218
- throw error instanceof Error ? error : new Error('Failed to switch session');
219
- }
220
- }, [activateSession, activeSessionId, findReplacementSession, logger, loginSuccess, onError, oxyServices, sessions, setAuthError, updateSessions]);
221
- const refreshSessions = (0, _react.useCallback)(async activeUserId => {
222
- if (!activeSessionId) return;
223
- if (refreshInFlightRef.current) {
224
- await refreshInFlightRef.current;
225
- return;
226
- }
227
- const now = Date.now();
228
- if (now - lastRefreshRef.current < 500) {
229
- return;
230
- }
231
- lastRefreshRef.current = now;
232
- const refreshPromise = (async () => {
233
- try {
234
- const deviceSessions = await (0, _sessionHelpers.fetchSessionsWithFallback)(oxyServices, activeSessionId, {
235
- fallbackUserId: activeUserId,
236
- logger
237
- });
238
- updateSessions(deviceSessions, {
239
- merge: true
240
- });
241
- } catch (error) {
242
- if ((0, _errorHandlers.isInvalidSessionError)(error)) {
243
- const otherSessions = sessions.filter(session => session.sessionId !== activeSessionId && !removedSessionsRef.current.has(session.sessionId)).map(session => session.sessionId);
244
- const replacementUser = await findReplacementSession(otherSessions);
245
- if (!replacementUser) {
246
- await clearSessionState();
247
- }
248
- return;
249
- }
250
- (0, _errorHandlers.handleAuthError)(error, {
251
- defaultMessage: 'Failed to refresh sessions',
252
- code: 'SESSION_REFRESH_ERROR',
253
- onError,
254
- setAuthError,
255
- logger
256
- });
257
- } finally {
258
- refreshInFlightRef.current = null;
259
- lastRefreshRef.current = Date.now();
260
- }
261
- })();
262
- refreshInFlightRef.current = refreshPromise;
263
- await refreshPromise;
264
- }, [activeSessionId, clearSessionState, findReplacementSession, logger, onError, oxyServices, sessions, setAuthError, updateSessions]);
265
- const isRefreshInFlight = Boolean(refreshInFlightRef.current);
266
- return {
267
- sessions,
268
- activeSessionId,
269
- setActiveSessionId,
270
- updateSessions,
271
- switchSession,
272
- refreshSessions,
273
- clearSessionState,
274
- saveActiveSessionId,
275
- trackRemovedSession,
276
- storageKeys,
277
- isRefreshInFlight
278
- };
279
- };
280
- exports.useSessionManagement = useSessionManagement;
281
- //# sourceMappingURL=useSessionManagement.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_sessionUtils","_sessionHelpers","_storageHelpers","_errorHandlers","_queryClient","DEFAULT_SAVE_ERROR_MESSAGE","CLEAR_STORAGE_ERROR","useSessionManagement","oxyServices","storage","storageKeyPrefix","loginSuccess","logoutStore","applyLanguagePreference","onAuthStateChange","onError","setAuthError","logger","setTokenReady","queryClient","sessions","setSessions","useState","activeSessionId","setActiveSessionId","refreshInFlightRef","useRef","removedSessionsRef","Set","lastRefreshRef","storageKeys","useMemo","getStorageKeys","saveSessionIds","useCallback","sessionIds","uniqueIds","Array","from","setItem","JSON","stringify","error","__DEV__","console","warn","updateSessions","incoming","options","prevSessions","processed","merge","mergeSessions","normalizeAndSortSessions","map","session","sessionId","sessionsArraysEqual","saveActiveSessionId","handleAuthError","defaultMessage","code","removeActiveSessionId","removeItem","clearSessionStorage","catch","clearSessionState","clear","clearQueryCache","activateSession","user","getTokenBySession","trackRemovedSession","current","add","setTimeout","delete","findReplacementSession","length","validationResults","validateSessionBatch","maxConcurrency","validSession","find","result","valid","validation","validateSession","useHeaderValidation","switchSession","Error","deviceSessions","fetchSessionsWithFallback","fallbackUserId","id","invalidSession","isInvalidSessionError","filter","otherSessionIds","has","replacementUser","refreshSessions","activeUserId","now","Date","refreshPromise","otherSessions","isRefreshInFlight","Boolean","exports"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useSessionManagement.ts"],"mappings":"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","ignoreList":[]}
@@ -1,79 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useStorage = void 0;
7
- var _react = require("react");
8
- var _storageHelpers = require("../../utils/storageHelpers");
9
- var _errorHandlers = require("../../utils/errorHandlers");
10
- const DEFAULT_ERROR_CODE = 'STORAGE_INIT_ERROR';
11
-
12
- /**
13
- * React hook that exposes a platform-agnostic storage reference.
14
- * Handles initialization, error propagation, and lazy re-initialization.
15
- *
16
- * @param options - Optional configuration for error reporting and logging
17
- */
18
- const useStorage = ({
19
- onError,
20
- logger,
21
- errorCode = DEFAULT_ERROR_CODE
22
- } = {}) => {
23
- const [storage, setStorage] = (0, _react.useState)(null);
24
- const [error, setError] = (0, _react.useState)(null);
25
- const initializingRef = (0, _react.useRef)(null);
26
- const notifyError = (0, _react.useCallback)(err => {
27
- const message = (0, _errorHandlers.extractErrorMessage)(err, 'Failed to initialize storage');
28
- setError(message);
29
- if (logger) {
30
- logger(message, err);
31
- }
32
- onError?.({
33
- message,
34
- code: errorCode,
35
- status: 500
36
- });
37
- }, [errorCode, logger, onError]);
38
- const createStorageInstance = (0, _react.useCallback)(async () => {
39
- try {
40
- const platformStorage = await (0, _storageHelpers.createPlatformStorage)();
41
- setStorage(platformStorage);
42
- setError(null);
43
- return platformStorage;
44
- } catch (err) {
45
- notifyError(err);
46
- setStorage(null);
47
- return null;
48
- }
49
- }, [notifyError]);
50
- const refresh = (0, _react.useCallback)(async () => {
51
- if (!initializingRef.current) {
52
- initializingRef.current = createStorageInstance().finally(() => {
53
- initializingRef.current = null;
54
- });
55
- }
56
- return initializingRef.current;
57
- }, [createStorageInstance]);
58
- (0, _react.useEffect)(() => {
59
- refresh().catch(err => {
60
- notifyError(err);
61
- });
62
- }, [refresh, notifyError]);
63
- const withStorage = (0, _react.useCallback)(async callback => {
64
- const resolvedStorage = storage ?? (await refresh());
65
- if (!resolvedStorage) {
66
- return null;
67
- }
68
- return callback(resolvedStorage);
69
- }, [refresh, storage]);
70
- return {
71
- storage,
72
- isReady: Boolean(storage) && !error,
73
- error,
74
- refresh,
75
- withStorage
76
- };
77
- };
78
- exports.useStorage = useStorage;
79
- //# sourceMappingURL=useStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_storageHelpers","_errorHandlers","DEFAULT_ERROR_CODE","useStorage","onError","logger","errorCode","storage","setStorage","useState","error","setError","initializingRef","useRef","notifyError","useCallback","err","message","extractErrorMessage","code","status","createStorageInstance","platformStorage","createPlatformStorage","refresh","current","finally","useEffect","catch","withStorage","callback","resolvedStorage","isReady","Boolean","exports"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useStorage.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAgBA,MAAMG,kBAAkB,GAAG,oBAAoB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,OAAO;EACPC,MAAM;EACNC,SAAS,GAAGJ;AACK,CAAC,GAAG,CAAC,CAAC,KAAuB;EAC9C,MAAM,CAACK,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAA0B,IAAI,CAAC;EACrE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAF,eAAQ,EAAgB,IAAI,CAAC;EACvD,MAAMG,eAAe,GAAG,IAAAC,aAAM,EAA0C,IAAI,CAAC;EAE7E,MAAMC,WAAW,GAAG,IAAAC,kBAAW,EAC5BC,GAAY,IAAK;IAChB,MAAMC,OAAO,GAAG,IAAAC,kCAAmB,EAACF,GAAG,EAAE,8BAA8B,CAAC;IACxEL,QAAQ,CAACM,OAAO,CAAC;IAEjB,IAAIZ,MAAM,EAAE;MACVA,MAAM,CAACY,OAAO,EAAED,GAAG,CAAC;IACtB;IAEAZ,OAAO,GAAG;MACRa,OAAO;MACPE,IAAI,EAAEb,SAAS;MACfc,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,EACD,CAACd,SAAS,EAAED,MAAM,EAAED,OAAO,CAC7B,CAAC;EAED,MAAMiB,qBAAqB,GAAG,IAAAN,kBAAW,EAAC,YAA8C;IACtF,IAAI;MACF,MAAMO,eAAe,GAAG,MAAM,IAAAC,qCAAqB,EAAC,CAAC;MACrDf,UAAU,CAACc,eAAe,CAAC;MAC3BX,QAAQ,CAAC,IAAI,CAAC;MACd,OAAOW,eAAe;IACxB,CAAC,CAAC,OAAON,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;MAChBR,UAAU,CAAC,IAAI,CAAC;MAChB,OAAO,IAAI;IACb;EACF,CAAC,EAAE,CAACM,WAAW,CAAC,CAAC;EAEjB,MAAMU,OAAO,GAAG,IAAAT,kBAAW,EAAC,YAA8C;IACxE,IAAI,CAACH,eAAe,CAACa,OAAO,EAAE;MAC5Bb,eAAe,CAACa,OAAO,GAAGJ,qBAAqB,CAAC,CAAC,CAACK,OAAO,CAAC,MAAM;QAC9Dd,eAAe,CAACa,OAAO,GAAG,IAAI;MAChC,CAAC,CAAC;IACJ;IAEA,OAAOb,eAAe,CAACa,OAAO;EAChC,CAAC,EAAE,CAACJ,qBAAqB,CAAC,CAAC;EAE3B,IAAAM,gBAAS,EAAC,MAAM;IACdH,OAAO,CAAC,CAAC,CAACI,KAAK,CAAEZ,GAAG,IAAK;MACvBF,WAAW,CAACE,GAAG,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,EAAE,CAACQ,OAAO,EAAEV,WAAW,CAAC,CAAC;EAE1B,MAAMe,WAAW,GAAG,IAAAd,kBAAW,EAC7B,MAAWe,QAA2D,IAAwB;IAC5F,MAAMC,eAAe,GAAGxB,OAAO,KAAK,MAAMiB,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAACO,eAAe,EAAE;MACpB,OAAO,IAAI;IACb;IACA,OAAOD,QAAQ,CAACC,eAAe,CAAC;EAClC,CAAC,EACD,CAACP,OAAO,EAAEjB,OAAO,CACnB,CAAC;EAED,OAAO;IACLA,OAAO;IACPyB,OAAO,EAAEC,OAAO,CAAC1B,OAAO,CAAC,IAAI,CAACG,KAAK;IACnCA,KAAK;IACLc,OAAO;IACPK;EACF,CAAC;AACH,CAAC;AAACK,OAAA,CAAA/B,UAAA,GAAAA,UAAA","ignoreList":[]}