@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,544 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The Oxy inference client — one surface, two credential lanes (issue #972,
|
|
4
|
+
* workstream 15).
|
|
5
|
+
*
|
|
6
|
+
* ```typescript
|
|
7
|
+
* // An OpenAI-style machine key: one bearer string, no session, no exchange.
|
|
8
|
+
* const oxy = new OxyInferenceClient({ credential: process.env.OXY_API_KEY });
|
|
9
|
+
*
|
|
10
|
+
* // Oxy auth: whatever bearer the session or the service-token mint holds.
|
|
11
|
+
* const oxy = oxyServices.inference();
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Both lanes reach the SAME endpoints and are told apart only by how the bearer
|
|
15
|
+
* is produced: a machine key is a constant string, and an Oxy bearer rotates, so
|
|
16
|
+
* it is a function this client calls on every request rather than a value it
|
|
17
|
+
* captures once. There is no third lane, and no method behaves differently
|
|
18
|
+
* depending on which one you used.
|
|
19
|
+
*
|
|
20
|
+
* `respond()` returns one completed response. `stream()` reads the same
|
|
21
|
+
* `/v1/responses` endpoint without buffering and validates every SSE event
|
|
22
|
+
* against `inferenceStreamEventSchema` before exposing it to the caller.
|
|
23
|
+
*
|
|
24
|
+
* ## Why this is a client and not more methods on `OxyServices`
|
|
25
|
+
*
|
|
26
|
+
* Two reasons, both structural. A machine-key holder has no Oxy session at all,
|
|
27
|
+
* so a surface reached only through the session client would be unreachable for
|
|
28
|
+
* exactly the developer this workstream exists to serve. And the `/v1` error
|
|
29
|
+
* body is the contract's `InferenceError` at the top level rather than the
|
|
30
|
+
* platform's `{ error, message }` envelope — it carries `requestId`, `retryable`
|
|
31
|
+
* and `retryAfterMs`, all of which `OxyServices.handleError` would flatten into a
|
|
32
|
+
* message string. `oxyServices.inference()` binds the session bearer into this
|
|
33
|
+
* client so a session-holding app writes no plumbing of its own.
|
|
34
|
+
*
|
|
35
|
+
* ## Streaming is an explicit method
|
|
36
|
+
*
|
|
37
|
+
* `stream()` injects `stream: true` on the wire. The request type deliberately
|
|
38
|
+
* has no `stream` field, so `respond({ stream: true })` cannot promise a JSON
|
|
39
|
+
* response while the server sends SSE, and `stream({ stream: false })` cannot
|
|
40
|
+
* silently buffer. The method is the transport choice.
|
|
41
|
+
*
|
|
42
|
+
* ## Field names, and the one place they could drift
|
|
43
|
+
*
|
|
44
|
+
* Every VALUE type here comes from `@oxy.so/contracts` — messages, tools, tool
|
|
45
|
+
* choice, response format, usage quantities, unit prices, error codes. The
|
|
46
|
+
* request FIELD NAMES cannot: they belong to `responsesRequestSchema`, which
|
|
47
|
+
* lives in the API because it is a public dialect rather than an Oxy↔data-plane
|
|
48
|
+
* contract. `packages/api/src/schemas/__tests__/sdkRequestCompatibility.test.ts`
|
|
49
|
+
* is the gate — it parses a value of this module's request type against that
|
|
50
|
+
* schema, so a rename on either side fails a build rather than a customer's
|
|
51
|
+
* request.
|
|
52
|
+
*/
|
|
53
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
54
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
55
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
56
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
57
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
58
|
+
};
|
|
59
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
60
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
61
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
62
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
63
|
+
};
|
|
64
|
+
var _OxyInferenceClient_instances, _OxyInferenceClient_baseURL, _OxyInferenceClient_credential, _OxyInferenceClient_fetch, _OxyInferenceClient_bearer, _OxyInferenceClient_headers, _OxyInferenceClient_request;
|
|
65
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
+
exports.OxyInferenceClient = exports.OxyInferenceProtocolError = exports.OxyInferenceError = exports.OXY_INFERENCE_BASE_URL = void 0;
|
|
67
|
+
const contracts_1 = require("@oxy.so/contracts");
|
|
68
|
+
/** The base URL of the Oxy API, when a caller names none. */
|
|
69
|
+
exports.OXY_INFERENCE_BASE_URL = 'https://api.oxy.so';
|
|
70
|
+
/**
|
|
71
|
+
* Anything the inference API refused.
|
|
72
|
+
*
|
|
73
|
+
* `retryable` is asserted by the server and looked up from a total map over the
|
|
74
|
+
* closed code set — never inferred here from the status. A client that decides
|
|
75
|
+
* retryability from an HTTP status is exactly what the contract's retryability
|
|
76
|
+
* rule exists to prevent, so this class carries the server's answer and does not
|
|
77
|
+
* compute one.
|
|
78
|
+
*/
|
|
79
|
+
class OxyInferenceError extends Error {
|
|
80
|
+
constructor(input) {
|
|
81
|
+
super(input.message);
|
|
82
|
+
this.name = 'OxyInferenceError';
|
|
83
|
+
this.code = input.code;
|
|
84
|
+
this.retryable = input.retryable;
|
|
85
|
+
this.requestId = input.requestId;
|
|
86
|
+
this.status = input.status;
|
|
87
|
+
if (input.retryAfterMs !== undefined)
|
|
88
|
+
this.retryAfterMs = input.retryAfterMs;
|
|
89
|
+
if (input.param !== undefined)
|
|
90
|
+
this.param = input.param;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.OxyInferenceError = OxyInferenceError;
|
|
94
|
+
/**
|
|
95
|
+
* The edge opened an SSE response but its framing or one of its events violated
|
|
96
|
+
* the published inference stream contract.
|
|
97
|
+
*
|
|
98
|
+
* This is distinct from {@link OxyInferenceError}: the latter is a refusal the
|
|
99
|
+
* server deliberately returned, while this error means the client could not
|
|
100
|
+
* safely interpret a nominally successful stream.
|
|
101
|
+
*/
|
|
102
|
+
class OxyInferenceProtocolError extends Error {
|
|
103
|
+
constructor(message, requestId) {
|
|
104
|
+
super(message);
|
|
105
|
+
this.name = 'OxyInferenceProtocolError';
|
|
106
|
+
if (requestId !== undefined)
|
|
107
|
+
this.requestId = requestId;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.OxyInferenceProtocolError = OxyInferenceProtocolError;
|
|
111
|
+
/**
|
|
112
|
+
* The Oxy inference API.
|
|
113
|
+
*
|
|
114
|
+
* Stateless: it holds a base URL, a way to get a bearer and a `fetch`. Nothing
|
|
115
|
+
* is cached, because the two things worth caching here are a catalogue that is
|
|
116
|
+
* audience-scoped and a receipt that is immutable but rarely re-read.
|
|
117
|
+
*
|
|
118
|
+
* Completed JSON responses are TYPED, not re-parsed. The server validates every
|
|
119
|
+
* one against its own schema before serving it, and a second client-side parse
|
|
120
|
+
* of a non-strict shape would silently DROP fields a newer API added — turning
|
|
121
|
+
* forward compatibility into data loss. Stream events are different: each is a
|
|
122
|
+
* versioned wire message and is parsed against the shared contract before it is
|
|
123
|
+
* yielded. Refusals are read defensively, because two routers answer under `/v1`
|
|
124
|
+
* and an unreadable failure must still reach the caller as one.
|
|
125
|
+
*/
|
|
126
|
+
class OxyInferenceClient {
|
|
127
|
+
constructor(options) {
|
|
128
|
+
_OxyInferenceClient_instances.add(this);
|
|
129
|
+
_OxyInferenceClient_baseURL.set(this, void 0);
|
|
130
|
+
_OxyInferenceClient_credential.set(this, void 0);
|
|
131
|
+
_OxyInferenceClient_fetch.set(this, void 0);
|
|
132
|
+
const baseURL = options.baseURL ?? exports.OXY_INFERENCE_BASE_URL;
|
|
133
|
+
__classPrivateFieldSet(this, _OxyInferenceClient_baseURL, baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL, "f");
|
|
134
|
+
__classPrivateFieldSet(this, _OxyInferenceClient_credential, options.credential, "f");
|
|
135
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
136
|
+
if (fetchImpl === undefined) {
|
|
137
|
+
throw new Error('OxyInferenceClient needs a fetch implementation: this runtime has no global fetch, so pass one as `fetch`.');
|
|
138
|
+
}
|
|
139
|
+
__classPrivateFieldSet(this, _OxyInferenceClient_fetch, fetchImpl, "f");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The models this caller may use — `GET /v1/models`.
|
|
143
|
+
*
|
|
144
|
+
* Audience-scoped server-side. A machine credential and an anonymous caller
|
|
145
|
+
* both see the PUBLIC catalogue; only an internal/system application's
|
|
146
|
+
* service token sees internal-only routes.
|
|
147
|
+
*
|
|
148
|
+
* **`[]` is a normal answer**, and is the only answer today: the catalogue
|
|
149
|
+
* is populated by operators, and a route is not publicly exposed until
|
|
150
|
+
* somebody has reviewed the right to resell it.
|
|
151
|
+
*/
|
|
152
|
+
async listModels(options = {}) {
|
|
153
|
+
const body = await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_request).call(this, 'GET', '/v1/models', { ...(options.signal === undefined ? {} : { signal: options.signal }) });
|
|
154
|
+
return body.data;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* One catalogue entry by its canonical id — `GET /v1/models/:publisher/:model`.
|
|
158
|
+
*
|
|
159
|
+
* The id is TWO path segments, because a canonical model id contains a slash
|
|
160
|
+
* and a single encoded segment would never match the route.
|
|
161
|
+
*
|
|
162
|
+
* A model you may not see answers 404 identically to one that does not
|
|
163
|
+
* exist, deliberately: the catalogue is never an existence oracle for what
|
|
164
|
+
* Oxy runs internally.
|
|
165
|
+
*
|
|
166
|
+
* @param modelId - `<publisher>/<model>`. A revision pin
|
|
167
|
+
* (`<publisher>/<model>@<revision>`) names a model REFERENCE rather than a
|
|
168
|
+
* model and is rejected here rather than sent, because the catalogue is
|
|
169
|
+
* keyed on models and a pinned reference would 404 indistinguishably from
|
|
170
|
+
* "no such model".
|
|
171
|
+
*/
|
|
172
|
+
async getModel(modelId, options = {}) {
|
|
173
|
+
const parsed = contracts_1.modelIdSchema.safeParse(modelId);
|
|
174
|
+
if (!parsed.success) {
|
|
175
|
+
throw new Error(`Not a canonical model id: ${modelId}. Expected <publisher>/<model>, e.g. acme/some-model.`);
|
|
176
|
+
}
|
|
177
|
+
const [publisher, model] = parsed.data.split('/');
|
|
178
|
+
const body = await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_request).call(this, 'GET', `/v1/models/${encodeURIComponent(publisher)}/${encodeURIComponent(model)}`, { ...(options.signal === undefined ? {} : { signal: options.signal }) });
|
|
179
|
+
return body.data;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The routing profiles this caller may select — `GET /v1/models/routing-profiles`.
|
|
183
|
+
*
|
|
184
|
+
* A profile is a named strategy for CHOOSING among routes, not a model: no
|
|
185
|
+
* publisher, no revision, no licence, no weights. Like the model list, `[]`
|
|
186
|
+
* is a normal answer.
|
|
187
|
+
*/
|
|
188
|
+
async listRoutingProfiles(options = {}) {
|
|
189
|
+
const body = await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_request).call(this, 'GET', '/v1/models/routing-profiles', { ...(options.signal === undefined ? {} : { signal: options.signal }) });
|
|
190
|
+
return body.data;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Send one non-streaming inference request — `POST /v1/responses`.
|
|
194
|
+
*
|
|
195
|
+
* @throws {OxyInferenceError} for every refusal, carrying the server's own
|
|
196
|
+
* `code`, `retryable` and `requestId`.
|
|
197
|
+
*/
|
|
198
|
+
async respond(request, options = {}) {
|
|
199
|
+
return __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_request).call(this, 'POST', '/v1/responses', {
|
|
200
|
+
body: request,
|
|
201
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
202
|
+
...(options.idempotencyKey === undefined
|
|
203
|
+
? {}
|
|
204
|
+
: { idempotencyKey: options.idempotencyKey }),
|
|
205
|
+
...(options.delegatedUserId === undefined
|
|
206
|
+
? {}
|
|
207
|
+
: { delegatedUserId: options.delegatedUserId }),
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Stream one inference request from `POST /v1/responses`.
|
|
212
|
+
*
|
|
213
|
+
* The transport choice is method-level: this method adds `stream: true` and
|
|
214
|
+
* requests SSE, while {@link respond} never does. Every yielded value has
|
|
215
|
+
* already passed `inferenceStreamEventSchema`, belongs to the request id in
|
|
216
|
+
* the response header and advances the stream sequence. A terminal `error`
|
|
217
|
+
* event is yielded as part of the published union; an HTTP refusal before
|
|
218
|
+
* the stream opens throws {@link OxyInferenceError}.
|
|
219
|
+
*
|
|
220
|
+
* Breaking out of the iterator cancels the response body. Passing an abort
|
|
221
|
+
* signal additionally lets the caller cancel while waiting for the first or
|
|
222
|
+
* any later event.
|
|
223
|
+
*
|
|
224
|
+
* @throws {OxyInferenceError} when the edge refuses before opening SSE.
|
|
225
|
+
* @throws {OxyInferenceProtocolError} when a successful SSE response cannot
|
|
226
|
+
* be interpreted under the published stream contract.
|
|
227
|
+
*/
|
|
228
|
+
async *stream(request, options = {}) {
|
|
229
|
+
const response = await __classPrivateFieldGet(this, _OxyInferenceClient_fetch, "f").call(this, `${__classPrivateFieldGet(this, _OxyInferenceClient_baseURL, "f")}/v1/responses`, {
|
|
230
|
+
method: 'POST',
|
|
231
|
+
headers: await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_headers).call(this, 'text/event-stream', {
|
|
232
|
+
hasBody: true,
|
|
233
|
+
...(options.idempotencyKey === undefined
|
|
234
|
+
? {}
|
|
235
|
+
: { idempotencyKey: options.idempotencyKey }),
|
|
236
|
+
...(options.delegatedUserId === undefined
|
|
237
|
+
? {}
|
|
238
|
+
: { delegatedUserId: options.delegatedUserId }),
|
|
239
|
+
}),
|
|
240
|
+
body: JSON.stringify({ ...request, stream: true }),
|
|
241
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
242
|
+
});
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
const payload = await response.json().catch(() => undefined);
|
|
245
|
+
throw toInferenceError(payload, response.status, response.headers.get('X-Oxy-Request-Id'));
|
|
246
|
+
}
|
|
247
|
+
const requestId = response.headers.get('X-Oxy-Request-Id') ?? undefined;
|
|
248
|
+
const mediaType = response.headers
|
|
249
|
+
.get('Content-Type')
|
|
250
|
+
?.split(';', 1)[0]
|
|
251
|
+
?.trim()
|
|
252
|
+
.toLowerCase();
|
|
253
|
+
if (mediaType !== 'text/event-stream') {
|
|
254
|
+
await cancelUnreadResponse(response);
|
|
255
|
+
throw protocolError(`The inference API answered a streaming request with ${mediaType ?? 'no Content-Type'} instead of text/event-stream.`, requestId);
|
|
256
|
+
}
|
|
257
|
+
if (requestId === undefined || requestId.length === 0) {
|
|
258
|
+
await cancelUnreadResponse(response);
|
|
259
|
+
throw protocolError('The inference API opened a stream without X-Oxy-Request-Id.', requestId);
|
|
260
|
+
}
|
|
261
|
+
if (response.body === null) {
|
|
262
|
+
throw protocolError('The inference API opened a stream with no response body.', requestId);
|
|
263
|
+
}
|
|
264
|
+
let lastSequence = -1;
|
|
265
|
+
let terminal = false;
|
|
266
|
+
for await (const frame of decodeEventStream(response.body, requestId)) {
|
|
267
|
+
if (terminal) {
|
|
268
|
+
throw protocolError('The inference API sent an event after a terminal event.', requestId);
|
|
269
|
+
}
|
|
270
|
+
let payload;
|
|
271
|
+
try {
|
|
272
|
+
payload = JSON.parse(frame.data);
|
|
273
|
+
}
|
|
274
|
+
catch (_error) {
|
|
275
|
+
throw protocolError(`The inference API sent a ${frame.name || 'unnamed'} SSE event that is not JSON.`, requestId);
|
|
276
|
+
}
|
|
277
|
+
const parsed = contracts_1.inferenceStreamEventSchema.safeParse(payload);
|
|
278
|
+
if (!parsed.success) {
|
|
279
|
+
const path = parsed.error.issues[0]?.path;
|
|
280
|
+
throw protocolError(`The inference API sent an event outside the published stream contract at ${path === undefined || path.length === 0 ? 'an unknown field' : path.join('.')}.`, requestId);
|
|
281
|
+
}
|
|
282
|
+
const event = parsed.data;
|
|
283
|
+
if (frame.name !== event.type) {
|
|
284
|
+
throw protocolError(`The inference API framed a ${event.type} event as ${frame.name || 'unnamed'}.`, requestId);
|
|
285
|
+
}
|
|
286
|
+
if (event.requestId !== requestId) {
|
|
287
|
+
throw protocolError('The inference API sent an event for a different request id.', requestId);
|
|
288
|
+
}
|
|
289
|
+
if (event.sequence <= lastSequence) {
|
|
290
|
+
throw protocolError('The inference API sent a stream sequence that did not advance.', requestId);
|
|
291
|
+
}
|
|
292
|
+
lastSequence = event.sequence;
|
|
293
|
+
terminal = event.type === 'done' || event.type === 'error';
|
|
294
|
+
yield event;
|
|
295
|
+
}
|
|
296
|
+
if (!terminal) {
|
|
297
|
+
throw protocolError('The inference API closed the stream before a terminal done or error event.', requestId);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Read back the settled receipt for one request —
|
|
302
|
+
* `GET /v1/generations/:id`.
|
|
303
|
+
*
|
|
304
|
+
* `id` is the `requestId` you already hold (it is on every response and
|
|
305
|
+
* every error) or the `generationId`. Requires the `inference:usage:read`
|
|
306
|
+
* scope; a caller without it, or one whose application did not make the
|
|
307
|
+
* request, is told the receipt does not exist rather than that it belongs to
|
|
308
|
+
* somebody else.
|
|
309
|
+
*/
|
|
310
|
+
async getGeneration(id, options = {}) {
|
|
311
|
+
const body = await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_request).call(this, 'GET', `/v1/generations/${encodeURIComponent(id)}`, { ...(options.signal === undefined ? {} : { signal: options.signal }) });
|
|
312
|
+
return body.data;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
exports.OxyInferenceClient = OxyInferenceClient;
|
|
316
|
+
_OxyInferenceClient_baseURL = new WeakMap(), _OxyInferenceClient_credential = new WeakMap(), _OxyInferenceClient_fetch = new WeakMap(), _OxyInferenceClient_instances = new WeakSet(), _OxyInferenceClient_bearer =
|
|
317
|
+
/** The bearer for this request, from whichever lane was configured. */
|
|
318
|
+
async function _OxyInferenceClient_bearer() {
|
|
319
|
+
const value = typeof __classPrivateFieldGet(this, _OxyInferenceClient_credential, "f") === 'string'
|
|
320
|
+
? __classPrivateFieldGet(this, _OxyInferenceClient_credential, "f")
|
|
321
|
+
: await __classPrivateFieldGet(this, _OxyInferenceClient_credential, "f").call(this);
|
|
322
|
+
if (value === null || value === undefined || value.length === 0) {
|
|
323
|
+
throw new Error('OxyInferenceClient has no bearer: the configured credential resolved to nothing. On the Oxy auth lane this usually means the session is not restored yet.');
|
|
324
|
+
}
|
|
325
|
+
return value;
|
|
326
|
+
}, _OxyInferenceClient_headers =
|
|
327
|
+
/** Build the authenticated headers for one request, re-reading its bearer. */
|
|
328
|
+
async function _OxyInferenceClient_headers(accept, options) {
|
|
329
|
+
const headers = {
|
|
330
|
+
Authorization: `Bearer ${await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_bearer).call(this)}`,
|
|
331
|
+
Accept: accept,
|
|
332
|
+
};
|
|
333
|
+
if (options.hasBody)
|
|
334
|
+
headers['Content-Type'] = 'application/json';
|
|
335
|
+
if (options.idempotencyKey !== undefined) {
|
|
336
|
+
headers['Idempotency-Key'] = options.idempotencyKey;
|
|
337
|
+
}
|
|
338
|
+
if (options.delegatedUserId !== undefined) {
|
|
339
|
+
headers['X-Oxy-User-Id'] = options.delegatedUserId;
|
|
340
|
+
}
|
|
341
|
+
return headers;
|
|
342
|
+
}, _OxyInferenceClient_request =
|
|
343
|
+
/**
|
|
344
|
+
* One request, and the one place a refusal becomes an
|
|
345
|
+
* {@link OxyInferenceError}.
|
|
346
|
+
*
|
|
347
|
+
* Two error shapes arrive here, because two routers serve `/v1`. The edge
|
|
348
|
+
* returns the contract error at the top level; the catalogue returns the
|
|
349
|
+
* platform's `{ error, message }` envelope. Both are read, and a body that
|
|
350
|
+
* is neither still produces an `OxyInferenceError` — with the code the
|
|
351
|
+
* status maps to — rather than a bare `Error`, so a caller's `catch` never
|
|
352
|
+
* has to branch on which router answered.
|
|
353
|
+
*/
|
|
354
|
+
async function _OxyInferenceClient_request(method, path, options) {
|
|
355
|
+
const response = await __classPrivateFieldGet(this, _OxyInferenceClient_fetch, "f").call(this, `${__classPrivateFieldGet(this, _OxyInferenceClient_baseURL, "f")}${path}`, {
|
|
356
|
+
method,
|
|
357
|
+
headers: await __classPrivateFieldGet(this, _OxyInferenceClient_instances, "m", _OxyInferenceClient_headers).call(this, 'application/json', {
|
|
358
|
+
hasBody: options.body !== undefined,
|
|
359
|
+
...(options.idempotencyKey === undefined
|
|
360
|
+
? {}
|
|
361
|
+
: { idempotencyKey: options.idempotencyKey }),
|
|
362
|
+
...(options.delegatedUserId === undefined
|
|
363
|
+
? {}
|
|
364
|
+
: { delegatedUserId: options.delegatedUserId }),
|
|
365
|
+
}),
|
|
366
|
+
...(options.body === undefined ? {} : { body: JSON.stringify(options.body) }),
|
|
367
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
368
|
+
});
|
|
369
|
+
const payload = await response.json().catch(() => undefined);
|
|
370
|
+
if (!response.ok) {
|
|
371
|
+
throw toInferenceError(payload, response.status, response.headers.get('X-Oxy-Request-Id'));
|
|
372
|
+
}
|
|
373
|
+
return payload;
|
|
374
|
+
};
|
|
375
|
+
/** Bound one public SSE event before parsing it as JSON. */
|
|
376
|
+
const MAX_INFERENCE_STREAM_EVENT_CHARACTERS = 8 * 1024 * 1024;
|
|
377
|
+
/** Bound the `data:` array too; empty lines consume memory without characters. */
|
|
378
|
+
const MAX_INFERENCE_STREAM_EVENT_DATA_LINES = 4096;
|
|
379
|
+
function protocolError(message, requestId) {
|
|
380
|
+
return new OxyInferenceProtocolError(message, requestId);
|
|
381
|
+
}
|
|
382
|
+
/** Cancel a nominally successful response whose stream contract is unreadable. */
|
|
383
|
+
async function cancelUnreadResponse(response) {
|
|
384
|
+
await response.body?.cancel().catch(() => undefined);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Decode SSE incrementally, preserving chunk boundaries only until a complete
|
|
388
|
+
* line is available.
|
|
389
|
+
*
|
|
390
|
+
* Multiple `data:` lines join with a newline, comments are ignored and a final
|
|
391
|
+
* frame does not need a trailing blank line. Cancelling the iterator cancels the
|
|
392
|
+
* body reader, which is how breaking out of `for await` closes the HTTP request
|
|
393
|
+
* instead of leaving generation running upstream.
|
|
394
|
+
*/
|
|
395
|
+
async function* decodeEventStream(body, requestId) {
|
|
396
|
+
const reader = body.getReader();
|
|
397
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
398
|
+
let pending = '';
|
|
399
|
+
let name = '';
|
|
400
|
+
let data = [];
|
|
401
|
+
let accumulated = 0;
|
|
402
|
+
let dataLines = 0;
|
|
403
|
+
let reachedEnd = false;
|
|
404
|
+
const decode = (chunk, options) => {
|
|
405
|
+
try {
|
|
406
|
+
return decoder.decode(chunk, options);
|
|
407
|
+
}
|
|
408
|
+
catch (_error) {
|
|
409
|
+
throw protocolError('The inference API sent an SSE stream that is not valid UTF-8.', requestId);
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
const dispatch = () => {
|
|
413
|
+
if (data.length === 0 && name.length === 0)
|
|
414
|
+
return undefined;
|
|
415
|
+
const frame = { name, data: data.join('\n') };
|
|
416
|
+
name = '';
|
|
417
|
+
data = [];
|
|
418
|
+
accumulated = 0;
|
|
419
|
+
dataLines = 0;
|
|
420
|
+
return frame;
|
|
421
|
+
};
|
|
422
|
+
const consume = (raw) => {
|
|
423
|
+
const line = raw.endsWith('\r') ? raw.slice(0, -1) : raw;
|
|
424
|
+
if (line.length === 0)
|
|
425
|
+
return dispatch();
|
|
426
|
+
if (line.startsWith(':'))
|
|
427
|
+
return undefined;
|
|
428
|
+
const separator = line.indexOf(':');
|
|
429
|
+
const field = separator === -1 ? line : line.slice(0, separator);
|
|
430
|
+
const rawValue = separator === -1 ? '' : line.slice(separator + 1);
|
|
431
|
+
const value = rawValue.startsWith(' ') ? rawValue.slice(1) : rawValue;
|
|
432
|
+
if (field === 'data') {
|
|
433
|
+
dataLines += 1;
|
|
434
|
+
if (dataLines > MAX_INFERENCE_STREAM_EVENT_DATA_LINES) {
|
|
435
|
+
throw protocolError(`The inference API sent an SSE event with over ${MAX_INFERENCE_STREAM_EVENT_DATA_LINES} data lines.`, requestId);
|
|
436
|
+
}
|
|
437
|
+
accumulated += value.length;
|
|
438
|
+
if (accumulated > MAX_INFERENCE_STREAM_EVENT_CHARACTERS) {
|
|
439
|
+
throw protocolError(`The inference API sent an SSE event over ${MAX_INFERENCE_STREAM_EVENT_CHARACTERS} characters.`, requestId);
|
|
440
|
+
}
|
|
441
|
+
data.push(value);
|
|
442
|
+
}
|
|
443
|
+
else if (field === 'event') {
|
|
444
|
+
name = value.trim();
|
|
445
|
+
}
|
|
446
|
+
return undefined;
|
|
447
|
+
};
|
|
448
|
+
try {
|
|
449
|
+
for (;;) {
|
|
450
|
+
const chunk = await reader.read();
|
|
451
|
+
if (chunk.done) {
|
|
452
|
+
reachedEnd = true;
|
|
453
|
+
break;
|
|
454
|
+
}
|
|
455
|
+
pending += decode(chunk.value, { stream: true });
|
|
456
|
+
if (pending.length > MAX_INFERENCE_STREAM_EVENT_CHARACTERS) {
|
|
457
|
+
throw protocolError(`The inference API sent an SSE line over ${MAX_INFERENCE_STREAM_EVENT_CHARACTERS} characters with no boundary.`, requestId);
|
|
458
|
+
}
|
|
459
|
+
let newline = pending.indexOf('\n');
|
|
460
|
+
while (newline !== -1) {
|
|
461
|
+
const frame = consume(pending.slice(0, newline));
|
|
462
|
+
pending = pending.slice(newline + 1);
|
|
463
|
+
if (frame !== undefined)
|
|
464
|
+
yield frame;
|
|
465
|
+
newline = pending.indexOf('\n');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
pending += decode();
|
|
469
|
+
if (pending.length > 0) {
|
|
470
|
+
const frame = consume(pending);
|
|
471
|
+
if (frame !== undefined)
|
|
472
|
+
yield frame;
|
|
473
|
+
}
|
|
474
|
+
const trailing = dispatch();
|
|
475
|
+
if (trailing !== undefined)
|
|
476
|
+
yield trailing;
|
|
477
|
+
}
|
|
478
|
+
finally {
|
|
479
|
+
if (!reachedEnd) {
|
|
480
|
+
// Preserve the original parse/abort error if transport cancellation
|
|
481
|
+
// itself also refuses: cancellation is cleanup, never the diagnosis.
|
|
482
|
+
await reader.cancel().catch(() => undefined);
|
|
483
|
+
}
|
|
484
|
+
reader.releaseLock();
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Which code a status means when the body did not name one.
|
|
489
|
+
*
|
|
490
|
+
* Deliberately partial: only the statuses whose meaning is unambiguous without a
|
|
491
|
+
* body. Everything else becomes `internal_error`, which is non-retryable — the
|
|
492
|
+
* safe direction, since inventing a retryable code for an unreadable failure is
|
|
493
|
+
* how one outage becomes a retry storm.
|
|
494
|
+
*/
|
|
495
|
+
const STATUS_FALLBACK_CODE = {
|
|
496
|
+
400: 'invalid_request',
|
|
497
|
+
401: 'authentication_failed',
|
|
498
|
+
403: 'permission_denied',
|
|
499
|
+
404: 'model_not_found',
|
|
500
|
+
409: 'idempotency_conflict',
|
|
501
|
+
413: 'request_too_large',
|
|
502
|
+
429: 'rate_limited',
|
|
503
|
+
502: 'provider_error',
|
|
504
|
+
503: 'service_unavailable',
|
|
505
|
+
504: 'provider_timeout',
|
|
506
|
+
};
|
|
507
|
+
/**
|
|
508
|
+
* The closed set the contract defines, as a lookup.
|
|
509
|
+
*
|
|
510
|
+
* A `code` outside it is a contract violation rather than a code this client
|
|
511
|
+
* has not caught up with — `INFERENCE_ERROR_CODES` and the version header move
|
|
512
|
+
* together — so an unrecognised one falls back to the status map instead of
|
|
513
|
+
* being asserted into the type.
|
|
514
|
+
*/
|
|
515
|
+
const INFERENCE_ERROR_CODE_SET = new Set(contracts_1.INFERENCE_ERROR_CODES);
|
|
516
|
+
/** Read whichever error shape arrived into the one this client throws. */
|
|
517
|
+
function toInferenceError(payload, status, requestIdHeader) {
|
|
518
|
+
const body = (payload ?? {});
|
|
519
|
+
// The edge's own shape is the contract error at the top level; the
|
|
520
|
+
// catalogue's is the platform envelope, whose `error` is a string.
|
|
521
|
+
const code = typeof body.code === 'string' && INFERENCE_ERROR_CODE_SET.has(body.code)
|
|
522
|
+
? body.code
|
|
523
|
+
: (STATUS_FALLBACK_CODE[status] ?? 'internal_error');
|
|
524
|
+
const message = typeof body.message === 'string' && body.message.length > 0
|
|
525
|
+
? body.message
|
|
526
|
+
: typeof body.error === 'string' && body.error.length > 0
|
|
527
|
+
? body.error
|
|
528
|
+
: `The inference API answered ${status}.`;
|
|
529
|
+
return new OxyInferenceError({
|
|
530
|
+
code,
|
|
531
|
+
message,
|
|
532
|
+
// A body that did not assert retryability is not retryable: the server
|
|
533
|
+
// is the only thing that may say a retry could succeed.
|
|
534
|
+
retryable: body.retryable === true,
|
|
535
|
+
requestId: typeof body.requestId === 'string' && body.requestId.length > 0
|
|
536
|
+
? body.requestId
|
|
537
|
+
: (requestIdHeader ?? ''),
|
|
538
|
+
status,
|
|
539
|
+
...(body.retryable === true && typeof body.retryAfterMs === 'number'
|
|
540
|
+
? { retryAfterMs: body.retryAfterMs }
|
|
541
|
+
: {}),
|
|
542
|
+
...(typeof body.param === 'string' ? { param: body.param } : {}),
|
|
543
|
+
});
|
|
544
|
+
}
|