@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
|
@@ -44,7 +44,11 @@ import { runColdBoot, type ColdBootOutcome, type ColdBootStep } from '../utils/c
|
|
|
44
44
|
import { isNative as detectNative } from '../utils/platform';
|
|
45
45
|
import { logger } from '../logger';
|
|
46
46
|
import { computeIdentityTag } from '../utils/cacheKey';
|
|
47
|
-
import {
|
|
47
|
+
import {
|
|
48
|
+
TOKEN_REFRESH_LEAD_MS,
|
|
49
|
+
refreshDeviceSecretArm,
|
|
50
|
+
refreshSharedDeviceArm,
|
|
51
|
+
} from '../session/refresh';
|
|
48
52
|
import {
|
|
49
53
|
establishIdentitySession,
|
|
50
54
|
resolveIdentityPin,
|
|
@@ -156,7 +160,7 @@ export async function runSessionColdBoot(
|
|
|
156
160
|
|
|
157
161
|
// Non-null ONLY in identity mode; every `!== null` test below therefore reads
|
|
158
162
|
// as "is this boot identity-bound?" while also narrowing the binding.
|
|
159
|
-
const identityBinding = opts.sessionMode === 'identity' ? opts.identity ?? null : null;
|
|
163
|
+
const identityBinding = opts.sessionMode === 'identity' ? (opts.identity ?? null) : null;
|
|
160
164
|
if (opts.sessionMode === 'identity' && identityBinding === null) {
|
|
161
165
|
logger.error(
|
|
162
166
|
'runSessionColdBoot: sessionMode "identity" requires an `identity` binding — refusing to run any lane (an identity-bound client must never adopt the device active account)',
|
|
@@ -211,9 +215,19 @@ export async function runSessionColdBoot(
|
|
|
211
215
|
steps.push({
|
|
212
216
|
id: 'warm-token-plant',
|
|
213
217
|
run: async () => {
|
|
214
|
-
if (
|
|
218
|
+
if (
|
|
219
|
+
identityBinding === null &&
|
|
220
|
+
isNative &&
|
|
221
|
+
(await store.isAutomaticIdentitySignInSuppressed?.())
|
|
222
|
+
)
|
|
223
|
+
return { kind: 'skip' };
|
|
215
224
|
const persisted = await store.load();
|
|
216
|
-
if (
|
|
225
|
+
if (
|
|
226
|
+
!persisted?.accessToken ||
|
|
227
|
+
!persisted.sessionId ||
|
|
228
|
+
!persisted.userId ||
|
|
229
|
+
!persisted.expiresAt
|
|
230
|
+
) {
|
|
217
231
|
return { kind: 'skip' };
|
|
218
232
|
}
|
|
219
233
|
// Guard a malformed `expiresAt` (Date.parse -> NaN): treat as not-valid and
|
|
@@ -287,10 +301,14 @@ export async function runSessionColdBoot(
|
|
|
287
301
|
},
|
|
288
302
|
};
|
|
289
303
|
case 'invalid-secret': {
|
|
290
|
-
if (
|
|
304
|
+
if (
|
|
305
|
+
identityBinding === null &&
|
|
306
|
+
store.setAutomaticIdentitySignInSuppressed &&
|
|
307
|
+
(await store.isAutomaticIdentitySignInSuppressed?.())
|
|
308
|
+
) {
|
|
291
309
|
rejectedLocalHolder = true;
|
|
292
310
|
signedOutReason = 'no_session';
|
|
293
|
-
return {kind: 'skip'};
|
|
311
|
+
return { kind: 'skip' };
|
|
294
312
|
}
|
|
295
313
|
// Stale/diverged secret — drop it so the mint lane stops firing. On
|
|
296
314
|
// native the Commons-proof step below can still recover; on web this ends
|
|
@@ -329,10 +347,10 @@ export async function runSessionColdBoot(
|
|
|
329
347
|
return { kind: 'skip' };
|
|
330
348
|
case 'transient':
|
|
331
349
|
// Network / 5xx: keep the secret; a later attempt can succeed.
|
|
332
|
-
logger.debug(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
);
|
|
350
|
+
logger.debug('device-secret mint failed (transient) — keeping secret', {
|
|
351
|
+
component: 'sessionColdBoot',
|
|
352
|
+
method: 'device-secret-mint',
|
|
353
|
+
});
|
|
336
354
|
return { kind: 'skip' };
|
|
337
355
|
case 'session-ended':
|
|
338
356
|
// The prior holder/epoch was superseded. This boot must not turn a
|
|
@@ -404,14 +422,25 @@ export async function runSessionColdBoot(
|
|
|
404
422
|
// like every other network step.
|
|
405
423
|
enabled: () => isNative && !isOffline() && !accountRecoverySuperseded,
|
|
406
424
|
run: async () => {
|
|
407
|
-
const result = await refreshSharedDeviceArm({
|
|
425
|
+
const result = await refreshSharedDeviceArm({
|
|
426
|
+
oxy,
|
|
427
|
+
store,
|
|
428
|
+
shared: sharedSlot,
|
|
429
|
+
rejectedLocalHolder,
|
|
430
|
+
});
|
|
408
431
|
if (result.status === 'ok') {
|
|
409
|
-
return {
|
|
410
|
-
|
|
411
|
-
|
|
432
|
+
return {
|
|
433
|
+
kind: 'session',
|
|
434
|
+
session: {
|
|
435
|
+
sessionId: result.sessionId,
|
|
436
|
+
userId: result.userId,
|
|
437
|
+
accessToken: result.token,
|
|
438
|
+
state: result.state,
|
|
439
|
+
},
|
|
440
|
+
};
|
|
412
441
|
}
|
|
413
442
|
if (result.status === 'no-session') signedOutReason = 'no_session';
|
|
414
|
-
return {kind: 'skip'};
|
|
443
|
+
return { kind: 'skip' };
|
|
415
444
|
},
|
|
416
445
|
});
|
|
417
446
|
}
|
|
@@ -439,10 +468,18 @@ export async function runSessionColdBoot(
|
|
|
439
468
|
id: 'commons-proof-signin',
|
|
440
469
|
enabled: () => isNative && !isOffline(),
|
|
441
470
|
run: async () => {
|
|
442
|
-
if (accountRecoverySuperseded || await store.isAutomaticIdentitySignInSuppressed?.())
|
|
471
|
+
if (accountRecoverySuperseded || (await store.isAutomaticIdentitySignInSuppressed?.()))
|
|
472
|
+
return { kind: 'skip' };
|
|
443
473
|
const epoch = oxy.http.getSessionEpoch();
|
|
444
|
-
const session = await oxy.auth.signInWithCommonsIdentity({
|
|
445
|
-
|
|
474
|
+
const session = await oxy.auth.signInWithCommonsIdentity({
|
|
475
|
+
plantTokens: false,
|
|
476
|
+
requestOptions: { retry: false },
|
|
477
|
+
});
|
|
478
|
+
if (
|
|
479
|
+
!session?.accessToken ||
|
|
480
|
+
oxy.http.getSessionEpoch() !== epoch ||
|
|
481
|
+
(await store.isAutomaticIdentitySignInSuppressed?.())
|
|
482
|
+
) {
|
|
446
483
|
return { kind: 'skip' };
|
|
447
484
|
}
|
|
448
485
|
// `verifyChallenge` issues a deviceSecret; persist it so the next
|
|
@@ -458,7 +495,11 @@ export async function runSessionColdBoot(
|
|
|
458
495
|
expiresAt: session.expiresAt,
|
|
459
496
|
});
|
|
460
497
|
}
|
|
461
|
-
if (
|
|
498
|
+
if (
|
|
499
|
+
oxy.http.getSessionEpoch() !== epoch ||
|
|
500
|
+
(await store.isAutomaticIdentitySignInSuppressed?.())
|
|
501
|
+
)
|
|
502
|
+
return { kind: 'skip' };
|
|
462
503
|
oxy.session.setAccessToken(session.accessToken);
|
|
463
504
|
return {
|
|
464
505
|
kind: 'session',
|
package/src/civic/payloads.ts
CHANGED
|
@@ -44,10 +44,7 @@ function parseCommonsQuery(raw: string): Map<string, string> {
|
|
|
44
44
|
const rawKey = eq < 0 ? pair : pair.slice(0, eq);
|
|
45
45
|
const rawValue = eq < 0 ? '' : pair.slice(eq + 1);
|
|
46
46
|
try {
|
|
47
|
-
params.set(
|
|
48
|
-
decodeURIComponent(rawKey),
|
|
49
|
-
decodeURIComponent(rawValue.replace(/\+/g, ' ')),
|
|
50
|
-
);
|
|
47
|
+
params.set(decodeURIComponent(rawKey), decodeURIComponent(rawValue.replace(/\+/g, ' ')));
|
|
51
48
|
} catch {
|
|
52
49
|
// Malformed percent-encoding — keep the raw token rather than throwing, so
|
|
53
50
|
// a single bad field doesn't sink an otherwise valid payload.
|
package/src/client/context.ts
CHANGED
|
@@ -20,7 +20,12 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
|
20
20
|
export interface ServiceLane {
|
|
21
21
|
/** Whether a service token can be minted here (a key pair, or workload identity). */
|
|
22
22
|
readonly available: boolean;
|
|
23
|
-
request<T>(
|
|
23
|
+
request<T>(
|
|
24
|
+
method: HttpMethod,
|
|
25
|
+
url: string,
|
|
26
|
+
data?: unknown,
|
|
27
|
+
options?: RequestOptions & { actAs?: string },
|
|
28
|
+
): Promise<T>;
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
export interface OxyContext {
|
package/src/constants/version.ts
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
export const packageInfo = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
name: '@oxy.so/services',
|
|
8
|
+
version: '5.2.1',
|
|
9
|
+
description:
|
|
10
|
+
'Reusable OxyHQ module to handle authentication, user management, reputation system (Oxy Trust) and more 🚀',
|
|
11
|
+
main: 'lib/commonjs/node/index.js',
|
|
12
|
+
module: 'lib/module/node/index.js',
|
|
13
|
+
types: 'lib/typescript/node/index.d.ts',
|
|
13
14
|
} as const;
|
|
14
15
|
|
|
15
16
|
export const { name, version, description } = packageInfo;
|
package/src/crypto/aead.ts
CHANGED
|
@@ -60,11 +60,7 @@ function randomNonce(): Uint8Array {
|
|
|
60
60
|
* @param aad Optional associated data authenticated but not encrypted.
|
|
61
61
|
* @returns `{ nonce, ciphertext }` — both are required to decrypt.
|
|
62
62
|
*/
|
|
63
|
-
export function encryptAead(
|
|
64
|
-
key: Uint8Array,
|
|
65
|
-
plaintext: Uint8Array,
|
|
66
|
-
aad?: Uint8Array,
|
|
67
|
-
): AeadResult {
|
|
63
|
+
export function encryptAead(key: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array): AeadResult {
|
|
68
64
|
assertKey(key);
|
|
69
65
|
const nonce = randomNonce();
|
|
70
66
|
const ciphertext = xchacha20poly1305(key, nonce, aad).encrypt(plaintext);
|
package/src/crypto/ecdh.ts
CHANGED
|
@@ -29,9 +29,6 @@ import { deriveSecp256k1SharedSecret } from '@oxy.so/protocol/secp256k1';
|
|
|
29
29
|
* bytes) or uncompressed (`04` + 64 bytes).
|
|
30
30
|
* @returns The 32-byte big-endian shared secret.
|
|
31
31
|
*/
|
|
32
|
-
export function deriveSharedSecret(
|
|
33
|
-
privateKeyHex: string,
|
|
34
|
-
otherPublicKeyHex: string,
|
|
35
|
-
): Uint8Array {
|
|
32
|
+
export function deriveSharedSecret(privateKeyHex: string, otherPublicKeyHex: string): Uint8Array {
|
|
36
33
|
return deriveSecp256k1SharedSecret(privateKeyHex, otherPublicKeyHex);
|
|
37
34
|
}
|
|
@@ -117,6 +117,10 @@ export function signSocialReceiveDigest(
|
|
|
117
117
|
* `sha256("auth:${publicKey}:${challenge}:${timestamp}")`, hex. The message
|
|
118
118
|
* format is the one `POST /auth/verify` checks, unchanged.
|
|
119
119
|
*/
|
|
120
|
-
export function authChallengeDigest(
|
|
120
|
+
export function authChallengeDigest(
|
|
121
|
+
publicKey: string,
|
|
122
|
+
challenge: string,
|
|
123
|
+
timestamp: number,
|
|
124
|
+
): string {
|
|
121
125
|
return bytesToHex(sha256(utf8(`auth:${publicKey}:${challenge}:${timestamp}`)));
|
|
122
126
|
}
|
|
@@ -252,7 +252,9 @@ export async function updateIdentityMarker(
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
const nextOnboarding =
|
|
255
|
-
partial.onboardingComplete !== undefined
|
|
255
|
+
partial.onboardingComplete !== undefined
|
|
256
|
+
? partial.onboardingComplete
|
|
257
|
+
: existing.onboardingComplete;
|
|
256
258
|
const next: IdentityMarker = {
|
|
257
259
|
v: 1,
|
|
258
260
|
publicKey: partial.publicKey ?? existing.publicKey,
|
|
@@ -32,5 +32,10 @@ export async function signIdentityProof(
|
|
|
32
32
|
throw new Error('identity proof: the claims name a different root');
|
|
33
33
|
}
|
|
34
34
|
const signature = await signMessage(buildIdentityProofMessage(claims), identity.privateKey);
|
|
35
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
v: IDENTITY_PROOF_VERSION,
|
|
37
|
+
challenge: claims.challenge,
|
|
38
|
+
expiresAt: claims.expiresAt,
|
|
39
|
+
signature,
|
|
40
|
+
};
|
|
36
41
|
}
|
package/src/crypto/index.ts
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
import './polyfill';
|
|
13
13
|
|
|
14
14
|
export {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
KeyManager,
|
|
16
|
+
IdentityAlreadyExistsError,
|
|
17
|
+
IdentityPersistError,
|
|
18
|
+
IdentityUnavailableError,
|
|
19
19
|
} from './keyManager';
|
|
20
20
|
export type { KeyPair, IdentityStatus, IdentityRecoveryResult } from './keyManager';
|
|
21
21
|
export { readIdentityMarker, updateIdentityMarker } from './identityMarker';
|
|
@@ -36,13 +36,13 @@ export { deriveSharedSecret } from './ecdh';
|
|
|
36
36
|
// What the identity key computes without leaving its holder: the same functions
|
|
37
37
|
// Commons' identity host implements natively on Android.
|
|
38
38
|
export {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
SCOPED_SEED_KDF_SALT,
|
|
40
|
+
SOCIAL_RECEIVE_CHAIN_CODE_KEY,
|
|
41
|
+
MAX_SOCIAL_RECEIVE_INDEX,
|
|
42
|
+
deriveScopedSeedFromKey,
|
|
43
|
+
deriveSocialReceiveKey,
|
|
44
|
+
signSocialReceiveDigest,
|
|
45
|
+
authChallengeDigest,
|
|
46
46
|
} from './identityDerivations';
|
|
47
47
|
|
|
48
48
|
// Identity proofs — the one signed format for operations on a personal root
|
package/src/crypto/internal.ts
CHANGED
|
@@ -17,4 +17,9 @@ export { encryptAead, decryptAead, AEAD_KEY_LENGTH, AEAD_NONCE_LENGTH } from './
|
|
|
17
17
|
export { digestIdentityPayload, signIdentityProof } from './identityProof';
|
|
18
18
|
export { deriveIdentityLinkCode } from './identityLink';
|
|
19
19
|
export { solveRegistrationPow } from './registrationPow';
|
|
20
|
-
export {
|
|
20
|
+
export {
|
|
21
|
+
canonicalize,
|
|
22
|
+
loadCommonsIdentityBridge,
|
|
23
|
+
signMessage,
|
|
24
|
+
verifySignature,
|
|
25
|
+
} from '@oxy.so/protocol';
|