@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,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OxyServices Base Class
|
|
3
|
+
*
|
|
4
|
+
* Contains core infrastructure, HTTP client, request management, and error handling
|
|
5
|
+
*/
|
|
6
|
+
import { jwtDecode } from 'jwt-decode';
|
|
7
|
+
import { handleHttpError } from './utils/errorUtils.js';
|
|
8
|
+
import { HttpService } from './HttpService.js';
|
|
9
|
+
import { OxyAuthenticationError, OxyAuthenticationTimeoutError } from './OxyServices.errors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Base class for OxyServices with core infrastructure
|
|
12
|
+
*/
|
|
13
|
+
export class OxyServicesBase {
|
|
14
|
+
constructor(...args) {
|
|
15
|
+
/** @internal */ this._cachedUserId = undefined;
|
|
16
|
+
/** @internal */ this._cachedAccessToken = null;
|
|
17
|
+
const config = args[0];
|
|
18
|
+
if (!config || typeof config !== 'object') {
|
|
19
|
+
throw new Error('OxyConfig is required');
|
|
20
|
+
}
|
|
21
|
+
// `authWebUrl` is a plain optional config value now (used only for building
|
|
22
|
+
// third-party "Sign in with Oxy" OAuth links). The SDK no longer derives or
|
|
23
|
+
// defaults an IdP host — the device-first cold boot restores sessions from
|
|
24
|
+
// the persisted refresh store, not an `auth.<apex>` bounce.
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.cloudURL = config.cloudURL || 'https://cloud.oxy.so';
|
|
27
|
+
// Initialize unified HTTP service (handles auth, caching, deduplication, queuing, retry)
|
|
28
|
+
this.httpService = new HttpService(config);
|
|
29
|
+
}
|
|
30
|
+
// Test-only utility to reset tokens on this instance between jest tests
|
|
31
|
+
// Note: tokens are now per-instance, so create new instances in tests for isolation
|
|
32
|
+
__resetTokensForTests() {
|
|
33
|
+
this.httpService.__resetTokensForTests();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Make a request with all performance optimizations
|
|
37
|
+
* This is the main method for all API calls - ensures authentication and performance features
|
|
38
|
+
*/
|
|
39
|
+
async makeRequest(method, url, data, options = {}) {
|
|
40
|
+
return this.httpService.request({
|
|
41
|
+
method,
|
|
42
|
+
url,
|
|
43
|
+
data: method !== 'GET' ? data : undefined,
|
|
44
|
+
params: method === 'GET' ? data : undefined,
|
|
45
|
+
...options,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// CORE METHODS (HTTP Client, Token Management, Error Handling)
|
|
50
|
+
// ============================================================================
|
|
51
|
+
/**
|
|
52
|
+
* Get the configured Oxy API base URL
|
|
53
|
+
*/
|
|
54
|
+
getBaseURL() {
|
|
55
|
+
return this.httpService.getBaseURL();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the HTTP service instance
|
|
59
|
+
* Useful for advanced use cases where direct access to the HTTP service is needed
|
|
60
|
+
*/
|
|
61
|
+
getClient() {
|
|
62
|
+
return this.httpService;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create an app/backend HTTP client linked to this Oxy session.
|
|
66
|
+
*
|
|
67
|
+
* Use this when an app has its own API origin (for example
|
|
68
|
+
* `https://api.syra.fm`) but authentication is owned by the canonical
|
|
69
|
+
* OxyServices instance mounted in OxyProvider. The returned client has its own
|
|
70
|
+
* base URL, cache and request queue, but its bearer token is kept in lockstep
|
|
71
|
+
* with this session and its 401 refresh path delegates back to this session.
|
|
72
|
+
*
|
|
73
|
+
* **GET response caching is OFF by default for linked clients.** The SDK's
|
|
74
|
+
* per-instance GET cache is only safe where the SDK OWNS invalidation: on the
|
|
75
|
+
* canonical OxyServices client, every mutation (`updateProfile`, `followUser`,
|
|
76
|
+
* `blockUser`, …) busts the matching cached GET. A linked client targets the
|
|
77
|
+
* consuming app's OWN backend (`api.mention.earth`, `api.syra.fm`, …), whose
|
|
78
|
+
* resources and write endpoints the SDK has no knowledge of — so it cannot
|
|
79
|
+
* invalidate them, and a cached GET there would silently serve stale data
|
|
80
|
+
* after the app mutates its own data. Caching is therefore unsafe-by-construction
|
|
81
|
+
* here and is left to the consumer's own layer (React Query / stores), which
|
|
82
|
+
* owns its invalidation. Pass `createLinkedClient({ baseURL, enableCache: true })`
|
|
83
|
+
* to explicitly opt back in when the consumer accepts that responsibility.
|
|
84
|
+
*/
|
|
85
|
+
createLinkedClient(config) {
|
|
86
|
+
// Default the GET cache OFF unless the caller explicitly opts in (see the
|
|
87
|
+
// method doc): the SDK cannot invalidate the consumer backend's resources.
|
|
88
|
+
const client = new HttpService({ ...config, enableCache: config.enableCache ?? false });
|
|
89
|
+
const syncToken = (accessToken) => {
|
|
90
|
+
const currentAccessToken = client.getAccessToken();
|
|
91
|
+
if (accessToken) {
|
|
92
|
+
if (currentAccessToken !== accessToken) {
|
|
93
|
+
client.setTokens(accessToken);
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (currentAccessToken) {
|
|
98
|
+
client.clearTokens();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
syncToken(this.getAccessToken());
|
|
102
|
+
const unsubscribe = this.onTokensChanged(syncToken);
|
|
103
|
+
client.setAccessTokenProvider(() => this.getAccessToken());
|
|
104
|
+
client.setAuthRefreshHandler(async (reason) => {
|
|
105
|
+
const refreshed = await this.httpService.refreshAccessToken(reason);
|
|
106
|
+
if (!refreshed) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
syncToken(refreshed);
|
|
110
|
+
return refreshed;
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
client,
|
|
114
|
+
dispose: () => {
|
|
115
|
+
unsubscribe();
|
|
116
|
+
client.setAuthRefreshHandler(null);
|
|
117
|
+
client.setAccessTokenProvider(null);
|
|
118
|
+
client.clearTokens();
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get performance metrics
|
|
124
|
+
*/
|
|
125
|
+
getMetrics() {
|
|
126
|
+
return this.httpService.getMetrics();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Clear request cache
|
|
130
|
+
*/
|
|
131
|
+
clearCache() {
|
|
132
|
+
this.httpService.clearCache();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Clear specific cache entry
|
|
136
|
+
*/
|
|
137
|
+
clearCacheEntry(key) {
|
|
138
|
+
this.httpService.clearCacheEntry(key);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Clear every cache entry whose key starts with `prefix`.
|
|
142
|
+
* Useful for mutations that invalidate a family of GET responses
|
|
143
|
+
* without enumerating each one (e.g. all session-user lookups after
|
|
144
|
+
* a profile update).
|
|
145
|
+
*/
|
|
146
|
+
clearCacheByPrefix(prefix) {
|
|
147
|
+
return this.httpService.clearCacheByPrefix(prefix);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get cache statistics
|
|
151
|
+
*/
|
|
152
|
+
getCacheStats() {
|
|
153
|
+
return this.httpService.getCacheStats();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the configured Oxy Cloud (file storage/CDN) URL
|
|
157
|
+
*/
|
|
158
|
+
getCloudURL() {
|
|
159
|
+
return this.cloudURL;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Set authentication tokens
|
|
163
|
+
*/
|
|
164
|
+
setTokens(accessToken) {
|
|
165
|
+
this.httpService.setTokens(accessToken);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Clear stored authentication tokens
|
|
169
|
+
*/
|
|
170
|
+
clearTokens() {
|
|
171
|
+
this.httpService.clearTokens();
|
|
172
|
+
this._cachedUserId = undefined;
|
|
173
|
+
this._cachedAccessToken = null;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Subscribe to access-token changes on this client.
|
|
177
|
+
*
|
|
178
|
+
* The listener fires on every access-token mutation — explicit
|
|
179
|
+
* `setTokens`/`clearTokens`, a successful silent refresh, and the internal
|
|
180
|
+
* 401-driven clear — receiving the resulting token, or `null` when cleared.
|
|
181
|
+
* Returns an unsubscribe function.
|
|
182
|
+
*
|
|
183
|
+
* Primary use: keeping an external token sink (e.g. the shared `oxyClient`
|
|
184
|
+
* singleton) in lockstep with whichever `OxyServices` instance actually owns
|
|
185
|
+
* the session, so imperative consumers reading the singleton always observe
|
|
186
|
+
* the live token regardless of the code path that changed it.
|
|
187
|
+
*/
|
|
188
|
+
onTokensChanged(listener) {
|
|
189
|
+
return this.httpService.addTokenChangeListener(listener);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get the current user ID from the access token.
|
|
193
|
+
* Caches the decoded value and invalidates when the token changes.
|
|
194
|
+
*/
|
|
195
|
+
getCurrentUserId() {
|
|
196
|
+
const accessToken = this.httpService.getAccessToken();
|
|
197
|
+
// Return cached value if token hasn't changed
|
|
198
|
+
if (accessToken === this._cachedAccessToken && this._cachedUserId !== undefined) {
|
|
199
|
+
return this._cachedUserId;
|
|
200
|
+
}
|
|
201
|
+
this._cachedAccessToken = accessToken;
|
|
202
|
+
if (!accessToken) {
|
|
203
|
+
this._cachedUserId = null;
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const decoded = jwtDecode(accessToken);
|
|
208
|
+
const userId = decoded.userId || decoded.id || null;
|
|
209
|
+
this._cachedUserId = userId;
|
|
210
|
+
return userId;
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
this._cachedUserId = null;
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if the client has a valid access token (public method)
|
|
219
|
+
*/
|
|
220
|
+
hasValidToken() {
|
|
221
|
+
return this.httpService.hasAccessToken();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get the raw access token (for constructing anchor URLs when needed)
|
|
225
|
+
*/
|
|
226
|
+
getAccessToken() {
|
|
227
|
+
return this.httpService.getAccessToken();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Decode the current access token and return its `exp` claim in SECONDS since
|
|
231
|
+
* the Unix epoch (the raw JWT `exp` unit), or `null` when there is no token,
|
|
232
|
+
* the token is opaque/undecodable, or it carries no numeric `exp`.
|
|
233
|
+
*
|
|
234
|
+
* Exposed so `@oxy.so/services` can schedule a PROACTIVE in-session refresh a
|
|
235
|
+
* fixed lead before expiry without re-importing a JWT decoder (and without
|
|
236
|
+
* duplicating the `jwt-decode` dependency in the RN bundle). HttpService keeps
|
|
237
|
+
* the per-request preflight refresh; this powers the idle/background timer.
|
|
238
|
+
*/
|
|
239
|
+
getAccessTokenExpiry() {
|
|
240
|
+
const token = this.httpService.getAccessToken();
|
|
241
|
+
if (!token) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const decoded = jwtDecode(token);
|
|
246
|
+
return typeof decoded.exp === 'number' ? decoded.exp : null;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// A malformed / non-JWT token has no usable expiry — fall back to the
|
|
250
|
+
// reactive 401 refresh path instead of a scheduled one.
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Wait for authentication to be ready
|
|
256
|
+
*
|
|
257
|
+
* Optimized for high-scale usage with immediate synchronous check and adaptive polling.
|
|
258
|
+
* Returns immediately if token is already available (0ms delay), otherwise uses
|
|
259
|
+
* adaptive polling that starts fast (50ms) and gradually increases to reduce CPU usage.
|
|
260
|
+
*
|
|
261
|
+
* @param timeoutMs Maximum time to wait in milliseconds (default: 5000ms)
|
|
262
|
+
* @returns Promise that resolves to true if authentication is ready, false if timeout
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* const isReady = await oxyServices.waitForAuth(3000);
|
|
267
|
+
* if (isReady) {
|
|
268
|
+
* // Proceed with authenticated operations
|
|
269
|
+
* }
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
async waitForAuth(timeoutMs = 5000) {
|
|
273
|
+
// Immediate synchronous check - no delay if token is ready
|
|
274
|
+
if (this.httpService.hasAccessToken()) {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
const startTime = performance.now();
|
|
278
|
+
const maxTime = startTime + timeoutMs;
|
|
279
|
+
// Adaptive polling: start fast, then slow down to reduce CPU usage
|
|
280
|
+
let pollInterval = 50; // Start with 50ms
|
|
281
|
+
while (performance.now() < maxTime) {
|
|
282
|
+
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
|
283
|
+
if (this.httpService.hasAccessToken()) {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
// Increase interval after first few checks (adaptive polling)
|
|
287
|
+
// This reduces CPU usage for long waits while maintaining responsiveness
|
|
288
|
+
if (pollInterval < 200) {
|
|
289
|
+
pollInterval = Math.min(pollInterval * 1.5, 200);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Execute a function with automatic authentication retry logic
|
|
296
|
+
* This handles the common case where API calls are made before authentication completes
|
|
297
|
+
*/
|
|
298
|
+
async withAuthRetry(operation, operationName, options = {}) {
|
|
299
|
+
const { maxRetries = 2, retryDelay = 1000, authTimeoutMs = 5000 } = options;
|
|
300
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
301
|
+
try {
|
|
302
|
+
// First attempt: check if we have a token
|
|
303
|
+
if (!this.httpService.hasAccessToken()) {
|
|
304
|
+
if (attempt === 0) {
|
|
305
|
+
// On first attempt, wait briefly for authentication to complete
|
|
306
|
+
const authReady = await this.waitForAuth(authTimeoutMs);
|
|
307
|
+
if (!authReady) {
|
|
308
|
+
throw new OxyAuthenticationTimeoutError(operationName, authTimeoutMs);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
// On retry attempts, fail immediately if no token
|
|
313
|
+
throw new OxyAuthenticationError(`Authentication required: ${operationName} requires a valid access token.`, 'AUTH_REQUIRED');
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Execute the operation
|
|
317
|
+
return await operation();
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
const isLastAttempt = attempt === maxRetries;
|
|
321
|
+
const errorObj = error && typeof error === 'object' ? error : null;
|
|
322
|
+
const isAuthError = errorObj?.response?.status === 401 ||
|
|
323
|
+
errorObj?.code === 'MISSING_TOKEN' ||
|
|
324
|
+
errorObj?.message?.includes('Authentication') ||
|
|
325
|
+
error instanceof OxyAuthenticationError;
|
|
326
|
+
if (isAuthError && !isLastAttempt && !(error instanceof OxyAuthenticationTimeoutError)) {
|
|
327
|
+
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
// If it's not an auth error, or it's the last attempt, throw the error
|
|
331
|
+
if (error instanceof OxyAuthenticationError) {
|
|
332
|
+
throw error;
|
|
333
|
+
}
|
|
334
|
+
throw this.handleError(error);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// This should never be reached, but TypeScript requires it
|
|
338
|
+
throw new OxyAuthenticationError(`${operationName} failed after ${maxRetries + 1} attempts`);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Validate the current access token with the server
|
|
342
|
+
*/
|
|
343
|
+
async validate() {
|
|
344
|
+
if (!this.hasValidToken()) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
const res = await this.makeRequest('GET', '/auth/validate', undefined, {
|
|
349
|
+
cache: false,
|
|
350
|
+
retry: false,
|
|
351
|
+
});
|
|
352
|
+
return res.valid === true;
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Centralized error handling
|
|
360
|
+
*/
|
|
361
|
+
handleError(error) {
|
|
362
|
+
const api = handleHttpError(error);
|
|
363
|
+
// Ensure we always have a non-empty message
|
|
364
|
+
const message = api.message?.trim() || 'An unexpected error occurred';
|
|
365
|
+
const err = new Error(message);
|
|
366
|
+
err.code = api.code;
|
|
367
|
+
err.status = api.status;
|
|
368
|
+
err.details = api.details;
|
|
369
|
+
return err;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Health check endpoint
|
|
373
|
+
*/
|
|
374
|
+
async healthCheck() {
|
|
375
|
+
try {
|
|
376
|
+
return await this.makeRequest('GET', '/health', undefined, {
|
|
377
|
+
cache: false,
|
|
378
|
+
retry: false,
|
|
379
|
+
timeout: 5000
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
throw this.handleError(error);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error types for better error handling
|
|
3
|
+
*/
|
|
4
|
+
export class OxyAuthenticationError extends Error {
|
|
5
|
+
constructor(message, code = 'AUTH_ERROR', status = 401) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'OxyAuthenticationError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.status = status;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Thrown when an asset's authorized download URL cannot be resolved.
|
|
14
|
+
*
|
|
15
|
+
* `getFileDownloadUrlAsync` asks the API for a URL that is valid for the
|
|
16
|
+
* CALLER and the asset's actual visibility. When that resolution fails there is
|
|
17
|
+
* no honest fallback: the public CDN origin only serves `public` assets, so
|
|
18
|
+
* handing back `https://cloud.oxy.so/<id>` for an unresolved asset produces a
|
|
19
|
+
* hard 404 at render time and hides the real failure from the caller. This
|
|
20
|
+
* error surfaces the failure instead.
|
|
21
|
+
*
|
|
22
|
+
* The message and fields deliberately carry only the asset id, the requested
|
|
23
|
+
* variant and the HTTP status — never the resolved URL, which embeds a scoped
|
|
24
|
+
* media token.
|
|
25
|
+
*
|
|
26
|
+
* ## `status` lets a caller decide whether a CDN fallback is safe
|
|
27
|
+
*
|
|
28
|
+
* Core itself never falls back to the public CDN builder, because it has no
|
|
29
|
+
* knowledge of the asset's visibility and that URL is a guaranteed 404 for a
|
|
30
|
+
* private asset. A CALLER that knows an asset is public MAY choose to fall back
|
|
31
|
+
* to `getFileDownloadUrl(id, variant)` — but only for a TRANSIENT failure, not
|
|
32
|
+
* a definitive denial:
|
|
33
|
+
* - `status` 401/403/404 → definitive: the asset is private/denied/missing.
|
|
34
|
+
* Never CDN-fall-back — it will 404.
|
|
35
|
+
* - `status` undefined (network error) or 5xx → transient: resolution itself
|
|
36
|
+
* failed. If the caller independently knows the asset is public, a CDN
|
|
37
|
+
* fallback is defensible best-effort.
|
|
38
|
+
*/
|
|
39
|
+
export class AssetUrlResolutionError extends Error {
|
|
40
|
+
constructor(fileId, variant, status, cause) {
|
|
41
|
+
const variantSuffix = variant ? ` (variant "${variant}")` : '';
|
|
42
|
+
const statusSuffix = typeof status === 'number' ? ` — status ${status}` : '';
|
|
43
|
+
super(`Could not resolve a download URL for asset "${fileId}"${variantSuffix}${statusSuffix}`);
|
|
44
|
+
this.code = 'ASSET_URL_UNRESOLVED';
|
|
45
|
+
this.name = 'AssetUrlResolutionError';
|
|
46
|
+
this.fileId = fileId;
|
|
47
|
+
this.variant = variant;
|
|
48
|
+
this.status = status;
|
|
49
|
+
this.cause = cause;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Thrown when one or more chunks of `getServiceAssetMetadataByIds` could not be
|
|
54
|
+
* resolved.
|
|
55
|
+
*
|
|
56
|
+
* Exists because for this endpoint a FAILED request and an ABSENT asset produce
|
|
57
|
+
* the same observable result. The server legitimately omits unknown/deleted ids,
|
|
58
|
+
* so callers are documented to map the response by `id` and treat a missing
|
|
59
|
+
* entry as "no such asset" — which means a chunk that 429s, times out or 5xxs
|
|
60
|
+
* reads as authoritative absence unless it is raised.
|
|
61
|
+
*
|
|
62
|
+
* That was not hypothetical: a metadata backfill counted every throttled asset
|
|
63
|
+
* as needing no update and exited 0, and the MTN signed-record builder embedded
|
|
64
|
+
* media with no content hash into records that are immutable once signed. Both
|
|
65
|
+
* paths reported success and wrote nothing.
|
|
66
|
+
*
|
|
67
|
+
* `unresolvedIds` carries every id in a failed chunk — not the subset the server
|
|
68
|
+
* would have omitted anyway, which is unknowable when the request never landed.
|
|
69
|
+
* A caller that wants best-effort passes `{ partial: true }` and never sees this.
|
|
70
|
+
*/
|
|
71
|
+
export class ServiceAssetMetadataError extends Error {
|
|
72
|
+
constructor(unresolvedIds, statuses, cause) {
|
|
73
|
+
const uniqueStatuses = Array.from(new Set(statuses)).sort((a, b) => a - b);
|
|
74
|
+
const statusSuffix = uniqueStatuses.length > 0 ? ` — status ${uniqueStatuses.join(', ')}` : '';
|
|
75
|
+
super(`Could not resolve asset metadata for ${unresolvedIds.length} id(s)${statusSuffix}. Treat this as unknown, not as absent; pass { partial: true } for best-effort.`);
|
|
76
|
+
this.code = 'SERVICE_ASSET_METADATA_UNRESOLVED';
|
|
77
|
+
this.name = 'ServiceAssetMetadataError';
|
|
78
|
+
this.unresolvedIds = unresolvedIds;
|
|
79
|
+
this.statuses = uniqueStatuses;
|
|
80
|
+
this.cause = cause;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export class OxyAuthenticationTimeoutError extends OxyAuthenticationError {
|
|
84
|
+
constructor(operationName, timeoutMs) {
|
|
85
|
+
super(`Authentication timeout (${timeoutMs}ms): ${operationName} requires user authentication. Please ensure the user is logged in before calling this method.`, 'AUTH_TIMEOUT', 408);
|
|
86
|
+
this.name = 'OxyAuthenticationTimeoutError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { AssetUrlResolutionError, OxyAuthenticationError, OxyAuthenticationTimeoutError, ServiceAssetMetadataError } from './OxyServices.errors.js';
|
|
2
|
+
// Import mixin composition helper
|
|
3
|
+
import { composeOxyServices } from './mixins/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* OxyServices - Unified client library for interacting with the Oxy API
|
|
6
|
+
*
|
|
7
|
+
* This class provides all API functionality in one simple, easy-to-use interface.
|
|
8
|
+
*
|
|
9
|
+
* ## Architecture
|
|
10
|
+
* - **HttpService**: Unified HTTP service handling authentication, caching, deduplication, queuing, and retry
|
|
11
|
+
* - **OxyServices**: Provides high-level API methods
|
|
12
|
+
*
|
|
13
|
+
* ## Mixin Composition
|
|
14
|
+
* The class is composed using TypeScript mixins for better code organization:
|
|
15
|
+
* - **Base**: Core infrastructure (HTTP client, request management, error handling)
|
|
16
|
+
* - **Auth**: Authentication and session management
|
|
17
|
+
* - **User**: User profiles, follow, notifications
|
|
18
|
+
* - **Privacy**: Blocked and restricted users
|
|
19
|
+
* - **Language**: Language detection and metadata
|
|
20
|
+
* - **Payment**: Payment processing
|
|
21
|
+
* - **Reputation**: Reputation system (Oxy Trust)
|
|
22
|
+
* - **Assets**: File upload and asset management
|
|
23
|
+
* - **Accounts**: Unified account graph (tree, members, roles, bot credentials)
|
|
24
|
+
* and the applications owned within it (Application = OAuth client)
|
|
25
|
+
* - **Connected apps**: OAuth-consent surface (public app identity, grants)
|
|
26
|
+
* - **Location**: Location-based features
|
|
27
|
+
* - **Analytics**: Analytics tracking
|
|
28
|
+
* - **Devices**: Device management
|
|
29
|
+
* - **Utility**: Utility methods and Express middleware
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const oxy = new OxyServices({
|
|
34
|
+
* baseURL: 'https://api.oxy.so',
|
|
35
|
+
* cloudURL: 'https://cloud.oxy.so'
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
// Compose all mixins into the final OxyServices class. The composed runtime
|
|
40
|
+
// class augments OxyServicesBase with every mixin's methods (see mixins/index.ts).
|
|
41
|
+
// Statically, TypeScript sees this as a constructor producing OxyServicesBase;
|
|
42
|
+
// the additional methods are exposed via interface merging on `OxyServices` below.
|
|
43
|
+
const OxyServicesComposed = composeOxyServices();
|
|
44
|
+
// Export as a named class to avoid TypeScript issues with anonymous class types.
|
|
45
|
+
// We extend the composed constructor directly — its public surface is broadened
|
|
46
|
+
// to the full mixin set via the interface declaration that follows.
|
|
47
|
+
export class OxyServices extends OxyServicesComposed {
|
|
48
|
+
constructor(config) {
|
|
49
|
+
super(config);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Re-export error classes for convenience
|
|
53
|
+
export { AssetUrlResolutionError, OxyAuthenticationError, OxyAuthenticationTimeoutError, ServiceAssetMetadataError };
|
|
54
|
+
/**
|
|
55
|
+
* Default Oxy Cloud URL — used when no `cloudURL` is provided to OxyServices.
|
|
56
|
+
*/
|
|
57
|
+
export const OXY_CLOUD_URL = 'https://cloud.oxy.so';
|
|
58
|
+
/**
|
|
59
|
+
* Export the default Oxy API URL (for documentation)
|
|
60
|
+
*/
|
|
61
|
+
export const OXY_API_URL = (typeof process !== 'undefined' && process.env && process.env.OXY_API_URL) || 'https://api.oxy.so';
|
|
62
|
+
/**
|
|
63
|
+
* Pre-configured client instance for easy import
|
|
64
|
+
* Uses OXY_API_URL as baseURL and OXY_CLOUD_URL as cloudURL
|
|
65
|
+
*/
|
|
66
|
+
export const oxyClient = new OxyServices({ baseURL: OXY_API_URL, cloudURL: OXY_CLOUD_URL });
|