@oxy.so/core 1.0.0

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