@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
@@ -0,0 +1,183 @@
1
+ import { OxyServices, type OxyConfig } from '../OxyServices';
2
+ import type { HttpMethod } from '../client/context';
3
+ import type { RequestOptions } from '../HttpService';
4
+ import { type OxyAccountEvent, type OxyAccountEventFeedPage, type OxyMiddleware, type ServiceActingAsVerification, type VerifyAccountEventOptions } from './middleware';
5
+ import { ServerAgencyApi, ServerAssetsApi, ServerLinkedAccountsApi, ServerNotificationsApi, ServerReputationApi } from './namespaces';
6
+ export interface OxyServerConfig extends OxyConfig {
7
+ /** This service's application credential. Omit to use workload identity (ADR 0026). */
8
+ serviceAuth?: {
9
+ apiKey: string;
10
+ apiSecret: string;
11
+ };
12
+ /**
13
+ * How this backend identifies itself on requests that carry no user session.
14
+ *
15
+ * - `'never'` (default): such requests go out anonymous.
16
+ * - `'when-anonymous'`: they carry this process's service token instead —
17
+ * from `serviceAuth`, or, with none, from workload attestation (ADR 0026).
18
+ * A user session, when there is one, still wins; `skipAuth` requests stay
19
+ * unauthenticated; a process that can produce no service token (a local
20
+ * checkout) keeps sending them anonymous.
21
+ *
22
+ * Why a server wants it: oxy-api charges anonymous traffic to the SOURCE
23
+ * ADDRESS (`rl:general`, and a +500 ms `slowDown` per request past 100 in 15
24
+ * minutes), and a fleet leaves through one NAT address, so every anonymous
25
+ * read a backend makes shares — and past the threshold pays for — one budget.
26
+ * A first-party service token is exempt and charged to its own application.
27
+ * Measured from Mention's task (2026-09-25): `GET /users/:id` 543–575 ms
28
+ * anonymous past the threshold, `POST /users/by-ids` 19–24 ms with the
29
+ * service token.
30
+ */
31
+ serviceIdentity?: 'never' | 'when-anonymous';
32
+ }
33
+ /**
34
+ * How long a failed service-token mint sends session-less requests anonymous
35
+ * before the next attempt, under `serviceIdentity: 'when-anonymous'`.
36
+ */
37
+ export declare const ANONYMOUS_SERVICE_TOKEN_RETRY_MS = 30000;
38
+ /** `POST /auth/service-token`. */
39
+ export interface ServiceTokenResponse {
40
+ token: string;
41
+ expiresIn: number;
42
+ appName: string;
43
+ }
44
+ /**
45
+ * Sentinel error raised when a service token is asked for with a known apiKey
46
+ * but a non-matching secret: credential drift in the caller, or a cross-tenant
47
+ * cache lookup attempt. Surface as a 401-equivalent.
48
+ */
49
+ export declare class ServiceCredentialMismatchError extends Error {
50
+ constructor();
51
+ }
52
+ export declare class OxyServer extends OxyServices {
53
+ private readonly serviceTokens;
54
+ private serviceApiKey;
55
+ private serviceApiSecret;
56
+ private readonly actingAs;
57
+ private readonly actingAsPending;
58
+ /** Public keys only; never private material. */
59
+ private readonly jwksCache;
60
+ /**
61
+ * Before this instant a request without a user session does not try to mint
62
+ * a service token and goes out anonymous. Set after a failed mint.
63
+ */
64
+ private anonymousServiceTokenRetryAt;
65
+ /**
66
+ * Express and Socket.IO middleware.
67
+ *
68
+ * - `auth(options)` — Express: resolve the caller (user session or service
69
+ * token) onto `req.userId` / `req.user` / `req.serviceApp`.
70
+ * - `socket(options)` — Socket.IO: the same for a handshake.
71
+ * - `service(options)` — Express: service tokens only.
72
+ * - `requireScope(scope)` — Express, after `auth`/`service`: the service
73
+ * token (and its delegation, if any) must hold `scope`.
74
+ */
75
+ readonly middleware: OxyMiddleware;
76
+ constructor(config: OxyServerConfig);
77
+ private _serverAssets?;
78
+ private _serverNotifications?;
79
+ private _serverLinkedAccounts?;
80
+ private _serverAgency?;
81
+ private _serverReputation?;
82
+ /** Files, plus the service-only metadata and linked-URL lookups. */
83
+ get assets(): ServerAssetsApi;
84
+ /** The inbox and push tokens, plus `create`. */
85
+ get notifications(): ServerNotificationsApi;
86
+ /** Linked external accounts, plus `forUser`. */
87
+ get linkedAccounts(): ServerLinkedAccountsApi;
88
+ /** Delegated capabilities, plus `introspectRequesterAssertion`. */
89
+ get agency(): ServerAgencyApi;
90
+ /** Reputation reads, plus `award`. */
91
+ get reputation(): ServerReputationApi;
92
+ /**
93
+ * Set this service's application credential. Each `(apiKey, apiSecret)` pair
94
+ * is cached independently, so a multi-tenant host switching credentials
95
+ * cannot leak one tenant's token to another.
96
+ */
97
+ configureServiceAuth(apiKey: string, apiSecret: string): void;
98
+ /**
99
+ * A service token (short-lived, cached and refreshed per credential pair;
100
+ * concurrent callers share one mint).
101
+ *
102
+ * With no credential configured or passed, the token comes from the process's
103
+ * attested workload identity (ADR 0026); with neither, this throws.
104
+ *
105
+ * If the cache already holds a token for `apiKey` but `apiSecret` does not
106
+ * constant-time match the secret that produced it, this throws
107
+ * {@link ServiceCredentialMismatchError} rather than return the cached token.
108
+ */
109
+ serviceToken(apiKey?: string, apiSecret?: string): Promise<string>;
110
+ /**
111
+ * Forget cached service token(s) so the next `serviceToken()` mints anew —
112
+ * the way back from a 401 after a credential was revoked or rotated.
113
+ *
114
+ * `apiKey` clears that credential's entry; with none, the configured
115
+ * credential's; with neither, every entry. Synchronous.
116
+ */
117
+ invalidateServiceToken(apiKey?: string): void;
118
+ /**
119
+ * One request with this service's token. `actAs` sends `X-Oxy-User-Id`: the
120
+ * request is on behalf of that user (the API checks the delegation grant).
121
+ * Never cached unless `cache` says so. Rejects with `OxyApiError`.
122
+ */
123
+ serviceRequest<T>(method: HttpMethod, url: string, data?: unknown, options?: RequestOptions & {
124
+ actAs?: string;
125
+ }): Promise<T>;
126
+ /**
127
+ * Whether service app `appId` holds an active delegation grant to act for
128
+ * `userId`; the grant's scopes, or `null`. Used by `middleware.auth()` for
129
+ * `X-Oxy-User-Id`.
130
+ *
131
+ * Answers are cached per `appId:userId` (a grant for 5 minutes — the
132
+ * revocation window; a denial or failed lookup for 1 minute), bounded to the
133
+ * 1000 most recent pairs, and concurrent lookups of one pair share a single
134
+ * request.
135
+ */
136
+ verifyActingAs(appId: string, userId: string): Promise<ServiceActingAsVerification | null>;
137
+ /**
138
+ * Account events addressed to this application (Oxy account deletions every
139
+ * relying application must honour, OxyHQ/Mention#1169).
140
+ */
141
+ readonly accountEvents: {
142
+ /**
143
+ * Verify an account event token — a webhook body, or a feed entry's `token`
144
+ * — and return the event. Throws {@link OxyAccountEventError} unless it is
145
+ * an EdDSA `secevent+jwt` from Oxy's key set, issued by `oxy-auth`,
146
+ * addressed to this application, carrying exactly one known event. Be
147
+ * idempotent on `eventId`: Oxy delivers at least once.
148
+ */
149
+ verify: (token: string, options?: VerifyAccountEventOptions) => Promise<OxyAccountEvent>;
150
+ /**
151
+ * One page of account events for this application, oldest first — the pull
152
+ * feed behind the webhook. Verify each entry's `token` before acting on it.
153
+ */
154
+ list: (options?: {
155
+ after?: string;
156
+ limit?: number;
157
+ }) => Promise<OxyAccountEventFeedPage>;
158
+ };
159
+ /**
160
+ * The bearer for a request with no user session, under `serviceIdentity:
161
+ * 'when-anonymous'`: this process's service token, or `null` to send the
162
+ * request anonymous.
163
+ *
164
+ * `null`, never a throw, whenever there is no token to offer:
165
+ * - no key pair and no attestable workload (a local checkout);
166
+ * - the mint failed. The request still goes out, anonymous, and so does every
167
+ * request for the next {@link ANONYMOUS_SERVICE_TOKEN_RETRY_MS}, so an Oxy
168
+ * refusing attestation is asked once per window rather than once per read.
169
+ *
170
+ * The token comes from {@link serviceToken}: cached and single-flight, so
171
+ * concurrent reads share one mint.
172
+ */
173
+ private serviceTokenForAnonymousRequest;
174
+ private canMintServiceToken;
175
+ private mintServiceToken;
176
+ /** A token obtained by attestation, cached like a credential's (one identity per process). */
177
+ private workloadServiceToken;
178
+ private lookupActingAs;
179
+ private rememberActingAs;
180
+ private verifyAccountEvent;
181
+ /** The `appId` claim of this service's own token. */
182
+ private configuredServiceAppId;
183
+ }
@@ -1,6 +1,5 @@
1
1
  import type { NextFunction, Request, RequestHandler, Response } from 'express';
