@oxyhq/services 5.21.5 → 5.21.7
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/lib/commonjs/crypto/keyManager.js +67 -22
- package/lib/commonjs/crypto/keyManager.js.map +1 -1
- package/lib/commonjs/index.js +66 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/BottomSheetRouter.js +100 -286
- package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedItem.js +0 -3
- package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +14 -19
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +57 -0
- package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -0
- package/lib/commonjs/ui/components/profile/EditBioModal.js +24 -156
- package/lib/commonjs/ui/components/profile/EditBioModal.js.map +1 -1
- package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js +28 -178
- package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js.map +1 -1
- package/lib/commonjs/ui/components/profile/EditEmailModal.js +32 -159
- package/lib/commonjs/ui/components/profile/EditEmailModal.js.map +1 -1
- package/lib/commonjs/ui/components/profile/EditLocationModal.js +45 -227
- package/lib/commonjs/ui/components/profile/EditLocationModal.js.map +1 -1
- package/lib/commonjs/ui/components/profile/EditUsernameModal.js +30 -155
- package/lib/commonjs/ui/components/profile/EditUsernameModal.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +177 -0
- package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -0
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +10 -123
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +2 -32
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +2 -31
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/useFileFiltering.js +76 -0
- package/lib/commonjs/ui/hooks/useFileFiltering.js.map +1 -0
- package/lib/commonjs/ui/navigation/bottomSheetManager.js +43 -145
- package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +0 -2
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +2 -2
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/authHelpers.js +164 -0
- package/lib/commonjs/ui/utils/authHelpers.js.map +1 -0
- package/lib/commonjs/ui/utils/avatarUtils.js +18 -61
- package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
- package/lib/module/crypto/keyManager.js +67 -22
- package/lib/module/crypto/keyManager.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/BottomSheetRouter.js +102 -284
- package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/module/ui/components/GroupedItem.js +0 -3
- package/lib/module/ui/components/GroupedItem.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +14 -19
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/fileManagement/AnimatedButton.js +50 -0
- package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -0
- package/lib/module/ui/components/profile/EditBioModal.js +24 -156
- package/lib/module/ui/components/profile/EditBioModal.js.map +1 -1
- package/lib/module/ui/components/profile/EditDisplayNameModal.js +28 -178
- package/lib/module/ui/components/profile/EditDisplayNameModal.js.map +1 -1
- package/lib/module/ui/components/profile/EditEmailModal.js +32 -159
- package/lib/module/ui/components/profile/EditEmailModal.js.map +1 -1
- package/lib/module/ui/components/profile/EditLocationModal.js +45 -227
- package/lib/module/ui/components/profile/EditLocationModal.js.map +1 -1
- package/lib/module/ui/components/profile/EditUsernameModal.js +30 -155
- package/lib/module/ui/components/profile/EditUsernameModal.js.map +1 -1
- package/lib/module/ui/hooks/mutations/mutationFactory.js +173 -0
- package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -0
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +10 -122
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +2 -32
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +2 -31
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/useFileFiltering.js +72 -0
- package/lib/module/ui/hooks/useFileFiltering.js.map +1 -0
- package/lib/module/ui/navigation/bottomSheetManager.js +37 -135
- package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +0 -2
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +2 -2
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/utils/authHelpers.js +154 -0
- package/lib/module/ui/utils/authHelpers.js.map +1 -0
- package/lib/module/ui/utils/avatarUtils.js +18 -61
- package/lib/module/ui/utils/avatarUtils.js.map +1 -1
- package/lib/typescript/commonjs/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +6 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts +2 -7
- package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +16 -0
- package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/profile/EditBioModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/profile/EditDisplayNameModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/profile/EditEmailModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/profile/EditLocationModal.d.ts +1 -0
- package/lib/typescript/commonjs/ui/components/profile/EditLocationModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/profile/EditUsernameModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts +76 -0
- package/lib/typescript/commonjs/ui/hooks/mutations/mutationFactory.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +29 -4
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useFileFiltering.d.ts +29 -0
- package/lib/typescript/commonjs/ui/hooks/useFileFiltering.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +11 -60
- package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/authHelpers.d.ts +99 -0
- package/lib/typescript/commonjs/ui/utils/authHelpers.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/utils/avatarUtils.d.ts.map +1 -1
- package/lib/typescript/module/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +6 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts +2 -7
- package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/GroupedItem.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +16 -0
- package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/profile/EditBioModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/profile/EditDisplayNameModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/profile/EditEmailModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/profile/EditLocationModal.d.ts +1 -0
- package/lib/typescript/module/ui/components/profile/EditLocationModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/profile/EditUsernameModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts +76 -0
- package/lib/typescript/module/ui/hooks/mutations/mutationFactory.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +29 -4
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts +1 -1
- package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useFileFiltering.d.ts +29 -0
- package/lib/typescript/module/ui/hooks/useFileFiltering.d.ts.map +1 -0
- package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +11 -60
- package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/authHelpers.d.ts +99 -0
- package/lib/typescript/module/ui/utils/authHelpers.d.ts.map +1 -0
- package/lib/typescript/module/ui/utils/avatarUtils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/crypto/keyManager.ts +23 -22
- package/src/index.ts +25 -0
- package/src/ui/components/BottomSheetRouter.tsx +97 -319
- package/src/ui/components/GroupedItem.tsx +0 -4
- package/src/ui/components/OxyProvider.tsx +13 -18
- package/src/ui/components/fileManagement/AnimatedButton.tsx +56 -0
- package/src/ui/components/profile/EditBioModal.tsx +38 -176
- package/src/ui/components/profile/EditDisplayNameModal.tsx +48 -195
- package/src/ui/components/profile/EditEmailModal.tsx +49 -180
- package/src/ui/components/profile/EditLocationModal.tsx +76 -263
- package/src/ui/components/profile/EditUsernameModal.tsx +47 -175
- package/src/ui/hooks/mutations/mutationFactory.ts +215 -0
- package/src/ui/hooks/mutations/useAccountMutations.ts +48 -136
- package/src/ui/hooks/queries/useAccountQueries.ts +6 -33
- package/src/ui/hooks/queries/useServicesQueries.ts +6 -32
- package/src/ui/hooks/useFileFiltering.ts +115 -0
- package/src/ui/navigation/bottomSheetManager.ts +43 -150
- package/src/ui/screens/AccountSettingsScreen.tsx +0 -2
- package/src/ui/screens/FileManagementScreen.tsx +2 -2
- package/src/ui/utils/authHelpers.ts +183 -0
- package/src/ui/utils/avatarUtils.ts +25 -65
- package/lib/commonjs/ui/hooks/use-haptic-press.js +0 -21
- package/lib/commonjs/ui/hooks/use-haptic-press.js.map +0 -1
- package/lib/module/ui/hooks/use-haptic-press.js +0 -17
- package/lib/module/ui/hooks/use-haptic-press.js.map +0 -1
- package/lib/typescript/commonjs/ui/hooks/use-haptic-press.d.ts +0 -8
- package/lib/typescript/commonjs/ui/hooks/use-haptic-press.d.ts.map +0 -1
- package/lib/typescript/module/ui/hooks/use-haptic-press.d.ts +0 -8
- package/lib/typescript/module/ui/hooks/use-haptic-press.d.ts.map +0 -1
- package/src/ui/hooks/use-haptic-press.ts +0 -15
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication helper utilities to reduce code duplication across hooks and utilities.
|
|
3
|
+
* These functions handle common token validation and authentication error patterns.
|
|
4
|
+
*/
|
|
5
|
+
import type { OxyServices } from '../../core';
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when session sync is required
|
|
8
|
+
*/
|
|
9
|
+
export declare class SessionSyncRequiredError extends Error {
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when authentication fails
|
|
14
|
+
*/
|
|
15
|
+
export declare class AuthenticationFailedError extends Error {
|
|
16
|
+
constructor(message?: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Ensures a valid token exists before making authenticated API calls.
|
|
20
|
+
* If no valid token exists and an active session ID is available,
|
|
21
|
+
* attempts to refresh the token using the session.
|
|
22
|
+
*
|
|
23
|
+
* @param oxyServices - The OxyServices instance
|
|
24
|
+
* @param activeSessionId - The active session ID (if available)
|
|
25
|
+
* @throws {SessionSyncRequiredError} If the session needs to be synced (offline session)
|
|
26
|
+
* @throws {Error} If token refresh fails for other reasons
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* // In a mutation or query function:
|
|
31
|
+
* await ensureValidToken(oxyServices, activeSessionId);
|
|
32
|
+
* return await oxyServices.updateProfile(updates);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function ensureValidToken(oxyServices: OxyServices, activeSessionId: string | null | undefined): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Options for handling API authentication errors
|
|
38
|
+
*/
|
|
39
|
+
export interface HandleApiErrorOptions {
|
|
40
|
+
/** Optional callback to attempt session sync and retry */
|
|
41
|
+
syncSession?: () => Promise<unknown>;
|
|
42
|
+
/** The active session ID for retry attempts */
|
|
43
|
+
activeSessionId?: string | null;
|
|
44
|
+
/** The OxyServices instance for retry attempts */
|
|
45
|
+
oxyServices?: OxyServices;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Checks if an error is an authentication error (401 or auth-related message)
|
|
49
|
+
*
|
|
50
|
+
* @param error - The error to check
|
|
51
|
+
* @returns True if the error is an authentication error
|
|
52
|
+
*/
|
|
53
|
+
export declare function isAuthenticationError(error: unknown): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Wraps an API call with authentication error handling.
|
|
56
|
+
* If an authentication error occurs, it can optionally attempt to sync the session and retry.
|
|
57
|
+
*
|
|
58
|
+
* @param apiCall - The API call function to execute
|
|
59
|
+
* @param options - Optional error handling configuration
|
|
60
|
+
* @returns The result of the API call
|
|
61
|
+
* @throws {AuthenticationFailedError} If authentication fails and cannot be recovered
|
|
62
|
+
* @throws {Error} If the API call fails for non-auth reasons
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* // Simple usage:
|
|
67
|
+
* const result = await withAuthErrorHandling(
|
|
68
|
+
* () => oxyServices.updateProfile(updates)
|
|
69
|
+
* );
|
|
70
|
+
*
|
|
71
|
+
* // With retry on auth failure:
|
|
72
|
+
* const result = await withAuthErrorHandling(
|
|
73
|
+
* () => oxyServices.updateProfile(updates),
|
|
74
|
+
* { syncSession, activeSessionId, oxyServices }
|
|
75
|
+
* );
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare function withAuthErrorHandling<T>(apiCall: () => Promise<T>, options?: HandleApiErrorOptions): Promise<T>;
|
|
79
|
+
/**
|
|
80
|
+
* Combines token validation and auth error handling for a complete authenticated API call.
|
|
81
|
+
* This is the recommended helper for most authenticated API operations.
|
|
82
|
+
*
|
|
83
|
+
* @param oxyServices - The OxyServices instance
|
|
84
|
+
* @param activeSessionId - The active session ID
|
|
85
|
+
* @param apiCall - The API call function to execute
|
|
86
|
+
* @param syncSession - Optional callback to sync session on auth failure
|
|
87
|
+
* @returns The result of the API call
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* return await authenticatedApiCall(
|
|
92
|
+
* oxyServices,
|
|
93
|
+
* activeSessionId,
|
|
94
|
+
* () => oxyServices.updateProfile(updates)
|
|
95
|
+
* );
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function authenticatedApiCall<T>(oxyServices: OxyServices, activeSessionId: string | null | undefined, apiCall: () => Promise<T>, syncSession?: () => Promise<unknown>): Promise<T>;
|
|
99
|
+
//# sourceMappingURL=authHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/authHelpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,SAAkD;CAItE;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,SAAiD;CAIrE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACzC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kDAAkD;IAClD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAc7D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GACnC,OAAO,CAAC,CAAC,CAAC,CAQZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatarUtils.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/avatarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"avatarUtils.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/avatarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,GACvB,IAAI,CAON;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EACtB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "5.21.
|
|
3
|
+
"version": "5.21.7",
|
|
4
4
|
"description": "Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -252,4 +252,4 @@
|
|
|
252
252
|
"react-native-gesture-handler": "~2.28.0",
|
|
253
253
|
"react-native-reanimated": "~4.1.1"
|
|
254
254
|
}
|
|
255
|
-
}
|
|
255
|
+
}
|
package/src/crypto/keyManager.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { ec as EC } from 'elliptic';
|
|
9
9
|
import type { ECKeyPair } from 'elliptic';
|
|
10
10
|
import { Platform } from 'react-native';
|
|
11
|
+
import { logger } from '../utils/loggerUtils';
|
|
11
12
|
|
|
12
13
|
// Lazy imports for React Native specific modules
|
|
13
14
|
let SecureStore: typeof import('expo-secure-store') | null = null;
|
|
@@ -243,7 +244,7 @@ export class KeyManager {
|
|
|
243
244
|
KeyManager.cachedHasSharedIdentity = true;
|
|
244
245
|
|
|
245
246
|
if (__DEV__) {
|
|
246
|
-
|
|
247
|
+
logger.debug('Shared identity created successfully', { component: 'KeyManager' });
|
|
247
248
|
}
|
|
248
249
|
|
|
249
250
|
return publicKey;
|
|
@@ -282,7 +283,7 @@ export class KeyManager {
|
|
|
282
283
|
return publicKey;
|
|
283
284
|
} catch (error) {
|
|
284
285
|
if (__DEV__) {
|
|
285
|
-
|
|
286
|
+
logger.warn('Failed to get shared public key', { component: 'KeyManager' }, error);
|
|
286
287
|
}
|
|
287
288
|
KeyManager.cachedSharedPublicKey = null;
|
|
288
289
|
return null;
|
|
@@ -317,7 +318,7 @@ export class KeyManager {
|
|
|
317
318
|
return privateKey;
|
|
318
319
|
} catch (error) {
|
|
319
320
|
if (__DEV__) {
|
|
320
|
-
|
|
321
|
+
logger.warn('Failed to get shared private key', { component: 'KeyManager' }, error);
|
|
321
322
|
}
|
|
322
323
|
return null;
|
|
323
324
|
}
|
|
@@ -348,7 +349,7 @@ export class KeyManager {
|
|
|
348
349
|
return hasShared;
|
|
349
350
|
} catch (error) {
|
|
350
351
|
if (__DEV__) {
|
|
351
|
-
|
|
352
|
+
logger.warn('Failed to check shared identity', { component: 'KeyManager' }, error);
|
|
352
353
|
}
|
|
353
354
|
KeyManager.cachedHasSharedIdentity = false;
|
|
354
355
|
return false;
|
|
@@ -397,7 +398,7 @@ export class KeyManager {
|
|
|
397
398
|
KeyManager.cachedHasSharedIdentity = true;
|
|
398
399
|
|
|
399
400
|
if (__DEV__) {
|
|
400
|
-
|
|
401
|
+
logger.debug('Shared identity imported successfully', { component: 'KeyManager' });
|
|
401
402
|
}
|
|
402
403
|
|
|
403
404
|
return publicKey;
|
|
@@ -436,11 +437,11 @@ export class KeyManager {
|
|
|
436
437
|
}
|
|
437
438
|
|
|
438
439
|
if (__DEV__) {
|
|
439
|
-
|
|
440
|
+
logger.debug('Shared session stored successfully', { component: 'KeyManager' });
|
|
440
441
|
}
|
|
441
442
|
} catch (error) {
|
|
442
443
|
if (__DEV__) {
|
|
443
|
-
|
|
444
|
+
logger.error('Failed to store shared session', error, { component: 'KeyManager' });
|
|
444
445
|
}
|
|
445
446
|
throw error;
|
|
446
447
|
}
|
|
@@ -484,7 +485,7 @@ export class KeyManager {
|
|
|
484
485
|
return { sessionId, accessToken };
|
|
485
486
|
} catch (error) {
|
|
486
487
|
if (__DEV__) {
|
|
487
|
-
|
|
488
|
+
logger.warn('Failed to get shared session', { component: 'KeyManager' }, error);
|
|
488
489
|
}
|
|
489
490
|
return null;
|
|
490
491
|
}
|
|
@@ -517,11 +518,11 @@ export class KeyManager {
|
|
|
517
518
|
}
|
|
518
519
|
|
|
519
520
|
if (__DEV__) {
|
|
520
|
-
|
|
521
|
+
logger.debug('Shared session cleared successfully', { component: 'KeyManager' });
|
|
521
522
|
}
|
|
522
523
|
} catch (error) {
|
|
523
524
|
if (__DEV__) {
|
|
524
|
-
|
|
525
|
+
logger.error('Failed to clear shared session', error, { component: 'KeyManager' });
|
|
525
526
|
}
|
|
526
527
|
}
|
|
527
528
|
}
|
|
@@ -545,7 +546,7 @@ export class KeyManager {
|
|
|
545
546
|
const hasShared = await KeyManager.hasSharedIdentity();
|
|
546
547
|
if (hasShared) {
|
|
547
548
|
if (__DEV__) {
|
|
548
|
-
|
|
549
|
+
logger.debug('Shared identity already exists, skipping migration', { component: 'KeyManager' });
|
|
549
550
|
}
|
|
550
551
|
return true;
|
|
551
552
|
}
|
|
@@ -554,7 +555,7 @@ export class KeyManager {
|
|
|
554
555
|
const privateKey = await KeyManager.getPrivateKey();
|
|
555
556
|
if (!privateKey) {
|
|
556
557
|
if (__DEV__) {
|
|
557
|
-
|
|
558
|
+
logger.debug('No local identity to migrate', { component: 'KeyManager' });
|
|
558
559
|
}
|
|
559
560
|
return false;
|
|
560
561
|
}
|
|
@@ -563,13 +564,13 @@ export class KeyManager {
|
|
|
563
564
|
await KeyManager.importSharedIdentity(privateKey);
|
|
564
565
|
|
|
565
566
|
if (__DEV__) {
|
|
566
|
-
|
|
567
|
+
logger.debug('Successfully migrated local identity to shared identity', { component: 'KeyManager' });
|
|
567
568
|
}
|
|
568
569
|
|
|
569
570
|
return true;
|
|
570
571
|
} catch (error) {
|
|
571
572
|
if (__DEV__) {
|
|
572
|
-
|
|
573
|
+
logger.error('Failed to migrate to shared identity', error, { component: 'KeyManager' });
|
|
573
574
|
}
|
|
574
575
|
return false;
|
|
575
576
|
}
|
|
@@ -640,7 +641,7 @@ export class KeyManager {
|
|
|
640
641
|
// If secure store is not available, return null (no identity)
|
|
641
642
|
// This allows the app to continue functioning even if secure store fails to load
|
|
642
643
|
if (__DEV__) {
|
|
643
|
-
|
|
644
|
+
logger.warn('Failed to access secure store', { component: 'KeyManager' }, error);
|
|
644
645
|
}
|
|
645
646
|
return null;
|
|
646
647
|
}
|
|
@@ -670,7 +671,7 @@ export class KeyManager {
|
|
|
670
671
|
// Cache null to avoid repeated failed attempts
|
|
671
672
|
KeyManager.cachedPublicKey = null;
|
|
672
673
|
if (__DEV__) {
|
|
673
|
-
|
|
674
|
+
logger.warn('Failed to access secure store', { component: 'KeyManager' }, error);
|
|
674
675
|
}
|
|
675
676
|
return null;
|
|
676
677
|
}
|
|
@@ -700,7 +701,7 @@ export class KeyManager {
|
|
|
700
701
|
// Cache false to avoid repeated failed attempts
|
|
701
702
|
KeyManager.cachedHasIdentity = false;
|
|
702
703
|
if (__DEV__) {
|
|
703
|
-
|
|
704
|
+
logger.warn('Failed to check identity', { component: 'KeyManager' }, error);
|
|
704
705
|
}
|
|
705
706
|
return false;
|
|
706
707
|
}
|
|
@@ -741,11 +742,11 @@ export class KeyManager {
|
|
|
741
742
|
try {
|
|
742
743
|
const backupSuccess = await KeyManager.backupIdentity();
|
|
743
744
|
if (!backupSuccess && typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
744
|
-
|
|
745
|
+
logger.warn('Failed to backup identity before deletion - proceeding anyway', { component: 'KeyManager' });
|
|
745
746
|
}
|
|
746
747
|
} catch (backupError) {
|
|
747
748
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
748
|
-
|
|
749
|
+
logger.warn('Failed to backup identity before deletion', { component: 'KeyManager' }, backupError);
|
|
749
750
|
}
|
|
750
751
|
}
|
|
751
752
|
}
|
|
@@ -795,7 +796,7 @@ export class KeyManager {
|
|
|
795
796
|
return true;
|
|
796
797
|
} catch (error) {
|
|
797
798
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
798
|
-
|
|
799
|
+
logger.error('Failed to backup identity', error, { component: 'KeyManager' });
|
|
799
800
|
}
|
|
800
801
|
return false;
|
|
801
802
|
}
|
|
@@ -841,7 +842,7 @@ export class KeyManager {
|
|
|
841
842
|
return true;
|
|
842
843
|
} catch (error) {
|
|
843
844
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
844
|
-
|
|
845
|
+
logger.error('Identity integrity check failed', error, { component: 'KeyManager' });
|
|
845
846
|
}
|
|
846
847
|
return false;
|
|
847
848
|
}
|
|
@@ -898,7 +899,7 @@ export class KeyManager {
|
|
|
898
899
|
return false;
|
|
899
900
|
} catch (error) {
|
|
900
901
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
901
|
-
|
|
902
|
+
logger.error('Failed to restore identity from backup', error, { component: 'KeyManager' });
|
|
902
903
|
}
|
|
903
904
|
return false;
|
|
904
905
|
}
|
package/src/index.ts
CHANGED
|
@@ -183,6 +183,31 @@ export {
|
|
|
183
183
|
useRemoveDevice,
|
|
184
184
|
} from './ui/hooks/mutations';
|
|
185
185
|
|
|
186
|
+
// Mutation factory utilities
|
|
187
|
+
export {
|
|
188
|
+
createProfileMutation,
|
|
189
|
+
createGenericMutation,
|
|
190
|
+
} from './ui/hooks/mutations/mutationFactory';
|
|
191
|
+
export type {
|
|
192
|
+
ProfileMutationConfig,
|
|
193
|
+
GenericMutationConfig,
|
|
194
|
+
} from './ui/hooks/mutations/mutationFactory';
|
|
195
|
+
|
|
196
|
+
// Authentication helpers
|
|
197
|
+
export {
|
|
198
|
+
ensureValidToken,
|
|
199
|
+
withAuthErrorHandling,
|
|
200
|
+
authenticatedApiCall,
|
|
201
|
+
isAuthenticationError,
|
|
202
|
+
SessionSyncRequiredError,
|
|
203
|
+
AuthenticationFailedError,
|
|
204
|
+
} from './ui/utils/authHelpers';
|
|
205
|
+
export type { HandleApiErrorOptions } from './ui/utils/authHelpers';
|
|
206
|
+
|
|
207
|
+
// File filtering hook
|
|
208
|
+
export { useFileFiltering } from './ui/hooks/useFileFiltering';
|
|
209
|
+
export type { ViewMode, SortBy, SortOrder } from './ui/hooks/useFileFiltering';
|
|
210
|
+
|
|
186
211
|
// UI components
|
|
187
212
|
export { OxySignInButton } from './ui/components/OxySignInButton';
|
|
188
213
|
export { OxyLogo, FollowButton } from './ui';
|