@oxy.so/core 1.18.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (663) hide show
  1. package/README.md +13 -7
  2. package/dist/cjs/HttpService.js +159 -111
  3. package/dist/cjs/OxyServices.errors.js +48 -1
  4. package/dist/cjs/OxyServices.js +263 -60
  5. package/dist/cjs/api/accounts.js +231 -0
  6. package/dist/cjs/api/agency.js +102 -0
  7. package/dist/cjs/api/appData.js +45 -0
  8. package/dist/cjs/api/apps.js +197 -0
  9. package/dist/cjs/api/assets.js +329 -0
  10. package/dist/cjs/api/auth.js +900 -0
  11. package/dist/cjs/api/billing.js +44 -0
  12. package/dist/cjs/api/civic.js +289 -0
  13. package/dist/cjs/api/contacts.js +16 -0
  14. package/dist/cjs/api/devices.js +351 -0
  15. package/dist/cjs/api/follows.js +240 -0
  16. package/dist/cjs/api/identity.js +569 -0
  17. package/dist/cjs/api/linkedAccounts.js +48 -0
  18. package/dist/cjs/api/nodes.js +75 -0
  19. package/dist/cjs/api/notifications.js +75 -0
  20. package/dist/cjs/api/privacy.js +105 -0
  21. package/dist/cjs/api/reputation.js +74 -0
  22. package/dist/cjs/api/session.js +177 -0
  23. package/dist/cjs/api/store.js +199 -0
  24. package/dist/cjs/api/topics.js +66 -0
  25. package/dist/cjs/api/users.js +309 -0
  26. package/dist/cjs/boot/sessionColdBoot.js +4 -4
  27. package/dist/cjs/civic/index.js +16 -0
  28. package/dist/cjs/civic/payloads.js +156 -0
  29. package/dist/cjs/client/context.js +2 -0
  30. package/dist/cjs/crypto/identityLink.js +5 -5
  31. package/dist/cjs/crypto/index.js +44 -0
  32. package/dist/cjs/crypto/internal.js +37 -0
  33. package/dist/cjs/crypto/keyManager.js +2 -2
  34. package/dist/cjs/crypto/polyfill.js +9 -80
  35. package/dist/cjs/crypto/recoveryPhrase.js +1 -0
  36. package/dist/cjs/crypto/registrationPow.js +1 -1
  37. package/dist/cjs/crypto/signatureService.js +1 -0
  38. package/dist/cjs/i18n/accountCategoryLabels.js +3 -3
  39. package/dist/cjs/i18n/accountRoleLabels.js +7 -7
  40. package/dist/cjs/i18n/index.js +130 -52
  41. package/dist/cjs/i18n/locales/{ar-SA.json → ar-SA.js} +134 -52
  42. package/dist/cjs/i18n/locales/{ca-ES.json → ca-ES.js} +134 -52
  43. package/dist/{esm/i18n/locales/de-DE.json → cjs/i18n/locales/de-DE.js} +136 -54
  44. package/dist/{esm/i18n/locales/en-US.json → cjs/i18n/locales/en-US.js} +163 -245
  45. package/dist/{esm/i18n/locales/es-ES.json → cjs/i18n/locales/es-ES.js} +163 -245
  46. package/dist/cjs/i18n/locales/{fr-FR.json → fr-FR.js} +134 -52
  47. package/dist/cjs/i18n/locales/{it-IT.json → it-IT.js} +134 -52
  48. package/dist/{esm/i18n/locales/ja-JP.json → cjs/i18n/locales/ja-JP.js} +134 -52
  49. package/dist/cjs/i18n/locales/{ko-KR.json → ko-KR.js} +134 -52
  50. package/dist/{esm/i18n/locales/pt-PT.json → cjs/i18n/locales/pt-PT.js} +136 -54
  51. package/dist/{esm/i18n/locales/zh-CN.json → cjs/i18n/locales/zh-CN.js} +135 -53
  52. package/dist/cjs/i18n/reputationCategoryLabels.js +2 -2
  53. package/dist/cjs/i18n/trustTierLabels.js +2 -2
  54. package/dist/cjs/index.js +55 -263
  55. package/dist/cjs/inference/index.js +21 -0
  56. package/dist/cjs/server/OxyServer.js +521 -0
  57. package/dist/cjs/server/auth.js +2 -2
  58. package/dist/cjs/server/index.js +23 -6
  59. package/dist/cjs/server/middleware.js +1154 -0
  60. package/dist/cjs/server/namespaces.js +214 -0
  61. package/dist/cjs/server/rateLimit.js +2 -2
  62. package/dist/cjs/server/requesterAssertion.js +5 -5
  63. package/dist/cjs/server/securityHeaders.js +3 -3
  64. package/dist/cjs/server/traffic.js +7 -6
  65. package/dist/cjs/server/trafficNodeHttp.js +9 -3
  66. package/dist/cjs/server/userInvalidation.js +5 -5
  67. package/dist/cjs/session/accountDialogController.js +23 -23
  68. package/dist/cjs/session/authStateStore.js +2 -2
  69. package/dist/cjs/session/identitySession.js +3 -3
  70. package/dist/cjs/session/index.js +131 -0
  71. package/dist/cjs/session/refresh.js +37 -30
  72. package/dist/cjs/session/sessionClientHost.js +5 -5
  73. package/dist/cjs/session/sharedDeviceCredential.js +3 -2
  74. package/dist/cjs/shared/utils/networkUtils.js +2 -2
  75. package/dist/cjs/utils/accountCacheSweep.js +11 -15
  76. package/dist/cjs/utils/asyncUtils.js +22 -163
  77. package/dist/cjs/utils/authHelpers.js +2 -2
  78. package/dist/cjs/utils/authWebUrl.js +3 -4
  79. package/dist/cjs/utils/avatarUtils.js +2 -2
  80. package/dist/cjs/utils/cache.js +32 -2
  81. package/dist/cjs/utils/cacheKey.js +5 -10
  82. package/dist/cjs/utils/deviceManager.js +17 -16
  83. package/dist/cjs/utils/edgeRegion.js +2 -3
  84. package/dist/cjs/utils/identityCacheSweep.js +6 -10
  85. package/dist/cjs/utils/oxyServiceEnvironment.js +3 -7
  86. package/dist/cjs/utils/requestUtils.js +40 -33
  87. package/dist/cjs/utils/sessionUtils.js +0 -2
  88. package/dist/cjs/utils/tokenClaims.js +34 -0
  89. package/dist/esm/HttpService.js +160 -112
  90. package/dist/esm/OxyServices.errors.js +45 -0
  91. package/dist/esm/OxyServices.js +262 -57
  92. package/dist/esm/api/accounts.js +218 -0
  93. package/dist/esm/api/agency.js +95 -0
  94. package/dist/esm/api/appData.js +40 -0
  95. package/dist/esm/api/apps.js +191 -0
  96. package/dist/esm/api/assets.js +324 -0
  97. package/dist/esm/api/auth.js +858 -0
  98. package/dist/esm/api/billing.js +40 -0
  99. package/dist/esm/api/civic.js +250 -0
  100. package/dist/esm/api/contacts.js +12 -0
  101. package/dist/esm/api/devices.js +346 -0
  102. package/dist/esm/api/follows.js +236 -0
  103. package/dist/esm/api/identity.js +527 -0
  104. package/dist/esm/api/linkedAccounts.js +44 -0
  105. package/dist/esm/api/nodes.js +71 -0
  106. package/dist/esm/api/notifications.js +71 -0
  107. package/dist/esm/api/privacy.js +101 -0
  108. package/dist/esm/api/reputation.js +70 -0
  109. package/dist/esm/api/session.js +173 -0
  110. package/dist/esm/api/store.js +192 -0
  111. package/dist/esm/api/topics.js +62 -0
  112. package/dist/esm/api/users.js +272 -0
  113. package/dist/esm/boot/sessionColdBoot.js +4 -4
  114. package/dist/esm/civic/index.js +10 -0
  115. package/dist/esm/civic/payloads.js +118 -0
  116. package/dist/esm/client/context.js +1 -0
  117. package/dist/esm/crypto/identityLink.js +5 -5
  118. package/dist/esm/crypto/index.js +24 -0
  119. package/dist/esm/crypto/internal.js +19 -0
  120. package/dist/esm/crypto/keyManager.js +2 -2
  121. package/dist/esm/crypto/polyfill.js +10 -81
  122. package/dist/esm/crypto/recoveryPhrase.js +1 -0
  123. package/dist/esm/crypto/registrationPow.js +1 -1
  124. package/dist/esm/crypto/signatureService.js +1 -0
  125. package/dist/esm/i18n/accountCategoryLabels.js +2 -2
  126. package/dist/esm/i18n/accountRoleLabels.js +1 -1
  127. package/dist/esm/i18n/index.js +93 -52
  128. package/dist/esm/i18n/locales/{ar-SA.json → ar-SA.js} +132 -52
  129. package/dist/esm/i18n/locales/{ca-ES.json → ca-ES.js} +132 -52
  130. package/dist/{cjs/i18n/locales/de-DE.json → esm/i18n/locales/de-DE.js} +134 -54
  131. package/dist/{cjs/i18n/locales/en-US.json → esm/i18n/locales/en-US.js} +161 -245
  132. package/dist/{cjs/i18n/locales/es-ES.json → esm/i18n/locales/es-ES.js} +161 -245
  133. package/dist/esm/i18n/locales/{fr-FR.json → fr-FR.js} +132 -52
  134. package/dist/esm/i18n/locales/{it-IT.json → it-IT.js} +132 -52
  135. package/dist/{cjs/i18n/locales/ja-JP.json → esm/i18n/locales/ja-JP.js} +132 -52
  136. package/dist/esm/i18n/locales/{ko-KR.json → ko-KR.js} +132 -52
  137. package/dist/{cjs/i18n/locales/pt-PT.json → esm/i18n/locales/pt-PT.js} +134 -54
  138. package/dist/{cjs/i18n/locales/zh-CN.json → esm/i18n/locales/zh-CN.js} +133 -53
  139. package/dist/esm/i18n/reputationCategoryLabels.js +1 -1
  140. package/dist/esm/i18n/trustTierLabels.js +1 -1
  141. package/dist/esm/index.js +30 -166
  142. package/dist/esm/inference/index.js +13 -0
  143. package/dist/esm/server/OxyServer.js +516 -0
  144. package/dist/esm/server/auth.js +2 -2
  145. package/dist/esm/server/index.js +10 -5
  146. package/dist/esm/server/middleware.js +1147 -0
  147. package/dist/esm/server/namespaces.js +206 -0
  148. package/dist/esm/server/rateLimit.js +2 -2
  149. package/dist/esm/server/requesterAssertion.js +5 -5
  150. package/dist/esm/server/securityHeaders.js +3 -3
  151. package/dist/esm/server/traffic.js +7 -6
  152. package/dist/esm/server/trafficNodeHttp.js +9 -3
  153. package/dist/esm/server/userInvalidation.js +5 -5
  154. package/dist/esm/session/accountDialogController.js +23 -23
  155. package/dist/esm/session/authStateStore.js +2 -2
  156. package/dist/esm/session/identitySession.js +3 -3
  157. package/dist/esm/session/index.js +82 -0
  158. package/dist/esm/session/refresh.js +37 -30
  159. package/dist/esm/session/sessionClientHost.js +5 -5
  160. package/dist/esm/session/sharedDeviceCredential.js +3 -2
  161. package/dist/esm/shared/utils/networkUtils.js +2 -2
  162. package/dist/esm/utils/accountCacheSweep.js +11 -15
  163. package/dist/esm/utils/asyncUtils.js +22 -151
  164. package/dist/esm/utils/authHelpers.js +2 -2
  165. package/dist/esm/utils/authWebUrl.js +3 -4
  166. package/dist/esm/utils/avatarUtils.js +2 -2
  167. package/dist/esm/utils/cache.js +32 -2
  168. package/dist/esm/utils/cacheKey.js +5 -10
  169. package/dist/esm/utils/deviceManager.js +17 -16
  170. package/dist/esm/utils/edgeRegion.js +1 -2
  171. package/dist/esm/utils/identityCacheSweep.js +6 -10
  172. package/dist/esm/utils/oxyServiceEnvironment.js +3 -7
  173. package/dist/esm/utils/requestUtils.js +40 -33
  174. package/dist/esm/utils/sessionUtils.js +0 -2
  175. package/dist/esm/utils/tokenClaims.js +31 -0
  176. package/dist/types/HttpService.d.ts +26 -9
  177. package/dist/types/OxyServices.d.ts +160 -131
  178. package/dist/types/OxyServices.errors.d.ts +42 -0
  179. package/dist/types/api/accounts.d.ts +415 -0
  180. package/dist/types/api/agency.d.ts +135 -0
  181. package/dist/types/api/appData.d.ts +27 -0
  182. package/dist/types/api/apps.d.ts +433 -0
  183. package/dist/types/api/assets.d.ts +174 -0
  184. package/dist/types/api/auth.d.ts +766 -0
  185. package/dist/types/api/billing.d.ts +113 -0
  186. package/dist/types/api/civic.d.ts +203 -0
  187. package/dist/types/api/contacts.d.ts +31 -0
  188. package/{src/mixins/OxyServices.deviceBoot.ts → dist/types/api/devices.d.ts} +130 -110
  189. package/dist/types/api/follows.d.ts +236 -0
  190. package/dist/types/api/identity.d.ts +275 -0
  191. package/dist/types/api/linkedAccounts.d.ts +48 -0
  192. package/dist/types/api/nodes.d.ts +102 -0
  193. package/dist/types/api/notifications.d.ts +77 -0
  194. package/dist/types/api/privacy.d.ts +43 -0
  195. package/dist/types/api/reputation.d.ts +50 -0
  196. package/dist/types/api/session.d.ts +85 -0
  197. package/dist/types/api/store.d.ts +278 -0
  198. package/dist/types/api/topics.d.ts +34 -0
  199. package/dist/types/api/users.d.ts +134 -0
  200. package/dist/types/boot/sessionColdBoot.d.ts +1 -1
  201. package/dist/types/civic/index.d.ts +10 -0
  202. package/dist/types/civic/payloads.d.ts +83 -0
  203. package/dist/types/client/context.d.ts +33 -0
  204. package/dist/types/crypto/identityLink.d.ts +5 -5
  205. package/dist/types/crypto/index.d.ts +24 -0
  206. package/dist/types/crypto/internal.d.ts +19 -0
  207. package/dist/types/crypto/polyfill.d.ts +6 -9
  208. package/dist/types/crypto/registrationPow.d.ts +1 -1
  209. package/dist/types/i18n/accountCategoryLabels.d.ts +1 -1
  210. package/dist/types/i18n/accountRoleLabels.d.ts +1 -1
  211. package/dist/types/i18n/index.d.ts +20 -1
  212. package/dist/types/i18n/locales/ar-SA.d.ts +386 -0
  213. package/dist/types/i18n/locales/ca-ES.d.ts +386 -0
  214. package/dist/types/i18n/locales/de-DE.d.ts +386 -0
  215. package/dist/types/i18n/locales/en-US.d.ts +2034 -0
  216. package/dist/types/i18n/locales/es-ES.d.ts +2034 -0
  217. package/dist/types/i18n/locales/fr-FR.d.ts +386 -0
  218. package/dist/types/i18n/locales/it-IT.d.ts +386 -0
  219. package/dist/types/i18n/locales/ja-JP.d.ts +386 -0
  220. package/dist/types/i18n/locales/ko-KR.d.ts +386 -0
  221. package/dist/types/i18n/locales/pt-PT.d.ts +386 -0
  222. package/dist/types/i18n/locales/zh-CN.d.ts +386 -0
  223. package/dist/types/index.d.ts +46 -95
  224. package/dist/types/inference/index.d.ts +22 -0
  225. package/dist/types/models/interfaces.d.ts +1 -22
  226. package/dist/types/server/OxyServer.d.ts +183 -0
  227. package/dist/types/server/auth.d.ts +10 -7
  228. package/dist/types/server/index.d.ts +10 -4
  229. package/dist/types/server/middleware.d.ts +291 -0
  230. package/dist/types/server/namespaces.d.ts +98 -0
  231. package/dist/types/server/rateLimit.d.ts +7 -5
  232. package/dist/types/server/requesterAssertion.d.ts +14 -11
  233. package/dist/types/server/securityHeaders.d.ts +4 -5
  234. package/dist/types/server/userInvalidation.d.ts +10 -8
  235. package/dist/types/session/accountDelegationAccess.d.ts +1 -1
  236. package/dist/types/session/accountDialogController.d.ts +8 -8
  237. package/dist/types/session/accountSwitchTargets.d.ts +1 -1
  238. package/dist/types/session/authStateStore.d.ts +7 -6
  239. package/dist/types/session/index.d.ts +40 -0
  240. package/dist/types/utils/accountCacheSweep.d.ts +7 -10
  241. package/dist/types/utils/apiUtils.d.ts +3 -3
  242. package/dist/types/utils/asyncUtils.d.ts +11 -58
  243. package/dist/types/utils/authWebUrl.d.ts +3 -4
  244. package/dist/types/utils/avatarUtils.d.ts +5 -6
  245. package/dist/types/utils/cache.d.ts +11 -3
  246. package/dist/types/utils/commonsApproval.d.ts +1 -1
  247. package/dist/types/utils/edgeRegion.d.ts +1 -2
  248. package/dist/types/utils/identityCacheSweep.d.ts +6 -4
  249. package/dist/types/utils/oauthPkce.d.ts +2 -2
  250. package/dist/types/utils/oxyServiceEnvironment.d.ts +3 -7
  251. package/dist/types/utils/requestUtils.d.ts +18 -14
  252. package/dist/types/utils/tokenClaims.d.ts +9 -0
  253. package/package.json +68 -7
  254. package/src/HttpService.ts +166 -131
  255. package/src/OxyServices.errors.ts +73 -0
  256. package/src/OxyServices.ts +289 -164
  257. package/src/api/accounts.ts +579 -0
  258. package/src/api/agency.ts +277 -0
  259. package/src/api/appData.ts +63 -0
  260. package/src/api/apps.ts +596 -0
  261. package/src/api/assets.ts +416 -0
  262. package/src/api/auth.ts +1457 -0
  263. package/src/api/billing.ts +144 -0
  264. package/src/api/civic.ts +428 -0
  265. package/src/api/contacts.ts +41 -0
  266. package/src/api/devices.ts +438 -0
  267. package/src/api/follows.ts +414 -0
  268. package/src/api/identity.ts +727 -0
  269. package/src/api/linkedAccounts.ts +78 -0
  270. package/src/api/nodes.ts +169 -0
  271. package/src/api/notifications.ts +135 -0
  272. package/src/api/privacy.ts +120 -0
  273. package/src/api/reputation.ts +134 -0
  274. package/src/api/session.ts +210 -0
  275. package/src/api/store.ts +435 -0
  276. package/src/api/topics.ts +83 -0
  277. package/src/api/users.ts +357 -0
  278. package/src/boot/sessionColdBoot.ts +4 -4
  279. package/src/civic/index.ts +12 -0
  280. package/src/civic/payloads.ts +175 -0
  281. package/src/client/context.ts +34 -0
  282. package/src/crypto/identityLink.ts +5 -5
  283. package/src/crypto/index.ts +39 -0
  284. package/src/crypto/internal.ts +20 -0
  285. package/src/crypto/keyManager.ts +2 -2
  286. package/src/crypto/polyfill.ts +9 -89
  287. package/src/crypto/recoveryPhrase.ts +1 -0
  288. package/src/crypto/registrationPow.ts +1 -1
  289. package/src/crypto/signatureService.ts +1 -0
  290. package/src/i18n/accountCategoryLabels.ts +2 -2
  291. package/src/i18n/accountRoleLabels.ts +2 -2
  292. package/src/i18n/index.ts +105 -54
  293. package/src/i18n/locales/{ar-SA.json → ar-SA.ts} +132 -52
  294. package/src/i18n/locales/{ca-ES.json → ca-ES.ts} +132 -52
  295. package/{dist/cjs/i18n/locales/locales/de-DE.json → src/i18n/locales/de-DE.ts} +134 -54
  296. package/src/i18n/locales/{en-US.json → en-US.ts} +161 -245
  297. package/{dist/cjs/i18n/locales/locales/es-ES.json → src/i18n/locales/es-ES.ts} +161 -245
  298. package/src/i18n/locales/{fr-FR.json → fr-FR.ts} +132 -52
  299. package/src/i18n/locales/{it-IT.json → it-IT.ts} +132 -52
  300. package/{dist/cjs/i18n/locales/locales/ja-JP.json → src/i18n/locales/ja-JP.ts} +132 -52
  301. package/src/i18n/locales/{ko-KR.json → ko-KR.ts} +132 -52
  302. package/src/i18n/locales/{pt-PT.json → pt-PT.ts} +134 -54
  303. package/src/i18n/locales/{zh-CN.json → zh-CN.ts} +133 -53
  304. package/src/i18n/reputationCategoryLabels.ts +1 -1
  305. package/src/i18n/trustTierLabels.ts +1 -1
  306. package/src/index.ts +170 -501
  307. package/src/inference/index.ts +48 -0
  308. package/src/models/interfaces.ts +1 -22
  309. package/src/server/OxyServer.ts +637 -0
  310. package/src/server/auth.ts +12 -8
  311. package/src/server/index.ts +28 -5
  312. package/src/server/middleware.ts +1520 -0
  313. package/src/server/namespaces.ts +257 -0
  314. package/src/server/rateLimit.ts +10 -9
  315. package/src/server/requesterAssertion.ts +13 -10
  316. package/src/server/securityHeaders.ts +7 -8
  317. package/src/server/traffic.ts +6 -6
  318. package/src/server/trafficNodeHttp.ts +7 -3
  319. package/src/server/userInvalidation.ts +9 -9
  320. package/src/session/accountDelegationAccess.ts +1 -1
  321. package/src/session/accountDialogController.ts +24 -24
  322. package/src/session/accountSwitchTargets.ts +1 -1
  323. package/src/session/authStateStore.ts +9 -8
  324. package/src/session/identitySession.ts +3 -3
  325. package/src/session/index.ts +210 -0
  326. package/src/session/refresh.ts +36 -30
  327. package/src/session/sessionClientHost.ts +5 -5
  328. package/src/session/sharedDeviceCredential.ts +3 -2
  329. package/src/shared/utils/networkUtils.ts +2 -2
  330. package/src/utils/accountCacheSweep.ts +11 -15
  331. package/src/utils/apiUtils.ts +3 -3
  332. package/src/utils/asyncUtils.ts +38 -235
  333. package/src/utils/authHelpers.ts +2 -2
  334. package/src/utils/authWebUrl.ts +3 -4
  335. package/src/utils/avatarUtils.ts +4 -7
  336. package/src/utils/cache.ts +36 -5
  337. package/src/utils/cacheKey.ts +5 -9
  338. package/src/utils/commonsApproval.ts +1 -1
  339. package/src/utils/deviceManager.ts +17 -16
  340. package/src/utils/edgeRegion.ts +1 -2
  341. package/src/utils/identityCacheSweep.ts +7 -12
  342. package/src/utils/oauthPkce.ts +2 -2
  343. package/src/utils/oxyServiceEnvironment.ts +3 -7
  344. package/src/utils/requestUtils.ts +48 -44
  345. package/src/utils/sessionUtils.ts +0 -2
  346. package/src/utils/tokenClaims.ts +38 -0
  347. package/dist/cjs/.tsbuildinfo +0 -1
  348. package/dist/cjs/OxyServices.base.js +0 -392
  349. package/dist/cjs/i18n/locales/locales/ar-SA.json +0 -306
  350. package/dist/cjs/i18n/locales/locales/ca-ES.json +0 -306
  351. package/dist/cjs/i18n/locales/locales/en-US.json +0 -2127
  352. package/dist/cjs/i18n/locales/locales/fr-FR.json +0 -306
  353. package/dist/cjs/i18n/locales/locales/it-IT.json +0 -306
  354. package/dist/cjs/i18n/locales/locales/ko-KR.json +0 -306
  355. package/dist/cjs/i18n/locales/locales/pt-PT.json +0 -306
  356. package/dist/cjs/i18n/locales/locales/zh-CN.json +0 -306
  357. package/dist/cjs/mixins/OxyServices.accounts.js +0 -555
  358. package/dist/cjs/mixins/OxyServices.agency.js +0 -154
  359. package/dist/cjs/mixins/OxyServices.analytics.js +0 -49
  360. package/dist/cjs/mixins/OxyServices.appData.js +0 -108
  361. package/dist/cjs/mixins/OxyServices.assets.js +0 -854
  362. package/dist/cjs/mixins/OxyServices.auth.js +0 -1495
  363. package/dist/cjs/mixins/OxyServices.chains.js +0 -73
  364. package/dist/cjs/mixins/OxyServices.civic.js +0 -611
  365. package/dist/cjs/mixins/OxyServices.connectedApps.js +0 -95
  366. package/dist/cjs/mixins/OxyServices.contacts.js +0 -50
  367. package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -191
  368. package/dist/cjs/mixins/OxyServices.devices.js +0 -116
  369. package/dist/cjs/mixins/OxyServices.features.js +0 -335
  370. package/dist/cjs/mixins/OxyServices.followGraph.js +0 -221
  371. package/dist/cjs/mixins/OxyServices.identity.js +0 -562
  372. package/dist/cjs/mixins/OxyServices.identityBackup.js +0 -172
  373. package/dist/cjs/mixins/OxyServices.inference.js +0 -59
  374. package/dist/cjs/mixins/OxyServices.language.js +0 -125
  375. package/dist/cjs/mixins/OxyServices.linkedAccounts.js +0 -79
  376. package/dist/cjs/mixins/OxyServices.location.js +0 -43
  377. package/dist/cjs/mixins/OxyServices.nodes.js +0 -175
  378. package/dist/cjs/mixins/OxyServices.notifications.js +0 -63
  379. package/dist/cjs/mixins/OxyServices.payment.js +0 -158
  380. package/dist/cjs/mixins/OxyServices.privacy.js +0 -199
  381. package/dist/cjs/mixins/OxyServices.reputation.js +0 -289
  382. package/dist/cjs/mixins/OxyServices.security.js +0 -89
  383. package/dist/cjs/mixins/OxyServices.store.js +0 -266
  384. package/dist/cjs/mixins/OxyServices.topics.js +0 -137
  385. package/dist/cjs/mixins/OxyServices.user.js +0 -954
  386. package/dist/cjs/mixins/OxyServices.utility.js +0 -1402
  387. package/dist/cjs/mixins/index.js +0 -136
  388. package/dist/cjs/mixins/mixinHelpers.js +0 -53
  389. package/dist/cjs/utils/webauthnOrigin.js +0 -51
  390. package/dist/esm/.tsbuildinfo +0 -1
  391. package/dist/esm/OxyServices.base.js +0 -388
  392. package/dist/esm/i18n/locales/locales/ar-SA.json +0 -306
  393. package/dist/esm/i18n/locales/locales/ca-ES.json +0 -306
  394. package/dist/esm/i18n/locales/locales/de-DE.json +0 -306
  395. package/dist/esm/i18n/locales/locales/en-US.json +0 -2127
  396. package/dist/esm/i18n/locales/locales/es-ES.json +0 -2127
  397. package/dist/esm/i18n/locales/locales/fr-FR.json +0 -306
  398. package/dist/esm/i18n/locales/locales/it-IT.json +0 -306
  399. package/dist/esm/i18n/locales/locales/ja-JP.json +0 -306
  400. package/dist/esm/i18n/locales/locales/ko-KR.json +0 -306
  401. package/dist/esm/i18n/locales/locales/pt-PT.json +0 -306
  402. package/dist/esm/i18n/locales/locales/zh-CN.json +0 -306
  403. package/dist/esm/mixins/OxyServices.accounts.js +0 -543
  404. package/dist/esm/mixins/OxyServices.agency.js +0 -151
  405. package/dist/esm/mixins/OxyServices.analytics.js +0 -46
  406. package/dist/esm/mixins/OxyServices.appData.js +0 -103
  407. package/dist/esm/mixins/OxyServices.assets.js +0 -851
  408. package/dist/esm/mixins/OxyServices.auth.js +0 -1455
  409. package/dist/esm/mixins/OxyServices.chains.js +0 -70
  410. package/dist/esm/mixins/OxyServices.civic.js +0 -605
  411. package/dist/esm/mixins/OxyServices.connectedApps.js +0 -92
  412. package/dist/esm/mixins/OxyServices.contacts.js +0 -47
  413. package/dist/esm/mixins/OxyServices.deviceBoot.js +0 -186
  414. package/dist/esm/mixins/OxyServices.devices.js +0 -113
  415. package/dist/esm/mixins/OxyServices.features.js +0 -332
  416. package/dist/esm/mixins/OxyServices.followGraph.js +0 -218
  417. package/dist/esm/mixins/OxyServices.identity.js +0 -558
  418. package/dist/esm/mixins/OxyServices.identityBackup.js +0 -169
  419. package/dist/esm/mixins/OxyServices.inference.js +0 -56
  420. package/dist/esm/mixins/OxyServices.language.js +0 -122
  421. package/dist/esm/mixins/OxyServices.linkedAccounts.js +0 -76
  422. package/dist/esm/mixins/OxyServices.location.js +0 -40
  423. package/dist/esm/mixins/OxyServices.nodes.js +0 -172
  424. package/dist/esm/mixins/OxyServices.notifications.js +0 -60
  425. package/dist/esm/mixins/OxyServices.payment.js +0 -155
  426. package/dist/esm/mixins/OxyServices.privacy.js +0 -196
  427. package/dist/esm/mixins/OxyServices.reputation.js +0 -286
  428. package/dist/esm/mixins/OxyServices.security.js +0 -86
  429. package/dist/esm/mixins/OxyServices.store.js +0 -263
  430. package/dist/esm/mixins/OxyServices.topics.js +0 -134
  431. package/dist/esm/mixins/OxyServices.user.js +0 -951
  432. package/dist/esm/mixins/OxyServices.utility.js +0 -1397
  433. package/dist/esm/mixins/index.js +0 -133
  434. package/dist/esm/mixins/mixinHelpers.js +0 -48
  435. package/dist/esm/utils/webauthnOrigin.js +0 -48
  436. package/dist/types/.tsbuildinfo +0 -1
  437. package/dist/types/OxyServices.base.d.ts +0 -189
  438. package/dist/types/mixins/OxyServices.accounts.d.ts +0 -868
  439. package/dist/types/mixins/OxyServices.agency.d.ts +0 -176
  440. package/dist/types/mixins/OxyServices.analytics.d.ts +0 -72
  441. package/dist/types/mixins/OxyServices.appData.d.ts +0 -108
  442. package/dist/types/mixins/OxyServices.assets.d.ts +0 -371
  443. package/dist/types/mixins/OxyServices.auth.d.ts +0 -998
  444. package/dist/types/mixins/OxyServices.chains.d.ts +0 -156
  445. package/dist/types/mixins/OxyServices.civic.d.ts +0 -520
  446. package/dist/types/mixins/OxyServices.connectedApps.d.ts +0 -184
  447. package/dist/types/mixins/OxyServices.contacts.d.ts +0 -100
  448. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +0 -185
  449. package/dist/types/mixins/OxyServices.devices.d.ts +0 -103
  450. package/dist/types/mixins/OxyServices.features.d.ts +0 -250
  451. package/dist/types/mixins/OxyServices.followGraph.d.ts +0 -223
  452. package/dist/types/mixins/OxyServices.identity.d.ts +0 -337
  453. package/dist/types/mixins/OxyServices.identityBackup.d.ts +0 -129
  454. package/dist/types/mixins/OxyServices.inference.d.ts +0 -95
  455. package/dist/types/mixins/OxyServices.language.d.ts +0 -87
  456. package/dist/types/mixins/OxyServices.linkedAccounts.d.ts +0 -107
  457. package/dist/types/mixins/OxyServices.location.d.ts +0 -70
  458. package/dist/types/mixins/OxyServices.nodes.d.ts +0 -198
  459. package/dist/types/mixins/OxyServices.notifications.d.ts +0 -143
  460. package/dist/types/mixins/OxyServices.payment.d.ts +0 -117
  461. package/dist/types/mixins/OxyServices.privacy.d.ts +0 -146
  462. package/dist/types/mixins/OxyServices.reputation.d.ts +0 -202
  463. package/dist/types/mixins/OxyServices.security.d.ts +0 -84
  464. package/dist/types/mixins/OxyServices.store.d.ts +0 -334
  465. package/dist/types/mixins/OxyServices.topics.d.ts +0 -110
  466. package/dist/types/mixins/OxyServices.user.d.ts +0 -600
  467. package/dist/types/mixins/OxyServices.utility.d.ts +0 -526
  468. package/dist/types/mixins/index.d.ts +0 -87
  469. package/dist/types/mixins/mixinHelpers.d.ts +0 -31
  470. package/dist/types/utils/webauthnOrigin.d.ts +0 -32
  471. package/src/OxyServices.base.ts +0 -480
  472. package/src/__tests__/authSocket.test.ts +0 -96
  473. package/src/__tests__/fixEsmImports.test.ts +0 -132
  474. package/src/__tests__/httpServiceAbort.test.ts +0 -308
  475. package/src/__tests__/httpServiceActivityId.test.ts +0 -49
  476. package/src/__tests__/httpServiceAuthSelfAwait.test.ts +0 -108
  477. package/src/__tests__/httpServiceCache.test.ts +0 -318
  478. package/src/__tests__/httpServiceFormEncoded.test.ts +0 -139
  479. package/src/__tests__/httpServiceQueueDeadlock.test.ts +0 -128
  480. package/src/__tests__/httpServiceRateLimitedRefresh.test.ts +0 -160
  481. package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +0 -115
  482. package/src/__tests__/httpServiceWrites.test.ts +0 -175
  483. package/src/__tests__/inSessionRefresh.test.ts +0 -313
  484. package/src/__tests__/linkedClient.test.ts +0 -363
  485. package/src/__tests__/nearExpiryMintStorm.test.ts +0 -165
  486. package/src/__tests__/parseHttpErrorBody.test.ts +0 -116
  487. package/src/__tests__/publicInterfaceParity.test.ts +0 -75
  488. package/src/__tests__/serverValueImportsDeclared.test.ts +0 -120
  489. package/src/__tests__/serviceIdentityWhenAnonymous.test.ts +0 -159
  490. package/src/__tests__/serviceTokenWorkloadFallback.test.ts +0 -85
  491. package/src/__tests__/userIdentity.test.ts +0 -143
  492. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
  493. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
  494. package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
  495. package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
  496. package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
  497. package/src/crypto/__tests__/identityLink.test.ts +0 -18
  498. package/src/crypto/__tests__/identityMocks.ts +0 -125
  499. package/src/crypto/__tests__/identityProof.test.ts +0 -81
  500. package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
  501. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
  502. package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
  503. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
  504. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
  505. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
  506. package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
  507. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
  508. package/src/crypto/__tests__/keyManager.test.ts +0 -329
  509. package/src/crypto/__tests__/polyfill.test.ts +0 -109
  510. package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
  511. package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
  512. package/src/crypto/__tests__/registrationPow.test.ts +0 -61
  513. package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
  514. package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
  515. package/src/crypto/__tests__/signedRecord.test.ts +0 -230
  516. package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
  517. package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
  518. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
  519. package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
  520. package/src/i18n/locales/de-DE.json +0 -306
  521. package/src/i18n/locales/es-ES.json +0 -2127
  522. package/src/i18n/locales/ja-JP.json +0 -306
  523. package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
  524. package/src/logger/__tests__/logger.test.ts +0 -207
  525. package/src/mixins/OxyServices.accounts.ts +0 -1330
  526. package/src/mixins/OxyServices.agency.ts +0 -353
  527. package/src/mixins/OxyServices.analytics.ts +0 -53
  528. package/src/mixins/OxyServices.appData.ts +0 -158
  529. package/src/mixins/OxyServices.assets.ts +0 -964
  530. package/src/mixins/OxyServices.auth.ts +0 -2083
  531. package/src/mixins/OxyServices.chains.ts +0 -134
  532. package/src/mixins/OxyServices.civic.ts +0 -945
  533. package/src/mixins/OxyServices.connectedApps.ts +0 -212
  534. package/src/mixins/OxyServices.contacts.ts +0 -73
  535. package/src/mixins/OxyServices.devices.ts +0 -120
  536. package/src/mixins/OxyServices.features.ts +0 -454
  537. package/src/mixins/OxyServices.followGraph.ts +0 -293
  538. package/src/mixins/OxyServices.identity.ts +0 -787
  539. package/src/mixins/OxyServices.identityBackup.ts +0 -250
  540. package/src/mixins/OxyServices.inference.ts +0 -57
  541. package/src/mixins/OxyServices.language.ts +0 -144
  542. package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
  543. package/src/mixins/OxyServices.location.ts +0 -46
  544. package/src/mixins/OxyServices.nodes.ts +0 -337
  545. package/src/mixins/OxyServices.notifications.ts +0 -142
  546. package/src/mixins/OxyServices.payment.ts +0 -163
  547. package/src/mixins/OxyServices.privacy.ts +0 -219
  548. package/src/mixins/OxyServices.reputation.ts +0 -436
  549. package/src/mixins/OxyServices.security.ts +0 -110
  550. package/src/mixins/OxyServices.store.ts +0 -585
  551. package/src/mixins/OxyServices.topics.ts +0 -169
  552. package/src/mixins/OxyServices.user.ts +0 -1208
  553. package/src/mixins/OxyServices.utility.ts +0 -1803
  554. package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
  555. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
  556. package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
  557. package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
  558. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
  559. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
  560. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
  561. package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
  562. package/src/mixins/__tests__/accountEvents.test.ts +0 -158
  563. package/src/mixins/__tests__/accounts.test.ts +0 -727
  564. package/src/mixins/__tests__/agency.test.ts +0 -120
  565. package/src/mixins/__tests__/appData.test.ts +0 -203
  566. package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
  567. package/src/mixins/__tests__/assetUpload.test.ts +0 -191
  568. package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
  569. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
  570. package/src/mixins/__tests__/chains.test.ts +0 -113
  571. package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
  572. package/src/mixins/__tests__/connectedApps.test.ts +0 -146
  573. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
  574. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
  575. package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
  576. package/src/mixins/__tests__/followGraph.test.ts +0 -147
  577. package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
  578. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
  579. package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
  580. package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
  581. package/src/mixins/__tests__/identityBackup.test.ts +0 -315
  582. package/src/mixins/__tests__/identityLink.test.ts +0 -89
  583. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
  584. package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
  585. package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
  586. package/src/mixins/__tests__/notifications.read.test.ts +0 -82
  587. package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
  588. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
  589. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
  590. package/src/mixins/__tests__/reputation.test.ts +0 -522
  591. package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
  592. package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
  593. package/src/mixins/__tests__/store.test.ts +0 -304
  594. package/src/mixins/__tests__/topics.test.ts +0 -155
  595. package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
  596. package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
  597. package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
  598. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
  599. package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
  600. package/src/mixins/index.ts +0 -203
  601. package/src/mixins/mixinHelpers.ts +0 -69
  602. package/src/server/__tests__/auth.test.ts +0 -78
  603. package/src/server/__tests__/capabilityTicket.test.ts +0 -111
  604. package/src/server/__tests__/cors.socket.test.ts +0 -225
  605. package/src/server/__tests__/cors.test.ts +0 -158
  606. package/src/server/__tests__/rateLimit.test.ts +0 -257
  607. package/src/server/__tests__/requesterAssertion.test.ts +0 -359
  608. package/src/server/__tests__/safeFetch.test.ts +0 -232
  609. package/src/server/__tests__/securityHeaders.test.ts +0 -387
  610. package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
  611. package/src/server/__tests__/traffic.test.ts +0 -180
  612. package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
  613. package/src/server/__tests__/userInvalidation.test.ts +0 -203
  614. package/src/server/__tests__/verifySecret.test.ts +0 -40
  615. package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
  616. package/src/server/__tests__/workloadIdentity.test.ts +0 -128
  617. package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
  618. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
  619. package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
  620. package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
  621. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
  622. package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
  623. package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
  624. package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
  625. package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
  626. package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
  627. package/src/session/__tests__/SessionClient.state.test.ts +0 -78
  628. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
  629. package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
  630. package/src/session/__tests__/accountDialogController.test.ts +0 -2502
  631. package/src/session/__tests__/accountDialogShape.test.ts +0 -120
  632. package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
  633. package/src/session/__tests__/authStateStore.test.ts +0 -451
  634. package/src/session/__tests__/deviceDirectory.test.ts +0 -422
  635. package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
  636. package/src/session/__tests__/identityPin.test.ts +0 -131
  637. package/src/session/__tests__/identitySession.test.ts +0 -194
  638. package/src/session/__tests__/projectSessionState.test.ts +0 -105
  639. package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
  640. package/src/session/__tests__/refresh.test.ts +0 -606
  641. package/src/session/__tests__/sessionIntegration.test.ts +0 -209
  642. package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
  643. package/src/utils/__tests__/accountUtils.test.ts +0 -151
  644. package/src/utils/__tests__/activityId.test.ts +0 -45
  645. package/src/utils/__tests__/asyncUtils.test.ts +0 -279
  646. package/src/utils/__tests__/authWebUrl.test.ts +0 -15
  647. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  648. package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
  649. package/src/utils/__tests__/coldBoot.test.ts +0 -496
  650. package/src/utils/__tests__/commonsApproval.test.ts +0 -60
  651. package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
  652. package/src/utils/__tests__/languageUtils.test.ts +0 -244
  653. package/src/utils/__tests__/oauthPkce.test.ts +0 -303
  654. package/src/utils/__tests__/officialOrigins.test.ts +0 -31
  655. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
  656. package/src/utils/__tests__/profileLinks.test.ts +0 -180
  657. package/src/utils/__tests__/redactUrl.test.ts +0 -33
  658. package/src/utils/__tests__/registrableApex.test.ts +0 -62
  659. package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
  660. package/src/utils/__tests__/textNormalization.test.ts +0 -205
  661. package/src/utils/__tests__/validationUtils.test.ts +0 -703
  662. package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
  663. package/src/utils/webauthnOrigin.ts +0 -52