2
- import type { OxyServices } from '../OxyServices';
3
- import type { OxyAuthRefusal } from '../mixins/OxyServices.utility';
2
+ import type { AuthMiddlewareOptions, OxyAuthRefusal, OxyMiddleware } from './middleware';
4
3
  import { OXY_SERVICE_ENVIRONMENTS, type OxyServiceEnvironment } from '../utils/oxyServiceEnvironment';
5
4
  export { OXY_SERVICE_ENVIRONMENTS };
6
5
  export type { OxyServiceEnvironment, OxyAuthRefusal };
@@ -51,11 +50,11 @@ export interface OxyAuthenticatedRequest extends OxyAuthRequest {
51
50
  }
52
51
  export interface OxyAuthMiddlewareOptions {
53
52
  /**
54
- * Options forwarded to `oxy.auth()`.
53
+ * Options forwarded to `server.middleware.auth()`.
55
54
  * `optional` is forced to `true` by the composed helpers so route guards can
56
55
  * produce one consistent 401 shape.
57
56
  */
58
- auth?: Parameters<OxyServices['auth']>[0];
57
+ auth?: AuthMiddlewareOptions;
59
58
  }
60
59
  export declare function getOxyUserId(req: Request): string | null;
61
60
  export declare function isOxyAuthenticated(req: Request): req is OxyAuthenticatedRequest;
