@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.
Files changed (673) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +16 -0
  3. package/README.md +221 -0
  4. package/dist/cjs/.tsbuildinfo +1 -0
  5. package/dist/cjs/HttpService.js +1270 -0
  6. package/dist/cjs/OxyServices.base.js +390 -0
  7. package/dist/cjs/OxyServices.errors.js +95 -0
  8. package/dist/cjs/OxyServices.js +72 -0
  9. package/dist/cjs/boot/sessionColdBoot.js +395 -0
  10. package/dist/cjs/constants/version.js +16 -0
  11. package/dist/cjs/crypto/aead.js +79 -0
  12. package/dist/cjs/crypto/ecdh.js +35 -0
  13. package/dist/cjs/crypto/identityMarker.js +255 -0
  14. package/dist/cjs/crypto/kdf.js +39 -0
  15. package/dist/cjs/crypto/keyManager.js +2234 -0
  16. package/dist/cjs/crypto/polyfill.js +131 -0
  17. package/dist/cjs/crypto/recoveryPhrase.js +242 -0
  18. package/dist/cjs/crypto/signatureService.js +273 -0
  19. package/dist/cjs/i18n/accountCategoryLabels.js +44 -0
  20. package/dist/cjs/i18n/accountRoleLabels.js +27 -0
  21. package/dist/cjs/i18n/index.js +90 -0
  22. package/dist/cjs/i18n/locales/ar-SA.json +282 -0
  23. package/dist/cjs/i18n/locales/ca-ES.json +282 -0
  24. package/dist/cjs/i18n/locales/de-DE.json +282 -0
  25. package/dist/cjs/i18n/locales/en-US.json +2161 -0
  26. package/dist/cjs/i18n/locales/es-ES.json +2161 -0
  27. package/dist/cjs/i18n/locales/fr-FR.json +282 -0
  28. package/dist/cjs/i18n/locales/it-IT.json +282 -0
  29. package/dist/cjs/i18n/locales/ja-JP.json +282 -0
  30. package/dist/cjs/i18n/locales/ko-KR.json +282 -0
  31. package/dist/cjs/i18n/locales/locales/ar-SA.json +282 -0
  32. package/dist/cjs/i18n/locales/locales/ca-ES.json +282 -0
  33. package/dist/cjs/i18n/locales/locales/de-DE.json +282 -0
  34. package/dist/cjs/i18n/locales/locales/en-US.json +2161 -0
  35. package/dist/cjs/i18n/locales/locales/es-ES.json +2161 -0
  36. package/dist/cjs/i18n/locales/locales/fr-FR.json +282 -0
  37. package/dist/cjs/i18n/locales/locales/it-IT.json +282 -0
  38. package/dist/cjs/i18n/locales/locales/ja-JP.json +282 -0
  39. package/dist/cjs/i18n/locales/locales/ko-KR.json +282 -0
  40. package/dist/cjs/i18n/locales/locales/pt-PT.json +282 -0
  41. package/dist/cjs/i18n/locales/locales/zh-CN.json +282 -0
  42. package/dist/cjs/i18n/locales/pt-PT.json +282 -0
  43. package/dist/cjs/i18n/locales/zh-CN.json +282 -0
  44. package/dist/cjs/i18n/reputationCategoryLabels.js +20 -0
  45. package/dist/cjs/i18n/trustTierLabels.js +19 -0
  46. package/dist/cjs/index.js +498 -0
  47. package/dist/cjs/inference/OxyInferenceClient.js +544 -0
  48. package/dist/cjs/logger/index.js +149 -0
  49. package/dist/cjs/mixins/OxyServices.accounts.js +555 -0
  50. package/dist/cjs/mixins/OxyServices.analytics.js +49 -0
  51. package/dist/cjs/mixins/OxyServices.appData.js +108 -0
  52. package/dist/cjs/mixins/OxyServices.assets.js +764 -0
  53. package/dist/cjs/mixins/OxyServices.auth.js +1254 -0
  54. package/dist/cjs/mixins/OxyServices.chains.js +73 -0
  55. package/dist/cjs/mixins/OxyServices.civic.js +611 -0
  56. package/dist/cjs/mixins/OxyServices.connectedApps.js +78 -0
  57. package/dist/cjs/mixins/OxyServices.contacts.js +50 -0
  58. package/dist/cjs/mixins/OxyServices.deviceBoot.js +191 -0
  59. package/dist/cjs/mixins/OxyServices.deviceTransfer.js +314 -0
  60. package/dist/cjs/mixins/OxyServices.devices.js +116 -0
  61. package/dist/cjs/mixins/OxyServices.features.js +335 -0
  62. package/dist/cjs/mixins/OxyServices.followGraph.js +221 -0
  63. package/dist/cjs/mixins/OxyServices.identity.js +461 -0
  64. package/dist/cjs/mixins/OxyServices.identityBackup.js +172 -0
  65. package/dist/cjs/mixins/OxyServices.inference.js +59 -0
  66. package/dist/cjs/mixins/OxyServices.language.js +125 -0
  67. package/dist/cjs/mixins/OxyServices.links.js +72 -0
  68. package/dist/cjs/mixins/OxyServices.location.js +43 -0
  69. package/dist/cjs/mixins/OxyServices.nodes.js +175 -0
  70. package/dist/cjs/mixins/OxyServices.notifications.js +63 -0
  71. package/dist/cjs/mixins/OxyServices.payment.js +158 -0
  72. package/dist/cjs/mixins/OxyServices.privacy.js +199 -0
  73. package/dist/cjs/mixins/OxyServices.reputation.js +289 -0
  74. package/dist/cjs/mixins/OxyServices.security.js +89 -0
  75. package/dist/cjs/mixins/OxyServices.store.js +266 -0
  76. package/dist/cjs/mixins/OxyServices.topics.js +137 -0
  77. package/dist/cjs/mixins/OxyServices.user.js +902 -0
  78. package/dist/cjs/mixins/OxyServices.utility.js +1098 -0
  79. package/dist/cjs/mixins/index.js +135 -0
  80. package/dist/cjs/mixins/mixinHelpers.js +53 -0
  81. package/dist/cjs/models/Topic.js +16 -0
  82. package/dist/cjs/models/interfaces.js +20 -0
  83. package/dist/cjs/models/session.js +2 -0
  84. package/dist/cjs/server/auth.js +167 -0
  85. package/dist/cjs/server/capabilityTicket.js +192 -0
  86. package/dist/cjs/server/cors.js +225 -0
  87. package/dist/cjs/server/index.js +97 -0
  88. package/dist/cjs/server/rateLimit.js +207 -0
  89. package/dist/cjs/server/safeFetch.js +458 -0
  90. package/dist/cjs/server/securityHeaders.js +377 -0
  91. package/dist/cjs/server/userInvalidation.js +156 -0
  92. package/dist/cjs/server/verifySecret.js +50 -0
  93. package/dist/cjs/session/SessionClient.js +865 -0
  94. package/dist/cjs/session/accountDelegationAccess.js +48 -0
  95. package/dist/cjs/session/accountDialogController.js +1131 -0
  96. package/dist/cjs/session/accountSwitchTargets.js +81 -0
  97. package/dist/cjs/session/authStateStore.js +404 -0
  98. package/dist/cjs/session/createSessionClient.js +32 -0
  99. package/dist/cjs/session/deviceDirectory.js +143 -0
  100. package/dist/cjs/session/deviceSwitcherRows.js +76 -0
  101. package/dist/cjs/session/identityPin.js +256 -0
  102. package/dist/cjs/session/identitySession.js +135 -0
  103. package/dist/cjs/session/projectSessionState.js +121 -0
  104. package/dist/cjs/session/refresh.js +398 -0
  105. package/dist/cjs/session/sessionClientHost.js +34 -0
  106. package/dist/cjs/session/sharedDeviceCredential.js +247 -0
  107. package/dist/cjs/session/socketLoader.js +55 -0
  108. package/dist/cjs/shared/utils/colorUtils.js +153 -0
  109. package/dist/cjs/shared/utils/errorUtils.js +183 -0
  110. package/dist/cjs/shared/utils/index.js +49 -0
  111. package/dist/cjs/shared/utils/networkUtils.js +183 -0
  112. package/dist/cjs/shared/utils/themeUtils.js +106 -0
  113. package/dist/cjs/utils/accountCacheSweep.js +80 -0
  114. package/dist/cjs/utils/accountUtils.js +140 -0
  115. package/dist/cjs/utils/activityId.js +6 -0
  116. package/dist/cjs/utils/apiUtils.js +91 -0
  117. package/dist/cjs/utils/asyncUtils.js +222 -0
  118. package/dist/cjs/utils/authHelpers.js +120 -0
  119. package/dist/cjs/utils/authWebUrl.js +19 -0
  120. package/dist/cjs/utils/avatarUtils.js +29 -0
  121. package/dist/cjs/utils/cache.js +235 -0
  122. package/dist/cjs/utils/cacheKey.js +85 -0
  123. package/dist/cjs/utils/coldBoot.js +122 -0
  124. package/dist/cjs/utils/commonsApproval.js +31 -0
  125. package/dist/cjs/utils/commonsDelivery.js +59 -0
  126. package/dist/cjs/utils/deviceManager.js +174 -0
  127. package/dist/cjs/utils/displayNamePolicyRanges.generated.js +60 -0
  128. package/dist/cjs/utils/edgeRegion.js +6 -0
  129. package/dist/cjs/utils/errorUtils.js +243 -0
  130. package/dist/cjs/utils/identityCacheSweep.js +97 -0
  131. package/dist/cjs/utils/languageUtils.js +224 -0
  132. package/dist/cjs/utils/oauthPkce.js +311 -0
  133. package/dist/cjs/utils/officialOrigins.js +64 -0
  134. package/dist/cjs/utils/oxyServiceEnvironment.js +19 -0
  135. package/dist/cjs/utils/platform.js +119 -0
  136. package/dist/cjs/utils/profileLinks.js +63 -0
  137. package/dist/cjs/utils/redactUrl.js +29 -0
  138. package/dist/cjs/utils/registrableApex.js +45 -0
  139. package/dist/cjs/utils/requestUtils.js +209 -0
  140. package/dist/cjs/utils/sessionUtils.js +181 -0
  141. package/dist/cjs/utils/textNormalization.js +158 -0
  142. package/dist/cjs/utils/userHandle.js +37 -0
  143. package/dist/cjs/utils/userIdentity.js +50 -0
  144. package/dist/cjs/utils/validationUtils.js +370 -0
  145. package/dist/cjs/utils/webauthnOrigin.js +51 -0
  146. package/dist/esm/.tsbuildinfo +1 -0
  147. package/dist/esm/HttpService.js +1266 -0
  148. package/dist/esm/OxyServices.base.js +386 -0
  149. package/dist/esm/OxyServices.errors.js +88 -0
  150. package/dist/esm/OxyServices.js +66 -0
  151. package/dist/esm/boot/sessionColdBoot.js +392 -0
  152. package/dist/esm/constants/version.js +13 -0
  153. package/dist/esm/crypto/aead.js +74 -0
  154. package/dist/esm/crypto/ecdh.js +32 -0
  155. package/dist/esm/crypto/identityMarker.js +248 -0
  156. package/dist/esm/crypto/kdf.js +36 -0
  157. package/dist/esm/crypto/keyManager.js +2227 -0
  158. package/dist/esm/crypto/polyfill.js +129 -0
  159. package/dist/esm/crypto/recoveryPhrase.js +238 -0
  160. package/dist/esm/crypto/signatureService.js +269 -0
  161. package/dist/esm/i18n/accountCategoryLabels.js +37 -0
  162. package/dist/esm/i18n/accountRoleLabels.js +20 -0
  163. package/dist/esm/i18n/index.js +83 -0
  164. package/dist/esm/i18n/locales/ar-SA.json +282 -0
  165. package/dist/esm/i18n/locales/ca-ES.json +282 -0
  166. package/dist/esm/i18n/locales/de-DE.json +282 -0
  167. package/dist/esm/i18n/locales/en-US.json +2161 -0
  168. package/dist/esm/i18n/locales/es-ES.json +2161 -0
  169. package/dist/esm/i18n/locales/fr-FR.json +282 -0
  170. package/dist/esm/i18n/locales/it-IT.json +282 -0
  171. package/dist/esm/i18n/locales/ja-JP.json +282 -0
  172. package/dist/esm/i18n/locales/ko-KR.json +282 -0
  173. package/dist/esm/i18n/locales/locales/ar-SA.json +282 -0
  174. package/dist/esm/i18n/locales/locales/ca-ES.json +282 -0
  175. package/dist/esm/i18n/locales/locales/de-DE.json +282 -0
  176. package/dist/esm/i18n/locales/locales/en-US.json +2161 -0
  177. package/dist/esm/i18n/locales/locales/es-ES.json +2161 -0
  178. package/dist/esm/i18n/locales/locales/fr-FR.json +282 -0
  179. package/dist/esm/i18n/locales/locales/it-IT.json +282 -0
  180. package/dist/esm/i18n/locales/locales/ja-JP.json +282 -0
  181. package/dist/esm/i18n/locales/locales/ko-KR.json +282 -0
  182. package/dist/esm/i18n/locales/locales/pt-PT.json +282 -0
  183. package/dist/esm/i18n/locales/locales/zh-CN.json +282 -0
  184. package/dist/esm/i18n/locales/pt-PT.json +282 -0
  185. package/dist/esm/i18n/locales/zh-CN.json +282 -0
  186. package/dist/esm/i18n/reputationCategoryLabels.js +13 -0
  187. package/dist/esm/i18n/trustTierLabels.js +12 -0
  188. package/dist/esm/index.js +254 -0
  189. package/dist/esm/inference/OxyInferenceClient.js +538 -0
  190. package/dist/esm/logger/index.js +140 -0
  191. package/dist/esm/mixins/OxyServices.accounts.js +543 -0
  192. package/dist/esm/mixins/OxyServices.analytics.js +46 -0
  193. package/dist/esm/mixins/OxyServices.appData.js +103 -0
  194. package/dist/esm/mixins/OxyServices.assets.js +761 -0
  195. package/dist/esm/mixins/OxyServices.auth.js +1247 -0
  196. package/dist/esm/mixins/OxyServices.chains.js +70 -0
  197. package/dist/esm/mixins/OxyServices.civic.js +605 -0
  198. package/dist/esm/mixins/OxyServices.connectedApps.js +75 -0
  199. package/dist/esm/mixins/OxyServices.contacts.js +47 -0
  200. package/dist/esm/mixins/OxyServices.deviceBoot.js +186 -0
  201. package/dist/esm/mixins/OxyServices.deviceTransfer.js +311 -0
  202. package/dist/esm/mixins/OxyServices.devices.js +113 -0
  203. package/dist/esm/mixins/OxyServices.features.js +332 -0
  204. package/dist/esm/mixins/OxyServices.followGraph.js +218 -0
  205. package/dist/esm/mixins/OxyServices.identity.js +457 -0
  206. package/dist/esm/mixins/OxyServices.identityBackup.js +169 -0
  207. package/dist/esm/mixins/OxyServices.inference.js +56 -0
  208. package/dist/esm/mixins/OxyServices.language.js +122 -0
  209. package/dist/esm/mixins/OxyServices.links.js +69 -0
  210. package/dist/esm/mixins/OxyServices.location.js +40 -0
  211. package/dist/esm/mixins/OxyServices.nodes.js +172 -0
  212. package/dist/esm/mixins/OxyServices.notifications.js +60 -0
  213. package/dist/esm/mixins/OxyServices.payment.js +155 -0
  214. package/dist/esm/mixins/OxyServices.privacy.js +196 -0
  215. package/dist/esm/mixins/OxyServices.reputation.js +286 -0
  216. package/dist/esm/mixins/OxyServices.security.js +86 -0
  217. package/dist/esm/mixins/OxyServices.store.js +263 -0
  218. package/dist/esm/mixins/OxyServices.topics.js +134 -0
  219. package/dist/esm/mixins/OxyServices.user.js +899 -0
  220. package/dist/esm/mixins/OxyServices.utility.js +1095 -0
  221. package/dist/esm/mixins/index.js +132 -0
  222. package/dist/esm/mixins/mixinHelpers.js +48 -0
  223. package/dist/esm/models/Topic.js +13 -0
  224. package/dist/esm/models/interfaces.js +17 -0
  225. package/dist/esm/models/session.js +1 -0
  226. package/dist/esm/server/auth.js +154 -0
  227. package/dist/esm/server/capabilityTicket.js +183 -0
  228. package/dist/esm/server/cors.js +220 -0
  229. package/dist/esm/server/index.js +47 -0
  230. package/dist/esm/server/rateLimit.js +201 -0
  231. package/dist/esm/server/safeFetch.js +447 -0
  232. package/dist/esm/server/securityHeaders.js +364 -0
  233. package/dist/esm/server/userInvalidation.js +152 -0
  234. package/dist/esm/server/verifySecret.js +47 -0
  235. package/dist/esm/session/SessionClient.js +861 -0
  236. package/dist/esm/session/accountDelegationAccess.js +45 -0
  237. package/dist/esm/session/accountDialogController.js +1126 -0
  238. package/dist/esm/session/accountSwitchTargets.js +77 -0
  239. package/dist/esm/session/authStateStore.js +398 -0
  240. package/dist/esm/session/createSessionClient.js +29 -0
  241. package/dist/esm/session/deviceDirectory.js +135 -0
  242. package/dist/esm/session/deviceSwitcherRows.js +72 -0
  243. package/dist/esm/session/identityPin.js +249 -0
  244. package/dist/esm/session/identitySession.js +131 -0
  245. package/dist/esm/session/projectSessionState.js +114 -0
  246. package/dist/esm/session/refresh.js +390 -0
  247. package/dist/esm/session/sessionClientHost.js +31 -0
  248. package/dist/esm/session/sharedDeviceCredential.js +239 -0
  249. package/dist/esm/session/socketLoader.js +19 -0
  250. package/dist/esm/shared/utils/colorUtils.js +143 -0
  251. package/dist/esm/shared/utils/errorUtils.js +170 -0
  252. package/dist/esm/shared/utils/index.js +15 -0
  253. package/dist/esm/shared/utils/networkUtils.js +173 -0
  254. package/dist/esm/shared/utils/themeUtils.js +98 -0
  255. package/dist/esm/utils/accountCacheSweep.js +75 -0
  256. package/dist/esm/utils/accountUtils.js +131 -0
  257. package/dist/esm/utils/activityId.js +2 -0
  258. package/dist/esm/utils/apiUtils.js +84 -0
  259. package/dist/esm/utils/asyncUtils.js +207 -0
  260. package/dist/esm/utils/authHelpers.js +111 -0
  261. package/dist/esm/utils/authWebUrl.js +16 -0
  262. package/dist/esm/utils/avatarUtils.js +26 -0
  263. package/dist/esm/utils/cache.js +227 -0
  264. package/dist/esm/utils/cacheKey.js +80 -0
  265. package/dist/esm/utils/coldBoot.js +119 -0
  266. package/dist/esm/utils/commonsApproval.js +27 -0
  267. package/dist/esm/utils/commonsDelivery.js +54 -0
  268. package/dist/esm/utils/deviceManager.js +170 -0
  269. package/dist/esm/utils/displayNamePolicyRanges.generated.js +57 -0
  270. package/dist/esm/utils/edgeRegion.js +2 -0
  271. package/dist/esm/utils/errorUtils.js +232 -0
  272. package/dist/esm/utils/identityCacheSweep.js +92 -0
  273. package/dist/esm/utils/languageUtils.js +212 -0
  274. package/dist/esm/utils/oauthPkce.js +297 -0
  275. package/dist/esm/utils/officialOrigins.js +59 -0
  276. package/dist/esm/utils/oxyServiceEnvironment.js +16 -0
  277. package/dist/esm/utils/platform.js +110 -0
  278. package/dist/esm/utils/profileLinks.js +60 -0
  279. package/dist/esm/utils/redactUrl.js +26 -0
  280. package/dist/esm/utils/registrableApex.js +42 -0
  281. package/dist/esm/utils/requestUtils.js +203 -0
  282. package/dist/esm/utils/sessionUtils.js +171 -0
  283. package/dist/esm/utils/textNormalization.js +154 -0
  284. package/dist/esm/utils/userHandle.js +33 -0
  285. package/dist/esm/utils/userIdentity.js +45 -0
  286. package/dist/esm/utils/validationUtils.js +350 -0
  287. package/dist/esm/utils/webauthnOrigin.js +48 -0
  288. package/dist/types/.tsbuildinfo +1 -0
  289. package/dist/types/HttpService.d.ts +413 -0
  290. package/dist/types/OxyServices.base.d.ts +187 -0
  291. package/dist/types/OxyServices.d.ts +139 -0
  292. package/dist/types/OxyServices.errors.d.ts +84 -0
  293. package/dist/types/boot/sessionColdBoot.d.ts +140 -0
  294. package/dist/types/constants/version.d.ts +13 -0
  295. package/dist/types/crypto/aead.d.ts +56 -0
  296. package/dist/types/crypto/ecdh.d.ts +29 -0
  297. package/dist/types/crypto/identityMarker.d.ts +94 -0
  298. package/dist/types/crypto/kdf.d.ts +25 -0
  299. package/dist/types/crypto/keyManager.d.ts +582 -0
  300. package/dist/types/crypto/polyfill.d.ts +25 -0
  301. package/dist/types/crypto/recoveryPhrase.d.ts +173 -0
  302. package/dist/types/crypto/signatureService.d.ts +136 -0
  303. package/dist/types/i18n/accountCategoryLabels.d.ts +34 -0
  304. package/dist/types/i18n/accountRoleLabels.d.ts +10 -0
  305. package/dist/types/i18n/index.d.ts +3 -0
  306. package/dist/types/i18n/reputationCategoryLabels.d.ts +10 -0
  307. package/dist/types/i18n/trustTierLabels.d.ts +9 -0
  308. package/dist/types/index.d.ts +145 -0
  309. package/dist/types/inference/OxyInferenceClient.d.ts +342 -0
  310. package/dist/types/logger/index.d.ts +104 -0
  311. package/dist/types/mixins/OxyServices.accounts.d.ts +868 -0
  312. package/dist/types/mixins/OxyServices.analytics.d.ts +72 -0
  313. package/dist/types/mixins/OxyServices.appData.d.ts +108 -0
  314. package/dist/types/mixins/OxyServices.assets.d.ts +329 -0
  315. package/dist/types/mixins/OxyServices.auth.d.ts +908 -0
  316. package/dist/types/mixins/OxyServices.chains.d.ts +156 -0
  317. package/dist/types/mixins/OxyServices.civic.d.ts +510 -0
  318. package/dist/types/mixins/OxyServices.connectedApps.d.ts +169 -0
  319. package/dist/types/mixins/OxyServices.contacts.d.ts +100 -0
  320. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +185 -0
  321. package/dist/types/mixins/OxyServices.deviceTransfer.d.ts +149 -0
  322. package/dist/types/mixins/OxyServices.devices.d.ts +103 -0
  323. package/dist/types/mixins/OxyServices.features.d.ts +250 -0
  324. package/dist/types/mixins/OxyServices.followGraph.d.ts +223 -0
  325. package/dist/types/mixins/OxyServices.identity.d.ts +351 -0
  326. package/dist/types/mixins/OxyServices.identityBackup.d.ts +129 -0
  327. package/dist/types/mixins/OxyServices.inference.d.ts +95 -0
  328. package/dist/types/mixins/OxyServices.language.d.ts +87 -0
  329. package/dist/types/mixins/OxyServices.links.d.ts +104 -0
  330. package/dist/types/mixins/OxyServices.location.d.ts +70 -0
  331. package/dist/types/mixins/OxyServices.nodes.d.ts +198 -0
  332. package/dist/types/mixins/OxyServices.notifications.d.ts +143 -0
  333. package/dist/types/mixins/OxyServices.payment.d.ts +117 -0
  334. package/dist/types/mixins/OxyServices.privacy.d.ts +146 -0
  335. package/dist/types/mixins/OxyServices.reputation.d.ts +202 -0
  336. package/dist/types/mixins/OxyServices.security.d.ts +84 -0
  337. package/dist/types/mixins/OxyServices.store.d.ts +334 -0
  338. package/dist/types/mixins/OxyServices.topics.d.ts +110 -0
  339. package/dist/types/mixins/OxyServices.user.d.ts +558 -0
  340. package/dist/types/mixins/OxyServices.utility.d.ts +393 -0
  341. package/dist/types/mixins/index.d.ts +87 -0
  342. package/dist/types/mixins/mixinHelpers.d.ts +31 -0
  343. package/dist/types/models/Topic.d.ts +42 -0
  344. package/dist/types/models/interfaces.d.ts +675 -0
  345. package/dist/types/models/session.d.ts +51 -0
  346. package/dist/types/server/auth.d.ts +130 -0
  347. package/dist/types/server/capabilityTicket.d.ts +41 -0
  348. package/dist/types/server/cors.d.ts +98 -0
  349. package/dist/types/server/index.d.ts +35 -0
  350. package/dist/types/server/rateLimit.d.ts +40 -0
  351. package/dist/types/server/safeFetch.d.ts +137 -0
  352. package/dist/types/server/securityHeaders.d.ts +221 -0
  353. package/dist/types/server/userInvalidation.d.ts +114 -0
  354. package/dist/types/server/verifySecret.d.ts +29 -0
  355. package/dist/types/session/SessionClient.d.ts +418 -0
  356. package/dist/types/session/accountDelegationAccess.d.ts +40 -0
  357. package/dist/types/session/accountDialogController.d.ts +648 -0
  358. package/dist/types/session/accountSwitchTargets.d.ts +70 -0
  359. package/dist/types/session/authStateStore.d.ts +153 -0
  360. package/dist/types/session/createSessionClient.d.ts +30 -0
  361. package/dist/types/session/deviceDirectory.d.ts +182 -0
  362. package/dist/types/session/deviceSwitcherRows.d.ts +92 -0
  363. package/dist/types/session/identityPin.d.ts +87 -0
  364. package/dist/types/session/identitySession.d.ts +105 -0
  365. package/dist/types/session/projectSessionState.d.ts +74 -0
  366. package/dist/types/session/refresh.d.ts +179 -0
  367. package/dist/types/session/sessionClientHost.d.ts +18 -0
  368. package/dist/types/session/sharedDeviceCredential.d.ts +202 -0
  369. package/dist/types/session/socketLoader.d.ts +11 -0
  370. package/dist/types/shared/utils/colorUtils.d.ts +104 -0
  371. package/dist/types/shared/utils/errorUtils.d.ts +97 -0
  372. package/dist/types/shared/utils/index.d.ts +13 -0
  373. package/dist/types/shared/utils/networkUtils.d.ts +139 -0
  374. package/dist/types/shared/utils/themeUtils.d.ts +90 -0
  375. package/dist/types/utils/accountCacheSweep.d.ts +75 -0
  376. package/dist/types/utils/accountUtils.d.ts +100 -0
  377. package/dist/types/utils/activityId.d.ts +2 -0
  378. package/dist/types/utils/apiUtils.d.ts +95 -0
  379. package/dist/types/utils/asyncUtils.d.ts +62 -0
  380. package/dist/types/utils/authHelpers.d.ts +58 -0
  381. package/dist/types/utils/authWebUrl.d.ts +16 -0
  382. package/dist/types/utils/avatarUtils.d.ts +16 -0
  383. package/dist/types/utils/cache.d.ts +130 -0
  384. package/dist/types/utils/cacheKey.d.ts +66 -0
  385. package/dist/types/utils/coldBoot.d.ts +131 -0
  386. package/dist/types/utils/commonsApproval.d.ts +13 -0
  387. package/dist/types/utils/commonsDelivery.d.ts +105 -0
  388. package/dist/types/utils/deviceManager.d.ts +65 -0
  389. package/dist/types/utils/displayNamePolicyRanges.generated.d.ts +57 -0
  390. package/dist/types/utils/edgeRegion.d.ts +2 -0
  391. package/dist/types/utils/errorUtils.d.ts +125 -0
  392. package/dist/types/utils/identityCacheSweep.d.ts +80 -0
  393. package/dist/types/utils/languageUtils.d.ts +100 -0
  394. package/dist/types/utils/oauthPkce.d.ts +157 -0
  395. package/dist/types/utils/officialOrigins.d.ts +13 -0
  396. package/dist/types/utils/oxyServiceEnvironment.d.ts +17 -0
  397. package/dist/types/utils/platform.d.ts +49 -0
  398. package/dist/types/utils/profileLinks.d.ts +44 -0
  399. package/dist/types/utils/redactUrl.d.ts +17 -0
  400. package/dist/types/utils/registrableApex.d.ts +27 -0
  401. package/dist/types/utils/requestUtils.d.ts +123 -0
  402. package/dist/types/utils/sessionUtils.d.ts +54 -0
  403. package/dist/types/utils/textNormalization.d.ts +103 -0
  404. package/dist/types/utils/userHandle.d.ts +26 -0
  405. package/dist/types/utils/userIdentity.d.ts +21 -0
  406. package/dist/types/utils/validationUtils.d.ts +268 -0
  407. package/dist/types/utils/webauthnOrigin.d.ts +32 -0
  408. package/package.json +168 -0
  409. package/src/HttpService.ts +1553 -0
  410. package/src/OxyServices.base.ts +478 -0
  411. package/src/OxyServices.errors.ts +122 -0
  412. package/src/OxyServices.ts +172 -0
  413. package/src/__tests__/authSocket.test.ts +96 -0
  414. package/src/__tests__/httpServiceActivityId.test.ts +49 -0
  415. package/src/__tests__/httpServiceAuthSelfAwait.test.ts +108 -0
  416. package/src/__tests__/httpServiceCache.test.ts +318 -0
  417. package/src/__tests__/httpServiceCsrf.test.ts +235 -0
  418. package/src/__tests__/httpServiceFormEncoded.test.ts +142 -0
  419. package/src/__tests__/httpServiceQueueDeadlock.test.ts +128 -0
  420. package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +115 -0
  421. package/src/__tests__/inSessionRefresh.test.ts +260 -0
  422. package/src/__tests__/linkedClient.test.ts +370 -0
  423. package/src/__tests__/parseHttpErrorBody.test.ts +116 -0
  424. package/src/__tests__/serverValueImportsDeclared.test.ts +120 -0
  425. package/src/__tests__/userIdentity.test.ts +143 -0
  426. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +393 -0
  427. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +325 -0
  428. package/src/boot/__tests__/sessionColdBoot.test.ts +570 -0
  429. package/src/boot/sessionColdBoot.ts +529 -0
  430. package/src/constants/version.ts +15 -0
  431. package/src/crypto/__tests__/backupMaterial.test.ts +86 -0
  432. package/src/crypto/__tests__/cryptoPrimitives.test.ts +226 -0
  433. package/src/crypto/__tests__/identityMocks.ts +125 -0
  434. package/src/crypto/__tests__/keyManager.atomicity.test.ts +272 -0
  435. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +175 -0
  436. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +217 -0
  437. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +179 -0
  438. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +138 -0
  439. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +227 -0
  440. package/src/crypto/__tests__/keyManager.test.ts +329 -0
  441. package/src/crypto/__tests__/polyfill.test.ts +109 -0
  442. package/src/crypto/__tests__/recoveryPhrase.test.ts +61 -0
  443. package/src/crypto/__tests__/scopedSeed.test.ts +126 -0
  444. package/src/crypto/__tests__/signChallengeShared.test.ts +63 -0
  445. package/src/crypto/__tests__/signedRecord.test.ts +230 -0
  446. package/src/crypto/aead.ts +97 -0
  447. package/src/crypto/ecdh.ts +37 -0
  448. package/src/crypto/identityMarker.ts +291 -0
  449. package/src/crypto/kdf.ts +43 -0
  450. package/src/crypto/keyManager.ts +2607 -0
  451. package/src/crypto/polyfill.ts +143 -0
  452. package/src/crypto/recoveryPhrase.ts +337 -0
  453. package/src/crypto/signatureService.ts +350 -0
  454. package/src/i18n/__tests__/accountCategoryLabels.test.ts +62 -0
  455. package/src/i18n/__tests__/accountRoleLabels.test.ts +54 -0
  456. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +56 -0
  457. package/src/i18n/__tests__/trustTierLabels.test.ts +47 -0
  458. package/src/i18n/accountCategoryLabels.ts +44 -0
  459. package/src/i18n/accountRoleLabels.ts +26 -0
  460. package/src/i18n/index.ts +88 -0
  461. package/src/i18n/locales/ar-SA.json +282 -0
  462. package/src/i18n/locales/ca-ES.json +282 -0
  463. package/src/i18n/locales/de-DE.json +282 -0
  464. package/src/i18n/locales/en-US.json +2161 -0
  465. package/src/i18n/locales/es-ES.json +2161 -0
  466. package/src/i18n/locales/fr-FR.json +282 -0
  467. package/src/i18n/locales/it-IT.json +282 -0
  468. package/src/i18n/locales/ja-JP.json +282 -0
  469. package/src/i18n/locales/ko-KR.json +282 -0
  470. package/src/i18n/locales/pt-PT.json +282 -0
  471. package/src/i18n/locales/zh-CN.json +282 -0
  472. package/src/i18n/reputationCategoryLabels.ts +20 -0
  473. package/src/i18n/trustTierLabels.ts +18 -0
  474. package/src/index.ts +881 -0
  475. package/src/inference/OxyInferenceClient.ts +888 -0
  476. package/src/inference/__tests__/OxyInferenceClient.test.ts +834 -0
  477. package/src/logger/__tests__/logger.test.ts +207 -0
  478. package/src/logger/index.ts +217 -0
  479. package/src/mixins/OxyServices.accounts.ts +1330 -0
  480. package/src/mixins/OxyServices.analytics.ts +53 -0
  481. package/src/mixins/OxyServices.appData.ts +158 -0
  482. package/src/mixins/OxyServices.assets.ts +861 -0
  483. package/src/mixins/OxyServices.auth.ts +1858 -0
  484. package/src/mixins/OxyServices.chains.ts +134 -0
  485. package/src/mixins/OxyServices.civic.ts +945 -0
  486. package/src/mixins/OxyServices.connectedApps.ts +174 -0
  487. package/src/mixins/OxyServices.contacts.ts +73 -0
  488. package/src/mixins/OxyServices.deviceBoot.ts +210 -0
  489. package/src/mixins/OxyServices.deviceTransfer.ts +393 -0
  490. package/src/mixins/OxyServices.devices.ts +120 -0
  491. package/src/mixins/OxyServices.features.ts +454 -0
  492. package/src/mixins/OxyServices.followGraph.ts +293 -0
  493. package/src/mixins/OxyServices.identity.ts +705 -0
  494. package/src/mixins/OxyServices.identityBackup.ts +250 -0
  495. package/src/mixins/OxyServices.inference.ts +57 -0
  496. package/src/mixins/OxyServices.language.ts +144 -0
  497. package/src/mixins/OxyServices.links.ts +107 -0
  498. package/src/mixins/OxyServices.location.ts +46 -0
  499. package/src/mixins/OxyServices.nodes.ts +337 -0
  500. package/src/mixins/OxyServices.notifications.ts +142 -0
  501. package/src/mixins/OxyServices.payment.ts +163 -0
  502. package/src/mixins/OxyServices.privacy.ts +219 -0
  503. package/src/mixins/OxyServices.reputation.ts +436 -0
  504. package/src/mixins/OxyServices.security.ts +110 -0
  505. package/src/mixins/OxyServices.store.ts +585 -0
  506. package/src/mixins/OxyServices.topics.ts +169 -0
  507. package/src/mixins/OxyServices.user.ts +1137 -0
  508. package/src/mixins/OxyServices.utility.ts +1370 -0
  509. package/src/mixins/__tests__/OxyServices.civic.test.ts +1095 -0
  510. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +124 -0
  511. package/src/mixins/__tests__/OxyServices.deviceTransfer.test.ts +271 -0
  512. package/src/mixins/__tests__/OxyServices.identity.test.ts +376 -0
  513. package/src/mixins/__tests__/OxyServices.links.test.ts +154 -0
  514. package/src/mixins/__tests__/OxyServices.nodes.test.ts +341 -0
  515. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +276 -0
  516. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +192 -0
  517. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +135 -0
  518. package/src/mixins/__tests__/accounts.test.ts +727 -0
  519. package/src/mixins/__tests__/appData.test.ts +203 -0
  520. package/src/mixins/__tests__/assetCredentials.test.ts +47 -0
  521. package/src/mixins/__tests__/assetUpload.test.ts +191 -0
  522. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +135 -0
  523. package/src/mixins/__tests__/chains.test.ts +113 -0
  524. package/src/mixins/__tests__/commonsSignIn.test.ts +1144 -0
  525. package/src/mixins/__tests__/connectedApps.test.ts +123 -0
  526. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +113 -0
  527. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +266 -0
  528. package/src/mixins/__tests__/followCacheInvalidation.test.ts +173 -0
  529. package/src/mixins/__tests__/followGraph.test.ts +147 -0
  530. package/src/mixins/__tests__/followGraphPagination.test.ts +271 -0
  531. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +346 -0
  532. package/src/mixins/__tests__/getFollowStatuses.test.ts +95 -0
  533. package/src/mixins/__tests__/getUsersByIds.test.ts +149 -0
  534. package/src/mixins/__tests__/identityBackup.test.ts +315 -0
  535. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +407 -0
  536. package/src/mixins/__tests__/inferenceFactory.test.ts +58 -0
  537. package/src/mixins/__tests__/onTokensChanged.test.ts +129 -0
  538. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +284 -0
  539. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +155 -0
  540. package/src/mixins/__tests__/reputation.test.ts +522 -0
  541. package/src/mixins/__tests__/serviceAuth.test.ts +832 -0
  542. package/src/mixins/__tests__/serviceTokenJwks.test.ts +208 -0
  543. package/src/mixins/__tests__/store.test.ts +304 -0
  544. package/src/mixins/__tests__/topics.test.ts +156 -0
  545. package/src/mixins/__tests__/userReadCacheBypass.test.ts +129 -0
  546. package/src/mixins/__tests__/userTokenAuth.test.ts +746 -0
  547. package/src/mixins/__tests__/verifyChallenge.test.ts +130 -0
  548. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +167 -0
  549. package/src/mixins/__tests__/webauthnAuth.test.ts +205 -0
  550. package/src/mixins/index.ts +201 -0
  551. package/src/mixins/mixinHelpers.ts +69 -0
  552. package/src/models/Topic.ts +46 -0
  553. package/src/models/interfaces.ts +786 -0
  554. package/src/models/session.ts +55 -0
  555. package/src/server/__tests__/auth.test.ts +78 -0
  556. package/src/server/__tests__/capabilityTicket.test.ts +111 -0
  557. package/src/server/__tests__/cors.socket.test.ts +225 -0
  558. package/src/server/__tests__/cors.test.ts +158 -0
  559. package/src/server/__tests__/rateLimit.test.ts +257 -0
  560. package/src/server/__tests__/safeFetch.test.ts +232 -0
  561. package/src/server/__tests__/securityHeaders.test.ts +348 -0
  562. package/src/server/__tests__/serviceTokenAttribution.test.ts +396 -0
  563. package/src/server/__tests__/userInvalidation.test.ts +203 -0
  564. package/src/server/__tests__/verifySecret.test.ts +40 -0
  565. package/src/server/auth.ts +271 -0
  566. package/src/server/capabilityTicket.ts +258 -0
  567. package/src/server/cors.ts +277 -0
  568. package/src/server/index.ts +136 -0
  569. package/src/server/rateLimit.ts +313 -0
  570. package/src/server/safeFetch.ts +586 -0
  571. package/src/server/securityHeaders.ts +467 -0
  572. package/src/server/userInvalidation.ts +199 -0
  573. package/src/server/verifySecret.ts +52 -0
  574. package/src/session/SessionClient.ts +1001 -0
  575. package/src/session/__tests__/SessionClient.additive.test.ts +153 -0
  576. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +114 -0
  577. package/src/session/__tests__/SessionClient.diagnostics.test.ts +91 -0
  578. package/src/session/__tests__/SessionClient.directory.test.ts +688 -0
  579. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +65 -0
  580. package/src/session/__tests__/SessionClient.identityPin.test.ts +175 -0
  581. package/src/session/__tests__/SessionClient.rest.test.ts +119 -0
  582. package/src/session/__tests__/SessionClient.serverEvents.test.ts +72 -0
  583. package/src/session/__tests__/SessionClient.socket.test.ts +202 -0
  584. package/src/session/__tests__/SessionClient.socketFactory.test.ts +81 -0
  585. package/src/session/__tests__/SessionClient.state.test.ts +78 -0
  586. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +170 -0
  587. package/src/session/__tests__/accountDelegationAccess.test.ts +104 -0
  588. package/src/session/__tests__/accountDialogController.test.ts +1969 -0
  589. package/src/session/__tests__/accountDialogShape.test.ts +118 -0
  590. package/src/session/__tests__/accountSwitchTargets.test.ts +137 -0
  591. package/src/session/__tests__/authStateStore.test.ts +451 -0
  592. package/src/session/__tests__/deviceDirectory.test.ts +422 -0
  593. package/src/session/__tests__/deviceSwitcherRows.test.ts +223 -0
  594. package/src/session/__tests__/identityPin.test.ts +131 -0
  595. package/src/session/__tests__/identitySession.test.ts +194 -0
  596. package/src/session/__tests__/projectSessionState.test.ts +105 -0
  597. package/src/session/__tests__/refresh.identityPin.test.ts +307 -0
  598. package/src/session/__tests__/refresh.test.ts +443 -0
  599. package/src/session/__tests__/sessionIntegration.test.ts +209 -0
  600. package/src/session/__tests__/sharedDeviceCredential.test.ts +300 -0
  601. package/src/session/accountDelegationAccess.ts +72 -0
  602. package/src/session/accountDialogController.ts +1494 -0
  603. package/src/session/accountSwitchTargets.ts +93 -0
  604. package/src/session/authStateStore.ts +502 -0
  605. package/src/session/createSessionClient.ts +39 -0
  606. package/src/session/deviceDirectory.ts +269 -0
  607. package/src/session/deviceSwitcherRows.ts +145 -0
  608. package/src/session/identityPin.ts +310 -0
  609. package/src/session/identitySession.ts +206 -0
  610. package/src/session/projectSessionState.ts +137 -0
  611. package/src/session/refresh.ts +517 -0
  612. package/src/session/sessionClientHost.ts +39 -0
  613. package/src/session/sharedDeviceCredential.ts +349 -0
  614. package/src/session/socketLoader.ts +30 -0
  615. package/src/shared/utils/colorUtils.ts +155 -0
  616. package/src/shared/utils/errorUtils.ts +181 -0
  617. package/src/shared/utils/index.ts +59 -0
  618. package/src/shared/utils/networkUtils.ts +248 -0
  619. package/src/shared/utils/themeUtils.ts +115 -0
  620. package/src/types/buffer.d.ts +97 -0
  621. package/src/types/expo-crypto.d.ts +16 -0
  622. package/src/types/expo-secure-store.d.ts +17 -0
  623. package/src/utils/__tests__/accountUtils.test.ts +151 -0
  624. package/src/utils/__tests__/activityId.test.ts +45 -0
  625. package/src/utils/__tests__/asyncUtils.test.ts +187 -0
  626. package/src/utils/__tests__/authWebUrl.test.ts +15 -0
  627. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  628. package/src/utils/__tests__/coldBoot.test.ts +496 -0
  629. package/src/utils/__tests__/commonsApproval.test.ts +60 -0
  630. package/src/utils/__tests__/identityCacheSweep.test.ts +151 -0
  631. package/src/utils/__tests__/languageUtils.test.ts +219 -0
  632. package/src/utils/__tests__/oauthPkce.test.ts +272 -0
  633. package/src/utils/__tests__/officialOrigins.test.ts +31 -0
  634. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +7 -0
  635. package/src/utils/__tests__/profileLinks.test.ts +180 -0
  636. package/src/utils/__tests__/redactUrl.test.ts +33 -0
  637. package/src/utils/__tests__/registrableApex.test.ts +62 -0
  638. package/src/utils/__tests__/textNormalization.test.ts +205 -0
  639. package/src/utils/__tests__/validationUtils.test.ts +703 -0
  640. package/src/utils/__tests__/webauthnOrigin.test.ts +83 -0
  641. package/src/utils/accountCacheSweep.ts +93 -0
  642. package/src/utils/accountUtils.ts +194 -0
  643. package/src/utils/activityId.ts +2 -0
  644. package/src/utils/apiUtils.ts +137 -0
  645. package/src/utils/asyncUtils.ts +280 -0
  646. package/src/utils/authHelpers.ts +148 -0
  647. package/src/utils/authWebUrl.ts +17 -0
  648. package/src/utils/avatarUtils.ts +39 -0
  649. package/src/utils/cache.ts +273 -0
  650. package/src/utils/cacheKey.ts +93 -0
  651. package/src/utils/coldBoot.ts +218 -0
  652. package/src/utils/commonsApproval.ts +39 -0
  653. package/src/utils/commonsDelivery.ts +132 -0
  654. package/src/utils/deviceManager.ts +203 -0
  655. package/src/utils/displayNamePolicyRanges.generated.ts +69 -0
  656. package/src/utils/edgeRegion.ts +2 -0
  657. package/src/utils/errorUtils.ts +352 -0
  658. package/src/utils/identityCacheSweep.ts +104 -0
  659. package/src/utils/languageUtils.ts +256 -0
  660. package/src/utils/oauthPkce.ts +392 -0
  661. package/src/utils/officialOrigins.ts +62 -0
  662. package/src/utils/oxyServiceEnvironment.ts +17 -0
  663. package/src/utils/platform.ts +139 -0
  664. package/src/utils/profileLinks.ts +91 -0
  665. package/src/utils/redactUrl.ts +28 -0
  666. package/src/utils/registrableApex.ts +41 -0
  667. package/src/utils/requestUtils.ts +237 -0
  668. package/src/utils/sessionUtils.ts +206 -0
  669. package/src/utils/textNormalization.ts +162 -0
  670. package/src/utils/userHandle.ts +49 -0
  671. package/src/utils/userIdentity.ts +60 -0
  672. package/src/utils/validationUtils.ts +390 -0
  673. 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;