@@ -12,16 +12,16 @@
12
12
  * - Error handling
13
13
  * - Request queuing
14
14
  */
15
- import { TTLCache, registerCacheForCleanup } from './utils/cache.js';
15
+ import { TTLCache, registerCacheForCleanup, unregisterCacheFromCleanup } from './utils/cache.js';
16
16
  import { RequestDeduplicator, RequestQueue, SimpleLogger } from './utils/requestUtils.js';
17
17
  import { retryAsync } from './utils/asyncUtils.js';
18
18
  import { createCancelledError, ErrorCodes, handleHttpError, parseHttpErrorBody } from './utils/errorUtils.js';
19
- import { jwtDecode } from 'jwt-decode';
20
- import { isReactNative } from '@oxy.so/protocol';
19
+ import { decodeTokenClaims } from './utils/tokenClaims.js';
20
+ import { isReactNative } from '@oxy.so/protocol/random';
21
21
  import { computeIdentityTag, fnv1a32 } from './utils/cacheKey.js';
22
22
  import { redactUrlQuery } from './utils/redactUrl.js';
23
23
  import { OxyAuthenticationError } from './OxyServices.errors.js';
24
- import { getBrowserEdgeRegionHeader } from './utils/edgeRegion.js';
24
+ import { peekBrowserEdgeRegionHeader } from './utils/edgeRegion.js';
25
25
  import { getBrowserActivityIdHeader } from './utils/activityId.js';