@@ -138,7 +137,7 @@ export declare function getRequiredOxyUserId(req: Request): string;
138
137
  * Why the credential on this request was refused, or `null` when none was
139
138
  * presented (or it was accepted).
140
139
  *
141
- * Set by `oxy.auth()` — including the `optional: true` mount the composed
140
+ * Set by `server.middleware.auth()` — including the `optional: true` mount the composed
142
141
  * helpers use, where a refusal otherwise leaves no trace: the request simply
143
142
  * arrives unauthenticated and the host answers its own generic 401. Hosts log
144
143
  * this beside their own 401; it is diagnostic and **must not be put into a
@@ -146,5 +145,9 @@ export declare function getRequiredOxyUserId(req: Request): string;
146
145
  */
147
146
  export declare function getOxyAuthRefusal(req: Request): OxyAuthRefusal | null;
148
147
  export declare function requireOxyAuth(req: Request, res: Response, next: NextFunction): void;
149
- export declare function createOptionalOxyAuth(oxy: OxyServices, options?: OxyAuthMiddlewareOptions): RequestHandler;
150
- export declare function createOxyAuthMiddleware(oxy: OxyServices, options?: OxyAuthMiddlewareOptions): RequestHandler;
148
+ /** What the composed helpers need of an `OxyServer`: its `middleware.auth`. */
149
+ export interface OxyAuthHost {
150
+ readonly middleware: Pick<OxyMiddleware, 'auth'>;
151
+ }
152
+ export declare function createOptionalOxyAuth(oxy: OxyAuthHost, options?: OxyAuthMiddlewareOptions): RequestHandler;
153
+ export declare function createOxyAuthMiddleware(oxy: OxyAuthHost, options?: OxyAuthMiddlewareOptions): RequestHandler;
@@ -6,15 +6,21 @@
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * import { createOxyRateLimit } from '@oxy.so/core/server';
10
- * import { oxyClient } from '@oxy.so/core';
9
+ * import { OxyServer, createOxyAuthMiddleware, createOxyRateLimit } from '@oxy.so/core/server';
11
10
  *
12
- * const oxy = oxyClient({ apiUrl: 'https://api.oxy.so' });
11
+ * const oxy = new OxyServer({ baseURL: 'https://api.oxy.so', serviceAuth: { apiKey, apiSecret } });
13
12
  *
14
13
  * app.use(createOxyRateLimit(oxy, { store: redisStore }));
