@oxy.so/core 1.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/LICENSE +202 -0
- package/NOTICE +16 -0
- package/README.md +221 -0
- package/dist/cjs/.tsbuildinfo +1 -0
- package/dist/cjs/HttpService.js +1270 -0
- package/dist/cjs/OxyServices.base.js +390 -0
- package/dist/cjs/OxyServices.errors.js +95 -0
- package/dist/cjs/OxyServices.js +72 -0
- package/dist/cjs/boot/sessionColdBoot.js +395 -0
- package/dist/cjs/constants/version.js +16 -0
- package/dist/cjs/crypto/aead.js +79 -0
- package/dist/cjs/crypto/ecdh.js +35 -0
- package/dist/cjs/crypto/identityMarker.js +255 -0
- package/dist/cjs/crypto/kdf.js +39 -0
- package/dist/cjs/crypto/keyManager.js +2234 -0
- package/dist/cjs/crypto/polyfill.js +131 -0
- package/dist/cjs/crypto/recoveryPhrase.js +242 -0
- package/dist/cjs/crypto/signatureService.js +273 -0
- package/dist/cjs/i18n/accountCategoryLabels.js +44 -0
- package/dist/cjs/i18n/accountRoleLabels.js +27 -0
- package/dist/cjs/i18n/index.js +90 -0
- package/dist/cjs/i18n/locales/ar-SA.json +282 -0
- package/dist/cjs/i18n/locales/ca-ES.json +282 -0
- package/dist/cjs/i18n/locales/de-DE.json +282 -0
- package/dist/cjs/i18n/locales/en-US.json +2161 -0
- package/dist/cjs/i18n/locales/es-ES.json +2161 -0
- package/dist/cjs/i18n/locales/fr-FR.json +282 -0
- package/dist/cjs/i18n/locales/it-IT.json +282 -0
- package/dist/cjs/i18n/locales/ja-JP.json +282 -0
- package/dist/cjs/i18n/locales/ko-KR.json +282 -0
- package/dist/cjs/i18n/locales/locales/ar-SA.json +282 -0
- package/dist/cjs/i18n/locales/locales/ca-ES.json +282 -0
- package/dist/cjs/i18n/locales/locales/de-DE.json +282 -0
- package/dist/cjs/i18n/locales/locales/en-US.json +2161 -0
- package/dist/cjs/i18n/locales/locales/es-ES.json +2161 -0
- package/dist/cjs/i18n/locales/locales/fr-FR.json +282 -0
- package/dist/cjs/i18n/locales/locales/it-IT.json +282 -0
- package/dist/cjs/i18n/locales/locales/ja-JP.json +282 -0
- package/dist/cjs/i18n/locales/locales/ko-KR.json +282 -0
- package/dist/cjs/i18n/locales/locales/pt-PT.json +282 -0
- package/dist/cjs/i18n/locales/locales/zh-CN.json +282 -0
- package/dist/cjs/i18n/locales/pt-PT.json +282 -0
- package/dist/cjs/i18n/locales/zh-CN.json +282 -0
- package/dist/cjs/i18n/reputationCategoryLabels.js +20 -0
- package/dist/cjs/i18n/trustTierLabels.js +19 -0
- package/dist/cjs/index.js +498 -0
- package/dist/cjs/inference/OxyInferenceClient.js +544 -0
- package/dist/cjs/logger/index.js +149 -0
- package/dist/cjs/mixins/OxyServices.accounts.js +555 -0
- package/dist/cjs/mixins/OxyServices.analytics.js +49 -0
- package/dist/cjs/mixins/OxyServices.appData.js +108 -0
- package/dist/cjs/mixins/OxyServices.assets.js +764 -0
- package/dist/cjs/mixins/OxyServices.auth.js +1254 -0
- package/dist/cjs/mixins/OxyServices.chains.js +73 -0
- package/dist/cjs/mixins/OxyServices.civic.js +611 -0
- package/dist/cjs/mixins/OxyServices.connectedApps.js +78 -0
- package/dist/cjs/mixins/OxyServices.contacts.js +50 -0
- package/dist/cjs/mixins/OxyServices.deviceBoot.js +191 -0
- package/dist/cjs/mixins/OxyServices.deviceTransfer.js +314 -0
- package/dist/cjs/mixins/OxyServices.devices.js +116 -0
- package/dist/cjs/mixins/OxyServices.features.js +335 -0
- package/dist/cjs/mixins/OxyServices.followGraph.js +221 -0
- package/dist/cjs/mixins/OxyServices.identity.js +461 -0
- package/dist/cjs/mixins/OxyServices.identityBackup.js +172 -0
- package/dist/cjs/mixins/OxyServices.inference.js +59 -0
- package/dist/cjs/mixins/OxyServices.language.js +125 -0
- package/dist/cjs/mixins/OxyServices.links.js +72 -0
- package/dist/cjs/mixins/OxyServices.location.js +43 -0
- package/dist/cjs/mixins/OxyServices.nodes.js +175 -0
- package/dist/cjs/mixins/OxyServices.notifications.js +63 -0
- package/dist/cjs/mixins/OxyServices.payment.js +158 -0
- package/dist/cjs/mixins/OxyServices.privacy.js +199 -0
- package/dist/cjs/mixins/OxyServices.reputation.js +289 -0
- package/dist/cjs/mixins/OxyServices.security.js +89 -0
- package/dist/cjs/mixins/OxyServices.store.js +266 -0
- package/dist/cjs/mixins/OxyServices.topics.js +137 -0
- package/dist/cjs/mixins/OxyServices.user.js +902 -0
- package/dist/cjs/mixins/OxyServices.utility.js +1098 -0
- package/dist/cjs/mixins/index.js +135 -0
- package/dist/cjs/mixins/mixinHelpers.js +53 -0
- package/dist/cjs/models/Topic.js +16 -0
- package/dist/cjs/models/interfaces.js +20 -0
- package/dist/cjs/models/session.js +2 -0
- package/dist/cjs/server/auth.js +167 -0
- package/dist/cjs/server/capabilityTicket.js +192 -0
- package/dist/cjs/server/cors.js +225 -0
- package/dist/cjs/server/index.js +97 -0
- package/dist/cjs/server/rateLimit.js +207 -0
- package/dist/cjs/server/safeFetch.js +458 -0
- package/dist/cjs/server/securityHeaders.js +377 -0
- package/dist/cjs/server/userInvalidation.js +156 -0
- package/dist/cjs/server/verifySecret.js +50 -0
- package/dist/cjs/session/SessionClient.js +865 -0
- package/dist/cjs/session/accountDelegationAccess.js +48 -0
- package/dist/cjs/session/accountDialogController.js +1131 -0
- package/dist/cjs/session/accountSwitchTargets.js +81 -0
- package/dist/cjs/session/authStateStore.js +404 -0
- package/dist/cjs/session/createSessionClient.js +32 -0
- package/dist/cjs/session/deviceDirectory.js +143 -0
- package/dist/cjs/session/deviceSwitcherRows.js +76 -0
- package/dist/cjs/session/identityPin.js +256 -0
- package/dist/cjs/session/identitySession.js +135 -0
- package/dist/cjs/session/projectSessionState.js +121 -0
- package/dist/cjs/session/refresh.js +398 -0
- package/dist/cjs/session/sessionClientHost.js +34 -0
- package/dist/cjs/session/sharedDeviceCredential.js +247 -0
- package/dist/cjs/session/socketLoader.js +55 -0
- package/dist/cjs/shared/utils/colorUtils.js +153 -0
- package/dist/cjs/shared/utils/errorUtils.js +183 -0
- package/dist/cjs/shared/utils/index.js +49 -0
- package/dist/cjs/shared/utils/networkUtils.js +183 -0
- package/dist/cjs/shared/utils/themeUtils.js +106 -0
- package/dist/cjs/utils/accountCacheSweep.js +80 -0
- package/dist/cjs/utils/accountUtils.js +140 -0
- package/dist/cjs/utils/activityId.js +6 -0
- package/dist/cjs/utils/apiUtils.js +91 -0
- package/dist/cjs/utils/asyncUtils.js +222 -0
- package/dist/cjs/utils/authHelpers.js +120 -0
- package/dist/cjs/utils/authWebUrl.js +19 -0
- package/dist/cjs/utils/avatarUtils.js +29 -0
- package/dist/cjs/utils/cache.js +235 -0
- package/dist/cjs/utils/cacheKey.js +85 -0
- package/dist/cjs/utils/coldBoot.js +122 -0
- package/dist/cjs/utils/commonsApproval.js +31 -0
- package/dist/cjs/utils/commonsDelivery.js +59 -0
- package/dist/cjs/utils/deviceManager.js +174 -0
- package/dist/cjs/utils/displayNamePolicyRanges.generated.js +60 -0
- package/dist/cjs/utils/edgeRegion.js +6 -0
- package/dist/cjs/utils/errorUtils.js +243 -0
- package/dist/cjs/utils/identityCacheSweep.js +97 -0
- package/dist/cjs/utils/languageUtils.js +224 -0
- package/dist/cjs/utils/oauthPkce.js +311 -0
- package/dist/cjs/utils/officialOrigins.js +64 -0
- package/dist/cjs/utils/oxyServiceEnvironment.js +19 -0
- package/dist/cjs/utils/platform.js +119 -0
- package/dist/cjs/utils/profileLinks.js +63 -0
- package/dist/cjs/utils/redactUrl.js +29 -0
- package/dist/cjs/utils/registrableApex.js +45 -0
- package/dist/cjs/utils/requestUtils.js +209 -0
- package/dist/cjs/utils/sessionUtils.js +181 -0
- package/dist/cjs/utils/textNormalization.js +158 -0
- package/dist/cjs/utils/userHandle.js +37 -0
- package/dist/cjs/utils/userIdentity.js +50 -0
- package/dist/cjs/utils/validationUtils.js +370 -0
- package/dist/cjs/utils/webauthnOrigin.js +51 -0
- package/dist/esm/.tsbuildinfo +1 -0
- package/dist/esm/HttpService.js +1266 -0
- package/dist/esm/OxyServices.base.js +386 -0
- package/dist/esm/OxyServices.errors.js +88 -0
- package/dist/esm/OxyServices.js +66 -0
- package/dist/esm/boot/sessionColdBoot.js +392 -0
- package/dist/esm/constants/version.js +13 -0
- package/dist/esm/crypto/aead.js +74 -0
- package/dist/esm/crypto/ecdh.js +32 -0
- package/dist/esm/crypto/identityMarker.js +248 -0
- package/dist/esm/crypto/kdf.js +36 -0
- package/dist/esm/crypto/keyManager.js +2227 -0
- package/dist/esm/crypto/polyfill.js +129 -0
- package/dist/esm/crypto/recoveryPhrase.js +238 -0
- package/dist/esm/crypto/signatureService.js +269 -0
- package/dist/esm/i18n/accountCategoryLabels.js +37 -0
- package/dist/esm/i18n/accountRoleLabels.js +20 -0
- package/dist/esm/i18n/index.js +83 -0
- package/dist/esm/i18n/locales/ar-SA.json +282 -0
- package/dist/esm/i18n/locales/ca-ES.json +282 -0
- package/dist/esm/i18n/locales/de-DE.json +282 -0
- package/dist/esm/i18n/locales/en-US.json +2161 -0
- package/dist/esm/i18n/locales/es-ES.json +2161 -0
- package/dist/esm/i18n/locales/fr-FR.json +282 -0
- package/dist/esm/i18n/locales/it-IT.json +282 -0
- package/dist/esm/i18n/locales/ja-JP.json +282 -0
- package/dist/esm/i18n/locales/ko-KR.json +282 -0
- package/dist/esm/i18n/locales/locales/ar-SA.json +282 -0
- package/dist/esm/i18n/locales/locales/ca-ES.json +282 -0
- package/dist/esm/i18n/locales/locales/de-DE.json +282 -0
- package/dist/esm/i18n/locales/locales/en-US.json +2161 -0
- package/dist/esm/i18n/locales/locales/es-ES.json +2161 -0
- package/dist/esm/i18n/locales/locales/fr-FR.json +282 -0
- package/dist/esm/i18n/locales/locales/it-IT.json +282 -0
- package/dist/esm/i18n/locales/locales/ja-JP.json +282 -0
- package/dist/esm/i18n/locales/locales/ko-KR.json +282 -0
- package/dist/esm/i18n/locales/locales/pt-PT.json +282 -0
- package/dist/esm/i18n/locales/locales/zh-CN.json +282 -0
- package/dist/esm/i18n/locales/pt-PT.json +282 -0
- package/dist/esm/i18n/locales/zh-CN.json +282 -0
- package/dist/esm/i18n/reputationCategoryLabels.js +13 -0
- package/dist/esm/i18n/trustTierLabels.js +12 -0
- package/dist/esm/index.js +254 -0
- package/dist/esm/inference/OxyInferenceClient.js +538 -0
- package/dist/esm/logger/index.js +140 -0
- package/dist/esm/mixins/OxyServices.accounts.js +543 -0
- package/dist/esm/mixins/OxyServices.analytics.js +46 -0
- package/dist/esm/mixins/OxyServices.appData.js +103 -0
- package/dist/esm/mixins/OxyServices.assets.js +761 -0
- package/dist/esm/mixins/OxyServices.auth.js +1247 -0
- package/dist/esm/mixins/OxyServices.chains.js +70 -0
- package/dist/esm/mixins/OxyServices.civic.js +605 -0
- package/dist/esm/mixins/OxyServices.connectedApps.js +75 -0
- package/dist/esm/mixins/OxyServices.contacts.js +47 -0
- package/dist/esm/mixins/OxyServices.deviceBoot.js +186 -0
- package/dist/esm/mixins/OxyServices.deviceTransfer.js +311 -0
- package/dist/esm/mixins/OxyServices.devices.js +113 -0
- package/dist/esm/mixins/OxyServices.features.js +332 -0
- package/dist/esm/mixins/OxyServices.followGraph.js +218 -0
- package/dist/esm/mixins/OxyServices.identity.js +457 -0
- package/dist/esm/mixins/OxyServices.identityBackup.js +169 -0
- package/dist/esm/mixins/OxyServices.inference.js +56 -0
- package/dist/esm/mixins/OxyServices.language.js +122 -0
- package/dist/esm/mixins/OxyServices.links.js +69 -0
- package/dist/esm/mixins/OxyServices.location.js +40 -0
- package/dist/esm/mixins/OxyServices.nodes.js +172 -0
- package/dist/esm/mixins/OxyServices.notifications.js +60 -0
- package/dist/esm/mixins/OxyServices.payment.js +155 -0
- package/dist/esm/mixins/OxyServices.privacy.js +196 -0
- package/dist/esm/mixins/OxyServices.reputation.js +286 -0
- package/dist/esm/mixins/OxyServices.security.js +86 -0
- package/dist/esm/mixins/OxyServices.store.js +263 -0
- package/dist/esm/mixins/OxyServices.topics.js +134 -0
- package/dist/esm/mixins/OxyServices.user.js +899 -0
- package/dist/esm/mixins/OxyServices.utility.js +1095 -0
- package/dist/esm/mixins/index.js +132 -0
- package/dist/esm/mixins/mixinHelpers.js +48 -0
- package/dist/esm/models/Topic.js +13 -0
- package/dist/esm/models/interfaces.js +17 -0
- package/dist/esm/models/session.js +1 -0
- package/dist/esm/server/auth.js +154 -0
- package/dist/esm/server/capabilityTicket.js +183 -0
- package/dist/esm/server/cors.js +220 -0
- package/dist/esm/server/index.js +47 -0
- package/dist/esm/server/rateLimit.js +201 -0
- package/dist/esm/server/safeFetch.js +447 -0
- package/dist/esm/server/securityHeaders.js +364 -0
- package/dist/esm/server/userInvalidation.js +152 -0
- package/dist/esm/server/verifySecret.js +47 -0
- package/dist/esm/session/SessionClient.js +861 -0
- package/dist/esm/session/accountDelegationAccess.js +45 -0
- package/dist/esm/session/accountDialogController.js +1126 -0
- package/dist/esm/session/accountSwitchTargets.js +77 -0
- package/dist/esm/session/authStateStore.js +398 -0
- package/dist/esm/session/createSessionClient.js +29 -0
- package/dist/esm/session/deviceDirectory.js +135 -0
- package/dist/esm/session/deviceSwitcherRows.js +72 -0
- package/dist/esm/session/identityPin.js +249 -0
- package/dist/esm/session/identitySession.js +131 -0
- package/dist/esm/session/projectSessionState.js +114 -0
- package/dist/esm/session/refresh.js +390 -0
- package/dist/esm/session/sessionClientHost.js +31 -0
- package/dist/esm/session/sharedDeviceCredential.js +239 -0
- package/dist/esm/session/socketLoader.js +19 -0
- package/dist/esm/shared/utils/colorUtils.js +143 -0
- package/dist/esm/shared/utils/errorUtils.js +170 -0
- package/dist/esm/shared/utils/index.js +15 -0
- package/dist/esm/shared/utils/networkUtils.js +173 -0
- package/dist/esm/shared/utils/themeUtils.js +98 -0
- package/dist/esm/utils/accountCacheSweep.js +75 -0
- package/dist/esm/utils/accountUtils.js +131 -0
- package/dist/esm/utils/activityId.js +2 -0
- package/dist/esm/utils/apiUtils.js +84 -0
- package/dist/esm/utils/asyncUtils.js +207 -0
- package/dist/esm/utils/authHelpers.js +111 -0
- package/dist/esm/utils/authWebUrl.js +16 -0
- package/dist/esm/utils/avatarUtils.js +26 -0
- package/dist/esm/utils/cache.js +227 -0
- package/dist/esm/utils/cacheKey.js +80 -0
- package/dist/esm/utils/coldBoot.js +119 -0
- package/dist/esm/utils/commonsApproval.js +27 -0
- package/dist/esm/utils/commonsDelivery.js +54 -0
- package/dist/esm/utils/deviceManager.js +170 -0
- package/dist/esm/utils/displayNamePolicyRanges.generated.js +57 -0
- package/dist/esm/utils/edgeRegion.js +2 -0
- package/dist/esm/utils/errorUtils.js +232 -0
- package/dist/esm/utils/identityCacheSweep.js +92 -0
- package/dist/esm/utils/languageUtils.js +212 -0
- package/dist/esm/utils/oauthPkce.js +297 -0
- package/dist/esm/utils/officialOrigins.js +59 -0
- package/dist/esm/utils/oxyServiceEnvironment.js +16 -0
- package/dist/esm/utils/platform.js +110 -0
- package/dist/esm/utils/profileLinks.js +60 -0
- package/dist/esm/utils/redactUrl.js +26 -0
- package/dist/esm/utils/registrableApex.js +42 -0
- package/dist/esm/utils/requestUtils.js +203 -0
- package/dist/esm/utils/sessionUtils.js +171 -0
- package/dist/esm/utils/textNormalization.js +154 -0
- package/dist/esm/utils/userHandle.js +33 -0
- package/dist/esm/utils/userIdentity.js +45 -0
- package/dist/esm/utils/validationUtils.js +350 -0
- package/dist/esm/utils/webauthnOrigin.js +48 -0
- package/dist/types/.tsbuildinfo +1 -0
- package/dist/types/HttpService.d.ts +413 -0
- package/dist/types/OxyServices.base.d.ts +187 -0
- package/dist/types/OxyServices.d.ts +139 -0
- package/dist/types/OxyServices.errors.d.ts +84 -0
- package/dist/types/boot/sessionColdBoot.d.ts +140 -0
- package/dist/types/constants/version.d.ts +13 -0
- package/dist/types/crypto/aead.d.ts +56 -0
- package/dist/types/crypto/ecdh.d.ts +29 -0
- package/dist/types/crypto/identityMarker.d.ts +94 -0
- package/dist/types/crypto/kdf.d.ts +25 -0
- package/dist/types/crypto/keyManager.d.ts +582 -0
- package/dist/types/crypto/polyfill.d.ts +25 -0
- package/dist/types/crypto/recoveryPhrase.d.ts +173 -0
- package/dist/types/crypto/signatureService.d.ts +136 -0
- package/dist/types/i18n/accountCategoryLabels.d.ts +34 -0
- package/dist/types/i18n/accountRoleLabels.d.ts +10 -0
- package/dist/types/i18n/index.d.ts +3 -0
- package/dist/types/i18n/reputationCategoryLabels.d.ts +10 -0
- package/dist/types/i18n/trustTierLabels.d.ts +9 -0
- package/dist/types/index.d.ts +145 -0
- package/dist/types/inference/OxyInferenceClient.d.ts +342 -0
- package/dist/types/logger/index.d.ts +104 -0
- package/dist/types/mixins/OxyServices.accounts.d.ts +868 -0
- package/dist/types/mixins/OxyServices.analytics.d.ts +72 -0
- package/dist/types/mixins/OxyServices.appData.d.ts +108 -0
- package/dist/types/mixins/OxyServices.assets.d.ts +329 -0
- package/dist/types/mixins/OxyServices.auth.d.ts +908 -0
- package/dist/types/mixins/OxyServices.chains.d.ts +156 -0
- package/dist/types/mixins/OxyServices.civic.d.ts +510 -0
- package/dist/types/mixins/OxyServices.connectedApps.d.ts +169 -0
- package/dist/types/mixins/OxyServices.contacts.d.ts +100 -0
- package/dist/types/mixins/OxyServices.deviceBoot.d.ts +185 -0
- package/dist/types/mixins/OxyServices.deviceTransfer.d.ts +149 -0
- package/dist/types/mixins/OxyServices.devices.d.ts +103 -0
- package/dist/types/mixins/OxyServices.features.d.ts +250 -0
- package/dist/types/mixins/OxyServices.followGraph.d.ts +223 -0
- package/dist/types/mixins/OxyServices.identity.d.ts +351 -0
- package/dist/types/mixins/OxyServices.identityBackup.d.ts +129 -0
- package/dist/types/mixins/OxyServices.inference.d.ts +95 -0
- package/dist/types/mixins/OxyServices.language.d.ts +87 -0
- package/dist/types/mixins/OxyServices.links.d.ts +104 -0
- package/dist/types/mixins/OxyServices.location.d.ts +70 -0
- package/dist/types/mixins/OxyServices.nodes.d.ts +198 -0
- package/dist/types/mixins/OxyServices.notifications.d.ts +143 -0
- package/dist/types/mixins/OxyServices.payment.d.ts +117 -0
- package/dist/types/mixins/OxyServices.privacy.d.ts +146 -0
- package/dist/types/mixins/OxyServices.reputation.d.ts +202 -0
- package/dist/types/mixins/OxyServices.security.d.ts +84 -0
- package/dist/types/mixins/OxyServices.store.d.ts +334 -0
- package/dist/types/mixins/OxyServices.topics.d.ts +110 -0
- package/dist/types/mixins/OxyServices.user.d.ts +558 -0
- package/dist/types/mixins/OxyServices.utility.d.ts +393 -0
- package/dist/types/mixins/index.d.ts +87 -0
- package/dist/types/mixins/mixinHelpers.d.ts +31 -0
- package/dist/types/models/Topic.d.ts +42 -0
- package/dist/types/models/interfaces.d.ts +675 -0
- package/dist/types/models/session.d.ts +51 -0
- package/dist/types/server/auth.d.ts +130 -0
- package/dist/types/server/capabilityTicket.d.ts +41 -0
- package/dist/types/server/cors.d.ts +98 -0
- package/dist/types/server/index.d.ts +35 -0
- package/dist/types/server/rateLimit.d.ts +40 -0
- package/dist/types/server/safeFetch.d.ts +137 -0
- package/dist/types/server/securityHeaders.d.ts +221 -0
- package/dist/types/server/userInvalidation.d.ts +114 -0
- package/dist/types/server/verifySecret.d.ts +29 -0
- package/dist/types/session/SessionClient.d.ts +418 -0
- package/dist/types/session/accountDelegationAccess.d.ts +40 -0
- package/dist/types/session/accountDialogController.d.ts +648 -0
- package/dist/types/session/accountSwitchTargets.d.ts +70 -0
- package/dist/types/session/authStateStore.d.ts +153 -0
- package/dist/types/session/createSessionClient.d.ts +30 -0
- package/dist/types/session/deviceDirectory.d.ts +182 -0
- package/dist/types/session/deviceSwitcherRows.d.ts +92 -0
- package/dist/types/session/identityPin.d.ts +87 -0
- package/dist/types/session/identitySession.d.ts +105 -0
- package/dist/types/session/projectSessionState.d.ts +74 -0
- package/dist/types/session/refresh.d.ts +179 -0
- package/dist/types/session/sessionClientHost.d.ts +18 -0
- package/dist/types/session/sharedDeviceCredential.d.ts +202 -0
- package/dist/types/session/socketLoader.d.ts +11 -0
- package/dist/types/shared/utils/colorUtils.d.ts +104 -0
- package/dist/types/shared/utils/errorUtils.d.ts +97 -0
- package/dist/types/shared/utils/index.d.ts +13 -0
- package/dist/types/shared/utils/networkUtils.d.ts +139 -0
- package/dist/types/shared/utils/themeUtils.d.ts +90 -0
- package/dist/types/utils/accountCacheSweep.d.ts +75 -0
- package/dist/types/utils/accountUtils.d.ts +100 -0
- package/dist/types/utils/activityId.d.ts +2 -0
- package/dist/types/utils/apiUtils.d.ts +95 -0
- package/dist/types/utils/asyncUtils.d.ts +62 -0
- package/dist/types/utils/authHelpers.d.ts +58 -0
- package/dist/types/utils/authWebUrl.d.ts +16 -0
- package/dist/types/utils/avatarUtils.d.ts +16 -0
- package/dist/types/utils/cache.d.ts +130 -0
- package/dist/types/utils/cacheKey.d.ts +66 -0
- package/dist/types/utils/coldBoot.d.ts +131 -0
- package/dist/types/utils/commonsApproval.d.ts +13 -0
- package/dist/types/utils/commonsDelivery.d.ts +105 -0
- package/dist/types/utils/deviceManager.d.ts +65 -0
- package/dist/types/utils/displayNamePolicyRanges.generated.d.ts +57 -0
- package/dist/types/utils/edgeRegion.d.ts +2 -0
- package/dist/types/utils/errorUtils.d.ts +125 -0
- package/dist/types/utils/identityCacheSweep.d.ts +80 -0
- package/dist/types/utils/languageUtils.d.ts +100 -0
- package/dist/types/utils/oauthPkce.d.ts +157 -0
- package/dist/types/utils/officialOrigins.d.ts +13 -0
- package/dist/types/utils/oxyServiceEnvironment.d.ts +17 -0
- package/dist/types/utils/platform.d.ts +49 -0
- package/dist/types/utils/profileLinks.d.ts +44 -0
- package/dist/types/utils/redactUrl.d.ts +17 -0
- package/dist/types/utils/registrableApex.d.ts +27 -0
- package/dist/types/utils/requestUtils.d.ts +123 -0
- package/dist/types/utils/sessionUtils.d.ts +54 -0
- package/dist/types/utils/textNormalization.d.ts +103 -0
- package/dist/types/utils/userHandle.d.ts +26 -0
- package/dist/types/utils/userIdentity.d.ts +21 -0
- package/dist/types/utils/validationUtils.d.ts +268 -0
- package/dist/types/utils/webauthnOrigin.d.ts +32 -0
- package/package.json +168 -0
- package/src/HttpService.ts +1553 -0
- package/src/OxyServices.base.ts +478 -0
- package/src/OxyServices.errors.ts +122 -0
- package/src/OxyServices.ts +172 -0
- package/src/__tests__/authSocket.test.ts +96 -0
- package/src/__tests__/httpServiceActivityId.test.ts +49 -0
- package/src/__tests__/httpServiceAuthSelfAwait.test.ts +108 -0
- package/src/__tests__/httpServiceCache.test.ts +318 -0
- package/src/__tests__/httpServiceCsrf.test.ts +235 -0
- package/src/__tests__/httpServiceFormEncoded.test.ts +142 -0
- package/src/__tests__/httpServiceQueueDeadlock.test.ts +128 -0
- package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +115 -0
- package/src/__tests__/inSessionRefresh.test.ts +260 -0
- package/src/__tests__/linkedClient.test.ts +370 -0
- package/src/__tests__/parseHttpErrorBody.test.ts +116 -0
- package/src/__tests__/serverValueImportsDeclared.test.ts +120 -0
- package/src/__tests__/userIdentity.test.ts +143 -0
- package/src/boot/__tests__/sessionColdBoot.identity.test.ts +393 -0
- package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +325 -0
- package/src/boot/__tests__/sessionColdBoot.test.ts +570 -0
- package/src/boot/sessionColdBoot.ts +529 -0
- package/src/constants/version.ts +15 -0
- package/src/crypto/__tests__/backupMaterial.test.ts +86 -0
- package/src/crypto/__tests__/cryptoPrimitives.test.ts +226 -0
- package/src/crypto/__tests__/identityMocks.ts +125 -0
- package/src/crypto/__tests__/keyManager.atomicity.test.ts +272 -0
- package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +175 -0
- package/src/crypto/__tests__/keyManager.identityStatus.test.ts +217 -0
- package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +179 -0
- package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +138 -0
- package/src/crypto/__tests__/keyManager.storageMigration.test.ts +227 -0
- package/src/crypto/__tests__/keyManager.test.ts +329 -0
- package/src/crypto/__tests__/polyfill.test.ts +109 -0
- package/src/crypto/__tests__/recoveryPhrase.test.ts +61 -0
- package/src/crypto/__tests__/scopedSeed.test.ts +126 -0
- package/src/crypto/__tests__/signChallengeShared.test.ts +63 -0
- package/src/crypto/__tests__/signedRecord.test.ts +230 -0
- package/src/crypto/aead.ts +97 -0
- package/src/crypto/ecdh.ts +37 -0
- package/src/crypto/identityMarker.ts +291 -0
- package/src/crypto/kdf.ts +43 -0
- package/src/crypto/keyManager.ts +2607 -0
- package/src/crypto/polyfill.ts +143 -0
- package/src/crypto/recoveryPhrase.ts +337 -0
- package/src/crypto/signatureService.ts +350 -0
- package/src/i18n/__tests__/accountCategoryLabels.test.ts +62 -0
- package/src/i18n/__tests__/accountRoleLabels.test.ts +54 -0
- package/src/i18n/__tests__/reputationCategoryLabels.test.ts +56 -0
- package/src/i18n/__tests__/trustTierLabels.test.ts +47 -0
- package/src/i18n/accountCategoryLabels.ts +44 -0
- package/src/i18n/accountRoleLabels.ts +26 -0
- package/src/i18n/index.ts +88 -0
- package/src/i18n/locales/ar-SA.json +282 -0
- package/src/i18n/locales/ca-ES.json +282 -0
- package/src/i18n/locales/de-DE.json +282 -0
- package/src/i18n/locales/en-US.json +2161 -0
- package/src/i18n/locales/es-ES.json +2161 -0
- package/src/i18n/locales/fr-FR.json +282 -0
- package/src/i18n/locales/it-IT.json +282 -0
- package/src/i18n/locales/ja-JP.json +282 -0
- package/src/i18n/locales/ko-KR.json +282 -0
- package/src/i18n/locales/pt-PT.json +282 -0
- package/src/i18n/locales/zh-CN.json +282 -0
- package/src/i18n/reputationCategoryLabels.ts +20 -0
- package/src/i18n/trustTierLabels.ts +18 -0
- package/src/index.ts +881 -0
- package/src/inference/OxyInferenceClient.ts +888 -0
- package/src/inference/__tests__/OxyInferenceClient.test.ts +834 -0
- package/src/logger/__tests__/logger.test.ts +207 -0
- package/src/logger/index.ts +217 -0
- package/src/mixins/OxyServices.accounts.ts +1330 -0
- package/src/mixins/OxyServices.analytics.ts +53 -0
- package/src/mixins/OxyServices.appData.ts +158 -0
- package/src/mixins/OxyServices.assets.ts +861 -0
- package/src/mixins/OxyServices.auth.ts +1858 -0
- package/src/mixins/OxyServices.chains.ts +134 -0
- package/src/mixins/OxyServices.civic.ts +945 -0
- package/src/mixins/OxyServices.connectedApps.ts +174 -0
- package/src/mixins/OxyServices.contacts.ts +73 -0
- package/src/mixins/OxyServices.deviceBoot.ts +210 -0
- package/src/mixins/OxyServices.deviceTransfer.ts +393 -0
- package/src/mixins/OxyServices.devices.ts +120 -0
- package/src/mixins/OxyServices.features.ts +454 -0
- package/src/mixins/OxyServices.followGraph.ts +293 -0
- package/src/mixins/OxyServices.identity.ts +705 -0
- package/src/mixins/OxyServices.identityBackup.ts +250 -0
- package/src/mixins/OxyServices.inference.ts +57 -0
- package/src/mixins/OxyServices.language.ts +144 -0
- package/src/mixins/OxyServices.links.ts +107 -0
- package/src/mixins/OxyServices.location.ts +46 -0
- package/src/mixins/OxyServices.nodes.ts +337 -0
- package/src/mixins/OxyServices.notifications.ts +142 -0
- package/src/mixins/OxyServices.payment.ts +163 -0
- package/src/mixins/OxyServices.privacy.ts +219 -0
- package/src/mixins/OxyServices.reputation.ts +436 -0
- package/src/mixins/OxyServices.security.ts +110 -0
- package/src/mixins/OxyServices.store.ts +585 -0
- package/src/mixins/OxyServices.topics.ts +169 -0
- package/src/mixins/OxyServices.user.ts +1137 -0
- package/src/mixins/OxyServices.utility.ts +1370 -0
- package/src/mixins/__tests__/OxyServices.civic.test.ts +1095 -0
- package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +124 -0
- package/src/mixins/__tests__/OxyServices.deviceTransfer.test.ts +271 -0
- package/src/mixins/__tests__/OxyServices.identity.test.ts +376 -0
- package/src/mixins/__tests__/OxyServices.links.test.ts +154 -0
- package/src/mixins/__tests__/OxyServices.nodes.test.ts +341 -0
- package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +276 -0
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +192 -0
- package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +135 -0
- package/src/mixins/__tests__/accounts.test.ts +727 -0
- package/src/mixins/__tests__/appData.test.ts +203 -0
- package/src/mixins/__tests__/assetCredentials.test.ts +47 -0
- package/src/mixins/__tests__/assetUpload.test.ts +191 -0
- package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +135 -0
- package/src/mixins/__tests__/chains.test.ts +113 -0
- package/src/mixins/__tests__/commonsSignIn.test.ts +1144 -0
- package/src/mixins/__tests__/connectedApps.test.ts +123 -0
- package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +113 -0
- package/src/mixins/__tests__/discoveryErrorHandling.test.ts +266 -0
- package/src/mixins/__tests__/followCacheInvalidation.test.ts +173 -0
- package/src/mixins/__tests__/followGraph.test.ts +147 -0
- package/src/mixins/__tests__/followGraphPagination.test.ts +271 -0
- package/src/mixins/__tests__/getFileDownloadUrl.test.ts +346 -0
- package/src/mixins/__tests__/getFollowStatuses.test.ts +95 -0
- package/src/mixins/__tests__/getUsersByIds.test.ts +149 -0
- package/src/mixins/__tests__/identityBackup.test.ts +315 -0
- package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +407 -0
- package/src/mixins/__tests__/inferenceFactory.test.ts +58 -0
- package/src/mixins/__tests__/onTokensChanged.test.ts +129 -0
- package/src/mixins/__tests__/preSessionSkipAuth.test.ts +284 -0
- package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +155 -0
- package/src/mixins/__tests__/reputation.test.ts +522 -0
- package/src/mixins/__tests__/serviceAuth.test.ts +832 -0
- package/src/mixins/__tests__/serviceTokenJwks.test.ts +208 -0
- package/src/mixins/__tests__/store.test.ts +304 -0
- package/src/mixins/__tests__/topics.test.ts +156 -0
- package/src/mixins/__tests__/userReadCacheBypass.test.ts +129 -0
- package/src/mixins/__tests__/userTokenAuth.test.ts +746 -0
- package/src/mixins/__tests__/verifyChallenge.test.ts +130 -0
- package/src/mixins/__tests__/verifyServiceActingAs.test.ts +167 -0
- package/src/mixins/__tests__/webauthnAuth.test.ts +205 -0
- package/src/mixins/index.ts +201 -0
- package/src/mixins/mixinHelpers.ts +69 -0
- package/src/models/Topic.ts +46 -0
- package/src/models/interfaces.ts +786 -0
- package/src/models/session.ts +55 -0
- package/src/server/__tests__/auth.test.ts +78 -0
- package/src/server/__tests__/capabilityTicket.test.ts +111 -0
- package/src/server/__tests__/cors.socket.test.ts +225 -0
- package/src/server/__tests__/cors.test.ts +158 -0
- package/src/server/__tests__/rateLimit.test.ts +257 -0
- package/src/server/__tests__/safeFetch.test.ts +232 -0
- package/src/server/__tests__/securityHeaders.test.ts +348 -0
- package/src/server/__tests__/serviceTokenAttribution.test.ts +396 -0
- package/src/server/__tests__/userInvalidation.test.ts +203 -0
- package/src/server/__tests__/verifySecret.test.ts +40 -0
- package/src/server/auth.ts +271 -0
- package/src/server/capabilityTicket.ts +258 -0
- package/src/server/cors.ts +277 -0
- package/src/server/index.ts +136 -0
- package/src/server/rateLimit.ts +313 -0
- package/src/server/safeFetch.ts +586 -0
- package/src/server/securityHeaders.ts +467 -0
- package/src/server/userInvalidation.ts +199 -0
- package/src/server/verifySecret.ts +52 -0
- package/src/session/SessionClient.ts +1001 -0
- package/src/session/__tests__/SessionClient.additive.test.ts +153 -0
- package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +114 -0
- package/src/session/__tests__/SessionClient.diagnostics.test.ts +91 -0
- package/src/session/__tests__/SessionClient.directory.test.ts +688 -0
- package/src/session/__tests__/SessionClient.httpIntegration.test.ts +65 -0
- package/src/session/__tests__/SessionClient.identityPin.test.ts +175 -0
- package/src/session/__tests__/SessionClient.rest.test.ts +119 -0
- package/src/session/__tests__/SessionClient.serverEvents.test.ts +72 -0
- package/src/session/__tests__/SessionClient.socket.test.ts +202 -0
- package/src/session/__tests__/SessionClient.socketFactory.test.ts +81 -0
- package/src/session/__tests__/SessionClient.state.test.ts +78 -0
- package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +170 -0
- package/src/session/__tests__/accountDelegationAccess.test.ts +104 -0
- package/src/session/__tests__/accountDialogController.test.ts +1969 -0
- package/src/session/__tests__/accountDialogShape.test.ts +118 -0
- package/src/session/__tests__/accountSwitchTargets.test.ts +137 -0
- package/src/session/__tests__/authStateStore.test.ts +451 -0
- package/src/session/__tests__/deviceDirectory.test.ts +422 -0
- package/src/session/__tests__/deviceSwitcherRows.test.ts +223 -0
- package/src/session/__tests__/identityPin.test.ts +131 -0
- package/src/session/__tests__/identitySession.test.ts +194 -0
- package/src/session/__tests__/projectSessionState.test.ts +105 -0
- package/src/session/__tests__/refresh.identityPin.test.ts +307 -0
- package/src/session/__tests__/refresh.test.ts +443 -0
- package/src/session/__tests__/sessionIntegration.test.ts +209 -0
- package/src/session/__tests__/sharedDeviceCredential.test.ts +300 -0
- package/src/session/accountDelegationAccess.ts +72 -0
- package/src/session/accountDialogController.ts +1494 -0
- package/src/session/accountSwitchTargets.ts +93 -0
- package/src/session/authStateStore.ts +502 -0
- package/src/session/createSessionClient.ts +39 -0
- package/src/session/deviceDirectory.ts +269 -0
- package/src/session/deviceSwitcherRows.ts +145 -0
- package/src/session/identityPin.ts +310 -0
- package/src/session/identitySession.ts +206 -0
- package/src/session/projectSessionState.ts +137 -0
- package/src/session/refresh.ts +517 -0
- package/src/session/sessionClientHost.ts +39 -0
- package/src/session/sharedDeviceCredential.ts +349 -0
- package/src/session/socketLoader.ts +30 -0
- package/src/shared/utils/colorUtils.ts +155 -0
- package/src/shared/utils/errorUtils.ts +181 -0
- package/src/shared/utils/index.ts +59 -0
- package/src/shared/utils/networkUtils.ts +248 -0
- package/src/shared/utils/themeUtils.ts +115 -0
- package/src/types/buffer.d.ts +97 -0
- package/src/types/expo-crypto.d.ts +16 -0
- package/src/types/expo-secure-store.d.ts +17 -0
- package/src/utils/__tests__/accountUtils.test.ts +151 -0
- package/src/utils/__tests__/activityId.test.ts +45 -0
- package/src/utils/__tests__/asyncUtils.test.ts +187 -0
- package/src/utils/__tests__/authWebUrl.test.ts +15 -0
- package/src/utils/__tests__/cacheKey.test.ts +0 -0
- package/src/utils/__tests__/coldBoot.test.ts +496 -0
- package/src/utils/__tests__/commonsApproval.test.ts +60 -0
- package/src/utils/__tests__/identityCacheSweep.test.ts +151 -0
- package/src/utils/__tests__/languageUtils.test.ts +219 -0
- package/src/utils/__tests__/oauthPkce.test.ts +272 -0
- package/src/utils/__tests__/officialOrigins.test.ts +31 -0
- package/src/utils/__tests__/oxyServiceEnvironment.test.ts +7 -0
- package/src/utils/__tests__/profileLinks.test.ts +180 -0
- package/src/utils/__tests__/redactUrl.test.ts +33 -0
- package/src/utils/__tests__/registrableApex.test.ts +62 -0
- package/src/utils/__tests__/textNormalization.test.ts +205 -0
- package/src/utils/__tests__/validationUtils.test.ts +703 -0
- package/src/utils/__tests__/webauthnOrigin.test.ts +83 -0
- package/src/utils/accountCacheSweep.ts +93 -0
- package/src/utils/accountUtils.ts +194 -0
- package/src/utils/activityId.ts +2 -0
- package/src/utils/apiUtils.ts +137 -0
- package/src/utils/asyncUtils.ts +280 -0
- package/src/utils/authHelpers.ts +148 -0
- package/src/utils/authWebUrl.ts +17 -0
- package/src/utils/avatarUtils.ts +39 -0
- package/src/utils/cache.ts +273 -0
- package/src/utils/cacheKey.ts +93 -0
- package/src/utils/coldBoot.ts +218 -0
- package/src/utils/commonsApproval.ts +39 -0
- package/src/utils/commonsDelivery.ts +132 -0
- package/src/utils/deviceManager.ts +203 -0
- package/src/utils/displayNamePolicyRanges.generated.ts +69 -0
- package/src/utils/edgeRegion.ts +2 -0
- package/src/utils/errorUtils.ts +352 -0
- package/src/utils/identityCacheSweep.ts +104 -0
- package/src/utils/languageUtils.ts +256 -0
- package/src/utils/oauthPkce.ts +392 -0
- package/src/utils/officialOrigins.ts +62 -0
- package/src/utils/oxyServiceEnvironment.ts +17 -0
- package/src/utils/platform.ts +139 -0
- package/src/utils/profileLinks.ts +91 -0
- package/src/utils/redactUrl.ts +28 -0
- package/src/utils/registrableApex.ts +41 -0
- package/src/utils/requestUtils.ts +237 -0
- package/src/utils/sessionUtils.ts +206 -0
- package/src/utils/textNormalization.ts +162 -0
- package/src/utils/userHandle.ts +49 -0
- package/src/utils/userIdentity.ts +60 -0
- package/src/utils/validationUtils.ts +390 -0
- package/src/utils/webauthnOrigin.ts +52 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OxyServicesPaymentMixin = OxyServicesPaymentMixin;
|
|
4
|
+
const mixinHelpers_1 = require("./mixinHelpers");
|
|
5
|
+
function OxyServicesPaymentMixin(Base) {
|
|
6
|
+
return class extends Base {
|
|
7
|
+
constructor(...args) {
|
|
8
|
+
super(...args);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create a payment
|
|
12
|
+
* @param data - Payment data
|
|
13
|
+
* @returns Created payment object
|
|
14
|
+
*/
|
|
15
|
+
async createPayment(data) {
|
|
16
|
+
try {
|
|
17
|
+
return await this.makeRequest('POST', '/payments', data, { cache: false });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw this.handleError(error);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get payment by ID
|
|
25
|
+
* @param paymentId - The payment ID
|
|
26
|
+
* @returns Payment object
|
|
27
|
+
*/
|
|
28
|
+
async getPayment(paymentId) {
|
|
29
|
+
try {
|
|
30
|
+
return await this.makeRequest('GET', `/payments/${paymentId}`, undefined, {
|
|
31
|
+
cache: true,
|
|
32
|
+
cacheTTL: mixinHelpers_1.CACHE_TIMES.LONG,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw this.handleError(error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get user payments
|
|
41
|
+
* @returns Array of user payments
|
|
42
|
+
*/
|
|
43
|
+
async getUserPayments() {
|
|
44
|
+
try {
|
|
45
|
+
return await this.makeRequest('GET', '/payments/user', undefined, {
|
|
46
|
+
cache: false, // Don't cache user payments - always get fresh data
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw this.handleError(error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get user subscription
|
|
55
|
+
* @param userId - The user ID
|
|
56
|
+
* @returns Subscription object
|
|
57
|
+
*/
|
|
58
|
+
async getSubscription(userId) {
|
|
59
|
+
try {
|
|
60
|
+
return await this.makeRequest('GET', `/subscription/${userId}`, undefined, {
|
|
61
|
+
cache: true,
|
|
62
|
+
cacheTTL: mixinHelpers_1.CACHE_TIMES.MEDIUM,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw this.handleError(error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get current user's subscription
|
|
71
|
+
* @returns Subscription object
|
|
72
|
+
*/
|
|
73
|
+
async getCurrentUserSubscription() {
|
|
74
|
+
try {
|
|
75
|
+
const userId = this.getCurrentUserId();
|
|
76
|
+
if (!userId) {
|
|
77
|
+
throw new Error('User not authenticated');
|
|
78
|
+
}
|
|
79
|
+
return await this.getSubscription(userId);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw this.handleError(error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get user wallet
|
|
87
|
+
* @param userId - The user ID
|
|
88
|
+
* @returns Wallet object with balance
|
|
89
|
+
*/
|
|
90
|
+
async getWallet(userId) {
|
|
91
|
+
try {
|
|
92
|
+
return await this.makeRequest('GET', `/wallet/${userId}`, undefined, {
|
|
93
|
+
cache: true,
|
|
94
|
+
cacheTTL: mixinHelpers_1.CACHE_TIMES.SHORT, // Cache wallet for short time as balance changes frequently
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
throw this.handleError(error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get current user's wallet
|
|
103
|
+
* @returns Wallet object with balance
|
|
104
|
+
*/
|
|
105
|
+
async getCurrentUserWallet() {
|
|
106
|
+
try {
|
|
107
|
+
const userId = this.getCurrentUserId();
|
|
108
|
+
if (!userId) {
|
|
109
|
+
throw new Error('User not authenticated');
|
|
110
|
+
}
|
|
111
|
+
return await this.getWallet(userId);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw this.handleError(error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get wallet transaction history
|
|
119
|
+
* @param userId - The user ID
|
|
120
|
+
* @param options - Pagination options
|
|
121
|
+
* @returns Transaction history
|
|
122
|
+
*/
|
|
123
|
+
async getWalletTransactions(userId, options) {
|
|
124
|
+
try {
|
|
125
|
+
const params = new URLSearchParams();
|
|
126
|
+
if (options?.limit)
|
|
127
|
+
params.append('limit', options.limit.toString());
|
|
128
|
+
if (options?.offset)
|
|
129
|
+
params.append('offset', options.offset.toString());
|
|
130
|
+
const queryString = params.toString();
|
|
131
|
+
const url = `/wallet/transactions/${userId}${queryString ? `?${queryString}` : ''}`;
|
|
132
|
+
return await this.makeRequest('GET', url, undefined, {
|
|
133
|
+
cache: false, // Don't cache transactions - always get fresh data
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
throw this.handleError(error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get current user's wallet transaction history
|
|
142
|
+
* @param options - Pagination options
|
|
143
|
+
* @returns Transaction history
|
|
144
|
+
*/
|
|
145
|
+
async getCurrentUserWalletTransactions(options) {
|
|
146
|
+
try {
|
|
147
|
+
const userId = this.getCurrentUserId();
|
|
148
|
+
if (!userId) {
|
|
149
|
+
throw new Error('User not authenticated');
|
|
150
|
+
}
|
|
151
|
+
return await this.getWalletTransactions(userId, options);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
throw this.handleError(error);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OxyServicesPrivacyMixin = OxyServicesPrivacyMixin;
|
|
4
|
+
const logger_1 = require("../logger");
|
|
5
|
+
function OxyServicesPrivacyMixin(Base) {
|
|
6
|
+
return class extends Base {
|
|
7
|
+
constructor(...args) {
|
|
8
|
+
super(...args);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract user ID from blocked/restricted user object
|
|
12
|
+
*/
|
|
13
|
+
extractUserId(userIdField) {
|
|
14
|
+
return typeof userIdField === 'string' ? userIdField : userIdField._id;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a user is in a list (blocked or restricted)
|
|
18
|
+
*/
|
|
19
|
+
async isUserInList(userId, getUserList, getIdField) {
|
|
20
|
+
try {
|
|
21
|
+
if (!userId) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const users = await getUserList();
|
|
25
|
+
return users.some(item => {
|
|
26
|
+
const itemId = this.extractUserId(getIdField(item));
|
|
27
|
+
return itemId === userId;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// If there's an error, assume not in list to avoid breaking functionality
|
|
32
|
+
logger_1.logger.warn('Error checking user list', { component: 'OxyServices.privacy' }, error);
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// BLOCKED USERS METHODS
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* Get list of blocked users
|
|
41
|
+
* @returns Array of blocked users
|
|
42
|
+
*/
|
|
43
|
+
async getBlockedUsers() {
|
|
44
|
+
try {
|
|
45
|
+
return await this.makeRequest('GET', '/privacy/blocked', undefined, {
|
|
46
|
+
cache: true,
|
|
47
|
+
cacheTTL: 1 * 60 * 1000, // 1 minute cache
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw this.handleError(error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Block a user.
|
|
56
|
+
*
|
|
57
|
+
* Invalidates the cached `GET /privacy/blocked` response after the write.
|
|
58
|
+
* `getBlockedUsers` caches for ~1 minute (identity-scoped); without busting
|
|
59
|
+
* that entry, a consumer that re-reads the blocked list within the TTL
|
|
60
|
+
* window would not see the user it just blocked. `clearCacheEntry` deletes
|
|
61
|
+
* every identity-scoped variant of the key.
|
|
62
|
+
* @param userId - The user ID to block
|
|
63
|
+
* @returns Success message
|
|
64
|
+
*/
|
|
65
|
+
async blockUser(userId) {
|
|
66
|
+
try {
|
|
67
|
+
if (!userId) {
|
|
68
|
+
throw new Error('User ID is required');
|
|
69
|
+
}
|
|
70
|
+
const result = await this.makeRequest('POST', `/privacy/blocked/${userId}`, undefined, {
|
|
71
|
+
cache: false,
|
|
72
|
+
});
|
|
73
|
+
this.clearCacheEntry('GET:/privacy/blocked');
|
|
74
|
+
// The block changed the viewer's graph (`blockedIds`) — bust the cached
|
|
75
|
+
// consolidated `GET /users/me/graph` so the next read reflects it.
|
|
76
|
+
this.clearCacheEntry('GET:/users/me/graph');
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw this.handleError(error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Unblock a user.
|
|
85
|
+
*
|
|
86
|
+
* Busts the cached `GET /privacy/blocked` response so a remount reads the
|
|
87
|
+
* fresh list without the just-unblocked user (see `blockUser`).
|
|
88
|
+
* @param userId - The user ID to unblock
|
|
89
|
+
* @returns Success message
|
|
90
|
+
*/
|
|
91
|
+
async unblockUser(userId) {
|
|
92
|
+
try {
|
|
93
|
+
if (!userId) {
|
|
94
|
+
throw new Error('User ID is required');
|
|
95
|
+
}
|
|
96
|
+
const result = await this.makeRequest('DELETE', `/privacy/blocked/${userId}`, undefined, {
|
|
97
|
+
cache: false,
|
|
98
|
+
});
|
|
99
|
+
this.clearCacheEntry('GET:/privacy/blocked');
|
|
100
|
+
// Symmetric to blockUser: the unblock changed the viewer's `blockedIds`,
|
|
101
|
+
// so bust the consolidated `GET /users/me/graph` cache.
|
|
102
|
+
this.clearCacheEntry('GET:/users/me/graph');
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw this.handleError(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if a user is blocked
|
|
111
|
+
* @param userId - The user ID to check
|
|
112
|
+
* @returns True if the user is blocked, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
async isUserBlocked(userId) {
|
|
115
|
+
return this.isUserInList(userId, () => this.getBlockedUsers(), (block) => block.blockedId);
|
|
116
|
+
}
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// RESTRICTED USERS METHODS
|
|
119
|
+
// ============================================================================
|
|
120
|
+
/**
|
|
121
|
+
* Get list of restricted users
|
|
122
|
+
* @returns Array of restricted users
|
|
123
|
+
*/
|
|
124
|
+
async getRestrictedUsers() {
|
|
125
|
+
try {
|
|
126
|
+
return await this.makeRequest('GET', '/privacy/restricted', undefined, {
|
|
127
|
+
cache: true,
|
|
128
|
+
cacheTTL: 1 * 60 * 1000, // 1 minute cache
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
throw this.handleError(error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Restrict a user (limit their interactions without fully blocking).
|
|
137
|
+
*
|
|
138
|
+
* Invalidates the cached `GET /privacy/restricted` response after the write.
|
|
139
|
+
* `getRestrictedUsers` caches for ~1 minute (identity-scoped); without
|
|
140
|
+
* busting that entry, a consumer that re-reads the restricted list within
|
|
141
|
+
* the TTL window would not see the user it just restricted.
|
|
142
|
+
* `clearCacheEntry` deletes every identity-scoped variant of the key.
|
|
143
|
+
* @param userId - The user ID to restrict
|
|
144
|
+
* @returns Success message
|
|
145
|
+
*/
|
|
146
|
+
async restrictUser(userId) {
|
|
147
|
+
try {
|
|
148
|
+
if (!userId) {
|
|
149
|
+
throw new Error('User ID is required');
|
|
150
|
+
}
|
|
151
|
+
const result = await this.makeRequest('POST', `/privacy/restricted/${userId}`, undefined, {
|
|
152
|
+
cache: false,
|
|
153
|
+
});
|
|
154
|
+
this.clearCacheEntry('GET:/privacy/restricted');
|
|
155
|
+
// The restriction changed the viewer's graph (`restrictedIds`) — bust the
|
|
156
|
+
// cached consolidated `GET /users/me/graph` so the next read reflects it.
|
|
157
|
+
this.clearCacheEntry('GET:/users/me/graph');
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
throw this.handleError(error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Unrestrict a user.
|
|
166
|
+
*
|
|
167
|
+
* Busts the cached `GET /privacy/restricted` response so a remount reads the
|
|
168
|
+
* fresh list without the just-unrestricted user (see `restrictUser`).
|
|
169
|
+
* @param userId - The user ID to unrestrict
|
|
170
|
+
* @returns Success message
|
|
171
|
+
*/
|
|
172
|
+
async unrestrictUser(userId) {
|
|
173
|
+
try {
|
|
174
|
+
if (!userId) {
|
|
175
|
+
throw new Error('User ID is required');
|
|
176
|
+
}
|
|
177
|
+
const result = await this.makeRequest('DELETE', `/privacy/restricted/${userId}`, undefined, {
|
|
178
|
+
cache: false,
|
|
179
|
+
});
|
|
180
|
+
this.clearCacheEntry('GET:/privacy/restricted');
|
|
181
|
+
// Symmetric to restrictUser: the unrestrict changed the viewer's
|
|
182
|
+
// `restrictedIds`, so bust the consolidated `GET /users/me/graph` cache.
|
|
183
|
+
this.clearCacheEntry('GET:/users/me/graph');
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw this.handleError(error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Check if a user is restricted
|
|
192
|
+
* @param userId - The user ID to check
|
|
193
|
+
* @returns True if the user is restricted, false otherwise
|
|
194
|
+
*/
|
|
195
|
+
async isUserRestricted(userId) {
|
|
196
|
+
return this.isUserInList(userId, () => this.getRestrictedUsers(), (restrict) => restrict.restrictedId);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
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
|
+
}
|