@oxy.so/core 1.18.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -7
- package/dist/cjs/HttpService.js +159 -111
- package/dist/cjs/OxyServices.errors.js +48 -1
- package/dist/cjs/OxyServices.js +263 -60
- package/dist/cjs/api/accounts.js +231 -0
- package/dist/cjs/api/agency.js +102 -0
- package/dist/cjs/api/appData.js +45 -0
- package/dist/cjs/api/apps.js +197 -0
- package/dist/cjs/api/assets.js +329 -0
- package/dist/cjs/api/auth.js +900 -0
- package/dist/cjs/api/billing.js +44 -0
- package/dist/cjs/api/civic.js +289 -0
- package/dist/cjs/api/contacts.js +16 -0
- package/dist/cjs/api/devices.js +351 -0
- package/dist/cjs/api/follows.js +240 -0
- package/dist/cjs/api/identity.js +569 -0
- package/dist/cjs/api/linkedAccounts.js +48 -0
- package/dist/cjs/api/nodes.js +75 -0
- package/dist/cjs/api/notifications.js +75 -0
- package/dist/cjs/api/privacy.js +105 -0
- package/dist/cjs/api/reputation.js +74 -0
- package/dist/cjs/api/session.js +177 -0
- package/dist/cjs/api/store.js +199 -0
- package/dist/cjs/api/topics.js +66 -0
- package/dist/cjs/api/users.js +309 -0
- package/dist/cjs/boot/sessionColdBoot.js +4 -4
- package/dist/cjs/civic/index.js +16 -0
- package/dist/cjs/civic/payloads.js +156 -0
- package/dist/cjs/client/context.js +2 -0
- package/dist/cjs/crypto/identityLink.js +5 -5
- package/dist/cjs/crypto/index.js +44 -0
- package/dist/cjs/crypto/internal.js +37 -0
- package/dist/cjs/crypto/keyManager.js +2 -2
- package/dist/cjs/crypto/polyfill.js +9 -80
- package/dist/cjs/crypto/recoveryPhrase.js +1 -0
- package/dist/cjs/crypto/registrationPow.js +1 -1
- package/dist/cjs/crypto/signatureService.js +1 -0
- package/dist/cjs/i18n/accountCategoryLabels.js +3 -3
- package/dist/cjs/i18n/accountRoleLabels.js +7 -7
- package/dist/cjs/i18n/index.js +130 -52
- package/dist/cjs/i18n/locales/{ar-SA.json → ar-SA.js} +134 -52
- package/dist/cjs/i18n/locales/{ca-ES.json → ca-ES.js} +134 -52
- package/dist/{esm/i18n/locales/de-DE.json → cjs/i18n/locales/de-DE.js} +136 -54
- package/dist/{esm/i18n/locales/en-US.json → cjs/i18n/locales/en-US.js} +163 -245
- package/dist/{esm/i18n/locales/es-ES.json → cjs/i18n/locales/es-ES.js} +163 -245
- package/dist/cjs/i18n/locales/{fr-FR.json → fr-FR.js} +134 -52
- package/dist/cjs/i18n/locales/{it-IT.json → it-IT.js} +134 -52
- package/dist/{esm/i18n/locales/ja-JP.json → cjs/i18n/locales/ja-JP.js} +134 -52
- package/dist/cjs/i18n/locales/{ko-KR.json → ko-KR.js} +134 -52
- package/dist/{esm/i18n/locales/pt-PT.json → cjs/i18n/locales/pt-PT.js} +136 -54
- package/dist/{esm/i18n/locales/zh-CN.json → cjs/i18n/locales/zh-CN.js} +135 -53
- package/dist/cjs/i18n/reputationCategoryLabels.js +2 -2
- package/dist/cjs/i18n/trustTierLabels.js +2 -2
- package/dist/cjs/index.js +55 -263
- package/dist/cjs/inference/index.js +21 -0
- package/dist/cjs/server/OxyServer.js +521 -0
- package/dist/cjs/server/auth.js +2 -2
- package/dist/cjs/server/index.js +23 -6
- package/dist/cjs/server/middleware.js +1154 -0
- package/dist/cjs/server/namespaces.js +214 -0
- package/dist/cjs/server/rateLimit.js +2 -2
- package/dist/cjs/server/requesterAssertion.js +5 -5
- package/dist/cjs/server/securityHeaders.js +3 -3
- package/dist/cjs/server/traffic.js +7 -6
- package/dist/cjs/server/trafficNodeHttp.js +9 -3
- package/dist/cjs/server/userInvalidation.js +5 -5
- package/dist/cjs/session/accountDialogController.js +23 -23
- package/dist/cjs/session/authStateStore.js +2 -2
- package/dist/cjs/session/identitySession.js +3 -3
- package/dist/cjs/session/index.js +131 -0
- package/dist/cjs/session/refresh.js +37 -30
- package/dist/cjs/session/sessionClientHost.js +5 -5
- package/dist/cjs/session/sharedDeviceCredential.js +3 -2
- package/dist/cjs/shared/utils/networkUtils.js +2 -2
- package/dist/cjs/utils/accountCacheSweep.js +11 -15
- package/dist/cjs/utils/asyncUtils.js +22 -163
- package/dist/cjs/utils/authHelpers.js +2 -2
- package/dist/cjs/utils/authWebUrl.js +3 -4
- package/dist/cjs/utils/avatarUtils.js +2 -2
- package/dist/cjs/utils/cache.js +32 -2
- package/dist/cjs/utils/cacheKey.js +5 -10
- package/dist/cjs/utils/deviceManager.js +17 -16
- package/dist/cjs/utils/edgeRegion.js +2 -3
- package/dist/cjs/utils/identityCacheSweep.js +6 -10
- package/dist/cjs/utils/oxyServiceEnvironment.js +3 -7
- package/dist/cjs/utils/requestUtils.js +40 -33
- package/dist/cjs/utils/sessionUtils.js +0 -2
- package/dist/cjs/utils/tokenClaims.js +34 -0
- package/dist/esm/HttpService.js +160 -112
- package/dist/esm/OxyServices.errors.js +45 -0
- package/dist/esm/OxyServices.js +262 -57
- package/dist/esm/api/accounts.js +218 -0
- package/dist/esm/api/agency.js +95 -0
- package/dist/esm/api/appData.js +40 -0
- package/dist/esm/api/apps.js +191 -0
- package/dist/esm/api/assets.js +324 -0
- package/dist/esm/api/auth.js +858 -0
- package/dist/esm/api/billing.js +40 -0
- package/dist/esm/api/civic.js +250 -0
- package/dist/esm/api/contacts.js +12 -0
- package/dist/esm/api/devices.js +346 -0
- package/dist/esm/api/follows.js +236 -0
- package/dist/esm/api/identity.js +527 -0
- package/dist/esm/api/linkedAccounts.js +44 -0
- package/dist/esm/api/nodes.js +71 -0
- package/dist/esm/api/notifications.js +71 -0
- package/dist/esm/api/privacy.js +101 -0
- package/dist/esm/api/reputation.js +70 -0
- package/dist/esm/api/session.js +173 -0
- package/dist/esm/api/store.js +192 -0
- package/dist/esm/api/topics.js +62 -0
- package/dist/esm/api/users.js +272 -0
- package/dist/esm/boot/sessionColdBoot.js +4 -4
- package/dist/esm/civic/index.js +10 -0
- package/dist/esm/civic/payloads.js +118 -0
- package/dist/esm/client/context.js +1 -0
- package/dist/esm/crypto/identityLink.js +5 -5
- package/dist/esm/crypto/index.js +24 -0
- package/dist/esm/crypto/internal.js +19 -0
- package/dist/esm/crypto/keyManager.js +2 -2
- package/dist/esm/crypto/polyfill.js +10 -81
- package/dist/esm/crypto/recoveryPhrase.js +1 -0
- package/dist/esm/crypto/registrationPow.js +1 -1
- package/dist/esm/crypto/signatureService.js +1 -0
- package/dist/esm/i18n/accountCategoryLabels.js +2 -2
- package/dist/esm/i18n/accountRoleLabels.js +1 -1
- package/dist/esm/i18n/index.js +93 -52
- package/dist/esm/i18n/locales/{ar-SA.json → ar-SA.js} +132 -52
- package/dist/esm/i18n/locales/{ca-ES.json → ca-ES.js} +132 -52
- package/dist/{cjs/i18n/locales/de-DE.json → esm/i18n/locales/de-DE.js} +134 -54
- package/dist/{cjs/i18n/locales/en-US.json → esm/i18n/locales/en-US.js} +161 -245
- package/dist/{cjs/i18n/locales/es-ES.json → esm/i18n/locales/es-ES.js} +161 -245
- package/dist/esm/i18n/locales/{fr-FR.json → fr-FR.js} +132 -52
- package/dist/esm/i18n/locales/{it-IT.json → it-IT.js} +132 -52
- package/dist/{cjs/i18n/locales/ja-JP.json → esm/i18n/locales/ja-JP.js} +132 -52
- package/dist/esm/i18n/locales/{ko-KR.json → ko-KR.js} +132 -52
- package/dist/{cjs/i18n/locales/pt-PT.json → esm/i18n/locales/pt-PT.js} +134 -54
- package/dist/{cjs/i18n/locales/zh-CN.json → esm/i18n/locales/zh-CN.js} +133 -53
- package/dist/esm/i18n/reputationCategoryLabels.js +1 -1
- package/dist/esm/i18n/trustTierLabels.js +1 -1
- package/dist/esm/index.js +30 -166
- package/dist/esm/inference/index.js +13 -0
- package/dist/esm/server/OxyServer.js +516 -0
- package/dist/esm/server/auth.js +2 -2
- package/dist/esm/server/index.js +10 -5
- package/dist/esm/server/middleware.js +1147 -0
- package/dist/esm/server/namespaces.js +206 -0
- package/dist/esm/server/rateLimit.js +2 -2
- package/dist/esm/server/requesterAssertion.js +5 -5
- package/dist/esm/server/securityHeaders.js +3 -3
- package/dist/esm/server/traffic.js +7 -6
- package/dist/esm/server/trafficNodeHttp.js +9 -3
- package/dist/esm/server/userInvalidation.js +5 -5
- package/dist/esm/session/accountDialogController.js +23 -23
- package/dist/esm/session/authStateStore.js +2 -2
- package/dist/esm/session/identitySession.js +3 -3
- package/dist/esm/session/index.js +82 -0
- package/dist/esm/session/refresh.js +37 -30
- package/dist/esm/session/sessionClientHost.js +5 -5
- package/dist/esm/session/sharedDeviceCredential.js +3 -2
- package/dist/esm/shared/utils/networkUtils.js +2 -2
- package/dist/esm/utils/accountCacheSweep.js +11 -15
- package/dist/esm/utils/asyncUtils.js +22 -151
- package/dist/esm/utils/authHelpers.js +2 -2
- package/dist/esm/utils/authWebUrl.js +3 -4
- package/dist/esm/utils/avatarUtils.js +2 -2
- package/dist/esm/utils/cache.js +32 -2
- package/dist/esm/utils/cacheKey.js +5 -10
- package/dist/esm/utils/deviceManager.js +17 -16
- package/dist/esm/utils/edgeRegion.js +1 -2
- package/dist/esm/utils/identityCacheSweep.js +6 -10
- package/dist/esm/utils/oxyServiceEnvironment.js +3 -7
- package/dist/esm/utils/requestUtils.js +40 -33
- package/dist/esm/utils/sessionUtils.js +0 -2
- package/dist/esm/utils/tokenClaims.js +31 -0
- package/dist/types/HttpService.d.ts +26 -9
- package/dist/types/OxyServices.d.ts +160 -131
- package/dist/types/OxyServices.errors.d.ts +42 -0
- package/dist/types/api/accounts.d.ts +415 -0
- package/dist/types/api/agency.d.ts +135 -0
- package/dist/types/api/appData.d.ts +27 -0
- package/dist/types/api/apps.d.ts +433 -0
- package/dist/types/api/assets.d.ts +174 -0
- package/dist/types/api/auth.d.ts +766 -0
- package/dist/types/api/billing.d.ts +113 -0
- package/dist/types/api/civic.d.ts +203 -0
- package/dist/types/api/contacts.d.ts +31 -0
- package/{src/mixins/OxyServices.deviceBoot.ts → dist/types/api/devices.d.ts} +130 -110
- package/dist/types/api/follows.d.ts +236 -0
- package/dist/types/api/identity.d.ts +275 -0
- package/dist/types/api/linkedAccounts.d.ts +48 -0
- package/dist/types/api/nodes.d.ts +102 -0
- package/dist/types/api/notifications.d.ts +77 -0
- package/dist/types/api/privacy.d.ts +43 -0
- package/dist/types/api/reputation.d.ts +50 -0
- package/dist/types/api/session.d.ts +85 -0
- package/dist/types/api/store.d.ts +278 -0
- package/dist/types/api/topics.d.ts +34 -0
- package/dist/types/api/users.d.ts +134 -0
- package/dist/types/boot/sessionColdBoot.d.ts +1 -1
- package/dist/types/civic/index.d.ts +10 -0
- package/dist/types/civic/payloads.d.ts +83 -0
- package/dist/types/client/context.d.ts +33 -0
- package/dist/types/crypto/identityLink.d.ts +5 -5
- package/dist/types/crypto/index.d.ts +24 -0
- package/dist/types/crypto/internal.d.ts +19 -0
- package/dist/types/crypto/polyfill.d.ts +6 -9
- package/dist/types/crypto/registrationPow.d.ts +1 -1
- package/dist/types/i18n/accountCategoryLabels.d.ts +1 -1
- package/dist/types/i18n/accountRoleLabels.d.ts +1 -1
- package/dist/types/i18n/index.d.ts +20 -1
- package/dist/types/i18n/locales/ar-SA.d.ts +386 -0
- package/dist/types/i18n/locales/ca-ES.d.ts +386 -0
- package/dist/types/i18n/locales/de-DE.d.ts +386 -0
- package/dist/types/i18n/locales/en-US.d.ts +2034 -0
- package/dist/types/i18n/locales/es-ES.d.ts +2034 -0
- package/dist/types/i18n/locales/fr-FR.d.ts +386 -0
- package/dist/types/i18n/locales/it-IT.d.ts +386 -0
- package/dist/types/i18n/locales/ja-JP.d.ts +386 -0
- package/dist/types/i18n/locales/ko-KR.d.ts +386 -0
- package/dist/types/i18n/locales/pt-PT.d.ts +386 -0
- package/dist/types/i18n/locales/zh-CN.d.ts +386 -0
- package/dist/types/index.d.ts +46 -95
- package/dist/types/inference/index.d.ts +22 -0
- package/dist/types/models/interfaces.d.ts +1 -22
- package/dist/types/server/OxyServer.d.ts +183 -0
- package/dist/types/server/auth.d.ts +10 -7
- package/dist/types/server/index.d.ts +10 -4
- package/dist/types/server/middleware.d.ts +291 -0
- package/dist/types/server/namespaces.d.ts +98 -0
- package/dist/types/server/rateLimit.d.ts +7 -5
- package/dist/types/server/requesterAssertion.d.ts +14 -11
- package/dist/types/server/securityHeaders.d.ts +4 -5
- package/dist/types/server/userInvalidation.d.ts +10 -8
- package/dist/types/session/accountDelegationAccess.d.ts +1 -1
- package/dist/types/session/accountDialogController.d.ts +8 -8
- package/dist/types/session/accountSwitchTargets.d.ts +1 -1
- package/dist/types/session/authStateStore.d.ts +7 -6
- package/dist/types/session/index.d.ts +40 -0
- package/dist/types/utils/accountCacheSweep.d.ts +7 -10
- package/dist/types/utils/apiUtils.d.ts +3 -3
- package/dist/types/utils/asyncUtils.d.ts +11 -58
- package/dist/types/utils/authWebUrl.d.ts +3 -4
- package/dist/types/utils/avatarUtils.d.ts +5 -6
- package/dist/types/utils/cache.d.ts +11 -3
- package/dist/types/utils/commonsApproval.d.ts +1 -1
- package/dist/types/utils/edgeRegion.d.ts +1 -2
- package/dist/types/utils/identityCacheSweep.d.ts +6 -4
- package/dist/types/utils/oauthPkce.d.ts +2 -2
- package/dist/types/utils/oxyServiceEnvironment.d.ts +3 -7
- package/dist/types/utils/requestUtils.d.ts +18 -14
- package/dist/types/utils/tokenClaims.d.ts +9 -0
- package/package.json +68 -7
- package/src/HttpService.ts +166 -131
- package/src/OxyServices.errors.ts +73 -0
- package/src/OxyServices.ts +289 -164
- package/src/api/accounts.ts +579 -0
- package/src/api/agency.ts +277 -0
- package/src/api/appData.ts +63 -0
- package/src/api/apps.ts +596 -0
- package/src/api/assets.ts +416 -0
- package/src/api/auth.ts +1457 -0
- package/src/api/billing.ts +144 -0
- package/src/api/civic.ts +428 -0
- package/src/api/contacts.ts +41 -0
- package/src/api/devices.ts +438 -0
- package/src/api/follows.ts +414 -0
- package/src/api/identity.ts +727 -0
- package/src/api/linkedAccounts.ts +78 -0
- package/src/api/nodes.ts +169 -0
- package/src/api/notifications.ts +135 -0
- package/src/api/privacy.ts +120 -0
- package/src/api/reputation.ts +134 -0
- package/src/api/session.ts +210 -0
- package/src/api/store.ts +435 -0
- package/src/api/topics.ts +83 -0
- package/src/api/users.ts +357 -0
- package/src/boot/sessionColdBoot.ts +4 -4
- package/src/civic/index.ts +12 -0
- package/src/civic/payloads.ts +175 -0
- package/src/client/context.ts +34 -0
- package/src/crypto/identityLink.ts +5 -5
- package/src/crypto/index.ts +39 -0
- package/src/crypto/internal.ts +20 -0
- package/src/crypto/keyManager.ts +2 -2
- package/src/crypto/polyfill.ts +9 -89
- package/src/crypto/recoveryPhrase.ts +1 -0
- package/src/crypto/registrationPow.ts +1 -1
- package/src/crypto/signatureService.ts +1 -0
- package/src/i18n/accountCategoryLabels.ts +2 -2
- package/src/i18n/accountRoleLabels.ts +2 -2
- package/src/i18n/index.ts +105 -54
- package/src/i18n/locales/{ar-SA.json → ar-SA.ts} +132 -52
- package/src/i18n/locales/{ca-ES.json → ca-ES.ts} +132 -52
- package/{dist/cjs/i18n/locales/locales/de-DE.json → src/i18n/locales/de-DE.ts} +134 -54
- package/src/i18n/locales/{en-US.json → en-US.ts} +161 -245
- package/{dist/cjs/i18n/locales/locales/es-ES.json → src/i18n/locales/es-ES.ts} +161 -245
- package/src/i18n/locales/{fr-FR.json → fr-FR.ts} +132 -52
- package/src/i18n/locales/{it-IT.json → it-IT.ts} +132 -52
- package/{dist/cjs/i18n/locales/locales/ja-JP.json → src/i18n/locales/ja-JP.ts} +132 -52
- package/src/i18n/locales/{ko-KR.json → ko-KR.ts} +132 -52
- package/src/i18n/locales/{pt-PT.json → pt-PT.ts} +134 -54
- package/src/i18n/locales/{zh-CN.json → zh-CN.ts} +133 -53
- package/src/i18n/reputationCategoryLabels.ts +1 -1
- package/src/i18n/trustTierLabels.ts +1 -1
- package/src/index.ts +170 -501
- package/src/inference/index.ts +48 -0
- package/src/models/interfaces.ts +1 -22
- package/src/server/OxyServer.ts +637 -0
- package/src/server/auth.ts +12 -8
- package/src/server/index.ts +28 -5
- package/src/server/middleware.ts +1520 -0
- package/src/server/namespaces.ts +257 -0
- package/src/server/rateLimit.ts +10 -9
- package/src/server/requesterAssertion.ts +13 -10
- package/src/server/securityHeaders.ts +7 -8
- package/src/server/traffic.ts +6 -6
- package/src/server/trafficNodeHttp.ts +7 -3
- package/src/server/userInvalidation.ts +9 -9
- package/src/session/accountDelegationAccess.ts +1 -1
- package/src/session/accountDialogController.ts +24 -24
- package/src/session/accountSwitchTargets.ts +1 -1
- package/src/session/authStateStore.ts +9 -8
- package/src/session/identitySession.ts +3 -3
- package/src/session/index.ts +210 -0
- package/src/session/refresh.ts +36 -30
- package/src/session/sessionClientHost.ts +5 -5
- package/src/session/sharedDeviceCredential.ts +3 -2
- package/src/shared/utils/networkUtils.ts +2 -2
- package/src/utils/accountCacheSweep.ts +11 -15
- package/src/utils/apiUtils.ts +3 -3
- package/src/utils/asyncUtils.ts +38 -235
- package/src/utils/authHelpers.ts +2 -2
- package/src/utils/authWebUrl.ts +3 -4
- package/src/utils/avatarUtils.ts +4 -7
- package/src/utils/cache.ts +36 -5
- package/src/utils/cacheKey.ts +5 -9
- package/src/utils/commonsApproval.ts +1 -1
- package/src/utils/deviceManager.ts +17 -16
- package/src/utils/edgeRegion.ts +1 -2
- package/src/utils/identityCacheSweep.ts +7 -12
- package/src/utils/oauthPkce.ts +2 -2
- package/src/utils/oxyServiceEnvironment.ts +3 -7
- package/src/utils/requestUtils.ts +48 -44
- package/src/utils/sessionUtils.ts +0 -2
- package/src/utils/tokenClaims.ts +38 -0
- package/dist/cjs/.tsbuildinfo +0 -1
- package/dist/cjs/OxyServices.base.js +0 -392
- package/dist/cjs/i18n/locales/locales/ar-SA.json +0 -306
- package/dist/cjs/i18n/locales/locales/ca-ES.json +0 -306
- package/dist/cjs/i18n/locales/locales/en-US.json +0 -2127
- package/dist/cjs/i18n/locales/locales/fr-FR.json +0 -306
- package/dist/cjs/i18n/locales/locales/it-IT.json +0 -306
- package/dist/cjs/i18n/locales/locales/ko-KR.json +0 -306
- package/dist/cjs/i18n/locales/locales/pt-PT.json +0 -306
- package/dist/cjs/i18n/locales/locales/zh-CN.json +0 -306
- package/dist/cjs/mixins/OxyServices.accounts.js +0 -555
- package/dist/cjs/mixins/OxyServices.agency.js +0 -154
- package/dist/cjs/mixins/OxyServices.analytics.js +0 -49
- package/dist/cjs/mixins/OxyServices.appData.js +0 -108
- package/dist/cjs/mixins/OxyServices.assets.js +0 -854
- package/dist/cjs/mixins/OxyServices.auth.js +0 -1495
- package/dist/cjs/mixins/OxyServices.chains.js +0 -73
- package/dist/cjs/mixins/OxyServices.civic.js +0 -611
- package/dist/cjs/mixins/OxyServices.connectedApps.js +0 -95
- package/dist/cjs/mixins/OxyServices.contacts.js +0 -50
- package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -191
- package/dist/cjs/mixins/OxyServices.devices.js +0 -116
- package/dist/cjs/mixins/OxyServices.features.js +0 -335
- package/dist/cjs/mixins/OxyServices.followGraph.js +0 -221
- package/dist/cjs/mixins/OxyServices.identity.js +0 -562
- package/dist/cjs/mixins/OxyServices.identityBackup.js +0 -172
- package/dist/cjs/mixins/OxyServices.inference.js +0 -59
- package/dist/cjs/mixins/OxyServices.language.js +0 -125
- package/dist/cjs/mixins/OxyServices.linkedAccounts.js +0 -79
- package/dist/cjs/mixins/OxyServices.location.js +0 -43
- package/dist/cjs/mixins/OxyServices.nodes.js +0 -175
- package/dist/cjs/mixins/OxyServices.notifications.js +0 -63
- package/dist/cjs/mixins/OxyServices.payment.js +0 -158
- package/dist/cjs/mixins/OxyServices.privacy.js +0 -199
- package/dist/cjs/mixins/OxyServices.reputation.js +0 -289
- package/dist/cjs/mixins/OxyServices.security.js +0 -89
- package/dist/cjs/mixins/OxyServices.store.js +0 -266
- package/dist/cjs/mixins/OxyServices.topics.js +0 -137
- package/dist/cjs/mixins/OxyServices.user.js +0 -954
- package/dist/cjs/mixins/OxyServices.utility.js +0 -1402
- package/dist/cjs/mixins/index.js +0 -136
- package/dist/cjs/mixins/mixinHelpers.js +0 -53
- package/dist/cjs/utils/webauthnOrigin.js +0 -51
- package/dist/esm/.tsbuildinfo +0 -1
- package/dist/esm/OxyServices.base.js +0 -388
- package/dist/esm/i18n/locales/locales/ar-SA.json +0 -306
- package/dist/esm/i18n/locales/locales/ca-ES.json +0 -306
- package/dist/esm/i18n/locales/locales/de-DE.json +0 -306
- package/dist/esm/i18n/locales/locales/en-US.json +0 -2127
- package/dist/esm/i18n/locales/locales/es-ES.json +0 -2127
- package/dist/esm/i18n/locales/locales/fr-FR.json +0 -306
- package/dist/esm/i18n/locales/locales/it-IT.json +0 -306
- package/dist/esm/i18n/locales/locales/ja-JP.json +0 -306
- package/dist/esm/i18n/locales/locales/ko-KR.json +0 -306
- package/dist/esm/i18n/locales/locales/pt-PT.json +0 -306
- package/dist/esm/i18n/locales/locales/zh-CN.json +0 -306
- package/dist/esm/mixins/OxyServices.accounts.js +0 -543
- package/dist/esm/mixins/OxyServices.agency.js +0 -151
- package/dist/esm/mixins/OxyServices.analytics.js +0 -46
- package/dist/esm/mixins/OxyServices.appData.js +0 -103
- package/dist/esm/mixins/OxyServices.assets.js +0 -851
- package/dist/esm/mixins/OxyServices.auth.js +0 -1455
- package/dist/esm/mixins/OxyServices.chains.js +0 -70
- package/dist/esm/mixins/OxyServices.civic.js +0 -605
- package/dist/esm/mixins/OxyServices.connectedApps.js +0 -92
- package/dist/esm/mixins/OxyServices.contacts.js +0 -47
- package/dist/esm/mixins/OxyServices.deviceBoot.js +0 -186
- package/dist/esm/mixins/OxyServices.devices.js +0 -113
- package/dist/esm/mixins/OxyServices.features.js +0 -332
- package/dist/esm/mixins/OxyServices.followGraph.js +0 -218
- package/dist/esm/mixins/OxyServices.identity.js +0 -558
- package/dist/esm/mixins/OxyServices.identityBackup.js +0 -169
- package/dist/esm/mixins/OxyServices.inference.js +0 -56
- package/dist/esm/mixins/OxyServices.language.js +0 -122
- package/dist/esm/mixins/OxyServices.linkedAccounts.js +0 -76
- package/dist/esm/mixins/OxyServices.location.js +0 -40
- package/dist/esm/mixins/OxyServices.nodes.js +0 -172
- package/dist/esm/mixins/OxyServices.notifications.js +0 -60
- package/dist/esm/mixins/OxyServices.payment.js +0 -155
- package/dist/esm/mixins/OxyServices.privacy.js +0 -196
- package/dist/esm/mixins/OxyServices.reputation.js +0 -286
- package/dist/esm/mixins/OxyServices.security.js +0 -86
- package/dist/esm/mixins/OxyServices.store.js +0 -263
- package/dist/esm/mixins/OxyServices.topics.js +0 -134
- package/dist/esm/mixins/OxyServices.user.js +0 -951
- package/dist/esm/mixins/OxyServices.utility.js +0 -1397
- package/dist/esm/mixins/index.js +0 -133
- package/dist/esm/mixins/mixinHelpers.js +0 -48
- package/dist/esm/utils/webauthnOrigin.js +0 -48
- package/dist/types/.tsbuildinfo +0 -1
- package/dist/types/OxyServices.base.d.ts +0 -189
- package/dist/types/mixins/OxyServices.accounts.d.ts +0 -868
- package/dist/types/mixins/OxyServices.agency.d.ts +0 -176
- package/dist/types/mixins/OxyServices.analytics.d.ts +0 -72
- package/dist/types/mixins/OxyServices.appData.d.ts +0 -108
- package/dist/types/mixins/OxyServices.assets.d.ts +0 -371
- package/dist/types/mixins/OxyServices.auth.d.ts +0 -998
- package/dist/types/mixins/OxyServices.chains.d.ts +0 -156
- package/dist/types/mixins/OxyServices.civic.d.ts +0 -520
- package/dist/types/mixins/OxyServices.connectedApps.d.ts +0 -184
- package/dist/types/mixins/OxyServices.contacts.d.ts +0 -100
- package/dist/types/mixins/OxyServices.deviceBoot.d.ts +0 -185
- package/dist/types/mixins/OxyServices.devices.d.ts +0 -103
- package/dist/types/mixins/OxyServices.features.d.ts +0 -250
- package/dist/types/mixins/OxyServices.followGraph.d.ts +0 -223
- package/dist/types/mixins/OxyServices.identity.d.ts +0 -337
- package/dist/types/mixins/OxyServices.identityBackup.d.ts +0 -129
- package/dist/types/mixins/OxyServices.inference.d.ts +0 -95
- package/dist/types/mixins/OxyServices.language.d.ts +0 -87
- package/dist/types/mixins/OxyServices.linkedAccounts.d.ts +0 -107
- package/dist/types/mixins/OxyServices.location.d.ts +0 -70
- package/dist/types/mixins/OxyServices.nodes.d.ts +0 -198
- package/dist/types/mixins/OxyServices.notifications.d.ts +0 -143
- package/dist/types/mixins/OxyServices.payment.d.ts +0 -117
- package/dist/types/mixins/OxyServices.privacy.d.ts +0 -146
- package/dist/types/mixins/OxyServices.reputation.d.ts +0 -202
- package/dist/types/mixins/OxyServices.security.d.ts +0 -84
- package/dist/types/mixins/OxyServices.store.d.ts +0 -334
- package/dist/types/mixins/OxyServices.topics.d.ts +0 -110
- package/dist/types/mixins/OxyServices.user.d.ts +0 -600
- package/dist/types/mixins/OxyServices.utility.d.ts +0 -526
- package/dist/types/mixins/index.d.ts +0 -87
- package/dist/types/mixins/mixinHelpers.d.ts +0 -31
- package/dist/types/utils/webauthnOrigin.d.ts +0 -32
- package/src/OxyServices.base.ts +0 -480
- package/src/__tests__/authSocket.test.ts +0 -96
- package/src/__tests__/fixEsmImports.test.ts +0 -132
- package/src/__tests__/httpServiceAbort.test.ts +0 -308
- package/src/__tests__/httpServiceActivityId.test.ts +0 -49
- package/src/__tests__/httpServiceAuthSelfAwait.test.ts +0 -108
- package/src/__tests__/httpServiceCache.test.ts +0 -318
- package/src/__tests__/httpServiceFormEncoded.test.ts +0 -139
- package/src/__tests__/httpServiceQueueDeadlock.test.ts +0 -128
- package/src/__tests__/httpServiceRateLimitedRefresh.test.ts +0 -160
- package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +0 -115
- package/src/__tests__/httpServiceWrites.test.ts +0 -175
- package/src/__tests__/inSessionRefresh.test.ts +0 -313
- package/src/__tests__/linkedClient.test.ts +0 -363
- package/src/__tests__/nearExpiryMintStorm.test.ts +0 -165
- package/src/__tests__/parseHttpErrorBody.test.ts +0 -116
- package/src/__tests__/publicInterfaceParity.test.ts +0 -75
- package/src/__tests__/serverValueImportsDeclared.test.ts +0 -120
- package/src/__tests__/serviceIdentityWhenAnonymous.test.ts +0 -159
- package/src/__tests__/serviceTokenWorkloadFallback.test.ts +0 -85
- package/src/__tests__/userIdentity.test.ts +0 -143
- package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
- package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
- package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
- package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
- package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
- package/src/crypto/__tests__/identityLink.test.ts +0 -18
- package/src/crypto/__tests__/identityMocks.ts +0 -125
- package/src/crypto/__tests__/identityProof.test.ts +0 -81
- package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
- package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
- package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
- package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
- package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
- package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
- package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
- package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
- package/src/crypto/__tests__/keyManager.test.ts +0 -329
- package/src/crypto/__tests__/polyfill.test.ts +0 -109
- package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
- package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
- package/src/crypto/__tests__/registrationPow.test.ts +0 -61
- package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
- package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
- package/src/crypto/__tests__/signedRecord.test.ts +0 -230
- package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
- package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
- package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
- package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
- package/src/i18n/locales/de-DE.json +0 -306
- package/src/i18n/locales/es-ES.json +0 -2127
- package/src/i18n/locales/ja-JP.json +0 -306
- package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
- package/src/logger/__tests__/logger.test.ts +0 -207
- package/src/mixins/OxyServices.accounts.ts +0 -1330
- package/src/mixins/OxyServices.agency.ts +0 -353
- package/src/mixins/OxyServices.analytics.ts +0 -53
- package/src/mixins/OxyServices.appData.ts +0 -158
- package/src/mixins/OxyServices.assets.ts +0 -964
- package/src/mixins/OxyServices.auth.ts +0 -2083
- package/src/mixins/OxyServices.chains.ts +0 -134
- package/src/mixins/OxyServices.civic.ts +0 -945
- package/src/mixins/OxyServices.connectedApps.ts +0 -212
- package/src/mixins/OxyServices.contacts.ts +0 -73
- package/src/mixins/OxyServices.devices.ts +0 -120
- package/src/mixins/OxyServices.features.ts +0 -454
- package/src/mixins/OxyServices.followGraph.ts +0 -293
- package/src/mixins/OxyServices.identity.ts +0 -787
- package/src/mixins/OxyServices.identityBackup.ts +0 -250
- package/src/mixins/OxyServices.inference.ts +0 -57
- package/src/mixins/OxyServices.language.ts +0 -144
- package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
- package/src/mixins/OxyServices.location.ts +0 -46
- package/src/mixins/OxyServices.nodes.ts +0 -337
- package/src/mixins/OxyServices.notifications.ts +0 -142
- package/src/mixins/OxyServices.payment.ts +0 -163
- package/src/mixins/OxyServices.privacy.ts +0 -219
- package/src/mixins/OxyServices.reputation.ts +0 -436
- package/src/mixins/OxyServices.security.ts +0 -110
- package/src/mixins/OxyServices.store.ts +0 -585
- package/src/mixins/OxyServices.topics.ts +0 -169
- package/src/mixins/OxyServices.user.ts +0 -1208
- package/src/mixins/OxyServices.utility.ts +0 -1803
- package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
- package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
- package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
- package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
- package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
- package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
- package/src/mixins/__tests__/accountEvents.test.ts +0 -158
- package/src/mixins/__tests__/accounts.test.ts +0 -727
- package/src/mixins/__tests__/agency.test.ts +0 -120
- package/src/mixins/__tests__/appData.test.ts +0 -203
- package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
- package/src/mixins/__tests__/assetUpload.test.ts +0 -191
- package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
- package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
- package/src/mixins/__tests__/chains.test.ts +0 -113
- package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
- package/src/mixins/__tests__/connectedApps.test.ts +0 -146
- package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
- package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
- package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
- package/src/mixins/__tests__/followGraph.test.ts +0 -147
- package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
- package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
- package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
- package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
- package/src/mixins/__tests__/identityBackup.test.ts +0 -315
- package/src/mixins/__tests__/identityLink.test.ts +0 -89
- package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
- package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
- package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
- package/src/mixins/__tests__/notifications.read.test.ts +0 -82
- package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
- package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
- package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
- package/src/mixins/__tests__/reputation.test.ts +0 -522
- package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
- package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
- package/src/mixins/__tests__/store.test.ts +0 -304
- package/src/mixins/__tests__/topics.test.ts +0 -155
- package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
- package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
- package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
- package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
- package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
- package/src/mixins/index.ts +0 -203
- package/src/mixins/mixinHelpers.ts +0 -69
- package/src/server/__tests__/auth.test.ts +0 -78
- package/src/server/__tests__/capabilityTicket.test.ts +0 -111
- package/src/server/__tests__/cors.socket.test.ts +0 -225
- package/src/server/__tests__/cors.test.ts +0 -158
- package/src/server/__tests__/rateLimit.test.ts +0 -257
- package/src/server/__tests__/requesterAssertion.test.ts +0 -359
- package/src/server/__tests__/safeFetch.test.ts +0 -232
- package/src/server/__tests__/securityHeaders.test.ts +0 -387
- package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
- package/src/server/__tests__/traffic.test.ts +0 -180
- package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
- package/src/server/__tests__/userInvalidation.test.ts +0 -203
- package/src/server/__tests__/verifySecret.test.ts +0 -40
- package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
- package/src/server/__tests__/workloadIdentity.test.ts +0 -128
- package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
- package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
- package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
- package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
- package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
- package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
- package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
- package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
- package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
- package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
- package/src/session/__tests__/SessionClient.state.test.ts +0 -78
- package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
- package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
- package/src/session/__tests__/accountDialogController.test.ts +0 -2502
- package/src/session/__tests__/accountDialogShape.test.ts +0 -120
- package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
- package/src/session/__tests__/authStateStore.test.ts +0 -451
- package/src/session/__tests__/deviceDirectory.test.ts +0 -422
- package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
- package/src/session/__tests__/identityPin.test.ts +0 -131
- package/src/session/__tests__/identitySession.test.ts +0 -194
- package/src/session/__tests__/projectSessionState.test.ts +0 -105
- package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
- package/src/session/__tests__/refresh.test.ts +0 -606
- package/src/session/__tests__/sessionIntegration.test.ts +0 -209
- package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
- package/src/utils/__tests__/accountUtils.test.ts +0 -151
- package/src/utils/__tests__/activityId.test.ts +0 -45
- package/src/utils/__tests__/asyncUtils.test.ts +0 -279
- package/src/utils/__tests__/authWebUrl.test.ts +0 -15
- package/src/utils/__tests__/cacheKey.test.ts +0 -0
- package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
- package/src/utils/__tests__/coldBoot.test.ts +0 -496
- package/src/utils/__tests__/commonsApproval.test.ts +0 -60
- package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
- package/src/utils/__tests__/languageUtils.test.ts +0 -244
- package/src/utils/__tests__/oauthPkce.test.ts +0 -303
- package/src/utils/__tests__/officialOrigins.test.ts +0 -31
- package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
- package/src/utils/__tests__/profileLinks.test.ts +0 -180
- package/src/utils/__tests__/redactUrl.test.ts +0 -33
- package/src/utils/__tests__/registrableApex.test.ts +0 -62
- package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
- package/src/utils/__tests__/textNormalization.test.ts +0 -205
- package/src/utils/__tests__/validationUtils.test.ts +0 -703
- package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
- package/src/utils/webauthnOrigin.ts +0 -52
package/src/api/apps.ts
ADDED
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `oxy.apps` — applications.
|
|
3
|
+
*
|
|
4
|
+
* Two unrelated surfaces share the word "app":
|
|
5
|
+
* - the applications an ACCOUNT owns and manages (`/applications`): the OAuth
|
|
6
|
+
* clients, their credentials and usage — `apps.list/get/create/update/delete`,
|
|
7
|
+
* `apps.credentials.*`, `apps.usage`. Access derives from the caller's
|
|
8
|
+
* `AccountMember` on the owning account (`oxy.accounts`).
|
|
9
|
+
* - the THIRD-PARTY applications this user granted access to through the
|
|
10
|
+
* consent flow — `apps.connected.*` — and the public identity of a requesting
|
|
11
|
+
* application for consent screens — `apps.getPublic`.
|
|
12
|
+
*
|
|
13
|
+
* Reference applications by their `_id` (`applicationId`), credentials by their
|
|
14
|
+
* `credentialId`. A connected app is keyed by `applicationId`, never a
|
|
15
|
+
* credential/client id, so a grant and its revocation survive credential
|
|
16
|
+
* rotation.
|
|
17
|
+
*/
|
|
18
|
+
import type { OxyContext } from '../client/context';
|
|
19
|
+
import type { AccountMember, AccountSuccessResult } from './accounts';
|
|
20
|
+
|
|
21
|
+
const SHORT_TTL = 60 * 1000;
|
|
22
|
+
const MEDIUM_TTL = 2 * 60 * 1000;
|
|
23
|
+
const LONG_TTL = 5 * 60 * 1000;
|
|
24
|
+
|
|
25
|
+
const enc = encodeURIComponent;
|
|
26
|
+
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Application (owned by an account) types
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Application classification. Set only by Oxy platform staff — never editable
|
|
33
|
+
* through the normal member-facing update path.
|
|
34
|
+
*/
|
|
35
|
+
export type ApplicationType = 'first_party' | 'third_party' | 'internal' | 'system';
|
|
36
|
+
|
|
37
|
+
/** Lifecycle status of an application. */
|
|
38
|
+
export type ApplicationStatus = 'active' | 'suspended' | 'deleted' | 'pending_review';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Credential kind.
|
|
42
|
+
*
|
|
43
|
+
* The first three are OAuth clients: the `oxy_dk_…` `publicKey` is the
|
|
44
|
+
* `client_id`, and any secret is presented BESIDE it. `service` credentials
|
|
45
|
+
* additionally mint service tokens.
|
|
46
|
+
*
|
|
47
|
+
* `machine` is the OpenAI-SDK-compatible API key (issue #972 §2.3): its
|
|
48
|
+
* credential material is ONE `oxy_sk_…` bearer string returned in `token`
|
|
49
|
+
* exactly once on create/rotate, never in `secret`.
|
|
50
|
+
*/
|
|
51
|
+
export type ApplicationCredentialType = 'public' | 'confidential' | 'service' | 'machine';
|
|
52
|
+
|
|
53
|
+
/** Deployment environment an application credential is scoped to. */
|
|
54
|
+
export type ApplicationEnvironment = 'development' | 'staging' | 'production';
|
|
55
|
+
|
|
56
|
+
/** Application credential lifecycle status. */
|
|
57
|
+
export type ApplicationCredentialStatus = 'active' | 'deprecated' | 'revoked';
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Client-facing Application shape returned by the `/applications` API. An
|
|
61
|
+
* application is the OAuth client; it is OWNED by an account
|
|
62
|
+
* (`ownerAccountId`), and the caller's access derives from their `AccountMember`
|
|
63
|
+
* on that owning account (with inheritance).
|
|
64
|
+
*/
|
|
65
|
+
export interface Application {
|
|
66
|
+
_id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
websiteUrl?: string;
|
|
70
|
+
/** Public privacy-policy URL, rendered as a legal link on the OAuth consent screen. */
|
|
71
|
+
privacyPolicyUrl?: string;
|
|
72
|
+
/** Public terms-of-service URL, rendered as a legal link on the OAuth consent screen. */
|
|
73
|
+
termsUrl?: string;
|
|
74
|
+
icon?: string;
|
|
75
|
+
type: ApplicationType;
|
|
76
|
+
status: ApplicationStatus;
|
|
77
|
+
isOfficial: boolean;
|
|
78
|
+
isInternal: boolean;
|
|
79
|
+
capabilities: string[];
|
|
80
|
+
redirectUris: string[];
|
|
81
|
+
scopes: string[];
|
|
82
|
+
webhookUrl?: string;
|
|
83
|
+
devWebhookUrl?: string;
|
|
84
|
+
createdByUserId: string;
|
|
85
|
+
/**
|
|
86
|
+
* The account that owns this application (account `_id`). Access to the
|
|
87
|
+
* application derives from the caller's `AccountMember` on this account, with
|
|
88
|
+
* inheritance up the account tree.
|
|
89
|
+
*/
|
|
90
|
+
ownerAccountId: string;
|
|
91
|
+
createdAt: string;
|
|
92
|
+
updatedAt: string;
|
|
93
|
+
/**
|
|
94
|
+
* The caller's effective membership in the OWNING account (direct or
|
|
95
|
+
* inherited), embedded by the API on list/detail responses, or `null` when the
|
|
96
|
+
* caller has no membership. Use `callerMembership.permissions` to gate UI.
|
|
97
|
+
*/
|
|
98
|
+
callerMembership?: AccountMember | null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Client-facing ApplicationCredential shape (an application's OAuth client
|
|
103
|
+
* credentials). The raw secret is NEVER part of this shape — it is returned
|
|
104
|
+
* exactly once, separately, at creation/rotation.
|
|
105
|
+
*/
|
|
106
|
+
export interface ApplicationCredential {
|
|
107
|
+
_id: string;
|
|
108
|
+
applicationId: string;
|
|
109
|
+
name: string;
|
|
110
|
+
publicKey: string;
|
|
111
|
+
/**
|
|
112
|
+
* `oxy_sk_<id>` — the PUBLIC lookup half of a `machine` credential's bearer
|
|
113
|
+
* token, present only on that type. Safe to render: the secret half is 256
|
|
114
|
+
* bits that were shown exactly once and are never returned again.
|
|
115
|
+
*/
|
|
116
|
+
tokenPrefix?: string;
|
|
117
|
+
type: ApplicationCredentialType;
|
|
118
|
+
environment: ApplicationEnvironment;
|
|
119
|
+
scopes: string[];
|
|
120
|
+
status: ApplicationCredentialStatus;
|
|
121
|
+
lastUsedAt?: string;
|
|
122
|
+
expiresAt?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Audit link to the credential this one was rotated FROM. Populated on
|
|
125
|
+
* credentials created via rotation; absent on original credentials.
|
|
126
|
+
*/
|
|
127
|
+
rotatedFromCredentialId?: string;
|
|
128
|
+
createdByUserId: string;
|
|
129
|
+
createdAt: string;
|
|
130
|
+
updatedAt: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** Input accepted by `apps.create`. Staff-only fields are not settable here. */
|
|
134
|
+
export interface CreateApplicationInput {
|
|
135
|
+
name: string;
|
|
136
|
+
description?: string;
|
|
137
|
+
websiteUrl?: string;
|
|
138
|
+
/** Public privacy-policy URL (absolute `https://`). Shown on the OAuth consent screen. */
|
|
139
|
+
privacyPolicyUrl?: string;
|
|
140
|
+
/** Public terms-of-service URL (absolute `https://`). Shown on the OAuth consent screen. */
|
|
141
|
+
termsUrl?: string;
|
|
142
|
+
icon?: string;
|
|
143
|
+
redirectUris?: string[];
|
|
144
|
+
scopes?: string[];
|
|
145
|
+
/**
|
|
146
|
+
* Owning account `_id`. Omitted → the API defaults to the caller's personal
|
|
147
|
+
* account.
|
|
148
|
+
*/
|
|
149
|
+
ownerAccountId?: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Input accepted by `apps.update`. Staff-only fields are not settable here. */
|
|
153
|
+
export interface UpdateApplicationInput {
|
|
154
|
+
name?: string;
|
|
155
|
+
description?: string;
|
|
156
|
+
websiteUrl?: string;
|
|
157
|
+
/** Public privacy-policy URL (absolute `https://`, or `''` to clear). Shown on the OAuth consent screen. */
|
|
158
|
+
privacyPolicyUrl?: string;
|
|
159
|
+
/** Public terms-of-service URL (absolute `https://`, or `''` to clear). Shown on the OAuth consent screen. */
|
|
160
|
+
termsUrl?: string;
|
|
161
|
+
icon?: string;
|
|
162
|
+
redirectUris?: string[];
|
|
163
|
+
scopes?: string[];
|
|
164
|
+
webhookUrl?: string;
|
|
165
|
+
devWebhookUrl?: string;
|
|
166
|
+
status?: ApplicationStatus;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Input accepted by `apps.credentials.create`. */
|
|
170
|
+
export interface CreateApplicationCredentialInput {
|
|
171
|
+
name: string;
|
|
172
|
+
type: ApplicationCredentialType;
|
|
173
|
+
environment: ApplicationEnvironment;
|
|
174
|
+
scopes?: string[];
|
|
175
|
+
/**
|
|
176
|
+
* Lifetime of a `machine` credential, in seconds — 60 to 730 days. Omit for a
|
|
177
|
+
* key that does not expire on its own.
|
|
178
|
+
*
|
|
179
|
+
* **`machine` only.** On every other credential type `expires_at` means the
|
|
180
|
+
* rotation grace deadline, so a caller setting it at creation would make a
|
|
181
|
+
* brand-new credential indistinguishable from a rotated one. The server
|
|
182
|
+
* REJECTS it for those types rather than ignoring it, so sending it with the
|
|
183
|
+
* wrong `type` is a 400, not a silently dropped field.
|
|
184
|
+
*/
|
|
185
|
+
expiresInSeconds?: number;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Input accepted by `apps.credentials.rotate`. */
|
|
189
|
+
export interface RotateApplicationCredentialInput {
|
|
190
|
+
/**
|
|
191
|
+
* How long the superseded `machine` token keeps working, in seconds — 1 to 30
|
|
192
|
+
* days. Omitting it revokes the previous token the instant the replacement is
|
|
193
|
+
* minted, which is the safe default for a leaked key.
|
|
194
|
+
*
|
|
195
|
+
* **`machine` only, and opt-in.** `confidential`/`service` credentials always
|
|
196
|
+
* retire on the platform's fixed seven-day grace and the server REJECTS this
|
|
197
|
+
* field for them, so their contract is unchanged.
|
|
198
|
+
*/
|
|
199
|
+
graceSeconds?: number;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Result of creating an application credential — credential material is returned
|
|
204
|
+
* ONCE and can never be read back.
|
|
205
|
+
*
|
|
206
|
+
* Exactly one of the two fields carries it, decided by
|
|
207
|
+
* {@link ApplicationCredentialType}: `secret` for a `confidential`/`service`
|
|
208
|
+
* client, `token` for a `machine` API key, and NEITHER for a `public` client
|
|
209
|
+
* (`secret` is `null`). They are separate fields rather than one, so a surface
|
|
210
|
+
* that renders "the secret" cannot silently render an API key's bearer token
|
|
211
|
+
* under the wrong label, or a `null` where a token should be.
|
|
212
|
+
*/
|
|
213
|
+
export interface ApplicationCredentialWithSecret {
|
|
214
|
+
credential: ApplicationCredential;
|
|
215
|
+
/** The OAuth client secret. `null` for `public` and `machine` credentials. */
|
|
216
|
+
secret: string | null;
|
|
217
|
+
/** The full `oxy_sk_…` bearer token. Present ONLY for a `machine` credential. */
|
|
218
|
+
token?: string;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Result of rotating an application credential. Extends the create result with
|
|
223
|
+
* audit fields: the new credential material is returned ONCE, plus `rotatedFrom`
|
|
224
|
+
* (the previous credential's `credentialId`) and `graceExpiresAt`.
|
|
225
|
+
*/
|
|
226
|
+
export interface RotateApplicationCredentialResult extends ApplicationCredentialWithSecret {
|
|
227
|
+
/** The previous credential's `credentialId` that this rotation supersedes. */
|
|
228
|
+
rotatedFrom: string;
|
|
229
|
+
/**
|
|
230
|
+
* ISO timestamp at which the rotated-from credential stops being honoured, or
|
|
231
|
+
* `null` when no grace window was configured and it was revoked outright.
|
|
232
|
+
*
|
|
233
|
+
* Nullable because a `machine` credential's grace is OPT-IN (issue #972 §2.3):
|
|
234
|
+
* rotating an API key without asking for a window kills the old token
|
|
235
|
+
* immediately, and there is then no deadline to report. The OAuth/service
|
|
236
|
+
* types always carry their fixed seven-day deadline.
|
|
237
|
+
*/
|
|
238
|
+
graceExpiresAt: string | null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/** Time window for application usage statistics. */
|
|
242
|
+
export type ApplicationUsagePeriod = '24h' | '7d' | '30d' | '90d';
|
|
243
|
+
|
|
244
|
+
/** Aggregate totals for an application over the requested period. */
|
|
245
|
+
export interface ApplicationUsageSummary {
|
|
246
|
+
totalRequests: number;
|
|
247
|
+
totalTokens: number;
|
|
248
|
+
totalCredits: number;
|
|
249
|
+
avgResponseTime: number;
|
|
250
|
+
successfulRequests: number;
|
|
251
|
+
errorRequests: number;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** Per-day usage bucket. `_id` is the day key (e.g. `YYYY-MM-DD`). */
|
|
255
|
+
export interface ApplicationUsageByDay {
|
|
256
|
+
_id: string;
|
|
257
|
+
requests: number;
|
|
258
|
+
tokens: number;
|
|
259
|
+
credits: number;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** Per-endpoint usage bucket. `_id` is the endpoint identifier. */
|
|
263
|
+
export interface ApplicationUsageByEndpoint {
|
|
264
|
+
_id: string;
|
|
265
|
+
requests: number;
|
|
266
|
+
tokens: number;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** Usage statistics for an application over a period. */
|
|
270
|
+
export interface ApplicationUsageStats {
|
|
271
|
+
summary: ApplicationUsageSummary;
|
|
272
|
+
byDay: ApplicationUsageByDay[];
|
|
273
|
+
byEndpoint: ApplicationUsageByEndpoint[];
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
// OAuth consent (connected apps) types
|
|
279
|
+
// ---------------------------------------------------------------------------
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Sanitized, PUBLIC application identity returned by the API when resolving a
|
|
283
|
+
* cross-app/OAuth client to a registered application.
|
|
284
|
+
*
|
|
285
|
+
* This shape carries NO sensitive or membership fields — it is safe to display
|
|
286
|
+
* unauthenticated in consent/authorize screens and device-flow approval UIs. The
|
|
287
|
+
* API resolves a `client_id` (OAuth credential public key) to the owning
|
|
288
|
+
* application and projects only the fields below. `id` is the application's
|
|
289
|
+
* `_id` as a string.
|
|
290
|
+
*/
|
|
291
|
+
export interface PublicApplication {
|
|
292
|
+
/** The application's Mongo `_id` as a string. */
|
|
293
|
+
id: string;
|
|
294
|
+
/** Human-readable application name shown to the user. */
|
|
295
|
+
name: string;
|
|
296
|
+
/** Optional short description of what the application does. */
|
|
297
|
+
description?: string;
|
|
298
|
+
/** Optional icon URL for the application. */
|
|
299
|
+
icon?: string;
|
|
300
|
+
/** Optional public website/homepage URL for the application. */
|
|
301
|
+
websiteUrl?: string;
|
|
302
|
+
/** Optional public privacy-policy URL, rendered as a legal link on the consent screen. */
|
|
303
|
+
privacyPolicyUrl?: string;
|
|
304
|
+
/** Optional public terms-of-service URL, rendered as a legal link on the consent screen. */
|
|
305
|
+
termsUrl?: string;
|
|
306
|
+
/** Application classification (set by Oxy platform staff). */
|
|
307
|
+
type: ApplicationType;
|
|
308
|
+
/** Whether the application is an officially endorsed Oxy application. */
|
|
309
|
+
isOfficial: boolean;
|
|
310
|
+
/** Whether the application is an internal Oxy ecosystem application. */
|
|
311
|
+
isInternal: boolean;
|
|
312
|
+
/** OAuth scopes the application is configured to request. */
|
|
313
|
+
scopes: string[];
|
|
314
|
+
/** Optional display name of the developer/owner organisation. */
|
|
315
|
+
developerName?: string;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* A connected (OAuth-authorized) application from the current user's point of
|
|
320
|
+
* view: an application the user has granted access to via the consent flow.
|
|
321
|
+
*
|
|
322
|
+
* Returned by `GET /auth/grants` and rendered in the user-facing "Connected
|
|
323
|
+
* apps" management surface. Keyed by `applicationId` (the application's Mongo
|
|
324
|
+
* `_id`) rather than a credential/client id, so the grant — and a subsequent
|
|
325
|
+
* `apps.connected.revoke` — survive credential
|
|
326
|
+
* rotation. This is a display shape: it carries the application's name/logo and
|
|
327
|
+
* the granted scopes, never any membership or credential material.
|
|
328
|
+
*/
|
|
329
|
+
export interface ConnectedApp {
|
|
330
|
+
/** The connected application's Mongo `_id`. Use this to revoke the grant. */
|
|
331
|
+
applicationId: string;
|
|
332
|
+
/** Human-readable application name shown to the user. */
|
|
333
|
+
name: string;
|
|
334
|
+
/** Optional logo URL for the application. */
|
|
335
|
+
logoUrl?: string;
|
|
336
|
+
/** OAuth scopes the user has granted to the application. */
|
|
337
|
+
scopes: string[];
|
|
338
|
+
/** ISO timestamp of when the user first authorized the application. */
|
|
339
|
+
firstGrantedAt: string;
|
|
340
|
+
/** ISO timestamp of when the grant was last exercised. */
|
|
341
|
+
lastUsedAt: string;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/** An external MCP client authorized for one exact app resource and account. */
|
|
345
|
+
export interface ConnectedMcpClient {
|
|
346
|
+
id: string;
|
|
347
|
+
appSlug: string;
|
|
348
|
+
resource: string;
|
|
349
|
+
scopes: string[];
|
|
350
|
+
clientId: string;
|
|
351
|
+
clientName: string;
|
|
352
|
+
createdAt: string;
|
|
353
|
+
lastUsedAt: string;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
/** `oxy.apps.credentials` — an application's OAuth client credentials. */
|
|
358
|
+
export class AppCredentialsApi {
|
|
359
|
+
constructor(private readonly ctx: OxyContext) {}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* List an application's OAuth credentials. The response NEVER includes
|
|
363
|
+
* secrets.
|
|
364
|
+
* @param applicationId - The application's `_id`.
|
|
365
|
+
*/
|
|
366
|
+
async list(applicationId: string): Promise<ApplicationCredential[]> {
|
|
367
|
+
const res = await this.ctx.request<{ credentials?: ApplicationCredential[] }>(
|
|
368
|
+
'GET',
|
|
369
|
+
credentialsPath(applicationId),
|
|
370
|
+
undefined,
|
|
371
|
+
{ cache: true, cacheTTL: MEDIUM_TTL },
|
|
372
|
+
);
|
|
373
|
+
return res.credentials ?? [];
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Create an application credential. The plaintext `secret` is returned
|
|
378
|
+
* exactly ONCE; the server stores only a hash and will never return it again.
|
|
379
|
+
* @param applicationId - The application's `_id`.
|
|
380
|
+
* @param data - Credential configuration.
|
|
381
|
+
*/
|
|
382
|
+
async create(applicationId: string, data: CreateApplicationCredentialInput): Promise<ApplicationCredentialWithSecret> {
|
|
383
|
+
const result = await this.ctx.request<ApplicationCredentialWithSecret>('POST', credentialsPath(applicationId), data, {
|
|
384
|
+
cache: false,
|
|
385
|
+
});
|
|
386
|
+
this.ctx.oxy.cache.delete(`GET:${credentialsPath(applicationId)}`);
|
|
387
|
+
return result;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Rotate an application credential's secret. The new plaintext `secret` is
|
|
392
|
+
* returned exactly ONCE, along with audit fields: `rotatedFrom` (the previous
|
|
393
|
+
* credentialId) and `graceExpiresAt` (the end of the window during which the
|
|
394
|
+
* old credential is still honoured).
|
|
395
|
+
* @param applicationId - The application's `_id`.
|
|
396
|
+
* @param credentialId - The credential's `_id`.
|
|
397
|
+
* @param options - `graceSeconds` keeps a superseded `machine` token working
|
|
398
|
+
* for that long. Omitted, the previous token dies the moment the
|
|
399
|
+
* replacement is minted.
|
|
400
|
+
*/
|
|
401
|
+
async rotate(
|
|
402
|
+
applicationId: string,
|
|
403
|
+
credentialId: string,
|
|
404
|
+
options?: RotateApplicationCredentialInput,
|
|
405
|
+
): Promise<RotateApplicationCredentialResult> {
|
|
406
|
+
const result = await this.ctx.request<RotateApplicationCredentialResult>(
|
|
407
|
+
'POST',
|
|
408
|
+
`${credentialsPath(applicationId)}/${enc(credentialId)}/rotate`,
|
|
409
|
+
options,
|
|
410
|
+
{ cache: false },
|
|
411
|
+
);
|
|
412
|
+
this.ctx.oxy.cache.delete(`GET:${credentialsPath(applicationId)}`);
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Revoke an application credential (`status='revoked'`). Revoked credentials
|
|
418
|
+
* can no longer authenticate.
|
|
419
|
+
* @param applicationId - The application's `_id`.
|
|
420
|
+
* @param credentialId - The credential's `_id`.
|
|
421
|
+
*/
|
|
422
|
+
async revoke(applicationId: string, credentialId: string): Promise<AccountSuccessResult> {
|
|
423
|
+
const result = await this.ctx.request<AccountSuccessResult>(
|
|
424
|
+
'DELETE',
|
|
425
|
+
`${credentialsPath(applicationId)}/${enc(credentialId)}`,
|
|
426
|
+
undefined,
|
|
427
|
+
{ cache: false },
|
|
428
|
+
);
|
|
429
|
+
this.ctx.oxy.cache.delete(`GET:${credentialsPath(applicationId)}`);
|
|
430
|
+
return result;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/** `oxy.apps.connected` — third-party apps (and MCP clients) this user authorized. */
|
|
435
|
+
export class ConnectedAppsApi {
|
|
436
|
+
constructor(private readonly ctx: OxyContext) {}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* The applications this user granted access to through the consent flow,
|
|
440
|
+
* with the granted scopes and when the grant was first made and last used.
|
|
441
|
+
* `GET /auth/grants`, briefly cached; `revoke` busts it.
|
|
442
|
+
*/
|
|
443
|
+
async list(): Promise<ConnectedApp[]> {
|
|
444
|
+
return this.ctx.request<ConnectedApp[]>('GET', '/auth/grants', undefined, { cache: true, cacheTTL: SHORT_TTL });
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Revoke this user's grant for a connected application. After this the
|
|
449
|
+
* application can no longer act on the user's behalf until re-authorized.
|
|
450
|
+
* @param applicationId - The connected application's `_id` (a
|
|
451
|
+
* `ConnectedApp.applicationId`, NOT a credential/client id).
|
|
452
|
+
*/
|
|
453
|
+
async revoke(applicationId: string): Promise<void> {
|
|
454
|
+
await this.ctx.request<{ revoked: boolean }>('DELETE', `/auth/grants/${applicationId}`, undefined, { cache: false });
|
|
455
|
+
this.ctx.oxy.cache.delete('GET:/auth/grants');
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/** Resource-bound external MCP connections for the active Oxy account. */
|
|
459
|
+
async mcpClients(): Promise<ConnectedMcpClient[]> {
|
|
460
|
+
const res = await this.ctx.request<{ grants: ConnectedMcpClient[] }>('GET', '/auth/mcp/oauth/grants', undefined, {
|
|
461
|
+
cache: true,
|
|
462
|
+
cacheTTL: SHORT_TTL,
|
|
463
|
+
});
|
|
464
|
+
return res.grants;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/** Revoke one external MCP connection and every token in its family. */
|
|
468
|
+
async revokeMcpClient(grantId: string): Promise<void> {
|
|
469
|
+
await this.ctx.request<void>('DELETE', `/auth/mcp/oauth/grants/${enc(grantId)}`, undefined, { cache: false });
|
|
470
|
+
this.ctx.oxy.cache.delete('GET:/auth/mcp/oauth/grants');
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
export class AppsApi {
|
|
475
|
+
/** An application's OAuth client credentials. */
|
|
476
|
+
readonly credentials: AppCredentialsApi;
|
|
477
|
+
/** Third-party apps (and MCP clients) this user authorized. */
|
|
478
|
+
readonly connected: ConnectedAppsApi;
|
|
479
|
+
|
|
480
|
+
constructor(private readonly ctx: OxyContext) {
|
|
481
|
+
this.credentials = new AppCredentialsApi(ctx);
|
|
482
|
+
this.connected = new ConnectedAppsApi(ctx);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* The applications an account owns. `GET /applications?ownerAccountId=<id>`.
|
|
487
|
+
* @param accountId - The owning account's `_id`.
|
|
488
|
+
*/
|
|
489
|
+
async list(accountId: string): Promise<Application[]> {
|
|
490
|
+
const res = await this.ctx.request<{ applications?: Application[] }>(
|
|
491
|
+
'GET',
|
|
492
|
+
`/applications?ownerAccountId=${enc(accountId)}`,
|
|
493
|
+
undefined,
|
|
494
|
+
{ cache: true, cacheTTL: MEDIUM_TTL },
|
|
495
|
+
);
|
|
496
|
+
return res.applications ?? [];
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Fetch a single application by id.
|
|
501
|
+
* @param applicationId - The application's `_id`.
|
|
502
|
+
*/
|
|
503
|
+
async get(applicationId: string): Promise<Application> {
|
|
504
|
+
const res = await this.ctx.request<{ application: Application }>('GET', appPath(applicationId), undefined, {
|
|
505
|
+
cache: true,
|
|
506
|
+
cacheTTL: LONG_TTL,
|
|
507
|
+
});
|
|
508
|
+
return res.application;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Create an application owned by an account.
|
|
513
|
+
* @param data - Application configuration. `ownerAccountId` defaults to the
|
|
514
|
+
* caller's personal account when omitted. Staff-only fields are ignored.
|
|
515
|
+
*/
|
|
516
|
+
async create(data: CreateApplicationInput): Promise<Application> {
|
|
517
|
+
const res = await this.ctx.request<{ application: Application }>('POST', '/applications', data, { cache: false });
|
|
518
|
+
this.invalidateLists();
|
|
519
|
+
return res.application;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Update an application's mutable fields.
|
|
524
|
+
* @param applicationId - The application's `_id`.
|
|
525
|
+
* @param data - Subset of updatable fields. Staff-only fields are ignored.
|
|
526
|
+
*/
|
|
527
|
+
async update(applicationId: string, data: UpdateApplicationInput): Promise<Application> {
|
|
528
|
+
const res = await this.ctx.request<{ application: Application }>('PATCH', appPath(applicationId), data, {
|
|
529
|
+
cache: false,
|
|
530
|
+
});
|
|
531
|
+
this.invalidateLists([`GET:${appPath(applicationId)}`]);
|
|
532
|
+
return res.application;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Soft-delete an application.
|
|
537
|
+
* @param applicationId - The application's `_id`.
|
|
538
|
+
*/
|
|
539
|
+
async delete(applicationId: string): Promise<AccountSuccessResult> {
|
|
540
|
+
const result = await this.ctx.request<AccountSuccessResult>('DELETE', appPath(applicationId), undefined, {
|
|
541
|
+
cache: false,
|
|
542
|
+
});
|
|
543
|
+
this.invalidateLists([`GET:${appPath(applicationId)}`, `GET:${credentialsPath(applicationId)}`]);
|
|
544
|
+
return result;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Usage statistics for an application.
|
|
549
|
+
* @param applicationId - The application's `_id`.
|
|
550
|
+
* @param period - Time window (defaults to the server default).
|
|
551
|
+
*/
|
|
552
|
+
async usage(applicationId: string, period?: ApplicationUsagePeriod): Promise<ApplicationUsageStats> {
|
|
553
|
+
return this.ctx.request<ApplicationUsageStats>(
|
|
554
|
+
'GET',
|
|
555
|
+
`${appPath(applicationId)}/usage`,
|
|
556
|
+
period ? { period } : undefined,
|
|
557
|
+
{ cache: true, cacheTTL: SHORT_TTL },
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Resolve an OAuth `client_id` (an active credential's public key) to the
|
|
563
|
+
* owning application's PUBLIC identity. No authentication required — only
|
|
564
|
+
* sanitized, display-safe metadata; use it to render the requesting app in
|
|
565
|
+
* consent, authorize, and device-flow approval screens before any session
|
|
566
|
+
* exists.
|
|
567
|
+
*/
|
|
568
|
+
async getPublic(clientId: string): Promise<PublicApplication> {
|
|
569
|
+
const res = await this.ctx.request<{ application: PublicApplication }>(
|
|
570
|
+
'GET',
|
|
571
|
+
`/auth/oauth/client/${enc(clientId)}`,
|
|
572
|
+
undefined,
|
|
573
|
+
// Public client metadata (pre-session consent UI) — skip the bearer preflight.
|
|
574
|
+
{ cache: true, cacheTTL: MEDIUM_TTL, skipAuth: true },
|
|
575
|
+
);
|
|
576
|
+
return res.application;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Bust every cached application list — the unscoped entry and every
|
|
581
|
+
* owner-scoped `GET:/applications?ownerAccountId=<id>` variant — plus any
|
|
582
|
+
* extra keys, in one pass. The `?` prefix never matches the
|
|
583
|
+
* `GET:/applications/<id>…` detail keys.
|
|
584
|
+
*/
|
|
585
|
+
private invalidateLists(extraKeys: string[] = []): void {
|
|
586
|
+
this.ctx.http.invalidateCache({ keys: ['GET:/applications', ...extraKeys], prefixes: ['GET:/applications?'] });
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
function appPath(applicationId: string): string {
|
|
591
|
+
return `/applications/${enc(applicationId)}`;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
function credentialsPath(applicationId: string): string {
|
|
595
|
+
return `${appPath(applicationId)}/credentials`;
|
|
596
|
+
}
|