@authup/server-core 1.0.0-beta.51 → 1.0.0-beta.52

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 (482) hide show
  1. package/dist/adapters/database/data-source/options/module.d.ts.map +1 -1
  2. package/dist/adapters/database/data-source/options/module.mjs +2 -0
  3. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client/entity.d.ts +1 -0
  5. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  6. package/dist/adapters/database/domains/client/entity.mjs +5 -0
  7. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  8. package/dist/adapters/database/domains/index.d.ts +1 -0
  9. package/dist/adapters/database/domains/index.d.ts.map +1 -1
  10. package/dist/adapters/database/domains/index.mjs +3 -1
  11. package/dist/adapters/database/domains/session/entity.mjs +1 -1
  12. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  13. package/dist/adapters/database/domains/session-token/entity.d.ts +17 -0
  14. package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -0
  15. package/dist/adapters/database/domains/session-token/entity.mjs +95 -0
  16. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -0
  17. package/dist/adapters/database/domains/session-token/index.d.ts +2 -0
  18. package/dist/adapters/database/domains/session-token/index.d.ts.map +1 -0
  19. package/dist/adapters/database/domains/session-token/index.mjs +5 -0
  20. package/dist/adapters/database/index.mjs +2 -1
  21. package/dist/adapters/database/migrations/mysql/1783325495597-Default.d.ts +28 -0
  22. package/dist/adapters/database/migrations/mysql/1783325495597-Default.d.ts.map +1 -0
  23. package/dist/adapters/database/migrations/mysql/1783325495597-Default.mjs +85 -0
  24. package/dist/adapters/database/migrations/mysql/1783325495597-Default.mjs.map +1 -0
  25. package/dist/adapters/database/migrations/postgres/1783325495597-Default.d.ts +28 -0
  26. package/dist/adapters/database/migrations/postgres/1783325495597-Default.d.ts.map +1 -0
  27. package/dist/adapters/database/migrations/postgres/1783325495597-Default.mjs +79 -0
  28. package/dist/adapters/database/migrations/postgres/1783325495597-Default.mjs.map +1 -0
  29. package/dist/adapters/database/subscriber/module.d.ts.map +1 -1
  30. package/dist/adapters/database/subscriber/module.mjs +4 -3
  31. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  32. package/dist/adapters/http/adapters/index.mjs +2 -1
  33. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +2 -1
  34. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  35. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
  36. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  37. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -4
  38. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  39. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  40. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +3 -0
  41. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  42. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  43. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  44. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +5 -3
  45. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  46. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +2 -1
  47. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  48. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +12 -5
  49. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  50. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +2 -0
  51. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  52. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
  53. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  54. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  55. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  56. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  57. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.d.ts +9 -0
  58. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.d.ts.map +1 -0
  59. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs +21 -0
  60. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs.map +1 -0
  61. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  62. package/dist/adapters/http/controllers/entities/client/module.mjs +2 -2
  63. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +1 -1
  64. package/dist/adapters/http/controllers/entities/client-role/module.mjs +1 -1
  65. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +1 -1
  66. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +1 -1
  67. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +4 -3
  69. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/entities/index.d.ts +1 -0
  71. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  72. package/dist/adapters/http/controllers/entities/index.mjs +3 -1
  73. package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
  74. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +1 -1
  75. package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
  76. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  77. package/dist/adapters/http/controllers/entities/realm/module.mjs +11 -8
  78. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  79. package/dist/adapters/http/controllers/entities/robot/module.mjs +2 -2
  80. package/dist/adapters/http/controllers/entities/robot-permission/module.mjs +1 -1
  81. package/dist/adapters/http/controllers/entities/robot-role/module.mjs +1 -1
  82. package/dist/adapters/http/controllers/entities/role/module.mjs +1 -1
  83. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +1 -1
  84. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +1 -1
  85. package/dist/adapters/http/controllers/entities/scope/module.mjs +1 -1
  86. package/dist/adapters/http/controllers/entities/session/index.d.ts +2 -0
  87. package/dist/adapters/http/controllers/entities/session/index.d.ts.map +1 -0
  88. package/dist/adapters/http/controllers/entities/session/index.mjs +5 -0
  89. package/dist/adapters/http/controllers/entities/session/module.d.ts +16 -0
  90. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -0
  91. package/dist/adapters/http/controllers/entities/session/module.mjs +102 -0
  92. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -0
  93. package/dist/adapters/http/controllers/entities/user/module.mjs +2 -2
  94. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +1 -1
  95. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +1 -1
  96. package/dist/adapters/http/controllers/entities/user-role/module.mjs +1 -1
  97. package/dist/adapters/http/controllers/index.mjs +3 -1
  98. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  99. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +22 -9
  100. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  101. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +7 -4
  102. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
  103. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  104. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  105. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  106. package/dist/adapters/http/controllers/workflows/logout/index.d.ts +3 -0
  107. package/dist/adapters/http/controllers/workflows/logout/index.d.ts.map +1 -0
  108. package/dist/adapters/http/controllers/workflows/logout/index.mjs +5 -0
  109. package/dist/adapters/http/controllers/workflows/logout/module.d.ts +14 -0
  110. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -0
  111. package/dist/adapters/http/controllers/workflows/logout/module.mjs +101 -0
  112. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -0
  113. package/dist/adapters/http/controllers/workflows/logout/types.d.ts +9 -0
  114. package/dist/adapters/http/controllers/workflows/logout/types.d.ts.map +1 -0
  115. package/dist/adapters/http/controllers/workflows/logout/types.mjs +4 -0
  116. package/dist/adapters/http/controllers/workflows/status/module.mjs +1 -1
  117. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  118. package/dist/adapters/http/controllers/workflows/token/module.mjs +10 -3
  119. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/workflows/token/types.d.ts +8 -1
  121. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  122. package/dist/adapters/http/index.mjs +16 -12
  123. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  124. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +2 -0
  125. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  126. package/dist/adapters/http/middleware/built-in/index.mjs +2 -2
  127. package/dist/adapters/http/middleware/built-in/logger.d.ts +1 -0
  128. package/dist/adapters/http/middleware/built-in/logger.d.ts.map +1 -1
  129. package/dist/adapters/http/middleware/built-in/logger.mjs +23 -2
  130. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  131. package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
  132. package/dist/adapters/http/middleware/built-in/prometheus.mjs +1 -1
  133. package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
  134. package/dist/adapters/http/middleware/built-in/realm-resolver/module.d.ts.map +1 -1
  135. package/dist/adapters/http/middleware/built-in/realm-resolver/module.mjs +3 -8
  136. package/dist/adapters/http/middleware/built-in/realm-resolver/module.mjs.map +1 -1
  137. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +2 -2
  138. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +2 -2
  139. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +1 -1
  140. package/dist/adapters/http/middleware/index.mjs +2 -2
  141. package/dist/adapters/http/request/helpers/index.d.ts +1 -0
  142. package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
  143. package/dist/adapters/http/request/helpers/index.mjs +2 -1
  144. package/dist/adapters/http/request/helpers/session-id.d.ts +9 -0
  145. package/dist/adapters/http/request/helpers/session-id.d.ts.map +1 -0
  146. package/dist/adapters/http/request/helpers/session-id.mjs +19 -0
  147. package/dist/adapters/http/request/helpers/session-id.mjs.map +1 -0
  148. package/dist/adapters/http/request/index.mjs +2 -1
  149. package/dist/adapters/http/request/permission/module.d.ts.map +1 -1
  150. package/dist/adapters/http/request/permission/module.mjs +4 -2
  151. package/dist/adapters/http/request/permission/module.mjs.map +1 -1
  152. package/dist/adapters/http/ui/index.d.ts +1 -0
  153. package/dist/adapters/http/ui/index.d.ts.map +1 -1
  154. package/dist/adapters/http/ui/index.mjs +2 -1
  155. package/dist/adapters/http/ui/internal-http-client.d.ts +22 -0
  156. package/dist/adapters/http/ui/internal-http-client.d.ts.map +1 -0
  157. package/dist/adapters/http/ui/internal-http-client.mjs +52 -0
  158. package/dist/adapters/http/ui/internal-http-client.mjs.map +1 -0
  159. package/dist/adapters/http/ui/render.d.ts.map +1 -1
  160. package/dist/adapters/http/ui/render.mjs +5 -2
  161. package/dist/adapters/http/ui/render.mjs.map +1 -1
  162. package/dist/adapters/http/ui/types.d.ts +12 -0
  163. package/dist/adapters/http/ui/types.d.ts.map +1 -1
  164. package/dist/app/modules/authentication/repositories/session.d.ts +5 -2
  165. package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
  166. package/dist/app/modules/authentication/repositories/session.mjs +63 -0
  167. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  168. package/dist/app/modules/config/constants.d.ts +4 -0
  169. package/dist/app/modules/config/constants.d.ts.map +1 -1
  170. package/dist/app/modules/config/constants.mjs +4 -0
  171. package/dist/app/modules/config/constants.mjs.map +1 -1
  172. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  173. package/dist/app/modules/config/normalize.mjs +6 -1
  174. package/dist/app/modules/config/normalize.mjs.map +1 -1
  175. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  176. package/dist/app/modules/config/read/env.mjs +8 -0
  177. package/dist/app/modules/config/read/env.mjs.map +1 -1
  178. package/dist/app/modules/config/types.d.ts +31 -2
  179. package/dist/app/modules/config/types.d.ts.map +1 -1
  180. package/dist/app/modules/config/validator.d.ts.map +1 -1
  181. package/dist/app/modules/config/validator.mjs +5 -0
  182. package/dist/app/modules/config/validator.mjs.map +1 -1
  183. package/dist/app/modules/database/module.d.ts +1 -0
  184. package/dist/app/modules/database/module.d.ts.map +1 -1
  185. package/dist/app/modules/database/module.mjs +19 -6
  186. package/dist/app/modules/database/module.mjs.map +1 -1
  187. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  188. package/dist/app/modules/database/repositories/client/repository.mjs +10 -6
  189. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  190. package/dist/app/modules/database/repositories/helpers.d.ts +11 -0
  191. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  192. package/dist/app/modules/database/repositories/helpers.mjs +12 -1
  193. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  194. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
  195. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +8 -8
  196. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  197. package/dist/app/modules/database/repositories/permission/repository.d.ts.map +1 -1
  198. package/dist/app/modules/database/repositories/permission/repository.mjs +4 -3
  199. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  200. package/dist/app/modules/database/repositories/policy/repository.d.ts.map +1 -1
  201. package/dist/app/modules/database/repositories/policy/repository.mjs +4 -3
  202. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  203. package/dist/app/modules/database/repositories/realm/repository.d.ts +1 -0
  204. package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
  205. package/dist/app/modules/database/repositories/realm/repository.mjs +14 -1
  206. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  207. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  208. package/dist/app/modules/database/repositories/robot/repository.mjs +8 -6
  209. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  210. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  211. package/dist/app/modules/database/repositories/role/repository.mjs +4 -3
  212. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  213. package/dist/app/modules/database/repositories/role-attribute/repository.d.ts.map +1 -1
  214. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -1
  215. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  216. package/dist/app/modules/database/repositories/scope/repository.d.ts.map +1 -1
  217. package/dist/app/modules/database/repositories/scope/repository.mjs +4 -3
  218. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  219. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  220. package/dist/app/modules/database/repositories/user/repository.mjs +8 -5
  221. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  222. package/dist/app/modules/database/repositories/user-attribute/repository.d.ts.map +1 -1
  223. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -1
  224. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  225. package/dist/app/modules/http/constants.d.ts +4 -2
  226. package/dist/app/modules/http/constants.d.ts.map +1 -1
  227. package/dist/app/modules/http/constants.mjs +4 -2
  228. package/dist/app/modules/http/constants.mjs.map +1 -1
  229. package/dist/app/modules/http/module.d.ts +10 -0
  230. package/dist/app/modules/http/module.d.ts.map +1 -1
  231. package/dist/app/modules/http/module.mjs +30 -0
  232. package/dist/app/modules/http/module.mjs.map +1 -1
  233. package/dist/app/modules/http/modules/controller.d.ts +4 -2
  234. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  235. package/dist/app/modules/http/modules/controller.mjs +57 -15
  236. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  237. package/dist/app/modules/http/modules/middleware.mjs +1 -1
  238. package/dist/app/modules/oauth2/constants.d.ts +2 -1
  239. package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
  240. package/dist/app/modules/oauth2/constants.mjs +1 -0
  241. package/dist/app/modules/oauth2/constants.mjs.map +1 -1
  242. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  243. package/dist/app/modules/oauth2/module.mjs +10 -4
  244. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  245. package/dist/app/modules/oauth2/repositories/index.d.ts +1 -0
  246. package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
  247. package/dist/app/modules/oauth2/repositories/index.mjs +3 -1
  248. package/dist/app/modules/oauth2/repositories/session-token/index.d.ts +2 -0
  249. package/dist/app/modules/oauth2/repositories/session-token/index.d.ts.map +1 -0
  250. package/dist/app/modules/oauth2/repositories/session-token/index.mjs +5 -0
  251. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +17 -0
  252. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -0
  253. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +63 -0
  254. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -0
  255. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  256. package/dist/app/modules/provisioning/sources/default/module.mjs +1 -0
  257. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  258. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  259. package/dist/app/modules/provisioning/sources/file/module.mjs +2 -1
  260. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  261. package/dist/cli/commands/migration.d.ts.map +1 -1
  262. package/dist/cli/commands/migration.mjs +12 -4
  263. package/dist/cli/commands/migration.mjs.map +1 -1
  264. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  265. package/dist/components/oauth2-cleaner/module.mjs +3 -0
  266. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  267. package/dist/core/authentication/index.mjs +2 -1
  268. package/dist/core/authentication/session/index.mjs +2 -1
  269. package/dist/core/authentication/session/module.d.ts +1 -0
  270. package/dist/core/authentication/session/module.d.ts.map +1 -1
  271. package/dist/core/authentication/session/module.mjs +3 -0
  272. package/dist/core/authentication/session/module.mjs.map +1 -1
  273. package/dist/core/authentication/session/types.d.ts +34 -0
  274. package/dist/core/authentication/session/types.d.ts.map +1 -1
  275. package/dist/core/authentication/session/types.mjs +18 -1
  276. package/dist/core/authentication/session/types.mjs.map +1 -0
  277. package/dist/core/entities/client/web-client.d.ts +5 -3
  278. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  279. package/dist/core/entities/client/web-client.mjs +8 -4
  280. package/dist/core/entities/client/web-client.mjs.map +1 -1
  281. package/dist/core/entities/index.d.ts +1 -0
  282. package/dist/core/entities/index.d.ts.map +1 -1
  283. package/dist/core/entities/index.mjs +3 -1
  284. package/dist/core/entities/realm/types.d.ts +9 -0
  285. package/dist/core/entities/realm/types.d.ts.map +1 -1
  286. package/dist/core/entities/session/index.d.ts +3 -0
  287. package/dist/core/entities/session/index.d.ts.map +1 -0
  288. package/dist/core/entities/session/index.mjs +5 -0
  289. package/dist/core/entities/session/service.d.ts +27 -0
  290. package/dist/core/entities/session/service.d.ts.map +1 -0
  291. package/dist/core/entities/session/service.mjs +151 -0
  292. package/dist/core/entities/session/service.mjs.map +1 -0
  293. package/dist/core/entities/session/types.d.ts +48 -0
  294. package/dist/core/entities/session/types.d.ts.map +1 -0
  295. package/dist/core/entities/session/types.mjs +4 -0
  296. package/dist/core/entities/user/service.d.ts +1 -0
  297. package/dist/core/entities/user/service.d.ts.map +1 -1
  298. package/dist/core/entities/user/service.mjs +1 -1
  299. package/dist/core/entities/user/service.mjs.map +1 -1
  300. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  301. package/dist/core/identity/password-recovery/service.mjs +2 -1
  302. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  303. package/dist/core/identity/password-recovery/types.d.ts +1 -0
  304. package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
  305. package/dist/core/identity/permission/checker/service.d.ts.map +1 -1
  306. package/dist/core/identity/permission/checker/service.mjs +6 -5
  307. package/dist/core/identity/permission/checker/service.mjs.map +1 -1
  308. package/dist/core/identity/policy/checker/service.d.ts.map +1 -1
  309. package/dist/core/identity/policy/checker/service.mjs +6 -5
  310. package/dist/core/identity/policy/checker/service.mjs.map +1 -1
  311. package/dist/core/identity/provider/authentication/presets/facebook.d.ts.map +1 -1
  312. package/dist/core/identity/provider/authentication/presets/facebook.mjs +2 -1
  313. package/dist/core/identity/provider/authentication/presets/facebook.mjs.map +1 -1
  314. package/dist/core/identity/provider/authentication/presets/github.d.ts.map +1 -1
  315. package/dist/core/identity/provider/authentication/presets/github.mjs +2 -1
  316. package/dist/core/identity/provider/authentication/presets/github.mjs.map +1 -1
  317. package/dist/core/identity/provider/authentication/presets/google.d.ts.map +1 -1
  318. package/dist/core/identity/provider/authentication/presets/google.mjs +2 -1
  319. package/dist/core/identity/provider/authentication/presets/google.mjs.map +1 -1
  320. package/dist/core/identity/provider/authentication/presets/instagram.d.ts.map +1 -1
  321. package/dist/core/identity/provider/authentication/presets/instagram.mjs +2 -1
  322. package/dist/core/identity/provider/authentication/presets/instagram.mjs.map +1 -1
  323. package/dist/core/identity/provider/authentication/presets/paypal.d.ts.map +1 -1
  324. package/dist/core/identity/provider/authentication/presets/paypal.mjs +2 -1
  325. package/dist/core/identity/provider/authentication/presets/paypal.mjs.map +1 -1
  326. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts.map +1 -1
  327. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +7 -2
  328. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  329. package/dist/core/identity/provider/authentication/protocols/open-id/module.d.ts +2 -0
  330. package/dist/core/identity/provider/authentication/protocols/open-id/module.d.ts.map +1 -1
  331. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs +5 -0
  332. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs.map +1 -1
  333. package/dist/core/identity/registration/service.d.ts.map +1 -1
  334. package/dist/core/identity/registration/service.mjs +9 -6
  335. package/dist/core/identity/registration/service.mjs.map +1 -1
  336. package/dist/core/identity/registration/types.d.ts +1 -0
  337. package/dist/core/identity/registration/types.d.ts.map +1 -1
  338. package/dist/core/identity/resolver/module.d.ts +7 -0
  339. package/dist/core/identity/resolver/module.d.ts.map +1 -1
  340. package/dist/core/identity/resolver/module.mjs +7 -1
  341. package/dist/core/identity/resolver/module.mjs.map +1 -1
  342. package/dist/core/index.mjs +10 -2
  343. package/dist/core/oauth2/authorization/code/index.mjs +1 -0
  344. package/dist/core/oauth2/authorization/code/issuer/module.d.ts +0 -1
  345. package/dist/core/oauth2/authorization/code/issuer/module.d.ts.map +1 -1
  346. package/dist/core/oauth2/authorization/code/issuer/module.mjs +7 -7
  347. package/dist/core/oauth2/authorization/code/issuer/module.mjs.map +1 -1
  348. package/dist/core/oauth2/authorization/code/issuer/types.d.ts +11 -2
  349. package/dist/core/oauth2/authorization/code/issuer/types.d.ts.map +1 -1
  350. package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
  351. package/dist/core/oauth2/authorization/code/verifier/module.mjs +1 -0
  352. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  353. package/dist/core/oauth2/authorization/code/verifier/types.d.ts +1 -0
  354. package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
  355. package/dist/core/oauth2/authorization/code-request/validator.d.ts.map +1 -1
  356. package/dist/core/oauth2/authorization/code-request/validator.mjs +19 -5
  357. package/dist/core/oauth2/authorization/code-request/validator.mjs.map +1 -1
  358. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  359. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +13 -10
  360. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  361. package/dist/core/oauth2/authorization/code-request/verifier/types.d.ts +7 -0
  362. package/dist/core/oauth2/authorization/code-request/verifier/types.d.ts.map +1 -1
  363. package/dist/core/oauth2/authorization/helpers.d.ts +2 -1
  364. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  365. package/dist/core/oauth2/authorization/helpers.mjs +19 -2
  366. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  367. package/dist/core/oauth2/authorization/module.d.ts +6 -7
  368. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  369. package/dist/core/oauth2/authorization/module.mjs +24 -38
  370. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  371. package/dist/core/oauth2/authorization/types.d.ts +15 -7
  372. package/dist/core/oauth2/authorization/types.d.ts.map +1 -1
  373. package/dist/core/oauth2/client/grant-type.d.ts +9 -0
  374. package/dist/core/oauth2/client/grant-type.d.ts.map +1 -0
  375. package/dist/core/oauth2/client/grant-type.mjs +18 -0
  376. package/dist/core/oauth2/client/grant-type.mjs.map +1 -0
  377. package/dist/core/oauth2/client/index.d.ts +1 -0
  378. package/dist/core/oauth2/client/index.d.ts.map +1 -1
  379. package/dist/core/oauth2/client/index.mjs +2 -1
  380. package/dist/core/oauth2/end-session/index.d.ts +4 -0
  381. package/dist/core/oauth2/end-session/index.d.ts.map +1 -0
  382. package/dist/core/oauth2/end-session/index.mjs +6 -0
  383. package/dist/core/oauth2/end-session/service.d.ts +30 -0
  384. package/dist/core/oauth2/end-session/service.d.ts.map +1 -0
  385. package/dist/core/oauth2/end-session/service.mjs +117 -0
  386. package/dist/core/oauth2/end-session/service.mjs.map +1 -0
  387. package/dist/core/oauth2/end-session/types.d.ts +55 -0
  388. package/dist/core/oauth2/end-session/types.d.ts.map +1 -0
  389. package/dist/core/oauth2/end-session/types.mjs +4 -0
  390. package/dist/core/oauth2/end-session/validator.d.ts +6 -0
  391. package/dist/core/oauth2/end-session/validator.d.ts.map +1 -0
  392. package/dist/core/oauth2/end-session/validator.mjs +23 -0
  393. package/dist/core/oauth2/end-session/validator.mjs.map +1 -0
  394. package/dist/core/oauth2/grant-types/authorize.d.ts +19 -2
  395. package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
  396. package/dist/core/oauth2/grant-types/authorize.mjs +53 -10
  397. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  398. package/dist/core/oauth2/grant-types/refresh-token.d.ts +21 -2
  399. package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
  400. package/dist/core/oauth2/grant-types/refresh-token.mjs +55 -9
  401. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  402. package/dist/core/oauth2/grant-types/types.d.ts +22 -2
  403. package/dist/core/oauth2/grant-types/types.d.ts.map +1 -1
  404. package/dist/core/oauth2/index.d.ts +2 -0
  405. package/dist/core/oauth2/index.d.ts.map +1 -1
  406. package/dist/core/oauth2/index.mjs +7 -3
  407. package/dist/core/oauth2/session-token/index.d.ts +2 -0
  408. package/dist/core/oauth2/session-token/index.d.ts.map +1 -0
  409. package/dist/core/oauth2/session-token/index.mjs +4 -0
  410. package/dist/core/oauth2/session-token/types.d.ts +70 -0
  411. package/dist/core/oauth2/session-token/types.d.ts.map +1 -0
  412. package/dist/core/oauth2/session-token/types.mjs +4 -0
  413. package/dist/core/oauth2/token/issuer/access/module.d.ts +3 -1
  414. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  415. package/dist/core/oauth2/token/issuer/access/module.mjs +12 -1
  416. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  417. package/dist/core/oauth2/token/issuer/open-id/module.d.ts.map +1 -1
  418. package/dist/core/oauth2/token/issuer/open-id/module.mjs +1 -1
  419. package/dist/core/oauth2/token/issuer/open-id/module.mjs.map +1 -1
  420. package/dist/core/oauth2/token/issuer/refresh/module.d.ts +3 -1
  421. package/dist/core/oauth2/token/issuer/refresh/module.d.ts.map +1 -1
  422. package/dist/core/oauth2/token/issuer/refresh/module.mjs +12 -1
  423. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  424. package/dist/core/oauth2/token/revoker/module.d.ts +3 -1
  425. package/dist/core/oauth2/token/revoker/module.d.ts.map +1 -1
  426. package/dist/core/oauth2/token/revoker/module.mjs +4 -1
  427. package/dist/core/oauth2/token/revoker/module.mjs.map +1 -1
  428. package/dist/core/oauth2/token/verifier/module.d.ts.map +1 -1
  429. package/dist/core/oauth2/token/verifier/module.mjs +4 -4
  430. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  431. package/dist/core/oauth2/token/verifier/types.d.ts +6 -0
  432. package/dist/core/oauth2/token/verifier/types.d.ts.map +1 -1
  433. package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
  434. package/dist/core/provisioning/entities/client/relations-validator.mjs +3 -2
  435. package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
  436. package/dist/core/provisioning/entities/index.d.ts +1 -0
  437. package/dist/core/provisioning/entities/index.d.ts.map +1 -1
  438. package/dist/core/provisioning/entities/index.mjs +5 -1
  439. package/dist/core/provisioning/entities/permission/index.d.ts +1 -0
  440. package/dist/core/provisioning/entities/permission/index.d.ts.map +1 -1
  441. package/dist/core/provisioning/entities/permission/index.mjs +2 -1
  442. package/dist/core/provisioning/entities/permission/relations-validator.d.ts +6 -0
  443. package/dist/core/provisioning/entities/permission/relations-validator.d.ts.map +1 -0
  444. package/dist/core/provisioning/entities/permission/relations-validator.mjs +17 -0
  445. package/dist/core/provisioning/entities/permission/relations-validator.mjs.map +1 -0
  446. package/dist/core/provisioning/entities/permission/validator.d.ts.map +1 -1
  447. package/dist/core/provisioning/entities/permission/validator.mjs +3 -0
  448. package/dist/core/provisioning/entities/permission/validator.mjs.map +1 -1
  449. package/dist/core/provisioning/entities/policy/index.d.ts +1 -0
  450. package/dist/core/provisioning/entities/policy/index.d.ts.map +1 -1
  451. package/dist/core/provisioning/entities/policy/index.mjs +2 -1
  452. package/dist/core/provisioning/entities/policy/validator.d.ts +6 -0
  453. package/dist/core/provisioning/entities/policy/validator.d.ts.map +1 -0
  454. package/dist/core/provisioning/entities/policy/validator.mjs +26 -0
  455. package/dist/core/provisioning/entities/policy/validator.mjs.map +1 -0
  456. package/dist/core/provisioning/entities/realm/relations-validator.d.ts.map +1 -1
  457. package/dist/core/provisioning/entities/realm/relations-validator.mjs +9 -52
  458. package/dist/core/provisioning/entities/realm/relations-validator.mjs.map +1 -1
  459. package/dist/core/provisioning/entities/role/relations-validator.d.ts.map +1 -1
  460. package/dist/core/provisioning/entities/role/relations-validator.mjs +4 -0
  461. package/dist/core/provisioning/entities/role/relations-validator.mjs.map +1 -1
  462. package/dist/core/provisioning/entities/root/validator.d.ts.map +1 -1
  463. package/dist/core/provisioning/entities/root/validator.mjs +11 -26
  464. package/dist/core/provisioning/entities/root/validator.mjs.map +1 -1
  465. package/dist/core/provisioning/entities/utils.d.ts +10 -0
  466. package/dist/core/provisioning/entities/utils.d.ts.map +1 -0
  467. package/dist/core/provisioning/entities/utils.mjs +29 -0
  468. package/dist/core/provisioning/entities/utils.mjs.map +1 -0
  469. package/dist/core/provisioning/index.mjs +4 -1
  470. package/dist/core/provisioning/synchronizer/base.d.ts.map +1 -1
  471. package/dist/core/provisioning/synchronizer/base.mjs.map +1 -1
  472. package/dist/index.mjs +16 -11
  473. package/dist/swagger.json +531 -23
  474. package/dist/ui/client/.vite/ssr-manifest.json +1140 -114
  475. package/dist/ui/client/assets/{index-Cd3uWit-.js → index-CP9HCHoS.js} +15 -15
  476. package/dist/ui/client/assets/index-VM4JXBXw.css +2 -0
  477. package/dist/ui/client/index.html +2 -2
  478. package/dist/ui/server/assets/{multipart-parser-Dn2Ly9xU.js → multipart-parser-BCMy8Xwv.js} +11 -1
  479. package/dist/ui/server/assets/{multipart-parser-DyM9gi59.js → multipart-parser-BVY8pIV2.js} +11 -1
  480. package/dist/ui/server/server.js +8643 -6992
  481. package/package.json +15 -15
  482. package/dist/ui/client/assets/index-DoCTwJ8M.css +0 -2
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
9
8
  import { useRequestQuery } from "@routup/basic/query";
