@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,766 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `oxy.auth` — signing in, signing up, and the account's credentials.
|
|
3
|
+
*
|
|
4
|
+
* - Key sign-in: {@link AuthApi.requestChallenge} → sign → {@link AuthApi.verifyChallenge}.
|
|
5
|
+
* - Email: `auth.email` — a 6-digit code and a one-use link; also the code that
|
|
6
|
+
* confirms an email for sign-up.
|
|
7
|
+
* - Password and authenticator: `auth.password`, `auth.totp`; a first factor on
|
|
8
|
+
* an account with an authenticator answers the second-factor step, finished
|
|
9
|
+
* with {@link AuthApi.completeSecondFactor}.
|
|
10
|
+
* - OAuth (a relying party's PKCE code exchange): `auth.oauth`.
|
|
11
|
+
* - "Sign in with Oxy" handoff to Commons (QR, push, deep link): `auth.commons`.
|
|
12
|
+
*
|
|
13
|
+
* Every call that can end in a session attaches THIS client's device proof
|
|
14
|
+
* (`oxy.session.readDeviceProof()`, ADR 0029 D2) unless the caller passes
|
|
15
|
+
* `device` itself (`null` opts out), and a session result plants its access
|
|
16
|
+
* token on `oxy.session`.
|
|
17
|
+
*/
|
|
18
|
+
import type { User } from '../models/interfaces';
|
|
19
|
+
import type { CommonsDenyReason, DeviceProof, LoginResult } from '@oxy.so/contracts';
|
|
20
|
+
import { type EmailSignInPending, type EmailSignInStartResponse, type EmailVerificationConfirmResponse, type EmailVerificationStartRequest, type EmailVerificationStartResponse, type ReauthAction, type ReauthProof, type SignInMethods, type SignInStepResult, type TotpEnrollResponse } from '@oxy.so/contracts';
|
|
21
|
+
import type { OxyContext } from '../client/context';
|
|
22
|
+
import type { SessionLoginResponse } from '../models/session';
|
|
23
|
+
import type { PublicApplication } from './apps';
|
|
24
|
+
export interface ChallengeResponse {
|
|
25
|
+
challenge: string;
|
|
26
|
+
expiresAt: string;
|
|
27
|
+
}
|
|
28
|
+
export interface RegistrationRequest {
|
|
29
|
+
publicKey: string;
|
|
30
|
+
username: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
signature: string;
|
|
33
|
+
timestamp: number;
|
|
34
|
+
}
|
|
35
|
+
export interface ChallengeVerifyRequest {
|
|
36
|
+
publicKey: string;
|
|
37
|
+
challenge: string;
|
|
38
|
+
signature: string;
|
|
39
|
+
timestamp: number;
|
|
40
|
+
deviceName?: string;
|
|
41
|
+
deviceFingerprint?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface PublicKeyCheckResponse {
|
|
44
|
+
registered: boolean;
|
|
45
|
+
message: string;
|
|
46
|
+
}
|
|
47
|
+
/** OpenID Connect userinfo claims returned by `GET /auth/oauth/userinfo`. */
|
|
48
|
+
export interface OAuthUserInfoResponse {
|
|
49
|
+
sub: string;
|
|
50
|
+
preferred_username?: string;
|
|
51
|
+
name?: string;
|
|
52
|
+
picture?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The session an OAuth authorization-code exchange yields.
|
|
56
|
+
*
|
|
57
|
+
* Deliberately NOT `LoginSessionResult`. That type mirrors the API's
|
|
58
|
+
* `buildSessionAuthResponse`, which every FIRST-PARTY sign-in lane emits, and it
|
|
59
|
+
* requires `deviceId` because those lanes always join the origin's DeviceSession.
|
|
60
|
+
* `POST /auth/oauth/token` is the RFC 6749 token endpoint and serves third
|
|
61
|
+
* parties, whose grant is deliberately ISOLATED: an untrusted application must be
|
|
62
|
+
* able to receive a session carrying NO DeviceSession credential at all.
|
|
63
|
+
*
|
|
64
|
+
* Both device fields are therefore optional here, and a response omitting them is
|
|
65
|
+
* a well-formed device-less grant rather than a malformed payload. What that
|
|
66
|
+
* costs the session is spelled out on `auth.oauth.exchangeCode` below.
|
|
67
|
+
*/
|
|
68
|
+
export interface OAuthTokenExchangeResult {
|
|
69
|
+
sessionId: string;
|
|
70
|
+
/** ISO-8601 expiry of {@link accessToken}, derived from RFC 6749 `expires_in`. */
|
|
71
|
+
expiresAt: string;
|
|
72
|
+
accessToken?: string;
|
|
73
|
+
/**
|
|
74
|
+
* The DeviceSession this grant joined, when the server issued one. ABSENT for
|
|
75
|
+
* an isolated third-party grant — never assume a string.
|
|
76
|
+
*/
|
|
77
|
+
deviceId?: string;
|
|
78
|
+
/**
|
|
79
|
+
* The zero-cookie mint credential for {@link deviceId}. Present only alongside
|
|
80
|
+
* it; absent for an isolated third-party grant.
|
|
81
|
+
*/
|
|
82
|
+
deviceSecret?: string;
|
|
83
|
+
user: {
|
|
84
|
+
id: string;
|
|
85
|
+
username?: string;
|
|
86
|
+
avatar?: string;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* How a "Sign in with Oxy" request finalizes once the approver authorizes it.
|
|
91
|
+
*
|
|
92
|
+
* ONE request (`AuthSession`) serves every delivery surface — popup, push, QR,
|
|
93
|
+
* deep link — so the purpose describes the FINALIZATION, never the transport:
|
|
94
|
+
*
|
|
95
|
+
* - `device_sign_in` — the classic device flow. The initiator exchanges its
|
|
96
|
+
* secret `sessionToken` for the first access token via `auth.claimSession`.
|
|
97
|
+
* - `oauth_authorization` — the request additionally carries an OAuth binding
|
|
98
|
+
* ({@link CommonsOAuthContext}), so it finalizes into a single-use
|
|
99
|
+
* authorization CODE via {@link AuthCommonsApi.finalizeOAuth}.
|
|
100
|
+
* The caller still performs the PKCE token exchange itself.
|
|
101
|
+
*/
|
|
102
|
+
export type CommonsSignInPurpose = 'device_sign_in' | 'oauth_authorization';
|
|
103
|
+
/**
|
|
104
|
+
* OAuth binding attached to a "Sign in with Oxy" request so a single
|
|
105
|
+
* `AuthSession` can finalize into a standard OAuth authorization code instead of
|
|
106
|
+
* a device-flow session.
|
|
107
|
+
*
|
|
108
|
+
* Only the minimum request binding is carried here — everything else (the app's
|
|
109
|
+
* name, icon, registered redirect URIs, trust flags) is owned server-side by the
|
|
110
|
+
* `Application` the `clientId` resolves to and is never client-supplied.
|
|
111
|
+
*
|
|
112
|
+
* The PKCE `codeVerifier` NEVER appears here: only its S256 `codeChallenge`
|
|
113
|
+
* crosses the wire, exactly as in the redirect flow. The RP-owned OAuth `state`
|
|
114
|
+
* also stays with the relying party, which validates it locally.
|
|
115
|
+
*/
|
|
116
|
+
export interface CommonsOAuthContext {
|
|
117
|
+
/** Exact registered redirect URI the authorization code will be returned to. */
|
|
118
|
+
redirectUri: string;
|
|
119
|
+
/** PKCE `BASE64URL(SHA-256(codeVerifier))` (RFC 7636 §4.2); the verifier stays client-side. */
|
|
120
|
+
codeChallenge: string;
|
|
121
|
+
/** PKCE transformation method. Always `S256` — `plain` is not accepted. */
|
|
122
|
+
codeChallengeMethod: 'S256';
|
|
123
|
+
/** Space-delimited OAuth scope string; the server normalizes and validates it. */
|
|
124
|
+
scope?: string;
|
|
125
|
+
/**
|
|
126
|
+
* Optional delegated account the application will act AS (an organization or
|
|
127
|
+
* project the identity is a member of). The identity approving the request
|
|
128
|
+
* does not change; the server verifies the identity's permission to act as
|
|
129
|
+
* this account before finalizing.
|
|
130
|
+
*/
|
|
131
|
+
subjectAccountId?: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handle returned by {@link AuthCommonsApi.start} for a
|
|
135
|
+
* relying-party app initiating a "Sign in with Oxy" flow.
|
|
136
|
+
*
|
|
137
|
+
* `sessionToken` is the SECRET, high-entropy device-flow credential — it stays
|
|
138
|
+
* on the initiating client, is exchanged once via `auth.claimSession` (device
|
|
139
|
+
* sign-in) or {@link AuthCommonsApi.finalizeOAuth} (OAuth), and is
|
|
140
|
+
* NEVER placed in the QR/deep-link. `authorizeCode` is the PUBLIC handle carried
|
|
141
|
+
* in `qrPayload`; the approver (Commons) resolves it via
|
|
142
|
+
* {@link AuthCommonsApi.approvalInfo}.
|
|
143
|
+
*/
|
|
144
|
+
export interface CommonsSignInHandle {
|
|
145
|
+
/** Secret device-flow token (held by the initiator; exchanged via `auth.claimSession`). */
|
|
146
|
+
sessionToken: string;
|
|
147
|
+
/** Public, single-use authorize code carried in the QR / deep-link. */
|
|
148
|
+
authorizeCode: string;
|
|
149
|
+
/** Ready-to-render deep-link / universal-link string (`oxycommons://approve?...`). */
|
|
150
|
+
qrPayload: string;
|
|
151
|
+
/** Server-authoritative expiry (epoch milliseconds). */
|
|
152
|
+
expiresAt: number;
|
|
153
|
+
/** Session lifecycle status as reported by the server (e.g. `'pending'`). */
|
|
154
|
+
status: string;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Poll result for a "Sign in with Oxy" device-flow session
|
|
158
|
+
* (`GET /auth/session/status`).
|
|
159
|
+
*
|
|
160
|
+
* The authoritative state machine stays small — `pending → authorized →
|
|
161
|
+
* consumed`, plus `cancelled` / `expired` — and lives in `status`. Delivery
|
|
162
|
+
* PROGRESS (`pushSentAt`, `openedAt`) is carried as timestamps beside it, never
|
|
163
|
+
* as competing statuses, so a progress signal can never be mistaken for an
|
|
164
|
+
* authorization.
|
|
165
|
+
*/
|
|
166
|
+
export interface CommonsSignInStatus {
|
|
167
|
+
/** True once an approver has authorized the session. */
|
|
168
|
+
authorized: boolean;
|
|
169
|
+
/** The authorized session id (present once `authorized` for device sign-in). */
|
|
170
|
+
sessionId?: string;
|
|
171
|
+
/** The approving identity's public key (present once `authorized`). */
|
|
172
|
+
publicKey?: string;
|
|
173
|
+
/** Lifecycle status (`'pending'` | `'authorized'` | `'cancelled'` | `'expired'`). */
|
|
174
|
+
status?: string;
|
|
175
|
+
/**
|
|
176
|
+
* How this request finalizes. Unrecognized/missing values degrade to
|
|
177
|
+
* `device_sign_in` so an older API never misroutes an OAuth finalize.
|
|
178
|
+
*/
|
|
179
|
+
purpose?: CommonsSignInPurpose;
|
|
180
|
+
/**
|
|
181
|
+
* ISO-8601 timestamp of when the request was pushed to a known Commons
|
|
182
|
+
* installation, or `null` when no push has been sent (including on a server
|
|
183
|
+
* that predates delivery progress). Progress only — it never implies the push
|
|
184
|
+
* was received, opened, or approved.
|
|
185
|
+
*/
|
|
186
|
+
pushSentAt: string | null;
|
|
187
|
+
/**
|
|
188
|
+
* ISO-8601 timestamp of when the approval route was opened in Commons, or
|
|
189
|
+
* `null` when it has not been opened. Reported by the approver via
|
|
190
|
+
* {@link AuthCommonsApi.markOpened}; it is an
|
|
191
|
+
* un-authenticated progress hint used only to advance the waiting UI, and is
|
|
192
|
+
* NEVER evidence that the request was approved.
|
|
193
|
+
*/
|
|
194
|
+
openedAt: string | null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Outcome of asking Oxy to deliver a pending sign-in request to the identity's
|
|
198
|
+
* known Commons installations (`POST /auth/session/deliver/:authorizeCode`).
|
|
199
|
+
*
|
|
200
|
+
* `targets: 0` is a NORMAL outcome, not a failure: it simply means no capable
|
|
201
|
+
* Commons installation is registered, so push is not a usable route and the
|
|
202
|
+
* caller shows the QR instead. Feed `targets` into `selectCommonsDelivery`
|
|
203
|
+
* (`utils/commonsDelivery`) rather than branching on it ad hoc.
|
|
204
|
+
*/
|
|
205
|
+
export interface CommonsDeliveryResult {
|
|
206
|
+
/** Whether the server dispatched the request to at least one installation. */
|
|
207
|
+
delivered: boolean;
|
|
208
|
+
/** How many eligible Commons installations it was dispatched to (`0` is normal). */
|
|
209
|
+
targets: number;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The account an application will act AS once the request is approved, when the
|
|
213
|
+
* request delegates to an organization/project rather than the approver's own
|
|
214
|
+
* personal account. Resolved and sanitized server-side from the request's
|
|
215
|
+
* `subjectAccountId`, so it is safe to display in the approval UI.
|
|
216
|
+
*
|
|
217
|
+
* The identity approving stays the identity: Commons renders this as a distinct
|
|
218
|
+
* "will act as" line, never as a change of who is signing.
|
|
219
|
+
*/
|
|
220
|
+
export interface CommonsApprovalSubjectAccount {
|
|
221
|
+
/** The delegated account's id. */
|
|
222
|
+
id: string;
|
|
223
|
+
/** The delegated account's handle. */
|
|
224
|
+
username: string;
|
|
225
|
+
/** Optional human-readable name; absent when the account has no real name. */
|
|
226
|
+
displayName?: string;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Server-resolved approval context shown by the approver (Commons) before
|
|
230
|
+
* authorizing — the TRUSTED identity of the requesting app, resolved from the
|
|
231
|
+
* `authorizeCode` server-side (never from the QR string).
|
|
232
|
+
*/
|
|
233
|
+
export interface CommonsApprovalInfo {
|
|
234
|
+
/** Sanitized, display-safe identity of the requesting application. */
|
|
235
|
+
application: PublicApplication | null;
|
|
236
|
+
/** OAuth scopes the application is requesting. */
|
|
237
|
+
scopes: string[];
|
|
238
|
+
/** The origin the session is bound to (the RP web origin), when applicable. */
|
|
239
|
+
boundOrigin?: string;
|
|
240
|
+
/**
|
|
241
|
+
* Server-authoritative anti-phishing flag: `true` only when this device-flow
|
|
242
|
+
* sign-in was started from a verified, registered origin of a trusted app.
|
|
243
|
+
* The approver (Commons) shows a warning when this is `false`. Always present
|
|
244
|
+
* — a missing/non-boolean server value is coerced to `false` (fail-safe to
|
|
245
|
+
* "not verified") by {@link AuthCommonsApi.approvalInfo}.
|
|
246
|
+
*/
|
|
247
|
+
originVerified: boolean;
|
|
248
|
+
/**
|
|
249
|
+
* COARSE, display-only label of the client that STARTED the request
|
|
250
|
+
* (`"Chrome on Windows"`), resolved server-side from the requesting browser —
|
|
251
|
+
* NEVER from the QR payload. Render it verbatim as a secondary line under the
|
|
252
|
+
* origin; it is the whole descriptor the platform has (no raw User-Agent, no
|
|
253
|
+
* IP, no location is ever collected for it).
|
|
254
|
+
*
|
|
255
|
+
* `null` whenever the server has no browser context to describe: native
|
|
256
|
+
* requesters, unidentifiable User-Agents, and any API that predates the field.
|
|
257
|
+
* Omit the line entirely in that case — never substitute a guess.
|
|
258
|
+
*/
|
|
259
|
+
requesterLabel: string | null;
|
|
260
|
+
/**
|
|
261
|
+
* How this request finalizes. Always present — an unrecognized or missing
|
|
262
|
+
* server value degrades to `'device_sign_in'`, the behaviour every server has
|
|
263
|
+
* always had, so an older API never makes the approver believe it is granting
|
|
264
|
+
* an OAuth authorization.
|
|
265
|
+
*/
|
|
266
|
+
purpose: CommonsSignInPurpose;
|
|
267
|
+
/**
|
|
268
|
+
* The delegated account the application will act as, or `null` when the
|
|
269
|
+
* request is for the approver's own account. Always present — a missing or
|
|
270
|
+
* malformed server value degrades to `null` (fail-safe to "no delegation"),
|
|
271
|
+
* so a partial payload can never imply a broader grant than was requested.
|
|
272
|
+
*/
|
|
273
|
+
subjectAccount: CommonsApprovalSubjectAccount | null;
|
|
274
|
+
/** Server-authoritative expiry (epoch ms or ISO-8601 string from the API). */
|
|
275
|
+
expiresAt: number | string;
|
|
276
|
+
/** Session lifecycle status. */
|
|
277
|
+
status: string;
|
|
278
|
+
}
|
|
279
|
+
/** Result of approving / denying a "Sign in with Oxy" request. */
|
|
280
|
+
export interface CommonsSignInActionResult {
|
|
281
|
+
success: boolean;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Result of finalizing an approved, OAuth-bound "Sign in with Oxy" request.
|
|
285
|
+
*
|
|
286
|
+
* This is an authorization CODE, not a session: the caller still performs the
|
|
287
|
+
* standard PKCE token exchange (`auth.oauth.exchangeCode`) with the `codeVerifier` it
|
|
288
|
+
* has held all along. No access token, refresh token, or device secret is ever
|
|
289
|
+
* produced by finalization.
|
|
290
|
+
*/
|
|
291
|
+
export interface CommonsOAuthFinalizeResult {
|
|
292
|
+
/** Single-use OAuth authorization code. */
|
|
293
|
+
code: string;
|
|
294
|
+
/** The exact registered redirect URI the request was bound to. */
|
|
295
|
+
redirectUri: string;
|
|
296
|
+
/** Lifetime of the authorization code, in seconds. */
|
|
297
|
+
expiresIn: number;
|
|
298
|
+
}
|
|
299
|
+
/** The device-session fields a sign-in may carry. */
|
|
300
|
+
export interface SignInDeviceOptions {
|
|
301
|
+
deviceName?: string;
|
|
302
|
+
deviceFingerprint?: string;
|
|
303
|
+
/** The device the session joins; defaults to the one this client holds. `null` opts out. */
|
|
304
|
+
device?: DeviceProof | null;
|
|
305
|
+
}
|
|
306
|
+
/** The session a device-flow claim yields. */
|
|
307
|
+
export interface ClaimedSession {
|
|
308
|
+
accessToken: string;
|
|
309
|
+
sessionId: string;
|
|
310
|
+
deviceId: string;
|
|
311
|
+
expiresAt: string;
|
|
312
|
+
user: User;
|
|
313
|
+
deviceSecret?: string;
|
|
314
|
+
}
|
|
315
|
+
/** `oxy.auth.email` — email sign-in (code or link) and email confirmation codes. */
|
|
316
|
+
export declare class AuthEmailApi {
|
|
317
|
+
private readonly ctx;
|
|
318
|
+
constructor(ctx: OxyContext);
|
|
319
|
+
/**
|
|
320
|
+
* Send a 6-digit code to the email of a new account
|
|
321
|
+
* (`purpose: 'signup'`). The answer is the same whether or not the address
|
|
322
|
+
* already has an account; nothing is revealed about who has one.
|
|
323
|
+
*/
|
|
324
|
+
startVerification(request: EmailVerificationStartRequest): Promise<EmailVerificationStartResponse>;
|
|
325
|
+
/**
|
|
326
|
+
* Confirm the code {@link AuthEmailApi.startVerification} sent. Resolves to a
|
|
327
|
+
* short-lived one-use ticket, which a sign-up passes (with the email) to
|
|
328
|
+
* {@link AuthApi.signUp}.
|
|
329
|
+
*/
|
|
330
|
+
confirmVerification(verificationId: string, code: string): Promise<EmailVerificationConfirmResponse>;
|
|
331
|
+
/**
|
|
332
|
+
* Send the sign-in email (a code and a link) for a username or email. The
|
|
333
|
+
* answer is the same whether or not the account exists. Keep
|
|
334
|
+
* `requestSecret` in memory only.
|
|
335
|
+
*/
|
|
336
|
+
start(identifier: string, options?: {
|
|
337
|
+
device?: DeviceProof | null;
|
|
338
|
+
}): Promise<EmailSignInStartResponse>;
|
|
339
|
+
/**
|
|
340
|
+
* The code from the email → a session, or the second-factor step. The code
|
|
341
|
+
* is 6 digits, or the 10-character long code (`XXXXX-XXXXX`) an account
|
|
342
|
+
* gets after too many guesses in a day — accept both in one field and pass
|
|
343
|
+
* it as typed.
|
|
344
|
+
*/
|
|
345
|
+
confirm(request: {
|
|
346
|
+
requestId: string;
|
|
347
|
+
requestSecret: string;
|
|
348
|
+
code: string;
|
|
349
|
+
} & SignInDeviceOptions): Promise<SignInStepResult>;
|
|
350
|
+
/**
|
|
351
|
+
* Whether the email's link was opened in this browser: `{ status: 'pending' }`
|
|
352
|
+
* until it was, then a session (or the second-factor step). Poll it.
|
|
353
|
+
*/
|
|
354
|
+
collect(request: {
|
|
355
|
+
requestId: string;
|
|
356
|
+
requestSecret: string;
|
|
357
|
+
} & SignInDeviceOptions): Promise<SignInStepResult | EmailSignInPending>;
|
|
358
|
+
/**
|
|
359
|
+
* auth.oxy.so's link page: approve the request with THIS client's device
|
|
360
|
+
* proof. It approves only in the browser that asked, and never returns a
|
|
361
|
+
* session here — the app's dialog collects it.
|
|
362
|
+
*/
|
|
363
|
+
approveLink(token: string, device?: DeviceProof): Promise<{
|
|
364
|
+
approved: true;
|
|
365
|
+
}>;
|
|
366
|
+
}
|
|
367
|
+
/** `oxy.auth.password` — password sign-in and setting the password. */
|
|
368
|
+
export declare class AuthPasswordApi {
|
|
369
|
+
private readonly ctx;
|
|
370
|
+
constructor(ctx: OxyContext);
|
|
371
|
+
signIn(request: {
|
|
372
|
+
identifier: string;
|
|
373
|
+
password: string;
|
|
374
|
+
} & SignInDeviceOptions): Promise<SignInStepResult>;
|
|
375
|
+
set(request: {
|
|
376
|
+
newPassword: string;
|
|
377
|
+
reauth: ReauthProof;
|
|
378
|
+
revokeOtherSessions?: boolean;
|
|
379
|
+
}): Promise<{
|
|
380
|
+
success: true;
|
|
381
|
+
}>;
|
|
382
|
+
}
|
|
383
|
+
/** `oxy.auth.totp` — the account’s authenticator app. */
|
|
384
|
+
export declare class AuthTotpApi {
|
|
385
|
+
private readonly ctx;
|
|
386
|
+
constructor(ctx: OxyContext);
|
|
387
|
+
enroll(): Promise<TotpEnrollResponse>;
|
|
388
|
+
confirm(code: string, reauth: ReauthProof): Promise<string[]>;
|
|
389
|
+
disable(reauth: ReauthProof): Promise<{
|
|
390
|
+
success: true;
|
|
391
|
+
}>;
|
|
392
|
+
regenerateBackupCodes(reauth: ReauthProof): Promise<string[]>;
|
|
393
|
+
}
|
|
394
|
+
/** `oxy.auth.oauth` — a relying party’s OAuth authorization-code exchange. */
|
|
395
|
+
export declare class AuthOAuthApi {
|
|
396
|
+
private readonly ctx;
|
|
397
|
+
constructor(ctx: OxyContext);
|
|
398
|
+
/**
|
|
399
|
+
* Exchange an OAuth authorization code (returned to the RP redirect URI
|
|
400
|
+
* after sign-in at auth.oxy.so) for a device-first session.
|
|
401
|
+
* Public first-party clients use PKCE (`codeVerifier`); the access token is
|
|
402
|
+
* planted immediately on success.
|
|
403
|
+
*
|
|
404
|
+
* Speaks the standard RFC 6749 §4.1.3 token request — a form-urlencoded
|
|
405
|
+
* body with snake_case parameters and `grant_type=authorization_code` — and
|
|
406
|
+
* reads the flat §5.1 response. The camelCase JSON request and `{ data }`
|
|
407
|
+
* response this method used before were an Oxy invention no OAuth library
|
|
408
|
+
* could interoperate with; the endpoint no longer accepts them. The method's
|
|
409
|
+
* OWN signature is unchanged, so callers are unaffected.
|
|
410
|
+
*
|
|
411
|
+
* `deviceId` + `deviceSecret` are OPTIONAL and their absence is a valid
|
|
412
|
+
* outcome, not an error. A third-party grant is meant to be isolated from the
|
|
413
|
+
* browser's shared DeviceSession, so the token endpoint must be free to return
|
|
414
|
+
* no device credential at all — the guard that used to require the pair made
|
|
415
|
+
* that omission unshippable, since it turned every third-party sign-in through
|
|
416
|
+
* the SDK into a silent `exchange-failed`.
|
|
417
|
+
*
|
|
418
|
+
* The cost is real and deliberate: a DEVICE-LESS session cannot use the
|
|
419
|
+
* zero-cookie mint lane (`POST /session/device/token`), because that lane's
|
|
420
|
+
* whole proof is possession of a `deviceSecret`. Its lifetime is therefore the
|
|
421
|
+
* access token itself — nothing persists a restore credential, the cold boot's
|
|
422
|
+
* `device-secret-mint` step reports `no-secret` and skips, and the refresh
|
|
423
|
+
* scheduler has nothing to re-mint from. When the token expires the session
|
|
424
|
+
* ends LOUDLY: the 401 lane clears the tokens and the provider resolves signed
|
|
425
|
+
* out, so the app can run the OAuth flow again. It never degrades into a
|
|
426
|
+
* session that looks alive and cannot refresh.
|
|
427
|
+
*/
|
|
428
|
+
exchangeCode(params: {
|
|
429
|
+
code: string;
|
|
430
|
+
clientId: string;
|
|
431
|
+
redirectUri: string;
|
|
432
|
+
codeVerifier: string;
|
|
433
|
+
}): Promise<OAuthTokenExchangeResult>;
|
|
434
|
+
/**
|
|
435
|
+
* Fetch OpenID Connect userinfo for the current bearer (`GET /auth/oauth/userinfo`).
|
|
436
|
+
* The response is a flat JSON document — no `{ data }` wrapper.
|
|
437
|
+
*/
|
|
438
|
+
userInfo(): Promise<OAuthUserInfoResponse>;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* `oxy.auth.commons` — "Sign in with Oxy": a relying party hands a sign-in to
|
|
442
|
+
* Commons (QR, push, deep link, popup), and Commons approves or denies it.
|
|
443
|
+
*
|
|
444
|
+
* Relying party: {@link AuthCommonsApi.start} → {@link AuthCommonsApi.poll}
|
|
445
|
+
* (or the auth socket) → finalize with `oxy.auth.claimSession` (device sign-in)
|
|
446
|
+
* or {@link AuthCommonsApi.finalizeOAuth} (OAuth). Approver (Commons):
|
|
447
|
+
* {@link AuthCommonsApi.approvalInfo} → {@link AuthCommonsApi.approve} /
|
|
448
|
+
* {@link AuthCommonsApi.deny}. The approver signs with its PRIMARY local key;
|
|
449
|
+
* the relying party never sees the private key.
|
|
450
|
+
*/
|
|
451
|
+
export declare class AuthCommonsApi {
|
|
452
|
+
private readonly ctx;
|
|
453
|
+
constructor(ctx: OxyContext);
|
|
454
|
+
/**
|
|
455
|
+
* MECHANISM B (relying party) — begin a "Sign in with Oxy" handoff.
|
|
456
|
+
*
|
|
457
|
+
* Generates a secret device-flow `sessionToken` client-side (it never
|
|
458
|
+
* appears in the QR), registers it with `POST /auth/session/create`, and
|
|
459
|
+
* returns the server-issued public `authorizeCode` + ready-to-render
|
|
460
|
+
* `qrPayload`. Render the QR (web) / open the deep-link (same-device); the
|
|
461
|
+
* approver resolves the code and authorizes. Then poll with
|
|
462
|
+
* {@link AuthCommonsApi.poll} and finalize.
|
|
463
|
+
*
|
|
464
|
+
* ONE request serves every delivery surface, and how it finalizes is decided
|
|
465
|
+
* here by whether an OAuth binding is attached:
|
|
466
|
+
* - no `oauth` (the default): a `device_sign_in` request — on `authorized`,
|
|
467
|
+
* exchange the `sessionToken` via the existing `auth.claimSession`.
|
|
468
|
+
* - with `oauth`: an `oauth_authorization` request — on `authorized`, call
|
|
469
|
+
* {@link AuthCommonsApi.finalizeOAuth} with the same `sessionToken` to mint the
|
|
470
|
+
* single-use authorization code, then exchange it with PKCE.
|
|
471
|
+
*
|
|
472
|
+
* @param params.clientId - The RP's registered OAuth client id
|
|
473
|
+
* (ApplicationCredential publicKey); required so the server can resolve the
|
|
474
|
+
* requesting application's identity.
|
|
475
|
+
* @param params.oauth - Optional OAuth binding ({@link CommonsOAuthContext}).
|
|
476
|
+
* Carries only the redirect URI, the PKCE S256 challenge, the requested
|
|
477
|
+
* scope, and an optional delegated `subjectAccountId` — never the PKCE
|
|
478
|
+
* verifier, the OAuth `state`, or any token.
|
|
479
|
+
*/
|
|
480
|
+
start(params: {
|
|
481
|
+
clientId: string;
|
|
482
|
+
oauth?: CommonsOAuthContext;
|
|
483
|
+
}): Promise<CommonsSignInHandle>;
|
|
484
|
+
/**
|
|
485
|
+
* MECHANISM B (relying party) — poll a device-flow session for approval.
|
|
486
|
+
*
|
|
487
|
+
* Backstop for the auth socket. On `authorized` (with a `sessionId`), the
|
|
488
|
+
* caller finalizes: `auth.claimSession` for a `device_sign_in` request,
|
|
489
|
+
* {@link AuthCommonsApi.finalizeOAuth} for an `oauth_authorization` one.
|
|
490
|
+
*
|
|
491
|
+
* Every field is narrowed fail-safe. `authorized` counts only as a literal
|
|
492
|
+
* `true`, the identifiers only as non-empty strings, and the delivery
|
|
493
|
+
* progress timestamps degrade to `null` when absent or unparseable — so a
|
|
494
|
+
* partial or older-API payload can advance the waiting UI at most, never
|
|
495
|
+
* make it believe a request was approved.
|
|
496
|
+
*
|
|
497
|
+
* @param sessionToken - The secret token from {@link AuthCommonsApi.start}.
|
|
498
|
+
*/
|
|
499
|
+
poll(sessionToken: string): Promise<CommonsSignInStatus>;
|
|
500
|
+
/**
|
|
501
|
+
* MECHANISM B (relying party) — ask Oxy to DELIVER a pending sign-in request
|
|
502
|
+
* to the identity's known Commons installations.
|
|
503
|
+
*
|
|
504
|
+
* This is the automatic half of "one intention, one primary action": rather
|
|
505
|
+
* than offering the user a menu of transports, the caller asks for delivery
|
|
506
|
+
* and lets the answer pick the route. Pass the returned `targets` to
|
|
507
|
+
* `selectCommonsDelivery` (`utils/commonsDelivery`) — `targets: 0` means no
|
|
508
|
+
* capable Commons installation is registered, which is a NORMAL outcome that
|
|
509
|
+
* resolves to the QR route, not an error to surface.
|
|
510
|
+
*
|
|
511
|
+
* **Requires a bearer.** Delivery is only allowed when Oxy already knows the
|
|
512
|
+
* intended identity from a trusted authenticated context — a request that
|
|
513
|
+
* merely carries a username or email typed into an unauthenticated browser
|
|
514
|
+
* must never be able to ring somebody's phone.
|
|
515
|
+
*
|
|
516
|
+
* The push it sends carries only `{ type, approvalUrl }` where the URL holds
|
|
517
|
+
* the public `authorizeCode` — no display data, no secrets. Commons resolves
|
|
518
|
+
* everything it shows from `auth.commons.approvalInfo`.
|
|
519
|
+
*
|
|
520
|
+
* @param authorizeCode - The public code from {@link AuthCommonsApi.start}.
|
|
521
|
+
*/
|
|
522
|
+
deliver(authorizeCode: string): Promise<CommonsDeliveryResult>;
|
|
523
|
+
/**
|
|
524
|
+
* MECHANISM B (approver / Commons) — report that the approval route was
|
|
525
|
+
* OPENED, so the waiting relying party can show "Opened in Commons".
|
|
526
|
+
*
|
|
527
|
+
* Progress only. It is idempotent, applies to a `pending` request alone, and
|
|
528
|
+
* records a timestamp (`openedAt`) — it never approves, authorizes, or
|
|
529
|
+
* advances the authorization state machine. Public, like the other approver
|
|
530
|
+
* handles: the approver has only the public `authorizeCode` at this point
|
|
531
|
+
* and has not yet signed anything.
|
|
532
|
+
*
|
|
533
|
+
* Best-effort by nature — a failure here costs the user only a progress
|
|
534
|
+
* line, so callers are free to ignore a rejection and continue to the
|
|
535
|
+
* approval screen.
|
|
536
|
+
*
|
|
537
|
+
* @param authorizeCode - The public code scanned from the QR / deep-link / push.
|
|
538
|
+
*/
|
|
539
|
+
markOpened(authorizeCode: string): Promise<void>;
|
|
540
|
+
/**
|
|
541
|
+
* MECHANISM B (relying party) — finalize an APPROVED, OAuth-bound request
|
|
542
|
+
* into a single-use OAuth authorization code.
|
|
543
|
+
*
|
|
544
|
+
* The OAuth counterpart of `auth.claimSession`: same secret credential,
|
|
545
|
+
* same single-use semantics, different output. Call it once the request the
|
|
546
|
+
* RP started with an `oauth` binding reports `authorized`; the server
|
|
547
|
+
* atomically mints exactly ONE `AuthCode` bound to the redirect URI, PKCE
|
|
548
|
+
* challenge, scopes, approving identity, and any delegated subject account
|
|
549
|
+
* the request was created with. A second call cannot mint another code.
|
|
550
|
+
*
|
|
551
|
+
* The result is an authorization CODE, never a token — the caller completes
|
|
552
|
+
* the flow with the ordinary PKCE exchange (`auth.oauth.exchangeCode`) using the
|
|
553
|
+
* `codeVerifier` it never sent anywhere. Nothing here is exposed to the
|
|
554
|
+
* popup: the code travels back through the registered callback, and the
|
|
555
|
+
* main window owns the verifier.
|
|
556
|
+
*
|
|
557
|
+
* Like `auth.claimSession`, this needs no Authorization header — the
|
|
558
|
+
* high-entropy SECRET `sessionToken` IS the credential. Never pass the
|
|
559
|
+
* public `authorizeCode` here; it is the approver's handle, not the
|
|
560
|
+
* initiator's. Every server-side failure (wrong/expired/already-finalized
|
|
561
|
+
* request, non-OAuth purpose, missing permission for the delegated account)
|
|
562
|
+
* surfaces as one generic error, so nothing about the request's state can be
|
|
563
|
+
* probed from outside.
|
|
564
|
+
*
|
|
565
|
+
* @param sessionToken - The secret token from {@link AuthCommonsApi.start}.
|
|
566
|
+
*/
|
|
567
|
+
finalizeOAuth(sessionToken: string): Promise<CommonsOAuthFinalizeResult>;
|
|
568
|
+
/**
|
|
569
|
+
* MECHANISM B (approver / Commons) — resolve the TRUSTED identity of a
|
|
570
|
+
* sign-in request from its public `authorizeCode`.
|
|
571
|
+
*
|
|
572
|
+
* The returned `application` and `subjectAccount` are resolved server-side
|
|
573
|
+
* and are the only safe things to display in the approval UI — NEVER trust
|
|
574
|
+
* the app/name/origin strings carried in the QR payload. Public (no auth
|
|
575
|
+
* required).
|
|
576
|
+
*
|
|
577
|
+
* @param authorizeCode - The public code scanned from the QR / deep-link.
|
|
578
|
+
*/
|
|
579
|
+
approvalInfo(authorizeCode: string): Promise<CommonsApprovalInfo>;
|
|
580
|
+
/**
|
|
581
|
+
* MECHANISM B (approver / Commons) — approve a sign-in request by signing a
|
|
582
|
+
* fresh challenge with the PRIMARY local identity key.
|
|
583
|
+
*
|
|
584
|
+
* Commons holds the user's identity as its primary key (not the shared
|
|
585
|
+
* key), so this uses `signChallenge`. The signed-but-cookieless authorize
|
|
586
|
+
* endpoint resolves the user from the verified signer — the RP that started
|
|
587
|
+
* the flow then claims its session. Native-only (requires a local identity).
|
|
588
|
+
*
|
|
589
|
+
* @param params.authorizeCode - The public code being approved.
|
|
590
|
+
* @param params.deviceName - Optional human-readable device label.
|
|
591
|
+
* @param params.deviceFingerprint - Optional device fingerprint.
|
|
592
|
+
*/
|
|
593
|
+
approve(params: {
|
|
594
|
+
authorizeCode: string;
|
|
595
|
+
deviceName?: string;
|
|
596
|
+
deviceFingerprint?: string;
|
|
597
|
+
}): Promise<CommonsSignInActionResult>;
|
|
598
|
+
/**
|
|
599
|
+
* MECHANISM B (approver / Commons) — deny a sign-in request, cancelling the
|
|
600
|
+
* device-flow session so the RP stops waiting.
|
|
601
|
+
*
|
|
602
|
+
* @param authorizeCode - The public code being denied.
|
|
603
|
+
* @param reason - Optional closed-set reason ({@link CommonsDenyReason}).
|
|
604
|
+
* Pass `'not_me'` ONLY when the user actually reported the request as one
|
|
605
|
+
* they did not start — the server records it as a suspicious denial rather
|
|
606
|
+
* than an ordinary cancel. Omitting it sends the exact body this endpoint
|
|
607
|
+
* has always received.
|
|
608
|
+
*/
|
|
609
|
+
deny(authorizeCode: string, reason?: CommonsDenyReason): Promise<CommonsSignInActionResult>;
|
|
610
|
+
}
|
|
611
|
+
export declare class AuthApi {
|
|
612
|
+
private readonly ctx;
|
|
613
|
+
/** Email sign-in and email confirmation codes. */
|
|
614
|
+
readonly email: AuthEmailApi;
|
|
615
|
+
/** Password sign-in and setting the password. */
|
|
616
|
+
readonly password: AuthPasswordApi;
|
|
617
|
+
/** The account's authenticator app. */
|
|
618
|
+
readonly totp: AuthTotpApi;
|
|
619
|
+
/** OAuth authorization-code exchange. */
|
|
620
|
+
readonly oauth: AuthOAuthApi;
|
|
621
|
+
/** "Sign in with Oxy" handoff to Commons. */
|
|
622
|
+
readonly commons: AuthCommonsApi;
|
|
623
|
+
constructor(ctx: OxyContext);
|
|
624
|
+
/**
|
|
625
|
+
* Register a new identity with public key authentication
|
|
626
|
+
* Identity is purely cryptographic - username and profile data are optional
|
|
627
|
+
*
|
|
628
|
+
* @param publicKey - The user's ECDSA public key (hex)
|
|
629
|
+
* @param signature - Signature of the registration request
|
|
630
|
+
* @param timestamp - Timestamp when the signature was created
|
|
631
|
+
*/
|
|
632
|
+
registerKey(publicKey: string, signature: string, timestamp: number): Promise<{
|
|
633
|
+
message: string;
|
|
634
|
+
user: User;
|
|
635
|
+
}>;
|
|
636
|
+
/**
|
|
637
|
+
* Request an authentication challenge
|
|
638
|
+
* The client must sign this challenge with their private key
|
|
639
|
+
*
|
|
640
|
+
* @param publicKey - The user's public key
|
|
641
|
+
* @param requestOptions - Optional per-call transport overrides (`retry`,
|
|
642
|
+
* `timeout`). Interactive callers omit it (defaults keep retries); the
|
|
643
|
+
* cold-boot `shared-key-signin` step passes `{ retry: false }` so a slow
|
|
644
|
+
* network cannot multiply boot latency via the inner retry loop.
|
|
645
|
+
*/
|
|
646
|
+
requestChallenge(publicKey: string, requestOptions?: {
|
|
647
|
+
retry?: boolean;
|
|
648
|
+
timeout?: number;
|
|
649
|
+
}): Promise<ChallengeResponse>;
|
|
650
|
+
/**
|
|
651
|
+
* Verify a signed challenge and create a session
|
|
652
|
+
*
|
|
653
|
+
* @param publicKey - The user's public key
|
|
654
|
+
* @param challenge - The challenge string from requestChallenge
|
|
655
|
+
* @param signature - Signature of the auth message
|
|
656
|
+
* @param timestamp - Timestamp when the signature was created
|
|
657
|
+
* @param deviceName - Optional device name
|
|
658
|
+
* @param deviceFingerprint - Optional device fingerprint
|
|
659
|
+
* @param requestOptions - Optional per-call transport overrides (`retry`,
|
|
660
|
+
* `timeout`). Interactive callers omit it (defaults keep retries); the
|
|
661
|
+
* cold-boot `shared-key-signin` step passes `{ retry: false }` so a slow
|
|
662
|
+
* network cannot multiply boot latency via the inner retry loop.
|
|
663
|
+
* @param options.plantTokens - Install the returned bearer on this client
|
|
664
|
+
* (default `true`). A caller that must decide LATER whether the session is
|
|
665
|
+
* still wanted (the account dialog, whose user may have cancelled while the
|
|
666
|
+
* request was in flight) passes `false` and plants it itself.
|
|
667
|
+
*/
|
|
668
|
+
verifyChallenge(publicKey: string, challenge: string, signature: string, timestamp: number, deviceName?: string, deviceFingerprint?: string, requestOptions?: {
|
|
669
|
+
retry?: boolean;
|
|
670
|
+
timeout?: number;
|
|
671
|
+
}, options?: {
|
|
672
|
+
plantTokens?: boolean;
|
|
673
|
+
}): Promise<SessionLoginResponse>;
|
|
674
|
+
/**
|
|
675
|
+
* Check if a public key is already registered
|
|
676
|
+
*/
|
|
677
|
+
isKeyRegistered(publicKey: string): Promise<PublicKeyCheckResponse>;
|
|
678
|
+
/**
|
|
679
|
+
* Exchange a device-flow sessionToken for the first access token.
|
|
680
|
+
*
|
|
681
|
+
* The originating client holds a 128-bit `sessionToken` that nobody
|
|
682
|
+
* else has seen — it was generated client-side, sent once on
|
|
683
|
+
* `POST /auth/session/create`, and is never echoed back. After
|
|
684
|
+
* another authenticated device approves the session via
|
|
685
|
+
* `POST /auth/session/authorize/{sessionToken}` (bearer-authed) and
|
|
686
|
+
* the auth socket / poll loop notifies this client, the client
|
|
687
|
+
* exchanges its `sessionToken` here for the first access token,
|
|
688
|
+
* refresh token, sessionId, and the authorized user.
|
|
689
|
+
*
|
|
690
|
+
* This call requires no Authorization header — the high-entropy
|
|
691
|
+
* `sessionToken` IS the credential (RFC 8628 §3.4). The exchange is
|
|
692
|
+
* single-use; replay attempts are rejected with 401.
|
|
693
|
+
*
|
|
694
|
+
* @param sessionToken - The same sessionToken the SDK passed to
|
|
695
|
+
* `POST /auth/session/create` at the start of the flow.
|
|
696
|
+
* @param options.deviceFingerprint - Optional fingerprint of the
|
|
697
|
+
* originating client device.
|
|
698
|
+
* @param options.plantTokens - Install the claimed bearer on this client
|
|
699
|
+
* (default `true`). Pass `false` to install it yourself once you know the
|
|
700
|
+
* session is still wanted — see `verifyChallenge`.
|
|
701
|
+
*/
|
|
702
|
+
claimSession(sessionToken: string, options?: {
|
|
703
|
+
deviceFingerprint?: string;
|
|
704
|
+
plantTokens?: boolean;
|
|
705
|
+
device?: DeviceProof | null;
|
|
706
|
+
}): Promise<ClaimedSession>;
|
|
707
|
+
/**
|
|
708
|
+
* MECHANISM A — same-device shared-keychain SSO.
|
|
709
|
+
*
|
|
710
|
+
* Native-only. If this device holds a shared identity (the cross-app
|
|
711
|
+
* `group.so.oxy.shared` keychain key), prove control of it and mint a
|
|
712
|
+
* session: `requestChallenge(sharedPublicKey)` → `signChallengeWithSharedKey`
|
|
713
|
+
* → `verifyChallenge` (which plants the tokens). Returns `null` on web or
|
|
714
|
+
* when no shared identity is present — never throws for the absent-identity
|
|
715
|
+
* case, so a cold-boot caller can fall through to the next step.
|
|
716
|
+
*
|
|
717
|
+
* The cold-boot wiring that CALLS this lives in `OxyContext`
|
|
718
|
+
* (`@oxy.so/services`); this method just performs the exchange.
|
|
719
|
+
*
|
|
720
|
+
* @param opts.requestOptions - Optional per-call transport overrides
|
|
721
|
+
* (`retry`, `timeout`) forwarded to BOTH the `requestChallenge` and
|
|
722
|
+
* `verifyChallenge` round-trips. Interactive flows omit it (defaults keep
|
|
723
|
+
* retries); the cold-boot `shared-key-signin` step passes `{ retry: false }`
|
|
724
|
+
* so this network step cannot multiply boot latency via the inner retry
|
|
725
|
+
* loop. The token-refresh scheduler / 401 lane still retry later.
|
|
726
|
+
* @param opts.plantTokens - Forwarded to `verifyChallenge` (default `true`).
|
|
727
|
+
*/
|
|
728
|
+
signInWithSharedIdentity(opts?: {
|
|
729
|
+
deviceName?: string;
|
|
730
|
+
deviceFingerprint?: string;
|
|
731
|
+
requestOptions?: {
|
|
732
|
+
retry?: boolean;
|
|
733
|
+
timeout?: number;
|
|
734
|
+
};
|
|
735
|
+
plantTokens?: boolean;
|
|
736
|
+
}): Promise<SessionLoginResponse | null>;
|
|
737
|
+
/**
|
|
738
|
+
* Check username availability
|
|
739
|
+
*/
|
|
740
|
+
checkUsername(username: string): Promise<{
|
|
741
|
+
available: boolean;
|
|
742
|
+
message: string;
|
|
743
|
+
}>;
|
|
744
|
+
/**
|
|
745
|
+
* The authenticator's code (or a backup code) for a first factor's
|
|
746
|
+
* challenge → the session. Send the same device proof the first factor did
|
|
747
|
+
* (the default does).
|
|
748
|
+
*/
|
|
749
|
+
completeSecondFactor(request: {
|
|
750
|
+
challengeId: string;
|
|
751
|
+
code: string;
|
|
752
|
+
} & SignInDeviceOptions): Promise<LoginResult>;
|
|
753
|
+
signUp(request: {
|
|
754
|
+
username: string;
|
|
755
|
+
email: string;
|
|
756
|
+
emailTicket: string;
|
|
757
|
+
} & SignInDeviceOptions): Promise<LoginResult>;
|
|
758
|
+
methods(): Promise<SignInMethods>;
|
|
759
|
+
/**
|
|
760
|
+
* Send a confirmation code to the signed-in account's email, for a
|
|
761
|
+
* `reauth: { emailCode: { verificationId, code } }` proof of ONE change:
|
|
762
|
+
* the code works only for the `action` it was asked for, and the email
|
|
763
|
+
* names it.
|
|
764
|
+
*/
|
|
765
|
+
requestReauthCode(action: ReauthAction): Promise<EmailVerificationStartResponse>;
|
|
766
|
+
}
|