@oxy.so/core 1.18.1 → 3.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 (663) hide show
  1. package/README.md +13 -7
  2. package/dist/cjs/HttpService.js +159 -111
  3. package/dist/cjs/OxyServices.errors.js +48 -1
  4. package/dist/cjs/OxyServices.js +263 -60
  5. package/dist/cjs/api/accounts.js +231 -0
  6. package/dist/cjs/api/agency.js +102 -0
  7. package/dist/cjs/api/appData.js +45 -0
  8. package/dist/cjs/api/apps.js +197 -0
  9. package/dist/cjs/api/assets.js +329 -0
  10. package/dist/cjs/api/auth.js +900 -0
  11. package/dist/cjs/api/billing.js +44 -0
  12. package/dist/cjs/api/civic.js +289 -0
  13. package/dist/cjs/api/contacts.js +16 -0
  14. package/dist/cjs/api/devices.js +351 -0
  15. package/dist/cjs/api/follows.js +240 -0
  16. package/dist/cjs/api/identity.js +569 -0
  17. package/dist/cjs/api/linkedAccounts.js +48 -0
  18. package/dist/cjs/api/nodes.js +75 -0
  19. package/dist/cjs/api/notifications.js +75 -0
  20. package/dist/cjs/api/privacy.js +105 -0
  21. package/dist/cjs/api/reputation.js +74 -0
  22. package/dist/cjs/api/session.js +177 -0
  23. package/dist/cjs/api/store.js +199 -0
  24. package/dist/cjs/api/topics.js +66 -0
  25. package/dist/cjs/api/users.js +309 -0
  26. package/dist/cjs/boot/sessionColdBoot.js +4 -4
  27. package/dist/cjs/civic/index.js +16 -0
  28. package/dist/cjs/civic/payloads.js +156 -0
  29. package/dist/cjs/client/context.js +2 -0
  30. package/dist/cjs/crypto/identityLink.js +5 -5
  31. package/dist/cjs/crypto/index.js +44 -0
  32. package/dist/cjs/crypto/internal.js +37 -0
  33. package/dist/cjs/crypto/keyManager.js +2 -2
  34. package/dist/cjs/crypto/polyfill.js +9 -80
  35. package/dist/cjs/crypto/recoveryPhrase.js +1 -0
  36. package/dist/cjs/crypto/registrationPow.js +1 -1
  37. package/dist/cjs/crypto/signatureService.js +1 -0
  38. package/dist/cjs/i18n/accountCategoryLabels.js +3 -3
  39. package/dist/cjs/i18n/accountRoleLabels.js +7 -7
  40. package/dist/cjs/i18n/index.js +130 -52
  41. package/dist/cjs/i18n/locales/{ar-SA.json → ar-SA.js} +134 -52
  42. package/dist/cjs/i18n/locales/{ca-ES.json → ca-ES.js} +134 -52
  43. package/dist/{esm/i18n/locales/de-DE.json → cjs/i18n/locales/de-DE.js} +136 -54
  44. package/dist/{esm/i18n/locales/en-US.json → cjs/i18n/locales/en-US.js} +163 -245
  45. package/dist/{esm/i18n/locales/es-ES.json → cjs/i18n/locales/es-ES.js} +163 -245
  46. package/dist/cjs/i18n/locales/{fr-FR.json → fr-FR.js} +134 -52
  47. package/dist/cjs/i18n/locales/{it-IT.json → it-IT.js} +134 -52
  48. package/dist/{esm/i18n/locales/ja-JP.json → cjs/i18n/locales/ja-JP.js} +134 -52
  49. package/dist/cjs/i18n/locales/{ko-KR.json → ko-KR.js} +134 -52
  50. package/dist/{esm/i18n/locales/pt-PT.json → cjs/i18n/locales/pt-PT.js} +136 -54
  51. package/dist/{esm/i18n/locales/zh-CN.json → cjs/i18n/locales/zh-CN.js} +135 -53
  52. package/dist/cjs/i18n/reputationCategoryLabels.js +2 -2
  53. package/dist/cjs/i18n/trustTierLabels.js +2 -2
  54. package/dist/cjs/index.js +55 -263
  55. package/dist/cjs/inference/index.js +21 -0
  56. package/dist/cjs/server/OxyServer.js +521 -0
  57. package/dist/cjs/server/auth.js +2 -2
  58. package/dist/cjs/server/index.js +23 -6
  59. package/dist/cjs/server/middleware.js +1154 -0
  60. package/dist/cjs/server/namespaces.js +214 -0
  61. package/dist/cjs/server/rateLimit.js +2 -2
  62. package/dist/cjs/server/requesterAssertion.js +5 -5
  63. package/dist/cjs/server/securityHeaders.js +3 -3
  64. package/dist/cjs/server/traffic.js +7 -6
  65. package/dist/cjs/server/trafficNodeHttp.js +9 -3
  66. package/dist/cjs/server/userInvalidation.js +5 -5
  67. package/dist/cjs/session/accountDialogController.js +23 -23
  68. package/dist/cjs/session/authStateStore.js +2 -2
  69. package/dist/cjs/session/identitySession.js +3 -3
  70. package/dist/cjs/session/index.js +131 -0
  71. package/dist/cjs/session/refresh.js +37 -30
  72. package/dist/cjs/session/sessionClientHost.js +5 -5
  73. package/dist/cjs/session/sharedDeviceCredential.js +3 -2
  74. package/dist/cjs/shared/utils/networkUtils.js +2 -2
  75. package/dist/cjs/utils/accountCacheSweep.js +11 -15
  76. package/dist/cjs/utils/asyncUtils.js +22 -163
  77. package/dist/cjs/utils/authHelpers.js +2 -2
  78. package/dist/cjs/utils/authWebUrl.js +3 -4
  79. package/dist/cjs/utils/avatarUtils.js +2 -2
  80. package/dist/cjs/utils/cache.js +32 -2
  81. package/dist/cjs/utils/cacheKey.js +5 -10
  82. package/dist/cjs/utils/deviceManager.js +17 -16
  83. package/dist/cjs/utils/edgeRegion.js +2 -3
  84. package/dist/cjs/utils/identityCacheSweep.js +6 -10
  85. package/dist/cjs/utils/oxyServiceEnvironment.js +3 -7
  86. package/dist/cjs/utils/requestUtils.js +40 -33
  87. package/dist/cjs/utils/sessionUtils.js +0 -2
  88. package/dist/cjs/utils/tokenClaims.js +34 -0
  89. package/dist/esm/HttpService.js +160 -112
  90. package/dist/esm/OxyServices.errors.js +45 -0
  91. package/dist/esm/OxyServices.js +262 -57
  92. package/dist/esm/api/accounts.js +218 -0
  93. package/dist/esm/api/agency.js +95 -0
  94. package/dist/esm/api/appData.js +40 -0
  95. package/dist/esm/api/apps.js +191 -0
  96. package/dist/esm/api/assets.js +324 -0
  97. package/dist/esm/api/auth.js +858 -0
  98. package/dist/esm/api/billing.js +40 -0
  99. package/dist/esm/api/civic.js +250 -0
  100. package/dist/esm/api/contacts.js +12 -0
  101. package/dist/esm/api/devices.js +346 -0
  102. package/dist/esm/api/follows.js +236 -0
  103. package/dist/esm/api/identity.js +527 -0
  104. package/dist/esm/api/linkedAccounts.js +44 -0
  105. package/dist/esm/api/nodes.js +71 -0
  106. package/dist/esm/api/notifications.js +71 -0
  107. package/dist/esm/api/privacy.js +101 -0
  108. package/dist/esm/api/reputation.js +70 -0
  109. package/dist/esm/api/session.js +173 -0
  110. package/dist/esm/api/store.js +192 -0
  111. package/dist/esm/api/topics.js +62 -0
  112. package/dist/esm/api/users.js +272 -0
  113. package/dist/esm/boot/sessionColdBoot.js +4 -4
  114. package/dist/esm/civic/index.js +10 -0
  115. package/dist/esm/civic/payloads.js +118 -0
  116. package/dist/esm/client/context.js +1 -0
  117. package/dist/esm/crypto/identityLink.js +5 -5
  118. package/dist/esm/crypto/index.js +24 -0
  119. package/dist/esm/crypto/internal.js +19 -0
  120. package/dist/esm/crypto/keyManager.js +2 -2
  121. package/dist/esm/crypto/polyfill.js +10 -81
  122. package/dist/esm/crypto/recoveryPhrase.js +1 -0
  123. package/dist/esm/crypto/registrationPow.js +1 -1
  124. package/dist/esm/crypto/signatureService.js +1 -0
  125. package/dist/esm/i18n/accountCategoryLabels.js +2 -2
  126. package/dist/esm/i18n/accountRoleLabels.js +1 -1
  127. package/dist/esm/i18n/index.js +93 -52
  128. package/dist/esm/i18n/locales/{ar-SA.json → ar-SA.js} +132 -52
  129. package/dist/esm/i18n/locales/{ca-ES.json → ca-ES.js} +132 -52
  130. package/dist/{cjs/i18n/locales/de-DE.json → esm/i18n/locales/de-DE.js} +134 -54
  131. package/dist/{cjs/i18n/locales/en-US.json → esm/i18n/locales/en-US.js} +161 -245
  132. package/dist/{cjs/i18n/locales/es-ES.json → esm/i18n/locales/es-ES.js} +161 -245
  133. package/dist/esm/i18n/locales/{fr-FR.json → fr-FR.js} +132 -52
  134. package/dist/esm/i18n/locales/{it-IT.json → it-IT.js} +132 -52
  135. package/dist/{cjs/i18n/locales/ja-JP.json → esm/i18n/locales/ja-JP.js} +132 -52
  136. package/dist/esm/i18n/locales/{ko-KR.json → ko-KR.js} +132 -52
  137. package/dist/{cjs/i18n/locales/pt-PT.json → esm/i18n/locales/pt-PT.js} +134 -54
  138. package/dist/{cjs/i18n/locales/zh-CN.json → esm/i18n/locales/zh-CN.js} +133 -53
  139. package/dist/esm/i18n/reputationCategoryLabels.js +1 -1
  140. package/dist/esm/i18n/trustTierLabels.js +1 -1
  141. package/dist/esm/index.js +30 -166
  142. package/dist/esm/inference/index.js +13 -0
  143. package/dist/esm/server/OxyServer.js +516 -0
  144. package/dist/esm/server/auth.js +2 -2
  145. package/dist/esm/server/index.js +10 -5
  146. package/dist/esm/server/middleware.js +1147 -0
  147. package/dist/esm/server/namespaces.js +206 -0
  148. package/dist/esm/server/rateLimit.js +2 -2
  149. package/dist/esm/server/requesterAssertion.js +5 -5
  150. package/dist/esm/server/securityHeaders.js +3 -3
  151. package/dist/esm/server/traffic.js +7 -6
  152. package/dist/esm/server/trafficNodeHttp.js +9 -3
  153. package/dist/esm/server/userInvalidation.js +5 -5
  154. package/dist/esm/session/accountDialogController.js +23 -23
  155. package/dist/esm/session/authStateStore.js +2 -2
  156. package/dist/esm/session/identitySession.js +3 -3
  157. package/dist/esm/session/index.js +82 -0
  158. package/dist/esm/session/refresh.js +37 -30
  159. package/dist/esm/session/sessionClientHost.js +5 -5
  160. package/dist/esm/session/sharedDeviceCredential.js +3 -2
  161. package/dist/esm/shared/utils/networkUtils.js +2 -2
  162. package/dist/esm/utils/accountCacheSweep.js +11 -15
  163. package/dist/esm/utils/asyncUtils.js +22 -151
  164. package/dist/esm/utils/authHelpers.js +2 -2
  165. package/dist/esm/utils/authWebUrl.js +3 -4
  166. package/dist/esm/utils/avatarUtils.js +2 -2
  167. package/dist/esm/utils/cache.js +32 -2
  168. package/dist/esm/utils/cacheKey.js +5 -10
  169. package/dist/esm/utils/deviceManager.js +17 -16
  170. package/dist/esm/utils/edgeRegion.js +1 -2
  171. package/dist/esm/utils/identityCacheSweep.js +6 -10
  172. package/dist/esm/utils/oxyServiceEnvironment.js +3 -7
  173. package/dist/esm/utils/requestUtils.js +40 -33
  174. package/dist/esm/utils/sessionUtils.js +0 -2
  175. package/dist/esm/utils/tokenClaims.js +31 -0
  176. package/dist/types/HttpService.d.ts +26 -9
  177. package/dist/types/OxyServices.d.ts +160 -131
  178. package/dist/types/OxyServices.errors.d.ts +42 -0
  179. package/dist/types/api/accounts.d.ts +415 -0
  180. package/dist/types/api/agency.d.ts +135 -0
  181. package/dist/types/api/appData.d.ts +27 -0
  182. package/dist/types/api/apps.d.ts +433 -0
  183. package/dist/types/api/assets.d.ts +174 -0
  184. package/dist/types/api/auth.d.ts +766 -0
  185. package/dist/types/api/billing.d.ts +113 -0
  186. package/dist/types/api/civic.d.ts +203 -0
  187. package/dist/types/api/contacts.d.ts +31 -0
  188. package/{src/mixins/OxyServices.deviceBoot.ts → dist/types/api/devices.d.ts} +130 -110
  189. package/dist/types/api/follows.d.ts +236 -0
  190. package/dist/types/api/identity.d.ts +275 -0
  191. package/dist/types/api/linkedAccounts.d.ts +48 -0
  192. package/dist/types/api/nodes.d.ts +102 -0
  193. package/dist/types/api/notifications.d.ts +77 -0
  194. package/dist/types/api/privacy.d.ts +43 -0
  195. package/dist/types/api/reputation.d.ts +50 -0
  196. package/dist/types/api/session.d.ts +85 -0
  197. package/dist/types/api/store.d.ts +278 -0
  198. package/dist/types/api/topics.d.ts +34 -0
  199. package/dist/types/api/users.d.ts +134 -0
  200. package/dist/types/boot/sessionColdBoot.d.ts +1 -1
  201. package/dist/types/civic/index.d.ts +10 -0
  202. package/dist/types/civic/payloads.d.ts +83 -0
  203. package/dist/types/client/context.d.ts +33 -0
  204. package/dist/types/crypto/identityLink.d.ts +5 -5
  205. package/dist/types/crypto/index.d.ts +24 -0
  206. package/dist/types/crypto/internal.d.ts +19 -0
  207. package/dist/types/crypto/polyfill.d.ts +6 -9
  208. package/dist/types/crypto/registrationPow.d.ts +1 -1
  209. package/dist/types/i18n/accountCategoryLabels.d.ts +1 -1
  210. package/dist/types/i18n/accountRoleLabels.d.ts +1 -1
  211. package/dist/types/i18n/index.d.ts +20 -1
  212. package/dist/types/i18n/locales/ar-SA.d.ts +386 -0
  213. package/dist/types/i18n/locales/ca-ES.d.ts +386 -0
  214. package/dist/types/i18n/locales/de-DE.d.ts +386 -0
  215. package/dist/types/i18n/locales/en-US.d.ts +2034 -0
  216. package/dist/types/i18n/locales/es-ES.d.ts +2034 -0
  217. package/dist/types/i18n/locales/fr-FR.d.ts +386 -0
  218. package/dist/types/i18n/locales/it-IT.d.ts +386 -0
  219. package/dist/types/i18n/locales/ja-JP.d.ts +386 -0
  220. package/dist/types/i18n/locales/ko-KR.d.ts +386 -0
  221. package/dist/types/i18n/locales/pt-PT.d.ts +386 -0
  222. package/dist/types/i18n/locales/zh-CN.d.ts +386 -0
  223. package/dist/types/index.d.ts +46 -95
  224. package/dist/types/inference/index.d.ts +22 -0
  225. package/dist/types/models/interfaces.d.ts +1 -22
  226. package/dist/types/server/OxyServer.d.ts +183 -0
  227. package/dist/types/server/auth.d.ts +10 -7
  228. package/dist/types/server/index.d.ts +10 -4
  229. package/dist/types/server/middleware.d.ts +291 -0
  230. package/dist/types/server/namespaces.d.ts +98 -0
  231. package/dist/types/server/rateLimit.d.ts +7 -5
  232. package/dist/types/server/requesterAssertion.d.ts +14 -11
  233. package/dist/types/server/securityHeaders.d.ts +4 -5
  234. package/dist/types/server/userInvalidation.d.ts +10 -8
  235. package/dist/types/session/accountDelegationAccess.d.ts +1 -1
  236. package/dist/types/session/accountDialogController.d.ts +8 -8
  237. package/dist/types/session/accountSwitchTargets.d.ts +1 -1
  238. package/dist/types/session/authStateStore.d.ts +7 -6
  239. package/dist/types/session/index.d.ts +40 -0
  240. package/dist/types/utils/accountCacheSweep.d.ts +7 -10
  241. package/dist/types/utils/apiUtils.d.ts +3 -3
  242. package/dist/types/utils/asyncUtils.d.ts +11 -58
  243. package/dist/types/utils/authWebUrl.d.ts +3 -4
  244. package/dist/types/utils/avatarUtils.d.ts +5 -6
  245. package/dist/types/utils/cache.d.ts +11 -3
  246. package/dist/types/utils/commonsApproval.d.ts +1 -1
  247. package/dist/types/utils/edgeRegion.d.ts +1 -2
  248. package/dist/types/utils/identityCacheSweep.d.ts +6 -4
  249. package/dist/types/utils/oauthPkce.d.ts +2 -2
  250. package/dist/types/utils/oxyServiceEnvironment.d.ts +3 -7
  251. package/dist/types/utils/requestUtils.d.ts +18 -14
  252. package/dist/types/utils/tokenClaims.d.ts +9 -0
  253. package/package.json +68 -7
  254. package/src/HttpService.ts +166 -131
  255. package/src/OxyServices.errors.ts +73 -0
  256. package/src/OxyServices.ts +289 -164
  257. package/src/api/accounts.ts +579 -0
  258. package/src/api/agency.ts +277 -0
  259. package/src/api/appData.ts +63 -0
  260. package/src/api/apps.ts +596 -0
  261. package/src/api/assets.ts +416 -0
  262. package/src/api/auth.ts +1457 -0
  263. package/src/api/billing.ts +144 -0
  264. package/src/api/civic.ts +428 -0
  265. package/src/api/contacts.ts +41 -0
  266. package/src/api/devices.ts +438 -0
  267. package/src/api/follows.ts +414 -0
  268. package/src/api/identity.ts +727 -0
  269. package/src/api/linkedAccounts.ts +78 -0
  270. package/src/api/nodes.ts +169 -0
  271. package/src/api/notifications.ts +135 -0
  272. package/src/api/privacy.ts +120 -0
  273. package/src/api/reputation.ts +134 -0
  274. package/src/api/session.ts +210 -0
  275. package/src/api/store.ts +435 -0
  276. package/src/api/topics.ts +83 -0
  277. package/src/api/users.ts +357 -0
  278. package/src/boot/sessionColdBoot.ts +4 -4
  279. package/src/civic/index.ts +12 -0
  280. package/src/civic/payloads.ts +175 -0
  281. package/src/client/context.ts +34 -0
  282. package/src/crypto/identityLink.ts +5 -5
  283. package/src/crypto/index.ts +39 -0
  284. package/src/crypto/internal.ts +20 -0
  285. package/src/crypto/keyManager.ts +2 -2
  286. package/src/crypto/polyfill.ts +9 -89
  287. package/src/crypto/recoveryPhrase.ts +1 -0
  288. package/src/crypto/registrationPow.ts +1 -1
  289. package/src/crypto/signatureService.ts +1 -0
  290. package/src/i18n/accountCategoryLabels.ts +2 -2
  291. package/src/i18n/accountRoleLabels.ts +2 -2
  292. package/src/i18n/index.ts +105 -54
  293. package/src/i18n/locales/{ar-SA.json → ar-SA.ts} +132 -52
  294. package/src/i18n/locales/{ca-ES.json → ca-ES.ts} +132 -52
  295. package/{dist/cjs/i18n/locales/locales/de-DE.json → src/i18n/locales/de-DE.ts} +134 -54
  296. package/src/i18n/locales/{en-US.json → en-US.ts} +161 -245
  297. package/{dist/cjs/i18n/locales/locales/es-ES.json → src/i18n/locales/es-ES.ts} +161 -245
  298. package/src/i18n/locales/{fr-FR.json → fr-FR.ts} +132 -52
  299. package/src/i18n/locales/{it-IT.json → it-IT.ts} +132 -52
  300. package/{dist/cjs/i18n/locales/locales/ja-JP.json → src/i18n/locales/ja-JP.ts} +132 -52
  301. package/src/i18n/locales/{ko-KR.json → ko-KR.ts} +132 -52
  302. package/src/i18n/locales/{pt-PT.json → pt-PT.ts} +134 -54
  303. package/src/i18n/locales/{zh-CN.json → zh-CN.ts} +133 -53
  304. package/src/i18n/reputationCategoryLabels.ts +1 -1
  305. package/src/i18n/trustTierLabels.ts +1 -1
  306. package/src/index.ts +170 -501
  307. package/src/inference/index.ts +48 -0
  308. package/src/models/interfaces.ts +1 -22
  309. package/src/server/OxyServer.ts +637 -0
  310. package/src/server/auth.ts +12 -8
  311. package/src/server/index.ts +28 -5
  312. package/src/server/middleware.ts +1520 -0
  313. package/src/server/namespaces.ts +257 -0
  314. package/src/server/rateLimit.ts +10 -9
  315. package/src/server/requesterAssertion.ts +13 -10
  316. package/src/server/securityHeaders.ts +7 -8
  317. package/src/server/traffic.ts +6 -6
  318. package/src/server/trafficNodeHttp.ts +7 -3
  319. package/src/server/userInvalidation.ts +9 -9
  320. package/src/session/accountDelegationAccess.ts +1 -1
  321. package/src/session/accountDialogController.ts +24 -24
  322. package/src/session/accountSwitchTargets.ts +1 -1
  323. package/src/session/authStateStore.ts +9 -8
  324. package/src/session/identitySession.ts +3 -3
  325. package/src/session/index.ts +210 -0
  326. package/src/session/refresh.ts +36 -30
  327. package/src/session/sessionClientHost.ts +5 -5
  328. package/src/session/sharedDeviceCredential.ts +3 -2
  329. package/src/shared/utils/networkUtils.ts +2 -2
  330. package/src/utils/accountCacheSweep.ts +11 -15
  331. package/src/utils/apiUtils.ts +3 -3
  332. package/src/utils/asyncUtils.ts +38 -235
  333. package/src/utils/authHelpers.ts +2 -2
  334. package/src/utils/authWebUrl.ts +3 -4
  335. package/src/utils/avatarUtils.ts +4 -7
  336. package/src/utils/cache.ts +36 -5
  337. package/src/utils/cacheKey.ts +5 -9
  338. package/src/utils/commonsApproval.ts +1 -1
  339. package/src/utils/deviceManager.ts +17 -16
  340. package/src/utils/edgeRegion.ts +1 -2
  341. package/src/utils/identityCacheSweep.ts +7 -12
  342. package/src/utils/oauthPkce.ts +2 -2
  343. package/src/utils/oxyServiceEnvironment.ts +3 -7
  344. package/src/utils/requestUtils.ts +48 -44
  345. package/src/utils/sessionUtils.ts +0 -2
  346. package/src/utils/tokenClaims.ts +38 -0
  347. package/dist/cjs/.tsbuildinfo +0 -1
  348. package/dist/cjs/OxyServices.base.js +0 -392
  349. package/dist/cjs/i18n/locales/locales/ar-SA.json +0 -306
  350. package/dist/cjs/i18n/locales/locales/ca-ES.json +0 -306
  351. package/dist/cjs/i18n/locales/locales/en-US.json +0 -2127
  352. package/dist/cjs/i18n/locales/locales/fr-FR.json +0 -306
  353. package/dist/cjs/i18n/locales/locales/it-IT.json +0 -306
  354. package/dist/cjs/i18n/locales/locales/ko-KR.json +0 -306
  355. package/dist/cjs/i18n/locales/locales/pt-PT.json +0 -306
  356. package/dist/cjs/i18n/locales/locales/zh-CN.json +0 -306
  357. package/dist/cjs/mixins/OxyServices.accounts.js +0 -555
  358. package/dist/cjs/mixins/OxyServices.agency.js +0 -154
  359. package/dist/cjs/mixins/OxyServices.analytics.js +0 -49
  360. package/dist/cjs/mixins/OxyServices.appData.js +0 -108
  361. package/dist/cjs/mixins/OxyServices.assets.js +0 -854
  362. package/dist/cjs/mixins/OxyServices.auth.js +0 -1495
  363. package/dist/cjs/mixins/OxyServices.chains.js +0 -73
  364. package/dist/cjs/mixins/OxyServices.civic.js +0 -611
  365. package/dist/cjs/mixins/OxyServices.connectedApps.js +0 -95
  366. package/dist/cjs/mixins/OxyServices.contacts.js +0 -50
  367. package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -191
  368. package/dist/cjs/mixins/OxyServices.devices.js +0 -116
  369. package/dist/cjs/mixins/OxyServices.features.js +0 -335
  370. package/dist/cjs/mixins/OxyServices.followGraph.js +0 -221
  371. package/dist/cjs/mixins/OxyServices.identity.js +0 -562
  372. package/dist/cjs/mixins/OxyServices.identityBackup.js +0 -172
  373. package/dist/cjs/mixins/OxyServices.inference.js +0 -59
  374. package/dist/cjs/mixins/OxyServices.language.js +0 -125
  375. package/dist/cjs/mixins/OxyServices.linkedAccounts.js +0 -79
  376. package/dist/cjs/mixins/OxyServices.location.js +0 -43
  377. package/dist/cjs/mixins/OxyServices.nodes.js +0 -175
  378. package/dist/cjs/mixins/OxyServices.notifications.js +0 -63
  379. package/dist/cjs/mixins/OxyServices.payment.js +0 -158
  380. package/dist/cjs/mixins/OxyServices.privacy.js +0 -199
  381. package/dist/cjs/mixins/OxyServices.reputation.js +0 -289
  382. package/dist/cjs/mixins/OxyServices.security.js +0 -89
  383. package/dist/cjs/mixins/OxyServices.store.js +0 -266
  384. package/dist/cjs/mixins/OxyServices.topics.js +0 -137
  385. package/dist/cjs/mixins/OxyServices.user.js +0 -954
  386. package/dist/cjs/mixins/OxyServices.utility.js +0 -1402
  387. package/dist/cjs/mixins/index.js +0 -136
  388. package/dist/cjs/mixins/mixinHelpers.js +0 -53
  389. package/dist/cjs/utils/webauthnOrigin.js +0 -51
  390. package/dist/esm/.tsbuildinfo +0 -1
  391. package/dist/esm/OxyServices.base.js +0 -388
  392. package/dist/esm/i18n/locales/locales/ar-SA.json +0 -306
  393. package/dist/esm/i18n/locales/locales/ca-ES.json +0 -306
  394. package/dist/esm/i18n/locales/locales/de-DE.json +0 -306
  395. package/dist/esm/i18n/locales/locales/en-US.json +0 -2127
  396. package/dist/esm/i18n/locales/locales/es-ES.json +0 -2127
  397. package/dist/esm/i18n/locales/locales/fr-FR.json +0 -306
  398. package/dist/esm/i18n/locales/locales/it-IT.json +0 -306
  399. package/dist/esm/i18n/locales/locales/ja-JP.json +0 -306
  400. package/dist/esm/i18n/locales/locales/ko-KR.json +0 -306
  401. package/dist/esm/i18n/locales/locales/pt-PT.json +0 -306
  402. package/dist/esm/i18n/locales/locales/zh-CN.json +0 -306
  403. package/dist/esm/mixins/OxyServices.accounts.js +0 -543
  404. package/dist/esm/mixins/OxyServices.agency.js +0 -151
  405. package/dist/esm/mixins/OxyServices.analytics.js +0 -46
  406. package/dist/esm/mixins/OxyServices.appData.js +0 -103
  407. package/dist/esm/mixins/OxyServices.assets.js +0 -851
  408. package/dist/esm/mixins/OxyServices.auth.js +0 -1455
  409. package/dist/esm/mixins/OxyServices.chains.js +0 -70
  410. package/dist/esm/mixins/OxyServices.civic.js +0 -605
  411. package/dist/esm/mixins/OxyServices.connectedApps.js +0 -92
  412. package/dist/esm/mixins/OxyServices.contacts.js +0 -47
  413. package/dist/esm/mixins/OxyServices.deviceBoot.js +0 -186
  414. package/dist/esm/mixins/OxyServices.devices.js +0 -113
  415. package/dist/esm/mixins/OxyServices.features.js +0 -332
  416. package/dist/esm/mixins/OxyServices.followGraph.js +0 -218
  417. package/dist/esm/mixins/OxyServices.identity.js +0 -558
  418. package/dist/esm/mixins/OxyServices.identityBackup.js +0 -169
  419. package/dist/esm/mixins/OxyServices.inference.js +0 -56
  420. package/dist/esm/mixins/OxyServices.language.js +0 -122
  421. package/dist/esm/mixins/OxyServices.linkedAccounts.js +0 -76
  422. package/dist/esm/mixins/OxyServices.location.js +0 -40
  423. package/dist/esm/mixins/OxyServices.nodes.js +0 -172
  424. package/dist/esm/mixins/OxyServices.notifications.js +0 -60
  425. package/dist/esm/mixins/OxyServices.payment.js +0 -155
  426. package/dist/esm/mixins/OxyServices.privacy.js +0 -196
  427. package/dist/esm/mixins/OxyServices.reputation.js +0 -286
  428. package/dist/esm/mixins/OxyServices.security.js +0 -86
  429. package/dist/esm/mixins/OxyServices.store.js +0 -263
  430. package/dist/esm/mixins/OxyServices.topics.js +0 -134
  431. package/dist/esm/mixins/OxyServices.user.js +0 -951
  432. package/dist/esm/mixins/OxyServices.utility.js +0 -1397
  433. package/dist/esm/mixins/index.js +0 -133
  434. package/dist/esm/mixins/mixinHelpers.js +0 -48
  435. package/dist/esm/utils/webauthnOrigin.js +0 -48
  436. package/dist/types/.tsbuildinfo +0 -1
  437. package/dist/types/OxyServices.base.d.ts +0 -189
  438. package/dist/types/mixins/OxyServices.accounts.d.ts +0 -868
  439. package/dist/types/mixins/OxyServices.agency.d.ts +0 -176
  440. package/dist/types/mixins/OxyServices.analytics.d.ts +0 -72
  441. package/dist/types/mixins/OxyServices.appData.d.ts +0 -108
  442. package/dist/types/mixins/OxyServices.assets.d.ts +0 -371
  443. package/dist/types/mixins/OxyServices.auth.d.ts +0 -998
  444. package/dist/types/mixins/OxyServices.chains.d.ts +0 -156
  445. package/dist/types/mixins/OxyServices.civic.d.ts +0 -520
  446. package/dist/types/mixins/OxyServices.connectedApps.d.ts +0 -184
  447. package/dist/types/mixins/OxyServices.contacts.d.ts +0 -100
  448. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +0 -185
  449. package/dist/types/mixins/OxyServices.devices.d.ts +0 -103
  450. package/dist/types/mixins/OxyServices.features.d.ts +0 -250
  451. package/dist/types/mixins/OxyServices.followGraph.d.ts +0 -223
  452. package/dist/types/mixins/OxyServices.identity.d.ts +0 -337
  453. package/dist/types/mixins/OxyServices.identityBackup.d.ts +0 -129
  454. package/dist/types/mixins/OxyServices.inference.d.ts +0 -95
  455. package/dist/types/mixins/OxyServices.language.d.ts +0 -87
  456. package/dist/types/mixins/OxyServices.linkedAccounts.d.ts +0 -107
  457. package/dist/types/mixins/OxyServices.location.d.ts +0 -70
  458. package/dist/types/mixins/OxyServices.nodes.d.ts +0 -198
  459. package/dist/types/mixins/OxyServices.notifications.d.ts +0 -143
  460. package/dist/types/mixins/OxyServices.payment.d.ts +0 -117
  461. package/dist/types/mixins/OxyServices.privacy.d.ts +0 -146
  462. package/dist/types/mixins/OxyServices.reputation.d.ts +0 -202
  463. package/dist/types/mixins/OxyServices.security.d.ts +0 -84
  464. package/dist/types/mixins/OxyServices.store.d.ts +0 -334
  465. package/dist/types/mixins/OxyServices.topics.d.ts +0 -110
  466. package/dist/types/mixins/OxyServices.user.d.ts +0 -600
  467. package/dist/types/mixins/OxyServices.utility.d.ts +0 -526
  468. package/dist/types/mixins/index.d.ts +0 -87
  469. package/dist/types/mixins/mixinHelpers.d.ts +0 -31
  470. package/dist/types/utils/webauthnOrigin.d.ts +0 -32
  471. package/src/OxyServices.base.ts +0 -480
  472. package/src/__tests__/authSocket.test.ts +0 -96
  473. package/src/__tests__/fixEsmImports.test.ts +0 -132
  474. package/src/__tests__/httpServiceAbort.test.ts +0 -308
  475. package/src/__tests__/httpServiceActivityId.test.ts +0 -49
  476. package/src/__tests__/httpServiceAuthSelfAwait.test.ts +0 -108
  477. package/src/__tests__/httpServiceCache.test.ts +0 -318
  478. package/src/__tests__/httpServiceFormEncoded.test.ts +0 -139
  479. package/src/__tests__/httpServiceQueueDeadlock.test.ts +0 -128
  480. package/src/__tests__/httpServiceRateLimitedRefresh.test.ts +0 -160
  481. package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +0 -115
  482. package/src/__tests__/httpServiceWrites.test.ts +0 -175
  483. package/src/__tests__/inSessionRefresh.test.ts +0 -313
  484. package/src/__tests__/linkedClient.test.ts +0 -363
  485. package/src/__tests__/nearExpiryMintStorm.test.ts +0 -165
  486. package/src/__tests__/parseHttpErrorBody.test.ts +0 -116
  487. package/src/__tests__/publicInterfaceParity.test.ts +0 -75
  488. package/src/__tests__/serverValueImportsDeclared.test.ts +0 -120
  489. package/src/__tests__/serviceIdentityWhenAnonymous.test.ts +0 -159
  490. package/src/__tests__/serviceTokenWorkloadFallback.test.ts +0 -85
  491. package/src/__tests__/userIdentity.test.ts +0 -143
  492. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
  493. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
  494. package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
  495. package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
  496. package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
  497. package/src/crypto/__tests__/identityLink.test.ts +0 -18
  498. package/src/crypto/__tests__/identityMocks.ts +0 -125
  499. package/src/crypto/__tests__/identityProof.test.ts +0 -81
  500. package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
  501. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
  502. package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
  503. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
  504. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
  505. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
  506. package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
  507. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
  508. package/src/crypto/__tests__/keyManager.test.ts +0 -329
  509. package/src/crypto/__tests__/polyfill.test.ts +0 -109
  510. package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
  511. package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
  512. package/src/crypto/__tests__/registrationPow.test.ts +0 -61
  513. package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
  514. package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
  515. package/src/crypto/__tests__/signedRecord.test.ts +0 -230
  516. package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
  517. package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
  518. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
  519. package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
  520. package/src/i18n/locales/de-DE.json +0 -306
  521. package/src/i18n/locales/es-ES.json +0 -2127
  522. package/src/i18n/locales/ja-JP.json +0 -306
  523. package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
  524. package/src/logger/__tests__/logger.test.ts +0 -207
  525. package/src/mixins/OxyServices.accounts.ts +0 -1330
  526. package/src/mixins/OxyServices.agency.ts +0 -353
  527. package/src/mixins/OxyServices.analytics.ts +0 -53
  528. package/src/mixins/OxyServices.appData.ts +0 -158
  529. package/src/mixins/OxyServices.assets.ts +0 -964
  530. package/src/mixins/OxyServices.auth.ts +0 -2083
  531. package/src/mixins/OxyServices.chains.ts +0 -134
  532. package/src/mixins/OxyServices.civic.ts +0 -945
  533. package/src/mixins/OxyServices.connectedApps.ts +0 -212
  534. package/src/mixins/OxyServices.contacts.ts +0 -73
  535. package/src/mixins/OxyServices.devices.ts +0 -120
  536. package/src/mixins/OxyServices.features.ts +0 -454
  537. package/src/mixins/OxyServices.followGraph.ts +0 -293
  538. package/src/mixins/OxyServices.identity.ts +0 -787
  539. package/src/mixins/OxyServices.identityBackup.ts +0 -250
  540. package/src/mixins/OxyServices.inference.ts +0 -57
  541. package/src/mixins/OxyServices.language.ts +0 -144
  542. package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
  543. package/src/mixins/OxyServices.location.ts +0 -46
  544. package/src/mixins/OxyServices.nodes.ts +0 -337
  545. package/src/mixins/OxyServices.notifications.ts +0 -142
  546. package/src/mixins/OxyServices.payment.ts +0 -163
  547. package/src/mixins/OxyServices.privacy.ts +0 -219
  548. package/src/mixins/OxyServices.reputation.ts +0 -436
  549. package/src/mixins/OxyServices.security.ts +0 -110
  550. package/src/mixins/OxyServices.store.ts +0 -585
  551. package/src/mixins/OxyServices.topics.ts +0 -169
  552. package/src/mixins/OxyServices.user.ts +0 -1208
  553. package/src/mixins/OxyServices.utility.ts +0 -1803
  554. package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
  555. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
  556. package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
  557. package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
  558. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
  559. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
  560. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
  561. package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
  562. package/src/mixins/__tests__/accountEvents.test.ts +0 -158
  563. package/src/mixins/__tests__/accounts.test.ts +0 -727
  564. package/src/mixins/__tests__/agency.test.ts +0 -120
  565. package/src/mixins/__tests__/appData.test.ts +0 -203
  566. package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
  567. package/src/mixins/__tests__/assetUpload.test.ts +0 -191
  568. package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
  569. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
  570. package/src/mixins/__tests__/chains.test.ts +0 -113
  571. package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
  572. package/src/mixins/__tests__/connectedApps.test.ts +0 -146
  573. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
  574. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
  575. package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
  576. package/src/mixins/__tests__/followGraph.test.ts +0 -147
  577. package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
  578. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
  579. package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
  580. package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
  581. package/src/mixins/__tests__/identityBackup.test.ts +0 -315
  582. package/src/mixins/__tests__/identityLink.test.ts +0 -89
  583. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
  584. package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
  585. package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
  586. package/src/mixins/__tests__/notifications.read.test.ts +0 -82
  587. package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
  588. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
  589. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
  590. package/src/mixins/__tests__/reputation.test.ts +0 -522
  591. package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
  592. package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
  593. package/src/mixins/__tests__/store.test.ts +0 -304
  594. package/src/mixins/__tests__/topics.test.ts +0 -155
  595. package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
  596. package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
  597. package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
  598. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
  599. package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
  600. package/src/mixins/index.ts +0 -203
  601. package/src/mixins/mixinHelpers.ts +0 -69
  602. package/src/server/__tests__/auth.test.ts +0 -78
  603. package/src/server/__tests__/capabilityTicket.test.ts +0 -111
  604. package/src/server/__tests__/cors.socket.test.ts +0 -225
  605. package/src/server/__tests__/cors.test.ts +0 -158
  606. package/src/server/__tests__/rateLimit.test.ts +0 -257
  607. package/src/server/__tests__/requesterAssertion.test.ts +0 -359
  608. package/src/server/__tests__/safeFetch.test.ts +0 -232
  609. package/src/server/__tests__/securityHeaders.test.ts +0 -387
  610. package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
  611. package/src/server/__tests__/traffic.test.ts +0 -180
  612. package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
  613. package/src/server/__tests__/userInvalidation.test.ts +0 -203
  614. package/src/server/__tests__/verifySecret.test.ts +0 -40
  615. package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
  616. package/src/server/__tests__/workloadIdentity.test.ts +0 -128
  617. package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
  618. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
  619. package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
  620. package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
  621. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
  622. package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
  623. package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
  624. package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
  625. package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
  626. package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
  627. package/src/session/__tests__/SessionClient.state.test.ts +0 -78
  628. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
  629. package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
  630. package/src/session/__tests__/accountDialogController.test.ts +0 -2502
  631. package/src/session/__tests__/accountDialogShape.test.ts +0 -120
  632. package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
  633. package/src/session/__tests__/authStateStore.test.ts +0 -451
  634. package/src/session/__tests__/deviceDirectory.test.ts +0 -422
  635. package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
  636. package/src/session/__tests__/identityPin.test.ts +0 -131
  637. package/src/session/__tests__/identitySession.test.ts +0 -194
  638. package/src/session/__tests__/projectSessionState.test.ts +0 -105
  639. package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
  640. package/src/session/__tests__/refresh.test.ts +0 -606
  641. package/src/session/__tests__/sessionIntegration.test.ts +0 -209
  642. package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
  643. package/src/utils/__tests__/accountUtils.test.ts +0 -151
  644. package/src/utils/__tests__/activityId.test.ts +0 -45
  645. package/src/utils/__tests__/asyncUtils.test.ts +0 -279
  646. package/src/utils/__tests__/authWebUrl.test.ts +0 -15
  647. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  648. package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
  649. package/src/utils/__tests__/coldBoot.test.ts +0 -496
  650. package/src/utils/__tests__/commonsApproval.test.ts +0 -60
  651. package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
  652. package/src/utils/__tests__/languageUtils.test.ts +0 -244
  653. package/src/utils/__tests__/oauthPkce.test.ts +0 -303
  654. package/src/utils/__tests__/officialOrigins.test.ts +0 -31
  655. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
  656. package/src/utils/__tests__/profileLinks.test.ts +0 -180
  657. package/src/utils/__tests__/redactUrl.test.ts +0 -33
  658. package/src/utils/__tests__/registrableApex.test.ts +0 -62
  659. package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
  660. package/src/utils/__tests__/textNormalization.test.ts +0 -205
  661. package/src/utils/__tests__/validationUtils.test.ts +0 -703
  662. package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
  663. package/src/utils/webauthnOrigin.ts +0 -52