9
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
10
10
  //#region src/adapters/http/controllers/entities/role-permission/module.ts
11
11
  function _ts_decorate(decorators, target, key, desc) {
12
12
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DPut, DTags } from "@routup/decorators";
9
8
  import { useRequestQuery } from "@routup/basic/query";
9
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DPut, DTags } from "@routup/decorators";
10
10
  //#region src/adapters/http/controllers/entities/scope/module.ts
11
11
  function _ts_decorate(decorators, target, key, desc) {
12
12
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -0,0 +1,2 @@
1
+ export * from './module.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/entities/session/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { SessionController } from "./module.mjs";
5
+ export { SessionController };
@@ -0,0 +1,16 @@
1
+ import type { Session } from '@authup/core-kit';
2
+ import type { IAppEvent } from 'routup';
3
+ import type { EntityCollectionResponse, SessionDeleteManyResponse } from '@authup/core-http-kit';
4
+ import type { ISessionService } from '../../../../../core/index.ts';
5
+ export type SessionControllerContext = {
6
+ service: ISessionService;
7
+ };
8
+ export declare class SessionController {
9
+ protected service: ISessionService;
10
+ constructor(ctx: SessionControllerContext);
11
+ getMany(event: IAppEvent): Promise<EntityCollectionResponse<Session>>;
12
+ getOne(id: string, event: IAppEvent): Promise<Session>;
13
+ dropMany(event: IAppEvent): Promise<SessionDeleteManyResponse>;
14
+ drop(id: string, event: IAppEvent): Promise<Session>;
15
+ }
16
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/entities/session/module.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE,MAAM,MAAM,wBAAwB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,qBAEa,iBAAiB;IAC1B,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC;gBAEvB,GAAG,EAAE,wBAAwB;IAKnC,OAAO,CACG,KAAK,EAAE,SAAS,GAC7B,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAcvC,MAAM,CACK,EAAE,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,GAC7B,OAAO,CAAC,OAAO,CAAC;IAUb,QAAQ,CACE,KAAK,EAAE,SAAS,GAC7B,OAAO,CAAC,yBAAyB,CAAC;IAgB/B,IAAI,CACO,EAAE,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,GAC7B,OAAO,CAAC,OAAO,CAAC;CAStB"}
@@ -0,0 +1,102 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
+ import { useRequestSessionId } from "../../../request/helpers/session-id.mjs";
6
+ import "../../../request/index.mjs";
7
+ import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
8
+ import { isSelfToken } from "../../../../../utils/self-id.mjs";
9
+ import "../../../../../utils/index.mjs";
10
+ import "../../../middleware/index.mjs";
11
+ import { useRequestQuery } from "@routup/basic/query";
12
+ import { DContext, DController, DDelete, DGet, DPath, DTags } from "@routup/decorators";
13
+ //#region src/adapters/http/controllers/entities/session/module.ts
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ function _ts_param(paramIndex, decorator) {
24
+ return function(target, key) {
25
+ decorator(target, key, paramIndex);
26
+ };
27
+ }
28
+ var SessionController = class {
29
+ service;
30
+ constructor(ctx) {
31
+ this.service = ctx.service;
32
+ }
33
+ async getMany(event) {
34
+ const actor = buildActorContext(event);
35
+ const { data, meta } = await this.service.getMany(useRequestQuery(event), actor);
36
+ return {
37
+ data,
38
+ meta
39
+ };
40
+ }
41
+ async getOne(id, event) {
42
+ const actor = buildActorContext(event);
43
+ const resolvedId = isSelfToken(id) ? useRequestSessionId(event) ?? id : id;
44
+ return this.service.getOne(resolvedId, actor);
45
+ }
46
+ async dropMany(event) {
47
+ const actor = buildActorContext(event);
48
+ const result = await this.service.deleteMany(actor, {
49
+ query: useRequestQuery(event),
50
+ currentSessionId: useRequestSessionId(event)
51
+ });
52
+ event.response.status = 202;
53
+ return result;
54
+ }
55
+ async drop(id, event) {
56
+ const actor = buildActorContext(event);
57
+ const resolvedId = isSelfToken(id) ? useRequestSessionId(event) ?? id : id;
58
+ const entity = await this.service.delete(resolvedId, actor);
59
+ event.response.status = 202;
60
+ return entity;
61
+ }
62
+ };
63
+ _ts_decorate([
64
+ DGet("", [ForceLoggedInMiddleware]),
65
+ _ts_param(0, DContext()),
66
+ _ts_metadata("design:type", Function),
67
+ _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
68
+ _ts_metadata("design:returntype", Promise)
69
+ ], SessionController.prototype, "getMany", null);
70
+ _ts_decorate([
71
+ DGet("/:id", [ForceLoggedInMiddleware]),
72
+ _ts_param(0, DPath("id")),
73
+ _ts_param(1, DContext()),
74
+ _ts_metadata("design:type", Function),
75
+ _ts_metadata("design:paramtypes", [String, typeof IAppEvent === "undefined" ? Object : IAppEvent]),
76
+ _ts_metadata("design:returntype", Promise)
77
+ ], SessionController.prototype, "getOne", null);
78
+ _ts_decorate([
79
+ DDelete("", [ForceLoggedInMiddleware]),
80
+ _ts_param(0, DContext()),
81
+ _ts_metadata("design:type", Function),
82
+ _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
83
+ _ts_metadata("design:returntype", Promise)
84
+ ], SessionController.prototype, "dropMany", null);
85
+ _ts_decorate([
86
+ DDelete("/:id", [ForceLoggedInMiddleware]),
87
+ _ts_param(0, DPath("id")),
88
+ _ts_param(1, DContext()),
89
+ _ts_metadata("design:type", Function),
90
+ _ts_metadata("design:paramtypes", [String, typeof IAppEvent === "undefined" ? Object : IAppEvent]),
91
+ _ts_metadata("design:returntype", Promise)
92
+ ], SessionController.prototype, "drop", null);
93
+ SessionController = _ts_decorate([
94
+ DTags("session"),
95
+ DController(["/sessions", "/realms/:realmId/sessions"]),
96
+ _ts_metadata("design:type", Function),
97
+ _ts_metadata("design:paramtypes", [typeof SessionControllerContext === "undefined" ? Object : SessionControllerContext])
98
+ ], SessionController);
99
+ //#endregion
100
+ export { SessionController };
101
+
102
+ //# sourceMappingURL=module.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.mjs","names":["DContext","DController","DDelete","DGet","DPath","DTags","useRequestQuery","isSelfToken","ForceLoggedInMiddleware","buildActorContext","useRequestSessionId","SessionController","service","ctx","getMany","event","actor","data","meta","getOne","id","resolvedId","dropMany","result","deleteMany","query","currentSessionId","response","status","drop","entity","delete"],"sources":["../../../../../../src/adapters/http/controllers/entities/session/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 DContext,\n DController,\n DDelete,\n DGet,\n DPath,\n DTags,\n} from '@routup/decorators';\nimport type { Session } from '@authup/core-kit';\nimport type { IAppEvent } from 'routup';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { EntityCollectionResponse, SessionDeleteManyResponse } from '@authup/core-http-kit';\nimport { isSelfToken } from '../../../../../utils/index.ts';\nimport type { ISessionService } from '../../../../../core/index.ts';\nimport { ForceLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { buildActorContext, useRequestSessionId } from '../../../request/index.ts';\n\nexport type SessionControllerContext = {\n service: ISessionService,\n};\n\n@DTags('session')\n@DController(['/sessions', '/realms/:realmId/sessions'])\nexport class SessionController {\n protected service: ISessionService;\n\n constructor(ctx: SessionControllerContext) {\n this.service = ctx.service;\n }\n\n @DGet('', [ForceLoggedInMiddleware])\n async getMany(\n @DContext() event: IAppEvent,\n ): Promise<EntityCollectionResponse<Session>> {\n const actor = buildActorContext(event);\n const {\n data,\n meta,\n } = await this.service.getMany(useRequestQuery(event), actor);\n\n return {\n data,\n meta,\n };\n }\n\n @DGet('/:id', [ForceLoggedInMiddleware])\n async getOne(\n @DPath('id') id: string,\n @DContext() event: IAppEvent,\n ): Promise<Session> {\n const actor = buildActorContext(event);\n\n // `@me` / `@self` resolve to the caller's current session.\n const resolvedId = isSelfToken(id) ? (useRequestSessionId(event) ?? id) : id;\n\n return this.service.getOne(resolvedId, actor);\n }\n\n @DDelete('', [ForceLoggedInMiddleware])\n async dropMany(\n @DContext() event: IAppEvent,\n ): Promise<SessionDeleteManyResponse> {\n const actor = buildActorContext(event);\n\n // A recognized target filter (e.g. `?filter[user_id]=<uuid>`) → admin\n // force-logout (SESSION_DELETE + per-session realm-match). No filter →\n // self-service \"log out my other devices\" (keeps the current session).\n const result = await this.service.deleteMany(actor, {\n query: useRequestQuery(event),\n currentSessionId: useRequestSessionId(event),\n });\n\n event.response.status = 202;\n return result;\n }\n\n @DDelete('/:id', [ForceLoggedInMiddleware])\n async drop(\n @DPath('id') id: string,\n @DContext() event: IAppEvent,\n ): Promise<Session> {\n const actor = buildActorContext(event);\n\n const resolvedId = isSelfToken(id) ? (useRequestSessionId(event) ?? id) : id;\n const entity = await this.service.delete(resolvedId, actor);\n\n event.response.status = 202;\n return entity;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAaW,oBAAb,MAAaA;CACCC;CAEV,YAAYC,KAA+B;EACvC,KAAKD,UAAUC,IAAID;CACvB;CAEA,MACME,QACF,OAC0C;EAC1C,MAAME,QAAQP,kBAAkBM,KAAAA;EAChC,MAAM,EACFE,MACAC,SACA,MAAM,KAAKN,QAAQE,QAAQR,gBAAgBS,KAAAA,GAAQC,KAAAA;EAEvD,OAAO;GACHC;GACAC;EACJ;CACJ;CAEA,MACMC,OACF,IACA,OACgB;EAChB,MAAMH,QAAQP,kBAAkBM,KAAAA;EAGhC,MAAMM,aAAad,YAAYa,EAAAA,IAAOV,oBAAoBK,KAAAA,KAAUK,KAAMA;EAE1E,OAAO,KAAKR,QAAQO,OAAOE,YAAYL,KAAAA;CAC3C;CAEA,MACMM,SACF,OACkC;EAClC,MAAMN,QAAQP,kBAAkBM,KAAAA;EAKhC,MAAMQ,SAAS,MAAM,KAAKX,QAAQY,WAAWR,OAAO;GAChDS,OAAOnB,gBAAgBS,KAAAA;GACvBW,kBAAkBhB,oBAAoBK,KAAAA;EAC1C,CAAA;EAEAA,MAAMY,SAASC,SAAS;EACxB,OAAOL;CACX;CAEA,MACMM,KACF,IACA,OACgB;EAChB,MAAMb,QAAQP,kBAAkBM,KAAAA;EAEhC,MAAMM,aAAad,YAAYa,EAAAA,IAAOV,oBAAoBK,KAAAA,KAAUK,KAAMA;EAC1E,MAAMU,SAAS,MAAM,KAAKlB,QAAQmB,OAAOV,YAAYL,KAAAA;EAErDD,MAAMY,SAASC,SAAS;EACxB,OAAOE;CACX;AACJ;;WA5DetB,uBAAAA,CAAAA;;;;;;;eAgBIA,uBAAAA,CAAAA;;;;;;;;cAaDA,uBAAAA,CAAAA;;;;;;;kBAkBIA,uBAAAA,CAAAA;;;;;;;;;cAvDR,aAAa,2BAAA,CAAA"}
@@ -4,12 +4,12 @@ import.meta.url;
4
4
  import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import { applyRouteRealmIDToBody, getRequestRealmID } from "../../../request/helpers/realm-id.mjs";
6
6
  import "../../../request/index.mjs";
7
+ import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
8
  import { isSelfToken } from "../../../../../utils/self-id.mjs";
8
9
  import "../../../../../utils/index.mjs";
9
- import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
10
10
  import "../../../middleware/index.mjs";
11
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DPut, DTags } from "@routup/decorators";
12
11
  import { useRequestQuery } from "@routup/basic/query";
