@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.
Files changed (119) hide show
  1. package/lib/commonjs/crypto/index.js +0 -23
  2. package/lib/commonjs/crypto/index.js.map +1 -1
  3. package/lib/commonjs/index.js +0 -15
  4. package/lib/commonjs/index.js.map +1 -1
  5. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  6. package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
  7. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
  8. package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
  9. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
  10. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
  11. package/lib/commonjs/ui/context/OxyContext.js +37 -589
  12. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  13. package/lib/commonjs/ui/context/OxyContextBase.js.map +1 -1
  14. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +60 -425
  15. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  16. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +8 -112
  17. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  18. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +2 -27
  19. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  20. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +2 -27
  21. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  22. package/lib/commonjs/ui/hooks/useSessionSocket.js +2 -88
  23. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  24. package/lib/commonjs/ui/screens/OxyAuthScreen.js +0 -1
  25. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  26. package/lib/commonjs/ui/stores/authStore.js +52 -15
  27. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  28. package/lib/commonjs/ui/utils/avatarUtils.js +2 -32
  29. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  30. package/lib/module/crypto/index.js +4 -6
  31. package/lib/module/crypto/index.js.map +1 -1
  32. package/lib/module/index.js +6 -3
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/ui/components/Icon.js.map +1 -1
  35. package/lib/module/ui/components/IconButton/utils.js.map +1 -1
  36. package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
  37. package/lib/module/ui/components/TextField/helpers.js.map +1 -1
  38. package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
  39. package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
  40. package/lib/module/ui/context/OxyContext.js +35 -588
  41. package/lib/module/ui/context/OxyContext.js.map +1 -1
  42. package/lib/module/ui/context/OxyContextBase.js.map +1 -1
  43. package/lib/module/ui/context/hooks/useAuthOperations.js +60 -424
  44. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  45. package/lib/module/ui/hooks/mutations/useAccountMutations.js +8 -112
  46. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  47. package/lib/module/ui/hooks/queries/useAccountQueries.js +2 -27
  48. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  49. package/lib/module/ui/hooks/queries/useServicesQueries.js +2 -27
  50. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  51. package/lib/module/ui/hooks/useSessionSocket.js +2 -88
  52. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  53. package/lib/module/ui/screens/OxyAuthScreen.js +0 -1
  54. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  55. package/lib/module/ui/stores/authStore.js +52 -15
  56. package/lib/module/ui/stores/authStore.js.map +1 -1
  57. package/lib/module/ui/utils/avatarUtils.js +2 -32
  58. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  59. package/lib/typescript/crypto/index.d.ts +2 -5
  60. package/lib/typescript/crypto/index.d.ts.map +1 -1
  61. package/lib/typescript/crypto/types.d.ts +6 -2
  62. package/lib/typescript/crypto/types.d.ts.map +1 -1
  63. package/lib/typescript/index.d.ts +4 -2
  64. package/lib/typescript/index.d.ts.map +1 -1
  65. package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
  66. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
  67. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
  68. package/lib/typescript/ui/components/TextField/helpers.d.ts +6 -6
  69. package/lib/typescript/ui/components/types.d.ts +0 -4
  70. package/lib/typescript/ui/components/types.d.ts.map +1 -1
  71. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  72. package/lib/typescript/ui/context/OxyContextBase.d.ts +2 -39
  73. package/lib/typescript/ui/context/OxyContextBase.d.ts.map +1 -1
  74. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -25
  75. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  76. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  77. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  78. package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  79. package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -14
  80. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  81. package/lib/typescript/ui/stores/authStore.d.ts +27 -4
  82. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  83. package/lib/typescript/ui/utils/avatarUtils.d.ts +0 -2
  84. package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
  85. package/package.json +2 -2
  86. package/src/crypto/index.ts +3 -11
  87. package/src/crypto/types.ts +6 -2
  88. package/src/index.ts +6 -11
  89. package/src/ui/components/Icon.tsx +1 -1
  90. package/src/ui/components/IconButton/utils.ts +1 -1
  91. package/src/ui/components/TextField/Adornment/utils.ts +2 -2
  92. package/src/ui/components/TextField/helpers.tsx +8 -8
  93. package/src/ui/components/TouchableRipple/utils.ts +2 -2
  94. package/src/ui/components/Typography/AnimatedText.tsx +2 -2
  95. package/src/ui/components/types.tsx +0 -6
  96. package/src/ui/context/OxyContext.tsx +33 -637
  97. package/src/ui/context/OxyContextBase.tsx +5 -23
  98. package/src/ui/context/hooks/useAuthOperations.ts +84 -460
  99. package/src/ui/hooks/mutations/useAccountMutations.ts +12 -110
  100. package/src/ui/hooks/queries/useAccountQueries.ts +3 -27
  101. package/src/ui/hooks/queries/useServicesQueries.ts +3 -27
  102. package/src/ui/hooks/useSessionSocket.ts +2 -106
  103. package/src/ui/screens/OxyAuthScreen.tsx +1 -1
  104. package/src/ui/stores/authStore.ts +57 -18
  105. package/src/ui/utils/avatarUtils.ts +4 -36
  106. package/lib/commonjs/crypto/keyManager.js +0 -511
  107. package/lib/commonjs/crypto/keyManager.js.map +0 -1
  108. package/lib/commonjs/crypto/signatureService.js +0 -269
  109. package/lib/commonjs/crypto/signatureService.js.map +0 -1
  110. package/lib/module/crypto/keyManager.js +0 -508
  111. package/lib/module/crypto/keyManager.js.map +0 -1
  112. package/lib/module/crypto/signatureService.js +0 -266
  113. package/lib/module/crypto/signatureService.js.map +0 -1
  114. package/lib/typescript/crypto/keyManager.d.ts +0 -97
  115. package/lib/typescript/crypto/keyManager.d.ts.map +0 -1
  116. package/lib/typescript/crypto/signatureService.d.ts +0 -77
  117. package/lib/typescript/crypto/signatureService.d.ts.map +0 -1
  118. package/src/crypto/keyManager.ts +0 -545
  119. 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 using public key cryptography.
20
- * No passwords required - identity is based on ECDSA key pairs.
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
- * Internal function to perform challenge-response sign in (works offline)
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 performSignIn = (0, _react.useCallback)(async publicKey => {
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
- // Generate new key pair directly (works offline)
182
- const {
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
- // Mark as not synced
189
- // Note: createIdentity only creates the key locally (offline-first)
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
- // TanStack Query will automatically retry any pending mutations
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
- // Check if this identity is already registered
380
- const {
381
- registered
382
- } = await oxyServices.checkPublicKeyRegistered(publicKey);
383
- if (registered) {
384
- // Identity exists, mark as synced
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.log('[Auth] Identity imported locally, will sync when online:', syncError);
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
- * Sign in with existing identity on device
429
- */
430
- const signIn = (0, _react.useCallback)(async deviceName => {
431
- if (!storage) throw new Error('Storage not initialized');
432
- setAuthState({
433
- isLoading: true,
434
- error: null
435
- });
436
- try {
437
- // Get stored public key
438
- const publicKey = await _crypto.KeyManager.getPublicKey();
439
- if (!publicKey) {
440
- throw new Error('No identity found on this device. Please create or import an identity.');
441
- }
442
-
443
- // Ensure identity is registered before attempting sign-in
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
- return await performSignIn(publicKey);
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: LOGIN_ERROR_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, performSignIn, loginFailure, onError, logger, oxyServices]);
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
- createIdentity,
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":[]}