@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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for common API patterns
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Build a plain query-parameter record from an object, stringifying values and
|
|
6
|
+
* dropping `undefined`/`null` entries.
|
|
7
|
+
*
|
|
8
|
+
* This is the shape `OxyServices.makeRequest` expects for a GET's `params`:
|
|
9
|
+
* `HttpService` inspects it with `Object.keys(...)` (both to decide whether to
|
|
10
|
+
* append a query string and to build the request's cache key), and
|
|
11
|
+
* `Object.keys(new URLSearchParams({ limit: '20' }))` is `[]` — a
|
|
12
|
+
* `URLSearchParams` exposes its entries through iterator methods, never as own
|
|
13
|
+
* enumerable properties. Passing one to `makeRequest` therefore silently drops
|
|
14
|
+
* the whole query string. Always hand `makeRequest` a plain record.
|
|
15
|
+
*
|
|
16
|
+
* Generic over the input object rather than taking `Record<string, unknown>`,
|
|
17
|
+
* because a TypeScript `interface` (`PaginationParams`, `FollowGraphParams`, …)
|
|
18
|
+
* has no implicit index signature and so is not assignable to that type.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildQueryParams<T extends object>(params: T): Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Build URL search parameters from an object.
|
|
23
|
+
*
|
|
24
|
+
* For building a URL string only — see {@link buildQueryParams} for the shape
|
|
25
|
+
* `makeRequest` needs.
|
|
26
|
+
*
|
|
27
|
+
* @param params Object with parameter key-value pairs
|
|
28
|
+
* @returns URLSearchParams instance
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildSearchParams<T extends object>(params: T): URLSearchParams;
|
|
31
|
+
/**
|
|
32
|
+
* Build URL with search parameters
|
|
33
|
+
* @param baseUrl Base URL
|
|
34
|
+
* @param params Object with parameter key-value pairs
|
|
35
|
+
* @returns Complete URL with search parameters
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildUrl<T extends object>(baseUrl: string, params?: T): string;
|
|
38
|
+
/**
|
|
39
|
+
* Common pagination parameters
|
|
40
|
+
*/
|
|
41
|
+
export interface PaginationParams {
|
|
42
|
+
limit?: number;
|
|
43
|
+
offset?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Ordering for the follow-graph list endpoints (`/users/:id/followers`,
|
|
47
|
+
* `/users/:id/following`, `/users/:id/mutuals`).
|
|
48
|
+
*
|
|
49
|
+
* - `recent` — newest follow edge first (the server default).
|
|
50
|
+
* - `oldest` — oldest follow edge first.
|
|
51
|
+
*/
|
|
52
|
+
export type FollowGraphSort = 'recent' | 'oldest';
|
|
53
|
+
/**
|
|
54
|
+
* Pagination plus the follow-graph ordering.
|
|
55
|
+
*
|
|
56
|
+
* Kept separate from {@link PaginationParams}, which is shared by endpoints
|
|
57
|
+
* that have no `sort` at all.
|
|
58
|
+
*/
|
|
59
|
+
export interface FollowGraphParams extends PaginationParams {
|
|
60
|
+
sort?: FollowGraphSort;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build pagination query parameters.
|
|
64
|
+
*
|
|
65
|
+
* Returns a plain record — NOT a `URLSearchParams` — because that is the only
|
|
66
|
+
* shape `makeRequest`/`HttpService` can read. See {@link buildQueryParams}.
|
|
67
|
+
*
|
|
68
|
+
* @param params Pagination parameters
|
|
69
|
+
* @returns Query record with pagination
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildPaginationParams(params: PaginationParams): Record<string, string>;
|
|
72
|
+
/**
|
|
73
|
+
* Common API response wrapper
|
|
74
|
+
*/
|
|
75
|
+
export interface ApiResponse<T = any> {
|
|
76
|
+
data: T;
|
|
77
|
+
message?: string;
|
|
78
|
+
success?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Common error response wrapper
|
|
82
|
+
*/
|
|
83
|
+
export interface ErrorResponse {
|
|
84
|
+
message: string;
|
|
85
|
+
code: string;
|
|
86
|
+
status: number;
|
|
87
|
+
details?: any;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Safe JSON parsing with error handling
|
|
91
|
+
* @param data Data to parse
|
|
92
|
+
* @param fallback Fallback value if parsing fails
|
|
93
|
+
* @returns Parsed data or fallback
|
|
94
|
+
*/
|
|
95
|
+
export declare function safeJsonParse<T>(data: any, fallback: T): T;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async utilities for common asynchronous patterns and error handling
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper for async operations with automatic error handling
|
|
6
|
+
* Returns null on error instead of throwing
|
|
7
|
+
*/
|
|
8
|
+
export declare function withErrorHandling<T>(operation: () => Promise<T>, errorHandler?: (error: any) => void, context?: string): Promise<T | null>;
|
|
9
|
+
/**
|
|
10
|
+
* Execute multiple async operations in parallel with error handling
|
|
11
|
+
*/
|
|
12
|
+
export declare function parallelWithErrorHandling<T>(operations: (() => Promise<T>)[], errorHandler?: (error: any, index: number) => void): Promise<(T | null)[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Retry an async operation with exponential backoff
|
|
15
|
+
*
|
|
16
|
+
* By default, does not retry on 4xx errors (client errors). The default
|
|
17
|
+
* predicate accepts both the axios-style `error.response.status` and the
|
|
18
|
+
* flat `error.status` shape produced by {@link handleHttpError}, so callers
|
|
19
|
+
* never accidentally retry a deterministic client failure.
|
|
20
|
+
*
|
|
21
|
+
* Use the `shouldRetry` callback to customize retry behavior.
|
|
22
|
+
*/
|
|
23
|
+
export declare function retryAsync<T>(operation: () => Promise<T>, maxRetries?: number, baseDelay?: number, shouldRetry?: (error: any) => boolean): Promise<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Debounce async function calls
|
|
26
|
+
*/
|
|
27
|
+
export declare function debounceAsync<T extends (...args: any[]) => Promise<any>>(func: T, delay: number): (...args: Parameters<T>) => Promise<ReturnType<T>>;
|
|
28
|
+
/**
|
|
29
|
+
* Throttle async function calls
|
|
30
|
+
*/
|
|
31
|
+
export declare function throttleAsync<T extends (...args: any[]) => Promise<any>>(func: T, limit: number, interval: number): (...args: Parameters<T>) => Promise<ReturnType<T>>;
|
|
32
|
+
/**
|
|
33
|
+
* Execute async operations sequentially with progress tracking
|
|
34
|
+
*/
|
|
35
|
+
export declare function sequentialWithProgress<T>(operations: (() => Promise<T>)[], onProgress?: (completed: number, total: number) => void): Promise<T[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Batch async operations
|
|
38
|
+
*/
|
|
39
|
+
export declare function batchAsync<T>(items: T[], batchSize: number, processor: (batch: T[]) => Promise<void>): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Create a cancellable async operation
|
|
42
|
+
*/
|
|
43
|
+
export declare function createCancellableAsync<T>(operation: (signal: AbortSignal) => Promise<T>): {
|
|
44
|
+
execute: () => Promise<T>;
|
|
45
|
+
cancel: () => void;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Timeout wrapper for async operations
|
|
49
|
+
*/
|
|
50
|
+
export declare function withTimeout<T>(operation: Promise<T>, timeoutMs: number, timeoutMessage?: string): Promise<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Execute async operation with loading state
|
|
53
|
+
*/
|
|
54
|
+
export declare function withLoadingState<T>(operation: () => Promise<T>, setLoading: (loading: boolean) => void): Promise<T>;
|
|
55
|
+
/**
|
|
56
|
+
* Create a promise that resolves after a delay
|
|
57
|
+
*/
|
|
58
|
+
export declare const delay: (ms: number) => Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Execute async operation with retry on specific errors
|
|
61
|
+
*/
|
|
62
|
+
export declare function retryOnError<T>(operation: () => Promise<T>, retryableErrors: (string | number)[], maxRetries?: number): Promise<T>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication helper utilities for common token validation
|
|
3
|
+
* and authentication error handling patterns.
|
|
4
|
+
*/
|
|
5
|
+
import type { OxyServices } from '../OxyServices';
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when session sync is required
|
|
8
|
+
*/
|
|
9
|
+
export declare class SessionSyncRequiredError extends Error {
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when authentication fails
|
|
14
|
+
*/
|
|
15
|
+
export declare class AuthenticationFailedError extends Error {
|
|
16
|
+
constructor(message?: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Ensures a valid token exists before making authenticated API calls.
|
|
20
|
+
* If no valid token exists, callers may provide a session synchronizer that
|
|
21
|
+
* uses the platform-appropriate new flow (cookie restore, device claim, or
|
|
22
|
+
* native secure restore). This helper never exchanges a session id for a token.
|
|
23
|
+
*
|
|
24
|
+
* @throws {SessionSyncRequiredError} If the session needs to be synced (offline session)
|
|
25
|
+
*/
|
|
26
|
+
export declare function ensureValidToken(oxyServices: OxyServices, _activeSessionId: string | null | undefined, syncSession?: () => Promise<unknown>): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Options for handling API authentication errors
|
|
29
|
+
*/
|
|
30
|
+
export interface HandleApiErrorOptions {
|
|
31
|
+
syncSession?: () => Promise<unknown>;
|
|
32
|
+
activeSessionId?: string | null;
|
|
33
|
+
oxyServices?: OxyServices;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Checks if an error is an authentication error (401 or auth-related message)
|
|
37
|
+
*/
|
|
38
|
+
export declare function isAuthenticationError(error: unknown): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Wraps an API call with authentication error handling.
|
|
41
|
+
* On auth failure, optionally attempts to sync the session and retry.
|
|
42
|
+
*
|
|
43
|
+
* @throws {AuthenticationFailedError} If authentication fails and cannot be recovered
|
|
44
|
+
*/
|
|
45
|
+
export declare function withAuthErrorHandling<T>(apiCall: () => Promise<T>, options?: HandleApiErrorOptions): Promise<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Combines token validation and auth error handling for a complete authenticated API call.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* return await authenticatedApiCall(
|
|
52
|
+
* oxyServices,
|
|
53
|
+
* activeSessionId,
|
|
54
|
+
* () => oxyServices.updateProfile(updates)
|
|
55
|
+
* );
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function authenticatedApiCall<T>(oxyServices: OxyServices, activeSessionId: string | null | undefined, apiCall: () => Promise<T>, syncSession?: () => Promise<unknown>): Promise<T>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central IdP apex constant.
|
|
3
|
+
*
|
|
4
|
+
* The client SSO/FedCM resolvers (`resolveCentralAuthUrl`, `CENTRAL_AUTH_URL`)
|
|
5
|
+
* were removed in the device-first / legacy-final cutovers. The lone survivor is
|
|
6
|
+
* `CENTRAL_IDP_APEX`, kept because it has a LIVE consumer —
|
|
7
|
+
* `@oxy.so/core/server`'s CORS helper (`server/cors.ts`'s `createOxyCors`)
|
|
8
|
+
* auto-allows `*.oxy.so` from it. That CORS use is permanent, so this stays
|
|
9
|
+
* past the SSO/FedCM teardown.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The registrable apex (eTLD+1) of the Oxy ecosystem's central Identity
|
|
13
|
+
* Provider, reachable at `auth.${CENTRAL_IDP_APEX}`. Single source of truth so
|
|
14
|
+
* the CORS helper (and anything else that needs the central apex) never drifts.
|
|
15
|
+
*/
|
|
16
|
+
export declare const CENTRAL_IDP_APEX = "oxy.so";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal interface for services that can update asset visibility.
|
|
3
|
+
* Kept loose to avoid mixin type-inference issues with the OxyServices class.
|
|
4
|
+
*/
|
|
5
|
+
export interface AssetVisibilityService {
|
|
6
|
+
assetUpdateVisibility(fileId: string, visibility: 'private' | 'public' | 'unlisted'): Promise<unknown>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Updates file visibility to public for avatar use.
|
|
10
|
+
* Logs non-404 errors to help debug upload issues.
|
|
11
|
+
*
|
|
12
|
+
* @param fileId - The file ID to update visibility for
|
|
13
|
+
* @param oxyServices - OxyServices instance (or any object with assetUpdateVisibility)
|
|
14
|
+
* @param contextName - Context name for error logging
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateAvatarVisibility(fileId: string | undefined, oxyServices: AssetVisibilityService, contextName?: string): Promise<void>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized cache utility with TTL support
|
|
3
|
+
*
|
|
4
|
+
* This is a production-ready cache implementation used across the codebase
|
|
5
|
+
* for consistent caching behavior and performance optimization.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Cache statistics
|
|
9
|
+
*/
|
|
10
|
+
export interface CacheStats {
|
|
11
|
+
size: number;
|
|
12
|
+
hits: number;
|
|
13
|
+
misses: number;
|
|
14
|
+
hitRate: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* TTL-based cache implementation
|
|
18
|
+
*
|
|
19
|
+
* Features:
|
|
20
|
+
* - Automatic expiration based on TTL
|
|
21
|
+
* - Manual cleanup of expired entries
|
|
22
|
+
* - Statistics tracking (hits, misses, hit rate)
|
|
23
|
+
* - Type-safe generic interface
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const cache = new TTLCache<string>(5 * 60 * 1000); // 5 minutes
|
|
28
|
+
*
|
|
29
|
+
* // Set with default TTL
|
|
30
|
+
* cache.set('key', 'value');
|
|
31
|
+
*
|
|
32
|
+
* // Set with custom TTL
|
|
33
|
+
* cache.set('key', 'value', 10 * 60 * 1000); // 10 minutes
|
|
34
|
+
*
|
|
35
|
+
* // Get value
|
|
36
|
+
* const value = cache.get('key');
|
|
37
|
+
*
|
|
38
|
+
* // Get statistics
|
|
39
|
+
* const stats = cache.getStats();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class TTLCache<T> {
|
|
43
|
+
private cache;
|
|
44
|
+
private defaultTTL;
|
|
45
|
+
private hits;
|
|
46
|
+
private misses;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new TTL cache
|
|
49
|
+
* @param defaultTTL Default TTL in milliseconds (default: 5 minutes)
|
|
50
|
+
*/
|
|
51
|
+
constructor(defaultTTL?: number);
|
|
52
|
+
/**
|
|
53
|
+
* Get a value from cache
|
|
54
|
+
* @param key Cache key
|
|
55
|
+
* @returns Cached value or null if not found or expired
|
|
56
|
+
*/
|
|
57
|
+
get(key: string): T | null;
|
|
58
|
+
/**
|
|
59
|
+
* Set a value in cache
|
|
60
|
+
* @param key Cache key
|
|
61
|
+
* @param data Data to cache
|
|
62
|
+
* @param ttl Optional TTL override (uses default if not provided). An
|
|
63
|
+
* explicit `0` or negative value is honored as "already expired" — the
|
|
64
|
+
* entry is stored with `expiresAt <= now`, so the next `get`/`has` treats
|
|
65
|
+
* it as a miss — rather than silently falling back to the default TTL.
|
|
66
|
+
*/
|
|
67
|
+
set(key: string, data: T, ttl?: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Delete a specific cache entry
|
|
70
|
+
* @param key Cache key
|
|
71
|
+
* @returns true if entry was deleted, false if not found
|
|
72
|
+
*/
|
|
73
|
+
delete(key: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Clear all cache entries
|
|
76
|
+
*/
|
|
77
|
+
clear(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Check if a key exists and is not expired
|
|
80
|
+
* @param key Cache key
|
|
81
|
+
* @returns true if key exists and is valid
|
|
82
|
+
*/
|
|
83
|
+
has(key: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Get all valid cache keys
|
|
86
|
+
* @returns Array of valid cache keys
|
|
87
|
+
*/
|
|
88
|
+
keys(): string[];
|
|
89
|
+
/**
|
|
90
|
+
* Clean up expired entries
|
|
91
|
+
* @returns Number of entries removed
|
|
92
|
+
*/
|
|
93
|
+
cleanup(): number;
|
|
94
|
+
/**
|
|
95
|
+
* Get cache size (number of entries)
|
|
96
|
+
*/
|
|
97
|
+
size(): number;
|
|
98
|
+
/**
|
|
99
|
+
* Get cache statistics
|
|
100
|
+
*/
|
|
101
|
+
getStats(): CacheStats;
|
|
102
|
+
/**
|
|
103
|
+
* Reset statistics (keeps cache entries)
|
|
104
|
+
*/
|
|
105
|
+
resetStats(): void;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a TTL cache instance (convenience function)
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const cache = createCache<string>(5 * 60 * 1000);
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export declare function createCache<T>(ttl?: number): TTLCache<T>;
|
|
116
|
+
/**
|
|
117
|
+
* Register a cache for automatic cleanup
|
|
118
|
+
* @param cache Cache instance to register
|
|
119
|
+
*/
|
|
120
|
+
export declare function registerCacheForCleanup(cache: TTLCache<any>): void;
|
|
121
|
+
/**
|
|
122
|
+
* Unregister a cache from automatic cleanup
|
|
123
|
+
* @param cache Cache instance to unregister
|
|
124
|
+
*/
|
|
125
|
+
export declare function unregisterCacheFromCleanup(cache: TTLCache<any>): void;
|
|
126
|
+
/**
|
|
127
|
+
* Stop all cleanup intervals (useful for testing)
|
|
128
|
+
* This will clear the interval and unregister all caches
|
|
129
|
+
*/
|
|
130
|
+
export declare function stopAllCleanupIntervals(): void;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache-key primitives for the identity-scoped HTTP GET response cache.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from {@link HttpService} so the identity-tag derivation is a pure,
|
|
5
|
+
* independently testable function with no dependency on instance/token state.
|
|
6
|
+
* The HTTP service injects the live access token; everything here is
|
|
7
|
+
* referentially transparent given that input.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Minimal JWT payload shape we read for cache scoping. The identity discriminator
|
|
11
|
+
* comes from `userId` (preferred) or `id`; nothing else is consulted here.
|
|
12
|
+
*/
|
|
13
|
+
export interface CacheIdentityJwtPayload {
|
|
14
|
+
userId?: string;
|
|
15
|
+
id?: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Discriminator used when there is no access token at all. Anonymous responses
|
|
20
|
+
* must never collide with any authenticated identity.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ANON_IDENTITY = "anon";
|
|
23
|
+
/**
|
|
24
|
+
* FNV-1a 32-bit non-cryptographic hash.
|
|
25
|
+
*
|
|
26
|
+
* Used by the cache-key generator for large payloads where full JSON inclusion
|
|
27
|
+
* would balloon the cache map keys, and as the fallback discriminator for an
|
|
28
|
+
* undecodable access token. Content-addressed: every byte of the input
|
|
29
|
+
* contributes to the digest, so two inputs with the same top-level shape but
|
|
30
|
+
* different field values produce different keys (the previous `keys + length`
|
|
31
|
+
* heuristic collided on these).
|
|
32
|
+
*
|
|
33
|
+
* Trade-offs:
|
|
34
|
+
* - 32 bits is ample for an in-process cache (collision risk negligible at our
|
|
35
|
+
* key counts; we also prefix with method + url which further partitions the
|
|
36
|
+
* keyspace).
|
|
37
|
+
* - Not cryptographically secure — never use for security decisions.
|
|
38
|
+
* - Zero dependencies, branch-free hot loop, ~1 GiB/s on V8.
|
|
39
|
+
*/
|
|
40
|
+
export declare function fnv1a32(str: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Derive a stable, non-sensitive identity discriminator for cache scoping.
|
|
43
|
+
*
|
|
44
|
+
* The GET-response cache MUST be partitioned by caller identity: endpoints with
|
|
45
|
+
* optional auth (e.g. `GET /profiles/recommendations`) return different content
|
|
46
|
+
* for an anonymous vs an authenticated caller, and per-user content for
|
|
47
|
+
* different authenticated users. Keying solely on `method:url:data` let an
|
|
48
|
+
* anonymous response be served to an authenticated caller — surfacing as
|
|
49
|
+
* "Who to follow" recommending accounts the user already follows after a
|
|
50
|
+
* cold-boot session restore.
|
|
51
|
+
*
|
|
52
|
+
* Resolution order:
|
|
53
|
+
* - no token → {@link ANON_IDENTITY} (`'anon'`).
|
|
54
|
+
* - decodable token → the token's `userId || id`.
|
|
55
|
+
* - undecodable token → a short FNV-1a hash of the token, prefixed `t` so it
|
|
56
|
+
* can never collide with `'anon'` or a real user id.
|
|
57
|
+
*
|
|
58
|
+
* We use the decoded user id rather than the raw JWT so the token never lands
|
|
59
|
+
* in a cache key (no token leakage through any cache-key logging, no key bloat).
|
|
60
|
+
* Switching into a managed account mints a REAL new session whose access token
|
|
61
|
+
* carries the target account's id, so the identity tag changes naturally on a
|
|
62
|
+
* switch — there is no separate acting-as discriminator to fold in.
|
|
63
|
+
*
|
|
64
|
+
* @param accessToken The current bearer access token, or `null` when anonymous.
|
|
65
|
+
*/
|
|
66
|
+
export declare function computeIdentityTag(accessToken: string | null): string;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coldBoot — a pure, ordered, short-circuit runner for "cold boot"
|
|
3
|
+
* authentication resolution.
|
|
4
|
+
*
|
|
5
|
+
* On a fresh page load / app launch the SDK may have several ways to recover an
|
|
6
|
+
* existing session (a persisted refresh-token family, a shared-keychain
|
|
7
|
+
* identity, a cross-domain boot-fragment return, ...). They must be attempted
|
|
8
|
+
* in a deterministic order, and the FIRST one that yields a session wins —
|
|
9
|
+
* every later step is skipped. This module encodes exactly that contract and
|
|
10
|
+
* nothing else.
|
|
11
|
+
*
|
|
12
|
+
* Design constraints (all enforced):
|
|
13
|
+
* - PURE: no DOM, no `navigator`, no `window`, no React, no platform globals.
|
|
14
|
+
* - NO module-level mutable state. Every call to {@link runColdBoot} is fully
|
|
15
|
+
* self-contained, so it is safe under bundler re-evaluation (e.g. the Metro
|
|
16
|
+
* web bundle — the reason any run-once guard for a step must live in the
|
|
17
|
+
* calling consumer, never in a core module-level singleton).
|
|
18
|
+
* - Architecture-agnostic: it knows nothing about HOW a step resolves a
|
|
19
|
+
* session; `runSessionColdBoot` (`boot/sessionColdBoot.ts`) is the current
|
|
20
|
+
* device-first consumer.
|
|
21
|
+
*
|
|
22
|
+
* A step is skipped (without running) when its `enabled` predicate returns
|
|
23
|
+
* false. Any thrown error — from either `enabled` or `run` — is reported via
|
|
24
|
+
* `onStepError` and treated as a non-fatal skip, so one broken recovery path
|
|
25
|
+
* can never prevent a later, healthy one from succeeding.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* A successful step result carrying the recovered session.
|
|
29
|
+
*/
|
|
30
|
+
export interface ColdBootSession<S> {
|
|
31
|
+
readonly kind: 'session';
|
|
32
|
+
readonly session: S;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A step result indicating this step has nothing to contribute; the runner
|
|
36
|
+
* should fall through to the next step.
|
|
37
|
+
*/
|
|
38
|
+
export interface ColdBootSkip {
|
|
39
|
+
readonly kind: 'skip';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The result of running a single cold-boot step.
|
|
43
|
+
*/
|
|
44
|
+
export type ColdBootStepResult<S> = ColdBootSession<S> | ColdBootSkip;
|
|
45
|
+
/**
|
|
46
|
+
* A single ordered cold-boot recovery step.
|
|
47
|
+
*/
|
|
48
|
+
export interface ColdBootStep<S> {
|
|
49
|
+
/** Stable identifier; surfaced as {@link ColdBootOutcome.via} on success. */
|
|
50
|
+
readonly id: string;
|
|
51
|
+
/**
|
|
52
|
+
* Optional gate. When provided and it returns `false`, `run` is NOT called
|
|
53
|
+
* and the runner moves to the next step. A throw is treated as disabled
|
|
54
|
+
* (and reported via `onStepError`).
|
|
55
|
+
*/
|
|
56
|
+
readonly enabled?: () => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Attempts to recover a session. Resolve with `{ kind: 'session' }` to win
|
|
59
|
+
* the cold boot, or `{ kind: 'skip' }` to defer to the next step. A throw is
|
|
60
|
+
* treated as a skip (and reported via `onStepError`).
|
|
61
|
+
*/
|
|
62
|
+
readonly run: () => Promise<ColdBootStepResult<S>>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The terminal outcome of a cold boot: either the winning step's session
|
|
66
|
+
* (with the step `id` it came from), or `unauthenticated` if every step
|
|
67
|
+
* skipped, was disabled, or errored.
|
|
68
|
+
*/
|
|
69
|
+
export type ColdBootOutcome<S> = {
|
|
70
|
+
readonly kind: 'session';
|
|
71
|
+
readonly via: string;
|
|
72
|
+
readonly session: S;
|
|
73
|
+
} | {
|
|
74
|
+
readonly kind: 'unauthenticated';
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Options for {@link runColdBoot}.
|
|
78
|
+
*/
|
|
79
|
+
export interface RunColdBootOptions<S> {
|
|
80
|
+
/** Ordered steps; evaluated front to back, first session wins. */
|
|
81
|
+
readonly steps: ReadonlyArray<ColdBootStep<S>>;
|
|
82
|
+
/**
|
|
83
|
+
* Optional observer invoked whenever a step's `enabled` or `run` throws.
|
|
84
|
+
* Receives the offending step `id` and the thrown value. Must not throw;
|
|
85
|
+
* the runner does not guard against an observer that itself throws.
|
|
86
|
+
*/
|
|
87
|
+
readonly onStepError?: (id: string, error: unknown) => void;
|
|
88
|
+
/**
|
|
89
|
+
* Optional HARD overall deadline (ms) for the entire ordered step loop —
|
|
90
|
+
* defense-in-depth so a single non-settling step can NEVER hang the whole
|
|
91
|
+
* cold boot forever.
|
|
92
|
+
*
|
|
93
|
+
* Each step's `run()` is raced against the SHARED remaining time. If a step
|
|
94
|
+
* fails to settle before the deadline, the runner abandons the await for that
|
|
95
|
+
* step (reporting it via `onStepDeadline`) and CONTINUES to the next step,
|
|
96
|
+
* each now racing against an already-expired deadline. This is deliberate:
|
|
97
|
+
* the runner keeps iterating so the TERMINAL step (e.g. `sessionColdBoot`'s
|
|
98
|
+
* `bootstrap-hop`, whose `run()` performs its navigation side effect
|
|
99
|
+
* synchronously before its first `await`) still gets to fire. A step that
|
|
100
|
+
* has nothing to contribute after the deadline simply doesn't settle and is
|
|
101
|
+
* skipped in turn.
|
|
102
|
+
*
|
|
103
|
+
* Per-step timeouts inside `run()` remain the first line of defense and
|
|
104
|
+
* should keep every step well under this budget on a healthy load; this only
|
|
105
|
+
* trips when one of them regresses (a step hanging past its own timeout).
|
|
106
|
+
* When omitted there is no overall deadline.
|
|
107
|
+
*/
|
|
108
|
+
readonly overallDeadlineMs?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Optional observer invoked once per step that was abandoned because the
|
|
111
|
+
* overall deadline expired before it settled. Receives the step `id`. Must
|
|
112
|
+
* not throw.
|
|
113
|
+
*/
|
|
114
|
+
readonly onStepDeadline?: (id: string) => void;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Run the ordered cold-boot steps and resolve to the first recovered session,
|
|
118
|
+
* or `unauthenticated` if none recovers one.
|
|
119
|
+
*
|
|
120
|
+
* Semantics:
|
|
121
|
+
* 1. Iterate `steps` in order.
|
|
122
|
+
* 2. If a step has an `enabled` predicate, call it inside try/catch:
|
|
123
|
+
* - throw → report via `onStepError(id, err)` → treat as disabled → continue.
|
|
124
|
+
* - returns false → continue (skip, `run` not called).
|
|
125
|
+
* 3. Otherwise await `step.run()` inside try/catch:
|
|
126
|
+
* - throw → report via `onStepError(id, err)` → continue.
|
|
127
|
+
* - `{ kind: 'session' }` → return `{ kind: 'session', via: step.id, session }`.
|
|
128
|
+
* - `{ kind: 'skip' }` → continue.
|
|
129
|
+
* 4. After the loop with no winner → `{ kind: 'unauthenticated' }`.
|
|
130
|
+
*/
|
|
131
|
+
export declare function runColdBoot<S>(options: RunColdBootOptions<S>): Promise<ColdBootOutcome<S>>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PublicApplication } from '../mixins/OxyServices.connectedApps';
|
|
2
|
+
export interface CommonsApprovalValidationInput {
|
|
3
|
+
application: PublicApplication | null;
|
|
4
|
+
status: string;
|
|
5
|
+
expiresAt: number | string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Returns a user-facing blocking reason when an approval payload must not be
|
|
9
|
+
* shown as actionable, or `null` when the request is still pending and valid.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCommonsApprovalBlockingReason(info: CommonsApprovalValidationInput): string | null;
|
|
12
|
+
/** Normalize API `expiresAt` (number or ISO string) to epoch ms. */
|
|
13
|
+
export declare function parseCommonsApprovalExpiresAt(expiresAt: CommonsApprovalValidationInput['expiresAt']): number | null;
|