26
26
  /**
27
27
  * Default per-request timeout (ms) when neither the call site nor
@@ -29,6 +29,26 @@ import { getBrowserActivityIdHeader } from './utils/activityId.js';
29
29
  * endpoint surfaces as an `AbortError` quickly rather than blocking the
30
30
  * request queue.
31
31
  */
32
+ /**
33
+ * Strip leading or trailing `/`s without a regex: `/\/+$/` backtracks
34
+ * polynomially on a long run of slashes (CodeQL js/polynomial-redos), and this
35
+ * runs on every request.
36
+ */
37
+ function trimSlashes(value, side) {
38
+ let start = 0;
39
+ let end = value.length;
40
+ if (side === 'start')
41
+ while (start < end && value.charCodeAt(start) === 47)
42
+ start++;
43
+ else
44
+ while (end > start && value.charCodeAt(end - 1) === 47)
45
+ end--;
46
+ return value.slice(start, end);
47
+ }
48
+ /** Methods whose calls concurrent callers may share (read-only). */
49
+ const SAFE_METHODS = new Set(['GET']);
50
+ /** Methods safe to re-send after a transient failure (RFC 9110 §9.2.2). */
51
+ const IDEMPOTENT_METHODS = new Set(['GET', 'PUT', 'DELETE']);
32
52
  const DEFAULT_REQUEST_TIMEOUT_MS = 5000;
