@oxy.so/core 1.18.0 → 3.0.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 +13 -7
- package/dist/cjs/HttpService.js +189 -112
- package/dist/cjs/OxyServices.errors.js +48 -1
- package/dist/cjs/OxyServices.js +263 -60
- package/dist/cjs/api/accounts.js +231 -0
- package/dist/cjs/api/agency.js +102 -0
- package/dist/cjs/api/appData.js +45 -0
- package/dist/cjs/api/apps.js +197 -0
- package/dist/cjs/api/assets.js +329 -0
- package/dist/cjs/api/auth.js +900 -0
- package/dist/cjs/api/billing.js +44 -0
- package/dist/cjs/api/civic.js +289 -0
- package/dist/cjs/api/contacts.js +16 -0
- package/dist/cjs/api/devices.js +351 -0
- package/dist/cjs/api/follows.js +240 -0
- package/dist/cjs/api/identity.js +569 -0
- package/dist/cjs/api/linkedAccounts.js +48 -0
- package/dist/cjs/api/nodes.js +75 -0
- package/dist/cjs/api/notifications.js +75 -0
- package/dist/cjs/api/privacy.js +105 -0
- package/dist/cjs/api/reputation.js +74 -0
- package/dist/cjs/api/session.js +177 -0
- package/dist/cjs/api/store.js +199 -0
- package/dist/cjs/api/topics.js +66 -0
- package/dist/cjs/api/users.js +309 -0
- package/dist/cjs/boot/sessionColdBoot.js +4 -4
- package/dist/cjs/civic/index.js +16 -0
- package/dist/cjs/civic/payloads.js +156 -0
- package/dist/cjs/client/context.js +2 -0
- package/dist/cjs/crypto/identityLink.js +5 -5
- package/dist/cjs/crypto/index.js +44 -0
- package/dist/cjs/crypto/internal.js +37 -0
- package/dist/cjs/crypto/keyManager.js +2 -2
- package/dist/cjs/crypto/polyfill.js +9 -80
- package/dist/cjs/crypto/recoveryPhrase.js +1 -0
- package/dist/cjs/crypto/registrationPow.js +1 -1
- package/dist/cjs/crypto/signatureService.js +1 -0
- package/dist/cjs/i18n/accountCategoryLabels.js +3 -3
- package/dist/cjs/i18n/accountRoleLabels.js +7 -7
- package/dist/cjs/i18n/index.js +130 -52
- package/dist/cjs/i18n/locales/{ar-SA.json → ar-SA.js} +134 -52
- package/dist/cjs/i18n/locales/{ca-ES.json → ca-ES.js} +134 -52
- package/dist/{esm/i18n/locales/de-DE.json → cjs/i18n/locales/de-DE.js} +136 -54
- package/dist/{esm/i18n/locales/en-US.json → cjs/i18n/locales/en-US.js} +163 -245
- package/dist/{esm/i18n/locales/es-ES.json → cjs/i18n/locales/es-ES.js} +163 -245
- package/dist/cjs/i18n/locales/{fr-FR.json → fr-FR.js} +134 -52
- package/dist/cjs/i18n/locales/{it-IT.json → it-IT.js} +134 -52
- package/dist/{esm/i18n/locales/ja-JP.json → cjs/i18n/locales/ja-JP.js} +134 -52
- package/dist/cjs/i18n/locales/{ko-KR.json → ko-KR.js} +134 -52
- package/dist/{esm/i18n/locales/pt-PT.json → cjs/i18n/locales/pt-PT.js} +136 -54
- package/dist/{esm/i18n/locales/zh-CN.json → cjs/i18n/locales/zh-CN.js} +135 -53
- package/dist/cjs/i18n/reputationCategoryLabels.js +2 -2
- package/dist/cjs/i18n/trustTierLabels.js +2 -2
- package/dist/cjs/index.js +55 -263
- package/dist/cjs/inference/index.js +21 -0
- package/dist/cjs/server/OxyServer.js +521 -0
- package/dist/cjs/server/auth.js +2 -2
- package/dist/cjs/server/index.js +23 -6
- package/dist/cjs/server/middleware.js +1154 -0
- package/dist/cjs/server/namespaces.js +214 -0
- package/dist/cjs/server/rateLimit.js +2 -2
- package/dist/cjs/server/requesterAssertion.js +5 -5
- package/dist/cjs/server/securityHeaders.js +3 -3
- package/dist/cjs/server/traffic.js +7 -6
- package/dist/cjs/server/trafficNodeHttp.js +9 -3
- package/dist/cjs/server/userInvalidation.js +5 -5
- package/dist/cjs/session/accountDialogController.js +23 -23
- package/dist/cjs/session/authStateStore.js +2 -2
- package/dist/cjs/session/identitySession.js +3 -3
- package/dist/cjs/session/index.js +131 -0
- package/dist/cjs/session/refresh.js +37 -30
- package/dist/cjs/session/sessionClientHost.js +5 -5
- package/dist/cjs/session/sharedDeviceCredential.js +3 -2
- package/dist/cjs/shared/utils/networkUtils.js +2 -2
- package/dist/cjs/utils/accountCacheSweep.js +11 -15
- package/dist/cjs/utils/asyncUtils.js +22 -163
- package/dist/cjs/utils/authHelpers.js +2 -2
- package/dist/cjs/utils/authWebUrl.js +3 -4
- package/dist/cjs/utils/avatarUtils.js +2 -2
- package/dist/cjs/utils/cache.js +32 -2
- package/dist/cjs/utils/cacheKey.js +5 -10
- package/dist/cjs/utils/deviceManager.js +17 -16
- package/dist/cjs/utils/edgeRegion.js +2 -3
- package/dist/cjs/utils/identityCacheSweep.js +6 -10
- package/dist/cjs/utils/oxyServiceEnvironment.js +3 -7
- package/dist/cjs/utils/requestUtils.js +40 -33
- package/dist/cjs/utils/sessionUtils.js +0 -2
- package/dist/cjs/utils/tokenClaims.js +34 -0
- package/dist/esm/HttpService.js +190 -113
- package/dist/esm/OxyServices.errors.js +45 -0
- package/dist/esm/OxyServices.js +262 -57
- package/dist/esm/api/accounts.js +218 -0
- package/dist/esm/api/agency.js +95 -0
- package/dist/esm/api/appData.js +40 -0
- package/dist/esm/api/apps.js +191 -0
- package/dist/esm/api/assets.js +324 -0
- package/dist/esm/api/auth.js +858 -0
- package/dist/esm/api/billing.js +40 -0
- package/dist/esm/api/civic.js +250 -0
- package/dist/esm/api/contacts.js +12 -0
- package/dist/esm/api/devices.js +346 -0
- package/dist/esm/api/follows.js +236 -0
- package/dist/esm/api/identity.js +527 -0
- package/dist/esm/api/linkedAccounts.js +44 -0
- package/dist/esm/api/nodes.js +71 -0
- package/dist/esm/api/notifications.js +71 -0
- package/dist/esm/api/privacy.js +101 -0
- package/dist/esm/api/reputation.js +70 -0
- package/dist/esm/api/session.js +173 -0
- package/dist/esm/api/store.js +192 -0
- package/dist/esm/api/topics.js +62 -0
- package/dist/esm/api/users.js +272 -0
- package/dist/esm/boot/sessionColdBoot.js +4 -4
- package/dist/esm/civic/index.js +10 -0
- package/dist/esm/civic/payloads.js +118 -0
- package/dist/esm/client/context.js +1 -0
- package/dist/esm/crypto/identityLink.js +5 -5
- package/dist/esm/crypto/index.js +24 -0
- package/dist/esm/crypto/internal.js +19 -0
- package/dist/esm/crypto/keyManager.js +2 -2
- package/dist/esm/crypto/polyfill.js +10 -81
- package/dist/esm/crypto/recoveryPhrase.js +1 -0
- package/dist/esm/crypto/registrationPow.js +1 -1
- package/dist/esm/crypto/signatureService.js +1 -0
- package/dist/esm/i18n/accountCategoryLabels.js +2 -2
- package/dist/esm/i18n/accountRoleLabels.js +1 -1
- package/dist/esm/i18n/index.js +93 -52
- package/dist/esm/i18n/locales/{ar-SA.json → ar-SA.js} +132 -52
- package/dist/esm/i18n/locales/{ca-ES.json → ca-ES.js} +132 -52
- package/dist/{cjs/i18n/locales/de-DE.json → esm/i18n/locales/de-DE.js} +134 -54
- package/dist/{cjs/i18n/locales/en-US.json → esm/i18n/locales/en-US.js} +161 -245
- package/dist/{cjs/i18n/locales/es-ES.json → esm/i18n/locales/es-ES.js} +161 -245
- package/dist/esm/i18n/locales/{fr-FR.json → fr-FR.js} +132 -52
- package/dist/esm/i18n/locales/{it-IT.json → it-IT.js} +132 -52
- package/dist/{cjs/i18n/locales/ja-JP.json → esm/i18n/locales/ja-JP.js} +132 -52
- package/dist/esm/i18n/locales/{ko-KR.json → ko-KR.js} +132 -52
- package/dist/{cjs/i18n/locales/pt-PT.json → esm/i18n/locales/pt-PT.js} +134 -54
- package/dist/{cjs/i18n/locales/zh-CN.json → esm/i18n/locales/zh-CN.js} +133 -53
- package/dist/esm/i18n/reputationCategoryLabels.js +1 -1
- package/dist/esm/i18n/trustTierLabels.js +1 -1
- package/dist/esm/index.js +30 -166
- package/dist/esm/inference/index.js +13 -0
- package/dist/esm/server/OxyServer.js +516 -0
- package/dist/esm/server/auth.js +2 -2
- package/dist/esm/server/index.js +10 -5
- package/dist/esm/server/middleware.js +1147 -0
- package/dist/esm/server/namespaces.js +206 -0
- package/dist/esm/server/rateLimit.js +2 -2
- package/dist/esm/server/requesterAssertion.js +5 -5
- package/dist/esm/server/securityHeaders.js +3 -3
- package/dist/esm/server/traffic.js +7 -6
- package/dist/esm/server/trafficNodeHttp.js +9 -3
- package/dist/esm/server/userInvalidation.js +5 -5
- package/dist/esm/session/accountDialogController.js +23 -23
- package/dist/esm/session/authStateStore.js +2 -2
- package/dist/esm/session/identitySession.js +3 -3
- package/dist/esm/session/index.js +82 -0
- package/dist/esm/session/refresh.js +37 -30
- package/dist/esm/session/sessionClientHost.js +5 -5
- package/dist/esm/session/sharedDeviceCredential.js +3 -2
- package/dist/esm/shared/utils/networkUtils.js +2 -2
- package/dist/esm/utils/accountCacheSweep.js +11 -15
- package/dist/esm/utils/asyncUtils.js +22 -151
- package/dist/esm/utils/authHelpers.js +2 -2
- package/dist/esm/utils/authWebUrl.js +3 -4
- package/dist/esm/utils/avatarUtils.js +2 -2
- package/dist/esm/utils/cache.js +32 -2
- package/dist/esm/utils/cacheKey.js +5 -10
- package/dist/esm/utils/deviceManager.js +17 -16
- package/dist/esm/utils/edgeRegion.js +1 -2
- package/dist/esm/utils/identityCacheSweep.js +6 -10
- package/dist/esm/utils/oxyServiceEnvironment.js +3 -7
- package/dist/esm/utils/requestUtils.js +40 -33
- package/dist/esm/utils/sessionUtils.js +0 -2
- package/dist/esm/utils/tokenClaims.js +31 -0
- package/dist/types/HttpService.d.ts +47 -9
- package/dist/types/OxyServices.d.ts +160 -131
- package/dist/types/OxyServices.errors.d.ts +42 -0
- package/dist/types/api/accounts.d.ts +415 -0
- package/dist/types/api/agency.d.ts +135 -0
- package/dist/types/api/appData.d.ts +27 -0
- package/dist/types/api/apps.d.ts +433 -0
- package/dist/types/api/assets.d.ts +174 -0
- package/dist/types/api/auth.d.ts +766 -0
- package/dist/types/api/billing.d.ts +113 -0
- package/dist/types/api/civic.d.ts +203 -0
- package/dist/types/api/contacts.d.ts +31 -0
- package/{src/mixins/OxyServices.deviceBoot.ts → dist/types/api/devices.d.ts} +130 -110
- package/dist/types/api/follows.d.ts +236 -0
- package/dist/types/api/identity.d.ts +275 -0
- package/dist/types/api/linkedAccounts.d.ts +48 -0
- package/dist/types/api/nodes.d.ts +102 -0
- package/dist/types/api/notifications.d.ts +77 -0
- package/dist/types/api/privacy.d.ts +43 -0
- package/dist/types/api/reputation.d.ts +50 -0
- package/dist/types/api/session.d.ts +85 -0
- package/dist/types/api/store.d.ts +278 -0
- package/dist/types/api/topics.d.ts +34 -0
- package/dist/types/api/users.d.ts +134 -0
- package/dist/types/boot/sessionColdBoot.d.ts +1 -1
- package/dist/types/civic/index.d.ts +10 -0
- package/dist/types/civic/payloads.d.ts +83 -0
- package/dist/types/client/context.d.ts +33 -0
- package/dist/types/crypto/identityLink.d.ts +5 -5
- package/dist/types/crypto/index.d.ts +24 -0
- package/dist/types/crypto/internal.d.ts +19 -0
- package/dist/types/crypto/polyfill.d.ts +6 -9
- package/dist/types/crypto/registrationPow.d.ts +1 -1
- package/dist/types/i18n/accountCategoryLabels.d.ts +1 -1
- package/dist/types/i18n/accountRoleLabels.d.ts +1 -1
- package/dist/types/i18n/index.d.ts +20 -1
- package/dist/types/i18n/locales/ar-SA.d.ts +386 -0
- package/dist/types/i18n/locales/ca-ES.d.ts +386 -0
- package/dist/types/i18n/locales/de-DE.d.ts +386 -0
- package/dist/types/i18n/locales/en-US.d.ts +2034 -0
- package/dist/types/i18n/locales/es-ES.d.ts +2034 -0
- package/dist/types/i18n/locales/fr-FR.d.ts +386 -0
- package/dist/types/i18n/locales/it-IT.d.ts +386 -0
- package/dist/types/i18n/locales/ja-JP.d.ts +386 -0
- package/dist/types/i18n/locales/ko-KR.d.ts +386 -0
- package/dist/types/i18n/locales/pt-PT.d.ts +386 -0
- package/dist/types/i18n/locales/zh-CN.d.ts +386 -0
- package/dist/types/index.d.ts +46 -95
- package/dist/types/inference/index.d.ts +22 -0
- package/dist/types/models/interfaces.d.ts +1 -1
- package/dist/types/server/OxyServer.d.ts +183 -0
- package/dist/types/server/auth.d.ts +10 -7
- package/dist/types/server/index.d.ts +10 -4
- package/dist/types/server/middleware.d.ts +291 -0
- package/dist/types/server/namespaces.d.ts +98 -0
- package/dist/types/server/rateLimit.d.ts +7 -5
- package/dist/types/server/requesterAssertion.d.ts +14 -11
- package/dist/types/server/securityHeaders.d.ts +4 -5
- package/dist/types/server/userInvalidation.d.ts +10 -8
- package/dist/types/session/accountDelegationAccess.d.ts +1 -1
- package/dist/types/session/accountDialogController.d.ts +8 -8
- package/dist/types/session/accountSwitchTargets.d.ts +1 -1
- package/dist/types/session/authStateStore.d.ts +7 -6
- package/dist/types/session/index.d.ts +40 -0
- package/dist/types/utils/accountCacheSweep.d.ts +7 -10
- package/dist/types/utils/apiUtils.d.ts +3 -3
- package/dist/types/utils/asyncUtils.d.ts +11 -58
- package/dist/types/utils/authWebUrl.d.ts +3 -4
- package/dist/types/utils/avatarUtils.d.ts +5 -6
- package/dist/types/utils/cache.d.ts +11 -3
- package/dist/types/utils/commonsApproval.d.ts +1 -1
- package/dist/types/utils/edgeRegion.d.ts +1 -2
- package/dist/types/utils/identityCacheSweep.d.ts +6 -4
- package/dist/types/utils/oauthPkce.d.ts +2 -2
- package/dist/types/utils/oxyServiceEnvironment.d.ts +3 -7
- package/dist/types/utils/requestUtils.d.ts +18 -14
- package/dist/types/utils/tokenClaims.d.ts +9 -0
- package/package.json +68 -7
- package/src/HttpService.ts +201 -132
- package/src/OxyServices.errors.ts +73 -0
- package/src/OxyServices.ts +289 -164
- package/src/api/accounts.ts +579 -0
- package/src/api/agency.ts +277 -0
- package/src/api/appData.ts +63 -0
- package/src/api/apps.ts +596 -0
- package/src/api/assets.ts +416 -0
- package/src/api/auth.ts +1457 -0
- package/src/api/billing.ts +144 -0
- package/src/api/civic.ts +428 -0
- package/src/api/contacts.ts +41 -0
- package/src/api/devices.ts +438 -0
- package/src/api/follows.ts +414 -0
- package/src/api/identity.ts +727 -0
- package/src/api/linkedAccounts.ts +78 -0
- package/src/api/nodes.ts +169 -0
- package/src/api/notifications.ts +135 -0
- package/src/api/privacy.ts +120 -0
- package/src/api/reputation.ts +134 -0
- package/src/api/session.ts +210 -0
- package/src/api/store.ts +435 -0
- package/src/api/topics.ts +83 -0
- package/src/api/users.ts +357 -0
- package/src/boot/sessionColdBoot.ts +4 -4
- package/src/civic/index.ts +12 -0
- package/src/civic/payloads.ts +175 -0
- package/src/client/context.ts +34 -0
- package/src/crypto/identityLink.ts +5 -5
- package/src/crypto/index.ts +39 -0
- package/src/crypto/internal.ts +20 -0
- package/src/crypto/keyManager.ts +2 -2
- package/src/crypto/polyfill.ts +9 -89
- package/src/crypto/recoveryPhrase.ts +1 -0
- package/src/crypto/registrationPow.ts +1 -1
- package/src/crypto/signatureService.ts +1 -0
- package/src/i18n/accountCategoryLabels.ts +2 -2
- package/src/i18n/accountRoleLabels.ts +2 -2
- package/src/i18n/index.ts +105 -54
- package/src/i18n/locales/{ar-SA.json → ar-SA.ts} +132 -52
- package/src/i18n/locales/{ca-ES.json → ca-ES.ts} +132 -52
- package/{dist/cjs/i18n/locales/locales/de-DE.json → src/i18n/locales/de-DE.ts} +134 -54
- package/src/i18n/locales/{en-US.json → en-US.ts} +161 -245
- package/{dist/cjs/i18n/locales/locales/es-ES.json → src/i18n/locales/es-ES.ts} +161 -245
- package/src/i18n/locales/{fr-FR.json → fr-FR.ts} +132 -52
- package/src/i18n/locales/{it-IT.json → it-IT.ts} +132 -52
- package/{dist/cjs/i18n/locales/locales/ja-JP.json → src/i18n/locales/ja-JP.ts} +132 -52
- package/src/i18n/locales/{ko-KR.json → ko-KR.ts} +132 -52
- package/src/i18n/locales/{pt-PT.json → pt-PT.ts} +134 -54
- package/src/i18n/locales/{zh-CN.json → zh-CN.ts} +133 -53
- package/src/i18n/reputationCategoryLabels.ts +1 -1
- package/src/i18n/trustTierLabels.ts +1 -1
- package/src/index.ts +170 -501
- package/src/inference/index.ts +48 -0
- package/src/models/interfaces.ts +1 -1
- package/src/server/OxyServer.ts +637 -0
- package/src/server/auth.ts +12 -8
- package/src/server/index.ts +28 -5
- package/src/server/middleware.ts +1520 -0
- package/src/server/namespaces.ts +257 -0
- package/src/server/rateLimit.ts +10 -9
- package/src/server/requesterAssertion.ts +13 -10
- package/src/server/securityHeaders.ts +7 -8
- package/src/server/traffic.ts +6 -6
- package/src/server/trafficNodeHttp.ts +7 -3
- package/src/server/userInvalidation.ts +9 -9
- package/src/session/accountDelegationAccess.ts +1 -1
- package/src/session/accountDialogController.ts +24 -24
- package/src/session/accountSwitchTargets.ts +1 -1
- package/src/session/authStateStore.ts +9 -8
- package/src/session/identitySession.ts +3 -3
- package/src/session/index.ts +210 -0
- package/src/session/refresh.ts +36 -30
- package/src/session/sessionClientHost.ts +5 -5
- package/src/session/sharedDeviceCredential.ts +3 -2
- package/src/shared/utils/networkUtils.ts +2 -2
- package/src/utils/accountCacheSweep.ts +11 -15
- package/src/utils/apiUtils.ts +3 -3
- package/src/utils/asyncUtils.ts +38 -235
- package/src/utils/authHelpers.ts +2 -2
- package/src/utils/authWebUrl.ts +3 -4
- package/src/utils/avatarUtils.ts +4 -7
- package/src/utils/cache.ts +36 -5
- package/src/utils/cacheKey.ts +5 -9
- package/src/utils/commonsApproval.ts +1 -1
- package/src/utils/deviceManager.ts +17 -16
- package/src/utils/edgeRegion.ts +1 -2
- package/src/utils/identityCacheSweep.ts +7 -12
- package/src/utils/oauthPkce.ts +2 -2
- package/src/utils/oxyServiceEnvironment.ts +3 -7
- package/src/utils/requestUtils.ts +48 -44
- package/src/utils/sessionUtils.ts +0 -2
- package/src/utils/tokenClaims.ts +38 -0
- package/dist/cjs/.tsbuildinfo +0 -1
- package/dist/cjs/OxyServices.base.js +0 -392
- package/dist/cjs/i18n/locales/locales/ar-SA.json +0 -306
- package/dist/cjs/i18n/locales/locales/ca-ES.json +0 -306
- package/dist/cjs/i18n/locales/locales/en-US.json +0 -2127
- package/dist/cjs/i18n/locales/locales/fr-FR.json +0 -306
- package/dist/cjs/i18n/locales/locales/it-IT.json +0 -306
- package/dist/cjs/i18n/locales/locales/ko-KR.json +0 -306
- package/dist/cjs/i18n/locales/locales/pt-PT.json +0 -306
- package/dist/cjs/i18n/locales/locales/zh-CN.json +0 -306
- package/dist/cjs/mixins/OxyServices.accounts.js +0 -555
- package/dist/cjs/mixins/OxyServices.agency.js +0 -154
- package/dist/cjs/mixins/OxyServices.analytics.js +0 -49
- package/dist/cjs/mixins/OxyServices.appData.js +0 -108
- package/dist/cjs/mixins/OxyServices.assets.js +0 -854
- package/dist/cjs/mixins/OxyServices.auth.js +0 -1440
- package/dist/cjs/mixins/OxyServices.chains.js +0 -73
- package/dist/cjs/mixins/OxyServices.civic.js +0 -611
- package/dist/cjs/mixins/OxyServices.connectedApps.js +0 -95
- package/dist/cjs/mixins/OxyServices.contacts.js +0 -50
- package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -191
- package/dist/cjs/mixins/OxyServices.devices.js +0 -116
- package/dist/cjs/mixins/OxyServices.features.js +0 -335
- package/dist/cjs/mixins/OxyServices.followGraph.js +0 -221
- package/dist/cjs/mixins/OxyServices.identity.js +0 -562
- package/dist/cjs/mixins/OxyServices.identityBackup.js +0 -172
- package/dist/cjs/mixins/OxyServices.inference.js +0 -59
- package/dist/cjs/mixins/OxyServices.language.js +0 -125
- package/dist/cjs/mixins/OxyServices.linkedAccounts.js +0 -79
- package/dist/cjs/mixins/OxyServices.location.js +0 -43
- package/dist/cjs/mixins/OxyServices.nodes.js +0 -175
- package/dist/cjs/mixins/OxyServices.notifications.js +0 -63
- package/dist/cjs/mixins/OxyServices.payment.js +0 -158
- package/dist/cjs/mixins/OxyServices.privacy.js +0 -199
- package/dist/cjs/mixins/OxyServices.reputation.js +0 -289
- package/dist/cjs/mixins/OxyServices.security.js +0 -89
- package/dist/cjs/mixins/OxyServices.store.js +0 -266
- package/dist/cjs/mixins/OxyServices.topics.js +0 -137
- package/dist/cjs/mixins/OxyServices.user.js +0 -954
- package/dist/cjs/mixins/OxyServices.utility.js +0 -1402
- package/dist/cjs/mixins/index.js +0 -136
- package/dist/cjs/mixins/mixinHelpers.js +0 -53
- package/dist/cjs/utils/webauthnOrigin.js +0 -51
- package/dist/esm/.tsbuildinfo +0 -1
- package/dist/esm/OxyServices.base.js +0 -388
- package/dist/esm/i18n/locales/locales/ar-SA.json +0 -306
- package/dist/esm/i18n/locales/locales/ca-ES.json +0 -306
- package/dist/esm/i18n/locales/locales/de-DE.json +0 -306
- package/dist/esm/i18n/locales/locales/en-US.json +0 -2127
- package/dist/esm/i18n/locales/locales/es-ES.json +0 -2127
- package/dist/esm/i18n/locales/locales/fr-FR.json +0 -306
- package/dist/esm/i18n/locales/locales/it-IT.json +0 -306
- package/dist/esm/i18n/locales/locales/ja-JP.json +0 -306
- package/dist/esm/i18n/locales/locales/ko-KR.json +0 -306
- package/dist/esm/i18n/locales/locales/pt-PT.json +0 -306
- package/dist/esm/i18n/locales/locales/zh-CN.json +0 -306
- package/dist/esm/mixins/OxyServices.accounts.js +0 -543
- package/dist/esm/mixins/OxyServices.agency.js +0 -151
- package/dist/esm/mixins/OxyServices.analytics.js +0 -46
- package/dist/esm/mixins/OxyServices.appData.js +0 -103
- package/dist/esm/mixins/OxyServices.assets.js +0 -851
- package/dist/esm/mixins/OxyServices.auth.js +0 -1400
- package/dist/esm/mixins/OxyServices.chains.js +0 -70
- package/dist/esm/mixins/OxyServices.civic.js +0 -605
- package/dist/esm/mixins/OxyServices.connectedApps.js +0 -92
- package/dist/esm/mixins/OxyServices.contacts.js +0 -47
- package/dist/esm/mixins/OxyServices.deviceBoot.js +0 -186
- package/dist/esm/mixins/OxyServices.devices.js +0 -113
- package/dist/esm/mixins/OxyServices.features.js +0 -332
- package/dist/esm/mixins/OxyServices.followGraph.js +0 -218
- package/dist/esm/mixins/OxyServices.identity.js +0 -558
- package/dist/esm/mixins/OxyServices.identityBackup.js +0 -169
- package/dist/esm/mixins/OxyServices.inference.js +0 -56
- package/dist/esm/mixins/OxyServices.language.js +0 -122
- package/dist/esm/mixins/OxyServices.linkedAccounts.js +0 -76
- package/dist/esm/mixins/OxyServices.location.js +0 -40
- package/dist/esm/mixins/OxyServices.nodes.js +0 -172
- package/dist/esm/mixins/OxyServices.notifications.js +0 -60
- package/dist/esm/mixins/OxyServices.payment.js +0 -155
- package/dist/esm/mixins/OxyServices.privacy.js +0 -196
- package/dist/esm/mixins/OxyServices.reputation.js +0 -286
- package/dist/esm/mixins/OxyServices.security.js +0 -86
- package/dist/esm/mixins/OxyServices.store.js +0 -263
- package/dist/esm/mixins/OxyServices.topics.js +0 -134
- package/dist/esm/mixins/OxyServices.user.js +0 -951
- package/dist/esm/mixins/OxyServices.utility.js +0 -1397
- package/dist/esm/mixins/index.js +0 -133
- package/dist/esm/mixins/mixinHelpers.js +0 -48
- package/dist/esm/utils/webauthnOrigin.js +0 -48
- package/dist/types/.tsbuildinfo +0 -1
- package/dist/types/OxyServices.base.d.ts +0 -189
- package/dist/types/mixins/OxyServices.accounts.d.ts +0 -868
- package/dist/types/mixins/OxyServices.agency.d.ts +0 -176
- package/dist/types/mixins/OxyServices.analytics.d.ts +0 -72
- package/dist/types/mixins/OxyServices.appData.d.ts +0 -108
- package/dist/types/mixins/OxyServices.assets.d.ts +0 -371
- package/dist/types/mixins/OxyServices.auth.d.ts +0 -965
- package/dist/types/mixins/OxyServices.chains.d.ts +0 -156
- package/dist/types/mixins/OxyServices.civic.d.ts +0 -520
- package/dist/types/mixins/OxyServices.connectedApps.d.ts +0 -184
- package/dist/types/mixins/OxyServices.contacts.d.ts +0 -100
- package/dist/types/mixins/OxyServices.deviceBoot.d.ts +0 -185
- package/dist/types/mixins/OxyServices.devices.d.ts +0 -103
- package/dist/types/mixins/OxyServices.features.d.ts +0 -250
- package/dist/types/mixins/OxyServices.followGraph.d.ts +0 -223
- package/dist/types/mixins/OxyServices.identity.d.ts +0 -337
- package/dist/types/mixins/OxyServices.identityBackup.d.ts +0 -129
- package/dist/types/mixins/OxyServices.inference.d.ts +0 -95
- package/dist/types/mixins/OxyServices.language.d.ts +0 -87
- package/dist/types/mixins/OxyServices.linkedAccounts.d.ts +0 -107
- package/dist/types/mixins/OxyServices.location.d.ts +0 -70
- package/dist/types/mixins/OxyServices.nodes.d.ts +0 -198
- package/dist/types/mixins/OxyServices.notifications.d.ts +0 -143
- package/dist/types/mixins/OxyServices.payment.d.ts +0 -117
- package/dist/types/mixins/OxyServices.privacy.d.ts +0 -146
- package/dist/types/mixins/OxyServices.reputation.d.ts +0 -202
- package/dist/types/mixins/OxyServices.security.d.ts +0 -84
- package/dist/types/mixins/OxyServices.store.d.ts +0 -334
- package/dist/types/mixins/OxyServices.topics.d.ts +0 -110
- package/dist/types/mixins/OxyServices.user.d.ts +0 -600
- package/dist/types/mixins/OxyServices.utility.d.ts +0 -526
- package/dist/types/mixins/index.d.ts +0 -87
- package/dist/types/mixins/mixinHelpers.d.ts +0 -31
- package/dist/types/utils/webauthnOrigin.d.ts +0 -32
- package/src/OxyServices.base.ts +0 -480
- package/src/__tests__/authSocket.test.ts +0 -96
- package/src/__tests__/fixEsmImports.test.ts +0 -132
- package/src/__tests__/httpServiceAbort.test.ts +0 -308
- package/src/__tests__/httpServiceActivityId.test.ts +0 -49
- package/src/__tests__/httpServiceAuthSelfAwait.test.ts +0 -108
- package/src/__tests__/httpServiceCache.test.ts +0 -318
- package/src/__tests__/httpServiceFormEncoded.test.ts +0 -139
- package/src/__tests__/httpServiceQueueDeadlock.test.ts +0 -128
- package/src/__tests__/httpServiceRateLimitedRefresh.test.ts +0 -160
- package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +0 -115
- package/src/__tests__/httpServiceWrites.test.ts +0 -175
- package/src/__tests__/inSessionRefresh.test.ts +0 -313
- package/src/__tests__/linkedClient.test.ts +0 -363
- package/src/__tests__/nearExpiryMintStorm.test.ts +0 -165
- package/src/__tests__/parseHttpErrorBody.test.ts +0 -116
- package/src/__tests__/publicInterfaceParity.test.ts +0 -75
- package/src/__tests__/serverValueImportsDeclared.test.ts +0 -120
- package/src/__tests__/serviceTokenWorkloadFallback.test.ts +0 -85
- package/src/__tests__/userIdentity.test.ts +0 -143
- package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
- package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
- package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
- package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
- package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
- package/src/crypto/__tests__/identityLink.test.ts +0 -18
- package/src/crypto/__tests__/identityMocks.ts +0 -125
- package/src/crypto/__tests__/identityProof.test.ts +0 -81
- package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
- package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
- package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
- package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
- package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
- package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
- package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
- package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
- package/src/crypto/__tests__/keyManager.test.ts +0 -329
- package/src/crypto/__tests__/polyfill.test.ts +0 -109
- package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
- package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
- package/src/crypto/__tests__/registrationPow.test.ts +0 -61
- package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
- package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
- package/src/crypto/__tests__/signedRecord.test.ts +0 -230
- package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
- package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
- package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
- package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
- package/src/i18n/locales/de-DE.json +0 -306
- package/src/i18n/locales/es-ES.json +0 -2127
- package/src/i18n/locales/ja-JP.json +0 -306
- package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
- package/src/logger/__tests__/logger.test.ts +0 -207
- package/src/mixins/OxyServices.accounts.ts +0 -1330
- package/src/mixins/OxyServices.agency.ts +0 -353
- package/src/mixins/OxyServices.analytics.ts +0 -53
- package/src/mixins/OxyServices.appData.ts +0 -158
- package/src/mixins/OxyServices.assets.ts +0 -964
- package/src/mixins/OxyServices.auth.ts +0 -2028
- package/src/mixins/OxyServices.chains.ts +0 -134
- package/src/mixins/OxyServices.civic.ts +0 -945
- package/src/mixins/OxyServices.connectedApps.ts +0 -212
- package/src/mixins/OxyServices.contacts.ts +0 -73
- package/src/mixins/OxyServices.devices.ts +0 -120
- package/src/mixins/OxyServices.features.ts +0 -454
- package/src/mixins/OxyServices.followGraph.ts +0 -293
- package/src/mixins/OxyServices.identity.ts +0 -787
- package/src/mixins/OxyServices.identityBackup.ts +0 -250
- package/src/mixins/OxyServices.inference.ts +0 -57
- package/src/mixins/OxyServices.language.ts +0 -144
- package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
- package/src/mixins/OxyServices.location.ts +0 -46
- package/src/mixins/OxyServices.nodes.ts +0 -337
- package/src/mixins/OxyServices.notifications.ts +0 -142
- package/src/mixins/OxyServices.payment.ts +0 -163
- package/src/mixins/OxyServices.privacy.ts +0 -219
- package/src/mixins/OxyServices.reputation.ts +0 -436
- package/src/mixins/OxyServices.security.ts +0 -110
- package/src/mixins/OxyServices.store.ts +0 -585
- package/src/mixins/OxyServices.topics.ts +0 -169
- package/src/mixins/OxyServices.user.ts +0 -1208
- package/src/mixins/OxyServices.utility.ts +0 -1803
- package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
- package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
- package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
- package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
- package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
- package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
- package/src/mixins/__tests__/accountEvents.test.ts +0 -158
- package/src/mixins/__tests__/accounts.test.ts +0 -727
- package/src/mixins/__tests__/agency.test.ts +0 -120
- package/src/mixins/__tests__/appData.test.ts +0 -203
- package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
- package/src/mixins/__tests__/assetUpload.test.ts +0 -191
- package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
- package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
- package/src/mixins/__tests__/chains.test.ts +0 -113
- package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
- package/src/mixins/__tests__/connectedApps.test.ts +0 -146
- package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
- package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
- package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
- package/src/mixins/__tests__/followGraph.test.ts +0 -147
- package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
- package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
- package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
- package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
- package/src/mixins/__tests__/identityBackup.test.ts +0 -315
- package/src/mixins/__tests__/identityLink.test.ts +0 -89
- package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
- package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
- package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
- package/src/mixins/__tests__/notifications.read.test.ts +0 -82
- package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
- package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
- package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
- package/src/mixins/__tests__/reputation.test.ts +0 -522
- package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
- package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
- package/src/mixins/__tests__/store.test.ts +0 -304
- package/src/mixins/__tests__/topics.test.ts +0 -155
- package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
- package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
- package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
- package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
- package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
- package/src/mixins/index.ts +0 -203
- package/src/mixins/mixinHelpers.ts +0 -69
- package/src/server/__tests__/auth.test.ts +0 -78
- package/src/server/__tests__/capabilityTicket.test.ts +0 -111
- package/src/server/__tests__/cors.socket.test.ts +0 -225
- package/src/server/__tests__/cors.test.ts +0 -158
- package/src/server/__tests__/rateLimit.test.ts +0 -257
- package/src/server/__tests__/requesterAssertion.test.ts +0 -359
- package/src/server/__tests__/safeFetch.test.ts +0 -232
- package/src/server/__tests__/securityHeaders.test.ts +0 -387
- package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
- package/src/server/__tests__/traffic.test.ts +0 -180
- package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
- package/src/server/__tests__/userInvalidation.test.ts +0 -203
- package/src/server/__tests__/verifySecret.test.ts +0 -40
- package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
- package/src/server/__tests__/workloadIdentity.test.ts +0 -128
- package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
- package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
- package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
- package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
- package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
- package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
- package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
- package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
- package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
- package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
- package/src/session/__tests__/SessionClient.state.test.ts +0 -78
- package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
- package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
- package/src/session/__tests__/accountDialogController.test.ts +0 -2502
- package/src/session/__tests__/accountDialogShape.test.ts +0 -120
- package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
- package/src/session/__tests__/authStateStore.test.ts +0 -451
- package/src/session/__tests__/deviceDirectory.test.ts +0 -422
- package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
- package/src/session/__tests__/identityPin.test.ts +0 -131
- package/src/session/__tests__/identitySession.test.ts +0 -194
- package/src/session/__tests__/projectSessionState.test.ts +0 -105
- package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
- package/src/session/__tests__/refresh.test.ts +0 -606
- package/src/session/__tests__/sessionIntegration.test.ts +0 -209
- package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
- package/src/utils/__tests__/accountUtils.test.ts +0 -151
- package/src/utils/__tests__/activityId.test.ts +0 -45
- package/src/utils/__tests__/asyncUtils.test.ts +0 -279
- package/src/utils/__tests__/authWebUrl.test.ts +0 -15
- package/src/utils/__tests__/cacheKey.test.ts +0 -0
- package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
- package/src/utils/__tests__/coldBoot.test.ts +0 -496
- package/src/utils/__tests__/commonsApproval.test.ts +0 -60
- package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
- package/src/utils/__tests__/languageUtils.test.ts +0 -244
- package/src/utils/__tests__/oauthPkce.test.ts +0 -303
- package/src/utils/__tests__/officialOrigins.test.ts +0 -31
- package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
- package/src/utils/__tests__/profileLinks.test.ts +0 -180
- package/src/utils/__tests__/redactUrl.test.ts +0 -33
- package/src/utils/__tests__/registrableApex.test.ts +0 -62
- package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
- package/src/utils/__tests__/textNormalization.test.ts +0 -205
- package/src/utils/__tests__/validationUtils.test.ts +0 -703
- package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
- package/src/utils/webauthnOrigin.ts +0 -52
|
@@ -38,13 +38,13 @@ exports.AuthenticationFailedError = AuthenticationFailedError;
|
|
|
38
38
|
* @throws {SessionSyncRequiredError} If the session needs to be synced (offline session)
|
|
39
39
|
*/
|
|
40
40
|
async function ensureValidToken(oxyServices, _activeSessionId, syncSession) {
|
|
41
|
-
if (oxyServices.
|
|
41
|
+
if (oxyServices.session.isAuthenticated) {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
if (syncSession) {
|
|
45
45
|
try {
|
|
46
46
|
await syncSession();
|
|
47
|
-
if (oxyServices.
|
|
47
|
+
if (oxyServices.session.isAuthenticated) {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -18,9 +18,8 @@ exports.AUTH_WEB_ORIGIN = exports.CENTRAL_IDP_APEX = void 0;
|
|
|
18
18
|
*/
|
|
19
19
|
exports.CENTRAL_IDP_APEX = 'oxy.so';
|
|
20
20
|
/**
|
|
21
|
-
* The IdP's origin, `auth.oxy.so` — the OAuth authorize/consent surface
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* Apps open it; they never run the passkey themselves.
|
|
21
|
+
* The IdP's origin, `auth.oxy.so` — the OAuth authorize/consent surface for
|
|
22
|
+
* third parties, the browser bridge (ADR 0029 D2) and the page an email
|
|
23
|
+
* sign-in link opens. Official apps sign in inside their own dialog (ADR 0030).
|
|
25
24
|
*/
|
|
26
25
|
exports.AUTH_WEB_ORIGIN = `https://auth.${exports.CENTRAL_IDP_APEX}`;
|
|
@@ -7,7 +7,7 @@ const logger_1 = require("../logger");
|
|
|
7
7
|
* Logs non-404 errors to help debug upload issues.
|
|
8
8
|
*
|
|
9
9
|
* @param fileId - The file ID to update visibility for
|
|
10
|
-
* @param oxyServices - OxyServices
|
|
10
|
+
* @param oxyServices - An OxyServices client
|
|
11
11
|
* @param contextName - Context name for error logging
|
|
12
12
|
*/
|
|
13
13
|
async function updateAvatarVisibility(fileId, oxyServices, contextName = 'AvatarUtils') {
|
|
@@ -15,7 +15,7 @@ async function updateAvatarVisibility(fileId, oxyServices, contextName = 'Avatar
|
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
17
|
try {
|
|
18
|
-
await oxyServices.
|
|
18
|
+
await oxyServices.assets.setVisibility(fileId, 'public');
|
|
19
19
|
}
|
|
20
20
|
catch (visError) {
|
|
21
21
|
// 404 is expected when asset doesn't exist yet — skip logging
|
package/dist/cjs/utils/cache.js
CHANGED
|
@@ -41,12 +41,15 @@ class TTLCache {
|
|
|
41
41
|
/**
|
|
42
42
|
* Create a new TTL cache
|
|
43
43
|
* @param defaultTTL Default TTL in milliseconds (default: 5 minutes)
|
|
44
|
+
* @param maxEntries Bound on live entries; the least recently used is evicted
|
|
45
|
+
* past it (default: 1000)
|
|
44
46
|
*/
|
|
45
|
-
constructor(defaultTTL = 5 * 60 * 1000) {
|
|
47
|
+
constructor(defaultTTL = 5 * 60 * 1000, maxEntries = 1000) {
|
|
46
48
|
this.cache = new Map();
|
|
47
49
|
this.hits = 0;
|
|
48
50
|
this.misses = 0;
|
|
49
51
|
this.defaultTTL = defaultTTL;
|
|
52
|
+
this.maxEntries = maxEntries;
|
|
50
53
|
}
|
|
51
54
|
/**
|
|
52
55
|
* Get a value from cache
|
|
@@ -65,6 +68,9 @@ class TTLCache {
|
|
|
65
68
|
this.misses++;
|
|
66
69
|
return null;
|
|
67
70
|
}
|
|
71
|
+
// Re-insert so Map order is recency order and eviction drops the LRU.
|
|
72
|
+
this.cache.delete(key);
|
|
73
|
+
this.cache.set(key, entry);
|
|
68
74
|
this.hits++;
|
|
69
75
|
return entry.data;
|
|
70
76
|
}
|
|
@@ -84,7 +90,13 @@ class TTLCache {
|
|
|
84
90
|
// both into the default, making `cacheTTL:0` impossible to honor.
|
|
85
91
|
const effectiveTTL = ttl === undefined ? this.defaultTTL : ttl;
|
|
86
92
|
const expiresAt = now + effectiveTTL;
|
|
93
|
+
this.cache.delete(key);
|
|
87
94
|
this.cache.set(key, { data, timestamp: now, expiresAt });
|
|
95
|
+
if (this.cache.size > this.maxEntries) {
|
|
96
|
+
const oldest = this.cache.keys().next().value;
|
|
97
|
+
if (oldest !== undefined)
|
|
98
|
+
this.cache.delete(oldest);
|
|
99
|
+
}
|
|
88
100
|
if (!cleanupInterval && activeCaches.has(this))
|
|
89
101
|
updateCleanupInterval();
|
|
90
102
|
}
|
|
@@ -95,7 +107,9 @@ class TTLCache {
|
|
|
95
107
|
*/
|
|
96
108
|
delete(key) {
|
|
97
109
|
const deleted = this.cache.delete(key);
|
|
98
|
-
|
|
110
|
+
// Only the delete that EMPTIES this cache can let the timer stop; checking
|
|
111
|
+
// on every delete made bulk invalidation O(deletes x caches).
|
|
112
|
+
if (deleted && this.cache.size === 0 && activeCaches.has(this))
|
|
99
113
|
updateCleanupInterval();
|
|
100
114
|
return deleted;
|
|
101
115
|
}
|
|
@@ -109,6 +123,22 @@ class TTLCache {
|
|
|
109
123
|
if (activeCaches.has(this))
|
|
110
124
|
updateCleanupInterval();
|
|
111
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Delete every entry whose key matches, in ONE pass.
|
|
128
|
+
* @returns Number of entries deleted
|
|
129
|
+
*/
|
|
130
|
+
deleteWhere(match) {
|
|
131
|
+
let removed = 0;
|
|
132
|
+
for (const key of this.cache.keys()) {
|
|
133
|
+
if (match(key)) {
|
|
134
|
+
this.cache.delete(key);
|
|
135
|
+
removed++;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (removed > 0 && this.cache.size === 0 && activeCaches.has(this))
|
|
139
|
+
updateCleanupInterval();
|
|
140
|
+
return removed;
|
|
141
|
+
}
|
|
112
142
|
/**
|
|
113
143
|
* Check if a key exists and is not expired
|
|
114
144
|
* @param key Cache key
|
|
@@ -11,7 +11,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
11
11
|
exports.ANON_IDENTITY = void 0;
|
|
12
12
|
exports.fnv1a32 = fnv1a32;
|
|
13
13
|
exports.computeIdentityTag = computeIdentityTag;
|
|
14
|
-
const
|
|
14
|
+
const tokenClaims_1 = require("./tokenClaims");
|
|
15
15
|
/**
|
|
16
16
|
* Discriminator used when there is no access token at all. Anonymous responses
|
|
17
17
|
* must never collide with any authenticated identity.
|
|
@@ -73,13 +73,8 @@ function computeIdentityTag(accessToken) {
|
|
|
73
73
|
if (!accessToken) {
|
|
74
74
|
return exports.ANON_IDENTITY;
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// Undecodable token — still partition it away from anon and from other
|
|
82
|
-
// tokens via a hash. Never silently fall back to ANON_IDENTITY.
|
|
83
|
-
return `t${fnv1a32(accessToken)}`;
|
|
84
|
-
}
|
|
76
|
+
const decoded = (0, tokenClaims_1.decodeTokenClaims)(accessToken);
|
|
77
|
+
// An undecodable token is still partitioned away from anon and from other
|
|
78
|
+
// tokens via a hash — never silently ANON_IDENTITY.
|
|
79
|
+
return decoded?.userId || decoded?.id || `t${fnv1a32(accessToken)}`;
|
|
85
80
|
}
|
|
@@ -8,6 +8,7 @@ const log = (0, logger_1.createLogger)('DeviceManager');
|
|
|
8
8
|
* Client-side device management utility
|
|
9
9
|
* Handles persistent device identification across app sessions
|
|
10
10
|
*/
|
|
11
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: a public, static-only API surface (`X.method()`) that consumers and tests call and spy on by name.
|
|
11
12
|
class DeviceManager {
|
|
12
13
|
/**
|
|
13
14
|
* Check if we're in React Native environment
|
|
@@ -19,7 +20,7 @@ class DeviceManager {
|
|
|
19
20
|
* Get appropriate storage for the platform
|
|
20
21
|
*/
|
|
21
22
|
static async getStorage() {
|
|
22
|
-
if (
|
|
23
|
+
if (DeviceManager.isReactNative()) {
|
|
23
24
|
try {
|
|
24
25
|
// `loadAsyncStorage` is per-platform: the RN variant statically imports
|
|
25
26
|
// @react-native-async-storage/async-storage, the default variant throws
|
|
@@ -71,21 +72,21 @@ class DeviceManager {
|
|
|
71
72
|
*/
|
|
72
73
|
static async getDeviceInfo() {
|
|
73
74
|
try {
|
|
74
|
-
const storage = await
|
|
75
|
-
const stored = await storage.getItem(
|
|
75
|
+
const storage = await DeviceManager.getStorage();
|
|
76
|
+
const stored = await storage.getItem(DeviceManager.DEVICE_KEY);
|
|
76
77
|
if (stored) {
|
|
77
78
|
const deviceInfo = JSON.parse(stored);
|
|
78
79
|
// Update last used timestamp
|
|
79
80
|
deviceInfo.lastUsed = new Date().toISOString();
|
|
80
|
-
await
|
|
81
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
81
82
|
return deviceInfo;
|
|
82
83
|
}
|
|
83
84
|
// Create new device info
|
|
84
|
-
return await
|
|
85
|
+
return await DeviceManager.createNewDeviceInfo();
|
|
85
86
|
}
|
|
86
87
|
catch (error) {
|
|
87
88
|
log.error('Error getting device info', error);
|
|
88
|
-
return await
|
|
89
|
+
return await DeviceManager.createNewDeviceInfo();
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
/**
|
|
@@ -93,12 +94,12 @@ class DeviceManager {
|
|
|
93
94
|
*/
|
|
94
95
|
static async createNewDeviceInfo() {
|
|
95
96
|
const deviceInfo = {
|
|
96
|
-
deviceId:
|
|
97
|
-
fingerprint: JSON.stringify(
|
|
97
|
+
deviceId: DeviceManager.generateDeviceId(),
|
|
98
|
+
fingerprint: JSON.stringify(DeviceManager.getDeviceFingerprint()),
|
|
98
99
|
createdAt: new Date().toISOString(),
|
|
99
100
|
lastUsed: new Date().toISOString()
|
|
100
101
|
};
|
|
101
|
-
await
|
|
102
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
102
103
|
return deviceInfo;
|
|
103
104
|
}
|
|
104
105
|
/**
|
|
@@ -106,8 +107,8 @@ class DeviceManager {
|
|
|
106
107
|
*/
|
|
107
108
|
static async saveDeviceInfo(deviceInfo) {
|
|
108
109
|
try {
|
|
109
|
-
const storage = await
|
|
110
|
-
await storage.setItem(
|
|
110
|
+
const storage = await DeviceManager.getStorage();
|
|
111
|
+
await storage.setItem(DeviceManager.DEVICE_KEY, JSON.stringify(deviceInfo));
|
|
111
112
|
}
|
|
112
113
|
catch (error) {
|
|
113
114
|
log.error('Error saving device info', error);
|
|
@@ -118,9 +119,9 @@ class DeviceManager {
|
|
|
118
119
|
*/
|
|
119
120
|
static async updateDeviceName(deviceName) {
|
|
120
121
|
try {
|
|
121
|
-
const deviceInfo = await
|
|
122
|
+
const deviceInfo = await DeviceManager.getDeviceInfo();
|
|
122
123
|
deviceInfo.deviceName = deviceName;
|
|
123
|
-
await
|
|
124
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
124
125
|
}
|
|
125
126
|
catch (error) {
|
|
126
127
|
log.error('Error updating device name', error);
|
|
@@ -131,8 +132,8 @@ class DeviceManager {
|
|
|
131
132
|
*/
|
|
132
133
|
static async clearDeviceInfo() {
|
|
133
134
|
try {
|
|
134
|
-
const storage = await
|
|
135
|
-
await storage.removeItem(
|
|
135
|
+
const storage = await DeviceManager.getStorage();
|
|
136
|
+
await storage.removeItem(DeviceManager.DEVICE_KEY);
|
|
136
137
|
}
|
|
137
138
|
catch (error) {
|
|
138
139
|
log.error('Error clearing device info', error);
|
|
@@ -153,7 +154,7 @@ class DeviceManager {
|
|
|
153
154
|
* Get a user-friendly device name based on platform
|
|
154
155
|
*/
|
|
155
156
|
static getDefaultDeviceName() {
|
|
156
|
-
const fingerprint =
|
|
157
|
+
const fingerprint = DeviceManager.getDeviceFingerprint();
|
|
157
158
|
const platform = (fingerprint.platform || '').toLowerCase();
|
|
158
159
|
if (platform.includes('win'))
|
|
159
160
|
return 'Windows Computer';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
/** @deprecated Import from `@oxy.so/telemetry/browser` in new code. */
|
|
3
|
+
exports.peekBrowserEdgeRegionHeader = void 0;
|
|
5
4
|
var browser_1 = require("@oxy.so/telemetry/browser");
|
|
6
|
-
Object.defineProperty(exports, "
|
|
5
|
+
Object.defineProperty(exports, "peekBrowserEdgeRegionHeader", { enumerable: true, get: function () { return browser_1.peekBrowserEdgeRegionHeader; } });
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
* refetch; under-eviction serves wrong data.
|
|
49
49
|
*
|
|
50
50
|
* Platform-neutral by construction (no imports, no `OxyServices` reference) so
|
|
51
|
-
* the client
|
|
51
|
+
* the client namespaces and the Node-only `@oxy.so/core/server` invalidation
|
|
52
52
|
* subscriber can share it without either pulling in the other.
|
|
53
53
|
*/
|
|
54
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -64,8 +64,6 @@ exports.OXY_IDENTITY_CACHE_PREFIXES = [
|
|
|
64
64
|
'GET:/session/user/',
|
|
65
65
|
// `getCurrentUser` (and `GET:/users/me/graph`, harmlessly included).
|
|
66
66
|
'GET:/users/me',
|
|
67
|
-
// `lookupUsername` — the pre-session login lookup; carries avatar + display name.
|
|
68
|
-
'GET:/auth/lookup/',
|
|
69
67
|
// `getProfileByUsername` — keyed by handle, including the pre-rename handle.
|
|
70
68
|
'GET:/profiles/username/',
|
|
71
69
|
// `resolveProfile` — keyed by fediverse handle in the query payload.
|
|
@@ -87,11 +85,9 @@ function oxyUserByIdCacheKey(userId) {
|
|
|
87
85
|
* that does not know the id still clears every handle-, session-
|
|
88
86
|
* and self-keyed entry, which is the majority of the surface.
|
|
89
87
|
*/
|
|
90
|
-
function evictOxyIdentityCache(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
oxy.clearCacheEntry(oxyUserByIdCacheKey(userId));
|
|
96
|
-
}
|
|
88
|
+
function evictOxyIdentityCache(http, userId) {
|
|
89
|
+
http.invalidateCache({
|
|
90
|
+
prefixes: exports.OXY_IDENTITY_CACHE_PREFIXES,
|
|
91
|
+
keys: userId ? [oxyUserByIdCacheKey(userId)] : [],
|
|
92
|
+
});
|
|
97
93
|
}
|
|
@@ -8,12 +8,8 @@ exports.OXY_SERVICE_ENVIRONMENTS = void 0;
|
|
|
8
8
|
* literal union — `@oxy.so/core` has zero dependency on `@oxy.so/api`, so this is
|
|
9
9
|
* kept in sync by hand, not by import.
|
|
10
10
|
*
|
|
11
|
-
* Defined here
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* `mixins/` deliberately avoids so it stays safe to bundle into RN/browser
|
|
15
|
-
* consumers — see the "Local request/response/socket typing" comment in
|
|
16
|
-
* `OxyServices.utility.ts`). This file has zero imports, so both sides can
|
|
17
|
-
* depend on it without crossing that boundary.
|
|
11
|
+
* Defined here, with zero imports, so the server middleware and any
|
|
12
|
+
* client-safe code can both depend on it without the client reaching the
|
|
13
|
+
* Node-only `server/` modules.
|
|
18
14
|
*/
|
|
19
15
|
exports.OXY_SERVICE_ENVIRONMENTS = ['development', 'staging', 'production'];
|
|
@@ -29,74 +29,81 @@ function abortReason(signal) {
|
|
|
29
29
|
/**
|
|
30
30
|
* Request deduplication - prevents duplicate concurrent requests
|
|
31
31
|
*
|
|
32
|
-
* When multiple requests with the same key are made simultaneously,
|
|
33
|
-
*
|
|
32
|
+
* When multiple requests with the same key are made simultaneously, only one
|
|
33
|
+
* request is executed and all callers receive the same result.
|
|
34
|
+
*
|
|
35
|
+
* The shared work runs in its OWN abort domain, not the first caller's: each
|
|
36
|
+
* caller owns its cancellation, and the shared work is aborted only once every
|
|
37
|
+
* caller waiting on it has cancelled. Binding it to the first caller's signal
|
|
38
|
+
* meant one cancelled caller failed every other caller on the same key.
|
|
34
39
|
*
|
|
35
40
|
* @example
|
|
36
41
|
* ```typescript
|
|
37
42
|
* const deduplicator = new RequestDeduplicator();
|
|
38
43
|
*
|
|
39
|
-
* // Multiple calls with same key
|
|
40
|
-
* const promise1 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
|
|
41
|
-
* const promise2 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
|
|
42
|
-
* // promise1 === promise2, only one API call is made
|
|
44
|
+
* // Multiple calls with same key share one in-flight call
|
|
45
|
+
* const promise1 = deduplicator.deduplicate('user-123', (signal) => fetchUser('123', signal));
|
|
46
|
+
* const promise2 = deduplicator.deduplicate('user-123', (signal) => fetchUser('123', signal));
|
|
43
47
|
* ```
|
|
44
48
|
*/
|
|
45
49
|
class RequestDeduplicator {
|
|
46
50
|
constructor() {
|
|
47
|
-
this.
|
|
51
|
+
this.pending = new Map();
|
|
48
52
|
}
|
|
49
53
|
/**
|
|
50
54
|
* Deduplicate a request by key
|
|
51
55
|
* @param key Unique key for the request
|
|
52
|
-
* @param requestFn
|
|
53
|
-
* @
|
|
56
|
+
* @param requestFn Runs the work; its signal aborts once every caller has cancelled
|
|
57
|
+
* @param signal This caller's cancellation
|
|
54
58
|
*/
|
|
55
59
|
async deduplicate(key, requestFn, signal) {
|
|
56
60
|
if (signal?.aborted) {
|
|
57
61
|
throw abortReason(signal);
|
|
58
62
|
}
|
|
59
|
-
let
|
|
60
|
-
if (!
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
let entry = this.pending.get(key);
|
|
64
|
+
if (!entry) {
|
|
65
|
+
const controller = new AbortController();
|
|
66
|
+
const promise = requestFn(controller.signal).finally(() => {
|
|
67
|
+
if (this.pending.get(key) === entry)
|
|
68
|
+
this.pending.delete(key);
|
|
63
69
|
});
|
|
64
|
-
this
|
|
70
|
+
// Ownership stays with the callers awaiting it; this only stops a
|
|
71
|
+
// rejection nobody is left to observe from surfacing as unhandled.
|
|
72
|
+
promise.catch(() => { });
|
|
73
|
+
entry = { promise, controller, waiters: 0 };
|
|
74
|
+
this.pending.set(key, entry);
|
|
65
75
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// Returning the shared promise directly meant one caller's abort rejected
|
|
69
|
-
// every other caller on the same key — including ones that never cancelled
|
|
70
|
-
// anything, and which had no way to tell that the failure was not theirs.
|
|
71
|
-
// Racing each caller's own signal against the shared work keeps the single
|
|
72
|
-
// in-flight request (the point of deduplication) while making cancellation
|
|
73
|
-
// per-caller. The shared promise is left running: another caller may still
|
|
74
|
-
// want it, and if nobody does its own abort domain ends it.
|
|
76
|
+
const shared = entry;
|
|
77
|
+
shared.waiters++;
|
|
75
78
|
if (!signal) {
|
|
76
|
-
return promise;
|
|
79
|
+
return shared.promise;
|
|
77
80
|
}
|
|
78
|
-
// `promise` is already owned by the map's `finally`, so attach a no-op
|
|
79
|
-
// catch to the copy we race: without it, a rejection settled by the race's
|
|
80
|
-
// loser surfaces as an unhandled rejection.
|
|
81
|
-
const shared = promise;
|
|
82
|
-
shared.catch(() => { });
|
|
83
81
|
return new Promise((resolve, reject) => {
|
|
84
|
-
const onAbort = () =>
|
|
82
|
+
const onAbort = () => {
|
|
83
|
+
shared.waiters--;
|
|
84
|
+
if (shared.waiters === 0) {
|
|
85
|
+
// Nobody wants the result any more: free the key and end the work.
|
|
86
|
+
if (this.pending.get(key) === shared)
|
|
87
|
+
this.pending.delete(key);
|
|
88
|
+
shared.controller.abort();
|
|
89
|
+
}
|
|
90
|
+
reject(abortReason(signal));
|
|
91
|
+
};
|
|
85
92
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
86
|
-
shared.then((value) => { signal.removeEventListener('abort', onAbort); resolve(value); }, (error) => { signal.removeEventListener('abort', onAbort); reject(error); });
|
|
93
|
+
shared.promise.then((value) => { signal.removeEventListener('abort', onAbort); resolve(value); }, (error) => { signal.removeEventListener('abort', onAbort); reject(error); });
|
|
87
94
|
});
|
|
88
95
|
}
|
|
89
96
|
/**
|
|
90
97
|
* Clear all pending requests
|
|
91
98
|
*/
|
|
92
99
|
clear() {
|
|
93
|
-
this.
|
|
100
|
+
this.pending.clear();
|
|
94
101
|
}
|
|
95
102
|
/**
|
|
96
103
|
* Get number of pending requests
|
|
97
104
|
*/
|
|
98
105
|
size() {
|
|
99
|
-
return this.
|
|
106
|
+
return this.pending.size;
|
|
100
107
|
}
|
|
101
108
|
}
|
|
102
109
|
exports.RequestDeduplicator = RequestDeduplicator;
|
|
@@ -93,8 +93,6 @@ function deduplicateSessionsByUserId(sessions, activeSessionId) {
|
|
|
93
93
|
userSessionMap.set(session.userId, session);
|
|
94
94
|
}
|
|
95
95
|
else if (!isCurrentActive && isExistingActive) {
|
|
96
|
-
// Keep existing (active) session
|
|
97
|
-
continue;
|
|
98
96
|
}
|
|
99
97
|
else {
|
|
100
98
|
// Neither is active, keep the one with more recent lastActive
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeTokenClaims = decodeTokenClaims;
|
|
4
|
+
/**
|
|
5
|
+
* Decoded access-token claims, memoised per token string.
|
|
6
|
+
*
|
|
7
|
+
* Every request used to decode the same JWT several times (the auth preflight,
|
|
8
|
+
* the cache key, the dedupe key, the expiry checks). A token is immutable, so
|
|
9
|
+
* its claims are decoded once and reused until a new token replaces it. The
|
|
10
|
+
* memo holds a handful of recent tokens (a client, its linked clients, a
|
|
11
|
+
* rotation in flight) and never the payload of a token no longer in use.
|
|
12
|
+
*/
|
|
13
|
+
const jwt_decode_1 = require("jwt-decode");
|
|
14
|
+
const MEMO_SIZE = 4;
|
|
15
|
+
const memo = new Map();
|
|
16
|
+
/** The token's claims, or `null` for an opaque/undecodable token. */
|
|
17
|
+
function decodeTokenClaims(token) {
|
|
18
|
+
if (memo.has(token))
|
|
19
|
+
return memo.get(token) ?? null;
|
|
20
|
+
let claims;
|
|
21
|
+
try {
|
|
22
|
+
claims = (0, jwt_decode_1.jwtDecode)(token);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
claims = null;
|
|
26
|
+
}
|
|
27
|
+
memo.set(token, claims);
|
|
28
|
+
if (memo.size > MEMO_SIZE) {
|
|
29
|
+
const oldest = memo.keys().next().value;
|
|
30
|
+
if (oldest !== undefined)
|
|
31
|
+
memo.delete(oldest);
|
|
32
|
+
}
|
|
33
|
+
return claims;
|
|
34
|
+
}
|