@oxy.so/core 4.5.0-oxy-one.1 → 4.6.0

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 (283) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/HttpService.js +63 -19
  3. package/dist/cjs/api/accounts.js +10 -3
  4. package/dist/cjs/api/agency.js +3 -1
  5. package/dist/cjs/api/apps.js +15 -4
  6. package/dist/cjs/api/assets.js +39 -11
  7. package/dist/cjs/api/auth.js +28 -8
  8. package/dist/cjs/api/billing.js +24 -7
  9. package/dist/cjs/api/civic.js +14 -4
  10. package/dist/cjs/api/follows.js +9 -2
  11. package/dist/cjs/api/identity.js +31 -9
  12. package/dist/cjs/api/nodes.js +3 -1
  13. package/dist/cjs/api/privacy.js +8 -2
  14. package/dist/cjs/api/session.js +15 -4
  15. package/dist/cjs/api/store.js +15 -5
  16. package/dist/cjs/api/topics.js +10 -3
  17. package/dist/cjs/api/users.js +16 -4
  18. package/dist/cjs/boot/sessionColdBoot.js +40 -13
  19. package/dist/cjs/constants/version.js +6 -6
  20. package/dist/cjs/crypto/identityMarker.js +3 -1
  21. package/dist/cjs/crypto/identityProof.js +6 -1
  22. package/dist/cjs/crypto/keyManager.js +87 -32
  23. package/dist/cjs/crypto/recoveryPhrase.js +2 -2
  24. package/dist/cjs/crypto/signatureService.js +3 -4
  25. package/dist/cjs/i18n/index.js +16 -3
  26. package/dist/cjs/i18n/locales/ar-SA.js +366 -366
  27. package/dist/cjs/i18n/locales/ca-ES.js +366 -366
  28. package/dist/cjs/i18n/locales/de-DE.js +366 -366
  29. package/dist/cjs/i18n/locales/en-US.js +1994 -1994
  30. package/dist/cjs/i18n/locales/es-ES.js +1994 -1994
  31. package/dist/cjs/i18n/locales/fr-FR.js +366 -366
  32. package/dist/cjs/i18n/locales/it-IT.js +366 -366
  33. package/dist/cjs/i18n/locales/ja-JP.js +366 -366
  34. package/dist/cjs/i18n/locales/ko-KR.js +366 -366
  35. package/dist/cjs/i18n/locales/pt-PT.js +366 -366
  36. package/dist/cjs/i18n/locales/zh-CN.js +366 -366
  37. package/dist/cjs/inference/OxyInferenceClient.js +12 -18
  38. package/dist/cjs/models/interfaces.js +11 -11
  39. package/dist/cjs/server/OxyServer.js +86 -28
  40. package/dist/cjs/server/agentAccount.js +6 -2
  41. package/dist/cjs/server/aliaMachineCredential.js +39 -14
  42. package/dist/cjs/server/auth.js +5 -4
  43. package/dist/cjs/server/capabilityTicket.js +5 -5
  44. package/dist/cjs/server/index.js +2 -1
  45. package/dist/cjs/server/liveCapabilityTicket.js +4 -1
  46. package/dist/cjs/server/middleware.js +61 -42
  47. package/dist/cjs/server/namespaces.js +28 -7
  48. package/dist/cjs/server/requesterAssertion.js +36 -30
  49. package/dist/cjs/server/serviceTokenLifetime.js +7 -4
  50. package/dist/cjs/server/traffic.js +53 -14
  51. package/dist/cjs/server/trafficNodeHttp.js +33 -8
  52. package/dist/cjs/server/workloadIdentity.client.js +4 -0
  53. package/dist/cjs/server/workloadIdentity.js +28 -1
  54. package/dist/cjs/session/SessionClient.js +54 -17
  55. package/dist/cjs/session/accountDelegationAccess.js +4 -6
  56. package/dist/cjs/session/accountDialogController.js +1 -1
  57. package/dist/cjs/session/authStateStore.js +18 -9
  58. package/dist/cjs/session/identityPin.js +6 -2
  59. package/dist/cjs/session/refresh.js +81 -23
  60. package/dist/cjs/session/sharedDeviceCredential.js +28 -15
  61. package/dist/cjs/shared/utils/errorUtils.js +1 -1
  62. package/dist/cjs/shared/utils/networkUtils.js +1 -1
  63. package/dist/cjs/shared/utils/themeUtils.js +1 -1
  64. package/dist/cjs/utils/accountCacheSweep.js +3 -1
  65. package/dist/cjs/utils/accountUtils.js +1 -3
  66. package/dist/cjs/utils/asyncUtils.js +1 -1
  67. package/dist/cjs/utils/authHelpers.js +2 -1
  68. package/dist/cjs/utils/avatarUtils.js +4 -2
  69. package/dist/cjs/utils/cache.js +1 -1
  70. package/dist/cjs/utils/cacheKey.js +3 -1
  71. package/dist/cjs/utils/deviceManager.js +4 -4
  72. package/dist/cjs/utils/errorUtils.js +6 -4
  73. package/dist/cjs/utils/languageUtils.js +404 -57
  74. package/dist/cjs/utils/profileLinks.js +1 -3
  75. package/dist/cjs/utils/requestUtils.js +7 -1
  76. package/dist/cjs/utils/userIdentity.js +1 -1
  77. package/dist/cjs/utils/validationUtils.js +5 -6
  78. package/dist/esm/HttpService.js +64 -20
  79. package/dist/esm/api/accounts.js +11 -4
  80. package/dist/esm/api/agency.js +3 -1
  81. package/dist/esm/api/apps.js +15 -4
  82. package/dist/esm/api/assets.js +39 -11
  83. package/dist/esm/api/auth.js +28 -8
  84. package/dist/esm/api/billing.js +25 -8
  85. package/dist/esm/api/civic.js +14 -4
  86. package/dist/esm/api/follows.js +9 -2
  87. package/dist/esm/api/identity.js +31 -9
  88. package/dist/esm/api/nodes.js +3 -1
  89. package/dist/esm/api/privacy.js +8 -2
  90. package/dist/esm/api/session.js +15 -4
  91. package/dist/esm/api/store.js +15 -5
  92. package/dist/esm/api/topics.js +10 -3
  93. package/dist/esm/api/users.js +16 -4
  94. package/dist/esm/boot/sessionColdBoot.js +41 -14
  95. package/dist/esm/constants/version.js +6 -6
  96. package/dist/esm/crypto/identityMarker.js +3 -1
  97. package/dist/esm/crypto/identityProof.js +6 -1
  98. package/dist/esm/crypto/internal.js +1 -1
  99. package/dist/esm/crypto/keyManager.js +87 -32
  100. package/dist/esm/crypto/recoveryPhrase.js +2 -2
  101. package/dist/esm/crypto/signatureService.js +3 -4
  102. package/dist/esm/i18n/index.js +16 -3
  103. package/dist/esm/i18n/locales/ar-SA.js +366 -366
  104. package/dist/esm/i18n/locales/ca-ES.js +366 -366
  105. package/dist/esm/i18n/locales/de-DE.js +366 -366
  106. package/dist/esm/i18n/locales/en-US.js +1994 -1994
  107. package/dist/esm/i18n/locales/es-ES.js +1994 -1994
  108. package/dist/esm/i18n/locales/fr-FR.js +366 -366
  109. package/dist/esm/i18n/locales/it-IT.js +366 -366
  110. package/dist/esm/i18n/locales/ja-JP.js +366 -366
  111. package/dist/esm/i18n/locales/ko-KR.js +366 -366
  112. package/dist/esm/i18n/locales/pt-PT.js +366 -366
  113. package/dist/esm/i18n/locales/zh-CN.js +366 -366
  114. package/dist/esm/index.js +1 -1
  115. package/dist/esm/inference/OxyInferenceClient.js +13 -19
  116. package/dist/esm/models/interfaces.js +11 -11
  117. package/dist/esm/server/OxyServer.js +87 -29
  118. package/dist/esm/server/agentAccount.js +6 -2
  119. package/dist/esm/server/aliaMachineCredential.js +39 -14
  120. package/dist/esm/server/auth.js +6 -5
  121. package/dist/esm/server/capabilityTicket.js +6 -6
  122. package/dist/esm/server/index.js +5 -5
  123. package/dist/esm/server/liveCapabilityTicket.js +6 -3
  124. package/dist/esm/server/middleware.js +62 -43
  125. package/dist/esm/server/namespaces.js +31 -10
  126. package/dist/esm/server/requesterAssertion.js +36 -30
  127. package/dist/esm/server/serviceTokenLifetime.js +7 -4
  128. package/dist/esm/server/traffic.js +55 -16
  129. package/dist/esm/server/trafficNodeHttp.js +34 -9
  130. package/dist/esm/server/userInvalidation.js +1 -1
  131. package/dist/esm/server/workloadIdentity.client.js +3 -0
  132. package/dist/esm/server/workloadIdentity.js +27 -1
  133. package/dist/esm/session/SessionClient.js +54 -17
  134. package/dist/esm/session/accountDelegationAccess.js +5 -7
  135. package/dist/esm/session/accountDialogController.js +1 -1
  136. package/dist/esm/session/authStateStore.js +18 -9
  137. package/dist/esm/session/identityPin.js +6 -2
  138. package/dist/esm/session/refresh.js +82 -24
  139. package/dist/esm/session/sharedDeviceCredential.js +28 -15
  140. package/dist/esm/shared/utils/errorUtils.js +1 -1
  141. package/dist/esm/shared/utils/networkUtils.js +1 -1
  142. package/dist/esm/shared/utils/themeUtils.js +1 -1
  143. package/dist/esm/utils/accountCacheSweep.js +3 -1
  144. package/dist/esm/utils/accountUtils.js +1 -3
  145. package/dist/esm/utils/asyncUtils.js +1 -1
  146. package/dist/esm/utils/authHelpers.js +2 -1
  147. package/dist/esm/utils/avatarUtils.js +4 -2
  148. package/dist/esm/utils/cache.js +1 -1
  149. package/dist/esm/utils/cacheKey.js +3 -1
  150. package/dist/esm/utils/deviceManager.js +4 -4
  151. package/dist/esm/utils/errorUtils.js +6 -4
  152. package/dist/esm/utils/languageUtils.js +404 -57
  153. package/dist/esm/utils/profileLinks.js +1 -3
  154. package/dist/esm/utils/requestUtils.js +7 -1
  155. package/dist/esm/utils/userIdentity.js +1 -1
  156. package/dist/esm/utils/validationUtils.js +5 -6
  157. package/dist/types/HttpService.d.ts +1 -1
  158. package/dist/types/api/accounts.d.ts +16 -3
  159. package/dist/types/api/apps.d.ts +4 -4
  160. package/dist/types/crypto/internal.d.ts +1 -1
  161. package/dist/types/index.d.ts +4 -4
  162. package/dist/types/models/interfaces.d.ts +9 -1
  163. package/dist/types/server/index.d.ts +6 -6
  164. package/dist/types/server/workloadIdentity.client.d.ts +5 -1
  165. package/dist/types/server/workloadIdentity.d.ts +26 -0
  166. package/dist/types/session/accountDelegationAccess.d.ts +1 -1
  167. package/dist/types/session/index.d.ts +1 -1
  168. package/dist/types/utils/userIdentity.d.ts +1 -1
  169. package/dist/types/utils/validationUtils.d.ts +4 -5
  170. package/package.json +3 -4
  171. package/src/HttpService.ts +183 -53
  172. package/src/OxyServices.errors.ts +7 -3
  173. package/src/OxyServices.ts +6 -2
  174. package/src/api/accounts.ts +96 -28
  175. package/src/api/agency.ts +24 -9
  176. package/src/api/appData.ts +12 -2
  177. package/src/api/apps.ts +81 -31
  178. package/src/api/assets.ts +113 -43
  179. package/src/api/auth.ts +145 -77
  180. package/src/api/billing.ts +112 -65
  181. package/src/api/civic.ts +61 -19
  182. package/src/api/contacts.ts +4 -1
  183. package/src/api/devices.ts +54 -21
  184. package/src/api/follows.ts +88 -31
  185. package/src/api/identity.ts +101 -33
  186. package/src/api/linkedAccounts.ts +26 -8
  187. package/src/api/nodes.ts +18 -6
  188. package/src/api/notifications.ts +26 -6
  189. package/src/api/privacy.ts +42 -8
  190. package/src/api/reputation.ts +18 -7
  191. package/src/api/session.ts +23 -5
  192. package/src/api/store.ts +81 -31
  193. package/src/api/topics.ts +18 -6
  194. package/src/api/users.ts +98 -35
  195. package/src/boot/sessionColdBoot.ts +60 -19
  196. package/src/civic/payloads.ts +1 -4
  197. package/src/client/context.ts +6 -1
  198. package/src/constants/version.ts +7 -6
  199. package/src/crypto/aead.ts +1 -5
  200. package/src/crypto/ecdh.ts +1 -4
  201. package/src/crypto/identityDerivations.ts +5 -1
  202. package/src/crypto/identityMarker.ts +3 -1
  203. package/src/crypto/identityProof.ts +6 -1
  204. package/src/crypto/index.ts +11 -11
  205. package/src/crypto/internal.ts +6 -1
  206. package/src/crypto/keyManager.ts +348 -98
  207. package/src/crypto/recoveryPhrase.ts +14 -9
  208. package/src/crypto/registrationPow.ts +1 -1
  209. package/src/crypto/signatureService.ts +14 -6
  210. package/src/i18n/accountCategoryLabels.ts +1 -4
  211. package/src/i18n/accountRoleLabels.ts +1 -4
  212. package/src/i18n/index.ts +25 -7
  213. package/src/i18n/locales/ar-SA.ts +375 -366
  214. package/src/i18n/locales/ca-ES.ts +382 -366
  215. package/src/i18n/locales/de-DE.ts +387 -366
  216. package/src/i18n/locales/en-US.ts +2034 -1994
  217. package/src/i18n/locales/es-ES.ts +2043 -1994
  218. package/src/i18n/locales/fr-FR.ts +387 -366
  219. package/src/i18n/locales/it-IT.ts +380 -366
  220. package/src/i18n/locales/ja-JP.ts +380 -366
  221. package/src/i18n/locales/ko-KR.ts +377 -366
  222. package/src/i18n/locales/pt-PT.ts +383 -366
  223. package/src/i18n/locales/zh-CN.ts +373 -366
  224. package/src/i18n/trustTierLabels.ts +1 -4
  225. package/src/index.ts +371 -349
  226. package/src/inference/OxyInferenceClient.ts +784 -780
  227. package/src/models/interfaces.ts +39 -27
  228. package/src/server/OxyServer.ts +227 -68
  229. package/src/server/agentAccount.ts +8 -2
  230. package/src/server/aliaMachineCredential.ts +57 -16
  231. package/src/server/auth.ts +9 -5
  232. package/src/server/capabilityTicket.ts +30 -21
  233. package/src/server/index.ts +29 -6
  234. package/src/server/liveCapabilityTicket.ts +31 -9
  235. package/src/server/middleware.ts +212 -121
  236. package/src/server/namespaces.ts +247 -94
  237. package/src/server/rateLimit.ts +2 -4
  238. package/src/server/requesterAssertion.ts +93 -54
  239. package/src/server/serviceTokenLifetime.ts +9 -4
  240. package/src/server/traffic.ts +117 -23
  241. package/src/server/trafficNodeHttp.ts +61 -14
  242. package/src/server/userInvalidation.ts +1 -4
  243. package/src/server/workloadIdentity.client.ts +12 -1
  244. package/src/server/workloadIdentity.ts +52 -5
  245. package/src/session/SessionClient.ts +170 -49
  246. package/src/session/accountDelegationAccess.ts +24 -31
  247. package/src/session/accountDialogController.ts +59 -14
  248. package/src/session/accountSwitchTargets.ts +10 -15
  249. package/src/session/authStateStore.ts +121 -81
  250. package/src/session/deviceDirectory.ts +1 -3
  251. package/src/session/identityPin.ts +10 -11
  252. package/src/session/identitySession.ts +3 -1
  253. package/src/session/index.ts +87 -82
  254. package/src/session/refresh.ts +138 -44
  255. package/src/session/sessionClientHost.ts +1 -3
  256. package/src/session/sharedDeviceCredential.ts +35 -14
  257. package/src/session/socketLoader.ts +9 -2
  258. package/src/shared/utils/errorUtils.ts +5 -2
  259. package/src/shared/utils/networkUtils.ts +5 -8
  260. package/src/shared/utils/themeUtils.ts +2 -6
  261. package/src/types/buffer.d.ts +66 -21
  262. package/src/types/expo-secure-store.d.ts +5 -1
  263. package/src/utils/accountCacheSweep.ts +4 -5
  264. package/src/utils/accountUtils.ts +107 -108
  265. package/src/utils/apiUtils.ts +3 -3
  266. package/src/utils/asyncUtils.ts +2 -2
  267. package/src/utils/authHelpers.ts +10 -5
  268. package/src/utils/avatarUtils.ts +11 -6
  269. package/src/utils/cache.ts +9 -10
  270. package/src/utils/cacheKey.ts +5 -1
  271. package/src/utils/coldBoot.ts +1 -3
  272. package/src/utils/commonsDelivery.ts +1 -4
  273. package/src/utils/deviceManager.ts +15 -14
  274. package/src/utils/errorUtils.ts +68 -86
  275. package/src/utils/languageUtils.ts +407 -58
  276. package/src/utils/oauthPkce.ts +1 -4
  277. package/src/utils/platform.ts +0 -1
  278. package/src/utils/profileLinks.ts +2 -5
  279. package/src/utils/requestUtils.ts +18 -14
  280. package/src/utils/sessionUtils.ts +34 -33
  281. package/src/utils/userHandle.ts +3 -1
  282. package/src/utils/userIdentity.ts +1 -1
  283. package/src/utils/validationUtils.ts +11 -9
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Session management utilities
3
- *
3
+ *
4
4
  * Provides consistent session normalization, deduplication, and sorting
