@oxy.so/core 1.18.0 → 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 +189 -112
- 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 +190 -113
- 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 +47 -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 -1
- 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 +201 -132
- 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 -1
- 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 -1440
- 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 -1400
- 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 -965
- 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__/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 -2028
- 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
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OxyServicesReputationMixin = OxyServicesReputationMixin;
|
|
4
|
-
const contracts_1 = require("@oxy.so/contracts");
|
|
5
|
-
const OxyServices_errors_1 = require("../OxyServices.errors");
|
|
6
|
-
const mixinHelpers_1 = require("./mixinHelpers");
|
|
7
|
-
/** Cache-key prefix for every cached `GET /reputation/...` response. */
|
|
8
|
-
const REPUTATION_CACHE_PREFIX = 'GET:/reputation/';
|
|
9
|
-
function OxyServicesReputationMixin(Base) {
|
|
10
|
-
return class extends Base {
|
|
11
|
-
constructor(...args) {
|
|
12
|
-
super(...args);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Get ANY user's reputation balance, in whichever view the server serves the
|
|
16
|
-
* caller.
|
|
17
|
-
*
|
|
18
|
-
* A third party gets `userId`, `total` and `trustTier` and nothing else, so
|
|
19
|
-
* the return type is a {@link ReputationBalanceView} union: narrow it with
|
|
20
|
-
* {@link isFullReputationBalance} before touching `breakdown`, `influence`
|
|
21
|
-
* or `reliability`. To read your OWN balance, call
|
|
22
|
-
* {@link getMyReputationBalance} instead — it returns the full shape with no
|
|
23
|
-
* narrowing.
|
|
24
|
-
*
|
|
25
|
-
* @param userId - The subject user's `_id` or publicKey.
|
|
26
|
-
*/
|
|
27
|
-
async getReputationBalance(userId) {
|
|
28
|
-
try {
|
|
29
|
-
return await this.makeRequest('GET', `/reputation/${encodeURIComponent(userId)}/balance`, undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.MEDIUM });
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
throw this.handleError(error);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Get the SIGNED-IN user's own reputation balance, in full.
|
|
37
|
-
*
|
|
38
|
-
* The subject view is the only one carrying `breakdown`, `influence` and
|
|
39
|
-
* `reliability`, and the subject is the common caller, so this is the
|
|
40
|
-
* ergonomic path: no id to pass, no narrowing to do.
|
|
41
|
-
*
|
|
42
|
-
* Throws rather than returning a half-populated object when the request was
|
|
43
|
-
* not authenticated as the subject — with no signed-in user, and when the
|
|
44
|
-
* server answered `200` with the public view anyway (which it does for an
|
|
45
|
-
* absent or lapsed token, since the endpoint's auth is optional). Both mean
|
|
46
|
-
* the private blocks are simply absent, and a thrown error is the only
|
|
47
|
-
* honest report of that.
|
|
48
|
-
*/
|
|
49
|
-
async getMyReputationBalance() {
|
|
50
|
-
const userId = this.getCurrentUserId();
|
|
51
|
-
if (!userId) {
|
|
52
|
-
throw new OxyServices_errors_1.OxyAuthenticationError('Reading your own reputation balance requires a signed-in user');
|
|
53
|
-
}
|
|
54
|
-
let balance;
|
|
55
|
-
try {
|
|
56
|
-
balance = await this.makeRequest('GET', `/reputation/${encodeURIComponent(userId)}/balance`, undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.MEDIUM });
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
throw this.handleError(error);
|
|
60
|
-
}
|
|
61
|
-
if (!(0, contracts_1.isFullReputationBalance)(balance)) {
|
|
62
|
-
throw new OxyServices_errors_1.OxyAuthenticationError('The reputation balance came back as the public view — the request was not authenticated as its subject');
|
|
63
|
-
}
|
|
64
|
-
return balance;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get the reputation leaderboard, ordered by lifetime total descending.
|
|
68
|
-
* @param limit - Page size (server-capped).
|
|
69
|
-
* @param offset - Page offset.
|
|
70
|
-
*/
|
|
71
|
-
async getReputationLeaderboard(limit, offset) {
|
|
72
|
-
try {
|
|
73
|
-
const params = {};
|
|
74
|
-
if (limit !== undefined)
|
|
75
|
-
params.limit = limit;
|
|
76
|
-
if (offset !== undefined)
|
|
77
|
-
params.offset = offset;
|
|
78
|
-
const res = await this.makeRequest('GET', '/reputation/leaderboard', Object.keys(params).length > 0 ? params : undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.LONG });
|
|
79
|
-
return res.data ?? [];
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
throw this.handleError(error);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* List the enabled reputation rules (for client display).
|
|
87
|
-
*/
|
|
88
|
-
async getReputationRules() {
|
|
89
|
-
try {
|
|
90
|
-
const res = await this.makeRequest('GET', '/reputation/rules', undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.EXTRA_LONG });
|
|
91
|
-
return res.rules ?? [];
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
throw this.handleError(error);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get a user's paginated reputation ledger, newest first (auth required).
|
|
99
|
-
* @param userId - The subject user's `_id` or publicKey.
|
|
100
|
-
* @param limit - Page size (server-capped).
|
|
101
|
-
* @param offset - Page offset.
|
|
102
|
-
*/
|
|
103
|
-
async getReputationTransactions(userId, limit, offset) {
|
|
104
|
-
try {
|
|
105
|
-
const params = {};
|
|
106
|
-
if (limit !== undefined)
|
|
107
|
-
params.limit = limit;
|
|
108
|
-
if (offset !== undefined)
|
|
109
|
-
params.offset = offset;
|
|
110
|
-
const res = await this.makeRequest('GET', `/reputation/${encodeURIComponent(userId)}/transactions`, Object.keys(params).length > 0 ? params : undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
111
|
-
return res.data ?? [];
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
throw this.handleError(error);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Get a user's capped influence weight for a given context (auth required).
|
|
119
|
-
* @param userId - The subject user's `_id` or publicKey.
|
|
120
|
-
* @param context - The weight axis to read (defaults server-side to `default`).
|
|
121
|
-
*/
|
|
122
|
-
async getReputationInfluence(userId, context) {
|
|
123
|
-
try {
|
|
124
|
-
return await this.makeRequest('GET', `/reputation/${encodeURIComponent(userId)}/influence`, context ? { context } : undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.MEDIUM });
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
throw this.handleError(error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Award (or penalise) reputation to a user by `actionType`. Restricted to
|
|
132
|
-
* service tokens and platform staff. Invalidates cached reputation reads.
|
|
133
|
-
* @param input - The award payload (subject, action, source, target, etc.).
|
|
134
|
-
*/
|
|
135
|
-
async awardReputation(input) {
|
|
136
|
-
try {
|
|
137
|
-
const res = await this.makeRequest('POST', '/reputation/award', input, { cache: false });
|
|
138
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
139
|
-
return res.transaction;
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
throw this.handleError(error);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Open a dispute against a transaction (auth required; the disputer is the
|
|
147
|
-
* authenticated user and must own the transaction).
|
|
148
|
-
* @param input - The transaction id, reason, and optional evidence.
|
|
149
|
-
*/
|
|
150
|
-
async createReputationDispute(input) {
|
|
151
|
-
try {
|
|
152
|
-
const res = await this.makeRequest('POST', '/reputation/disputes', input, { cache: false });
|
|
153
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
154
|
-
return res.dispute;
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
throw this.handleError(error);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* List a user's own reputation disputes (auth required; the caller must be
|
|
162
|
-
* the subject or platform staff).
|
|
163
|
-
* @param userId - The subject user's `_id` or publicKey.
|
|
164
|
-
* @param limit - Page size (server-capped).
|
|
165
|
-
* @param offset - Page offset.
|
|
166
|
-
*/
|
|
167
|
-
async getUserReputationDisputes(userId, limit, offset) {
|
|
168
|
-
try {
|
|
169
|
-
const params = {};
|
|
170
|
-
if (limit !== undefined)
|
|
171
|
-
params.limit = limit;
|
|
172
|
-
if (offset !== undefined)
|
|
173
|
-
params.offset = offset;
|
|
174
|
-
const res = await this.makeRequest('GET', `/reputation/${encodeURIComponent(userId)}/disputes`, Object.keys(params).length > 0 ? params : undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
175
|
-
return res.data ?? [];
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
throw this.handleError(error);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
// =========================================================================
|
|
182
|
-
// STAFF / ADMIN METHODS (require staff privileges server-side)
|
|
183
|
-
// =========================================================================
|
|
184
|
-
/**
|
|
185
|
-
* Create or update a reputation rule, keyed by `actionType` (staff only).
|
|
186
|
-
* Invalidates the cached rule list.
|
|
187
|
-
* @param input - The rule definition.
|
|
188
|
-
*/
|
|
189
|
-
async upsertReputationRule(input) {
|
|
190
|
-
try {
|
|
191
|
-
const res = await this.makeRequest('POST', '/reputation/rules', input, { cache: false });
|
|
192
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
193
|
-
return res.rule;
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
throw this.handleError(error);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Reverse a transaction (staff only): mark the original `reversed` and append
|
|
201
|
-
* a compensating `active` reversal with negated points. Invalidates cached
|
|
202
|
-
* reputation reads.
|
|
203
|
-
* @param transactionId - The transaction's id.
|
|
204
|
-
* @param input - Optional reason for the reversal.
|
|
205
|
-
*/
|
|
206
|
-
async reverseReputationTransaction(transactionId, input) {
|
|
207
|
-
try {
|
|
208
|
-
const res = await this.makeRequest('POST', `/reputation/transactions/${encodeURIComponent(transactionId)}/reverse`, input ?? {}, { cache: false });
|
|
209
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
210
|
-
return res;
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
throw this.handleError(error);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Void a transaction (staff only): mark it `voided` so it is excluded from
|
|
218
|
-
* the balance, with NO compensating entry. Invalidates cached reputation
|
|
219
|
-
* reads.
|
|
220
|
-
* @param transactionId - The transaction's id.
|
|
221
|
-
* @param input - Optional reason for the void.
|
|
222
|
-
*/
|
|
223
|
-
async voidReputationTransaction(transactionId, input) {
|
|
224
|
-
try {
|
|
225
|
-
const res = await this.makeRequest('POST', `/reputation/transactions/${encodeURIComponent(transactionId)}/void`, input ?? {}, { cache: false });
|
|
226
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
227
|
-
return res.transaction;
|
|
228
|
-
}
|
|
229
|
-
catch (error) {
|
|
230
|
-
throw this.handleError(error);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Force a recompute of a user's balance snapshot from their active ledger
|
|
235
|
-
* (staff only). Invalidates cached reputation reads.
|
|
236
|
-
*
|
|
237
|
-
* Staff-gated, so the response is always the full subject view — no
|
|
238
|
-
* narrowing needed.
|
|
239
|
-
*
|
|
240
|
-
* @param userId - The subject user's `_id` or publicKey.
|
|
241
|
-
*/
|
|
242
|
-
async recalculateReputation(userId) {
|
|
243
|
-
try {
|
|
244
|
-
const res = await this.makeRequest('POST', `/reputation/${encodeURIComponent(userId)}/recalculate`, undefined, { cache: false });
|
|
245
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
246
|
-
return res;
|
|
247
|
-
}
|
|
248
|
-
catch (error) {
|
|
249
|
-
throw this.handleError(error);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Get the open dispute queue across all users (staff only).
|
|
254
|
-
* @param limit - Page size (server-capped).
|
|
255
|
-
* @param offset - Page offset.
|
|
256
|
-
*/
|
|
257
|
-
async getReputationDisputeQueue(limit, offset) {
|
|
258
|
-
try {
|
|
259
|
-
const params = {};
|
|
260
|
-
if (limit !== undefined)
|
|
261
|
-
params.limit = limit;
|
|
262
|
-
if (offset !== undefined)
|
|
263
|
-
params.offset = offset;
|
|
264
|
-
const res = await this.makeRequest('GET', '/reputation/disputes', Object.keys(params).length > 0 ? params : undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
265
|
-
return res.data ?? [];
|
|
266
|
-
}
|
|
267
|
-
catch (error) {
|
|
268
|
-
throw this.handleError(error);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Resolve a dispute (staff only). Accepting reverses the disputed
|
|
273
|
-
* transaction; rejecting restores it to `active`. Invalidates cached
|
|
274
|
-
* reputation reads.
|
|
275
|
-
* @param disputeId - The dispute's id.
|
|
276
|
-
* @param input - The resolution (`accepted` or `rejected`).
|
|
277
|
-
*/
|
|
278
|
-
async resolveReputationDispute(disputeId, input) {
|
|
279
|
-
try {
|
|
280
|
-
const res = await this.makeRequest('POST', `/reputation/disputes/${encodeURIComponent(disputeId)}/resolve`, input, { cache: false });
|
|
281
|
-
this.clearCacheByPrefix(REPUTATION_CACHE_PREFIX);
|
|
282
|
-
return res.dispute;
|
|
283
|
-
}
|
|
284
|
-
catch (error) {
|
|
285
|
-
throw this.handleError(error);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OxyServicesSecurityMixin = OxyServicesSecurityMixin;
|
|
4
|
-
const logger_1 = require("../logger");
|
|
5
|
-
function OxyServicesSecurityMixin(Base) {
|
|
6
|
-
return class extends Base {
|
|
7
|
-
constructor(...args) {
|
|
8
|
-
super(...args);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Get user's security activity with pagination
|
|
12
|
-
* @param limit - Number of results (default: 50, max: 100)
|
|
13
|
-
* @param offset - Pagination offset (default: 0)
|
|
14
|
-
* @param eventType - Optional filter by event type
|
|
15
|
-
* @returns Security activity response with pagination
|
|
16
|
-
*/
|
|
17
|
-
async getSecurityActivity(limit, offset, eventType) {
|
|
18
|
-
try {
|
|
19
|
-
const params = {};
|
|
20
|
-
if (limit !== undefined)
|
|
21
|
-
params.limit = limit;
|
|
22
|
-
if (offset !== undefined)
|
|
23
|
-
params.offset = offset;
|
|
24
|
-
if (eventType)
|
|
25
|
-
params.eventType = eventType;
|
|
26
|
-
// The API responds with the standard paginated envelope:
|
|
27
|
-
// { data: SecurityActivity[], pagination: { total, limit, offset, hasMore } }
|
|
28
|
-
// SecurityActivityResponse is the flattened shape consumers expect.
|
|
29
|
-
const raw = await this.makeRequest('GET', '/security/activity', params, { cache: false });
|
|
30
|
-
const requestedLimit = typeof params.limit === 'number' ? params.limit : 0;
|
|
31
|
-
const requestedOffset = typeof params.offset === 'number' ? params.offset : 0;
|
|
32
|
-
return {
|
|
33
|
-
data: raw.data ?? [],
|
|
34
|
-
total: raw.pagination?.total ?? raw.data?.length ?? 0,
|
|
35
|
-
limit: raw.pagination?.limit ?? requestedLimit,
|
|
36
|
-
offset: raw.pagination?.offset ?? requestedOffset,
|
|
37
|
-
hasMore: raw.pagination?.hasMore ?? false,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
throw this.handleError(error);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Get recent security activity (convenience method)
|
|
46
|
-
* @param limit - Number of recent events to fetch (default: 10)
|
|
47
|
-
* @returns Array of recent security activities
|
|
48
|
-
*/
|
|
49
|
-
async getRecentSecurityActivity(limit = 10) {
|
|
50
|
-
try {
|
|
51
|
-
const response = await this.getSecurityActivity(limit, 0);
|
|
52
|
-
return response.data || [];
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
throw this.handleError(error);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Log private key exported event
|
|
60
|
-
* @param deviceId - Optional device ID for tracking
|
|
61
|
-
* @returns Promise that resolves when event is logged
|
|
62
|
-
*/
|
|
63
|
-
async logPrivateKeyExported(deviceId) {
|
|
64
|
-
try {
|
|
65
|
-
await this.makeRequest('POST', '/security/activity/private-key-exported', { deviceId }, { cache: false });
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
// Don't throw - logging failures shouldn't break user flow, but surface
|
|
69
|
-
// for monitoring via the shared logger sink.
|
|
70
|
-
logger_1.logger.warn('[OxyServices] Failed to log private key exported event', { component: 'OxyServices.security' }, error);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Log backup created event
|
|
75
|
-
* @param deviceId - Optional device ID for tracking
|
|
76
|
-
* @returns Promise that resolves when event is logged
|
|
77
|
-
*/
|
|
78
|
-
async logBackupCreated(deviceId) {
|
|
79
|
-
try {
|
|
80
|
-
await this.makeRequest('POST', '/security/activity/backup-created', { deviceId }, { cache: false });
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
// Don't throw - logging failures shouldn't break user flow, but surface
|
|
84
|
-
// for monitoring via the shared logger sink.
|
|
85
|
-
logger_1.logger.warn('[OxyServices] Failed to log backup created event', { component: 'OxyServices.security' }, error);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OxyServicesStoreMixin = OxyServicesStoreMixin;
|
|
4
|
-
const mixinHelpers_1 = require("./mixinHelpers");
|
|
5
|
-
/** Read one page out of that envelope. */
|
|
6
|
-
function pageOf(res) {
|
|
7
|
-
return {
|
|
8
|
-
items: res.data ?? [],
|
|
9
|
-
total: res.pagination?.total ?? 0,
|
|
10
|
-
hasMore: res.pagination?.hasMore ?? false,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Build a query string from the options that were actually supplied.
|
|
15
|
-
*
|
|
16
|
-
* Generic over the options object rather than taking a `Record`: an interface
|
|
17
|
-
* has no implicit index signature in TypeScript, so `StoreReviewsOptions` would
|
|
18
|
-
* not be assignable to one and every call site would need a cast.
|
|
19
|
-
*/
|
|
20
|
-
function queryOf(params) {
|
|
21
|
-
const search = new URLSearchParams();
|
|
22
|
-
for (const [key, value] of Object.entries(params)) {
|
|
23
|
-
if (value !== undefined)
|
|
24
|
-
search.set(key, String(value));
|
|
25
|
-
}
|
|
26
|
-
const rendered = search.toString();
|
|
27
|
-
return rendered ? `?${rendered}` : '';
|
|
28
|
-
}
|
|
29
|
-
function OxyServicesStoreMixin(Base) {
|
|
30
|
-
return class extends Base {
|
|
31
|
-
constructor(...args) {
|
|
32
|
-
super(...args);
|
|
33
|
-
}
|
|
34
|
-
// =========================================================================
|
|
35
|
-
// The storefront — /store. No authentication: everything served is public.
|
|
36
|
-
// =========================================================================
|
|
37
|
-
/** The shelves, in the order the store curates them. */
|
|
38
|
-
async listStoreCategories() {
|
|
39
|
-
try {
|
|
40
|
-
const res = await this.makeRequest('GET', '/store/categories', undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.MEDIUM });
|
|
41
|
-
return res.data ?? [];
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
throw this.handleError(error);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Published listings, newest first, optionally one shelf.
|
|
49
|
-
*
|
|
50
|
-
* An unknown category slug is an EMPTY shelf, not every app on the store —
|
|
51
|
-
* so a typo shows nothing rather than showing everything.
|
|
52
|
-
*
|
|
53
|
-
* @param options - `category` is a category slug; `limit` defaults to 24.
|
|
54
|
-
*/
|
|
55
|
-
async listStoreApps(options = {}) {
|
|
56
|
-
try {
|
|
57
|
-
const res = await this.makeRequest('GET', `/store/apps${queryOf(options)}`, undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
58
|
-
return pageOf(res);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
throw this.handleError(error);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* One store page.
|
|
66
|
-
*
|
|
67
|
-
* A draft answers 404 exactly as an unknown slug does: whether an
|
|
68
|
-
* unpublished page exists under a name is not something a visitor learns.
|
|
69
|
-
*
|
|
70
|
-
* @param slug - The listing's public slug, not an application id.
|
|
71
|
-
*/
|
|
72
|
-
async getStoreApp(slug) {
|
|
73
|
-
try {
|
|
74
|
-
const res = await this.makeRequest('GET', `/store/apps/${encodeURIComponent(slug)}`, undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
75
|
-
return res.data;
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
throw this.handleError(error);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/** Visible reviews for a published app, each with the publisher's reply. */
|
|
82
|
-
async listStoreReviews(slug, options = {}) {
|
|
83
|
-
try {
|
|
84
|
-
const res = await this.makeRequest('GET', `/store/apps/${encodeURIComponent(slug)}/reviews${queryOf(options)}`, undefined, { cache: true, cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT });
|
|
85
|
-
return pageOf(res);
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
throw this.handleError(error);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
// =========================================================================
|
|
92
|
-
// Reviewing — any signed-in Oxy account
|
|
93
|
-
// =========================================================================
|
|
94
|
-
/** The caller's own review of an app, or `null` if they have not written one. */
|
|
95
|
-
async getMyStoreReview(slug) {
|
|
96
|
-
try {
|
|
97
|
-
const res = await this.makeRequest('GET', `/store/apps/${encodeURIComponent(slug)}/review`, undefined, { cache: false });
|
|
98
|
-
return res.data ?? null;
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
throw this.handleError(error);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Write the caller's review, or replace what they said before.
|
|
106
|
-
*
|
|
107
|
-
* A person has one review per app, so this sets it rather than adding one.
|
|
108
|
-
* Rewriting does not clear a moderator's decision: a hidden review stays
|
|
109
|
-
* hidden when its author edits it.
|
|
110
|
-
*/
|
|
111
|
-
async writeStoreReview(slug, input) {
|
|
112
|
-
try {
|
|
113
|
-
const res = await this.makeRequest('PUT', `/store/apps/${encodeURIComponent(slug)}/review`, input, { cache: false });
|
|
114
|
-
return res.data;
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
throw this.handleError(error);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/** Withdraw the caller's own review. A real delete — the words were theirs. */
|
|
121
|
-
async deleteMyStoreReview(slug) {
|
|
122
|
-
try {
|
|
123
|
-
await this.makeRequest('DELETE', `/store/apps/${encodeURIComponent(slug)}/review`, undefined, { cache: false });
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
throw this.handleError(error);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Answer a review on the publisher's behalf.
|
|
131
|
-
*
|
|
132
|
-
* Requires `app:update` over the application's owning account — the same
|
|
133
|
-
* permission that guards every other write to that application. Addressed
|
|
134
|
-
* by review id because the reply belongs to the review, and a listing can be
|
|
135
|
-
* renamed or withdrawn out from under it.
|
|
136
|
-
*/
|
|
137
|
-
async replyToStoreReview(reviewId, body) {
|
|
138
|
-
try {
|
|
139
|
-
const res = await this.makeRequest('PUT', `/store/reviews/${encodeURIComponent(reviewId)}/reply`, { body }, { cache: false });
|
|
140
|
-
return res.data;
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
throw this.handleError(error);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/** Withdraw the publisher's answer. Same permission that wrote it. */
|
|
147
|
-
async deleteStoreReviewReply(reviewId) {
|
|
148
|
-
try {
|
|
149
|
-
await this.makeRequest('DELETE', `/store/reviews/${encodeURIComponent(reviewId)}/reply`, undefined, { cache: false });
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
throw this.handleError(error);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// =========================================================================
|
|
156
|
-
// The publisher's listing — /applications/:appId/listing
|
|
157
|
-
// =========================================================================
|
|
158
|
-
/** The application's store page in whatever state, or `null` if it has none. */
|
|
159
|
-
async getAppListing(applicationId) {
|
|
160
|
-
try {
|
|
161
|
-
return await this.makeRequest('GET', `/applications/${encodeURIComponent(applicationId)}/listing`, undefined, { cache: false });
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
throw this.handleError(error);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Create the page or replace its content. Never its status.
|
|
169
|
-
*
|
|
170
|
-
* Editing does not move a page: correcting a typo on a live listing leaves
|
|
171
|
-
* it live, and fixing a rejected one does not re-submit it.
|
|
172
|
-
*/
|
|
173
|
-
async writeAppListing(applicationId, input) {
|
|
174
|
-
try {
|
|
175
|
-
return await this.makeRequest('PUT', `/applications/${encodeURIComponent(applicationId)}/listing`, input, { cache: false });
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
throw this.handleError(error);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
/** Hand the page to the store for review. From a draft, or a rejected page once fixed. */
|
|
182
|
-
async submitAppListing(applicationId) {
|
|
183
|
-
try {
|
|
184
|
-
return await this.makeRequest('POST', `/applications/${encodeURIComponent(applicationId)}/listing/submit`, undefined, { cache: false });
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
throw this.handleError(error);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Take the page down, or withdraw it from the queue.
|
|
192
|
-
*
|
|
193
|
-
* Back to a draft, never deleted: the slug, the words and the screenshots
|
|
194
|
-
* are the publisher's work, and the reviews were never the listing's to take
|
|
195
|
-
* with them.
|
|
196
|
-
*/
|
|
197
|
-
async unpublishAppListing(applicationId) {
|
|
198
|
-
try {
|
|
199
|
-
return await this.makeRequest('POST', `/applications/${encodeURIComponent(applicationId)}/listing/unpublish`, undefined, { cache: false });
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
throw this.handleError(error);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// =========================================================================
|
|
206
|
-
// Screenshots
|
|
207
|
-
// =========================================================================
|
|
208
|
-
/** Every picture on the listing, in the author's order. */
|
|
209
|
-
async listAppListingScreenshots(applicationId) {
|
|
210
|
-
try {
|
|
211
|
-
return await this.makeRequest('GET', `/applications/${encodeURIComponent(applicationId)}/listing/screenshots`, undefined, { cache: false });
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
throw this.handleError(error);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Attach an already-uploaded image, appended to the end.
|
|
219
|
-
*
|
|
220
|
-
* Upload through the assets surface first; the store keeps a reference
|
|
221
|
-
* rather than a second copy of the asset pipeline. The file must be live, an
|
|
222
|
-
* image, and one the caller is entitled to.
|
|
223
|
-
*/
|
|
224
|
-
async addAppListingScreenshot(applicationId, input) {
|
|
225
|
-
try {
|
|
226
|
-
return await this.makeRequest('POST', `/applications/${encodeURIComponent(applicationId)}/listing/screenshots`, input, { cache: false });
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
throw this.handleError(error);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/** Edit a picture's caption or the frame it was taken in. Order is {@link reorderAppListingScreenshots}. */
|
|
233
|
-
async updateAppListingScreenshot(applicationId, screenshotId, input) {
|
|
234
|
-
try {
|
|
235
|
-
return await this.makeRequest('PATCH', `/applications/${encodeURIComponent(applicationId)}/listing/screenshots/${encodeURIComponent(screenshotId)}`, input, { cache: false });
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
throw this.handleError(error);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/** Remove a picture. The uploaded file stays — it may be in use elsewhere. */
|
|
242
|
-
async deleteAppListingScreenshot(applicationId, screenshotId) {
|
|
243
|
-
try {
|
|
244
|
-
await this.makeRequest('DELETE', `/applications/${encodeURIComponent(applicationId)}/listing/screenshots/${encodeURIComponent(screenshotId)}`, undefined, { cache: false });
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
throw this.handleError(error);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Set the order of every picture at once.
|
|
252
|
-
*
|
|
253
|
-
* Send EVERY id on the listing, exactly once, in the order they should
|
|
254
|
-
* appear. A partial list is rejected rather than applied: it would leave the
|
|
255
|
-
* pictures it omits at their old positions, interleaved with the new ones.
|
|
256
|
-
*/
|
|
257
|
-
async reorderAppListingScreenshots(applicationId, screenshotIds) {
|
|
258
|
-
try {
|
|
259
|
-
return await this.makeRequest('PUT', `/applications/${encodeURIComponent(applicationId)}/listing/screenshots/order`, { screenshotIds }, { cache: false });
|
|
260
|
-
}
|
|
261
|
-
catch (error) {
|
|
262
|
-
throw this.handleError(error);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
}
|