@oxy.so/core 1.18.0 → 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 (662) hide show
  1. package/README.md +13 -7
  2. package/dist/cjs/HttpService.js +189 -112
  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 +190 -113
  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 +47 -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 -1
  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 +201 -132
  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 -1
  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 -1440
  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 -1400
  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 -965
  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__/serviceTokenWorkloadFallback.test.ts +0 -85
  490. package/src/__tests__/userIdentity.test.ts +0 -143
  491. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
  492. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
  493. package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
  494. package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
  495. package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
  496. package/src/crypto/__tests__/identityLink.test.ts +0 -18
  497. package/src/crypto/__tests__/identityMocks.ts +0 -125
  498. package/src/crypto/__tests__/identityProof.test.ts +0 -81
  499. package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
  500. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
  501. package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
  502. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
  503. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
  504. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
  505. package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
  506. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
  507. package/src/crypto/__tests__/keyManager.test.ts +0 -329
  508. package/src/crypto/__tests__/polyfill.test.ts +0 -109
  509. package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
  510. package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
  511. package/src/crypto/__tests__/registrationPow.test.ts +0 -61
  512. package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
  513. package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
  514. package/src/crypto/__tests__/signedRecord.test.ts +0 -230
  515. package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
  516. package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
  517. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
  518. package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
  519. package/src/i18n/locales/de-DE.json +0 -306
  520. package/src/i18n/locales/es-ES.json +0 -2127
  521. package/src/i18n/locales/ja-JP.json +0 -306
  522. package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
  523. package/src/logger/__tests__/logger.test.ts +0 -207
  524. package/src/mixins/OxyServices.accounts.ts +0 -1330
  525. package/src/mixins/OxyServices.agency.ts +0 -353
  526. package/src/mixins/OxyServices.analytics.ts +0 -53
  527. package/src/mixins/OxyServices.appData.ts +0 -158
  528. package/src/mixins/OxyServices.assets.ts +0 -964
  529. package/src/mixins/OxyServices.auth.ts +0 -2028
  530. package/src/mixins/OxyServices.chains.ts +0 -134
  531. package/src/mixins/OxyServices.civic.ts +0 -945
  532. package/src/mixins/OxyServices.connectedApps.ts +0 -212
  533. package/src/mixins/OxyServices.contacts.ts +0 -73
  534. package/src/mixins/OxyServices.devices.ts +0 -120
  535. package/src/mixins/OxyServices.features.ts +0 -454
  536. package/src/mixins/OxyServices.followGraph.ts +0 -293
  537. package/src/mixins/OxyServices.identity.ts +0 -787
  538. package/src/mixins/OxyServices.identityBackup.ts +0 -250
  539. package/src/mixins/OxyServices.inference.ts +0 -57
  540. package/src/mixins/OxyServices.language.ts +0 -144
  541. package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
  542. package/src/mixins/OxyServices.location.ts +0 -46
  543. package/src/mixins/OxyServices.nodes.ts +0 -337
  544. package/src/mixins/OxyServices.notifications.ts +0 -142
  545. package/src/mixins/OxyServices.payment.ts +0 -163
  546. package/src/mixins/OxyServices.privacy.ts +0 -219
  547. package/src/mixins/OxyServices.reputation.ts +0 -436
  548. package/src/mixins/OxyServices.security.ts +0 -110
  549. package/src/mixins/OxyServices.store.ts +0 -585
  550. package/src/mixins/OxyServices.topics.ts +0 -169
  551. package/src/mixins/OxyServices.user.ts +0 -1208
  552. package/src/mixins/OxyServices.utility.ts +0 -1803
  553. package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
  554. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
  555. package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
  556. package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
  557. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
  558. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
  559. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
  560. package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
  561. package/src/mixins/__tests__/accountEvents.test.ts +0 -158
  562. package/src/mixins/__tests__/accounts.test.ts +0 -727
  563. package/src/mixins/__tests__/agency.test.ts +0 -120
  564. package/src/mixins/__tests__/appData.test.ts +0 -203
  565. package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
  566. package/src/mixins/__tests__/assetUpload.test.ts +0 -191
  567. package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
  568. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
  569. package/src/mixins/__tests__/chains.test.ts +0 -113
  570. package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
  571. package/src/mixins/__tests__/connectedApps.test.ts +0 -146
  572. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
  573. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
  574. package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
  575. package/src/mixins/__tests__/followGraph.test.ts +0 -147
  576. package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
  577. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
  578. package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
  579. package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
  580. package/src/mixins/__tests__/identityBackup.test.ts +0 -315
  581. package/src/mixins/__tests__/identityLink.test.ts +0 -89
  582. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
  583. package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
  584. package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
  585. package/src/mixins/__tests__/notifications.read.test.ts +0 -82
  586. package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
  587. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
  588. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
  589. package/src/mixins/__tests__/reputation.test.ts +0 -522
  590. package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
  591. package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
  592. package/src/mixins/__tests__/store.test.ts +0 -304
  593. package/src/mixins/__tests__/topics.test.ts +0 -155
  594. package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
  595. package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
  596. package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
  597. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
  598. package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
  599. package/src/mixins/index.ts +0 -203
  600. package/src/mixins/mixinHelpers.ts +0 -69
  601. package/src/server/__tests__/auth.test.ts +0 -78
  602. package/src/server/__tests__/capabilityTicket.test.ts +0 -111
  603. package/src/server/__tests__/cors.socket.test.ts +0 -225
  604. package/src/server/__tests__/cors.test.ts +0 -158
  605. package/src/server/__tests__/rateLimit.test.ts +0 -257
  606. package/src/server/__tests__/requesterAssertion.test.ts +0 -359
  607. package/src/server/__tests__/safeFetch.test.ts +0 -232
  608. package/src/server/__tests__/securityHeaders.test.ts +0 -387
  609. package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
  610. package/src/server/__tests__/traffic.test.ts +0 -180
  611. package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
  612. package/src/server/__tests__/userInvalidation.test.ts +0 -203
  613. package/src/server/__tests__/verifySecret.test.ts +0 -40
  614. package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
  615. package/src/server/__tests__/workloadIdentity.test.ts +0 -128
  616. package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
  617. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
  618. package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
  619. package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
  620. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
  621. package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
  622. package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
  623. package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
  624. package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
  625. package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
  626. package/src/session/__tests__/SessionClient.state.test.ts +0 -78
  627. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
  628. package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
  629. package/src/session/__tests__/accountDialogController.test.ts +0 -2502
  630. package/src/session/__tests__/accountDialogShape.test.ts +0 -120
  631. package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
  632. package/src/session/__tests__/authStateStore.test.ts +0 -451
  633. package/src/session/__tests__/deviceDirectory.test.ts +0 -422
  634. package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
  635. package/src/session/__tests__/identityPin.test.ts +0 -131
  636. package/src/session/__tests__/identitySession.test.ts +0 -194
  637. package/src/session/__tests__/projectSessionState.test.ts +0 -105
  638. package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
  639. package/src/session/__tests__/refresh.test.ts +0 -606
  640. package/src/session/__tests__/sessionIntegration.test.ts +0 -209
  641. package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
  642. package/src/utils/__tests__/accountUtils.test.ts +0 -151
  643. package/src/utils/__tests__/activityId.test.ts +0 -45
  644. package/src/utils/__tests__/asyncUtils.test.ts +0 -279
  645. package/src/utils/__tests__/authWebUrl.test.ts +0 -15
  646. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  647. package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
  648. package/src/utils/__tests__/coldBoot.test.ts +0 -496
  649. package/src/utils/__tests__/commonsApproval.test.ts +0 -60
  650. package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
  651. package/src/utils/__tests__/languageUtils.test.ts +0 -244
  652. package/src/utils/__tests__/oauthPkce.test.ts +0 -303
  653. package/src/utils/__tests__/officialOrigins.test.ts +0 -31
  654. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
  655. package/src/utils/__tests__/profileLinks.test.ts +0 -180
  656. package/src/utils/__tests__/redactUrl.test.ts +0 -33
  657. package/src/utils/__tests__/registrableApex.test.ts +0 -62
  658. package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
  659. package/src/utils/__tests__/textNormalization.test.ts +0 -205
  660. package/src/utils/__tests__/validationUtils.test.ts +0 -703
  661. package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
  662. package/src/utils/webauthnOrigin.ts +0 -52
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * `@oxy.so/core/session` — the device-first session machinery.
4
+ *
5
+ * The multi-account `SessionClient`, the headless account dialog, the persisted
6
+ * auth-state stores, the token re-mint handler and scheduler, and the cold
7
+ * boot. `@oxy.so/services` builds `OxyProvider` on it; an app that only calls
8
+ * the API with a token it already has never needs it.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.runColdBoot = exports.runSessionColdBoot = exports.TOKEN_REFRESH_LEAD_MS = exports.startTokenRefreshScheduler = exports.installAuthRefreshHandler = exports.createAuthRefreshHandler = exports.refreshDeviceSecretArm = exports.refreshPersistedSession = exports.establishIdentitySession = exports.resolveIdentityPin = exports.IDENTITY_PIN_STORAGE_KEY = exports.identityPinMatches = exports.createMemoryIdentityPinStore = exports.createNativeIdentityPinStore = exports.createWebIdentityPinStore = exports.readLocalDeviceCredential = exports.publishProvenDeviceCredential = exports.normalizeSharedDeviceSessionRead = exports.decideSharedDevicePublish = exports.decideSharedDeviceJoin = exports.createSharedMirroringAuthStateStore = exports.AUTH_STATE_STORAGE_KEY = exports.createMemoryAuthStateStore = exports.createNativeAuthStateStore = exports.createWebAuthStateStore = exports.createAccountDialogController = exports.AccountDialogController = exports.resolveAccountDelegationAccess = exports.canSwitchIntoAccount = exports.isSwitchTargetAccount = exports.showsPrincipalHeaders = exports.buildSwitcherRows = exports.resolveDeviceContext = exports.resolveActiveContext = exports.projectDevicePrincipals = exports.directoryHandle = exports.directoryDisplayName = exports.canActivateContext = exports.accountIdsOf = exports.activeUserOf = exports.activeSessionIdOf = exports.deviceStateToClientSessions = exports.createSessionClient = exports.createSessionClientHost = exports.SessionClient = exports.DeviceManager = void 0;
12
+ // Session code reaches the identity key (identity-bound sessions), so the
13
+ // crypto shim goes first — see `../crypto/polyfill`.
14
+ require("../crypto/polyfill");
15
+ var deviceManager_1 = require("../utils/deviceManager");
16
+ Object.defineProperty(exports, "DeviceManager", { enumerable: true, get: function () { return deviceManager_1.DeviceManager; } });
17
+ // ---------------------------------------------------------------------------
18
+ // Session sync (device-scoped multi-account session client)
19
+ // ---------------------------------------------------------------------------
20
+ var SessionClient_1 = require("./SessionClient");
21
+ Object.defineProperty(exports, "SessionClient", { enumerable: true, get: function () { return SessionClient_1.SessionClient; } });
22
+ // Shared SessionClient integration layer: the host adapter, the pure
23
+ // DeviceSessionState projection helpers, and the client factory are defined
24
+ // ONCE here so every `@oxy.so/services` platform variant reuses them instead of
25
+ // duplicating a local copy. Each consumer supplies its own `TokenTransport`
26
+ // (native vs. web mint strategies differ) to `createSessionClient`.
27
+ var sessionClientHost_1 = require("./sessionClientHost");
28
+ Object.defineProperty(exports, "createSessionClientHost", { enumerable: true, get: function () { return sessionClientHost_1.createSessionClientHost; } });
29
+ var createSessionClient_1 = require("./createSessionClient");
30
+ Object.defineProperty(exports, "createSessionClient", { enumerable: true, get: function () { return createSessionClient_1.createSessionClient; } });
31
+ var projectSessionState_1 = require("./projectSessionState");
32
+ Object.defineProperty(exports, "deviceStateToClientSessions", { enumerable: true, get: function () { return projectSessionState_1.deviceStateToClientSessions; } });
33
+ Object.defineProperty(exports, "activeSessionIdOf", { enumerable: true, get: function () { return projectSessionState_1.activeSessionIdOf; } });
34
+ Object.defineProperty(exports, "activeUserOf", { enumerable: true, get: function () { return projectSessionState_1.activeUserOf; } });
35
+ Object.defineProperty(exports, "accountIdsOf", { enumerable: true, get: function () { return projectSessionState_1.accountIdsOf; } });
36
+ // Pure projections over the device DIRECTORY (`GET /session/device/directory`,
37
+ // ADR 0002) — the read model that keeps the actor (the human who authenticated)
38
+ // and the subject (the account being acted as) apart. The flat
39
+ // `DeviceSessionState` collapses them into one row, so it can neither tell
40
+ // "signed in as an org" from "a person operating that org" nor hold two people
41
+ // reaching the same org on one device.
42
+ // `canActivateContext` is the switchability question — `available` alone, never
43
+ // composed with `onDevice`, which is a different fact in both directions.
44
+ // `projectDevicePrincipals` is the switcher's shape: people, each with what
45
+ // they may become. Grouped rather than flat because the same organization
46
+ // reached through two people is TWO rows under two humans, which a list keyed
47
+ // by account cannot say.
48
+ var deviceDirectory_1 = require("./deviceDirectory");
49
+ Object.defineProperty(exports, "canActivateContext", { enumerable: true, get: function () { return deviceDirectory_1.canActivateContext; } });
50
+ Object.defineProperty(exports, "directoryDisplayName", { enumerable: true, get: function () { return deviceDirectory_1.directoryDisplayName; } });
51
+ Object.defineProperty(exports, "directoryHandle", { enumerable: true, get: function () { return deviceDirectory_1.directoryHandle; } });
52
+ Object.defineProperty(exports, "projectDevicePrincipals", { enumerable: true, get: function () { return deviceDirectory_1.projectDevicePrincipals; } });
53
+ Object.defineProperty(exports, "resolveActiveContext", { enumerable: true, get: function () { return deviceDirectory_1.resolveActiveContext; } });
54
+ Object.defineProperty(exports, "resolveDeviceContext", { enumerable: true, get: function () { return deviceDirectory_1.resolveDeviceContext; } });
55
+ // The switcher's RENDER model over that projection — names, handles and avatar
56
+ // URLs resolved once. Shared by `@oxy.so/services`' account dialog and the
57
+ // auth.oxy.so chooser so the two cannot drift, the same reason the flat
58
+ // projection lived here before it.
59
+ var deviceSwitcherRows_1 = require("./deviceSwitcherRows");
60
+ Object.defineProperty(exports, "buildSwitcherRows", { enumerable: true, get: function () { return deviceSwitcherRows_1.buildSwitcherRows; } });
61
+ Object.defineProperty(exports, "showsPrincipalHeaders", { enumerable: true, get: function () { return deviceSwitcherRows_1.showsPrincipalHeaders; } });
62
+ // The switch-target predicates over the account GRAPH — a list of accounts to
63
+ // manage, not the device's list of identities to become (that is the directory
64
+ // above). `isSwitchTargetAccount` is the structural half ("is this kind
65
+ // switchable at all?"); `canSwitchIntoAccount` adds the caller's
66
+ // `account:act_as` permission. Exported so the surfaces that render
67
+ // `AccountNode`s — the Console workspace switcher, managed-accounts rows — ask
68
+ // the SAME questions instead of testing a kind literal.
69
+ var accountSwitchTargets_1 = require("./accountSwitchTargets");
70
+ Object.defineProperty(exports, "isSwitchTargetAccount", { enumerable: true, get: function () { return accountSwitchTargets_1.isSwitchTargetAccount; } });
71
+ Object.defineProperty(exports, "canSwitchIntoAccount", { enumerable: true, get: function () { return accountSwitchTargets_1.canSwitchIntoAccount; } });
72
+ // The service/agent counterpart to the human switch predicates above. Kept on
73
+ // its own semantic seam because `bot` is delegable but never human-switchable.
74
+ var accountDelegationAccess_1 = require("./accountDelegationAccess");
75
+ Object.defineProperty(exports, "resolveAccountDelegationAccess", { enumerable: true, get: function () { return accountDelegationAccess_1.resolveAccountDelegationAccess; } });
76
+ // Headless controller for the unified account dialog. Framework-agnostic
77
+ // state machine + subscribe/getSnapshot store (bind via `useSyncExternalStore`)
78
+ // — sign-in runs through `oxy.auth` (email, password, authenticator, the
79
+ // Commons QR / shared-keychain handoff). Reuses `SessionClient.switchAccount` /
80
+ // `oxy.accounts.actAs` for the uniform switch.
81
+ var accountDialogController_1 = require("./accountDialogController");
82
+ Object.defineProperty(exports, "AccountDialogController", { enumerable: true, get: function () { return accountDialogController_1.AccountDialogController; } });
83
+ Object.defineProperty(exports, "createAccountDialogController", { enumerable: true, get: function () { return accountDialogController_1.createAccountDialogController; } });
84
+ // ---------------------------------------------------------------------------
85
+ // Device-first session machinery (zero-cookie transport).
86
+ // Persisted auth-state store, the unified re-mint handler + scheduler, and the
87
+ // cold-boot runner. Built ON the `runColdBoot` primitive + `SessionClient`. The
88
+ // device credential is `deviceId` + `deviceSecret`; the access token is re-minted
89
+ // via `POST /session/device/token`.
90
+ // ---------------------------------------------------------------------------
91
+ var authStateStore_1 = require("./authStateStore");
92
+ Object.defineProperty(exports, "createWebAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createWebAuthStateStore; } });
93
+ Object.defineProperty(exports, "createNativeAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createNativeAuthStateStore; } });
94
+ Object.defineProperty(exports, "createMemoryAuthStateStore", { enumerable: true, get: function () { return authStateStore_1.createMemoryAuthStateStore; } });
95
+ Object.defineProperty(exports, "AUTH_STATE_STORAGE_KEY", { enumerable: true, get: function () { return authStateStore_1.AUTH_STATE_STORAGE_KEY; } });
96
+ // The shared NATIVE DeviceSession credential — how several official apps on one
97
+ // device end up on ONE `DeviceSession` and therefore one active context. It is an
98
+ // ordinary revocable `deviceId` + `deviceSecret`, deliberately NOT the
99
+ // Commons private identity key: an app that only needs a session must never be
100
+ // handed the key that signs identity approvals.
101
+ var sharedDeviceCredential_1 = require("./sharedDeviceCredential");
102
+ Object.defineProperty(exports, "createSharedMirroringAuthStateStore", { enumerable: true, get: function () { return sharedDeviceCredential_1.createSharedMirroringAuthStateStore; } });
103
+ Object.defineProperty(exports, "decideSharedDeviceJoin", { enumerable: true, get: function () { return sharedDeviceCredential_1.decideSharedDeviceJoin; } });
104
+ Object.defineProperty(exports, "decideSharedDevicePublish", { enumerable: true, get: function () { return sharedDeviceCredential_1.decideSharedDevicePublish; } });
105
+ Object.defineProperty(exports, "normalizeSharedDeviceSessionRead", { enumerable: true, get: function () { return sharedDeviceCredential_1.normalizeSharedDeviceSessionRead; } });
106
+ Object.defineProperty(exports, "publishProvenDeviceCredential", { enumerable: true, get: function () { return sharedDeviceCredential_1.publishProvenDeviceCredential; } });
107
+ Object.defineProperty(exports, "readLocalDeviceCredential", { enumerable: true, get: function () { return sharedDeviceCredential_1.readLocalDeviceCredential; } });
108
+ // Identity-bound sessions (the identity vault). The pin is the durable
109
+ // `{publicKey, accountId}` binding between this device's PRIMARY identity key
110
+ // and the account it authenticates as; it is what keeps such a client from
111
+ // following the device's mutable `activeAccountId`.
112
+ var identityPin_1 = require("./identityPin");
113
+ Object.defineProperty(exports, "createWebIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createWebIdentityPinStore; } });
114
+ Object.defineProperty(exports, "createNativeIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createNativeIdentityPinStore; } });
115
+ Object.defineProperty(exports, "createMemoryIdentityPinStore", { enumerable: true, get: function () { return identityPin_1.createMemoryIdentityPinStore; } });
116
+ Object.defineProperty(exports, "identityPinMatches", { enumerable: true, get: function () { return identityPin_1.identityPinMatches; } });
117
+ Object.defineProperty(exports, "IDENTITY_PIN_STORAGE_KEY", { enumerable: true, get: function () { return identityPin_1.IDENTITY_PIN_STORAGE_KEY; } });
118
+ var identitySession_1 = require("./identitySession");
119
+ Object.defineProperty(exports, "resolveIdentityPin", { enumerable: true, get: function () { return identitySession_1.resolveIdentityPin; } });
120
+ Object.defineProperty(exports, "establishIdentitySession", { enumerable: true, get: function () { return identitySession_1.establishIdentitySession; } });
121
+ var refresh_1 = require("./refresh");
122
+ Object.defineProperty(exports, "refreshPersistedSession", { enumerable: true, get: function () { return refresh_1.refreshPersistedSession; } });
123
+ Object.defineProperty(exports, "refreshDeviceSecretArm", { enumerable: true, get: function () { return refresh_1.refreshDeviceSecretArm; } });
124
+ Object.defineProperty(exports, "createAuthRefreshHandler", { enumerable: true, get: function () { return refresh_1.createAuthRefreshHandler; } });
125
+ Object.defineProperty(exports, "installAuthRefreshHandler", { enumerable: true, get: function () { return refresh_1.installAuthRefreshHandler; } });
126
+ Object.defineProperty(exports, "startTokenRefreshScheduler", { enumerable: true, get: function () { return refresh_1.startTokenRefreshScheduler; } });
127
+ Object.defineProperty(exports, "TOKEN_REFRESH_LEAD_MS", { enumerable: true, get: function () { return refresh_1.TOKEN_REFRESH_LEAD_MS; } });
128
+ var sessionColdBoot_1 = require("../boot/sessionColdBoot");
129
+ Object.defineProperty(exports, "runSessionColdBoot", { enumerable: true, get: function () { return sessionColdBoot_1.runSessionColdBoot; } });
130
+ var coldBoot_1 = require("../utils/coldBoot");
131
+ Object.defineProperty(exports, "runColdBoot", { enumerable: true, get: function () { return coldBoot_1.runColdBoot; } });
@@ -78,8 +78,8 @@ exports.REMINT_AFTER_EXPIRY_MS = 2000;
78
78
  async function refreshDeviceSecretArm(deps) {
79
79
  const { oxy, store } = deps;
80
80
  const pin = deps.pin ?? null;
81
- return oxy.httpService.runSingleFlightDeviceSecretMint(async () => {
82
- const epoch = oxy.httpService.getSessionEpoch();
81
+ return oxy.http.runSingleFlightDeviceSecretMint(async () => {
82
+ const epoch = oxy.http.getSessionEpoch();
83
83
  const persisted = await store.load();
84
84
  if (!persisted?.deviceId || !persisted?.deviceSecret) {
85
85
  return { status: 'no-secret' };
@@ -89,10 +89,10 @@ async function refreshDeviceSecretArm(deps) {
89
89
  // Unpinned callers pass NO third argument at all, so the account-mode call
90
90
  // shape (and therefore the request body) is untouched by this feature.
91
91
  mint = pin
92
- ? await oxy.mintFromDeviceSecret(persisted.deviceId, persisted.deviceSecret, {
92
+ ? await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret, {
93
93
  accountId: pin.accountId,
94
94
  })
95
- : await oxy.mintFromDeviceSecret(persisted.deviceId, persisted.deviceSecret);
95
+ : await oxy.devices.mintToken(persisted.deviceId, persisted.deviceSecret);
96
96
  }
97
97
  catch (error) {
98
98
  // 429 keeps the credential like any other transient failure — the secret
@@ -104,7 +104,7 @@ async function refreshDeviceSecretArm(deps) {
104
104
  // requests. Telling HttpService lengthens the next cooldown to one attempt
105
105
  // per limiter window, which lets the budget drain and the session heal.
106
106
  if ((0, errorUtils_1.extractErrorStatus)(error) === 429) {
107
- oxy.httpService.noteRefreshRateLimited();
107
+ oxy.http.noteRefreshRateLimited();
108
108
  return { status: 'transient' };
109
109
  }
110
110
  if ((0, errorUtils_1.extractErrorStatus)(error) === 401) {
@@ -145,11 +145,11 @@ async function refreshDeviceSecretArm(deps) {
145
145
  expiresAt: mint.expiresAt,
146
146
  ...(bound ? { sessionId: bound.sessionId, userId: bound.accountId } : {}),
147
147
  };
148
- if (oxy.httpService.getSessionEpoch() !== epoch) {
149
- // Signed out while minting. The server has rotated the secret, so a store
150
- // that still holds the presented one must learn the rotation (the
151
- // token-null lane keeps the store so a reload can restore); a store the
152
- // sign-out cleared must NOT be refilled. Either way, plant nothing.
148
+ if (oxy.http.getSessionEpoch() !== epoch) {
149
+ // Signed out while minting. A store that still holds the presented
150
+ // secret takes the server's `nextDeviceSecret` (the token-null lane keeps
151
+ // the store so a reload can restore); a store the sign-out cleared must
152
+ // NOT be refilled. Either way, plant nothing.
153
153
  const current = await store.load();
154
154
  if (current?.deviceId === persisted.deviceId && current.deviceSecret === persisted.deviceSecret) {
155
155
  await store.save(next);
@@ -162,10 +162,10 @@ async function refreshDeviceSecretArm(deps) {
162
162
  if (!persistedOk) {
163
163
  return { status: 'persist-failed' };
164
164
  }
165
- if (oxy.httpService.getSessionEpoch() !== epoch) {
165
+ if (oxy.http.getSessionEpoch() !== epoch) {
166
166
  return { status: 'session-ended' };
167
167
  }
168
- oxy.setTokens(mint.accessToken);
168
+ oxy.session.setAccessToken(mint.accessToken);
169
169
  return {
170
170
  status: 'ok',
171
171
  token: mint.accessToken,
@@ -202,7 +202,7 @@ async function refreshPersistedSession(deps) {
202
202
  const identity = deps.identity ?? null;
203
203
  // The shared keychain is never an identity-bound client's recovery path.
204
204
  const allowSharedKeyFallback = identity ? false : (deps.allowSharedKeyFallback ?? (0, platform_1.isNative)());
205
- const epoch = oxy.httpService.getSessionEpoch();
205
+ const epoch = oxy.http.getSessionEpoch();
206
206
  // Resolved per call: a re-established identity session can move the pin, and a
207
207
  // replaced/removed local key clears it (in which case arm 1 must NOT mint —
208
208
  // an unpinned mint would adopt whatever account the device switched to).
@@ -231,13 +231,20 @@ async function refreshPersistedSession(deps) {
231
231
  // 401: secret diverged or no live session. When a key-based arm 2 can still
232
232
  // recover (native shared key, or an identity-bound client's own primary
233
233
  // key) drop ONLY the secret and keep the deviceId; otherwise (web) the
234
- // session is over — clear the store.
234
+ // session is over.
235
235
  const persisted = await store.load();
236
236
  if (allowSharedKeyFallback || identity) {
237
237
  if (persisted) {
238
238
  await store.save({ ...persisted, deviceSecret: undefined });
239
239
  }
240
240
  }
241
+ else if (arm1.status === 'no-session' && persisted?.deviceId && persisted.deviceSecret) {
242
+ // Web, a credential the server still recognises: this origin stays a
243
+ // holder of the browser's device (ADR 0029 D2) — the next sign-in in any
244
+ // app lands on it, and this app follows without opening the bridge
245
+ // again. Only the session fields go.
246
+ await store.save({ sessionId: '', userId: '', deviceId: persisted.deviceId, deviceSecret: persisted.deviceSecret });
247
+ }
241
248
  else {
242
249
  await store.clear();
243
250
  }
@@ -256,14 +263,14 @@ async function refreshPersistedSession(deps) {
256
263
  }
257
264
  // Never after a sign-out: the shared keychain holds an identity KEY, not a
258
265
  // session, and using it here would sign the user straight back in.
259
- if (allowSharedKeyFallback && !oxy.httpService.hasSessionEnded()) {
266
+ if (allowSharedKeyFallback && !oxy.http.hasSessionEnded()) {
260
267
  try {
261
268
  // Planted here, not by the sign-in: a sign-out that lands while the
262
269
  // challenge round-trips must win, or the shared keychain signs the user
263
270
  // straight back in.
264
- const session = await oxy.signInWithSharedIdentity({ plantTokens: false });
271
+ const session = await oxy.auth.signInWithSharedIdentity({ plantTokens: false });
265
272
  if (session?.accessToken) {
266
- if (oxy.httpService.getSessionEpoch() !== epoch) {
273
+ if (oxy.http.getSessionEpoch() !== epoch) {
267
274
  return null;
268
275
  }
269
276
  // Repopulate the fast device-secret lane from the shared-key re-mint.
@@ -277,10 +284,10 @@ async function refreshPersistedSession(deps) {
277
284
  expiresAt: session.expiresAt,
278
285
  });
279
286
  }
280
- if (oxy.httpService.getSessionEpoch() !== epoch) {
287
+ if (oxy.http.getSessionEpoch() !== epoch) {
281
288
  return null;
282
289
  }
283
- oxy.setTokens(session.accessToken);
290
+ oxy.session.setAccessToken(session.accessToken);
284
291
  return session.accessToken;
285
292
  }
286
293
  }
@@ -327,9 +334,9 @@ function createAuthRefreshHandler(deps) {
327
334
  * Returns a disposer that removes it.
328
335
  */
329
336
  function installAuthRefreshHandler(deps) {
330
- deps.oxy.httpService.setAuthRefreshHandler(createAuthRefreshHandler(deps));
337
+ deps.oxy.http.setAuthRefreshHandler(createAuthRefreshHandler(deps));
331
338
  return () => {
332
- deps.oxy.httpService.setAuthRefreshHandler(null);
339
+ deps.oxy.http.setAuthRefreshHandler(null);
333
340
  };
334
341
  }
335
342
  /**
@@ -371,10 +378,10 @@ function startTokenRefreshScheduler(oxy) {
371
378
  /** Schedule the next re-mint from the current token's expiry (the healthy path). */
372
379
  const scheduleFromExpiry = () => {
373
380
  clearTimer();
374
- if (disposed || !oxy.getAccessToken()) {
381
+ if (disposed || !oxy.session.accessToken) {
375
382
  return;
376
383
  }
377
- const expSeconds = oxy.getAccessTokenExpiry();
384
+ const expSeconds = oxy.session.accessTokenExpiry;
378
385
  if (expSeconds === null) {
379
386
  return;
380
387
  }
@@ -382,7 +389,7 @@ function startTokenRefreshScheduler(oxy) {
382
389
  // The server already answered this token's refresh with this very token:
383
390
  // asking again before `exp` only gets it back again. Ask just after expiry,
384
391
  // when the server rotates (see REMINT_AFTER_EXPIRY_MS).
385
- if (untilExpiryMs > 0 && oxy.httpService.isAwaitingCurrentTokenExpiry?.()) {
392
+ if (untilExpiryMs > 0 && oxy.http.isAwaitingCurrentTokenExpiry?.()) {
386
393
  armTimer(untilExpiryMs + exports.REMINT_AFTER_EXPIRY_MS);
387
394
  return;
388
395
  }
@@ -394,11 +401,11 @@ function startTokenRefreshScheduler(oxy) {
394
401
  clearTimer();
395
402
  // Another lane (a request-time preflight) already asked, and the server
396
403
  // answered with this same token: re-arm for just past expiry instead.
397
- if (oxy.httpService.isAwaitingCurrentTokenExpiry?.()) {
404
+ if (oxy.http.isAwaitingCurrentTokenExpiry?.()) {
398
405
  scheduleFromExpiry();
399
406
  return;
400
407
  }
401
- void oxy.httpService.refreshAccessToken('preflight')
408
+ void oxy.http.refreshAccessToken('preflight')
402
409
  .then((token) => Boolean(token))
403
410
  .catch(() => false)
404
411
  .then((ok) => {
@@ -425,10 +432,10 @@ function startTokenRefreshScheduler(oxy) {
425
432
  scheduleFromExpiry();
426
433
  };
427
434
  const onFocus = () => {
428
- if (disposed || !oxy.getAccessToken()) {
435
+ if (disposed || !oxy.session.accessToken) {
429
436
  return;
430
437
  }
431
- const expSeconds = oxy.getAccessTokenExpiry();
438
+ const expSeconds = oxy.session.accessTokenExpiry;
432
439
  if (expSeconds === null) {
433
440
  return;
434
441
  }
@@ -443,8 +450,8 @@ function startTokenRefreshScheduler(oxy) {
443
450
  // Re-arm only on a token that actually CHANGED. The mint plants the token it
444
451
  // returns even when that is the token already held, and treating the repeat
445
452
  // as new re-armed from an in-lead-window expiry, i.e. at the 1s floor.
446
- let lastSeenToken = oxy.getAccessToken();
447
- const unsubscribeTokens = oxy.onTokensChanged((token) => {
453
+ let lastSeenToken = oxy.session.accessToken;
454
+ const unsubscribeTokens = oxy.session.onChange((token) => {
448
455
  if (disposed || token === lastSeenToken) {
449
456
  return;
450
457
  }
@@ -17,12 +17,12 @@ function createSessionClientHost(oxyServices) {
17
17
  let currentAccountId = null;
18
18
  let deviceCredential = null;
19
19
  return {
20
- makeRequest: (method, url, data, options) => oxyServices.makeRequest(method, url, data, options),
21
- getBaseURL: () => oxyServices.getBaseURL(),
22
- getAccessToken: () => oxyServices.getAccessToken(),
20
+ makeRequest: (method, url, data, options) => oxyServices.request(method, url, data, options),
21
+ getBaseURL: () => oxyServices.baseURL,
22
+ getAccessToken: () => oxyServices.session.accessToken,
23
23
  getDeviceCredential: () => deviceCredential,
24
- onTokensChanged: (listener) => oxyServices.onTokensChanged(listener),
25
- setTokens: (accessToken) => oxyServices.setTokens(accessToken),
24
+ onTokensChanged: (listener) => oxyServices.session.onChange(listener),
25
+ setTokens: (accessToken) => oxyServices.session.setAccessToken(accessToken),
26
26
  getCurrentAccountId: () => currentAccountId,
27
27
  setCurrentAccountId: (id) => {
28
28
  currentAccountId = id;
@@ -163,8 +163,9 @@ function decideSharedDevicePublish(proven, shared) {
163
163
  if (shared.credential.deviceSecret === proven.deviceSecret) {
164
164
  return { action: 'skip', reason: 'already-current' };
165
165
  }
166
- // Same device, newer secret. Sign-in rotates the secret (the mint does
167
- // not), so the just-proven one is the credential a fresh install should
166
+ // Same device, newer secret. Each sign-in issues a new holder credential
167
+ // (the older one stays valid until the device ends with nobody signed
168
+ // in), so the just-proven one is the credential a fresh install should
168
169
  // join with.
169
170
  return { action: 'publish' };
170
171
  }
@@ -60,7 +60,7 @@ const calculateBackoffInterval = (state) => {
60
60
  const { consecutiveFailures, baseInterval, maxInterval } = state;
61
61
  if (consecutiveFailures === 0)
62
62
  return baseInterval;
63
- const backoffMultiplier = Math.min(Math.pow(2, consecutiveFailures - 1), maxInterval / baseInterval);
63
+ const backoffMultiplier = Math.min(2 ** (consecutiveFailures - 1), maxInterval / baseInterval);
64
64
  return Math.min(baseInterval * backoffMultiplier, maxInterval);
65
65
  };
66
66
  exports.calculateBackoffInterval = calculateBackoffInterval;
@@ -173,7 +173,7 @@ const withRetry = async (fn, options = {}) => {
173
173
  if (attempt === maxRetries || !shouldRetry(error)) {
174
174
  throw error;
175
175
  }
176
- const delayMs = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
176
+ const delayMs = Math.min(baseDelay * 2 ** attempt, maxDelay);
177
177
  onRetry?.(error, attempt + 1);
178
178
  await (0, exports.delay)(delayMs);
179
179
  }
@@ -13,15 +13,12 @@
13
13
  * those cached and the account switcher keeps drawing the pre-edit name and
14
14
  * picture for the full TTL, against a perfectly healthy server.
15
15
  *
16
- * The mixins compose into one class at runtime but are typed one at a time, so
17
- * the user mixin cannot call a method the accounts mixin owns. The key list
18
- * therefore lives here, once, and every writer calls {@link
19
- * evictOxyAccountForestCache} — exactly like the identity key list in
20
- * `identityCacheSweep`, which the accounts mixin already calls for the
21
- * mirror-image case (an account write staling the identity reads). The
22
- * alternative — a second hand-written copy of these keys in the other mixin —
23
- * is the drift that shipped the two stale-profile bugs `identityCacheSweep`
24
- * documents.
16
+ * The key list lives here, once, and every writer (`users.updateMe`, the
17
+ * `accounts` namespace) reads it — exactly like the identity key list in
18
+ * `identityCacheSweep`, which account writes use for the mirror-image case (an
19
+ * account write staling the identity reads). A second hand-written copy of
20
+ * these keys in another namespace is the drift that shipped the two
21
+ * stale-profile bugs `identityCacheSweep` documents.
25
22
  *
26
23
  * WHY THE LIST NEEDS A PREFIX AND THE DETAIL DOES NOT
27
24
  * --------------------------------------------------
@@ -71,10 +68,9 @@ function oxyAccountDetailCacheKey(accountId) {
71
68
  * account in it (create, archive, ownership transfer) has no
72
69
  * detail row to name, and clears only the lists.
73
70
  */
74
- function evictOxyAccountForestCache(oxy, accountId) {
75
- oxy.clearCacheEntry(exports.OXY_ACCOUNT_LIST_CACHE_KEY);
76
- oxy.clearCacheByPrefix(exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX);
77
- if (accountId) {
78
- oxy.clearCacheEntry(oxyAccountDetailCacheKey(accountId));
79
- }
71
+ function evictOxyAccountForestCache(http, accountId) {
72
+ http.invalidateCache({
73
+ keys: accountId ? [exports.OXY_ACCOUNT_LIST_CACHE_KEY, oxyAccountDetailCacheKey(accountId)] : [exports.OXY_ACCOUNT_LIST_CACHE_KEY],
74
+ prefixes: [exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX],
75
+ });
80
76
  }
@@ -1,49 +1,25 @@
1
1
  "use strict";
2
2
  /**
3
- * Async utilities for common asynchronous patterns and error handling
3
+ * Retry with exponential backoff and jitter — the policy `HttpService` uses.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.delay = void 0;
7
- exports.withErrorHandling = withErrorHandling;
8
- exports.parallelWithErrorHandling = parallelWithErrorHandling;
9
6
  exports.retryAsync = retryAsync;
10
- exports.debounceAsync = debounceAsync;
11
- exports.throttleAsync = throttleAsync;
12
- exports.sequentialWithProgress = sequentialWithProgress;
13
- exports.batchAsync = batchAsync;
14
- exports.createCancellableAsync = createCancellableAsync;
15
- exports.withTimeout = withTimeout;
16
- exports.withLoadingState = withLoadingState;
17
- exports.retryOnError = retryOnError;
18
- const logger_1 = require("../logger");
19
7
  const errorUtils_1 = require("./errorUtils");
20
8
  /**
21
- * Wrapper for async operations with automatic error handling
22
- * Returns null on error instead of throwing
23
- */
24
- async function withErrorHandling(operation, errorHandler, context) {
25
- try {
26
- return await operation();
27
- }
28
- catch (error) {
29
- if (errorHandler) {
30
- errorHandler(error);
31
- }
32
- else {
33
- logger_1.logger.error(`Error in ${context || 'operation'}`, error instanceof Error ? error : new Error(String(error)), {
34
- component: 'asyncUtils',
35
- method: 'withErrorHandling',
36
- });
37
- }
38
- return null;
39
- }
40
- }
41
- /**
42
- * Execute multiple async operations in parallel with error handling
9
+ * Whether an error came from a request hitting its own timeout.
10
+ *
11
+ * A timeout and a caller cancellation both surface from `fetch` as an
12
+ * `AbortError`, so this only recognises one that has already been CLASSIFIED
13
+ * (by `HttpService`, which knows which of its own timers fired). An
14
+ * unclassified abort is treated as a cancellation, which is the safe
15
+ * direction: refusing to retry something that was abandoned costs nothing,
16
+ * while retrying it is the defect this whole option exists to fix.
43
17
  */
44
- async function parallelWithErrorHandling(operations, errorHandler) {
45
- const results = await Promise.allSettled(operations.map((op, index) => withErrorHandling(op, error => errorHandler?.(error, index))));
46
- return results.map(result => result.status === 'fulfilled' ? result.value : null);
18
+ function isTimeoutError(error) {
19
+ if (!error || typeof error !== 'object')
20
+ return false;
21
+ const candidate = error;
22
+ return candidate.timeout === true || candidate.code === errorUtils_1.ErrorCodes.TIMEOUT;
47
23
  }
48
24
  /**
49
25
  * Extract an HTTP status code from an error value, tolerating both the
@@ -68,21 +44,15 @@ function extractHttpStatus(error) {
68
44
  return undefined;
69
45
  }
70
46
  /**
71
- * Whether an error came from a request hitting its own timeout.
47
+ * Retry an async operation with exponential backoff
72
48
  *
73
- * A timeout and a caller cancellation both surface from `fetch` as an
74
- * `AbortError`, so this only recognises one that has already been CLASSIFIED
75
- * (by `HttpService`, which knows which of its own timers fired). An
76
- * unclassified abort is treated as a cancellation, which is the safe
77
- * direction: refusing to retry something that was abandoned costs nothing,
78
- * while retrying it is the defect this whole option exists to fix.
49
+ * By default, does not retry on 4xx errors (client errors). The default
50
+ * predicate accepts both the axios-style `error.response.status` and the
51
+ * flat `error.status` shape produced by {@link handleHttpError}, so callers
52
+ * never accidentally retry a deterministic client failure.
53
+ *
54
+ * Use the `shouldRetry` callback to customize retry behavior.
79
55
  */
80
- function isTimeoutError(error) {
81
- if (!error || typeof error !== 'object')
82
- return false;
83
- const candidate = error;
84
- return candidate.timeout === true || candidate.code === errorUtils_1.ErrorCodes.TIMEOUT;
85
- }
86
56
  async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 1000, shouldRetryArg) {
87
57
  // An options-object overload rather than a fifth positional parameter:
88
58
  // `retryOnError` below and other in-tree callers pass positionally, and a
@@ -139,7 +109,7 @@ async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 100
139
109
  break;
140
110
  }
141
111
  // Calculate delay with exponential backoff and jitter
142
- const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;
112
+ const delay = baseDelay * 2 ** attempt + Math.random() * 1000;
143
113
  // Nothing may start, or even sleep, past the deadline — otherwise the
144
114
  // budget bounds the attempts but not the wall clock the caller feels.
145
115
  if (deadline !== undefined && Date.now() + delay >= deadline) {
@@ -150,114 +120,3 @@ async function retryAsync(operation, maxRetriesOrOptions = 3, baseDelayArg = 100
150
120
  }
151
121
  throw lastError;
152
122
  }
153
- /**
154
- * Debounce async function calls
155
- */
156
- function debounceAsync(func, delay) {
157
- let timeoutId;
158
- return (...args) => {
159
- return new Promise((resolve, reject) => {
160
- clearTimeout(timeoutId);
161
- timeoutId = setTimeout(async () => {
162
- try {
163
- const result = await func(...args);
164
- resolve(result);
165
- }
166
- catch (error) {
167
- reject(error);
168
- }
169
- }, delay);
170
- });
171
- };
172
- }
173
- /**
174
- * Throttle async function calls
175
- */
176
- function throttleAsync(func, limit, interval) {
177
- let inThrottle = false;
178
- let lastPromise = null;
179
- return (...args) => {
180
- if (inThrottle) {
181
- return lastPromise;
182
- }
183
- inThrottle = true;
184
- lastPromise = func(...args);
185
- setTimeout(() => {
186
- inThrottle = false;
187
- }, interval);
188
- return lastPromise;
189
- };
190
- }
191
- /**
192
- * Execute async operations sequentially with progress tracking
193
- */
194
- async function sequentialWithProgress(operations, onProgress) {
195
- const results = [];
196
- for (let i = 0; i < operations.length; i++) {
197
- const result = await operations[i]();
198
- results.push(result);
199
- onProgress?.(i + 1, operations.length);
200
- }
201
- return results;
202
- }
203
- /**
204
- * Batch async operations
205
- */
206
- async function batchAsync(items, batchSize, processor) {
207
- for (let i = 0; i < items.length; i += batchSize) {
208
- const batch = items.slice(i, i + batchSize);
209
- await processor(batch);
210
- }
211
- }
212
- /**
213
- * Create a cancellable async operation
214
- */
215
- function createCancellableAsync(operation) {
216
- let abortController = null;
217
- return {
218
- execute: async () => {
219
- abortController = new AbortController();
220
- return await operation(abortController.signal);
221
- },
222
- cancel: () => {
223
- abortController?.abort();
224
- }
225
- };
226
- }
227
- /**
228
- * Timeout wrapper for async operations
229
- */
230
- async function withTimeout(operation, timeoutMs, timeoutMessage) {
231
- const timeoutPromise = new Promise((_, reject) => {
232
- setTimeout(() => {
233
- reject(new Error(timeoutMessage || `Operation timed out after ${timeoutMs}ms`));
234
- }, timeoutMs);
235
- });
236
- return Promise.race([operation, timeoutPromise]);
237
- }
238
- /**
239
- * Execute async operation with loading state
240
- */
241
- async function withLoadingState(operation, setLoading) {
242
- setLoading(true);
243
- try {
244
- return await operation();
245
- }
246
- finally {
247
- setLoading(false);
248
- }
249
- }
250
- /**
251
- * Create a promise that resolves after a delay
252
- */
253
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
254
- exports.delay = delay;
255
- /**
256
- * Execute async operation with retry on specific errors
257
- */
258
- async function retryOnError(operation, retryableErrors, maxRetries = 3) {
259
- return retryAsync(operation, maxRetries, 1000, (error) => {
260
- const errorCode = error?.code || error?.status || error?.message;
261
- return retryableErrors.includes(errorCode);
262
- });
263
- }