5
5
  * to ensure sessions are always displayed in a predictable order.
6
6
  */
@@ -10,7 +10,9 @@ import type { ClientSession } from '../models/session';
10
10
  /**
11
11
  * Normalize a session to ensure all required fields are present
12
12
  */
13
- export function normalizeSession(session: Partial<ClientSession> & { sessionId: string }): ClientSession {
13
+ export function normalizeSession(
14
+ session: Partial<ClientSession> & { sessionId: string },
15
+ ): ClientSession {
14
16
  const now = new Date().toISOString();
15
17
  return {
16
18
  sessionId: session.sessionId,
@@ -49,7 +51,7 @@ export function sortSessions(sessions: ClientSession[]): ClientSession[] {
49
51
  */
50
52
  export function deduplicateSessions(sessions: ClientSession[]): ClientSession[] {
51
53
  const sessionMap = new Map<string, ClientSession>();
52
-
54
+
53
55
  for (const session of sessions) {
54
56
  const existing = sessionMap.get(session.sessionId);
55
57
  if (!existing) {
@@ -63,7 +65,7 @@ export function deduplicateSessions(sessions: ClientSession[]): ClientSession[]
63
65
  }
64
66
  }
65
67
  }
66
-
68
+
67
69
  return Array.from(sessionMap.values());
68
70
  }
69
71
 
@@ -74,15 +76,15 @@ export function deduplicateSessions(sessions: ClientSession[]): ClientSession[]
74
76
  */
75
77
  export function deduplicateSessionsByUserId(
76
78
  sessions: ClientSession[],
77
- activeSessionId?: string | null
79
+ activeSessionId?: string | null,
78
80
  ): ClientSession[] {
79
81
  if (!sessions.length) return [];
80
-
82
+
81
83
  const userSessionMap = new Map<string, ClientSession>();
82
-
84
+
83
85
  for (const session of sessions) {
84
86
  if (!session.userId) continue; // Skip sessions without userId
85
-
87
+
86
88
  const existing = userSessionMap.get(session.userId);
87
89
  if (!existing) {
88
90
  userSessionMap.set(session.userId, session);
@@ -90,7 +92,7 @@ export function deduplicateSessionsByUserId(
90
92
  // Prioritize active session
91
93
  const isCurrentActive = activeSessionId && session.sessionId === activeSessionId;
92
94
  const isExistingActive = activeSessionId && existing.sessionId === activeSessionId;
93
-
95
+
94
96
  if (isCurrentActive && !isExistingActive) {
95
97
  userSessionMap.set(session.userId, session);
96
98
  } else if (!isCurrentActive && isExistingActive) {
@@ -104,14 +106,14 @@ export function deduplicateSessionsByUserId(
104
106
  }
105
107
  }
106
108
  }
107
-
109
+
108
110
  return Array.from(userSessionMap.values());
109
111
  }
110
112
 
111
113
  /**
112
114
  * Normalize, deduplicate, and sort sessions
113
115
  * This ensures consistent session ordering across the application
114
- *
116
+ *
115
117
  * @param sessions - Array of sessions to normalize
116
118
  * @param activeSessionId - Optional active session ID to prioritize
117
119
  * @param deduplicateByUserId - If true, deduplicate by userId (one account per user). Default: true
@@ -119,21 +121,21 @@ export function deduplicateSessionsByUserId(
119
121
  export function normalizeAndSortSessions(
120
122
  sessions: ClientSession[],
121
123
  activeSessionId?: string | null,
122
- deduplicateByUserId = true
124
+ deduplicateByUserId = true,
123
125
  ): ClientSession[] {
124
126
  if (!sessions.length) return [];
125
-
127
+
126
128
  // Normalize all sessions
127
129
  const normalized = sessions.map(normalizeSession);
128
-
130
+
129
131
  // First deduplicate by sessionId (exact duplicates)
130
132
  const deduplicatedBySessionId = deduplicateSessions(normalized);
131
-
133
+
132
134
  // Then deduplicate by userId if requested (one account per user)
133
135
  const finalSessions = deduplicateByUserId
134
136
  ? deduplicateSessionsByUserId(deduplicatedBySessionId, activeSessionId)
135
137
  : deduplicatedBySessionId;
136
-
138
+
137
139
  // Sort consistently
138
140
  return sortSessions(finalSessions);
139
141
  }
@@ -141,7 +143,7 @@ export function normalizeAndSortSessions(
141
143
  /**
142
144
  * Merge two session arrays, prioritizing newer data
143
145
  * Returns normalized, deduplicated, and sorted sessions
144
- *
146
+ *
145
147
  * @param existing - Existing sessions array
146
148
  * @param incoming - New sessions to merge in
147
149
  * @param activeSessionId - Optional active session ID to prioritize
@@ -151,37 +153,39 @@ export function mergeSessions(
151
153
  existing: ClientSession[],
152
154
  incoming: ClientSession[],
153
155
  activeSessionId?: string | null,
154
- deduplicateByUserId = true
156
+ deduplicateByUserId = true,
155
157
  ): ClientSession[] {
156
158
  if (!existing.length && !incoming.length) return [];
157
- if (!existing.length) return normalizeAndSortSessions(incoming, activeSessionId, deduplicateByUserId);
158
- if (!incoming.length) return normalizeAndSortSessions(existing, activeSessionId, deduplicateByUserId);
159
-
159
+ if (!existing.length)
160
+ return normalizeAndSortSessions(incoming, activeSessionId, deduplicateByUserId);
161
+ if (!incoming.length)
162
+ return normalizeAndSortSessions(existing, activeSessionId, deduplicateByUserId);
163
+
160
164
  // Normalize both arrays
161
165
  const normalizedExisting = existing.map(normalizeSession);
162
166
  const normalizedIncoming = incoming.map(normalizeSession);
163
-
167
+
164
168
  // Create a map with existing sessions (by sessionId)
165
169
  const sessionMap = new Map<string, ClientSession>();
166
-
170
+
167
171
  // Add existing sessions first
168
172
  for (const session of normalizedExisting) {
169
173
  sessionMap.set(session.sessionId, session);
170
174
  }
171
-
175
+
172
176
  // Merge incoming sessions - backend data always replaces existing
173
177
  for (const session of normalizedIncoming) {
174
178
  sessionMap.set(session.sessionId, session);
175
179
  }
176
-
180
+
177
181
  // Convert to array
178
182
  const merged = Array.from(sessionMap.values());
179
-
183
+
180
184
  // Apply userId deduplication if requested
181
185
  const finalSessions = deduplicateByUserId
182
186
  ? deduplicateSessionsByUserId(merged, activeSessionId)
183
187
  : merged;
184
-
188
+
185
189
  // Sort consistently
186
190
  return sortSessions(finalSessions);
187
191
  }
@@ -193,12 +197,9 @@ export function sessionsArraysEqual(a: ClientSession[], b: ClientSession[]): boo
193
197
  if (a.length !== b.length) {
194
198
  return false;
195
199
  }
196
-
200
+
197
201
  const sortedA = sortSessions(a);
198
202
  const sortedB = sortSessions(b);
199
-
200
- return sortedA.every((session, index) =>
201
- sessionsEqual(session, sortedB[index])
202
- );
203
- }
204
203
 
204
+ return sortedA.every((session, index) => sessionsEqual(session, sortedB[index]));
205
+ }
@@ -44,6 +44,8 @@ export function getNormalizedUserHandle(user: UserHandleInput | null | undefined
44
44
  * Compatibility alias for the first public name shipped with this helper.
45
45
  * Prefer {@link getNormalizedUserHandle} in new code.
46
46
  */
47
- export function getCanonicalUserHandle(user: CanonicalUserHandleInput | null | undefined): string | null {
47
+ export function getCanonicalUserHandle(
48
+ user: CanonicalUserHandleInput | null | undefined,
49
+ ): string | null {
48
50
  return getNormalizedUserHandle(user);
49
51
  }
@@ -29,7 +29,7 @@ function stringifyIdentity(value: unknown): string | null {
29
29
 
30
30
  /**
31
31
  * Returns the stable SDK user id from API payloads that may use either `id` or
32
- * Mongo-style `_id`.
32
+ * a raw `_id`.
33
33
  */
34
34
  export function getNormalizedUserId(user: UserIdentityInput | null | undefined): string | null {
35
35
  if (!user) {
@@ -87,10 +87,10 @@ export function isValidPassword(password: string): boolean {
87
87
  * — script digits (`٠١٢`, `०१२`), 1082 symbols (`֍ ۞ ৳`), 180 punctuation marks
88
88
  * (`։ ، ؛ ।`), and 9 INVISIBLE format/control characters, among them U+061C
89
89
  * ARABIC LETTER MARK (a bidi control that can visually reorder a name) and
90
- * U+180E MONGOLIAN VOWEL SEPARATOR. Without it the rejections listed above held
90
+ * U+180E (the Mong-script vowel separator). Without it the rejections listed above held
91
91
  * for ASCII input only. It is the set of scripts Unicode UTS #39 marks
92
92
  * "Recommended" for general interchange / identifiers, plus Cherokee and
93
- * Mongolian (both in real modern name use). "Common" script is deliberately
93
+ * the Mong script, ISO 15924 (both in real modern name use). "Common" script is deliberately
94
94
  * EXCLUDED — that is where ASCII digits and general punctuation live, and this
95
95
  * policy excludes those; the space separators, combining marks, and apostrophe a
96
96
  * name needs are added back explicitly. Limited-use / excluded / historic
@@ -351,15 +351,14 @@ export function sanitizeHTML(input: string): string {
351
351
  }
352
352
 
353
353
  /**
354
- * Validate MongoDB ObjectId format
355
- * Note: This is a basic format check. For full validation, use mongoose.Types.ObjectId.isValid()
356
- * This function works in environments where mongoose may not be available (e.g., client-side)
354
+ * Validate the legacy 24-hex id format (a format check only; it does not
355
+ * prove the id exists).
357
356
  */
358
357
  export function isValidObjectId(id: string): boolean {
359
358
  if (typeof id !== 'string') {
360
359
  return false;
361
360
  }
362
- // MongoDB ObjectId is 24 hex characters
361
+ // A legacy id is 24 hex characters
363
362
  const OBJECT_ID_REGEX = /^[0-9a-fA-F]{24}$/;
364
363
  return OBJECT_ID_REGEX.test(id);
365
364
  }
@@ -367,13 +366,16 @@ export function isValidObjectId(id: string): boolean {
367
366
  /**
368
367
  * Validate and sanitize user input
369
368
  */
370
- export function validateAndSanitizeUserInput(input: unknown, type: 'string' | 'email' | 'username'): string | null {
369
+ export function validateAndSanitizeUserInput(
370
+ input: unknown,
371
+ type: 'string' | 'email' | 'username',
372
+ ): string | null {
371
373
  if (typeof input !== 'string') {
372
374
  return null;
373
375
  }
374
376
 
375
377
  const sanitized = sanitizeString(input);
376
-
378
+
377
379
  switch (type) {
378
380
  case 'email':
379
381
  return isValidEmail(sanitized) ? sanitized : null;
@@ -387,4 +389,4 @@ export function validateAndSanitizeUserInput(input: unknown, type: 'string' | 'e
387
389
  default:
388
390
  return null;
389
391
  }
390
- }
392
+ }