@oxy.so/core 1.18.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/README.md +13 -7
  2. package/dist/cjs/HttpService.js +189 -112
  3. package/dist/cjs/OxyServices.errors.js +48 -1
  4. package/dist/cjs/OxyServices.js +263 -60
  5. package/dist/cjs/api/accounts.js +231 -0
  6. package/dist/cjs/api/agency.js +102 -0
  7. package/dist/cjs/api/appData.js +45 -0
  8. package/dist/cjs/api/apps.js +197 -0
  9. package/dist/cjs/api/assets.js +329 -0
  10. package/dist/cjs/api/auth.js +900 -0
  11. package/dist/cjs/api/billing.js +44 -0
  12. package/dist/cjs/api/civic.js +289 -0
  13. package/dist/cjs/api/contacts.js +16 -0
  14. package/dist/cjs/api/devices.js +351 -0
  15. package/dist/cjs/api/follows.js +240 -0
  16. package/dist/cjs/api/identity.js +569 -0
  17. package/dist/cjs/api/linkedAccounts.js +48 -0
  18. package/dist/cjs/api/nodes.js +75 -0
  19. package/dist/cjs/api/notifications.js +75 -0
  20. package/dist/cjs/api/privacy.js +105 -0
  21. package/dist/cjs/api/reputation.js +74 -0
  22. package/dist/cjs/api/session.js +177 -0
  23. package/dist/cjs/api/store.js +199 -0
  24. package/dist/cjs/api/topics.js +66 -0
  25. package/dist/cjs/api/users.js +309 -0
  26. package/dist/cjs/boot/sessionColdBoot.js +4 -4
  27. package/dist/cjs/civic/index.js +16 -0
  28. package/dist/cjs/civic/payloads.js +156 -0
  29. package/dist/cjs/client/context.js +2 -0
  30. package/dist/cjs/crypto/identityLink.js +5 -5
  31. package/dist/cjs/crypto/index.js +44 -0
  32. package/dist/cjs/crypto/internal.js +37 -0
  33. package/dist/cjs/crypto/keyManager.js +2 -2
  34. package/dist/cjs/crypto/polyfill.js +9 -80
  35. package/dist/cjs/crypto/recoveryPhrase.js +1 -0
  36. package/dist/cjs/crypto/registrationPow.js +1 -1
  37. package/dist/cjs/crypto/signatureService.js +1 -0
  38. package/dist/cjs/i18n/accountCategoryLabels.js +3 -3
  39. package/dist/cjs/i18n/accountRoleLabels.js +7 -7
  40. package/dist/cjs/i18n/index.js +130 -52
  41. package/dist/cjs/i18n/locales/{ar-SA.json → ar-SA.js} +134 -52
  42. package/dist/cjs/i18n/locales/{ca-ES.json → ca-ES.js} +134 -52
  43. package/dist/{esm/i18n/locales/de-DE.json → cjs/i18n/locales/de-DE.js} +136 -54
  44. package/dist/{esm/i18n/locales/en-US.json → cjs/i18n/locales/en-US.js} +163 -245
  45. package/dist/{esm/i18n/locales/es-ES.json → cjs/i18n/locales/es-ES.js} +163 -245
  46. package/dist/cjs/i18n/locales/{fr-FR.json → fr-FR.js} +134 -52
  47. package/dist/cjs/i18n/locales/{it-IT.json → it-IT.js} +134 -52
  48. package/dist/{esm/i18n/locales/ja-JP.json → cjs/i18n/locales/ja-JP.js} +134 -52
  49. package/dist/cjs/i18n/locales/{ko-KR.json → ko-KR.js} +134 -52
  50. package/dist/{esm/i18n/locales/pt-PT.json → cjs/i18n/locales/pt-PT.js} +136 -54
  51. package/dist/{esm/i18n/locales/zh-CN.json → cjs/i18n/locales/zh-CN.js} +135 -53
  52. package/dist/cjs/i18n/reputationCategoryLabels.js +2 -2
  53. package/dist/cjs/i18n/trustTierLabels.js +2 -2
  54. package/dist/cjs/index.js +55 -263
  55. package/dist/cjs/inference/index.js +21 -0
  56. package/dist/cjs/server/OxyServer.js +521 -0
  57. package/dist/cjs/server/auth.js +2 -2
  58. package/dist/cjs/server/index.js +23 -6
  59. package/dist/cjs/server/middleware.js +1154 -0
  60. package/dist/cjs/server/namespaces.js +214 -0
  61. package/dist/cjs/server/rateLimit.js +2 -2
  62. package/dist/cjs/server/requesterAssertion.js +5 -5
  63. package/dist/cjs/server/securityHeaders.js +3 -3
  64. package/dist/cjs/server/traffic.js +7 -6
  65. package/dist/cjs/server/trafficNodeHttp.js +9 -3
  66. package/dist/cjs/server/userInvalidation.js +5 -5
  67. package/dist/cjs/session/accountDialogController.js +23 -23
  68. package/dist/cjs/session/authStateStore.js +2 -2
  69. package/dist/cjs/session/identitySession.js +3 -3
  70. package/dist/cjs/session/index.js +131 -0
  71. package/dist/cjs/session/refresh.js +37 -30
  72. package/dist/cjs/session/sessionClientHost.js +5 -5
  73. package/dist/cjs/session/sharedDeviceCredential.js +3 -2
  74. package/dist/cjs/shared/utils/networkUtils.js +2 -2
  75. package/dist/cjs/utils/accountCacheSweep.js +11 -15
  76. package/dist/cjs/utils/asyncUtils.js +22 -163
  77. package/dist/cjs/utils/authHelpers.js +2 -2
  78. package/dist/cjs/utils/authWebUrl.js +3 -4
  79. package/dist/cjs/utils/avatarUtils.js +2 -2
  80. package/dist/cjs/utils/cache.js +32 -2
  81. package/dist/cjs/utils/cacheKey.js +5 -10
  82. package/dist/cjs/utils/deviceManager.js +17 -16
  83. package/dist/cjs/utils/edgeRegion.js +2 -3
  84. package/dist/cjs/utils/identityCacheSweep.js +6 -10
  85. package/dist/cjs/utils/oxyServiceEnvironment.js +3 -7
  86. package/dist/cjs/utils/requestUtils.js +40 -33
  87. package/dist/cjs/utils/sessionUtils.js +0 -2
  88. package/dist/cjs/utils/tokenClaims.js +34 -0
  89. package/dist/esm/HttpService.js +190 -113
  90. package/dist/esm/OxyServices.errors.js +45 -0
  91. package/dist/esm/OxyServices.js +262 -57
  92. package/dist/esm/api/accounts.js +218 -0
  93. package/dist/esm/api/agency.js +95 -0
  94. package/dist/esm/api/appData.js +40 -0
  95. package/dist/esm/api/apps.js +191 -0
  96. package/dist/esm/api/assets.js +324 -0
  97. package/dist/esm/api/auth.js +858 -0
  98. package/dist/esm/api/billing.js +40 -0
  99. package/dist/esm/api/civic.js +250 -0
  100. package/dist/esm/api/contacts.js +12 -0
  101. package/dist/esm/api/devices.js +346 -0
  102. package/dist/esm/api/follows.js +236 -0
  103. package/dist/esm/api/identity.js +527 -0
  104. package/dist/esm/api/linkedAccounts.js +44 -0
  105. package/dist/esm/api/nodes.js +71 -0
  106. package/dist/esm/api/notifications.js +71 -0
  107. package/dist/esm/api/privacy.js +101 -0
  108. package/dist/esm/api/reputation.js +70 -0
  109. package/dist/esm/api/session.js +173 -0
  110. package/dist/esm/api/store.js +192 -0
  111. package/dist/esm/api/topics.js +62 -0
  112. package/dist/esm/api/users.js +272 -0
  113. package/dist/esm/boot/sessionColdBoot.js +4 -4
  114. package/dist/esm/civic/index.js +10 -0
  115. package/dist/esm/civic/payloads.js +118 -0
  116. package/dist/esm/client/context.js +1 -0
  117. package/dist/esm/crypto/identityLink.js +5 -5
  118. package/dist/esm/crypto/index.js +24 -0
  119. package/dist/esm/crypto/internal.js +19 -0
  120. package/dist/esm/crypto/keyManager.js +2 -2
  121. package/dist/esm/crypto/polyfill.js +10 -81
  122. package/dist/esm/crypto/recoveryPhrase.js +1 -0
  123. package/dist/esm/crypto/registrationPow.js +1 -1
  124. package/dist/esm/crypto/signatureService.js +1 -0
  125. package/dist/esm/i18n/accountCategoryLabels.js +2 -2
  126. package/dist/esm/i18n/accountRoleLabels.js +1 -1
  127. package/dist/esm/i18n/index.js +93 -52
  128. package/dist/esm/i18n/locales/{ar-SA.json → ar-SA.js} +132 -52
  129. package/dist/esm/i18n/locales/{ca-ES.json → ca-ES.js} +132 -52
  130. package/dist/{cjs/i18n/locales/de-DE.json → esm/i18n/locales/de-DE.js} +134 -54
  131. package/dist/{cjs/i18n/locales/en-US.json → esm/i18n/locales/en-US.js} +161 -245
  132. package/dist/{cjs/i18n/locales/es-ES.json → esm/i18n/locales/es-ES.js} +161 -245
  133. package/dist/esm/i18n/locales/{fr-FR.json → fr-FR.js} +132 -52
  134. package/dist/esm/i18n/locales/{it-IT.json → it-IT.js} +132 -52
  135. package/dist/{cjs/i18n/locales/ja-JP.json → esm/i18n/locales/ja-JP.js} +132 -52
  136. package/dist/esm/i18n/locales/{ko-KR.json → ko-KR.js} +132 -52
  137. package/dist/{cjs/i18n/locales/pt-PT.json → esm/i18n/locales/pt-PT.js} +134 -54
  138. package/dist/{cjs/i18n/locales/zh-CN.json → esm/i18n/locales/zh-CN.js} +133 -53
  139. package/dist/esm/i18n/reputationCategoryLabels.js +1 -1
  140. package/dist/esm/i18n/trustTierLabels.js +1 -1
  141. package/dist/esm/index.js +30 -166
  142. package/dist/esm/inference/index.js +13 -0
  143. package/dist/esm/server/OxyServer.js +516 -0
  144. package/dist/esm/server/auth.js +2 -2
  145. package/dist/esm/server/index.js +10 -5
  146. package/dist/esm/server/middleware.js +1147 -0
  147. package/dist/esm/server/namespaces.js +206 -0
  148. package/dist/esm/server/rateLimit.js +2 -2
  149. package/dist/esm/server/requesterAssertion.js +5 -5
  150. package/dist/esm/server/securityHeaders.js +3 -3
  151. package/dist/esm/server/traffic.js +7 -6
  152. package/dist/esm/server/trafficNodeHttp.js +9 -3
  153. package/dist/esm/server/userInvalidation.js +5 -5
  154. package/dist/esm/session/accountDialogController.js +23 -23
  155. package/dist/esm/session/authStateStore.js +2 -2
  156. package/dist/esm/session/identitySession.js +3 -3
  157. package/dist/esm/session/index.js +82 -0
  158. package/dist/esm/session/refresh.js +37 -30
  159. package/dist/esm/session/sessionClientHost.js +5 -5
  160. package/dist/esm/session/sharedDeviceCredential.js +3 -2
  161. package/dist/esm/shared/utils/networkUtils.js +2 -2
  162. package/dist/esm/utils/accountCacheSweep.js +11 -15
  163. package/dist/esm/utils/asyncUtils.js +22 -151
  164. package/dist/esm/utils/authHelpers.js +2 -2
  165. package/dist/esm/utils/authWebUrl.js +3 -4
  166. package/dist/esm/utils/avatarUtils.js +2 -2
  167. package/dist/esm/utils/cache.js +32 -2
  168. package/dist/esm/utils/cacheKey.js +5 -10
  169. package/dist/esm/utils/deviceManager.js +17 -16
  170. package/dist/esm/utils/edgeRegion.js +1 -2
  171. package/dist/esm/utils/identityCacheSweep.js +6 -10
  172. package/dist/esm/utils/oxyServiceEnvironment.js +3 -7
  173. package/dist/esm/utils/requestUtils.js +40 -33
  174. package/dist/esm/utils/sessionUtils.js +0 -2
  175. package/dist/esm/utils/tokenClaims.js +31 -0
  176. package/dist/types/HttpService.d.ts +47 -9
  177. package/dist/types/OxyServices.d.ts +160 -131
  178. package/dist/types/OxyServices.errors.d.ts +42 -0
  179. package/dist/types/api/accounts.d.ts +415 -0
  180. package/dist/types/api/agency.d.ts +135 -0
  181. package/dist/types/api/appData.d.ts +27 -0
  182. package/dist/types/api/apps.d.ts +433 -0
  183. package/dist/types/api/assets.d.ts +174 -0
  184. package/dist/types/api/auth.d.ts +766 -0
  185. package/dist/types/api/billing.d.ts +113 -0
  186. package/dist/types/api/civic.d.ts +203 -0
  187. package/dist/types/api/contacts.d.ts +31 -0
  188. package/{src/mixins/OxyServices.deviceBoot.ts → dist/types/api/devices.d.ts} +130 -110
  189. package/dist/types/api/follows.d.ts +236 -0
  190. package/dist/types/api/identity.d.ts +275 -0
  191. package/dist/types/api/linkedAccounts.d.ts +48 -0
  192. package/dist/types/api/nodes.d.ts +102 -0
  193. package/dist/types/api/notifications.d.ts +77 -0
  194. package/dist/types/api/privacy.d.ts +43 -0
  195. package/dist/types/api/reputation.d.ts +50 -0
  196. package/dist/types/api/session.d.ts +85 -0
  197. package/dist/types/api/store.d.ts +278 -0
  198. package/dist/types/api/topics.d.ts +34 -0
  199. package/dist/types/api/users.d.ts +134 -0
  200. package/dist/types/boot/sessionColdBoot.d.ts +1 -1
  201. package/dist/types/civic/index.d.ts +10 -0
  202. package/dist/types/civic/payloads.d.ts +83 -0
  203. package/dist/types/client/context.d.ts +33 -0
  204. package/dist/types/crypto/identityLink.d.ts +5 -5
  205. package/dist/types/crypto/index.d.ts +24 -0
  206. package/dist/types/crypto/internal.d.ts +19 -0
  207. package/dist/types/crypto/polyfill.d.ts +6 -9
  208. package/dist/types/crypto/registrationPow.d.ts +1 -1
  209. package/dist/types/i18n/accountCategoryLabels.d.ts +1 -1
  210. package/dist/types/i18n/accountRoleLabels.d.ts +1 -1
  211. package/dist/types/i18n/index.d.ts +20 -1
  212. package/dist/types/i18n/locales/ar-SA.d.ts +386 -0
  213. package/dist/types/i18n/locales/ca-ES.d.ts +386 -0
  214. package/dist/types/i18n/locales/de-DE.d.ts +386 -0
  215. package/dist/types/i18n/locales/en-US.d.ts +2034 -0
  216. package/dist/types/i18n/locales/es-ES.d.ts +2034 -0
  217. package/dist/types/i18n/locales/fr-FR.d.ts +386 -0
  218. package/dist/types/i18n/locales/it-IT.d.ts +386 -0
  219. package/dist/types/i18n/locales/ja-JP.d.ts +386 -0
  220. package/dist/types/i18n/locales/ko-KR.d.ts +386 -0
  221. package/dist/types/i18n/locales/pt-PT.d.ts +386 -0
  222. package/dist/types/i18n/locales/zh-CN.d.ts +386 -0
  223. package/dist/types/index.d.ts +46 -95
  224. package/dist/types/inference/index.d.ts +22 -0
  225. package/dist/types/models/interfaces.d.ts +1 -1
  226. package/dist/types/server/OxyServer.d.ts +183 -0
  227. package/dist/types/server/auth.d.ts +10 -7
  228. package/dist/types/server/index.d.ts +10 -4
  229. package/dist/types/server/middleware.d.ts +291 -0
  230. package/dist/types/server/namespaces.d.ts +98 -0
  231. package/dist/types/server/rateLimit.d.ts +7 -5
  232. package/dist/types/server/requesterAssertion.d.ts +14 -11
  233. package/dist/types/server/securityHeaders.d.ts +4 -5
  234. package/dist/types/server/userInvalidation.d.ts +10 -8
  235. package/dist/types/session/accountDelegationAccess.d.ts +1 -1
  236. package/dist/types/session/accountDialogController.d.ts +8 -8
  237. package/dist/types/session/accountSwitchTargets.d.ts +1 -1
  238. package/dist/types/session/authStateStore.d.ts +7 -6
  239. package/dist/types/session/index.d.ts +40 -0
  240. package/dist/types/utils/accountCacheSweep.d.ts +7 -10
  241. package/dist/types/utils/apiUtils.d.ts +3 -3
  242. package/dist/types/utils/asyncUtils.d.ts +11 -58
  243. package/dist/types/utils/authWebUrl.d.ts +3 -4
  244. package/dist/types/utils/avatarUtils.d.ts +5 -6
  245. package/dist/types/utils/cache.d.ts +11 -3
  246. package/dist/types/utils/commonsApproval.d.ts +1 -1
  247. package/dist/types/utils/edgeRegion.d.ts +1 -2
  248. package/dist/types/utils/identityCacheSweep.d.ts +6 -4
  249. package/dist/types/utils/oauthPkce.d.ts +2 -2
  250. package/dist/types/utils/oxyServiceEnvironment.d.ts +3 -7
  251. package/dist/types/utils/requestUtils.d.ts +18 -14
  252. package/dist/types/utils/tokenClaims.d.ts +9 -0
  253. package/package.json +68 -7
  254. package/src/HttpService.ts +201 -132
  255. package/src/OxyServices.errors.ts +73 -0
  256. package/src/OxyServices.ts +289 -164
  257. package/src/api/accounts.ts +579 -0
  258. package/src/api/agency.ts +277 -0
  259. package/src/api/appData.ts +63 -0
  260. package/src/api/apps.ts +596 -0
  261. package/src/api/assets.ts +416 -0
  262. package/src/api/auth.ts +1457 -0
  263. package/src/api/billing.ts +144 -0
  264. package/src/api/civic.ts +428 -0
  265. package/src/api/contacts.ts +41 -0
  266. package/src/api/devices.ts +438 -0
  267. package/src/api/follows.ts +414 -0
  268. package/src/api/identity.ts +727 -0
  269. package/src/api/linkedAccounts.ts +78 -0
  270. package/src/api/nodes.ts +169 -0
  271. package/src/api/notifications.ts +135 -0
  272. package/src/api/privacy.ts +120 -0
  273. package/src/api/reputation.ts +134 -0
  274. package/src/api/session.ts +210 -0
  275. package/src/api/store.ts +435 -0
  276. package/src/api/topics.ts +83 -0
  277. package/src/api/users.ts +357 -0
  278. package/src/boot/sessionColdBoot.ts +4 -4
  279. package/src/civic/index.ts +12 -0
  280. package/src/civic/payloads.ts +175 -0
  281. package/src/client/context.ts +34 -0
  282. package/src/crypto/identityLink.ts +5 -5
  283. package/src/crypto/index.ts +39 -0
  284. package/src/crypto/internal.ts +20 -0
  285. package/src/crypto/keyManager.ts +2 -2
  286. package/src/crypto/polyfill.ts +9 -89
  287. package/src/crypto/recoveryPhrase.ts +1 -0
  288. package/src/crypto/registrationPow.ts +1 -1
  289. package/src/crypto/signatureService.ts +1 -0
  290. package/src/i18n/accountCategoryLabels.ts +2 -2
  291. package/src/i18n/accountRoleLabels.ts +2 -2
  292. package/src/i18n/index.ts +105 -54
  293. package/src/i18n/locales/{ar-SA.json → ar-SA.ts} +132 -52
  294. package/src/i18n/locales/{ca-ES.json → ca-ES.ts} +132 -52
  295. package/{dist/cjs/i18n/locales/locales/de-DE.json → src/i18n/locales/de-DE.ts} +134 -54
  296. package/src/i18n/locales/{en-US.json → en-US.ts} +161 -245
  297. package/{dist/cjs/i18n/locales/locales/es-ES.json → src/i18n/locales/es-ES.ts} +161 -245
  298. package/src/i18n/locales/{fr-FR.json → fr-FR.ts} +132 -52
  299. package/src/i18n/locales/{it-IT.json → it-IT.ts} +132 -52
  300. package/{dist/cjs/i18n/locales/locales/ja-JP.json → src/i18n/locales/ja-JP.ts} +132 -52
  301. package/src/i18n/locales/{ko-KR.json → ko-KR.ts} +132 -52
  302. package/src/i18n/locales/{pt-PT.json → pt-PT.ts} +134 -54
  303. package/src/i18n/locales/{zh-CN.json → zh-CN.ts} +133 -53
  304. package/src/i18n/reputationCategoryLabels.ts +1 -1
  305. package/src/i18n/trustTierLabels.ts +1 -1
  306. package/src/index.ts +170 -501
  307. package/src/inference/index.ts +48 -0
  308. package/src/models/interfaces.ts +1 -1
  309. package/src/server/OxyServer.ts +637 -0
  310. package/src/server/auth.ts +12 -8
  311. package/src/server/index.ts +28 -5
  312. package/src/server/middleware.ts +1520 -0
  313. package/src/server/namespaces.ts +257 -0
  314. package/src/server/rateLimit.ts +10 -9
  315. package/src/server/requesterAssertion.ts +13 -10
  316. package/src/server/securityHeaders.ts +7 -8
  317. package/src/server/traffic.ts +6 -6
  318. package/src/server/trafficNodeHttp.ts +7 -3
  319. package/src/server/userInvalidation.ts +9 -9
  320. package/src/session/accountDelegationAccess.ts +1 -1
  321. package/src/session/accountDialogController.ts +24 -24
  322. package/src/session/accountSwitchTargets.ts +1 -1
  323. package/src/session/authStateStore.ts +9 -8
  324. package/src/session/identitySession.ts +3 -3
  325. package/src/session/index.ts +210 -0
  326. package/src/session/refresh.ts +36 -30
  327. package/src/session/sessionClientHost.ts +5 -5
  328. package/src/session/sharedDeviceCredential.ts +3 -2
  329. package/src/shared/utils/networkUtils.ts +2 -2
  330. package/src/utils/accountCacheSweep.ts +11 -15
  331. package/src/utils/apiUtils.ts +3 -3
  332. package/src/utils/asyncUtils.ts +38 -235
  333. package/src/utils/authHelpers.ts +2 -2
  334. package/src/utils/authWebUrl.ts +3 -4
  335. package/src/utils/avatarUtils.ts +4 -7
  336. package/src/utils/cache.ts +36 -5
  337. package/src/utils/cacheKey.ts +5 -9
  338. package/src/utils/commonsApproval.ts +1 -1
  339. package/src/utils/deviceManager.ts +17 -16
  340. package/src/utils/edgeRegion.ts +1 -2
  341. package/src/utils/identityCacheSweep.ts +7 -12
  342. package/src/utils/oauthPkce.ts +2 -2
  343. package/src/utils/oxyServiceEnvironment.ts +3 -7
  344. package/src/utils/requestUtils.ts +48 -44
  345. package/src/utils/sessionUtils.ts +0 -2
  346. package/src/utils/tokenClaims.ts +38 -0
  347. package/dist/cjs/.tsbuildinfo +0 -1
  348. package/dist/cjs/OxyServices.base.js +0 -392
  349. package/dist/cjs/i18n/locales/locales/ar-SA.json +0 -306
  350. package/dist/cjs/i18n/locales/locales/ca-ES.json +0 -306
  351. package/dist/cjs/i18n/locales/locales/en-US.json +0 -2127
  352. package/dist/cjs/i18n/locales/locales/fr-FR.json +0 -306
  353. package/dist/cjs/i18n/locales/locales/it-IT.json +0 -306
  354. package/dist/cjs/i18n/locales/locales/ko-KR.json +0 -306
  355. package/dist/cjs/i18n/locales/locales/pt-PT.json +0 -306
  356. package/dist/cjs/i18n/locales/locales/zh-CN.json +0 -306
  357. package/dist/cjs/mixins/OxyServices.accounts.js +0 -555
  358. package/dist/cjs/mixins/OxyServices.agency.js +0 -154
  359. package/dist/cjs/mixins/OxyServices.analytics.js +0 -49
  360. package/dist/cjs/mixins/OxyServices.appData.js +0 -108
  361. package/dist/cjs/mixins/OxyServices.assets.js +0 -854
  362. package/dist/cjs/mixins/OxyServices.auth.js +0 -1440
  363. package/dist/cjs/mixins/OxyServices.chains.js +0 -73
  364. package/dist/cjs/mixins/OxyServices.civic.js +0 -611
  365. package/dist/cjs/mixins/OxyServices.connectedApps.js +0 -95
  366. package/dist/cjs/mixins/OxyServices.contacts.js +0 -50
  367. package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -191
  368. package/dist/cjs/mixins/OxyServices.devices.js +0 -116
  369. package/dist/cjs/mixins/OxyServices.features.js +0 -335
  370. package/dist/cjs/mixins/OxyServices.followGraph.js +0 -221
  371. package/dist/cjs/mixins/OxyServices.identity.js +0 -562
  372. package/dist/cjs/mixins/OxyServices.identityBackup.js +0 -172
  373. package/dist/cjs/mixins/OxyServices.inference.js +0 -59
  374. package/dist/cjs/mixins/OxyServices.language.js +0 -125
  375. package/dist/cjs/mixins/OxyServices.linkedAccounts.js +0 -79
  376. package/dist/cjs/mixins/OxyServices.location.js +0 -43
  377. package/dist/cjs/mixins/OxyServices.nodes.js +0 -175
  378. package/dist/cjs/mixins/OxyServices.notifications.js +0 -63
  379. package/dist/cjs/mixins/OxyServices.payment.js +0 -158
  380. package/dist/cjs/mixins/OxyServices.privacy.js +0 -199
  381. package/dist/cjs/mixins/OxyServices.reputation.js +0 -289
  382. package/dist/cjs/mixins/OxyServices.security.js +0 -89
  383. package/dist/cjs/mixins/OxyServices.store.js +0 -266
  384. package/dist/cjs/mixins/OxyServices.topics.js +0 -137
  385. package/dist/cjs/mixins/OxyServices.user.js +0 -954
  386. package/dist/cjs/mixins/OxyServices.utility.js +0 -1402
  387. package/dist/cjs/mixins/index.js +0 -136
  388. package/dist/cjs/mixins/mixinHelpers.js +0 -53
  389. package/dist/cjs/utils/webauthnOrigin.js +0 -51
  390. package/dist/esm/.tsbuildinfo +0 -1
  391. package/dist/esm/OxyServices.base.js +0 -388
  392. package/dist/esm/i18n/locales/locales/ar-SA.json +0 -306
  393. package/dist/esm/i18n/locales/locales/ca-ES.json +0 -306
  394. package/dist/esm/i18n/locales/locales/de-DE.json +0 -306
  395. package/dist/esm/i18n/locales/locales/en-US.json +0 -2127
  396. package/dist/esm/i18n/locales/locales/es-ES.json +0 -2127
  397. package/dist/esm/i18n/locales/locales/fr-FR.json +0 -306
  398. package/dist/esm/i18n/locales/locales/it-IT.json +0 -306
  399. package/dist/esm/i18n/locales/locales/ja-JP.json +0 -306
  400. package/dist/esm/i18n/locales/locales/ko-KR.json +0 -306
  401. package/dist/esm/i18n/locales/locales/pt-PT.json +0 -306
  402. package/dist/esm/i18n/locales/locales/zh-CN.json +0 -306
  403. package/dist/esm/mixins/OxyServices.accounts.js +0 -543
  404. package/dist/esm/mixins/OxyServices.agency.js +0 -151
  405. package/dist/esm/mixins/OxyServices.analytics.js +0 -46
  406. package/dist/esm/mixins/OxyServices.appData.js +0 -103
  407. package/dist/esm/mixins/OxyServices.assets.js +0 -851
  408. package/dist/esm/mixins/OxyServices.auth.js +0 -1400
  409. package/dist/esm/mixins/OxyServices.chains.js +0 -70
  410. package/dist/esm/mixins/OxyServices.civic.js +0 -605
  411. package/dist/esm/mixins/OxyServices.connectedApps.js +0 -92
  412. package/dist/esm/mixins/OxyServices.contacts.js +0 -47
  413. package/dist/esm/mixins/OxyServices.deviceBoot.js +0 -186
  414. package/dist/esm/mixins/OxyServices.devices.js +0 -113
  415. package/dist/esm/mixins/OxyServices.features.js +0 -332
  416. package/dist/esm/mixins/OxyServices.followGraph.js +0 -218
  417. package/dist/esm/mixins/OxyServices.identity.js +0 -558
  418. package/dist/esm/mixins/OxyServices.identityBackup.js +0 -169
  419. package/dist/esm/mixins/OxyServices.inference.js +0 -56
  420. package/dist/esm/mixins/OxyServices.language.js +0 -122
  421. package/dist/esm/mixins/OxyServices.linkedAccounts.js +0 -76
  422. package/dist/esm/mixins/OxyServices.location.js +0 -40
  423. package/dist/esm/mixins/OxyServices.nodes.js +0 -172
  424. package/dist/esm/mixins/OxyServices.notifications.js +0 -60
  425. package/dist/esm/mixins/OxyServices.payment.js +0 -155
  426. package/dist/esm/mixins/OxyServices.privacy.js +0 -196
  427. package/dist/esm/mixins/OxyServices.reputation.js +0 -286
  428. package/dist/esm/mixins/OxyServices.security.js +0 -86
  429. package/dist/esm/mixins/OxyServices.store.js +0 -263
  430. package/dist/esm/mixins/OxyServices.topics.js +0 -134
  431. package/dist/esm/mixins/OxyServices.user.js +0 -951
  432. package/dist/esm/mixins/OxyServices.utility.js +0 -1397
  433. package/dist/esm/mixins/index.js +0 -133
  434. package/dist/esm/mixins/mixinHelpers.js +0 -48
  435. package/dist/esm/utils/webauthnOrigin.js +0 -48
  436. package/dist/types/.tsbuildinfo +0 -1
  437. package/dist/types/OxyServices.base.d.ts +0 -189
  438. package/dist/types/mixins/OxyServices.accounts.d.ts +0 -868
  439. package/dist/types/mixins/OxyServices.agency.d.ts +0 -176
  440. package/dist/types/mixins/OxyServices.analytics.d.ts +0 -72
  441. package/dist/types/mixins/OxyServices.appData.d.ts +0 -108
  442. package/dist/types/mixins/OxyServices.assets.d.ts +0 -371
  443. package/dist/types/mixins/OxyServices.auth.d.ts +0 -965
  444. package/dist/types/mixins/OxyServices.chains.d.ts +0 -156
  445. package/dist/types/mixins/OxyServices.civic.d.ts +0 -520
  446. package/dist/types/mixins/OxyServices.connectedApps.d.ts +0 -184
  447. package/dist/types/mixins/OxyServices.contacts.d.ts +0 -100
  448. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +0 -185
  449. package/dist/types/mixins/OxyServices.devices.d.ts +0 -103
  450. package/dist/types/mixins/OxyServices.features.d.ts +0 -250
  451. package/dist/types/mixins/OxyServices.followGraph.d.ts +0 -223
  452. package/dist/types/mixins/OxyServices.identity.d.ts +0 -337
  453. package/dist/types/mixins/OxyServices.identityBackup.d.ts +0 -129
  454. package/dist/types/mixins/OxyServices.inference.d.ts +0 -95
  455. package/dist/types/mixins/OxyServices.language.d.ts +0 -87
  456. package/dist/types/mixins/OxyServices.linkedAccounts.d.ts +0 -107
  457. package/dist/types/mixins/OxyServices.location.d.ts +0 -70
  458. package/dist/types/mixins/OxyServices.nodes.d.ts +0 -198
  459. package/dist/types/mixins/OxyServices.notifications.d.ts +0 -143
  460. package/dist/types/mixins/OxyServices.payment.d.ts +0 -117
  461. package/dist/types/mixins/OxyServices.privacy.d.ts +0 -146
  462. package/dist/types/mixins/OxyServices.reputation.d.ts +0 -202
  463. package/dist/types/mixins/OxyServices.security.d.ts +0 -84
  464. package/dist/types/mixins/OxyServices.store.d.ts +0 -334
  465. package/dist/types/mixins/OxyServices.topics.d.ts +0 -110
  466. package/dist/types/mixins/OxyServices.user.d.ts +0 -600
  467. package/dist/types/mixins/OxyServices.utility.d.ts +0 -526
  468. package/dist/types/mixins/index.d.ts +0 -87
  469. package/dist/types/mixins/mixinHelpers.d.ts +0 -31
  470. package/dist/types/utils/webauthnOrigin.d.ts +0 -32
  471. package/src/OxyServices.base.ts +0 -480
  472. package/src/__tests__/authSocket.test.ts +0 -96
  473. package/src/__tests__/fixEsmImports.test.ts +0 -132
  474. package/src/__tests__/httpServiceAbort.test.ts +0 -308
  475. package/src/__tests__/httpServiceActivityId.test.ts +0 -49
  476. package/src/__tests__/httpServiceAuthSelfAwait.test.ts +0 -108
  477. package/src/__tests__/httpServiceCache.test.ts +0 -318
  478. package/src/__tests__/httpServiceFormEncoded.test.ts +0 -139
  479. package/src/__tests__/httpServiceQueueDeadlock.test.ts +0 -128
  480. package/src/__tests__/httpServiceRateLimitedRefresh.test.ts +0 -160
  481. package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +0 -115
  482. package/src/__tests__/httpServiceWrites.test.ts +0 -175
  483. package/src/__tests__/inSessionRefresh.test.ts +0 -313
  484. package/src/__tests__/linkedClient.test.ts +0 -363
  485. package/src/__tests__/nearExpiryMintStorm.test.ts +0 -165
  486. package/src/__tests__/parseHttpErrorBody.test.ts +0 -116
  487. package/src/__tests__/publicInterfaceParity.test.ts +0 -75
  488. package/src/__tests__/serverValueImportsDeclared.test.ts +0 -120
  489. package/src/__tests__/serviceTokenWorkloadFallback.test.ts +0 -85
  490. package/src/__tests__/userIdentity.test.ts +0 -143
  491. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +0 -393
  492. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +0 -325
  493. package/src/boot/__tests__/sessionColdBoot.test.ts +0 -570
  494. package/src/crypto/__tests__/backupMaterial.test.ts +0 -86
  495. package/src/crypto/__tests__/cryptoPrimitives.test.ts +0 -226
  496. package/src/crypto/__tests__/identityLink.test.ts +0 -18
  497. package/src/crypto/__tests__/identityMocks.ts +0 -125
  498. package/src/crypto/__tests__/identityProof.test.ts +0 -81
  499. package/src/crypto/__tests__/keyManager.atomicity.test.ts +0 -272
  500. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +0 -175
  501. package/src/crypto/__tests__/keyManager.deviceBackup.test.ts +0 -310
  502. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +0 -217
  503. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +0 -179
  504. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +0 -138
  505. package/src/crypto/__tests__/keyManager.sharedSlotSync.test.ts +0 -150
  506. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +0 -227
  507. package/src/crypto/__tests__/keyManager.test.ts +0 -329
  508. package/src/crypto/__tests__/polyfill.test.ts +0 -109
  509. package/src/crypto/__tests__/polyfillOrder.test.ts +0 -114
  510. package/src/crypto/__tests__/recoveryPhrase.test.ts +0 -61
  511. package/src/crypto/__tests__/registrationPow.test.ts +0 -61
  512. package/src/crypto/__tests__/scopedSeed.test.ts +0 -126
  513. package/src/crypto/__tests__/signChallengeShared.test.ts +0 -63
  514. package/src/crypto/__tests__/signedRecord.test.ts +0 -230
  515. package/src/i18n/__tests__/accountCategoryLabels.test.ts +0 -62
  516. package/src/i18n/__tests__/accountRoleLabels.test.ts +0 -54
  517. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +0 -56
  518. package/src/i18n/__tests__/trustTierLabels.test.ts +0 -47
  519. package/src/i18n/locales/de-DE.json +0 -306
  520. package/src/i18n/locales/es-ES.json +0 -2127
  521. package/src/i18n/locales/ja-JP.json +0 -306
  522. package/src/inference/__tests__/OxyInferenceClient.test.ts +0 -899
  523. package/src/logger/__tests__/logger.test.ts +0 -207
  524. package/src/mixins/OxyServices.accounts.ts +0 -1330
  525. package/src/mixins/OxyServices.agency.ts +0 -353
  526. package/src/mixins/OxyServices.analytics.ts +0 -53
  527. package/src/mixins/OxyServices.appData.ts +0 -158
  528. package/src/mixins/OxyServices.assets.ts +0 -964
  529. package/src/mixins/OxyServices.auth.ts +0 -2028
  530. package/src/mixins/OxyServices.chains.ts +0 -134
  531. package/src/mixins/OxyServices.civic.ts +0 -945
  532. package/src/mixins/OxyServices.connectedApps.ts +0 -212
  533. package/src/mixins/OxyServices.contacts.ts +0 -73
  534. package/src/mixins/OxyServices.devices.ts +0 -120
  535. package/src/mixins/OxyServices.features.ts +0 -454
  536. package/src/mixins/OxyServices.followGraph.ts +0 -293
  537. package/src/mixins/OxyServices.identity.ts +0 -787
  538. package/src/mixins/OxyServices.identityBackup.ts +0 -250
  539. package/src/mixins/OxyServices.inference.ts +0 -57
  540. package/src/mixins/OxyServices.language.ts +0 -144
  541. package/src/mixins/OxyServices.linkedAccounts.ts +0 -129
  542. package/src/mixins/OxyServices.location.ts +0 -46
  543. package/src/mixins/OxyServices.nodes.ts +0 -337
  544. package/src/mixins/OxyServices.notifications.ts +0 -142
  545. package/src/mixins/OxyServices.payment.ts +0 -163
  546. package/src/mixins/OxyServices.privacy.ts +0 -219
  547. package/src/mixins/OxyServices.reputation.ts +0 -436
  548. package/src/mixins/OxyServices.security.ts +0 -110
  549. package/src/mixins/OxyServices.store.ts +0 -585
  550. package/src/mixins/OxyServices.topics.ts +0 -169
  551. package/src/mixins/OxyServices.user.ts +0 -1208
  552. package/src/mixins/OxyServices.utility.ts +0 -1803
  553. package/src/mixins/__tests__/OxyServices.civic.test.ts +0 -1095
  554. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +0 -124
  555. package/src/mixins/__tests__/OxyServices.identity.test.ts +0 -301
  556. package/src/mixins/__tests__/OxyServices.nodes.test.ts +0 -341
  557. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +0 -323
  558. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +0 -192
  559. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +0 -135
  560. package/src/mixins/__tests__/OxyServices.serviceLinkedDownloadUrl.test.ts +0 -139
  561. package/src/mixins/__tests__/accountEvents.test.ts +0 -158
  562. package/src/mixins/__tests__/accounts.test.ts +0 -727
  563. package/src/mixins/__tests__/agency.test.ts +0 -120
  564. package/src/mixins/__tests__/appData.test.ts +0 -203
  565. package/src/mixins/__tests__/assetCredentials.test.ts +0 -47
  566. package/src/mixins/__tests__/assetUpload.test.ts +0 -191
  567. package/src/mixins/__tests__/authRefusalObservability.test.ts +0 -396
  568. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +0 -130
  569. package/src/mixins/__tests__/chains.test.ts +0 -113
  570. package/src/mixins/__tests__/commonsSignIn.test.ts +0 -1147
  571. package/src/mixins/__tests__/connectedApps.test.ts +0 -146
  572. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +0 -113
  573. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +0 -265
  574. package/src/mixins/__tests__/followCacheInvalidation.test.ts +0 -173
  575. package/src/mixins/__tests__/followGraph.test.ts +0 -147
  576. package/src/mixins/__tests__/followGraphPagination.test.ts +0 -271
  577. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +0 -346
  578. package/src/mixins/__tests__/getFollowStatuses.test.ts +0 -95
  579. package/src/mixins/__tests__/getUsersByIds.test.ts +0 -176
  580. package/src/mixins/__tests__/identityBackup.test.ts +0 -315
  581. package/src/mixins/__tests__/identityLink.test.ts +0 -89
  582. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +0 -407
  583. package/src/mixins/__tests__/inferenceFactory.test.ts +0 -58
  584. package/src/mixins/__tests__/linkedAccounts.test.ts +0 -109
  585. package/src/mixins/__tests__/notifications.read.test.ts +0 -82
  586. package/src/mixins/__tests__/onTokensChanged.test.ts +0 -129
  587. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +0 -284
  588. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +0 -155
  589. package/src/mixins/__tests__/reputation.test.ts +0 -522
  590. package/src/mixins/__tests__/serviceAuth.test.ts +0 -889
  591. package/src/mixins/__tests__/serviceTokenJwks.test.ts +0 -208
  592. package/src/mixins/__tests__/store.test.ts +0 -304
  593. package/src/mixins/__tests__/topics.test.ts +0 -155
  594. package/src/mixins/__tests__/userReadCacheBypass.test.ts +0 -129
  595. package/src/mixins/__tests__/userTokenAuth.test.ts +0 -746
  596. package/src/mixins/__tests__/verifyChallenge.test.ts +0 -161
  597. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +0 -167
  598. package/src/mixins/__tests__/webauthnAuth.test.ts +0 -279
  599. package/src/mixins/index.ts +0 -203
  600. package/src/mixins/mixinHelpers.ts +0 -69
  601. package/src/server/__tests__/auth.test.ts +0 -78
  602. package/src/server/__tests__/capabilityTicket.test.ts +0 -111
  603. package/src/server/__tests__/cors.socket.test.ts +0 -225
  604. package/src/server/__tests__/cors.test.ts +0 -158
  605. package/src/server/__tests__/rateLimit.test.ts +0 -257
  606. package/src/server/__tests__/requesterAssertion.test.ts +0 -359
  607. package/src/server/__tests__/safeFetch.test.ts +0 -232
  608. package/src/server/__tests__/securityHeaders.test.ts +0 -387
  609. package/src/server/__tests__/serviceTokenAttribution.test.ts +0 -396
  610. package/src/server/__tests__/traffic.test.ts +0 -180
  611. package/src/server/__tests__/trafficNodeHttp.test.ts +0 -38
  612. package/src/server/__tests__/userInvalidation.test.ts +0 -203
  613. package/src/server/__tests__/verifySecret.test.ts +0 -40
  614. package/src/server/__tests__/workloadIdentity.client.test.ts +0 -16
  615. package/src/server/__tests__/workloadIdentity.test.ts +0 -128
  616. package/src/session/__tests__/SessionClient.additive.test.ts +0 -153
  617. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +0 -114
  618. package/src/session/__tests__/SessionClient.diagnostics.test.ts +0 -91
  619. package/src/session/__tests__/SessionClient.directory.test.ts +0 -688
  620. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +0 -65
  621. package/src/session/__tests__/SessionClient.identityPin.test.ts +0 -175
  622. package/src/session/__tests__/SessionClient.rest.test.ts +0 -119
  623. package/src/session/__tests__/SessionClient.serverEvents.test.ts +0 -72
  624. package/src/session/__tests__/SessionClient.socket.test.ts +0 -202
  625. package/src/session/__tests__/SessionClient.socketFactory.test.ts +0 -81
  626. package/src/session/__tests__/SessionClient.state.test.ts +0 -78
  627. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +0 -170
  628. package/src/session/__tests__/accountDelegationAccess.test.ts +0 -104
  629. package/src/session/__tests__/accountDialogController.test.ts +0 -2502
  630. package/src/session/__tests__/accountDialogShape.test.ts +0 -120
  631. package/src/session/__tests__/accountSwitchTargets.test.ts +0 -137
  632. package/src/session/__tests__/authStateStore.test.ts +0 -451
  633. package/src/session/__tests__/deviceDirectory.test.ts +0 -422
  634. package/src/session/__tests__/deviceSwitcherRows.test.ts +0 -223
  635. package/src/session/__tests__/identityPin.test.ts +0 -131
  636. package/src/session/__tests__/identitySession.test.ts +0 -194
  637. package/src/session/__tests__/projectSessionState.test.ts +0 -105
  638. package/src/session/__tests__/refresh.identityPin.test.ts +0 -307
  639. package/src/session/__tests__/refresh.test.ts +0 -606
  640. package/src/session/__tests__/sessionIntegration.test.ts +0 -209
  641. package/src/session/__tests__/sharedDeviceCredential.test.ts +0 -300
  642. package/src/utils/__tests__/accountUtils.test.ts +0 -151
  643. package/src/utils/__tests__/activityId.test.ts +0 -45
  644. package/src/utils/__tests__/asyncUtils.test.ts +0 -279
  645. package/src/utils/__tests__/authWebUrl.test.ts +0 -15
  646. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  647. package/src/utils/__tests__/cacheLifecycle.test.ts +0 -65
  648. package/src/utils/__tests__/coldBoot.test.ts +0 -496
  649. package/src/utils/__tests__/commonsApproval.test.ts +0 -60
  650. package/src/utils/__tests__/identityCacheSweep.test.ts +0 -151
  651. package/src/utils/__tests__/languageUtils.test.ts +0 -244
  652. package/src/utils/__tests__/oauthPkce.test.ts +0 -303
  653. package/src/utils/__tests__/officialOrigins.test.ts +0 -31
  654. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +0 -7
  655. package/src/utils/__tests__/profileLinks.test.ts +0 -180
  656. package/src/utils/__tests__/redactUrl.test.ts +0 -33
  657. package/src/utils/__tests__/registrableApex.test.ts +0 -62
  658. package/src/utils/__tests__/requestUtilsAbort.test.ts +0 -155
  659. package/src/utils/__tests__/textNormalization.test.ts +0 -205
  660. package/src/utils/__tests__/validationUtils.test.ts +0 -703
  661. package/src/utils/__tests__/webauthnOrigin.test.ts +0 -83
  662. package/src/utils/webauthnOrigin.ts +0 -52
