@authup/server-core 1.0.0-beta.63 → 1.0.0-beta.64

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 (710) hide show
  1. package/dist/adapters/database/data-source/options/module.d.ts +1 -0
  2. package/dist/adapters/database/data-source/options/module.d.ts.map +1 -1
  3. package/dist/adapters/database/data-source/options/module.mjs +33 -4
  4. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  5. package/dist/adapters/database/domains/client/entity.d.ts +1 -2
  6. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  7. package/dist/adapters/database/domains/client/entity.mjs +7 -14
  8. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  9. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.d.ts +2 -1
  10. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.d.ts.map +1 -1
  11. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs +2 -2
  12. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs.map +1 -1
  13. package/dist/adapters/database/domains/session/entity.d.ts +8 -0
  14. package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
  15. package/dist/adapters/database/domains/session/entity.mjs +19 -0
  16. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  17. package/dist/adapters/database/domains/user/entity.d.ts +1 -0
  18. package/dist/adapters/database/domains/user/entity.d.ts.map +1 -1
  19. package/dist/adapters/database/domains/user/entity.mjs +6 -0
  20. package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
  21. package/dist/adapters/database/extra-attribute-repository/repository.mjs +1 -1
  22. package/dist/adapters/database/extra-attribute-repository/repository.mjs.map +1 -1
  23. package/dist/adapters/database/extra-attribute-repository/tree/adapter.mjs +4 -2
  24. package/dist/adapters/database/extra-attribute-repository/tree/adapter.mjs.map +1 -1
  25. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs +1 -1
  26. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
  27. package/dist/adapters/database/index.mjs +3 -3
  28. package/dist/adapters/database/migrations/mysql/1787571998009-SessionUserAndClientColumns.d.ts +56 -0
  29. package/dist/adapters/database/migrations/mysql/1787571998009-SessionUserAndClientColumns.d.ts.map +1 -0
  30. package/dist/adapters/database/migrations/mysql/1787571998009-SessionUserAndClientColumns.mjs +105 -0
  31. package/dist/adapters/database/migrations/mysql/1787571998009-SessionUserAndClientColumns.mjs.map +1 -0
  32. package/dist/adapters/database/migrations/postgres/1787571998009-SessionUserAndClientColumns.d.ts +56 -0
  33. package/dist/adapters/database/migrations/postgres/1787571998009-SessionUserAndClientColumns.d.ts.map +1 -0
  34. package/dist/adapters/database/migrations/postgres/1787571998009-SessionUserAndClientColumns.mjs +104 -0
  35. package/dist/adapters/database/migrations/postgres/1787571998009-SessionUserAndClientColumns.mjs.map +1 -0
  36. package/dist/adapters/database/subscriber/module.d.ts +6 -2
  37. package/dist/adapters/database/subscriber/module.d.ts.map +1 -1
  38. package/dist/adapters/database/subscriber/module.mjs +9 -5
  39. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  40. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +1 -1
  41. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  42. package/dist/adapters/http/constants.d.ts +18 -0
  43. package/dist/adapters/http/constants.d.ts.map +1 -0
  44. package/dist/adapters/http/constants.mjs +23 -0
  45. package/dist/adapters/http/constants.mjs.map +1 -0
  46. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +3 -3
  47. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  48. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +6 -0
  49. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
  50. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  51. package/dist/adapters/http/controllers/entities/realm/module.mjs +2 -0
  52. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  53. package/dist/adapters/http/controllers/entities/session/module.d.ts +33 -1
  54. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
  55. package/dist/adapters/http/controllers/entities/session/module.mjs +74 -0
  56. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  57. package/dist/adapters/http/controllers/index.mjs +3 -1
  58. package/dist/adapters/http/controllers/workflows/account/index.d.ts +1 -0
  59. package/dist/adapters/http/controllers/workflows/account/index.d.ts.map +1 -1
  60. package/dist/adapters/http/controllers/workflows/account/module.d.ts +25 -16
  61. package/dist/adapters/http/controllers/workflows/account/module.d.ts.map +1 -1
  62. package/dist/adapters/http/controllers/workflows/account/module.mjs +40 -17
  63. package/dist/adapters/http/controllers/workflows/account/module.mjs.map +1 -1
  64. package/dist/adapters/http/controllers/workflows/account/types.d.ts +33 -0
  65. package/dist/adapters/http/controllers/workflows/account/types.d.ts.map +1 -0
  66. package/dist/adapters/http/controllers/workflows/activate/module.d.ts +8 -4
  67. package/dist/adapters/http/controllers/workflows/activate/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/workflows/activate/module.mjs +7 -9
  69. package/dist/adapters/http/controllers/workflows/activate/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/workflows/admin/index.d.ts.map +1 -0
  71. package/dist/adapters/http/controllers/workflows/admin/index.mjs +5 -0
  72. package/dist/adapters/http/controllers/workflows/admin/module.d.ts +30 -0
  73. package/dist/adapters/http/controllers/workflows/admin/module.d.ts.map +1 -0
  74. package/dist/adapters/http/controllers/workflows/admin/module.mjs +88 -0
  75. package/dist/adapters/http/controllers/workflows/admin/module.mjs.map +1 -0
  76. package/dist/adapters/http/controllers/workflows/admin/types.d.ts +14 -0
  77. package/dist/adapters/http/controllers/workflows/admin/types.d.ts.map +1 -0
  78. package/dist/adapters/http/controllers/workflows/auth-console.d.ts +16 -0
  79. package/dist/adapters/http/controllers/workflows/auth-console.d.ts.map +1 -0
  80. package/dist/adapters/http/controllers/workflows/auth-console.mjs +32 -0
  81. package/dist/adapters/http/controllers/workflows/auth-console.mjs.map +1 -0
  82. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts +16 -1
  83. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  84. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +40 -22
  85. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  86. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +5 -0
  87. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
  88. package/dist/adapters/http/controllers/workflows/console-login/index.d.ts +3 -0
  89. package/dist/adapters/http/controllers/workflows/console-login/index.d.ts.map +1 -0
  90. package/dist/adapters/http/controllers/workflows/console-login/index.mjs +5 -0
  91. package/dist/adapters/http/controllers/workflows/console-login/module.d.ts +83 -0
  92. package/dist/adapters/http/controllers/workflows/console-login/module.d.ts.map +1 -0
  93. package/dist/adapters/http/controllers/workflows/console-login/module.mjs +230 -0
  94. package/dist/adapters/http/controllers/workflows/console-login/module.mjs.map +1 -0
  95. package/dist/adapters/http/controllers/workflows/console-login/types.d.ts +58 -0
  96. package/dist/adapters/http/controllers/workflows/console-login/types.d.ts.map +1 -0
  97. package/dist/adapters/http/controllers/workflows/index.d.ts +2 -0
  98. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  99. package/dist/adapters/http/controllers/workflows/index.mjs +5 -1
  100. package/dist/adapters/http/controllers/workflows/logout/module.d.ts +32 -3
  101. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
  102. package/dist/adapters/http/controllers/workflows/logout/module.mjs +48 -24
  103. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  104. package/dist/adapters/http/controllers/workflows/logout/types.d.ts +1 -1
  105. package/dist/adapters/http/controllers/workflows/logout/types.d.ts.map +1 -1
  106. package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts +8 -4
  107. package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts.map +1 -1
  108. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +7 -9
  109. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs.map +1 -1
  110. package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts +8 -4
  111. package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts.map +1 -1
  112. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +7 -10
  113. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs.map +1 -1
  114. package/dist/adapters/http/controllers/workflows/register/module.d.ts +8 -4
  115. package/dist/adapters/http/controllers/workflows/register/module.d.ts.map +1 -1
  116. package/dist/adapters/http/controllers/workflows/register/module.mjs +7 -9
  117. package/dist/adapters/http/controllers/workflows/register/module.mjs.map +1 -1
  118. package/dist/adapters/http/controllers/workflows/status/module.mjs +1 -1
  119. package/dist/adapters/http/controllers/workflows/token/module.d.ts +45 -2
  120. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  121. package/dist/adapters/http/controllers/workflows/token/module.mjs +102 -24
  122. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  123. package/dist/adapters/http/cookie/index.d.ts +2 -0
  124. package/dist/adapters/http/cookie/index.d.ts.map +1 -0
  125. package/dist/adapters/http/cookie/index.mjs +5 -0
  126. package/dist/adapters/http/cookie/session.d.ts +35 -0
  127. package/dist/adapters/http/cookie/session.d.ts.map +1 -0
  128. package/dist/adapters/http/cookie/session.mjs +62 -0
  129. package/dist/adapters/http/cookie/session.mjs.map +1 -0
  130. package/dist/adapters/http/index.d.ts +2 -0
  131. package/dist/adapters/http/index.d.ts.map +1 -1
  132. package/dist/adapters/http/index.mjs +20 -16
  133. package/dist/adapters/http/internal-client/index.d.ts +3 -0
  134. package/dist/adapters/http/internal-client/index.d.ts.map +1 -0
  135. package/dist/adapters/http/internal-client/index.mjs +5 -0
  136. package/dist/adapters/http/internal-client/module.d.ts +21 -0
  137. package/dist/adapters/http/internal-client/module.d.ts.map +1 -0
  138. package/dist/adapters/http/{ui/auth-console/http-client.mjs → internal-client/module.mjs} +16 -15
  139. package/dist/adapters/http/internal-client/module.mjs.map +1 -0
  140. package/dist/adapters/http/internal-client/types.d.ts +13 -0
  141. package/dist/adapters/http/internal-client/types.d.ts.map +1 -0
  142. package/dist/adapters/http/middleware/built-in/authorization/index.d.ts +1 -0
  143. package/dist/adapters/http/middleware/built-in/authorization/index.d.ts.map +1 -1
  144. package/dist/adapters/http/middleware/built-in/authorization/index.mjs +2 -1
  145. package/dist/adapters/http/middleware/built-in/authorization/issuance.d.ts +45 -0
  146. package/dist/adapters/http/middleware/built-in/authorization/issuance.d.ts.map +1 -0
  147. package/dist/adapters/http/middleware/built-in/authorization/issuance.mjs +61 -0
  148. package/dist/adapters/http/middleware/built-in/authorization/issuance.mjs.map +1 -0
  149. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +26 -2
  150. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  151. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +67 -1
  152. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  153. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +21 -1
  154. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.map +1 -1
  155. package/dist/adapters/http/middleware/built-in/basic.d.ts +2 -2
  156. package/dist/adapters/http/middleware/built-in/basic.d.ts.map +1 -1
  157. package/dist/adapters/http/middleware/built-in/basic.mjs.map +1 -1
  158. package/dist/adapters/http/middleware/built-in/cors.d.ts +8 -2
  159. package/dist/adapters/http/middleware/built-in/cors.d.ts.map +1 -1
  160. package/dist/adapters/http/middleware/built-in/cors.mjs +20 -3
  161. package/dist/adapters/http/middleware/built-in/cors.mjs.map +1 -1
  162. package/dist/adapters/http/middleware/built-in/error.d.ts +2 -2
  163. package/dist/adapters/http/middleware/built-in/error.d.ts.map +1 -1
  164. package/dist/adapters/http/middleware/built-in/error.mjs.map +1 -1
  165. package/dist/adapters/http/middleware/built-in/index.d.ts +1 -4
  166. package/dist/adapters/http/middleware/built-in/index.d.ts.map +1 -1
  167. package/dist/adapters/http/middleware/built-in/index.mjs +3 -4
  168. package/dist/adapters/http/middleware/built-in/internal-http-client.d.ts +17 -0
  169. package/dist/adapters/http/middleware/built-in/internal-http-client.d.ts.map +1 -0
  170. package/dist/adapters/http/middleware/built-in/internal-http-client.mjs +27 -0
  171. package/dist/adapters/http/middleware/built-in/internal-http-client.mjs.map +1 -0
  172. package/dist/adapters/http/middleware/built-in/logger.mjs +1 -1
  173. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  174. package/dist/adapters/http/middleware/built-in/prometheus.d.ts +6 -5
  175. package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
  176. package/dist/adapters/http/middleware/built-in/prometheus.mjs +3 -2
  177. package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
  178. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts +2 -2
  179. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  180. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +15 -0
  181. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  182. package/dist/adapters/http/middleware/index.mjs +3 -4
  183. package/dist/adapters/http/request/constants.d.ts +1 -1
  184. package/dist/adapters/http/request/constants.d.ts.map +1 -1
  185. package/dist/adapters/http/request/constants.mjs +1 -5
  186. package/dist/adapters/http/request/constants.mjs.map +1 -1
  187. package/dist/adapters/http/request/helpers/index.d.ts +1 -1
  188. package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
  189. package/dist/adapters/http/request/helpers/index.mjs +2 -2
  190. package/dist/adapters/http/request/helpers/locale.d.ts +2 -1
  191. package/dist/adapters/http/request/helpers/locale.d.ts.map +1 -1
  192. package/dist/adapters/http/request/helpers/locale.mjs +1 -1
  193. package/dist/adapters/http/request/helpers/locale.mjs.map +1 -1
  194. package/dist/adapters/http/request/helpers/same-origin.d.ts +38 -0
  195. package/dist/adapters/http/request/helpers/same-origin.d.ts.map +1 -0
  196. package/dist/adapters/http/request/helpers/same-origin.mjs +68 -0
  197. package/dist/adapters/http/request/helpers/same-origin.mjs.map +1 -0
  198. package/dist/adapters/http/request/index.mjs +2 -2
  199. package/dist/adapters/http/request/permission/module.mjs +1 -1
  200. package/dist/adapters/http/request/permission/module.mjs.map +1 -1
  201. package/dist/adapters/http/request/types.d.ts +1 -2
  202. package/dist/adapters/http/request/types.d.ts.map +1 -1
  203. package/dist/adapters/shared/ldap/module.d.ts.map +1 -1
  204. package/dist/adapters/shared/ldap/module.mjs +4 -1
  205. package/dist/adapters/shared/ldap/module.mjs.map +1 -1
  206. package/dist/app/builder.d.ts +4 -4
  207. package/dist/app/builder.d.ts.map +1 -1
  208. package/dist/app/builder.mjs +7 -4
  209. package/dist/app/builder.mjs.map +1 -1
  210. package/dist/app/factory.d.ts +10 -0
  211. package/dist/app/factory.d.ts.map +1 -1
  212. package/dist/app/factory.mjs +26 -2
  213. package/dist/app/factory.mjs.map +1 -1
  214. package/dist/app/index.mjs +17 -19
  215. package/dist/app/modules/authentication/module.d.ts.map +1 -1
  216. package/dist/app/modules/authentication/module.mjs +15 -2
  217. package/dist/app/modules/authentication/module.mjs.map +1 -1
  218. package/dist/app/modules/authentication/repositories/session.d.ts +4 -1
  219. package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
  220. package/dist/app/modules/authentication/repositories/session.mjs +20 -3
  221. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  222. package/dist/app/modules/components/index.d.ts +1 -0
  223. package/dist/app/modules/components/index.d.ts.map +1 -1
  224. package/dist/app/modules/components/module.d.ts +3 -1
  225. package/dist/app/modules/components/module.d.ts.map +1 -1
  226. package/dist/app/modules/components/module.mjs +26 -7
  227. package/dist/app/modules/components/module.mjs.map +1 -1
  228. package/dist/app/modules/components/types.d.ts +11 -0
  229. package/dist/app/modules/components/types.d.ts.map +1 -0
  230. package/dist/app/modules/config/app-origins.d.ts +10 -0
  231. package/dist/app/modules/config/app-origins.d.ts.map +1 -0
  232. package/dist/app/modules/config/app-origins.mjs +21 -0
  233. package/dist/app/modules/config/app-origins.mjs.map +1 -0
  234. package/dist/app/modules/config/constants.d.ts +23 -50
  235. package/dist/app/modules/config/constants.d.ts.map +1 -1
  236. package/dist/app/modules/config/constants.mjs +34 -51
  237. package/dist/app/modules/config/constants.mjs.map +1 -1
  238. package/dist/app/modules/config/index.d.ts +2 -3
  239. package/dist/app/modules/config/index.d.ts.map +1 -1
  240. package/dist/app/modules/config/index.mjs +4 -8
  241. package/dist/app/modules/config/module.d.ts +2 -2
  242. package/dist/app/modules/config/module.d.ts.map +1 -1
  243. package/dist/app/modules/config/module.mjs +1 -1
  244. package/dist/app/modules/config/module.mjs.map +1 -1
  245. package/dist/app/modules/config/read.d.ts +29 -0
  246. package/dist/app/modules/config/read.d.ts.map +1 -0
  247. package/dist/app/modules/config/read.mjs +65 -0
  248. package/dist/app/modules/config/read.mjs.map +1 -0
  249. package/dist/app/modules/config/types.d.ts +30 -405
  250. package/dist/app/modules/config/types.d.ts.map +1 -1
  251. package/dist/app/modules/config/validator.d.ts.map +1 -1
  252. package/dist/app/modules/config/validator.mjs +3 -87
  253. package/dist/app/modules/config/validator.mjs.map +1 -1
  254. package/dist/app/modules/database/index.d.ts +1 -0
  255. package/dist/app/modules/database/index.d.ts.map +1 -1
  256. package/dist/app/modules/database/index.mjs +2 -1
  257. package/dist/app/modules/database/migration.d.ts +33 -0
  258. package/dist/app/modules/database/migration.d.ts.map +1 -0
  259. package/dist/app/modules/database/migration.mjs +52 -0
  260. package/dist/app/modules/database/migration.mjs.map +1 -0
  261. package/dist/app/modules/database/module.d.ts.map +1 -1
  262. package/dist/app/modules/database/module.mjs +12 -6
  263. package/dist/app/modules/database/module.mjs.map +1 -1
  264. package/dist/app/modules/database/repositories/client/repository.d.ts +6 -1
  265. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  266. package/dist/app/modules/database/repositories/client/repository.mjs +21 -4
  267. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  268. package/dist/app/modules/database/repositories/event/repository.d.ts +29 -2
  269. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  270. package/dist/app/modules/database/repositories/event/repository.mjs +42 -24
  271. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  272. package/dist/app/modules/database/repositories/helpers.d.ts +24 -1
  273. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  274. package/dist/app/modules/database/repositories/helpers.mjs +38 -1
  275. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  276. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +1 -1
  277. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs +4 -2
  278. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs.map +1 -1
  279. package/dist/app/modules/database/repositories/key/repository.mjs +1 -1
  280. package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
  281. package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
  282. package/dist/app/modules/database/repositories/role/repository.mjs +1 -1
  283. package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
  284. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +1 -1
  285. package/dist/app/modules/database/repositories/user/repository.d.ts +7 -2
  286. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  287. package/dist/app/modules/database/repositories/user/repository.mjs +21 -4
  288. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  289. package/dist/app/modules/http/constants.d.ts +3 -1
  290. package/dist/app/modules/http/constants.d.ts.map +1 -1
  291. package/dist/app/modules/http/constants.mjs +3 -2
  292. package/dist/app/modules/http/constants.mjs.map +1 -1
  293. package/dist/app/modules/http/module.d.ts +30 -9
  294. package/dist/app/modules/http/module.d.ts.map +1 -1
  295. package/dist/app/modules/http/module.mjs +31 -33
  296. package/dist/app/modules/http/module.mjs.map +1 -1
  297. package/dist/app/modules/http/modules/controller.d.ts +4 -3
  298. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  299. package/dist/app/modules/http/modules/controller.mjs +65 -36
  300. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  301. package/dist/app/modules/http/modules/middleware.d.ts +13 -22
  302. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  303. package/dist/app/modules/http/modules/middleware.mjs +20 -36
  304. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  305. package/dist/app/modules/identity/module.mjs +4 -4
  306. package/dist/app/modules/identity/repositories/client.mjs +4 -2
  307. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  308. package/dist/app/modules/identity/repositories/user.mjs +4 -2
  309. package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
  310. package/dist/app/modules/index.mjs +21 -23
  311. package/dist/app/modules/logger/module.mjs +1 -1
  312. package/dist/app/modules/logger/module.mjs.map +1 -1
  313. package/dist/app/modules/mail/module.d.ts.map +1 -1
  314. package/dist/app/modules/mail/module.mjs.map +1 -1
  315. package/dist/app/modules/oauth2/constants.d.ts +2 -1
  316. package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
  317. package/dist/app/modules/oauth2/constants.mjs +1 -0
  318. package/dist/app/modules/oauth2/constants.mjs.map +1 -1
  319. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  320. package/dist/app/modules/oauth2/module.mjs +9 -4
  321. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  322. package/dist/app/modules/oauth2/repositories/client/repository.mjs +4 -2
  323. package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
  324. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -1
  325. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +3 -2
  326. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  327. package/dist/app/modules/oauth2/repositories/console-login/index.d.ts +2 -0
  328. package/dist/app/modules/oauth2/repositories/console-login/index.d.ts.map +1 -0
  329. package/dist/app/modules/oauth2/repositories/console-login/index.mjs +5 -0
  330. package/dist/app/modules/oauth2/repositories/console-login/store.d.ts +19 -0
  331. package/dist/app/modules/oauth2/repositories/console-login/store.d.ts.map +1 -0
  332. package/dist/app/modules/oauth2/repositories/console-login/store.mjs +47 -0
  333. package/dist/app/modules/oauth2/repositories/console-login/store.mjs.map +1 -0
  334. package/dist/app/modules/oauth2/repositories/constants.d.ts +1 -0
  335. package/dist/app/modules/oauth2/repositories/constants.d.ts.map +1 -1
  336. package/dist/app/modules/oauth2/repositories/constants.mjs +1 -0
  337. package/dist/app/modules/oauth2/repositories/constants.mjs.map +1 -1
  338. package/dist/app/modules/oauth2/repositories/index.d.ts +1 -0
  339. package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
  340. package/dist/app/modules/oauth2/repositories/index.mjs +3 -1
  341. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +2 -2
  342. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -1
  343. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +5 -3
  344. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
  345. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  346. package/dist/app/modules/provisioning/module.mjs +5 -6
  347. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  348. package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
  349. package/dist/app/modules/provisioning/sources/composite/module.mjs +2 -1
  350. package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
  351. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  352. package/dist/app/modules/provisioning/sources/default/module.mjs +2 -1
  353. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  354. package/dist/app/modules/runtime/module.d.ts.map +1 -1
  355. package/dist/app/modules/runtime/module.mjs +2 -1
  356. package/dist/app/modules/runtime/module.mjs.map +1 -1
  357. package/dist/app/types.d.ts +16 -0
  358. package/dist/app/types.d.ts.map +1 -1
  359. package/dist/cli/commands/config.d.ts +40 -0
  360. package/dist/cli/commands/config.d.ts.map +1 -0
  361. package/dist/cli/commands/config.mjs +65 -0
  362. package/dist/cli/commands/config.mjs.map +1 -0
  363. package/dist/cli/commands/healthcheck.d.ts +3 -2
  364. package/dist/cli/commands/healthcheck.d.ts.map +1 -1
  365. package/dist/cli/commands/healthcheck.mjs +6 -3
  366. package/dist/cli/commands/healthcheck.mjs.map +1 -1
  367. package/dist/cli/commands/index.d.ts +3 -0
  368. package/dist/cli/commands/index.d.ts.map +1 -1
  369. package/dist/cli/commands/index.mjs +3 -1
  370. package/dist/cli/commands/migration.d.ts +3 -10
  371. package/dist/cli/commands/migration.d.ts.map +1 -1
  372. package/dist/cli/commands/migration.mjs +17 -9
  373. package/dist/cli/commands/migration.mjs.map +1 -1
  374. package/dist/cli/commands/shutdown.d.ts +16 -0
  375. package/dist/cli/commands/shutdown.d.ts.map +1 -0
  376. package/dist/cli/commands/shutdown.mjs +41 -0
  377. package/dist/cli/commands/shutdown.mjs.map +1 -0
  378. package/dist/cli/commands/start.d.ts +3 -2
  379. package/dist/cli/commands/start.d.ts.map +1 -1
  380. package/dist/cli/commands/start.mjs +3 -21
  381. package/dist/cli/commands/start.mjs.map +1 -1
  382. package/dist/cli/commands/types.d.ts.map +1 -0
  383. package/dist/cli/index.d.ts +8 -0
  384. package/dist/cli/index.d.ts.map +1 -1
  385. package/dist/cli/index.mjs.map +1 -1
  386. package/dist/cli/module.d.ts +0 -2
  387. package/dist/cli/module.d.ts.map +1 -1
  388. package/dist/cli/module.mjs +4 -3
  389. package/dist/cli/module.mjs.map +1 -1
  390. package/dist/components/oauth2-cleaner/module.d.ts +2 -2
  391. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  392. package/dist/components/oauth2-cleaner/module.mjs +10 -7
  393. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  394. package/dist/core/authentication/index.mjs +2 -1
  395. package/dist/core/authentication/session/constants.d.ts +10 -0
  396. package/dist/core/authentication/session/constants.d.ts.map +1 -0
  397. package/dist/core/authentication/session/constants.mjs +16 -0
  398. package/dist/core/authentication/session/constants.mjs.map +1 -0
  399. package/dist/core/authentication/session/index.d.ts +1 -0
  400. package/dist/core/authentication/session/index.d.ts.map +1 -1
  401. package/dist/core/authentication/session/index.mjs +2 -1
  402. package/dist/core/authentication/session/module.d.ts +2 -1
  403. package/dist/core/authentication/session/module.d.ts.map +1 -1
  404. package/dist/core/authentication/session/module.mjs +7 -1
  405. package/dist/core/authentication/session/module.mjs.map +1 -1
  406. package/dist/core/authentication/session/types.d.ts +70 -1
  407. package/dist/core/authentication/session/types.d.ts.map +1 -1
  408. package/dist/core/authentication/session/types.mjs.map +1 -1
  409. package/dist/core/entities/client/schema.d.ts.map +1 -1
  410. package/dist/core/entities/client/schema.mjs +1 -2
  411. package/dist/core/entities/client/schema.mjs.map +1 -1
  412. package/dist/core/entities/client/service.d.ts.map +1 -1
  413. package/dist/core/entities/client/service.mjs +15 -1
  414. package/dist/core/entities/client/service.mjs.map +1 -1
  415. package/dist/core/entities/client/system-clients.d.ts +0 -5
  416. package/dist/core/entities/client/system-clients.d.ts.map +1 -1
  417. package/dist/core/entities/client/system-clients.mjs +0 -6
  418. package/dist/core/entities/client/system-clients.mjs.map +1 -1
  419. package/dist/core/entities/client/types.d.ts +12 -0
  420. package/dist/core/entities/client/types.d.ts.map +1 -1
  421. package/dist/core/entities/client-permission/service.mjs +1 -1
  422. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  423. package/dist/core/entities/event/constants.d.ts +1 -6
  424. package/dist/core/entities/event/constants.d.ts.map +1 -1
  425. package/dist/core/entities/event/constants.mjs +1 -5
  426. package/dist/core/entities/event/constants.mjs.map +1 -1
  427. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
  428. package/dist/core/entities/event/entity-event-handler.mjs +3 -2
  429. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
  430. package/dist/core/entities/event/service.d.ts.map +1 -1
  431. package/dist/core/entities/event/service.mjs +3 -3
  432. package/dist/core/entities/event/service.mjs.map +1 -1
  433. package/dist/core/entities/event/types.d.ts +15 -1
  434. package/dist/core/entities/event/types.d.ts.map +1 -1
  435. package/dist/core/entities/permission/service.mjs +1 -2
  436. package/dist/core/entities/permission/service.mjs.map +1 -1
  437. package/dist/core/entities/role-permission/service.mjs +1 -1
  438. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  439. package/dist/core/entities/session/service.d.ts +13 -1
  440. package/dist/core/entities/session/service.d.ts.map +1 -1
  441. package/dist/core/entities/session/service.mjs +19 -16
  442. package/dist/core/entities/session/service.mjs.map +1 -1
  443. package/dist/core/entities/user/schema.d.ts.map +1 -1
  444. package/dist/core/entities/user/schema.mjs +1 -0
  445. package/dist/core/entities/user/schema.mjs.map +1 -1
  446. package/dist/core/entities/user/service.d.ts.map +1 -1
  447. package/dist/core/entities/user/service.mjs +21 -1
  448. package/dist/core/entities/user/service.mjs.map +1 -1
  449. package/dist/core/entities/user/types.d.ts +12 -0
  450. package/dist/core/entities/user/types.d.ts.map +1 -1
  451. package/dist/core/entities/user-permission/service.mjs +1 -1
  452. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  453. package/dist/core/identity/permission/junction-grant.mjs +1 -1
  454. package/dist/core/identity/permission/junction-grant.mjs.map +1 -1
  455. package/dist/core/identity/provider/account/module.mjs +1 -1
  456. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  457. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.mjs +1 -1
  458. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.mjs.map +1 -1
  459. package/dist/core/identity/registration/service.d.ts.map +1 -1
  460. package/dist/core/identity/registration/service.mjs +2 -1
  461. package/dist/core/identity/registration/service.mjs.map +1 -1
  462. package/dist/core/index.mjs +11 -3
  463. package/dist/core/oauth2/authorization/helpers.d.ts +14 -0
  464. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  465. package/dist/core/oauth2/authorization/helpers.mjs +9 -1
  466. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  467. package/dist/core/oauth2/authorization/index.mjs +2 -2
  468. package/dist/core/oauth2/authorization/module.mjs +1 -1
  469. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  470. package/dist/core/oauth2/backchannel-logout/constants.d.ts +16 -0
  471. package/dist/core/oauth2/backchannel-logout/constants.d.ts.map +1 -0
  472. package/dist/core/oauth2/backchannel-logout/constants.mjs +20 -0
  473. package/dist/core/oauth2/backchannel-logout/constants.mjs.map +1 -0
  474. package/dist/core/oauth2/backchannel-logout/index.d.ts +4 -0
  475. package/dist/core/oauth2/backchannel-logout/index.d.ts.map +1 -0
  476. package/dist/core/oauth2/backchannel-logout/index.mjs +6 -0
  477. package/dist/core/oauth2/backchannel-logout/module.d.ts +26 -0
  478. package/dist/core/oauth2/backchannel-logout/module.d.ts.map +1 -0
  479. package/dist/core/oauth2/backchannel-logout/module.mjs +78 -0
  480. package/dist/core/oauth2/backchannel-logout/module.mjs.map +1 -0
  481. package/dist/core/oauth2/backchannel-logout/types.d.ts +29 -0
  482. package/dist/core/oauth2/backchannel-logout/types.d.ts.map +1 -0
  483. package/dist/core/oauth2/console-login/constants.d.ts +19 -0
  484. package/dist/core/oauth2/console-login/constants.d.ts.map +1 -0
  485. package/dist/core/oauth2/console-login/constants.mjs +24 -0
  486. package/dist/core/oauth2/console-login/constants.mjs.map +1 -0
  487. package/dist/core/oauth2/console-login/index.d.ts +3 -0
  488. package/dist/core/oauth2/console-login/index.d.ts.map +1 -0
  489. package/dist/core/oauth2/console-login/index.mjs +5 -0
  490. package/dist/core/oauth2/console-login/types.d.ts +53 -0
  491. package/dist/core/oauth2/console-login/types.d.ts.map +1 -0
  492. package/dist/core/oauth2/end-session/service.mjs +1 -1
  493. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  494. package/dist/core/oauth2/federated-login/module.mjs +3 -3
  495. package/dist/core/oauth2/federated-login/module.mjs.map +1 -1
  496. package/dist/core/oauth2/index.d.ts +4 -0
  497. package/dist/core/oauth2/index.d.ts.map +1 -1
  498. package/dist/core/oauth2/index.mjs +13 -3
  499. package/dist/core/oauth2/introspection/index.d.ts +3 -0
  500. package/dist/core/oauth2/introspection/index.d.ts.map +1 -0
  501. package/dist/core/oauth2/introspection/index.mjs +5 -0
  502. package/dist/core/oauth2/introspection/module.d.ts +14 -0
  503. package/dist/core/oauth2/introspection/module.d.ts.map +1 -0
  504. package/dist/core/oauth2/introspection/module.mjs +49 -0
  505. package/dist/core/oauth2/introspection/module.mjs.map +1 -0
  506. package/dist/core/oauth2/introspection/types.d.ts +45 -0
  507. package/dist/core/oauth2/introspection/types.d.ts.map +1 -0
  508. package/dist/core/oauth2/introspection/types.mjs +4 -0
  509. package/dist/core/oauth2/openid/claims.d.ts +20 -2
  510. package/dist/core/oauth2/openid/claims.d.ts.map +1 -1
  511. package/dist/core/oauth2/openid/claims.mjs +18 -4
  512. package/dist/core/oauth2/openid/claims.mjs.map +1 -1
  513. package/dist/core/oauth2/session-credential/constants.d.ts +30 -0
  514. package/dist/core/oauth2/session-credential/constants.d.ts.map +1 -0
  515. package/dist/core/oauth2/session-credential/constants.mjs +34 -0
  516. package/dist/core/oauth2/session-credential/constants.mjs.map +1 -0
  517. package/dist/core/oauth2/session-credential/index.d.ts +3 -0
  518. package/dist/core/oauth2/session-credential/index.d.ts.map +1 -0
  519. package/dist/core/oauth2/session-credential/index.mjs +6 -0
  520. package/dist/core/oauth2/session-credential/module.d.ts +31 -0
  521. package/dist/core/oauth2/session-credential/module.d.ts.map +1 -0
  522. package/dist/core/oauth2/session-credential/module.mjs +43 -0
  523. package/dist/core/oauth2/session-credential/module.mjs.map +1 -0
  524. package/dist/core/oauth2/session-token/constants.d.ts +10 -0
  525. package/dist/core/oauth2/session-token/constants.d.ts.map +1 -0
  526. package/dist/core/oauth2/session-token/constants.mjs +16 -0
  527. package/dist/core/oauth2/session-token/constants.mjs.map +1 -0
  528. package/dist/core/oauth2/session-token/index.d.ts +1 -0
  529. package/dist/core/oauth2/session-token/index.d.ts.map +1 -1
  530. package/dist/core/oauth2/session-token/index.mjs +2 -1
  531. package/dist/core/oauth2/session-token/types.d.ts +13 -2
  532. package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
  533. package/dist/core/provisioning/merge/module.mjs +5 -3
  534. package/dist/core/provisioning/merge/module.mjs.map +1 -1
  535. package/dist/core/query/module.mjs +1 -1
  536. package/dist/core/query/module.mjs.map +1 -1
  537. package/dist/core/security/policy/evaluator.mjs +1 -1
  538. package/dist/core/security/policy/evaluator.mjs.map +1 -1
  539. package/dist/index.mjs +62 -59
  540. package/dist/path.mjs +1 -1
  541. package/dist/swagger.json +466 -104
  542. package/dist/utils/error.d.ts +6 -0
  543. package/dist/utils/error.d.ts.map +1 -1
  544. package/dist/utils/error.mjs +6 -2
  545. package/dist/utils/error.mjs.map +1 -1
  546. package/dist/utils/index.mjs +2 -2
  547. package/package.json +31 -25
  548. package/dist/adapters/http/middleware/built-in/assets.d.ts +0 -11
  549. package/dist/adapters/http/middleware/built-in/assets.d.ts.map +0 -1
  550. package/dist/adapters/http/middleware/built-in/assets.mjs +0 -91
  551. package/dist/adapters/http/middleware/built-in/assets.mjs.map +0 -1
  552. package/dist/adapters/http/middleware/built-in/theme.d.ts +0 -15
  553. package/dist/adapters/http/middleware/built-in/theme.d.ts.map +0 -1
  554. package/dist/adapters/http/middleware/built-in/theme.mjs +0 -27
  555. package/dist/adapters/http/middleware/built-in/theme.mjs.map +0 -1
  556. package/dist/adapters/http/middleware/built-in/types.d.ts +0 -14
  557. package/dist/adapters/http/middleware/built-in/types.d.ts.map +0 -1
  558. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +0 -15
  559. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts.map +0 -1
  560. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +0 -25
  561. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +0 -1
  562. package/dist/adapters/http/request/helpers/redirect.d.ts +0 -14
  563. package/dist/adapters/http/request/helpers/redirect.d.ts.map +0 -1
  564. package/dist/adapters/http/request/helpers/redirect.mjs +0 -36
  565. package/dist/adapters/http/request/helpers/redirect.mjs.map +0 -1
  566. package/dist/adapters/http/ui/account-console/index.d.ts +0 -4
  567. package/dist/adapters/http/ui/account-console/index.d.ts.map +0 -1
  568. package/dist/adapters/http/ui/account-console/index.mjs +0 -6
  569. package/dist/adapters/http/ui/account-console/module.d.ts +0 -28
  570. package/dist/adapters/http/ui/account-console/module.d.ts.map +0 -1
  571. package/dist/adapters/http/ui/account-console/module.mjs +0 -80
  572. package/dist/adapters/http/ui/account-console/module.mjs.map +0 -1
  573. package/dist/adapters/http/ui/account-console/ref.d.ts +0 -30
  574. package/dist/adapters/http/ui/account-console/ref.d.ts.map +0 -1
  575. package/dist/adapters/http/ui/account-console/ref.mjs +0 -50
  576. package/dist/adapters/http/ui/account-console/ref.mjs.map +0 -1
  577. package/dist/adapters/http/ui/account-console/types.d.ts +0 -11
  578. package/dist/adapters/http/ui/account-console/types.d.ts.map +0 -1
  579. package/dist/adapters/http/ui/auth-console/http-client.d.ts +0 -22
  580. package/dist/adapters/http/ui/auth-console/http-client.d.ts.map +0 -1
  581. package/dist/adapters/http/ui/auth-console/http-client.mjs.map +0 -1
  582. package/dist/adapters/http/ui/auth-console/index.d.ts +0 -6
  583. package/dist/adapters/http/ui/auth-console/index.d.ts.map +0 -1
  584. package/dist/adapters/http/ui/auth-console/index.mjs +0 -8
  585. package/dist/adapters/http/ui/auth-console/module.d.ts +0 -4
  586. package/dist/adapters/http/ui/auth-console/module.d.ts.map +0 -1
  587. package/dist/adapters/http/ui/auth-console/module.mjs +0 -73
  588. package/dist/adapters/http/ui/auth-console/module.mjs.map +0 -1
  589. package/dist/adapters/http/ui/auth-console/resolve.d.ts +0 -21
  590. package/dist/adapters/http/ui/auth-console/resolve.d.ts.map +0 -1
  591. package/dist/adapters/http/ui/auth-console/resolve.mjs +0 -53
  592. package/dist/adapters/http/ui/auth-console/resolve.mjs.map +0 -1
  593. package/dist/adapters/http/ui/auth-console/serve.d.ts +0 -9
  594. package/dist/adapters/http/ui/auth-console/serve.d.ts.map +0 -1
  595. package/dist/adapters/http/ui/auth-console/serve.mjs +0 -35
  596. package/dist/adapters/http/ui/auth-console/serve.mjs.map +0 -1
  597. package/dist/adapters/http/ui/auth-console/types.d.ts +0 -26
  598. package/dist/adapters/http/ui/auth-console/types.d.ts.map +0 -1
  599. package/dist/adapters/http/ui/console-packages/index.d.ts.map +0 -1
  600. package/dist/adapters/http/ui/console-packages/index.mjs +0 -5
  601. package/dist/adapters/http/ui/console-packages/module.d.ts +0 -33
  602. package/dist/adapters/http/ui/console-packages/module.d.ts.map +0 -1
  603. package/dist/adapters/http/ui/console-packages/module.mjs +0 -70
  604. package/dist/adapters/http/ui/console-packages/module.mjs.map +0 -1
  605. package/dist/adapters/http/ui/console-packages/types.d.ts +0 -12
  606. package/dist/adapters/http/ui/console-packages/types.d.ts.map +0 -1
  607. package/dist/adapters/http/ui/index.d.ts +0 -6
  608. package/dist/adapters/http/ui/index.d.ts.map +0 -1
  609. package/dist/adapters/http/ui/index.mjs +0 -25
  610. package/dist/adapters/http/ui/shared/html.d.ts +0 -76
  611. package/dist/adapters/http/ui/shared/html.d.ts.map +0 -1
  612. package/dist/adapters/http/ui/shared/html.mjs +0 -104
  613. package/dist/adapters/http/ui/shared/html.mjs.map +0 -1
  614. package/dist/adapters/http/ui/shared/index.d.ts +0 -2
  615. package/dist/adapters/http/ui/shared/index.d.ts.map +0 -1
  616. package/dist/adapters/http/ui/shared/index.mjs +0 -5
  617. package/dist/adapters/http/ui/theme/apply.d.ts +0 -12
  618. package/dist/adapters/http/ui/theme/apply.d.ts.map +0 -1
  619. package/dist/adapters/http/ui/theme/apply.mjs +0 -29
  620. package/dist/adapters/http/ui/theme/apply.mjs.map +0 -1
  621. package/dist/adapters/http/ui/theme/assets.d.ts +0 -20
  622. package/dist/adapters/http/ui/theme/assets.d.ts.map +0 -1
  623. package/dist/adapters/http/ui/theme/assets.mjs +0 -86
  624. package/dist/adapters/http/ui/theme/assets.mjs.map +0 -1
  625. package/dist/adapters/http/ui/theme/constants.d.ts +0 -16
  626. package/dist/adapters/http/ui/theme/constants.d.ts.map +0 -1
  627. package/dist/adapters/http/ui/theme/constants.mjs +0 -20
  628. package/dist/adapters/http/ui/theme/constants.mjs.map +0 -1
  629. package/dist/adapters/http/ui/theme/contract/constants.d.ts +0 -120
  630. package/dist/adapters/http/ui/theme/contract/constants.d.ts.map +0 -1
  631. package/dist/adapters/http/ui/theme/contract/constants.mjs +0 -136
  632. package/dist/adapters/http/ui/theme/contract/constants.mjs.map +0 -1
  633. package/dist/adapters/http/ui/theme/contract/head.d.ts +0 -12
  634. package/dist/adapters/http/ui/theme/contract/head.d.ts.map +0 -1
  635. package/dist/adapters/http/ui/theme/contract/head.mjs +0 -61
  636. package/dist/adapters/http/ui/theme/contract/head.mjs.map +0 -1
  637. package/dist/adapters/http/ui/theme/contract/index.d.ts +0 -6
  638. package/dist/adapters/http/ui/theme/contract/index.d.ts.map +0 -1
  639. package/dist/adapters/http/ui/theme/contract/index.mjs +0 -8
  640. package/dist/adapters/http/ui/theme/contract/manifest.d.ts +0 -25
  641. package/dist/adapters/http/ui/theme/contract/manifest.d.ts.map +0 -1
  642. package/dist/adapters/http/ui/theme/contract/manifest.mjs +0 -77
  643. package/dist/adapters/http/ui/theme/contract/manifest.mjs.map +0 -1
  644. package/dist/adapters/http/ui/theme/contract/types.d.ts +0 -26
  645. package/dist/adapters/http/ui/theme/contract/types.d.ts.map +0 -1
  646. package/dist/adapters/http/ui/theme/contract/utils.d.ts +0 -11
  647. package/dist/adapters/http/ui/theme/contract/utils.d.ts.map +0 -1
  648. package/dist/adapters/http/ui/theme/contract/utils.mjs +0 -22
  649. package/dist/adapters/http/ui/theme/contract/utils.mjs.map +0 -1
  650. package/dist/adapters/http/ui/theme/index.d.ts +0 -7
  651. package/dist/adapters/http/ui/theme/index.d.ts.map +0 -1
  652. package/dist/adapters/http/ui/theme/index.mjs +0 -13
  653. package/dist/adapters/http/ui/theme/module.d.ts +0 -79
  654. package/dist/adapters/http/ui/theme/module.d.ts.map +0 -1
  655. package/dist/adapters/http/ui/theme/module.mjs +0 -206
  656. package/dist/adapters/http/ui/theme/module.mjs.map +0 -1
  657. package/dist/adapters/http/ui/theme/types.d.ts +0 -42
  658. package/dist/adapters/http/ui/theme/types.d.ts.map +0 -1
  659. package/dist/app/modules/config/helpers.d.ts +0 -9
  660. package/dist/app/modules/config/helpers.d.ts.map +0 -1
  661. package/dist/app/modules/config/helpers.mjs +0 -22
  662. package/dist/app/modules/config/helpers.mjs.map +0 -1
  663. package/dist/app/modules/config/normalize.d.ts +0 -3
  664. package/dist/app/modules/config/normalize.d.ts.map +0 -1
  665. package/dist/app/modules/config/normalize.mjs +0 -117
  666. package/dist/app/modules/config/normalize.mjs.map +0 -1
  667. package/dist/app/modules/config/origins.d.ts +0 -25
  668. package/dist/app/modules/config/origins.d.ts.map +0 -1
  669. package/dist/app/modules/config/origins.mjs +0 -46
  670. package/dist/app/modules/config/origins.mjs.map +0 -1
  671. package/dist/app/modules/config/read/env.d.ts +0 -3
  672. package/dist/app/modules/config/read/env.d.ts.map +0 -1
  673. package/dist/app/modules/config/read/env.mjs +0 -139
  674. package/dist/app/modules/config/read/env.mjs.map +0 -1
  675. package/dist/app/modules/config/read/fs.d.ts +0 -3
  676. package/dist/app/modules/config/read/fs.d.ts.map +0 -1
  677. package/dist/app/modules/config/read/fs.mjs +0 -60
  678. package/dist/app/modules/config/read/fs.mjs.map +0 -1
  679. package/dist/app/modules/config/read/index.d.ts +0 -5
  680. package/dist/app/modules/config/read/index.d.ts.map +0 -1
  681. package/dist/app/modules/config/read/index.mjs +0 -7
  682. package/dist/app/modules/config/read/module.d.ts +0 -4
  683. package/dist/app/modules/config/read/module.d.ts.map +0 -1
  684. package/dist/app/modules/config/read/module.mjs +0 -29
  685. package/dist/app/modules/config/read/module.mjs.map +0 -1
  686. package/dist/app/modules/config/read/types.d.ts +0 -9
  687. package/dist/app/modules/config/read/types.d.ts.map +0 -1
  688. package/dist/app/modules/config/trust-proxy.d.ts +0 -28
  689. package/dist/app/modules/config/trust-proxy.d.ts.map +0 -1
  690. package/dist/app/modules/config/trust-proxy.mjs +0 -64
  691. package/dist/app/modules/config/trust-proxy.mjs.map +0 -1
  692. package/dist/cli/config.d.ts +0 -18
  693. package/dist/cli/config.d.ts.map +0 -1
  694. package/dist/cli/config.mjs +0 -34
  695. package/dist/cli/config.mjs.map +0 -1
  696. package/dist/cli/types.d.ts.map +0 -1
  697. package/dist/utils/host.d.ts +0 -2
  698. package/dist/utils/host.d.ts.map +0 -1
  699. package/dist/utils/host.mjs +0 -12
  700. package/dist/utils/host.mjs.map +0 -1
  701. /package/dist/adapters/http/{middleware/built-in → controllers/workflows/account}/types.mjs +0 -0
  702. /package/dist/adapters/http/{ui/console-packages → controllers/workflows/admin}/index.d.ts +0 -0
  703. /package/dist/adapters/http/{ui/account-console → controllers/workflows/admin}/types.mjs +0 -0
  704. /package/dist/adapters/http/{ui/auth-console → controllers/workflows/console-login}/types.mjs +0 -0
  705. /package/dist/adapters/http/{ui/console-packages → internal-client}/types.mjs +0 -0
  706. /package/dist/{adapters/http/ui/theme/contract → app/modules/components}/types.mjs +0 -0
  707. /package/dist/cli/{types.d.ts → commands/types.d.ts} +0 -0
  708. /package/dist/{adapters/http/ui/theme → cli/commands}/types.mjs +0 -0
  709. /package/dist/{app/modules/config/read → core/oauth2/backchannel-logout}/types.mjs +0 -0
  710. /package/dist/{cli → core/oauth2/console-login}/types.mjs +0 -0
