@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
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `@oxy.so/core/session` — the device-first session machinery.
|
|
4
|
+
*
|
|
5
|
+
* The multi-account `SessionClient`, the headless account dialog, the persisted
|
|
6
|
+
* auth-state stores, the token re-mint handler and scheduler, and the cold
|
|
7
|
+
* boot. `@oxy.so/services` builds `OxyProvider` on it; an app that only calls
|
|
8
|
+
* the API with a token it already has never needs it.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.runColdBoot = exports.runSessionColdBoot = exports.TOKEN_REFRESH_LEAD_MS = exports.startTokenRefreshScheduler = exports.installAuthRefreshHandler = exports.createAuthRefreshHandler = exports.refreshDeviceSecretArm = exports.refreshPersistedSession = exports.establishIdentitySession = exports.resolveIdentityPin = exports.IDENTITY_PIN_STORAGE_KEY = exports.identityPinMatches = exports.createMemoryIdentityPinStore = exports.createNativeIdentityPinStore = exports.createWebIdentityPinStore = exports.readLocalDeviceCredential = exports.publishProvenDeviceCredential = exports.normalizeSharedDeviceSessionRead = exports.decideSharedDevicePublish = exports.decideSharedDeviceJoin = exports.createSharedMirroringAuthStateStore = exports.AUTH_STATE_STORAGE_KEY = exports.createMemoryAuthStateStore = exports.createNativeAuthStateStore = exports.createWebAuthStateStore = exports.createAccountDialogController = exports.AccountDialogController = exports.resolveAccountDelegationAccess = exports.canSwitchIntoAccount = exports.isSwitchTargetAccount = exports.showsPrincipalHeaders = exports.buildSwitcherRows = exports.resolveDeviceContext = exports.resolveActiveContext = exports.projectDevicePrincipals = exports.directoryHandle = exports.directoryDisplayName = exports.canActivateContext = exports.accountIdsOf = exports.activeUserOf = exports.activeSessionIdOf = exports.deviceStateToClientSessions = exports.createSessionClient = exports.createSessionClientHost = exports.SessionClient = exports.DeviceManager = void 0;
|
|
12
|
+
// Session code reaches the identity key (identity-bound sessions), so the
|
|
13
|
+
// crypto shim goes first — see `../crypto/polyfill`.
|
|
14
|
+
require("../crypto/polyfill");
|
|
15
|
+
var deviceManager_1 = require("../utils/deviceManager");
|
|
16
|
+
Object.defineProperty(exports, "DeviceManager", { enumerable: true, get: function () { return deviceManager_1.DeviceManager; } });
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Session sync (device-scoped multi-account session client)
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
var SessionClient_1 = require("./SessionClient");
|
|
21
|
+
Object.defineProperty(exports, "SessionClient", { enumerable: true, get: function () { return SessionClient_1.SessionClient; } });
|
|
22
|
+
// Shared SessionClient integration layer: the host adapter, the pure
|
|
23
|
+
// DeviceSessionState projection helpers, and the client factory are defined
|
|
24
|
+
// ONCE here so every `@oxy.so/services` platform variant reuses them instead of
|
|
25
|
+
// duplicating a local copy. Each consumer supplies its own `TokenTransport`
|
|
26
|
+
// (native vs. web mint strategies differ) to `createSessionClient`.
|
|
27
|
+
var sessionClientHost_1 = require("./sessionClientHost");
|
|
28
|
+
Object.defineProperty(exports, "createSessionClientHost", { enumerable: true, get: function () { return sessionClientHost_1.createSessionClientHost; } });
|
|
29
|
+
var createSessionClient_1 = require("./createSessionClient");
|
|
30
|
+
Object.defineProperty(exports, "createSessionClient", { enumerable: true, get: function () { return createSessionClient_1.createSessionClient; } });
|
|
31
|
+
var projectSessionState_1 = require("./projectSessionState");
|
|
32
|
+
Object.defineProperty(exports, "deviceStateToClientSessions", { enumerable: true, get: function () { return projectSessionState_1.deviceStateToClientSessions; } });
|
|
33
|
+
Object.defineProperty(exports, "activeSessionIdOf", { enumerable: true, get: function () { return projectSessionState_1.activeSessionIdOf; } });
|
|
34
|
+
Object.defineProperty(exports, "activeUserOf", { enumerable: true, get: function () { return projectSessionState_1.activeUserOf; } });
|
|
35
|
+
Object.defineProperty(exports, "accountIdsOf", { enumerable: true, get: function () { return projectSessionState_1.accountIdsOf; } });
|
|
36
|
+
// Pure projections over the device DIRECTORY (`GET /session/device/directory`,
|
|
37
|
+
// ADR 0002) — the read model that keeps the actor (the human who authenticated)
|
|
38
|
+
// and the subject (the account being acted as) apart. The flat
|
|
39
|
+
// `DeviceSessionState` collapses them into one row, so it can neither tell
|
|
40
|
+
// "signed in as an org" from "a person operating that org" nor hold two people
|
|
41
|
+
// reaching the same org on one device.
|
|
42
|
+
// `canActivateContext` is the switchability question — `available` alone, never
|
|
43
|
+
// composed with `onDevice`, which is a different fact in both directions.
|
|
44
|
+
// `projectDevicePrincipals` is the switcher's shape: people, each with what
|
|
45
|
+
// they may become. Grouped rather than flat because the same organization
|
|
46
|
+
// reached through two people is TWO rows under two humans, which a list keyed
|
|
47
|
+
// by account cannot say.
|
|
48
|
+
var deviceDirectory_1 = require("./deviceDirectory");
|
|
49
|
+
Object.defineProperty(exports, "canActivateContext", { enumerable: true, get: function () { return deviceDirectory_1.canActivateContext; } });
|
|
50
|
+
Object.defineProperty(exports, "directoryDisplayName", { enumerable: true, get: function () { return deviceDirectory_1.directoryDisplayName; } });
|
|
51
|
+
Object.defineProperty(exports, "directoryHandle", { enumerable: true, get: function () { return deviceDirectory_1.directoryHandle; } });
|
|
52
|
+
Object.defineProperty(exports, "projectDevicePrincipals", { enumerable: true, get: function () { return deviceDirectory_1.projectDevicePrincipals; } });
|
|
53
|
+
Object.defineProperty(exports, "resolveActiveContext", { enumerable: true, get: function () { return deviceDirectory_1.resolveActiveContext; } });
|
|
54
|
+
Object.defineProperty(exports, "resolveDeviceContext", { enumerable: true, get: function () { return deviceDirectory_1.resolveDeviceContext; } });
|
|
55
|
+
// The switcher's RENDER model over that projection — names, handles and avatar
|
|
56
|
+
// URLs resolved once. Shared by `@oxy.so/services`' account dialog and the
|
|
57
|
+
// auth.oxy.so chooser so the two cannot drift, the same reason the flat
|
|
58
|
+
// projection lived here before it.
|
|
59
|
+
var deviceSwitcherRows_1 = require("./deviceSwitcherRows");
|
|
60
|
+
Object.defineProperty(exports, "buildSwitcherRows", { enumerable: true, get: function () { return deviceSwitcherRows_1.buildSwitcherRows; } });
|
|
61
|
+
Object.defineProperty(exports, "showsPrincipalHeaders", { enumerable: true, get: function () { return deviceSwitcherRows_1.showsPrincipalHeaders; } });
|
|
62
|
+
// The switch-target predicates over the account GRAPH — a list of accounts to
|
|
63
|
+
// manage, not the device's list of identities to become (that is the directory
|
|
64
|
+
// above). `isSwitchTargetAccount` is the structural half ("is this kind
|
|
65
|
+
// switchable at all?"); `canSwitchIntoAccount` adds the caller's
|
|
66
|
+
// `account:act_as` permission. Exported so the surfaces that render
|
|
67
|
+
// `AccountNode`s — the Console workspace switcher, managed-accounts rows — ask
|
|
68
|
+
// the SAME questions instead of testing a kind literal.
|
|
69
|
+
var accountSwitchTargets_1 = require("./accountSwitchTargets");
|
|
70
|
+
Object.defineProperty(exports, "isSwitchTargetAccount", { enumerable: true, get: function () { return accountSwitchTargets_1.isSwitchTargetAccount; } });
|
|
71
|
+
Object.defineProperty(exports, "canSwitchIntoAccount", { enumerable: true, get: function () { return accountSwitchTargets_1.canSwitchIntoAccount; } });
|
|
72
|
+
// The service/agent counterpart to the human switch predicates above. Kept on
|
|
73
|
+
// its own semantic seam because `bot` is delegable but never human-switchable.
|
|
74
|
+
var accountDelegationAccess_1 = require("./accountDelegationAccess");
|
|
75
|
+
Object.defineProperty(exports, "resolveAccountDelegationAccess", { enumerable: true, get: function () { return accountDelegationAccess_1.resolveAccountDelegationAccess; } });
|
|
76
|
+
// Headless controller for the unified account dialog. Framework-agnostic
|
|
77
|
+
// state machine + subscribe/getSnapshot store (bind via `useSyncExternalStore`)
|
|
78
|
+
// — sign-in runs through `oxy.auth` (email, password, authenticator, the
|
|
79
|
+
// Commons QR / shared-keychain handoff). Reuses `SessionClient.switchAccount` /
|
|
80
|
+
// `oxy.accounts.actAs` for the uniform switch.
|
|
81
|
+
var accountDialogController_1 = require("./accountDialogController");
|
|
82
|
+
Object.defineProperty(exports, "AccountDialogController", { enumerable: true, get: function () { return accountDialogController_1.AccountDialogController; } });
|
|
83
|
+
Object.defineProperty(exports, "createAccountDialogController", { enumerable: true, get: function () { return accountDialogController_1.createAccountDialogController; } });
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
// Device-first session machinery (zero-cookie transport).
|
|
86
|
+
// Persisted auth-state store, the unified re-mint handler + scheduler, and the
|
|
87
|
+
// cold-boot runner. Built ON the `runColdBoot` primitive + `SessionClient`. The
|
|
88
|
+
// device credential is `deviceId` + `deviceSecret`; the access token is re-minted
|
|
89
|
+
// via `POST /session/device/token`.
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
var authStateStore_1 = require("./authStateStore");
|
|
92
|
+
Object.defineProperty(exports, "createWebAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createWebAuthStateStore; } });
|
|
93
|
+
Object.defineProperty(exports, "createNativeAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createNativeAuthStateStore; } });
|
|
94
|
+
Object.defineProperty(exports, "createMemoryAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createMemoryAuthStateStore; } });
|
|
95
|
+
Object.defineProperty(exports, "AUTH_STATE_STORAGE_KEY", { enumerable: true, get: function () { return authStateStore_1.AUTH_STATE_STORAGE_KEY; } });
|
|
96
|
+
// The shared NATIVE DeviceSession credential — how several official apps on one
|
|
97
|
+
// device end up on ONE `DeviceSession` and therefore one active context. It is an
|
|
98
|
+
// ordinary revocable `deviceId` + `deviceSecret`, deliberately NOT the
|
|
99
|
+
// Commons private identity key: an app that only needs a session must never be
|
|
100
|
+
// handed the key that signs identity approvals.
|
|
101
|
+
var sharedDeviceCredential_1 = require("./sharedDeviceCredential");
|
|
102
|
+
Object.defineProperty(exports, "createSharedMirroringAuthStateStore", { enumerable: true, get: function () { return sharedDeviceCredential_1.createSharedMirroringAuthStateStore; } });
|
|
103
|
+
Object.defineProperty(exports, "decideSharedDeviceJoin", { enumerable: true, get: function () { return sharedDeviceCredential_1.decideSharedDeviceJoin; } });
|
|
104
|
+
Object.defineProperty(exports, "decideSharedDevicePublish", { enumerable: true, get: function () { return sharedDeviceCredential_1.decideSharedDevicePublish; } });
|
|
105
|
+
Object.defineProperty(exports, "normalizeSharedDeviceSessionRead", { enumerable: true, get: function () { return sharedDeviceCredential_1.normalizeSharedDeviceSessionRead; } });
|
|
106
|
+
Object.defineProperty(exports, "publishProvenDeviceCredential", { enumerable: true, get: function () { return sharedDeviceCredential_1.publishProvenDeviceCredential; } });
|
|
107
|
+
Object.defineProperty(exports, "readLocalDeviceCredential", { enumerable: true, get: function () { return sharedDeviceCredential_1.readLocalDeviceCredential; } });
|
|
108
|
+
// Identity-bound sessions (the identity vault). The pin is the durable
|
|
109
|
+
// `{publicKey, accountId}` binding between this device's PRIMARY identity key
|
|
110
|
+
// and the account it authenticates as; it is what keeps such a client from
|
|
111
|
+
// following the device's mutable `activeAccountId`.
|
|
112
|
+
var identityPin_1 = require("./identityPin");
|
|
113
|
+
Object.defineProperty(exports, "createWebIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createWebIdentityPinStore; } });
|
|
114
|
+
Object.defineProperty(exports, "createNativeIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createNativeIdentityPinStore; } });
|
|
115
|
+
Object.defineProperty(exports, "createMemoryIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createMemoryIdentityPinStore; } });
|
|
116
|
+
Object.defineProperty(exports, "identityPinMatches", { enumerable: true, get: function () { return identityPin_1.identityPinMatches; } });
|
|
117
|
+
Object.defineProperty(exports, "IDENTITY_PIN_STORAGE_KEY", { enumerable: true, get: function () { return identityPin_1.IDENTITY_PIN_STORAGE_KEY; } });
|
|
118
|
+
var identitySession_1 = require("./identitySession");
|
|
119
|
+
Object.defineProperty(exports, "resolveIdentityPin", { enumerable: true, get: function () { return identitySession_1.resolveIdentityPin; } });
|
|
120
|
+
Object.defineProperty(exports, "establishIdentitySession", { enumerable: true, get: function () { return identitySession_1.establishIdentitySession; } });
|
|
121
|
+
var refresh_1 = require("./refresh");
|
|
122
|
+
Object.defineProperty(exports, "refreshPersistedSession", { enumerable: true, get: function () { return refresh_1.refreshPersistedSession; } });
|
|
123
|
+
Object.defineProperty(exports, "refreshDeviceSecretArm", { enumerable: true, get: function () { return refresh_1.refreshDeviceSecretArm; } });
|
|
124
|
+
Object.defineProperty(exports, "createAuthRefreshHandler", { enumerable: true, get: function () { return refresh_1.createAuthRefreshHandler; } });
|
|
125
|
+
Object.defineProperty(exports, "installAuthRefreshHandler", { enumerable: true, get: function () { return refresh_1.installAuthRefreshHandler; } });
|
|
126
|
+
Object.defineProperty(exports, "startTokenRefreshScheduler", { enumerable: true, get: function () { return refresh_1.startTokenRefreshScheduler; } });
|
|
127
|
+
Object.defineProperty(exports, "TOKEN_REFRESH_LEAD_MS", { enumerable: true, get: function () { return refresh_1.TOKEN_REFRESH_LEAD_MS; } });
|
|
128
|
+
var sessionColdBoot_1 = require("../boot/sessionColdBoot");
|
|
129
|
+
Object.defineProperty(exports, "runSessionColdBoot", { enumerable: true, get: function () { return sessionColdBoot_1.runSessionColdBoot; } });
|
|
130
|
+
var coldBoot_1 = require("../utils/coldBoot");
|
|
131
|
+
Object.defineProperty(exports, "runColdBoot", { enumerable: true, get: function () { return coldBoot_1.runColdBoot; } });
|
|
@@ -78,8 +78,8 @@ exports.REMINT_AFTER_EXPIRY_MS = 2000;
|
|
|
78
78
|
async function refreshDeviceSecretArm(deps) {
|
|
79
79
|
const { oxy, store } = deps;
|
|
80
80
|
const pin = deps.pin ?? null;
|
|
81
|
-
return oxy.
|
|
82
|
-
const epoch = oxy.
|
|
81
|
+
return oxy.http.runSingleFlightDeviceSecretMint(async () => {
|
|
82
|
+
const epoch = oxy.http.getSessionEpoch();
|
|
83
83
|
const persisted = await store.load();
|
|
84
84
|
if (!persisted?.deviceId || !persisted?.deviceSecret) {
|
|
85
85
|
return { status: 'no-secret' };
|
|
@@ -89,10 +89,10 @@ async function refreshDeviceSecretArm(deps) {
|
|
|
89
89
|
// Unpinned callers pass NO third argument at all, so the account-mode call
|
|
90
90
|
// shape (and therefore the request body) is untouched by this feature.
|
|
91
91
|
mint = pin
|
|
92
|
-
? await oxy.
|
|
92
|
+
? await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret, {
|
|
93
93
|
accountId: pin.accountId,
|
|
94
94
|
})
|
|
95
|
-
: await oxy.
|
|
95
|
+
: await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret);
|
|
96
96
|
}
|
|
97
97
|
catch (error) {
|
|
98
98
|
// 429 keeps the credential like any other transient failure — the secret
|
|
@@ -104,7 +104,7 @@ async function refreshDeviceSecretArm(deps) {
|
|
|
104
104
|
// requests. Telling HttpService lengthens the next cooldown to one attempt
|
|
105
105
|
// per limiter window, which lets the budget drain and the session heal.
|
|
106
106
|
if ((0, errorUtils_1.extractErrorStatus)(error) === 429) {
|
|
107
|
-
oxy.
|
|
107
|
+
oxy.http.noteRefreshRateLimited();
|
|
108
108
|
return { status: 'transient' };
|
|
109
109
|
}
|
|
110
110
|
if ((0, errorUtils_1.extractErrorStatus)(error) === 401) {
|
|
@@ -145,11 +145,11 @@ async function refreshDeviceSecretArm(deps) {
|
|
|
145
145
|
expiresAt: mint.expiresAt,
|
|
146
146
|
...(bound ? { sessionId: bound.sessionId, userId: bound.accountId } : {}),
|
|
147
147
|
};
|
|
148
|
-
if (oxy.
|
|
149
|
-
// Signed out while minting.
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
148
|
+
if (oxy.http.getSessionEpoch() !== epoch) {
|
|
149
|
+
// Signed out while minting. A store that still holds the presented
|
|
150
|
+
// secret takes the server's `nextDeviceSecret` (the token-null lane keeps
|
|
151
|
+
// the store so a reload can restore); a store the sign-out cleared must
|
|
152
|
+
// NOT be refilled. Either way, plant nothing.
|
|
153
153
|
const current = await store.load();
|
|
154
154
|
if (current?.deviceId === persisted.deviceId && current.deviceSecret === persisted.deviceSecret) {
|
|
155
155
|
await store.save(next);
|
|
@@ -162,10 +162,10 @@ async function refreshDeviceSecretArm(deps) {
|
|
|
162
162
|
if (!persistedOk) {
|
|
163
163
|
return { status: 'persist-failed' };
|
|
164
164
|
}
|
|
165
|
-
if (oxy.
|
|
165
|
+
if (oxy.http.getSessionEpoch() !== epoch) {
|
|
166
166
|
return { status: 'session-ended' };
|
|
167
167
|
}
|
|
168
|
-
oxy.
|
|
168
|
+
oxy.session.setAccessToken(mint.accessToken);
|
|
169
169
|
return {
|
|
170
170
|
status: 'ok',
|
|
171
171
|
token: mint.accessToken,
|
|
@@ -202,7 +202,7 @@ async function refreshPersistedSession(deps) {
|
|
|
202
202
|
const identity = deps.identity ?? null;
|
|
203
203
|
// The shared keychain is never an identity-bound client's recovery path.
|
|
204
204
|
const allowSharedKeyFallback = identity ? false : (deps.allowSharedKeyFallback ?? (0, platform_1.isNative)());
|
|
205
|
-
const epoch = oxy.
|
|
205
|
+
const epoch = oxy.http.getSessionEpoch();
|
|
206
206
|
// Resolved per call: a re-established identity session can move the pin, and a
|
|
207
207
|
// replaced/removed local key clears it (in which case arm 1 must NOT mint —
|
|
208
208
|
// an unpinned mint would adopt whatever account the device switched to).
|
|
@@ -231,13 +231,20 @@ async function refreshPersistedSession(deps) {
|
|
|
231
231
|
// 401: secret diverged or no live session. When a key-based arm 2 can still
|
|
232
232
|
// recover (native shared key, or an identity-bound client's own primary
|
|
233
233
|
// key) drop ONLY the secret and keep the deviceId; otherwise (web) the
|
|
234
|
-
// session is over
|
|
234
|
+
// session is over.
|
|
235
235
|
const persisted = await store.load();
|
|
236
236
|
if (allowSharedKeyFallback || identity) {
|
|
237
237
|
if (persisted) {
|
|
238
238
|
await store.save({ ...persisted, deviceSecret: undefined });
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
|
+
else if (arm1.status === 'no-session' && persisted?.deviceId && persisted.deviceSecret) {
|
|
242
|
+
// Web, a credential the server still recognises: this origin stays a
|
|
243
|
+
// holder of the browser's device (ADR 0029 D2) — the next sign-in in any
|
|
244
|
+
// app lands on it, and this app follows without opening the bridge
|
|
245
|
+
// again. Only the session fields go.
|
|
246
|
+
await store.save({ sessionId: '', userId: '', deviceId: persisted.deviceId, deviceSecret: persisted.deviceSecret });
|
|
247
|
+
}
|
|
241
248
|
else {
|
|
242
249
|
await store.clear();
|
|
243
250
|
}
|
|
@@ -256,14 +263,14 @@ async function refreshPersistedSession(deps) {
|
|
|
256
263
|
}
|
|
257
264
|
// Never after a sign-out: the shared keychain holds an identity KEY, not a
|
|
258
265
|
// session, and using it here would sign the user straight back in.
|
|
259
|
-
if (allowSharedKeyFallback && !oxy.
|
|
266
|
+
if (allowSharedKeyFallback && !oxy.http.hasSessionEnded()) {
|
|
260
267
|
try {
|
|
261
268
|
// Planted here, not by the sign-in: a sign-out that lands while the
|
|
262
269
|
// challenge round-trips must win, or the shared keychain signs the user
|
|
263
270
|
// straight back in.
|
|
264
|
-
const session = await oxy.signInWithSharedIdentity({ plantTokens: false });
|
|
271
|
+
const session = await oxy.auth.signInWithSharedIdentity({ plantTokens: false });
|
|
265
272
|
if (session?.accessToken) {
|
|
266
|
-
if (oxy.
|
|
273
|
+
if (oxy.http.getSessionEpoch() !== epoch) {
|
|
267
274
|
return null;
|
|
268
275
|
}
|
|
269
276
|
// Repopulate the fast device-secret lane from the shared-key re-mint.
|
|
@@ -277,10 +284,10 @@ async function refreshPersistedSession(deps) {
|
|
|
277
284
|
expiresAt: session.expiresAt,
|
|
278
285
|
});
|
|
279
286
|
}
|
|
280
|
-
if (oxy.
|
|
287
|
+
if (oxy.http.getSessionEpoch() !== epoch) {
|
|
281
288
|
return null;
|
|
282
289
|
}
|
|
283
|
-
oxy.
|
|
290
|
+
oxy.session.setAccessToken(session.accessToken);
|
|
284
291
|
return session.accessToken;
|
|
285
292
|
}
|
|
286
293
|
}
|
|
@@ -327,9 +334,9 @@ function createAuthRefreshHandler(deps) {
|
|
|
327
334
|
* Returns a disposer that removes it.
|
|
328
335
|
*/
|
|
329
336
|
function installAuthRefreshHandler(deps) {
|
|
330
|
-
deps.oxy.
|
|
337
|
+
deps.oxy.http.setAuthRefreshHandler(createAuthRefreshHandler(deps));
|
|
331
338
|
return () => {
|
|
332
|
-
deps.oxy.
|
|
339
|
+
deps.oxy.http.setAuthRefreshHandler(null);
|
|
333
340
|
};
|
|
334
341
|
}
|
|
335
342
|
/**
|
|
@@ -371,10 +378,10 @@ function startTokenRefreshScheduler(oxy) {
|
|
|
371
378
|
/** Schedule the next re-mint from the current token's expiry (the healthy path). */
|
|
372
379
|
const scheduleFromExpiry = () => {
|
|
373
380
|
clearTimer();
|
|
374
|
-
if (disposed || !oxy.
|
|
381
|
+
if (disposed || !oxy.session.accessToken) {
|
|
375
382
|
return;
|
|
376
383
|
}
|
|
377
|
-
const expSeconds = oxy.
|
|
384
|
+
const expSeconds = oxy.session.accessTokenExpiry;
|
|
378
385
|
if (expSeconds === null) {
|
|
379
386
|
return;
|
|
380
387
|
}
|
|
@@ -382,7 +389,7 @@ function startTokenRefreshScheduler(oxy) {
|
|
|
382
389
|
// The server already answered this token's refresh with this very token:
|
|
383
390
|
// asking again before `exp` only gets it back again. Ask just after expiry,
|
|
384
391
|
// when the server rotates (see REMINT_AFTER_EXPIRY_MS).
|
|
385
|
-
if (untilExpiryMs > 0 && oxy.
|
|
392
|
+
if (untilExpiryMs > 0 && oxy.http.isAwaitingCurrentTokenExpiry?.()) {
|
|
386
393
|
armTimer(untilExpiryMs + exports.REMINT_AFTER_EXPIRY_MS);
|
|
387
394
|
return;
|
|
388
395
|
}
|
|
@@ -394,11 +401,11 @@ function startTokenRefreshScheduler(oxy) {
|
|
|
394
401
|
clearTimer();
|
|
395
402
|
// Another lane (a request-time preflight) already asked, and the server
|
|
396
403
|
// answered with this same token: re-arm for just past expiry instead.
|
|
397
|
-
if (oxy.
|
|
404
|
+
if (oxy.http.isAwaitingCurrentTokenExpiry?.()) {
|
|
398
405
|
scheduleFromExpiry();
|
|
399
406
|
return;
|
|
400
407
|
}
|
|
401
|
-
void oxy.
|
|
408
|
+
void oxy.http.refreshAccessToken('preflight')
|
|
402
409
|
.then((token) => Boolean(token))
|
|
403
410
|
.catch(() => false)
|
|
404
411
|
.then((ok) => {
|
|
@@ -425,10 +432,10 @@ function startTokenRefreshScheduler(oxy) {
|
|
|
425
432
|
scheduleFromExpiry();
|
|
426
433
|
};
|
|
427
434
|
const onFocus = () => {
|
|
428
|
-
if (disposed || !oxy.
|
|
435
|
+
if (disposed || !oxy.session.accessToken) {
|
|
429
436
|
return;
|
|
430
437
|
}
|
|
431
|
-
const expSeconds = oxy.
|
|
438
|
+
const expSeconds = oxy.session.accessTokenExpiry;
|
|
432
439
|
if (expSeconds === null) {
|
|
433
440
|
return;
|
|
434
441
|
}
|
|
@@ -443,8 +450,8 @@ function startTokenRefreshScheduler(oxy) {
|
|
|
443
450
|
// Re-arm only on a token that actually CHANGED. The mint plants the token it
|
|
444
451
|
// returns even when that is the token already held, and treating the repeat
|
|
445
452
|
// as new re-armed from an in-lead-window expiry, i.e. at the 1s floor.
|
|
446
|
-
let lastSeenToken = oxy.
|
|
447
|
-
const unsubscribeTokens = oxy.
|
|
453
|
+
let lastSeenToken = oxy.session.accessToken;
|
|
454
|
+
const unsubscribeTokens = oxy.session.onChange((token) => {
|
|
448
455
|
if (disposed || token === lastSeenToken) {
|
|
449
456
|
return;
|
|
450
457
|
}
|
|
@@ -17,12 +17,12 @@ function createSessionClientHost(oxyServices) {
|
|
|
17
17
|
let currentAccountId = null;
|
|
18
18
|
let deviceCredential = null;
|
|
19
19
|
return {
|
|
20
|
-
makeRequest: (method, url, data, options) => oxyServices.
|
|
21
|
-
getBaseURL: () => oxyServices.
|
|
22
|
-
getAccessToken: () => oxyServices.
|
|
20
|
+
makeRequest: (method, url, data, options) => oxyServices.request(method, url, data, options),
|
|
21
|
+
getBaseURL: () => oxyServices.baseURL,
|
|
22
|
+
getAccessToken: () => oxyServices.session.accessToken,
|
|
23
23
|
getDeviceCredential: () => deviceCredential,
|
|
24
|
-
onTokensChanged: (listener) => oxyServices.
|
|
25
|
-
setTokens: (accessToken) => oxyServices.
|
|
24
|
+
onTokensChanged: (listener) => oxyServices.session.onChange(listener),
|
|
25
|
+
setTokens: (accessToken) => oxyServices.session.setAccessToken(accessToken),
|
|
26
26
|
getCurrentAccountId: () => currentAccountId,
|
|
27
27
|
setCurrentAccountId: (id) => {
|
|
28
28
|
currentAccountId = id;
|
|
@@ -163,8 +163,9 @@ function decideSharedDevicePublish(proven, shared) {
|
|
|
163
163
|
if (shared.credential.deviceSecret === proven.deviceSecret) {
|
|
164
164
|
return { action: 'skip', reason: 'already-current' };
|
|
165
165
|
}
|
|
166
|
-
// Same device, newer secret.
|
|
167
|
-
//
|
|
166
|
+
// Same device, newer secret. Each sign-in issues a new holder credential
|
|
167
|
+
// (the older one stays valid until the device ends with nobody signed
|
|
168
|
+
// in), so the just-proven one is the credential a fresh install should
|
|
168
169
|
// join with.
|
|
169
170
|
return { action: 'publish' };
|
|
170
171
|
}
|
|
@@ -60,7 +60,7 @@ const calculateBackoffInterval = (state) => {
|
|
|
60
60
|
const { consecutiveFailures, baseInterval, maxInterval } = state;
|
|
61
61
|
if (consecutiveFailures === 0)
|
|
62
62
|
return baseInterval;
|
|
63
|
-
const backoffMultiplier = Math.min(
|
|
63
|
+
const backoffMultiplier = Math.min(2 ** (consecutiveFailures - 1), maxInterval / baseInterval);
|
|
64
64
|
return Math.min(baseInterval * backoffMultiplier, maxInterval);
|
|
65
65
|
};
|
|
66
66
|
exports.calculateBackoffInterval = calculateBackoffInterval;
|
|
@@ -173,7 +173,7 @@ const withRetry = async (fn, options = {}) => {
|
|
|
173
173
|
if (attempt === maxRetries || !shouldRetry(error)) {
|
|
174
174
|
throw error;
|
|
175
175
|
}
|
|
176
|
-
const delayMs = Math.min(baseDelay *
|
|
176
|
+
const delayMs = Math.min(baseDelay * 2 ** attempt, maxDelay);
|
|
177
177
|
onRetry?.(error, attempt + 1);
|
|
178
178
|
await (0, exports.delay)(delayMs);
|
|
179
179
|
}
|
|
@@ -13,15 +13,12 @@
|
|
|
13
13
|
* those cached and the account switcher keeps drawing the pre-edit name and
|
|
14
14
|
* picture for the full TTL, against a perfectly healthy server.
|
|
15
15
|
*
|
|
16
|
-
* The
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* alternative — a second hand-written copy of these keys in the other mixin —
|
|
23
|
-
* is the drift that shipped the two stale-profile bugs `identityCacheSweep`
|
|
24
|
-
* documents.
|
|
16
|
+
* The key list lives here, once, and every writer (`users.updateMe`, the
|
|
17
|
+
* `accounts` namespace) reads it — exactly like the identity key list in
|
|
18
|
+
* `identityCacheSweep`, which account writes use for the mirror-image case (an
|
|
19
|
+
* account write staling the identity reads). A second hand-written copy of
|
|
20
|
+
* these keys in another namespace is the drift that shipped the two
|
|
21
|
+
* stale-profile bugs `identityCacheSweep` documents.
|
|
25
22
|
*
|
|
26
23
|
* WHY THE LIST NEEDS A PREFIX AND THE DETAIL DOES NOT
|
|
27
24
|
* --------------------------------------------------
|
|
@@ -71,10 +68,9 @@ function oxyAccountDetailCacheKey(accountId) {
|
|
|
71
68
|
* account in it (create, archive, ownership transfer) has no
|
|
72
69
|
* detail row to name, and clears only the lists.
|
|
73
70
|
*/
|
|
74
|
-
function evictOxyAccountForestCache(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
71
|
+
function evictOxyAccountForestCache(http, accountId) {
|
|
72
|
+
http.invalidateCache({
|
|
73
|
+
keys: accountId ? [exports.OXY_ACCOUNT_LIST_CACHE_KEY, oxyAccountDetailCacheKey(accountId)] : [exports.OXY_ACCOUNT_LIST_CACHE_KEY],
|
|
74
|
+
prefixes: [exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX],
|
|
75
|
+
});
|
|
80
76
|
}
|
|
@@ -1,49 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Retry with exponential backoff and jitter — the policy `HttpService` uses.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.delay = void 0;
|
|
7
|
-
exports.withErrorHandling = withErrorHandling;
|
|
8
|
-
exports.parallelWithErrorHandling = parallelWithErrorHandling;
|
|
9
6
|
exports.retryAsync = retryAsync;
|
|
10
|
-
exports.debounceAsync = debounceAsync;
|
|
11
|
-
exports.throttleAsync = throttleAsync;
|
|
12
|
-
exports.sequentialWithProgress = sequentialWithProgress;
|
|
13
|
-
exports.batchAsync = batchAsync;
|
|
14
|
-
exports.createCancellableAsync = createCancellableAsync;
|
|
15
|
-
exports.withTimeout = withTimeout;
|
|
16
|
-
exports.withLoadingState = withLoadingState;
|
|
17
|
-
exports.retryOnError = retryOnError;
|
|
18
|
-
const logger_1 = require("../logger");
|
|
19
7
|
const errorUtils_1 = require("./errorUtils");
|
|
20
8
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (errorHandler) {
|
|
30
|
-
errorHandler(error);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
logger_1.logger.error(`Error in ${context || 'operation'}`, error instanceof Error ? error : new Error(String(error)), {
|
|
34
|
-
component: 'asyncUtils',
|
|
35
|
-
method: 'withErrorHandling',
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Execute multiple async operations in parallel with error handling
|
|
9
|
+
* Whether an error came from a request hitting its own timeout.
|
|
10
|
+
*
|
|
11
|
+
* A timeout and a caller cancellation both surface from `fetch` as an
|
|
12
|
+
* `AbortError`, so this only recognises one that has already been CLASSIFIED
|
|
13
|
+
* (by `HttpService`, which knows which of its own timers fired). An
|
|
14
|
+
* unclassified abort is treated as a cancellation, which is the safe
|
|
15
|
+
* direction: refusing to retry something that was abandoned costs nothing,
|
|
16
|
+
* while retrying it is the defect this whole option exists to fix.
|
|
43
17
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
18
|
+
function isTimeoutError(error) {
|
|
19
|
+
if (!error || typeof error !== 'object')
|
|
20
|
+
return false;
|
|
21
|
+
const candidate = error;
|
|
22
|
+
return candidate.timeout === true || candidate.code === errorUtils_1.ErrorCodes.TIMEOUT;
|
|
47
23
|
}
|
|
48
24
|
/**
|
|
49
25
|
* Extract an HTTP status code from an error value, tolerating both the
|
|
@@ -68,21 +44,15 @@ function extractHttpStatus(error) {
|
|
|
68
44
|
return undefined;
|
|
69
45
|
}
|
|
70
46
|
/**
|
|
71
|
-
*
|
|
47
|
+
* Retry an async operation with exponential backoff
|
|
72
48
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
49
|
+
* By default, does not retry on 4xx errors (client errors). The default
|
|
50
|
+
* predicate accepts both the axios-style `error.response.status` and the
|
|
51
|
+
* flat `error.status` shape produced by {@link handleHttpError}, so callers
|
|
52
|
+
* never accidentally retry a deterministic client failure.
|
|
53
|
+
*
|
|
54
|
+
* Use the `shouldRetry` callback to customize retry behavior.
|
|
79
55
|
*/
|
|
80
|
-
function isTimeoutError(error) {
|
|
81
|
-
if (!error || typeof error !== 'object')
|
|
82
|
-
return false;
|
|
83
|
-
const candidate = error;
|
|
84
|
-
return candidate.timeout === true || candidate.code === errorUtils_1.ErrorCodes.TIMEOUT;
|
|
85
|
-
}
|
|
86
56
|
async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 1000, shouldRetryArg) {
|
|
87
57
|
// An options-object overload rather than a fifth positional parameter:
|
|
88
58
|
// `retryOnError` below and other in-tree callers pass positionally, and a
|
|
@@ -139,7 +109,7 @@ async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 100
|
|
|
139
109
|
break;
|
|
140
110
|
}
|
|
141
111
|
// Calculate delay with exponential backoff and jitter
|
|
142
|
-
const delay = baseDelay *
|
|
112
|
+
const delay = baseDelay * 2 ** attempt + Math.random() * 1000;
|
|
143
113
|
// Nothing may start, or even sleep, past the deadline — otherwise the
|
|
144
114
|
// budget bounds the attempts but not the wall clock the caller feels.
|
|
145
115
|
if (deadline !== undefined && Date.now() + delay >= deadline) {
|
|
@@ -150,114 +120,3 @@ async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 100
|
|
|
150
120
|
}
|
|
151
121
|
throw lastError;
|
|
152
122
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Debounce async function calls
|
|
155
|
-
*/
|
|
156
|
-
function debounceAsync(func, delay) {
|
|
157
|
-
let timeoutId;
|
|
158
|
-
return (...args) => {
|
|
159
|
-
return new Promise((resolve, reject) => {
|
|
160
|
-
clearTimeout(timeoutId);
|
|
161
|
-
timeoutId = setTimeout(async () => {
|
|
162
|
-
try {
|
|
163
|
-
const result = await func(...args);
|
|
164
|
-
resolve(result);
|
|
165
|
-
}
|
|
166
|
-
catch (error) {
|
|
167
|
-
reject(error);
|
|
168
|
-
}
|
|
169
|
-
}, delay);
|
|
170
|
-
});
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Throttle async function calls
|
|
175
|
-
*/
|
|
176
|
-
function throttleAsync(func, limit, interval) {
|
|
177
|
-
let inThrottle = false;
|
|
178
|
-
let lastPromise = null;
|
|
179
|
-
return (...args) => {
|
|
180
|
-
if (inThrottle) {
|
|
181
|
-
return lastPromise;
|
|
182
|
-
}
|
|
183
|
-
inThrottle = true;
|
|
184
|
-
lastPromise = func(...args);
|
|
185
|
-
setTimeout(() => {
|
|
186
|
-
inThrottle = false;
|
|
187
|
-
}, interval);
|
|
188
|
-
return lastPromise;
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Execute async operations sequentially with progress tracking
|
|
193
|
-
*/
|
|
194
|
-
async function sequentialWithProgress(operations, onProgress) {
|
|
195
|
-
const results = [];
|
|
196
|
-
for (let i = 0; i < operations.length; i++) {
|
|
197
|
-
const result = await operations[i]();
|
|
198
|
-
results.push(result);
|
|
199
|
-
onProgress?.(i + 1, operations.length);
|
|
200
|
-
}
|
|
201
|
-
return results;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Batch async operations
|
|
205
|
-
*/
|
|
206
|
-
async function batchAsync(items, batchSize, processor) {
|
|
207
|
-
for (let i = 0; i < items.length; i += batchSize) {
|
|
208
|
-
const batch = items.slice(i, i + batchSize);
|
|
209
|
-
await processor(batch);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Create a cancellable async operation
|
|
214
|
-
*/
|
|
215
|
-
function createCancellableAsync(operation) {
|
|
216
|
-
let abortController = null;
|
|
217
|
-
return {
|
|
218
|
-
execute: async () => {
|
|
219
|
-
abortController = new AbortController();
|
|
220
|
-
return await operation(abortController.signal);
|
|
221
|
-
},
|
|
222
|
-
cancel: () => {
|
|
223
|
-
abortController?.abort();
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Timeout wrapper for async operations
|
|
229
|
-
*/
|
|
230
|
-
async function withTimeout(operation, timeoutMs, timeoutMessage) {
|
|
231
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
232
|
-
setTimeout(() => {
|
|
233
|
-
reject(new Error(timeoutMessage || `Operation timed out after ${timeoutMs}ms`));
|
|
234
|
-
}, timeoutMs);
|
|
235
|
-
});
|
|
236
|
-
return Promise.race([operation, timeoutPromise]);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Execute async operation with loading state
|
|
240
|
-
*/
|
|
241
|
-
async function withLoadingState(operation, setLoading) {
|
|
242
|
-
setLoading(true);
|
|
243
|
-
try {
|
|
244
|
-
return await operation();
|
|
245
|
-
}
|
|
246
|
-
finally {
|
|
247
|
-
setLoading(false);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Create a promise that resolves after a delay
|
|
252
|
-
*/
|
|
253
|
-
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
254
|
-
exports.delay = delay;
|
|
255
|
-
/**
|
|
256
|
-
* Execute async operation with retry on specific errors
|
|
257
|
-
*/
|
|
258
|
-
async function retryOnError(operation, retryableErrors, maxRetries = 3) {
|
|
259
|
-
return retryAsync(operation, maxRetries, 1000, (error) => {
|
|
260
|
-
const errorCode = error?.code || error?.status || error?.message;
|
|
261
|
-
return retryableErrors.includes(errorCode);
|
|
262
|
-
});
|
|
263
|
-
}
|