@@ -20,8 +20,8 @@
20
20
  * account` pair) and the two removals an account id cannot name —
21
21
  * `signOutContext` and `signOutPrincipal`;
22
22
  * - the "Sign in with Oxy" device flow (same-device shared-keychain via
23
- * `oxyServices.signInWithSharedIdentity`, else the cross-device QR handoff
24
- * via `startCommonsSignIn` → poll → `claimSessionByToken`);
23
+ * `oxy.auth.signInWithSharedIdentity`, else the cross-device QR handoff
24
+ * via `oxy.auth.commons.start` → poll → `oxy.auth.claimSession`);
25
25
  * - AUTOMATIC delivery selection for that flow (issue #691): the user presses
26
26
  * ONE primary action and the controller — not the user — picks how the
27
27
  * request reaches their Commons identity, by gathering the facts
@@ -37,10 +37,10 @@
37
37
  * (native only, via the injected `canOpenApp` probe), so the QR view can
38
38
  * offer a "Get Commons" fallback instead of a same-device dead end.
39
39
  *
40
- * Sign-in is passkey (WebAuthn) or the Commons QR / shared-keychain handoff —
41
- * password, social login, and 2FA were removed ecosystem-wide. Account
42
- * creation (`signup` view) is the same two identity backends: a passkey
43
- * ceremony on web, or a Commons-created identity.
40
+ * Sign-in is by email (a code or a link), an optional password and an
41
+ * optional authenticator, or the Commons QR / shared-keychain handoff. Account
42
+ * creation (`signup` view) is a username and a confirmed email, or a
43
+ * Commons-created identity.
44
44
  *
45
45
  * The controller owns NO surface PRESENTATION: whether the account dialog is
46
46
  * mounted, visible, or dismissed is the job of the shared surface stack
@@ -59,7 +59,7 @@ import { extractErrorStatus } from '../utils/errorUtils';
59
59
  import type { SessionClient } from './SessionClient';
60
60
  import { getSocketIO, type MinimalSocket, type SocketIOFactory } from './socketLoader';
61
61
  import { resolveActiveContext, type DeviceContext } from './deviceDirectory';
62
- import type { CommonsSignInHandle } from '../mixins/OxyServices.auth';
62
+ import type { CommonsSignInHandle } from '../api/auth';
63
63
  import {
64
64
  pushTargetsFromDelivery,
65
65
  selectCommonsDelivery,
@@ -606,9 +606,9 @@ export class AccountDialogController {
606
606
  // has returned; `ensureActiveToken` plants it async later), so the
607
607
  // device-state subscription alone cannot observe the signed-out → signed-in
608
608
  // edge. Observe the SDK-canonical readiness signal directly — a change to
609
- // `oxyServices.getAccessToken()`, the `hasAccessToken` term of
609
+ // `oxy.session.accessToken`, the `hasAccessToken` term of
610
610
  // `OxyContext.canUsePrivateApi`.
611
- this.unsubscribeTokens = this.oxyServices.onTokensChanged(() => {
611
+ this.unsubscribeTokens = this.oxyServices.session.onChange(() => {
612
612
  this.reconcileAuth();
613
613
  });
614
614
  // Initial projection is device-only. `refresh()` fetches the graph IFF a
@@ -652,7 +652,7 @@ export class AccountDialogController {
652
652
  * Whether a PRIVATE endpoint may be called right now. Mirrors the
653
653
  * `hasAccessToken` term of `OxyContext.canUsePrivateApi`
654
654
  * (`authResolved && isAuthenticated && tokenReady && hasAccessToken`, where
655
- * `hasAccessToken = Boolean(oxyServices.getAccessToken())`): a planted bearer
655
+ * `hasAccessToken = Boolean(oxy.session.accessToken)`): a planted bearer
656
656
  * is the only term that decides whether a request carries auth — the other
657
657
  * three are provider render-lifecycle gates with no headless equivalent.
658
658
  *
@@ -663,7 +663,7 @@ export class AccountDialogController {
663
663
  * on this.
664
664
  */
665
665
  private isAuthenticated(): boolean {
666
- return Boolean(this.oxyServices.getAccessToken());
666
+ return Boolean(this.oxyServices.session.accessToken);
667
667
  }
668
668
 
669
669
  /**
@@ -755,7 +755,7 @@ export class AccountDialogController {
755
755
  this.setView('add');
756
756
  }
757
757
 
758
- /** Switch to the "create account" view (passkey / Commons signup entry). */
758
+ /** Switch to the "create account" view (email / Commons signup entry). */
759
759
  startSignup(): void {
760
760
  this.setView('signup');
761
761
  }
@@ -1030,7 +1030,7 @@ export class AccountDialogController {
1030
1030
  try {
1031
1031
  // Minted WITHOUT planting the bearer: `completeSignIn` installs it only if
1032
1032
  // this attempt is still the current one when the mint returns.
1033
- const session = await this.oxyServices.signInWithSharedIdentity({ plantTokens: false });
1033
+ const session = await this.oxyServices.auth.signInWithSharedIdentity({ plantTokens: false });
1034
1034
  if (!this.isCurrentAttempt(attempt)) return;
1035
1035
  if (session) {
1036
1036
  await this.completeSignIn(attempt, session, session.user);
@@ -1132,7 +1132,7 @@ export class AccountDialogController {
1132
1132
  this.setSignIn({ ...IDLE_SIGN_IN_FACTS, phase: 'starting' });
1133
1133
  let handle: CommonsSignInHandle;
1134
1134
  try {
1135
- handle = await this.oxyServices.startCommonsSignIn({ clientId: this.clientId });
1135
+ handle = await this.oxyServices.auth.commons.start({ clientId: this.clientId });
1136
1136
  } catch (error) {
1137
1137
  if (!this.isCurrentAttempt(attempt)) return null;
1138
1138
  this.failSignIn(requestFailureReason(error), errorMessage(error));
@@ -1241,7 +1241,7 @@ export class AccountDialogController {
1241
1241
  if (this.platform === 'mobile' && commonsAvailable) return 0;
1242
1242
  if (!this.isAuthenticated()) return 0;
1243
1243
  try {
1244
- const result = await this.oxyServices.deliverCommonsSignIn(authorizeCode);
1244
+ const result = await this.oxyServices.auth.commons.deliver(authorizeCode);
1245
1245
  // `delivered: false` with `targets > 0` is a transport failure, not a
1246
1246
  // reachable install — the shared helper owns that rule so the surface
1247
1247
  // can never park a user on "check your phone" for a push that failed.
@@ -1350,7 +1350,7 @@ export class AccountDialogController {
1350
1350
  */
1351
1351
  private async withdrawRequest(authorizeCode: string): Promise<void> {
1352
1352
  try {
1353
- await this.oxyServices.denyCommonsSignIn(authorizeCode);
1353
+ await this.oxyServices.auth.commons.deny(authorizeCode);
1354
1354
  } catch (error) {
1355
1355
  logger.debug(
1356
1356
  '[AccountDialogController] request withdrawal failed',
@@ -1390,7 +1390,7 @@ export class AccountDialogController {
1390
1390
  return;
1391
1391
  }
1392
1392
  try {
1393
- const status = await this.oxyServices.pollCommonsSignIn(sessionToken);
1393
+ const status = await this.oxyServices.auth.commons.poll(sessionToken);
1394
1394
  if (this.signInToken !== sessionToken) return; // cancelled mid-request
1395
1395
  // Delivery PROGRESS first: it is reported alongside every status, and
1396
1396
  // recording it before the terminal branches means a poll that also
@@ -1457,7 +1457,7 @@ export class AccountDialogController {
1457
1457
  try {
1458
1458
  // Claimed WITHOUT planting the bearer — `completeSignIn` installs it only
1459
1459
  // if the user is still waiting for this attempt when the claim returns.
1460
- claimed = await this.oxyServices.claimSessionByToken(sessionToken, { plantTokens: false });
1460
+ claimed = await this.oxyServices.auth.claimSession(sessionToken, { plantTokens: false });
1461
1461
  } catch (error) {
1462
1462
  if (!this.isCurrentAttempt(attempt)) return;
1463
1463
  this.failSignIn('claim-failed', errorMessage(error));
@@ -1525,14 +1525,14 @@ export class AccountDialogController {
1525
1525
  user: MinimalUserData,
1526
1526
  ): Promise<void> {
1527
1527
  if (!this.isCurrentAttempt(attempt)) return;
1528
- const previousToken = this.oxyServices.getAccessToken();
1528
+ const previousToken = this.oxyServices.session.accessToken;
1529
1529
  try {
1530
- if (session.accessToken) this.oxyServices.setTokens(session.accessToken);
1530
+ if (session.accessToken) this.oxyServices.session.setAccessToken(session.accessToken);
1531
1531
  await this.commitAuthorizedSession(session, user);
1532
1532
  } catch (error) {
1533
- if (session.accessToken && this.oxyServices.getAccessToken() === session.accessToken) {
1534
- if (previousToken) this.oxyServices.setTokens(previousToken);
1535
- else this.oxyServices.clearTokens();
1533
+ if (session.accessToken && this.oxyServices.session.accessToken === session.accessToken) {
1534
+ if (previousToken) this.oxyServices.session.setAccessToken(previousToken);
1535
+ else this.oxyServices.session.clear();
1536
1536
  }
1537
1537
  throw error;
1538
1538
  }
@@ -1606,7 +1606,7 @@ export class AccountDialogController {
1606
1606
  if (!socketFactory || this.signInToken !== sessionToken) return;
1607
1607
  let socket: MinimalSocket;
1608
1608
  try {
1609
- socket = socketFactory(`${this.oxyServices.getBaseURL()}${AUTH_SESSION_NAMESPACE}`, {
1609
+ socket = socketFactory(`${this.oxyServices.baseURL}${AUTH_SESSION_NAMESPACE}`, {
1610
1610
  transports: ['websocket'],
1611
1611
  autoConnect: true,
1612
1612
  reconnection: true,
@@ -21,7 +21,7 @@ import type {
21
21
  AccountRelationship,
22
22
  AccountKind,
23
23
  AccountMember,
24
- } from '../mixins/OxyServices.accounts';
24
+ } from '../api/accounts';
25
25
 
26
26
  /**
27
27
  * Whether the caller can BECOME this account — the one question every account
@@ -25,9 +25,10 @@ import { logger } from '../logger';
25
25
  * `sessionId` + `userId` identify the owning device session and active account.
26
26
  * `deviceId` + `deviceSecret` are the zero-cookie mint credential: the client
27
27
  * presents BOTH at `POST /session/device/token` — the secret is the proof, the
28
- * deviceId selects the device doc. The secret is rotated in-use: the mint returns
29
- * `nextDeviceSecret`, which the cold boot / re-mint handler persist BEFORE
30
- * planting the minted access token (multi-tab anti-loss).
28
+ * deviceId selects the device doc. The mint returns `nextDeviceSecret` (today the
29
+ * presented secret, unchanged — the server never rotates a holder's
30
+ * credential), which the cold boot / re-mint handler persist BEFORE planting
31
+ * the minted access token.
31
32
  *
32
33
  * `accessToken` + `expiresAt` are OPTIONAL warm-boot fields. Persisting them lets
33
34
  * the cold boot plant a still-valid access token on the very first paint WITHOUT
@@ -49,9 +50,9 @@ export interface PersistedAuthState {
49
50
  */
50
51
  deviceId?: string;
51
52
  /**
52
- * The rotating device secret (zero-cookie transport). Possession of it mints a
53
- * short access token for the device's active account via
54
- * `POST /session/device/token`. Rotated in-use.
53
+ * This holder's device secret (zero-cookie transport). Possession of it mints
54
+ * a short access token for the device's active account via
55
+ * `POST /session/device/token`. Stable: the server never rotates it.
55
56
  */
56
57
  deviceSecret?: string;
57
58
  /** Optional warm-boot access token (short-lived; see interface docs). */
@@ -263,8 +264,8 @@ function composeState(durableRaw: string | null, warmRaw: string | null): Persis
263
264
  // New split layout: the warm key is authoritative for the token fields.
264
265
  // Drop anything the durable blob may have carried, then overlay the warm
265
266
  // values (a warm key with no token → the session simply has no warm token).
266
- delete state.accessToken;
267
- delete state.expiresAt;
267
+ Reflect.deleteProperty(state, 'accessToken');
268
+ Reflect.deleteProperty(state, 'expiresAt');
268
269
  const warm = parseWarmToken(warmRaw);
269
270
  if (warm?.accessToken) {
270
271
  state.accessToken = warm.accessToken;
@@ -154,7 +154,7 @@ export async function establishIdentitySession(args: {
154
154
  return null;
155
155
  }
156
156
 
157
- const { challenge } = await oxy.requestChallenge(publicKey, requestOptions);
157
+ const { challenge } = await oxy.auth.requestChallenge(publicKey, requestOptions);
158
158
  const signed = await signChallengeOf(binding)(challenge);
159
159
  if (signed.publicKey.toLowerCase() !== publicKey.toLowerCase()) {
160
160
  // The signer disagrees with the key we resolved a challenge for — the
@@ -164,7 +164,7 @@ export async function establishIdentitySession(args: {
164
164
  }
165
165
 
166
166
  // `signed.challenge` carries the SIGNATURE (mirrors `signChallengeWithSharedKey`).
167
- const session = await oxy.verifyChallenge(
167
+ const session = await oxy.auth.verifyChallenge(
168
168
  signed.publicKey,
169
169
  challenge,
170
170
  signed.challenge,
@@ -177,7 +177,7 @@ export async function establishIdentitySession(args: {
177
177
  return null;
178
178
  }
179
179
 
180
- // Persist the rotating device credential so later boots re-mint through the
180
+ // Persist the device credential so later boots re-mint through the
181
181
  // fast `POST /session/device/token` lane instead of re-signing a challenge.
182
182
  if (session.deviceId && session.deviceSecret) {
183
183
  await store.save({
@@ -0,0 +1,210 @@
1
+ /**
2
+ * `@oxy.so/core/session` — the device-first session machinery.
3
+ *
4
+ * The multi-account `SessionClient`, the headless account dialog, the persisted
5
+ * auth-state stores, the token re-mint handler and scheduler, and the cold
6
+ * boot. `@oxy.so/services` builds `OxyProvider` on it; an app that only calls
7
+ * the API with a token it already has never needs it.
8
+ */
9
+
10
+ // Session code reaches the identity key (identity-bound sessions), so the
11
+ // crypto shim goes first — see `../crypto/polyfill`.
12
+ import '../crypto/polyfill';
13
+
14
+ export { DeviceManager } from '../utils/deviceManager';
15
+ export type { DeviceFingerprint, StoredDeviceInfo } from '../utils/deviceManager';
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Session sync (device-scoped multi-account session client)
19
+ // ---------------------------------------------------------------------------
20
+ export { SessionClient } from './SessionClient';
21
+ export type { TokenTransport, SessionClientHost, SessionClientOptions, DeviceCredential, SessionStateOrigin } from './SessionClient';
22
+ // Injectable for tests/specialized hosts; ordinary consumers use core's lazy
23
+ // transport and do not pull socket.io-client into their initial module graph.
24
+ export type { SocketIOFactory, MinimalSocket } from './socketLoader';
25
+
26
+ // Shared SessionClient integration layer: the host adapter, the pure
27
+ // DeviceSessionState projection helpers, and the client factory are defined
28
+ // ONCE here so every `@oxy.so/services` platform variant reuses them instead of
29
+ // duplicating a local copy. Each consumer supplies its own `TokenTransport`
30
+ // (native vs. web mint strategies differ) to `createSessionClient`.
31
+ export { createSessionClientHost } from './sessionClientHost';
32
+ export { createSessionClient } from './createSessionClient';
33
+ export {
34
+ deviceStateToClientSessions,
35
+ activeSessionIdOf,
36
+ activeUserOf,
37
+ accountIdsOf,
38
+ } from './projectSessionState';
39
+
40
+ // Pure projections over the device DIRECTORY (`GET /session/device/directory`,
41
+ // ADR 0002) — the read model that keeps the actor (the human who authenticated)
42
+ // and the subject (the account being acted as) apart. The flat
43
+ // `DeviceSessionState` collapses them into one row, so it can neither tell
44
+ // "signed in as an org" from "a person operating that org" nor hold two people
45
+ // reaching the same org on one device.
46
+ // `canActivateContext` is the switchability question — `available` alone, never
47
+ // composed with `onDevice`, which is a different fact in both directions.
48
+ // `projectDevicePrincipals` is the switcher's shape: people, each with what
49
+ // they may become. Grouped rather than flat because the same organization
50
+ // reached through two people is TWO rows under two humans, which a list keyed
51
+ // by account cannot say.
52
+ export {
53
+ canActivateContext,
54
+ directoryDisplayName,
55
+ directoryHandle,
56
+ projectDevicePrincipals,
57
+ resolveActiveContext,
58
+ resolveDeviceContext,
59
+ } from './deviceDirectory';
60
+ export type {
61
+ DeviceContext,
62
+ DeviceContextActor,
63
+ DeviceContextSubject,
64
+ DevicePrincipalGroup,
65
+ } from './deviceDirectory';
66
+
67
+ // The switcher's RENDER model over that projection — names, handles and avatar
68
+ // URLs resolved once. Shared by `@oxy.so/services`' account dialog and the
69
+ // auth.oxy.so chooser so the two cannot drift, the same reason the flat
70
+ // projection lived here before it.
71
+ export { buildSwitcherRows, showsPrincipalHeaders } from './deviceSwitcherRows';
72
+ export type {
73
+ ResolveAvatarUrl,
74
+ SwitcherContextRow,
75
+ SwitcherPrincipalRow,
76
+ } from './deviceSwitcherRows';
77
+
78
+ // The switch-target predicates over the account GRAPH — a list of accounts to
79
+ // manage, not the device's list of identities to become (that is the directory
80
+ // above). `isSwitchTargetAccount` is the structural half ("is this kind
81
+ // switchable at all?"); `canSwitchIntoAccount` adds the caller's
82
+ // `account:act_as` permission. Exported so the surfaces that render
83
+ // `AccountNode`s — the Console workspace switcher, managed-accounts rows — ask
84
+ // the SAME questions instead of testing a kind literal.
85
+ export {
86
+ isSwitchTargetAccount,
87
+ canSwitchIntoAccount,
88
+ } from './accountSwitchTargets';
89
+
90
+ // The service/agent counterpart to the human switch predicates above. Kept on
91
+ // its own semantic seam because `bot` is delegable but never human-switchable.
92
+ export { resolveAccountDelegationAccess } from './accountDelegationAccess';
93
+ export type {
94
+ AccountDelegationAccess,
95
+ AccountDelegationNode,
96
+ } from './accountDelegationAccess';
97
+
98
+ // Headless controller for the unified account dialog. Framework-agnostic
99
+ // state machine + subscribe/getSnapshot store (bind via `useSyncExternalStore`)
100
+ // — sign-in runs through `oxy.auth` (email, password, authenticator, the
101
+ // Commons QR / shared-keychain handoff). Reuses `SessionClient.switchAccount` /
102
+ // `oxy.accounts.actAs` for the uniform switch.
103
+ export {
104
+ AccountDialogController,
105
+ createAccountDialogController,
106
+ } from './accountDialogController';
107
+ export type {
108
+ AccountDialogControllerOptions,
109
+ AccountDialogSnapshot,
110
+ AccountDialogView,
111
+ CommonsAvailability,
112
+ ContextChoiceOutcome,
113
+ SignInFailureReason,
114
+ SignInFlowPhase,
115
+ SignInFlowState,
116
+ SignInProgress,
117
+ } from './accountDialogController';
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // Device-first session machinery (zero-cookie transport).
121
+ // Persisted auth-state store, the unified re-mint handler + scheduler, and the
122
+ // cold-boot runner. Built ON the `runColdBoot` primitive + `SessionClient`. The
123
+ // device credential is `deviceId` + `deviceSecret`; the access token is re-minted
124
+ // via `POST /session/device/token`.
125
+ // ---------------------------------------------------------------------------
126
+ export {
127
+ createWebAuthStateStore,
128
+ createNativeAuthStateStore,
129
+ createMemoryAuthStateStore,
130
+ AUTH_STATE_STORAGE_KEY,
131
+ } from './authStateStore';
132
+ export type {
133
+ PersistedAuthState,
134
+ AuthStateStore,
135
+ NativeKeyValueStorage,
136
+ } from './authStateStore';
137
+
138
+ // The shared NATIVE DeviceSession credential — how several official apps on one
139
+ // device end up on ONE `DeviceSession` and therefore one active context. It is an
140
+ // ordinary revocable `deviceId` + `deviceSecret`, deliberately NOT the
141
+ // Commons private identity key: an app that only needs a session must never be
142
+ // handed the key that signs identity approvals.
143
+ export {
144
+ createSharedMirroringAuthStateStore,
145
+ decideSharedDeviceJoin,
146
+ decideSharedDevicePublish,
147
+ normalizeSharedDeviceSessionRead,
148
+ publishProvenDeviceCredential,
149
+ readLocalDeviceCredential,
150
+ } from './sharedDeviceCredential';
151
+ export type {
152
+ SharedDeviceCredential,
153
+ SharedDeviceCredentialRead,
154
+ SharedDeviceCredentialStore,
155
+ SharedDeviceJoinDecision,
156
+ SharedDeviceJoinSkipReason,
157
+ SharedDevicePublishDecision,
158
+ SharedDevicePublishOutcome,
159
+ SharedDevicePublishSkipReason,
160
+ } from './sharedDeviceCredential';
161
+
162
+ // Identity-bound sessions (the identity vault). The pin is the durable
163
+ // `{publicKey, accountId}` binding between this device's PRIMARY identity key
164
+ // and the account it authenticates as; it is what keeps such a client from
165
+ // following the device's mutable `activeAccountId`.
166
+ export {
167
+ createWebIdentityPinStore,
168
+ createNativeIdentityPinStore,
169
+ createMemoryIdentityPinStore,
170
+ identityPinMatches,
171
+ IDENTITY_PIN_STORAGE_KEY,
172
+ } from './identityPin';
173
+ export type { IdentityPin, IdentityPinStore } from './identityPin';
174
+ export {
175
+ resolveIdentityPin,
176
+ establishIdentitySession,
177
+ } from './identitySession';
178
+ export type {
179
+ IdentityBinding,
180
+ IdentityRequestOptions,
181
+ EstablishedIdentitySession,
182
+ } from './identitySession';
183
+ export {
184
+ refreshPersistedSession,
185
+ refreshDeviceSecretArm,
186
+ createAuthRefreshHandler,
187
+ installAuthRefreshHandler,
188
+ startTokenRefreshScheduler,
189
+ TOKEN_REFRESH_LEAD_MS,
190
+ } from './refresh';
191
+ export type { RefreshDeps, TokenRefreshSchedulerHandle, DeviceSecretMintOutcome } from './refresh';
192
+
193
+ export { runSessionColdBoot } from '../boot/sessionColdBoot';
194
+ export type {
195
+ RunSessionColdBootOptions,
196
+ SessionMode,
197
+ SignedOutReason,
198
+ DeviceBootSession,
199
+ } from '../boot/sessionColdBoot';
200
+
201
+ export { runColdBoot } from '../utils/coldBoot';
202
+ export type {
203
+ ColdBootStep,
204
+ ColdBootStepResult,
205
+ ColdBootSession,
206
+ ColdBootSkip,
207
+ ColdBootOutcome,
208
+ RunColdBootOptions,
209
+ } from '../utils/coldBoot';
210
+
@@ -164,8 +164,8 @@ export async function refreshDeviceSecretArm(deps: {
164
164
  }): Promise<DeviceSecretMintOutcome> {
165
165
  const { oxy, store } = deps;
166
166
  const pin = deps.pin ?? null;
167
- return oxy.httpService.runSingleFlightDeviceSecretMint(async () => {
168
- const epoch = oxy.httpService.getSessionEpoch();
167
+ return oxy.http.runSingleFlightDeviceSecretMint(async () => {
168
+ const epoch = oxy.http.getSessionEpoch();
169
169
  const persisted = await store.load();
170
170
  if (!persisted?.deviceId || !persisted?.deviceSecret) {
171
171
  return { status: 'no-secret' };
@@ -176,10 +176,10 @@ export async function refreshDeviceSecretArm(deps: {
176
176
  // Unpinned callers pass NO third argument at all, so the account-mode call
177
177
  // shape (and therefore the request body) is untouched by this feature.
178
178
  mint = pin
179
- ? await oxy.mintFromDeviceSecret(persisted.deviceId, persisted.deviceSecret, {
179
+ ? await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret, {
180
180
  accountId: pin.accountId,
181
181
  })
182
- : await oxy.mintFromDeviceSecret(persisted.deviceId, persisted.deviceSecret);
182
+ : await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret);
183
183
  } catch (error) {
184
184
  // 429 keeps the credential like any other transient failure — the secret
185
185
  // was never judged — but it must NOT retry on the transient cadence. The
@@ -190,7 +190,7 @@ export async function refreshDeviceSecretArm(deps: {
190
190
  // requests. Telling HttpService lengthens the next cooldown to one attempt
191
191
  // per limiter window, which lets the budget drain and the session heal.
192
192
  if (extractErrorStatus(error) === 429) {
193
- oxy.httpService.noteRefreshRateLimited();
193
+ oxy.http.noteRefreshRateLimited();
194
194
  return { status: 'transient' };
195
195
  }
196
196
  if (extractErrorStatus(error) === 401) {
@@ -229,11 +229,11 @@ export async function refreshDeviceSecretArm(deps: {
229
229
  expiresAt: mint.expiresAt,
230
230
  ...(bound ? { sessionId: bound.sessionId, userId: bound.accountId } : {}),
231
231
  };
232
- if (oxy.httpService.getSessionEpoch() !== epoch) {
233
- // Signed out while minting. The server has rotated the secret, so a store
234
- // that still holds the presented one must learn the rotation (the
235
- // token-null lane keeps the store so a reload can restore); a store the
236
- // sign-out cleared must NOT be refilled. Either way, plant nothing.
232
+ if (oxy.http.getSessionEpoch() !== epoch) {
233
+ // Signed out while minting. A store that still holds the presented
234
+ // secret takes the server's `nextDeviceSecret` (the token-null lane keeps
235
+ // the store so a reload can restore); a store the sign-out cleared must
236
+ // NOT be refilled. Either way, plant nothing.
237
237
  const current = await store.load();
238
238
  if (current?.deviceId === persisted.deviceId && current.deviceSecret === persisted.deviceSecret) {
239
239
  await store.save(next);
@@ -246,10 +246,10 @@ export async function refreshDeviceSecretArm(deps: {
246
246
  if (!persistedOk) {
247
247
  return { status: 'persist-failed' };
248
248
  }
249
- if (oxy.httpService.getSessionEpoch() !== epoch) {
249
+ if (oxy.http.getSessionEpoch() !== epoch) {
250
250
  return { status: 'session-ended' };
251
251
  }
252
- oxy.setTokens(mint.accessToken);
252
+ oxy.session.setAccessToken(mint.accessToken);
253
253
  return {
254
254
  status: 'ok',
255
255
  token: mint.accessToken,
@@ -287,7 +287,7 @@ export async function refreshPersistedSession(deps: RefreshDeps): Promise<string
287
287
  const identity = deps.identity ?? null;
288
288
  // The shared keychain is never an identity-bound client's recovery path.
289
289
  const allowSharedKeyFallback = identity ? false : (deps.allowSharedKeyFallback ?? isNative());
290
- const epoch = oxy.httpService.getSessionEpoch();
290
+ const epoch = oxy.http.getSessionEpoch();
291
291
  // Resolved per call: a re-established identity session can move the pin, and a
292
292
  // replaced/removed local key clears it (in which case arm 1 must NOT mint —
293
293
  // an unpinned mint would adopt whatever account the device switched to).
@@ -324,12 +324,18 @@ export async function refreshPersistedSession(deps: RefreshDeps): Promise<string
324
324
  // 401: secret diverged or no live session. When a key-based arm 2 can still
325
325
  // recover (native shared key, or an identity-bound client's own primary
326
326
  // key) drop ONLY the secret and keep the deviceId; otherwise (web) the
327
- // session is over — clear the store.
327
+ // session is over.
328
328
  const persisted = await store.load();
329
329
  if (allowSharedKeyFallback || identity) {
330
330
  if (persisted) {
331
331
  await store.save({ ...persisted, deviceSecret: undefined });
332
332
  }
333
+ } else if (arm1.status === 'no-session' && persisted?.deviceId && persisted.deviceSecret) {
334
+ // Web, a credential the server still recognises: this origin stays a
335
+ // holder of the browser's device (ADR 0029 D2) — the next sign-in in any
336
+ // app lands on it, and this app follows without opening the bridge
337
+ // again. Only the session fields go.
338
+ await store.save({ sessionId: '', userId: '', deviceId: persisted.deviceId, deviceSecret: persisted.deviceSecret });
333
339
  } else {
334
340
  await store.clear();
335
341
  }
@@ -353,14 +359,14 @@ export async function refreshPersistedSession(deps: RefreshDeps): Promise<string
353
359
 
354
360
  // Never after a sign-out: the shared keychain holds an identity KEY, not a
355
361
  // session, and using it here would sign the user straight back in.
356
- if (allowSharedKeyFallback && !oxy.httpService.hasSessionEnded()) {
362
+ if (allowSharedKeyFallback && !oxy.http.hasSessionEnded()) {
357
363
  try {
358
364
  // Planted here, not by the sign-in: a sign-out that lands while the
359
365
  // challenge round-trips must win, or the shared keychain signs the user
360
366
  // straight back in.
361
- const session = await oxy.signInWithSharedIdentity({ plantTokens: false });
367
+ const session = await oxy.auth.signInWithSharedIdentity({ plantTokens: false });
362
368
  if (session?.accessToken) {
363
- if (oxy.httpService.getSessionEpoch() !== epoch) {
369
+ if (oxy.http.getSessionEpoch() !== epoch) {
364
370
  return null;
365
371
  }
366
372
  // Repopulate the fast device-secret lane from the shared-key re-mint.
@@ -374,10 +380,10 @@ export async function refreshPersistedSession(deps: RefreshDeps): Promise<string
374
380
  expiresAt: session.expiresAt,
375
381
  });
376
382
  }
377
- if (oxy.httpService.getSessionEpoch() !== epoch) {
383
+ if (oxy.http.getSessionEpoch() !== epoch) {
378
384
  return null;
379
385
  }
380
- oxy.setTokens(session.accessToken);
386
+ oxy.session.setAccessToken(session.accessToken);
381
387
  return session.accessToken;
382
388
  }
383
389
  } catch (error) {
@@ -438,9 +444,9 @@ export function createAuthRefreshHandler(deps: RefreshDeps): AuthRefreshHandler
438
444
  * Returns a disposer that removes it.
439
445
  */
440
446
  export function installAuthRefreshHandler(deps: RefreshDeps): () => void {
441
- deps.oxy.httpService.setAuthRefreshHandler(createAuthRefreshHandler(deps));
447
+ deps.oxy.http.setAuthRefreshHandler(createAuthRefreshHandler(deps));
442
448
  return () => {
443
- deps.oxy.httpService.setAuthRefreshHandler(null);
449
+ deps.oxy.http.setAuthRefreshHandler(null);
444
450
  };
445
451
  }
446
452
 
@@ -491,10 +497,10 @@ export function startTokenRefreshScheduler(oxy: OxyServices): TokenRefreshSchedu
491
497
  /** Schedule the next re-mint from the current token's expiry (the healthy path). */
492
498
  const scheduleFromExpiry = (): void => {
493
499
  clearTimer();
494
- if (disposed || !oxy.getAccessToken()) {
500
+ if (disposed || !oxy.session.accessToken) {
495
501
  return;
496
502
  }
497
- const expSeconds = oxy.getAccessTokenExpiry();
503
+ const expSeconds = oxy.session.accessTokenExpiry;
498
504
  if (expSeconds === null) {
499
505
  return;
500
506
  }
@@ -502,7 +508,7 @@ export function startTokenRefreshScheduler(oxy: OxyServices): TokenRefreshSchedu
502
508
  // The server already answered this token's refresh with this very token:
503
509
  // asking again before `exp` only gets it back again. Ask just after expiry,
504
510
  // when the server rotates (see REMINT_AFTER_EXPIRY_MS).
505
- if (untilExpiryMs > 0 && oxy.httpService.isAwaitingCurrentTokenExpiry?.()) {
511
+ if (untilExpiryMs > 0 && oxy.http.isAwaitingCurrentTokenExpiry?.()) {
506
512
  armTimer(untilExpiryMs + REMINT_AFTER_EXPIRY_MS);
507
513
  return;
508
514
  }
@@ -515,11 +521,11 @@ export function startTokenRefreshScheduler(oxy: OxyServices): TokenRefreshSchedu
515
521
  clearTimer();
516
522
  // Another lane (a request-time preflight) already asked, and the server
517
523
  // answered with this same token: re-arm for just past expiry instead.
518
- if (oxy.httpService.isAwaitingCurrentTokenExpiry?.()) {
524
+ if (oxy.http.isAwaitingCurrentTokenExpiry?.()) {
519
525
  scheduleFromExpiry();
520
526
  return;
521
527
  }
522
- void oxy.httpService.refreshAccessToken('preflight')
528
+ void oxy.http.refreshAccessToken('preflight')
523
529
  .then((token) => Boolean(token))
524
530
  .catch(() => false)
525
531
  .then((ok) => {
@@ -548,10 +554,10 @@ export function startTokenRefreshScheduler(oxy: OxyServices): TokenRefreshSchedu
548
554
  };
549
555
 
550
556
  const onFocus = (): void => {
551
- if (disposed || !oxy.getAccessToken()) {
557
+ if (disposed || !oxy.session.accessToken) {
552
558
  return;
553
559
  }
554
- const expSeconds = oxy.getAccessTokenExpiry();
560
+ const expSeconds = oxy.session.accessTokenExpiry;
555
561
  if (expSeconds === null) {
556
562
  return;
557
563
  }
@@ -566,8 +572,8 @@ export function startTokenRefreshScheduler(oxy: OxyServices): TokenRefreshSchedu
566
572
  // Re-arm only on a token that actually CHANGED. The mint plants the token it
567
573
  // returns even when that is the token already held, and treating the repeat
568
574
  // as new re-armed from an in-lead-window expiry, i.e. at the 1s floor.
569
- let lastSeenToken = oxy.getAccessToken();
570
- const unsubscribeTokens = oxy.onTokensChanged((token) => {
575
+ let lastSeenToken = oxy.session.accessToken;
576
+ const unsubscribeTokens = oxy.session.onChange((token) => {
571
577
  if (disposed || token === lastSeenToken) {
572
578
  return;
573
579
  }
@@ -22,12 +22,12 @@ export function createSessionClientHost(
22
22
  let currentAccountId: string | null = null;
23
23
  let deviceCredential: DeviceCredential | null = null;
24
24
  return {
25
- makeRequest: (method, url, data, options) => oxyServices.makeRequest(method, url, data, options),
26
- getBaseURL: () => oxyServices.getBaseURL(),
27
- getAccessToken: () => oxyServices.getAccessToken(),
25
+ makeRequest: (method, url, data, options) => oxyServices.request(method, url, data, options),
26
+ getBaseURL: () => oxyServices.baseURL,
27
+ getAccessToken: () => oxyServices.session.accessToken,
28
28
  getDeviceCredential: () => deviceCredential,
29
- onTokensChanged: (listener) => oxyServices.onTokensChanged(listener),
30
- setTokens: (accessToken) => oxyServices.setTokens(accessToken),
29
+ onTokensChanged: (listener) => oxyServices.session.onChange(listener),
30
+ setTokens: (accessToken) => oxyServices.session.setAccessToken(accessToken),
31
31
  getCurrentAccountId: () => currentAccountId,
32
32
  setCurrentAccountId: (id) => {
33
33
  currentAccountId = id;