@oxyhq/services 5.17.7 → 5.17.9
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/index.js +0 -23
- package/lib/commonjs/crypto/index.js.map +1 -1
- package/lib/commonjs/index.js +0 -15
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/Icon.js.map +1 -1
- package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
- package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
- package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
- package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
- package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +37 -589
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContextBase.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +60 -425
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +8 -112
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +2 -27
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +2 -27
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +2 -88
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +0 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/stores/authStore.js +52 -15
- package/lib/commonjs/ui/stores/authStore.js.map +1 -1
- package/lib/commonjs/ui/utils/avatarUtils.js +2 -32
- package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
- package/lib/module/crypto/index.js +4 -6
- package/lib/module/crypto/index.js.map +1 -1
- package/lib/module/index.js +6 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/Icon.js.map +1 -1
- package/lib/module/ui/components/IconButton/utils.js.map +1 -1
- package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
- package/lib/module/ui/components/TextField/helpers.js.map +1 -1
- package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
- package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +35 -588
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/OxyContextBase.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +60 -424
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +8 -112
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +2 -27
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +2 -27
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +2 -88
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +0 -1
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/stores/authStore.js +52 -15
- package/lib/module/ui/stores/authStore.js.map +1 -1
- package/lib/module/ui/utils/avatarUtils.js +2 -32
- package/lib/module/ui/utils/avatarUtils.js.map +1 -1
- package/lib/typescript/crypto/index.d.ts +2 -5
- package/lib/typescript/crypto/index.d.ts.map +1 -1
- package/lib/typescript/crypto/types.d.ts +6 -2
- package/lib/typescript/crypto/types.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +4 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
- package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
- package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
- package/lib/typescript/ui/components/TextField/helpers.d.ts +6 -6
- package/lib/typescript/ui/components/types.d.ts +0 -4
- package/lib/typescript/ui/components/types.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContextBase.d.ts +2 -39
- package/lib/typescript/ui/context/OxyContextBase.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -25
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -14
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/ui/stores/authStore.d.ts +27 -4
- package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
- package/lib/typescript/ui/utils/avatarUtils.d.ts +0 -2
- package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/crypto/index.ts +3 -11
- package/src/crypto/types.ts +6 -2
- package/src/index.ts +6 -11
- package/src/ui/components/Icon.tsx +1 -1
- package/src/ui/components/IconButton/utils.ts +1 -1
- package/src/ui/components/TextField/Adornment/utils.ts +2 -2
- package/src/ui/components/TextField/helpers.tsx +8 -8
- package/src/ui/components/TouchableRipple/utils.ts +2 -2
- package/src/ui/components/Typography/AnimatedText.tsx +2 -2
- package/src/ui/components/types.tsx +0 -6
- package/src/ui/context/OxyContext.tsx +33 -637
- package/src/ui/context/OxyContextBase.tsx +5 -23
- package/src/ui/context/hooks/useAuthOperations.ts +84 -460
- package/src/ui/hooks/mutations/useAccountMutations.ts +12 -110
- package/src/ui/hooks/queries/useAccountQueries.ts +3 -27
- package/src/ui/hooks/queries/useServicesQueries.ts +3 -27
- package/src/ui/hooks/useSessionSocket.ts +2 -106
- package/src/ui/screens/OxyAuthScreen.tsx +1 -1
- package/src/ui/stores/authStore.ts +57 -18
- package/src/ui/utils/avatarUtils.ts +4 -36
- package/lib/commonjs/crypto/keyManager.js +0 -511
- package/lib/commonjs/crypto/keyManager.js.map +0 -1
- package/lib/commonjs/crypto/signatureService.js +0 -269
- package/lib/commonjs/crypto/signatureService.js.map +0 -1
- package/lib/module/crypto/keyManager.js +0 -508
- package/lib/module/crypto/keyManager.js.map +0 -1
- package/lib/module/crypto/signatureService.js +0 -266
- package/lib/module/crypto/signatureService.js.map +0 -1
- package/lib/typescript/crypto/keyManager.d.ts +0 -97
- package/lib/typescript/crypto/keyManager.d.ts.map +0 -1
- package/lib/typescript/crypto/signatureService.d.ts +0 -77
- package/lib/typescript/crypto/signatureService.d.ts.map +0 -1
- package/src/crypto/keyManager.ts +0 -545
- package/src/crypto/signatureService.ts +0 -301
|
@@ -5,19 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useAuthOperations = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
var _deviceManager = require("../../../utils/deviceManager");
|
|
9
8
|
var _sessionHelpers = require("../../utils/sessionHelpers");
|
|
10
9
|
var _errorHandlers = require("../../utils/errorHandlers");
|
|
11
|
-
var _crypto = require("../../../crypto");
|
|
12
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
-
const LOGIN_ERROR_CODE = 'LOGIN_ERROR';
|
|
14
|
-
const REGISTER_ERROR_CODE = 'REGISTER_ERROR';
|
|
15
10
|
const LOGOUT_ERROR_CODE = 'LOGOUT_ERROR';
|
|
16
11
|
const LOGOUT_ALL_ERROR_CODE = 'LOGOUT_ALL_ERROR';
|
|
17
12
|
|
|
18
13
|
/**
|
|
19
|
-
* Authentication operations
|
|
20
|
-
*
|
|
14
|
+
* Authentication operations for Services SDK.
|
|
15
|
+
*
|
|
16
|
+
* ARCHITECTURE:
|
|
17
|
+
* - Services SDK only handles tokens/sessions (NOT identity)
|
|
18
|
+
* - Accounts app handles identity (KeyManager, SignatureService, challenge signing)
|
|
19
|
+
* - completeSignIn() accepts already-verified session from Accounts app
|
|
21
20
|
*/
|
|
22
21
|
const useAuthOperations = ({
|
|
23
22
|
oxyServices,
|
|
@@ -36,422 +35,78 @@ const useAuthOperations = ({
|
|
|
36
35
|
loginFailure,
|
|
37
36
|
logoutStore,
|
|
38
37
|
setAuthState,
|
|
39
|
-
setIdentitySynced,
|
|
40
|
-
setSyncing,
|
|
41
38
|
logger
|
|
42
39
|
}) => {
|
|
43
40
|
/**
|
|
44
|
-
*
|
|
41
|
+
* Complete sign-in after external authentication.
|
|
42
|
+
*
|
|
43
|
+
* This is called by Accounts app AFTER it has:
|
|
44
|
+
* 1. Requested challenge from backend
|
|
45
|
+
* 2. Signed challenge locally with private key
|
|
46
|
+
* 3. Verified challenge with backend to get sessionResponse
|
|
47
|
+
*
|
|
48
|
+
* Services SDK only stores tokens and manages session state.
|
|
49
|
+
*
|
|
50
|
+
* @param sessionResponse - Session data from verifyChallenge API call
|
|
45
51
|
*/
|
|
46
|
-
const
|
|
47
|
-
const deviceFingerprintObj = _deviceManager.DeviceManager.getDeviceFingerprint();
|
|
48
|
-
const deviceFingerprint = JSON.stringify(deviceFingerprintObj);
|
|
49
|
-
const deviceInfo = await _deviceManager.DeviceManager.getDeviceInfo();
|
|
50
|
-
const deviceName = deviceInfo.deviceName || _deviceManager.DeviceManager.getDefaultDeviceName();
|
|
51
|
-
const USER_ID_STORAGE_KEY = 'oxy_user_id';
|
|
52
|
-
|
|
53
|
-
// Online-only sign-in: require backend availability
|
|
54
|
-
// First, look up the user by public key to get the correct userId
|
|
55
|
-
// This ensures we always use the userId that matches the current identity's public key
|
|
56
|
-
let userId = null;
|
|
57
|
-
|
|
58
|
-
// Always verify the userId matches the current public key
|
|
59
|
-
// This prevents auth failures when identity has changed
|
|
60
|
-
const userLookup = await oxyServices.getUserByPublicKey(publicKey);
|
|
61
|
-
userId = userLookup.id;
|
|
62
|
-
|
|
63
|
-
// Update stored userId to match current identity
|
|
64
|
-
if (storage && userId) {
|
|
65
|
-
await storage.setItem(USER_ID_STORAGE_KEY, userId).catch(() => {});
|
|
66
|
-
}
|
|
67
|
-
const challengeResponse = await oxyServices.requestChallenge(userId);
|
|
68
|
-
const challenge = challengeResponse.challenge;
|
|
69
|
-
|
|
70
|
-
// Note: Biometric authentication check should be handled by the app layer
|
|
71
|
-
// (e.g., accounts app) before calling signIn. The biometric preference is stored
|
|
72
|
-
// in local storage as 'oxy_biometric_enabled' and can be checked there.
|
|
73
|
-
|
|
74
|
-
// Sign the challenge
|
|
75
|
-
const {
|
|
76
|
-
challenge: signature,
|
|
77
|
-
timestamp
|
|
78
|
-
} = await _crypto.SignatureService.signChallenge(challenge);
|
|
79
|
-
|
|
80
|
-
// Online sign-in: use normal flow
|
|
81
|
-
if (!userId) {
|
|
82
|
-
throw new Error('User ID not found');
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Verify and create session using userId
|
|
86
|
-
let sessionResponse;
|
|
87
|
-
try {
|
|
88
|
-
sessionResponse = await oxyServices.verifyChallenge(userId, challenge, signature, timestamp, deviceName, deviceFingerprint);
|
|
89
|
-
} catch (verifyError) {
|
|
90
|
-
// Add detailed logging for 401 errors to help diagnose auth failures
|
|
91
|
-
if (__DEV__) {
|
|
92
|
-
console.error('[useAuthOperations] verifyChallenge failed:', {
|
|
93
|
-
error: verifyError,
|
|
94
|
-
userId,
|
|
95
|
-
challengeLength: challenge?.length,
|
|
96
|
-
signatureLength: signature?.length,
|
|
97
|
-
timestamp,
|
|
98
|
-
timeSinceChallenge: Date.now() - timestamp
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
throw verifyError;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Store tokens immediately (no extra round-trip)
|
|
105
|
-
oxyServices.setTokens(sessionResponse.accessToken, sessionResponse.refreshToken);
|
|
106
|
-
|
|
107
|
-
// Get full user data
|
|
108
|
-
const fullUser = await oxyServices.getUserBySession(sessionResponse.sessionId);
|
|
109
|
-
|
|
110
|
-
// IMPORTANT: user.id should be MongoDB ObjectId, not publicKey
|
|
111
|
-
// The API should return the correct id (ObjectId) from the database
|
|
112
|
-
// If it doesn't, we need to fix the API, not work around it here
|
|
113
|
-
// Validate that id is ObjectId format (24 hex characters)
|
|
114
|
-
if (fullUser.id && !/^[0-9a-fA-F]{24}$/.test(fullUser.id)) {
|
|
115
|
-
console.warn('[useAuthOperations] User.id is not MongoDB ObjectId format:', {
|
|
116
|
-
id: fullUser.id.substring(0, 20),
|
|
117
|
-
publicKey: fullUser.publicKey.substring(0, 20),
|
|
118
|
-
message: 'API should return MongoDB ObjectId as user.id, not publicKey'
|
|
119
|
-
});
|
|
120
|
-
// Don't override - let the API fix this issue
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Fetch device sessions
|
|
124
|
-
let allDeviceSessions = [];
|
|
125
|
-
try {
|
|
126
|
-
allDeviceSessions = await (0, _sessionHelpers.fetchSessionsWithFallback)(oxyServices, sessionResponse.sessionId, {
|
|
127
|
-
fallbackDeviceId: sessionResponse.deviceId,
|
|
128
|
-
fallbackUserId: fullUser.id,
|
|
129
|
-
logger
|
|
130
|
-
});
|
|
131
|
-
} catch (error) {
|
|
132
|
-
if (__DEV__) {
|
|
133
|
-
console.warn('Failed to fetch device sessions after login:', error);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Check for existing session for same user
|
|
138
|
-
const existingSession = allDeviceSessions.find(session => session.userId?.toString() === fullUser.id?.toString() && session.sessionId !== sessionResponse.sessionId);
|
|
139
|
-
if (existingSession) {
|
|
140
|
-
// Logout duplicate session
|
|
141
|
-
try {
|
|
142
|
-
await oxyServices.logoutSession(sessionResponse.sessionId, sessionResponse.sessionId);
|
|
143
|
-
} catch (logoutError) {
|
|
144
|
-
if (__DEV__) {
|
|
145
|
-
console.warn('Failed to logout duplicate session:', logoutError);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
await switchSession(existingSession.sessionId);
|
|
149
|
-
updateSessions(allDeviceSessions.filter(session => session.sessionId !== sessionResponse.sessionId), {
|
|
150
|
-
merge: false
|
|
151
|
-
});
|
|
152
|
-
onAuthStateChange?.(fullUser);
|
|
153
|
-
return fullUser;
|
|
154
|
-
}
|
|
155
|
-
setActiveSessionId(sessionResponse.sessionId);
|
|
156
|
-
await saveActiveSessionId(sessionResponse.sessionId);
|
|
157
|
-
updateSessions(allDeviceSessions, {
|
|
158
|
-
merge: true
|
|
159
|
-
});
|
|
160
|
-
await applyLanguagePreference(fullUser);
|
|
161
|
-
loginSuccess(); // Services never caches profile - only tokens
|
|
162
|
-
onAuthStateChange?.(fullUser);
|
|
163
|
-
if (storage) {
|
|
164
|
-
await storage.setItem('oxy_identity_synced', 'true').catch(() => {});
|
|
165
|
-
}
|
|
166
|
-
setIdentitySynced(true);
|
|
167
|
-
return fullUser;
|
|
168
|
-
}, [applyLanguagePreference, logger, loginSuccess, onAuthStateChange, oxyServices, saveActiveSessionId, setActiveSessionId, setIdentitySynced, switchSession, updateSessions, storage]);
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Create a new identity (offline-first)
|
|
172
|
-
* Identity is purely cryptographic - no username or email required
|
|
173
|
-
*/
|
|
174
|
-
const createIdentity = (0, _react.useCallback)(async () => {
|
|
52
|
+
const completeSignIn = (0, _react.useCallback)(async sessionResponse => {
|
|
175
53
|
if (!storage) throw new Error('Storage not initialized');
|
|
176
54
|
setAuthState({
|
|
177
55
|
isLoading: true,
|
|
178
56
|
error: null
|
|
179
57
|
});
|
|
180
58
|
try {
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
publicKey,
|
|
184
|
-
privateKey
|
|
185
|
-
} = await _crypto.KeyManager.generateKeyPair();
|
|
186
|
-
await _crypto.KeyManager.importKeyPair(privateKey);
|
|
59
|
+
// Store tokens (Services' only responsibility)
|
|
60
|
+
oxyServices.setTokens(sessionResponse.accessToken, sessionResponse.refreshToken);
|
|
187
61
|
|
|
188
|
-
//
|
|
189
|
-
|
|
190
|
-
// Registration with server (registerIdentity) must be done by the app (Accounts) with profile data
|
|
191
|
-
await storage.setItem('oxy_identity_synced', 'false');
|
|
192
|
-
setIdentitySynced(false);
|
|
193
|
-
return {
|
|
194
|
-
synced: false // Always false - registration must be done separately by Accounts app
|
|
195
|
-
};
|
|
196
|
-
} catch (error) {
|
|
197
|
-
// CRITICAL: Never delete identity on error - it may have been successfully created
|
|
198
|
-
// Only log the error and let the user recover using their backup file
|
|
199
|
-
// Identity deletion should ONLY happen when explicitly requested by the user
|
|
200
|
-
if (__DEV__ && logger) {
|
|
201
|
-
logger('Error during identity creation (identity may still exist):', error);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Check if identity was actually created (keys exist)
|
|
205
|
-
const hasIdentity = await _crypto.KeyManager.hasIdentity().catch(() => false);
|
|
206
|
-
if (hasIdentity) {
|
|
207
|
-
// Identity exists - don't delete it! Just mark as not synced
|
|
208
|
-
await storage.setItem('oxy_identity_synced', 'false').catch(() => {});
|
|
209
|
-
setIdentitySynced(false);
|
|
210
|
-
if (__DEV__ && logger) {
|
|
211
|
-
logger('Identity was created but sync failed - user can sync later using backup file');
|
|
212
|
-
}
|
|
213
|
-
} else {
|
|
214
|
-
// No identity exists - this was a generation failure, safe to clean up sync flag
|
|
215
|
-
await storage.removeItem('oxy_identity_synced').catch(() => {});
|
|
216
|
-
setIdentitySynced(false);
|
|
217
|
-
}
|
|
218
|
-
const message = (0, _errorHandlers.handleAuthError)(error, {
|
|
219
|
-
defaultMessage: 'Failed to create identity',
|
|
220
|
-
code: REGISTER_ERROR_CODE,
|
|
221
|
-
onError,
|
|
222
|
-
setAuthError: msg => setAuthState({
|
|
223
|
-
error: msg
|
|
224
|
-
}),
|
|
225
|
-
logger
|
|
226
|
-
});
|
|
227
|
-
loginFailure(message);
|
|
228
|
-
throw error;
|
|
229
|
-
} finally {
|
|
230
|
-
setAuthState({
|
|
231
|
-
isLoading: false
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}, [oxyServices, storage, setAuthState, loginFailure, onError, logger, setIdentitySynced]);
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Check if identity is synced with server (reads from storage for persistence)
|
|
238
|
-
*/
|
|
239
|
-
const isIdentitySyncedFn = (0, _react.useCallback)(async () => {
|
|
240
|
-
if (!storage) return true;
|
|
241
|
-
const synced = await storage.getItem('oxy_identity_synced');
|
|
242
|
-
const isSynced = synced !== 'false';
|
|
243
|
-
setIdentitySynced(isSynced);
|
|
244
|
-
return isSynced;
|
|
245
|
-
}, [storage, setIdentitySynced]);
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Sync local identity with server (call when online)
|
|
249
|
-
* TanStack Query handles offline mutations automatically
|
|
250
|
-
*/
|
|
251
|
-
const syncIdentity = (0, _react.useCallback)(async () => {
|
|
252
|
-
if (!storage) throw new Error('Storage not initialized');
|
|
253
|
-
setAuthState({
|
|
254
|
-
isLoading: true,
|
|
255
|
-
error: null
|
|
256
|
-
});
|
|
257
|
-
setSyncing(true);
|
|
258
|
-
try {
|
|
259
|
-
const publicKey = await _crypto.KeyManager.getPublicKey();
|
|
260
|
-
if (!publicKey) {
|
|
261
|
-
throw new Error('No identity found on this device');
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Check if already synced
|
|
265
|
-
const alreadySynced = await storage.getItem('oxy_identity_synced');
|
|
266
|
-
if (alreadySynced === 'true') {
|
|
267
|
-
setIdentitySynced(true);
|
|
268
|
-
return await performSignIn(publicKey);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Check if already registered on server
|
|
272
|
-
const {
|
|
273
|
-
registered
|
|
274
|
-
} = await oxyServices.checkPublicKeyRegistered(publicKey);
|
|
275
|
-
if (!registered) {
|
|
276
|
-
// Identity is not registered - registration must be done by Accounts app with profile data
|
|
277
|
-
// syncIdentity only syncs already-registered identities
|
|
278
|
-
throw new Error('Identity is not registered. Please register your identity first using the Accounts app.');
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// Mark as synced (Zustand store + storage)
|
|
282
|
-
await storage.setItem('oxy_identity_synced', 'true');
|
|
283
|
-
setIdentitySynced(true);
|
|
284
|
-
|
|
285
|
-
// Sign in (Services never caches profile - only tokens)
|
|
286
|
-
const user = await performSignIn(publicKey);
|
|
287
|
-
|
|
288
|
-
// Check if user has username - required for syncing
|
|
289
|
-
if (!user.username) {
|
|
290
|
-
const usernameError = new Error('USERNAME_REQUIRED');
|
|
291
|
-
usernameError.code = 'USERNAME_REQUIRED';
|
|
292
|
-
throw usernameError;
|
|
293
|
-
}
|
|
62
|
+
// Get full user data
|
|
63
|
+
const fullUser = await oxyServices.getUserBySession(sessionResponse.sessionId);
|
|
294
64
|
|
|
295
|
-
//
|
|
296
|
-
|
|
297
|
-
return user;
|
|
298
|
-
} catch (error) {
|
|
299
|
-
const message = (0, _errorHandlers.handleAuthError)(error, {
|
|
300
|
-
defaultMessage: 'Failed to sync identity',
|
|
301
|
-
code: REGISTER_ERROR_CODE,
|
|
302
|
-
onError,
|
|
303
|
-
setAuthError: msg => setAuthState({
|
|
304
|
-
error: msg
|
|
305
|
-
}),
|
|
306
|
-
logger
|
|
307
|
-
});
|
|
308
|
-
loginFailure(message);
|
|
309
|
-
throw error;
|
|
310
|
-
} finally {
|
|
311
|
-
setAuthState({
|
|
312
|
-
isLoading: false
|
|
313
|
-
});
|
|
314
|
-
setSyncing(false);
|
|
315
|
-
}
|
|
316
|
-
}, [oxyServices, storage, setAuthState, performSignIn, loginFailure, onError, logger, setSyncing, setIdentitySynced]);
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* Import identity from backup file data (offline-first)
|
|
320
|
-
*/
|
|
321
|
-
const importIdentity = (0, _react.useCallback)(async (backupData, password) => {
|
|
322
|
-
if (!storage) throw new Error('Storage not initialized');
|
|
323
|
-
|
|
324
|
-
// Validate arguments - ensure backupData is an object, not a string (old signature)
|
|
325
|
-
if (!backupData || typeof backupData !== 'object' || Array.isArray(backupData)) {
|
|
326
|
-
throw new Error('Invalid backup data. Please use the backup file import feature.');
|
|
327
|
-
}
|
|
328
|
-
if (!backupData.encrypted || !backupData.salt || !backupData.iv || !backupData.publicKey) {
|
|
329
|
-
throw new Error('Invalid backup data structure. Missing required fields.');
|
|
330
|
-
}
|
|
331
|
-
if (!password || typeof password !== 'string') {
|
|
332
|
-
throw new Error('Password is required for backup file import.');
|
|
333
|
-
}
|
|
334
|
-
setAuthState({
|
|
335
|
-
isLoading: true,
|
|
336
|
-
error: null
|
|
337
|
-
});
|
|
338
|
-
try {
|
|
339
|
-
// Decrypt private key from backup data
|
|
340
|
-
const Crypto = await Promise.resolve().then(() => _interopRequireWildcard(require('expo-crypto')));
|
|
341
|
-
|
|
342
|
-
// Convert hex strings to Uint8Array
|
|
343
|
-
const saltBytes = new Uint8Array(backupData.salt.match(/.{1,2}/g)?.map(byte => parseInt(byte, 16)) || []);
|
|
344
|
-
const ivBytes = new Uint8Array(backupData.iv.match(/.{1,2}/g)?.map(byte => parseInt(byte, 16)) || []);
|
|
345
|
-
|
|
346
|
-
// Derive key from password (same algorithm as EncryptedBackupGenerator)
|
|
347
|
-
const saltHex = Array.from(saltBytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
348
|
-
let key = password + saltHex;
|
|
349
|
-
for (let i = 0; i < 10000; i++) {
|
|
350
|
-
key = await Crypto.digestStringAsync(Crypto.CryptoDigestAlgorithm.SHA256, key);
|
|
351
|
-
}
|
|
352
|
-
const keyBytes = new Uint8Array(32);
|
|
353
|
-
for (let i = 0; i < 64 && i < key.length; i += 2) {
|
|
354
|
-
keyBytes[i / 2] = parseInt(key.substring(i, i + 2), 16);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
// Decrypt private key (XOR decryption - same as encryption)
|
|
358
|
-
const encryptedBytes = Buffer.from(backupData.encrypted, 'base64');
|
|
359
|
-
const decryptedBytes = new Uint8Array(encryptedBytes.length);
|
|
360
|
-
for (let i = 0; i < encryptedBytes.length; i++) {
|
|
361
|
-
decryptedBytes[i] = encryptedBytes[i] ^ keyBytes[i % keyBytes.length] ^ ivBytes[i % ivBytes.length];
|
|
362
|
-
}
|
|
363
|
-
const privateKey = new TextDecoder().decode(decryptedBytes);
|
|
364
|
-
|
|
365
|
-
// Import the key pair
|
|
366
|
-
const publicKey = await _crypto.KeyManager.importKeyPair(privateKey);
|
|
367
|
-
|
|
368
|
-
// Verify public key matches
|
|
369
|
-
if (publicKey !== backupData.publicKey) {
|
|
370
|
-
throw new Error('Backup file is corrupted or password is incorrect');
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// Mark as not synced
|
|
374
|
-
await storage.setItem('oxy_identity_synced', 'false');
|
|
375
|
-
setIdentitySynced(false);
|
|
376
|
-
|
|
377
|
-
// Try to sync with server
|
|
65
|
+
// Fetch device sessions
|
|
66
|
+
let allDeviceSessions = [];
|
|
378
67
|
try {
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
await storage.setItem('oxy_identity_synced', 'true');
|
|
386
|
-
setIdentitySynced(true);
|
|
387
|
-
return {
|
|
388
|
-
synced: true
|
|
389
|
-
};
|
|
390
|
-
} else {
|
|
391
|
-
// Identity is not registered - registration must be done by Accounts app with profile data
|
|
392
|
-
// importIdentity only imports already-registered identities
|
|
393
|
-
await storage.setItem('oxy_identity_synced', 'false');
|
|
394
|
-
setIdentitySynced(false);
|
|
395
|
-
return {
|
|
396
|
-
synced: false
|
|
397
|
-
};
|
|
398
|
-
}
|
|
399
|
-
} catch (syncError) {
|
|
400
|
-
// Offline - identity restored locally but not synced
|
|
68
|
+
allDeviceSessions = await (0, _sessionHelpers.fetchSessionsWithFallback)(oxyServices, sessionResponse.sessionId, {
|
|
69
|
+
fallbackDeviceId: sessionResponse.deviceId,
|
|
70
|
+
fallbackUserId: fullUser.id,
|
|
71
|
+
logger
|
|
72
|
+
});
|
|
73
|
+
} catch (error) {
|
|
401
74
|
if (__DEV__) {
|
|
402
|
-
console.
|
|
75
|
+
console.warn('Failed to fetch device sessions after login:', error);
|
|
403
76
|
}
|
|
404
|
-
return {
|
|
405
|
-
synced: false
|
|
406
|
-
};
|
|
407
77
|
}
|
|
408
|
-
} catch (error) {
|
|
409
|
-
const message = (0, _errorHandlers.handleAuthError)(error, {
|
|
410
|
-
defaultMessage: 'Failed to import identity. Please check your password and backup file.',
|
|
411
|
-
code: REGISTER_ERROR_CODE,
|
|
412
|
-
onError,
|
|
413
|
-
setAuthError: msg => setAuthState({
|
|
414
|
-
error: msg
|
|
415
|
-
}),
|
|
416
|
-
logger
|
|
417
|
-
});
|
|
418
|
-
loginFailure(message);
|
|
419
|
-
throw error;
|
|
420
|
-
} finally {
|
|
421
|
-
setAuthState({
|
|
422
|
-
isLoading: false
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
}, [oxyServices, storage, setAuthState, loginFailure, onError, logger, setIdentitySynced]);
|
|
426
78
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
const {
|
|
445
|
-
registered
|
|
446
|
-
} = await oxyServices.checkPublicKeyRegistered(publicKey);
|
|
447
|
-
if (!registered) {
|
|
448
|
-
throw new Error('Identity is not registered. Please register your identity in the Accounts app before signing in.');
|
|
79
|
+
// Check for existing session for same user
|
|
80
|
+
const existingSession = allDeviceSessions.find(session => session.userId?.toString() === fullUser.id?.toString() && session.sessionId !== sessionResponse.sessionId);
|
|
81
|
+
if (existingSession) {
|
|
82
|
+
// Logout duplicate session
|
|
83
|
+
try {
|
|
84
|
+
await oxyServices.logoutSession(sessionResponse.sessionId, sessionResponse.sessionId);
|
|
85
|
+
} catch (logoutError) {
|
|
86
|
+
if (__DEV__) {
|
|
87
|
+
console.warn('Failed to logout duplicate session:', logoutError);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
await switchSession(existingSession.sessionId);
|
|
91
|
+
updateSessions(allDeviceSessions.filter(session => session.sessionId !== sessionResponse.sessionId), {
|
|
92
|
+
merge: false
|
|
93
|
+
});
|
|
94
|
+
onAuthStateChange?.(fullUser);
|
|
95
|
+
return fullUser;
|
|
449
96
|
}
|
|
450
|
-
|
|
97
|
+
setActiveSessionId(sessionResponse.sessionId);
|
|
98
|
+
await saveActiveSessionId(sessionResponse.sessionId);
|
|
99
|
+
updateSessions(allDeviceSessions, {
|
|
100
|
+
merge: true
|
|
101
|
+
});
|
|
102
|
+
await applyLanguagePreference(fullUser);
|
|
103
|
+
loginSuccess();
|
|
104
|
+
onAuthStateChange?.(fullUser);
|
|
105
|
+
return fullUser;
|
|
451
106
|
} catch (error) {
|
|
452
107
|
const message = (0, _errorHandlers.handleAuthError)(error, {
|
|
453
108
|
defaultMessage: 'Sign in failed',
|
|
454
|
-
code:
|
|
109
|
+
code: 'COMPLETE_SIGNIN_ERROR',
|
|
455
110
|
onError,
|
|
456
111
|
setAuthError: msg => setAuthState({
|
|
457
112
|
error: msg
|
|
@@ -465,7 +120,7 @@ const useAuthOperations = ({
|
|
|
465
120
|
isLoading: false
|
|
466
121
|
});
|
|
467
122
|
}
|
|
468
|
-
}, [storage, setAuthState,
|
|
123
|
+
}, [storage, setAuthState, oxyServices, logger, saveActiveSessionId, setActiveSessionId, switchSession, updateSessions, applyLanguagePreference, loginSuccess, onAuthStateChange, onError, loginFailure]);
|
|
469
124
|
|
|
470
125
|
/**
|
|
471
126
|
* Logout from session
|
|
@@ -538,30 +193,10 @@ const useAuthOperations = ({
|
|
|
538
193
|
throw error instanceof Error ? error : new Error('Logout all failed');
|
|
539
194
|
}
|
|
540
195
|
}, [activeSessionId, clearSessionState, logger, onError, oxyServices, setAuthState]);
|
|
541
|
-
|
|
542
|
-
/**
|
|
543
|
-
* Check if device has an identity stored
|
|
544
|
-
*/
|
|
545
|
-
const hasIdentity = (0, _react.useCallback)(async () => {
|
|
546
|
-
return _crypto.KeyManager.hasIdentity();
|
|
547
|
-
}, []);
|
|
548
|
-
|
|
549
|
-
/**
|
|
550
|
-
* Get the public key of the stored identity
|
|
551
|
-
*/
|
|
552
|
-
const getPublicKey = (0, _react.useCallback)(async () => {
|
|
553
|
-
return _crypto.KeyManager.getPublicKey();
|
|
554
|
-
}, []);
|
|
555
196
|
return {
|
|
556
|
-
|
|
557
|
-
importIdentity,
|
|
558
|
-
signIn,
|
|
197
|
+
completeSignIn,
|
|
559
198
|
logout,
|
|
560
|
-
logoutAll
|
|
561
|
-
hasIdentity,
|
|
562
|
-
getPublicKey,
|
|
563
|
-
isIdentitySynced: isIdentitySyncedFn,
|
|
564
|
-
syncIdentity
|
|
199
|
+
logoutAll
|
|
565
200
|
};
|
|
566
201
|
};
|
|
567
202
|
exports.useAuthOperations = useAuthOperations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_deviceManager","_sessionHelpers","_errorHandlers","_crypto","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LOGIN_ERROR_CODE","REGISTER_ERROR_CODE","LOGOUT_ERROR_CODE","LOGOUT_ALL_ERROR_CODE","useAuthOperations","oxyServices","storage","sessions","activeSessionId","setActiveSessionId","updateSessions","saveActiveSessionId","clearSessionState","switchSession","applyLanguagePreference","onAuthStateChange","onError","loginSuccess","loginFailure","logoutStore","setAuthState","setIdentitySynced","setSyncing","logger","performSignIn","useCallback","publicKey","deviceFingerprintObj","DeviceManager","getDeviceFingerprint","deviceFingerprint","JSON","stringify","deviceInfo","getDeviceInfo","deviceName","getDefaultDeviceName","USER_ID_STORAGE_KEY","userId","userLookup","getUserByPublicKey","id","setItem","catch","challengeResponse","requestChallenge","challenge","signature","timestamp","SignatureService","signChallenge","Error","sessionResponse","verifyChallenge","verifyError","__DEV__","console","error","challengeLength","length","signatureLength","timeSinceChallenge","Date","now","setTokens","accessToken","refreshToken","fullUser","getUserBySession","sessionId","test","warn","substring","message","allDeviceSessions","fetchSessionsWithFallback","fallbackDeviceId","deviceId","fallbackUserId","existingSession","find","session","toString","logoutSession","logoutError","filter","merge","createIdentity","isLoading","privateKey","KeyManager","generateKeyPair","importKeyPair","synced","hasIdentity","removeItem","handleAuthError","defaultMessage","code","setAuthError","msg","isIdentitySyncedFn","getItem","isSynced","syncIdentity","getPublicKey","alreadySynced","registered","checkPublicKeyRegistered","user","username","usernameError","importIdentity","backupData","password","Array","isArray","encrypted","salt","iv","Crypto","Promise","resolve","then","saltBytes","Uint8Array","match","map","byte","parseInt","ivBytes","saltHex","from","b","padStart","join","key","digestStringAsync","CryptoDigestAlgorithm","SHA256","keyBytes","encryptedBytes","Buffer","decryptedBytes","TextDecoder","decode","syncError","log","signIn","logout","targetSessionId","sessionToLogout","filteredSessions","isInvalid","isInvalidSessionError","status","undefined","logoutAll","logoutAllSessions","isIdentitySynced","exports"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useAuthOperations.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","require","_sessionHelpers","_errorHandlers","LOGOUT_ERROR_CODE","LOGOUT_ALL_ERROR_CODE","useAuthOperations","oxyServices","storage","sessions","activeSessionId","setActiveSessionId","updateSessions","saveActiveSessionId","clearSessionState","switchSession","applyLanguagePreference","onAuthStateChange","onError","loginSuccess","loginFailure","logoutStore","setAuthState","logger","completeSignIn","useCallback","sessionResponse","Error","isLoading","error","setTokens","accessToken","refreshToken","fullUser","getUserBySession","sessionId","allDeviceSessions","fetchSessionsWithFallback","fallbackDeviceId","deviceId","fallbackUserId","id","__DEV__","console","warn","existingSession","find","session","userId","toString","logoutSession","logoutError","filter","merge","message","handleAuthError","defaultMessage","code","setAuthError","msg","logout","targetSessionId","sessionToLogout","filteredSessions","length","isInvalid","isInvalidSessionError","status","undefined","logoutAll","logoutAllSessions","exports"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useAuthOperations.ts"],"mappings":"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","ignoreList":[]}
|