@@ -4,22 +4,29 @@ import.meta.url;
4
4
  import { ClientAuthenticator } from "../../../../../core/authentication/entities/client/module.mjs";
5
5
  import { UserAuthenticator } from "../../../../../core/authentication/entities/user/module.mjs";
6
6
  import { assertClientCertificateEvidenceValidForBinding } from "../../../../../core/client-certificate/module.mjs";
7
+ import { SYSTEM_CLIENT_SCOPE_NAMES } from "../../../../../core/entities/client/system-clients.mjs";
7
8
  import { PolicyEngine as PolicyEngine$1 } from "../../../../../core/security/policy/engine.mjs";
9
+ import { SESSION_COOKIE } from "../../../../../core/oauth2/session-credential/constants.mjs";
8
10
  import "../../../../../core/index.mjs";
9
11
  import { extractClientCertificateEvidence } from "../../../request/client-certificate.mjs";
10
12
  import { setRequestPermissionEvaluator } from "../../../request/permission/helper.mjs";
11
13
  import { RequestIdentity, setRequestIdentity } from "../../../request/helpers/identity.mjs";
12
14
  import { setRequestMfaLoginTicket } from "../../../request/helpers/mfa-login-ticket.mjs";
15
+ import { isSameOriginRequest } from "../../../request/helpers/same-origin.mjs";
13
16
  import { setRequestScopes } from "../../../request/helpers/scopes.mjs";
