@oxyhq/services 5.16.29 → 5.16.31

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 (145) hide show
  1. package/lib/commonjs/core/services/SessionService.js +2 -1
  2. package/lib/commonjs/core/services/SessionService.js.map +1 -1
  3. package/lib/commonjs/core/services/TokenService.js +17 -9
  4. package/lib/commonjs/core/services/TokenService.js.map +1 -1
  5. package/lib/commonjs/index.js +64 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/models/interfaces.js +9 -8
  8. package/lib/commonjs/models/interfaces.js.map +1 -1
  9. package/lib/commonjs/ui/context/OxyContext.js +40 -4
  10. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  11. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +25 -14
  12. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  13. package/lib/commonjs/ui/hooks/auth/index.js +37 -0
  14. package/lib/commonjs/ui/hooks/auth/index.js.map +1 -0
  15. package/lib/commonjs/ui/hooks/auth/useUsernameValidation.js +171 -0
  16. package/lib/commonjs/ui/hooks/auth/useUsernameValidation.js.map +1 -0
  17. package/lib/commonjs/ui/hooks/index.js +20 -0
  18. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  19. package/lib/commonjs/ui/hooks/mutations/index.js +12 -0
  20. package/lib/commonjs/ui/hooks/mutations/index.js.map +1 -1
  21. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +45 -1
  22. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  23. package/lib/commonjs/ui/hooks/queries/index.js +12 -0
  24. package/lib/commonjs/ui/hooks/queries/index.js.map +1 -1
  25. package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -1
  26. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  27. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +43 -1
  28. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +12 -4
  30. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/useSessionManagement.js +8 -0
  32. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  33. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +76 -97
  34. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  35. package/lib/commonjs/ui/utils/sessionHelpers.js +26 -11
  36. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  37. package/lib/commonjs/utils/sessionUtils.js +8 -1
  38. package/lib/commonjs/utils/sessionUtils.js.map +1 -1
  39. package/lib/module/core/services/SessionService.js +2 -1
  40. package/lib/module/core/services/SessionService.js.map +1 -1
  41. package/lib/module/core/services/TokenService.js +17 -9
  42. package/lib/module/core/services/TokenService.js.map +1 -1
  43. package/lib/module/index.js +3 -3
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/module/models/interfaces.js +9 -8
  46. package/lib/module/models/interfaces.js.map +1 -1
  47. package/lib/module/ui/context/OxyContext.js +40 -4
  48. package/lib/module/ui/context/OxyContext.js.map +1 -1
  49. package/lib/module/ui/context/hooks/useAuthOperations.js +25 -14
  50. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  51. package/lib/module/ui/hooks/auth/index.js +7 -0
  52. package/lib/module/ui/hooks/auth/index.js.map +1 -0
  53. package/lib/module/ui/hooks/auth/useUsernameValidation.js +167 -0
  54. package/lib/module/ui/hooks/auth/useUsernameValidation.js.map +1 -0
  55. package/lib/module/ui/hooks/index.js +1 -0
  56. package/lib/module/ui/hooks/index.js.map +1 -1
  57. package/lib/module/ui/hooks/mutations/index.js +1 -1
  58. package/lib/module/ui/hooks/mutations/index.js.map +1 -1
  59. package/lib/module/ui/hooks/mutations/useAccountMutations.js +42 -0
  60. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  61. package/lib/module/ui/hooks/queries/index.js +1 -1
  62. package/lib/module/ui/hooks/queries/index.js.map +1 -1
  63. package/lib/module/ui/hooks/queries/queryKeys.js +3 -1
  64. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  65. package/lib/module/ui/hooks/queries/useAccountQueries.js +40 -0
  66. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  67. package/lib/module/ui/hooks/queries/useServicesQueries.js +13 -5
  68. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  69. package/lib/module/ui/hooks/useSessionManagement.js +8 -0
  70. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  71. package/lib/module/ui/screens/PrivacySettingsScreen.js +77 -98
  72. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  73. package/lib/module/ui/utils/sessionHelpers.js +26 -11
  74. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  75. package/lib/module/utils/sessionUtils.js +8 -1
  76. package/lib/module/utils/sessionUtils.js.map +1 -1
  77. package/lib/typescript/core/services/SessionService.d.ts +4 -2
  78. package/lib/typescript/core/services/SessionService.d.ts.map +1 -1
  79. package/lib/typescript/core/services/TokenService.d.ts +8 -3
  80. package/lib/typescript/core/services/TokenService.d.ts.map +1 -1
  81. package/lib/typescript/index.d.ts +4 -2
  82. package/lib/typescript/index.d.ts.map +1 -1
  83. package/lib/typescript/models/interfaces.d.ts +9 -8
  84. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  85. package/lib/typescript/models/session.d.ts +4 -2
  86. package/lib/typescript/models/session.d.ts.map +1 -1
  87. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  88. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  89. package/lib/typescript/ui/hooks/auth/index.d.ts +6 -0
  90. package/lib/typescript/ui/hooks/auth/index.d.ts.map +1 -0
  91. package/lib/typescript/ui/hooks/auth/useUsernameValidation.d.ts +32 -0
  92. package/lib/typescript/ui/hooks/auth/useUsernameValidation.d.ts.map +1 -0
  93. package/lib/typescript/ui/hooks/index.d.ts +1 -0
  94. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  95. package/lib/typescript/ui/hooks/mutations/index.d.ts +1 -1
  96. package/lib/typescript/ui/hooks/mutations/index.d.ts.map +1 -1
  97. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts +12 -0
  98. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  99. package/lib/typescript/ui/hooks/queries/index.d.ts +1 -1
  100. package/lib/typescript/ui/hooks/queries/index.d.ts.map +1 -1
  101. package/lib/typescript/ui/hooks/queries/queryKeys.d.ts +2 -0
  102. package/lib/typescript/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  103. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts +12 -0
  104. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  105. package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  106. package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
  107. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  108. package/lib/typescript/ui/utils/sessionHelpers.d.ts +6 -2
  109. package/lib/typescript/ui/utils/sessionHelpers.d.ts.map +1 -1
  110. package/lib/typescript/utils/sessionUtils.d.ts.map +1 -1
  111. package/package.json +1 -1
  112. package/src/core/services/SessionService.ts +4 -2
  113. package/src/core/services/TokenService.ts +18 -10
  114. package/src/index.ts +6 -0
  115. package/src/models/interfaces.ts +11 -10
  116. package/src/models/session.ts +5 -3
  117. package/src/ui/context/OxyContext.tsx +56 -20
  118. package/src/ui/context/hooks/useAuthOperations.ts +23 -15
  119. package/src/ui/hooks/auth/index.ts +7 -0
  120. package/src/ui/hooks/auth/useUsernameValidation.ts +177 -0
  121. package/src/ui/hooks/index.ts +2 -1
  122. package/src/ui/hooks/mutations/index.ts +2 -0
  123. package/src/ui/hooks/mutations/useAccountMutations.ts +36 -0
  124. package/src/ui/hooks/queries/index.ts +2 -0
  125. package/src/ui/hooks/queries/queryKeys.ts +2 -0
  126. package/src/ui/hooks/queries/useAccountQueries.ts +34 -0
  127. package/src/ui/hooks/queries/useServicesQueries.ts +8 -3
  128. package/src/ui/hooks/useSessionManagement.ts +8 -1
  129. package/src/ui/screens/PrivacySettingsScreen.tsx +67 -101
  130. package/src/ui/utils/sessionHelpers.ts +32 -15
  131. package/src/utils/sessionUtils.ts +8 -1
  132. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +0 -281
  133. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +0 -1
  134. package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
  135. package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
  136. package/lib/module/ui/context/hooks/useSessionManagement.js +0 -276
  137. package/lib/module/ui/context/hooks/useSessionManagement.js.map +0 -1
  138. package/lib/module/ui/context/hooks/useStorage.js +0 -74
  139. package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
  140. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +0 -41
  141. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +0 -1
  142. package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
  143. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
  144. package/src/ui/context/hooks/useSessionManagement.ts +0 -401
  145. package/src/ui/context/hooks/useStorage.ts +0 -104
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useMemo","useRef","useState","mergeSessions","normalizeAndSortSessions","sessionsArraysEqual","fetchSessionsWithFallback","validateSessionBatch","getStorageKeys","handleAuthError","isInvalidSessionError","clearQueryCache","DEFAULT_SAVE_ERROR_MESSAGE","CLEAR_STORAGE_ERROR","useSessionManagement","oxyServices","storage","storageKeyPrefix","loginSuccess","logoutStore","applyLanguagePreference","onAuthStateChange","onError","setAuthError","logger","setTokenReady","queryClient","sessions","setSessions","activeSessionId","setActiveSessionId","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","catch","clearSessionState","clear","activateSession","user","getTokenBySession","trackRemovedSession","current","add","setTimeout","delete","findReplacementSession","length","validationResults","maxConcurrency","validSession","find","result","valid","validation","validateSession","useHeaderValidation","switchSession","Error","deviceSessions","fallbackUserId","id","invalidSession","filter","otherSessionIds","has","replacementUser","refreshSessions","activeUserId","now","Date","refreshPromise","otherSessions","isRefreshInFlight","Boolean"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useSessionManagement.ts"],"mappings":"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","ignoreList":[]}
@@ -1,74 +0,0 @@
1
- "use strict";
2
-
3
- import { useCallback, useEffect, useRef, useState } from 'react';
4
- import { createPlatformStorage } from '../../utils/storageHelpers';
5
- import { extractErrorMessage } from '../../utils/errorHandlers';
6
- const DEFAULT_ERROR_CODE = 'STORAGE_INIT_ERROR';
7
-
8
- /**
9
- * React hook that exposes a platform-agnostic storage reference.
10
- * Handles initialization, error propagation, and lazy re-initialization.
11
- *
12
- * @param options - Optional configuration for error reporting and logging
13
- */
14
- export const useStorage = ({
15
- onError,
16
- logger,
17
- errorCode = DEFAULT_ERROR_CODE
18
- } = {}) => {
19
- const [storage, setStorage] = useState(null);
20
- const [error, setError] = useState(null);
21
- const initializingRef = useRef(null);
22
- const notifyError = useCallback(err => {
23
- const message = extractErrorMessage(err, 'Failed to initialize storage');
24
- setError(message);
25
- if (logger) {
26
- logger(message, err);
27
- }
28
- onError?.({
29
- message,
30
- code: errorCode,
31
- status: 500
32
- });
33
- }, [errorCode, logger, onError]);
34
- const createStorageInstance = useCallback(async () => {
35
- try {
36
- const platformStorage = await createPlatformStorage();
37
- setStorage(platformStorage);
38
- setError(null);
39
- return platformStorage;
40
- } catch (err) {
41
- notifyError(err);
42
- setStorage(null);
43
- return null;
44
- }
45
- }, [notifyError]);
46
- const refresh = useCallback(async () => {
47
- if (!initializingRef.current) {
48
- initializingRef.current = createStorageInstance().finally(() => {
49
- initializingRef.current = null;
50
- });
51
- }
52
- return initializingRef.current;
53
- }, [createStorageInstance]);
54
- useEffect(() => {
55
- refresh().catch(err => {
56
- notifyError(err);
57
- });
58
- }, [refresh, notifyError]);
59
- const withStorage = useCallback(async callback => {
60
- const resolvedStorage = storage ?? (await refresh());
61
- if (!resolvedStorage) {
62
- return null;
63
- }
64
- return callback(resolvedStorage);
65
- }, [refresh, storage]);
66
- return {
67
- storage,
68
- isReady: Boolean(storage) && !error,
69
- error,
70
- refresh,
71
- withStorage
72
- };
73
- };
74
- //# sourceMappingURL=useStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","createPlatformStorage","extractErrorMessage","DEFAULT_ERROR_CODE","useStorage","onError","logger","errorCode","storage","setStorage","error","setError","initializingRef","notifyError","err","message","code","status","createStorageInstance","platformStorage","refresh","current","finally","catch","withStorage","callback","resolvedStorage","isReady","Boolean"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useStorage.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEhE,SAASC,qBAAqB,QAA+B,4BAA4B;AACzF,SAASC,mBAAmB,QAAQ,2BAA2B;AAgB/D,MAAMC,kBAAkB,GAAG,oBAAoB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,OAAO;EACPC,MAAM;EACNC,SAAS,GAAGJ;AACK,CAAC,GAAG,CAAC,CAAC,KAAuB;EAC9C,MAAM,CAACK,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAA0B,IAAI,CAAC;EACrE,MAAM,CAACU,KAAK,EAAEC,QAAQ,CAAC,GAAGX,QAAQ,CAAgB,IAAI,CAAC;EACvD,MAAMY,eAAe,GAAGb,MAAM,CAA0C,IAAI,CAAC;EAE7E,MAAMc,WAAW,GAAGhB,WAAW,CAC5BiB,GAAY,IAAK;IAChB,MAAMC,OAAO,GAAGb,mBAAmB,CAACY,GAAG,EAAE,8BAA8B,CAAC;IACxEH,QAAQ,CAACI,OAAO,CAAC;IAEjB,IAAIT,MAAM,EAAE;MACVA,MAAM,CAACS,OAAO,EAAED,GAAG,CAAC;IACtB;IAEAT,OAAO,GAAG;MACRU,OAAO;MACPC,IAAI,EAAET,SAAS;MACfU,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,EACD,CAACV,SAAS,EAAED,MAAM,EAAED,OAAO,CAC7B,CAAC;EAED,MAAMa,qBAAqB,GAAGrB,WAAW,CAAC,YAA8C;IACtF,IAAI;MACF,MAAMsB,eAAe,GAAG,MAAMlB,qBAAqB,CAAC,CAAC;MACrDQ,UAAU,CAACU,eAAe,CAAC;MAC3BR,QAAQ,CAAC,IAAI,CAAC;MACd,OAAOQ,eAAe;IACxB,CAAC,CAAC,OAAOL,GAAG,EAAE;MACZD,WAAW,CAACC,GAAG,CAAC;MAChBL,UAAU,CAAC,IAAI,CAAC;MAChB,OAAO,IAAI;IACb;EACF,CAAC,EAAE,CAACI,WAAW,CAAC,CAAC;EAEjB,MAAMO,OAAO,GAAGvB,WAAW,CAAC,YAA8C;IACxE,IAAI,CAACe,eAAe,CAACS,OAAO,EAAE;MAC5BT,eAAe,CAACS,OAAO,GAAGH,qBAAqB,CAAC,CAAC,CAACI,OAAO,CAAC,MAAM;QAC9DV,eAAe,CAACS,OAAO,GAAG,IAAI;MAChC,CAAC,CAAC;IACJ;IAEA,OAAOT,eAAe,CAACS,OAAO;EAChC,CAAC,EAAE,CAACH,qBAAqB,CAAC,CAAC;EAE3BpB,SAAS,CAAC,MAAM;IACdsB,OAAO,CAAC,CAAC,CAACG,KAAK,CAAET,GAAG,IAAK;MACvBD,WAAW,CAACC,GAAG,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,EAAE,CAACM,OAAO,EAAEP,WAAW,CAAC,CAAC;EAE1B,MAAMW,WAAW,GAAG3B,WAAW,CAC7B,MAAW4B,QAA2D,IAAwB;IAC5F,MAAMC,eAAe,GAAGlB,OAAO,KAAK,MAAMY,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAACM,eAAe,EAAE;MACpB,OAAO,IAAI;IACb;IACA,OAAOD,QAAQ,CAACC,eAAe,CAAC;EAClC,CAAC,EACD,CAACN,OAAO,EAAEZ,OAAO,CACnB,CAAC;EAED,OAAO;IACLA,OAAO;IACPmB,OAAO,EAAEC,OAAO,CAACpB,OAAO,CAAC,IAAI,CAACE,KAAK;IACnCA,KAAK;IACLU,OAAO;IACPI;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,41 +0,0 @@
1
- import type { ApiError, User } from '../../../models/interfaces';
2
- import type { ClientSession } from '../../../models/session';
3
- import { getStorageKeys, type StorageInterface } from '../../utils/storageHelpers';
4
- import type { OxyServices } from '../../../core';
5
- import type { QueryClient } from '@tanstack/react-query';
6
- export interface UseSessionManagementOptions {
7
- oxyServices: OxyServices;
8
- storage: StorageInterface | null;
9
- storageKeyPrefix?: string;
10
- loginSuccess: (user: User) => void;
11
- logoutStore: () => void;
12
- applyLanguagePreference: (user: User) => Promise<void>;
13
- onAuthStateChange?: (user: User | null) => void;
14
- onError?: (error: ApiError) => void;
15
- setAuthError?: (message: string | null) => void;
16
- logger?: (message: string, error?: unknown) => void;
17
- setTokenReady?: (ready: boolean) => void;
18
- queryClient?: QueryClient | null;
19
- }
20
- export interface UseSessionManagementResult {
21
- sessions: ClientSession[];
22
- activeSessionId: string | null;
23
- setActiveSessionId: (sessionId: string | null) => void;
24
- updateSessions: (incoming: ClientSession[], options?: {
25
- merge?: boolean;
26
- }) => void;
27
- switchSession: (sessionId: string) => Promise<User>;
28
- refreshSessions: (activeUserId?: string) => Promise<void>;
29
- clearSessionState: () => Promise<void>;
30
- saveActiveSessionId: (sessionId: string) => Promise<void>;
31
- trackRemovedSession: (sessionId: string) => void;
32
- storageKeys: ReturnType<typeof getStorageKeys>;
33
- isRefreshInFlight: boolean;
34
- }
35
- /**
36
- * Manage session state, persistence, and high-level multi-session operations.
37
- *
38
- * @param options - Session management configuration
39
- */
40
- export declare const useSessionManagement: ({ oxyServices, storage, storageKeyPrefix, loginSuccess, logoutStore, applyLanguagePreference, onAuthStateChange, onError, setAuthError, logger, setTokenReady, queryClient, }: UseSessionManagementOptions) => UseSessionManagementResult;
41
- //# sourceMappingURL=useSessionManagement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSessionManagement.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/hooks/useSessionManagement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC/C,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAKD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,+KAalC,2BAA2B,KAAG,0BAiVhC,CAAC"}
@@ -1,22 +0,0 @@
1
- import type { ApiError } from '../../../models/interfaces';
2
- import { type StorageInterface } from '../../utils/storageHelpers';
3
- export interface UseStorageOptions {
4
- onError?: (error: ApiError) => void;
5
- logger?: (message: string, error?: unknown) => void;
6
- errorCode?: string;
7
- }
8
- export interface UseStorageResult {
9
- storage: StorageInterface | null;
10
- isReady: boolean;
11
- error: string | null;
12
- refresh: () => Promise<StorageInterface | null>;
13
- withStorage: <T>(callback: (storage: StorageInterface) => Promise<T>) => Promise<T | null>;
14
- }
15
- /**
16
- * React hook that exposes a platform-agnostic storage reference.
17
- * Handles initialization, error propagation, and lazy re-initialization.
18
- *
19
- * @param options - Optional configuration for error reporting and logging
20
- */
21
- export declare const useStorage: ({ onError, logger, errorCode, }?: UseStorageOptions) => UseStorageResult;
22
- //# sourceMappingURL=useStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStorage.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/hooks/useStorage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC5F;AAID;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,kCAIxB,iBAAsB,KAAG,gBAsE3B,CAAC"}
@@ -1,401 +0,0 @@
1
- import { useCallback, useMemo, useRef, useState } from 'react';
2
- import type { ApiError, User } from '../../../models/interfaces';
3
- import type { ClientSession } from '../../../models/session';
4
- import { mergeSessions, normalizeAndSortSessions, sessionsArraysEqual } from '../../../utils/sessionUtils';
5
- import { fetchSessionsWithFallback, mapSessionsToClient, validateSessionBatch } from '../../utils/sessionHelpers';
6
- import { getStorageKeys, type StorageInterface } from '../../utils/storageHelpers';
7
- import { handleAuthError, isInvalidSessionError } from '../../utils/errorHandlers';
8
- import type { OxyServices } from '../../../core';
9
- import type { QueryClient } from '@tanstack/react-query';
10
- import { clearQueryCache } from '../../hooks/queryClient';
11
-
12
- export interface UseSessionManagementOptions {
13
- oxyServices: OxyServices;
14
- storage: StorageInterface | null;
15
- storageKeyPrefix?: string;
16
- loginSuccess: (user: User) => void;
17
- logoutStore: () => void;
18
- applyLanguagePreference: (user: User) => Promise<void>;
19
- onAuthStateChange?: (user: User | null) => void;
20
- onError?: (error: ApiError) => void;
21
- setAuthError?: (message: string | null) => void;
22
- logger?: (message: string, error?: unknown) => void;
23
- setTokenReady?: (ready: boolean) => void;
24
- queryClient?: QueryClient | null;
25
- }
26
-
27
- export interface UseSessionManagementResult {
28
- sessions: ClientSession[];
29
- activeSessionId: string | null;
30
- setActiveSessionId: (sessionId: string | null) => void;
31
- updateSessions: (incoming: ClientSession[], options?: { merge?: boolean }) => void;
32
- switchSession: (sessionId: string) => Promise<User>;
33
- refreshSessions: (activeUserId?: string) => Promise<void>;
34
- clearSessionState: () => Promise<void>;
35
- saveActiveSessionId: (sessionId: string) => Promise<void>;
36
- trackRemovedSession: (sessionId: string) => void;
37
- storageKeys: ReturnType<typeof getStorageKeys>;
38
- isRefreshInFlight: boolean;
39
- }
40
-
41
- const DEFAULT_SAVE_ERROR_MESSAGE = 'Failed to save session data';
42
- const CLEAR_STORAGE_ERROR = 'Failed to clear storage';
43
-
44
- /**
45
- * Manage session state, persistence, and high-level multi-session operations.
46
- *
47
- * @param options - Session management configuration
48
- */
49
- export const useSessionManagement = ({
50
- oxyServices,
51
- storage,
52
- storageKeyPrefix,
53
- loginSuccess,
54
- logoutStore,
55
- applyLanguagePreference,
56
- onAuthStateChange,
57
- onError,
58
- setAuthError,
59
- logger,
60
- setTokenReady,
61
- queryClient,
62
- }: UseSessionManagementOptions): UseSessionManagementResult => {
63
- const [sessions, setSessions] = useState<ClientSession[]>([]);
64
- const [activeSessionId, setActiveSessionId] = useState<string | null>(null);
65
-
66
- const refreshInFlightRef = useRef<Promise<void> | null>(null);
67
- const removedSessionsRef = useRef<Set<string>>(new Set());
68
- const lastRefreshRef = useRef<number>(0);
69
-
70
- const storageKeys = useMemo(() => getStorageKeys(storageKeyPrefix), [storageKeyPrefix]);
71
-
72
- const saveSessionIds = useCallback(
73
- async (sessionIds: string[]): Promise<void> => {
74
- if (!storage) return;
75
- try {
76
- const uniqueIds = Array.from(new Set(sessionIds));
77
- await storage.setItem(storageKeys.sessionIds, JSON.stringify(uniqueIds));
78
- } catch (error) {
79
- if (logger) {
80
- logger(DEFAULT_SAVE_ERROR_MESSAGE, error);
81
- } else if (__DEV__) {
82
- console.warn('Failed to save session IDs:', error);
83
- }
84
- }
85
- },
86
- [logger, storage, storageKeys.sessionIds],
87
- );
88
-
89
- const updateSessions = useCallback(
90
- (incoming: ClientSession[], options: { merge?: boolean } = {}): void => {
91
- setSessions((prevSessions) => {
92
- const processed = options.merge
93
- ? mergeSessions(prevSessions, incoming, activeSessionId, false)
94
- : normalizeAndSortSessions(incoming, activeSessionId, false);
95
-
96
- if (storage) {
97
- void saveSessionIds(processed.map((session) => session.sessionId));
98
- }
99
-
100
- if (sessionsArraysEqual(prevSessions, processed)) {
101
- return prevSessions;
102
- }
103
- return processed;
104
- });
105
- },
106
- [activeSessionId, saveSessionIds, storage],
107
- );
108
-
109
- const saveActiveSessionId = useCallback(
110
- async (sessionId: string): Promise<void> => {
111
- if (!storage) return;
112
- try {
113
- await storage.setItem(storageKeys.activeSessionId, sessionId);
114
- } catch (error) {
115
- handleAuthError(error, {
116
- defaultMessage: DEFAULT_SAVE_ERROR_MESSAGE,
117
- code: 'SESSION_PERSISTENCE_ERROR',
118
- onError,
119
- setAuthError,
120
- logger,
121
- });
122
- }
123
- },
124
- [logger, onError, setAuthError, storage, storageKeys.activeSessionId],
125
- );
126
-
127
- const removeActiveSessionId = useCallback(async (): Promise<void> => {
128
- if (!storage) return;
129
- try {
130
- await storage.removeItem(storageKeys.activeSessionId);
131
- } catch (error) {
132
- handleAuthError(error, {
133
- defaultMessage: DEFAULT_SAVE_ERROR_MESSAGE,
134
- code: 'SESSION_PERSISTENCE_ERROR',
135
- onError,
136
- setAuthError,
137
- logger,
138
- });
139
- }
140
- }, [logger, onError, setAuthError, storage, storageKeys.activeSessionId]);
141
-
142
- const clearSessionStorage = useCallback(async (): Promise<void> => {
143
- if (!storage) return;
144
- try {
145
- await storage.removeItem(storageKeys.activeSessionId);
146
- await storage.removeItem(storageKeys.sessionIds);
147
- // Clear identity sync state
148
- await storage.removeItem('oxy_identity_synced').catch(() => {});
149
- } catch (error) {
150
- handleAuthError(error, {
151
- defaultMessage: CLEAR_STORAGE_ERROR,
152
- code: 'STORAGE_ERROR',
153
- onError,
154
- setAuthError,
155
- logger,
156
- });
157
- }
158
- }, [logger, onError, setAuthError, storage, storageKeys.activeSessionId, storageKeys.sessionIds]);
159
-
160
- const clearSessionState = useCallback(async (): Promise<void> => {
161
- setSessions([]);
162
- setActiveSessionId(null);
163
- logoutStore();
164
-
165
- // Clear TanStack Query cache (in-memory)
166
- if (queryClient) {
167
- queryClient.clear();
168
- }
169
-
170
- // Clear persisted query cache
171
- if (storage) {
172
- try {
173
- await clearQueryCache(storage);
174
- } catch (error) {
175
- if (logger) {
176
- logger('Failed to clear persisted query cache', error);
177
- }
178
- }
179
- }
180
-
181
- await clearSessionStorage();
182
- onAuthStateChange?.(null);
183
- }, [clearSessionStorage, logoutStore, onAuthStateChange, queryClient, storage, logger]);
184
-
185
- const activateSession = useCallback(
186
- async (sessionId: string, user: User): Promise<void> => {
187
- await oxyServices.getTokenBySession(sessionId);
188
- setTokenReady?.(true);
189
- setActiveSessionId(sessionId);
190
- loginSuccess(user);
191
- await saveActiveSessionId(sessionId);
192
- await applyLanguagePreference(user);
193
- onAuthStateChange?.(user);
194
- },
195
- [
196
- applyLanguagePreference,
197
- loginSuccess,
198
- onAuthStateChange,
199
- oxyServices,
200
- saveActiveSessionId,
201
- setTokenReady,
202
- ],
203
- );
204
-
205
- const trackRemovedSession = useCallback((sessionId: string) => {
206
- removedSessionsRef.current.add(sessionId);
207
- setTimeout(() => {
208
- removedSessionsRef.current.delete(sessionId);
209
- }, 5000);
210
- }, []);
211
-
212
- const findReplacementSession = useCallback(
213
- async (sessionIds: string[]): Promise<User | null> => {
214
- if (!sessionIds.length) {
215
- return null;
216
- }
217
-
218
- const validationResults = await validateSessionBatch(oxyServices, sessionIds, {
219
- maxConcurrency: 3,
220
- });
221
-
222
- const validSession = validationResults.find((result) => result.valid);
223
- if (!validSession) {
224
- return null;
225
- }
226
-
227
- const validation = await oxyServices.validateSession(validSession.sessionId, {
228
- useHeaderValidation: true,
229
- });
230
-
231
- if (!validation?.valid || !validation.user) {
232
- return null;
233
- }
234
-
235
- const user = validation.user as User;
236
- await activateSession(validSession.sessionId, user);
237
- return user;
238
- },
239
- [activateSession, oxyServices],
240
- );
241
-
242
- const switchSession = useCallback(
243
- async (sessionId: string): Promise<User> => {
244
- try {
245
- const validation = await oxyServices.validateSession(sessionId, { useHeaderValidation: true });
246
- if (!validation?.valid) {
247
- throw new Error('Session is invalid or expired');
248
- }
249
-
250
- if (!validation.user) {
251
- throw new Error('User data not available from session validation');
252
- }
253
-
254
- const user = validation.user as User;
255
- await activateSession(sessionId, user);
256
-
257
- try {
258
- const deviceSessions = await fetchSessionsWithFallback(oxyServices, sessionId, {
259
- fallbackUserId: user.id,
260
- logger,
261
- });
262
- updateSessions(deviceSessions, { merge: true });
263
- } catch (error) {
264
- if (__DEV__) {
265
- console.warn('Failed to synchronize sessions after switch:', error);
266
- }
267
- }
268
-
269
- return user;
270
- } catch (error) {
271
- const invalidSession = isInvalidSessionError(error);
272
-
273
- if (invalidSession) {
274
- updateSessions(sessions.filter((session) => session.sessionId !== sessionId), {
275
- merge: false,
276
- });
277
- if (sessionId === activeSessionId) {
278
- const otherSessionIds = sessions
279
- .filter(
280
- (session) =>
281
- session.sessionId !== sessionId && !removedSessionsRef.current.has(session.sessionId),
282
- )
283
- .map((session) => session.sessionId);
284
-
285
- const replacementUser = await findReplacementSession(otherSessionIds);
286
- if (replacementUser) {
287
- return replacementUser;
288
- }
289
- }
290
- }
291
-
292
- handleAuthError(error, {
293
- defaultMessage: 'Failed to switch session',
294
- code: invalidSession ? 'INVALID_SESSION' : 'SESSION_SWITCH_ERROR',
295
- onError,
296
- setAuthError,
297
- logger,
298
- });
299
- throw error instanceof Error ? error : new Error('Failed to switch session');
300
- }
301
- },
302
- [
303
- activateSession,
304
- activeSessionId,
305
- findReplacementSession,
306
- logger,
307
- loginSuccess,
308
- onError,
309
- oxyServices,
310
- sessions,
311
- setAuthError,
312
- updateSessions,
313
- ],
314
- );
315
-
316
- const refreshSessions = useCallback(
317
- async (activeUserId?: string): Promise<void> => {
318
- if (!activeSessionId) return;
319
-
320
- if (refreshInFlightRef.current) {
321
- await refreshInFlightRef.current;
322
- return;
323
- }
324
-
325
- const now = Date.now();
326
- if (now - lastRefreshRef.current < 500) {
327
- return;
328
- }
329
- lastRefreshRef.current = now;
330
-
331
- const refreshPromise = (async () => {
332
- try {
333
- const deviceSessions = await fetchSessionsWithFallback(oxyServices, activeSessionId, {
334
- fallbackUserId: activeUserId,
335
- logger,
336
- });
337
- updateSessions(deviceSessions, { merge: true });
338
- } catch (error) {
339
- if (isInvalidSessionError(error)) {
340
- const otherSessions = sessions
341
- .filter(
342
- (session) =>
343
- session.sessionId !== activeSessionId &&
344
- !removedSessionsRef.current.has(session.sessionId),
345
- )
346
- .map((session) => session.sessionId);
347
-
348
- const replacementUser = await findReplacementSession(otherSessions);
349
- if (!replacementUser) {
350
- await clearSessionState();
351
- }
352
- return;
353
- }
354
-
355
- handleAuthError(error, {
356
- defaultMessage: 'Failed to refresh sessions',
357
- code: 'SESSION_REFRESH_ERROR',
358
- onError,
359
- setAuthError,
360
- logger,
361
- });
362
- } finally {
363
- refreshInFlightRef.current = null;
364
- lastRefreshRef.current = Date.now();
365
- }
366
- })();
367
-
368
- refreshInFlightRef.current = refreshPromise;
369
- await refreshPromise;
370
- },
371
- [
372
- activeSessionId,
373
- clearSessionState,
374
- findReplacementSession,
375
- logger,
376
- onError,
377
- oxyServices,
378
- sessions,
379
- setAuthError,
380
- updateSessions,
381
- ],
382
- );
383
-
384
- const isRefreshInFlight = Boolean(refreshInFlightRef.current);
385
-
386
- return {
387
- sessions,
388
- activeSessionId,
389
- setActiveSessionId,
390
- updateSessions,
391
- switchSession,
392
- refreshSessions,
393
- clearSessionState,
394
- saveActiveSessionId,
395
- trackRemovedSession,
396
- storageKeys,
397
- isRefreshInFlight,
398
- };
399
- };
400
-
401
-
@@ -1,104 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
- import type { ApiError } from '../../../models/interfaces';
3
- import { createPlatformStorage, type StorageInterface } from '../../utils/storageHelpers';
4
- import { extractErrorMessage } from '../../utils/errorHandlers';
5
-
6
- export interface UseStorageOptions {
7
- onError?: (error: ApiError) => void;
8
- logger?: (message: string, error?: unknown) => void;
9
- errorCode?: string;
10
- }
11
-
12
- export interface UseStorageResult {
13
- storage: StorageInterface | null;
14
- isReady: boolean;
15
- error: string | null;
16
- refresh: () => Promise<StorageInterface | null>;
17
- withStorage: <T>(callback: (storage: StorageInterface) => Promise<T>) => Promise<T | null>;
18
- }
19
-
20
- const DEFAULT_ERROR_CODE = 'STORAGE_INIT_ERROR';
21
-
22
- /**
23
- * React hook that exposes a platform-agnostic storage reference.
24
- * Handles initialization, error propagation, and lazy re-initialization.
25
- *
26
- * @param options - Optional configuration for error reporting and logging
27
- */
28
- export const useStorage = ({
29
- onError,
30
- logger,
31
- errorCode = DEFAULT_ERROR_CODE,
32
- }: UseStorageOptions = {}): UseStorageResult => {
33
- const [storage, setStorage] = useState<StorageInterface | null>(null);
34
- const [error, setError] = useState<string | null>(null);
35
- const initializingRef = useRef<Promise<StorageInterface | null> | null>(null);
36
-
37
- const notifyError = useCallback(
38
- (err: unknown) => {
39
- const message = extractErrorMessage(err, 'Failed to initialize storage');
40
- setError(message);
41
-
42
- if (logger) {
43
- logger(message, err);
44
- }
45
-
46
- onError?.({
47
- message,
48
- code: errorCode,
49
- status: 500,
50
- });
51
- },
52
- [errorCode, logger, onError],
53
- );
54
-
55
- const createStorageInstance = useCallback(async (): Promise<StorageInterface | null> => {
56
- try {
57
- const platformStorage = await createPlatformStorage();
58
- setStorage(platformStorage);
59
- setError(null);
60
- return platformStorage;
61
- } catch (err) {
62
- notifyError(err);
63
- setStorage(null);
64
- return null;
65
- }
66
- }, [notifyError]);
67
-
68
- const refresh = useCallback(async (): Promise<StorageInterface | null> => {
69
- if (!initializingRef.current) {
70
- initializingRef.current = createStorageInstance().finally(() => {
71
- initializingRef.current = null;
72
- });
73
- }
74
-
75
- return initializingRef.current;
76
- }, [createStorageInstance]);
77
-
78
- useEffect(() => {
79
- refresh().catch((err) => {
80
- notifyError(err);
81
- });
82
- }, [refresh, notifyError]);
83
-
84
- const withStorage = useCallback(
85
- async <T,>(callback: (resolvedStorage: StorageInterface) => Promise<T>): Promise<T | null> => {
86
- const resolvedStorage = storage ?? (await refresh());
87
- if (!resolvedStorage) {
88
- return null;
89
- }
90
- return callback(resolvedStorage);
91
- },
92
- [refresh, storage],
93
- );
94
-
95
- return {
96
- storage,
97
- isReady: Boolean(storage) && !error,
98
- error,
99
- refresh,
100
- withStorage,
101
- };
102
- };
103
-
104
-