@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,418 @@
|
|
|
1
|
+
import { type DeviceDirectory, type DeviceSessionState } from '@oxy.so/contracts';
|
|
2
|
+
import { type DeviceContext } from './deviceDirectory';
|
|
3
|
+
import type { MinimalSocket, SocketIOFactory } from './socketLoader';
|
|
4
|
+
export interface TokenTransport {
|
|
5
|
+
/** Ensure this app holds a per-domain access token for state.activeAccountId (mint via the persisted refresh family / shared keychain). Best-effort. */
|
|
6
|
+
ensureActiveToken(state: DeviceSessionState): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Where an applied device state came from, so consumers can decide how
|
|
10
|
+
* AUTHORITATIVE a zero-account ("signed out") verdict is:
|
|
11
|
+
* - `request` — the response to a direct REST call this client made
|
|
12
|
+
* (`bootstrap` / `switch` / `signOut` / `add`). A stable, server-authoritative
|
|
13
|
+
* verdict: an empty state here reflects a real sign-out or revocation, so the
|
|
14
|
+
* durable device credential MAY be erased.
|
|
15
|
+
* - `push` — an out-of-band Socket.IO `session_state` broadcast. Potentially
|
|
16
|
+
* transient (a reconnect race / another device's mutation), so an empty state
|
|
17
|
+
* here must NOT erase THIS origin's durable device credential — only clear the
|
|
18
|
+
* local UI session. A dead credential re-mints to `no_active_session` and
|
|
19
|
+
* resolves signed-out cleanly on the next boot; a wrongly-erased one cannot be
|
|
20
|
+
* recovered without a fresh sign-in.
|
|
21
|
+
*/
|
|
22
|
+
export type SessionStateOrigin = 'request' | 'push';
|
|
23
|
+
export interface DeviceCredential {
|
|
24
|
+
deviceId: string;
|
|
25
|
+
deviceSecret: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SessionClientHost {
|
|
28
|
+
makeRequest<T>(method: 'GET' | 'POST', url: string, data?: unknown, options?: {
|
|
29
|
+
cache?: boolean;
|
|
30
|
+
}): Promise<T>;
|
|
31
|
+
getBaseURL(): string;
|
|
32
|
+
getAccessToken(): string | null;
|
|
33
|
+
/** Zero-cookie device credential for socket handshake when no bearer is planted yet. */
|
|
34
|
+
getDeviceCredential(): DeviceCredential | null;
|
|
35
|
+
onTokensChanged(listener: (token: string | null) => void): () => void;
|
|
36
|
+
setTokens(accessToken: string): void;
|
|
37
|
+
getCurrentAccountId(): string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface SessionClientOptions {
|
|
40
|
+
transport?: TokenTransport;
|
|
41
|
+
/**
|
|
42
|
+
* Invoked when an APPLIED state has zero accounts — i.e. a device
|
|
43
|
+
* signout-all removed the last account from this device set. Providers use
|
|
44
|
+
* this to clear local session state and, for a `request`-origin verdict, the
|
|
45
|
+
* persisted {@link AuthStateStore} so a reload does not try to restore a
|
|
46
|
+
* session that no longer exists on the device.
|
|
47
|
+
*
|
|
48
|
+
* The {@link SessionStateOrigin} is passed so the consumer can gate the
|
|
49
|
+
* DESTRUCTIVE credential wipe: a `push`-origin empty state (a socket broadcast,
|
|
50
|
+
* possibly a transient reconnect artifact) must NOT erase the durable device
|
|
51
|
+
* credential — only a `request`-origin verdict (a direct REST sign-out /
|
|
52
|
+
* revocation) is authoritative enough for that.
|
|
53
|
+
*
|
|
54
|
+
* Only fires when a state is actually applied (revision advanced), never on
|
|
55
|
+
* a stale/rejected push. Exceptions thrown by the callback are isolated.
|
|
56
|
+
*/
|
|
57
|
+
onUnauthenticated?: (origin: SessionStateOrigin) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Statically-injected `socket.io-client` factory (its `io` export).
|
|
60
|
+
* `@oxy.so/services` lists `socket.io-client` as a real dependency and
|
|
61
|
+
* passes `io` in directly, so realtime session sync never
|
|
62
|
+
* depends on a runtime dynamic `import('socket.io-client')` of a bare
|
|
63
|
+
* specifier — which is bundler-fragile in Metro/Expo-web and Vite when
|
|
64
|
+
* `@oxy.so/core` is consumed as its published dist (the import resolves to
|
|
65
|
+
* nothing → `connectSocket` warns and falls back to REST-only). When this is
|
|
66
|
+
* provided, `connectSocket` uses it and never touches the lazy loader; when
|
|
67
|
+
* absent it falls back to `getSocketIO()`.
|
|
68
|
+
*/
|
|
69
|
+
socketFactory?: SocketIOFactory;
|
|
70
|
+
/**
|
|
71
|
+
* The PINNED account id for an IDENTITY-BOUND client (the identity vault),
|
|
72
|
+
* or `null` for every ordinary account-mode client. Read as a function because
|
|
73
|
+
* the pin is resolved asynchronously at boot and can move when the identity
|
|
74
|
+
* session is re-established.
|
|
75
|
+
*
|
|
76
|
+
* While pinned this client tracks device state TRUTHFULLY — other apps'
|
|
77
|
+
* accounts and the device's real `activeAccountId` stay visible in `getState()`
|
|
78
|
+
* — but it NEVER re-binds its bearer to that active account: no `activeToken`
|
|
79
|
+
* is planted for a non-pinned account (from a sync response or a pushed
|
|
80
|
+
* `session_state`), the `TokenTransport` (whose entire job is converging on
|
|
81
|
+
* `activeAccountId`) is bypassed, and a push that switches the device does not
|
|
82
|
+
* trigger a token re-fetch. The pinned token's lifecycle belongs solely to the
|
|
83
|
+
* cold boot / re-mint lane, which mints it with an explicit `accountId`.
|
|
84
|
+
*/
|
|
85
|
+
getPinnedAccountId?: () => string | null;
|
|
86
|
+
}
|
|
87
|
+
type StateListener = (state: DeviceSessionState | null) => void;
|
|
88
|
+
type DirectoryListener = (directory: DeviceDirectory | null) => void;
|
|
89
|
+
export declare class SessionClient {
|
|
90
|
+
protected readonly host: SessionClientHost;
|
|
91
|
+
protected readonly options: SessionClientOptions;
|
|
92
|
+
private state;
|
|
93
|
+
/**
|
|
94
|
+
* The device DIRECTORY (ADR 0002) — principals, the contexts each may act as,
|
|
95
|
+
* and which context is active. Held BESIDE `state` rather than replacing it:
|
|
96
|
+
* `state` is the flat compatibility projection every app renders until Phase 7
|
|
97
|
+
* moves it, and the two describe the same device at the same `revision`.
|
|
98
|
+
*
|
|
99
|
+
* `null` until something asks for it. A client that never calls
|
|
100
|
+
* {@link refreshDirectory} has no consumer for a directory and never pays for
|
|
101
|
+
* the round trip — which is also what keeps the whole account lane's request
|
|
102
|
+
* count unchanged.
|
|
103
|
+
*/
|
|
104
|
+
private directory;
|
|
105
|
+
private readonly listeners;
|
|
106
|
+
private readonly directoryListeners;
|
|
107
|
+
protected socket: MinimalSocket | null;
|
|
108
|
+
private tokenUnsub;
|
|
109
|
+
private started;
|
|
110
|
+
/** Same-origin cross-tab state-propagation channel; null on platforms without BroadcastChannel. */
|
|
111
|
+
private channel;
|
|
112
|
+
/** App-facing subscriptions to named server-pushed socket events. */
|
|
113
|
+
private readonly serverEvents;
|
|
114
|
+
/** Event names already bound on the CURRENT socket instance. */
|
|
115
|
+
private readonly boundServerEvents;
|
|
116
|
+
constructor(host: SessionClientHost, options?: SessionClientOptions);
|
|
117
|
+
getState(): DeviceSessionState | null;
|
|
118
|
+
/**
|
|
119
|
+
* The device directory, or `null` when this client has never read one.
|
|
120
|
+
* Populated by {@link refreshDirectory} / {@link activateContext} and kept
|
|
121
|
+
* fresh from there on.
|
|
122
|
+
*/
|
|
123
|
+
getDirectory(): DeviceDirectory | null;
|
|
124
|
+
/**
|
|
125
|
+
* The active `principal acting as account` pair, with the actor and the
|
|
126
|
+
* subject kept apart. `null` when no directory has been read, or when the
|
|
127
|
+
* device genuinely has no active context.
|
|
128
|
+
*
|
|
129
|
+
* This is the answer `getState()` cannot give: `activeAccountId` names the
|
|
130
|
+
* subject and says nothing about whose authentication is behind it.
|
|
131
|
+
*/
|
|
132
|
+
getActiveContext(): DeviceContext | null;
|
|
133
|
+
/**
|
|
134
|
+
* The account this client's bearer is pinned to, or `null` when it follows the
|
|
135
|
+
* device's active account (the default). Resolvers are expected to be a plain
|
|
136
|
+
* synchronous read of already-resolved state (see
|
|
137
|
+
* {@link SessionClientOptions.getPinnedAccountId}).
|
|
138
|
+
*/
|
|
139
|
+
private pinnedAccountId;
|
|
140
|
+
subscribe(listener: StateListener): () => void;
|
|
141
|
+
/**
|
|
142
|
+
* Subscribe to the directory half. Fires from the SAME {@link notify} as
|
|
143
|
+
* {@link subscribe}, so the flat state and the directory are never published
|
|
144
|
+
* at two different points of the ordering sequence — a directory subscriber
|
|
145
|
+
* and a state subscriber woken by one transition always see the same device
|
|
146
|
+
* revision under the same bearer.
|
|
147
|
+
*/
|
|
148
|
+
subscribeDirectory(listener: DirectoryListener): () => void;
|
|
149
|
+
/**
|
|
150
|
+
* Subscribe to a named server-pushed Socket.IO event (e.g. `civic:attested`).
|
|
151
|
+
* Listeners survive reconnects and socket re-creation; the returned function
|
|
152
|
+
* unsubscribes. Payloads are delivered as-is — callers validate shape.
|
|
153
|
+
*/
|
|
154
|
+
onServerEvent(event: string, listener: (payload: unknown) => void): () => void;
|
|
155
|
+
private bindServerEvent;
|
|
156
|
+
protected notify(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Validate + last-writer-wins by revision. Returns true if applied.
|
|
159
|
+
*
|
|
160
|
+
* `activeToken` (sync path only) is the server-issued access token for
|
|
161
|
+
* `raw.activeAccountId`. When present and the state is applied, it is planted
|
|
162
|
+
* BEFORE any subscriber is notified so the bearer already belongs to the new
|
|
163
|
+
* active account — the local switch/bootstrap path then needs no redundant
|
|
164
|
+
* device-secret mint. Push-origin applies carry no token and rely on the
|
|
165
|
+
* mint-before-notify gate below.
|
|
166
|
+
*
|
|
167
|
+
* ORDERING INVARIANT: a subscriber must NEVER observe a newly-active account
|
|
168
|
+
* while the planted bearer still identifies the PREVIOUS one — otherwise a
|
|
169
|
+
* `useCurrentUser`-style refetch fires under the wrong account's token (the
|
|
170
|
+
* account-switch 404 race). So when a transport is available and the planted
|
|
171
|
+
* bearer does not already belong to `next.activeAccountId`, minting is awaited
|
|
172
|
+
* BEFORE `notify()`. This covers EVERY notify source (a switch push, a
|
|
173
|
+
* cross-device push, a cold mint), not just the initial "no bearer yet" case.
|
|
174
|
+
*/
|
|
175
|
+
protected applyState(raw: unknown, origin?: SessionStateOrigin, activeToken?: string): boolean;
|
|
176
|
+
/**
|
|
177
|
+
* Validate `{ state, activeToken }`, apply the state, and plant the active token host-side.
|
|
178
|
+
* Token-planting is decoupled from whether `applyState` advanced the revision: a socket push
|
|
179
|
+
* followed by this same `GET /state` fetch returns the SAME revision (applyState no-ops), but
|
|
180
|
+
* the token still needs to be planted. The account-match guard rejects a stale response for an
|
|
181
|
+
* account that is no longer active.
|
|
182
|
+
*/
|
|
183
|
+
private applySync;
|
|
184
|
+
/**
|
|
185
|
+
* The apply + token-plant half of {@link applySync}, on an ALREADY-VALIDATED
|
|
186
|
+
* sync. Split out so the context-aware removal lane — whose response is a
|
|
187
|
+
* different wire shape and therefore a different parse — reuses this ordering
|
|
188
|
+
* verbatim instead of re-deriving it. Two implementations of
|
|
189
|
+
* "plant before notify" is two chances to get it wrong once.
|
|
190
|
+
*
|
|
191
|
+
* Returns whether `applyState` applied, so a caller holding a second half
|
|
192
|
+
* (the directory) can decide whether anything still needs publishing.
|
|
193
|
+
*/
|
|
194
|
+
private commitSync;
|
|
195
|
+
/**
|
|
196
|
+
* Validate + last-writer-wins, `deviceId`-SCOPED exactly as {@link applyState}
|
|
197
|
+
* is for the flat half: a directory belonging to a DIFFERENT device resets the
|
|
198
|
+
* baseline and is accepted at any revision, so a freshly-converged device
|
|
199
|
+
* cannot lose to a retired device's higher number.
|
|
200
|
+
*
|
|
201
|
+
* The comparison itself is deliberately WEAKER than the flat state's. There it
|
|
202
|
+
* is `revision <= current` — correct, because a `DeviceSessionState` arrives
|
|
203
|
+
* out of band over a socket, so a straggler can genuinely land after a newer
|
|
204
|
+
* one. A directory only ever arrives as the response to a request THIS client
|
|
205
|
+
* just made, so the newest response is the freshest answer and only a strictly
|
|
206
|
+
* LOWER revision can be a straggler (two GETs racing).
|
|
207
|
+
*
|
|
208
|
+
* Equal-revision reads are not redundant, and rejecting them was a bug: the
|
|
209
|
+
* directory includes rows projected from the account GRAPH, and the server
|
|
210
|
+
* materializes a context for every account a principal may act as WITHOUT
|
|
211
|
+
* bumping `revision` — deliberately, since `revision` tracks what the device
|
|
212
|
+
* holds and must never advance on a read. So a newly-granted `account:act_as`,
|
|
213
|
+
* and a removed-then-rematerialized context under its NEW id, both appear at
|
|
214
|
+
* an unchanged revision. Under `<=` neither would ever be seen until some
|
|
215
|
+
* unrelated device mutation happened to move the number.
|
|
216
|
+
*
|
|
217
|
+
* Notifies nothing. Every caller decides where in its own ordering sequence
|
|
218
|
+
* the publish belongs.
|
|
219
|
+
*/
|
|
220
|
+
private applyDirectory;
|
|
221
|
+
/** `GET /session/device/directory` → {@link applyDirectory}. No notify. */
|
|
222
|
+
private fetchDirectory;
|
|
223
|
+
/**
|
|
224
|
+
* Re-read the directory when the flat state has moved past it, returning the
|
|
225
|
+
* in-flight work so the caller can hold its notify until both halves describe
|
|
226
|
+
* the same revision.
|
|
227
|
+
*
|
|
228
|
+
* `null` — meaning "nothing to settle, stay synchronous" — when this client
|
|
229
|
+
* holds no directory (nobody reads one), when the directory is already at or
|
|
230
|
+
* ahead of the state, or when there is no bearer to make the call with.
|
|
231
|
+
* Never rejects: a failed refresh leaves the previous directory in place and
|
|
232
|
+
* the next transition tries again; it must not swallow the flat state's
|
|
233
|
+
* notify.
|
|
234
|
+
*/
|
|
235
|
+
private settleDirectory;
|
|
236
|
+
/**
|
|
237
|
+
* The highest device revision this client currently knows for `deviceId`,
|
|
238
|
+
* across BOTH halves, or `null` when it knows nothing about that device.
|
|
239
|
+
*
|
|
240
|
+
* Used to read the server's `changed` flag, which
|
|
241
|
+
* `POST /session/device/activate` deliberately does not carry: the revision
|
|
242
|
+
* already says whether the device moved, and a second field saying the same
|
|
243
|
+
* thing is a second field that can disagree with the first.
|
|
244
|
+
*/
|
|
245
|
+
private knownRevisionFor;
|
|
246
|
+
/**
|
|
247
|
+
* Plant the bearer `POST /session/device/activate` returned for the newly
|
|
248
|
+
* active context, under the same guards {@link applyState} applies to a
|
|
249
|
+
* sync-supplied `activeToken`: never for a null active context, never a
|
|
250
|
+
* foreign account's token while pinned, and never a redundant re-plant of the
|
|
251
|
+
* token already held.
|
|
252
|
+
*
|
|
253
|
+
* `activeToken: null` is not an error — it is an identity-pinned client, or a
|
|
254
|
+
* caller whose application is not entitled to a bearer for the new context.
|
|
255
|
+
*/
|
|
256
|
+
private plantActiveContextToken;
|
|
257
|
+
/**
|
|
258
|
+
* Bring the FLAT projection back in step after a context activation.
|
|
259
|
+
*
|
|
260
|
+
* The activation response answers with the directory and a bearer and
|
|
261
|
+
* deliberately not with `DeviceSessionState` (ADR 0002) — but every app that
|
|
262
|
+
* has not moved to the directory still renders from `getState()`, and leaving
|
|
263
|
+
* it a revision behind would show the PREVIOUS subject under the new
|
|
264
|
+
* subject's bearer. So it is settled BEFORE the notify, not after.
|
|
265
|
+
*
|
|
266
|
+
* This is also what converges the bearer when the activation returned no
|
|
267
|
+
* token: `GET /session/device/state` mints one for the active account, and
|
|
268
|
+
* `applyState`'s own mint-before-notify gate holds its notify until it lands.
|
|
269
|
+
*
|
|
270
|
+
* Non-fatal on failure — the directory is applied and (usually) the bearer is
|
|
271
|
+
* planted; the socket push or the next bootstrap catches the flat half up. A
|
|
272
|
+
* network blip must not turn a completed activation into a thrown error.
|
|
273
|
+
*/
|
|
274
|
+
private reconcileFlatState;
|
|
275
|
+
bootstrap(): Promise<void>;
|
|
276
|
+
/**
|
|
277
|
+
* Adopt server-authoritative state already returned by another session
|
|
278
|
+
* endpoint. This avoids immediately re-reading `/session/device/state` after
|
|
279
|
+
* a successful device-token mint while preserving the same validation,
|
|
280
|
+
* revision ordering and notification path as `bootstrap()`.
|
|
281
|
+
*/
|
|
282
|
+
adoptState(state: DeviceSessionState): boolean;
|
|
283
|
+
/**
|
|
284
|
+
* Read `GET /session/device/directory` and publish it.
|
|
285
|
+
*
|
|
286
|
+
* Calling this is what opts a client into the directory: from here on every
|
|
287
|
+
* applied device state re-reads it (see {@link settleDirectory}), so the two
|
|
288
|
+
* halves stay at one revision without the caller polling.
|
|
289
|
+
*/
|
|
290
|
+
refreshDirectory(): Promise<void>;
|
|
291
|
+
/**
|
|
292
|
+
* `POST /session/device/activate` — make one `principal acting as account`
|
|
293
|
+
* context active (ADR 0002).
|
|
294
|
+
*
|
|
295
|
+
* The body is `{ contextId }` and nothing else: an `accountId` cannot name
|
|
296
|
+
* what to activate on a device where two people can both reach the same
|
|
297
|
+
* organization, and the server refuses a body carrying one rather than
|
|
298
|
+
* guessing inside an authorization path.
|
|
299
|
+
*
|
|
300
|
+
* The sequence is the ADR's ordering invariant, in order — commit the bearer
|
|
301
|
+
* for the new context, publish the new snapshot, notify — with the flat
|
|
302
|
+
* projection reconciled in the middle so no consumer can observe the two
|
|
303
|
+
* halves disagreeing.
|
|
304
|
+
*
|
|
305
|
+
* An IDEMPOTENT activation (the target was already active) moves no revision,
|
|
306
|
+
* so it reconciles nothing and wakes no sibling tab, mirroring the server's
|
|
307
|
+
* "bumps nothing and broadcasts nothing". `switchAccount` remains the
|
|
308
|
+
* compatibility path for callers still keyed on account ids.
|
|
309
|
+
*/
|
|
310
|
+
activateContext(contextId: string): Promise<void>;
|
|
311
|
+
switchAccount(accountId: string): Promise<void>;
|
|
312
|
+
/**
|
|
313
|
+
* The FLAT removal meanings, unchanged: `{ accountId }` removes that account
|
|
314
|
+
* however it is reached — plus the operator cascade — and `{ all: true }`
|
|
315
|
+
* removes the whole device including its credentials.
|
|
316
|
+
*
|
|
317
|
+
* `{ accountId }` is deliberately still account-grained. On a device holding
|
|
318
|
+
* two people it removes BOTH of their routes to that account, which is the
|
|
319
|
+
* right meaning for "sign this account out of this device" and the wrong one
|
|
320
|
+
* for "this person is done here" — see {@link signOutContext} and
|
|
321
|
+
* {@link signOutPrincipal} for the two that can tell those apart.
|
|
322
|
+
*/
|
|
323
|
+
signOut(target: {
|
|
324
|
+
accountId: string;
|
|
325
|
+
} | {
|
|
326
|
+
all: true;
|
|
327
|
+
}): Promise<void>;
|
|
328
|
+
/**
|
|
329
|
+
* Remove ONE `principal → account` pair, and only that pair.
|
|
330
|
+
*
|
|
331
|
+
* Never the account across the device: the same organization reached through
|
|
332
|
+
* a second person is a different session, a different audit actor and a
|
|
333
|
+
* different revocation path, and it stays. That distinction is unreachable
|
|
334
|
+
* through {@link signOut}, whose `accountId` cannot name which route to drop.
|
|
335
|
+
*
|
|
336
|
+
* Removal is not permanent while the membership lives — the server offers the
|
|
337
|
+
* pair again on the next directory read, as `onDevice: false` under a NEW id.
|
|
338
|
+
*/
|
|
339
|
+
signOutContext(contextId: string): Promise<void>;
|
|
340
|
+
/**
|
|
341
|
+
* Remove ONE PERSON and every context they reach — and nobody else's,
|
|
342
|
+
* including when another principal independently operates the same account.
|
|
343
|
+
*/
|
|
344
|
+
signOutPrincipal(principalId: string): Promise<void>;
|
|
345
|
+
/**
|
|
346
|
+
* The shared apply path for both context-aware removals.
|
|
347
|
+
*
|
|
348
|
+
* The response is `{directory, state, activeToken}` — its own contract, never
|
|
349
|
+
* `deviceSessionSyncSchema`, which would strip the directory silently. Both
|
|
350
|
+
* halves move in one server transition (a removal elects a replacement active
|
|
351
|
+
* context), so both are applied before anything is published: the directory
|
|
352
|
+
* first, so the flat apply's own `settleDirectory` sees a current directory
|
|
353
|
+
* and does not issue a redundant `GET /session/device/directory` for the
|
|
354
|
+
* revision already in hand.
|
|
355
|
+
*
|
|
356
|
+
* Token-before-notify is `commitSync`'s, reused verbatim rather than
|
|
357
|
+
* re-derived — including the equal-revision plant when a socket push already
|
|
358
|
+
* applied this revision.
|
|
359
|
+
*/
|
|
360
|
+
private removeFromDevice;
|
|
361
|
+
addCurrentAccount(): Promise<void>;
|
|
362
|
+
/**
|
|
363
|
+
* Register the just-signed-in account into the device set AND make it the
|
|
364
|
+
* ACTIVE account — the explicit user-intent activation a sign-in UI performs.
|
|
365
|
+
*
|
|
366
|
+
* `addCurrentAccount` alone honors the server's `activate:'if-empty'` policy
|
|
367
|
+
* (a new account does NOT steal focus from an already-active one), which is
|
|
368
|
+
* correct for a background/silent add but wrong right after a deliberate
|
|
369
|
+
* sign-in. This adds, then switches to the target so the UI lands on the
|
|
370
|
+
* account the user just authenticated.
|
|
371
|
+
*
|
|
372
|
+
* An identity-bound (pinned) client only ADDS: its own session is minted for
|
|
373
|
+
* the pinned account explicitly, so switching the device would gratuitously
|
|
374
|
+
* re-elect the active account under every OTHER app on this device — a
|
|
375
|
+
* mutation a pinned client must never make.
|
|
376
|
+
*
|
|
377
|
+
* @param accountId - The signed-in account id (e.g. `session.user.id`). When
|
|
378
|
+
* omitted, falls back to the host's current-account ref. If neither
|
|
379
|
+
* resolves, the add still applies and no switch is performed.
|
|
380
|
+
*/
|
|
381
|
+
registerAndActivate(accountId?: string): Promise<void>;
|
|
382
|
+
start(): Promise<void>;
|
|
383
|
+
stop(): void;
|
|
384
|
+
private connectSocket;
|
|
385
|
+
/**
|
|
386
|
+
* Handle the token-free `session_accounts_changed` signal (room `user:<userId>`).
|
|
387
|
+
*
|
|
388
|
+
* Unlike `session_state` (device-scoped, carries the new state to APPLY), this
|
|
389
|
+
* reaches ALL of a user's connected sockets across their devices/origins and is
|
|
390
|
+
* a pure SIGNAL: it carries no token, no secret, and no account bodies. The only
|
|
391
|
+
* trustworthy bit is "something changed for this user", so — matching the
|
|
392
|
+
* `session_state` contract's guidance — we re-fetch our OWN authoritative device
|
|
393
|
+
* state (`bootstrap` → `GET /session/device/state`) and let the existing
|
|
394
|
+
* `applyState` revision guard reconcile it. We never trust any field on the event
|
|
395
|
+
* beyond routing it to the current user.
|
|
396
|
+
*
|
|
397
|
+
* The refetch is a private (bearer) call: the socket only joins `user:<userId>`
|
|
398
|
+
* when authenticated, so a signed-out client never receives this — but we guard
|
|
399
|
+
* the bearer anyway so a race at sign-out can't 401.
|
|
400
|
+
*/
|
|
401
|
+
private onSessionAccountsChanged;
|
|
402
|
+
/**
|
|
403
|
+
* Open the same-origin `BroadcastChannel` (web only). A sibling tab that
|
|
404
|
+
* commits an account switch / sign-out posts a wake ping; on receipt an
|
|
405
|
+
* authenticated tab re-syncs its device state — instant + network-free for the
|
|
406
|
+
* common "two tabs of the same origin" case, with no state (and no tokens)
|
|
407
|
+
* ever crossing the channel. No-op on native (no BroadcastChannel).
|
|
408
|
+
*/
|
|
409
|
+
private openBroadcastChannel;
|
|
410
|
+
/**
|
|
411
|
+
* Wake same-origin sibling tabs after a locally-initiated session mutation.
|
|
412
|
+
* Opens the channel lazily: a sign-in registers the account (`addCurrentAccount`
|
|
413
|
+
* / `switchAccount`) BEFORE `start()` runs, so the ping must not depend on
|
|
414
|
+
* `start()` having opened the channel first.
|
|
415
|
+
*/
|
|
416
|
+
private postCommitPing;
|
|
417
|
+
}
|
|
418
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two authorization facts a service needs before it acts as a managed
|
|
3
|
+
* account: whether the caller has standing in the account, and whether that
|
|
4
|
+
* standing includes `account:act_as` for a delegation-eligible subject.
|
|
5
|
+
*
|
|
6
|
+
* This is deliberately separate from `accountSwitchTargets.ts`. A human account
|
|
7
|
+
* switcher and a backend delegation ask different questions: `bot` is a valid
|
|
8
|
+
* delegation subject, but it is never a seat a person may switch into. Sharing
|
|
9
|
+
* one predicate between those paths is what previously put bot sessions on
|
|
10
|
+
* human devices.
|
|
11
|
+
*
|
|
12
|
+
* Pure and I/O-free. Consumers pass the `AccountNode` returned by `getAccount`
|
|
13
|
+
* (or the structural subset below), so the SDK and every agent runtime read the
|
|
14
|
+
* API's already-resolved relationship and effective permissions identically.
|
|
15
|
+
*/
|
|
16
|
+
import type { AccountKind, AccountMember, AccountRelationship } from "../mixins/OxyServices.accounts";
|
|
17
|
+
export interface AccountDelegationAccess {
|
|
18
|
+
/** The caller owns the account or has a live membership in it. */
|
|
19
|
+
readonly hasStanding: boolean;
|
|
20
|
+
/** The account may be delegated and the caller holds effective `account:act_as`. */
|
|
21
|
+
readonly canActAs: boolean;
|
|
22
|
+
}
|
|
23
|
+
export type AccountDelegationNode = {
|
|
24
|
+
kind?: AccountKind | null;
|
|
25
|
+
relationship?: AccountRelationship;
|
|
26
|
+
callerMembership?: AccountMember | null;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolve standing and delegated act-as authority from one account-graph node.
|
|
30
|
+
*
|
|
31
|
+
* `hasStanding` is intentionally weaker than `canActAs`: an active viewer may
|
|
32
|
+
* use a private agent shared through its bot account without gaining permission
|
|
33
|
+
* to edit the agent or mint a session as it. A non-active membership grants
|
|
34
|
+
* neither fact even if a stale projection still carries permissions.
|
|
35
|
+
*
|
|
36
|
+
* Owners normally have no membership blob because ownership is implicit. When
|
|
37
|
+
* the API does return effective permissions for an owner, those permissions are
|
|
38
|
+
* authoritative: an explicit `account:act_as` revoke must remain a revoke.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveAccountDelegationAccess(node: AccountDelegationNode): AccountDelegationAccess;
|