12
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DPut, DTags } from "@routup/decorators";
13
13
  //#region src/adapters/http/controllers/entities/user/module.ts
14
14
  function _ts_decorate(decorators, target, key, desc) {
15
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
9
8
  import { useRequestQuery } from "@routup/basic/query";
9
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
10
10
  //#region src/adapters/http/controllers/entities/user-attribute/module.ts
11
11
  function _ts_decorate(decorators, target, key, desc) {
12
12
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
9
8
  import { useRequestQuery } from "@routup/basic/query";
9
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
10
10
  //#region src/adapters/http/controllers/entities/user-permission/module.ts
11
11
  function _ts_decorate(decorators, target, key, desc) {
12
12
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -5,8 +5,8 @@ import { buildActorContext } from "../../../request/helpers/actor.mjs";
5
5
  import "../../../request/index.mjs";
6
6
  import { ForceLoggedInMiddleware } from "../../../middleware/built-in/loggedin/module.mjs";
7
7
  import "../../../middleware/index.mjs";
8
- import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
9
8
  import { useRequestQuery } from "@routup/basic/query";
9
+ import { DBody, DContext, DController, DDelete, DGet, DPath, DPost, DTags } from "@routup/decorators";
10
10
  //#region src/adapters/http/controllers/entities/user-role/module.ts
11
11
  function _ts_decorate(decorators, target, key, desc) {
12
12
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -16,6 +16,7 @@ import { ActivateController } from "./workflows/activate/module.mjs";
16
16
  import { AuthorizeController } from "./workflows/authorize/module.mjs";
17
17
  import { getJwkRouteHandler, getJwksRouteHandler } from "./workflows/jwks/handlers/read.mjs";
18
18
  import { JwkController } from "./workflows/jwks/module.mjs";
19
+ import { LogoutController } from "./workflows/logout/module.mjs";
19
20
  import { OpenIDController } from "./workflows/openid/module.mjs";
20
21
  import { PasswordForgotController } from "./workflows/password-forgot/module.mjs";
21
22
  import { PasswordResetController } from "./workflows/password-reset/module.mjs";
@@ -38,6 +39,7 @@ import { PolicyController } from "./entities/policy/module.mjs";
38
39
  import { PolicyAttributesValidator } from "./entities/policy/utils/attributes-validator.mjs";
39
40
  import { PolicyValidator } from "./entities/policy/utils/validation.mjs";
40
41
  import { ScopeController } from "./entities/scope/module.mjs";
42
+ import { SessionController } from "./entities/session/module.mjs";
41
43
  import { UserController } from "./entities/user/module.mjs";
42
44
  import { UserAttributeController } from "./entities/user-attribute/module.mjs";
43
45
  import { UserAttributeRequestValidator } from "./entities/user-attribute/utils/validation.mjs";
@@ -46,4 +48,4 @@ import { UserPermissionRequestValidator } from "./entities/user-permission/utils
46
48
  import { UserRoleController } from "./entities/user-role/module.mjs";
47
49
  import { UserRoleRequestValidator } from "./entities/user-role/utils/validation.mjs";
48
50
  import "./entities/index.mjs";
49
- export { ActivateController, AuthorizeController, ClientController, ClientPermissionController, ClientPermissionRequestValidator, ClientRoleController, ClientRoleRequestValidator, ClientScopeController, ClientScopeRequestValidator, IdentityProviderController, IdentityProviderRoleMappingController, JwkController, OpenIDController, PasswordForgotController, PasswordResetController, PermissionController, PermissionPolicyController, PolicyAttributesValidator, PolicyController, PolicyValidator, RealmController, RegisterController, RobotController, RobotPermissionController, RobotPermissionRequestValidator, RobotRoleController, RobotRoleRequestValidator, RoleAttributeController, RoleAttributeRequestValidator, RoleController, RolePermissionController, RolePermissionRequestValidator, ScopeController, StatusController, TokenController, UserAttributeController, UserAttributeRequestValidator, UserController, UserPermissionController, UserPermissionRequestValidator, UserRoleController, UserRoleRequestValidator, getJwkRouteHandler, getJwksRouteHandler };
51
+ export { ActivateController, AuthorizeController, ClientController, ClientPermissionController, ClientPermissionRequestValidator, ClientRoleController, ClientRoleRequestValidator, ClientScopeController, ClientScopeRequestValidator, IdentityProviderController, IdentityProviderRoleMappingController, JwkController, LogoutController, OpenIDController, PasswordForgotController, PasswordResetController, PermissionController, PermissionPolicyController, PolicyAttributesValidator, PolicyController, PolicyValidator, RealmController, RegisterController, RobotController, RobotPermissionController, RobotPermissionRequestValidator, RobotRoleController, RobotRoleRequestValidator, RoleAttributeController, RoleAttributeRequestValidator, RoleController, RolePermissionController, RolePermissionRequestValidator, ScopeController, SessionController, StatusController, TokenController, UserAttributeController, UserAttributeRequestValidator, UserController, UserPermissionController, UserPermissionRequestValidator, UserRoleController, UserRoleRequestValidator, getJwkRouteHandler, getJwksRouteHandler };
@@ -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;AAGxC,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;IAmBrC,OAAO,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAwB/D,KAAK,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CA6C7D"}
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;AAQxC,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;IAkBrC,OAAO,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB/D,KAAK,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CA+E7D"}
@@ -5,14 +5,14 @@ import { OAuth2AuthorizationCodeRequestValidator } from "../../../../../core/oau
5
5
  import "../../../../../core/index.mjs";
6
6
  import { readFromLocations } from "../../../request/helpers/locations.mjs";
7
7
  import "../../../request/index.mjs";
8
- import { HTTPOAuth2Authorizer } from "../../../adapters/oauth2/authorization/module.mjs";
9
- import "../../../adapters/index.mjs";
8
+ import { ForceUserLoggedInMiddleware } from "../../../middleware/built-in/loggedin/user.mjs";
10
9
  import { sanitizeError } from "../../../../../utils/error.mjs";
11
10
  import "../../../../../utils/index.mjs";
12
- import { ForceUserLoggedInMiddleware } from "../../../middleware/built-in/loggedin/user.mjs";
13
11
  import "../../../middleware/index.mjs";
14
12
  import { renderUIPage } from "../../../ui/render.mjs";
15
13
  import "../../../ui/index.mjs";
14
+ import { HTTPOAuth2Authorizer } from "../../../adapters/oauth2/authorization/module.mjs";
15
+ import "../../../adapters/index.mjs";
16
16
  import { URL } from "node:url";
17
17
  import { DContext, DController, DGet, DPost } from "@routup/decorators";
18
18
  //#region src/adapters/http/controllers/workflows/authorize/module.ts
@@ -41,10 +41,9 @@ var AuthorizeController = class {
41
41
  this.codeRequestValidator = new OAuth2AuthorizationCodeRequestValidator();
42
42
  this.authorizer = new HTTPOAuth2Authorizer({
43
43
  codeRequestVerifier: this.codeRequestVerifier,
44
- accessTokenIssuer: ctx.accessTokenIssuer,
45
- openIdTokenIssuer: ctx.openIdTokenIssuer,
46
44
  codeIssuer: ctx.codeIssuer,
47
- identityResolver: ctx.identityResolver
45
+ sessionManager: ctx.sessionManager,
46
+ promptLoginMaxAge: ctx.options.promptLoginMaxAge
48
47
  });
49
48
  }
50
49
  async confirm(event) {
@@ -52,21 +51,33 @@ var AuthorizeController = class {
52
51
  const url = new URL(result.redirectUri);
53
52
  if (result.state) url.searchParams.set("state", result.state);
54
53
  if (result.authorizationCode) url.searchParams.set("code", result.authorizationCode);
55
- if (result.accessToken) url.searchParams.set("access_token", result.accessToken);
56
- if (result.idToken) url.searchParams.set("id_token", result.idToken);
57
54
  return { url: url.href };
58
55
  }
59
56
  async serve(event) {
60
57
  let codeRequest;
61
58
  let client;
62
59
  let scopes;
60
+ let realm;
61
+ let redirectUriVerified = false;
63
62
  let error;
64
63
  try {
65
64
  const merged = await readFromLocations(event, ["body", "query"]);
66
65
  const data = await this.codeRequestValidator.run(merged);
67
66
  const result = await this.codeRequestVerifier.verify(data);
68
- client = result.client;
67
+ client = {
68
+ id: result.client.id,
69
+ name: result.client.name,
70
+ display_name: result.client.display_name,
71
+ built_in: result.client.built_in,
72
+ created_at: result.client.created_at
73
+ };
69
74
  scopes = result.scopes;
75
+ redirectUriVerified = result.redirectUriVerified;
76
+ if (result.client.realm) realm = {
77
+ id: result.client.realm.id,
78
+ name: result.client.realm.name,
79
+ display_name: result.client.realm.display_name
80
+ };
70
81
  codeRequest = result.data;
71
82
  } catch (e) {
72
83
  const normalized = sanitizeError(e);
@@ -85,6 +96,8 @@ var AuthorizeController = class {
85
96
  error,
86
97
  client,
87
98
  scopes,
99
+ realm,
100
+ redirectUriVerified,
88
101
  features: this.options.features,
89
102
  requestPath: `${requestURL.pathname}${requestURL.search}`
90
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["DContext","DController","DGet","DPost","URL","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","renderUIPage","readFromLocations","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","accessTokenIssuer","openIdTokenIssuer","codeIssuer","identityResolver","confirm","event","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","accessToken","idToken","href","serve","codeRequest","client","scopes","error","merged","data","run","verify","e","normalized","message","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 type { Client, OAuth2AuthorizationCodeRequest, Scope } from '@authup/core-kit';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport { renderUIPage } 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\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 accessTokenIssuer: ctx.accessTokenIssuer,\n openIdTokenIssuer: ctx.openIdTokenIssuer,\n codeIssuer: ctx.codeIssuer,\n identityResolver: ctx.identityResolver,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(@DContext() event: IAppEvent): Promise<{ url: string }> {\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 if (result.accessToken) {\n url.searchParams.set('access_token', result.accessToken);\n }\n\n if (result.idToken) {\n url.searchParams.set('id_token', result.idToken);\n }\n\n return { url: url.href };\n }\n\n @DGet('', [])\n async serve(@DContext() event: IAppEvent): Promise<string> {\n let codeRequest : OAuth2AuthorizationCodeRequest | undefined;\n\n let client : Client | undefined;\n let scopes : Scope[] | undefined;\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 client = result.client;\n scopes = result.scopes;\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 // 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 renderUIPage(event, {\n url: '/authorize',\n payload: {\n config: { baseURL: this.options.baseURL },\n data: {\n codeRequest,\n error,\n client,\n scopes,\n features: this.options.features,\n requestPath: `${requestURL.pathname}${requestURL.search}`,\n },\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,IAAaW,sBAAb,MAAaA;CAICC;CAEAC;CAEAC;CAEAC;CAIV,YAAYC,KAAiC;EACzC,KAAKJ,UAAUI,IAAIJ;EAEnB,KAAKC,sBAAsBG,IAAIH;EAE/B,KAAKC,uBAAuB,IAAIL,wCAAAA;EAEhC,KAAKM,aAAa,IAAIT,qBAAqB;GACvCO,qBAAqB,KAAKA;GAC1BI,mBAAmBD,IAAIC;GACvBC,mBAAmBF,IAAIE;GACvBC,YAAYH,IAAIG;GAChBC,kBAAkBJ,IAAII;EAC1B,CAAA;CACJ;CAIA,MACMC,QAAQ,OAAwD;EAClE,MAAME,SAAS,MAAM,KAAKR,WAAWS,qBAAqBF,KAAAA;EAE1D,MAAMG,MAAM,IAAIrB,IAAImB,OAAOG,WAAW;EACtC,IAAIH,OAAOI,OACPF,IAAIG,aAAaC,IAAI,SAASN,OAAOI,KAAK;EAG9C,IAAIJ,OAAOO,mBACPL,IAAIG,aAAaC,IAAI,QAAQN,OAAOO,iBAAiB;EAGzD,IAAIP,OAAOQ,aACPN,IAAIG,aAAaC,IAAI,gBAAgBN,OAAOQ,WAAW;EAG3D,IAAIR,OAAOS,SACPP,IAAIG,aAAaC,IAAI,YAAYN,OAAOS,OAAO;EAGnD,OAAO,EAAEP,KAAKA,IAAIQ,KAAK;CAC3B;CAEA,MACMC,MAAM,OAA+C;EACvD,IAAIC;EAEJ,IAAIC;EACJ,IAAIC;EAEJ,IAAIC;EAEJ,IAAI;GACA,MAAMC,SAAS,MAAM/B,kBAAkBc,OAAO,CAAC,QAAQ,OAAA,CAAQ;GAC/D,MAAMkB,OAAO,MAAM,KAAK1B,qBAAqB2B,IAAIF,MAAAA;GAEjD,MAAMhB,SAAS,MAAM,KAAKV,oBAAoB6B,OAAOF,IAAAA;GACrDJ,SAASb,OAAOa;GAChBC,SAASd,OAAOc;GAEhBF,cAAcZ,OAAOiB;EACzB,SAASG,GAAG;GACR,MAAMC,aAAalC,cAAciC,CAAAA;GACjCL,QAAQ;IACJ,GAAGM;IACHC,SAASD,WAAWC;GACxB;EACJ;EAKA,MAAMC,aAAa,IAAI1C,IAAIkB,MAAMyB,QAAQtB,GAAG;EAE5C,OAAOlB,aAAae,OAAO;GACvBG,KAAK;GACLuB,SAAS;IACLC,QAAQ,EAAEC,SAAS,KAAKtC,QAAQsC,QAAQ;IACxCV,MAAM;KACFL;KACAG;KACAF;KACAC;KACAc,UAAU,KAAKvC,QAAQuC;KACvBC,aAAa,GAAGN,WAAWO,WAAWP,WAAWQ;IACrD;GACJ;EACJ,CAAA;CACJ;AACJ;;YAtEgBjD,2BAAAA,CAAAA"}
1
+ {"version":3,"file":"module.mjs","names":["DContext","DController","DGet","DPost","URL","ForceUserLoggedInMiddleware","HTTPOAuth2Authorizer","renderUIPage","readFromLocations","OAuth2AuthorizationCodeRequestValidator","sanitizeError","AuthorizeController","options","codeRequestVerifier","codeRequestValidator","authorizer","ctx","codeIssuer","sessionManager","promptLoginMaxAge","confirm","event","result","authorizeWithRequest","url","redirectUri","state","searchParams","set","authorizationCode","href","serve","codeRequest","client","scopes","realm","redirectUriVerified","error","merged","data","run","verify","id","name","display_name","built_in","created_at","e","normalized","message","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 type {\n Client,\n OAuth2AuthorizationCodeRequest,\n Realm,\n Scope,\n} from '@authup/core-kit';\nimport { ForceUserLoggedInMiddleware } from '../../../middleware/index.ts';\nimport { HTTPOAuth2Authorizer } from '../../../adapters/index.ts';\nimport { renderUIPage } 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' | 'display_name'>;\ntype ClientSummary = Pick<Client, 'id' | 'name' | 'display_name' | 'built_in' | 'created_at'>;\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 promptLoginMaxAge: ctx.options.promptLoginMaxAge,\n });\n }\n\n // ---------------------------------------------------------\n\n @DPost('', [ForceUserLoggedInMiddleware])\n async confirm(@DContext() event: IAppEvent): Promise<{ url: string }> {\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 }\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, is_confidential, 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 display_name: result.client.display_name,\n built_in: result.client.built_in,\n created_at: result.client.created_at,\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 display_name: result.client.realm.display_name,\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 // 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 renderUIPage(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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,IAAaW,sBAAb,MAAaA;CAICC;CAEAC;CAEAC;CAEAC;CAIV,YAAYC,KAAiC;EACzC,KAAKJ,UAAUI,IAAIJ;EAEnB,KAAKC,sBAAsBG,IAAIH;EAE/B,KAAKC,uBAAuB,IAAIL,wCAAAA;EAEhC,KAAKM,aAAa,IAAIT,qBAAqB;GACvCO,qBAAqB,KAAKA;GAC1BI,YAAYD,IAAIC;GAChBC,gBAAgBF,IAAIE;GACpBC,mBAAmBH,IAAIJ,QAAQO;EACnC,CAAA;CACJ;CAIA,MACMC,QAAQ,OAAwD;EAClE,MAAME,SAAS,MAAM,KAAKP,WAAWQ,qBAAqBF,KAAAA;EAE1D,MAAMG,MAAM,IAAIpB,IAAIkB,OAAOG,WAAW;EACtC,IAAIH,OAAOI,OACPF,IAAIG,aAAaC,IAAI,SAASN,OAAOI,KAAK;EAG9C,IAAIJ,OAAOO,mBACPL,IAAIG,aAAaC,IAAI,QAAQN,OAAOO,iBAAiB;EAGzD,OAAO,EAAEL,KAAKA,IAAIM,KAAK;CAC3B;CAEA,MACMC,MAAM,OAA+C;EACvD,IAAIC;EAEJ,IAAIC;EACJ,IAAIC;EAIJ,IAAIC;EAKJ,IAAIC,sBAAsB;EAE1B,IAAIC;EAEJ,IAAI;GACA,MAAMC,SAAS,MAAM9B,kBAAkBa,OAAO,CAAC,QAAQ,OAAA,CAAQ;GAC/D,MAAMkB,OAAO,MAAM,KAAKzB,qBAAqB0B,IAAIF,MAAAA;GAEjD,MAAMhB,SAAS,MAAM,KAAKT,oBAAoB4B,OAAOF,IAAAA;GASrDN,SAAS;IACLS,IAAIpB,OAAOW,OAAOS;IAClBC,MAAMrB,OAAOW,OAAOU;IACpBC,cAActB,OAAOW,OAAOW;IAC5BC,UAAUvB,OAAOW,OAAOY;IACxBC,YAAYxB,OAAOW,OAAOa;GAC9B;GACAZ,SAASZ,OAAOY;GAChBE,sBAAsBd,OAAOc;GAE7B,IAAId,OAAOW,OAAOE,OACdA,QAAQ;IACJO,IAAIpB,OAAOW,OAAOE,MAAMO;IACxBC,MAAMrB,OAAOW,OAAOE,MAAMQ;IAC1BC,cAActB,OAAOW,OAAOE,MAAMS;GACtC;GAGJZ,cAAcV,OAAOiB;EACzB,SAASQ,GAAG;GACR,MAAMC,aAAatC,cAAcqC,CAAAA;GACjCV,QAAQ;IACJ,GAAGW;IACHC,SAASD,WAAWC;GACxB;EACJ;EAKA,MAAMC,aAAa,IAAI9C,IAAIiB,MAAM8B,QAAQ3B,GAAG;EAE5C,OAAOjB,aAAac,OAAO;GACvBG,KAAK;GACL4B,SAAS;IACLC,QAAQ,EAAEC,SAAS,KAAK1C,QAAQ0C,QAAQ;IACxCf,MAAM;KACFP;KACAK;KACAJ;KACAC;KACAC;KACAC;KACAmB,UAAU,KAAK3C,QAAQ2C;KACvBC,aAAa,GAAGN,WAAWO,WAAWP,WAAWQ;IACrD;GACJ;EACJ,CAAA;CACJ;AACJ;;YAhGgBrD,2BAAAA,CAAAA"}
@@ -1,15 +1,18 @@
1
1
  import type { StatusResponseFeatures } from '@authup/core-http-kit';
2
- import type { IIdentityResolver, IOAuth2AuthorizationCodeIssuer, IOAuth2AuthorizationCodeRequestVerifier, IOAuth2OpenIDTokenIssuer, IOAuth2TokenIssuer } from '../../../../../core/index.ts';
2
+ import type { IOAuth2AuthorizationCodeIssuer, IOAuth2AuthorizationCodeRequestVerifier, ISessionManager } from '../../../../../core/index.ts';
3
3
  export type AuthorizeControllerOptions = {
4
4
  baseURL: string;
5
5
  features: StatusResponseFeatures;
6
+ /**
7
+ * Max age (seconds) a `prompt=login` request accepts before forcing re-auth
8
+ * (config `promptLoginMaxAge`).
9
+ */
10
+ promptLoginMaxAge?: number;
6
11
  };
7
12
  export type AuthorizeControllerContext = {
8
13
  options: AuthorizeControllerOptions;
9
- accessTokenIssuer: IOAuth2TokenIssuer;
10
- openIdTokenIssuer: IOAuth2OpenIDTokenIssuer;
11
14
  codeIssuer: IOAuth2AuthorizationCodeIssuer;
12
15
  codeRequestVerifier: IOAuth2AuthorizationCodeRequestVerifier;
13
- identityResolver: IIdentityResolver;
16
+ sessionManager: ISessionManager;
14
17
  };
15
18
  //# sourceMappingURL=types.d.ts.map
@@ -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,EACR,iBAAiB,EACjB,8BAA8B,EAC9B,uCAAuC,EACvC,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,0BAA0B,CAAC;IAEpC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,iBAAiB,EAAE,wBAAwB,CAAC;IAE5C,UAAU,EAAE,8BAA8B,CAAC;IAC3C,mBAAmB,EAAE,uCAAuC,CAAC;IAE7D,gBAAgB,EAAE,iBAAiB,CAAA;CACtC,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,EACR,8BAA8B,EAC9B,uCAAuC,EACvC,eAAe,EAClB,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;CAC9B,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,CAAA;CAClC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './activate/index.ts';
2
2
  export * from './authorize/index.ts';
3
3
  export * from './jwks/index.ts';
4
+ export * from './logout/index.ts';
4
5
  export * from './openid/index.ts';
5
6
  export * from './password-forgot/index.ts';
6
7
  export * from './password-reset/index.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/controllers/workflows/index.ts"],"names":[],"mappings":"AAOA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/controllers/workflows/index.ts"],"names":[],"mappings":"AAOA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -8,6 +8,8 @@ import "./authorize/index.mjs";
8
8
  import { getJwkRouteHandler, getJwksRouteHandler } from "./jwks/handlers/read.mjs";
9
9
  import { JwkController } from "./jwks/module.mjs";
10
10
  import "./jwks/index.mjs";
11
+ import { LogoutController } from "./logout/module.mjs";
12
+ import "./logout/index.mjs";
11
13
  import { OpenIDController } from "./openid/module.mjs";
12
14
  import "./openid/index.mjs";
13
15
  import { PasswordForgotController } from "./password-forgot/module.mjs";
@@ -20,4 +22,4 @@ import { StatusController } from "./status/module.mjs";
20
22
  import "./status/index.mjs";
21
23
  import { TokenController } from "./token/module.mjs";
22
24
  import "./token/index.mjs";
23
- export { ActivateController, AuthorizeController, JwkController, OpenIDController, PasswordForgotController, PasswordResetController, RegisterController, StatusController, TokenController, getJwkRouteHandler, getJwksRouteHandler };
25
+ export { ActivateController, AuthorizeController, JwkController, LogoutController, OpenIDController, PasswordForgotController, PasswordResetController, RegisterController, StatusController, TokenController, getJwkRouteHandler, getJwksRouteHandler };
@@ -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/logout/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 { LogoutController } from "./module.mjs";
5
+ export { LogoutController };
@@ -0,0 +1,14 @@
1
+ import type { IAppEvent } from 'routup';
2
+ import type { IOAuth2EndSessionService } from '../../../../../core/index.ts';
3
+ import { OAuth2EndSessionRequestValidator } from '../../../../../core/index.ts';
4
+ import type { LogoutControllerContext, LogoutControllerOptions } from './types.ts';
5
+ export declare class LogoutController {
6
+ protected options: LogoutControllerOptions;
7
+ protected endSessionService: IOAuth2EndSessionService;
8
+ protected validator: OAuth2EndSessionRequestValidator;
9
+ constructor(ctx: LogoutControllerContext);
10
+ serve(event: IAppEvent): Promise<string | Response>;
11
+ execute(event: IAppEvent): Promise<string | Response>;
12
+ protected handle(event: IAppEvent): Promise<string | Response>;
13
+ }
14
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/controllers/workflows/logout/module.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,wBAAwB,EAA2B,MAAM,8BAA8B,CAAC;AACtG,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAGhF,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEnF,qBACa,gBAAgB;IACzB,SAAS,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAE3C,SAAS,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IAEtD,SAAS,CAAC,SAAS,EAAE,gCAAgC,CAAC;gBAE1C,GAAG,EAAE,uBAAuB;IAOlC,KAAK,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;IAM/D,OAAO,CAAa,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;cAIvD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;CAyEvE"}
@@ -0,0 +1,101 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { OAuth2EndSessionRequestValidator } from "../../../../../core/oauth2/end-session/validator.mjs";
5
+ import "../../../../../core/index.mjs";
6
+ import { readFromLocations } from "../../../request/helpers/locations.mjs";
7
+ import "../../../request/index.mjs";
8
+ import { renderUIPage } from "../../../ui/render.mjs";
9
+ import "../../../ui/index.mjs";
10
+ import { URL } from "node:url";
11
+ import { sendRedirect } from "routup";
12
+ import { DContext, DController, DGet, DPost } from "@routup/decorators";
13
+ //#region src/adapters/http/controllers/workflows/logout/module.ts
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ function _ts_param(paramIndex, decorator) {
24
+ return function(target, key) {
25
+ decorator(target, key, paramIndex);
26
+ };
27
+ }
28
+ var LogoutController = class {
29
+ options;
30
+ endSessionService;
31
+ validator;
32
+ constructor(ctx) {
33
+ this.options = ctx.options;
34
+ this.endSessionService = ctx.endSessionService;
35
+ this.validator = new OAuth2EndSessionRequestValidator();
36
+ }
37
+ async serve(event) {
38
+ return this.handle(event);
39
+ }
40
+ async execute(event) {
41
+ return this.handle(event);
42
+ }
43
+ async handle(event) {
44
+ const merged = await readFromLocations(event, ["body", "query"]);
45
+ let data;
46
+ try {
47
+ data = await this.validator.run(merged);
48
+ } catch {
49
+ data = {};
50
+ }
51
+ const result = await this.endSessionService.verify(data);
52
+ let serverRevoked = false;
53
+ if (result.hintVerified && result.sessionId && result.sub && result.subKind) serverRevoked = await this.endSessionService.revoke(result.sessionId, result.sub, result.subKind);
54
+ let redirect;
55
+ if (result.redirectUri) {
56
+ const url = new URL(result.redirectUri);
57
+ if (result.state) url.searchParams.set("state", result.state);
58
+ redirect = url.href;
59
+ }
60
+ if (serverRevoked && redirect) return sendRedirect(event, redirect);
61
+ const requestURL = new URL(event.request.url);
62
+ return renderUIPage(event, {
63
+ url: "/logout",
64
+ payload: {
65
+ config: { baseURL: this.options.baseURL },
66
+ data: {
67
+ client: result.clientName ? { name: result.clientName } : void 0,
68
+ hintVerified: result.hintVerified,
69
+ hintSub: result.hintVerified ? result.sub : void 0,
70
+ hintSubKind: result.hintVerified ? result.subKind : void 0,
71
+ serverRevoked,
72
+ redirect,
73
+ requestPath: `${requestURL.pathname}${requestURL.search}`
74
+ }
75
+ }
76
+ });
77
+ }
78
+ };
79
+ _ts_decorate([
80
+ DGet("", []),
81
+ _ts_param(0, DContext()),
82
+ _ts_metadata("design:type", Function),
83
+ _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
84
+ _ts_metadata("design:returntype", Promise)
85
+ ], LogoutController.prototype, "serve", null);
86
+ _ts_decorate([
87
+ DPost("", []),
88
+ _ts_param(0, DContext()),
89
+ _ts_metadata("design:type", Function),
90
+ _ts_metadata("design:paramtypes", [typeof IAppEvent === "undefined" ? Object : IAppEvent]),
91
+ _ts_metadata("design:returntype", Promise)
92
+ ], LogoutController.prototype, "execute", null);
93
+ LogoutController = _ts_decorate([
94
+ DController("/logout"),
95
+ _ts_metadata("design:type", Function),
96
+ _ts_metadata("design:paramtypes", [typeof LogoutControllerContext === "undefined" ? Object : LogoutControllerContext])
97
+ ], LogoutController);
98
+ //#endregion
99
+ export { LogoutController };
100
+
101
+ //# sourceMappingURL=module.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.mjs","names":["DContext","DController","DGet","DPost","URL","sendRedirect","OAuth2EndSessionRequestValidator","readFromLocations","renderUIPage","LogoutController","options","endSessionService","validator","ctx","serve","event","handle","execute","merged","data","run","result","verify","serverRevoked","hintVerified","sessionId","sub","subKind","revoke","redirect","redirectUri","url","state","searchParams","set","href","requestURL","request","payload","config","baseURL","client","clientName","name","undefined","hintSub","hintSubKind","requestPath","pathname","search"],"sources":["../../../../../../src/adapters/http/controllers/workflows/logout/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 DContext,\n DController,\n DGet,\n DPost,\n} from '@routup/decorators';\nimport { URL } from 'node:url';\nimport type { IAppEvent } from 'routup';\nimport { sendRedirect } from 'routup';\nimport type { IOAuth2EndSessionService, OAuth2EndSessionRequest } from '../../../../../core/index.ts';\nimport { OAuth2EndSessionRequestValidator } from '../../../../../core/index.ts';\nimport { readFromLocations } from '../../../request/index.ts';\nimport { renderUIPage } from '../../../ui/index.ts';\nimport type { LogoutControllerContext, LogoutControllerOptions } from './types.ts';\n\n@DController('/logout')\nexport class LogoutController {\n protected options: LogoutControllerOptions;\n\n protected endSessionService: IOAuth2EndSessionService;\n\n protected validator: OAuth2EndSessionRequestValidator;\n\n constructor(ctx: LogoutControllerContext) {\n this.options = ctx.options;\n this.endSessionService = ctx.endSessionService;\n this.validator = new OAuth2EndSessionRequestValidator();\n }\n\n @DGet('', [])\n async serve(@DContext() event: IAppEvent): Promise<string | Response> {\n return this.handle(event);\n }\n\n // OIDC RP-Initiated Logout allows form_post on the same endpoint.\n @DPost('', [])\n async execute(@DContext() event: IAppEvent): Promise<string | Response> {\n return this.handle(event);\n }\n\n protected async handle(event: IAppEvent): Promise<string | Response> {\n const merged = await readFromLocations(event, ['body', 'query']);\n\n // Malformed input (oversized / duplicated params) must never dead-end\n // the human behind the browser on a JSON error: fall back to a\n // parameter-less confirm page — every attacker-controlled value is\n // dropped, the click-gated sign-out keeps working.\n let data: OAuth2EndSessionRequest;\n try {\n data = await this.validator.run(merged);\n } catch {\n data = {};\n }\n\n const result = await this.endSessionService.verify(data);\n\n // A signature-verified id_token_hint proves possession — revoke the\n // referenced session server-side immediately (only if it belongs to the\n // hint's subject). Without a hint we mutate nothing; the SSR page's\n // sign-out is a click-gated, bearer-authenticated action.\n let serverRevoked = false;\n if (result.hintVerified && result.sessionId && result.sub && result.subKind) {\n serverRevoked = await this.endSessionService.revoke(\n result.sessionId,\n result.sub,\n result.subKind,\n );\n }\n\n // Build the validated post-logout redirect (the open-redirect guard\n // lives in the service; `state` rides only alongside a validated uri).\n let redirect: string | undefined;\n if (result.redirectUri) {\n const url = new URL(result.redirectUri);\n if (result.state) {\n url.searchParams.set('state', result.state);\n }\n\n redirect = url.href;\n }\n\n // Bounce straight back to the RP ONLY when the logout was actually\n // performed server-side (a verified hint revoked the session). A\n // hint-less or forged request MUST NOT silently redirect without ending\n // the session — otherwise the RP treats a no-op round-trip as a\n // successful logout while the authup session survives. Instead render\n // the click-gated confirm page, which performs the bearer-authenticated\n // sign-out and then redirects.\n if (serverRevoked && redirect) {\n return sendRedirect(event, redirect);\n }\n\n const requestURL = new URL(event.request.url);\n\n return renderUIPage(event, {\n url: '/logout',\n payload: {\n config: { baseURL: this.options.baseURL },\n data: {\n client: result.clientName ? { name: result.clientName } : undefined,\n hintVerified: result.hintVerified,\n // never reflect an unverified hint's claims\n hintSub: result.hintVerified ? result.sub : undefined,\n hintSubKind: result.hintVerified ? result.subKind : undefined,\n serverRevoked,\n // the (already validated) uri to return to after a click-gated\n // sign-out; carries `state` when present\n redirect,\n requestPath: `${requestURL.pathname}${requestURL.search}`,\n },\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAaS,mBAAb,MAAaA;CACCC;CAEAC;CAEAC;CAEV,YAAYC,KAA8B;EACtC,KAAKH,UAAUG,IAAIH;EACnB,KAAKC,oBAAoBE,IAAIF;EAC7B,KAAKC,YAAY,IAAIN,iCAAAA;CACzB;CAEA,MACMQ,MAAM,OAA0D;EAClE,OAAO,KAAKE,OAAOD,KAAAA;CACvB;CAGA,MACME,QAAQ,OAA0D;EACpE,OAAO,KAAKD,OAAOD,KAAAA;CACvB;CAEA,MAAgBC,OAAOD,OAA8C;EACjE,MAAMG,SAAS,MAAMX,kBAAkBQ,OAAO,CAAC,QAAQ,OAAA,CAAQ;EAM/D,IAAII;EACJ,IAAI;GACAA,OAAO,MAAM,KAAKP,UAAUQ,IAAIF,MAAAA;EACpC,QAAQ;GACJC,OAAO,CAAC;EACZ;EAEA,MAAME,SAAS,MAAM,KAAKV,kBAAkBW,OAAOH,IAAAA;EAMnD,IAAII,gBAAgB;EACpB,IAAIF,OAAOG,gBAAgBH,OAAOI,aAAaJ,OAAOK,OAAOL,OAAOM,SAChEJ,gBAAgB,MAAM,KAAKZ,kBAAkBiB,OACzCP,OAAOI,WACPJ,OAAOK,KACPL,OAAOM,OAAO;EAMtB,IAAIE;EACJ,IAAIR,OAAOS,aAAa;GACpB,MAAMC,MAAM,IAAI3B,IAAIiB,OAAOS,WAAW;GACtC,IAAIT,OAAOW,OACPD,IAAIE,aAAaC,IAAI,SAASb,OAAOW,KAAK;GAG9CH,WAAWE,IAAII;EACnB;EASA,IAAIZ,iBAAiBM,UACjB,OAAOxB,aAAaU,OAAOc,QAAAA;EAG/B,MAAMO,aAAa,IAAIhC,IAAIW,MAAMsB,QAAQN,GAAG;EAE5C,OAAOvB,aAAaO,OAAO;GACvBgB,KAAK;GACLO,SAAS;IACLC,QAAQ,EAAEC,SAAS,KAAK9B,QAAQ8B,QAAQ;IACxCrB,MAAM;KACFsB,QAAQpB,OAAOqB,aAAa,EAAEC,MAAMtB,OAAOqB,WAAW,IAAIE,KAAAA;KAC1DpB,cAAcH,OAAOG;KAErBqB,SAASxB,OAAOG,eAAeH,OAAOK,MAAMkB,KAAAA;KAC5CE,aAAazB,OAAOG,eAAeH,OAAOM,UAAUiB,KAAAA;KACpDrB;KAGAM;KACAkB,aAAa,GAAGX,WAAWY,WAAWZ,WAAWa;IACrD;GACJ;EACJ,CAAA;CACJ;AACJ"}
@@ -0,0 +1,9 @@
1
+ import type { IOAuth2EndSessionService } from '../../../../../core/index.ts';
2
+ export type LogoutControllerOptions = {
3
+ baseURL: string;
4
+ };
5
+ export type LogoutControllerContext = {
6
+ options: LogoutControllerOptions;
7
+ endSessionService: IOAuth2EndSessionService;
8
+ };
9
+ //# sourceMappingURL=types.d.ts.map