@oxy.so/core 1.18.1 → 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 +159 -111
- 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 +160 -112
- 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 +26 -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 -22
- 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 +166 -131
- 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 -22
- 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 -1495
- 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 -1455
- 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 -998
- 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__/serviceIdentityWhenAnonymous.test.ts +0 -159
- 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 -2083
- 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
|
@@ -27,6 +27,7 @@ export interface StoredDeviceInfo {
|
|
|
27
27
|
* Client-side device management utility
|
|
28
28
|
* Handles persistent device identification across app sessions
|
|
29
29
|
*/
|
|
30
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: a public, static-only API surface (`X.method()`) that consumers and tests call and spy on by name.
|
|
30
31
|
export class DeviceManager {
|
|
31
32
|
private static DEVICE_KEY = 'oxy_device_info';
|
|
32
33
|
|
|
@@ -45,7 +46,7 @@ export class DeviceManager {
|
|
|
45
46
|
setItem: (key: string, value: string) => Promise<void>;
|
|
46
47
|
removeItem: (key: string) => Promise<void>;
|
|
47
48
|
}> {
|
|
48
|
-
if (
|
|
49
|
+
if (DeviceManager.isReactNative()) {
|
|
49
50
|
try {
|
|
50
51
|
// `loadAsyncStorage` is per-platform: the RN variant statically imports
|
|
51
52
|
// @react-native-async-storage/async-storage, the default variant throws
|
|
@@ -99,24 +100,24 @@ export class DeviceManager {
|
|
|
99
100
|
*/
|
|
100
101
|
static async getDeviceInfo(): Promise<StoredDeviceInfo> {
|
|
101
102
|
try {
|
|
102
|
-
const storage = await
|
|
103
|
-
const stored = await storage.getItem(
|
|
103
|
+
const storage = await DeviceManager.getStorage();
|
|
104
|
+
const stored = await storage.getItem(DeviceManager.DEVICE_KEY);
|
|
104
105
|
|
|
105
106
|
if (stored) {
|
|
106
107
|
const deviceInfo: StoredDeviceInfo = JSON.parse(stored);
|
|
107
108
|
|
|
108
109
|
// Update last used timestamp
|
|
109
110
|
deviceInfo.lastUsed = new Date().toISOString();
|
|
110
|
-
await
|
|
111
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
111
112
|
|
|
112
113
|
return deviceInfo;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
// Create new device info
|
|
116
|
-
return await
|
|
117
|
+
return await DeviceManager.createNewDeviceInfo();
|
|
117
118
|
} catch (error) {
|
|
118
119
|
log.error('Error getting device info', error);
|
|
119
|
-
return await
|
|
120
|
+
return await DeviceManager.createNewDeviceInfo();
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
|
|
@@ -125,13 +126,13 @@ export class DeviceManager {
|
|
|
125
126
|
*/
|
|
126
127
|
static async createNewDeviceInfo(): Promise<StoredDeviceInfo> {
|
|
127
128
|
const deviceInfo: StoredDeviceInfo = {
|
|
128
|
-
deviceId:
|
|
129
|
-
fingerprint: JSON.stringify(
|
|
129
|
+
deviceId: DeviceManager.generateDeviceId(),
|
|
130
|
+
fingerprint: JSON.stringify(DeviceManager.getDeviceFingerprint()),
|
|
130
131
|
createdAt: new Date().toISOString(),
|
|
131
132
|
lastUsed: new Date().toISOString()
|
|
132
133
|
};
|
|
133
134
|
|
|
134
|
-
await
|
|
135
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
135
136
|
return deviceInfo;
|
|
136
137
|
}
|
|
137
138
|
|
|
@@ -140,8 +141,8 @@ export class DeviceManager {
|
|
|
140
141
|
*/
|
|
141
142
|
static async saveDeviceInfo(deviceInfo: StoredDeviceInfo): Promise<void> {
|
|
142
143
|
try {
|
|
143
|
-
const storage = await
|
|
144
|
-
await storage.setItem(
|
|
144
|
+
const storage = await DeviceManager.getStorage();
|
|
145
|
+
await storage.setItem(DeviceManager.DEVICE_KEY, JSON.stringify(deviceInfo));
|
|
145
146
|
} catch (error) {
|
|
146
147
|
log.error('Error saving device info', error);
|
|
147
148
|
}
|
|
@@ -152,9 +153,9 @@ export class DeviceManager {
|
|
|
152
153
|
*/
|
|
153
154
|
static async updateDeviceName(deviceName: string): Promise<void> {
|
|
154
155
|
try {
|
|
155
|
-
const deviceInfo = await
|
|
156
|
+
const deviceInfo = await DeviceManager.getDeviceInfo();
|
|
156
157
|
deviceInfo.deviceName = deviceName;
|
|
157
|
-
await
|
|
158
|
+
await DeviceManager.saveDeviceInfo(deviceInfo);
|
|
158
159
|
} catch (error) {
|
|
159
160
|
log.error('Error updating device name', error);
|
|
160
161
|
}
|
|
@@ -165,8 +166,8 @@ export class DeviceManager {
|
|
|
165
166
|
*/
|
|
166
167
|
static async clearDeviceInfo(): Promise<void> {
|
|
167
168
|
try {
|
|
168
|
-
const storage = await
|
|
169
|
-
await storage.removeItem(
|
|
169
|
+
const storage = await DeviceManager.getStorage();
|
|
170
|
+
await storage.removeItem(DeviceManager.DEVICE_KEY);
|
|
170
171
|
} catch (error) {
|
|
171
172
|
log.error('Error clearing device info', error);
|
|
172
173
|
}
|
|
@@ -188,7 +189,7 @@ export class DeviceManager {
|
|
|
188
189
|
* Get a user-friendly device name based on platform
|
|
189
190
|
*/
|
|
190
191
|
static getDefaultDeviceName(): string {
|
|
191
|
-
const fingerprint =
|
|
192
|
+
const fingerprint = DeviceManager.getDeviceFingerprint();
|
|
192
193
|
const platform = (fingerprint.platform || '').toLowerCase();
|
|
193
194
|
|
|
194
195
|
if (platform.includes('win')) return 'Windows Computer';
|
package/src/utils/edgeRegion.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { getBrowserEdgeRegionHeader } from '@oxy.so/telemetry/browser';
|
|
1
|
+
export { peekBrowserEdgeRegionHeader } from '@oxy.so/telemetry/browser';
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
* refetch; under-eviction serves wrong data.
|
|
48
48
|
*
|
|
49
49
|
* Platform-neutral by construction (no imports, no `OxyServices` reference) so
|
|
50
|
-
* the client
|
|
50
|
+
* the client namespaces and the Node-only `@oxy.so/core/server` invalidation
|
|
51
51
|
* subscriber can share it without either pulling in the other.
|
|
52
52
|
*/
|
|
53
53
|
|
|
@@ -56,8 +56,7 @@
|
|
|
56
56
|
* structurally so this module stays free of any client import.
|
|
57
57
|
*/
|
|
58
58
|
export interface OxyIdentityCacheEvictor {
|
|
59
|
-
|
|
60
|
-
clearCacheByPrefix(prefix: string): number;
|
|
59
|
+
invalidateCache(spec: { keys?: readonly string[]; prefixes?: readonly string[] }): number;
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
/**
|
|
@@ -69,8 +68,6 @@ export const OXY_IDENTITY_CACHE_PREFIXES: readonly string[] = [
|
|
|
69
68
|
'GET:/session/user/',
|
|
70
69
|
// `getCurrentUser` (and `GET:/users/me/graph`, harmlessly included).
|
|
71
70
|
'GET:/users/me',
|
|
72
|
-
// `lookupUsername` — the pre-session login lookup; carries avatar + display name.
|
|
73
|
-
'GET:/auth/lookup/',
|
|
74
71
|
// `getProfileByUsername` — keyed by handle, including the pre-rename handle.
|
|
75
72
|
'GET:/profiles/username/',
|
|
76
73
|
// `resolveProfile` — keyed by fediverse handle in the query payload.
|
|
@@ -94,11 +91,9 @@ export function oxyUserByIdCacheKey(userId: string): string {
|
|
|
94
91
|
* that does not know the id still clears every handle-, session-
|
|
95
92
|
* and self-keyed entry, which is the majority of the surface.
|
|
96
93
|
*/
|
|
97
|
-
export function evictOxyIdentityCache(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
oxy.clearCacheEntry(oxyUserByIdCacheKey(userId));
|
|
103
|
-
}
|
|
94
|
+
export function evictOxyIdentityCache(http: OxyIdentityCacheEvictor, userId?: string): void {
|
|
95
|
+
http.invalidateCache({
|
|
96
|
+
prefixes: OXY_IDENTITY_CACHE_PREFIXES,
|
|
97
|
+
keys: userId ? [oxyUserByIdCacheKey(userId)] : [],
|
|
98
|
+
});
|
|
104
99
|
}
|
package/src/utils/oauthPkce.ts
CHANGED
|
@@ -89,8 +89,8 @@ export interface BuildOAuthAuthorizeUrlParams {
|
|
|
89
89
|
responseMode?: 'web_message';
|
|
90
90
|
/**
|
|
91
91
|
* Which of the IdP's screens a person with no session there lands on:
|
|
92
|
-
* `signin` (sign in
|
|
93
|
-
*
|
|
92
|
+
* `signin` (sign in), `signup` (create an account), `recover` (get back
|
|
93
|
+
* into one); each opens its sign-in panel. Omitted, the IdP
|
|
94
94
|
* offers its Commons request first. An Oxy app sends this when it sends the
|
|
95
95
|
* person to auth.oxy.so for what only that origin can do, in the same tab.
|
|
96
96
|
*/
|
|
@@ -5,13 +5,9 @@
|
|
|
5
5
|
* literal union — `@oxy.so/core` has zero dependency on `@oxy.so/api`, so this is
|
|
6
6
|
* kept in sync by hand, not by import.
|
|
7
7
|
*
|
|
8
|
-
* Defined here
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `mixins/` deliberately avoids so it stays safe to bundle into RN/browser
|
|
12
|
-
* consumers — see the "Local request/response/socket typing" comment in
|
|
13
|
-
* `OxyServices.utility.ts`). This file has zero imports, so both sides can
|
|
14
|
-
* depend on it without crossing that boundary.
|
|
8
|
+
* Defined here, with zero imports, so the server middleware and any
|
|
9
|
+
* client-safe code can both depend on it without the client reaching the
|
|
10
|
+
* Node-only `server/` modules.
|
|
15
11
|
*/
|
|
16
12
|
export const OXY_SERVICE_ENVIRONMENTS = ['development', 'staging', 'production'] as const;
|
|
17
13
|
export type OxyServiceEnvironment = (typeof OXY_SERVICE_ENVIRONMENTS)[number];
|
|
@@ -28,69 +28,73 @@ function abortReason(signal: AbortSignal): unknown {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Request deduplication - prevents duplicate concurrent requests
|
|
31
|
-
*
|
|
32
|
-
* When multiple requests with the same key are made simultaneously,
|
|
33
|
-
*
|
|
34
|
-
*
|
|
31
|
+
*
|
|
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.
|
|
39
|
+
*
|
|
35
40
|
* @example
|
|
36
41
|
* ```typescript
|
|
37
42
|
* const deduplicator = new RequestDeduplicator();
|
|
38
|
-
*
|
|
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
|
|
43
|
+
*
|
|
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
|
export class RequestDeduplicator {
|
|
46
|
-
private
|
|
50
|
+
private pending = new Map<string, { promise: Promise<unknown>; controller: AbortController; waiters: number }>();
|
|
47
51
|
|
|
48
52
|
/**
|
|
49
53
|
* Deduplicate a request by key
|
|
50
54
|
* @param key Unique key for the request
|
|
51
|
-
* @param requestFn
|
|
52
|
-
* @
|
|
55
|
+
* @param requestFn Runs the work; its signal aborts once every caller has cancelled
|
|
56
|
+
* @param signal This caller's cancellation
|
|
53
57
|
*/
|
|
54
58
|
async deduplicate<T>(
|
|
55
59
|
key: string,
|
|
56
|
-
requestFn: () => Promise<T>,
|
|
60
|
+
requestFn: (signal: AbortSignal) => Promise<T>,
|
|
57
61
|
signal?: AbortSignal
|
|
58
62
|
): Promise<T> {
|
|
59
63
|
if (signal?.aborted) {
|
|
60
64
|
throw abortReason(signal);
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
let
|
|
64
|
-
if (!
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
let entry = this.pending.get(key);
|
|
68
|
+
if (!entry) {
|
|
69
|
+
const controller = new AbortController();
|
|
70
|
+
const promise = requestFn(controller.signal).finally(() => {
|
|
71
|
+
if (this.pending.get(key) === entry) this.pending.delete(key);
|
|
67
72
|
});
|
|
68
|
-
this
|
|
73
|
+
// Ownership stays with the callers awaiting it; this only stops a
|
|
74
|
+
// rejection nobody is left to observe from surfacing as unhandled.
|
|
75
|
+
promise.catch(() => {});
|
|
76
|
+
entry = { promise, controller, waiters: 0 };
|
|
77
|
+
this.pending.set(key, entry);
|
|
69
78
|
}
|
|
79
|
+
const shared = entry;
|
|
80
|
+
shared.waiters++;
|
|
70
81
|
|
|
71
|
-
// Callers SHARE the work but own their cancellation separately.
|
|
72
|
-
//
|
|
73
|
-
// Returning the shared promise directly meant one caller's abort rejected
|
|
74
|
-
// every other caller on the same key — including ones that never cancelled
|
|
75
|
-
// anything, and which had no way to tell that the failure was not theirs.
|
|
76
|
-
// Racing each caller's own signal against the shared work keeps the single
|
|
77
|
-
// in-flight request (the point of deduplication) while making cancellation
|
|
78
|
-
// per-caller. The shared promise is left running: another caller may still
|
|
79
|
-
// want it, and if nobody does its own abort domain ends it.
|
|
80
82
|
if (!signal) {
|
|
81
|
-
return promise
|
|
83
|
+
return shared.promise as Promise<T>;
|
|
82
84
|
}
|
|
83
85
|
|
|
84
|
-
// `promise` is already owned by the map's `finally`, so attach a no-op
|
|
85
|
-
// catch to the copy we race: without it, a rejection settled by the race's
|
|
86
|
-
// loser surfaces as an unhandled rejection.
|
|
87
|
-
const shared = promise;
|
|
88
|
-
shared.catch(() => { /* ownership stays with the caller(s) awaiting it */ });
|
|
89
|
-
|
|
90
86
|
return new Promise<T>((resolve, reject) => {
|
|
91
|
-
const onAbort = (): void =>
|
|
87
|
+
const onAbort = (): void => {
|
|
88
|
+
shared.waiters--;
|
|
89
|
+
if (shared.waiters === 0) {
|
|
90
|
+
// Nobody wants the result any more: free the key and end the work.
|
|
91
|
+
if (this.pending.get(key) === shared) this.pending.delete(key);
|
|
92
|
+
shared.controller.abort();
|
|
93
|
+
}
|
|
94
|
+
reject(abortReason(signal));
|
|
95
|
+
};
|
|
92
96
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
93
|
-
shared.then(
|
|
97
|
+
(shared.promise as Promise<T>).then(
|
|
94
98
|
(value) => { signal.removeEventListener('abort', onAbort); resolve(value); },
|
|
95
99
|
(error) => { signal.removeEventListener('abort', onAbort); reject(error); },
|
|
96
100
|
);
|
|
@@ -101,14 +105,14 @@ export class RequestDeduplicator {
|
|
|
101
105
|
* Clear all pending requests
|
|
102
106
|
*/
|
|
103
107
|
clear(): void {
|
|
104
|
-
this.
|
|
108
|
+
this.pending.clear();
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
/**
|
|
108
112
|
* Get number of pending requests
|
|
109
113
|
*/
|
|
110
114
|
size(): number {
|
|
111
|
-
return this.
|
|
115
|
+
return this.pending.size;
|
|
112
116
|
}
|
|
113
117
|
}
|
|
114
118
|
|
|
@@ -129,7 +133,7 @@ export class RequestDeduplicator {
|
|
|
129
133
|
* ```
|
|
130
134
|
*/
|
|
131
135
|
export class RequestQueue {
|
|
132
|
-
private queue: Array<() => Promise<
|
|
136
|
+
private queue: Array<() => Promise<unknown>> = [];
|
|
133
137
|
private running = 0;
|
|
134
138
|
private maxConcurrent: number;
|
|
135
139
|
private maxQueueSize: number;
|
|
@@ -297,29 +301,29 @@ export class SimpleLogger {
|
|
|
297
301
|
return levels.indexOf(level) <= levels.indexOf(this.level);
|
|
298
302
|
}
|
|
299
303
|
|
|
300
|
-
private formatMessage(...args:
|
|
304
|
+
private formatMessage(...args: unknown[]): unknown[] {
|
|
301
305
|
return this.prefix ? [`[${this.prefix}]`, ...args] : args;
|
|
302
306
|
}
|
|
303
307
|
|
|
304
|
-
error(...args:
|
|
308
|
+
error(...args: unknown[]): void {
|
|
305
309
|
if (this.shouldLog('error')) {
|
|
306
310
|
console.error(...this.formatMessage(...args));
|
|
307
311
|
}
|
|
308
312
|
}
|
|
309
313
|
|
|
310
|
-
warn(...args:
|
|
314
|
+
warn(...args: unknown[]): void {
|
|
311
315
|
if (this.shouldLog('warn')) {
|
|
312
316
|
console.warn(...this.formatMessage(...args));
|
|
313
317
|
}
|
|
314
318
|
}
|
|
315
319
|
|
|
316
|
-
info(...args:
|
|
320
|
+
info(...args: unknown[]): void {
|
|
317
321
|
if (this.shouldLog('info')) {
|
|
318
322
|
console.info(...this.formatMessage(...args));
|
|
319
323
|
}
|
|
320
324
|
}
|
|
321
325
|
|
|
322
|
-
debug(...args:
|
|
326
|
+
debug(...args: unknown[]): void {
|
|
323
327
|
if (this.shouldLog('debug')) {
|
|
324
328
|
console.log(...this.formatMessage(...args));
|
|
325
329
|
}
|
|
@@ -94,8 +94,6 @@ export function deduplicateSessionsByUserId(
|
|
|
94
94
|
if (isCurrentActive && !isExistingActive) {
|
|
95
95
|
userSessionMap.set(session.userId, session);
|
|
96
96
|
} else if (!isCurrentActive && isExistingActive) {
|
|
97
|
-
// Keep existing (active) session
|
|
98
|
-
continue;
|
|
99
97
|
} else {
|
|
100
98
|
// Neither is active, keep the one with more recent lastActive
|
|
101
99
|
const existingTime = new Date(existing.lastActive).getTime();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decoded access-token claims, memoised per token string.
|
|
3
|
+
*
|
|
4
|
+
* Every request used to decode the same JWT several times (the auth preflight,
|
|
5
|
+
* the cache key, the dedupe key, the expiry checks). A token is immutable, so
|
|
6
|
+
* its claims are decoded once and reused until a new token replaces it. The
|
|
7
|
+
* memo holds a handful of recent tokens (a client, its linked clients, a
|
|
8
|
+
* rotation in flight) and never the payload of a token no longer in use.
|
|
9
|
+
*/
|
|
10
|
+
import { jwtDecode } from 'jwt-decode';
|
|
11
|
+
|
|
12
|
+
export interface AccessTokenClaims {
|
|
13
|
+
exp?: number;
|
|
14
|
+
userId?: string;
|
|
15
|
+
id?: string;
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
[claim: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const MEMO_SIZE = 4;
|
|
21
|
+
const memo = new Map<string, AccessTokenClaims | null>();
|
|
22
|
+
|
|
23
|
+
/** The token's claims, or `null` for an opaque/undecodable token. */
|
|
24
|
+
export function decodeTokenClaims(token: string): AccessTokenClaims | null {
|
|
25
|
+
if (memo.has(token)) return memo.get(token) ?? null;
|
|
26
|
+
let claims: AccessTokenClaims | null;
|
|
27
|
+
try {
|
|
28
|
+
claims = jwtDecode<AccessTokenClaims>(token);
|
|
29
|
+
} catch {
|
|
30
|
+
claims = null;
|
|
31
|
+
}
|
|
32
|
+
memo.set(token, claims);
|
|
33
|
+
if (memo.size > MEMO_SIZE) {
|
|
34
|
+
const oldest = memo.keys().next().value;
|
|
35
|
+
if (oldest !== undefined) memo.delete(oldest);
|
|
36
|
+
}
|
|
37
|
+
return claims;
|
|
38
|
+
}
|