@oxyhq/services 5.16.0 → 5.16.2
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/core/mixins/OxyServices.assets.js +15 -0
- package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
- package/lib/commonjs/core/mixins/OxyServices.user.js +14 -13
- package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
- package/lib/commonjs/crypto/keyManager.js +164 -3
- package/lib/commonjs/crypto/keyManager.js.map +1 -1
- package/lib/commonjs/crypto/signatureService.js +26 -0
- package/lib/commonjs/crypto/signatureService.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/GroupedSection.js +1 -1
- package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +71 -24
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js +1 -4
- package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +177 -4
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +148 -49
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useSessionManagement.js +22 -2
- package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/index.js +28 -0
- package/lib/commonjs/ui/hooks/mutations/index.js.map +1 -0
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +314 -0
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -0
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +193 -0
- package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -0
- package/lib/commonjs/ui/hooks/queries/index.js +39 -0
- package/lib/commonjs/ui/hooks/queries/index.js.map +1 -0
- package/lib/commonjs/ui/hooks/queries/queryKeys.js +85 -0
- package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -0
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +145 -0
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -0
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +138 -0
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -0
- package/lib/commonjs/ui/hooks/queryClient.js +117 -0
- package/lib/commonjs/ui/hooks/queryClient.js.map +1 -0
- package/lib/commonjs/ui/hooks/useIdentityMutations.js +111 -0
- package/lib/commonjs/ui/hooks/useIdentityMutations.js.map +1 -0
- package/lib/commonjs/ui/hooks/useProfileEditing.js +42 -58
- package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/commonjs/ui/hooks/useQueryClient.js +20 -0
- package/lib/commonjs/ui/hooks/useQueryClient.js.map +1 -0
- package/lib/commonjs/ui/hooks/useSessionManagement.js +22 -2
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +43 -42
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +63 -58
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +6 -6
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/stores/accountStore.js +57 -42
- package/lib/commonjs/ui/stores/accountStore.js.map +1 -1
- package/lib/commonjs/ui/stores/authStore.js +4 -25
- package/lib/commonjs/ui/stores/authStore.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.assets.js +15 -0
- package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.user.js +14 -13
- package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
- package/lib/module/crypto/keyManager.js +164 -3
- package/lib/module/crypto/keyManager.js.map +1 -1
- package/lib/module/crypto/signatureService.js +26 -0
- package/lib/module/crypto/signatureService.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/GroupedSection.js +1 -1
- package/lib/module/ui/components/GroupedSection.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +72 -25
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/profile/EditDisplayNameModal.js +1 -4
- package/lib/module/ui/components/profile/EditDisplayNameModal.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +176 -4
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +148 -49
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/hooks/useSessionManagement.js +22 -2
- package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/hooks/mutations/index.js +6 -0
- package/lib/module/ui/hooks/mutations/index.js.map +1 -0
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +308 -0
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -0
- package/lib/module/ui/hooks/mutations/useServicesMutations.js +185 -0
- package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -0
- package/lib/module/ui/hooks/queries/index.js +7 -0
- package/lib/module/ui/hooks/queries/index.js.map +1 -0
- package/lib/module/ui/hooks/queries/queryKeys.js +78 -0
- package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -0
- package/lib/module/ui/hooks/queries/useAccountQueries.js +136 -0
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -0
- package/lib/module/ui/hooks/queries/useServicesQueries.js +130 -0
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -0
- package/lib/module/ui/hooks/queryClient.js +110 -0
- package/lib/module/ui/hooks/queryClient.js.map +1 -0
- package/lib/module/ui/hooks/useIdentityMutations.js +105 -0
- package/lib/module/ui/hooks/useIdentityMutations.js.map +1 -0
- package/lib/module/ui/hooks/useProfileEditing.js +43 -59
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useQueryClient.js +15 -0
- package/lib/module/ui/hooks/useQueryClient.js.map +1 -0
- package/lib/module/ui/hooks/useSessionManagement.js +22 -2
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +43 -42
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +63 -58
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -6
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/stores/accountStore.js +57 -42
- package/lib/module/ui/stores/accountStore.js.map +1 -1
- package/lib/module/ui/stores/authStore.js +4 -25
- package/lib/module/ui/stores/authStore.js.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.assets.d.ts +7 -1
- package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.user.d.ts +4 -5
- package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
- package/lib/typescript/core/mixins/index.d.ts +1 -1
- package/lib/typescript/core/mixins/index.d.ts.map +1 -1
- package/lib/typescript/crypto/keyManager.d.ts +19 -2
- package/lib/typescript/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/crypto/signatureService.d.ts +5 -0
- package/lib/typescript/crypto/signatureService.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/interfaces.d.ts +21 -0
- package/lib/typescript/models/interfaces.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/components/profile/EditDisplayNameModal.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts +4 -0
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +3 -1
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/mutations/index.d.ts +3 -0
- package/lib/typescript/ui/hooks/mutations/index.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts +25 -0
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/mutations/useServicesMutations.d.ts +23 -0
- package/lib/typescript/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/queries/index.d.ts +4 -0
- package/lib/typescript/ui/hooks/queries/index.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/queries/queryKeys.d.ts +56 -0
- package/lib/typescript/ui/hooks/queries/queryKeys.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts +41 -0
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts +34 -0
- package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/queryClient.d.ts +19 -0
- package/lib/typescript/ui/hooks/queryClient.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useIdentityMutations.d.ts +29 -0
- package/lib/typescript/ui/hooks/useIdentityMutations.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useQueryClient.d.ts +7 -0
- package/lib/typescript/ui/hooks/useQueryClient.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useSessionManagement.d.ts +3 -1
- package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -1
- package/lib/typescript/ui/stores/authStore.d.ts +0 -4
- package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
- package/package.json +6 -5
- package/src/core/mixins/OxyServices.assets.ts +16 -1
- package/src/core/mixins/OxyServices.user.ts +17 -10
- package/src/crypto/keyManager.ts +177 -2
- package/src/crypto/signatureService.ts +30 -0
- package/src/index.ts +4 -1
- package/src/models/interfaces.ts +23 -0
- package/src/ui/components/GroupedSection.tsx +1 -1
- package/src/ui/components/OxyProvider.tsx +91 -37
- package/src/ui/components/profile/EditDisplayNameModal.tsx +1 -3
- package/src/ui/context/OxyContext.tsx +185 -2
- package/src/ui/context/hooks/useAuthOperations.ts +171 -58
- package/src/ui/context/hooks/useSessionManagement.ts +24 -1
- package/src/ui/hooks/mutations/index.ts +4 -0
- package/src/ui/hooks/mutations/useAccountMutations.ts +277 -0
- package/src/ui/hooks/mutations/useServicesMutations.ts +164 -0
- package/src/ui/hooks/queries/index.ts +5 -0
- package/src/ui/hooks/queries/queryKeys.ts +73 -0
- package/src/ui/hooks/queries/useAccountQueries.ts +126 -0
- package/src/ui/hooks/queries/useServicesQueries.ts +121 -0
- package/src/ui/hooks/queryClient.ts +112 -0
- package/src/ui/hooks/useIdentityMutations.ts +115 -0
- package/src/ui/hooks/useProfileEditing.ts +46 -60
- package/src/ui/hooks/useQueryClient.ts +17 -0
- package/src/ui/hooks/useSessionManagement.ts +24 -1
- package/src/ui/screens/AccountOverviewScreen.tsx +38 -46
- package/src/ui/screens/AccountSettingsScreen.tsx +54 -54
- package/src/ui/screens/WelcomeNewUserScreen.tsx +13 -12
- package/src/ui/stores/accountStore.ts +54 -43
- package/src/ui/stores/authStore.ts +3 -17
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useUsersBySessions = exports.useUserProfiles = exports.useUserProfile = exports.useUserByUsername = exports.useUserById = exports.useCurrentUser = void 0;
|
|
7
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
8
|
+
var _queryKeys = require("./queryKeys");
|
|
9
|
+
var _OxyContext = require("../../context/OxyContext");
|
|
10
|
+
/**
|
|
11
|
+
* Get user profile by session ID
|
|
12
|
+
*/
|
|
13
|
+
const useUserProfile = (sessionId, options) => {
|
|
14
|
+
const {
|
|
15
|
+
oxyServices
|
|
16
|
+
} = (0, _OxyContext.useOxy)();
|
|
17
|
+
return (0, _reactQuery.useQuery)({
|
|
18
|
+
queryKey: _queryKeys.queryKeys.users.profile(sessionId || ''),
|
|
19
|
+
queryFn: async () => {
|
|
20
|
+
if (!sessionId) {
|
|
21
|
+
throw new Error('Session ID is required');
|
|
22
|
+
}
|
|
23
|
+
return await oxyServices.getUserBySession(sessionId);
|
|
24
|
+
},
|
|
25
|
+
enabled: options?.enabled !== false && !!sessionId,
|
|
26
|
+
staleTime: 5 * 60 * 1000,
|
|
27
|
+
// 5 minutes
|
|
28
|
+
gcTime: 30 * 60 * 1000 // 30 minutes
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Get multiple user profiles by session IDs (batch query)
|
|
34
|
+
*/
|
|
35
|
+
exports.useUserProfile = useUserProfile;
|
|
36
|
+
const useUserProfiles = (sessionIds, options) => {
|
|
37
|
+
const {
|
|
38
|
+
oxyServices
|
|
39
|
+
} = (0, _OxyContext.useOxy)();
|
|
40
|
+
return (0, _reactQuery.useQueries)({
|
|
41
|
+
queries: sessionIds.map(sessionId => ({
|
|
42
|
+
queryKey: _queryKeys.queryKeys.users.profile(sessionId),
|
|
43
|
+
queryFn: async () => {
|
|
44
|
+
const results = await oxyServices.getUsersBySessions([sessionId]);
|
|
45
|
+
return results[0]?.user || null;
|
|
46
|
+
},
|
|
47
|
+
enabled: options?.enabled !== false && !!sessionId,
|
|
48
|
+
staleTime: 5 * 60 * 1000,
|
|
49
|
+
gcTime: 30 * 60 * 1000
|
|
50
|
+
}))
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Get current authenticated user
|
|
56
|
+
*/
|
|
57
|
+
exports.useUserProfiles = useUserProfiles;
|
|
58
|
+
const useCurrentUser = options => {
|
|
59
|
+
const {
|
|
60
|
+
oxyServices,
|
|
61
|
+
activeSessionId,
|
|
62
|
+
isAuthenticated
|
|
63
|
+
} = (0, _OxyContext.useOxy)();
|
|
64
|
+
return (0, _reactQuery.useQuery)({
|
|
65
|
+
queryKey: _queryKeys.queryKeys.accounts.current(),
|
|
66
|
+
queryFn: async () => {
|
|
67
|
+
if (!activeSessionId) {
|
|
68
|
+
throw new Error('No active session');
|
|
69
|
+
}
|
|
70
|
+
return await oxyServices.getUserBySession(activeSessionId);
|
|
71
|
+
},
|
|
72
|
+
enabled: options?.enabled !== false && isAuthenticated && !!activeSessionId,
|
|
73
|
+
staleTime: 1 * 60 * 1000,
|
|
74
|
+
// 1 minute for current user
|
|
75
|
+
gcTime: 30 * 60 * 1000
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Get user by ID
|
|
81
|
+
*/
|
|
82
|
+
exports.useCurrentUser = useCurrentUser;
|
|
83
|
+
const useUserById = (userId, options) => {
|
|
84
|
+
const {
|
|
85
|
+
oxyServices
|
|
86
|
+
} = (0, _OxyContext.useOxy)();
|
|
87
|
+
return (0, _reactQuery.useQuery)({
|
|
88
|
+
queryKey: _queryKeys.queryKeys.users.detail(userId || ''),
|
|
89
|
+
queryFn: async () => {
|
|
90
|
+
if (!userId) {
|
|
91
|
+
throw new Error('User ID is required');
|
|
92
|
+
}
|
|
93
|
+
return await oxyServices.getUserById(userId);
|
|
94
|
+
},
|
|
95
|
+
enabled: options?.enabled !== false && !!userId,
|
|
96
|
+
staleTime: 5 * 60 * 1000,
|
|
97
|
+
gcTime: 30 * 60 * 1000
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Get user profile by username
|
|
103
|
+
*/
|
|
104
|
+
exports.useUserById = useUserById;
|
|
105
|
+
const useUserByUsername = (username, options) => {
|
|
106
|
+
const {
|
|
107
|
+
oxyServices
|
|
108
|
+
} = (0, _OxyContext.useOxy)();
|
|
109
|
+
return (0, _reactQuery.useQuery)({
|
|
110
|
+
queryKey: [..._queryKeys.queryKeys.users.details(), 'username', username || ''],
|
|
111
|
+
queryFn: async () => {
|
|
112
|
+
if (!username) {
|
|
113
|
+
throw new Error('Username is required');
|
|
114
|
+
}
|
|
115
|
+
return await oxyServices.getProfileByUsername(username);
|
|
116
|
+
},
|
|
117
|
+
enabled: options?.enabled !== false && !!username,
|
|
118
|
+
staleTime: 5 * 60 * 1000,
|
|
119
|
+
gcTime: 30 * 60 * 1000
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Batch get users by session IDs (optimized single API call)
|
|
125
|
+
*/
|
|
126
|
+
exports.useUserByUsername = useUserByUsername;
|
|
127
|
+
const useUsersBySessions = (sessionIds, options) => {
|
|
128
|
+
const {
|
|
129
|
+
oxyServices
|
|
130
|
+
} = (0, _OxyContext.useOxy)();
|
|
131
|
+
return (0, _reactQuery.useQuery)({
|
|
132
|
+
queryKey: _queryKeys.queryKeys.accounts.list(sessionIds),
|
|
133
|
+
queryFn: async () => {
|
|
134
|
+
if (sessionIds.length === 0) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
137
|
+
return await oxyServices.getUsersBySessions(sessionIds);
|
|
138
|
+
},
|
|
139
|
+
enabled: options?.enabled !== false && sessionIds.length > 0,
|
|
140
|
+
staleTime: 5 * 60 * 1000,
|
|
141
|
+
gcTime: 30 * 60 * 1000
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
exports.useUsersBySessions = useUsersBySessions;
|
|
145
|
+
//# sourceMappingURL=useAccountQueries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactQuery","require","_queryKeys","_OxyContext","useUserProfile","sessionId","options","oxyServices","useOxy","useQuery","queryKey","queryKeys","users","profile","queryFn","Error","getUserBySession","enabled","staleTime","gcTime","exports","useUserProfiles","sessionIds","useQueries","queries","map","results","getUsersBySessions","user","useCurrentUser","activeSessionId","isAuthenticated","accounts","current","useUserById","userId","detail","getUserById","useUserByUsername","username","details","getProfileByUsername","useUsersBySessions","list","length"],"sourceRoot":"../../../../../src","sources":["ui/hooks/queries/useAccountQueries.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAGA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACO,MAAMG,cAAc,GAAGA,CAACC,SAAwB,EAAEC,OAA+B,KAAK;EAC3F,MAAM;IAAEC;EAAY,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEhC,OAAO,IAAAC,oBAAQ,EAAC;IACdC,QAAQ,EAAEC,oBAAS,CAACC,KAAK,CAACC,OAAO,CAACR,SAAS,IAAI,EAAE,CAAC;IAClDS,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACT,SAAS,EAAE;QACd,MAAM,IAAIU,KAAK,CAAC,wBAAwB,CAAC;MAC3C;MACA,OAAO,MAAMR,WAAW,CAACS,gBAAgB,CAACX,SAAS,CAAC;IACtD,CAAC;IACDY,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAK,CAAC,CAACZ,SAAS;IACpDa,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;AAFAC,OAAA,CAAAhB,cAAA,GAAAA,cAAA;AAGO,MAAMiB,eAAe,GAAGA,CAACC,UAAoB,EAAEhB,OAA+B,KAAK;EACxF,MAAM;IAAEC;EAAY,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEhC,OAAO,IAAAe,sBAAU,EAAC;IAChBC,OAAO,EAAEF,UAAU,CAACG,GAAG,CAAEpB,SAAS,KAAM;MACtCK,QAAQ,EAAEC,oBAAS,CAACC,KAAK,CAACC,OAAO,CAACR,SAAS,CAAC;MAC5CS,OAAO,EAAE,MAAAA,CAAA,KAAY;QACnB,MAAMY,OAAO,GAAG,MAAMnB,WAAW,CAACoB,kBAAkB,CAAC,CAACtB,SAAS,CAAC,CAAC;QACjE,OAAOqB,OAAO,CAAC,CAAC,CAAC,EAAEE,IAAI,IAAI,IAAI;MACjC,CAAC;MACDX,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAK,CAAC,CAACZ,SAAS;MACpDa,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;AAFAC,OAAA,CAAAC,eAAA,GAAAA,eAAA;AAGO,MAAMQ,cAAc,GAAIvB,OAA+B,IAAK;EACjE,MAAM;IAAEC,WAAW;IAAEuB,eAAe;IAAEC;EAAgB,CAAC,GAAG,IAAAvB,kBAAM,EAAC,CAAC;EAElE,OAAO,IAAAC,oBAAQ,EAAC;IACdC,QAAQ,EAAEC,oBAAS,CAACqB,QAAQ,CAACC,OAAO,CAAC,CAAC;IACtCnB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACgB,eAAe,EAAE;QACpB,MAAM,IAAIf,KAAK,CAAC,mBAAmB,CAAC;MACtC;MACA,OAAO,MAAMR,WAAW,CAACS,gBAAgB,CAACc,eAAe,CAAC;IAC5D,CAAC;IACDb,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAKc,eAAe,IAAI,CAAC,CAACD,eAAe;IAC7EZ,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAAE;IAC1BC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AAFAC,OAAA,CAAAS,cAAA,GAAAA,cAAA;AAGO,MAAMK,WAAW,GAAGA,CAACC,MAAqB,EAAE7B,OAA+B,KAAK;EACrF,MAAM;IAAEC;EAAY,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEhC,OAAO,IAAAC,oBAAQ,EAAC;IACdC,QAAQ,EAAEC,oBAAS,CAACC,KAAK,CAACwB,MAAM,CAACD,MAAM,IAAI,EAAE,CAAC;IAC9CrB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACqB,MAAM,EAAE;QACX,MAAM,IAAIpB,KAAK,CAAC,qBAAqB,CAAC;MACxC;MACA,OAAO,MAAMR,WAAW,CAAC8B,WAAW,CAACF,MAAM,CAAC;IAC9C,CAAC;IACDlB,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAK,CAAC,CAACkB,MAAM;IACjDjB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AAFAC,OAAA,CAAAc,WAAA,GAAAA,WAAA;AAGO,MAAMI,iBAAiB,GAAGA,CAACC,QAAuB,EAAEjC,OAA+B,KAAK;EAC7F,MAAM;IAAEC;EAAY,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEhC,OAAO,IAAAC,oBAAQ,EAAC;IACdC,QAAQ,EAAE,CAAC,GAAGC,oBAAS,CAACC,KAAK,CAAC4B,OAAO,CAAC,CAAC,EAAE,UAAU,EAAED,QAAQ,IAAI,EAAE,CAAC;IACpEzB,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAI,CAACyB,QAAQ,EAAE;QACb,MAAM,IAAIxB,KAAK,CAAC,sBAAsB,CAAC;MACzC;MACA,OAAO,MAAMR,WAAW,CAACkC,oBAAoB,CAACF,QAAQ,CAAC;IACzD,CAAC;IACDtB,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAK,CAAC,CAACsB,QAAQ;IACnDrB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AAFAC,OAAA,CAAAkB,iBAAA,GAAAA,iBAAA;AAGO,MAAMI,kBAAkB,GAAGA,CAACpB,UAAoB,EAAEhB,OAA+B,KAAK;EAC3F,MAAM;IAAEC;EAAY,CAAC,GAAG,IAAAC,kBAAM,EAAC,CAAC;EAEhC,OAAO,IAAAC,oBAAQ,EAAC;IACdC,QAAQ,EAAEC,oBAAS,CAACqB,QAAQ,CAACW,IAAI,CAACrB,UAAU,CAAC;IAC7CR,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,IAAIQ,UAAU,CAACsB,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,EAAE;MACX;MACA,OAAO,MAAMrC,WAAW,CAACoB,kBAAkB,CAACL,UAAU,CAAC;IACzD,CAAC;IACDL,OAAO,EAAGX,OAAO,EAAEW,OAAO,KAAK,KAAK,IAAKK,UAAU,CAACsB,MAAM,GAAG,CAAC;IAC9D1B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IACxBC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG;EACpB,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAsB,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useUserDevices = exports.useSessions = exports.useSession = exports.useSecurityInfo = exports.useDeviceSessions = void 0;
|
|
7
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
8
|
+
var _queryKeys = require("./queryKeys");
|
|
9
|
+
var _OxyContext = require("../../context/OxyContext");
|
|
10
|
+
var _sessionHelpers = require("../../context/utils/sessionHelpers");
|
|
11
|
+
/**
|
|
12
|
+
* Get all active sessions for the current user
|
|
13
|
+
*/
|
|
14
|
+
const useSessions = (userId, options) => {
|
|
15
|
+
const {
|
|
16
|
+
oxyServices,
|
|
17
|
+
activeSessionId
|
|
18
|
+
} = (0, _OxyContext.useOxy)();
|
|
19
|
+
return (0, _reactQuery.useQuery)({
|
|
20
|
+
queryKey: _queryKeys.queryKeys.sessions.list(userId),
|
|
21
|
+
queryFn: async () => {
|
|
22
|
+
if (!activeSessionId) {
|
|
23
|
+
throw new Error('No active session');
|
|
24
|
+
}
|
|
25
|
+
const sessions = await (0, _sessionHelpers.fetchSessionsWithFallback)(oxyServices, activeSessionId, {
|
|
26
|
+
fallbackDeviceId: undefined,
|
|
27
|
+
fallbackUserId: userId
|
|
28
|
+
});
|
|
29
|
+
return (0, _sessionHelpers.mapSessionsToClient)(sessions, activeSessionId);
|
|
30
|
+
},
|
|
31
|
+
enabled: options?.enabled !== false && !!activeSessionId,
|
|
32
|
+
staleTime: 2 * 60 * 1000,
|
|
33
|
+
// 2 minutes (sessions change frequently)
|
|
34
|
+
gcTime: 10 * 60 * 1000 // 10 minutes
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Get specific session by ID
|
|
40
|
+
*/
|
|
41
|
+
exports.useSessions = useSessions;
|
|
42
|
+
const useSession = (sessionId, options) => {
|
|
43
|
+
const {
|
|
44
|
+
oxyServices
|
|
45
|
+
} = (0, _OxyContext.useOxy)();
|
|
46
|
+
return (0, _reactQuery.useQuery)({
|
|
47
|
+
queryKey: _queryKeys.queryKeys.sessions.detail(sessionId || ''),
|
|
48
|
+
queryFn: async () => {
|
|
49
|
+
if (!sessionId) {
|
|
50
|
+
throw new Error('Session ID is required');
|
|
51
|
+
}
|
|
52
|
+
const validation = await oxyServices.validateSession(sessionId, {
|
|
53
|
+
useHeaderValidation: true
|
|
54
|
+
});
|
|
55
|
+
if (!validation?.valid || !validation.user) {
|
|
56
|
+
throw new Error('Session not found or invalid');
|
|
57
|
+
}
|
|
58
|
+
const now = new Date();
|
|
59
|
+
return {
|
|
60
|
+
sessionId,
|
|
61
|
+
deviceId: '',
|
|
62
|
+
// Device ID not available from validation response
|
|
63
|
+
expiresAt: validation.expiresAt || new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000).toISOString(),
|
|
64
|
+
lastActive: validation.lastActivity || now.toISOString(),
|
|
65
|
+
userId: validation.user.id?.toString() ?? '',
|
|
66
|
+
isCurrent: false
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
enabled: options?.enabled !== false && !!sessionId,
|
|
70
|
+
staleTime: 2 * 60 * 1000,
|
|
71
|
+
gcTime: 10 * 60 * 1000
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get device sessions for the current active session
|
|
77
|
+
*/
|
|
78
|
+
exports.useSession = useSession;
|
|
79
|
+
const useDeviceSessions = options => {
|
|
80
|
+
const {
|
|
81
|
+
oxyServices,
|
|
82
|
+
activeSessionId
|
|
83
|
+
} = (0, _OxyContext.useOxy)();
|
|
84
|
+
return (0, _reactQuery.useQuery)({
|
|
85
|
+
queryKey: _queryKeys.queryKeys.sessions.active(),
|
|
86
|
+
queryFn: async () => {
|
|
87
|
+
if (!activeSessionId) {
|
|
88
|
+
throw new Error('No active session');
|
|
89
|
+
}
|
|
90
|
+
return await oxyServices.getDeviceSessions(activeSessionId);
|
|
91
|
+
},
|
|
92
|
+
enabled: options?.enabled !== false && !!activeSessionId,
|
|
93
|
+
staleTime: 2 * 60 * 1000,
|
|
94
|
+
gcTime: 10 * 60 * 1000
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get user devices
|
|
100
|
+
*/
|
|
101
|
+
exports.useDeviceSessions = useDeviceSessions;
|
|
102
|
+
const useUserDevices = options => {
|
|
103
|
+
const {
|
|
104
|
+
oxyServices,
|
|
105
|
+
isAuthenticated
|
|
106
|
+
} = (0, _OxyContext.useOxy)();
|
|
107
|
+
return (0, _reactQuery.useQuery)({
|
|
108
|
+
queryKey: _queryKeys.queryKeys.devices.list(),
|
|
109
|
+
queryFn: async () => {
|
|
110
|
+
return await oxyServices.getUserDevices();
|
|
111
|
+
},
|
|
112
|
+
enabled: options?.enabled !== false && isAuthenticated,
|
|
113
|
+
staleTime: 5 * 60 * 1000,
|
|
114
|
+
gcTime: 30 * 60 * 1000
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Get security information
|
|
120
|
+
*/
|
|
121
|
+
exports.useUserDevices = useUserDevices;
|
|
122
|
+
const useSecurityInfo = options => {
|
|
123
|
+
const {
|
|
124
|
+
oxyServices,
|
|
125
|
+
isAuthenticated
|
|
126
|
+
} = (0, _OxyContext.useOxy)();
|
|
127
|
+
return (0, _reactQuery.useQuery)({
|
|
128
|
+
queryKey: [..._queryKeys.queryKeys.devices.all, 'security'],
|
|
129
|
+
queryFn: async () => {
|
|
130
|
+
return await oxyServices.getSecurityInfo();
|
|
131
|
+
},
|
|
132
|
+
enabled: options?.enabled !== false && isAuthenticated,
|
|
133
|
+
staleTime: 5 * 60 * 1000,
|
|
134
|
+
gcTime: 30 * 60 * 1000
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
exports.useSecurityInfo = useSecurityInfo;
|
|
138
|
+
//# sourceMappingURL=useServicesQueries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactQuery","require","_queryKeys","_OxyContext","_sessionHelpers","useSessions","userId","options","oxyServices","activeSessionId","useOxy","useQuery","queryKey","queryKeys","sessions","list","queryFn","Error","fetchSessionsWithFallback","fallbackDeviceId","undefined","fallbackUserId","mapSessionsToClient","enabled","staleTime","gcTime","exports","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,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createQueryClient = exports.createPersistenceAdapter = exports.clearQueryCache = void 0;
|
|
7
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
8
|
+
const QUERY_CACHE_KEY = 'oxy_query_cache';
|
|
9
|
+
const QUERY_CACHE_VERSION = '1';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Custom persistence adapter for TanStack Query using our StorageInterface
|
|
13
|
+
*/
|
|
14
|
+
const createPersistenceAdapter = storage => {
|
|
15
|
+
return {
|
|
16
|
+
persistClient: async client => {
|
|
17
|
+
try {
|
|
18
|
+
const serialized = JSON.stringify({
|
|
19
|
+
clientState: client,
|
|
20
|
+
timestamp: Date.now(),
|
|
21
|
+
version: QUERY_CACHE_VERSION
|
|
22
|
+
});
|
|
23
|
+
await storage.setItem(QUERY_CACHE_KEY, serialized);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (__DEV__) {
|
|
26
|
+
console.warn('[QueryClient] Failed to persist cache:', error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
restoreClient: async () => {
|
|
31
|
+
try {
|
|
32
|
+
const cached = await storage.getItem(QUERY_CACHE_KEY);
|
|
33
|
+
if (!cached) return undefined;
|
|
34
|
+
const parsed = JSON.parse(cached);
|
|
35
|
+
|
|
36
|
+
// Check version compatibility
|
|
37
|
+
if (parsed.version !== QUERY_CACHE_VERSION) {
|
|
38
|
+
// Clear old cache on version mismatch
|
|
39
|
+
await storage.removeItem(QUERY_CACHE_KEY);
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Check if cache is too old (30 days)
|
|
44
|
+
const maxAge = 30 * 24 * 60 * 60 * 1000;
|
|
45
|
+
if (parsed.timestamp && Date.now() - parsed.timestamp > maxAge) {
|
|
46
|
+
await storage.removeItem(QUERY_CACHE_KEY);
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return parsed.clientState;
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (__DEV__) {
|
|
52
|
+
console.warn('[QueryClient] Failed to restore cache:', error);
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
removeClient: async () => {
|
|
58
|
+
try {
|
|
59
|
+
await storage.removeItem(QUERY_CACHE_KEY);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
if (__DEV__) {
|
|
62
|
+
console.warn('[QueryClient] Failed to remove cache:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Create a QueryClient with offline-first configuration
|
|
71
|
+
*/
|
|
72
|
+
exports.createPersistenceAdapter = createPersistenceAdapter;
|
|
73
|
+
const createQueryClient = storage => {
|
|
74
|
+
const client = new _reactQuery.QueryClient({
|
|
75
|
+
defaultOptions: {
|
|
76
|
+
queries: {
|
|
77
|
+
// Data is fresh for 5 minutes
|
|
78
|
+
staleTime: 5 * 60 * 1000,
|
|
79
|
+
// Keep unused data in cache for 30 minutes
|
|
80
|
+
gcTime: 30 * 60 * 1000,
|
|
81
|
+
// Retry 3 times with exponential backoff
|
|
82
|
+
retry: 3,
|
|
83
|
+
retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),
|
|
84
|
+
// Refetch on reconnect
|
|
85
|
+
refetchOnReconnect: true,
|
|
86
|
+
// Don't refetch on window focus (better for mobile)
|
|
87
|
+
refetchOnWindowFocus: false,
|
|
88
|
+
// Offline-first: use cache when offline
|
|
89
|
+
networkMode: 'offlineFirst'
|
|
90
|
+
},
|
|
91
|
+
mutations: {
|
|
92
|
+
// Retry once for mutations
|
|
93
|
+
retry: 1,
|
|
94
|
+
// Offline-first: queue mutations when offline
|
|
95
|
+
networkMode: 'offlineFirst'
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Note: Persistence is handled by TanStack Query's built-in persistence
|
|
101
|
+
// For now, we rely on the query client's default behavior with networkMode: 'offlineFirst'
|
|
102
|
+
// The cache will be available in memory and queries will use cached data when offline
|
|
103
|
+
// Full persistence to AsyncStorage can be added later with @tanstack/react-query-persist-client if needed
|
|
104
|
+
|
|
105
|
+
return client;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Clear persisted query cache
|
|
110
|
+
*/
|
|
111
|
+
exports.createQueryClient = createQueryClient;
|
|
112
|
+
const clearQueryCache = async storage => {
|
|
113
|
+
const adapter = createPersistenceAdapter(storage);
|
|
114
|
+
await adapter.removeClient();
|
|
115
|
+
};
|
|
116
|
+
exports.clearQueryCache = clearQueryCache;
|
|
117
|
+
//# sourceMappingURL=queryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactQuery","require","QUERY_CACHE_KEY","QUERY_CACHE_VERSION","createPersistenceAdapter","storage","persistClient","client","serialized","JSON","stringify","clientState","timestamp","Date","now","version","setItem","error","__DEV__","console","warn","restoreClient","cached","getItem","undefined","parsed","parse","removeItem","maxAge","removeClient","exports","createQueryClient","QueryClient","defaultOptions","queries","staleTime","gcTime","retry","retryDelay","attemptIndex","Math","min","refetchOnReconnect","refetchOnWindowFocus","networkMode","mutations","clearQueryCache","adapter"],"sourceRoot":"../../../../src","sources":["ui/hooks/queryClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCreateIdentity = useCreateIdentity;
|
|
7
|
+
exports.useImportIdentity = useImportIdentity;
|
|
8
|
+
exports.useSyncIdentity = useSyncIdentity;
|
|
9
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
10
|
+
/**
|
|
11
|
+
* TanStack Query mutations for identity operations
|
|
12
|
+
* Provides offline-first mutations for identity creation, import, and sync
|
|
13
|
+
* Never deletes identity on errors - preserves user data
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Hook for creating a new identity with offline support
|
|
18
|
+
* Never deletes identity on error - preserves user data
|
|
19
|
+
*/
|
|
20
|
+
function useCreateIdentity(createIdentityFn) {
|
|
21
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
22
|
+
return (0, _reactQuery.useMutation)({
|
|
23
|
+
mutationFn: createIdentityFn,
|
|
24
|
+
onSuccess: data => {
|
|
25
|
+
// Invalidate user queries to refetch after identity creation
|
|
26
|
+
queryClient.invalidateQueries({
|
|
27
|
+
queryKey: ['user']
|
|
28
|
+
});
|
|
29
|
+
queryClient.invalidateQueries({
|
|
30
|
+
queryKey: ['identity']
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
onError: error => {
|
|
34
|
+
// Never delete identity on error - just log it
|
|
35
|
+
// User can recover using recovery phrase
|
|
36
|
+
if (__DEV__) {
|
|
37
|
+
console.warn('[useCreateIdentity] Identity creation error (identity may still exist):', error);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
retry: false,
|
|
41
|
+
// Don't retry identity creation
|
|
42
|
+
networkMode: 'offlineFirst'
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Hook for importing an identity from recovery phrase
|
|
48
|
+
* Never deletes identity on error - preserves user data
|
|
49
|
+
*/
|
|
50
|
+
function useImportIdentity(importIdentityFn) {
|
|
51
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
52
|
+
return (0, _reactQuery.useMutation)({
|
|
53
|
+
mutationFn: importIdentityFn,
|
|
54
|
+
onSuccess: data => {
|
|
55
|
+
queryClient.invalidateQueries({
|
|
56
|
+
queryKey: ['user']
|
|
57
|
+
});
|
|
58
|
+
queryClient.invalidateQueries({
|
|
59
|
+
queryKey: ['identity']
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
onError: error => {
|
|
63
|
+
// Never delete identity on error - just log it
|
|
64
|
+
if (__DEV__) {
|
|
65
|
+
console.warn('[useImportIdentity] Identity import error (identity may still exist):', error);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
retry: false,
|
|
69
|
+
networkMode: 'offlineFirst'
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Hook for syncing identity with server
|
|
75
|
+
* Never deletes identity on error - only logs and allows retry
|
|
76
|
+
*/
|
|
77
|
+
function useSyncIdentity(syncIdentityFn) {
|
|
78
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
79
|
+
return (0, _reactQuery.useMutation)({
|
|
80
|
+
mutationFn: syncIdentityFn,
|
|
81
|
+
onSuccess: user => {
|
|
82
|
+
// Update user cache
|
|
83
|
+
queryClient.setQueryData(['user', 'current'], user);
|
|
84
|
+
queryClient.invalidateQueries({
|
|
85
|
+
queryKey: ['user']
|
|
86
|
+
});
|
|
87
|
+
queryClient.invalidateQueries({
|
|
88
|
+
queryKey: ['identity']
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
onError: error => {
|
|
92
|
+
// Never delete identity on error - just log it
|
|
93
|
+
// User can retry sync later or use recovery phrase
|
|
94
|
+
if (__DEV__) {
|
|
95
|
+
console.warn('[useSyncIdentity] Sync failed, but identity is preserved:', error);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
retry: (failureCount, error) => {
|
|
99
|
+
// Retry up to 2 times for sync operations
|
|
100
|
+
// Don't retry if it's a network error - user can retry when online
|
|
101
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
102
|
+
const isNetworkError = errorMessage.includes('Network') || errorMessage.includes('Failed to fetch') || error?.code === 'NETWORK_ERROR';
|
|
103
|
+
if (isNetworkError) {
|
|
104
|
+
return false; // Don't retry network errors - user will retry when online
|
|
105
|
+
}
|
|
106
|
+
return failureCount < 2;
|
|
107
|
+
},
|
|
108
|
+
networkMode: 'offlineFirst'
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=useIdentityMutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactQuery","require","useCreateIdentity","createIdentityFn","queryClient","useQueryClient","useMutation","mutationFn","onSuccess","data","invalidateQueries","queryKey","onError","error","__DEV__","console","warn","retry","networkMode","useImportIdentity","importIdentityFn","useSyncIdentity","syncIdentityFn","user","setQueryData","failureCount","errorMessage","Error","message","String","isNetworkError","includes","code"],"sourceRoot":"../../../../src","sources":["ui/hooks/useIdentityMutations.ts"],"mappings":";;;;;;;;AAMA,IAAAA,WAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAC/BC,gBAAqD,EACrD;EACA,MAAMC,WAAW,GAAG,IAAAC,0BAAc,EAAC,CAAC;EAEpC,OAAO,IAAAC,uBAAW,EAAC;IACjBC,UAAU,EAAEJ,gBAAgB;IAC5BK,SAAS,EAAGC,IAAI,IAAK;MACnB;MACAL,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,MAAM;MAAE,CAAC,CAAC;MACrDP,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,UAAU;MAAE,CAAC,CAAC;IAC3D,CAAC;IACDC,OAAO,EAAGC,KAAK,IAAK;MAClB;MACA;MACA,IAAIC,OAAO,EAAE;QACXC,OAAO,CAACC,IAAI,CAAC,yEAAyE,EAAEH,KAAK,CAAC;MAChG;IACF,CAAC;IACDI,KAAK,EAAE,KAAK;IAAE;IACdC,WAAW,EAAE;EACf,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAC/BC,gBAAmE,EACnE;EACA,MAAMhB,WAAW,GAAG,IAAAC,0BAAc,EAAC,CAAC;EAEpC,OAAO,IAAAC,uBAAW,EAAC;IACjBC,UAAU,EAAEa,gBAAgB;IAC5BZ,SAAS,EAAGC,IAAI,IAAK;MACnBL,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,MAAM;MAAE,CAAC,CAAC;MACrDP,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,UAAU;MAAE,CAAC,CAAC;IAC3D,CAAC;IACDC,OAAO,EAAGC,KAAK,IAAK;MAClB;MACA,IAAIC,OAAO,EAAE;QACXC,OAAO,CAACC,IAAI,CAAC,uEAAuE,EAAEH,KAAK,CAAC;MAC9F;IACF,CAAC;IACDI,KAAK,EAAE,KAAK;IACZC,WAAW,EAAE;EACf,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAASG,eAAeA,CAC7BC,cAAmC,EACnC;EACA,MAAMlB,WAAW,GAAG,IAAAC,0BAAc,EAAC,CAAC;EAEpC,OAAO,IAAAC,uBAAW,EAAC;IACjBC,UAAU,EAAEe,cAAc;IAC1Bd,SAAS,EAAGe,IAAI,IAAK;MACnB;MACAnB,WAAW,CAACoB,YAAY,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAED,IAAI,CAAC;MACnDnB,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,MAAM;MAAE,CAAC,CAAC;MACrDP,WAAW,CAACM,iBAAiB,CAAC;QAAEC,QAAQ,EAAE,CAAC,UAAU;MAAE,CAAC,CAAC;IAC3D,CAAC;IACDC,OAAO,EAAGC,KAAK,IAAK;MAClB;MACA;MACA,IAAIC,OAAO,EAAE;QACXC,OAAO,CAACC,IAAI,CAAC,2DAA2D,EAAEH,KAAK,CAAC;MAClF;IACF,CAAC;IACDI,KAAK,EAAEA,CAACQ,YAAY,EAAEZ,KAAU,KAAK;MACnC;MACA;MACA,MAAMa,YAAY,GAAGb,KAAK,YAAYc,KAAK,GAAGd,KAAK,CAACe,OAAO,GAAGC,MAAM,CAAChB,KAAK,CAAC;MAC3E,MAAMiB,cAAc,GAClBJ,YAAY,CAACK,QAAQ,CAAC,SAAS,CAAC,IAChCL,YAAY,CAACK,QAAQ,CAAC,iBAAiB,CAAC,IACxClB,KAAK,EAAEmB,IAAI,KAAK,eAAe;MAEjC,IAAIF,cAAc,EAAE;QAClB,OAAO,KAAK,CAAC,CAAC;MAChB;MAEA,OAAOL,YAAY,GAAG,CAAC;IACzB,CAAC;IACDP,WAAW,EAAE;EACf,CAAC,CAAC;AACJ","ignoreList":[]}
|