@authup/server-core 1.0.0-beta.62 → 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 (769) 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 +9 -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 +14 -0
  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/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  43. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +8 -2
  44. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  45. package/dist/adapters/http/constants.d.ts +18 -0
  46. package/dist/adapters/http/constants.d.ts.map +1 -0
  47. package/dist/adapters/http/constants.mjs +23 -0
  48. package/dist/adapters/http/constants.mjs.map +1 -0
  49. package/dist/adapters/http/controllers/entities/client/module.mjs +1 -1
  50. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +23 -1
  51. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  52. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +86 -47
  53. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  54. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +6 -0
  55. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
  56. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  57. package/dist/adapters/http/controllers/entities/realm/module.mjs +2 -0
  58. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  59. package/dist/adapters/http/controllers/entities/session/module.d.ts +33 -1
  60. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
  61. package/dist/adapters/http/controllers/entities/session/module.mjs +74 -0
  62. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  63. package/dist/adapters/http/controllers/index.mjs +3 -1
  64. package/dist/adapters/http/controllers/workflows/account/index.d.ts +1 -0
  65. package/dist/adapters/http/controllers/workflows/account/index.d.ts.map +1 -1
  66. package/dist/adapters/http/controllers/workflows/account/module.d.ts +25 -16
  67. package/dist/adapters/http/controllers/workflows/account/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/workflows/account/module.mjs +40 -17
  69. package/dist/adapters/http/controllers/workflows/account/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/workflows/account/types.d.ts +33 -0
  71. package/dist/adapters/http/controllers/workflows/account/types.d.ts.map +1 -0
  72. package/dist/adapters/http/controllers/workflows/activate/module.d.ts +8 -4
  73. package/dist/adapters/http/controllers/workflows/activate/module.d.ts.map +1 -1
  74. package/dist/adapters/http/controllers/workflows/activate/module.mjs +7 -9
  75. package/dist/adapters/http/controllers/workflows/activate/module.mjs.map +1 -1
  76. package/dist/adapters/http/controllers/workflows/admin/index.d.ts.map +1 -0
  77. package/dist/adapters/http/controllers/workflows/admin/index.mjs +5 -0
  78. package/dist/adapters/http/controllers/workflows/admin/module.d.ts +30 -0
  79. package/dist/adapters/http/controllers/workflows/admin/module.d.ts.map +1 -0
  80. package/dist/adapters/http/controllers/workflows/admin/module.mjs +88 -0
  81. package/dist/adapters/http/controllers/workflows/admin/module.mjs.map +1 -0
  82. package/dist/adapters/http/controllers/workflows/admin/types.d.ts +14 -0
  83. package/dist/adapters/http/controllers/workflows/admin/types.d.ts.map +1 -0
  84. package/dist/adapters/http/controllers/workflows/auth-console.d.ts +16 -0
  85. package/dist/adapters/http/controllers/workflows/auth-console.d.ts.map +1 -0
  86. package/dist/adapters/http/controllers/workflows/auth-console.mjs +32 -0
  87. package/dist/adapters/http/controllers/workflows/auth-console.mjs.map +1 -0
  88. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts +2 -0
  89. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts.map +1 -1
  90. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +21 -3
  91. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  92. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts +16 -1
  93. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  94. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +44 -21
  95. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  96. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +5 -0
  97. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
  98. package/dist/adapters/http/controllers/workflows/console-login/index.d.ts +3 -0
  99. package/dist/adapters/http/controllers/workflows/console-login/index.d.ts.map +1 -0
  100. package/dist/adapters/http/controllers/workflows/console-login/index.mjs +5 -0
  101. package/dist/adapters/http/controllers/workflows/console-login/module.d.ts +83 -0
  102. package/dist/adapters/http/controllers/workflows/console-login/module.d.ts.map +1 -0
  103. package/dist/adapters/http/controllers/workflows/console-login/module.mjs +230 -0
  104. package/dist/adapters/http/controllers/workflows/console-login/module.mjs.map +1 -0
  105. package/dist/adapters/http/controllers/workflows/console-login/types.d.ts +58 -0
  106. package/dist/adapters/http/controllers/workflows/console-login/types.d.ts.map +1 -0
  107. package/dist/adapters/http/controllers/workflows/index.d.ts +2 -0
  108. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  109. package/dist/adapters/http/controllers/workflows/index.mjs +5 -1
  110. package/dist/adapters/http/controllers/workflows/logout/module.d.ts +32 -3
  111. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
  112. package/dist/adapters/http/controllers/workflows/logout/module.mjs +48 -24
  113. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  114. package/dist/adapters/http/controllers/workflows/logout/types.d.ts +1 -1
  115. package/dist/adapters/http/controllers/workflows/logout/types.d.ts.map +1 -1
  116. package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts +8 -4
  117. package/dist/adapters/http/controllers/workflows/password-forgot/module.d.ts.map +1 -1
  118. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +7 -9
  119. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts +8 -4
  121. package/dist/adapters/http/controllers/workflows/password-reset/module.d.ts.map +1 -1
  122. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +7 -10
  123. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs.map +1 -1
  124. package/dist/adapters/http/controllers/workflows/register/module.d.ts +8 -4
  125. package/dist/adapters/http/controllers/workflows/register/module.d.ts.map +1 -1
  126. package/dist/adapters/http/controllers/workflows/register/module.mjs +7 -9
  127. package/dist/adapters/http/controllers/workflows/register/module.mjs.map +1 -1
  128. package/dist/adapters/http/controllers/workflows/status/module.mjs +1 -1
  129. package/dist/adapters/http/controllers/workflows/token/module.d.ts +45 -2
  130. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  131. package/dist/adapters/http/controllers/workflows/token/module.mjs +117 -26
  132. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  133. package/dist/adapters/http/cookie/index.d.ts +2 -0
  134. package/dist/adapters/http/cookie/index.d.ts.map +1 -0
  135. package/dist/adapters/http/cookie/index.mjs +5 -0
  136. package/dist/adapters/http/cookie/session.d.ts +35 -0
  137. package/dist/adapters/http/cookie/session.d.ts.map +1 -0
  138. package/dist/adapters/http/cookie/session.mjs +62 -0
  139. package/dist/adapters/http/cookie/session.mjs.map +1 -0
  140. package/dist/adapters/http/index.d.ts +2 -0
  141. package/dist/adapters/http/index.d.ts.map +1 -1
  142. package/dist/adapters/http/index.mjs +20 -16
  143. package/dist/adapters/http/internal-client/index.d.ts +3 -0
  144. package/dist/adapters/http/internal-client/index.d.ts.map +1 -0
  145. package/dist/adapters/http/internal-client/index.mjs +5 -0
  146. package/dist/adapters/http/internal-client/module.d.ts +21 -0
  147. package/dist/adapters/http/internal-client/module.d.ts.map +1 -0
  148. package/dist/adapters/http/{ui/auth-console/http-client.mjs → internal-client/module.mjs} +16 -15
  149. package/dist/adapters/http/internal-client/module.mjs.map +1 -0
  150. package/dist/adapters/http/internal-client/types.d.ts +13 -0
  151. package/dist/adapters/http/internal-client/types.d.ts.map +1 -0
  152. package/dist/adapters/http/middleware/built-in/authorization/index.d.ts +1 -0
  153. package/dist/adapters/http/middleware/built-in/authorization/index.d.ts.map +1 -1
  154. package/dist/adapters/http/middleware/built-in/authorization/index.mjs +2 -1
  155. package/dist/adapters/http/middleware/built-in/authorization/issuance.d.ts +45 -0
  156. package/dist/adapters/http/middleware/built-in/authorization/issuance.d.ts.map +1 -0
  157. package/dist/adapters/http/middleware/built-in/authorization/issuance.mjs +61 -0
  158. package/dist/adapters/http/middleware/built-in/authorization/issuance.mjs.map +1 -0
  159. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +26 -2
  160. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  161. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +67 -1
  162. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  163. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +21 -1
  164. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.map +1 -1
  165. package/dist/adapters/http/middleware/built-in/basic.d.ts +2 -2
  166. package/dist/adapters/http/middleware/built-in/basic.d.ts.map +1 -1
  167. package/dist/adapters/http/middleware/built-in/basic.mjs.map +1 -1
  168. package/dist/adapters/http/middleware/built-in/cors.d.ts +8 -2
  169. package/dist/adapters/http/middleware/built-in/cors.d.ts.map +1 -1
  170. package/dist/adapters/http/middleware/built-in/cors.mjs +20 -3
  171. package/dist/adapters/http/middleware/built-in/cors.mjs.map +1 -1
  172. package/dist/adapters/http/middleware/built-in/error.d.ts +2 -2
  173. package/dist/adapters/http/middleware/built-in/error.d.ts.map +1 -1
  174. package/dist/adapters/http/middleware/built-in/error.mjs +10 -1
  175. package/dist/adapters/http/middleware/built-in/error.mjs.map +1 -1
  176. package/dist/adapters/http/middleware/built-in/index.d.ts +1 -4
  177. package/dist/adapters/http/middleware/built-in/index.d.ts.map +1 -1
  178. package/dist/adapters/http/middleware/built-in/index.mjs +3 -4
  179. package/dist/adapters/http/middleware/built-in/internal-http-client.d.ts +17 -0
  180. package/dist/adapters/http/middleware/built-in/internal-http-client.d.ts.map +1 -0
  181. package/dist/adapters/http/middleware/built-in/internal-http-client.mjs +27 -0
  182. package/dist/adapters/http/middleware/built-in/internal-http-client.mjs.map +1 -0
  183. package/dist/adapters/http/middleware/built-in/logger.mjs +1 -1
  184. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  185. package/dist/adapters/http/middleware/built-in/prometheus.d.ts +6 -5
  186. package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
  187. package/dist/adapters/http/middleware/built-in/prometheus.mjs +3 -2
  188. package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
  189. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts +2 -2
  190. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  191. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +15 -0
  192. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  193. package/dist/adapters/http/middleware/index.mjs +3 -4
  194. package/dist/adapters/http/request/constants.d.ts +1 -1
  195. package/dist/adapters/http/request/constants.d.ts.map +1 -1
  196. package/dist/adapters/http/request/constants.mjs +1 -5
  197. package/dist/adapters/http/request/constants.mjs.map +1 -1
  198. package/dist/adapters/http/request/helpers/index.d.ts +1 -1
  199. package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
  200. package/dist/adapters/http/request/helpers/index.mjs +2 -2
  201. package/dist/adapters/http/request/helpers/locale.d.ts +2 -1
  202. package/dist/adapters/http/request/helpers/locale.d.ts.map +1 -1
  203. package/dist/adapters/http/request/helpers/locale.mjs +1 -1
  204. package/dist/adapters/http/request/helpers/locale.mjs.map +1 -1
  205. package/dist/adapters/http/request/helpers/same-origin.d.ts +38 -0
  206. package/dist/adapters/http/request/helpers/same-origin.d.ts.map +1 -0
  207. package/dist/adapters/http/request/helpers/same-origin.mjs +68 -0
  208. package/dist/adapters/http/request/helpers/same-origin.mjs.map +1 -0
  209. package/dist/adapters/http/request/index.mjs +2 -2
  210. package/dist/adapters/http/request/permission/module.mjs +1 -1
  211. package/dist/adapters/http/request/permission/module.mjs.map +1 -1
  212. package/dist/adapters/http/request/types.d.ts +1 -2
  213. package/dist/adapters/http/request/types.d.ts.map +1 -1
  214. package/dist/adapters/shared/ldap/module.d.ts.map +1 -1
  215. package/dist/adapters/shared/ldap/module.mjs +4 -1
  216. package/dist/adapters/shared/ldap/module.mjs.map +1 -1
  217. package/dist/app/builder.d.ts +4 -4
  218. package/dist/app/builder.d.ts.map +1 -1
  219. package/dist/app/builder.mjs +7 -4
  220. package/dist/app/builder.mjs.map +1 -1
  221. package/dist/app/factory.d.ts +10 -0
  222. package/dist/app/factory.d.ts.map +1 -1
  223. package/dist/app/factory.mjs +26 -2
  224. package/dist/app/factory.mjs.map +1 -1
  225. package/dist/app/index.mjs +17 -19
  226. package/dist/app/modules/authentication/module.d.ts.map +1 -1
  227. package/dist/app/modules/authentication/module.mjs +15 -2
  228. package/dist/app/modules/authentication/module.mjs.map +1 -1
  229. package/dist/app/modules/authentication/repositories/session.d.ts +4 -1
  230. package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
  231. package/dist/app/modules/authentication/repositories/session.mjs +20 -3
  232. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  233. package/dist/app/modules/components/index.d.ts +1 -0
  234. package/dist/app/modules/components/index.d.ts.map +1 -1
  235. package/dist/app/modules/components/module.d.ts +3 -1
  236. package/dist/app/modules/components/module.d.ts.map +1 -1
  237. package/dist/app/modules/components/module.mjs +26 -7
  238. package/dist/app/modules/components/module.mjs.map +1 -1
  239. package/dist/app/modules/components/types.d.ts +11 -0
  240. package/dist/app/modules/components/types.d.ts.map +1 -0
  241. package/dist/app/modules/config/app-origins.d.ts +10 -0
  242. package/dist/app/modules/config/app-origins.d.ts.map +1 -0
  243. package/dist/app/modules/config/app-origins.mjs +21 -0
  244. package/dist/app/modules/config/app-origins.mjs.map +1 -0
  245. package/dist/app/modules/config/constants.d.ts +23 -50
  246. package/dist/app/modules/config/constants.d.ts.map +1 -1
  247. package/dist/app/modules/config/constants.mjs +34 -51
  248. package/dist/app/modules/config/constants.mjs.map +1 -1
  249. package/dist/app/modules/config/index.d.ts +2 -3
  250. package/dist/app/modules/config/index.d.ts.map +1 -1
  251. package/dist/app/modules/config/index.mjs +4 -8
  252. package/dist/app/modules/config/module.d.ts +2 -2
  253. package/dist/app/modules/config/module.d.ts.map +1 -1
  254. package/dist/app/modules/config/module.mjs +1 -1
  255. package/dist/app/modules/config/module.mjs.map +1 -1
  256. package/dist/app/modules/config/read.d.ts +29 -0
  257. package/dist/app/modules/config/read.d.ts.map +1 -0
  258. package/dist/app/modules/config/read.mjs +65 -0
  259. package/dist/app/modules/config/read.mjs.map +1 -0
  260. package/dist/app/modules/config/types.d.ts +30 -397
  261. package/dist/app/modules/config/types.d.ts.map +1 -1
  262. package/dist/app/modules/config/validator.d.ts.map +1 -1
  263. package/dist/app/modules/config/validator.mjs +3 -87
  264. package/dist/app/modules/config/validator.mjs.map +1 -1
  265. package/dist/app/modules/database/index.d.ts +1 -0
  266. package/dist/app/modules/database/index.d.ts.map +1 -1
  267. package/dist/app/modules/database/index.mjs +2 -1
  268. package/dist/app/modules/database/migration.d.ts +33 -0
  269. package/dist/app/modules/database/migration.d.ts.map +1 -0
  270. package/dist/app/modules/database/migration.mjs +52 -0
  271. package/dist/app/modules/database/migration.mjs.map +1 -0
  272. package/dist/app/modules/database/module.d.ts.map +1 -1
  273. package/dist/app/modules/database/module.mjs +12 -6
  274. package/dist/app/modules/database/module.mjs.map +1 -1
  275. package/dist/app/modules/database/repositories/client/repository.d.ts +6 -1
  276. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  277. package/dist/app/modules/database/repositories/client/repository.mjs +21 -4
  278. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  279. package/dist/app/modules/database/repositories/event/repository.d.ts +29 -2
  280. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  281. package/dist/app/modules/database/repositories/event/repository.mjs +42 -24
  282. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  283. package/dist/app/modules/database/repositories/helpers.d.ts +24 -1
  284. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  285. package/dist/app/modules/database/repositories/helpers.mjs +38 -1
  286. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  287. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts +3 -1
  288. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
  289. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +3 -3
  290. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  291. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs +4 -2
  292. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs.map +1 -1
  293. package/dist/app/modules/database/repositories/key/repository.mjs +1 -1
  294. package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
  295. package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
  296. package/dist/app/modules/database/repositories/role/repository.mjs +1 -1
  297. package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
  298. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +1 -1
  299. package/dist/app/modules/database/repositories/user/repository.d.ts +7 -2
  300. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  301. package/dist/app/modules/database/repositories/user/repository.mjs +21 -4
  302. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  303. package/dist/app/modules/http/constants.d.ts +3 -1
  304. package/dist/app/modules/http/constants.d.ts.map +1 -1
  305. package/dist/app/modules/http/constants.mjs +3 -2
  306. package/dist/app/modules/http/constants.mjs.map +1 -1
  307. package/dist/app/modules/http/module.d.ts +30 -9
  308. package/dist/app/modules/http/module.d.ts.map +1 -1
  309. package/dist/app/modules/http/module.mjs +31 -33
  310. package/dist/app/modules/http/module.mjs.map +1 -1
  311. package/dist/app/modules/http/modules/controller.d.ts +4 -3
  312. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  313. package/dist/app/modules/http/modules/controller.mjs +70 -38
  314. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  315. package/dist/app/modules/http/modules/middleware.d.ts +13 -22
  316. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  317. package/dist/app/modules/http/modules/middleware.mjs +20 -36
  318. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  319. package/dist/app/modules/identity/module.mjs +4 -4
  320. package/dist/app/modules/identity/repositories/client.mjs +4 -2
  321. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  322. package/dist/app/modules/identity/repositories/user.mjs +4 -2
  323. package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
  324. package/dist/app/modules/index.mjs +21 -23
  325. package/dist/app/modules/logger/module.mjs +1 -1
  326. package/dist/app/modules/logger/module.mjs.map +1 -1
  327. package/dist/app/modules/mail/module.d.ts.map +1 -1
  328. package/dist/app/modules/mail/module.mjs.map +1 -1
  329. package/dist/app/modules/oauth2/constants.d.ts +3 -1
  330. package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
  331. package/dist/app/modules/oauth2/constants.mjs +2 -0
  332. package/dist/app/modules/oauth2/constants.mjs.map +1 -1
  333. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  334. package/dist/app/modules/oauth2/module.mjs +14 -4
  335. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  336. package/dist/app/modules/oauth2/repositories/client/repository.mjs +4 -2
  337. package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
  338. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -1
  339. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +3 -2
  340. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  341. package/dist/app/modules/oauth2/repositories/console-login/index.d.ts +2 -0
  342. package/dist/app/modules/oauth2/repositories/console-login/index.d.ts.map +1 -0
  343. package/dist/app/modules/oauth2/repositories/console-login/index.mjs +5 -0
  344. package/dist/app/modules/oauth2/repositories/console-login/store.d.ts +19 -0
  345. package/dist/app/modules/oauth2/repositories/console-login/store.d.ts.map +1 -0
  346. package/dist/app/modules/oauth2/repositories/console-login/store.mjs +47 -0
  347. package/dist/app/modules/oauth2/repositories/console-login/store.mjs.map +1 -0
  348. package/dist/app/modules/oauth2/repositories/constants.d.ts +2 -0
  349. package/dist/app/modules/oauth2/repositories/constants.d.ts.map +1 -1
  350. package/dist/app/modules/oauth2/repositories/constants.mjs +2 -0
  351. package/dist/app/modules/oauth2/repositories/constants.mjs.map +1 -1
  352. package/dist/app/modules/oauth2/repositories/federated-login/index.d.ts +2 -0
  353. package/dist/app/modules/oauth2/repositories/federated-login/index.d.ts.map +1 -0
  354. package/dist/app/modules/oauth2/repositories/federated-login/index.mjs +5 -0
  355. package/dist/app/modules/oauth2/repositories/federated-login/store.d.ts +9 -0
  356. package/dist/app/modules/oauth2/repositories/federated-login/store.d.ts.map +1 -0
  357. package/dist/app/modules/oauth2/repositories/federated-login/store.mjs +33 -0
  358. package/dist/app/modules/oauth2/repositories/federated-login/store.mjs.map +1 -0
  359. package/dist/app/modules/oauth2/repositories/index.d.ts +2 -0
  360. package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
  361. package/dist/app/modules/oauth2/repositories/index.mjs +5 -1
  362. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +2 -2
  363. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -1
  364. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +5 -3
  365. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
  366. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  367. package/dist/app/modules/provisioning/module.mjs +5 -6
  368. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  369. package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
  370. package/dist/app/modules/provisioning/sources/composite/module.mjs +2 -1
  371. package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
  372. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  373. package/dist/app/modules/provisioning/sources/default/module.mjs +2 -1
  374. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  375. package/dist/app/modules/runtime/module.d.ts.map +1 -1
  376. package/dist/app/modules/runtime/module.mjs +2 -1
  377. package/dist/app/modules/runtime/module.mjs.map +1 -1
  378. package/dist/app/types.d.ts +16 -0
  379. package/dist/app/types.d.ts.map +1 -1
  380. package/dist/cli/commands/config.d.ts +40 -0
  381. package/dist/cli/commands/config.d.ts.map +1 -0
  382. package/dist/cli/commands/config.mjs +65 -0
  383. package/dist/cli/commands/config.mjs.map +1 -0
  384. package/dist/cli/commands/healthcheck.d.ts +3 -2
  385. package/dist/cli/commands/healthcheck.d.ts.map +1 -1
  386. package/dist/cli/commands/healthcheck.mjs +6 -3
  387. package/dist/cli/commands/healthcheck.mjs.map +1 -1
  388. package/dist/cli/commands/index.d.ts +3 -0
  389. package/dist/cli/commands/index.d.ts.map +1 -1
  390. package/dist/cli/commands/index.mjs +3 -1
  391. package/dist/cli/commands/migration.d.ts +3 -10
  392. package/dist/cli/commands/migration.d.ts.map +1 -1
  393. package/dist/cli/commands/migration.mjs +17 -9
  394. package/dist/cli/commands/migration.mjs.map +1 -1
  395. package/dist/cli/commands/shutdown.d.ts +16 -0
  396. package/dist/cli/commands/shutdown.d.ts.map +1 -0
  397. package/dist/cli/commands/shutdown.mjs +41 -0
  398. package/dist/cli/commands/shutdown.mjs.map +1 -0
  399. package/dist/cli/commands/start.d.ts +3 -2
  400. package/dist/cli/commands/start.d.ts.map +1 -1
  401. package/dist/cli/commands/start.mjs +3 -21
  402. package/dist/cli/commands/start.mjs.map +1 -1
  403. package/dist/cli/commands/types.d.ts.map +1 -0
  404. package/dist/cli/index.d.ts +8 -0
  405. package/dist/cli/index.d.ts.map +1 -1
  406. package/dist/cli/index.mjs.map +1 -1
  407. package/dist/cli/module.d.ts +0 -2
  408. package/dist/cli/module.d.ts.map +1 -1
  409. package/dist/cli/module.mjs +4 -3
  410. package/dist/cli/module.mjs.map +1 -1
  411. package/dist/components/oauth2-cleaner/module.d.ts +2 -2
  412. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  413. package/dist/components/oauth2-cleaner/module.mjs +10 -7
  414. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  415. package/dist/core/authentication/index.mjs +2 -1
  416. package/dist/core/authentication/session/constants.d.ts +10 -0
  417. package/dist/core/authentication/session/constants.d.ts.map +1 -0
  418. package/dist/core/authentication/session/constants.mjs +16 -0
  419. package/dist/core/authentication/session/constants.mjs.map +1 -0
  420. package/dist/core/authentication/session/index.d.ts +1 -0
  421. package/dist/core/authentication/session/index.d.ts.map +1 -1
  422. package/dist/core/authentication/session/index.mjs +2 -1
  423. package/dist/core/authentication/session/module.d.ts +2 -1
  424. package/dist/core/authentication/session/module.d.ts.map +1 -1
  425. package/dist/core/authentication/session/module.mjs +7 -1
  426. package/dist/core/authentication/session/module.mjs.map +1 -1
  427. package/dist/core/authentication/session/types.d.ts +70 -1
  428. package/dist/core/authentication/session/types.d.ts.map +1 -1
  429. package/dist/core/authentication/session/types.mjs.map +1 -1
  430. package/dist/core/entities/client/schema.d.ts.map +1 -1
  431. package/dist/core/entities/client/schema.mjs +1 -2
  432. package/dist/core/entities/client/schema.mjs.map +1 -1
  433. package/dist/core/entities/client/service.d.ts.map +1 -1
  434. package/dist/core/entities/client/service.mjs +15 -1
  435. package/dist/core/entities/client/service.mjs.map +1 -1
  436. package/dist/core/entities/client/system-clients.d.ts +0 -5
  437. package/dist/core/entities/client/system-clients.d.ts.map +1 -1
  438. package/dist/core/entities/client/system-clients.mjs +0 -6
  439. package/dist/core/entities/client/system-clients.mjs.map +1 -1
  440. package/dist/core/entities/client/types.d.ts +12 -0
  441. package/dist/core/entities/client/types.d.ts.map +1 -1
  442. package/dist/core/entities/client-permission/service.mjs +1 -1
  443. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  444. package/dist/core/entities/event/constants.d.ts +1 -6
  445. package/dist/core/entities/event/constants.d.ts.map +1 -1
  446. package/dist/core/entities/event/constants.mjs +1 -5
  447. package/dist/core/entities/event/constants.mjs.map +1 -1
  448. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
  449. package/dist/core/entities/event/entity-event-handler.mjs +17 -3
  450. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
  451. package/dist/core/entities/event/service.d.ts.map +1 -1
  452. package/dist/core/entities/event/service.mjs +3 -3
  453. package/dist/core/entities/event/service.mjs.map +1 -1
  454. package/dist/core/entities/event/types.d.ts +15 -1
  455. package/dist/core/entities/event/types.d.ts.map +1 -1
  456. package/dist/core/entities/identity-provider/types.d.ts +9 -1
  457. package/dist/core/entities/identity-provider/types.d.ts.map +1 -1
  458. package/dist/core/entities/permission/service.mjs +1 -2
  459. package/dist/core/entities/permission/service.mjs.map +1 -1
  460. package/dist/core/entities/role-permission/service.mjs +1 -1
  461. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  462. package/dist/core/entities/session/service.d.ts +13 -1
  463. package/dist/core/entities/session/service.d.ts.map +1 -1
  464. package/dist/core/entities/session/service.mjs +19 -16
  465. package/dist/core/entities/session/service.mjs.map +1 -1
  466. package/dist/core/entities/user/schema.d.ts.map +1 -1
  467. package/dist/core/entities/user/schema.mjs +1 -0
  468. package/dist/core/entities/user/schema.mjs.map +1 -1
  469. package/dist/core/entities/user/service.d.ts.map +1 -1
  470. package/dist/core/entities/user/service.mjs +21 -1
  471. package/dist/core/entities/user/service.mjs.map +1 -1
  472. package/dist/core/entities/user/types.d.ts +12 -0
  473. package/dist/core/entities/user/types.d.ts.map +1 -1
  474. package/dist/core/entities/user-permission/service.mjs +1 -1
  475. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  476. package/dist/core/identity/index.mjs +2 -1
  477. package/dist/core/identity/permission/junction-grant.mjs +1 -1
  478. package/dist/core/identity/permission/junction-grant.mjs.map +1 -1
  479. package/dist/core/identity/provider/account/module.mjs +2 -2
  480. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  481. package/dist/core/identity/provider/authentication/index.mjs +2 -1
  482. package/dist/core/identity/provider/authentication/protocols/index.mjs +2 -1
  483. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.d.ts +46 -0
  484. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.d.ts.map +1 -0
  485. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.mjs +89 -0
  486. package/dist/core/identity/provider/authentication/protocols/oauth2/assurance.mjs.map +1 -0
  487. package/dist/core/identity/provider/authentication/protocols/oauth2/index.d.ts +1 -0
  488. package/dist/core/identity/provider/authentication/protocols/oauth2/index.d.ts.map +1 -1
  489. package/dist/core/identity/provider/authentication/protocols/oauth2/index.mjs +2 -1
  490. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts.map +1 -1
  491. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +9 -2
  492. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  493. package/dist/core/identity/provider/index.mjs +2 -1
  494. package/dist/core/identity/registration/service.d.ts.map +1 -1
  495. package/dist/core/identity/registration/service.mjs +2 -1
  496. package/dist/core/identity/registration/service.mjs.map +1 -1
  497. package/dist/core/index.mjs +14 -4
  498. package/dist/core/oauth2/authorization/helpers.d.ts +14 -0
  499. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  500. package/dist/core/oauth2/authorization/helpers.mjs +15 -2
  501. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  502. package/dist/core/oauth2/authorization/index.mjs +2 -2
  503. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  504. package/dist/core/oauth2/authorization/module.mjs +6 -4
  505. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  506. package/dist/core/oauth2/authorization/state/types.d.ts +8 -0
  507. package/dist/core/oauth2/authorization/state/types.d.ts.map +1 -1
  508. package/dist/core/oauth2/backchannel-logout/constants.d.ts +16 -0
  509. package/dist/core/oauth2/backchannel-logout/constants.d.ts.map +1 -0
  510. package/dist/core/oauth2/backchannel-logout/constants.mjs +20 -0
  511. package/dist/core/oauth2/backchannel-logout/constants.mjs.map +1 -0
  512. package/dist/core/oauth2/backchannel-logout/index.d.ts +4 -0
  513. package/dist/core/oauth2/backchannel-logout/index.d.ts.map +1 -0
  514. package/dist/core/oauth2/backchannel-logout/index.mjs +6 -0
  515. package/dist/core/oauth2/backchannel-logout/module.d.ts +26 -0
  516. package/dist/core/oauth2/backchannel-logout/module.d.ts.map +1 -0
  517. package/dist/core/oauth2/backchannel-logout/module.mjs +78 -0
  518. package/dist/core/oauth2/backchannel-logout/module.mjs.map +1 -0
  519. package/dist/core/oauth2/backchannel-logout/types.d.ts +29 -0
  520. package/dist/core/oauth2/backchannel-logout/types.d.ts.map +1 -0
  521. package/dist/core/oauth2/console-login/constants.d.ts +19 -0
  522. package/dist/core/oauth2/console-login/constants.d.ts.map +1 -0
  523. package/dist/core/oauth2/console-login/constants.mjs +24 -0
  524. package/dist/core/oauth2/console-login/constants.mjs.map +1 -0
  525. package/dist/core/oauth2/console-login/index.d.ts +3 -0
  526. package/dist/core/oauth2/console-login/index.d.ts.map +1 -0
  527. package/dist/core/oauth2/console-login/index.mjs +5 -0
  528. package/dist/core/oauth2/console-login/types.d.ts +53 -0
  529. package/dist/core/oauth2/console-login/types.d.ts.map +1 -0
  530. package/dist/core/oauth2/end-session/service.mjs +1 -1
  531. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  532. package/dist/core/oauth2/federated-login/constants.d.ts +22 -0
  533. package/dist/core/oauth2/federated-login/constants.d.ts.map +1 -0
  534. package/dist/core/oauth2/federated-login/constants.mjs +27 -0
  535. package/dist/core/oauth2/federated-login/constants.mjs.map +1 -0
  536. package/dist/core/oauth2/federated-login/index.d.ts +1 -0
  537. package/dist/core/oauth2/federated-login/index.d.ts.map +1 -1
  538. package/dist/core/oauth2/federated-login/index.mjs +2 -1
  539. package/dist/core/oauth2/federated-login/module.d.ts +12 -3
  540. package/dist/core/oauth2/federated-login/module.d.ts.map +1 -1
  541. package/dist/core/oauth2/federated-login/module.mjs +98 -42
  542. package/dist/core/oauth2/federated-login/module.mjs.map +1 -1
  543. package/dist/core/oauth2/federated-login/types.d.ts +82 -24
  544. package/dist/core/oauth2/federated-login/types.d.ts.map +1 -1
  545. package/dist/core/oauth2/federated-login/types.mjs +5 -0
  546. package/dist/core/oauth2/federated-login/types.mjs.map +1 -1
  547. package/dist/core/oauth2/grant-types/authorize.mjs +1 -1
  548. package/dist/core/oauth2/grant-types/client-credentials.mjs +1 -1
  549. package/dist/core/oauth2/grant-types/identity.mjs +1 -1
  550. package/dist/core/oauth2/grant-types/password.mjs +1 -1
  551. package/dist/core/oauth2/grant-types/refresh-token.mjs +1 -1
  552. package/dist/core/oauth2/index.d.ts +4 -0
  553. package/dist/core/oauth2/index.d.ts.map +1 -1
  554. package/dist/core/oauth2/index.mjs +15 -4
  555. package/dist/core/oauth2/introspection/index.d.ts +3 -0
  556. package/dist/core/oauth2/introspection/index.d.ts.map +1 -0
  557. package/dist/core/oauth2/introspection/index.mjs +5 -0
  558. package/dist/core/oauth2/introspection/module.d.ts +14 -0
  559. package/dist/core/oauth2/introspection/module.d.ts.map +1 -0
  560. package/dist/core/oauth2/introspection/module.mjs +49 -0
  561. package/dist/core/oauth2/introspection/module.mjs.map +1 -0
  562. package/dist/core/oauth2/introspection/types.d.ts +45 -0
  563. package/dist/core/oauth2/introspection/types.d.ts.map +1 -0
  564. package/dist/core/oauth2/introspection/types.mjs +4 -0
  565. package/dist/core/oauth2/openid/claims.d.ts +20 -2
  566. package/dist/core/oauth2/openid/claims.d.ts.map +1 -1
  567. package/dist/core/oauth2/openid/claims.mjs +18 -4
  568. package/dist/core/oauth2/openid/claims.mjs.map +1 -1
  569. package/dist/core/oauth2/session-credential/constants.d.ts +30 -0
  570. package/dist/core/oauth2/session-credential/constants.d.ts.map +1 -0
  571. package/dist/core/oauth2/session-credential/constants.mjs +34 -0
  572. package/dist/core/oauth2/session-credential/constants.mjs.map +1 -0
  573. package/dist/core/oauth2/session-credential/index.d.ts +3 -0
  574. package/dist/core/oauth2/session-credential/index.d.ts.map +1 -0
  575. package/dist/core/oauth2/session-credential/index.mjs +6 -0
  576. package/dist/core/oauth2/session-credential/module.d.ts +31 -0
  577. package/dist/core/oauth2/session-credential/module.d.ts.map +1 -0
  578. package/dist/core/oauth2/session-credential/module.mjs +43 -0
  579. package/dist/core/oauth2/session-credential/module.mjs.map +1 -0
  580. package/dist/core/oauth2/session-token/constants.d.ts +10 -0
  581. package/dist/core/oauth2/session-token/constants.d.ts.map +1 -0
  582. package/dist/core/oauth2/session-token/constants.mjs +16 -0
  583. package/dist/core/oauth2/session-token/constants.mjs.map +1 -0
  584. package/dist/core/oauth2/session-token/index.d.ts +1 -0
  585. package/dist/core/oauth2/session-token/index.d.ts.map +1 -1
  586. package/dist/core/oauth2/session-token/index.mjs +2 -1
  587. package/dist/core/oauth2/session-token/types.d.ts +13 -2
  588. package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
  589. package/dist/core/oauth2/token/verifier/module.d.ts.map +1 -1
  590. package/dist/core/oauth2/token/verifier/module.mjs +3 -3
  591. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  592. package/dist/core/provisioning/merge/module.mjs +5 -3
  593. package/dist/core/provisioning/merge/module.mjs.map +1 -1
  594. package/dist/core/query/module.mjs +1 -1
  595. package/dist/core/query/module.mjs.map +1 -1
  596. package/dist/core/security/policy/evaluator.mjs +1 -1
  597. package/dist/core/security/policy/evaluator.mjs.map +1 -1
  598. package/dist/index.mjs +62 -59
  599. package/dist/path.mjs +1 -1
  600. package/dist/swagger.json +573 -163
  601. package/dist/utils/error.d.ts +6 -0
  602. package/dist/utils/error.d.ts.map +1 -1
  603. package/dist/utils/error.mjs +6 -2
  604. package/dist/utils/error.mjs.map +1 -1
  605. package/dist/utils/index.mjs +2 -2
  606. package/package.json +32 -26
  607. package/dist/adapters/http/middleware/built-in/assets.d.ts +0 -11
  608. package/dist/adapters/http/middleware/built-in/assets.d.ts.map +0 -1
  609. package/dist/adapters/http/middleware/built-in/assets.mjs +0 -91
  610. package/dist/adapters/http/middleware/built-in/assets.mjs.map +0 -1
  611. package/dist/adapters/http/middleware/built-in/theme.d.ts +0 -15
  612. package/dist/adapters/http/middleware/built-in/theme.d.ts.map +0 -1
  613. package/dist/adapters/http/middleware/built-in/theme.mjs +0 -27
  614. package/dist/adapters/http/middleware/built-in/theme.mjs.map +0 -1
  615. package/dist/adapters/http/middleware/built-in/types.d.ts +0 -14
  616. package/dist/adapters/http/middleware/built-in/types.d.ts.map +0 -1
  617. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +0 -15
  618. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts.map +0 -1
  619. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +0 -25
  620. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +0 -1
  621. package/dist/adapters/http/request/helpers/redirect.d.ts +0 -14
  622. package/dist/adapters/http/request/helpers/redirect.d.ts.map +0 -1
  623. package/dist/adapters/http/request/helpers/redirect.mjs +0 -36
  624. package/dist/adapters/http/request/helpers/redirect.mjs.map +0 -1
  625. package/dist/adapters/http/ui/account-console/index.d.ts +0 -4
  626. package/dist/adapters/http/ui/account-console/index.d.ts.map +0 -1
  627. package/dist/adapters/http/ui/account-console/index.mjs +0 -6
  628. package/dist/adapters/http/ui/account-console/module.d.ts +0 -28
  629. package/dist/adapters/http/ui/account-console/module.d.ts.map +0 -1
  630. package/dist/adapters/http/ui/account-console/module.mjs +0 -80
  631. package/dist/adapters/http/ui/account-console/module.mjs.map +0 -1
  632. package/dist/adapters/http/ui/account-console/ref.d.ts +0 -30
  633. package/dist/adapters/http/ui/account-console/ref.d.ts.map +0 -1
  634. package/dist/adapters/http/ui/account-console/ref.mjs +0 -50
  635. package/dist/adapters/http/ui/account-console/ref.mjs.map +0 -1
  636. package/dist/adapters/http/ui/account-console/types.d.ts +0 -11
  637. package/dist/adapters/http/ui/account-console/types.d.ts.map +0 -1
  638. package/dist/adapters/http/ui/auth-console/http-client.d.ts +0 -22
  639. package/dist/adapters/http/ui/auth-console/http-client.d.ts.map +0 -1
  640. package/dist/adapters/http/ui/auth-console/http-client.mjs.map +0 -1
  641. package/dist/adapters/http/ui/auth-console/index.d.ts +0 -6
  642. package/dist/adapters/http/ui/auth-console/index.d.ts.map +0 -1
  643. package/dist/adapters/http/ui/auth-console/index.mjs +0 -8
  644. package/dist/adapters/http/ui/auth-console/module.d.ts +0 -4
  645. package/dist/adapters/http/ui/auth-console/module.d.ts.map +0 -1
  646. package/dist/adapters/http/ui/auth-console/module.mjs +0 -73
  647. package/dist/adapters/http/ui/auth-console/module.mjs.map +0 -1
  648. package/dist/adapters/http/ui/auth-console/resolve.d.ts +0 -21
  649. package/dist/adapters/http/ui/auth-console/resolve.d.ts.map +0 -1
  650. package/dist/adapters/http/ui/auth-console/resolve.mjs +0 -53
  651. package/dist/adapters/http/ui/auth-console/resolve.mjs.map +0 -1
  652. package/dist/adapters/http/ui/auth-console/serve.d.ts +0 -9
  653. package/dist/adapters/http/ui/auth-console/serve.d.ts.map +0 -1
  654. package/dist/adapters/http/ui/auth-console/serve.mjs +0 -35
  655. package/dist/adapters/http/ui/auth-console/serve.mjs.map +0 -1
  656. package/dist/adapters/http/ui/auth-console/types.d.ts +0 -26
  657. package/dist/adapters/http/ui/auth-console/types.d.ts.map +0 -1
  658. package/dist/adapters/http/ui/console-packages/index.d.ts.map +0 -1
  659. package/dist/adapters/http/ui/console-packages/index.mjs +0 -5
  660. package/dist/adapters/http/ui/console-packages/module.d.ts +0 -33
  661. package/dist/adapters/http/ui/console-packages/module.d.ts.map +0 -1
  662. package/dist/adapters/http/ui/console-packages/module.mjs +0 -70
  663. package/dist/adapters/http/ui/console-packages/module.mjs.map +0 -1
  664. package/dist/adapters/http/ui/console-packages/types.d.ts +0 -12
  665. package/dist/adapters/http/ui/console-packages/types.d.ts.map +0 -1
  666. package/dist/adapters/http/ui/index.d.ts +0 -6
  667. package/dist/adapters/http/ui/index.d.ts.map +0 -1
  668. package/dist/adapters/http/ui/index.mjs +0 -25
  669. package/dist/adapters/http/ui/shared/html.d.ts +0 -76
  670. package/dist/adapters/http/ui/shared/html.d.ts.map +0 -1
  671. package/dist/adapters/http/ui/shared/html.mjs +0 -104
  672. package/dist/adapters/http/ui/shared/html.mjs.map +0 -1
  673. package/dist/adapters/http/ui/shared/index.d.ts +0 -2
  674. package/dist/adapters/http/ui/shared/index.d.ts.map +0 -1
  675. package/dist/adapters/http/ui/shared/index.mjs +0 -5
  676. package/dist/adapters/http/ui/theme/apply.d.ts +0 -12
  677. package/dist/adapters/http/ui/theme/apply.d.ts.map +0 -1
  678. package/dist/adapters/http/ui/theme/apply.mjs +0 -29
  679. package/dist/adapters/http/ui/theme/apply.mjs.map +0 -1
  680. package/dist/adapters/http/ui/theme/assets.d.ts +0 -20
  681. package/dist/adapters/http/ui/theme/assets.d.ts.map +0 -1
  682. package/dist/adapters/http/ui/theme/assets.mjs +0 -86
  683. package/dist/adapters/http/ui/theme/assets.mjs.map +0 -1
  684. package/dist/adapters/http/ui/theme/constants.d.ts +0 -16
  685. package/dist/adapters/http/ui/theme/constants.d.ts.map +0 -1
  686. package/dist/adapters/http/ui/theme/constants.mjs +0 -20
  687. package/dist/adapters/http/ui/theme/constants.mjs.map +0 -1
  688. package/dist/adapters/http/ui/theme/contract/constants.d.ts +0 -120
  689. package/dist/adapters/http/ui/theme/contract/constants.d.ts.map +0 -1
  690. package/dist/adapters/http/ui/theme/contract/constants.mjs +0 -136
  691. package/dist/adapters/http/ui/theme/contract/constants.mjs.map +0 -1
  692. package/dist/adapters/http/ui/theme/contract/head.d.ts +0 -12
  693. package/dist/adapters/http/ui/theme/contract/head.d.ts.map +0 -1
  694. package/dist/adapters/http/ui/theme/contract/head.mjs +0 -61
  695. package/dist/adapters/http/ui/theme/contract/head.mjs.map +0 -1
  696. package/dist/adapters/http/ui/theme/contract/index.d.ts +0 -6
  697. package/dist/adapters/http/ui/theme/contract/index.d.ts.map +0 -1
  698. package/dist/adapters/http/ui/theme/contract/index.mjs +0 -8
  699. package/dist/adapters/http/ui/theme/contract/manifest.d.ts +0 -25
  700. package/dist/adapters/http/ui/theme/contract/manifest.d.ts.map +0 -1
  701. package/dist/adapters/http/ui/theme/contract/manifest.mjs +0 -77
  702. package/dist/adapters/http/ui/theme/contract/manifest.mjs.map +0 -1
  703. package/dist/adapters/http/ui/theme/contract/types.d.ts +0 -26
  704. package/dist/adapters/http/ui/theme/contract/types.d.ts.map +0 -1
  705. package/dist/adapters/http/ui/theme/contract/utils.d.ts +0 -11
  706. package/dist/adapters/http/ui/theme/contract/utils.d.ts.map +0 -1
  707. package/dist/adapters/http/ui/theme/contract/utils.mjs +0 -22
  708. package/dist/adapters/http/ui/theme/contract/utils.mjs.map +0 -1
  709. package/dist/adapters/http/ui/theme/index.d.ts +0 -7
  710. package/dist/adapters/http/ui/theme/index.d.ts.map +0 -1
  711. package/dist/adapters/http/ui/theme/index.mjs +0 -13
  712. package/dist/adapters/http/ui/theme/module.d.ts +0 -79
  713. package/dist/adapters/http/ui/theme/module.d.ts.map +0 -1
  714. package/dist/adapters/http/ui/theme/module.mjs +0 -206
  715. package/dist/adapters/http/ui/theme/module.mjs.map +0 -1
  716. package/dist/adapters/http/ui/theme/types.d.ts +0 -42
  717. package/dist/adapters/http/ui/theme/types.d.ts.map +0 -1
  718. package/dist/app/modules/config/helpers.d.ts +0 -9
  719. package/dist/app/modules/config/helpers.d.ts.map +0 -1
  720. package/dist/app/modules/config/helpers.mjs +0 -22
  721. package/dist/app/modules/config/helpers.mjs.map +0 -1
  722. package/dist/app/modules/config/normalize.d.ts +0 -3
  723. package/dist/app/modules/config/normalize.d.ts.map +0 -1
  724. package/dist/app/modules/config/normalize.mjs +0 -117
  725. package/dist/app/modules/config/normalize.mjs.map +0 -1
  726. package/dist/app/modules/config/origins.d.ts +0 -25
  727. package/dist/app/modules/config/origins.d.ts.map +0 -1
  728. package/dist/app/modules/config/origins.mjs +0 -46
  729. package/dist/app/modules/config/origins.mjs.map +0 -1
  730. package/dist/app/modules/config/read/env.d.ts +0 -3
  731. package/dist/app/modules/config/read/env.d.ts.map +0 -1
  732. package/dist/app/modules/config/read/env.mjs +0 -139
  733. package/dist/app/modules/config/read/env.mjs.map +0 -1
  734. package/dist/app/modules/config/read/fs.d.ts +0 -3
  735. package/dist/app/modules/config/read/fs.d.ts.map +0 -1
  736. package/dist/app/modules/config/read/fs.mjs +0 -60
  737. package/dist/app/modules/config/read/fs.mjs.map +0 -1
  738. package/dist/app/modules/config/read/index.d.ts +0 -5
  739. package/dist/app/modules/config/read/index.d.ts.map +0 -1
  740. package/dist/app/modules/config/read/index.mjs +0 -7
  741. package/dist/app/modules/config/read/module.d.ts +0 -4
  742. package/dist/app/modules/config/read/module.d.ts.map +0 -1
  743. package/dist/app/modules/config/read/module.mjs +0 -29
  744. package/dist/app/modules/config/read/module.mjs.map +0 -1
  745. package/dist/app/modules/config/read/types.d.ts +0 -9
  746. package/dist/app/modules/config/read/types.d.ts.map +0 -1
  747. package/dist/app/modules/config/trust-proxy.d.ts +0 -28
  748. package/dist/app/modules/config/trust-proxy.d.ts.map +0 -1
  749. package/dist/app/modules/config/trust-proxy.mjs +0 -64
  750. package/dist/app/modules/config/trust-proxy.mjs.map +0 -1
  751. package/dist/cli/config.d.ts +0 -18
  752. package/dist/cli/config.d.ts.map +0 -1
  753. package/dist/cli/config.mjs +0 -34
  754. package/dist/cli/config.mjs.map +0 -1
  755. package/dist/cli/types.d.ts.map +0 -1
  756. package/dist/utils/host.d.ts +0 -2
  757. package/dist/utils/host.d.ts.map +0 -1
  758. package/dist/utils/host.mjs +0 -12
  759. package/dist/utils/host.mjs.map +0 -1
  760. /package/dist/adapters/http/{middleware/built-in → controllers/workflows/account}/types.mjs +0 -0
  761. /package/dist/adapters/http/{ui/console-packages → controllers/workflows/admin}/index.d.ts +0 -0
  762. /package/dist/adapters/http/{ui/account-console → controllers/workflows/admin}/types.mjs +0 -0
  763. /package/dist/adapters/http/{ui/auth-console → controllers/workflows/console-login}/types.mjs +0 -0
  764. /package/dist/adapters/http/{ui/console-packages → internal-client}/types.mjs +0 -0
  765. /package/dist/{adapters/http/ui/theme/contract → app/modules/components}/types.mjs +0 -0
  766. /package/dist/cli/{types.d.ts → commands/types.d.ts} +0 -0
  767. /package/dist/{adapters/http/ui/theme → cli/commands}/types.mjs +0 -0
  768. /package/dist/{app/modules/config/read → core/oauth2/backchannel-logout}/types.mjs +0 -0
  769. /package/dist/{cli → core/oauth2/console-login}/types.mjs +0 -0
