@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
@@ -1,998 +0,0 @@
1
- /**
2
- * Authentication Methods Mixin
3
- *
4
- * Supports password-based login (email/username) and public key challenge-response.
5
- */
6
- import type { User } from '../models/interfaces';
7
- import type { LoginResult, CommonsDenyReason } from '@oxy.so/contracts';
8
- import { type EmailVerificationConfirmResponse, type EmailVerificationStartRequest, type EmailVerificationStartResponse } from '@oxy.so/contracts';
9
- import type { SessionLoginResponse } from '../models/session';
10
- import type { OxyServicesBase } from '../OxyServices.base';
11
- import type { PublicApplication } from './OxyServices.connectedApps';
12
- export { getCommonsApprovalBlockingReason, parseCommonsApprovalExpiresAt, } from '../utils/commonsApproval';
13
- export interface ChallengeResponse {
14
- challenge: string;
15
- expiresAt: string;
16
- }
17
- export interface RegistrationRequest {
18
- publicKey: string;
19
- username: string;
20
- email?: string;
21
- signature: string;
22
- timestamp: number;
23
- }
24
- export interface ChallengeVerifyRequest {
25
- publicKey: string;
26
- challenge: string;
27
- signature: string;
28
- timestamp: number;
29
- deviceName?: string;
30
- deviceFingerprint?: string;
31
- }
32
- export interface PublicKeyCheckResponse {
33
- registered: boolean;
34
- message: string;
35
- }
36
- /** OpenID Connect userinfo claims returned by `GET /auth/oauth/userinfo`. */
37
- export interface OAuthUserInfoResponse {
38
- sub: string;
39
- preferred_username?: string;
40
- name?: string;
41
- picture?: string;
42
- }
43
- /**
44
- * The session an OAuth authorization-code exchange yields.
45
- *
46
- * Deliberately NOT `LoginSessionResult`. That type mirrors the API's
47
- * `buildSessionAuthResponse`, which every FIRST-PARTY sign-in lane emits, and it
48
- * requires `deviceId` because those lanes always join the origin's DeviceSession.
49
- * `POST /auth/oauth/token` is the RFC 6749 token endpoint and serves third
50
- * parties, whose grant is deliberately ISOLATED: an untrusted application must be
51
- * able to receive a session carrying NO DeviceSession credential at all.
52
- *
53
- * Both device fields are therefore optional here, and a response omitting them is
54
- * a well-formed device-less grant rather than a malformed payload. What that
55
- * costs the session is spelled out on `exchangeOAuthCode` below.
56
- */
57
- export interface OAuthTokenExchangeResult {
58
- sessionId: string;
59
- /** ISO-8601 expiry of {@link accessToken}, derived from RFC 6749 `expires_in`. */
60
- expiresAt: string;
61
- accessToken?: string;
62
- /**
63
- * The DeviceSession this grant joined, when the server issued one. ABSENT for
64
- * an isolated third-party grant — never assume a string.
65
- */
66
- deviceId?: string;
67
- /**
68
- * The zero-cookie mint credential for {@link deviceId}. Present only alongside
69
- * it; absent for an isolated third-party grant.
70
- */
71
- deviceSecret?: string;
72
- user: {
73
- id: string;
74
- username?: string;
75
- avatar?: string;
76
- };
77
- }
78
- /**
79
- * How a "Sign in with Oxy" request finalizes once the approver authorizes it.
80
- *
81
- * ONE request (`AuthSession`) serves every delivery surface — popup, push, QR,
82
- * deep link — so the purpose describes the FINALIZATION, never the transport:
83
- *
84
- * - `device_sign_in` — the classic device flow. The initiator exchanges its
85
- * secret `sessionToken` for the first access token via `claimSessionByToken`.
86
- * - `oauth_authorization` — the request additionally carries an OAuth binding
87
- * ({@link CommonsOAuthContext}), so it finalizes into a single-use
88
- * authorization CODE via {@link OxyServicesAuthMixin.finalizeCommonsOAuth}.
89
- * The caller still performs the PKCE token exchange itself.
90
- */
91
- export type CommonsSignInPurpose = 'device_sign_in' | 'oauth_authorization';
92
- /**
93
- * OAuth binding attached to a "Sign in with Oxy" request so a single
94
- * `AuthSession` can finalize into a standard OAuth authorization code instead of
95
- * a device-flow session.
96
- *
97
- * Only the minimum request binding is carried here — everything else (the app's
98
- * name, icon, registered redirect URIs, trust flags) is owned server-side by the
99
- * `Application` the `clientId` resolves to and is never client-supplied.
100
- *
101
- * The PKCE `codeVerifier` NEVER appears here: only its S256 `codeChallenge`
102
- * crosses the wire, exactly as in the redirect flow. The RP-owned OAuth `state`
103
- * also stays with the relying party, which validates it locally.
104
- */
105
- export interface CommonsOAuthContext {
106
- /** Exact registered redirect URI the authorization code will be returned to. */
107
- redirectUri: string;
108
- /** PKCE `BASE64URL(SHA-256(codeVerifier))` (RFC 7636 §4.2); the verifier stays client-side. */
109
- codeChallenge: string;
110
- /** PKCE transformation method. Always `S256` — `plain` is not accepted. */
111
- codeChallengeMethod: 'S256';
112
- /** Space-delimited OAuth scope string; the server normalizes and validates it. */
113
- scope?: string;
114
- /**
115
- * Optional delegated account the application will act AS (an organization or
116
- * project the identity is a member of). The identity approving the request
117
- * does not change; the server verifies the identity's permission to act as
118
- * this account before finalizing.
119
- */
120
- subjectAccountId?: string;
121
- }
122
- /**
123
- * Handle returned by {@link OxyServicesAuthMixin.startCommonsSignIn} for a
124
- * relying-party app initiating a "Sign in with Oxy" flow.
125
- *
126
- * `sessionToken` is the SECRET, high-entropy device-flow credential — it stays
127
- * on the initiating client, is exchanged once via `claimSessionByToken` (device
128
- * sign-in) or {@link OxyServicesAuthMixin.finalizeCommonsOAuth} (OAuth), and is
129
- * NEVER placed in the QR/deep-link. `authorizeCode` is the PUBLIC handle carried
130
- * in `qrPayload`; the approver (Commons) resolves it via
131
- * {@link OxyServicesAuthMixin.getCommonsApprovalInfo}.
132
- */
133
- export interface CommonsSignInHandle {
134
- /** Secret device-flow token (held by the initiator; exchanged via `claimSessionByToken`). */
135
- sessionToken: string;
136
- /** Public, single-use authorize code carried in the QR / deep-link. */
137
- authorizeCode: string;
138
- /** Ready-to-render deep-link / universal-link string (`oxycommons://approve?...`). */
139
- qrPayload: string;
140
- /** Server-authoritative expiry (epoch milliseconds). */
141
- expiresAt: number;
142
- /** Session lifecycle status as reported by the server (e.g. `'pending'`). */
143
- status: string;
144
- }
145
- /**
146
- * Poll result for a "Sign in with Oxy" device-flow session
147
- * (`GET /auth/session/status`).
148
- *
149
- * The authoritative state machine stays small — `pending → authorized →
150
- * consumed`, plus `cancelled` / `expired` — and lives in `status`. Delivery
151
- * PROGRESS (`pushSentAt`, `openedAt`) is carried as timestamps beside it, never
152
- * as competing statuses, so a progress signal can never be mistaken for an
153
- * authorization.
154
- */
155
- export interface CommonsSignInStatus {
156
- /** True once an approver has authorized the session. */
157
- authorized: boolean;
158
- /** The authorized session id (present once `authorized` for device sign-in). */
159
- sessionId?: string;
160
- /** The approving identity's public key (present once `authorized`). */
161
- publicKey?: string;
162
- /** Lifecycle status (`'pending'` | `'authorized'` | `'cancelled'` | `'expired'`). */
163
- status?: string;
164
- /**
165
- * How this request finalizes. Unrecognized/missing values degrade to
166
- * `device_sign_in` so an older API never misroutes an OAuth finalize.
167
- */
168
- purpose?: CommonsSignInPurpose;
169
- /**
170
- * ISO-8601 timestamp of when the request was pushed to a known Commons
171
- * installation, or `null` when no push has been sent (including on a server
172
- * that predates delivery progress). Progress only — it never implies the push
173
- * was received, opened, or approved.
174
- */
175
- pushSentAt: string | null;
176
- /**
177
- * ISO-8601 timestamp of when the approval route was opened in Commons, or
178
- * `null` when it has not been opened. Reported by the approver via
179
- * {@link OxyServicesAuthMixin.markCommonsApprovalOpened}; it is an
180
- * un-authenticated progress hint used only to advance the waiting UI, and is
181
- * NEVER evidence that the request was approved.
182
- */
183
- openedAt: string | null;
184
- }
185
- /**
186
- * Outcome of asking Oxy to deliver a pending sign-in request to the identity's
187
- * known Commons installations (`POST /auth/session/deliver/:authorizeCode`).
188
- *
189
- * `targets: 0` is a NORMAL outcome, not a failure: it simply means no capable
190
- * Commons installation is registered, so push is not a usable route and the
191
- * caller shows the QR instead. Feed `targets` into `selectCommonsDelivery`
192
- * (`utils/commonsDelivery`) rather than branching on it ad hoc.
193
- */
194
- export interface CommonsDeliveryResult {
195
- /** Whether the server dispatched the request to at least one installation. */
196
- delivered: boolean;
197
- /** How many eligible Commons installations it was dispatched to (`0` is normal). */
198
- targets: number;
199
- }
200
- /**
201
- * The account an application will act AS once the request is approved, when the
202
- * request delegates to an organization/project rather than the approver's own
203
- * personal account. Resolved and sanitized server-side from the request's
204
- * `subjectAccountId`, so it is safe to display in the approval UI.
205
- *
206
- * The identity approving stays the identity: Commons renders this as a distinct
207
- * "will act as" line, never as a change of who is signing.
208
- */
209
- export interface CommonsApprovalSubjectAccount {
210
- /** The delegated account's id. */
211
- id: string;
212
- /** The delegated account's handle. */
213
- username: string;
214
- /** Optional human-readable name; absent when the account has no real name. */
215
- displayName?: string;
216
- }
217
- /**
218
- * Server-resolved approval context shown by the approver (Commons) before
219
- * authorizing — the TRUSTED identity of the requesting app, resolved from the
220
- * `authorizeCode` server-side (never from the QR string).
221
- */
222
- export interface CommonsApprovalInfo {
223
- /** Sanitized, display-safe identity of the requesting application. */
224
- application: PublicApplication | null;
225
- /** OAuth scopes the application is requesting. */
226
- scopes: string[];
227
- /** The origin the session is bound to (the RP web origin), when applicable. */
228
- boundOrigin?: string;
229
- /**
230
- * Server-authoritative anti-phishing flag: `true` only when this device-flow
231
- * sign-in was started from a verified, registered origin of a trusted app.
232
- * The approver (Commons) shows a warning when this is `false`. Always present
233
- * — a missing/non-boolean server value is coerced to `false` (fail-safe to
234
- * "not verified") by {@link OxyServicesAuthMixin.getCommonsApprovalInfo}.
235
- */
236
- originVerified: boolean;
237
- /**
238
- * COARSE, display-only label of the client that STARTED the request
239
- * (`"Chrome on Windows"`), resolved server-side from the requesting browser —
240
- * NEVER from the QR payload. Render it verbatim as a secondary line under the
241
- * origin; it is the whole descriptor the platform has (no raw User-Agent, no
242
- * IP, no location is ever collected for it).
243
- *
244
- * `null` whenever the server has no browser context to describe: native
245
- * requesters, unidentifiable User-Agents, and any API that predates the field.
246
- * Omit the line entirely in that case — never substitute a guess.
247
- */
248
- requesterLabel: string | null;
249
- /**
250
- * How this request finalizes. Always present — an unrecognized or missing
251
- * server value degrades to `'device_sign_in'`, the behaviour every server has
252
- * always had, so an older API never makes the approver believe it is granting
253
- * an OAuth authorization.
254
- */
255
- purpose: CommonsSignInPurpose;
256
- /**
257
- * The delegated account the application will act as, or `null` when the
258
- * request is for the approver's own account. Always present — a missing or
259
- * malformed server value degrades to `null` (fail-safe to "no delegation"),
260
- * so a partial payload can never imply a broader grant than was requested.
261
- */
262
- subjectAccount: CommonsApprovalSubjectAccount | null;
263
- /** Server-authoritative expiry (epoch ms or ISO-8601 string from the API). */
264
- expiresAt: number | string;
265
- /** Session lifecycle status. */
266
- status: string;
267
- }
268
- /** Result of approving / denying a "Sign in with Oxy" request. */
269
- export interface CommonsSignInActionResult {
270
- success: boolean;
271
- }
272
- /**
273
- * Result of finalizing an approved, OAuth-bound "Sign in with Oxy" request.
274
- *
275
- * This is an authorization CODE, not a session: the caller still performs the
276
- * standard PKCE token exchange (`exchangeOAuthCode`) with the `codeVerifier` it
277
- * has held all along. No access token, refresh token, or device secret is ever
278
- * produced by finalization.
279
- */
280
- export interface CommonsOAuthFinalizeResult {
281
- /** Single-use OAuth authorization code. */
282
- code: string;
283
- /** The exact registered redirect URI the request was bound to. */
284
- redirectUri: string;
285
- /** Lifetime of the authorization code, in seconds. */
286
- expiresIn: number;
287
- }
288
- export interface ServiceTokenResponse {
289
- token: string;
290
- expiresIn: number;
291
- appName: string;
292
- }
293
- /**
294
- * One cache entry per (apiKey hash) → issued token + the secret that produced it.
295
- * The secret is kept around in raw Buffer form so we can perform a
296
- * constant-time compare against any reused credential pair — this prevents an
297
- * attacker who learned a victim's apiKey from receiving the victim's cached
298
- * service token by simply guessing the secret.
299
- *
300
- * @internal
301
- */
302
- interface ServiceTokenCacheEntry {
303
- token: string;
304
- /** Expiry as ms since epoch */
305
- expiresAt: number;
306
- /** Raw secret stored as Buffer for constant-time comparison on cache hit */
307
- secretBuf: Buffer;
308
- /** In-flight refresh promise (deduplicates concurrent callers) */
309
- pending: Promise<string> | null;
310
- /**
311
- * The raw apiKey that produced this entry. Retained so a targeted, fully
312
- * synchronous `invalidateServiceToken(apiKey)` can locate the entry without
313
- * re-deriving the async `SHA-256(apiKey)` Map key. Never logged or returned.
314
- */
315
- apiKey: string;
316
- }
317
- /**
318
- * Sentinel error raised when getServiceToken() is called with a known apiKey
319
- * but a non-matching secret. Indicates either credential drift in the caller
320
- * or a cross-tenant cache lookup attempt. Surface as a 401-equivalent.
321
- */
322
- export declare class ServiceCredentialMismatchError extends Error {
323
- constructor();
324
- }
325
- /**
326
- * How long a failed service-token mint sends session-less requests anonymous
327
- * before the next attempt, under `serviceIdentity: 'when-anonymous'`.
328
- */
329
- export declare const ANONYMOUS_SERVICE_TOKEN_RETRY_MS = 30000;
330
- export declare function OxyServicesAuthMixin<T extends typeof OxyServicesBase>(Base: T): {
331
- new (...args: any[]): {
332
- /**
333
- * Per-credential token cache.
334
- *
335
- * Keyed by SHA-256(apiKey). Each entry carries:
336
- * - the issued service JWT
337
- * - its expiry timestamp
338
- * - the secret that produced it (Buffer for constant-time compare)
339
- * - an optional in-flight promise to deduplicate concurrent refreshes
340
- *
341
- * The previous implementation kept ONE token/exp pair per OxyServices
342
- * instance. That meant calling `getServiceToken(keyA, secretA)` populated
343
- * the cache, and a subsequent `getServiceToken(keyB, secretB)` (different
344
- * tenant) would receive tenant A's token. This is fixed by routing every
345
- * lookup through the Map.
346
- *
347
- * @internal
348
- */
349
- _serviceTokenCache: Map<string, ServiceTokenCacheEntry>;
350
- /** @internal Raw apiKey stored by configureServiceAuth() for use by getServiceToken() */
351
- _serviceApiKey: string | null;
352
- /** @internal Raw apiSecret stored by configureServiceAuth() for use by getServiceToken() */
353
- _serviceApiSecret: string | null;
354
- /**
355
- * Before this instant, a request without a user session does not try to
356
- * mint a service token and goes out anonymous. Set after a failed mint; see
357
- * {@link _serviceTokenForAnonymousRequest}.
358
- *
359
- * @internal
360
- */
361
- _anonymousServiceTokenRetryAt: number;
362
- /**
363
- * The bearer for a request with no user session, under `serviceIdentity:
364
- * 'when-anonymous'`: this process's service token, or `null` to send the
365
- * request anonymous as before.
366
- *
367
- * `null`, never a throw, whenever there is no token to offer:
368
- * - no key pair and no attestable workload (a local checkout) — asking
369
- * costs nothing and there is nothing to ask for;
370
- * - the mint failed. The request still goes out, anonymous, and so does
371
- * every request for the next {@link ANONYMOUS_SERVICE_TOKEN_RETRY_MS}, so
372
- * an Oxy that is refusing attestation (seen for ~2.5 minutes after a
373
- * deploy on 2026-09-25) is asked once per window rather than once per
374
- * read, and no read waits on a mint that just failed.
375
- *
376
- * The token itself comes from {@link getServiceToken}: cached for its
377
- * lifetime and single-flight, so concurrent reads share one mint.
378
- *
379
- * @internal
380
- */
381
- _serviceTokenForAnonymousRequest(): Promise<string | null>;
382
- /**
383
- * Hash an apiKey into a stable Map cache key. Uses Node's SHA-256 — service
384
- * tokens are only ever issued by a Node host (the SDK on web/RN never has
385
- * the apiSecret in the first place), so we can rely on Node crypto here.
386
- *
387
- * @internal
388
- */
389
- _hashApiKey(apiKey: string): Promise<string>;
390
- /**
391
- * Configure service credentials for internal service-to-service communication.
392
- * Call this once at startup so that getServiceToken() and makeServiceRequest()
393
- * can automatically obtain and refresh tokens.
394
- *
395
- * Calling this with credentials that differ from a previously-configured pair
396
- * is allowed — each `(apiKey, apiSecret)` pair is cached independently, so
397
- * legitimate multi-tenant hosts that need to switch credentials cannot leak
398
- * one tenant's token to another tenant on the same instance.
399
- *
400
- * @param apiKey - Application credential public key (oxy_dk_*)
401
- * @param apiSecret - Application credential secret
402
- */
403
- configureServiceAuth(apiKey: string, apiSecret: string): void;
404
- /**
405
- * Get a service token for internal service-to-service communication.
406
- * Tokens are short-lived (1h) and automatically cached/refreshed per
407
- * `(apiKey, apiSecret)` pair.
408
- *
409
- * Concurrent callers for the same credential pair share a single in-flight
410
- * request to avoid hammering `/auth/service-token` when the cache is empty
411
- * or expired.
412
- *
413
- * **Security guarantee:** if the cache already holds a token for this
414
- * apiKey but the supplied apiSecret does not constant-time match the
415
- * secret that originally produced that token, this method throws
416
- * `ServiceCredentialMismatchError` instead of returning the cached token.
417
- * This prevents an attacker who learned a peer's apiKey from extracting
418
- * their service token by polling with a wrong secret.
419
- *
420
- * @param apiKey - Application credential public key (optional if configureServiceAuth was called)
421
- * @param apiSecret - Application credential secret (optional if configureServiceAuth was called)
422
- */
423
- getServiceToken(apiKey?: string, apiSecret?: string): Promise<string>;
424
- /**
425
- * Whether this process can prove what it is (ADR 0026).
426
- *
427
- * `#workload-identity` (package.json `imports`) selects a client
428
- * implementation for native and browser bundlers, and the signer only for
429
- * Node hosts. The runtime Node guard avoids calling attestation on clients;
430
- * the module boundary keeps node:crypto out of their bundle graphs (a guard
431
- * alone cannot). It is a package import, not a self-reference to an export
432
- * subpath: a self-reference only resolves where `@oxy.so/core` is reachable
433
- * through `node_modules`, which bundlers inside this workspace are not.
434
- *
435
- * @internal
436
- */
437
- _canUseWorkloadIdentity(): Promise<boolean>;
438
- /**
439
- * A service token obtained by attestation, cached like a credential's.
440
- *
441
- * The cache key is a constant, not a credential hash: a process has exactly
442
- * one identity, so there is nothing to key on and nothing to keep separate.
443
- * The secret-comparison guard the credential path applies has nothing to
444
- * compare here, which is the point — there is no secret.
445
- *
446
- * @internal
447
- */
448
- _getWorkloadServiceToken(): Promise<string>;
449
- /**
450
- * Perform the actual /auth/service-token request and cache the result.
451
- * Separated so getServiceToken() can deduplicate concurrent calls.
452
- * @internal
453
- */
454
- _doFetchServiceToken(key: string, secret: string, cacheKey: string, secretBuf: Buffer): Promise<string>;
455
- /**
456
- * Invalidate cached service token(s), forcing the next `getServiceToken()`
457
- * call to mint a fresh token from `/auth/service-token`.
458
- *
459
- * `getServiceToken()` only refreshes on expiry (with a 60s clock-drift
460
- * buffer), so a credential that is revoked or rotated mid-run — surfaced as
461
- * a 401 on a downstream service request — cannot otherwise be recovered
462
- * within the same process: the still-unexpired cached token keeps being
463
- * returned. Call this after such a 401 to clear the stale entry; the very
464
- * next `getServiceToken()` for that credential re-mints.
465
- *
466
- * Fully synchronous and deterministic: the call completes before it
467
- * returns, so a `getServiceToken()` issued immediately afterwards is
468
- * guaranteed to see the cleared cache and mint anew.
469
- *
470
- * @param apiKey - When provided, clears only the cache entry for that
471
- * specific apiKey. When omitted, clears the entry for the credential set
472
- * via `configureServiceAuth()`; if neither is available (no key to
473
- * target), clears the entire cache. Passing no argument is the common
474
- * case for hosts that configured a single service credential at startup.
475
- *
476
- * The cache Map is keyed by an asynchronously-computed `SHA-256(apiKey)`
477
- * that cannot be reproduced synchronously, so a targeted clear scans the
478
- * entries and removes the one whose stored raw `apiKey` matches — keeping
479
- * this method synchronous. The fully-untargeted call (no argument and no
480
- * configured key) clears every entry, which is safe because each credential
481
- * pair is independently re-minted on its next request.
482
- */
483
- invalidateServiceToken(apiKey?: string): void;
484
- /**
485
- * Make an authenticated request on behalf of a user using a service token.
486
- * Automatically obtains/refreshes the service token.
487
- *
488
- * @param method - HTTP method
489
- * @param url - API endpoint URL
490
- * @param data - Request body or query params
491
- * @param userId - Optional user ID to act on behalf of (sent as X-Oxy-User-Id)
492
- */
493
- makeServiceRequest<R = any>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: any, userId?: string): Promise<R>;
494
- /**
495
- * Register a new identity with public key authentication
496
- * Identity is purely cryptographic - username and profile data are optional
497
- *
498
- * @param publicKey - The user's ECDSA public key (hex)
499
- * @param signature - Signature of the registration request
500
- * @param timestamp - Timestamp when the signature was created
501
- */
502
- register(publicKey: string, signature: string, timestamp: number): Promise<{
503
- message: string;
504
- user: User;
505
- }>;
506
- /**
507
- * Request an authentication challenge
508
- * The client must sign this challenge with their private key
509
- *
510
- * @param publicKey - The user's public key
511
- * @param requestOptions - Optional per-call transport overrides (`retry`,
512
- * `timeout`). Interactive callers omit it (defaults keep retries); the
513
- * cold-boot `shared-key-signin` step passes `{ retry: false }` so a slow
514
- * network cannot multiply boot latency via the inner retry loop.
515
- */
516
- requestChallenge(publicKey: string, requestOptions?: {
517
- retry?: boolean;
518
- timeout?: number;
519
- }): Promise<ChallengeResponse>;
520
- /**
521
- * Verify a signed challenge and create a session
522
- *
523
- * @param publicKey - The user's public key
524
- * @param challenge - The challenge string from requestChallenge
525
- * @param signature - Signature of the auth message
526
- * @param timestamp - Timestamp when the signature was created
527
- * @param deviceName - Optional device name
528
- * @param deviceFingerprint - Optional device fingerprint
529
- * @param requestOptions - Optional per-call transport overrides (`retry`,
530
- * `timeout`). Interactive callers omit it (defaults keep retries); the
531
- * cold-boot `shared-key-signin` step passes `{ retry: false }` so a slow
532
- * network cannot multiply boot latency via the inner retry loop.
533
- * @param options.plantTokens - Install the returned bearer on this client
534
- * (default `true`). A caller that must decide LATER whether the session is
535
- * still wanted (the account dialog, whose user may have cancelled while the
536
- * request was in flight) passes `false` and plants it itself.
537
- */
538
- verifyChallenge(publicKey: string, challenge: string, signature: string, timestamp: number, deviceName?: string, deviceFingerprint?: string, requestOptions?: {
539
- retry?: boolean;
540
- timeout?: number;
541
- }, options?: {
542
- plantTokens?: boolean;
543
- }): Promise<SessionLoginResponse>;
544
- /**
545
- * Check if a public key is already registered
546
- */
547
- checkPublicKeyRegistered(publicKey: string): Promise<PublicKeyCheckResponse>;
548
- /**
549
- * Get user by public key
550
- */
551
- getUserByPublicKey(publicKey: string): Promise<User>;
552
- /**
553
- * Get user by session ID
554
- */
555
- getUserBySession(sessionId: string): Promise<User>;
556
- /**
557
- * Batch get multiple user profiles by session IDs
558
- */
559
- getUsersBySessions(sessionIds: string[]): Promise<Array<{
560
- sessionId: string;
561
- user: User | null;
562
- }>>;
563
- /**
564
- * Exchange a device-flow sessionToken for the first access token.
565
- *
566
- * The originating client holds a 128-bit `sessionToken` that nobody
567
- * else has seen — it was generated client-side, sent once on
568
- * `POST /auth/session/create`, and is never echoed back. After
569
- * another authenticated device approves the session via
570
- * `POST /auth/session/authorize/{sessionToken}` (bearer-authed) and
571
- * the auth socket / poll loop notifies this client, the client
572
- * exchanges its `sessionToken` here for the first access token,
573
- * refresh token, sessionId, and the authorized user.
574
- *
575
- * This call requires no Authorization header — the high-entropy
576
- * `sessionToken` IS the credential (RFC 8628 §3.4). The exchange is
577
- * single-use; replay attempts are rejected with 401.
578
- *
579
- * @param sessionToken - The same sessionToken the SDK passed to
580
- * `POST /auth/session/create` at the start of the flow.
581
- * @param options.deviceFingerprint - Optional fingerprint of the
582
- * originating client device.
583
- * @param options.plantTokens - Install the claimed bearer on this client
584
- * (default `true`). Pass `false` to install it yourself once you know the
585
- * session is still wanted — see `verifyChallenge`.
586
- */
587
- claimSessionByToken(sessionToken: string, options?: {
588
- deviceFingerprint?: string;
589
- plantTokens?: boolean;
590
- }): Promise<{
591
- accessToken: string;
592
- sessionId: string;
593
- deviceId: string;
594
- expiresAt: string;
595
- user: User;
596
- deviceSecret?: string;
597
- }>;
598
- /**
599
- * MECHANISM A — same-device shared-keychain SSO.
600
- *
601
- * Native-only. If this device holds a shared identity (the cross-app
602
- * `group.so.oxy.shared` keychain key), prove control of it and mint a
603
- * session: `requestChallenge(sharedPublicKey)` → `signChallengeWithSharedKey`
604
- * → `verifyChallenge` (which plants the tokens). Returns `null` on web or
605
- * when no shared identity is present — never throws for the absent-identity
606
- * case, so a cold-boot caller can fall through to the next step.
607
- *
608
- * The cold-boot wiring that CALLS this lives in `OxyContext`
609
- * (`@oxy.so/services`); this method just performs the exchange.
610
- *
611
- * @param opts.requestOptions - Optional per-call transport overrides
612
- * (`retry`, `timeout`) forwarded to BOTH the `requestChallenge` and
613
- * `verifyChallenge` round-trips. Interactive flows omit it (defaults keep
614
- * retries); the cold-boot `shared-key-signin` step passes `{ retry: false }`
615
- * so this network step cannot multiply boot latency via the inner retry
616
- * loop. The token-refresh scheduler / 401 lane still retry later.
617
- * @param opts.plantTokens - Forwarded to `verifyChallenge` (default `true`).
618
- */
619
- signInWithSharedIdentity(opts?: {
620
- deviceName?: string;
621
- deviceFingerprint?: string;
622
- requestOptions?: {
623
- retry?: boolean;
624
- timeout?: number;
625
- };
626
- plantTokens?: boolean;
627
- }): Promise<SessionLoginResponse | null>;
628
- /**
629
- * MECHANISM B (relying party) — begin a "Sign in with Oxy" handoff.
630
- *
631
- * Generates a secret device-flow `sessionToken` client-side (it never
632
- * appears in the QR), registers it with `POST /auth/session/create`, and
633
- * returns the server-issued public `authorizeCode` + ready-to-render
634
- * `qrPayload`. Render the QR (web) / open the deep-link (same-device); the
635
- * approver resolves the code and authorizes. Then poll with
636
- * {@link pollCommonsSignIn} and finalize.
637
- *
638
- * ONE request serves every delivery surface, and how it finalizes is decided
639
- * here by whether an OAuth binding is attached:
640
- * - no `oauth` (the default): a `device_sign_in` request — on `authorized`,
641
- * exchange the `sessionToken` via the existing `claimSessionByToken`.
642
- * - with `oauth`: an `oauth_authorization` request — on `authorized`, call
643
- * {@link finalizeCommonsOAuth} with the same `sessionToken` to mint the
644
- * single-use authorization code, then exchange it with PKCE.
645
- *
646
- * @param params.clientId - The RP's registered OAuth client id
647
- * (ApplicationCredential publicKey); required so the server can resolve the
648
- * requesting application's identity.
649
- * @param params.oauth - Optional OAuth binding ({@link CommonsOAuthContext}).
650
- * Carries only the redirect URI, the PKCE S256 challenge, the requested
651
- * scope, and an optional delegated `subjectAccountId` — never the PKCE
652
- * verifier, the OAuth `state`, or any token.
653
- */
654
- startCommonsSignIn(params: {
655
- clientId: string;
656
- oauth?: CommonsOAuthContext;
657
- }): Promise<CommonsSignInHandle>;
658
- /**
659
- * MECHANISM B (relying party) — poll a device-flow session for approval.
660
- *
661
- * Backstop for the auth socket. On `authorized` (with a `sessionId`), the
662
- * caller finalizes: `claimSessionByToken` for a `device_sign_in` request,
663
- * {@link finalizeCommonsOAuth} for an `oauth_authorization` one.
664
- *
665
- * Every field is narrowed fail-safe. `authorized` counts only as a literal
666
- * `true`, the identifiers only as non-empty strings, and the delivery
667
- * progress timestamps degrade to `null` when absent or unparseable — so a
668
- * partial or older-API payload can advance the waiting UI at most, never
669
- * make it believe a request was approved.
670
- *
671
- * @param sessionToken - The secret token from {@link startCommonsSignIn}.
672
- */
673
- pollCommonsSignIn(sessionToken: string): Promise<CommonsSignInStatus>;
674
- /**
675
- * MECHANISM B (relying party) — ask Oxy to DELIVER a pending sign-in request
676
- * to the identity's known Commons installations.
677
- *
678
- * This is the automatic half of "one intention, one primary action": rather
679
- * than offering the user a menu of transports, the caller asks for delivery
680
- * and lets the answer pick the route. Pass the returned `targets` to
681
- * `selectCommonsDelivery` (`utils/commonsDelivery`) — `targets: 0` means no
682
- * capable Commons installation is registered, which is a NORMAL outcome that
683
- * resolves to the QR route, not an error to surface.
684
- *
685
- * **Requires a bearer.** Delivery is only allowed when Oxy already knows the
686
- * intended identity from a trusted authenticated context — a request that
687
- * merely carries a username or email typed into an unauthenticated browser
688
- * must never be able to ring somebody's phone.
689
- *
690
- * The push it sends carries only `{ type, approvalUrl }` where the URL holds
691
- * the public `authorizeCode` — no display data, no secrets. Commons resolves
692
- * everything it shows from `getCommonsApprovalInfo`.
693
- *
694
- * @param authorizeCode - The public code from {@link startCommonsSignIn}.
695
- */
696
- deliverCommonsSignIn(authorizeCode: string): Promise<CommonsDeliveryResult>;
697
- /**
698
- * MECHANISM B (approver / Commons) — report that the approval route was
699
- * OPENED, so the waiting relying party can show "Opened in Commons".
700
- *
701
- * Progress only. It is idempotent, applies to a `pending` request alone, and
702
- * records a timestamp (`openedAt`) — it never approves, authorizes, or
703
- * advances the authorization state machine. Public, like the other approver
704
- * handles: the approver has only the public `authorizeCode` at this point
705
- * and has not yet signed anything.
706
- *
707
- * Best-effort by nature — a failure here costs the user only a progress
708
- * line, so callers are free to ignore a rejection and continue to the
709
- * approval screen.
710
- *
711
- * @param authorizeCode - The public code scanned from the QR / deep-link / push.
712
- */
713
- markCommonsApprovalOpened(authorizeCode: string): Promise<void>;
714
- /**
715
- * MECHANISM B (relying party) — finalize an APPROVED, OAuth-bound request
716
- * into a single-use OAuth authorization code.
717
- *
718
- * The OAuth counterpart of `claimSessionByToken`: same secret credential,
719
- * same single-use semantics, different output. Call it once the request the
720
- * RP started with an `oauth` binding reports `authorized`; the server
721
- * atomically mints exactly ONE `AuthCode` bound to the redirect URI, PKCE
722
- * challenge, scopes, approving identity, and any delegated subject account
723
- * the request was created with. A second call cannot mint another code.
724
- *
725
- * The result is an authorization CODE, never a token — the caller completes
726
- * the flow with the ordinary PKCE exchange (`exchangeOAuthCode`) using the
727
- * `codeVerifier` it never sent anywhere. Nothing here is exposed to the
728
- * popup: the code travels back through the registered callback, and the
729
- * main window owns the verifier.
730
- *
731
- * Like `claimSessionByToken`, this needs no Authorization header — the
732
- * high-entropy SECRET `sessionToken` IS the credential. Never pass the
733
- * public `authorizeCode` here; it is the approver's handle, not the
734
- * initiator's. Every server-side failure (wrong/expired/already-finalized
735
- * request, non-OAuth purpose, missing permission for the delegated account)
736
- * surfaces as one generic error, so nothing about the request's state can be
737
- * probed from outside.
738
- *
739
- * @param sessionToken - The secret token from {@link startCommonsSignIn}.
740
- */
741
- finalizeCommonsOAuth(sessionToken: string): Promise<CommonsOAuthFinalizeResult>;
742
- /**
743
- * MECHANISM B (approver / Commons) — resolve the TRUSTED identity of a
744
- * sign-in request from its public `authorizeCode`.
745
- *
746
- * The returned `application` and `subjectAccount` are resolved server-side
747
- * and are the only safe things to display in the approval UI — NEVER trust
748
- * the app/name/origin strings carried in the QR payload. Public (no auth
749
- * required).
750
- *
751
- * @param authorizeCode - The public code scanned from the QR / deep-link.
752
- */
753
- getCommonsApprovalInfo(authorizeCode: string): Promise<CommonsApprovalInfo>;
754
- /**
755
- * MECHANISM B (approver / Commons) — approve a sign-in request by signing a
756
- * fresh challenge with the PRIMARY local identity key.
757
- *
758
- * Commons holds the user's identity as its primary key (not the shared
759
- * key), so this uses `signChallenge`. The signed-but-cookieless authorize
760
- * endpoint resolves the user from the verified signer — the RP that started
761
- * the flow then claims its session. Native-only (requires a local identity).
762
- *
763
- * @param params.authorizeCode - The public code being approved.
764
- * @param params.deviceName - Optional human-readable device label.
765
- * @param params.deviceFingerprint - Optional device fingerprint.
766
- */
767
- approveCommonsSignIn(params: {
768
- authorizeCode: string;
769
- deviceName?: string;
770
- deviceFingerprint?: string;
771
- }): Promise<CommonsSignInActionResult>;
772
- /**
773
- * MECHANISM B (approver / Commons) — deny a sign-in request, cancelling the
774
- * device-flow session so the RP stops waiting.
775
- *
776
- * @param authorizeCode - The public code being denied.
777
- * @param reason - Optional closed-set reason ({@link CommonsDenyReason}).
778
- * Pass `'not_me'` ONLY when the user actually reported the request as one
779
- * they did not start — the server records it as a suspicious denial rather
780
- * than an ordinary cancel. Omitting it sends the exact body this endpoint
781
- * has always received.
782
- */
783
- denyCommonsSignIn(authorizeCode: string, reason?: CommonsDenyReason): Promise<CommonsSignInActionResult>;
784
- /**
785
- * Internal: decode (without verifying) the `sessionId` claim from a
786
- * server-signed access token. The server already verified the signature;
787
- * the client only reads the claim to drive multi-session state.
788
- *
789
- * @internal
790
- */
791
- _decodeSessionIdFromAccessToken(token: string): string | null;
792
- /**
793
- * Get sessions by session ID
794
- */
795
- getSessionsBySessionId(sessionId: string): Promise<any[]>;
796
- /**
797
- * Logout from a specific session
798
- */
799
- logoutSession(sessionId: string, targetSessionId?: string): Promise<void>;
800
- /**
801
- * Logout from all sessions
802
- */
803
- logoutAllSessions(sessionId: string): Promise<void>;
804
- /**
805
- * Validate session
806
- */
807
- validateSession(sessionId: string, options?: {
808
- deviceFingerprint?: string;
809
- useHeaderValidation?: boolean;
810
- }): Promise<{
811
- valid: boolean;
812
- expiresAt: string;
813
- lastActivity: string;
814
- user: User;
815
- sessionId?: string;
816
- source?: string;
817
- }>;
818
- /**
819
- * Check username availability
820
- */
821
- checkUsernameAvailability(username: string): Promise<{
822
- available: boolean;
823
- message: string;
824
- }>;
825
- /**
826
- * Send a 6-digit code to an email (ADR 0029 D3): the recovery email of a
827
- * new passkey account (`purpose: 'signup'`), or — named by username or
828
- * email — the recovery email of an account being recovered
829
- * (`purpose: 'recovery'`). The answer is the same whether or not an
830
- * account exists; nothing is revealed about who has one.
831
- */
832
- startEmailVerification(request: EmailVerificationStartRequest): Promise<EmailVerificationStartResponse>;
833
- /**
834
- * Confirm the code {@link startEmailVerification} sent. Resolves to a
835
- * short-lived one-use ticket: a sign-up passes it (with the email) to
836
- * {@link webauthnRegisterVerify}; a recovery passes it as `recoveryTicket`
837
- * to {@link webauthnRegisterOptions} and {@link webauthnRegisterVerify}.
838
- */
839
- confirmEmailVerification(verificationId: string, code: string): Promise<EmailVerificationConfirmResponse>;
840
- /**
841
- * Begin a WebAuthn / passkey REGISTRATION ceremony. Requests the
842
- * `PublicKeyCredentialCreationOptions` the browser's `navigator.credentials
843
- * .create()` (or `@simplewebauthn/browser`'s `startRegistration`) needs.
844
- *
845
- * With a bearer token planted this adds a passkey to the signed-in account.
846
- * Without one, `username` is a prospective sign-up's handle, and
847
- * `recoveryTicket` a recovery's new passkey for the account it names. The
848
- * returned options are OPAQUE — Oxy does not own their shape (the browser /
849
- * `@simplewebauthn` does), so they pass through as `unknown` for the caller
850
- * to hand straight to the ceremony.
851
- */
852
- webauthnRegisterOptions(request?: {
853
- username?: string;
854
- recoveryTicket?: string;
855
- }): Promise<unknown>;
856
- /**
857
- * Finish a WebAuthn / passkey REGISTRATION ceremony. Forwards the opaque
858
- * browser `RegistrationResponseJSON` (`response`) alongside the Oxy envelope
859
- * (desired `username` for signup + the device-session naming fields).
860
- *
861
- * Server branches, disambiguated by the response shape:
862
- * - **Sign-up** (no bearer; `username`, `email`, `emailTicket`) and
863
- * **recovery** (no bearer; `recoveryTicket`): the account is created, or
864
- * gains the passkey, and a session is minted — the response carries
865
- * `sessionId`, is the SAME {@link LoginResult} contract as
866
- * `POST /auth/verify`, and its access token is planted here.
867
- * - **Link** (bearer present): the passkey is attached to the signed-in
868
- * account and the server returns `{ success, message }` with no session,
869
- * which is returned verbatim (no token planting).
870
- */
871
- webauthnRegisterVerify(response: unknown, envelope?: {
872
- username?: string;
873
- /** Sign-up: the recovery email, confirmed with `emailTicket`. */
874
- email?: string;
875
- emailTicket?: string;
876
- /** Recovery: the ticket {@link confirmEmailVerification} returned. */
877
- recoveryTicket?: string;
878
- deviceName?: string;
879
- deviceFingerprint?: string;
880
- }): Promise<{
881
- success: true;
882
- message: string;
883
- } | LoginResult>;
884
- /**
885
- * Begin a WebAuthn / passkey AUTHENTICATION ceremony. Requests the
886
- * `PublicKeyCredentialRequestOptions` the browser's `navigator.credentials
887
- * .get()` (or `@simplewebauthn/browser`'s `startAuthentication`) needs.
888
- *
889
- * When `username` is present the server scopes `allowCredentials` to that
890
- * user's passkeys (username-first); when omitted it returns an empty
891
- * allow-list for the usernameless / discoverable-credential flow. The
892
- * returned options are OPAQUE and pass through as `unknown`.
893
- */
894
- webauthnLoginOptions(username?: string): Promise<unknown>;
895
- /**
896
- * Finish a WebAuthn / passkey AUTHENTICATION ceremony. Forwards the opaque
897
- * browser `AuthenticationResponseJSON` (`response`) alongside the
898
- * device-session envelope. Resolves to the SAME {@link LoginResult} contract
899
- * as `POST /auth/verify`; the access token is planted immediately, and the
900
- * response's `deviceId` + `deviceSecret` are the zero-cookie restore
901
- * credential.
902
- */
903
- webauthnLoginVerify(response: unknown, envelope?: {
904
- deviceName?: string;
905
- deviceFingerprint?: string;
906
- }): Promise<LoginResult>;
907
- /**
908
- * Exchange an OAuth authorization code (returned to the RP redirect URI
909
- * after sign-in at auth.oxy.so) for a device-first session.
910
- * Public first-party clients use PKCE (`codeVerifier`); the access token is
911
- * planted immediately on success.
912
- *
913
- * Speaks the standard RFC 6749 §4.1.3 token request — a form-urlencoded
914
- * body with snake_case parameters and `grant_type=authorization_code` — and
915
- * reads the flat §5.1 response. The camelCase JSON request and `{ data }`
916
- * response this method used before were an Oxy invention no OAuth library
917
- * could interoperate with; the endpoint no longer accepts them. The method's
918
- * OWN signature is unchanged, so callers are unaffected.
919
- *
920
- * `deviceId` + `deviceSecret` are OPTIONAL and their absence is a valid
921
- * outcome, not an error. A third-party grant is meant to be isolated from the
922
- * browser's shared DeviceSession, so the token endpoint must be free to return
923
- * no device credential at all — the guard that used to require the pair made
924
- * that omission unshippable, since it turned every third-party sign-in through
925
- * the SDK into a silent `exchange-failed`.
926
- *
927
- * The cost is real and deliberate: a DEVICE-LESS session cannot use the
928
- * zero-cookie mint lane (`POST /session/device/token`), because that lane's
929
- * whole proof is possession of a `deviceSecret`. Its lifetime is therefore the
930
- * access token itself — nothing persists a restore credential, the cold boot's
931
- * `device-secret-mint` step reports `no-secret` and skips, and the refresh
932
- * scheduler has nothing to re-mint from. When the token expires the session
933
- * ends LOUDLY: the 401 lane clears the tokens and the provider resolves signed
934
- * out, so the app can run the OAuth flow again. It never degrades into a
935
- * session that looks alive and cannot refresh.
936
- */
937
- exchangeOAuthCode(params: {
938
- code: string;
939
- clientId: string;
940
- redirectUri: string;
941
- codeVerifier: string;
942
- }): Promise<OAuthTokenExchangeResult>;
943
- /**
944
- * Fetch OpenID Connect userinfo for the current bearer (`GET /auth/oauth/userinfo`).
945
- * The response is a flat JSON document — no `{ data }` wrapper.
946
- */
947
- getOAuthUserInfo(): Promise<OAuthUserInfoResponse>;
948
- httpService: import("../HttpService").HttpService;
949
- cloudURL: string;
950
- config: import("../OxyServices.base").OxyConfig;
951
- __resetTokensForTests(): void;
952
- makeRequest<T_1>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: any, options?: import("../HttpService").RequestOptions): Promise<T_1>;
953
- getBaseURL(): string;
954
- getClient(): import("../HttpService").HttpService;
955
- createLinkedClient(config: import("../OxyServices.base").OxyConfig): import("..").LinkedHttpClient;
956
- getMetrics(): {
957
- totalRequests: number;
958
- successfulRequests: number;
959
- failedRequests: number;
960
- cacheHits: number;
961
- cacheMisses: number;
962
- averageResponseTime: number;
963
- };
964
- clearCache(): void;
965
- clearCacheEntry(key: string): void;
966
- clearCacheByPrefix(prefix: string): number;
967
- getCacheStats(): {
968
- size: number;
969
- hits: number;
970
- misses: number;
971
- hitRate: number;
972
- };
973
- getCloudURL(): string;
974
- setTokens(accessToken: string): void;
975
- clearTokens(): void;
976
- onTokensChanged(listener: (accessToken: string | null) => void): () => void;
977
- _cachedUserId: string | null | undefined;
978
- _cachedAccessToken: string | null;
979
- getCurrentUserId(): string | null;
980
- hasValidToken(): boolean;
981
- getAccessToken(): string | null;
982
- getAccessTokenExpiry(): number | null;
983
- waitForAuth(timeoutMs?: number): Promise<boolean>;
984
- withAuthRetry<T_1>(operation: () => Promise<T_1>, operationName: string, options?: {
985
- maxRetries?: number;
986
- retryDelay?: number;
987
- authTimeoutMs?: number;
988
- }): Promise<T_1>;
989
- validate(): Promise<boolean>;
990
- handleError(error: unknown): Error;
991
- healthCheck(): Promise<{
992
- status: string;
993
- users?: number;
994
- timestamp?: string;
995
- [key: string]: any;
996
- }>;
997
- };
998
- } & T;