@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,413 @@
1
+ /**
2
+ * Unified HTTP Service
3
+ *
4
+ * Consolidates HttpClient + RequestManager into a single efficient class.
5
+ * Uses native fetch instead of axios for smaller bundle size.
6
+ *
7
+ * Handles:
8
+ * - Authentication (token management, auto-refresh)
9
+ * - Caching (TTL-based)
10
+ * - Deduplication (concurrent requests)
11
+ * - Retry logic
12
+ * - Error handling
13
+ * - Request queuing
14
+ */
15
+ import type { OxyConfig } from './models/interfaces';
16
+ import type { DeviceSecretMintOutcome } from './session/refresh';
17
+ export type AuthRefreshReason = 'preflight' | 'response-401';
18
+ export type AuthRefreshHandler = (reason: AuthRefreshReason) => Promise<string | null>;
19
+ export type AccessTokenProvider = () => string | null;
20
+ /**
21
+ * A low-level authenticated request whose response body remains unread.
22
+ *
23
+ * This is intended for streaming protocols such as SSE. The body must already
24
+ * be serialised so it can be replayed once after an access-token refresh.
25
+ */
26
+ export interface AuthenticatedResponseRequest {
27
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
28
+ url: string;
29
+ body?: string;
30
+ headers?: Record<string, string>;
31
+ signal?: AbortSignal;
32
+ }
33
+ export interface RequestOptions {
34
+ cache?: boolean;
35
+ cacheTTL?: number;
36
+ deduplicate?: boolean;
37
+ retry?: boolean;
38
+ maxRetries?: number;
39
+ timeout?: number;
40
+ signal?: AbortSignal;
41
+ headers?: Record<string, string>;
42
+ responseType?: 'blob';
43
+ /**
44
+ * Skip BOTH the bearer auth header (and its near-expiry preflight refresh)
45
+ * AND the 401-driven auto-refresh/retry for this request.
46
+ *
47
+ * Required for the body-authenticated device-secret mint (`POST
48
+ * /session/device/token`): it does not need a bearer, and — critically — it is
49
+ * itself invoked from inside the registered `AuthRefreshHandler`. If it went
50
+ * through the normal preflight, `getAuthHeader` would call
51
+ * `refreshAccessToken` while the handler-owning `tokenRefreshPromise` is
52
+ * still in flight and await ITSELF (deadlock). Skipping auth makes the
53
+ * mint call fully independent of the current (near-expired) bearer.
54
+ */
55
+ skipAuth?: boolean;
56
+ /**
57
+ * Execute this request WITHOUT taking a `RequestQueue` slot — run it directly.
58
+ *
59
+ * A queue slot represents network occupancy for ordinary DATA requests. The
60
+ * CONTROL-PLANE calls the auth lane depends on (the device-secret mint, `POST
61
+ * /session/device/token`, reached from `getAuthHeader` → `refreshAccessToken`)
62
+ * must never compete for a slot: when `maxConcurrentRequests` requests are all
63
+ * parked awaiting that very mint, a queued mint could never acquire a slot to
64
+ * run — a systemic deadlock. `bypassQueue` lets the mint run even when the
65
+ * queue is saturated. (The auth preflight is also resolved OUTSIDE the slot in
66
+ * `request()`, so ordinary requests never hold a slot while awaiting the mint;
67
+ * this flag is the explicit guarantee for the mint itself.)
68
+ */
69
+ bypassQueue?: boolean;
70
+ }
71
+ interface RequestConfig extends RequestOptions {
72
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
73
+ url: string;
74
+ data?: unknown;
75
+ params?: Record<string, unknown>;
76
+ /** @internal Used to prevent infinite auth retry loops */
77
+ _isAuthRetry?: boolean;
78
+ /** @internal Used to prevent infinite CSRF retry loops */
79
+ _isCsrfRetry?: boolean;
80
+ }
81
+ /**
82
+ * Unified HTTP Service
83
+ *
84
+ * Consolidates HttpClient + RequestManager into a single efficient class.
85
+ * Uses native fetch instead of axios for smaller bundle size.
86
+ */
87
+ export declare class HttpService {
88
+ private baseURL;
89
+ private tokenStore;
90
+ private cache;
91
+ /**
92
+ * When true, the per-instance GET response cache is OFF: GET responses are
93
+ * never read from nor written to {@link cache}, so every request hits the
94
+ * network. Set from `config.enableCache === false` OR `config.cacheTTL <= 0`.
95
+ * A disabled instance does not register its cache for the global cleanup
96
+ * interval (nothing ever lands in it). Request deduplication is unaffected —
97
+ * concurrent identical in-flight requests still collapse into one.
98
+ */
99
+ private readonly cacheDisabled;
100
+ private deduplicator;
101
+ private requestQueue;
102
+ private logger;
103
+ private config;
104
+ private tokenRefreshPromise;
105
+ /**
106
+ * Epoch ms of the last FAILED refresh (0 = none since the last success). The
107
+ * post-failure cooldown is measured from here; its length depends on whether
108
+ * the current token is still valid ({@link TOKEN_REFRESH_COOLDOWN_MS}) or
109
+ * already expired ({@link EXPIRED_TOKEN_REFRESH_COOLDOWN_MS}), so an expired
110
+ * token recovers promptly the instant it crosses `exp` — without storing a
111
+ * fixed deadline that could not shrink once the token expired mid-cooldown.
112
+ */
113
+ private lastRefreshFailureAt;
114
+ private authRefreshHandler;
115
+ private accessTokenProvider;
116
+ private deviceSecretMintInFlight;
117
+ /**
118
+ * Epoch (ms) before which a cache-size telemetry warning must not be
119
+ * re-emitted. Throttles the {@link CACHE_SOFT_MAX_ENTRIES} warning to at most
120
+ * one per {@link CACHE_SIZE_WARNING_THROTTLE_MS} window.
121
+ */
122
+ private cacheSizeWarningSilentUntil;
123
+ /**
124
+ * Fan-out listeners notified on EVERY access-token change on this instance:
125
+ * explicit `setTokens`, `clearTokens`, a refresh-handler rotation, and the
126
+ * internal 401-driven clear. This is a Set so multiple independent observers
127
+ * can mirror token state without clobbering each other.
128
+ *
129
+ * Each listener receives the resulting access token, or `null` when cleared.
130
+ */
131
+ private _tokenChangeListeners;
132
+ private requestMetrics;
133
+ constructor(config: OxyConfig);
134
+ private syncAccessTokenFromProvider;
135
+ /**
136
+ * Robust FormData detection that works in browser, React Native, and
137
+ * Node.js polyfill environments.
138
+ *
139
+ * Why we don't use `instanceof FormData` alone:
140
+ * - React Native's FormData is a separate class, not the browser one —
141
+ * `instanceof FormData` is true only inside the JS runtime that
142
+ * instantiated the value (browser-side polyfills also have their own).
143
+ * - The Node.js `form-data` polyfill ships its own constructor.
144
+ *
145
+ * Why we explicitly reject `URLSearchParams`:
146
+ * - `URLSearchParams` ALSO exposes `append` / `get` / `has`, so the
147
+ * duck-type fallback below would have misidentified it as FormData and
148
+ * sent an empty multipart body.
149
+ * - It has its own encoding path instead — see {@link isUrlSearchParams}.
150
+ */
151
+ private isFormData;
152
+ /**
153
+ * True for an `application/x-www-form-urlencoded` payload.
154
+ *
155
+ * Needed because a handful of endpoints are defined by a standard that fixes
156
+ * their request encoding rather than by our own JSON conventions — today
157
+ * `POST /auth/oauth/token`, whose encoding RFC 6749 §4.1.3 mandates. Passing
158
+ * a `URLSearchParams` as `data` selects that encoding; everything else is
159
+ * still JSON.
160
+ */
161
+ private isUrlSearchParams;
162
+ /**
163
+ * Main request method - handles everything in one place
164
+ */
165
+ request<T = unknown>(config: RequestConfig): Promise<T>;
166
+ /**
167
+ * Soft cache-size guard. Emits a single throttled telemetry warning when the
168
+ * identity-scoped response cache grows past {@link CACHE_SOFT_MAX_ENTRIES}.
169
+ *
170
+ * This intentionally does NOT evict: the {@link TTLCache} already bounds
171
+ * memory by TTL (and the global cleanup interval sweeps expired entries), so
172
+ * an LRU here would only risk thrashing a legitimately warm cache. The point
173
+ * is observability — if entry count climbs and stays high, an identity tag or
174
+ * cache key is folding in volatile data (a per-request nonce, an undecodable
175
+ * rotating token) and the cache is no longer doing its job. Surfacing that via
176
+ * the logger lets a consumer with `enableLogging` catch the regression in the
177
+ * field instead of debugging silent memory growth.
178
+ */
179
+ private warnIfCacheOversized;
180
+ /**
181
+ * Upload via XMLHttpRequest (React Native FormData workaround).
182
+ *
183
+ * Expo SDK 56's "winter fetch" cannot serialize RN file descriptors
184
+ * (`{uri, type, name}`) — `convertFormDataAsync` rejects them as
185
+ * `Unsupported FormDataPart implementation`. RN's native XHR streams
186
+ * the file from disk correctly, so multipart uploads go through XHR
187
+ * on RN only.
188
+ *
189
+ * Returns a standard `Response` so downstream parsing in `request()`
190
+ * (status checks, 401/403 retries, JSON/blob/text parsing) is identical
191
+ * to the fetch path.
192
+ */
193
+ private uploadViaXHR;
194
+ /**
195
+ * Parse raw header string from `XMLHttpRequest.getAllResponseHeaders()`
196
+ * into a `Headers`-compatible object.
197
+ */
198
+ private static parseXHRHeaders;
199
+ /**
200
+ * Delimiter that separates the logical `method:url[:data]` portion of a
201
+ * cache key from its identity suffix. Always APPENDED, never used to parse
202
+ * a key apart, so the `method:url` prefix stays intact for
203
+ * `clearCacheByPrefix` sweeps and `clearCacheEntry` base-key matching.
204
+ * The `clearCacheEntry` callsites all pass fixed, dataless logical keys
205
+ * (`GET:/users/<id>`, `GET:/session/user/<sessionId>`,
206
+ * `GET:/auth/grants`), so this readable suffix can never be
207
+ * ambiguous with a serialized request body.
208
+ */
209
+ private static readonly CACHE_IDENTITY_DELIM;
210
+ /**
211
+ * The keys whose presence beside `data` makes a body a PAGE rather than a
212
+ * payload — see {@link unwrapResponse} for why this list is narrow.
213
+ *
214
+ * - `pagination` — the offset-paginated house envelope (`sendPaginated`).
215
+ * - `nextCursor` — the keyset-paginated one (the account audit trails).
216
+ *
217
+ * Membership is decided by key PRESENCE, never by value: the last page sends
218
+ * `nextCursor: null`, and an envelope that collapsed into a bare payload
219
+ * exactly when the stream ended would be a worse bug than the one this fixes.
220
+ */
221
+ private static readonly PAGE_ENVELOPE_KEYS;
222
+ /**
223
+ * Derive a stable, non-sensitive identity discriminator for cache scoping.
224
+ *
225
+ * Thin instance wrapper over the pure {@link computeIdentityTag} helper —
226
+ * binds it to this instance's live access token. See that function's docs for
227
+ * the full resolution contract (anon fallback, decoded `userId || id`,
228
+ * token-hash fallback for undecodable tokens).
229
+ */
230
+ private computeIdentityTag;
231
+ /**
232
+ * Generate cache key efficiently
233
+ * Uses a content-addressed hash for large payloads so two requests with
234
+ * the same shape but different values never collide on the same key
235
+ * (which would silently serve stale data — e.g. paginated search results,
236
+ * large object updates).
237
+ *
238
+ * The key is identity-scoped: the logical `method:url[:data]` portion is
239
+ * suffixed with ` id=<identityTag>` so two callers with different
240
+ * identities (anon vs authed, or two different users) never share an entry.
241
+ * The identity tag is placed at the END so the key still STARTS with
242
+ * `method:url`, preserving the prefix-based invalidation in
243
+ * `clearCacheByPrefix` (e.g. `GET:/session/user/`) and the base-key matching
244
+ * in `clearCacheEntry`.
245
+ */
246
+ private generateCacheKey;
247
+ /**
248
+ * Build the identity-agnostic portion of a cache key (`method:url[:data]`).
249
+ * Kept separate so identity scoping is applied in exactly one place
250
+ * (`generateCacheKey`) and cannot drift between the cache and dedupe paths.
251
+ */
252
+ private generateBaseCacheKey;
253
+ /**
254
+ * Build full URL with query params
255
+ */
256
+ private buildURL;
257
+ private getCredentialsMode;
258
+ private shouldSendCredentials;
259
+ /**
260
+ * Fetch CSRF token from server (with deduplication)
261
+ * Required for state-changing requests (POST, PUT, PATCH, DELETE)
262
+ */
263
+ private fetchCsrfToken;
264
+ /**
265
+ * Get auth header with automatic token refresh
266
+ */
267
+ private getAuthHeader;
268
+ refreshAccessToken(reason: AuthRefreshReason): Promise<string | null>;
269
+ /**
270
+ * Whether the CURRENT stored access token is already past its `exp`. Drives
271
+ * the shorter post-failure refresh cooldown ({@link EXPIRED_TOKEN_REFRESH_COOLDOWN_MS}):
272
+ * a still-valid (near-expiry) token can wait out the full cooldown, but an
273
+ * expired one must re-mint promptly. Returns `false` for an absent or
274
+ * opaque/no-`exp` token — no proof it is expired, so keep the conservative
275
+ * (longer) cooldown and avoid an unnecessary retry loop.
276
+ */
277
+ private isAccessTokenExpired;
278
+ /**
279
+ * PROCESS-WIDE single-flight for the rotating device-secret mint
280
+ * (`POST /session/device/token`).
281
+ *
282
+ * The server rotates the presented `deviceSecret` on every successful mint, so
283
+ * two concurrent mints would double-rotate and the durable store could end up
284
+ * holding a superseded secret → a later cold-boot mint 401s → the user is
285
+ * signed out. Every mint lane (the re-mint handler behind `refreshAccessToken`,
286
+ * the device-first cold boot, the socket token transport, the tab-focus
287
+ * reconcile) funnels its `refreshDeviceSecretArm` call through here, so
288
+ * concurrent callers await the SAME in-flight mint and all receive its result —
289
+ * exactly one server rotation.
290
+ *
291
+ * Distinct from {@link tokenRefreshPromise} (which dedups the FULL re-mint
292
+ * handler incl. the native shared-key arm + the failure cooldown): this inner
293
+ * guard serializes the rotation itself across BOTH the handler and the
294
+ * handler-independent cold boot, which never runs through `refreshAccessToken`.
295
+ */
296
+ runSingleFlightDeviceSecretMint(mint: () => Promise<DeviceSecretMintOutcome>): Promise<DeviceSecretMintOutcome>;
297
+ /**
298
+ * Unwrap the standardized API response envelope — EXCEPT when the envelope is
299
+ * a page, in which case it travels whole.
300
+ *
301
+ * `{ data: <payload> }` is the house success envelope (`sendSuccess`), and
302
+ * reducing it to `<payload>` is what every call site in the SDK expects. But
303
+ * the reduction DISCARDS every sibling key, silently, and a page's siblings
304
+ * are the only thing that says where the next page starts. That is how
305
+ * `GET /accounts/:id/audit` lost its `nextCursor`: the caller received a bare
306
+ * array, `getNextPageParam` read `undefined`, and pagination was dead past the
307
+ * first page with nothing to show that it was.
308
+ *
309
+ * ## Why the rule is narrow, and not "any sibling key survives"
310
+ *
311
+ * "An object carrying `data` plus anything else is not an envelope" is the
312
+ * tempting general rule, and it is wrong here: this API already answers
313
+ * `{ data, count }` on ~15 routes, plus `{ data, source }`, `{ data, reason }`
314
+ * and `{ data, credentialRevoked }`, and a dozen measured Console call sites
315
+ * type those as the bare payload (`Array<ProviderConnection>`,
316
+ * `AccountBillingState | null`, …). Preserving those envelopes would hand every
317
+ * one of them an object where it expects its payload — at runtime only, since
318
+ * the response type is a call-site assertion. So the rule names PAGINATION
319
+ * specifically: `data` beside {@link PAGE_ENVELOPE_KEYS} is a page.
320
+ *
321
+ * A route whose sibling key genuinely matters to its caller belongs in that
322
+ * list, or should not be a sibling of `data` at all — the cursor-paginated
323
+ * surfaces already in the SDK (`{ follows, nextCursor }`,
324
+ * `{ records, nextCursor }`) sidestep this by never using `data`.
325
+ */
326
+ private unwrapResponse;
327
+ /**
328
+ * Update request metrics
329
+ */
330
+ private updateMetrics;
331
+ /**
332
+ * Send an authenticated request without consuming its response body.
333
+ *
334
+ * Regular {@link request} calls parse the body before returning. Streaming
335
+ * consumers instead need the original `Response`, while retaining the same
336
+ * token ownership and one-time 401 refresh behaviour as every SDK request.
337
+ * No SDK timeout is installed after the connection opens: the caller-owned
338
+ * abort signal defines the lifetime of a healthy stream.
339
+ */
340
+ requestAuthenticatedResponse(config: AuthenticatedResponseRequest): Promise<Response>;
341
+ private requestAuthenticatedResponseAttempt;
342
+ get<T = unknown>(url: string, config?: Omit<RequestConfig, 'method' | 'url'>): Promise<T>;
343
+ post<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'method' | 'url' | 'data'>): Promise<T>;
344
+ put<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'method' | 'url' | 'data'>): Promise<T>;
345
+ patch<T = unknown>(url: string, data?: unknown, config?: Omit<RequestConfig, 'method' | 'url' | 'data'>): Promise<T>;
346
+ delete<T = unknown>(url: string, config?: Omit<RequestConfig, 'method' | 'url'>): Promise<T>;
347
+ setTokens(accessToken: string): void;
348
+ setAuthRefreshHandler(handler: AuthRefreshHandler | null): void;
349
+ setAccessTokenProvider(provider: AccessTokenProvider | null): void;
350
+ clearTokens(): void;
351
+ /**
352
+ * Subscribe to access-token changes on this instance.
353
+ *
354
+ * Fires on every mutation of the access token — `setTokens`, `clearTokens`,
355
+ * a successful silent refresh, and the internal 401-driven clear — passing
356
+ * the resulting token (or `null` when cleared). Returns an unsubscribe
357
+ * function; call it on teardown to avoid leaks.
358
+ *
359
+ * This is the single hook downstream code (e.g. @oxy.so/services' OxyProvider)
360
+ * uses to keep an external token sink — such as the shared `oxyClient`
361
+ * singleton — in lockstep with the active session, regardless of which code
362
+ * path mutated the token.
363
+ */
364
+ addTokenChangeListener(listener: (accessToken: string | null) => void): () => void;
365
+ /**
366
+ * Notify all token-change listeners with the current access token.
367
+ * Listener exceptions are isolated so one bad subscriber cannot break token
368
+ * propagation to the others or to the calling auth flow.
369
+ * @internal
370
+ */
371
+ private notifyTokenChange;
372
+ getAccessToken(): string | null;
373
+ hasAccessToken(): boolean;
374
+ getBaseURL(): string;
375
+ clearCache(): void;
376
+ /**
377
+ * Delete a cache entry by its LOGICAL key (`method:url[:data]`).
378
+ *
379
+ * Because the response cache is identity-scoped — stored keys carry an
380
+ * ` id=<identityTag>` suffix — a caller passing the logical key
381
+ * `GET:/users/<id>` must invalidate that resource for EVERY identity that
382
+ * cached it (e.g. `updateProfile` busting a user representation that may be
383
+ * cached under both the owner's id and a viewer's id). We therefore delete
384
+ * the exact key (for any pre-existing un-suffixed entries) AND every
385
+ * identity-scoped variant `<key> id=*`.
386
+ */
387
+ clearCacheEntry(key: string): void;
388
+ /**
389
+ * Delete every cache entry whose key starts with `prefix`.
390
+ *
391
+ * Used by mutations that don't know the exact downstream cache keys —
392
+ * e.g. `updateProfile` invalidating all `GET:/session/user/*` entries
393
+ * without having to track every active session ID. Returns the number of
394
+ * deleted entries (for observability in tests).
395
+ */
396
+ clearCacheByPrefix(prefix: string): number;
397
+ getCacheStats(): {
398
+ size: number;
399
+ hits: number;
400
+ misses: number;
401
+ hitRate: number;
402
+ };
403
+ getMetrics(): {
404
+ totalRequests: number;
405
+ successfulRequests: number;
406
+ failedRequests: number;
407
+ cacheHits: number;
408
+ cacheMisses: number;
409
+ averageResponseTime: number;
410
+ };
411
+ __resetTokensForTests(): void;
412
+ }
413
+ export {};
@@ -0,0 +1,187 @@
1
+ import type { OxyConfig as OxyConfigBase } from './models/interfaces';
2
+ import { HttpService, type RequestOptions } from './HttpService';
3
+ export interface OxyConfig extends OxyConfigBase {
4
+ cloudURL?: string;
5
+ }
6
+ export interface LinkedHttpClient {
7
+ client: HttpService;
8
+ dispose(): void;
9
+ }
10
+ /**
11
+ * Base class for OxyServices with core infrastructure
12
+ */
13
+ export declare class OxyServicesBase {
14
+ httpService: HttpService;
15
+ cloudURL: string;
16
+ config: OxyConfig;
17
+ constructor(...args: any[]);
18
+ __resetTokensForTests(): void;
19
+ /**
20
+ * Make a request with all performance optimizations
21
+ * This is the main method for all API calls - ensures authentication and performance features
22
+ */
23
+ makeRequest<T>(method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', url: string, data?: any, options?: RequestOptions): Promise<T>;
24
+ /**
25
+ * Get the configured Oxy API base URL
26
+ */
27
+ getBaseURL(): string;
28
+ /**
29
+ * Get the HTTP service instance
30
+ * Useful for advanced use cases where direct access to the HTTP service is needed
31
+ */
32
+ getClient(): HttpService;
33
+ /**
34
+ * Create an app/backend HTTP client linked to this Oxy session.
35
+ *
36
+ * Use this when an app has its own API origin (for example
37
+ * `https://api.syra.fm`) but authentication is owned by the canonical
38
+ * OxyServices instance mounted in OxyProvider. The returned client has its own
39
+ * base URL, cache and request queue, but its bearer token is kept in lockstep
40
+ * with this session and its 401 refresh path delegates back to this session.
41
+ *
42
+ * **GET response caching is OFF by default for linked clients.** The SDK's
43
+ * per-instance GET cache is only safe where the SDK OWNS invalidation: on the
44
+ * canonical OxyServices client, every mutation (`updateProfile`, `followUser`,
45
+ * `blockUser`, …) busts the matching cached GET. A linked client targets the
46
+ * consuming app's OWN backend (`api.mention.earth`, `api.syra.fm`, …), whose
47
+ * resources and write endpoints the SDK has no knowledge of — so it cannot
48
+ * invalidate them, and a cached GET there would silently serve stale data
49
+ * after the app mutates its own data. Caching is therefore unsafe-by-construction
50
+ * here and is left to the consumer's own layer (React Query / stores), which
51
+ * owns its invalidation. Pass `createLinkedClient({ baseURL, enableCache: true })`
52
+ * to explicitly opt back in when the consumer accepts that responsibility.
53
+ */
54
+ createLinkedClient(config: OxyConfig): LinkedHttpClient;
55
+ /**
56
+ * Get performance metrics
57
+ */
58
+ getMetrics(): {
59
+ totalRequests: number;
60
+ successfulRequests: number;
61
+ failedRequests: number;
62
+ cacheHits: number;
63
+ cacheMisses: number;
64
+ averageResponseTime: number;
65
+ };
66
+ /**
67
+ * Clear request cache
68
+ */
69
+ clearCache(): void;
70
+ /**
71
+ * Clear specific cache entry
72
+ */
73
+ clearCacheEntry(key: string): void;
74
+ /**
75
+ * Clear every cache entry whose key starts with `prefix`.
76
+ * Useful for mutations that invalidate a family of GET responses
77
+ * without enumerating each one (e.g. all session-user lookups after
78
+ * a profile update).
79
+ */
80
+ clearCacheByPrefix(prefix: string): number;
81
+ /**
82
+ * Get cache statistics
83
+ */
84
+ getCacheStats(): {
85
+ size: number;
86
+ hits: number;
87
+ misses: number;
88
+ hitRate: number;
89
+ };
90
+ /**
91
+ * Get the configured Oxy Cloud (file storage/CDN) URL
92
+ */
93
+ getCloudURL(): string;
94
+ /**
95
+ * Set authentication tokens
96
+ */
97
+ setTokens(accessToken: string): void;
98
+ /**
99
+ * Clear stored authentication tokens
100
+ */
101
+ clearTokens(): void;
102
+ /**
103
+ * Subscribe to access-token changes on this client.
104
+ *
105
+ * The listener fires on every access-token mutation — explicit
106
+ * `setTokens`/`clearTokens`, a successful silent refresh, and the internal
107
+ * 401-driven clear — receiving the resulting token, or `null` when cleared.
108
+ * Returns an unsubscribe function.
109
+ *
110
+ * Primary use: keeping an external token sink (e.g. the shared `oxyClient`
111
+ * singleton) in lockstep with whichever `OxyServices` instance actually owns
112
+ * the session, so imperative consumers reading the singleton always observe
113
+ * the live token regardless of the code path that changed it.
114
+ */
115
+ onTokensChanged(listener: (accessToken: string | null) => void): () => void;
116
+ /** @internal */ _cachedUserId: string | null | undefined;
117
+ /** @internal */ _cachedAccessToken: string | null;
118
+ /**
119
+ * Get the current user ID from the access token.
120
+ * Caches the decoded value and invalidates when the token changes.
121
+ */
122
+ getCurrentUserId(): string | null;
123
+ /**
124
+ * Check if the client has a valid access token (public method)
125
+ */
126
+ hasValidToken(): boolean;
127
+ /**
128
+ * Get the raw access token (for constructing anchor URLs when needed)
129
+ */
130
+ getAccessToken(): string | null;
131
+ /**
132
+ * Decode the current access token and return its `exp` claim in SECONDS since
133
+ * the Unix epoch (the raw JWT `exp` unit), or `null` when there is no token,
134
+ * the token is opaque/undecodable, or it carries no numeric `exp`.
135
+ *
136
+ * Exposed so `@oxy.so/services` can schedule a PROACTIVE in-session refresh a
137
+ * fixed lead before expiry without re-importing a JWT decoder (and without
138
+ * duplicating the `jwt-decode` dependency in the RN bundle). HttpService keeps
139
+ * the per-request preflight refresh; this powers the idle/background timer.
140
+ */
141
+ getAccessTokenExpiry(): number | null;
142
+ /**
143
+ * Wait for authentication to be ready
144
+ *
145
+ * Optimized for high-scale usage with immediate synchronous check and adaptive polling.
146
+ * Returns immediately if token is already available (0ms delay), otherwise uses
147
+ * adaptive polling that starts fast (50ms) and gradually increases to reduce CPU usage.
148
+ *
149
+ * @param timeoutMs Maximum time to wait in milliseconds (default: 5000ms)
150
+ * @returns Promise that resolves to true if authentication is ready, false if timeout
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * const isReady = await oxyServices.waitForAuth(3000);
155
+ * if (isReady) {
156
+ * // Proceed with authenticated operations
157
+ * }
158
+ * ```
159
+ */
160
+ waitForAuth(timeoutMs?: number): Promise<boolean>;
161
+ /**
162
+ * Execute a function with automatic authentication retry logic
163
+ * This handles the common case where API calls are made before authentication completes
164
+ */
165
+ withAuthRetry<T>(operation: () => Promise<T>, operationName: string, options?: {
166
+ maxRetries?: number;
167
+ retryDelay?: number;
168
+ authTimeoutMs?: number;
169
+ }): Promise<T>;
170
+ /**
171
+ * Validate the current access token with the server
172
+ */
173
+ validate(): Promise<boolean>;
174
+ /**
175
+ * Centralized error handling
176
+ */
177
+ handleError(error: unknown): Error;
178
+ /**
179
+ * Health check endpoint
180
+ */
181
+ healthCheck(): Promise<{
182
+ status: string;
183
+ users?: number;
184
+ timestamp?: string;
185
+ [key: string]: any;
186
+ }>;
187
+ }