@oxy.so/core 4.5.0-oxy-one.1 → 4.5.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.
- package/README.md +1 -1
- package/dist/cjs/HttpService.js +63 -19
- package/dist/cjs/api/accounts.js +10 -3
- package/dist/cjs/api/agency.js +3 -1
- package/dist/cjs/api/apps.js +15 -4
- package/dist/cjs/api/assets.js +39 -11
- package/dist/cjs/api/auth.js +28 -8
- package/dist/cjs/api/billing.js +24 -7
- package/dist/cjs/api/civic.js +14 -4
- package/dist/cjs/api/follows.js +9 -2
- package/dist/cjs/api/identity.js +31 -9
- package/dist/cjs/api/nodes.js +3 -1
- package/dist/cjs/api/privacy.js +8 -2
- package/dist/cjs/api/session.js +15 -4
- package/dist/cjs/api/store.js +15 -5
- package/dist/cjs/api/topics.js +10 -3
- package/dist/cjs/api/users.js +16 -4
- package/dist/cjs/boot/sessionColdBoot.js +40 -13
- package/dist/cjs/constants/version.js +6 -6
- package/dist/cjs/crypto/identityMarker.js +3 -1
- package/dist/cjs/crypto/identityProof.js +6 -1
- package/dist/cjs/crypto/keyManager.js +87 -32
- package/dist/cjs/crypto/recoveryPhrase.js +2 -2
- package/dist/cjs/crypto/signatureService.js +3 -4
- package/dist/cjs/i18n/index.js +16 -3
- package/dist/cjs/i18n/locales/ar-SA.js +366 -366
- package/dist/cjs/i18n/locales/ca-ES.js +366 -366
- package/dist/cjs/i18n/locales/de-DE.js +366 -366
- package/dist/cjs/i18n/locales/en-US.js +1994 -1994
- package/dist/cjs/i18n/locales/es-ES.js +1994 -1994
- package/dist/cjs/i18n/locales/fr-FR.js +366 -366
- package/dist/cjs/i18n/locales/it-IT.js +366 -366
- package/dist/cjs/i18n/locales/ja-JP.js +366 -366
- package/dist/cjs/i18n/locales/ko-KR.js +366 -366
- package/dist/cjs/i18n/locales/pt-PT.js +366 -366
- package/dist/cjs/i18n/locales/zh-CN.js +366 -366
- package/dist/cjs/inference/OxyInferenceClient.js +12 -18
- package/dist/cjs/models/interfaces.js +11 -11
- package/dist/cjs/server/OxyServer.js +86 -28
- package/dist/cjs/server/agentAccount.js +6 -2
- package/dist/cjs/server/aliaMachineCredential.js +39 -14
- package/dist/cjs/server/auth.js +5 -4
- package/dist/cjs/server/capabilityTicket.js +5 -5
- package/dist/cjs/server/index.js +2 -1
- package/dist/cjs/server/liveCapabilityTicket.js +4 -1
- package/dist/cjs/server/middleware.js +61 -42
- package/dist/cjs/server/namespaces.js +28 -7
- package/dist/cjs/server/requesterAssertion.js +36 -30
- package/dist/cjs/server/serviceTokenLifetime.js +7 -4
- package/dist/cjs/server/traffic.js +53 -14
- package/dist/cjs/server/trafficNodeHttp.js +33 -8
- package/dist/cjs/server/workloadIdentity.client.js +4 -0
- package/dist/cjs/server/workloadIdentity.js +28 -1
- package/dist/cjs/session/SessionClient.js +54 -17
- package/dist/cjs/session/accountDelegationAccess.js +4 -6
- package/dist/cjs/session/accountDialogController.js +1 -1
- package/dist/cjs/session/authStateStore.js +18 -9
- package/dist/cjs/session/identityPin.js +6 -2
- package/dist/cjs/session/refresh.js +81 -23
- package/dist/cjs/session/sharedDeviceCredential.js +28 -15
- package/dist/cjs/shared/utils/errorUtils.js +1 -1
- package/dist/cjs/shared/utils/networkUtils.js +1 -1
- package/dist/cjs/shared/utils/themeUtils.js +1 -1
- package/dist/cjs/utils/accountCacheSweep.js +3 -1
- package/dist/cjs/utils/accountUtils.js +1 -3
- package/dist/cjs/utils/asyncUtils.js +1 -1
- package/dist/cjs/utils/authHelpers.js +2 -1
- package/dist/cjs/utils/avatarUtils.js +4 -2
- package/dist/cjs/utils/cache.js +1 -1
- package/dist/cjs/utils/cacheKey.js +3 -1
- package/dist/cjs/utils/deviceManager.js +4 -4
- package/dist/cjs/utils/errorUtils.js +6 -4
- package/dist/cjs/utils/languageUtils.js +404 -57
- package/dist/cjs/utils/profileLinks.js +1 -3
- package/dist/cjs/utils/requestUtils.js +7 -1
- package/dist/cjs/utils/userIdentity.js +1 -1
- package/dist/cjs/utils/validationUtils.js +5 -6
- package/dist/esm/HttpService.js +64 -20
- package/dist/esm/api/accounts.js +11 -4
- package/dist/esm/api/agency.js +3 -1
- package/dist/esm/api/apps.js +15 -4
- package/dist/esm/api/assets.js +39 -11
- package/dist/esm/api/auth.js +28 -8
- package/dist/esm/api/billing.js +25 -8
- package/dist/esm/api/civic.js +14 -4
- package/dist/esm/api/follows.js +9 -2
- package/dist/esm/api/identity.js +31 -9
- package/dist/esm/api/nodes.js +3 -1
- package/dist/esm/api/privacy.js +8 -2
- package/dist/esm/api/session.js +15 -4
- package/dist/esm/api/store.js +15 -5
- package/dist/esm/api/topics.js +10 -3
- package/dist/esm/api/users.js +16 -4
- package/dist/esm/boot/sessionColdBoot.js +41 -14
- package/dist/esm/constants/version.js +6 -6
- package/dist/esm/crypto/identityMarker.js +3 -1
- package/dist/esm/crypto/identityProof.js +6 -1
- package/dist/esm/crypto/internal.js +1 -1
- package/dist/esm/crypto/keyManager.js +87 -32
- package/dist/esm/crypto/recoveryPhrase.js +2 -2
- package/dist/esm/crypto/signatureService.js +3 -4
- package/dist/esm/i18n/index.js +16 -3
- package/dist/esm/i18n/locales/ar-SA.js +366 -366
- package/dist/esm/i18n/locales/ca-ES.js +366 -366
- package/dist/esm/i18n/locales/de-DE.js +366 -366
- package/dist/esm/i18n/locales/en-US.js +1994 -1994
- package/dist/esm/i18n/locales/es-ES.js +1994 -1994
- package/dist/esm/i18n/locales/fr-FR.js +366 -366
- package/dist/esm/i18n/locales/it-IT.js +366 -366
- package/dist/esm/i18n/locales/ja-JP.js +366 -366
- package/dist/esm/i18n/locales/ko-KR.js +366 -366
- package/dist/esm/i18n/locales/pt-PT.js +366 -366
- package/dist/esm/i18n/locales/zh-CN.js +366 -366
- package/dist/esm/index.js +1 -1
- package/dist/esm/inference/OxyInferenceClient.js +13 -19
- package/dist/esm/models/interfaces.js +11 -11
- package/dist/esm/server/OxyServer.js +87 -29
- package/dist/esm/server/agentAccount.js +6 -2
- package/dist/esm/server/aliaMachineCredential.js +39 -14
- package/dist/esm/server/auth.js +6 -5
- package/dist/esm/server/capabilityTicket.js +6 -6
- package/dist/esm/server/index.js +5 -5
- package/dist/esm/server/liveCapabilityTicket.js +6 -3
- package/dist/esm/server/middleware.js +62 -43
- package/dist/esm/server/namespaces.js +31 -10
- package/dist/esm/server/requesterAssertion.js +36 -30
- package/dist/esm/server/serviceTokenLifetime.js +7 -4
- package/dist/esm/server/traffic.js +55 -16
- package/dist/esm/server/trafficNodeHttp.js +34 -9
- package/dist/esm/server/userInvalidation.js +1 -1
- package/dist/esm/server/workloadIdentity.client.js +3 -0
- package/dist/esm/server/workloadIdentity.js +27 -1
- package/dist/esm/session/SessionClient.js +54 -17
- package/dist/esm/session/accountDelegationAccess.js +5 -7
- package/dist/esm/session/accountDialogController.js +1 -1
- package/dist/esm/session/authStateStore.js +18 -9
- package/dist/esm/session/identityPin.js +6 -2
- package/dist/esm/session/refresh.js +82 -24
- package/dist/esm/session/sharedDeviceCredential.js +28 -15
- package/dist/esm/shared/utils/errorUtils.js +1 -1
- package/dist/esm/shared/utils/networkUtils.js +1 -1
- package/dist/esm/shared/utils/themeUtils.js +1 -1
- package/dist/esm/utils/accountCacheSweep.js +3 -1
- package/dist/esm/utils/accountUtils.js +1 -3
- package/dist/esm/utils/asyncUtils.js +1 -1
- package/dist/esm/utils/authHelpers.js +2 -1
- package/dist/esm/utils/avatarUtils.js +4 -2
- package/dist/esm/utils/cache.js +1 -1
- package/dist/esm/utils/cacheKey.js +3 -1
- package/dist/esm/utils/deviceManager.js +4 -4
- package/dist/esm/utils/errorUtils.js +6 -4
- package/dist/esm/utils/languageUtils.js +404 -57
- package/dist/esm/utils/profileLinks.js +1 -3
- package/dist/esm/utils/requestUtils.js +7 -1
- package/dist/esm/utils/userIdentity.js +1 -1
- package/dist/esm/utils/validationUtils.js +5 -6
- package/dist/types/HttpService.d.ts +1 -1
- package/dist/types/api/accounts.d.ts +1 -1
- package/dist/types/api/apps.d.ts +4 -4
- package/dist/types/crypto/internal.d.ts +1 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/server/index.d.ts +6 -6
- package/dist/types/server/workloadIdentity.client.d.ts +5 -1
- package/dist/types/server/workloadIdentity.d.ts +26 -0
- package/dist/types/session/accountDelegationAccess.d.ts +1 -1
- package/dist/types/session/index.d.ts +1 -1
- package/dist/types/utils/userIdentity.d.ts +1 -1
- package/dist/types/utils/validationUtils.d.ts +4 -5
- package/package.json +2 -3
- package/src/HttpService.ts +183 -53
- package/src/OxyServices.errors.ts +7 -3
- package/src/OxyServices.ts +6 -2
- package/src/api/accounts.ts +76 -26
- package/src/api/agency.ts +24 -9
- package/src/api/appData.ts +12 -2
- package/src/api/apps.ts +81 -31
- package/src/api/assets.ts +113 -43
- package/src/api/auth.ts +145 -77
- package/src/api/billing.ts +112 -65
- package/src/api/civic.ts +61 -19
- package/src/api/contacts.ts +4 -1
- package/src/api/devices.ts +54 -21
- package/src/api/follows.ts +88 -31
- package/src/api/identity.ts +101 -33
- package/src/api/linkedAccounts.ts +26 -8
- package/src/api/nodes.ts +18 -6
- package/src/api/notifications.ts +26 -6
- package/src/api/privacy.ts +42 -8
- package/src/api/reputation.ts +18 -7
- package/src/api/session.ts +23 -5
- package/src/api/store.ts +81 -31
- package/src/api/topics.ts +18 -6
- package/src/api/users.ts +98 -35
- package/src/boot/sessionColdBoot.ts +60 -19
- package/src/civic/payloads.ts +1 -4
- package/src/client/context.ts +6 -1
- package/src/constants/version.ts +7 -6
- package/src/crypto/aead.ts +1 -5
- package/src/crypto/ecdh.ts +1 -4
- package/src/crypto/identityDerivations.ts +5 -1
- package/src/crypto/identityMarker.ts +3 -1
- package/src/crypto/identityProof.ts +6 -1
- package/src/crypto/index.ts +11 -11
- package/src/crypto/internal.ts +6 -1
- package/src/crypto/keyManager.ts +348 -98
- package/src/crypto/recoveryPhrase.ts +14 -9
- package/src/crypto/registrationPow.ts +1 -1
- package/src/crypto/signatureService.ts +14 -6
- package/src/i18n/accountCategoryLabels.ts +1 -4
- package/src/i18n/accountRoleLabels.ts +1 -4
- package/src/i18n/index.ts +25 -7
- package/src/i18n/locales/ar-SA.ts +375 -366
- package/src/i18n/locales/ca-ES.ts +382 -366
- package/src/i18n/locales/de-DE.ts +387 -366
- package/src/i18n/locales/en-US.ts +2034 -1994
- package/src/i18n/locales/es-ES.ts +2043 -1994
- package/src/i18n/locales/fr-FR.ts +387 -366
- package/src/i18n/locales/it-IT.ts +380 -366
- package/src/i18n/locales/ja-JP.ts +380 -366
- package/src/i18n/locales/ko-KR.ts +377 -366
- package/src/i18n/locales/pt-PT.ts +383 -366
- package/src/i18n/locales/zh-CN.ts +373 -366
- package/src/i18n/trustTierLabels.ts +1 -4
- package/src/index.ts +371 -349
- package/src/inference/OxyInferenceClient.ts +784 -780
- package/src/models/interfaces.ts +30 -27
- package/src/server/OxyServer.ts +227 -68
- package/src/server/agentAccount.ts +8 -2
- package/src/server/aliaMachineCredential.ts +57 -16
- package/src/server/auth.ts +9 -5
- package/src/server/capabilityTicket.ts +30 -21
- package/src/server/index.ts +29 -6
- package/src/server/liveCapabilityTicket.ts +31 -9
- package/src/server/middleware.ts +212 -121
- package/src/server/namespaces.ts +247 -94
- package/src/server/rateLimit.ts +2 -4
- package/src/server/requesterAssertion.ts +93 -54
- package/src/server/serviceTokenLifetime.ts +9 -4
- package/src/server/traffic.ts +117 -23
- package/src/server/trafficNodeHttp.ts +61 -14
- package/src/server/userInvalidation.ts +1 -4
- package/src/server/workloadIdentity.client.ts +12 -1
- package/src/server/workloadIdentity.ts +52 -5
- package/src/session/SessionClient.ts +170 -49
- package/src/session/accountDelegationAccess.ts +24 -31
- package/src/session/accountDialogController.ts +59 -14
- package/src/session/accountSwitchTargets.ts +10 -15
- package/src/session/authStateStore.ts +121 -81
- package/src/session/deviceDirectory.ts +1 -3
- package/src/session/identityPin.ts +10 -11
- package/src/session/identitySession.ts +3 -1
- package/src/session/index.ts +87 -82
- package/src/session/refresh.ts +138 -44
- package/src/session/sessionClientHost.ts +1 -3
- package/src/session/sharedDeviceCredential.ts +35 -14
- package/src/session/socketLoader.ts +9 -2
- package/src/shared/utils/errorUtils.ts +5 -2
- package/src/shared/utils/networkUtils.ts +5 -8
- package/src/shared/utils/themeUtils.ts +2 -6
- package/src/types/buffer.d.ts +66 -21
- package/src/types/expo-secure-store.d.ts +5 -1
- package/src/utils/accountCacheSweep.ts +4 -5
- package/src/utils/accountUtils.ts +107 -108
- package/src/utils/apiUtils.ts +3 -3
- package/src/utils/asyncUtils.ts +2 -2
- package/src/utils/authHelpers.ts +10 -5
- package/src/utils/avatarUtils.ts +11 -6
- package/src/utils/cache.ts +9 -10
- package/src/utils/cacheKey.ts +5 -1
- package/src/utils/coldBoot.ts +1 -3
- package/src/utils/commonsDelivery.ts +1 -4
- package/src/utils/deviceManager.ts +15 -14
- package/src/utils/errorUtils.ts +68 -86
- package/src/utils/languageUtils.ts +407 -58
- package/src/utils/oauthPkce.ts +1 -4
- package/src/utils/platform.ts +0 -1
- package/src/utils/profileLinks.ts +2 -5
- package/src/utils/requestUtils.ts +18 -14
- package/src/utils/sessionUtils.ts +34 -33
- package/src/utils/userHandle.ts +3 -1
- package/src/utils/userIdentity.ts +1 -1
- package/src/utils/validationUtils.ts +11 -9
|
@@ -61,7 +61,10 @@ export function readLocalDeviceCredential(state) {
|
|
|
61
61
|
*/
|
|
62
62
|
export function normalizeSharedDeviceSessionRead(raw) {
|
|
63
63
|
if (!raw || typeof raw !== 'object') {
|
|
64
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
state: 'unavailable',
|
|
66
|
+
cause: new Error('shared device session bridge returned a non-object'),
|
|
67
|
+
};
|
|
65
68
|
}
|
|
66
69
|
const payload = raw;
|
|
67
70
|
if (payload.status === 'absent') {
|
|
@@ -86,7 +89,10 @@ export function normalizeSharedDeviceSessionRead(raw) {
|
|
|
86
89
|
}
|
|
87
90
|
if (payload.status === 'unavailable') {
|
|
88
91
|
const reason = typeof payload.reason === 'string' ? payload.reason : 'unknown';
|
|
89
|
-
return {
|
|
92
|
+
return {
|
|
93
|
+
state: 'unavailable',
|
|
94
|
+
cause: new Error(`shared device session slot unavailable: ${reason}`),
|
|
95
|
+
};
|
|
90
96
|
}
|
|
91
97
|
return {
|
|
92
98
|
state: 'unavailable',
|
|
@@ -213,19 +219,25 @@ export function createSharedMirroringAuthStateStore(deps) {
|
|
|
213
219
|
...local,
|
|
214
220
|
load: () => local.load(),
|
|
215
221
|
clear: () => local.clear(),
|
|
216
|
-
...(local.saveIfCurrent
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
222
|
+
...(local.saveIfCurrent
|
|
223
|
+
? {
|
|
224
|
+
saveIfCurrent: async (state, guard) => {
|
|
225
|
+
const committed = await local.saveIfCurrent?.(state, guard);
|
|
226
|
+
if (!committed)
|
|
227
|
+
return false;
|
|
228
|
+
const credential = readLocalDeviceCredential(state);
|
|
229
|
+
if (credential && guard.isCurrent()) {
|
|
230
|
+
try {
|
|
231
|
+
await publishProvenDeviceCredential({ shared, credential });
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
/* Local durability already verified. */
|
|
235
|
+
}
|
|
224
236
|
}
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
237
|
+
return true;
|
|
238
|
+
},
|
|
239
|
+
}
|
|
240
|
+
: {}),
|
|
229
241
|
save: async (state) => {
|
|
230
242
|
// The durable local write is the contract this store owes its caller —
|
|
231
243
|
// run it first and report ITS result, unchanged. The mirror is additive.
|
|
@@ -241,7 +253,8 @@ export function createSharedMirroringAuthStateStore(deps) {
|
|
|
241
253
|
}
|
|
242
254
|
try {
|
|
243
255
|
const outcome = await publishProvenDeviceCredential({ shared, credential });
|
|
244
|
-
if (outcome.status === 'published' ||
|
|
256
|
+
if (outcome.status === 'published' ||
|
|
257
|
+
(outcome.status === 'skipped' && outcome.reason === 'already-current')) {
|
|
245
258
|
mirrored = credential;
|
|
246
259
|
}
|
|
247
260
|
}
|
|
@@ -157,7 +157,7 @@ export const isNetworkError = (error) => {
|
|
|
157
157
|
return true;
|
|
158
158
|
// Message-based detection
|
|
159
159
|
const message = getErrorMessage(error, '').toLowerCase();
|
|
160
|
-
return message.includes('network') || message.includes('connection') || message.includes('timeout');
|
|
160
|
+
return (message.includes('network') || message.includes('connection') || message.includes('timeout'));
|
|
161
161
|
};
|
|
162
162
|
/**
|
|
163
163
|
* Check if an error is retryable (network errors or 5xx server errors).
|
|
@@ -135,7 +135,7 @@ export const shouldAllowRequest = (state, recoveryTimeout = DEFAULT_CIRCUIT_BREA
|
|
|
135
135
|
* await delay(1000); // Wait 1 second
|
|
136
136
|
* ```
|
|
137
137
|
*/
|
|
138
|
-
export const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
138
|
+
export const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
139
139
|
/**
|
|
140
140
|
* Executes a function with exponential backoff retry.
|
|
141
141
|
*
|
|
@@ -95,4 +95,4 @@ export const systemPrefersDarkMode = () => {
|
|
|
95
95
|
* const theme = getSystemColorScheme();
|
|
96
96
|
* ```
|
|
97
97
|
*/
|
|
98
|
-
export const getSystemColorScheme = () => systemPrefersDarkMode() ? 'dark' : 'light';
|
|
98
|
+
export const getSystemColorScheme = () => (systemPrefersDarkMode() ? 'dark' : 'light');
|
|
@@ -65,7 +65,9 @@ export function oxyAccountDetailCacheKey(accountId) {
|
|
|
65
65
|
*/
|
|
66
66
|
export function evictOxyAccountForestCache(http, accountId) {
|
|
67
67
|
http.invalidateCache({
|
|
68
|
-
keys: accountId
|
|
68
|
+
keys: accountId
|
|
69
|
+
? [OXY_ACCOUNT_LIST_CACHE_KEY, oxyAccountDetailCacheKey(accountId)]
|
|
70
|
+
: [OXY_ACCOUNT_LIST_CACHE_KEY],
|
|
69
71
|
prefixes: [OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX],
|
|
70
72
|
});
|
|
71
73
|
}
|
|
@@ -99,9 +99,7 @@ export const buildAccountsArray = (accounts, order) => {
|
|
|
99
99
|
export const createQuickAccount = (sessionId, userData, existingAccount, getFileDownloadUrl) => {
|
|
100
100
|
const nameObj = userData.name && typeof userData.name === 'object' ? userData.name : undefined;
|
|
101
101
|
const apiDisplayName = typeof nameObj?.displayName === 'string' ? nameObj.displayName.trim() : '';
|
|
102
|
-
const displayName = apiDisplayName ||
|
|
103
|
-
getNormalizedUserHandle(userData) ||
|
|
104
|
-
getAccountDisplayName(null);
|
|
102
|
+
const displayName = apiDisplayName || getNormalizedUserHandle(userData) || getAccountDisplayName(null);
|
|
105
103
|
const userId = userData.id || (typeof userData._id === 'string' ? userData._id : userData._id?.toString());
|
|
106
104
|
// Preserve existing avatarUrl if avatar hasn't changed (prevents image reload)
|
|
107
105
|
let avatarUrl;
|
|
@@ -112,7 +112,7 @@ export async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayAr
|
|
|
112
112
|
if (deadline !== undefined && Date.now() + delay >= deadline) {
|
|
113
113
|
break;
|
|
114
114
|
}
|
|
115
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
115
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
throw lastError;
|
|
@@ -41,7 +41,8 @@ export async function ensureValidToken(oxyServices, _activeSessionId, syncSessio
|
|
|
41
41
|
}
|
|
42
42
|
catch (syncError) {
|
|
43
43
|
const errorMessage = syncError instanceof Error ? syncError.message : String(syncError);
|
|
44
|
-
if (errorMessage.includes('AUTH_REQUIRED_OFFLINE_SESSION') ||
|
|
44
|
+
if (errorMessage.includes('AUTH_REQUIRED_OFFLINE_SESSION') ||
|
|
45
|
+
errorMessage.includes('offline')) {
|
|
45
46
|
throw new SessionSyncRequiredError();
|
|
46
47
|
}
|
|
47
48
|
throw syncError;
|
|
@@ -16,11 +16,13 @@ export async function updateAvatarVisibility(fileId, oxyServices, contextName =
|
|
|
16
16
|
}
|
|
17
17
|
catch (visError) {
|
|
18
18
|
// 404 is expected when asset doesn't exist yet — skip logging
|
|
19
|
-
const status =
|
|
19
|
+
const status = visError instanceof Error && 'status' in visError
|
|
20
20
|
? visError.status
|
|
21
21
|
: undefined;
|
|
22
22
|
if (status !== 404) {
|
|
23
|
-
logger.error(`[${contextName}] Failed to update avatar visibility for ${fileId}`, visError, {
|
|
23
|
+
logger.error(`[${contextName}] Failed to update avatar visibility for ${fileId}`, visError, {
|
|
24
|
+
component: contextName,
|
|
25
|
+
});
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
}
|
package/dist/esm/utils/cache.js
CHANGED
|
@@ -232,7 +232,7 @@ export function registerCacheForCleanup(cache) {
|
|
|
232
232
|
}
|
|
233
233
|
/** Empty registered caches need no timer; importing a client must stay inert. */
|
|
234
234
|
function updateCleanupInterval() {
|
|
235
|
-
const hasEntries = [...activeCaches].some(cache => cache.size() > 0);
|
|
235
|
+
const hasEntries = [...activeCaches].some((cache) => cache.size() > 0);
|
|
236
236
|
if (!hasEntries) {
|
|
237
237
|
if (cleanupInterval)
|
|
238
238
|
clearInterval(cleanupInterval);
|
|
@@ -71,5 +71,7 @@ export function computeIdentityTag(accessToken) {
|
|
|
71
71
|
const decoded = decodeTokenClaims(accessToken);
|
|
72
72
|
// An undecodable token is still partitioned away from anon and from other
|
|
73
73
|
// tokens via a hash — never silently ANON_IDENTITY.
|
|
74
|
-
return decoded?.userId ||
|
|
74
|
+
return (decoded?.userId ||
|
|
75
|
+
decoded?.id ||
|
|
76
|
+
`t${fnv1a32(accessToken)}`);
|
|
75
77
|
}
|
|
@@ -40,7 +40,7 @@ export class DeviceManager {
|
|
|
40
40
|
return {
|
|
41
41
|
getItem: async (key) => localStorage.getItem(key),
|
|
42
42
|
setItem: async (key, value) => localStorage.setItem(key, value),
|
|
43
|
-
removeItem: async (key) => localStorage.removeItem(key)
|
|
43
|
+
removeItem: async (key) => localStorage.removeItem(key),
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -59,7 +59,7 @@ export class DeviceManager {
|
|
|
59
59
|
fingerprint.screen = {
|
|
60
60
|
width: screen.width,
|
|
61
61
|
height: screen.height,
|
|
62
|
-
colorDepth: screen.colorDepth
|
|
62
|
+
colorDepth: screen.colorDepth,
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
return fingerprint;
|
|
@@ -94,7 +94,7 @@ export class DeviceManager {
|
|
|
94
94
|
deviceId: DeviceManager.generateDeviceId(),
|
|
95
95
|
fingerprint: JSON.stringify(DeviceManager.getDeviceFingerprint()),
|
|
96
96
|
createdAt: new Date().toISOString(),
|
|
97
|
-
lastUsed: new Date().toISOString()
|
|
97
|
+
lastUsed: new Date().toISOString(),
|
|
98
98
|
};
|
|
99
99
|
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
100
100
|
return deviceInfo;
|
|
@@ -143,7 +143,7 @@ export class DeviceManager {
|
|
|
143
143
|
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
144
144
|
const array = new Uint8Array(32);
|
|
145
145
|
crypto.getRandomValues(array);
|
|
146
|
-
return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
|
|
146
|
+
return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
147
147
|
}
|
|
148
148
|
throw new Error('No secure random source available for device ID generation');
|
|
149
149
|
}
|
|
@@ -39,7 +39,7 @@ export const ErrorCodes = {
|
|
|
39
39
|
* nothing may retry it. See `retryAsync`'s default predicate, which refuses
|
|
40
40
|
* this code specifically.
|
|
41
41
|
*/
|
|
42
|
-
CANCELLED: 'CANCELLED'
|
|
42
|
+
CANCELLED: 'CANCELLED',
|
|
43
43
|
};
|
|
44
44
|
/**
|
|
45
45
|
* Narrow a caught value to {@link HttpRequestError}.
|
|
@@ -106,7 +106,7 @@ export function createApiError(message, code = ErrorCodes.INTERNAL_ERROR, status
|
|
|
106
106
|
message,
|
|
107
107
|
code,
|
|
108
108
|
status,
|
|
109
|
-
details
|
|
109
|
+
details,
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
112
|
export function createCancelledError(message = 'Request cancelled') {
|
|
@@ -167,7 +167,9 @@ export function handleHttpError(error) {
|
|
|
167
167
|
// Handle TypeError (network failures, CORS, etc.)
|
|
168
168
|
if (error instanceof TypeError) {
|
|
169
169
|
// Check if it's a network-related TypeError
|
|
170
|
-
if (error.message.includes('fetch') ||
|
|
170
|
+
if (error.message.includes('fetch') ||
|
|
171
|
+
error.message.includes('network') ||
|
|
172
|
+
error.message.includes('Failed to fetch')) {
|
|
171
173
|
return createApiError('Network error - failed to connect to server', ErrorCodes.NETWORK_ERROR, 0);
|
|
172
174
|
}
|
|
173
175
|
return createApiError(error.message || 'Network error occurred', ErrorCodes.NETWORK_ERROR, 0);
|
|
@@ -255,7 +257,7 @@ export function extractErrorStatus(error) {
|
|
|
255
257
|
* Validate required fields and throw error if missing
|
|
256
258
|
*/
|
|
257
259
|
export function validateRequiredFields(data, fields) {
|
|
258
|
-
const missing = fields.filter(field => !data[field]);
|
|
260
|
+
const missing = fields.filter((field) => !data[field]);
|
|
259
261
|
if (missing.length > 0) {
|
|
260
262
|
throw createApiError(`Missing required fields: ${missing.join(', ')}`, ErrorCodes.MISSING_PARAMETER, 400);
|
|
261
263
|
}
|