@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
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ bun add @oxy.so/core
|
|
|
11
11
|
## Contents
|
|
12
12
|
|
|
13
13
|
- **OxyServices API client** — all API methods for interacting with OxyHQ services
|
|
14
|
-
- **Device-first session engine** — `SessionClient` (`src/session/`), `runSessionColdBoot
|
|
14
|
+
- **Device-first session engine** — `SessionClient` (`src/session/`), `runSessionColdBoot` and `oxy.devices.mintToken` (all in `@oxy.so/core/session` + the client), which back `OxyProvider` in `@oxy.so/services`
|
|
15
15
|
- **OAuth helpers** — `generatePkcePair`, `generateOAuthState`, `buildOAuthAuthorizeUrl` for third-party "Sign in with Oxy" (see [docs/auth/integration-guide.md](../../docs/auth/integration-guide.md))
|
|
16
16
|
- **Crypto** — KeyManager, SignatureService, RecoveryPhraseService
|
|
17
17
|
- **Models and types** — User, ApiError, ClientSession, and more
|
|
@@ -27,19 +27,25 @@ bun add @oxy.so/core
|
|
|
27
27
|
|
|
28
28
|
The package exposes two public entry points:
|
|
29
29
|
|
|
30
|
-
- `@oxy.so/core` —
|
|
31
|
-
- `@oxy.so/core/
|
|
30
|
+
- `@oxy.so/core` — the `OxyServices` client and its namespaces, `OxyApiError`, models, shared utilities, i18n, platform helpers
|
|
31
|
+
- `@oxy.so/core/session` — `SessionClient`, the account dialog controller, auth-state stores, cold boot
|
|
32
|
+
- `@oxy.so/core/crypto` — `KeyManager`, `SignatureService`, `RecoveryPhraseService` and the primitives under them
|
|
33
|
+
- `@oxy.so/core/civic`, `@oxy.so/core/inference`, `@oxy.so/core/logger`
|
|
34
|
+
- `@oxy.so/core/server` — `OxyServer` (service tokens, `middleware.*`) and the Express helpers (`createOxyRateLimit`, `createOxyAuthMiddleware`, `requireOxyAuth`, `getOxyUserId`, `getRequiredOxyUserId`, `createOxyCors`, `createOxySecurityHeaders`, `buildOxyCspDirectives`, `safeFetch`, `verifySecret`, and request types)
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
Heavy pieces have their own entries so an app ships only what it uses; React Native and browser bundles never import Express. The full API map is [docs/api.mdx](./docs/api.mdx).
|
|
34
37
|
|
|
35
38
|
## Usage
|
|
36
39
|
|
|
37
40
|
```ts
|
|
38
|
-
import { OxyServices
|
|
39
|
-
import
|
|
41
|
+
import { OxyServices } from '@oxy.so/core';
|
|
42
|
+
import { KeyManager } from '@oxy.so/core/crypto';
|
|
43
|
+
import type { User } from '@oxy.so/core';
|
|
44
|
+
|
|
45
|
+
const oxy = new OxyServices({ baseURL: 'https://api.oxy.so' });
|
|
40
46
|
|
|
41
47
|
// Get user
|
|
42
|
-
const user = await
|
|
48
|
+
const user: User = await oxy.users.get('123');
|
|
43
49
|
|
|
44
50
|
// Crypto (KeyManager methods are static)
|
|
45
51
|
const hasIdentity = await KeyManager.hasIdentity();
|
package/dist/cjs/HttpService.js
CHANGED
|
@@ -19,8 +19,8 @@ const cache_1 = require("./utils/cache");
|
|
|
19
19
|
const requestUtils_1 = require("./utils/requestUtils");
|
|
20
20
|
const asyncUtils_1 = require("./utils/asyncUtils");
|
|
21
21
|
const errorUtils_1 = require("./utils/errorUtils");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
22
|
+
const tokenClaims_1 = require("./utils/tokenClaims");
|
|
23
|
+
const random_1 = require("@oxy.so/protocol/random");
|
|
24
24
|
const cacheKey_1 = require("./utils/cacheKey");
|
|
25
25
|
const redactUrl_1 = require("./utils/redactUrl");
|
|
26
26
|
const OxyServices_errors_1 = require("./OxyServices.errors");
|
|
@@ -32,6 +32,26 @@ const activityId_1 = require("./utils/activityId");
|
|
|
32
32
|
* endpoint surfaces as an `AbortError` quickly rather than blocking the
|
|
33
33
|
* request queue.
|
|
34
34
|
*/
|
|
35
|
+
/**
|
|
36
|
+
* Strip leading or trailing `/`s without a regex: `/\/+$/` backtracks
|
|
37
|
+
* polynomially on a long run of slashes (CodeQL js/polynomial-redos), and this
|
|
38
|
+
* runs on every request.
|
|
39
|
+
*/
|
|
40
|
+
function trimSlashes(value, side) {
|
|
41
|
+
let start = 0;
|
|
42
|
+
let end = value.length;
|
|
43
|
+
if (side === 'start')
|
|
44
|
+
while (start < end && value.charCodeAt(start) === 47)
|
|
45
|
+
start++;
|
|
46
|
+
else
|
|
47
|
+
while (end > start && value.charCodeAt(end - 1) === 47)
|
|
48
|
+
end--;
|
|
49
|
+
return value.slice(start, end);
|
|
50
|
+
}
|
|
51
|
+
/** Methods whose calls concurrent callers may share (read-only). */
|
|
52
|
+
const SAFE_METHODS = new Set(['GET']);
|
|
53
|
+
/** Methods safe to re-send after a transient failure (RFC 9110 §9.2.2). */
|
|
54
|
+
const IDEMPOTENT_METHODS = new Set(['GET', 'PUT', 'DELETE']);
|
|
35
55
|
const DEFAULT_REQUEST_TIMEOUT_MS = 5000;
|
|
36
56
|
/**
|
|
37
57
|
* Cooldown (ms) applied after a failed access-token refresh before another
|
|
@@ -97,18 +117,13 @@ const TOKEN_REFRESH_LEAD_SECONDS = 60;
|
|
|
97
117
|
* lead window. `false` for an expired, opaque or no-`exp` token.
|
|
98
118
|
*/
|
|
99
119
|
function isInsideRefreshLeadWindow(token) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (typeof decoded.exp !== 'number') {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
const now = Math.floor(Date.now() / 1000);
|
|
106
|
-
// `<=`: the proactive scheduler fires at exactly `exp - lead`.
|
|
107
|
-
return decoded.exp > now && decoded.exp - now <= TOKEN_REFRESH_LEAD_SECONDS;
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
120
|
+
const decoded = (0, tokenClaims_1.decodeTokenClaims)(token);
|
|
121
|
+
if (typeof decoded?.exp !== 'number') {
|
|
110
122
|
return false;
|
|
111
123
|
}
|
|
124
|
+
const now = Math.floor(Date.now() / 1000);
|
|
125
|
+
// `<=`: the proactive scheduler fires at exactly `exp - lead`.
|
|
126
|
+
return decoded.exp > now && decoded.exp - now <= TOKEN_REFRESH_LEAD_SECONDS;
|
|
112
127
|
}
|
|
113
128
|
/**
|
|
114
129
|
* Soft ceiling on the number of live entries in the identity-scoped GET
|
|
@@ -379,7 +394,15 @@ class HttpService {
|
|
|
379
394
|
* Main request method - handles everything in one place
|
|
380
395
|
*/
|
|
381
396
|
async request(config) {
|
|
382
|
-
const { method, url, data, params, timeout = this.config.requestTimeout || DEFAULT_REQUEST_TIMEOUT_MS, signal, cache: cacheRequested = method === 'GET', cacheTTL,
|
|
397
|
+
const { method, url, data, params, timeout = this.config.requestTimeout || DEFAULT_REQUEST_TIMEOUT_MS, signal, cache: cacheRequested = method === 'GET', cacheTTL,
|
|
398
|
+
// Only reads are shared by default. A write's body can be opaque
|
|
399
|
+
// (`FormData`, `URLSearchParams` key as empty objects), so two different
|
|
400
|
+
// uploads used to collapse into one call and the second caller got the
|
|
401
|
+
// first file's result.
|
|
402
|
+
deduplicate = SAFE_METHODS.has(method),
|
|
403
|
+
// Only idempotent methods are re-sent by default: re-sending a POST after a
|
|
404
|
+
// 5xx or a dropped connection can apply it twice.
|
|
405
|
+
retry = this.config.enableRetry !== false && IDEMPOTENT_METHODS.has(method), maxRetries = this.config.maxRetries || 3, } = config;
|
|
383
406
|
// A per-instance disabled cache (`enableCache:false` / `cacheTTL<=0`)
|
|
384
407
|
// overrides any per-request `cache:true`: nothing is read from nor written
|
|
385
408
|
// to the response cache. Request deduplication below is unaffected.
|
|
@@ -409,7 +432,9 @@ class HttpService {
|
|
|
409
432
|
// 401 retry re-enters request() with a fresh config, so it re-resolves
|
|
410
433
|
// this here with the refreshed token.
|
|
411
434
|
const authHeader = config.skipAuth ? null : await this.getAuthHeader();
|
|
412
|
-
|
|
435
|
+
// Never awaited: the PoP is a hint, and waiting on its trace fetch put up
|
|
436
|
+
// to a second in front of requests.
|
|
437
|
+
const edgeRegionHeader = (0, edgeRegion_1.peekBrowserEdgeRegionHeader)();
|
|
413
438
|
const activityIdHeader = (0, activityId_1.getBrowserActivityIdHeader)();
|
|
414
439
|
// A request the caller has ALREADY abandoned takes no queue slot and makes
|
|
415
440
|
// no network call. Checked here, before enqueue, because a slot is the
|
|
@@ -418,40 +443,30 @@ class HttpService {
|
|
|
418
443
|
if (signal?.aborted) {
|
|
419
444
|
throw (0, errorUtils_1.createCancelledError)('Request cancelled before it was sent');
|
|
420
445
|
}
|
|
421
|
-
//
|
|
422
|
-
//
|
|
423
|
-
//
|
|
424
|
-
|
|
425
|
-
// linked to each new controller with a bare `addEventListener`. An `abort`
|
|
426
|
-
// event fires once, so on attempt 2 the caller's already-fired signal could
|
|
427
|
-
// not abort the freshly built controller, and the request the caller had
|
|
428
|
-
// cancelled went out for real. Hoisting the linkage means a cancellation
|
|
429
|
-
// arrives once and is then true for every attempt, including ones not yet
|
|
430
|
-
// started.
|
|
431
|
-
const callController = new AbortController();
|
|
432
|
-
const disposeCallerLink = signal ? linkAbort(signal, callController) : undefined;
|
|
433
|
-
/**
|
|
434
|
-
* Which of our own timers fired, so a timeout can be told apart from a
|
|
435
|
-
* cancellation. Both reach us from `fetch` as an indistinguishable
|
|
436
|
-
* `AbortError`, and collapsing them (as this used to) is what let the retry
|
|
437
|
-
* predicate treat an abandoned request as a transient failure.
|
|
438
|
-
*/
|
|
439
|
-
let timedOut = false;
|
|
440
|
-
// Request function
|
|
441
|
-
const requestFn = async () => {
|
|
446
|
+
// One network attempt, inside the call's abort domain `domain`: the caller's
|
|
447
|
+
// own signal, or — when deduplicated — the shared work's, which aborts only
|
|
448
|
+
// once every caller waiting on it has cancelled.
|
|
449
|
+
const attempt = async (domain) => {
|
|
442
450
|
const startTime = Date.now();
|
|
443
451
|
// Re-checked per attempt so no retry can issue a network call after the
|
|
444
452
|
// caller gave up — belt to `retryAsync`'s braces, and the one that holds
|
|
445
453
|
// if a custom `shouldRetry` ever says yes to a cancellation.
|
|
446
|
-
if (
|
|
454
|
+
if (domain.aborted) {
|
|
447
455
|
throw (0, errorUtils_1.createCancelledError)('Request cancelled');
|
|
448
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* Whether OUR timer fired, so a timeout can be told apart from a
|
|
459
|
+
* cancellation. Both reach us from `fetch` as an indistinguishable
|
|
460
|
+
* `AbortError`, and collapsing them is what let the retry predicate treat
|
|
461
|
+
* an abandoned request as a transient failure.
|
|
462
|
+
*/
|
|
463
|
+
let timedOut = false;
|
|
449
464
|
// This attempt's controller carries its own timeout and inherits the
|
|
450
465
|
// call-wide abort domain. Declared OUTSIDE the `try` so the `finally`
|
|
451
466
|
// that releases them can see them — the timer and the listener are
|
|
452
467
|
// exactly what leaked when they lived inside it.
|
|
453
468
|
const controller = new AbortController();
|
|
454
|
-
const disposeCallLink = linkAbort(
|
|
469
|
+
const disposeCallLink = linkAbort(domain, controller);
|
|
455
470
|
const timeoutId = timeout
|
|
456
471
|
? setTimeout(() => {
|
|
457
472
|
timedOut = true;
|
|
@@ -477,19 +492,19 @@ class HttpService {
|
|
|
477
492
|
}
|
|
478
493
|
// Add authorization header if available
|
|
479
494
|
if (authHeader) {
|
|
480
|
-
headers
|
|
495
|
+
headers.Authorization = authHeader;
|
|
481
496
|
}
|
|
482
497
|
// Merge custom headers if provided
|
|
483
498
|
if (config.headers) {
|
|
484
|
-
Object.entries(config.headers)
|
|
499
|
+
for (const [key, value] of Object.entries(config.headers)) {
|
|
485
500
|
// For FormData, explicitly remove Content-Type if user tries to set it
|
|
486
501
|
// The browser/fetch API will set it automatically with the boundary
|
|
487
502
|
if (isFormData && key.toLowerCase() === 'content-type') {
|
|
488
503
|
this.logger.debug('Ignoring Content-Type header for FormData - will be set automatically');
|
|
489
|
-
|
|
504
|
+
continue;
|
|
490
505
|
}
|
|
491
506
|
headers[key] = value;
|
|
492
|
-
}
|
|
507
|
+
}
|
|
493
508
|
}
|
|
494
509
|
// This is Cloudflare's coarse serving PoP (for example `mad`), never an
|
|
495
510
|
// IP or coordinate. Set it after caller headers so request code cannot
|
|
@@ -508,7 +523,7 @@ class HttpService {
|
|
|
508
523
|
// RN's native XMLHttpRequest handles those descriptors correctly, so we
|
|
509
524
|
// route multipart uploads through XHR on RN only. JSON, text, etc. still
|
|
510
525
|
// use fetch on every platform.
|
|
511
|
-
const useXhrForUpload = isFormData && (0,
|
|
526
|
+
const useXhrForUpload = isFormData && (0, random_1.isReactNative)() && typeof XMLHttpRequest !== 'undefined';
|
|
512
527
|
const response = useXhrForUpload
|
|
513
528
|
? await this.uploadViaXHR(fullUrl, method, headers, bodyValue, controller.signal, timeout, this.shouldSendCredentials(fullUrl))
|
|
514
529
|
: await fetch(fullUrl, {
|
|
@@ -537,7 +552,12 @@ class HttpService {
|
|
|
537
552
|
// deduplicated retry would resolve to the still-pending original
|
|
538
553
|
// and await itself (deadlock). Opting the retry out of dedupe makes
|
|
539
554
|
// it a fresh request.
|
|
540
|
-
|
|
555
|
+
//
|
|
556
|
+
// `bypassQueue: true` is REQUIRED too: this attempt still holds its
|
|
557
|
+
// queue slot, so a queued retry waits for a slot while holding one.
|
|
558
|
+
// With every slot held by a 401 (a revoked session under load) no
|
|
559
|
+
// retry could ever start and the whole client stalled.
|
|
560
|
+
return this.request({ ...config, _isAuthRetry: true, retry: false, deduplicate: false, bypassQueue: true });
|
|
541
561
|
}
|
|
542
562
|
// Refresh failed or no token — clear tokens
|
|
543
563
|
this.tokenStore.clearTokens();
|
|
@@ -582,7 +602,7 @@ class HttpService {
|
|
|
582
602
|
if (config.responseType === 'blob') {
|
|
583
603
|
responseData = await response.blob();
|
|
584
604
|
}
|
|
585
|
-
else if (contentType
|
|
605
|
+
else if (contentType?.includes('application/json')) {
|
|
586
606
|
// Use response.json() directly for better performance
|
|
587
607
|
try {
|
|
588
608
|
responseData = await response.json();
|
|
@@ -665,47 +685,55 @@ class HttpService {
|
|
|
665
685
|
disposeCallLink();
|
|
666
686
|
}
|
|
667
687
|
};
|
|
668
|
-
//
|
|
688
|
+
// Composition: dedupe(retry(queue(attempt))). A queue slot is network
|
|
689
|
+
// occupancy only — each attempt takes one and releases it — so neither the
|
|
690
|
+
// retry backoff sleep nor a deduplicated caller waiting on shared work holds
|
|
691
|
+
// a slot while doing nothing.
|
|
669
692
|
//
|
|
670
|
-
// `retryOnTimeout` defaults to false in `retryAsync
|
|
671
|
-
//
|
|
672
|
-
//
|
|
673
|
-
|
|
674
|
-
//
|
|
675
|
-
|
|
676
|
-
|
|
693
|
+
// `retryOnTimeout` defaults to false in `retryAsync`: a timeout costs ONE
|
|
694
|
+
// attempt, a cancellation none. `deadline` bounds whatever retries do happen
|
|
695
|
+
// by wall clock rather than by attempts x timeout + backoff.
|
|
696
|
+
const runAttempt = (domain) =>
|
|
697
|
+
// Control-plane calls the auth lane depends on (`bypassQueue`, e.g. the
|
|
698
|
+
// device-secret mint) run DIRECTLY — a queued mint could never acquire a
|
|
699
|
+
// slot when every slot is parked awaiting it.
|
|
700
|
+
config.bypassQueue ? attempt(domain) : this.requestQueue.enqueue(() => attempt(domain), domain);
|
|
701
|
+
const execute = (domain) => retry
|
|
702
|
+
? (0, asyncUtils_1.retryAsync)(() => runAttempt(domain), {
|
|
677
703
|
maxRetries,
|
|
678
704
|
baseDelay: this.config.retryDelay || 1000,
|
|
679
705
|
retryOnTimeout: config.retryOnTimeout ?? false,
|
|
680
706
|
deadline: config.deadline !== undefined ? Date.now() + config.deadline : undefined,
|
|
681
707
|
})
|
|
682
|
-
:
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
//
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
//
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
708
|
+
: runAttempt(domain);
|
|
709
|
+
let result;
|
|
710
|
+
if (deduplicate) {
|
|
711
|
+
// The cache key IS the dedupe key (same method, url, payload, identity);
|
|
712
|
+
// computed once per call.
|
|
713
|
+
const dedupeKey = cacheKey ?? this.generateCacheKey(method, url, data || params);
|
|
714
|
+
result = await this.deduplicator.deduplicate(dedupeKey, execute, signal);
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
// The call's own abort domain, linked to the caller's signal ONCE, so a
|
|
718
|
+
// cancellation arrives once and is then true for every attempt, including
|
|
719
|
+
// ones not yet started. Released however the call ends: a caller signal
|
|
720
|
+
// that outlives the request (a React Query signal) would otherwise accrue
|
|
721
|
+
// one listener per request.
|
|
722
|
+
const callController = new AbortController();
|
|
723
|
+
const disposeCallerLink = signal ? linkAbort(signal, callController) : undefined;
|
|
724
|
+
try {
|
|
725
|
+
result = await execute(callController.signal);
|
|
726
|
+
}
|
|
727
|
+
finally {
|
|
728
|
+
disposeCallerLink?.();
|
|
699
729
|
}
|
|
700
|
-
return result;
|
|
701
730
|
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
// listener per request for its whole lifetime.
|
|
707
|
-
disposeCallerLink?.();
|
|
731
|
+
// Cache the result if caching is enabled
|
|
732
|
+
if (cache && cacheKey && result) {
|
|
733
|
+
this.cache.set(cacheKey, result, cacheTTL);
|
|
734
|
+
this.warnIfCacheOversized();
|
|
708
735
|
}
|
|
736
|
+
return result;
|
|
709
737
|
}
|
|
710
738
|
/**
|
|
711
739
|
* Soft cache-size guard. Emits a single throttled telemetry warning when the
|
|
@@ -892,16 +920,16 @@ class HttpService {
|
|
|
892
920
|
buildURL(url, params) {
|
|
893
921
|
const base = /^https?:\/\//i.test(url)
|
|
894
922
|
? url
|
|
895
|
-
: `${this.baseURL
|
|
923
|
+
: `${trimSlashes(this.baseURL, 'end')}/${trimSlashes(url, 'start')}`;
|
|
896
924
|
if (!params || Object.keys(params).length === 0) {
|
|
897
925
|
return base;
|
|
898
926
|
}
|
|
899
927
|
const searchParams = new URLSearchParams();
|
|
900
|
-
|
|
928
|
+
for (const [key, value] of Object.entries(params)) {
|
|
901
929
|
if (value !== undefined && value !== null) {
|
|
902
930
|
searchParams.append(key, String(value));
|
|
903
931
|
}
|
|
904
|
-
}
|
|
932
|
+
}
|
|
905
933
|
const queryString = searchParams.toString();
|
|
906
934
|
return queryString ? `${base}${base.includes('?') ? '&' : '?'}${queryString}` : base;
|
|
907
935
|
}
|
|
@@ -925,7 +953,9 @@ class HttpService {
|
|
|
925
953
|
return this.getAnonymousAuthHeader();
|
|
926
954
|
}
|
|
927
955
|
try {
|
|
928
|
-
const decoded = (0,
|
|
956
|
+
const decoded = (0, tokenClaims_1.decodeTokenClaims)(accessToken);
|
|
957
|
+
if (!decoded)
|
|
958
|
+
throw new Error('opaque token');
|
|
929
959
|
const currentTime = Math.floor(Date.now() / 1000);
|
|
930
960
|
// If the token expires within the refresh lead window, refresh it.
|
|
931
961
|
if (decoded.exp && decoded.exp - currentTime < TOKEN_REFRESH_LEAD_SECONDS) {
|
|
@@ -1071,26 +1101,22 @@ class HttpService {
|
|
|
1071
1101
|
if (!token) {
|
|
1072
1102
|
return false;
|
|
1073
1103
|
}
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
return typeof decoded.exp === 'number' && decoded.exp <= Math.floor(Date.now() / 1000);
|
|
1077
|
-
}
|
|
1078
|
-
catch {
|
|
1079
|
-
return false;
|
|
1080
|
-
}
|
|
1104
|
+
const exp = (0, tokenClaims_1.decodeTokenClaims)(token)?.exp;
|
|
1105
|
+
return typeof exp === 'number' && exp <= Math.floor(Date.now() / 1000);
|
|
1081
1106
|
}
|
|
1082
1107
|
/**
|
|
1083
|
-
* PROCESS-WIDE single-flight for the
|
|
1108
|
+
* PROCESS-WIDE single-flight for the device-secret mint
|
|
1084
1109
|
* (`POST /session/device/token`).
|
|
1085
1110
|
*
|
|
1086
|
-
* The server
|
|
1087
|
-
*
|
|
1088
|
-
*
|
|
1089
|
-
*
|
|
1090
|
-
*
|
|
1091
|
-
*
|
|
1092
|
-
*
|
|
1093
|
-
*
|
|
1111
|
+
* The server does not rotate the presented `deviceSecret` (it echoes it back
|
|
1112
|
+
* as `nextDeviceSecret`; each holder of a shared DeviceSession has its own
|
|
1113
|
+
* stable credential), so this is no longer what keeps the store's secret
|
|
1114
|
+
* valid. It still collapses concurrent callers onto one request and one
|
|
1115
|
+
* persisted write. Every mint lane (the re-mint handler behind
|
|
1116
|
+
* `refreshAccessToken`, the device-first cold boot, the socket token
|
|
1117
|
+
* transport, the tab-focus reconcile) funnels its `refreshDeviceSecretArm`
|
|
1118
|
+
* call through here, so concurrent callers await the SAME in-flight mint and
|
|
1119
|
+
* all receive its result.
|
|
1094
1120
|
*
|
|
1095
1121
|
* Distinct from {@link tokenRefreshPromise} (which dedups the FULL re-mint
|
|
1096
1122
|
* handler incl. the native shared-key arm + the failure cooldown): this inner
|
|
@@ -1187,7 +1213,9 @@ class HttpService {
|
|
|
1187
1213
|
// Authentication is owned by this SDK instance. A caller cannot replace
|
|
1188
1214
|
// the bearer with a different session or leak one across linked apps.
|
|
1189
1215
|
headers.set('Authorization', authHeader);
|
|
1190
|
-
|
|
1216
|
+
// Never awaited: the PoP is a hint, and waiting on its trace fetch put up
|
|
1217
|
+
// to a second in front of requests.
|
|
1218
|
+
const edgeRegionHeader = (0, edgeRegion_1.peekBrowserEdgeRegionHeader)();
|
|
1191
1219
|
for (const [name, value] of Object.entries(edgeRegionHeader))
|
|
1192
1220
|
headers.set(name, value);
|
|
1193
1221
|
const activityIdHeader = (0, activityId_1.getBrowserActivityIdHeader)();
|
|
@@ -1363,13 +1391,7 @@ class HttpService {
|
|
|
1363
1391
|
* identity-scoped variant `<key> id=*`.
|
|
1364
1392
|
*/
|
|
1365
1393
|
clearCacheEntry(key) {
|
|
1366
|
-
this.
|
|
1367
|
-
const identityVariantPrefix = `${key}${HttpService.CACHE_IDENTITY_DELIM}`;
|
|
1368
|
-
for (const existing of this.cache.keys()) {
|
|
1369
|
-
if (existing.startsWith(identityVariantPrefix)) {
|
|
1370
|
-
this.cache.delete(existing);
|
|
1371
|
-
}
|
|
1372
|
-
}
|
|
1394
|
+
this.invalidateCache({ keys: [key] });
|
|
1373
1395
|
}
|
|
1374
1396
|
/**
|
|
1375
1397
|
* Delete every cache entry whose key starts with `prefix`.
|
|
@@ -1380,14 +1402,40 @@ class HttpService {
|
|
|
1380
1402
|
* deleted entries (for observability in tests).
|
|
1381
1403
|
*/
|
|
1382
1404
|
clearCacheByPrefix(prefix) {
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1405
|
+
return this.invalidateCache({ prefixes: [prefix] });
|
|
1406
|
+
}
|
|
1407
|
+
/**
|
|
1408
|
+
* Invalidate a set of LOGICAL keys (each with every identity-scoped variant,
|
|
1409
|
+
* see `clearCacheEntry`) and key prefixes in ONE pass over the cache. A
|
|
1410
|
+
* mutation touching many resources (a bulk follow) costs one scan, not one
|
|
1411
|
+
* per resource.
|
|
1412
|
+
* @returns Number of entries deleted
|
|
1413
|
+
*/
|
|
1414
|
+
invalidateCache({ keys = [], prefixes = [] }) {
|
|
1415
|
+
if (keys.length === 0 && prefixes.length === 0)
|
|
1416
|
+
return 0;
|
|
1417
|
+
const exact = new Set(keys);
|
|
1418
|
+
const delim = HttpService.CACHE_IDENTITY_DELIM;
|
|
1419
|
+
return this.cache.deleteWhere((stored) => {
|
|
1420
|
+
const cut = stored.lastIndexOf(delim);
|
|
1421
|
+
if (exact.has(cut === -1 ? stored : stored.slice(0, cut)))
|
|
1422
|
+
return true;
|
|
1423
|
+
for (const prefix of prefixes) {
|
|
1424
|
+
if (stored.startsWith(prefix))
|
|
1425
|
+
return true;
|
|
1388
1426
|
}
|
|
1389
|
-
|
|
1390
|
-
|
|
1427
|
+
return false;
|
|
1428
|
+
});
|
|
1429
|
+
}
|
|
1430
|
+
/**
|
|
1431
|
+
* Release this client: its response cache leaves the global cleanup sweep and
|
|
1432
|
+
* is emptied, pending shared calls are forgotten, and the session ends.
|
|
1433
|
+
*/
|
|
1434
|
+
dispose() {
|
|
1435
|
+
(0, cache_1.unregisterCacheFromCleanup)(this.cache);
|
|
1436
|
+
this.cache.clear();
|
|
1437
|
+
this.deduplicator.clear();
|
|
1438
|
+
this.endSession();
|
|
1391
1439
|
}
|
|
1392
1440
|
getCacheStats() {
|
|
1393
1441
|
const cacheStats = this.cache.getStats();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OxyAuthenticationTimeoutError = exports.ServiceLinkedDownloadUrlError = exports.ServiceAssetMetadataError = exports.AssetUrlResolutionError = exports.OxyAuthenticationError = void 0;
|
|
3
|
+
exports.OxyApiError = exports.OxyAuthenticationTimeoutError = exports.ServiceLinkedDownloadUrlError = exports.ServiceAssetMetadataError = exports.AssetUrlResolutionError = exports.OxyAuthenticationError = void 0;
|
|
4
|
+
exports.toOxyApiError = toOxyApiError;
|
|
5
|
+
const errorUtils_1 = require("./utils/errorUtils");
|
|
4
6
|
/**
|
|
5
7
|
* Custom error types for better error handling
|
|
6
8
|
*/
|
|
@@ -120,3 +122,48 @@ class OxyAuthenticationTimeoutError extends OxyAuthenticationError {
|
|
|
120
122
|
}
|
|
121
123
|
}
|
|
122
124
|
exports.OxyAuthenticationTimeoutError = OxyAuthenticationTimeoutError;
|
|
125
|
+
/**
|
|
126
|
+
* The one error every `OxyServices` call rejects with.
|
|
127
|
+
*
|
|
128
|
+
* `status` is the HTTP status (0 when no response arrived: a network failure,
|
|
129
|
+
* a timeout or a cancellation), `code` the API's machine code when it sent one
|
|
130
|
+
* (else a transport code such as `TIMEOUT`, `NETWORK_ERROR`, `CANCELLED`), and
|
|
131
|
+
* `details` the API's structured detail. The original error is `cause`.
|
|
132
|
+
*/
|
|
133
|
+
class OxyApiError extends Error {
|
|
134
|
+
constructor(message, init) {
|
|
135
|
+
super(message);
|
|
136
|
+
this.name = 'OxyApiError';
|
|
137
|
+
this.status = init.status;
|
|
138
|
+
this.code = init.code;
|
|
139
|
+
this.details = init.details;
|
|
140
|
+
this.response = init.response;
|
|
141
|
+
this.cancelled = init.cancelled ?? false;
|
|
142
|
+
this.timeout = init.timeout ?? false;
|
|
143
|
+
if (init.cause !== undefined) {
|
|
144
|
+
this.cause = init.cause;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.OxyApiError = OxyApiError;
|
|
149
|
+
/**
|
|
150
|
+
* Normalise anything a request rejected with into an `OxyApiError`. An error
|
|
151
|
+
* that already is one (or a typed SDK error such as `OxyAuthenticationError`)
|
|
152
|
+
* passes through unchanged.
|
|
153
|
+
*/
|
|
154
|
+
function toOxyApiError(error) {
|
|
155
|
+
if (error instanceof OxyApiError || error instanceof OxyAuthenticationError) {
|
|
156
|
+
return error;
|
|
157
|
+
}
|
|
158
|
+
const api = (0, errorUtils_1.handleHttpError)(error);
|
|
159
|
+
const source = (error && typeof error === 'object' ? error : {});
|
|
160
|
+
return new OxyApiError(api.message?.trim() || 'An unexpected error occurred', {
|
|
161
|
+
status: api.status,
|
|
162
|
+
code: api.code,
|
|
163
|
+
details: api.details,
|
|
164
|
+
response: source.response,
|
|
165
|
+
cancelled: source.cancelled === true,
|
|
166
|
+
timeout: source.timeout === true,
|
|
167
|
+
cause: error,
|
|
168
|
+
});
|
|
169
|
+
}
|