@oxyhq/services 5.21.6 → 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/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/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/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/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/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/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/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/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 +1 -1
- package/src/crypto/keyManager.ts +23 -22
- package/src/index.ts +25 -0
- 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/screens/FileManagementScreen.tsx +2 -2
- package/src/ui/utils/authHelpers.ts +183 -0
- package/src/ui/utils/avatarUtils.ts +25 -65
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useQuery, useQueries } from '@tanstack/react-query';
|
|
4
4
|
import { queryKeys } from "./queryKeys.js";
|
|
5
5
|
import { useOxy } from "../../context/OxyContext.js";
|
|
6
|
+
import { authenticatedApiCall } from "../../utils/authHelpers.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Get user profile by session ID
|
|
@@ -150,38 +151,7 @@ export const usePrivacySettings = (userId, options) => {
|
|
|
150
151
|
if (!targetUserId) {
|
|
151
152
|
throw new Error('User ID is required');
|
|
152
153
|
}
|
|
153
|
-
|
|
154
|
-
// Ensure we have a valid token before making the request
|
|
155
|
-
if (!oxyServices.hasValidToken() && activeSessionId) {
|
|
156
|
-
try {
|
|
157
|
-
// Try to get token for the session
|
|
158
|
-
await oxyServices.getTokenBySession(activeSessionId);
|
|
159
|
-
} catch (tokenError) {
|
|
160
|
-
// If getting token fails, might be an offline session - try syncing
|
|
161
|
-
const errorMessage = tokenError instanceof Error ? tokenError.message : String(tokenError);
|
|
162
|
-
if (errorMessage.includes('AUTH_REQUIRED_OFFLINE_SESSION') || errorMessage.includes('offline')) {
|
|
163
|
-
// Session sync should be handled by the app layer (e.g., accounts app's useIdentity hook)
|
|
164
|
-
throw new Error('Session needs to be synced. Please try again.');
|
|
165
|
-
} else {
|
|
166
|
-
throw tokenError;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
try {
|
|
171
|
-
return await oxyServices.getPrivacySettings(targetUserId);
|
|
172
|
-
} catch (error) {
|
|
173
|
-
const errorMessage = error?.message || '';
|
|
174
|
-
const status = error?.status || error?.response?.status;
|
|
175
|
-
|
|
176
|
-
// Handle authentication errors
|
|
177
|
-
if (status === 401 || errorMessage.includes('Authentication required') || errorMessage.includes('Invalid or missing authorization header')) {
|
|
178
|
-
// Session sync should be handled by the app layer
|
|
179
|
-
throw new Error('Authentication failed. Please sign in again.');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// TanStack Query will automatically retry on network errors
|
|
183
|
-
throw error;
|
|
184
|
-
}
|
|
154
|
+
return authenticatedApiCall(oxyServices, activeSessionId, () => oxyServices.getPrivacySettings(targetUserId));
|
|
185
155
|
},
|
|
186
156
|
enabled: options?.enabled !== false && !!targetUserId,
|
|
187
157
|
staleTime: 2 * 60 * 1000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useQuery","useQueries","queryKeys","useOxy","useUserProfile","sessionId","options","oxyServices","queryKey","users","profile","queryFn","Error","getUserBySession","enabled","staleTime","gcTime","useUserProfiles","sessionIds","queries","map","results","getUsersBySessions","user","useCurrentUser","activeSessionId","isAuthenticated","accounts","current","useUserById","userId","detail","getUserById","useUserByUsername","username","details","getProfileByUsername","useUsersBySessions","list","length","usePrivacySettings","targetUserId","id","privacy","settings","
|
|
1
|
+
{"version":3,"names":["useQuery","useQueries","queryKeys","useOxy","authenticatedApiCall","useUserProfile","sessionId","options","oxyServices","queryKey","users","profile","queryFn","Error","getUserBySession","enabled","staleTime","gcTime","useUserProfiles","sessionIds","queries","map","results","getUsersBySessions","user","useCurrentUser","activeSessionId","isAuthenticated","accounts","current","useUserById","userId","detail","getUserById","useUserByUsername","username","details","getProfileByUsername","useUsersBySessions","list","length","usePrivacySettings","targetUserId","id","privacy","settings","getPrivacySettings"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/useAccountQueries.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,UAAU,QAAQ,uBAAuB;AAE5D,SAASC,SAAS,QAAQ,gBAAa;AACvC,SAASC,MAAM,QAAQ,6BAA0B;AACjD,SAASC,oBAAoB,QAAQ,4BAAyB;;AAE9D;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAACC,SAAwB,EAAEC,OAA+B,KAAK;EAC3F,MAAM;IAAEC;EAAY,CAAC,GAAGL,MAAM,CAAC,CAAC;EAEhC,OAAOH,QAAQ,CAAC;IACdS,QAAQ,EAAEP,SAAS,CAACQ,KAAK,CAACC,OAAO,CAACL,SAAS,IAAI,EAAE,CAAC;IAClDM,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACN,SAAS,EAAE;QACd,MAAM,IAAIO,KAAK,CAAC,wBAAwB,CAAC;MAC3C;MACA,OAAO,MAAML,WAAW,CAACM,gBAAgB,CAACR,SAAS,CAAC;IACtD,CAAC;IACDS,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAK,CAAC,CAACT,SAAS;IACpDU,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAAE;IAC1BC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE;EAC1B,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAGA,CAACC,UAAoB,EAAEZ,OAA+B,KAAK;EACxF,MAAM;IAAEC;EAAY,CAAC,GAAGL,MAAM,CAAC,CAAC;EAEhC,OAAOF,UAAU,CAAC;IAChBmB,OAAO,EAAED,UAAU,CAACE,GAAG,CAAEf,SAAS,KAAM;MACtCG,QAAQ,EAAEP,SAAS,CAACQ,KAAK,CAACC,OAAO,CAACL,SAAS,CAAC;MAC5CM,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnB,MAAMU,OAAO,GAAG,MAAMd,WAAW,CAACe,kBAAkB,CAAC,CAACjB,SAAS,CAAC,CAAC;QACjE,OAAOgB,OAAO,CAAC,CAAC,CAAC,EAAEE,IAAI,IAAI,IAAI;MACjC,CAAC;MACDT,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAK,CAAC,CAACT,SAAS;MACpDU,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;MACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMQ,cAAc,GAAIlB,OAA+B,IAAK;EACjE,MAAM;IAAEC,WAAW;IAAEkB,eAAe;IAAEC;EAAgB,CAAC,GAAGxB,MAAM,CAAC,CAAC;EAElE,OAAOH,QAAQ,CAAC;IACdS,QAAQ,EAAEP,SAAS,CAAC0B,QAAQ,CAACC,OAAO,CAAC,CAAC;IACtCjB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACc,eAAe,EAAE;QACpB,MAAM,IAAIb,KAAK,CAAC,mBAAmB,CAAC;MACtC;MACA,OAAO,MAAML,WAAW,CAACM,gBAAgB,CAACY,eAAe,CAAC;IAC5D,CAAC;IACDX,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAKY,eAAe,IAAI,CAAC,CAACD,eAAe;IAC7EV,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAAE;IAC1BC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMa,WAAW,GAAGA,CAACC,MAAqB,EAAExB,OAA+B,KAAK;EACrF,MAAM;IAAEC;EAAY,CAAC,GAAGL,MAAM,CAAC,CAAC;EAEhC,OAAOH,QAAQ,CAAC;IACdS,QAAQ,EAAEP,SAAS,CAACQ,KAAK,CAACsB,MAAM,CAACD,MAAM,IAAI,EAAE,CAAC;IAC9CnB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACmB,MAAM,EAAE;QACX,MAAM,IAAIlB,KAAK,CAAC,qBAAqB,CAAC;MACxC;MACA,OAAO,MAAML,WAAW,CAACyB,WAAW,CAACF,MAAM,CAAC;IAC9C,CAAC;IACDhB,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAK,CAAC,CAACgB,MAAM;IACjDf,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMiB,iBAAiB,GAAGA,CAACC,QAAuB,EAAE5B,OAA+B,KAAK;EAC7F,MAAM;IAAEC;EAAY,CAAC,GAAGL,MAAM,CAAC,CAAC;EAEhC,OAAOH,QAAQ,CAAC;IACdS,QAAQ,EAAE,CAAC,GAAGP,SAAS,CAACQ,KAAK,CAAC0B,OAAO,CAAC,CAAC,EAAE,UAAU,EAAED,QAAQ,IAAI,EAAE,CAAC;IACpEvB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACuB,QAAQ,EAAE;QACb,MAAM,IAAItB,KAAK,CAAC,sBAAsB,CAAC;MACzC;MACA,OAAO,MAAML,WAAW,CAAC6B,oBAAoB,CAACF,QAAQ,CAAC;IACzD,CAAC;IACDpB,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAK,CAAC,CAACoB,QAAQ;IACnDnB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMqB,kBAAkB,GAAGA,CAACnB,UAAoB,EAAEZ,OAA+B,KAAK;EAC3F,MAAM;IAAEC;EAAY,CAAC,GAAGL,MAAM,CAAC,CAAC;EAEhC,OAAOH,QAAQ,CAAC;IACdS,QAAQ,EAAEP,SAAS,CAAC0B,QAAQ,CAACW,IAAI,CAACpB,UAAU,CAAC;IAC7CP,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAIO,UAAU,CAACqB,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,EAAE;MACX;MACA,OAAO,MAAMhC,WAAW,CAACe,kBAAkB,CAACJ,UAAU,CAAC;IACzD,CAAC;IACDJ,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAKI,UAAU,CAACqB,MAAM,GAAG,CAAC;IAC9DxB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMwB,kBAAkB,GAAGA,CAACV,MAAe,EAAExB,OAA+B,KAAK;EACtF,MAAM;IAAEC,WAAW;IAAEkB,eAAe;IAAEF;EAAK,CAAC,GAAGrB,MAAM,CAAC,CAAC;EACvD,MAAMuC,YAAY,GAAGX,MAAM,IAAIP,IAAI,EAAEmB,EAAE;EAEvC,OAAO3C,QAAQ,CAAC;IACdS,QAAQ,EAAEP,SAAS,CAAC0C,OAAO,CAACC,QAAQ,CAACH,YAAY,CAAC;IAClD9B,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAAC8B,YAAY,EAAE;QACjB,MAAM,IAAI7B,KAAK,CAAC,qBAAqB,CAAC;MACxC;MAEA,OAAOT,oBAAoB,CACzBI,WAAW,EACXkB,eAAe,EACf,MAAMlB,WAAW,CAACsC,kBAAkB,CAACJ,YAAY,CACnD,CAAC;IACH,CAAC;IACD3B,OAAO,EAAGR,OAAO,EAAEQ,OAAO,KAAK,KAAK,IAAK,CAAC,CAAC2B,YAAY;IACvD1B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAAE;IAC1BC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE;EAC1B,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import { useQuery } from '@tanstack/react-query';
|
|
|
4
4
|
import { queryKeys } from "./queryKeys.js";
|
|
5
5
|
import { useOxy } from "../../context/OxyContext.js";
|
|
6
6
|
import { fetchSessionsWithFallback, mapSessionsToClient } from "../../utils/sessionHelpers.js";
|
|
7
|
+
import { authenticatedApiCall } from "../../utils/authHelpers.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Get all active sessions for the current user
|
|
@@ -102,37 +103,7 @@ export const useUserDevices = options => {
|
|
|
102
103
|
return useQuery({
|
|
103
104
|
queryKey: queryKeys.devices.list(),
|
|
104
105
|
queryFn: async () => {
|
|
105
|
-
|
|
106
|
-
if (!oxyServices.hasValidToken() && activeSessionId) {
|
|
107
|
-
try {
|
|
108
|
-
// Try to get token for the session
|
|
109
|
-
await oxyServices.getTokenBySession(activeSessionId);
|
|
110
|
-
} catch (tokenError) {
|
|
111
|
-
// If getting token fails, might be an offline session - try syncing
|
|
112
|
-
const errorMessage = tokenError instanceof Error ? tokenError.message : String(tokenError);
|
|
113
|
-
if (errorMessage.includes('AUTH_REQUIRED_OFFLINE_SESSION') || errorMessage.includes('offline')) {
|
|
114
|
-
// Session sync should be handled by the app layer
|
|
115
|
-
throw new Error('Session needs to be synced. Please try again.');
|
|
116
|
-
} else {
|
|
117
|
-
throw tokenError;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
return await oxyServices.getUserDevices();
|
|
123
|
-
} catch (error) {
|
|
124
|
-
const errorMessage = error?.message || '';
|
|
125
|
-
const status = error?.status || error?.response?.status;
|
|
126
|
-
|
|
127
|
-
// Handle authentication errors
|
|
128
|
-
if (status === 401 || errorMessage.includes('Authentication required') || errorMessage.includes('Invalid or missing authorization header')) {
|
|
129
|
-
// Session sync should be handled by the app layer
|
|
130
|
-
throw new Error('Authentication failed. Please sign in again.');
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// TanStack Query will automatically retry on network errors
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
106
|
+
return authenticatedApiCall(oxyServices, activeSessionId, () => oxyServices.getUserDevices());
|
|
136
107
|
},
|
|
137
108
|
enabled: options?.enabled !== false && isAuthenticated,
|
|
138
109
|
staleTime: 5 * 60 * 1000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useQuery","queryKeys","useOxy","fetchSessionsWithFallback","mapSessionsToClient","useSessions","userId","options","oxyServices","activeSessionId","queryKey","sessions","list","queryFn","Error","fallbackDeviceId","undefined","fallbackUserId","enabled","staleTime","gcTime","useSession","sessionId","detail","validation","validateSession","useHeaderValidation","valid","user","now","Date","deviceId","expiresAt","getTime","toISOString","lastActive","lastActivity","id","toString","isCurrent","useDeviceSessions","active","getDeviceSessions","useUserDevices","isAuthenticated","devices","
|
|
1
|
+
{"version":3,"names":["useQuery","queryKeys","useOxy","fetchSessionsWithFallback","mapSessionsToClient","authenticatedApiCall","useSessions","userId","options","oxyServices","activeSessionId","queryKey","sessions","list","queryFn","Error","fallbackDeviceId","undefined","fallbackUserId","enabled","staleTime","gcTime","useSession","sessionId","detail","validation","validateSession","useHeaderValidation","valid","user","now","Date","deviceId","expiresAt","getTime","toISOString","lastActive","lastActivity","id","toString","isCurrent","useDeviceSessions","active","getDeviceSessions","useUserDevices","isAuthenticated","devices","getUserDevices","useSecurityInfo","all","getSecurityInfo"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/useServicesQueries.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useState, useCallback } from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* Hook for file filtering, sorting, and search functionality
|
|
6
|
+
* Extracts common file management logic for reuse across components
|
|
7
|
+
*/
|
|
8
|
+
export function useFileFiltering({
|
|
9
|
+
files,
|
|
10
|
+
initialViewMode = 'all',
|
|
11
|
+
initialSortBy = 'date',
|
|
12
|
+
initialSortOrder = 'desc'
|
|
13
|
+
}) {
|
|
14
|
+
const [viewMode, setViewMode] = useState(initialViewMode);
|
|
15
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
16
|
+
const [sortBy, setSortBy] = useState(initialSortBy);
|
|
17
|
+
const [sortOrder, setSortOrder] = useState(initialSortOrder);
|
|
18
|
+
const toggleSortOrder = useCallback(() => {
|
|
19
|
+
setSortOrder(prev => prev === 'asc' ? 'desc' : 'asc');
|
|
20
|
+
}, []);
|
|
21
|
+
const filteredFiles = useMemo(() => {
|
|
22
|
+
// Filter by view mode
|
|
23
|
+
let filteredByMode = files;
|
|
24
|
+
if (viewMode === 'photos') {
|
|
25
|
+
filteredByMode = files.filter(file => file.contentType.startsWith('image/'));
|
|
26
|
+
} else if (viewMode === 'videos') {
|
|
27
|
+
filteredByMode = files.filter(file => file.contentType.startsWith('video/'));
|
|
28
|
+
} else if (viewMode === 'documents') {
|
|
29
|
+
filteredByMode = files.filter(file => file.contentType.includes('pdf') || file.contentType.includes('document') || file.contentType.includes('text') || file.contentType.includes('msword') || file.contentType.includes('excel') || file.contentType.includes('spreadsheet') || file.contentType.includes('presentation') || file.contentType.includes('powerpoint'));
|
|
30
|
+
} else if (viewMode === 'audio') {
|
|
31
|
+
filteredByMode = files.filter(file => file.contentType.startsWith('audio/'));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Filter by search query
|
|
35
|
+
let filtered = filteredByMode;
|
|
36
|
+
if (searchQuery.trim()) {
|
|
37
|
+
const query = searchQuery.toLowerCase();
|
|
38
|
+
filtered = filteredByMode.filter(file => file.filename.toLowerCase().includes(query) || file.contentType.toLowerCase().includes(query) || file.metadata?.description && file.metadata.description.toLowerCase().includes(query));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Sort files
|
|
42
|
+
const sorted = [...filtered].sort((a, b) => {
|
|
43
|
+
let comparison = 0;
|
|
44
|
+
if (sortBy === 'date') {
|
|
45
|
+
const dateA = new Date(a.uploadDate || 0).getTime();
|
|
46
|
+
const dateB = new Date(b.uploadDate || 0).getTime();
|
|
47
|
+
comparison = dateA - dateB;
|
|
48
|
+
} else if (sortBy === 'size') {
|
|
49
|
+
comparison = (a.length || 0) - (b.length || 0);
|
|
50
|
+
} else if (sortBy === 'name') {
|
|
51
|
+
comparison = (a.filename || '').localeCompare(b.filename || '');
|
|
52
|
+
} else if (sortBy === 'type') {
|
|
53
|
+
comparison = (a.contentType || '').localeCompare(b.contentType || '');
|
|
54
|
+
}
|
|
55
|
+
return sortOrder === 'asc' ? comparison : -comparison;
|
|
56
|
+
});
|
|
57
|
+
return sorted;
|
|
58
|
+
}, [files, searchQuery, viewMode, sortBy, sortOrder]);
|
|
59
|
+
return {
|
|
60
|
+
filteredFiles,
|
|
61
|
+
viewMode,
|
|
62
|
+
setViewMode,
|
|
63
|
+
searchQuery,
|
|
64
|
+
setSearchQuery,
|
|
65
|
+
sortBy,
|
|
66
|
+
setSortBy,
|
|
67
|
+
sortOrder,
|
|
68
|
+
setSortOrder,
|
|
69
|
+
toggleSortOrder
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=useFileFiltering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useState","useCallback","useFileFiltering","files","initialViewMode","initialSortBy","initialSortOrder","viewMode","setViewMode","searchQuery","setSearchQuery","sortBy","setSortBy","sortOrder","setSortOrder","toggleSortOrder","prev","filteredFiles","filteredByMode","filter","file","contentType","startsWith","includes","filtered","trim","query","toLowerCase","filename","metadata","description","sorted","sort","a","b","comparison","dateA","Date","uploadDate","getTime","dateB","length","localeCompare"],"sourceRoot":"../../../../src","sources":["ui/hooks/useFileFiltering.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -516,8 +516,8 @@ const FileManagementScreen = ({
|
|
|
516
516
|
});
|
|
517
517
|
|
|
518
518
|
// Attempt to refresh file list incrementally – fetch single file metadata if API allows
|
|
519
|
-
|
|
520
|
-
|
|
519
|
+
const f = result?.file ?? result?.files?.[0];
|
|
520
|
+
if (f) {
|
|
521
521
|
const merged = {
|
|
522
522
|
id: f.id,
|
|
523
523
|
filename: f.originalName || f.sha256 || raw.name,
|