@@ -1,132 +0,0 @@
1
- /**
2
- * `scripts/fix-esm-imports.mjs` must rewrite DYNAMIC relative imports too.
3
- *
4
- * ## The failure this exists for, which happened
5
- *
6
- * This package writes relative specifiers without an extension — legal under
7
- * `moduleResolution: bundler`, illegal in Node's ESM resolver — and the
8
- * post-build script adds the extension back. For its first life the script's
9
- * pattern was `(?:from|import)\s+['"]`, which cannot match `import('./x')`:
10
- * the keyword is followed by a parenthesis, not whitespace. Every dynamic
11
- * import therefore shipped extensionless in `dist/esm`.
12
- *
13
- * `OxyServices.getServiceToken()` loads `../server/workloadIdentity` that way
14
- * to decide whether this process can attest its workload identity (ADR 0026),
15
- * and it does so inside a `try/catch` that reads any failure as "cannot attest
16
- * here". So in every ESM consumer of the BUILT package the ADR 0026 fallback
17
- * was dead, and a service whose task role attests perfectly well was told
18
- * `Service credentials not provided` — which is what a deployment sees the
19
- * moment its key pair is removed, and the reason `mention-mcp` and `alia` could
20
- * not complete the migration while `mention`, `allo` and `alia-integrations`
21
- * (all CommonJS, where `require()` supplies the extension) already had.
22
- *
23
- * ## Why this spawns the real script
24
- *
25
- * The defect is in the build OUTPUT, and core's CI job runs jest without
26
- * building the package, so a test that reads `dist/esm` would pass by finding
27
- * nothing. `serviceTokenWorkloadFallback.test.ts` cannot catch it either: jest
28
- * resolves extensionless specifiers, and it mocks that module by name. The one
29
- * thing that measures the real behaviour without a build is to run the script
30
- * over a fixture and read what it wrote.
31
- */
32
-
33
- import { spawnSync } from 'node:child_process';
34
- import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
35
- import { tmpdir } from 'node:os';
36
- import path from 'node:path';
37
-
38
- const script = path.resolve(__dirname, '../../scripts/fix-esm-imports.mjs');
39
-
40
- function runOnFixture(files: Record<string, string>): Record<string, string> {
41
- const root = mkdtempSync(path.join(tmpdir(), 'oxy-core-esm-fix-'));
42
- try {
43
- for (const [name, source] of Object.entries(files)) {
44
- const full = path.join(root, name);
45
- mkdirSync(path.dirname(full), { recursive: true });
46
- writeFileSync(full, source);
47
- }
48
- const result = spawnSync(process.execPath, [script, root], { encoding: 'utf8' });
49
- expect(result.status).toBe(0);
50
- const out: Record<string, string> = {};
51
- for (const name of Object.keys(files)) {
52
- out[name] = readFileSync(path.join(root, name), 'utf8');
53
- }
54
- return out;
55
- } finally {
56
- rmSync(root, { recursive: true, force: true });
57
- }
58
- }
59
-
60
- describe('fix-esm-imports', () => {
61
- it('adds .js to a dynamic relative import', () => {
62
- const out = runOnFixture({
63
- 'server/workloadIdentity.js': 'export const canAttestWorkloadIdentity = () => true;\n',
64
- 'mixins/auth.js': [
65
- 'export async function canUse() {',
66
- " const { canAttestWorkloadIdentity } = await import('../server/workloadIdentity');",
67
- ' return canAttestWorkloadIdentity();',
68
- '}',
69
- '',
70
- ].join('\n'),
71
- });
72
-
73
- expect(out['mixins/auth.js']).toContain("await import('../server/workloadIdentity.js')");
74
- });
75
-
76
- it('rewrites every dynamic import in a file, not only the first', () => {
77
- const out = runOnFixture({
78
- 'server/workloadIdentity.js': 'export const a = 1;\nexport const b = 2;\n',
79
- 'mixins/auth.js': [
80
- "const first = await import('../server/workloadIdentity');",
81
- "const second = await import('../server/workloadIdentity');",
82
- '',
83
- ].join('\n'),
84
- });
85
-
86
- const matches = out['mixins/auth.js'].match(/workloadIdentity\.js/g) ?? [];
87
- expect(matches).toHaveLength(2);
88
- // And nothing was left extensionless.
89
- expect(out['mixins/auth.js']).not.toMatch(/workloadIdentity'/);
90
- });
91
-
92
- it('tolerates whitespace between the keyword and the parenthesis', () => {
93
- const out = runOnFixture({
94
- 'server/workloadIdentity.js': 'export const a = 1;\n',
95
- 'mixins/auth.js': "const m = await import(\n '../server/workloadIdentity'\n);\n",
96
- });
97
-
98
- expect(out['mixins/auth.js']).toContain("'../server/workloadIdentity.js'");
99
- });
100
-
101
- it('resolves a dynamic directory import to its index', () => {
102
- const out = runOnFixture({
103
- 'server/index.js': 'export const a = 1;\n',
104
- 'mixins/auth.js': "const m = await import('../server');\n",
105
- });
106
-
107
- expect(out['mixins/auth.js']).toContain("'../server/index.js'");
108
- });
109
-
110
- it('still rewrites the static forms, and leaves bare and already-suffixed specifiers alone', () => {
111
- const out = runOnFixture({
112
- 'server/workloadIdentity.js': 'export const a = 1;\n',
113
- 'mixins/auth.js': [
114
- "import { a } from '../server/workloadIdentity';",
115
- "import '../server/workloadIdentity';",
116
- "export { a as b } from '../server/workloadIdentity';",
117
- "import { createHash } from 'node:crypto';",
118
- "import { z } from 'zod';",
119
- "const late = await import('./sibling.js');",
120
- '',
121
- ].join('\n'),
122
- 'mixins/sibling.js': 'export const s = 1;\n',
123
- });
124
-
125
- const source = out['mixins/auth.js'];
126
- expect(source.match(/workloadIdentity\.js/g) ?? []).toHaveLength(3);
127
- expect(source).toContain("import { createHash } from 'node:crypto';");
128
- expect(source).toContain("import { z } from 'zod';");
129
- expect(source).toContain("await import('./sibling.js')");
130
- expect(source).not.toContain('sibling.js.js');
131
- });
132
- });
@@ -1,308 +0,0 @@
1
- /**
2
- * Cancellation and timeout regressions.
3
- *
4
- * `HttpService` used to build its `AbortController` INSIDE the function
5
- * `retryAsync` re-invokes, and link the caller's signal to each new controller
6
- * with a bare `addEventListener`. Since `abort` is a once-only event, a signal
7
- * that had already fired could not abort the controller built for attempt 2 —
8
- * so a request the caller had CANCELLED was re-issued for real. A caller abort
9
- * also reached the retry predicate as an `AbortError` carrying `status: 0`,
10
- * which is not 4xx, so the predicate read it as a transient failure worth
11
- * another try. With the 5s default timeout and 3 retries that is ~28s of work
12
- * after the caller stopped waiting, inside a request queue ten slots deep.
13
- *
14
- * Every test here pins one half of "a cancellation is an instruction, not a
15
- * failure": nothing retries it, nothing queues it, and nothing leaks after it.
16
- */
17
- import { HttpService } from '../HttpService';
18
- import { ErrorCodes } from '../utils/errorUtils';
19
-
20
- function jsonResponse(data: unknown, status = 200): Response {
21
- return new Response(JSON.stringify({ data }), {
22
- status,
23
- headers: { 'content-type': 'application/json' },
24
- });
25
- }
26
-
27
- /**
28
- * A fetch that never responds, but DOES honour its abort signal — rejecting
29
- * with an `AbortError` exactly as the real one does.
30
- *
31
- * Honouring the signal is not harness politeness, it is the whole point: the
32
- * behaviour under test is what happens after an abort, so a fake that ignores
33
- * the signal would hang instead of exercising it.
34
- */
35
- function hangingFetch(): { fetch: typeof globalThis.fetch; calls: () => number } {
36
- let calls = 0;
37
- return {
38
- fetch: ((_input: RequestInfo | URL, init?: RequestInit) => {
39
- calls++;
40
- return new Promise<Response>((_resolve, reject) => {
41
- const signal = init?.signal;
42
- const fail = (): void => reject(new DOMException('The operation was aborted.', 'AbortError'));
43
- if (!signal) return;
44
- if (signal.aborted) { fail(); return; }
45
- signal.addEventListener('abort', fail, { once: true });
46
- });
47
- }) as typeof globalThis.fetch,
48
- calls: () => calls,
49
- };
50
- }
51
-
52
- /**
53
- * Pin the retry backoff's jitter to zero.
54
- *
55
- * `retryAsync`'s delay is `baseDelay * 2**attempt + Math.random() * 1000`, so
56
- * with real timers a retry can land up to a second later. A test that waits a
57
- * fixed 80ms to prove "no retry happened" would then pass whether the bug was
58
- * present or not — it would just be measuring the jitter. Pinning it makes the
59
- * retry window exactly `baseDelay * (1 + 2 + 4)`, which a short wait covers
60
- * decisively.
61
- */
62
- function pinJitter(): void {
63
- jest.spyOn(Math, 'random').mockReturnValue(0);
64
- }
65
-
66
- describe('HttpService cancellation', () => {
67
- const originalFetch = globalThis.fetch;
68
-
69
- afterEach(() => {
70
- globalThis.fetch = originalFetch;
71
- jest.restoreAllMocks();
72
- jest.useRealTimers();
73
- });
74
-
75
- it('never calls fetch for a signal that was already aborted', async () => {
76
- let calls = 0;
77
- globalThis.fetch = (async () => { calls++; return jsonResponse({}); }) as typeof globalThis.fetch;
78
-
79
- const http = new HttpService({ baseURL: 'https://api.test' });
80
- const controller = new AbortController();
81
- controller.abort();
82
-
83
- await expect(http.get('/thing', { signal: controller.signal })).rejects.toMatchObject({
84
- code: ErrorCodes.CANCELLED,
85
- });
86
- expect(calls).toBe(0);
87
- });
88
-
89
- it('issues exactly one fetch when a request is cancelled mid-flight, with retry on', async () => {
90
- pinJitter();
91
- const { fetch, calls } = hangingFetch();
92
- globalThis.fetch = fetch;
93
-
94
- const http = new HttpService({
95
- baseURL: 'https://api.test',
96
- enableRetry: true,
97
- maxRetries: 3,
98
- retryDelay: 1,
99
- });
100
-
101
- const controller = new AbortController();
102
- const pending = http.get('/thing', { signal: controller.signal });
103
- const assertion = expect(pending).rejects.toMatchObject({ code: ErrorCodes.CANCELLED });
104
-
105
- // Let the request reach fetch, then cancel it.
106
- await new Promise((resolve) => setTimeout(resolve, 10));
107
- expect(calls()).toBe(1);
108
- controller.abort();
109
- await assertion;
110
-
111
- // The retry budget was 3 more attempts, whose backoff with jitter pinned is
112
- // 1+2+4ms. Waiting well past that window is what proves none of them ran,
113
- // and it is the crux of the defect: the re-issued request went out AFTER
114
- // the rejection the caller saw, so a test that stopped at the rejection
115
- // would have passed with the bug fully present.
116
- await new Promise((resolve) => setTimeout(resolve, 80));
117
- expect(calls()).toBe(1);
118
- });
119
-
120
- it('leaves no abort listener on a caller signal that outlives the request', async () => {
121
- globalThis.fetch = (async () => jsonResponse({ ok: true })) as typeof globalThis.fetch;
122
-
123
- const controller = new AbortController();
124
- const added: unknown[] = [];
125
- const removed: unknown[] = [];
126
- const realAdd = controller.signal.addEventListener.bind(controller.signal);
127
- const realRemove = controller.signal.removeEventListener.bind(controller.signal);
128
- jest.spyOn(controller.signal, 'addEventListener').mockImplementation(((type: string, fn: never, opts: never) => {
129
- if (type === 'abort') added.push(fn);
130
- return realAdd(type as 'abort', fn, opts);
131
- }) as never);
132
- jest.spyOn(controller.signal, 'removeEventListener').mockImplementation(((type: string, fn: never, opts: never) => {
133
- if (type === 'abort') removed.push(fn);
134
- return realRemove(type as 'abort', fn, opts);
135
- }) as never);
136
-
137
- const http = new HttpService({ baseURL: 'https://api.test' });
138
- // A React Query query signal is reused across the query's whole lifetime,
139
- // so a listener left behind per request is an unbounded leak, not a nit.
140
- for (let i = 0; i < 5; i++) {
141
- await http.get(`/thing-${i}`, { signal: controller.signal, cache: false, deduplicate: false });
142
- }
143
-
144
- expect(added.length).toBeGreaterThan(0);
145
- expect(removed.length).toBe(added.length);
146
- });
147
-
148
- it('does not consume a queue slot for a cancelled request, so a live one still runs', async () => {
149
- const live: string[] = [];
150
- globalThis.fetch = (async (input: RequestInfo | URL) => {
151
- const url = String(input);
152
- if (url.includes('/live')) {
153
- live.push(url);
154
- return jsonResponse({ ok: true });
155
- }
156
- // Cancelled requests never get here; if one does, it would hold a slot.
157
- return new Promise<Response>(() => { /* never settles */ });
158
- }) as typeof globalThis.fetch;
159
-
160
- const http = new HttpService({
161
- baseURL: 'https://api.test',
162
- maxConcurrentRequests: 2,
163
- enableRetry: false,
164
- });
165
-
166
- // Fill more than the pool with requests whose callers have already gone.
167
- const dead = Array.from({ length: 6 }, (_, i) => {
168
- const controller = new AbortController();
169
- controller.abort();
170
- return http.get(`/dead-${i}`, { signal: controller.signal }).catch(() => 'cancelled');
171
- });
172
- await Promise.all(dead);
173
-
174
- // With only two slots, this is the assertion that matters: the live request
175
- // is not queued behind six abandoned ones.
176
- await expect(http.get('/live', { cache: false })).resolves.toBeDefined();
177
- expect(live).toHaveLength(1);
178
- });
179
- });
180
-
181
- describe('HttpService timeout', () => {
182
- const originalFetch = globalThis.fetch;
183
-
184
- afterEach(() => {
185
- globalThis.fetch = originalFetch;
186
- jest.restoreAllMocks();
187
- jest.useRealTimers();
188
- });
189
-
190
- it('does not retry a timeout by default, and reports it as a timeout not a cancellation', async () => {
191
- pinJitter();
192
- const { fetch, calls } = hangingFetch();
193
- globalThis.fetch = fetch;
194
-
195
- const http = new HttpService({
196
- baseURL: 'https://api.test',
197
- enableRetry: true,
198
- maxRetries: 3,
199
- retryDelay: 1,
200
- requestTimeout: 20,
201
- });
202
-
203
- await expect(http.get('/slow', { cache: false })).rejects.toMatchObject({
204
- code: ErrorCodes.TIMEOUT,
205
- timeout: true,
206
- });
207
-
208
- await new Promise((resolve) => setTimeout(resolve, 80));
209
- // One attempt, not four. Four behind a short timeout is how a single slow
210
- // endpoint used to cost tens of seconds of wall clock.
211
- expect(calls()).toBe(1);
212
- });
213
-
214
- it('retries a timeout when the caller opts in', async () => {
215
- const { fetch, calls } = hangingFetch();
216
- globalThis.fetch = fetch;
217
-
218
- const http = new HttpService({
219
- baseURL: 'https://api.test',
220
- enableRetry: true,
221
- maxRetries: 2,
222
- retryDelay: 1,
223
- requestTimeout: 20,
224
- });
225
-
226
- await expect(
227
- http.get('/slow', { cache: false, retryOnTimeout: true }),
228
- ).rejects.toMatchObject({ code: ErrorCodes.TIMEOUT });
229
-
230
- expect(calls()).toBe(3);
231
- });
232
-
233
- it('bounds total wall clock with a deadline, even with retries on', async () => {
234
- pinJitter();
235
- const { fetch } = hangingFetch();
236
- globalThis.fetch = fetch;
237
-
238
- const http = new HttpService({
239
- baseURL: 'https://api.test',
240
- enableRetry: true,
241
- maxRetries: 5,
242
- retryDelay: 100,
243
- requestTimeout: 20,
244
- });
245
-
246
- const started = Date.now();
247
- await expect(
248
- http.get('/slow', { cache: false, retryOnTimeout: true, deadline: 150 }),
249
- ).rejects.toBeDefined();
250
-
251
- // `timeout` bounds an attempt; `deadline` bounds the call. Without it the
252
- // total is attempts x timeout + backoff, which no call site computes.
253
- expect(Date.now() - started).toBeLessThan(400);
254
- });
255
-
256
- it('still retries a 5xx — the fix must not disable retry wholesale', async () => {
257
- let calls = 0;
258
- globalThis.fetch = (async () => {
259
- calls++;
260
- return jsonResponse({ error: 'boom' }, 503);
261
- }) as typeof globalThis.fetch;
262
-
263
- const http = new HttpService({
264
- baseURL: 'https://api.test',
265
- enableRetry: true,
266
- maxRetries: 2,
267
- retryDelay: 1,
268
- });
269
-
270
- await expect(http.get('/flaky', { cache: false })).rejects.toBeDefined();
271
- expect(calls).toBe(3);
272
- });
273
-
274
- it('still refuses to retry a 4xx', async () => {
275
- let calls = 0;
276
- globalThis.fetch = (async () => {
277
- calls++;
278
- return jsonResponse({ error: 'nope' }, 404);
279
- }) as typeof globalThis.fetch;
280
-
281
- const http = new HttpService({
282
- baseURL: 'https://api.test',
283
- enableRetry: true,
284
- maxRetries: 3,
285
- retryDelay: 1,
286
- });
287
-
288
- await expect(http.get('/missing', { cache: false })).rejects.toBeDefined();
289
- expect(calls).toBe(1);
290
- });
291
-
292
- it('arms no timer past a request that threw before returning', async () => {
293
- globalThis.fetch = (async () => jsonResponse({ error: 'nope' }, 404)) as typeof globalThis.fetch;
294
- jest.useFakeTimers({ doNotFake: ['nextTick'] });
295
-
296
- const http = new HttpService({
297
- baseURL: 'https://api.test',
298
- enableRetry: false,
299
- requestTimeout: 30_000,
300
- });
301
-
302
- await expect(http.get('/missing', { cache: false })).rejects.toBeDefined();
303
- // `clearTimeout` used to sit on the success path only, so any throw between
304
- // the fetch and the return left a 30s timer armed.
305
- expect(jest.getTimerCount()).toBe(0);
306
- jest.useRealTimers();
307
- });
308
- });
@@ -1,49 +0,0 @@
1
- import { HttpService } from '../HttpService';
2
-
3
- describe('HttpService browser activity identifier', () => {
4
- const originalFetch = globalThis.fetch;
5
- const originalWindowDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'window');
6
- const originalDocumentDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'document');
7
-
8
- afterEach(() => {
9
- globalThis.fetch = originalFetch;
10
- if (originalWindowDescriptor) {
11
- Object.defineProperty(globalThis, 'window', originalWindowDescriptor);
12
- } else {
13
- Reflect.deleteProperty(globalThis, 'window');
14
- }
15
- if (originalDocumentDescriptor) {
16
- Object.defineProperty(globalThis, 'document', originalDocumentDescriptor);
17
- } else {
18
- Reflect.deleteProperty(globalThis, 'document');
19
- }
20
- jest.restoreAllMocks();
21
- });
22
-
23
- it('adds the runtime identifier after caller headers', async () => {
24
- Object.defineProperty(globalThis, 'window', {
25
- configurable: true,
26
- value: {},
27
- });
28
- Object.defineProperty(globalThis, 'document', {
29
- configurable: true,
30
- value: {},
31
- });
32
- const fetchMock = jest.fn(async () => new Response(JSON.stringify({ data: { ok: true } }), {
33
- status: 200,
34
- headers: { 'content-type': 'application/json' },
35
- }));
36
- globalThis.fetch = fetchMock as unknown as typeof globalThis.fetch;
37
-
38
- const http = new HttpService({ baseURL: 'https://api.oxy.so', enableRetry: false });
39
- await http.get('/session/status', {
40
- headers: { 'X-Oxy-Activity-Id': 'caller-controlled' },
41
- });
42
-
43
- const requestHeaders = fetchMock.mock.calls[0]?.[1]?.headers as Record<string, string>;
44
- expect(requestHeaders['X-Oxy-Activity-Id']).toMatch(
45
- /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
46
- );
47
- expect(requestHeaders['X-Oxy-Activity-Id']).not.toBe('caller-controlled');
48
- });
49
- });
@@ -1,108 +0,0 @@
1
- /**
2
- * Auth self-await regression.
3
- *
4
- * The refresh handler (arm 2 shared-key sign-in) calls PRE-SESSION public
5
- * endpoints (`/auth/challenge`, `/auth/verify`, the commons-signin surface, …)
6
- * from INSIDE the single-flight `tokenRefreshPromise`. If any of those carried
7
- * an auth preflight (no `skipAuth`), its `getAuthHeader` would call
8
- * `refreshAccessToken`, find the handler's own promise already in flight, and
9
- * await it — the handler awaiting itself → permanent hang (no deadline on the
10
- * auto-connect lane makes it visible). `skipAuth` on every pre-session public
11
- * endpoint is what prevents this; these tests lock the invariant.
12
- */
13
- import { HttpService } from '../HttpService';
14
-
15
- function createJwt(payload: Record<string, unknown>): string {
16
- const encode = (value: unknown): string => Buffer.from(JSON.stringify(value)).toString('base64url');
17
- return `${encode({ alg: 'HS256', typ: 'JWT' })}.${encode(payload)}.signature`;
18
- }
19
-
20
- function jsonResponse(data: unknown): Response {
21
- return new Response(JSON.stringify({ data }), {
22
- status: 200,
23
- headers: { 'content-type': 'application/json' },
24
- });
25
- }
26
-
27
- const nowSec = (): number => Math.floor(Date.now() / 1000);
28
-
29
- /** Resolve to `true` if `promise` settles within `ms`, else `false`. Always
30
- * clears its timer so no pending timeout leaks into jest's teardown. */
31
- async function settlesWithin(promise: Promise<unknown>, ms: number): Promise<boolean> {
32
- let timer: ReturnType<typeof setTimeout> | undefined;
33
- const timeout = new Promise<false>((resolve) => {
34
- timer = setTimeout(() => resolve(false), ms);
35
- });
36
- try {
37
- return await Promise.race([promise.then(() => true), timeout]);
38
- } finally {
39
- clearTimeout(timer);
40
- }
41
- }
42
-
43
- describe('HttpService auth self-await', () => {
44
- const originalFetch = globalThis.fetch;
45
-
46
- afterEach(() => {
47
- globalThis.fetch = originalFetch;
48
- jest.restoreAllMocks();
49
- });
50
-
51
- it('a skipAuth request issued from INSIDE the refresh handler resolves (no self-await)', async () => {
52
- globalThis.fetch = (async (input: RequestInfo | URL) => {
53
- const url = String(input);
54
- if (url.includes('/auth/challenge')) return jsonResponse({ challenge: 'c' });
55
- return jsonResponse({ ok: true });
56
- }) as typeof fetch;
57
-
58
- const http = new HttpService({ baseURL: 'https://api.oxy.so', enableRetry: false });
59
- // Near-expiry → the data request's preflight starts the refresh.
60
- http.setTokens(createJwt({ userId: 'u', exp: nowSec() + 30 }));
61
-
62
- http.setAuthRefreshHandler(async () => {
63
- // Mirror arm 2: from inside the handler, hit a pre-session public endpoint.
64
- // With skipAuth it does NOT re-enter refreshAccessToken; without it, its
65
- // preflight would await THIS handler's own pending promise → self-await.
66
- await http.post('/auth/challenge', { publicKey: 'p' }, { skipAuth: true, retry: false });
67
- const fresh = createJwt({ userId: 'u', exp: nowSec() + 3600, jti: 'fresh' });
68
- http.setTokens(fresh);
69
- return fresh;
70
- });
71
-
72
- expect(await settlesWithin(http.get('/data'), 500)).toBe(true);
73
- });
74
-
75
- it('a skipAuth public request does NOT await a pending refresh', async () => {
76
- let releaseRefresh: (() => void) | undefined;
77
- const refreshGate = new Promise<void>((resolve) => {
78
- releaseRefresh = resolve;
79
- });
80
-
81
- globalThis.fetch = (async (input: RequestInfo | URL) => {
82
- const url = String(input);
83
- if (url.includes('/auth/challenge')) return jsonResponse({ challenge: 'c' });
84
- return jsonResponse({ ok: true });
85
- }) as typeof fetch;
86
-
87
- const http = new HttpService({ baseURL: 'https://api.oxy.so', enableRetry: false });
88
- http.setTokens(createJwt({ userId: 'u', exp: nowSec() + 30 }));
89
-
90
- http.setAuthRefreshHandler(async () => {
91
- await refreshGate; // hold the refresh open
92
- const fresh = createJwt({ userId: 'u', exp: nowSec() + 3600, jti: 'fresh' });
93
- http.setTokens(fresh);
94
- return fresh;
95
- });
96
-
97
- // A data request whose preflight starts (and blocks on) the held refresh.
98
- const data = http.get('/data');
99
- await new Promise((resolve) => setTimeout(resolve, 0));
100
-
101
- // A skipAuth public request must settle WITHOUT waiting for the held refresh.
102
- const pub = http.post('/auth/challenge', { publicKey: 'p' }, { skipAuth: true, retry: false });
103
- expect(await settlesWithin(pub, 300)).toBe(true);
104
-
105
- releaseRefresh?.();
106
- await data;
107
- });
108
- });