33
53
  /**
34
54
  * Cooldown (ms) applied after a failed access-token refresh before another
@@ -94,18 +114,13 @@ const TOKEN_REFRESH_LEAD_SECONDS = 60;
94
114
  * lead window. `false` for an expired, opaque or no-`exp` token.
95
115
  */
96
116
  function isInsideRefreshLeadWindow(token) {
97
- try {
98
- const decoded = jwtDecode(token);
99
- if (typeof decoded.exp !== 'number') {
100
- return false;
101
- }
102
- const now = Math.floor(Date.now() / 1000);
103
- // `<=`: the proactive scheduler fires at exactly `exp - lead`.
104
- return decoded.exp > now && decoded.exp - now <= TOKEN_REFRESH_LEAD_SECONDS;
105
- }
106
- catch {
117
+ const decoded = decodeTokenClaims(token);
118
+ if (typeof decoded?.exp !== 'number') {
107
119
  return false;
108
120
  }
121
+ const now = Math.floor(Date.now() / 1000);
122
+ // `<=`: the proactive scheduler fires at exactly `exp - lead`.
123
+ return decoded.exp > now && decoded.exp - now <= TOKEN_REFRESH_LEAD_SECONDS;
109
124
  }
110
125
  /**
111
126
  * Soft ceiling on the number of live entries in the identity-scoped GET
@@ -376,7 +391,15 @@ export class HttpService {
376
391
  * Main request method - handles everything in one place
377
392
  */
378
393
  async request(config) {
379
- const { method, url, data, params, timeout = this.config.requestTimeout || DEFAULT_REQUEST_TIMEOUT_MS, signal, cache: cacheRequested = method === 'GET', cacheTTL, deduplicate = true, retry = this.config.enableRetry !== false, maxRetries = this.config.maxRetries || 3, } = config;
394
+ const { method, url, data, params, timeout = this.config.requestTimeout || DEFAULT_REQUEST_TIMEOUT_MS, signal, cache: cacheRequested = method === 'GET', cacheTTL,
395
+ // Only reads are shared by default. A write's body can be opaque
396
+ // (`FormData`, `URLSearchParams` key as empty objects), so two different
397
+ // uploads used to collapse into one call and the second caller got the
398
+ // first file's result.
399
+ deduplicate = SAFE_METHODS.has(method),
400
+ // Only idempotent methods are re-sent by default: re-sending a POST after a
401
+ // 5xx or a dropped connection can apply it twice.
402
+ retry = this.config.enableRetry !== false && IDEMPOTENT_METHODS.has(method), maxRetries = this.config.maxRetries || 3, } = config;
380
403
  // A per-instance disabled cache (`enableCache:false` / `cacheTTL<=0`)
381
404
  // overrides any per-request `cache:true`: nothing is read from nor written
382
405
  // to the response cache. Request deduplication below is unaffected.
@@ -406,7 +429,9 @@ export class HttpService {
406
429
  // 401 retry re-enters request() with a fresh config, so it re-resolves
407
430
  // this here with the refreshed token.
408
431
  const authHeader = config.skipAuth ? null : await this.getAuthHeader();
409
- const edgeRegionHeader = await getBrowserEdgeRegionHeader();
432
+ // Never awaited: the PoP is a hint, and waiting on its trace fetch put up
433
+ // to a second in front of requests.
434
+ const edgeRegionHeader = peekBrowserEdgeRegionHeader();
410
435
  const activityIdHeader = getBrowserActivityIdHeader();
411
436
  // A request the caller has ALREADY abandoned takes no queue slot and makes
412
437
  // no network call. Checked here, before enqueue, because a slot is the
@@ -415,40 +440,30 @@ export class HttpService {
415
440
  if (signal?.aborted) {
416
441
  throw createCancelledError('Request cancelled before it was sent');
417
442
  }
418
- // ONE abort domain for the whole call, linked to the caller's signal ONCE.
419
- //
420
- // The bug this replaces: the controller used to be built INSIDE `requestFn`
421
- // — the function `retryAsync` re-invokes — and the caller's signal was
422
- // linked to each new controller with a bare `addEventListener`. An `abort`
423
- // event fires once, so on attempt 2 the caller's already-fired signal could
424
- // not abort the freshly built controller, and the request the caller had
425
- // cancelled went out for real. Hoisting the linkage means a cancellation
426
- // arrives once and is then true for every attempt, including ones not yet
427
- // started.
428
- const callController = new AbortController();
429
- const disposeCallerLink = signal ? linkAbort(signal, callController) : undefined;
430
- /**
431
- * Which of our own timers fired, so a timeout can be told apart from a
432
- * cancellation. Both reach us from `fetch` as an indistinguishable
433
- * `AbortError`, and collapsing them (as this used to) is what let the retry
434
- * predicate treat an abandoned request as a transient failure.
435
- */
436
- let timedOut = false;
437
- // Request function
438
- const requestFn = async () => {
443
+ // One network attempt, inside the call's abort domain `domain`: the caller's
444
+ // own signal, or — when deduplicated — the shared work's, which aborts only
445
+ // once every caller waiting on it has cancelled.
446
+ const attempt = async (domain) => {
439
447
  const startTime = Date.now();
440
448
  // Re-checked per attempt so no retry can issue a network call after the
441
449
  // caller gave up — belt to `retryAsync`'s braces, and the one that holds
442
450
  // if a custom `shouldRetry` ever says yes to a cancellation.
443
- if (callController.signal.aborted) {
451
+ if (domain.aborted) {
444
452
  throw createCancelledError('Request cancelled');
445
453
  }
454
+ /**
455
+ * Whether OUR timer fired, so a timeout can be told apart from a
456
+ * cancellation. Both reach us from `fetch` as an indistinguishable
457
+ * `AbortError`, and collapsing them is what let the retry predicate treat
458
+ * an abandoned request as a transient failure.
459
+ */
460
+ let timedOut = false;
446
461
  // This attempt's controller carries its own timeout and inherits the
447
462
  // call-wide abort domain. Declared OUTSIDE the `try` so the `finally`
448
463
  // that releases them can see them — the timer and the listener are
449
464
  // exactly what leaked when they lived inside it.
450
465
  const controller = new AbortController();
451
- const disposeCallLink = linkAbort(callController.signal, controller);
466
+ const disposeCallLink = linkAbort(domain, controller);
452
467
  const timeoutId = timeout
453
468
  ? setTimeout(() => {
454
469
  timedOut = true;
@@ -474,19 +489,19 @@ export class HttpService {
474
489
  }
475
490
  // Add authorization header if available
476
491
  if (authHeader) {
477
- headers['Authorization'] = authHeader;
492
+ headers.Authorization = authHeader;
478
493
  }
479
494
  // Merge custom headers if provided
480
495
  if (config.headers) {
481
- Object.entries(config.headers).forEach(([key, value]) => {
496
+ for (const [key, value] of Object.entries(config.headers)) {
482
497
  // For FormData, explicitly remove Content-Type if user tries to set it
483
498
  // The browser/fetch API will set it automatically with the boundary
484
499
  if (isFormData && key.toLowerCase() === 'content-type') {
485
500
  this.logger.debug('Ignoring Content-Type header for FormData - will be set automatically');
486
- return;
501
+ continue;
487
502
  }
488
503
  headers[key] = value;
489
- });
504
+ }
490
505
  }
491
506
  // This is Cloudflare's coarse serving PoP (for example `mad`), never an
492
507
  // IP or coordinate. Set it after caller headers so request code cannot
@@ -534,7 +549,12 @@ export class HttpService {
534
549
  // deduplicated retry would resolve to the still-pending original
535
550
  // and await itself (deadlock). Opting the retry out of dedupe makes
536
551
  // it a fresh request.
537
- return this.request({ ...config, _isAuthRetry: true, retry: false, deduplicate: false });
552
+ //
553
+ // `bypassQueue: true` is REQUIRED too: this attempt still holds its
554
+ // queue slot, so a queued retry waits for a slot while holding one.
555
+ // With every slot held by a 401 (a revoked session under load) no
556
+ // retry could ever start and the whole client stalled.
557
+ return this.request({ ...config, _isAuthRetry: true, retry: false, deduplicate: false, bypassQueue: true });
538
558
  }
539
559
  // Refresh failed or no token — clear tokens
540
560
  this.tokenStore.clearTokens();
@@ -579,7 +599,7 @@ export class HttpService {
579
599
  if (config.responseType === 'blob') {
580
600
  responseData = await response.blob();
581
601
  }
582
- else if (contentType && contentType.includes('application/json')) {
602
+ else if (contentType?.includes('application/json')) {
583
603
  // Use response.json() directly for better performance
584
604
  try {
585
605
  responseData = await response.json();
@@ -662,47 +682,55 @@ export class HttpService {
662
682
  disposeCallLink();
663
683
  }
664
684
  };
665
- // Wrap with retry if enabled.
685
+ // Composition: dedupe(retry(queue(attempt))). A queue slot is network
686
+ // occupancy only — each attempt takes one and releases it — so neither the
687
+ // retry backoff sleep nor a deduplicated caller waiting on shared work holds
688
+ // a slot while doing nothing.
666
689
  //
667
- // `retryOnTimeout` defaults to false in `retryAsync`, which is what makes
668
- // the pathological total unreachable: a timeout now costs ONE attempt
669
- // instead of four-plus-backoff (~28s at the 5s default), and a cancellation
670
- // costs none. `deadline` bounds whatever retries do happen by wall clock
671
- // rather than by attempts x timeout + backoff.
672
- const requestWithRetry = retry
673
- ? () => retryAsync(requestFn, {
690
+ // `retryOnTimeout` defaults to false in `retryAsync`: a timeout costs ONE
691
+ // attempt, a cancellation none. `deadline` bounds whatever retries do happen
692
+ // by wall clock rather than by attempts x timeout + backoff.
693
+ const runAttempt = (domain) =>
694
+ // Control-plane calls the auth lane depends on (`bypassQueue`, e.g. the
695
+ // device-secret mint) run DIRECTLY — a queued mint could never acquire a
696
+ // slot when every slot is parked awaiting it.
697
+ config.bypassQueue ? attempt(domain) : this.requestQueue.enqueue(() => attempt(domain), domain);
698
+ const execute = (domain) => retry
699
+ ? retryAsync(() => runAttempt(domain), {
674
700
  maxRetries,
675
701
  baseDelay: this.config.retryDelay || 1000,
676
702
  retryOnTimeout: config.retryOnTimeout ?? false,
677
703
  deadline: config.deadline !== undefined ? Date.now() + config.deadline : undefined,
678
704
  })
679
- : requestFn;
680
- // Wrap with deduplication if enabled (use optimized key generation)
681
- const dedupeKey = deduplicate ? this.generateCacheKey(method, url, data || params) : null;
682
- const finalRequest = dedupeKey
683
- ? () => this.deduplicator.deduplicate(dedupeKey, requestWithRetry, callController.signal)
684
- : requestWithRetry;
685
- try {
686
- // Execute the request. Control-plane calls the auth lane depends on
687
- // (`bypassQueue`, e.g. the device-secret mint) run DIRECTLY — a queued mint
688
- // could never acquire a slot when every slot is parked awaiting it.
689
- const result = config.bypassQueue
690
- ? await finalRequest()
691
- : await this.requestQueue.enqueue(finalRequest, callController.signal);
692
- // Cache the result if caching is enabled
693
- if (cache && cacheKey && result) {
694
- this.cache.set(cacheKey, result, cacheTTL);
695
- this.warnIfCacheOversized();
705
+ : runAttempt(domain);
706
+ let result;
707
+ if (deduplicate) {
708
+ // The cache key IS the dedupe key (same method, url, payload, identity);
709
+ // computed once per call.
710
+ const dedupeKey = cacheKey ?? this.generateCacheKey(method, url, data || params);
711
+ result = await this.deduplicator.deduplicate(dedupeKey, execute, signal);
712
+ }
713
+ else {
714
+ // The call's own abort domain, linked to the caller's signal ONCE, so a
715
+ // cancellation arrives once and is then true for every attempt, including
716
+ // ones not yet started. Released however the call ends: a caller signal
717
+ // that outlives the request (a React Query signal) would otherwise accrue
718
+ // one listener per request.
719
+ const callController = new AbortController();
720
+ const disposeCallerLink = signal ? linkAbort(signal, callController) : undefined;
721
+ try {
722
+ result = await execute(callController.signal);
723
+ }
724
+ finally {
725
+ disposeCallerLink?.();
696
726
  }
697
- return result;
698
727
  }
699
- finally {
700
- // The call-wide link to the CALLER's signal, released once the call is
701
- // over however it ended. Without this a caller signal that outlives the
702
- // request — the normal case for a React Query query signal — accrues one
703
- // listener per request for its whole lifetime.
704
- disposeCallerLink?.();
728
+ // Cache the result if caching is enabled
729
+ if (cache && cacheKey && result) {
730
+ this.cache.set(cacheKey, result, cacheTTL);
731
+ this.warnIfCacheOversized();
705
732
  }
733
+ return result;
706
734
  }
707
735
  /**
708
736
  * Soft cache-size guard. Emits a single throttled telemetry warning when the
@@ -889,16 +917,16 @@ export class HttpService {
889
917
  buildURL(url, params) {
890
918
  const base = /^https?:\/\//i.test(url)
891
919
  ? url
892
- : `${this.baseURL.replace(/\/+$/, '')}/${url.replace(/^\/+/, '')}`;
920
+ : `${trimSlashes(this.baseURL, 'end')}/${trimSlashes(url, 'start')}`;
893
921
  if (!params || Object.keys(params).length === 0) {
894
922
  return base;
895
923
  }
896
924
  const searchParams = new URLSearchParams();
897
- Object.entries(params).forEach(([key, value]) => {
925
+ for (const [key, value] of Object.entries(params)) {
898
926
  if (value !== undefined && value !== null) {
899
927
  searchParams.append(key, String(value));
900
928
  }
901
- });
929
+ }
902
930
  const queryString = searchParams.toString();
903
931
  return queryString ? `${base}${base.includes('?') ? '&' : '?'}${queryString}` : base;
904
932
  }
@@ -922,7 +950,9 @@ export class HttpService {
922
950
  return this.getAnonymousAuthHeader();
923
951
  }
924
952
  try {
925
- const decoded = jwtDecode(accessToken);
953
+ const decoded = decodeTokenClaims(accessToken);
954
+ if (!decoded)
955
+ throw new Error('opaque token');
926
956
  const currentTime = Math.floor(Date.now() / 1000);
927
957
  // If the token expires within the refresh lead window, refresh it.
928
958
  if (decoded.exp && decoded.exp - currentTime < TOKEN_REFRESH_LEAD_SECONDS) {
@@ -1068,26 +1098,22 @@ export class HttpService {
1068
1098
  if (!token) {
1069
1099
  return false;
1070
1100
  }
1071
- try {
1072
- const decoded = jwtDecode(token);
1073
- return typeof decoded.exp === 'number' && decoded.exp <= Math.floor(Date.now() / 1000);
1074
- }
1075
- catch {
1076
- return false;
1077
- }
1101
+ const exp = decodeTokenClaims(token)?.exp;
1102
+ return typeof exp === 'number' && exp <= Math.floor(Date.now() / 1000);
1078
1103
  }
1079
1104
  /**
1080
- * PROCESS-WIDE single-flight for the rotating device-secret mint
1105
+ * PROCESS-WIDE single-flight for the device-secret mint
1081
1106
  * (`POST /session/device/token`).
1082
1107
  *
1083
- * The server rotates the presented `deviceSecret` on every successful mint, so
1084
- * two concurrent mints would double-rotate and the durable store could end up
1085
- * holding a superseded secret → a later cold-boot mint 401s → the user is
1086
- * signed out. Every mint lane (the re-mint handler behind `refreshAccessToken`,
1087
- * the device-first cold boot, the socket token transport, the tab-focus
1088
- * reconcile) funnels its `refreshDeviceSecretArm` call through here, so
1089
- * concurrent callers await the SAME in-flight mint and all receive its result —
1090
- * exactly one server rotation.
1108
+ * The server does not rotate the presented `deviceSecret` (it echoes it back
1109
+ * as `nextDeviceSecret`; each holder of a shared DeviceSession has its own
1110
+ * stable credential), so this is no longer what keeps the store's secret
1111
+ * valid. It still collapses concurrent callers onto one request and one
1112
+ * persisted write. Every mint lane (the re-mint handler behind
1113
+ * `refreshAccessToken`, the device-first cold boot, the socket token
1114
+ * transport, the tab-focus reconcile) funnels its `refreshDeviceSecretArm`
1115
+ * call through here, so concurrent callers await the SAME in-flight mint and
1116
+ * all receive its result.
1091
1117
  *
1092
1118
  * Distinct from {@link tokenRefreshPromise} (which dedups the FULL re-mint
1093
1119
  * handler incl. the native shared-key arm + the failure cooldown): this inner
@@ -1184,7 +1210,9 @@ export class HttpService {
1184
1210
  // Authentication is owned by this SDK instance. A caller cannot replace
1185
1211
  // the bearer with a different session or leak one across linked apps.
1186
1212
  headers.set('Authorization', authHeader);
1187
- const edgeRegionHeader = await getBrowserEdgeRegionHeader();
1213
+ // Never awaited: the PoP is a hint, and waiting on its trace fetch put up
1214
+ // to a second in front of requests.
1215
+ const edgeRegionHeader = peekBrowserEdgeRegionHeader();
1188
1216
  for (const [name, value] of Object.entries(edgeRegionHeader))
1189
1217
  headers.set(name, value);
1190
1218
  const activityIdHeader = getBrowserActivityIdHeader();
@@ -1360,13 +1388,7 @@ export class HttpService {
1360
1388
  * identity-scoped variant `<key> id=*`.
1361
1389
  */
1362
1390
  clearCacheEntry(key) {
1363
- this.cache.delete(key);
1364
- const identityVariantPrefix = `${key}${HttpService.CACHE_IDENTITY_DELIM}`;
1365
- for (const existing of this.cache.keys()) {
1366
- if (existing.startsWith(identityVariantPrefix)) {
1367
- this.cache.delete(existing);
1368
- }
1369
- }
1391
+ this.invalidateCache({ keys: [key] });
1370
1392
  }
1371
1393
  /**
1372
1394
  * Delete every cache entry whose key starts with `prefix`.
@@ -1377,14 +1399,40 @@ export class HttpService {
1377
1399
  * deleted entries (for observability in tests).
1378
1400
  */
1379
1401
  clearCacheByPrefix(prefix) {
1380
- let removed = 0;
1381
- for (const key of this.cache.keys()) {
1382
- if (key.startsWith(prefix)) {
1383
- this.cache.delete(key);
1384
- removed++;
1402
+ return this.invalidateCache({ prefixes: [prefix] });
1403
+ }
1404
+ /**
1405
+ * Invalidate a set of LOGICAL keys (each with every identity-scoped variant,
1406
+ * see `clearCacheEntry`) and key prefixes in ONE pass over the cache. A
1407
+ * mutation touching many resources (a bulk follow) costs one scan, not one
1408
+ * per resource.
1409
+ * @returns Number of entries deleted
1410
+ */
1411
+ invalidateCache({ keys = [], prefixes = [] }) {
1412
+ if (keys.length === 0 && prefixes.length === 0)
1413
+ return 0;
1414
+ const exact = new Set(keys);
1415
+ const delim = HttpService.CACHE_IDENTITY_DELIM;
1416
+ return this.cache.deleteWhere((stored) => {
1417
+ const cut = stored.lastIndexOf(delim);
1418
+ if (exact.has(cut === -1 ? stored : stored.slice(0, cut)))
1419
+ return true;
1420
+ for (const prefix of prefixes) {
1421
+ if (stored.startsWith(prefix))
1422
+ return true;
1385
1423
  }
1386
- }
1387
- return removed;
1424
+ return false;
1425
+ });
1426
+ }
1427
+ /**
1428
+ * Release this client: its response cache leaves the global cleanup sweep and
1429
+ * is emptied, pending shared calls are forgotten, and the session ends.
1430
+ */
1431
+ dispose() {
1432
+ unregisterCacheFromCleanup(this.cache);
1433
+ this.cache.clear();
1434
+ this.deduplicator.clear();
1435
+ this.endSession();
1388
1436
  }
1389
1437
  getCacheStats() {
1390
1438
  const cacheStats = this.cache.getStats();
@@ -1,3 +1,4 @@
1
+ import { handleHttpError } from './utils/errorUtils.js';
1
2
  /**
2
3
  * Custom error types for better error handling
3
4
  */
@@ -112,3 +113,47 @@ export class OxyAuthenticationTimeoutError extends OxyAuthenticationError {
112
113
  this.name = 'OxyAuthenticationTimeoutError';
113
114
  }
114
115
  }
116
+ /**
117
+ * The one error every `OxyServices` call rejects with.
118
+ *
119
+ * `status` is the HTTP status (0 when no response arrived: a network failure,
120
+ * a timeout or a cancellation), `code` the API's machine code when it sent one
121
+ * (else a transport code such as `TIMEOUT`, `NETWORK_ERROR`, `CANCELLED`), and
122
+ * `details` the API's structured detail. The original error is `cause`.
123
+ */
124
+ export class OxyApiError extends Error {
125
+ constructor(message, init) {
126
+ super(message);
127
+ this.name = 'OxyApiError';
128
+ this.status = init.status;
129
+ this.code = init.code;
130
+ this.details = init.details;
131
+ this.response = init.response;
132
+ this.cancelled = init.cancelled ?? false;
133
+ this.timeout = init.timeout ?? false;
134
+ if (init.cause !== undefined) {
135
+ this.cause = init.cause;
136
+ }
137
+ }
138
+ }
139
+ /**
140
+ * Normalise anything a request rejected with into an `OxyApiError`. An error
141
+ * that already is one (or a typed SDK error such as `OxyAuthenticationError`)
142
+ * passes through unchanged.
143
+ */
144
+ export function toOxyApiError(error) {
145
+ if (error instanceof OxyApiError || error instanceof OxyAuthenticationError) {
146
+ return error;
147
+ }
148
+ const api = handleHttpError(error);
149
+ const source = (error && typeof error === 'object' ? error : {});
150
+ return new OxyApiError(api.message?.trim() || 'An unexpected error occurred', {
151
+ status: api.status,
152
+ code: api.code,
153
+ details: api.details,
154
+ response: source.response,
155
+ cancelled: source.cancelled === true,
156
+ timeout: source.timeout === true,
157
+ cause: error,
158
+ });
159
+ }