@@ -6,9 +6,11 @@ import { useRequestLocale } from "../../../request/helpers/locale.mjs";
6
6
  import { useRequestMfaLoginTicket } from "../../../request/helpers/mfa-login-ticket.mjs";
7
7
  import { useRequestSessionId } from "../../../request/helpers/session-id.mjs";
8
8
  import "../../../request/index.mjs";
9
- import { IdentityType, UserAuthenticatorKind } from "@authup/core-kit";
9
+ import { IdentityType, SessionAuthMethod, UserAuthenticatorKind } from "@authup/core-kit";
10
10
  import { BadRequestError, EntityCredentialsInvalidError, UnauthorizedError } from "@authup/errors";
11
+ import { OAuth2AuthenticationContextClass } from "@authup/specs";
11
12
  import { getRequestHeader, getRequestIP } from "routup";
13
+ import { useRequestQuery } from "@routup/basic/query";
12
14
  import { DBody, DContext, DController, DGet, DPost, DTags } from "@routup/decorators";
13
15
  //#region src/adapters/http/controllers/workflows/authenticator-challenge/module.ts
14
16
  function _ts_decorate(decorators, target, key, desc) {
@@ -53,13 +55,29 @@ var AuthenticatorChallengeController = class {
53
55
  throw new UnauthorizedError();
54
56
  }
55
57
  async status(event) {
56
- const { identity } = this.resolveActor(event);
58
+ const { identity, ticket } = this.resolveActor(event);
57
59
  if (identity.type !== IdentityType.USER) return {
58
60
  required: false,
59
61
  enrollmentRequired: false,
60
62
  kinds: []
61
63
  };
62
- return this.service.challenge(identity.id);
64
+ const status = await this.service.challenge(identity.id);
65
+ const session = ticket ? null : await this.resolveSession(event);
66
+ if (session && session.authMethod === SessionAuthMethod.EXTERNAL) {
67
+ const { acrValues } = useRequestQuery(event);
68
+ const stepUpRequested = typeof acrValues === "string" && acrValues.split(" ").includes(OAuth2AuthenticationContextClass.MFA);
69
+ return {
70
+ ...status,
71
+ required: stepUpRequested && status.required,
72
+ enrollmentRequired: false
73
+ };
74
+ }
75
+ return status;
76
+ }
77
+ async resolveSession(event) {
78
+ const sessionId = useRequestSessionId(event);
79
+ if (!sessionId) return null;
80
+ return this.sessionManager.findOneById(sessionId);
63
81
  }
64
82
  async send(data, event) {
65
83
  const { identity } = this.resolveActor(event);
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["DBody","DContext","DController","DGet","DPost","DTags","IdentityType","UserAuthenticatorKind","BadRequestError","EntityCredentialsInvalidError","UnauthorizedError","getRequestHeader","getRequestIP","useRequestIdentity","useRequestLocale","useRequestMfaLoginTicket","useRequestSessionId","AuthenticatorChallengeController","service","sessionManager","mfaLoginService","ctx","resolveActor","event","identity","ticket","status","type","USER","required","enrollmentRequired","kinds","challenge","id","send","data","Object","values","includes","kind","sendChallenge","locale","success","verify","response","sessionId","payload","session_id","session","findOneById","verified","ipAddress","userAgent","clientId","onVerified","markMfaVerified","token","complete","userName","name"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authenticator-challenge/module.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 {\n DBody,\n DContext,\n DController,\n DGet,\n DPost,\n DTags,\n} from '@routup/decorators';\nimport { IdentityType, UserAuthenticatorKind } from '@authup/core-kit';\nimport { BadRequestError, EntityCredentialsInvalidError, UnauthorizedError } from '@authup/errors';\nimport type { IAppEvent } from 'routup';\nimport { getRequestHeader, getRequestIP } from 'routup';\nimport type {\n UserAuthenticatorChallengeResponse,\n UserAuthenticatorChallengeSendPayload,\n UserAuthenticatorChallengeVerifyPayload,\n UserAuthenticatorChallengeVerifyResponse,\n} from '@authup/core-http-kit';\nimport type { IOAuth2MfaLoginService, ISessionManager, IUserAuthenticatorService } from '../../../../../core/index.ts';\nimport type { RequestIdentity, RequestMfaLoginTicket } from '../../../request/index.ts';\nimport {\n useRequestIdentity,\n useRequestLocale,\n useRequestMfaLoginTicket,\n useRequestSessionId,\n} from '../../../request/index.ts';\n\nexport type AuthenticatorChallengeControllerContext = {\n service: IUserAuthenticatorService,\n sessionManager: ISessionManager,\n mfaLoginService?: IOAuth2MfaLoginService,\n};\n\ntype ChallengeActor = {\n identity: RequestIdentity,\n ticket: RequestMfaLoginTicket | null,\n};\n\n/**\n * Login-time challenge surface, scoped to the CURRENT bearer identity.\n * GET reports whether (and how) the caller must present a second factor;\n * POST verifies a factor and stamps mfa_at onto the backing session so\n * the /authorize backstop passes.\n *\n * Besides a regular access bearer, these routes accept the \"MFA-pending\"\n * login ticket (kind: mfa_token, issue #3242) the password grant issues\n * for factor kinds that cannot ride the single grant POST (email /\n * WebAuthn). A ticket-authenticated verify additionally completes the\n * login: the response carries the full token grant for the now-MFA'd\n * pending session.\n */\n@DTags('userAuthenticator')\n@DController('/authenticators/challenge')\nexport class AuthenticatorChallengeController {\n protected service: IUserAuthenticatorService;\n\n protected sessionManager: ISessionManager;\n\n protected mfaLoginService?: IOAuth2MfaLoginService;\n\n constructor(ctx: AuthenticatorChallengeControllerContext) {\n this.service = ctx.service;\n this.sessionManager = ctx.sessionManager;\n this.mfaLoginService = ctx.mfaLoginService;\n }\n\n /**\n * Resolve the acting subject: the regular request identity (access\n * bearer — the middleware never sets it for a ticket) or the stashed\n * MFA-pending ticket. Anything else is unauthorized — the previous\n * ForceLoggedInMiddleware contract, widened by exactly one bearer kind.\n */\n protected resolveActor(event: IAppEvent) : ChallengeActor {\n const identity = useRequestIdentity(event);\n if (identity) {\n return { identity, ticket: null };\n }\n\n const ticket = useRequestMfaLoginTicket(event);\n if (ticket) {\n return { identity: ticket.identity, ticket };\n }\n\n throw new UnauthorizedError();\n }\n\n @DGet('')\n async status(\n @DContext() event: IAppEvent,\n ): Promise<UserAuthenticatorChallengeResponse> {\n const { identity } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n return {\n required: false,\n enrollmentRequired: false,\n kinds: [],\n };\n }\n\n return this.service.challenge(identity.id);\n }\n\n @DPost('/send')\n async send(\n @DBody() data: UserAuthenticatorChallengeSendPayload,\n @DContext() event: IAppEvent,\n ): Promise<{ success: true }> {\n const { identity } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n throw new BadRequestError('Only user identities can request a challenge.');\n }\n\n if (\n !data ||\n !Object.values(UserAuthenticatorKind).includes(data.kind as UserAuthenticatorKind)\n ) {\n throw new BadRequestError('A kind must be provided.');\n }\n\n await this.service.sendChallenge(identity.id, data.kind, { locale: useRequestLocale(event) });\n\n // uniform 200 regardless of whether a code was actually mailed —\n // no enrollment-status oracle for the caller.\n return { success: true };\n }\n\n @DPost('')\n async verify(\n @DBody() data: UserAuthenticatorChallengeVerifyPayload,\n @DContext() event: IAppEvent,\n ): Promise<UserAuthenticatorChallengeVerifyResponse> {\n const { identity, ticket } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n throw new BadRequestError('Only user identities can complete a challenge.');\n }\n\n if (\n !data ||\n typeof data.response !== 'string' ||\n !data.response ||\n !Object.values(UserAuthenticatorKind).includes(data.kind as UserAuthenticatorKind)\n ) {\n throw new BadRequestError('A kind and response must be provided.');\n }\n\n // Bind the proof to the backing session — the /authorize backstop\n // reads session.mfa_at. The session id is server-derived (stashed\n // by the authorization middleware / carried by the verified ticket),\n // never client input. The stamp runs INSIDE the verify unit of work\n // (before the code consumption persists), so a stamp failure never\n // burns a single-use code.\n const sessionId = ticket ?\n ticket.payload.session_id :\n useRequestSessionId(event);\n const session = sessionId ?\n await this.sessionManager.findOneById(sessionId) :\n null;\n\n // a ticket references exactly one pending session — without it\n // (swept / expired mid-flight) the login can not complete.\n if (ticket && !session) {\n throw new UnauthorizedError();\n }\n\n const verified = await this.service.verify(\n identity.id,\n {\n kind: data.kind,\n response: data.response,\n },\n {\n ipAddress: getRequestIP(event) ?? null,\n userAgent: getRequestHeader(event, 'user-agent') ?? null,\n clientId: identity.clientId,\n sessionId: sessionId ?? null,\n ...(session ? {\n onVerified: async () => {\n await this.sessionManager.markMfaVerified(session);\n },\n } : {}),\n },\n );\n if (!verified) {\n throw new EntityCredentialsInvalidError();\n }\n\n // Ticket flow: the factor is verified and mfa_at stamped — complete\n // the login by minting the full grant for the pending session and\n // consuming the ticket (single use).\n if (ticket && session && this.mfaLoginService) {\n const token = await this.mfaLoginService.complete({\n session,\n ticket: ticket.payload,\n userName: identity.data.name,\n });\n\n return { verified: true, token };\n }\n\n return { verified: true };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,IAAaiB,mCAAb,MAAaA;CACCC;CAEAC;CAEAC;CAEV,YAAYC,KAA8C;EACtD,KAAKH,UAAUG,IAAIH;EACnB,KAAKC,iBAAiBE,IAAIF;EAC1B,KAAKC,kBAAkBC,IAAID;CAC/B;;;;;;IAQA,aAAuBG,OAAmC;EACtD,MAAMC,WAAWX,mBAAmBU,KAAAA;EACpC,IAAIC,UACA,OAAO;GAAEA;GAAUC,QAAQ;EAAK;EAGpC,MAAMA,SAASV,yBAAyBQ,KAAAA;EACxC,IAAIE,QACA,OAAO;GAAED,UAAUC,OAAOD;GAAUC;EAAO;EAG/C,MAAM,IAAIf,kBAAAA;CACd;CAEA,MACMgB,OACF,OAC2C;EAC3C,MAAM,EAAEF,aAAa,KAAKF,aAAaC,KAAAA;EACvC,IAAIC,SAASG,SAASrB,aAAasB,MAC/B,OAAO;GACHC,UAAU;GACVC,oBAAoB;GACpBC,OAAO,CAAA;EACX;EAGJ,OAAO,KAAKb,QAAQc,UAAUR,SAASS,EAAE;CAC7C;CAEA,MACMC,KACF,MACA,OAC0B;EAC1B,MAAM,EAAEV,aAAa,KAAKF,aAAaC,KAAAA;EACvC,IAAIC,SAASG,SAASrB,aAAasB,MAC/B,MAAM,IAAIpB,gBAAgB,+CAAA;EAG9B,IACI,CAAC2B,QACD,CAACC,OAAOC,OAAO9B,qBAAAA,CAAAA,CAAuB+B,SAASH,KAAKI,IAAI,GAExD,MAAM,IAAI/B,gBAAgB,0BAAA;EAG9B,MAAM,KAAKU,QAAQsB,cAAchB,SAASS,IAAIE,KAAKI,MAAM,EAAEE,QAAQ3B,iBAAiBS,KAAAA,EAAO,CAAA;EAI3F,OAAO,EAAEmB,SAAS,KAAK;CAC3B;CAEA,MACMC,OACF,MACA,OACiD;EACjD,MAAM,EAAEnB,UAAUC,WAAW,KAAKH,aAAaC,KAAAA;EAC/C,IAAIC,SAASG,SAASrB,aAAasB,MAC/B,MAAM,IAAIpB,gBAAgB,gDAAA;EAG9B,IACI,CAAC2B,QACD,OAAOA,KAAKS,aAAa,YACzB,CAACT,KAAKS,YACN,CAACR,OAAOC,OAAO9B,qBAAAA,CAAAA,CAAuB+B,SAASH,KAAKI,IAAI,GAExD,MAAM,IAAI/B,gBAAgB,uCAAA;EAS9B,MAAMqC,YAAYpB,SACdA,OAAOqB,QAAQC,aACf/B,oBAAoBO,KAAAA;EACxB,MAAMyB,UAAUH,YACZ,MAAM,KAAK1B,eAAe8B,YAAYJ,SAAAA,IACtC;EAIJ,IAAIpB,UAAU,CAACuB,SACX,MAAM,IAAItC,kBAAAA;EAqBd,IAAI,CAACwC,MAlBkB,KAAKhC,QAAQyB,OAChCnB,SAASS,IACT;GACIM,MAAMJ,KAAKI;GACXK,UAAUT,KAAKS;EACnB,GACA;GACIO,WAAWvC,aAAaW,KAAAA,KAAU;GAClC6B,WAAWzC,iBAAiBY,OAAO,YAAA,KAAiB;GACpD8B,UAAU7B,SAAS6B;GACnBR,WAAWA,aAAa;GACxB,GAAIG,UAAU,EACVM,YAAY,YAAA;IACR,MAAM,KAAKnC,eAAeoC,gBAAgBP,OAAAA;GAC9C,EACJ,IAAI,CAAC;EACT,CAAA,GAGA,MAAM,IAAIvC,8BAAAA;EAMd,IAAIgB,UAAUuB,WAAW,KAAK5B,iBAO1B,OAAO;GAAE8B,UAAU;GAAMM,OAAAA,MANL,KAAKpC,gBAAgBqC,SAAS;IAC9CT;IACAvB,QAAQA,OAAOqB;IACfY,UAAUlC,SAASW,KAAKwB;GAC5B,CAAA;EAE+B;EAGnC,OAAO,EAAET,UAAU,KAAK;CAC5B;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["DBody","DContext","DController","DGet","DPost","DTags","IdentityType","SessionAuthMethod","UserAuthenticatorKind","OAuth2AuthenticationContextClass","useRequestQuery","BadRequestError","EntityCredentialsInvalidError","UnauthorizedError","getRequestHeader","getRequestIP","useRequestIdentity","useRequestLocale","useRequestMfaLoginTicket","useRequestSessionId","AuthenticatorChallengeController","service","sessionManager","mfaLoginService","ctx","resolveActor","event","identity","ticket","status","type","USER","required","enrollmentRequired","kinds","challenge","id","session","resolveSession","authMethod","EXTERNAL","acrValues","stepUpRequested","split","includes","MFA","sessionId","findOneById","send","data","Object","values","kind","sendChallenge","locale","success","verify","response","payload","session_id","verified","ipAddress","userAgent","clientId","onVerified","markMfaVerified","token","complete","userName","name"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authenticator-challenge/module.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 {\n DBody,\n DContext,\n DController,\n DGet,\n DPost,\n DTags,\n} from '@routup/decorators';\nimport type { Session } from '@authup/core-kit';\nimport { IdentityType, SessionAuthMethod, UserAuthenticatorKind } from '@authup/core-kit';\nimport { OAuth2AuthenticationContextClass } from '@authup/specs';\nimport { useRequestQuery } from '@routup/basic/query';\nimport { BadRequestError, EntityCredentialsInvalidError, UnauthorizedError } from '@authup/errors';\nimport type { IAppEvent } from 'routup';\nimport { getRequestHeader, getRequestIP } from 'routup';\nimport type {\n UserAuthenticatorChallengeResponse,\n UserAuthenticatorChallengeSendPayload,\n UserAuthenticatorChallengeVerifyPayload,\n UserAuthenticatorChallengeVerifyResponse,\n} from '@authup/core-http-kit';\nimport type { IOAuth2MfaLoginService, ISessionManager, IUserAuthenticatorService } from '../../../../../core/index.ts';\nimport type { RequestIdentity, RequestMfaLoginTicket } from '../../../request/index.ts';\nimport {\n useRequestIdentity,\n useRequestLocale,\n useRequestMfaLoginTicket,\n useRequestSessionId,\n} from '../../../request/index.ts';\n\nexport type AuthenticatorChallengeControllerContext = {\n service: IUserAuthenticatorService,\n sessionManager: ISessionManager,\n mfaLoginService?: IOAuth2MfaLoginService,\n};\n\ntype ChallengeActor = {\n identity: RequestIdentity,\n ticket: RequestMfaLoginTicket | null,\n};\n\n/**\n * Login-time challenge surface, scoped to the CURRENT bearer identity.\n * GET reports whether (and how) the caller must present a second factor;\n * POST verifies a factor and stamps mfa_at onto the backing session so\n * the /authorize backstop passes.\n *\n * Besides a regular access bearer, these routes accept the \"MFA-pending\"\n * login ticket (kind: mfa_token, issue #3242) the password grant issues\n * for factor kinds that cannot ride the single grant POST (email /\n * WebAuthn). A ticket-authenticated verify additionally completes the\n * login: the response carries the full token grant for the now-MFA'd\n * pending session.\n */\n@DTags('userAuthenticator')\n@DController('/authenticators/challenge')\nexport class AuthenticatorChallengeController {\n protected service: IUserAuthenticatorService;\n\n protected sessionManager: ISessionManager;\n\n protected mfaLoginService?: IOAuth2MfaLoginService;\n\n constructor(ctx: AuthenticatorChallengeControllerContext) {\n this.service = ctx.service;\n this.sessionManager = ctx.sessionManager;\n this.mfaLoginService = ctx.mfaLoginService;\n }\n\n /**\n * Resolve the acting subject: the regular request identity (access\n * bearer — the middleware never sets it for a ticket) or the stashed\n * MFA-pending ticket. Anything else is unauthorized — the previous\n * ForceLoggedInMiddleware contract, widened by exactly one bearer kind.\n */\n protected resolveActor(event: IAppEvent) : ChallengeActor {\n const identity = useRequestIdentity(event);\n if (identity) {\n return { identity, ticket: null };\n }\n\n const ticket = useRequestMfaLoginTicket(event);\n if (ticket) {\n return { identity: ticket.identity, ticket };\n }\n\n throw new UnauthorizedError();\n }\n\n @DGet('')\n async status(\n @DContext() event: IAppEvent,\n ): Promise<UserAuthenticatorChallengeResponse> {\n const { identity, ticket } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n return {\n required: false,\n enrollmentRequired: false,\n kinds: [],\n };\n }\n\n const status = await this.service.challenge(identity.id);\n\n // What this SESSION still owes, not merely what the user holds. A\n // session an external identity provider established was authenticated\n // there, which is where MFA is enforced for it, so authup asks for no\n // local factor on top and `mfaRequired` forces no local enrollment.\n //\n // The rule lives here rather than in the page, so the hosted ladder\n // and any other consumer read one answer; `authorizeInner` keeps its\n // own copy as the backstop, which is the point of a backstop.\n //\n // The exception is an application that requested MFA explicitly. The\n // caller passes the `acr_values` it is being asked to satisfy, since\n // only it knows the authorization request.\n const session = ticket ? null : await this.resolveSession(event);\n if (session && session.authMethod === SessionAuthMethod.EXTERNAL) {\n const { acrValues } = useRequestQuery(event);\n const stepUpRequested = typeof acrValues === 'string' &&\n acrValues.split(' ').includes(OAuth2AuthenticationContextClass.MFA);\n\n // Enrollment stays suppressed either way: `authorizeInner` never\n // forces it on an external session, so offering it here would\n // route the person into a step the server does not ask for. A\n // step-up can only ADD the challenge, and only for a factor the\n // person already holds.\n return {\n ...status,\n required: stepUpRequested && status.required,\n enrollmentRequired: false,\n };\n }\n\n return status;\n }\n\n protected async resolveSession(event: IAppEvent) : Promise<Session | null> {\n const sessionId = useRequestSessionId(event);\n if (!sessionId) {\n return null;\n }\n\n return this.sessionManager.findOneById(sessionId);\n }\n\n @DPost('/send')\n async send(\n @DBody() data: UserAuthenticatorChallengeSendPayload,\n @DContext() event: IAppEvent,\n ): Promise<{ success: true }> {\n const { identity } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n throw new BadRequestError('Only user identities can request a challenge.');\n }\n\n if (\n !data ||\n !Object.values(UserAuthenticatorKind).includes(data.kind as UserAuthenticatorKind)\n ) {\n throw new BadRequestError('A kind must be provided.');\n }\n\n await this.service.sendChallenge(identity.id, data.kind, { locale: useRequestLocale(event) });\n\n // uniform 200 regardless of whether a code was actually mailed —\n // no enrollment-status oracle for the caller.\n return { success: true };\n }\n\n @DPost('')\n async verify(\n @DBody() data: UserAuthenticatorChallengeVerifyPayload,\n @DContext() event: IAppEvent,\n ): Promise<UserAuthenticatorChallengeVerifyResponse> {\n const { identity, ticket } = this.resolveActor(event);\n if (identity.type !== IdentityType.USER) {\n throw new BadRequestError('Only user identities can complete a challenge.');\n }\n\n if (\n !data ||\n typeof data.response !== 'string' ||\n !data.response ||\n !Object.values(UserAuthenticatorKind).includes(data.kind as UserAuthenticatorKind)\n ) {\n throw new BadRequestError('A kind and response must be provided.');\n }\n\n // Bind the proof to the backing session — the /authorize backstop\n // reads session.mfa_at. The session id is server-derived (stashed\n // by the authorization middleware / carried by the verified ticket),\n // never client input. The stamp runs INSIDE the verify unit of work\n // (before the code consumption persists), so a stamp failure never\n // burns a single-use code.\n const sessionId = ticket ?\n ticket.payload.session_id :\n useRequestSessionId(event);\n const session = sessionId ?\n await this.sessionManager.findOneById(sessionId) :\n null;\n\n // a ticket references exactly one pending session — without it\n // (swept / expired mid-flight) the login can not complete.\n if (ticket && !session) {\n throw new UnauthorizedError();\n }\n\n const verified = await this.service.verify(\n identity.id,\n {\n kind: data.kind,\n response: data.response,\n },\n {\n ipAddress: getRequestIP(event) ?? null,\n userAgent: getRequestHeader(event, 'user-agent') ?? null,\n clientId: identity.clientId,\n sessionId: sessionId ?? null,\n ...(session ? {\n onVerified: async () => {\n await this.sessionManager.markMfaVerified(session);\n },\n } : {}),\n },\n );\n if (!verified) {\n throw new EntityCredentialsInvalidError();\n }\n\n // Ticket flow: the factor is verified and mfa_at stamped — complete\n // the login by minting the full grant for the pending session and\n // consuming the ticket (single use).\n if (ticket && session && this.mfaLoginService) {\n const token = await this.mfaLoginService.complete({\n session,\n ticket: ticket.payload,\n userName: identity.data.name,\n });\n\n return { verified: true, token };\n }\n\n return { verified: true };\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { IAppEvent } from 'routup';
2
+ import type { AuthorizeInfo } from '@authup/core-http-kit';
2
3
  import { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';
3
4
  import type { IOAuth2AuthorizationCodeRequestVerifier } from '../../../../../core/index.ts';
4
5
  import { OAuth2AuthorizationCodeRequestValidator } from '../../../../../core/index.ts';
@@ -12,6 +13,20 @@ export declare class AuthorizeController {
12
13
  confirm(event: IAppEvent): Promise<{
13
14
  url: string;
14
15
  }>;
15
- serve(event: IAppEvent): Promise<string>;
16
+ /**
17
+ * The page's render input as JSON, for a renderer that is not this
18
+ * process (plan 101 D2). Anonymous like the page GET, and answering
19
+ * the same query: a refused request is a 200 carrying the refusal,
20
+ * never an error status, so the caller renders what the page renders.
21
+ */
22
+ info(event: IAppEvent): Promise<AuthorizeInfo>;
23
+ /**
24
+ * The page renders in the auth console service, which reads its
25
+ * whole input back from `/info` above. server-core keeps the
26
+ * protocol: this GET is a stateless hop, and the POST that issues
27
+ * the code stays here.
28
+ */
29
+ serve(event: IAppEvent): Promise<Response>;
30
+ protected buildAuthorizeInfo(event: IAppEvent): Promise<AuthorizeInfo>;
16
31
  }
17
32
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAexC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAMzF,qBACa,mBAAmB;IAI5B,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAE9C,SAAS,CAAC,mBAAmB,EAAG,uCAAuC,CAAC;IAExE,SAAS,CAAC,oBAAoB,EAAG,uCAAuC,CAAC;IAEzE,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBAI/B,GAAG,EAAE,0BAA0B;IAyBrC,OAAO,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAmC/D,KAAK,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAsG7D"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAOxC,OAAO,KAAK,EACR,aAAa,EAIhB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGzF,qBACa,mBAAmB;IAI5B,SAAS,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAE9C,SAAS,CAAC,mBAAmB,EAAG,uCAAuC,CAAC;IAExE,SAAS,CAAC,oBAAoB,EAAG,uCAAuC,CAAC;IAEzE,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBAI/B,GAAG,EAAE,0BAA0B;IAyBrC,OAAO,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAkCrE;;;;;OAKG;IAEG,IAAI,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAQhE;;;;;OAKG;IAEG,KAAK,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;cAM5C,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;CAoH/E"}
@@ -7,12 +7,12 @@ import "../../../../../utils/index.mjs";
7
7
  import "../../../../../core/index.mjs";
8
8
  import { readFromLocations } from "../../../request/helpers/locations.mjs";
9
9
  import "../../../request/index.mjs";
10
- import { ForceUserLoggedInMiddleware } from "../../../middleware/built-in/loggedin/user.mjs";
11
- import { renderAuthConsolePage } from "../../../ui/auth-console/module.mjs";
12
- import "../../../middleware/index.mjs";
13
- import "../../../ui/index.mjs";
14
10
  import { HTTPOAuth2Authorizer } from "../../../adapters/oauth2/authorization/module.mjs";
15
11
  import "../../../adapters/index.mjs";
12
+ import { ForceUserLoggedInMiddleware } from "../../../middleware/built-in/loggedin/user.mjs";
13
+ import "../../../middleware/index.mjs";
14
+ import { redirectToAuthConsole } from "../auth-console.mjs";
15
+ import { isUUID } from "@authup/kit";
16
16
  import { OAuth2AccessDeniedError, OAuth2ErrorCode, OAuth2LoginRequiredError, isOAuth2AccessDeniedError } from "@authup/specs";
17
17
  import { URL } from "node:url";
18
18
  import { useRequestQuery } from "@routup/basic/query";
@@ -72,7 +72,24 @@ var AuthorizeController = class {
72
72
  throw e;
73
73
  }
74
74
  }
75
- async serve(event) {
75
+ /**
76
+ * The page's render input as JSON, for a renderer that is not this
77
+ * process (plan 101 D2). Anonymous like the page GET, and answering
78
+ * the same query: a refused request is a 200 carrying the refusal,
79
+ * never an error status, so the caller renders what the page renders.
80
+ */ async info(event) {
81
+ event.response.headers.set("cache-control", "no-store");
82
+ return this.buildAuthorizeInfo(event);
83
+ }
84
+ /**
85
+ * The page renders in the auth console service, which reads its
86
+ * whole input back from `/info` above. server-core keeps the
87
+ * protocol: this GET is a stateless hop, and the POST that issues
88
+ * the code stays here.
89
+ */ async serve(event) {
90
+ return redirectToAuthConsole(event, this.options.authConsoleUrl, "/authorize");
91
+ }
92
+ async buildAuthorizeInfo(event) {
76
93
  let codeRequest;
77
94
  let client;
78
95
  let scopes;
@@ -118,23 +135,22 @@ var AuthorizeController = class {
118
135
  };
119
136
  }
120
137
  }
138
+ const query = useRequestQuery(event);
139
+ const federatedLogin = typeof query.provider === "string" && isUUID(query.provider) ? { providerId: query.provider } : void 0;
121
140
  const requestURL = new URL(event.request.url);
122
- return renderAuthConsolePage(event, {
123
- url: "/authorize",
124
- payload: {
125
- config: { baseURL: this.options.baseURL },
126
- data: {
127
- codeRequest,
128
- error,
129
- client,
130
- scopes,
131
- realm,
132
- redirectUriVerified,
133
- features: this.options.features,
134
- requestPath: `${requestURL.pathname}${requestURL.search}`
135
- }
136
- }
137
- });
141
+ requestURL.searchParams.delete("provider");
142
+ requestURL.pathname = "/authorize";
143
+ return {
144
+ codeRequest,
145
+ error,
146
+ client,
147
+ scopes,
148
+ realm,
149
+ redirectUriVerified,
150
+ federatedLogin,
151
+ features: this.options.features,
152
+ requestPath: `${requestURL.pathname}${requestURL.search}`
153
+ };
138
154
  }
139
155
  };