14
17
  import { setRequestSessionId } from "../../../request/helpers/session-id.mjs";
15
18
  import { setRequestToken } from "../../../request/helpers/token.mjs";
16
19
  import { RequestPermissionEvaluator } from "../../../request/permission/module.mjs";
17
20
  import "../../../request/index.mjs";
21
+ import { isOAuth2IssuancePath } from "./issuance.mjs";
22
+ import { setSessionCookie } from "../../../cookie/session.mjs";
23
+ import "../../../cookie/index.mjs";
18
24
  import { IdentityType, ScopeName } from "@authup/core-kit";
19
25
  import { PermissionEvaluator } from "@authup/access";
20
26
  import { AuthHeaderError } from "@authup/errors";
21
27
  import { JWTError, OAuth2SubKind, OAuth2TokenKind, deserializeOAuth2Scope } from "@authup/specs";
22
28
  import { AuthorizationHeaderType, parseAuthorizationHeader } from "hapic";
29
+ import { useRequestCookie } from "@routup/basic/cookie";
23
30
  //#region src/adapters/http/middleware/built-in/authorization/module.ts
24
31
  const runSymbol = Symbol("RAuthorizationMiddlewareRun");
25
32
  var AuthorizationMiddleware = class {
@@ -28,12 +35,16 @@ var AuthorizationMiddleware = class {
28
35
  permissionEvaluator;
29
36
  identityResolver;
30
37
  sessionManager;
38
+ sessionRepository;
39
+ logger;
31
40
  clientAuthenticator;
32
41
  userAuthenticator;
33
42
  constructor(ctx) {
34
43
  this.options = ctx.options || {};
35
44
  this.identityResolver = ctx.identityResolver;
36
45
  this.sessionManager = ctx.sessionManager;
46
+ this.sessionRepository = ctx.sessionRepository;
47
+ this.logger = ctx.logger;
37
48
  this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);
38
49
  this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);
39
50
  this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;
@@ -55,7 +66,10 @@ var AuthorizationMiddleware = class {
55
66
  const requestAccessContext = new RequestPermissionEvaluator(event, this.permissionEvaluator);
56
67
  setRequestPermissionEvaluator(event, requestAccessContext);
57
68
  const headerValue = event.headers.get("authorization");
58
- if (!headerValue) return;
69
+ if (!headerValue) {
70
+ await this.runCookieSession(event);
71
+ return;
72
+ }
59
73
  const header = parseAuthorizationHeader(headerValue);
60
74
  if (header.type === AuthorizationHeaderType.BEARER) {
61
75
  await this.verifyBearerAuthorizationHeader(event, header);
@@ -68,6 +82,58 @@ var AuthorizationMiddleware = class {
68
82
  throw AuthHeaderError.unsupportedType(header.type);
69
83
  }
70
84
  /**
85
+ * The console session cookie (plan 088): an opaque credential naming an
86
+ * `auth_sessions` row, presented instead of a bearer token by a console
87
+ * served from the API's own origin.
88
+ *
89
+ * It NEVER throws and never rejects a request. Anything missing, stale or
90
+ * refused simply leaves the request anonymous, which the route's own
91
+ * `ForceLoggedIn` guard then answers — the same outcome as sending no
92
+ * credential at all. A cookie is ambient, so a request that merely carries
93
+ * a bad one is not necessarily a request that meant to use it.
94
+ */ async runCookieSession(event) {
95
+ try {
96
+ const { baseURL } = this.options;
97
+ if (!baseURL) return;
98
+ const secret = useRequestCookie(event, SESSION_COOKIE);
99
+ if (typeof secret !== "string" || secret.length === 0) return;
100
+ if (isOAuth2IssuancePath(event.path)) return;
101
+ if (!isSameOriginRequest(event, baseURL, { logger: this.logger })) return;
102
+ const session = await this.sessionRepository.findOneBySecret(secret);
103
+ if (!session) return;
104
+ if (session.subKind !== IdentityType.USER) return;
105
+ try {
106
+ await this.sessionManager.verify(session);
107
+ } catch {
108
+ return;
109
+ }
110
+ const identity = await this.identityResolver.resolve(IdentityType.USER, session.sub);
111
+ if (!identity) return;
112
+ setRequestIdentity(event, identity);
113
+ setRequestSessionId(event, session.id);
114
+ setRequestScopes(event, [...SYSTEM_CLIENT_SCOPE_NAMES]);
115
+ await this.refreshCookieSession(event, session, secret);
116
+ } catch {}
117
+ }
118
+ /**
119
+ * Slide the session's expiry, throttled.
120
+ *
121
+ * Cookie mode has no refresh grant, so without this an active console user
122
+ * would be signed out once the session reached its lifetime, mid-task
123
+ * (plan 088: a credential change must not become a session-policy change
124
+ * by omission).
125
+ */ async refreshCookieSession(event, session, secret) {
126
+ const refreshedAt = session.refreshedAt || session.createdAt;
127
+ if (refreshedAt) {
128
+ if (new Date(refreshedAt).getTime() + 6e4 > Date.now()) return;
129
+ }
130
+ const current = await this.sessionManager.findOneById(session.id);
131
+ if (!current) return;
132
+ const refreshed = await this.sessionManager.refresh(current);
133
+ const ttl = new Date(refreshed.expiresAt).getTime() - Date.now();
134
+ if (ttl > 0 && this.options.baseURL) setSessionCookie(event, this.options.baseURL, secret, ttl);
135
+ }
136
+ /**
71
137
  * @throws JWTError
72
138
  */ async verifyBearerAuthorizationHeader(event, header) {
73
139
  const payload = await this.oauth2TokenVerifier.verify(header.token);
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["PermissionEvaluator","IdentityType","ScopeName","AuthHeaderError","JWTError","OAuth2SubKind","OAuth2TokenKind","deserializeOAuth2Scope","AuthorizationHeaderType","parseAuthorizationHeader","ClientAuthenticator","PolicyEngine","UserAuthenticator","assertClientCertificateEvidenceValidForBinding","RequestIdentity","RequestPermissionEvaluator","extractClientCertificateEvidence","setRequestIdentity","setRequestMfaLoginTicket","setRequestPermissionEvaluator","setRequestScopes","setRequestSessionId","setRequestToken","runSymbol","Symbol","AuthorizationMiddleware","options","oauth2TokenVerifier","permissionEvaluator","identityResolver","sessionManager","clientAuthenticator","userAuthenticator","ctx","provider","permissionProvider","policyEngine","identityPermissionProvider","realmId","clientId","run","event","pending","store","promise","runInner","requestAccessContext","headerValue","headers","get","header","type","BEARER","verifyBearerAuthorizationHeader","BASIC","verifyBasicAuthorizationHeader","unsupportedType","payload","verify","token","verifyCertificateBinding","kind","MFA","verifyMfaLoginTicket","ACCESS","payloadPropertyInvalid","realm_id","scope","session_id","session","findOneById","expired","ping","sub_kind","sub","identity","resolve","cnf","expectedThumbprint","length","invalid","evidence","certificateSource","thumbprint","USER","subKind","clientAuthBasic","authenticator","safeAuthenticate","username","password","success","GLOBAL","CLIENT","data","userAuthBasic","authenticated"],"sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IPermissionEvaluator } from '@authup/access';\nimport { PermissionEvaluator } from '@authup/access';\nimport type { Client, User } from '@authup/core-kit';\nimport {\n IdentityType,\n ScopeName,\n} from '@authup/core-kit';\nimport { AuthHeaderError } from '@authup/errors';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport {\n JWTError,\n OAuth2SubKind,\n OAuth2TokenKind,\n deserializeOAuth2Scope,\n} from '@authup/specs';\nimport type { IAppEvent } from 'routup';\nimport {\n AuthorizationHeaderType,\n type BasicAuthorizationHeader,\n type BearerAuthorizationHeader,\n parseAuthorizationHeader,\n} from 'hapic';\nimport {\n ClientAuthenticator,\n PolicyEngine,\n UserAuthenticator,\n assertClientCertificateEvidenceValidForBinding,\n} from '../../../../../core/index.ts';\nimport type {\n ICredentialsAuthenticator,\n IIdentityResolver,\n IOAuth2TokenVerifier,\n ISessionManager,\n} from '../../../../../core/index.ts';\nimport {\n RequestIdentity,\n RequestPermissionEvaluator,\n extractClientCertificateEvidence,\n setRequestIdentity,\n setRequestMfaLoginTicket,\n setRequestPermissionEvaluator,\n setRequestScopes,\n setRequestSessionId,\n setRequestToken,\n} from '../../../request/index.ts';\nimport type { HTTPAuthorizationMiddlewareContext, HTTPAuthorizationMiddlewareOptions } from './types.ts';\n\nconst runSymbol = Symbol('RAuthorizationMiddlewareRun');\n\nexport class AuthorizationMiddleware {\n protected options: HTTPAuthorizationMiddlewareOptions;\n\n // --------------------------------------\n\n protected oauth2TokenVerifier: IOAuth2TokenVerifier;\n\n protected permissionEvaluator: IPermissionEvaluator;\n\n // --------------------------------------\n\n protected identityResolver: IIdentityResolver;\n\n protected sessionManager : ISessionManager;\n\n // --------------------------------------\n\n protected clientAuthenticator : ICredentialsAuthenticator<Client>;\n\n protected userAuthenticator : ICredentialsAuthenticator<User>;\n\n // --------------------------------------\n\n constructor(ctx: HTTPAuthorizationMiddlewareContext) {\n this.options = ctx.options || {};\n\n this.identityResolver = ctx.identityResolver;\n this.sessionManager = ctx.sessionManager;\n\n this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);\n this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);\n\n this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;\n\n this.permissionEvaluator = new PermissionEvaluator({\n provider: ctx.permissionProvider,\n policyEngine: new PolicyEngine(ctx.identityPermissionProvider),\n realmId: null,\n clientId: null,\n });\n }\n\n // --------------------------------------\n\n async run(event: IAppEvent): Promise<void> {\n // routup's dispatch walk re-enters earlier middlewares once per\n // remaining match when no handler produces a response — exponentially\n // (routup/routup#946), so an unmatched authenticated request re-ran\n // this middleware ~100+ times, re-verifying Basic credentials (bcrypt)\n // on every re-entry (~4s per 404). Authorization is a pure function of\n // the request: the first run's settlement — including a rejection —\n // is authoritative, so memoize the promise on the request store (the\n // store is shared by every re-entry of the same request).\n const pending = event.store[runSymbol] as Promise<void> | undefined;\n if (pending) {\n return pending;\n }\n\n const promise = this.runInner(event);\n event.store[runSymbol] = promise;\n return promise;\n }\n\n protected async runInner(event: IAppEvent): Promise<void> {\n const requestAccessContext = new RequestPermissionEvaluator(\n event,\n this.permissionEvaluator,\n );\n setRequestPermissionEvaluator(event, requestAccessContext);\n\n const headerValue = event.headers.get('authorization');\n if (!headerValue) {\n return;\n }\n\n const header = parseAuthorizationHeader(headerValue);\n\n if (header.type === AuthorizationHeaderType.BEARER) {\n await this.verifyBearerAuthorizationHeader(event, header);\n return;\n }\n\n if (header.type === AuthorizationHeaderType.BASIC) {\n await this.verifyBasicAuthorizationHeader(event, header);\n return;\n }\n\n throw AuthHeaderError.unsupportedType(header.type);\n }\n\n /**\n * @throws JWTError\n */\n protected async verifyBearerAuthorizationHeader(\n event: IAppEvent,\n header: BearerAuthorizationHeader,\n ) {\n const payload = await this.oauth2TokenVerifier.verify(header.token);\n await this.verifyCertificateBinding(event, payload);\n if (payload.kind === OAuth2TokenKind.MFA) {\n await this.verifyMfaLoginTicket(event, payload);\n return;\n }\n\n if (payload.kind !== OAuth2TokenKind.ACCESS) {\n throw JWTError.payloadPropertyInvalid('kind');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n setRequestToken(event, header.token);\n\n if (payload.scope) {\n setRequestScopes(event, deserializeOAuth2Scope(payload.scope));\n }\n\n // -------------------------------------------------------\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n setRequestSessionId(event, payload.session_id);\n\n // -------------------------------------------------------\n\n if (!payload.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n\n if (identity) {\n setRequestIdentity(event, identity);\n }\n }\n\n protected async verifyCertificateBinding(event: IAppEvent, payload: OAuth2TokenPayload): Promise<void> {\n if (!payload.cnf) {\n return;\n }\n\n const expectedThumbprint = payload.cnf['x5t#S256'];\n if (typeof expectedThumbprint !== 'string' || expectedThumbprint.length === 0) {\n throw JWTError.invalid();\n }\n\n try {\n const evidence = await extractClientCertificateEvidence(\n event,\n this.options.certificateSource ?? 'disabled',\n );\n if (!evidence || evidence.thumbprint !== expectedThumbprint) {\n throw JWTError.invalid();\n }\n\n assertClientCertificateEvidenceValidForBinding(evidence);\n } catch {\n throw JWTError.invalid();\n }\n }\n\n /**\n * An \"MFA-pending\" login ticket (issue #3242). Verified with the same\n * rigor as an access token (session existence + subject match), but\n * stashed on a DEDICATED request slot — the main identity / scope /\n * session slots stay empty, so every identity-gated route rejects a\n * ticket bearer (default-deny); only the challenge routes opt in via\n * useRequestMfaLoginTicket.\n *\n * @throws JWTError\n */\n protected async verifyMfaLoginTicket(\n event: IAppEvent,\n payload: OAuth2TokenPayload,\n ) {\n if (payload.sub_kind !== OAuth2SubKind.USER) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n // defense in depth — the pending session must still belong to the\n // ticket subject.\n if (\n session.sub !== payload.sub ||\n session.subKind !== IdentityType.USER\n ) {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n if (!identity) {\n throw JWTError.expired();\n }\n\n setRequestMfaLoginTicket(event, {\n identity: new RequestIdentity(identity),\n payload,\n });\n }\n\n protected async verifyBasicAuthorizationHeader(\n event: IAppEvent,\n header: BasicAuthorizationHeader,\n ) {\n if (this.options.clientAuthBasic) {\n const authenticator = await this.clientAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n if (authenticator.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.CLIENT,\n data: authenticator.data,\n });\n }\n }\n\n if (this.options.userAuthBasic) {\n const authenticated = await this.userAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n\n if (authenticated.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.USER,\n data: authenticated.data,\n });\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["PermissionEvaluator","IdentityType","ScopeName","AuthHeaderError","useRequestCookie","JWTError","OAuth2SubKind","OAuth2TokenKind","deserializeOAuth2Scope","AuthorizationHeaderType","parseAuthorizationHeader","setSessionCookie","ClientAuthenticator","PolicyEngine","SESSION_COOKIE","SESSION_REFRESH_THROTTLE","SYSTEM_CLIENT_SCOPE_NAMES","UserAuthenticator","assertClientCertificateEvidenceValidForBinding","RequestIdentity","RequestPermissionEvaluator","extractClientCertificateEvidence","isSameOriginRequest","setRequestIdentity","setRequestMfaLoginTicket","setRequestPermissionEvaluator","setRequestScopes","setRequestSessionId","setRequestToken","isOAuth2IssuancePath","runSymbol","Symbol","AuthorizationMiddleware","options","oauth2TokenVerifier","permissionEvaluator","identityResolver","sessionManager","sessionRepository","logger","clientAuthenticator","userAuthenticator","ctx","provider","permissionProvider","policyEngine","identityPermissionProvider","realmId","clientId","run","event","pending","store","promise","runInner","requestAccessContext","headerValue","headers","get","runCookieSession","header","type","BEARER","verifyBearerAuthorizationHeader","BASIC","verifyBasicAuthorizationHeader","unsupportedType","baseURL","secret","length","path","session","findOneBySecret","subKind","USER","verify","identity","resolve","sub","id","refreshCookieSession","refreshedAt","createdAt","threshold","Date","getTime","now","current","findOneById","refreshed","refresh","ttl","expiresAt","payload","token","verifyCertificateBinding","kind","MFA","verifyMfaLoginTicket","ACCESS","payloadPropertyInvalid","realm_id","scope","session_id","expired","ping","sub_kind","cnf","expectedThumbprint","invalid","evidence","certificateSource","thumbprint","clientAuthBasic","authenticator","safeAuthenticate","username","password","success","GLOBAL","CLIENT","data","userAuthBasic","authenticated"],"sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IPermissionEvaluator } from '@authup/access';\nimport { PermissionEvaluator } from '@authup/access';\nimport type { Client, Session, User } from '@authup/core-kit';\nimport {\n IdentityType,\n ScopeName,\n} from '@authup/core-kit';\nimport { AuthHeaderError } from '@authup/errors';\nimport type { Logger } from '@authup/server-kit';\nimport { useRequestCookie } from '@routup/basic/cookie';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport {\n JWTError,\n OAuth2SubKind,\n OAuth2TokenKind,\n deserializeOAuth2Scope,\n} from '@authup/specs';\nimport type { IAppEvent } from 'routup';\nimport {\n AuthorizationHeaderType,\n type BasicAuthorizationHeader,\n type BearerAuthorizationHeader,\n parseAuthorizationHeader,\n} from 'hapic';\nimport { setSessionCookie } from '../../../cookie/index.ts';\nimport {\n ClientAuthenticator,\n PolicyEngine,\n SESSION_COOKIE,\n SESSION_REFRESH_THROTTLE,\n SYSTEM_CLIENT_SCOPE_NAMES,\n UserAuthenticator,\n assertClientCertificateEvidenceValidForBinding,\n} from '../../../../../core/index.ts';\nimport type {\n ICredentialsAuthenticator,\n IIdentityResolver,\n IOAuth2TokenVerifier,\n ISessionManager,\n ISessionRepository,\n} from '../../../../../core/index.ts';\nimport {\n RequestIdentity,\n RequestPermissionEvaluator,\n extractClientCertificateEvidence,\n isSameOriginRequest,\n setRequestIdentity,\n setRequestMfaLoginTicket,\n setRequestPermissionEvaluator,\n setRequestScopes,\n setRequestSessionId,\n setRequestToken,\n} from '../../../request/index.ts';\nimport { isOAuth2IssuancePath } from './issuance.ts';\nimport type { HTTPAuthorizationMiddlewareContext, HTTPAuthorizationMiddlewareOptions } from './types.ts';\n\nconst runSymbol = Symbol('RAuthorizationMiddlewareRun');\n\nexport class AuthorizationMiddleware {\n protected options: HTTPAuthorizationMiddlewareOptions;\n\n // --------------------------------------\n\n protected oauth2TokenVerifier: IOAuth2TokenVerifier;\n\n protected permissionEvaluator: IPermissionEvaluator;\n\n // --------------------------------------\n\n protected identityResolver: IIdentityResolver;\n\n protected sessionManager : ISessionManager;\n\n protected sessionRepository : ISessionRepository;\n\n protected logger? : Logger;\n\n // --------------------------------------\n\n protected clientAuthenticator : ICredentialsAuthenticator<Client>;\n\n protected userAuthenticator : ICredentialsAuthenticator<User>;\n\n // --------------------------------------\n\n constructor(ctx: HTTPAuthorizationMiddlewareContext) {\n this.options = ctx.options || {};\n\n this.identityResolver = ctx.identityResolver;\n this.sessionManager = ctx.sessionManager;\n this.sessionRepository = ctx.sessionRepository;\n this.logger = ctx.logger;\n\n this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);\n this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);\n\n this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;\n\n this.permissionEvaluator = new PermissionEvaluator({\n provider: ctx.permissionProvider,\n policyEngine: new PolicyEngine(ctx.identityPermissionProvider),\n realmId: null,\n clientId: null,\n });\n }\n\n // --------------------------------------\n\n async run(event: IAppEvent): Promise<void> {\n // routup's dispatch walk re-enters earlier middlewares once per\n // remaining match when no handler produces a response — exponentially\n // (routup/routup#946), so an unmatched authenticated request re-ran\n // this middleware ~100+ times, re-verifying Basic credentials (bcrypt)\n // on every re-entry (~4s per 404). Authorization is a pure function of\n // the request: the first run's settlement — including a rejection —\n // is authoritative, so memoize the promise on the request store (the\n // store is shared by every re-entry of the same request).\n const pending = event.store[runSymbol] as Promise<void> | undefined;\n if (pending) {\n return pending;\n }\n\n const promise = this.runInner(event);\n event.store[runSymbol] = promise;\n return promise;\n }\n\n protected async runInner(event: IAppEvent): Promise<void> {\n const requestAccessContext = new RequestPermissionEvaluator(\n event,\n this.permissionEvaluator,\n );\n setRequestPermissionEvaluator(event, requestAccessContext);\n\n const headerValue = event.headers.get('authorization');\n if (!headerValue) {\n // The bearer/Basic path is untouched, and the header keeps\n // winning: the cookie is only consulted when the request presents\n // no credential of its own.\n await this.runCookieSession(event);\n return;\n }\n\n const header = parseAuthorizationHeader(headerValue);\n\n if (header.type === AuthorizationHeaderType.BEARER) {\n await this.verifyBearerAuthorizationHeader(event, header);\n return;\n }\n\n if (header.type === AuthorizationHeaderType.BASIC) {\n await this.verifyBasicAuthorizationHeader(event, header);\n return;\n }\n\n throw AuthHeaderError.unsupportedType(header.type);\n }\n\n /**\n * The console session cookie (plan 088): an opaque credential naming an\n * `auth_sessions` row, presented instead of a bearer token by a console\n * served from the API's own origin.\n *\n * It NEVER throws and never rejects a request. Anything missing, stale or\n * refused simply leaves the request anonymous, which the route's own\n * `ForceLoggedIn` guard then answers — the same outcome as sending no\n * credential at all. A cookie is ambient, so a request that merely carries\n * a bad one is not necessarily a request that meant to use it.\n */\n protected async runCookieSession(event: IAppEvent): Promise<void> {\n try {\n const { baseURL } = this.options;\n if (!baseURL) {\n // The origin gate cannot be evaluated without publicUrl, so\n // the cookie is not honoured at all.\n return;\n }\n\n const secret = useRequestCookie(event, SESSION_COOKIE);\n if (typeof secret !== 'string' || secret.length === 0) {\n return;\n }\n\n // Finding 2 of plan 088, and an invariant rather than a detail:\n // an ambient cookie must never reach the OAuth2 issuance surface,\n // or one script execution on this origin turns it back into a\n // portable token pair.\n if (isOAuth2IssuancePath(event.path)) {\n return;\n }\n\n if (!isSameOriginRequest(event, baseURL, { logger: this.logger })) {\n return;\n }\n\n const session = await this.sessionRepository.findOneBySecret(secret);\n if (!session) {\n return;\n }\n\n // The consoles are user surfaces. A client-subject session would\n // otherwise authenticate here and then produce a sign-in loop in a\n // console that can only render a user.\n if (session.subKind !== IdentityType.USER) {\n return;\n }\n\n try {\n // Same expiry contract as the bearer path (it also drops the\n // expired row), minus the rejection.\n await this.sessionManager.verify(session);\n } catch {\n return;\n }\n\n const identity = await this.identityResolver.resolve(\n IdentityType.USER,\n session.sub,\n );\n if (!identity) {\n return;\n }\n\n setRequestIdentity(event, identity);\n // Named explicitly: createRequestEventContextMiddleware reads it\n // for audit attribution, so omitting it would regress plan 093's\n // session attribution to null on every cookie-mode write.\n setRequestSessionId(event, session.id);\n // The console's granted scope set is a constant — the cookie\n // belongs to a console session, and the console client is\n // provisioned with exactly these (SYSTEM_CLIENT_SCOPE_NAMES).\n setRequestScopes(event, [...SYSTEM_CLIENT_SCOPE_NAMES]);\n\n await this.refreshCookieSession(event, session, secret);\n } catch {\n // Defense in depth around everything above: an anonymous request\n // is always a valid outcome here, an error page never is.\n }\n }\n\n /**\n * Slide the session's expiry, throttled.\n *\n * Cookie mode has no refresh grant, so without this an active console user\n * would be signed out once the session reached its lifetime, mid-task\n * (plan 088: a credential change must not become a session-policy change\n * by omission).\n */\n protected async refreshCookieSession(\n event: IAppEvent,\n session: Session,\n secret: string,\n ): Promise<void> {\n const refreshedAt = session.refreshedAt || session.createdAt;\n if (refreshedAt) {\n const threshold = new Date(refreshedAt).getTime() + SESSION_REFRESH_THROTTLE;\n if (threshold > Date.now()) {\n return;\n }\n }\n\n // `repository.save` upserts by primary key, so writing the row read at\n // the top of this request would RESURRECT a session a concurrent\n // sign-out deleted in between. Re-read first: the sign-out drops both\n // the row and its cache entry, so a miss here means the session is\n // gone and there is nothing to slide.\n const current = await this.sessionManager.findOneById(session.id);\n if (!current) {\n return;\n }\n\n const refreshed = await this.sessionManager.refresh(current);\n\n // Re-arm the cookie, or the slide is invisible to the browser. A\n // cookie's `Max-Age` is fixed by the response that set it, so leaving\n // it at the value the callback computed would have the browser discard\n // the credential at login + one lifetime no matter how recently the\n // session was used — the hard cap the sliding decision rejected, with\n // the server-side slide happening and never being observable.\n const ttl = new Date(refreshed.expiresAt).getTime() - Date.now();\n if (ttl > 0 && this.options.baseURL) {\n setSessionCookie(event, this.options.baseURL, secret, ttl);\n }\n }\n\n /**\n * @throws JWTError\n */\n protected async verifyBearerAuthorizationHeader(\n event: IAppEvent,\n header: BearerAuthorizationHeader,\n ) {\n const payload = await this.oauth2TokenVerifier.verify(header.token);\n await this.verifyCertificateBinding(event, payload);\n if (payload.kind === OAuth2TokenKind.MFA) {\n await this.verifyMfaLoginTicket(event, payload);\n return;\n }\n\n if (payload.kind !== OAuth2TokenKind.ACCESS) {\n throw JWTError.payloadPropertyInvalid('kind');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n setRequestToken(event, header.token);\n\n if (payload.scope) {\n setRequestScopes(event, deserializeOAuth2Scope(payload.scope));\n }\n\n // -------------------------------------------------------\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n setRequestSessionId(event, payload.session_id);\n\n // -------------------------------------------------------\n\n if (!payload.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n\n if (identity) {\n setRequestIdentity(event, identity);\n }\n }\n\n protected async verifyCertificateBinding(event: IAppEvent, payload: OAuth2TokenPayload): Promise<void> {\n if (!payload.cnf) {\n return;\n }\n\n const expectedThumbprint = payload.cnf['x5t#S256'];\n if (typeof expectedThumbprint !== 'string' || expectedThumbprint.length === 0) {\n throw JWTError.invalid();\n }\n\n try {\n const evidence = await extractClientCertificateEvidence(\n event,\n this.options.certificateSource ?? 'disabled',\n );\n if (!evidence || evidence.thumbprint !== expectedThumbprint) {\n throw JWTError.invalid();\n }\n\n assertClientCertificateEvidenceValidForBinding(evidence);\n } catch {\n throw JWTError.invalid();\n }\n }\n\n /**\n * An \"MFA-pending\" login ticket (issue #3242). Verified with the same\n * rigor as an access token (session existence + subject match), but\n * stashed on a DEDICATED request slot — the main identity / scope /\n * session slots stay empty, so every identity-gated route rejects a\n * ticket bearer (default-deny); only the challenge routes opt in via\n * useRequestMfaLoginTicket.\n *\n * @throws JWTError\n */\n protected async verifyMfaLoginTicket(\n event: IAppEvent,\n payload: OAuth2TokenPayload,\n ) {\n if (payload.sub_kind !== OAuth2SubKind.USER) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n // defense in depth — the pending session must still belong to the\n // ticket subject.\n if (\n session.sub !== payload.sub ||\n session.subKind !== IdentityType.USER\n ) {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n if (!identity) {\n throw JWTError.expired();\n }\n\n setRequestMfaLoginTicket(event, {\n identity: new RequestIdentity(identity),\n payload,\n });\n }\n\n protected async verifyBasicAuthorizationHeader(\n event: IAppEvent,\n header: BasicAuthorizationHeader,\n ) {\n if (this.options.clientAuthBasic) {\n const authenticator = await this.clientAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n if (authenticator.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.CLIENT,\n data: authenticator.data,\n });\n }\n }\n\n if (this.options.userAuthBasic) {\n const authenticated = await this.userAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n\n if (authenticated.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.USER,\n data: authenticated.data,\n });\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,17 +1,37 @@
1
1
  import type { IPermissionProvider } from '@authup/access';
2
- import type { IIdentityPermissionProvider, IIdentityResolver, IOAuth2TokenVerifier, ISessionManager } from '../../../../../core/index.ts';
2
+ import type { Logger } from '@authup/server-kit';
3
+ import type { IIdentityPermissionProvider, IIdentityResolver, IOAuth2TokenVerifier, ISessionManager, ISessionRepository } from '../../../../../core/index.ts';
3
4
  import type { CertificateSource } from '../../../request/index.ts';
4
5
  export type HTTPAuthorizationMiddlewareOptions = {
5
6
  clientAuthBasic?: boolean;
6
7
  userAuthBasic?: boolean;
7
8
  certificateSource?: CertificateSource;
9
+ /**
10
+ * publicUrl. The origin every cookie-authenticated request is checked
11
+ * against (`isSameOriginRequest`). Without it the console session cookie
12
+ * is ignored entirely — the gate cannot be evaluated, so it fails closed.
13
+ */
14
+ baseURL?: string;
8
15
  };
9
16
  export type HTTPAuthorizationMiddlewareContext = {
10
17
  identityResolver: IIdentityResolver;
11
18
  identityPermissionProvider: IIdentityPermissionProvider;
12
19
  sessionManager: ISessionManager;
20
+ /**
21
+ * Resolves the opaque console session credential (plan 088). The session
22
+ * MANAGER cannot: the credential is a `select: false` column read by a
23
+ * dedicated, uncached lookup.
24
+ */
25
+ sessionRepository: ISessionRepository;
13
26
  oauth2TokenVerifier: IOAuth2TokenVerifier;
14
27
  permissionProvider: IPermissionProvider;
28
+ /**
29
+ * Reports a cookie presented from an origin that is not publicUrl's, once
30
+ * per process. A deployment whose browser-facing host differs from
31
+ * `publicUrl` otherwise presents as a console that loads and then silently
32
+ * 401s everything.
33
+ */
34
+ logger?: Logger;
15
35
  options?: HTTPAuthorizationMiddlewareOptions;
16
36
  };
17
37
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAER,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,kCAAkC,GAAG;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IACxD,cAAc,EAAE,eAAe,CAAC;IAChC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,kBAAkB,EAAE,mBAAmB,CAAC;IAExC,OAAO,CAAC,EAAE,kCAAkC,CAAA;CAC/C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAER,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,kCAAkC,GAAG;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IACxD,cAAc,EAAE,eAAe,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,kBAAkB,EAAE,mBAAmB,CAAC;IAExC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,kCAAkC,CAAA;CAC/C,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { Options } from '@routup/basic';
2
- import type { App } from 'routup';
3
- export declare function registerBasicMiddleware(router: App, input?: Options): void;
2
+ import type { IApp } from 'routup';
3
+ export declare function registerBasicMiddleware(router: IApp, input?: Options): void;
4
4
  //# sourceMappingURL=basic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/basic.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,QAEnE"}
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/basic.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,QAEpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"basic.mjs","names":["basic","registerBasicMiddleware","router","input","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/basic.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@routup/basic';\nimport { basic } from '@routup/basic';\nimport type { App } from 'routup';\n\nexport function registerBasicMiddleware(router: App, input?: Options) {\n router.use(basic(input));\n}\n"],"mappings":";;;;;AAWA,SAAgBC,wBAAwBC,QAAaC,OAAe;CAChED,OAAOE,IAAIJ,MAAMG,KAAAA,CAAAA;AACrB"}
1
+ {"version":3,"file":"basic.mjs","names":["basic","registerBasicMiddleware","router","input","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/basic.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@routup/basic';\nimport { basic } from '@routup/basic';\nimport type { IApp } from 'routup';\n\nexport function registerBasicMiddleware(router: IApp, input?: Options) {\n router.use(basic(input));\n}\n"],"mappings":";;;;;AAWA,SAAgBC,wBAAwBC,QAAcC,OAAe;CACjED,OAAOE,IAAIJ,MAAMG,KAAAA,CAAAA;AACrB"}
@@ -1,4 +1,10 @@
1
1
  import type { Options as CorsOptions } from '@routup/cors';
2
- import type { App } from 'routup';
3
- export declare function registerCorsMiddleware(router: App, input?: CorsOptions): void;
2
+ import type { IApp } from 'routup';
3
+ export type CorsMiddlewareContext = {
4
+ /**
5
+ * publicUrl. The ONE origin credentialed requests are answered for.
6
+ */
7
+ baseURL: string;
8
+ };
9
+ export declare function registerCorsMiddleware(router: IApp, input: CorsOptions | undefined, ctx: CorsMiddlewareContext): void;
4
10
  //# sourceMappingURL=cors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,WAAW,QAmCtE"}
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,qBAAqB,QA6E9G"}
@@ -1,10 +1,11 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
- import { cors } from "@routup/cors";
4
+ import { defineCoreHandler, getRequestHeader } from "routup";
5
+ import { handleCors } from "@routup/cors";
5
6
  //#region src/adapters/http/middleware/built-in/cors.ts
6
- function registerCorsMiddleware(router, input) {
7
- router.use(cors({
7
+ function registerCorsMiddleware(router, input, ctx) {
8
+ const options = {
8
9
  origin: true,
9
10
  credentials: true,
10
11
  exposeHeaders: [
@@ -20,6 +21,22 @@ function registerCorsMiddleware(router, input) {
20
21
  "www-authenticate"
21
22
  ],
22
23
  ...input ?? {}
24
+ };
25
+ let trustedOrigin;
26
+ try {
27
+ trustedOrigin = new URL(ctx.baseURL).origin;
28
+ } catch {
29
+ trustedOrigin = void 0;
30
+ }
31
+ router.use(defineCoreHandler((event) => {
32
+ const origin = getRequestHeader(event, "origin");
33
+ const credentials = !!options.credentials && !!trustedOrigin && origin === trustedOrigin;
34
+ const response = handleCors(event, {
35
+ ...options,
36
+ credentials
37
+ });
38
+ if (response) return response;
39
+ return event.next();
23
40
  }));
24
41
  }
25
42
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"cors.mjs","names":["cors","registerCorsMiddleware","router","input","use","origin","credentials","exposeHeaders"],"sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options as CorsOptions } from '@routup/cors';\nimport { cors } from '@routup/cors';\nimport type { App } from 'routup';\n\nexport function registerCorsMiddleware(router: App, input?: CorsOptions) {\n router.use(cors({\n // Reflect any origin by default: OAuth2 clients (and their UIs) are\n // registered at runtime on arbitrary domains, so a startup-time\n // allowlist cannot know them. Authentication is header-based\n // (Bearer/Basic), so an origin allowlist would add no security here,\n // only break dynamically registered browser clients. Operators can\n // still pass an explicit `origin` via the middlewareCors config\n // options.\n //\n // ONE endpoint authenticates on a cookie: the federated login's\n // `POST /identity-providers/:id/login-complete` (plan 094). Reflecting\n // an origin WITH credentials would let any same-site origin read the\n // token pair it answers with, since `SameSite` is scoped to the\n // registrable domain rather than the origin, so that route checks\n // `Origin` against publicUrl itself. A second cookie-authenticated\n // endpoint must do the same, or this default has to change.\n origin: true,\n credentials: true,\n // `credentials: true` is incompatible with the `*` wildcard for\n // exposeHeaders, so enumerate the response headers JS clients need.\n exposeHeaders: [\n 'ratelimit-limit',\n 'ratelimit-remaining',\n 'ratelimit-reset',\n 'retry-after',\n 'etag',\n 'content-disposition',\n 'content-range',\n 'accept-ranges',\n 'location',\n 'www-authenticate',\n ],\n ...(input ?? {}),\n }));\n}\n"],"mappings":";;;;;AAWA,SAAgBC,uBAAuBC,QAAaC,OAAmB;CACnED,OAAOE,IAAIJ,KAAK;EAgBZK,QAAQ;EACRC,aAAa;EAGbC,eAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH;EACD,GAAIJ,SAAS,CAAC;CAClB,CAAA,CAAA;AACJ"}
1
+ {"version":3,"file":"cors.mjs","names":["handleCors","defineCoreHandler","getRequestHeader","registerCorsMiddleware","router","input","ctx","options","origin","credentials","exposeHeaders","trustedOrigin","URL","baseURL","undefined","use","event","response","next"],"sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options as CorsOptions } from '@routup/cors';\nimport { handleCors } from '@routup/cors';\nimport type { IApp } from 'routup';\nimport { defineCoreHandler, getRequestHeader } from 'routup';\n\nexport type CorsMiddlewareContext = {\n /**\n * publicUrl. The ONE origin credentialed requests are answered for.\n */\n baseURL: string,\n};\n\nexport function registerCorsMiddleware(router: IApp, input: CorsOptions | undefined, ctx: CorsMiddlewareContext) {\n const options : CorsOptions = {\n // Reflect any origin by default: OAuth2 clients (and their UIs) are\n // registered at runtime on arbitrary domains, so a startup-time\n // allowlist cannot know them. Bearer/Basic authentication is carried\n // in a header a cross-origin page cannot make the browser attach on\n // its own, so reflecting the origin adds no exposure for it. Operators\n // can still pass an explicit `origin` via the middlewareCors config\n // options.\n origin: true,\n credentials: true,\n // `credentials: true` is incompatible with the `*` wildcard for\n // exposeHeaders, so enumerate the response headers JS clients need.\n exposeHeaders: [\n 'ratelimit-limit',\n 'ratelimit-remaining',\n 'ratelimit-reset',\n 'retry-after',\n 'etag',\n 'content-disposition',\n 'content-range',\n 'accept-ranges',\n 'location',\n 'www-authenticate',\n ],\n ...(input ?? {}),\n };\n\n let trustedOrigin : string | undefined;\n try {\n trustedOrigin = new URL(ctx.baseURL).origin;\n } catch {\n trustedOrigin = undefined;\n }\n\n // `access-control-allow-credentials` is emitted ONLY for publicUrl's own\n // origin (plan 088).\n //\n // Cookie-authenticated surfaces exist now (the federated login's\n // `POST /identity-providers/:id/login-complete` (plan 094) and, since\n // plan 088, every route the console session cookie reaches), so\n // \"reflect any origin\" and \"answer credentialed requests\" can no longer\n // both hold. `SameSite` does not save it: the attribute is scoped to the\n // registrable domain, so a sibling subdomain is same-SITE, its\n // `fetch(credentials: 'include')` carries the cookie, and a reflected\n // `Allow-Origin` plus `Allow-Credentials` would let it read the reply.\n //\n // `Allow-Origin` keeps reflecting, so every non-credentialed\n // cross-origin caller is unaffected. No authup consumer sets\n // `credentials: 'include'` (neither core-http-kit nor the web kit), and\n // the same-origin console needs no credentials mode, so nothing of\n // authup's own breaks. The narrowing applies to an explicit\n // `middlewareCors` config too: while an ambient cookie is accepted here,\n // there is no supported way to hand another origin the user's session.\n //\n // This narrowing does NOT relieve a cookie-authenticated route of its own\n // origin check (`isSameOriginRequest`). CORS governs what a browser lets\n // a foreign page READ, never what this server ACTS on: a credentialed\n // request whose reply the browser will discard still arrives, and still\n // carries the cookie. Every such surface repeats the check: plan 088's\n // console session and plan 094's login completion both do.\n //\n // A per-request decision, because @routup/cors takes `credentials` as a\n // plain boolean, hence `handleCors` rather than the `cors()` plugin.\n router.use(defineCoreHandler((event) => {\n const origin = getRequestHeader(event, 'origin');\n const credentials = !!options.credentials &&\n !!trustedOrigin &&\n origin === trustedOrigin;\n\n const response = handleCors(event, { ...options, credentials });\n if (response) {\n return response;\n }\n\n return event.next();\n }));\n}\n"],"mappings":";;;;;;AAmBA,SAAgBG,uBAAuBC,QAAcC,OAAgCC,KAA0B;CAC3G,MAAMC,UAAwB;EAQ1BC,QAAQ;EACRC,aAAa;EAGbC,eAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH;EACD,GAAIL,SAAS,CAAC;CAClB;CAEA,IAAIM;CACJ,IAAI;EACAA,gBAAgB,IAAIC,IAAIN,IAAIO,OAAO,CAAA,CAAEL;CACzC,QAAQ;EACJG,gBAAgBG,KAAAA;CACpB;CA+BAV,OAAOW,IAAId,mBAAmBe,UAAAA;EAC1B,MAAMR,SAASN,iBAAiBc,OAAO,QAAA;EACvC,MAAMP,cAAc,CAAC,CAACF,QAAQE,eAC1B,CAAC,CAACE,iBACFH,WAAWG;EAEf,MAAMM,WAAWjB,WAAWgB,OAAO;GAAE,GAAGT;GAASE;EAAY,CAAA;EAC7D,IAAIQ,UACA,OAAOA;EAGX,OAAOD,MAAME,KAAI;CACrB,CAAA,CAAA;AACJ"}
@@ -1,8 +1,8 @@
1
- import type { App } from 'routup';
1
+ import type { IApp } from 'routup';
2
2
  import type { Logger } from '@authup/server-kit';
3
3
  type ErrorMiddlewareOptions = {
4
4
  logger?: Logger;
5
5
  };
6
- export declare function registerErrorMiddleware(router: App, options?: ErrorMiddlewareOptions): void;
6
+ export declare function registerErrorMiddleware(router: IApp, options?: ErrorMiddlewareOptions): void;
7
7
  export {};
8
8
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/error.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKjD,KAAK,sBAAsB,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,sBAA2B,QAyDxF"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/error.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKjD,KAAK,sBAAsB,GAAG;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,GAAE,sBAA2B,QAyDzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"error.mjs","names":["defineErrorHandler","ErrorCode","httpStatusFromCode","serializeError","isJWTErrorCode","describeError","sanitizeError","registerErrorMiddleware","router","options","use","error","event","original","cause","next","status","code","payload","logger","message","authorization","headers","get","toLowerCase","startsWith","description","String","replace","response","set","IDENTITY_UNAUTHORIZED"],"sources":["../../../../../src/adapters/http/middleware/built-in/error.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'routup';\nimport { defineErrorHandler } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { ErrorCode, httpStatusFromCode, serializeError } from '@authup/errors';\nimport { isJWTErrorCode } from '@authup/specs';\nimport { describeError, sanitizeError } from '../../../../utils/index.ts';\n\ntype ErrorMiddlewareOptions = {\n logger?: Logger\n};\n\nexport function registerErrorMiddleware(router: App, options: ErrorMiddlewareOptions = {}) {\n router.use(defineErrorHandler((error, event) => {\n // routup wraps whatever a handler threw into an AppError carrying it\n // as `cause`, so this is the error as it was actually raised.\n const original = error.cause ?? error;\n\n const next = sanitizeError(original);\n const status = httpStatusFromCode(next.code);\n\n const payload = serializeError(next);\n\n if (status >= 500) {\n if (options.logger) {\n // The ORIGINAL error, never the sanitized copy. Sanitizing\n // discards the transport reason and the upstream response\n // body on purpose, and those are the only things that make\n // an outbound failure diagnosable.\n options.logger.error(describeError(original));\n }\n payload.message = 'An internal server error occurred.';\n }\n\n // RFC 6750 §3: a 401 from a protected resource carries the Bearer\n // challenge, which nothing here emitted. Gated on the request actually\n // being one - the token endpoint answers 401 for a bad client secret\n // (RFC 6749 §5.2) and that is not a bearer failure, so it must not be\n // stamped.\n if (status === 401) {\n const authorization = event.headers.get('authorization');\n\n if (typeof authorization === 'string' && authorization.toLowerCase().startsWith('bearer ')) {\n // RFC 6750 §3 defines the value as a quoted-string over\n // `%x20-21 / %x23-5B / %x5D-7E`, so everything outside that set\n // goes: a quote or a backslash would break out of the\n // quoting, and a control character (a CR or LF in a\n // third-party JWT library's\n // message, which `JWTError.payloadInvalid` forwards verbatim)\n // makes the header assignment itself throw, turning a 401\n // into a 500.\n const description = String(payload.message ?? '')\n .replace(/[^\\x20-\\x21\\x23-\\x5B\\x5D-\\x7E]/g, '');\n const code = isJWTErrorCode(next.code) ? 'invalid_token' : 'invalid_request';\n\n event.response.headers.set(\n 'www-authenticate',\n `Bearer error=\"${code}\", error_description=\"${description}\"`,\n );\n } else if (!authorization && next.code === ErrorCode.IDENTITY_UNAUTHORIZED) {\n // §3 again: a request that presented no credentials at all gets\n // the bare challenge, with no error code to report.\n event.response.headers.set('www-authenticate', 'Bearer');\n }\n }\n\n event.response.status = status;\n return payload;\n }));\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgBO,wBAAwBC,QAAaC,UAAkC,CAAC,GAAC;CACrFD,OAAOE,IAAIV,oBAAoBW,OAAOC,UAAAA;EAGlC,MAAMC,WAAWF,MAAMG,SAASH;EAEhC,MAAMI,OAAOT,cAAcO,QAAAA;EAC3B,MAAMG,SAASd,mBAAmBa,KAAKE,IAAI;EAE3C,MAAMC,UAAUf,eAAeY,IAAAA;EAE/B,IAAIC,UAAU,KAAK;GACf,IAAIP,QAAQU,QAKRV,QAAQU,OAAOR,MAAMN,cAAcQ,QAAAA,CAAAA;GAEvCK,QAAQE,UAAU;EACtB;EAOA,IAAIJ,WAAW,KAAK;GAChB,MAAMK,gBAAgBT,MAAMU,QAAQC,IAAI,eAAA;GAExC,IAAI,OAAOF,kBAAkB,YAAYA,cAAcG,YAAW,CAAA,CAAGC,WAAW,SAAA,GAAY;IASxF,MAAMC,cAAcC,OAAOT,QAAQE,WAAW,EAAA,CAAA,CACzCQ,QAAQ,mCAAmC,EAAA;IAChD,MAAMX,OAAOb,eAAeW,KAAKE,IAAI,IAAI,kBAAkB;IAE3DL,MAAMiB,SAASP,QAAQQ,IACnB,oBACA,iBAAiBb,KAAK,wBAAwBS,YAAY,EAAE;GAEpE,OAAO,IAAI,CAACL,iBAAiBN,KAAKE,SAAShB,UAAU8B,uBAGjDnB,MAAMiB,SAASP,QAAQQ,IAAI,oBAAoB,QAAA;EAEvD;EAEAlB,MAAMiB,SAASb,SAASA;EACxB,OAAOE;CACX,CAAA,CAAA;AACJ"}
1
+ {"version":3,"file":"error.mjs","names":["defineErrorHandler","ErrorCode","httpStatusFromCode","serializeError","isJWTErrorCode","describeError","sanitizeError","registerErrorMiddleware","router","options","use","error","event","original","cause","next","status","code","payload","logger","message","authorization","headers","get","toLowerCase","startsWith","description","String","replace","response","set","IDENTITY_UNAUTHORIZED"],"sources":["../../../../../src/adapters/http/middleware/built-in/error.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IApp } from 'routup';\nimport { defineErrorHandler } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { ErrorCode, httpStatusFromCode, serializeError } from '@authup/errors';\nimport { isJWTErrorCode } from '@authup/specs';\nimport { describeError, sanitizeError } from '../../../../utils/index.ts';\n\ntype ErrorMiddlewareOptions = {\n logger?: Logger\n};\n\nexport function registerErrorMiddleware(router: IApp, options: ErrorMiddlewareOptions = {}) {\n router.use(defineErrorHandler((error, event) => {\n // routup wraps whatever a handler threw into an AppError carrying it\n // as `cause`, so this is the error as it was actually raised.\n const original = error.cause ?? error;\n\n const next = sanitizeError(original);\n const status = httpStatusFromCode(next.code);\n\n const payload = serializeError(next);\n\n if (status >= 500) {\n if (options.logger) {\n // The ORIGINAL error, never the sanitized copy. Sanitizing\n // discards the transport reason and the upstream response\n // body on purpose, and those are the only things that make\n // an outbound failure diagnosable.\n options.logger.error(describeError(original));\n }\n payload.message = 'An internal server error occurred.';\n }\n\n // RFC 6750 §3: a 401 from a protected resource carries the Bearer\n // challenge, which nothing here emitted. Gated on the request actually\n // being one - the token endpoint answers 401 for a bad client secret\n // (RFC 6749 §5.2) and that is not a bearer failure, so it must not be\n // stamped.\n if (status === 401) {\n const authorization = event.headers.get('authorization');\n\n if (typeof authorization === 'string' && authorization.toLowerCase().startsWith('bearer ')) {\n // RFC 6750 §3 defines the value as a quoted-string over\n // `%x20-21 / %x23-5B / %x5D-7E`, so everything outside that set\n // goes: a quote or a backslash would break out of the\n // quoting, and a control character (a CR or LF in a\n // third-party JWT library's\n // message, which `JWTError.payloadInvalid` forwards verbatim)\n // makes the header assignment itself throw, turning a 401\n // into a 500.\n const description = String(payload.message ?? '')\n .replace(/[^\\x20-\\x21\\x23-\\x5B\\x5D-\\x7E]/g, '');\n const code = isJWTErrorCode(next.code) ? 'invalid_token' : 'invalid_request';\n\n event.response.headers.set(\n 'www-authenticate',\n `Bearer error=\"${code}\", error_description=\"${description}\"`,\n );\n } else if (!authorization && next.code === ErrorCode.IDENTITY_UNAUTHORIZED) {\n // §3 again: a request that presented no credentials at all gets\n // the bare challenge, with no error code to report.\n event.response.headers.set('www-authenticate', 'Bearer');\n }\n }\n\n event.response.status = status;\n return payload;\n }));\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgBO,wBAAwBC,QAAcC,UAAkC,CAAC,GAAC;CACtFD,OAAOE,IAAIV,oBAAoBW,OAAOC,UAAAA;EAGlC,MAAMC,WAAWF,MAAMG,SAASH;EAEhC,MAAMI,OAAOT,cAAcO,QAAAA;EAC3B,MAAMG,SAASd,mBAAmBa,KAAKE,IAAI;EAE3C,MAAMC,UAAUf,eAAeY,IAAAA;EAE/B,IAAIC,UAAU,KAAK;GACf,IAAIP,QAAQU,QAKRV,QAAQU,OAAOR,MAAMN,cAAcQ,QAAAA,CAAAA;GAEvCK,QAAQE,UAAU;EACtB;EAOA,IAAIJ,WAAW,KAAK;GAChB,MAAMK,gBAAgBT,MAAMU,QAAQC,IAAI,eAAA;GAExC,IAAI,OAAOF,kBAAkB,YAAYA,cAAcG,YAAW,CAAA,CAAGC,WAAW,SAAA,GAAY;IASxF,MAAMC,cAAcC,OAAOT,QAAQE,WAAW,EAAA,CAAA,CACzCQ,QAAQ,mCAAmC,EAAA;IAChD,MAAMX,OAAOb,eAAeW,KAAKE,IAAI,IAAI,kBAAkB;IAE3DL,MAAMiB,SAASP,QAAQQ,IACnB,oBACA,iBAAiBb,KAAK,wBAAwBS,YAAY,EAAE;GAEpE,OAAO,IAAI,CAACL,iBAAiBN,KAAKE,SAAShB,UAAU8B,uBAGjDnB,MAAMiB,SAASP,QAAQQ,IAAI,oBAAoB,QAAA;EAEvD;EAEAlB,MAAMiB,SAASb,SAASA;EACxB,OAAOE;CACX,CAAA,CAAA;AACJ"}
@@ -1,7 +1,6 @@
1
1
  export * from './authorization/index.ts';
2
2
  export * from './loggedin/index.ts';
3
3
  export * from './realm-resolver/index.ts';
4
- export * from './assets.ts';
5
4
  export * from './basic.ts';
6
5
  export * from './cors.ts';
7
6
  export * from './error.ts';
@@ -9,7 +8,5 @@ export * from './logger.ts';
9
8
  export * from './prometheus.ts';
10
9
  export * from './rate-limit.ts';
11
10
  export * from './swagger.ts';
12
- export * from './theme.ts';
13
- export * from './types.ts';
14
- export * from './ui-http-client.ts';
11
+ export * from './internal-http-client.ts';
15
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/index.ts"],"names":[],"mappings":"AAOA,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/index.ts"],"names":[],"mappings":"AAOA,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
+ import { OAUTH2_ISSUANCE_PATHS, isOAuth2IssuancePath, normalizeRequestPath } from "./authorization/issuance.mjs";
4
5
  import { AuthorizationMiddleware } from "./authorization/module.mjs";
5
6
  import { createAuthorizationMiddleware } from "./authorization/factory.mjs";
6
7
  import "./authorization/index.mjs";
@@ -10,8 +11,6 @@ import "./loggedin/index.mjs";
10
11
  import { RealmResolverMiddleware } from "./realm-resolver/module.mjs";
11
12
  import { createRealmResolverMiddleware } from "./realm-resolver/factory.mjs";
12
13
  import "./realm-resolver/index.mjs";
13
- import { THEME_STORE_KEY, registerThemeMiddleware, useRequestTheme } from "./theme.mjs";
14
- import { VITE_SERVER_STORE_KEY, registerAssetsMiddleware } from "./assets.mjs";
15
14
  import { registerBasicMiddleware } from "./basic.mjs";
16
15
  import { registerCorsMiddleware } from "./cors.mjs";
17
16
  import { registerErrorMiddleware } from "./error.mjs";
@@ -19,5 +18,5 @@ import { createLoggerMiddleware, redactSensitiveURLParams } from "./logger.mjs";
19
18
  import { createRouteTemplateNormalizePath, registerPrometheusMiddleware } from "./prometheus.mjs";
20
19
  import { registerRateLimitMiddleware } from "./rate-limit.mjs";
21
20
  import { createSwaggerMiddleware } from "./swagger.mjs";
22
- import { UI_HTTP_CLIENT_FACTORY_STORE_KEY, registerUIHttpClientMiddleware } from "./ui-http-client.mjs";
23
- export { AuthorizationMiddleware, ForceLoggedInMiddleware, ForceUserLoggedInMiddleware, RealmResolverMiddleware, THEME_STORE_KEY, UI_HTTP_CLIENT_FACTORY_STORE_KEY, VITE_SERVER_STORE_KEY, createAuthorizationMiddleware, createLoggerMiddleware, createRealmResolverMiddleware, createRouteTemplateNormalizePath, createSwaggerMiddleware, redactSensitiveURLParams, registerAssetsMiddleware, registerBasicMiddleware, registerCorsMiddleware, registerErrorMiddleware, registerPrometheusMiddleware, registerRateLimitMiddleware, registerThemeMiddleware, registerUIHttpClientMiddleware, useRequestTheme };
21
+ import { INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY, registerInternalHttpClientMiddleware } from "./internal-http-client.mjs";
22
+ export { AuthorizationMiddleware, ForceLoggedInMiddleware, ForceUserLoggedInMiddleware, INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY, OAUTH2_ISSUANCE_PATHS, RealmResolverMiddleware, createAuthorizationMiddleware, createLoggerMiddleware, createRealmResolverMiddleware, createRouteTemplateNormalizePath, createSwaggerMiddleware, isOAuth2IssuancePath, normalizeRequestPath, redactSensitiveURLParams, registerBasicMiddleware, registerCorsMiddleware, registerErrorMiddleware, registerInternalHttpClientMiddleware, registerPrometheusMiddleware, registerRateLimitMiddleware };
@@ -0,0 +1,17 @@
1
+ import type { IClient } from '@authup/core-http-kit';
2
+ import type { IApp } from 'routup';
3
+ /**
4
+ * Per-request handoff of an HTTP-client factory to the routes that call this
5
+ * server's own API. Since the consoles left, that is the console login's
6
+ * token exchange alone.
7
+ *
8
+ * The wiring passes a thunk over the DI container
9
+ * (`() => container.resolve(InternalHttpClient)`) whose registration carries
10
+ * `lifetime: 'transient'`, so every request resolves a fresh client. Never
11
+ * share one instance: the authentication hook writes per-user state onto it.
12
+ * Production binds the internal loopback client by default
13
+ * (`HTTPModule.registerInternalHttpClient`); tests may pre-register a fake.
14
+ */
15
+ export declare const INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY: unique symbol;
16
+ export declare function registerInternalHttpClientMiddleware(router: IApp, httpClientFactory: () => IClient): void;
17
+ //# sourceMappingURL=internal-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-http-client.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/internal-http-client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sCAAsC,eAAsC,CAAC;AAE1F,wBAAgB,oCAAoC,CAAC,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,OAAO,QAKlG"}
@@ -0,0 +1,27 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { defineCoreHandler } from "routup";
5
+ //#region src/adapters/http/middleware/built-in/internal-http-client.ts
6
+ /**
7
+ * Per-request handoff of an HTTP-client factory to the routes that call this
8
+ * server's own API. Since the consoles left, that is the console login's
9
+ * token exchange alone.
10
+ *
11
+ * The wiring passes a thunk over the DI container
12
+ * (`() => container.resolve(InternalHttpClient)`) whose registration carries
13
+ * `lifetime: 'transient'`, so every request resolves a fresh client. Never
14
+ * share one instance: the authentication hook writes per-user state onto it.
15
+ * Production binds the internal loopback client by default
16
+ * (`HTTPModule.registerInternalHttpClient`); tests may pre-register a fake.
17
+ */ const INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY = Symbol("InternalHttpClientFactory");
18
+ function registerInternalHttpClientMiddleware(router, httpClientFactory) {
19
+ router.use(defineCoreHandler((event) => {
20
+ event.store[INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY] = httpClientFactory;
21
+ return event.next();
22
+ }));
23
+ }
24
+ //#endregion
25
+ export { INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY, registerInternalHttpClientMiddleware };
26
+
27
+ //# sourceMappingURL=internal-http-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-http-client.mjs","names":["defineCoreHandler","INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY","Symbol","registerInternalHttpClientMiddleware","router","httpClientFactory","use","event","store","next"],"sources":["../../../../../src/adapters/http/middleware/built-in/internal-http-client.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IClient } from '@authup/core-http-kit';\nimport type { IApp } from 'routup';\nimport { defineCoreHandler } from 'routup';\n\n/**\n * Per-request handoff of an HTTP-client factory to the routes that call this\n * server's own API. Since the consoles left, that is the console login's\n * token exchange alone.\n *\n * The wiring passes a thunk over the DI container\n * (`() => container.resolve(InternalHttpClient)`) whose registration carries\n * `lifetime: 'transient'`, so every request resolves a fresh client. Never\n * share one instance: the authentication hook writes per-user state onto it.\n * Production binds the internal loopback client by default\n * (`HTTPModule.registerInternalHttpClient`); tests may pre-register a fake.\n */\nexport const INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY = Symbol('InternalHttpClientFactory');\n\nexport function registerInternalHttpClientMiddleware(router: IApp, httpClientFactory: () => IClient) {\n router.use(defineCoreHandler((event) => {\n event.store[INTERNAL_HTTP_CLIENT_FACTORY_STORE_KEY] = httpClientFactory;\n return event.next();\n }));\n}\n"],"mappings":";;;;;;;;;;;;;;;;GAuBA,MAAaC,yCAAyCC,OAAO,2BAAA;AAE7D,SAAgBC,qCAAqCC,QAAcC,mBAAgC;CAC/FD,OAAOE,IAAIN,mBAAmBO,UAAAA;EAC1BA,MAAMC,MAAMP,0CAA0CI;EACtD,OAAOE,MAAME,KAAI;CACrB,CAAA,CAAA;AACJ"}
@@ -42,7 +42,7 @@ function createLoggerMiddleware(options) {
42
42
  },
43
43
  skip(event, response) {
44
44
  const path = event.path || "";
45
- if (path.length === 0 || path === "/") return true;
45
+ if (path === "/" || path.length === 0) return true;
46
46
  if (options.env === EnvironmentName.PRODUCTION) return (response?.status ?? 0) < 400;
47
47
  return false;
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.mjs","names":["logger","getRequestIP","EnvironmentName","SENSITIVE_QUERY_PARAMS","redactSensitiveURLParams","url","queryIndex","indexOf","params","URLSearchParams","substring","redacted","name","has","set","toString","createLoggerMiddleware","options","format","tokens","event","response","method","status","join","write","line","env","TEST","http","skip","path","length","PRODUCTION"],"sources":["../../../../../src/adapters/http/middleware/built-in/logger.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { logger } from '@routup/logger';\nimport type { Handler } from 'routup';\nimport { getRequestIP } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { EnvironmentName } from '@authup/kit';\n\ntype LoggerMiddlewareOptions = {\n env: string,\n logger: Logger\n};\n\n// Query params whose values are credentials/tokens — the access log must never\n// persist them (a GET /logout?id_token_hint=<jwt> would otherwise write a\n// signature-valid token into the log).\nconst SENSITIVE_QUERY_PARAMS = [\n 'id_token_hint',\n 'id_token',\n 'access_token',\n 'refresh_token',\n 'token',\n 'code',\n 'client_secret',\n];\n\nexport function redactSensitiveURLParams(url: string): string {\n const queryIndex = url.indexOf('?');\n if (queryIndex === -1) {\n return url;\n }\n\n const params = new URLSearchParams(url.substring(queryIndex + 1));\n let redacted = false;\n for (const name of SENSITIVE_QUERY_PARAMS) {\n if (params.has(name)) {\n params.set(name, '***');\n redacted = true;\n }\n }\n\n if (!redacted) {\n return url;\n }\n\n return `${url.substring(0, queryIndex)}?${params.toString()}`;\n}\n\nexport function createLoggerMiddleware(options: LoggerMiddlewareOptions) : Handler {\n return logger({\n format: (tokens, event, response) => [\n getRequestIP(event) || '-',\n '-',\n tokens.method(event, response) ?? '-',\n redactSensitiveURLParams(tokens.url(event, response) ?? '-'),\n tokens.status(event, response) ?? '-',\n '-',\n tokens['response-time'](event, response) ?? '-',\n ].join(' '),\n write(line) {\n if (options.env !== EnvironmentName.TEST) {\n options.logger.http(line);\n }\n },\n skip(event, response): boolean {\n const path = event.path || '';\n if (path.length === 0 || path === '/') {\n return true;\n }\n\n if (options.env === EnvironmentName.PRODUCTION) {\n return (response?.status ?? 0) < 400;\n }\n\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;AAqBA,MAAMG,yBAAyB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;AACH;AAED,SAAgBC,yBAAyBC,KAAW;CAChD,MAAMC,aAAaD,IAAIE,QAAQ,GAAA;CAC/B,IAAID,eAAe,IACf,OAAOD;CAGX,MAAMG,SAAS,IAAIC,gBAAgBJ,IAAIK,UAAUJ,aAAa,CAAA,CAAA;CAC9D,IAAIK,WAAW;CACf,KAAK,MAAMC,QAAQT,wBACf,IAAIK,OAAOK,IAAID,IAAAA,GAAO;EAClBJ,OAAOM,IAAIF,MAAM,KAAA;EACjBD,WAAW;CACf;CAGJ,IAAI,CAACA,UACD,OAAON;CAGX,OAAO,GAAGA,IAAIK,UAAU,GAAGJ,UAAAA,EAAY,GAAGE,OAAOO,SAAQ;AAC7D;AAEA,SAAgBC,uBAAuBC,SAAgC;CACnE,OAAOjB,OAAO;EACVkB,SAASC,QAAQC,OAAOC,aAAa;GACjCpB,aAAamB,KAAAA,KAAU;GACvB;GACAD,OAAOG,OAAOF,OAAOC,QAAAA,KAAa;GAClCjB,yBAAyBe,OAAOd,IAAIe,OAAOC,QAAAA,KAAa,GAAA;GACxDF,OAAOI,OAAOH,OAAOC,QAAAA,KAAa;GAClC;GACAF,OAAO,gBAAgB,CAACC,OAAOC,QAAAA,KAAa;EAC/C,CAAA,CAACG,KAAK,GAAA;EACPC,MAAMC,MAAI;GACN,IAAIT,QAAQU,QAAQzB,gBAAgB0B,MAChCX,QAAQjB,OAAO6B,KAAKH,IAAAA;EAE5B;EACAI,KAAKV,OAAOC,UAAQ;GAChB,MAAMU,OAAOX,MAAMW,QAAQ;GAC3B,IAAIA,KAAKC,WAAW,KAAKD,SAAS,KAC9B,OAAO;GAGX,IAAId,QAAQU,QAAQzB,gBAAgB+B,YAChC,QAAQZ,UAAUE,UAAU,KAAK;GAGrC,OAAO;EACX;CACJ,CAAA;AACJ"}
1
+ {"version":3,"file":"logger.mjs","names":["logger","getRequestIP","EnvironmentName","SENSITIVE_QUERY_PARAMS","redactSensitiveURLParams","url","queryIndex","indexOf","params","URLSearchParams","substring","redacted","name","has","set","toString","createLoggerMiddleware","options","format","tokens","event","response","method","status","join","write","line","env","TEST","http","skip","path","length","PRODUCTION"],"sources":["../../../../../src/adapters/http/middleware/built-in/logger.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { logger } from '@routup/logger';\nimport type { Handler } from 'routup';\nimport { getRequestIP } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { EnvironmentName } from '@authup/kit';\n\ntype LoggerMiddlewareOptions = {\n env: string,\n logger: Logger\n};\n\n// Query params whose values are credentials/tokens — the access log must never\n// persist them (a GET /logout?id_token_hint=<jwt> would otherwise write a\n// signature-valid token into the log).\nconst SENSITIVE_QUERY_PARAMS = [\n 'id_token_hint',\n 'id_token',\n 'access_token',\n 'refresh_token',\n 'token',\n 'code',\n 'client_secret',\n];\n\nexport function redactSensitiveURLParams(url: string): string {\n const queryIndex = url.indexOf('?');\n if (queryIndex === -1) {\n return url;\n }\n\n const params = new URLSearchParams(url.substring(queryIndex + 1));\n let redacted = false;\n for (const name of SENSITIVE_QUERY_PARAMS) {\n if (params.has(name)) {\n params.set(name, '***');\n redacted = true;\n }\n }\n\n if (!redacted) {\n return url;\n }\n\n return `${url.substring(0, queryIndex)}?${params.toString()}`;\n}\n\nexport function createLoggerMiddleware(options: LoggerMiddlewareOptions) : Handler {\n return logger({\n format: (tokens, event, response) => [\n getRequestIP(event) || '-',\n '-',\n tokens.method(event, response) ?? '-',\n redactSensitiveURLParams(tokens.url(event, response) ?? '-'),\n tokens.status(event, response) ?? '-',\n '-',\n tokens['response-time'](event, response) ?? '-',\n ].join(' '),\n write(line) {\n if (options.env !== EnvironmentName.TEST) {\n options.logger.http(line);\n }\n },\n skip(event, response): boolean {\n const path = event.path || '';\n if (path === '/' || path.length === 0) {\n return true;\n }\n\n if (options.env === EnvironmentName.PRODUCTION) {\n return (response?.status ?? 0) < 400;\n }\n\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;AAqBA,MAAMG,yBAAyB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;AACH;AAED,SAAgBC,yBAAyBC,KAAW;CAChD,MAAMC,aAAaD,IAAIE,QAAQ,GAAA;CAC/B,IAAID,eAAe,IACf,OAAOD;CAGX,MAAMG,SAAS,IAAIC,gBAAgBJ,IAAIK,UAAUJ,aAAa,CAAA,CAAA;CAC9D,IAAIK,WAAW;CACf,KAAK,MAAMC,QAAQT,wBACf,IAAIK,OAAOK,IAAID,IAAAA,GAAO;EAClBJ,OAAOM,IAAIF,MAAM,KAAA;EACjBD,WAAW;CACf;CAGJ,IAAI,CAACA,UACD,OAAON;CAGX,OAAO,GAAGA,IAAIK,UAAU,GAAGJ,UAAAA,EAAY,GAAGE,OAAOO,SAAQ;AAC7D;AAEA,SAAgBC,uBAAuBC,SAAgC;CACnE,OAAOjB,OAAO;EACVkB,SAASC,QAAQC,OAAOC,aAAa;GACjCpB,aAAamB,KAAAA,KAAU;GACvB;GACAD,OAAOG,OAAOF,OAAOC,QAAAA,KAAa;GAClCjB,yBAAyBe,OAAOd,IAAIe,OAAOC,QAAAA,KAAa,GAAA;GACxDF,OAAOI,OAAOH,OAAOC,QAAAA,KAAa;GAClC;GACAF,OAAO,gBAAgB,CAACC,OAAOC,QAAAA,KAAa;EAC/C,CAAA,CAACG,KAAK,GAAA;EACPC,MAAMC,MAAI;GACN,IAAIT,QAAQU,QAAQzB,gBAAgB0B,MAChCX,QAAQjB,OAAO6B,KAAKH,IAAAA;EAE5B;EACAI,KAAKV,OAAOC,UAAQ;GAChB,MAAMU,OAAOX,MAAMW,QAAQ;GAC3B,IAAIA,SAAS,OAAOA,KAAKC,WAAW,GAChC,OAAO;GAGX,IAAIf,QAAQU,QAAQzB,gBAAgB+B,YAChC,QAAQZ,UAAUE,UAAU,KAAK;GAGrC,OAAO;EACX;CACJ,CAAA;AACJ"}
@@ -1,5 +1,5 @@
1
1
  import type { OptionsInput } from '@routup/prometheus';
2
- import type { App, IAppEvent } from 'routup';
2
+ import type { IApp, IAppEvent } from 'routup';
3
3
  /**
4
4
  * The `path` label must stay bounded: labeling by the raw request path lets
5
5
  * every probed id (`/users/<random-uuid>`, even on 401/404) mint a new
@@ -7,9 +7,10 @@ import type { App, IAppEvent } from 'routup';
7
7
  * labeled by the registered route template (`/users/:id`), read from the
8
8
  * router's own route table (child apps are flattened into the root with full
9
9
  * patterns, and all routes are registered before `listen`, so a snapshot at
10
- * first request is complete). Method-agnostic mounts (`/docs`, `/public`)
11
- * label as `<mount>/**`; anything else collapses into one unmatched bucket.
10
+ * first request is complete). Method-agnostic mounts (`/docs`,
11
+ * `/console/auth/assets`) label as `<mount>/**`; anything else collapses into
12
+ * one unmatched bucket.
12
13
  */
13
- export declare function createRouteTemplateNormalizePath(router: App): (path: string, event: IAppEvent) => string;
14
- export declare function registerPrometheusMiddleware(router: App, input?: OptionsInput): void;
14
+ export declare function createRouteTemplateNormalizePath(router: IApp): (path: string, event: IAppEvent) => string;
15
+ export declare function registerPrometheusMiddleware(router: IApp, input?: OptionsInput): void;
15
16
  //# sourceMappingURL=prometheus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prometheus.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/prometheus.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAmF7C;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAC5C,MAAM,EAAE,GAAG,GACZ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,CAsC5C;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,YAAY,QAsB7E"}
1
+ {"version":3,"file":"prometheus.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/prometheus.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAmF9C;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAC5C,MAAM,EAAE,IAAI,GACb,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,CAsC5C;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,YAAY,QAsB9E"}