14
+ * app.use('/api', createOxyAuthMiddleware(oxy));
15
15
  * ```
16
16
  */
17
+ export { OxyServer, ServiceCredentialMismatchError, ANONYMOUS_SERVICE_TOKEN_RETRY_MS } from './OxyServer';
18
+ export type { OxyServerConfig, ServiceTokenResponse } from './OxyServer';
19
+ export { ServerAgencyApi, ServerAssetsApi, ServerLinkedAccountsApi, ServerNotificationsApi, ServerReputationApi, } from './namespaces';
20
+ export { OxyAccountEventError, OXY_ACCOUNT_DELETED_EVENT_URI } from './middleware';
21
+ export type { AuthMiddlewareOptions, OxyAccountEvent, OxyAccountEventFeedItem, OxyAccountEventFeedPage, OxyMiddleware, ServiceActingAsVerification, ServiceApp, VerifyAccountEventOptions, } from './middleware';
17
22
  export { createOptionalOxyAuth, createOxyAuthMiddleware, getOxyAuthRefusal, getOxyBillingPrincipal, getOxyDelegatedUserId, getOxyRequestAttribution, getOxyUserId, getRequiredOxyBillingPrincipal, getRequiredOxyUserId, isOxyAuthenticated, requireOxyAuth, OXY_SERVICE_ENVIRONMENTS, } from './auth';
23
+ export type { OxyAuthHost } from './auth';
18
24
  export type { OxyAuthenticatedRequest, OxyAuthRefusal, OxyAuthMiddlewareOptions, OxyAuthRequest, OxyBillingPrincipal, OxyRequestAttribution, OxyRequestUser, OxyServiceActingAsContext, OxyServiceAppContext, OxyServiceEnvironment, } from './auth';
19
25
  export { createOxyRateLimit } from './rateLimit';
20
26
  export type { OxyRateLimitOptions } from './rateLimit';
@@ -34,7 +40,7 @@ export type { OxyInvalidationPublisher, OxyUserInvalidationHandlerOptions, } fro
34
40
  export { evictOxyIdentityCache, oxyUserByIdCacheKey, OXY_IDENTITY_CACHE_PREFIXES } from '../utils/identityCacheSweep';
35
41
  export type { OxyIdentityCacheEvictor } from '../utils/identityCacheSweep';
36
42
  export { registrableApex } from '../utils/registrableApex';
37
- export { isOfficialWebOrigin } from '../utils/officialOrigins';
43
+ export { isLoopbackOrigin, isOfficialWebOrigin, isAllowedDeviceJoinOrigin } from '../utils/officialOrigins';
38
44
  export { createEcosystemTraffic } from './traffic';
39
45
  export type { EcosystemTrafficOptions } from './traffic';
40
46
  export { observeNodeHttp, withoutNodeHttpObservation } from './trafficNodeHttp';
@@ -0,0 +1,291 @@
1
+ import type { ApiError, User } from '../models/interfaces';
2
+ import { type OxyServiceEnvironment } from '../utils/oxyServiceEnvironment';
3
+ /**
4
+ * Result from the service-acting-as verification endpoint.
5
+ * Confirms that a given service app holds an active delegation grant for
6
+ * the supplied user, along with the explicit scope list the grant covers.
7
+ *
8
+ * The API side stores this as an ordinary `app_grants` row — the SAME revocable
9
+ * record the OAuth consent screen writes and the "Connected apps" UI lists and
10
+ * deletes — whose `scopes` name `acting-as:offline`. There is deliberately no
11
+ * separate delegation table: a second store would be a second revocation
12
+ * surface, and a user who disconnects an application in "Connected apps" means
13
+ * it, so one revoke has to end everything.
14
+ *
15
+ * `scopes` is what THAT USER consented to, not what the application may do in
16
+ * general. `requireScope` intersects it with the token's own app-wide scopes for
17
+ * a delegated request, and the intersection is the effective authority.
18
+ *
19
+ * The SDK never inspects the grant directly — it round-trips through
20
+ * `GET /internal/service-acting-as/verify?appId=...&userId=...` so the
21
+ * authoritative store stays server-side.
22
+ */
23
+ export interface ServiceActingAsVerification {
24
+ authorized: boolean;
25
+ scopes: string[];
26
+ }
27
+ /** The SET `events` member Oxy uses for an account deletion. */
28
+ export declare const OXY_ACCOUNT_DELETED_EVENT_URI = "https://oxy.so/events/account.deleted";
29
+ /**
30
+ * A verified account event from Oxy (OxyHQ/Mention#1169): a person deleted
31
+ * their Oxy account and every relying application must erase what it holds
32
+ * for them. Returned by `verifyAccountEvent` only after the signature, `typ`,
33
+ * issuer and audience all check out.
34
+ */
35
+ export interface OxyAccountEvent {
36
+ /** The event id (`jti`). Stable across webhook retries and the pull feed: dedupe on it. */
37
+ eventId: string;
38
+ type: 'account.deleted';
39
+ /** The deleted Oxy account. */
40
+ userId: string;
41
+ /**
42
+ * The account's handle at deletion time, for relying parties that address
43
+ * the person by handle (an ActivityPub actor URI). `null` when the account had
44
+ * none, or when the token predates the field.
45
+ */
46
+ username: string | null;
47
+ /** ISO-8601 time the deletion committed. */
48
+ occurredAt: string;
49
+ /** `true` when Oxy archived the row to keep financial records. Erase either way. */
50
+ retained: boolean;
51
+ /** The application the event was addressed to (`aud`). */
52
+ applicationId: string;
53
+ /** Seconds since the epoch the token was issued at (`iat`). */
54
+ issuedAt: number;
55
+ }
56
+ /** One entry of the account-event pull feed (`GET /account-events`). */
57
+ export interface OxyAccountEventFeedItem {
58
+ eventId: string;
59
+ type: 'account.deleted';
60
+ userId: string;
61
+ username: string | null;
62
+ occurredAt: string;
63
+ retained: boolean;
64
+ /** The same signed token the webhook carries. Verify it with `verifyAccountEvent`. */
65
+ token: string;
66
+ }
67
+ export interface OxyAccountEventFeedPage {
68
+ events: OxyAccountEventFeedItem[];
69
+ /** Pass back as `after` to continue; unchanged when the page is empty. */
70
+ nextCursor: string | null;
71
+ }
72
+ export interface VerifyAccountEventOptions {
73
+ /**
74
+ * The application id the token must be addressed to. Defaults to the `appId`
75
+ * of this client's configured service credential.
76
+ */
77
+ audience?: string;
78
+ /** Defaults to `/.well-known/jwks.json` on this client's API origin. */
79
+ jwksUrl?: string;
80
+ }
81
+ /** Why an account event token was refused. `message` never contains the token. */
82
+ export declare class OxyAccountEventError extends Error {
83
+ constructor(message: string);
84
+ }
85
+ /**
86
+ * Service app metadata attached to requests authenticated with service tokens.
87
+ *
88
+ * Every field comes from the token's SIGNED payload and is populated only after
89
+ * the signature, `iss`/`aud`/`type` binding and expiry all pass — so a verifier
90
+ * holding this object can name the responsible principals without a lookup of
91
+ * its own. Together with `credentialId` and `ownerAccountId` it is the canonical
92
+ * attribution tuple of ADR 0007 minus the delegated user.
93
+ *
94
+ * `scopes` are the EFFECTIVE scopes: the credential's own scopes intersected
95
+ * with the owning application's grant at mint time (the API's `intersectScopes`
96
+ * is the single authority for that intersection — nothing re-intersects here).
97
+ * Route-level checks narrow further via `requireScope()`.
98
+ *
99
+ * A delegated end user is NOT a field of this type, and must never become one.
100
+ * It lives in `req.serviceActingAs` / `req.userId`, is authorised per request,
101
+ * and is attribution only.
102
+ */
103
+ export interface ServiceApp {
104
+ appId: string;
105
+ appName: string;
106
+ scopes: string[];
107
+ /**
108
+ * `internal` when the caller is one of Oxy's own applications: app to app it
109
+ * is trusted outright — {@link requireScope} passes and it may act for a user
110
+ * without a delegation grant. `external` keeps every scope and grant rule.
111
+ * What the USER may do (their accounts, plan, limits) is still for the
112
+ * receiving service to decide. A token without the claim reads as `external`.
113
+ */
114
+ tier: 'internal' | 'external';
115
+ /** The credentialId of the specific service credential that minted this token. */
116
+ credentialId: string;
117
+ /**
118
+ * The Oxy account that owns `appId` and is financially responsible for it.
119
+ * The BILLING principal — never a user id, and never the delegated
120
+ * `X-Oxy-User-Id` (ADR 0007).
121
+ */
122
+ ownerAccountId: string;
123
+ /** Test/live isolation (F2.0): which `ApplicationCredential.environment` minted this token. */
124
+ environment: OxyServiceEnvironment;
125
+ }
126
+ /**
127
+ * Why a request's credential was refused, recorded on the request itself.
128
+ *
129
+ * The middleware answers a fixed, deliberately uninformative body to the
130
+ * client; this is the other half of that trade. A refusal is ALWAYS observable
131
+ * to the HOST: it is logged at `warn` with a stable `code`, handed to
132
+ * `onRefusal`, and left on `req.oxyAuthRefusal` for the host's own logs.
133
+ *
134
+ * It exists because the opposite cost was measured: Oxy served
135
+ * `{"keys":[]}` from `/.well-known/jwks.json` with no Ed25519 signing key
136
+ * bound, every service token failed `Oxy service-token key set is unavailable`,
137
+ * and on the OPTIONAL path that failure fell straight through to `next()`.
138
+ * The host then answered its own generic 401 and logged nothing at all, so the
139
+ * one fact that named the fault — an empty key set — existed nowhere. Hours.
140
+ *
141
+ * **Nothing here is ever sent to a client, and `reason` never contains the
142
+ * token, a signature, a secret or a session id.** It carries the SDK's own
143
+ * failure message (`kid` unknown, audience mismatch, key set unavailable) plus
144
+ * the ids already considered safe to log elsewhere in this middleware.
145
+ */
146
+ export interface OxyAuthRefusal {
147
+ /** Stable, greppable code. Matches the `code` a non-optional refusal answers. */
148
+ code: string;
149
+ /** Which credential lane refused. */
150
+ stage: 'token' | 'service-token' | 'session';
151
+ /** Human-readable cause. Never a token, signature, secret or session id. */
152
+ reason: string;
153
+ /** The status a NON-optional mount would have answered with. */
154
+ status: number;
155
+ /**
156
+ * `true` when the middleware was mounted with `optional: true`, so this
157
+ * refusal did not produce a response — the request continued unauthenticated
158
+ * and whatever the host does next (typically its own generic 401) is the
159
+ * only thing the client sees.
160
+ */
161
+ optional: boolean;
162
+ }
163
+ /**
164
+ * Expected JWT issuer for tokens issued by the Oxy auth service.
165
+ */
166
+ export declare const OXY_JWT_ISSUER = "oxy-auth";
167
+ /**
168
+ * Options for `server.middleware.auth()`.
169
+ */
170
+ export interface AuthMiddlewareOptions {
171
+ /** Enable debug logging (default: false) */
172
+ debug?: boolean;
173
+ /** Custom error handler - receives error object, can return response */
174
+ onError?: (error: ApiError) => unknown;
175
+ /** Load full user profile from API (default: false for performance) */
176
+ loadUser?: boolean;
177
+ /** Optional auth - attach user if token present but don't block (default: false) */
178
+ optional?: boolean;
179
+ /**
180
+ * Called whenever a PRESENTED credential is refused, on the optional path as
181
+ * well as the blocking one. Runs before the response (if any) and after
182
+ * `req.oxyAuthRefusal` is set, so a host can raise its own alert or carry the
183
+ * code into its request log. Throwing from it is swallowed — an observer must
184
+ * not be able to turn a refusal into a 500.
185
+ *
186
+ * Refusal is about a credential that was offered and rejected: a request with
187
+ * NO `Authorization` header is not refused and does not reach this.
188
+ */
189
+ onRefusal?: (refusal: OxyAuthRefusal) => void;
190
+ /**
191
+ * Public JWKS endpoint used for Ed25519 service-token verification. Defaults
192
+ * to `/.well-known/jwks.json` on this Oxy client's configured API origin.
193
+ */
194
+ serviceTokenJwksUrl?: string;
195
+ /**
196
+ * Expected JWT issuer. Defaults to `'oxy-auth'`. Override only if you run
197
+ * a private fork of the Oxy auth server under a different `iss` claim.
198
+ */
199
+ expectedIssuer?: string;
200
+ /**
201
+ * Expected JWT audience. Defaults to `'oxy-api'`. Override only if your
202
+ * private fork mints tokens for a different audience.
203
+ */
204
+ expectedAudience?: string;
205
+ }
206
+ /**
207
+ * What the middleware needs from the server it is mounted on. `OxyServer`
208
+ * builds it; every member is resolved at call time, so a test can spy on the
209
+ * server's own methods.
210
+ */
211
+ export interface OxyMiddlewareHost {
212
+ readonly baseURL: string;
213
+ readonly jwksCache: ServiceTokenJwksCache;
214
+ validateSession(sessionId: string, options?: {
215
+ deviceFingerprint?: string;
216
+ useHeaderValidation?: boolean;
217
+ }): Promise<{
218
+ valid: boolean;
219
+ user?: User;
220
+ } | null>;
221
+ verifyActingAs(appId: string, userId: string): Promise<ServiceActingAsVerification | null>;
222
+ }
223
+ /** Build the middleware set for one server. See `OxyServer.middleware`. */
224
+ export declare function createOxyMiddleware(host: OxyMiddlewareHost): {
225
+ auth: (options?: AuthMiddlewareOptions) => (req: AuthReq, res: AuthRes, next: AuthNext) => Promise<unknown>;
226
+ socket: (options?: {
227
+ debug?: boolean;
228
+ }) => (socket: SocketLike, next: (err?: Error) => void) => Promise<void>;
229
+ service: (options?: {
230
+ debug?: boolean;
231
+ /** Observe refusals on the service lane; forwarded straight to `auth()`. */
232
+ onRefusal?: (refusal: OxyAuthRefusal) => void;
233
+ serviceTokenJwksUrl?: string;
234
+ expectedIssuer?: string;
235
+ expectedAudience?: string;
236
+ }) => (req: AuthReq, res: AuthRes, next: AuthNext) => Promise<void>;
237
+ requireScope: (scope: string) => (req: AuthReq, res: AuthRes, next: AuthNext) => void;
238
+ };
239
+ /** The middleware set `OxyServer.middleware` exposes. */
240
+ export type OxyMiddleware = ReturnType<typeof createOxyMiddleware>;
241
+ export interface ServiceTokenPublicJwk {
242
+ readonly kty: 'OKP';
243
+ readonly crv: 'Ed25519';
244
+ readonly x: string;
245
+ readonly use: 'sig';
246
+ readonly alg: 'EdDSA';
247
+ readonly kid: string;
248
+ }
249
+ export interface ServiceTokenJwksCache {
250
+ keys: Map<string, ServiceTokenPublicJwk>;
251
+ expiresAt: number;
252
+ lastAttemptAt: number;
253
+ pending?: Promise<void>;
254
+ }
255
+ export declare function parseJsonSegment(segment: string): Record<string, unknown>;
256
+ export declare function resolveServiceTokenPublicKey(kid: string, url: string, cache: ServiceTokenJwksCache): Promise<ServiceTokenPublicJwk>;
257
+ interface AuthReq {
258
+ method?: string;
259
+ path?: string;
260
+ headers: Record<string, string | string[] | undefined>;
261
+ query?: Record<string, unknown>;
262
+ userId?: string | null;
263
+ user?: User | null;
264
+ accessToken?: string;
265
+ sessionId?: string | null;
266
+ serviceApp?: ServiceApp;
267
+ serviceActingAs?: {
268
+ userId: string;
269
+ scopes: string[];
270
+ };
271
+ oxyAuthRefusal?: OxyAuthRefusal;
272
+ }
273
+ interface AuthRes {
274
+ status(code: number): AuthRes;
275
+ json(body: unknown): unknown;
276
+ }
277
+ type AuthNext = (err?: unknown) => void;
278
+ interface SocketLike {
279
+ handshake?: {
280
+ auth?: {
281
+ token?: string;
282
+ };
283
+ };
284
+ data?: Record<string, unknown>;
285
+ user?: {
286
+ id: string;
287
+ userId: string;
288
+ sessionId?: string | null;
289
+ };
290
+ }
291
+ export {};
@@ -0,0 +1,98 @@
1
+ /**
2
+ * The server-side halves of the namespaces: what exists only with a service
3
+ * credential. `OxyServer` returns these from its namespace getters, so
4
+ * `server.assets.metadataByIds(...)` sits beside every client method of
5
+ * `oxy.assets`.
6
+ */
7
+ import type { CreateOxyNotificationRequest, AwardReputationInput, ReputationTransaction, ServiceLinkedAccountListResponse } from '@oxy.so/contracts';
8
+ import type { Notification, ServiceAssetMetadata, ServiceAssetMetadataBySha, ServiceLinkedDownloadUrl } from '../models/interfaces';
9
+ import { AssetsApi } from '../api/assets';
10
+ import { NotificationsApi } from '../api/notifications';
11
+ import { LinkedAccountsApi } from '../api/linkedAccounts';
12
+ import { AgencyApi, type RequesterAssertionGrant, type RequesterAssertionIntrospection } from '../api/agency';
13
+ import { ReputationApi } from '../api/reputation';
14
+ export declare class ServerAssetsApi extends AssetsApi {
15
+ /**
16
+ * Resolve many asset ids to their content-addressed metadata (`sha256`,
17
+ * `mime`, `size`, `status`) via `POST /assets/service/by-ids`, one call per
18
+ * chunk of 100. Service token with `files:read`.
19
+ *
20
+ * The server omits unknown/deleted ids, so a short result is normal — map by
21
+ * `id`. FAILURE IS NOT ABSENCE: a failed chunk throws
22
+ * {@link ServiceAssetMetadataError} carrying the ids it could not resolve,
23
+ * unless `{ partial: true }` asks for best-effort. Never cached.
24
+ */
25
+ metadataByIds(ids: string[], options?: {
26
+ partial?: boolean;
27
+ }): Promise<ServiceAssetMetadata[]>;
28
+ /**
29
+ * Mint short-lived direct download URLs for files the calling application's
30
+ * own users attached to it (`POST /assets/service/linked-url`, scope
31
+ * `files:linked:read`). The ONLY way a service token reaches file bytes.
32
+ *
33
+ * A URL comes back only for a file whose OWN OWNER linked it to this
34
+ * application; every other id is omitted, and the route answers identically
35
+ * for "no such file" and "not yours". ABSENCE IS A REFUSAL, not a fact about
36
+ * the file: decide what to tell your user from your own entitlement record.
37
+ * A failed chunk throws {@link ServiceLinkedDownloadUrlError}; there is no
38
+ * partial mode. Never cached — each URL is a live credential.
39
+ */
40
+ linkedDownloadUrls(ids: string[]): Promise<ServiceLinkedDownloadUrl[]>;
41
+ /**
42
+ * Reverse content-address lookup: resolve `sha256` digests to the servable
43
+ * asset holding each (`POST /assets/service/by-sha256`, scope `files:read`),
44
+ * with a public `url` for active public assets. Malformed hashes are dropped
45
+ * client-side; the server omits unknown ones, so map by `sha256`. A failed
46
+ * chunk is logged and skipped. Never cached.
47
+ */
48
+ metadataBySha256(sha256s: string[]): Promise<ServiceAssetMetadataBySha[]>;
49
+ }
50
+ export declare class ServerNotificationsApi extends NotificationsApi {
51
+ /**
52
+ * Create a notification (`POST /notifications`; the application needs
53
+ * `notifications:write`). `type` is one of `OXY_NOTIFICATION_TYPES` from
54
+ * `@oxy.so/contracts` — `system` for a message from an Oxy service about the
55
+ * recipient's own account.
56
+ */
57
+ create(data: CreateOxyNotificationRequest): Promise<Notification>;
58
+ }
59
+ export declare class ServerLinkedAccountsApi extends LinkedAccountsApi {
60
+ /**
61
+ * A user's live linked accounts, each with the federated shadow user Oxy holds
62
+ * for it (`federatedUserId`). Needs the privileged `linked-accounts:read`.
63
+ */
64
+ forUser(userId: string): Promise<ServiceLinkedAccountListResponse>;
65
+ }
66
+ export declare class ServerAgencyApi extends AgencyApi {
67
+ /**
68
+ * Product backend → Oxy: trade the signed-in requester's access token for a
69
+ * one-use assertion naming `agentId` (ADR 0025), authenticated with this
70
+ * service's credential. `subjectToken` goes to Oxy only, in the body; never
71
+ * forward it anywhere else. Not retried: a refusal is an answer, and the
72
+ * caller mints per turn.
73
+ */
74
+ mintRequesterAssertion(input: {
75
+ agentId: string;
76
+ subjectToken: string;
77
+ }): Promise<RequesterAssertionGrant>;
78
+ /**
79
+ * Audience → Oxy: verify, live-revalidate and CONSUME a present-requester
80
+ * assertion (ADR 0025). A second call with the same assertion answers
81
+ * `active: false`. Authenticated with the audience's own service credential.
82
+ */
83
+ introspectRequesterAssertion(input: {
84
+ assertion: string;
85
+ presenter: {
86
+ applicationId: string;
87
+ credentialId: string;
88
+ };
89
+ }): Promise<RequesterAssertionIntrospection>;
90
+ }
91
+ export declare class ServerReputationApi extends ReputationApi {
92
+ /**
93
+ * Award (or penalise) reputation to a user by `actionType`. Service token with
94
+ * `reputation:write` only — people never award reputation, and nobody at Oxy
95
+ * moves it by hand. Invalidates cached reputation reads.
96
+ */
97
+ award(input: AwardReputationInput): Promise<ReputationTransaction>;
98
+ }