140
156
  _ts_decorate([
@@ -144,6 +160,13 @@ _ts_decorate([
144
160
  _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
145
161
  _ts_metadata("design:returntype", Promise)
146
162
  ], AuthorizeController.prototype, "confirm", null);
163
+ _ts_decorate([
164
+ DGet("/info", []),
165
+ _ts_param(0, DContext()),
166
+ _ts_metadata("design:type", Function),
167
+ _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
168
+ _ts_metadata("design:returntype", Promise)
169
+ ], AuthorizeController.prototype, "info", null);
147
170
  _ts_decorate([
148
171
  DGet("", []),
149
172
  _ts_param(0, DContext()),
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["DContext","DController","DGet","DPost","URL","useRequestQuery","OAuth2AccessDeniedError","OAuth2ErrorCode","OAuth2LoginRequiredError","isOAuth2AccessDeniedError","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","renderAuthConsolePage","readFromLocations","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","codeIssuer","sessionManager","eventService","metrics","promptLoginMaxAge","mfaFreshnessMaxAge","mfaChallengeProvider","accessPolicyEvaluator","consentService","logger","confirm","event","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","href","e","ACCESS_DENIED","serve","codeRequest","client","scopes","realm","redirectUriVerified","error","merged","data","run","verify","id","name","displayName","builtIn","createdAt","normalized","message","query","mapped","forClient","LOGIN_REQUIRED","providerUnavailable","requestURL","request","payload","config","baseURL","features","requestPath","pathname","search"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n DContext,\n DController,\n DGet,\n DPost,\n} from '@routup/decorators';\nimport { URL } from 'node:url';\n\nimport type { IAppEvent } from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type {\n Client,\n OAuth2AuthorizationCodeRequest,\n Realm,\n Scope,\n} from '@authup/core-kit';\nimport {\n OAuth2AccessDeniedError,\n OAuth2ErrorCode,\n OAuth2LoginRequiredError,\n isOAuth2AccessDeniedError,\n} from '@authup/specs';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport { renderAuthConsolePage } from '../../../ui/index.ts';\nimport { readFromLocations } from '../../../request/index.ts';\nimport type { IOAuth2AuthorizationCodeRequestVerifier } from '../../../../../core/index.ts';\nimport { OAuth2AuthorizationCodeRequestValidator } from '../../../../../core/index.ts';\nimport type { AuthorizeControllerContext, AuthorizeControllerOptions } from './types.ts';\nimport { sanitizeError } from '../../../../../utils/index.ts';\n\ntype RealmSummary = Pick<Realm, 'id' | 'name' | 'displayName'>;\ntype ClientSummary = Pick<Client, 'id' | 'name' | 'displayName' | 'builtIn' | 'createdAt'>;\n\n@DController('/authorize')\nexport class AuthorizeController {\n // todo: maybe /realms/<realm>/protocol/openid-connect/authorize\n // todo: maybe /realms/<realm>/[...]/authorize\n\n protected options: AuthorizeControllerOptions;\n\n protected codeRequestVerifier : IOAuth2AuthorizationCodeRequestVerifier;\n\n protected codeRequestValidator : OAuth2AuthorizationCodeRequestValidator;\n\n protected authorizer: HTTPOAuth2Authorizer;\n\n // ---------------------------------------------------------\n\n constructor(ctx: AuthorizeControllerContext) {\n this.options = ctx.options;\n\n this.codeRequestVerifier = ctx.codeRequestVerifier;\n\n this.codeRequestValidator = new OAuth2AuthorizationCodeRequestValidator();\n\n this.authorizer = new HTTPOAuth2Authorizer({\n codeRequestVerifier: this.codeRequestVerifier,\n codeIssuer: ctx.codeIssuer,\n sessionManager: ctx.sessionManager,\n eventService: ctx.eventService,\n metrics: ctx.metrics,\n promptLoginMaxAge: ctx.options.promptLoginMaxAge,\n mfaFreshnessMaxAge: ctx.options.mfaFreshnessMaxAge,\n mfaChallengeProvider: ctx.mfaChallengeProvider,\n accessPolicyEvaluator: ctx.accessPolicyEvaluator,\n consentService: ctx.consentService,\n logger: ctx.logger,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(@DContext() event: IAppEvent): Promise<{ url: string }> {\n try {\n const result = await this.authorizer.authorizeWithRequest(event);\n\n const url = new URL(result.redirectUri);\n if (result.state) {\n url.searchParams.set('state', result.state);\n }\n\n if (result.authorizationCode) {\n url.searchParams.set('code', result.authorizationCode);\n }\n\n return { url: url.href };\n } catch (e) {\n // Access-policy denial (plan 052): with a pattern-verified\n // redirect_uri the denial is answered as an error redirect\n // (RFC 6749 §4.1.2.1) — the kit navigates the returned url like\n // any success. Unverified → rethrow → 400 body → interactive\n // denial card.\n if (isOAuth2AccessDeniedError(e) && e.redirectUri) {\n const url = new URL(e.redirectUri);\n url.searchParams.set('error', OAuth2ErrorCode.ACCESS_DENIED);\n if (e.state) {\n url.searchParams.set('state', e.state);\n }\n\n return { url: url.href };\n }\n\n throw e;\n }\n }\n\n @DGet('', [])\n async serve(@DContext() event: IAppEvent): Promise<string> {\n let codeRequest : OAuth2AuthorizationCodeRequest | undefined;\n\n let client : ClientSummary | undefined;\n let scopes : Scope[] | undefined;\n\n // Target realm summary (the client's realm) — the UI names it in the\n // realm-mismatch notice. codeRequest.realm_id is only the id.\n let realm : RealmSummary | undefined;\n\n // Whether the request redirect_uri matched a registered client pattern —\n // the UI must not offer an automatic \"return to application\" redirect to\n // an unverified (pattern-less-client) redirect_uri.\n let redirectUriVerified = false;\n\n let error : Error | undefined;\n\n try {\n const merged = await readFromLocations(event, ['body', 'query']);\n const data = await this.codeRequestValidator.run(merged);\n\n const result = await this.codeRequestVerifier.verify(data);\n\n // Trim the client to a deliberate DTO before it reaches the\n // anonymous SSR hydration payload — never disclose redirect_uri\n // patterns (the trusted-origin set), grant_types, internal\n // base/root URLs, auth methods, or the secret storage flags to an\n // unauthenticated visitor. (ClientEntity.secret is additionally\n // select:false, so the secret is never loaded — but the DTO must not\n // rely on that alone: a future entity/query change could unset it.)\n client = {\n id: result.client.id,\n name: result.client.name,\n displayName: result.client.displayName,\n builtIn: result.client.builtIn,\n createdAt: result.client.createdAt,\n };\n scopes = result.scopes;\n redirectUriVerified = result.redirectUriVerified;\n\n if (result.client.realm) {\n realm = {\n id: result.client.realm.id,\n name: result.client.realm.name,\n displayName: result.client.realm.displayName,\n };\n }\n\n codeRequest = result.data;\n } catch (e) {\n const normalized = sanitizeError(e);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n\n // A recognized `error` query param (the federated-IdP callback\n // redirects back here with one when it refuses a completion) is\n // mapped onto the hydration payload's error. The set stays closed and\n // the text is server-side and neutral, never attacker-controlled;\n // any other value is ignored.\n if (!error) {\n const query = useRequestQuery(event);\n let mapped : Error | undefined;\n if (query.error === OAuth2ErrorCode.ACCESS_DENIED) {\n mapped = OAuth2AccessDeniedError.forClient();\n } else if (query.error === OAuth2ErrorCode.LOGIN_REQUIRED) {\n mapped = OAuth2LoginRequiredError.providerUnavailable();\n }\n\n if (mapped) {\n const normalized = sanitizeError(mapped);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n }\n\n // Path + query of the original request — the SSR page uses it as\n // the same-origin `redirect` parameter on register / password links\n // so those pages can lead back into this authorize request.\n const requestURL = new URL(event.request.url);\n\n return renderAuthConsolePage(event, {\n url: '/authorize',\n payload: {\n config: { baseURL: this.options.baseURL },\n data: {\n codeRequest,\n error,\n client,\n scopes,\n realm,\n redirectUriVerified,\n features: this.options.features,\n requestPath: `${requestURL.pathname}${requestURL.search}`,\n },\n },\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["DContext","DController","DGet","DPost","URL","isUUID","useRequestQuery","OAuth2AccessDeniedError","OAuth2ErrorCode","OAuth2LoginRequiredError","isOAuth2AccessDeniedError","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","redirectToAuthConsole","readFromLocations","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","codeIssuer","sessionManager","eventService","metrics","promptLoginMaxAge","mfaFreshnessMaxAge","mfaChallengeProvider","accessPolicyEvaluator","consentService","logger","confirm","event","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","href","e","ACCESS_DENIED","info","response","headers","buildAuthorizeInfo","serve","authConsoleUrl","codeRequest","client","scopes","realm","redirectUriVerified","error","merged","data","run","verify","id","name","displayName","builtIn","createdAt","normalized","message","query","mapped","forClient","LOGIN_REQUIRED","providerUnavailable","federatedLogin","provider","providerId","undefined","requestURL","request","delete","pathname","features","requestPath","search"],"sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2024.\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 {\n DContext,\n DController,\n DGet,\n DPost,\n} from '@routup/decorators';\nimport { URL } from 'node:url';\n\nimport type { IAppEvent } from 'routup';\nimport { isUUID } from '@authup/kit';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type {\n OAuth2AuthorizationCodeRequest,\n Scope,\n} from '@authup/core-kit';\nimport type {\n AuthorizeInfo,\n AuthorizeInfoError,\n ClientSummary,\n RealmSummary,\n} from '@authup/core-http-kit';\nimport {\n OAuth2AccessDeniedError,\n OAuth2ErrorCode,\n OAuth2LoginRequiredError,\n isOAuth2AccessDeniedError,\n} from '@authup/specs';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport { redirectToAuthConsole } from '../auth-console.ts';\nimport { readFromLocations } from '../../../request/index.ts';\nimport type { IOAuth2AuthorizationCodeRequestVerifier } from '../../../../../core/index.ts';\nimport { OAuth2AuthorizationCodeRequestValidator } from '../../../../../core/index.ts';\nimport type { AuthorizeControllerContext, AuthorizeControllerOptions } from './types.ts';\nimport { sanitizeError } from '../../../../../utils/index.ts';\n\n@DController('/authorize')\nexport class AuthorizeController {\n // todo: maybe /realms/<realm>/protocol/openid-connect/authorize\n // todo: maybe /realms/<realm>/[...]/authorize\n\n protected options: AuthorizeControllerOptions;\n\n protected codeRequestVerifier : IOAuth2AuthorizationCodeRequestVerifier;\n\n protected codeRequestValidator : OAuth2AuthorizationCodeRequestValidator;\n\n protected authorizer: HTTPOAuth2Authorizer;\n\n // ---------------------------------------------------------\n\n constructor(ctx: AuthorizeControllerContext) {\n this.options = ctx.options;\n\n this.codeRequestVerifier = ctx.codeRequestVerifier;\n\n this.codeRequestValidator = new OAuth2AuthorizationCodeRequestValidator();\n\n this.authorizer = new HTTPOAuth2Authorizer({\n codeRequestVerifier: this.codeRequestVerifier,\n codeIssuer: ctx.codeIssuer,\n sessionManager: ctx.sessionManager,\n eventService: ctx.eventService,\n metrics: ctx.metrics,\n promptLoginMaxAge: ctx.options.promptLoginMaxAge,\n mfaFreshnessMaxAge: ctx.options.mfaFreshnessMaxAge,\n mfaChallengeProvider: ctx.mfaChallengeProvider,\n accessPolicyEvaluator: ctx.accessPolicyEvaluator,\n consentService: ctx.consentService,\n logger: ctx.logger,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(@DContext() event: IAppEvent): Promise<{ url: string }> {\n try {\n const result = await this.authorizer.authorizeWithRequest(event);\n\n const url = new URL(result.redirectUri);\n if (result.state) {\n url.searchParams.set('state', result.state);\n }\n\n if (result.authorizationCode) {\n url.searchParams.set('code', result.authorizationCode);\n }\n\n return { url: url.href };\n } catch (e) {\n // Access-policy denial (plan 052): with a pattern-verified\n // redirect_uri the denial is answered as an error redirect\n // (RFC 6749 §4.1.2.1) — the kit navigates the returned url like\n // any success. Unverified → rethrow → 400 body → interactive\n // denial card.\n if (isOAuth2AccessDeniedError(e) && e.redirectUri) {\n const url = new URL(e.redirectUri);\n url.searchParams.set('error', OAuth2ErrorCode.ACCESS_DENIED);\n if (e.state) {\n url.searchParams.set('state', e.state);\n }\n\n return { url: url.href };\n }\n\n throw e;\n }\n }\n\n /**\n * The page's render input as JSON, for a renderer that is not this\n * process (plan 101 D2). Anonymous like the page GET, and answering\n * the same query: a refused request is a 200 carrying the refusal,\n * never an error status, so the caller renders what the page renders.\n */\n @DGet('/info', [])\n async info(@DContext() event: IAppEvent): Promise<AuthorizeInfo> {\n // The page inherits this from applyUIPageHeaders. A login context\n // is per-request and must never be served from a cache.\n event.response.headers.set('cache-control', 'no-store');\n\n return this.buildAuthorizeInfo(event);\n }\n\n /**\n * The page renders in the auth console service, which reads its\n * whole input back from `/info` above. server-core keeps the\n * protocol: this GET is a stateless hop, and the POST that issues\n * the code stays here.\n */\n @DGet('', [])\n async serve(@DContext() event: IAppEvent): Promise<Response> {\n return redirectToAuthConsole(event, this.options.authConsoleUrl, '/authorize');\n }\n\n // ---------------------------------------------------------\n\n protected async buildAuthorizeInfo(event: IAppEvent): Promise<AuthorizeInfo> {\n let codeRequest : OAuth2AuthorizationCodeRequest | undefined;\n\n let client : ClientSummary | undefined;\n let scopes : Scope[] | undefined;\n\n // Target realm summary (the client's realm) — the UI names it in the\n // realm-mismatch notice. codeRequest.realm_id is only the id.\n let realm : RealmSummary | undefined;\n\n // Whether the request redirect_uri matched a registered client pattern —\n // the UI must not offer an automatic \"return to application\" redirect to\n // an unverified (pattern-less-client) redirect_uri.\n let redirectUriVerified = false;\n\n // A plain object, not an Error: it is spread onto the wire, where\n // only data survives.\n let error : AuthorizeInfoError | undefined;\n\n try {\n const merged = await readFromLocations(event, ['body', 'query']);\n const data = await this.codeRequestValidator.run(merged);\n\n const result = await this.codeRequestVerifier.verify(data);\n\n // Trim the client to a deliberate DTO before it reaches the\n // anonymous SSR hydration payload — never disclose redirect_uri\n // patterns (the trusted-origin set), grant_types, the home URL,\n // the back-channel logout endpoint, auth methods, or the secret\n // storage flags to an unauthenticated visitor. (ClientEntity.secret\n // is additionally\n // select:false, so the secret is never loaded — but the DTO must not\n // rely on that alone: a future entity/query change could unset it.)\n client = {\n id: result.client.id,\n name: result.client.name,\n displayName: result.client.displayName,\n builtIn: result.client.builtIn,\n createdAt: result.client.createdAt,\n };\n scopes = result.scopes;\n redirectUriVerified = result.redirectUriVerified;\n\n if (result.client.realm) {\n realm = {\n id: result.client.realm.id,\n name: result.client.realm.name,\n displayName: result.client.realm.displayName,\n };\n }\n\n codeRequest = result.data;\n } catch (e) {\n const normalized = sanitizeError(e);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n\n // A recognized `error` query param (the federated-IdP callback\n // redirects back here with one when it refuses a completion) is\n // mapped onto the hydration payload's error. The set stays closed and\n // the text is server-side and neutral, never attacker-controlled;\n // any other value is ignored.\n if (!error) {\n const query = useRequestQuery(event);\n let mapped : Error | undefined;\n if (query.error === OAuth2ErrorCode.ACCESS_DENIED) {\n mapped = OAuth2AccessDeniedError.forClient();\n } else if (query.error === OAuth2ErrorCode.LOGIN_REQUIRED) {\n mapped = OAuth2LoginRequiredError.providerUnavailable();\n }\n\n if (mapped) {\n const normalized = sanitizeError(mapped);\n error = {\n ...normalized,\n message: normalized.message,\n };\n }\n }\n\n // Path + query of the original request — the SSR page uses it as\n // the same-origin `redirect` parameter on register / password links\n // so those pages can lead back into this authorize request.\n // A federated callback sends the browser back here to complete the\n // login it established (plan 094). Only the provider is named: the\n // pending login itself rides a cookie, so nothing here is a secret.\n // It is interpolated into the completion request path by the page, so\n // it is accepted as an id and nothing else, and dropped from\n // `requestPath` so the register / password links do not carry it.\n const query = useRequestQuery(event);\n const federatedLogin = typeof query.provider === 'string' && isUUID(query.provider) ?\n { providerId: query.provider } :\n undefined;\n\n const requestURL = new URL(event.request.url);\n requestURL.searchParams.delete('provider');\n // Anchored on the page, never on the route that was called:\n // `GET /authorize/info` answers the context of the same authorize\n // request, and the value is rendered as a link back to the page.\n requestURL.pathname = '/authorize';\n\n return {\n codeRequest,\n error,\n client,\n scopes,\n realm,\n redirectUriVerified,\n federatedLogin,\n features: this.options.features,\n requestPath: `${requestURL.pathname}${requestURL.search}`,\n };\n }\n}\n"],"mappings":"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"}
@@ -3,6 +3,11 @@ import type { Logger } from '@authup/server-kit';
3
3
  import type { IAuthFlowMetrics, IConsentService, IEventService, IOAuth2AccessPolicyEvaluator, IOAuth2AuthorizationCodeIssuer, IOAuth2AuthorizationCodeRequestVerifier, ISessionManager, IUserAuthenticatorChallengeProvider } from '../../../../../core/index.ts';
4
4
  export type AuthorizeControllerOptions = {
5
5
  baseURL: string;
6
+ /**
7
+ * Where the auth console service renders the page this controller
8
+ * hands over to (plan 101 D2).
9
+ */
10
+ authConsoleUrl: string;
6
11
  features: StatusResponseFeatures;
7
12
  /**
8
13
  * Max age (seconds) a `prompt=login` request accepts before forcing re-auth
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAC9B,uCAAuC,EACvC,eAAe,EACf,mCAAmC,EACtC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,0BAA0B,CAAC;IAEpC,UAAU,EAAE,8BAA8B,CAAC;IAC3C,mBAAmB,EAAE,uCAAuC,CAAC;IAE7D,cAAc,EAAE,eAAe,CAAC;IAEhC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAE3B,oBAAoB,CAAC,EAAE,mCAAmC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;IAErD;;;OAGG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/authorize/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAC9B,uCAAuC,EACvC,eAAe,EACf,mCAAmC,EACtC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,sBAAsB,CAAC;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,0BAA0B,CAAC;IAEpC,UAAU,EAAE,8BAA8B,CAAC;IAC3C,mBAAmB,EAAE,uCAAuC,CAAC;IAE7D,cAAc,EAAE,eAAe,CAAC;IAEhC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAE3B,oBAAoB,CAAC,EAAE,mCAAmC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;IAErD;;;OAGG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './module.ts';
2
+ export * from './types.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/console-login/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { ConsoleLogin } from "./module.mjs";
5
+ export { ConsoleLogin };
@@ -0,0 +1,83 @@
1
+ import type { IClient } from '@authup/core-http-kit';
2
+ import type { Logger } from '@authup/server-kit';
3
+ import { OAuth2ErrorCode } from '@authup/specs';
4
+ import type { IAppEvent } from 'routup';
5
+ import type { IConsoleLoginStore, IOAuth2TokenRevoker, IOAuth2TokenVerifier, ISessionManager, ISessionRepository } from '../../../../../core/index.ts';
6
+ import type { ConsoleLoginContext, ConsoleLoginDefinition } from './types.ts';
7
+ /**
8
+ * A console's server-side login (plan 088): the kick and the code redemption.
9
+ * Both exist so no OAuth2 token ever reaches the console's JavaScript. The
10
+ * browser holds an opaque, `HttpOnly` credential naming its `auth_sessions`
11
+ * row instead.
12
+ *
13
+ * One instance per console, parameterized by the client it authenticates
14
+ * against and the path it is served under (`console/account`,
15
+ * `console/admin`: the two pending-login cookies stay apart by RFC 6265 path
16
+ * matching); the account and the admin console differ in nothing else here.
17
+ */
18
+ export declare class ConsoleLogin {
19
+ protected definition: ConsoleLoginDefinition;
20
+ protected baseURL: string;
21
+ protected loginStore: IConsoleLoginStore;
22
+ protected sessionRepository: ISessionRepository;
23
+ protected sessionManager: ISessionManager;
24
+ protected tokenVerifier: IOAuth2TokenVerifier;
25
+ protected tokenRevoker: IOAuth2TokenRevoker;
26
+ protected logger?: Logger;
27
+ constructor(definition: ConsoleLoginDefinition, ctx: ConsoleLoginContext);
28
+ /**
29
+ * Start a console login: mint PKCE + `state`, park them in the pending
30
+ * login, and send the browser to `/authorize`.
31
+ *
32
+ * The verifier never reaches the browser, which is what moves the code
33
+ * exchange server-side: the callback is the only party that can redeem the
34
+ * code it comes back with.
35
+ */
36
+ login(event: IAppEvent): Promise<Response>;
37
+ /**
38
+ * Redeem the authorization code and hand the browser its session cookie.
39
+ *
40
+ * Nothing token-shaped leaves this method: the pair is verified, used to
41
+ * find the session it belongs to, and revoked before the response is
42
+ * built. What the browser gets back is the opaque `auth_sessions.secret`.
43
+ */
44
+ callback(event: IAppEvent): Promise<Response>;
45
+ protected resolveHttpClient(event: IAppEvent): IClient;
46
+ /**
47
+ * Revoke what the exchange returned. Best effort per token: a revoke that
48
+ * fails must not leave the visitor without a session, and both tokens are
49
+ * unreachable to anyone but this process either way.
50
+ */
51
+ protected revokeGrant(accessToken: string, refreshToken?: string): Promise<void>;
52
+ protected mapCallbackError(input: string): `${OAuth2ErrorCode}`;
53
+ /**
54
+ * Land a refusal on the console rather than in a JSON body: this is a
55
+ * top-level navigation at the end of a login, and the person behind it has
56
+ * to be told something. The marker set is closed, so nothing
57
+ * attacker-shaped is echoed.
58
+ */
59
+ protected refuse(event: IAppEvent, error: `${OAuth2ErrorCode}`): Response;
60
+ protected trimmedBaseURL(): string;
61
+ protected basePath(): string;
62
+ protected buildConsoleURL(): string;
63
+ protected buildCallbackURL(): string;
64
+ /**
65
+ * Whether the cookies may carry the `Secure` flag. Read from the parsed
66
+ * URL rather than the raw string: `publicUrl` is validated but never
67
+ * canonicalized, so a configured `HTTPS://...` would leave a prefix test
68
+ * false and silently drop the flag.
69
+ */
70
+ protected isSecureBaseURL(): boolean;
71
+ /**
72
+ * Scoped to the routes that read it, so it never rides an ordinary API
73
+ * request and two consoles keep separate logins in flight, and
74
+ * `SameSite=Lax` because the return leg is a top-level navigation that
75
+ * may come back through an external identity provider, which a `Strict`
76
+ * cookie would not accompany. It holds nothing but the id of a single-use
77
+ * cache entry.
78
+ */
79
+ protected buildLoginCookiePath(): string;
80
+ protected setLoginCookie(event: IAppEvent, value: string): void;
81
+ protected unsetLoginCookie(event: IAppEvent): void;
82
+ }
83
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/console-login/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EACH,eAAe,EAIlB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AASxC,OAAO,KAAK,EACR,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AAItC,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAiB9E;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACrB,SAAS,CAAC,UAAU,EAAG,sBAAsB,CAAC;IAE9C,SAAS,CAAC,OAAO,EAAG,MAAM,CAAC;IAE3B,SAAS,CAAC,UAAU,EAAG,kBAAkB,CAAC;IAE1C,SAAS,CAAC,iBAAiB,EAAG,kBAAkB,CAAC;IAEjD,SAAS,CAAC,cAAc,EAAG,eAAe,CAAC;IAE3C,SAAS,CAAC,aAAa,EAAG,oBAAoB,CAAC;IAE/C,SAAS,CAAC,YAAY,EAAG,mBAAmB,CAAC;IAE7C,SAAS,CAAC,MAAM,CAAC,EAAG,MAAM,CAAC;gBAEf,UAAU,EAAE,sBAAsB,EAAE,GAAG,EAAE,mBAAmB;IAWxE;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,SAAS,GAAI,OAAO,CAAC,QAAQ,CAAC;IAyCjD;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAI,OAAO,CAAC,QAAQ,CAAC;IAuHpD,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAI,OAAO;IASvD;;;;OAIG;cACa,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC;IAcvF,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAI,GAAG,eAAe,EAAE;IAQhE;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,GAAI,QAAQ;IAc1E,SAAS,CAAC,cAAc,IAAK,MAAM;IAInC,SAAS,CAAC,QAAQ,IAAK,MAAM;IAI7B,SAAS,CAAC,eAAe,IAAK,MAAM;IAIpC,SAAS,CAAC,gBAAgB,IAAK,MAAM;IAIrC;;;;;OAKG;IACH,SAAS,CAAC,eAAe,IAAK,OAAO;IAQrC;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,IAAK,MAAM;IAMzC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAI,IAAI;IAUhE,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAI,IAAI;CAGtD"}