@authup/server-core 1.0.0-beta.53 → 1.0.0-beta.55

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 (1255) 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 +0 -13
  3. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client/entity.d.ts +16 -16
  5. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  6. package/dist/adapters/database/domains/client/entity.mjs +54 -36
  7. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  8. package/dist/adapters/database/domains/client/subscriber.mjs +3 -3
  9. package/dist/adapters/database/domains/client/subscriber.mjs.map +1 -1
  10. package/dist/adapters/database/domains/client-permission/entity.d.ts +10 -10
  11. package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
  12. package/dist/adapters/database/domains/client-permission/entity.mjs +42 -23
  13. package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
  14. package/dist/adapters/database/domains/client-permission/subscriber.mjs +4 -4
  15. package/dist/adapters/database/domains/client-permission/subscriber.mjs.map +1 -1
  16. package/dist/adapters/database/domains/client-role/entity.d.ts +8 -8
  17. package/dist/adapters/database/domains/client-role/entity.d.ts.map +1 -1
  18. package/dist/adapters/database/domains/client-role/entity.mjs +31 -19
  19. package/dist/adapters/database/domains/client-role/entity.mjs.map +1 -1
  20. package/dist/adapters/database/domains/client-role/subscriber.mjs +4 -4
  21. package/dist/adapters/database/domains/client-role/subscriber.mjs.map +1 -1
  22. package/dist/adapters/database/domains/client-scope/entity.d.ts +8 -8
  23. package/dist/adapters/database/domains/client-scope/entity.d.ts.map +1 -1
  24. package/dist/adapters/database/domains/client-scope/entity.mjs +31 -19
  25. package/dist/adapters/database/domains/client-scope/entity.mjs.map +1 -1
  26. package/dist/adapters/database/domains/client-scope/subscriber.mjs +2 -2
  27. package/dist/adapters/database/domains/client-scope/subscriber.mjs.map +1 -1
  28. package/dist/adapters/database/domains/consent/entity.d.ts +7 -7
  29. package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -1
  30. package/dist/adapters/database/domains/consent/entity.mjs +35 -20
  31. package/dist/adapters/database/domains/consent/entity.mjs.map +1 -1
  32. package/dist/adapters/database/domains/consent/subscriber.mjs +4 -4
  33. package/dist/adapters/database/domains/consent/subscriber.mjs.map +1 -1
  34. package/dist/adapters/database/domains/constants.d.ts +0 -3
  35. package/dist/adapters/database/domains/constants.d.ts.map +1 -1
  36. package/dist/adapters/database/domains/constants.mjs +0 -3
  37. package/dist/adapters/database/domains/constants.mjs.map +1 -1
  38. package/dist/adapters/database/domains/event/entity.d.ts +13 -13
  39. package/dist/adapters/database/domains/event/entity.d.ts.map +1 -1
  40. package/dist/adapters/database/domains/event/entity.mjs +45 -30
  41. package/dist/adapters/database/domains/event/entity.mjs.map +1 -1
  42. package/dist/adapters/database/domains/identity-provider/entity.d.ts +4 -4
  43. package/dist/adapters/database/domains/identity-provider/entity.d.ts.map +1 -1
  44. package/dist/adapters/database/domains/identity-provider/entity.mjs +19 -12
  45. package/dist/adapters/database/domains/identity-provider/entity.mjs.map +1 -1
  46. package/dist/adapters/database/domains/identity-provider/repository.mjs +3 -3
  47. package/dist/adapters/database/domains/identity-provider/repository.mjs.map +1 -1
  48. package/dist/adapters/database/domains/identity-provider/subscriber.mjs +3 -3
  49. package/dist/adapters/database/domains/identity-provider/subscriber.mjs.map +1 -1
  50. package/dist/adapters/database/domains/identity-provider-account/entity.d.ts +15 -15
  51. package/dist/adapters/database/domains/identity-provider-account/entity.d.ts.map +1 -1
  52. package/dist/adapters/database/domains/identity-provider-account/entity.mjs +52 -33
  53. package/dist/adapters/database/domains/identity-provider-account/entity.mjs.map +1 -1
  54. package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs +2 -2
  55. package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs.map +1 -1
  56. package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts +4 -4
  57. package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts.map +1 -1
  58. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs +20 -11
  59. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs.map +1 -1
  60. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs +2 -2
  61. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs.map +1 -1
  62. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts +9 -9
  63. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts.map +1 -1
  64. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs +31 -21
  65. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs.map +1 -1
  66. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts +10 -10
  67. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts.map +1 -1
  68. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs +34 -23
  69. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs.map +1 -1
  70. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts +10 -10
  71. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts.map +1 -1
  72. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs +34 -23
  73. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs.map +1 -1
  74. package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs +3 -3
  75. package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs.map +1 -1
  76. package/dist/adapters/database/domains/index.d.ts +0 -3
  77. package/dist/adapters/database/domains/index.d.ts.map +1 -1
  78. package/dist/adapters/database/domains/index.mjs +1 -10
  79. package/dist/adapters/database/domains/key/entity.d.ts +6 -6
  80. package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
  81. package/dist/adapters/database/domains/key/entity.mjs +26 -16
  82. package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
  83. package/dist/adapters/database/domains/permission/entity.d.ts +7 -7
  84. package/dist/adapters/database/domains/permission/entity.d.ts.map +1 -1
  85. package/dist/adapters/database/domains/permission/entity.mjs +35 -20
  86. package/dist/adapters/database/domains/permission/entity.mjs.map +1 -1
  87. package/dist/adapters/database/domains/permission/subscriber.mjs +4 -4
  88. package/dist/adapters/database/domains/permission/subscriber.mjs.map +1 -1
  89. package/dist/adapters/database/domains/permission-policy/entity.d.ts +8 -8
  90. package/dist/adapters/database/domains/permission-policy/entity.d.ts.map +1 -1
  91. package/dist/adapters/database/domains/permission-policy/entity.mjs +31 -19
  92. package/dist/adapters/database/domains/permission-policy/entity.mjs.map +1 -1
  93. package/dist/adapters/database/domains/policy/entity.d.ts +6 -6
  94. package/dist/adapters/database/domains/policy/entity.d.ts.map +1 -1
  95. package/dist/adapters/database/domains/policy/entity.mjs +30 -16
  96. package/dist/adapters/database/domains/policy/entity.mjs.map +1 -1
  97. package/dist/adapters/database/domains/policy/repository.mjs +3 -3
  98. package/dist/adapters/database/domains/policy/repository.mjs.map +1 -1
  99. package/dist/adapters/database/domains/policy/subscriber.mjs +2 -2
  100. package/dist/adapters/database/domains/policy/subscriber.mjs.map +1 -1
  101. package/dist/adapters/database/domains/policy-attribute/entity.d.ts +4 -4
  102. package/dist/adapters/database/domains/policy-attribute/entity.d.ts.map +1 -1
  103. package/dist/adapters/database/domains/policy-attribute/entity.mjs +20 -11
  104. package/dist/adapters/database/domains/policy-attribute/entity.mjs.map +1 -1
  105. package/dist/adapters/database/domains/policy-attribute/subscriber.mjs +4 -4
  106. package/dist/adapters/database/domains/policy-attribute/subscriber.mjs.map +1 -1
  107. package/dist/adapters/database/domains/realm/entity.d.ts +4 -4
  108. package/dist/adapters/database/domains/realm/entity.d.ts.map +1 -1
  109. package/dist/adapters/database/domains/realm/entity.mjs +18 -10
  110. package/dist/adapters/database/domains/realm/entity.mjs.map +1 -1
  111. package/dist/adapters/database/domains/realm/subscriber.mjs +2 -2
  112. package/dist/adapters/database/domains/realm/subscriber.mjs.map +1 -1
  113. package/dist/adapters/database/domains/role/entity.d.ts +6 -6
  114. package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
  115. package/dist/adapters/database/domains/role/entity.mjs +32 -18
  116. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  117. package/dist/adapters/database/domains/role/repository.mjs +3 -3
  118. package/dist/adapters/database/domains/role/repository.mjs.map +1 -1
  119. package/dist/adapters/database/domains/role/subscriber.mjs +3 -3
  120. package/dist/adapters/database/domains/role/subscriber.mjs.map +1 -1
  121. package/dist/adapters/database/domains/role-attribute/entity.d.ts +4 -4
  122. package/dist/adapters/database/domains/role-attribute/entity.d.ts.map +1 -1
  123. package/dist/adapters/database/domains/role-attribute/entity.mjs +20 -11
  124. package/dist/adapters/database/domains/role-attribute/entity.mjs.map +1 -1
  125. package/dist/adapters/database/domains/role-attribute/subscriber.mjs +4 -4
  126. package/dist/adapters/database/domains/role-attribute/subscriber.mjs.map +1 -1
  127. package/dist/adapters/database/domains/role-permission/entity.d.ts +10 -10
  128. package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
  129. package/dist/adapters/database/domains/role-permission/entity.mjs +39 -23
  130. package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
  131. package/dist/adapters/database/domains/role-permission/subscriber.mjs +4 -4
  132. package/dist/adapters/database/domains/role-permission/subscriber.mjs.map +1 -1
  133. package/dist/adapters/database/domains/scope/entity.d.ts +5 -5
  134. package/dist/adapters/database/domains/scope/entity.d.ts.map +1 -1
  135. package/dist/adapters/database/domains/scope/entity.mjs +25 -14
  136. package/dist/adapters/database/domains/scope/entity.mjs.map +1 -1
  137. package/dist/adapters/database/domains/scope/subscriber.mjs +3 -3
  138. package/dist/adapters/database/domains/scope/subscriber.mjs.map +1 -1
  139. package/dist/adapters/database/domains/session/entity.d.ts +14 -17
  140. package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
  141. package/dist/adapters/database/domains/session/entity.mjs +44 -44
  142. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  143. package/dist/adapters/database/domains/session-token/entity.d.ts +9 -9
  144. package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -1
  145. package/dist/adapters/database/domains/session-token/entity.mjs +34 -21
  146. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -1
  147. package/dist/adapters/database/domains/trust-anchor/entity.d.ts +3 -3
  148. package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -1
  149. package/dist/adapters/database/domains/trust-anchor/entity.mjs +16 -10
  150. package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -1
  151. package/dist/adapters/database/domains/user/entity.d.ts +12 -12
  152. package/dist/adapters/database/domains/user/entity.d.ts.map +1 -1
  153. package/dist/adapters/database/domains/user/entity.mjs +44 -29
  154. package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
  155. package/dist/adapters/database/domains/user/repository.mjs +3 -3
  156. package/dist/adapters/database/domains/user/repository.mjs.map +1 -1
  157. package/dist/adapters/database/domains/user/subscriber.mjs +3 -3
  158. package/dist/adapters/database/domains/user/subscriber.mjs.map +1 -1
  159. package/dist/adapters/database/domains/user-attribute/entity.d.ts +4 -4
  160. package/dist/adapters/database/domains/user-attribute/entity.d.ts.map +1 -1
  161. package/dist/adapters/database/domains/user-attribute/entity.mjs +17 -11
  162. package/dist/adapters/database/domains/user-attribute/entity.mjs.map +1 -1
  163. package/dist/adapters/database/domains/user-attribute/subscriber.mjs +4 -4
  164. package/dist/adapters/database/domains/user-attribute/subscriber.mjs.map +1 -1
  165. package/dist/adapters/database/domains/user-authenticator/entity.d.ts +5 -5
  166. package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -1
  167. package/dist/adapters/database/domains/user-authenticator/entity.mjs +26 -13
  168. package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -1
  169. package/dist/adapters/database/domains/user-permission/entity.d.ts +10 -10
  170. package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
  171. package/dist/adapters/database/domains/user-permission/entity.mjs +39 -23
  172. package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
  173. package/dist/adapters/database/domains/user-permission/subscriber.mjs +4 -4
  174. package/dist/adapters/database/domains/user-permission/subscriber.mjs.map +1 -1
  175. package/dist/adapters/database/domains/user-role/entity.d.ts +8 -8
  176. package/dist/adapters/database/domains/user-role/entity.d.ts.map +1 -1
  177. package/dist/adapters/database/domains/user-role/entity.mjs +31 -19
  178. package/dist/adapters/database/domains/user-role/entity.mjs.map +1 -1
  179. package/dist/adapters/database/domains/user-role/subscriber.mjs +4 -4
  180. package/dist/adapters/database/domains/user-role/subscriber.mjs.map +1 -1
  181. package/dist/adapters/database/errors/driver.mjs.map +1 -1
  182. package/dist/adapters/database/extra-attribute-repository/adapter.mjs.map +1 -1
  183. package/dist/adapters/database/extra-attribute-repository/tree/adapter.mjs.map +1 -1
  184. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
  185. package/dist/adapters/database/helpers/is-supported.mjs +1 -1
  186. package/dist/adapters/database/helpers/is-supported.mjs.map +1 -1
  187. package/dist/adapters/database/index.mjs +1 -7
  188. package/dist/adapters/database/migrations/mysql/1779267068441-Default.mjs.map +1 -1
  189. package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs.map +1 -1
  190. package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.d.ts +12 -0
  191. package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.d.ts.map +1 -0
  192. package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.mjs +42 -0
  193. package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.mjs.map +1 -0
  194. package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.d.ts +18 -0
  195. package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.d.ts.map +1 -0
  196. package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.mjs +161 -0
  197. package/dist/adapters/database/migrations/mysql/1784460916000-RemoveRobots.mjs.map +1 -0
  198. package/dist/adapters/database/migrations/postgres/1779267068441-Default.mjs.map +1 -1
  199. package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs.map +1 -1
  200. package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.d.ts +12 -0
  201. package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.d.ts.map +1 -0
  202. package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.mjs +42 -0
  203. package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.mjs.map +1 -0
  204. package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.d.ts +18 -0
  205. package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.d.ts.map +1 -0
  206. package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.mjs +167 -0
  207. package/dist/adapters/database/migrations/postgres/1784460916000-RemoveRobots.mjs.map +1 -0
  208. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  209. package/dist/adapters/http/adapters/index.mjs +1 -2
  210. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +2 -2
  211. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  212. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +3 -3
  213. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  214. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +1 -1
  215. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  216. package/dist/adapters/http/adapters/oauth2/grant-types/index.d.ts +0 -1
  217. package/dist/adapters/http/adapters/oauth2/grant-types/index.d.ts.map +1 -1
  218. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +1 -2
  219. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +1 -1
  220. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  221. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +1 -1
  222. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  223. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +1 -4
  224. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  225. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.d.ts.map +1 -1
  226. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +0 -3
  227. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs.map +1 -1
  228. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs.map +1 -1
  229. package/dist/adapters/http/adapters/oauth2/index.mjs +1 -2
  230. package/dist/adapters/http/controllers/entities/client/module.mjs +2 -2
  231. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  232. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +2 -2
  233. package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
  234. package/dist/adapters/http/controllers/entities/client-permission/utils/validation.mjs +3 -3
  235. package/dist/adapters/http/controllers/entities/client-permission/utils/validation.mjs.map +1 -1
  236. package/dist/adapters/http/controllers/entities/client-role/module.mjs +2 -2
  237. package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
  238. package/dist/adapters/http/controllers/entities/client-role/utils/validation.mjs +2 -2
  239. package/dist/adapters/http/controllers/entities/client-role/utils/validation.mjs.map +1 -1
  240. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +2 -2
  241. package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
  242. package/dist/adapters/http/controllers/entities/client-scope/utils/validator.mjs +2 -2
  243. package/dist/adapters/http/controllers/entities/client-scope/utils/validator.mjs.map +1 -1
  244. package/dist/adapters/http/controllers/entities/consent/module.mjs +2 -2
  245. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
  246. package/dist/adapters/http/controllers/entities/event/module.mjs +2 -2
  247. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
  248. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +2 -2
  249. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
  250. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  251. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +21 -15
  252. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  253. package/dist/adapters/http/controllers/entities/index.d.ts +0 -3
  254. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  255. package/dist/adapters/http/controllers/entities/index.mjs +1 -9
  256. package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
  257. package/dist/adapters/http/controllers/entities/key/module.mjs +3 -9
  258. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
  259. package/dist/adapters/http/controllers/entities/permission/module.mjs +2 -2
  260. package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
  261. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +2 -2
  262. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
  263. package/dist/adapters/http/controllers/entities/policy/module.mjs +2 -2
  264. package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
  265. package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts +1 -1
  266. package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
  267. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +3 -3
  268. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
  269. package/dist/adapters/http/controllers/entities/realm/module.mjs +2 -2
  270. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  271. package/dist/adapters/http/controllers/entities/role/module.mjs +2 -2
  272. package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
  273. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +2 -2
  274. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
  275. package/dist/adapters/http/controllers/entities/role-attribute/utils/validation.mjs +1 -1
  276. package/dist/adapters/http/controllers/entities/role-attribute/utils/validation.mjs.map +1 -1
  277. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +2 -2
  278. package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
  279. package/dist/adapters/http/controllers/entities/role-permission/utils/validation.mjs +3 -3
  280. package/dist/adapters/http/controllers/entities/role-permission/utils/validation.mjs.map +1 -1
  281. package/dist/adapters/http/controllers/entities/scope/module.mjs +2 -2
  282. package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
  283. package/dist/adapters/http/controllers/entities/session/module.mjs +2 -2
  284. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  285. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -1
  286. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +3 -9
  287. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
  288. package/dist/adapters/http/controllers/entities/user/module.mjs +2 -2
  289. package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
  290. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +2 -2
  291. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
  292. package/dist/adapters/http/controllers/entities/user-attribute/utils/validation.mjs +1 -1
  293. package/dist/adapters/http/controllers/entities/user-attribute/utils/validation.mjs.map +1 -1
  294. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +3 -3
  295. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
  296. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +2 -2
  297. package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
  298. package/dist/adapters/http/controllers/entities/user-permission/utils/validation.mjs +3 -3
  299. package/dist/adapters/http/controllers/entities/user-permission/utils/validation.mjs.map +1 -1
  300. package/dist/adapters/http/controllers/entities/user-role/module.mjs +2 -2
  301. package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
  302. package/dist/adapters/http/controllers/entities/user-role/utils/validation.mjs +2 -2
  303. package/dist/adapters/http/controllers/entities/user-role/utils/validation.mjs.map +1 -1
  304. package/dist/adapters/http/controllers/index.mjs +1 -6
  305. package/dist/adapters/http/controllers/workflows/activate/module.mjs +2 -2
  306. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +2 -2
  307. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +6 -6
  308. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  309. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs +10 -10
  310. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs.map +1 -1
  311. package/dist/adapters/http/controllers/workflows/jwks/module.mjs +11 -11
  312. package/dist/adapters/http/controllers/workflows/jwks/module.mjs.map +1 -1
  313. package/dist/adapters/http/controllers/workflows/logout/module.mjs +2 -2
  314. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  315. package/dist/adapters/http/controllers/workflows/openid/module.mjs +2 -2
  316. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +2 -2
  317. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +2 -2
  318. package/dist/adapters/http/controllers/workflows/register/module.mjs +2 -2
  319. package/dist/adapters/http/controllers/workflows/status/module.mjs +4 -4
  320. package/dist/adapters/http/controllers/workflows/status/module.mjs.map +1 -1
  321. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  322. package/dist/adapters/http/controllers/workflows/token/module.mjs +4 -10
  323. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  324. package/dist/adapters/http/controllers/workflows/token/types.d.ts +1 -2
  325. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  326. package/dist/adapters/http/controllers/workflows/token/utils/extract.mjs.map +1 -1
  327. package/dist/adapters/http/index.mjs +1 -7
  328. package/dist/adapters/http/middleware/built-in/assets.mjs +2 -2
  329. package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
  330. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -2
  331. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  332. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +1 -15
  333. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  334. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +0 -1
  335. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.map +1 -1
  336. package/dist/adapters/http/middleware/built-in/cors.mjs.map +1 -1
  337. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  338. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  339. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +0 -1
  340. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  341. package/dist/adapters/http/request/client-certificate.d.ts +1 -0
  342. package/dist/adapters/http/request/client-certificate.d.ts.map +1 -1
  343. package/dist/adapters/http/request/client-certificate.mjs +1 -0
  344. package/dist/adapters/http/request/client-certificate.mjs.map +1 -1
  345. package/dist/adapters/http/request/constants.mjs.map +1 -1
  346. package/dist/adapters/http/request/helpers/body-realm-id.mjs +1 -1
  347. package/dist/adapters/http/request/helpers/body-realm-id.mjs.map +1 -1
  348. package/dist/adapters/http/request/helpers/identity.d.ts +2 -2
  349. package/dist/adapters/http/request/helpers/identity.d.ts.map +1 -1
  350. package/dist/adapters/http/request/helpers/identity.mjs +2 -2
  351. package/dist/adapters/http/request/helpers/identity.mjs.map +1 -1
  352. package/dist/adapters/http/request/helpers/param-id.mjs.map +1 -1
  353. package/dist/adapters/http/request/helpers/realm-id.mjs +1 -1
  354. package/dist/adapters/http/request/helpers/realm-id.mjs.map +1 -1
  355. package/dist/adapters/http/request/helpers/redirect.mjs.map +1 -1
  356. package/dist/adapters/http/request/permission/module.d.ts +3 -2
  357. package/dist/adapters/http/request/permission/module.d.ts.map +1 -1
  358. package/dist/adapters/http/request/permission/module.mjs +3 -0
  359. package/dist/adapters/http/request/permission/module.mjs.map +1 -1
  360. package/dist/adapters/http/ui/render.mjs +2 -2
  361. package/dist/adapters/http/ui/render.mjs.map +1 -1
  362. package/dist/adapters/http/ui/serve.d.ts.map +1 -1
  363. package/dist/adapters/http/ui/serve.mjs +4 -1
  364. package/dist/adapters/http/ui/serve.mjs.map +1 -1
  365. package/dist/app/factory.mjs.map +1 -1
  366. package/dist/app/index.mjs +1 -5
  367. package/dist/app/modules/authentication/module.mjs.map +1 -1
  368. package/dist/app/modules/authentication/repositories/constants.mjs.map +1 -1
  369. package/dist/app/modules/authentication/repositories/session.d.ts +3 -2
  370. package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
  371. package/dist/app/modules/authentication/repositories/session.mjs +8 -40
  372. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  373. package/dist/app/modules/cache/module.mjs.map +1 -1
  374. package/dist/app/modules/components/module.mjs.map +1 -1
  375. package/dist/app/modules/config/constants.d.ts +0 -4
  376. package/dist/app/modules/config/constants.d.ts.map +1 -1
  377. package/dist/app/modules/config/constants.mjs +0 -4
  378. package/dist/app/modules/config/constants.mjs.map +1 -1
  379. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  380. package/dist/app/modules/config/normalize.mjs +0 -4
  381. package/dist/app/modules/config/normalize.mjs.map +1 -1
  382. package/dist/app/modules/config/origins.mjs.map +1 -1
  383. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  384. package/dist/app/modules/config/read/env.mjs +0 -8
  385. package/dist/app/modules/config/read/env.mjs.map +1 -1
  386. package/dist/app/modules/config/read/fs.mjs.map +1 -1
  387. package/dist/app/modules/config/types.d.ts +0 -19
  388. package/dist/app/modules/config/types.d.ts.map +1 -1
  389. package/dist/app/modules/config/validator.d.ts.map +1 -1
  390. package/dist/app/modules/config/validator.mjs +0 -4
  391. package/dist/app/modules/config/validator.mjs.map +1 -1
  392. package/dist/app/modules/database/index.mjs +1 -4
  393. package/dist/app/modules/database/module.d.ts.map +1 -1
  394. package/dist/app/modules/database/module.mjs +2 -0
  395. package/dist/app/modules/database/module.mjs.map +1 -1
  396. package/dist/app/modules/database/repositories/bindings.d.ts +2 -2
  397. package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -1
  398. package/dist/app/modules/database/repositories/bindings.mjs +3 -3
  399. package/dist/app/modules/database/repositories/bindings.mjs.map +1 -1
  400. package/dist/app/modules/database/repositories/client/repository.d.ts +3 -2
  401. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  402. package/dist/app/modules/database/repositories/client/repository.mjs +10 -82
  403. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  404. package/dist/app/modules/database/repositories/client-permission/repository.d.ts +2 -1
  405. package/dist/app/modules/database/repositories/client-permission/repository.d.ts.map +1 -1
  406. package/dist/app/modules/database/repositories/client-permission/repository.mjs +3 -17
  407. package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
  408. package/dist/app/modules/database/repositories/client-role/repository.d.ts +2 -1
  409. package/dist/app/modules/database/repositories/client-role/repository.d.ts.map +1 -1
  410. package/dist/app/modules/database/repositories/client-role/repository.mjs +3 -17
  411. package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
  412. package/dist/app/modules/database/repositories/client-scope/repository.d.ts +2 -1
  413. package/dist/app/modules/database/repositories/client-scope/repository.d.ts.map +1 -1
  414. package/dist/app/modules/database/repositories/client-scope/repository.mjs +3 -17
  415. package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
  416. package/dist/app/modules/database/repositories/event/repository.d.ts +2 -1
  417. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  418. package/dist/app/modules/database/repositories/event/repository.mjs +14 -53
  419. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  420. package/dist/app/modules/database/repositories/helpers.d.ts +17 -3
  421. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  422. package/dist/app/modules/database/repositories/helpers.mjs +40 -5
  423. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  424. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts +2 -1
  425. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
  426. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +6 -37
  427. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  428. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.d.ts +2 -1
  429. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.d.ts.map +1 -1
  430. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +3 -17
  431. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
  432. package/dist/app/modules/database/repositories/index.d.ts +0 -3
  433. package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
  434. package/dist/app/modules/database/repositories/index.mjs +1 -7
  435. package/dist/app/modules/database/repositories/key/repository.d.ts +3 -2
  436. package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -1
  437. package/dist/app/modules/database/repositories/key/repository.mjs +38 -72
  438. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  439. package/dist/app/modules/database/repositories/permission/repository.d.ts +2 -1
  440. package/dist/app/modules/database/repositories/permission/repository.d.ts.map +1 -1
  441. package/dist/app/modules/database/repositories/permission/repository.mjs +5 -20
  442. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  443. package/dist/app/modules/database/repositories/permission-policy/repository.d.ts +2 -1
  444. package/dist/app/modules/database/repositories/permission-policy/repository.d.ts.map +1 -1
  445. package/dist/app/modules/database/repositories/permission-policy/repository.mjs +3 -17
  446. package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
  447. package/dist/app/modules/database/repositories/permission-provider/module.mjs +6 -6
  448. package/dist/app/modules/database/repositories/permission-provider/module.mjs.map +1 -1
  449. package/dist/app/modules/database/repositories/policy/repository.d.ts +2 -1
  450. package/dist/app/modules/database/repositories/policy/repository.d.ts.map +1 -1
  451. package/dist/app/modules/database/repositories/policy/repository.mjs +5 -39
  452. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  453. package/dist/app/modules/database/repositories/query.d.ts +18 -0
  454. package/dist/app/modules/database/repositories/query.d.ts.map +1 -0
  455. package/dist/app/modules/database/repositories/query.mjs +29 -0
  456. package/dist/app/modules/database/repositories/query.mjs.map +1 -0
  457. package/dist/app/modules/database/repositories/realm/repository.d.ts +2 -1
  458. package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
  459. package/dist/app/modules/database/repositories/realm/repository.mjs +3 -25
  460. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  461. package/dist/app/modules/database/repositories/role/repository.d.ts +2 -1
  462. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  463. package/dist/app/modules/database/repositories/role/repository.mjs +6 -30
  464. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  465. package/dist/app/modules/database/repositories/role-attribute/repository.d.ts +2 -1
  466. package/dist/app/modules/database/repositories/role-attribute/repository.d.ts.map +1 -1
  467. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +3 -19
  468. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  469. package/dist/app/modules/database/repositories/role-permission/repository.d.ts +2 -1
  470. package/dist/app/modules/database/repositories/role-permission/repository.d.ts.map +1 -1
  471. package/dist/app/modules/database/repositories/role-permission/repository.mjs +3 -17
  472. package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
  473. package/dist/app/modules/database/repositories/schema-validation.d.ts +11 -0
  474. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -0
  475. package/dist/app/modules/database/repositories/schema-validation.mjs +77 -0
  476. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -0
  477. package/dist/app/modules/database/repositories/scope/repository.d.ts +2 -1
  478. package/dist/app/modules/database/repositories/scope/repository.d.ts.map +1 -1
  479. package/dist/app/modules/database/repositories/scope/repository.mjs +5 -29
  480. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  481. package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts +2 -1
  482. package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts.map +1 -1
  483. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +5 -29
  484. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
  485. package/dist/app/modules/database/repositories/user/repository.d.ts +3 -2
  486. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  487. package/dist/app/modules/database/repositories/user/repository.mjs +9 -66
  488. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  489. package/dist/app/modules/database/repositories/user-attribute/repository.d.ts +2 -1
  490. package/dist/app/modules/database/repositories/user-attribute/repository.d.ts.map +1 -1
  491. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +4 -20
  492. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  493. package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts +2 -1
  494. package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts.map +1 -1
  495. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +8 -34
  496. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
  497. package/dist/app/modules/database/repositories/user-permission/repository.d.ts +2 -1
  498. package/dist/app/modules/database/repositories/user-permission/repository.d.ts.map +1 -1
  499. package/dist/app/modules/database/repositories/user-permission/repository.mjs +3 -17
  500. package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
  501. package/dist/app/modules/database/repositories/user-role/repository.d.ts +2 -1
  502. package/dist/app/modules/database/repositories/user-role/repository.d.ts.map +1 -1
  503. package/dist/app/modules/database/repositories/user-role/repository.mjs +3 -17
  504. package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
  505. package/dist/app/modules/http/module.mjs.map +1 -1
  506. package/dist/app/modules/http/modules/controller.d.ts +1 -4
  507. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  508. package/dist/app/modules/http/modules/controller.mjs +0 -52
  509. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  510. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  511. package/dist/app/modules/http/modules/middleware.mjs +0 -1
  512. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  513. package/dist/app/modules/identity/index.mjs +1 -2
  514. package/dist/app/modules/identity/module.d.ts.map +1 -1
  515. package/dist/app/modules/identity/module.mjs +1 -12
  516. package/dist/app/modules/identity/module.mjs.map +1 -1
  517. package/dist/app/modules/identity/repositories/client.mjs +2 -2
  518. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  519. package/dist/app/modules/identity/repositories/index.d.ts +0 -1
  520. package/dist/app/modules/identity/repositories/index.d.ts.map +1 -1
  521. package/dist/app/modules/identity/repositories/index.mjs +1 -2
  522. package/dist/app/modules/identity/repositories/provider/account/module.mjs +3 -3
  523. package/dist/app/modules/identity/repositories/provider/account/module.mjs.map +1 -1
  524. package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs +1 -1
  525. package/dist/app/modules/identity/repositories/provider/mapper/attribute.mjs.map +1 -1
  526. package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs +1 -1
  527. package/dist/app/modules/identity/repositories/provider/mapper/permission.mjs.map +1 -1
  528. package/dist/app/modules/identity/repositories/provider/mapper/role.mjs +1 -1
  529. package/dist/app/modules/identity/repositories/provider/mapper/role.mjs.map +1 -1
  530. package/dist/app/modules/identity/repositories/user.mjs +18 -18
  531. package/dist/app/modules/identity/repositories/user.mjs.map +1 -1
  532. package/dist/app/modules/index.mjs +1 -5
  533. package/dist/app/modules/logger/module.mjs.map +1 -1
  534. package/dist/app/modules/mail/module.mjs.map +1 -1
  535. package/dist/app/modules/metrics/prom.mjs.map +1 -1
  536. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  537. package/dist/app/modules/oauth2/repositories/client/repository.mjs +1 -1
  538. package/dist/app/modules/oauth2/repositories/client/repository.mjs.map +1 -1
  539. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts +2 -1
  540. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -1
  541. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +14 -38
  542. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  543. package/dist/app/modules/oauth2/repositories/constants.mjs.map +1 -1
  544. package/dist/app/modules/oauth2/repositories/scope/repository.mjs +1 -1
  545. package/dist/app/modules/oauth2/repositories/scope/repository.mjs.map +1 -1
  546. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +21 -18
  547. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
  548. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  549. package/dist/app/modules/provisioning/module.mjs +9 -24
  550. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  551. package/dist/app/modules/provisioning/sources/composite/module.d.ts +17 -0
  552. package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
  553. package/dist/app/modules/provisioning/sources/composite/module.mjs +54 -2
  554. package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
  555. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  556. package/dist/app/modules/provisioning/sources/default/module.mjs +43 -78
  557. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  558. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  559. package/dist/app/modules/provisioning/sources/file/module.mjs +4 -3
  560. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  561. package/dist/app/modules/provisioning/sources/file/types.d.ts +2 -0
  562. package/dist/app/modules/provisioning/sources/file/types.d.ts.map +1 -1
  563. package/dist/app/modules/provisioning/sources/index.mjs +1 -0
  564. package/dist/app/modules/runtime/module.mjs.map +1 -1
  565. package/dist/cli/commands/migration.mjs.map +1 -1
  566. package/dist/components/database/unique-entries/module.mjs +6 -6
  567. package/dist/components/database/unique-entries/module.mjs.map +1 -1
  568. package/dist/components/oauth2-cleaner/module.mjs +2 -2
  569. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  570. package/dist/core/authentication/credential/entities/client/module.d.ts +1 -1
  571. package/dist/core/authentication/credential/entities/client/module.d.ts.map +1 -1
  572. package/dist/core/authentication/credential/entities/client/module.mjs +3 -3
  573. package/dist/core/authentication/credential/entities/client/module.mjs.map +1 -1
  574. package/dist/core/authentication/credential/entities/index.d.ts +0 -1
  575. package/dist/core/authentication/credential/entities/index.d.ts.map +1 -1
  576. package/dist/core/authentication/credential/entities/index.mjs +1 -3
  577. package/dist/core/authentication/credential/index.mjs +1 -2
  578. package/dist/core/authentication/entities/client/module.mjs +1 -1
  579. package/dist/core/authentication/entities/client/module.mjs.map +1 -1
  580. package/dist/core/authentication/entities/index.d.ts +0 -1
  581. package/dist/core/authentication/entities/index.d.ts.map +1 -1
  582. package/dist/core/authentication/entities/index.mjs +1 -3
  583. package/dist/core/authentication/index.mjs +1 -3
  584. package/dist/core/authentication/session/module.d.ts.map +1 -1
  585. package/dist/core/authentication/session/module.mjs +14 -17
  586. package/dist/core/authentication/session/module.mjs.map +1 -1
  587. package/dist/core/authentication/session/types.d.ts +7 -6
  588. package/dist/core/authentication/session/types.d.ts.map +1 -1
  589. package/dist/core/authentication/session/types.mjs +4 -5
  590. package/dist/core/authentication/session/types.mjs.map +1 -1
  591. package/dist/core/client-certificate/module.d.ts +2 -1
  592. package/dist/core/client-certificate/module.d.ts.map +1 -1
  593. package/dist/core/client-certificate/module.mjs +2 -1
  594. package/dist/core/client-certificate/module.mjs.map +1 -1
  595. package/dist/core/client-certificate/reflect.d.ts +2 -0
  596. package/dist/core/client-certificate/reflect.d.ts.map +1 -0
  597. package/dist/core/{identity/entities/robot/index.mjs → client-certificate/reflect.mjs} +1 -0
  598. package/dist/core/client-certificate/types.d.ts +1 -1
  599. package/dist/core/client-certificate/types.d.ts.map +1 -1
  600. package/dist/core/entities/client/index.d.ts +1 -0
  601. package/dist/core/entities/client/index.d.ts.map +1 -1
  602. package/dist/core/entities/client/index.mjs +2 -1
  603. package/dist/core/entities/client/schema.d.ts +3 -0
  604. package/dist/core/entities/client/schema.d.ts.map +1 -0
  605. package/dist/core/entities/client/schema.mjs +59 -0
  606. package/dist/core/entities/client/schema.mjs.map +1 -0
  607. package/dist/core/entities/client/service.d.ts.map +1 -1
  608. package/dist/core/entities/client/service.mjs +42 -19
  609. package/dist/core/entities/client/service.mjs.map +1 -1
  610. package/dist/core/entities/client/types.d.ts +2 -1
  611. package/dist/core/entities/client/types.d.ts.map +1 -1
  612. package/dist/core/entities/client/web-client.d.ts +4 -4
  613. package/dist/core/entities/client/web-client.mjs +13 -13
  614. package/dist/core/entities/client/web-client.mjs.map +1 -1
  615. package/dist/core/entities/client-permission/index.d.ts +1 -0
  616. package/dist/core/entities/client-permission/index.d.ts.map +1 -1
  617. package/dist/core/entities/client-permission/index.mjs +2 -1
  618. package/dist/core/entities/client-permission/schema.d.ts +3 -0
  619. package/dist/core/entities/client-permission/schema.d.ts.map +1 -0
  620. package/dist/core/entities/client-permission/schema.mjs +41 -0
  621. package/dist/core/entities/client-permission/schema.mjs.map +1 -0
  622. package/dist/core/entities/client-permission/service.d.ts +1 -1
  623. package/dist/core/entities/client-permission/service.d.ts.map +1 -1
  624. package/dist/core/entities/client-permission/service.mjs +24 -18
  625. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  626. package/dist/core/entities/client-role/index.d.ts +1 -0
  627. package/dist/core/entities/client-role/index.d.ts.map +1 -1
  628. package/dist/core/entities/client-role/index.mjs +2 -1
  629. package/dist/core/entities/client-role/schema.d.ts +3 -0
  630. package/dist/core/entities/client-role/schema.d.ts.map +1 -0
  631. package/dist/core/entities/client-role/schema.mjs +39 -0
  632. package/dist/core/entities/client-role/schema.mjs.map +1 -0
  633. package/dist/core/entities/client-role/service.d.ts +1 -1
  634. package/dist/core/entities/client-role/service.d.ts.map +1 -1
  635. package/dist/core/entities/client-role/service.mjs +14 -8
  636. package/dist/core/entities/client-role/service.mjs.map +1 -1
  637. package/dist/core/entities/client-scope/index.d.ts +1 -0
  638. package/dist/core/entities/client-scope/index.d.ts.map +1 -1
  639. package/dist/core/entities/client-scope/index.mjs +2 -1
  640. package/dist/core/entities/client-scope/schema.d.ts +3 -0
  641. package/dist/core/entities/client-scope/schema.d.ts.map +1 -0
  642. package/dist/core/entities/client-scope/schema.mjs +37 -0
  643. package/dist/core/entities/client-scope/schema.mjs.map +1 -0
  644. package/dist/core/entities/client-scope/service.d.ts +1 -1
  645. package/dist/core/entities/client-scope/service.d.ts.map +1 -1
  646. package/dist/core/entities/client-scope/service.mjs +12 -6
  647. package/dist/core/entities/client-scope/service.mjs.map +1 -1
  648. package/dist/core/entities/consent/index.d.ts +1 -0
  649. package/dist/core/entities/consent/index.d.ts.map +1 -1
  650. package/dist/core/entities/consent/index.mjs +2 -1
  651. package/dist/core/entities/consent/schema.d.ts +3 -0
  652. package/dist/core/entities/consent/schema.d.ts.map +1 -0
  653. package/dist/core/entities/consent/schema.mjs +40 -0
  654. package/dist/core/entities/consent/schema.mjs.map +1 -0
  655. package/dist/core/entities/consent/service.d.ts.map +1 -1
  656. package/dist/core/entities/consent/service.mjs +22 -6
  657. package/dist/core/entities/consent/service.mjs.map +1 -1
  658. package/dist/core/entities/consent/types.d.ts +3 -2
  659. package/dist/core/entities/consent/types.d.ts.map +1 -1
  660. package/dist/core/entities/consent/types.mjs +3 -3
  661. package/dist/core/entities/consent/types.mjs.map +1 -1
  662. package/dist/core/entities/event/diff.d.ts +4 -4
  663. package/dist/core/entities/event/diff.mjs +5 -5
  664. package/dist/core/entities/event/diff.mjs.map +1 -1
  665. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
  666. package/dist/core/entities/event/entity-event-handler.mjs +29 -31
  667. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
  668. package/dist/core/entities/event/index.d.ts +1 -0
  669. package/dist/core/entities/event/index.d.ts.map +1 -1
  670. package/dist/core/entities/event/index.mjs +2 -1
  671. package/dist/core/entities/event/sanitize.mjs +8 -8
  672. package/dist/core/entities/event/sanitize.mjs.map +1 -1
  673. package/dist/core/entities/event/schema.d.ts +3 -0
  674. package/dist/core/entities/event/schema.d.ts.map +1 -0
  675. package/dist/core/entities/event/schema.mjs +51 -0
  676. package/dist/core/entities/event/schema.mjs.map +1 -0
  677. package/dist/core/entities/event/service.d.ts.map +1 -1
  678. package/dist/core/entities/event/service.mjs +38 -22
  679. package/dist/core/entities/event/service.mjs.map +1 -1
  680. package/dist/core/entities/event/types.d.ts +6 -5
  681. package/dist/core/entities/event/types.d.ts.map +1 -1
  682. package/dist/core/entities/identity-provider/index.d.ts +1 -0
  683. package/dist/core/entities/identity-provider/index.d.ts.map +1 -1
  684. package/dist/core/entities/identity-provider/index.mjs +2 -1
  685. package/dist/core/entities/identity-provider/schema.d.ts +3 -0
  686. package/dist/core/entities/identity-provider/schema.d.ts.map +1 -0
  687. package/dist/core/entities/identity-provider/schema.mjs +43 -0
  688. package/dist/core/entities/identity-provider/schema.mjs.map +1 -0
  689. package/dist/core/entities/identity-provider-role-mapping/index.d.ts +1 -0
  690. package/dist/core/entities/identity-provider-role-mapping/index.d.ts.map +1 -1
  691. package/dist/core/entities/identity-provider-role-mapping/index.mjs +2 -1
  692. package/dist/core/entities/identity-provider-role-mapping/schema.d.ts +3 -0
  693. package/dist/core/entities/identity-provider-role-mapping/schema.d.ts.map +1 -0
  694. package/dist/core/entities/identity-provider-role-mapping/schema.mjs +43 -0
  695. package/dist/core/entities/identity-provider-role-mapping/schema.mjs.map +1 -0
  696. package/dist/core/entities/identity-provider-role-mapping/service.d.ts +1 -1
  697. package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
  698. package/dist/core/entities/identity-provider-role-mapping/service.mjs +17 -11
  699. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  700. package/dist/core/entities/index.d.ts +0 -3
  701. package/dist/core/entities/index.d.ts.map +1 -1
  702. package/dist/core/entities/index.mjs +26 -7
  703. package/dist/core/entities/key/index.d.ts +1 -0
  704. package/dist/core/entities/key/index.d.ts.map +1 -1
  705. package/dist/core/entities/key/index.mjs +2 -1
  706. package/dist/core/entities/key/schema.d.ts +3 -0
  707. package/dist/core/entities/key/schema.d.ts.map +1 -0
  708. package/dist/core/entities/key/schema.mjs +53 -0
  709. package/dist/core/entities/key/schema.mjs.map +1 -0
  710. package/dist/core/entities/key/service.d.ts +2 -2
  711. package/dist/core/entities/key/service.d.ts.map +1 -1
  712. package/dist/core/entities/key/service.mjs +47 -28
  713. package/dist/core/entities/key/service.mjs.map +1 -1
  714. package/dist/core/entities/key/types.d.ts +9 -1
  715. package/dist/core/entities/key/types.d.ts.map +1 -1
  716. package/dist/core/entities/permission/index.d.ts +1 -0
  717. package/dist/core/entities/permission/index.d.ts.map +1 -1
  718. package/dist/core/entities/permission/index.mjs +2 -1
  719. package/dist/core/entities/permission/schema.d.ts +3 -0
  720. package/dist/core/entities/permission/schema.d.ts.map +1 -0
  721. package/dist/core/entities/permission/schema.mjs +40 -0
  722. package/dist/core/entities/permission/schema.mjs.map +1 -0
  723. package/dist/core/entities/permission/service.d.ts +7 -2
  724. package/dist/core/entities/permission/service.d.ts.map +1 -1
  725. package/dist/core/entities/permission/service.mjs +53 -40
  726. package/dist/core/entities/permission/service.mjs.map +1 -1
  727. package/dist/core/entities/permission-policy/index.d.ts +1 -0
  728. package/dist/core/entities/permission-policy/index.d.ts.map +1 -1
  729. package/dist/core/entities/permission-policy/index.mjs +2 -1
  730. package/dist/core/entities/permission-policy/schema.d.ts +3 -0
  731. package/dist/core/entities/permission-policy/schema.d.ts.map +1 -0
  732. package/dist/core/entities/permission-policy/schema.mjs +39 -0
  733. package/dist/core/entities/permission-policy/schema.mjs.map +1 -0
  734. package/dist/core/entities/permission-policy/service.d.ts +1 -1
  735. package/dist/core/entities/permission-policy/service.d.ts.map +1 -1
  736. package/dist/core/entities/permission-policy/service.mjs +12 -6
  737. package/dist/core/entities/permission-policy/service.mjs.map +1 -1
  738. package/dist/core/entities/policy/index.d.ts +1 -0
  739. package/dist/core/entities/policy/index.d.ts.map +1 -1
  740. package/dist/core/entities/policy/index.mjs +2 -1
  741. package/dist/core/entities/policy/schema.d.ts +3 -0
  742. package/dist/core/entities/policy/schema.d.ts.map +1 -0
  743. package/dist/core/entities/policy/schema.mjs +49 -0
  744. package/dist/core/entities/policy/schema.mjs.map +1 -0
  745. package/dist/core/entities/policy/service.d.ts.map +1 -1
  746. package/dist/core/entities/policy/service.mjs +13 -7
  747. package/dist/core/entities/policy/service.mjs.map +1 -1
  748. package/dist/core/entities/realm/index.d.ts +1 -0
  749. package/dist/core/entities/realm/index.d.ts.map +1 -1
  750. package/dist/core/entities/realm/index.mjs +2 -1
  751. package/dist/core/entities/realm/schema.d.ts +3 -0
  752. package/dist/core/entities/realm/schema.d.ts.map +1 -0
  753. package/dist/core/entities/realm/schema.mjs +36 -0
  754. package/dist/core/entities/realm/schema.mjs.map +1 -0
  755. package/dist/core/entities/realm/service.d.ts.map +1 -1
  756. package/dist/core/entities/realm/service.mjs +5 -2
  757. package/dist/core/entities/realm/service.mjs.map +1 -1
  758. package/dist/core/entities/realm/types.d.ts +1 -1
  759. package/dist/core/entities/role/index.d.ts +1 -0
  760. package/dist/core/entities/role/index.d.ts.map +1 -1
  761. package/dist/core/entities/role/index.mjs +2 -1
  762. package/dist/core/entities/role/schema.d.ts +3 -0
  763. package/dist/core/entities/role/schema.d.ts.map +1 -0
  764. package/dist/core/entities/role/schema.mjs +43 -0
  765. package/dist/core/entities/role/schema.mjs.map +1 -0
  766. package/dist/core/entities/role/service.d.ts.map +1 -1
  767. package/dist/core/entities/role/service.mjs +11 -5
  768. package/dist/core/entities/role/service.mjs.map +1 -1
  769. package/dist/core/entities/role-attribute/index.d.ts +1 -0
  770. package/dist/core/entities/role-attribute/index.d.ts.map +1 -1
  771. package/dist/core/entities/role-attribute/index.mjs +2 -1
  772. package/dist/core/entities/role-attribute/schema.d.ts +3 -0
  773. package/dist/core/entities/role-attribute/schema.d.ts.map +1 -0
  774. package/dist/core/entities/role-attribute/schema.mjs +47 -0
  775. package/dist/core/entities/role-attribute/schema.mjs.map +1 -0
  776. package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
  777. package/dist/core/entities/role-attribute/service.mjs +19 -6
  778. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  779. package/dist/core/entities/role-permission/index.d.ts +1 -0
  780. package/dist/core/entities/role-permission/index.d.ts.map +1 -1
  781. package/dist/core/entities/role-permission/index.mjs +2 -1
  782. package/dist/core/entities/role-permission/schema.d.ts +3 -0
  783. package/dist/core/entities/role-permission/schema.d.ts.map +1 -0
  784. package/dist/core/entities/role-permission/schema.mjs +41 -0
  785. package/dist/core/entities/role-permission/schema.mjs.map +1 -0
  786. package/dist/core/entities/role-permission/service.d.ts +1 -1
  787. package/dist/core/entities/role-permission/service.d.ts.map +1 -1
  788. package/dist/core/entities/role-permission/service.mjs +24 -18
  789. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  790. package/dist/core/entities/scope/index.d.ts +1 -0
  791. package/dist/core/entities/scope/index.d.ts.map +1 -1
  792. package/dist/core/entities/scope/index.mjs +2 -1
  793. package/dist/core/entities/scope/schema.d.ts +3 -0
  794. package/dist/core/entities/scope/schema.d.ts.map +1 -0
  795. package/dist/core/entities/scope/schema.mjs +43 -0
  796. package/dist/core/entities/scope/schema.mjs.map +1 -0
  797. package/dist/core/entities/scope/service.d.ts.map +1 -1
  798. package/dist/core/entities/scope/service.mjs +11 -5
  799. package/dist/core/entities/scope/service.mjs.map +1 -1
  800. package/dist/core/entities/session/index.d.ts +1 -0
  801. package/dist/core/entities/session/index.d.ts.map +1 -1
  802. package/dist/core/entities/session/index.mjs +2 -1
  803. package/dist/core/entities/session/schema.d.ts +3 -0
  804. package/dist/core/entities/session/schema.d.ts.map +1 -0
  805. package/dist/core/entities/session/schema.mjs +44 -0
  806. package/dist/core/entities/session/schema.mjs.map +1 -0
  807. package/dist/core/entities/session/service.d.ts +11 -0
  808. package/dist/core/entities/session/service.d.ts.map +1 -1
  809. package/dist/core/entities/session/service.mjs +48 -11
  810. package/dist/core/entities/session/service.mjs.map +1 -1
  811. package/dist/core/entities/session/types.d.ts +2 -2
  812. package/dist/core/entities/trust-anchor/index.d.ts +1 -0
  813. package/dist/core/entities/trust-anchor/index.d.ts.map +1 -1
  814. package/dist/core/entities/trust-anchor/index.mjs +2 -1
  815. package/dist/core/entities/trust-anchor/schema.d.ts +3 -0
  816. package/dist/core/entities/trust-anchor/schema.d.ts.map +1 -0
  817. package/dist/core/entities/trust-anchor/schema.mjs +43 -0
  818. package/dist/core/entities/trust-anchor/schema.mjs.map +1 -0
  819. package/dist/core/entities/trust-anchor/service.d.ts +2 -2
  820. package/dist/core/entities/trust-anchor/service.d.ts.map +1 -1
  821. package/dist/core/entities/trust-anchor/service.mjs +23 -7
  822. package/dist/core/entities/trust-anchor/service.mjs.map +1 -1
  823. package/dist/core/entities/trust-anchor/types.d.ts +9 -1
  824. package/dist/core/entities/trust-anchor/types.d.ts.map +1 -1
  825. package/dist/core/entities/user/index.d.ts +1 -0
  826. package/dist/core/entities/user/index.d.ts.map +1 -1
  827. package/dist/core/entities/user/index.mjs +2 -1
  828. package/dist/core/entities/user/schema.d.ts +3 -0
  829. package/dist/core/entities/user/schema.d.ts.map +1 -0
  830. package/dist/core/entities/user/schema.mjs +50 -0
  831. package/dist/core/entities/user/schema.mjs.map +1 -0
  832. package/dist/core/entities/user/service.d.ts.map +1 -1
  833. package/dist/core/entities/user/service.mjs +33 -12
  834. package/dist/core/entities/user/service.mjs.map +1 -1
  835. package/dist/core/entities/user/types.d.ts +2 -1
  836. package/dist/core/entities/user/types.d.ts.map +1 -1
  837. package/dist/core/entities/user-attribute/index.d.ts +1 -0
  838. package/dist/core/entities/user-attribute/index.d.ts.map +1 -1
  839. package/dist/core/entities/user-attribute/index.mjs +2 -1
  840. package/dist/core/entities/user-attribute/schema.d.ts +3 -0
  841. package/dist/core/entities/user-attribute/schema.d.ts.map +1 -0
  842. package/dist/core/entities/user-attribute/schema.mjs +47 -0
  843. package/dist/core/entities/user-attribute/schema.mjs.map +1 -0
  844. package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
  845. package/dist/core/entities/user-attribute/service.mjs +26 -10
  846. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  847. package/dist/core/entities/user-authenticator/index.d.ts +1 -0
  848. package/dist/core/entities/user-authenticator/index.d.ts.map +1 -1
  849. package/dist/core/entities/user-authenticator/index.mjs +2 -1
  850. package/dist/core/entities/user-authenticator/schema.d.ts +3 -0
  851. package/dist/core/entities/user-authenticator/schema.d.ts.map +1 -0
  852. package/dist/core/entities/user-authenticator/schema.mjs +47 -0
  853. package/dist/core/entities/user-authenticator/schema.mjs.map +1 -0
  854. package/dist/core/entities/user-authenticator/service.d.ts.map +1 -1
  855. package/dist/core/entities/user-authenticator/service.mjs +49 -27
  856. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  857. package/dist/core/entities/user-authenticator/types.d.ts +4 -3
  858. package/dist/core/entities/user-authenticator/types.d.ts.map +1 -1
  859. package/dist/core/entities/user-authenticator/types.mjs +2 -2
  860. package/dist/core/entities/user-authenticator/types.mjs.map +1 -1
  861. package/dist/core/entities/user-permission/index.d.ts +1 -0
  862. package/dist/core/entities/user-permission/index.d.ts.map +1 -1
  863. package/dist/core/entities/user-permission/index.mjs +2 -1
  864. package/dist/core/entities/user-permission/schema.d.ts +3 -0
  865. package/dist/core/entities/user-permission/schema.d.ts.map +1 -0
  866. package/dist/core/entities/user-permission/schema.mjs +41 -0
  867. package/dist/core/entities/user-permission/schema.mjs.map +1 -0
  868. package/dist/core/entities/user-permission/service.d.ts +1 -1
  869. package/dist/core/entities/user-permission/service.d.ts.map +1 -1
  870. package/dist/core/entities/user-permission/service.mjs +24 -18
  871. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  872. package/dist/core/entities/user-role/index.d.ts +1 -0
  873. package/dist/core/entities/user-role/index.d.ts.map +1 -1
  874. package/dist/core/entities/user-role/index.mjs +2 -1
  875. package/dist/core/entities/user-role/schema.d.ts +3 -0
  876. package/dist/core/entities/user-role/schema.d.ts.map +1 -0
  877. package/dist/core/entities/user-role/schema.mjs +39 -0
  878. package/dist/core/entities/user-role/schema.mjs.map +1 -0
  879. package/dist/core/entities/user-role/service.d.ts +1 -1
  880. package/dist/core/entities/user-role/service.d.ts.map +1 -1
  881. package/dist/core/entities/user-role/service.mjs +14 -8
  882. package/dist/core/entities/user-role/service.mjs.map +1 -1
  883. package/dist/core/identity/entities/index.d.ts +0 -1
  884. package/dist/core/identity/entities/index.d.ts.map +1 -1
  885. package/dist/core/identity/password-recovery/service.mjs +21 -21
  886. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  887. package/dist/core/identity/password-recovery/types.d.ts +2 -2
  888. package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
  889. package/dist/core/identity/permission/checker/service.mjs +2 -2
  890. package/dist/core/identity/permission/checker/service.mjs.map +1 -1
  891. package/dist/core/identity/permission/identity-policy-data.mjs +2 -2
  892. package/dist/core/identity/permission/identity-policy-data.mjs.map +1 -1
  893. package/dist/core/identity/permission/junction-grant.d.ts +6 -6
  894. package/dist/core/identity/permission/junction-grant.mjs +14 -14
  895. package/dist/core/identity/permission/junction-grant.mjs.map +1 -1
  896. package/dist/core/identity/permission/module.d.ts +0 -3
  897. package/dist/core/identity/permission/module.d.ts.map +1 -1
  898. package/dist/core/identity/permission/module.mjs +9 -15
  899. package/dist/core/identity/permission/module.mjs.map +1 -1
  900. package/dist/core/identity/permission/types.d.ts +0 -2
  901. package/dist/core/identity/permission/types.d.ts.map +1 -1
  902. package/dist/core/identity/policy/checker/service.mjs +1 -1
  903. package/dist/core/identity/policy/checker/service.mjs.map +1 -1
  904. package/dist/core/identity/provider/account/module.mjs +9 -9
  905. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  906. package/dist/core/identity/provider/authentication/presets/facebook.mjs +5 -5
  907. package/dist/core/identity/provider/authentication/presets/facebook.mjs.map +1 -1
  908. package/dist/core/identity/provider/authentication/presets/github.mjs +3 -3
  909. package/dist/core/identity/provider/authentication/presets/github.mjs.map +1 -1
  910. package/dist/core/identity/provider/authentication/presets/google.mjs +5 -5
  911. package/dist/core/identity/provider/authentication/presets/google.mjs.map +1 -1
  912. package/dist/core/identity/provider/authentication/presets/instagram.mjs +3 -3
  913. package/dist/core/identity/provider/authentication/presets/instagram.mjs.map +1 -1
  914. package/dist/core/identity/provider/authentication/presets/paypal.mjs +3 -3
  915. package/dist/core/identity/provider/authentication/presets/paypal.mjs.map +1 -1
  916. package/dist/core/identity/provider/authentication/protocols/ldap/module.mjs +20 -20
  917. package/dist/core/identity/provider/authentication/protocols/ldap/module.mjs.map +1 -1
  918. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +5 -5
  919. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  920. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs.map +1 -1
  921. package/dist/core/identity/provider/constants.mjs.map +1 -1
  922. package/dist/core/identity/provider/mapper/attributes/module.mjs +3 -3
  923. package/dist/core/identity/provider/mapper/attributes/module.mjs.map +1 -1
  924. package/dist/core/identity/provider/mapper/base.mjs +2 -2
  925. package/dist/core/identity/provider/mapper/base.mjs.map +1 -1
  926. package/dist/core/identity/provider/mapper/constants.mjs.map +1 -1
  927. package/dist/core/identity/provider/mapper/permission/module.mjs +2 -2
  928. package/dist/core/identity/provider/mapper/permission/module.mjs.map +1 -1
  929. package/dist/core/identity/provider/mapper/role/module.mjs +2 -2
  930. package/dist/core/identity/provider/mapper/role/module.mjs.map +1 -1
  931. package/dist/core/identity/registration/service.mjs +9 -9
  932. package/dist/core/identity/registration/service.mjs.map +1 -1
  933. package/dist/core/identity/resolver/module.d.ts +1 -3
  934. package/dist/core/identity/resolver/module.d.ts.map +1 -1
  935. package/dist/core/identity/resolver/module.mjs +0 -13
  936. package/dist/core/identity/resolver/module.mjs.map +1 -1
  937. package/dist/core/identity/resolver/types.d.ts +1 -2
  938. package/dist/core/identity/resolver/types.d.ts.map +1 -1
  939. package/dist/core/identity/role/module.d.ts +0 -2
  940. package/dist/core/identity/role/module.d.ts.map +1 -1
  941. package/dist/core/identity/role/module.mjs +1 -4
  942. package/dist/core/identity/role/module.mjs.map +1 -1
  943. package/dist/core/identity/role/types.d.ts +0 -2
  944. package/dist/core/identity/role/types.d.ts.map +1 -1
  945. package/dist/core/index.d.ts +1 -0
  946. package/dist/core/index.d.ts.map +1 -1
  947. package/dist/core/index.mjs +28 -9
  948. package/dist/core/key/provisioner.mjs.map +1 -1
  949. package/dist/core/key/realm-cipher.mjs +5 -5
  950. package/dist/core/key/realm-cipher.mjs.map +1 -1
  951. package/dist/core/mail/template/templates/mfa-email-otp.mjs.map +1 -1
  952. package/dist/core/mail/template/templates/password-reset.mjs.map +1 -1
  953. package/dist/core/mail/template/templates/registration-activation.mjs.map +1 -1
  954. package/dist/core/mail/template/types.mjs.map +1 -1
  955. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  956. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +3 -3
  957. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  958. package/dist/core/oauth2/authorization/helpers.d.ts +2 -2
  959. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  960. package/dist/core/oauth2/authorization/helpers.mjs +5 -5
  961. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  962. package/dist/core/oauth2/authorization/module.mjs +8 -8
  963. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  964. package/dist/core/oauth2/client/authenticator.d.ts +1 -1
  965. package/dist/core/oauth2/client/authenticator.d.ts.map +1 -1
  966. package/dist/core/oauth2/client/authenticator.mjs +3 -3
  967. package/dist/core/oauth2/client/authenticator.mjs.map +1 -1
  968. package/dist/core/oauth2/client/grant-type.d.ts +1 -1
  969. package/dist/core/oauth2/client/grant-type.d.ts.map +1 -1
  970. package/dist/core/oauth2/client/grant-type.mjs +2 -2
  971. package/dist/core/oauth2/client/grant-type.mjs.map +1 -1
  972. package/dist/core/oauth2/end-session/service.mjs +5 -5
  973. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  974. package/dist/core/oauth2/grant-types/authorize.mjs +9 -9
  975. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  976. package/dist/core/oauth2/grant-types/client-credentials.mjs +7 -7
  977. package/dist/core/oauth2/grant-types/client-credentials.mjs.map +1 -1
  978. package/dist/core/oauth2/grant-types/identity.mjs +10 -10
  979. package/dist/core/oauth2/grant-types/identity.mjs.map +1 -1
  980. package/dist/core/oauth2/grant-types/index.d.ts +0 -1
  981. package/dist/core/oauth2/grant-types/index.d.ts.map +1 -1
  982. package/dist/core/oauth2/grant-types/index.mjs +1 -2
  983. package/dist/core/oauth2/grant-types/password.d.ts +1 -1
  984. package/dist/core/oauth2/grant-types/password.mjs +13 -13
  985. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  986. package/dist/core/oauth2/grant-types/refresh-token.mjs +12 -12
  987. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  988. package/dist/core/oauth2/index.mjs +1 -2
  989. package/dist/core/oauth2/mfa-login/module.mjs +21 -21
  990. package/dist/core/oauth2/mfa-login/module.mjs.map +1 -1
  991. package/dist/core/oauth2/mfa-login/types.d.ts +1 -1
  992. package/dist/core/oauth2/openid/claims.d.ts +1 -3
  993. package/dist/core/oauth2/openid/claims.d.ts.map +1 -1
  994. package/dist/core/oauth2/openid/claims.mjs +6 -19
  995. package/dist/core/oauth2/openid/claims.mjs.map +1 -1
  996. package/dist/core/oauth2/scope/resolver.d.ts +1 -3
  997. package/dist/core/oauth2/scope/resolver.d.ts.map +1 -1
  998. package/dist/core/oauth2/scope/resolver.mjs +9 -31
  999. package/dist/core/oauth2/scope/resolver.mjs.map +1 -1
  1000. package/dist/core/oauth2/session-token/types.d.ts +8 -8
  1001. package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
  1002. package/dist/core/oauth2/token/issuer/access/module.mjs +7 -7
  1003. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  1004. package/dist/core/oauth2/token/issuer/mfa/module.mjs.map +1 -1
  1005. package/dist/core/oauth2/token/issuer/open-id/module.mjs.map +1 -1
  1006. package/dist/core/oauth2/token/issuer/refresh/module.mjs +5 -5
  1007. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  1008. package/dist/core/oauth2/token/signer/module.mjs +6 -6
  1009. package/dist/core/oauth2/token/signer/module.mjs.map +1 -1
  1010. package/dist/core/oauth2/token/verifier/module.mjs +8 -8
  1011. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  1012. package/dist/core/provisioning/entities/index.d.ts +0 -1
  1013. package/dist/core/provisioning/entities/index.d.ts.map +1 -1
  1014. package/dist/core/provisioning/entities/index.mjs +1 -3
  1015. package/dist/core/provisioning/entities/policy/validator.d.ts +2 -0
  1016. package/dist/core/provisioning/entities/policy/validator.d.ts.map +1 -1
  1017. package/dist/core/provisioning/entities/policy/validator.mjs +10 -1
  1018. package/dist/core/provisioning/entities/policy/validator.mjs.map +1 -1
  1019. package/dist/core/provisioning/entities/realm/relations-validator.d.ts.map +1 -1
  1020. package/dist/core/provisioning/entities/realm/relations-validator.mjs +0 -4
  1021. package/dist/core/provisioning/entities/realm/relations-validator.mjs.map +1 -1
  1022. package/dist/core/provisioning/entities/realm/types.d.ts +0 -2
  1023. package/dist/core/provisioning/entities/realm/types.d.ts.map +1 -1
  1024. package/dist/core/provisioning/entities/role/types.d.ts +2 -2
  1025. package/dist/core/provisioning/entities/utils.mjs.map +1 -1
  1026. package/dist/core/provisioning/index.mjs +1 -3
  1027. package/dist/core/provisioning/strategy/constants.mjs.map +1 -1
  1028. package/dist/core/provisioning/strategy/validator.mjs.map +1 -1
  1029. package/dist/core/provisioning/synchronizer/client/module.mjs +11 -11
  1030. package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
  1031. package/dist/core/provisioning/synchronizer/entity-resolver.mjs +12 -12
  1032. package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
  1033. package/dist/core/provisioning/synchronizer/index.d.ts +0 -1
  1034. package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
  1035. package/dist/core/provisioning/synchronizer/index.mjs +1 -3
  1036. package/dist/core/provisioning/synchronizer/junction-synchronizer.d.ts +2 -2
  1037. package/dist/core/provisioning/synchronizer/junction-synchronizer.d.ts.map +1 -1
  1038. package/dist/core/provisioning/synchronizer/junction-synchronizer.mjs +2 -2
  1039. package/dist/core/provisioning/synchronizer/junction-synchronizer.mjs.map +1 -1
  1040. package/dist/core/provisioning/synchronizer/permission/module.mjs +8 -8
  1041. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  1042. package/dist/core/provisioning/synchronizer/policy/module.mjs +11 -11
  1043. package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
  1044. package/dist/core/provisioning/synchronizer/realm/module.d.ts +0 -2
  1045. package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
  1046. package/dist/core/provisioning/synchronizer/realm/module.mjs +5 -15
  1047. package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
  1048. package/dist/core/provisioning/synchronizer/realm/types.d.ts +0 -2
  1049. package/dist/core/provisioning/synchronizer/realm/types.d.ts.map +1 -1
  1050. package/dist/core/provisioning/synchronizer/role/module.mjs +7 -7
  1051. package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
  1052. package/dist/core/provisioning/synchronizer/scope/module.mjs +1 -1
  1053. package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
  1054. package/dist/core/provisioning/synchronizer/user/module.mjs +13 -13
  1055. package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
  1056. package/dist/core/query/index.d.ts +4 -0
  1057. package/dist/core/query/index.d.ts.map +1 -0
  1058. package/dist/core/query/index.mjs +6 -0
  1059. package/dist/core/query/module.d.ts +60 -0
  1060. package/dist/core/query/module.d.ts.map +1 -0
  1061. package/dist/core/query/module.mjs +128 -0
  1062. package/dist/core/query/module.mjs.map +1 -0
  1063. package/dist/core/query/relations.d.ts +39 -0
  1064. package/dist/core/query/relations.d.ts.map +1 -0
  1065. package/dist/core/query/relations.mjs +103 -0
  1066. package/dist/core/query/relations.mjs.map +1 -0
  1067. package/dist/core/query/types.d.ts +39 -0
  1068. package/dist/core/query/types.d.ts.map +1 -0
  1069. package/dist/core/security/policy/evaluator.d.ts +1 -0
  1070. package/dist/core/security/policy/evaluator.d.ts.map +1 -1
  1071. package/dist/core/security/policy/evaluator.mjs +52 -5
  1072. package/dist/core/security/policy/evaluator.mjs.map +1 -1
  1073. package/dist/index.mjs +1 -17
  1074. package/dist/swagger.json +2552 -3798
  1075. package/dist/ui/client/.vite/ssr-manifest.json +1542 -894
  1076. package/dist/ui/client/assets/index-CiHrf73J.css +2 -0
  1077. package/dist/ui/client/assets/{index-CT0Nq5pA.js → index-mtJngmng.js} +21 -18
  1078. package/dist/ui/client/index.html +2 -2
  1079. package/dist/ui/server/server.js +10344 -3440
  1080. package/package.json +35 -30
  1081. package/dist/adapters/database/domains/robot/entity.d.ts +0 -19
  1082. package/dist/adapters/database/domains/robot/entity.d.ts.map +0 -1
  1083. package/dist/adapters/database/domains/robot/entity.mjs +0 -112
  1084. package/dist/adapters/database/domains/robot/entity.mjs.map +0 -1
  1085. package/dist/adapters/database/domains/robot/index.d.ts +0 -3
  1086. package/dist/adapters/database/domains/robot/index.d.ts.map +0 -1
  1087. package/dist/adapters/database/domains/robot/index.mjs +0 -6
  1088. package/dist/adapters/database/domains/robot/subscriber.d.ts +0 -6
  1089. package/dist/adapters/database/domains/robot/subscriber.d.ts.map +0 -1
  1090. package/dist/adapters/database/domains/robot/subscriber.mjs +0 -42
  1091. package/dist/adapters/database/domains/robot/subscriber.mjs.map +0 -1
  1092. package/dist/adapters/database/domains/robot-permission/entity.d.ts +0 -18
  1093. package/dist/adapters/database/domains/robot-permission/entity.d.ts.map +0 -1
  1094. package/dist/adapters/database/domains/robot-permission/entity.mjs +0 -91
  1095. package/dist/adapters/database/domains/robot-permission/entity.mjs.map +0 -1
  1096. package/dist/adapters/database/domains/robot-permission/index.d.ts +0 -3
  1097. package/dist/adapters/database/domains/robot-permission/index.d.ts.map +0 -1
  1098. package/dist/adapters/database/domains/robot-permission/index.mjs +0 -6
  1099. package/dist/adapters/database/domains/robot-permission/subscriber.d.ts +0 -6
  1100. package/dist/adapters/database/domains/robot-permission/subscriber.d.ts.map +0 -1
  1101. package/dist/adapters/database/domains/robot-permission/subscriber.mjs +0 -45
  1102. package/dist/adapters/database/domains/robot-permission/subscriber.mjs.map +0 -1
  1103. package/dist/adapters/database/domains/robot-role/entity.d.ts +0 -15
  1104. package/dist/adapters/database/domains/robot-role/entity.d.ts.map +0 -1
  1105. package/dist/adapters/database/domains/robot-role/entity.mjs +0 -72
  1106. package/dist/adapters/database/domains/robot-role/entity.mjs.map +0 -1
  1107. package/dist/adapters/database/domains/robot-role/index.d.ts +0 -3
  1108. package/dist/adapters/database/domains/robot-role/index.d.ts.map +0 -1
  1109. package/dist/adapters/database/domains/robot-role/index.mjs +0 -6
  1110. package/dist/adapters/database/domains/robot-role/subscriber.d.ts +0 -6
  1111. package/dist/adapters/database/domains/robot-role/subscriber.d.ts.map +0 -1
  1112. package/dist/adapters/database/domains/robot-role/subscriber.mjs +0 -45
  1113. package/dist/adapters/database/domains/robot-role/subscriber.mjs.map +0 -1
  1114. package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.d.ts +0 -12
  1115. package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.d.ts.map +0 -1
  1116. package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.mjs +0 -27
  1117. package/dist/adapters/http/adapters/oauth2/grant-types/robot-credentials.mjs.map +0 -1
  1118. package/dist/adapters/http/controllers/entities/robot/index.d.ts +0 -2
  1119. package/dist/adapters/http/controllers/entities/robot/index.d.ts.map +0 -1
  1120. package/dist/adapters/http/controllers/entities/robot/index.mjs +0 -5
  1121. package/dist/adapters/http/controllers/entities/robot/module.d.ts +0 -25
  1122. package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +0 -1
  1123. package/dist/adapters/http/controllers/entities/robot/module.mjs +0 -180
  1124. package/dist/adapters/http/controllers/entities/robot/module.mjs.map +0 -1
  1125. package/dist/adapters/http/controllers/entities/robot-permission/index.d.ts +0 -3
  1126. package/dist/adapters/http/controllers/entities/robot-permission/index.d.ts.map +0 -1
  1127. package/dist/adapters/http/controllers/entities/robot-permission/index.mjs +0 -7
  1128. package/dist/adapters/http/controllers/entities/robot-permission/module.d.ts +0 -17
  1129. package/dist/adapters/http/controllers/entities/robot-permission/module.d.ts.map +0 -1
  1130. package/dist/adapters/http/controllers/entities/robot-permission/module.mjs +0 -114
  1131. package/dist/adapters/http/controllers/entities/robot-permission/module.mjs.map +0 -1
  1132. package/dist/adapters/http/controllers/entities/robot-permission/utils/index.d.ts +0 -2
  1133. package/dist/adapters/http/controllers/entities/robot-permission/utils/index.d.ts.map +0 -1
  1134. package/dist/adapters/http/controllers/entities/robot-permission/utils/index.mjs +0 -5
  1135. package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.d.ts +0 -6
  1136. package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.d.ts.map +0 -1
  1137. package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.mjs +0 -21
  1138. package/dist/adapters/http/controllers/entities/robot-permission/utils/validation.mjs.map +0 -1
  1139. package/dist/adapters/http/controllers/entities/robot-role/index.d.ts +0 -3
  1140. package/dist/adapters/http/controllers/entities/robot-role/index.d.ts.map +0 -1
  1141. package/dist/adapters/http/controllers/entities/robot-role/index.mjs +0 -7
  1142. package/dist/adapters/http/controllers/entities/robot-role/module.d.ts +0 -16
  1143. package/dist/adapters/http/controllers/entities/robot-role/module.d.ts.map +0 -1
  1144. package/dist/adapters/http/controllers/entities/robot-role/module.mjs +0 -95
  1145. package/dist/adapters/http/controllers/entities/robot-role/module.mjs.map +0 -1
  1146. package/dist/adapters/http/controllers/entities/robot-role/utils/index.d.ts +0 -2
  1147. package/dist/adapters/http/controllers/entities/robot-role/utils/index.d.ts.map +0 -1
  1148. package/dist/adapters/http/controllers/entities/robot-role/utils/index.mjs +0 -5
  1149. package/dist/adapters/http/controllers/entities/robot-role/utils/validation.d.ts +0 -6
  1150. package/dist/adapters/http/controllers/entities/robot-role/utils/validation.d.ts.map +0 -1
  1151. package/dist/adapters/http/controllers/entities/robot-role/utils/validation.mjs +0 -20
  1152. package/dist/adapters/http/controllers/entities/robot-role/utils/validation.mjs.map +0 -1
  1153. package/dist/app/modules/database/repositories/robot/index.d.ts +0 -2
  1154. package/dist/app/modules/database/repositories/robot/index.d.ts.map +0 -1
  1155. package/dist/app/modules/database/repositories/robot/index.mjs +0 -5
  1156. package/dist/app/modules/database/repositories/robot/repository.d.ts +0 -31
  1157. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +0 -1
  1158. package/dist/app/modules/database/repositories/robot/repository.mjs +0 -190
  1159. package/dist/app/modules/database/repositories/robot/repository.mjs.map +0 -1
  1160. package/dist/app/modules/database/repositories/robot-permission/index.d.ts +0 -2
  1161. package/dist/app/modules/database/repositories/robot-permission/index.d.ts.map +0 -1
  1162. package/dist/app/modules/database/repositories/robot-permission/index.mjs +0 -5
  1163. package/dist/app/modules/database/repositories/robot-permission/repository.d.ts +0 -20
  1164. package/dist/app/modules/database/repositories/robot-permission/repository.d.ts.map +0 -1
  1165. package/dist/app/modules/database/repositories/robot-permission/repository.mjs +0 -79
  1166. package/dist/app/modules/database/repositories/robot-permission/repository.mjs.map +0 -1
  1167. package/dist/app/modules/database/repositories/robot-role/index.d.ts +0 -2
  1168. package/dist/app/modules/database/repositories/robot-role/index.d.ts.map +0 -1
  1169. package/dist/app/modules/database/repositories/robot-role/index.mjs +0 -5
  1170. package/dist/app/modules/database/repositories/robot-role/repository.d.ts +0 -20
  1171. package/dist/app/modules/database/repositories/robot-role/repository.d.ts.map +0 -1
  1172. package/dist/app/modules/database/repositories/robot-role/repository.mjs +0 -79
  1173. package/dist/app/modules/database/repositories/robot-role/repository.mjs.map +0 -1
  1174. package/dist/app/modules/identity/repositories/robot.d.ts +0 -13
  1175. package/dist/app/modules/identity/repositories/robot.d.ts.map +0 -1
  1176. package/dist/app/modules/identity/repositories/robot.mjs +0 -47
  1177. package/dist/app/modules/identity/repositories/robot.mjs.map +0 -1
  1178. package/dist/core/authentication/credential/entities/robot/index.d.ts +0 -2
  1179. package/dist/core/authentication/credential/entities/robot/index.d.ts.map +0 -1
  1180. package/dist/core/authentication/credential/entities/robot/index.mjs +0 -5
  1181. package/dist/core/authentication/credential/entities/robot/module.d.ts +0 -8
  1182. package/dist/core/authentication/credential/entities/robot/module.d.ts.map +0 -1
  1183. package/dist/core/authentication/credential/entities/robot/module.mjs +0 -22
  1184. package/dist/core/authentication/credential/entities/robot/module.mjs.map +0 -1
  1185. package/dist/core/authentication/entities/robot/index.d.ts +0 -2
  1186. package/dist/core/authentication/entities/robot/index.d.ts.map +0 -1
  1187. package/dist/core/authentication/entities/robot/index.mjs +0 -5
  1188. package/dist/core/authentication/entities/robot/module.d.ts +0 -11
  1189. package/dist/core/authentication/entities/robot/module.d.ts.map +0 -1
  1190. package/dist/core/authentication/entities/robot/module.mjs +0 -29
  1191. package/dist/core/authentication/entities/robot/module.mjs.map +0 -1
  1192. package/dist/core/entities/robot/index.d.ts +0 -3
  1193. package/dist/core/entities/robot/index.d.ts.map +0 -1
  1194. package/dist/core/entities/robot/index.mjs +0 -5
  1195. package/dist/core/entities/robot/service.d.ts +0 -28
  1196. package/dist/core/entities/robot/service.d.ts.map +0 -1
  1197. package/dist/core/entities/robot/service.mjs +0 -201
  1198. package/dist/core/entities/robot/service.mjs.map +0 -1
  1199. package/dist/core/entities/robot/types.d.ts +0 -24
  1200. package/dist/core/entities/robot/types.d.ts.map +0 -1
  1201. package/dist/core/entities/robot/types.mjs +0 -4
  1202. package/dist/core/entities/robot-permission/index.d.ts +0 -3
  1203. package/dist/core/entities/robot-permission/index.d.ts.map +0 -1
  1204. package/dist/core/entities/robot-permission/index.mjs +0 -5
  1205. package/dist/core/entities/robot-permission/service.d.ts +0 -25
  1206. package/dist/core/entities/robot-permission/service.d.ts.map +0 -1
  1207. package/dist/core/entities/robot-permission/service.mjs +0 -137
  1208. package/dist/core/entities/robot-permission/service.mjs.map +0 -1
  1209. package/dist/core/entities/robot-permission/types.d.ts +0 -12
  1210. package/dist/core/entities/robot-permission/types.d.ts.map +0 -1
  1211. package/dist/core/entities/robot-role/index.d.ts +0 -3
  1212. package/dist/core/entities/robot-role/index.d.ts.map +0 -1
  1213. package/dist/core/entities/robot-role/index.mjs +0 -5
  1214. package/dist/core/entities/robot-role/service.d.ts +0 -22
  1215. package/dist/core/entities/robot-role/service.d.ts.map +0 -1
  1216. package/dist/core/entities/robot-role/service.mjs +0 -90
  1217. package/dist/core/entities/robot-role/service.mjs.map +0 -1
  1218. package/dist/core/entities/robot-role/types.d.ts +0 -11
  1219. package/dist/core/entities/robot-role/types.d.ts.map +0 -1
  1220. package/dist/core/entities/robot-role/types.mjs +0 -4
  1221. package/dist/core/identity/entities/robot/index.d.ts +0 -2
  1222. package/dist/core/identity/entities/robot/index.d.ts.map +0 -1
  1223. package/dist/core/identity/entities/robot/types.d.ts +0 -8
  1224. package/dist/core/identity/entities/robot/types.d.ts.map +0 -1
  1225. package/dist/core/identity/entities/robot/types.mjs +0 -4
  1226. package/dist/core/oauth2/grant-types/robot-credentials.d.ts +0 -8
  1227. package/dist/core/oauth2/grant-types/robot-credentials.d.ts.map +0 -1
  1228. package/dist/core/oauth2/grant-types/robot-credentials.mjs +0 -39
  1229. package/dist/core/oauth2/grant-types/robot-credentials.mjs.map +0 -1
  1230. package/dist/core/provisioning/entities/robot/index.d.ts +0 -3
  1231. package/dist/core/provisioning/entities/robot/index.d.ts.map +0 -1
  1232. package/dist/core/provisioning/entities/robot/index.mjs +0 -5
  1233. package/dist/core/provisioning/entities/robot/relations-validator.d.ts +0 -6
  1234. package/dist/core/provisioning/entities/robot/relations-validator.d.ts.map +0 -1
  1235. package/dist/core/provisioning/entities/robot/relations-validator.mjs +0 -20
  1236. package/dist/core/provisioning/entities/robot/relations-validator.mjs.map +0 -1
  1237. package/dist/core/provisioning/entities/robot/types.d.ts +0 -25
  1238. package/dist/core/provisioning/entities/robot/types.d.ts.map +0 -1
  1239. package/dist/core/provisioning/entities/robot/types.mjs +0 -4
  1240. package/dist/core/provisioning/entities/robot/validator.d.ts +0 -6
  1241. package/dist/core/provisioning/entities/robot/validator.d.ts.map +0 -1
  1242. package/dist/core/provisioning/entities/robot/validator.mjs +0 -24
  1243. package/dist/core/provisioning/entities/robot/validator.mjs.map +0 -1
  1244. package/dist/core/provisioning/synchronizer/robot/index.d.ts +0 -3
  1245. package/dist/core/provisioning/synchronizer/robot/index.d.ts.map +0 -1
  1246. package/dist/core/provisioning/synchronizer/robot/index.mjs +0 -5
  1247. package/dist/core/provisioning/synchronizer/robot/module.d.ts +0 -17
  1248. package/dist/core/provisioning/synchronizer/robot/module.d.ts.map +0 -1
  1249. package/dist/core/provisioning/synchronizer/robot/module.mjs +0 -72
  1250. package/dist/core/provisioning/synchronizer/robot/module.mjs.map +0 -1
  1251. package/dist/core/provisioning/synchronizer/robot/types.d.ts +0 -9
  1252. package/dist/core/provisioning/synchronizer/robot/types.d.ts.map +0 -1
  1253. package/dist/core/provisioning/synchronizer/robot/types.mjs +0 -4
  1254. package/dist/ui/client/assets/index-BmWsoQro.css +0 -2
  1255. /package/dist/core/{entities/robot-permission → query}/types.mjs +0 -0
@@ -2,7 +2,6 @@ import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
4
  import { ClientAuthenticator } from "../../../../../core/authentication/entities/client/module.mjs";
5
- import { RobotAuthenticator } from "../../../../../core/authentication/entities/robot/module.mjs";
6
5
  import { UserAuthenticator } from "../../../../../core/authentication/entities/user/module.mjs";
7
6
  import { assertClientCertificateEvidenceValidForBinding } from "../../../../../core/client-certificate/module.mjs";
8
7
  import { PolicyEngine as PolicyEngine$1 } from "../../../../../core/security/policy/engine.mjs";
@@ -29,14 +28,12 @@ var AuthorizationMiddleware = class {
29
28
  identityResolver;
30
29
  sessionManager;
31
30
  clientAuthenticator;
32
- robotAuthenticator;
33
31
  userAuthenticator;
34
32
  constructor(ctx) {
35
33
  this.options = ctx.options || {};
36
34
  this.identityResolver = ctx.identityResolver;
37
35
  this.sessionManager = ctx.sessionManager;
38
36
  this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);
39
- this.robotAuthenticator = new RobotAuthenticator(ctx.identityResolver);
40
37
  this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);
41
38
  this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;
42
39
  this.permissionEvaluator = new PermissionEvaluator({
@@ -122,7 +119,7 @@ var AuthorizationMiddleware = class {
122
119
  } catch {
123
120
  throw JWTError.expired();
124
121
  }
125
- if (session.sub !== payload.sub || session.sub_kind !== IdentityType.USER) throw JWTError.expired();
122
+ if (session.sub !== payload.sub || session.subKind !== IdentityType.USER) throw JWTError.expired();
126
123
  await this.sessionManager.ping(session);
127
124
  const identity = await this.identityResolver.resolve(payload.sub_kind, payload.sub);
128
125
  if (!identity) throw JWTError.expired();
@@ -150,17 +147,6 @@ var AuthorizationMiddleware = class {
150
147
  type: IdentityType.USER,
151
148
  data: authenticated.data
152
149
  });
153
- return;
154
- }
155
- }
156
- if (this.options.robotAuthBasic) {
157
- const authenticated = await this.robotAuthenticator.safeAuthenticate(header.username, header.password);
158
- if (authenticated.success) {
159
- setRequestScopes(event, [ScopeName.GLOBAL]);
160
- setRequestIdentity(event, {
161
- type: IdentityType.ROBOT,
162
- data: authenticated.data
163
- });
164
150
  }
165
151
  }
166
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["PermissionEvaluator","IdentityType","ScopeName","AuthHeaderError","JWTError","OAuth2SubKind","OAuth2TokenKind","deserializeOAuth2Scope","AuthorizationHeaderType","parseAuthorizationHeader","ClientAuthenticator","PolicyEngine","RobotAuthenticator","UserAuthenticator","assertClientCertificateEvidenceValidForBinding","RequestIdentity","RequestPermissionEvaluator","extractClientCertificateEvidence","setRequestIdentity","setRequestMfaLoginTicket","setRequestPermissionEvaluator","setRequestScopes","setRequestSessionId","setRequestToken","AuthorizationMiddleware","options","oauth2TokenVerifier","permissionEvaluator","identityResolver","sessionManager","clientAuthenticator","robotAuthenticator","userAuthenticator","ctx","provider","permissionProvider","policyEngine","identityPermissionProvider","realmId","clientId","run","event","requestAccessContext","headerValue","headers","get","header","type","BEARER","verifyBearerAuthorizationHeader","BASIC","verifyBasicAuthorizationHeader","unsupportedType","payload","verify","token","verifyCertificateBinding","kind","MFA","verifyMfaLoginTicket","ACCESS","payloadPropertyInvalid","realm_id","scope","session_id","session","findOneById","expired","ping","sub_kind","sub","identity","resolve","cnf","expectedThumbprint","length","invalid","evidence","certificateSource","thumbprint","USER","clientAuthBasic","authenticator","safeAuthenticate","username","password","success","GLOBAL","CLIENT","data","userAuthBasic","authenticated","robotAuthBasic","ROBOT"],"sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IPermissionEvaluator } from '@authup/access';\nimport { PermissionEvaluator } from '@authup/access';\nimport type { Client, Robot, User } from '@authup/core-kit';\nimport {\n IdentityType,\n ScopeName,\n} from '@authup/core-kit';\nimport { AuthHeaderError } from '@authup/errors';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport {\n JWTError,\n OAuth2SubKind,\n OAuth2TokenKind,\n deserializeOAuth2Scope,\n} from '@authup/specs';\nimport type { IAppEvent } from 'routup';\nimport {\n AuthorizationHeaderType,\n type BasicAuthorizationHeader,\n type BearerAuthorizationHeader,\n parseAuthorizationHeader,\n} from 'hapic';\nimport {\n ClientAuthenticator,\n PolicyEngine,\n RobotAuthenticator,\n UserAuthenticator,\n assertClientCertificateEvidenceValidForBinding,\n} from '../../../../../core/index.ts';\nimport type {\n ICredentialsAuthenticator,\n IIdentityResolver,\n IOAuth2TokenVerifier,\n ISessionManager,\n} from '../../../../../core/index.ts';\nimport {\n RequestIdentity,\n RequestPermissionEvaluator,\n extractClientCertificateEvidence,\n setRequestIdentity,\n setRequestMfaLoginTicket,\n setRequestPermissionEvaluator,\n setRequestScopes,\n setRequestSessionId,\n setRequestToken,\n} from '../../../request/index.ts';\nimport type { HTTPAuthorizationMiddlewareContext, HTTPAuthorizationMiddlewareOptions } from './types.ts';\n\nexport class AuthorizationMiddleware {\n protected options: HTTPAuthorizationMiddlewareOptions;\n\n // --------------------------------------\n\n protected oauth2TokenVerifier: IOAuth2TokenVerifier;\n\n protected permissionEvaluator: IPermissionEvaluator;\n\n // --------------------------------------\n\n protected identityResolver: IIdentityResolver;\n\n protected sessionManager : ISessionManager;\n\n // --------------------------------------\n\n protected clientAuthenticator : ICredentialsAuthenticator<Client>;\n\n protected robotAuthenticator : ICredentialsAuthenticator<Robot>;\n\n protected userAuthenticator : ICredentialsAuthenticator<User>;\n\n // --------------------------------------\n\n constructor(ctx: HTTPAuthorizationMiddlewareContext) {\n this.options = ctx.options || {};\n\n this.identityResolver = ctx.identityResolver;\n this.sessionManager = ctx.sessionManager;\n\n this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);\n this.robotAuthenticator = new RobotAuthenticator(ctx.identityResolver);\n this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);\n\n this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;\n\n this.permissionEvaluator = new PermissionEvaluator({\n provider: ctx.permissionProvider,\n policyEngine: new PolicyEngine(ctx.identityPermissionProvider),\n realmId: null,\n clientId: null,\n });\n }\n\n // --------------------------------------\n\n async run(event: IAppEvent) {\n const requestAccessContext = new RequestPermissionEvaluator(\n event,\n this.permissionEvaluator,\n );\n setRequestPermissionEvaluator(event, requestAccessContext);\n\n const headerValue = event.headers.get('authorization');\n if (!headerValue) {\n return;\n }\n\n const header = parseAuthorizationHeader(headerValue);\n\n if (header.type === AuthorizationHeaderType.BEARER) {\n await this.verifyBearerAuthorizationHeader(event, header);\n return;\n }\n\n if (header.type === AuthorizationHeaderType.BASIC) {\n await this.verifyBasicAuthorizationHeader(event, header);\n return;\n }\n\n throw AuthHeaderError.unsupportedType(header.type);\n }\n\n /**\n * @throws JWTError\n */\n protected async verifyBearerAuthorizationHeader(\n event: IAppEvent,\n header: BearerAuthorizationHeader,\n ) {\n const payload = await this.oauth2TokenVerifier.verify(header.token);\n await this.verifyCertificateBinding(event, payload);\n if (payload.kind === OAuth2TokenKind.MFA) {\n await this.verifyMfaLoginTicket(event, payload);\n return;\n }\n\n if (payload.kind !== OAuth2TokenKind.ACCESS) {\n throw JWTError.payloadPropertyInvalid('kind');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n setRequestToken(event, header.token);\n\n if (payload.scope) {\n setRequestScopes(event, deserializeOAuth2Scope(payload.scope));\n }\n\n // -------------------------------------------------------\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n setRequestSessionId(event, payload.session_id);\n\n // -------------------------------------------------------\n\n if (!payload.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n\n if (identity) {\n setRequestIdentity(event, identity);\n }\n }\n\n protected async verifyCertificateBinding(event: IAppEvent, payload: OAuth2TokenPayload): Promise<void> {\n if (!payload.cnf) {\n return;\n }\n\n const expectedThumbprint = payload.cnf['x5t#S256'];\n if (typeof expectedThumbprint !== 'string' || expectedThumbprint.length === 0) {\n throw JWTError.invalid();\n }\n\n try {\n const evidence = await extractClientCertificateEvidence(\n event,\n this.options.certificateSource ?? 'disabled',\n );\n if (!evidence || evidence.thumbprint !== expectedThumbprint) {\n throw JWTError.invalid();\n }\n\n assertClientCertificateEvidenceValidForBinding(evidence);\n } catch {\n throw JWTError.invalid();\n }\n }\n\n /**\n * An \"MFA-pending\" login ticket (issue #3242). Verified with the same\n * rigor as an access token (session existence + subject match), but\n * stashed on a DEDICATED request slot — the main identity / scope /\n * session slots stay empty, so every identity-gated route rejects a\n * ticket bearer (default-deny); only the challenge routes opt in via\n * useRequestMfaLoginTicket.\n *\n * @throws JWTError\n */\n protected async verifyMfaLoginTicket(\n event: IAppEvent,\n payload: OAuth2TokenPayload,\n ) {\n if (payload.sub_kind !== OAuth2SubKind.USER) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n // defense in depth — the pending session must still belong to the\n // ticket subject.\n if (\n session.sub !== payload.sub ||\n session.sub_kind !== IdentityType.USER\n ) {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n if (!identity) {\n throw JWTError.expired();\n }\n\n setRequestMfaLoginTicket(event, {\n identity: new RequestIdentity(identity),\n payload,\n });\n }\n\n protected async verifyBasicAuthorizationHeader(\n event: IAppEvent,\n header: BasicAuthorizationHeader,\n ) {\n if (this.options.clientAuthBasic) {\n const authenticator = await this.clientAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n if (authenticator.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.CLIENT,\n data: authenticator.data,\n });\n }\n }\n\n if (this.options.userAuthBasic) {\n const authenticated = await this.userAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n\n if (authenticated.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.USER,\n data: authenticated.data,\n });\n\n return;\n }\n }\n\n if (this.options.robotAuthBasic) {\n const authenticated = await this.robotAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n if (authenticated.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.ROBOT,\n data: authenticated.data,\n });\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuDA,IAAawB,0BAAb,MAAaA;CACCC;CAIAC;CAEAC;CAIAC;CAEAC;CAIAC;CAEAC;CAEAC;CAIV,YAAYC,KAAyC;EACjD,KAAKR,UAAUQ,IAAIR,WAAW,CAAC;EAE/B,KAAKG,mBAAmBK,IAAIL;EAC5B,KAAKC,iBAAiBI,IAAIJ;EAE1B,KAAKC,sBAAsB,IAAIpB,oBAAoBuB,IAAIL,gBAAgB;EACvE,KAAKG,qBAAqB,IAAInB,mBAAmBqB,IAAIL,gBAAgB;EACrE,KAAKI,oBAAoB,IAAInB,kBAAkBoB,IAAIL,gBAAgB;EAEnE,KAAKF,sBAAsBO,IAAIP;EAE/B,KAAKC,sBAAsB,IAAI3B,oBAAoB;GAC/CkC,UAAUD,IAAIE;GACdC,cAAc,IAAIzB,eAAasB,IAAII,0BAA0B;GAC7DC,SAAS;GACTC,UAAU;EACd,CAAA;CACJ;CAIA,MAAMC,IAAIC,OAAkB;EAKxBrB,8BAA8BqB,OAAOC,IAJJ1B,2BAC7ByB,OACA,KAAKd,mBAE4Be,CAAAA;EAErC,MAAMC,cAAcF,MAAMG,QAAQC,IAAI,eAAA;EACtC,IAAI,CAACF,aACD;EAGJ,MAAMG,SAASrC,yBAAyBkC,WAAAA;EAExC,IAAIG,OAAOC,SAASvC,wBAAwBwC,QAAQ;GAChD,MAAM,KAAKC,gCAAgCR,OAAOK,MAAAA;GAClD;EACJ;EAEA,IAAIA,OAAOC,SAASvC,wBAAwB0C,OAAO;GAC/C,MAAM,KAAKC,+BAA+BV,OAAOK,MAAAA;GACjD;EACJ;EAEA,MAAM3C,gBAAgBiD,gBAAgBN,OAAOC,IAAI;CACrD;;;IAKA,MAAgBE,gCACZR,OACAK,QACF;EACE,MAAMO,UAAU,MAAM,KAAK3B,oBAAoB4B,OAAOR,OAAOS,KAAK;EAClE,MAAM,KAAKC,yBAAyBf,OAAOY,OAAAA;EAC3C,IAAIA,QAAQI,SAASnD,gBAAgBoD,KAAK;GACtC,MAAM,KAAKC,qBAAqBlB,OAAOY,OAAAA;GACvC;EACJ;EAEA,IAAIA,QAAQI,SAASnD,gBAAgBsD,QACjC,MAAMxD,SAASyD,uBAAuB,MAAA;EAG1C,IAAI,CAACR,QAAQS,UACT,MAAM1D,SAASyD,uBAAuB,UAAA;EAG1CtC,gBAAgBkB,OAAOK,OAAOS,KAAK;EAEnC,IAAIF,QAAQU,OACR1C,iBAAiBoB,OAAOlC,uBAAuB8C,QAAQU,KAAK,CAAA;EAKhE,IAAI,CAACV,QAAQW,YACT,MAAM5D,SAASyD,uBAAuB,YAAA;EAG1C,MAAMI,UAAU,MAAM,KAAKpC,eAAeqC,YAAYb,QAAQW,UAAU;EACxE,IAAI,CAACC,SACD,MAAM7D,SAAS+D,QAAO;EAG1B,IAAI;GACA,MAAM,KAAKtC,eAAeyB,OAAOW,OAAAA;EACrC,QAAQ;GACJ,MAAM7D,SAAS+D,QAAO;EAC1B;EAEA,MAAM,KAAKtC,eAAeuC,KAAKH,OAAAA;EAE/B3C,oBAAoBmB,OAAOY,QAAQW,UAAU;EAI7C,IAAI,CAACX,QAAQgB,UACT,MAAMjE,SAASyD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQiB,KACT,MAAMlE,SAASyD,uBAAuB,KAAA;EAG1C,MAAMU,WAAW,MAAM,KAAK3C,iBAAiB4C,QACzCnB,QAAQgB,UACRhB,QAAQiB,GAAG;EAGf,IAAIC,UACArD,mBAAmBuB,OAAO8B,QAAAA;CAElC;CAEA,MAAgBf,yBAAyBf,OAAkBY,SAA4C;EACnG,IAAI,CAACA,QAAQoB,KACT;EAGJ,MAAMC,qBAAqBrB,QAAQoB,IAAI;EACvC,IAAI,OAAOC,uBAAuB,YAAYA,mBAAmBC,WAAW,GACxE,MAAMvE,SAASwE,QAAO;EAG1B,IAAI;GACA,MAAMC,WAAW,MAAM5D,iCACnBwB,OACA,KAAKhB,QAAQqD,qBAAqB,UAAA;GAEtC,IAAI,CAACD,YAAYA,SAASE,eAAeL,oBACrC,MAAMtE,SAASwE,QAAO;GAG1B9D,+CAA+C+D,QAAAA;EACnD,QAAQ;GACJ,MAAMzE,SAASwE,QAAO;EAC1B;CACJ;;;;;;;;;;IAYA,MAAgBjB,qBACZlB,OACAY,SACF;EACE,IAAIA,QAAQgB,aAAahE,cAAc2E,MACnC,MAAM5E,SAASyD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQiB,KACT,MAAMlE,SAASyD,uBAAuB,KAAA;EAG1C,IAAI,CAACR,QAAQS,UACT,MAAM1D,SAASyD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQW,YACT,MAAM5D,SAASyD,uBAAuB,YAAA;EAG1C,MAAMI,UAAU,MAAM,KAAKpC,eAAeqC,YAAYb,QAAQW,UAAU;EACxE,IAAI,CAACC,SACD,MAAM7D,SAAS+D,QAAO;EAG1B,IAAI;GACA,MAAM,KAAKtC,eAAeyB,OAAOW,OAAAA;EACrC,QAAQ;GACJ,MAAM7D,SAAS+D,QAAO;EAC1B;EAIA,IACIF,QAAQK,QAAQjB,QAAQiB,OACxBL,QAAQI,aAAapE,aAAa+E,MAElC,MAAM5E,SAAS+D,QAAO;EAG1B,MAAM,KAAKtC,eAAeuC,KAAKH,OAAAA;EAE/B,MAAMM,WAAW,MAAM,KAAK3C,iBAAiB4C,QACzCnB,QAAQgB,UACRhB,QAAQiB,GAAG;EAEf,IAAI,CAACC,UACD,MAAMnE,SAAS+D,QAAO;EAG1BhD,yBAAyBsB,OAAO;GAC5B8B,UAAU,IAAIxD,gBAAgBwD,QAAAA;GAC9BlB;EACJ,CAAA;CACJ;CAEA,MAAgBF,+BACZV,OACAK,QACF;EACE,IAAI,KAAKrB,QAAQwD,iBAAiB;GAC9B,MAAMC,gBAAgB,MAAM,KAAKpD,oBAAoBqD,iBACjDrC,OAAOsC,UACPtC,OAAOuC,QAAQ;GAEnB,IAAIH,cAAcI,SAAS;IACvBjE,iBAAiBoB,OAAO,CAACvC,UAAUqF,MAAAA,CAAO;IAC1CrE,mBAAmBuB,OAAO;KACtBM,MAAM9C,aAAauF;KACnBC,MAAMP,cAAcO;IACxB,CAAA;GACJ;EACJ;EAEA,IAAI,KAAKhE,QAAQiE,eAAe;GAC5B,MAAMC,gBAAgB,MAAM,KAAK3D,kBAAkBmD,iBAC/CrC,OAAOsC,UACPtC,OAAOuC,QAAQ;GAGnB,IAAIM,cAAcL,SAAS;IACvBjE,iBAAiBoB,OAAO,CAACvC,UAAUqF,MAAAA,CAAO;IAC1CrE,mBAAmBuB,OAAO;KACtBM,MAAM9C,aAAa+E;KACnBS,MAAME,cAAcF;IACxB,CAAA;IAEA;GACJ;EACJ;EAEA,IAAI,KAAKhE,QAAQmE,gBAAgB;GAC7B,MAAMD,gBAAgB,MAAM,KAAK5D,mBAAmBoD,iBAChDrC,OAAOsC,UACPtC,OAAOuC,QAAQ;GAEnB,IAAIM,cAAcL,SAAS;IACvBjE,iBAAiBoB,OAAO,CAACvC,UAAUqF,MAAAA,CAAO;IAC1CrE,mBAAmBuB,OAAO;KACtBM,MAAM9C,aAAa4F;KACnBJ,MAAME,cAAcF;IACxB,CAAA;GACJ;EACJ;CACJ;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["PermissionEvaluator","IdentityType","ScopeName","AuthHeaderError","JWTError","OAuth2SubKind","OAuth2TokenKind","deserializeOAuth2Scope","AuthorizationHeaderType","parseAuthorizationHeader","ClientAuthenticator","PolicyEngine","UserAuthenticator","assertClientCertificateEvidenceValidForBinding","RequestIdentity","RequestPermissionEvaluator","extractClientCertificateEvidence","setRequestIdentity","setRequestMfaLoginTicket","setRequestPermissionEvaluator","setRequestScopes","setRequestSessionId","setRequestToken","AuthorizationMiddleware","options","oauth2TokenVerifier","permissionEvaluator","identityResolver","sessionManager","clientAuthenticator","userAuthenticator","ctx","provider","permissionProvider","policyEngine","identityPermissionProvider","realmId","clientId","run","event","requestAccessContext","headerValue","headers","get","header","type","BEARER","verifyBearerAuthorizationHeader","BASIC","verifyBasicAuthorizationHeader","unsupportedType","payload","verify","token","verifyCertificateBinding","kind","MFA","verifyMfaLoginTicket","ACCESS","payloadPropertyInvalid","realm_id","scope","session_id","session","findOneById","expired","ping","sub_kind","sub","identity","resolve","cnf","expectedThumbprint","length","invalid","evidence","certificateSource","thumbprint","USER","subKind","clientAuthBasic","authenticator","safeAuthenticate","username","password","success","GLOBAL","CLIENT","data","userAuthBasic","authenticated"],"sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IPermissionEvaluator } from '@authup/access';\nimport { PermissionEvaluator } from '@authup/access';\nimport type { Client, User } from '@authup/core-kit';\nimport {\n IdentityType,\n ScopeName,\n} from '@authup/core-kit';\nimport { AuthHeaderError } from '@authup/errors';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport {\n JWTError,\n OAuth2SubKind,\n OAuth2TokenKind,\n deserializeOAuth2Scope,\n} from '@authup/specs';\nimport type { IAppEvent } from 'routup';\nimport {\n AuthorizationHeaderType,\n type BasicAuthorizationHeader,\n type BearerAuthorizationHeader,\n parseAuthorizationHeader,\n} from 'hapic';\nimport {\n ClientAuthenticator,\n PolicyEngine,\n UserAuthenticator,\n assertClientCertificateEvidenceValidForBinding,\n} from '../../../../../core/index.ts';\nimport type {\n ICredentialsAuthenticator,\n IIdentityResolver,\n IOAuth2TokenVerifier,\n ISessionManager,\n} from '../../../../../core/index.ts';\nimport {\n RequestIdentity,\n RequestPermissionEvaluator,\n extractClientCertificateEvidence,\n setRequestIdentity,\n setRequestMfaLoginTicket,\n setRequestPermissionEvaluator,\n setRequestScopes,\n setRequestSessionId,\n setRequestToken,\n} from '../../../request/index.ts';\nimport type { HTTPAuthorizationMiddlewareContext, HTTPAuthorizationMiddlewareOptions } from './types.ts';\n\nexport class AuthorizationMiddleware {\n protected options: HTTPAuthorizationMiddlewareOptions;\n\n // --------------------------------------\n\n protected oauth2TokenVerifier: IOAuth2TokenVerifier;\n\n protected permissionEvaluator: IPermissionEvaluator;\n\n // --------------------------------------\n\n protected identityResolver: IIdentityResolver;\n\n protected sessionManager : ISessionManager;\n\n // --------------------------------------\n\n protected clientAuthenticator : ICredentialsAuthenticator<Client>;\n\n protected userAuthenticator : ICredentialsAuthenticator<User>;\n\n // --------------------------------------\n\n constructor(ctx: HTTPAuthorizationMiddlewareContext) {\n this.options = ctx.options || {};\n\n this.identityResolver = ctx.identityResolver;\n this.sessionManager = ctx.sessionManager;\n\n this.clientAuthenticator = new ClientAuthenticator(ctx.identityResolver);\n this.userAuthenticator = new UserAuthenticator(ctx.identityResolver);\n\n this.oauth2TokenVerifier = ctx.oauth2TokenVerifier;\n\n this.permissionEvaluator = new PermissionEvaluator({\n provider: ctx.permissionProvider,\n policyEngine: new PolicyEngine(ctx.identityPermissionProvider),\n realmId: null,\n clientId: null,\n });\n }\n\n // --------------------------------------\n\n async run(event: IAppEvent) {\n const requestAccessContext = new RequestPermissionEvaluator(\n event,\n this.permissionEvaluator,\n );\n setRequestPermissionEvaluator(event, requestAccessContext);\n\n const headerValue = event.headers.get('authorization');\n if (!headerValue) {\n return;\n }\n\n const header = parseAuthorizationHeader(headerValue);\n\n if (header.type === AuthorizationHeaderType.BEARER) {\n await this.verifyBearerAuthorizationHeader(event, header);\n return;\n }\n\n if (header.type === AuthorizationHeaderType.BASIC) {\n await this.verifyBasicAuthorizationHeader(event, header);\n return;\n }\n\n throw AuthHeaderError.unsupportedType(header.type);\n }\n\n /**\n * @throws JWTError\n */\n protected async verifyBearerAuthorizationHeader(\n event: IAppEvent,\n header: BearerAuthorizationHeader,\n ) {\n const payload = await this.oauth2TokenVerifier.verify(header.token);\n await this.verifyCertificateBinding(event, payload);\n if (payload.kind === OAuth2TokenKind.MFA) {\n await this.verifyMfaLoginTicket(event, payload);\n return;\n }\n\n if (payload.kind !== OAuth2TokenKind.ACCESS) {\n throw JWTError.payloadPropertyInvalid('kind');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n setRequestToken(event, header.token);\n\n if (payload.scope) {\n setRequestScopes(event, deserializeOAuth2Scope(payload.scope));\n }\n\n // -------------------------------------------------------\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n setRequestSessionId(event, payload.session_id);\n\n // -------------------------------------------------------\n\n if (!payload.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n\n if (identity) {\n setRequestIdentity(event, identity);\n }\n }\n\n protected async verifyCertificateBinding(event: IAppEvent, payload: OAuth2TokenPayload): Promise<void> {\n if (!payload.cnf) {\n return;\n }\n\n const expectedThumbprint = payload.cnf['x5t#S256'];\n if (typeof expectedThumbprint !== 'string' || expectedThumbprint.length === 0) {\n throw JWTError.invalid();\n }\n\n try {\n const evidence = await extractClientCertificateEvidence(\n event,\n this.options.certificateSource ?? 'disabled',\n );\n if (!evidence || evidence.thumbprint !== expectedThumbprint) {\n throw JWTError.invalid();\n }\n\n assertClientCertificateEvidenceValidForBinding(evidence);\n } catch {\n throw JWTError.invalid();\n }\n }\n\n /**\n * An \"MFA-pending\" login ticket (issue #3242). Verified with the same\n * rigor as an access token (session existence + subject match), but\n * stashed on a DEDICATED request slot — the main identity / scope /\n * session slots stay empty, so every identity-gated route rejects a\n * ticket bearer (default-deny); only the challenge routes opt in via\n * useRequestMfaLoginTicket.\n *\n * @throws JWTError\n */\n protected async verifyMfaLoginTicket(\n event: IAppEvent,\n payload: OAuth2TokenPayload,\n ) {\n if (payload.sub_kind !== OAuth2SubKind.USER) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!payload.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n if (!payload.realm_id) {\n throw JWTError.payloadPropertyInvalid('realm_id');\n }\n\n if (!payload.session_id) {\n throw JWTError.payloadPropertyInvalid('session_id');\n }\n\n const session = await this.sessionManager.findOneById(payload.session_id);\n if (!session) {\n throw JWTError.expired();\n }\n\n try {\n await this.sessionManager.verify(session);\n } catch {\n throw JWTError.expired();\n }\n\n // defense in depth — the pending session must still belong to the\n // ticket subject.\n if (\n session.sub !== payload.sub ||\n session.subKind !== IdentityType.USER\n ) {\n throw JWTError.expired();\n }\n\n await this.sessionManager.ping(session);\n\n const identity = await this.identityResolver.resolve(\n payload.sub_kind,\n payload.sub,\n );\n if (!identity) {\n throw JWTError.expired();\n }\n\n setRequestMfaLoginTicket(event, {\n identity: new RequestIdentity(identity),\n payload,\n });\n }\n\n protected async verifyBasicAuthorizationHeader(\n event: IAppEvent,\n header: BasicAuthorizationHeader,\n ) {\n if (this.options.clientAuthBasic) {\n const authenticator = await this.clientAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n if (authenticator.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.CLIENT,\n data: authenticator.data,\n });\n }\n }\n\n if (this.options.userAuthBasic) {\n const authenticated = await this.userAuthenticator.safeAuthenticate(\n header.username,\n header.password,\n );\n\n if (authenticated.success) {\n setRequestScopes(event, [ScopeName.GLOBAL]);\n setRequestIdentity(event, {\n type: IdentityType.USER,\n data: authenticated.data,\n });\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDA,IAAauB,0BAAb,MAAaA;CACCC;CAIAC;CAEAC;CAIAC;CAEAC;CAIAC;CAEAC;CAIV,YAAYC,KAAyC;EACjD,KAAKP,UAAUO,IAAIP,WAAW,CAAC;EAE/B,KAAKG,mBAAmBI,IAAIJ;EAC5B,KAAKC,iBAAiBG,IAAIH;EAE1B,KAAKC,sBAAsB,IAAInB,oBAAoBqB,IAAIJ,gBAAgB;EACvE,KAAKG,oBAAoB,IAAIlB,kBAAkBmB,IAAIJ,gBAAgB;EAEnE,KAAKF,sBAAsBM,IAAIN;EAE/B,KAAKC,sBAAsB,IAAI1B,oBAAoB;GAC/CgC,UAAUD,IAAIE;GACdC,cAAc,IAAIvB,eAAaoB,IAAII,0BAA0B;GAC7DC,SAAS;GACTC,UAAU;EACd,CAAA;CACJ;CAIA,MAAMC,IAAIC,OAAkB;EAKxBpB,8BAA8BoB,OAAOC,IAJJzB,2BAC7BwB,OACA,KAAKb,mBAE4Bc,CAAAA;EAErC,MAAMC,cAAcF,MAAMG,QAAQC,IAAI,eAAA;EACtC,IAAI,CAACF,aACD;EAGJ,MAAMG,SAASnC,yBAAyBgC,WAAAA;EAExC,IAAIG,OAAOC,SAASrC,wBAAwBsC,QAAQ;GAChD,MAAM,KAAKC,gCAAgCR,OAAOK,MAAAA;GAClD;EACJ;EAEA,IAAIA,OAAOC,SAASrC,wBAAwBwC,OAAO;GAC/C,MAAM,KAAKC,+BAA+BV,OAAOK,MAAAA;GACjD;EACJ;EAEA,MAAMzC,gBAAgB+C,gBAAgBN,OAAOC,IAAI;CACrD;;;IAKA,MAAgBE,gCACZR,OACAK,QACF;EACE,MAAMO,UAAU,MAAM,KAAK1B,oBAAoB2B,OAAOR,OAAOS,KAAK;EAClE,MAAM,KAAKC,yBAAyBf,OAAOY,OAAAA;EAC3C,IAAIA,QAAQI,SAASjD,gBAAgBkD,KAAK;GACtC,MAAM,KAAKC,qBAAqBlB,OAAOY,OAAAA;GACvC;EACJ;EAEA,IAAIA,QAAQI,SAASjD,gBAAgBoD,QACjC,MAAMtD,SAASuD,uBAAuB,MAAA;EAG1C,IAAI,CAACR,QAAQS,UACT,MAAMxD,SAASuD,uBAAuB,UAAA;EAG1CrC,gBAAgBiB,OAAOK,OAAOS,KAAK;EAEnC,IAAIF,QAAQU,OACRzC,iBAAiBmB,OAAOhC,uBAAuB4C,QAAQU,KAAK,CAAA;EAKhE,IAAI,CAACV,QAAQW,YACT,MAAM1D,SAASuD,uBAAuB,YAAA;EAG1C,MAAMI,UAAU,MAAM,KAAKnC,eAAeoC,YAAYb,QAAQW,UAAU;EACxE,IAAI,CAACC,SACD,MAAM3D,SAAS6D,QAAO;EAG1B,IAAI;GACA,MAAM,KAAKrC,eAAewB,OAAOW,OAAAA;EACrC,QAAQ;GACJ,MAAM3D,SAAS6D,QAAO;EAC1B;EAEA,MAAM,KAAKrC,eAAesC,KAAKH,OAAAA;EAE/B1C,oBAAoBkB,OAAOY,QAAQW,UAAU;EAI7C,IAAI,CAACX,QAAQgB,UACT,MAAM/D,SAASuD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQiB,KACT,MAAMhE,SAASuD,uBAAuB,KAAA;EAG1C,MAAMU,WAAW,MAAM,KAAK1C,iBAAiB2C,QACzCnB,QAAQgB,UACRhB,QAAQiB,GAAG;EAGf,IAAIC,UACApD,mBAAmBsB,OAAO8B,QAAAA;CAElC;CAEA,MAAgBf,yBAAyBf,OAAkBY,SAA4C;EACnG,IAAI,CAACA,QAAQoB,KACT;EAGJ,MAAMC,qBAAqBrB,QAAQoB,IAAI;EACvC,IAAI,OAAOC,uBAAuB,YAAYA,mBAAmBC,WAAW,GACxE,MAAMrE,SAASsE,QAAO;EAG1B,IAAI;GACA,MAAMC,WAAW,MAAM3D,iCACnBuB,OACA,KAAKf,QAAQoD,qBAAqB,UAAA;GAEtC,IAAI,CAACD,YAAYA,SAASE,eAAeL,oBACrC,MAAMpE,SAASsE,QAAO;GAG1B7D,+CAA+C8D,QAAAA;EACnD,QAAQ;GACJ,MAAMvE,SAASsE,QAAO;EAC1B;CACJ;;;;;;;;;;IAYA,MAAgBjB,qBACZlB,OACAY,SACF;EACE,IAAIA,QAAQgB,aAAa9D,cAAcyE,MACnC,MAAM1E,SAASuD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQiB,KACT,MAAMhE,SAASuD,uBAAuB,KAAA;EAG1C,IAAI,CAACR,QAAQS,UACT,MAAMxD,SAASuD,uBAAuB,UAAA;EAG1C,IAAI,CAACR,QAAQW,YACT,MAAM1D,SAASuD,uBAAuB,YAAA;EAG1C,MAAMI,UAAU,MAAM,KAAKnC,eAAeoC,YAAYb,QAAQW,UAAU;EACxE,IAAI,CAACC,SACD,MAAM3D,SAAS6D,QAAO;EAG1B,IAAI;GACA,MAAM,KAAKrC,eAAewB,OAAOW,OAAAA;EACrC,QAAQ;GACJ,MAAM3D,SAAS6D,QAAO;EAC1B;EAIA,IACIF,QAAQK,QAAQjB,QAAQiB,OACxBL,QAAQgB,YAAY9E,aAAa6E,MAEjC,MAAM1E,SAAS6D,QAAO;EAG1B,MAAM,KAAKrC,eAAesC,KAAKH,OAAAA;EAE/B,MAAMM,WAAW,MAAM,KAAK1C,iBAAiB2C,QACzCnB,QAAQgB,UACRhB,QAAQiB,GAAG;EAEf,IAAI,CAACC,UACD,MAAMjE,SAAS6D,QAAO;EAG1B/C,yBAAyBqB,OAAO;GAC5B8B,UAAU,IAAIvD,gBAAgBuD,QAAAA;GAC9BlB;EACJ,CAAA;CACJ;CAEA,MAAgBF,+BACZV,OACAK,QACF;EACE,IAAI,KAAKpB,QAAQwD,iBAAiB;GAC9B,MAAMC,gBAAgB,MAAM,KAAKpD,oBAAoBqD,iBACjDtC,OAAOuC,UACPvC,OAAOwC,QAAQ;GAEnB,IAAIH,cAAcI,SAAS;IACvBjE,iBAAiBmB,OAAO,CAACrC,UAAUoF,MAAO,CAAA;IAC1CrE,mBAAmBsB,OAAO;KACtBM,MAAM5C,aAAasF;KACnBC,MAAMP,cAAcO;IACxB,CAAA;GACJ;EACJ;EAEA,IAAI,KAAKhE,QAAQiE,eAAe;GAC5B,MAAMC,gBAAgB,MAAM,KAAK5D,kBAAkBoD,iBAC/CtC,OAAOuC,UACPvC,OAAOwC,QAAQ;GAGnB,IAAIM,cAAcL,SAAS;IACvBjE,iBAAiBmB,OAAO,CAACrC,UAAUoF,MAAO,CAAA;IAC1CrE,mBAAmBsB,OAAO;KACtBM,MAAM5C,aAAa6E;KACnBU,MAAME,cAAcF;IACxB,CAAA;GACJ;EACJ;CACJ;AACJ"}
@@ -3,7 +3,6 @@ import type { IIdentityPermissionProvider, IIdentityResolver, IOAuth2TokenVerifi
3
3
  import type { CertificateSource } from '../../../request/index.ts';
4
4
  export type HTTPAuthorizationMiddlewareOptions = {
5
5
  clientAuthBasic?: boolean;
6
- robotAuthBasic?: boolean;
7
6
  userAuthBasic?: boolean;
8
7
  certificateSource?: CertificateSource;
9
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAER,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,kCAAkC,GAAG;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IACxD,cAAc,EAAE,eAAe,CAAC;IAChC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,kBAAkB,EAAE,mBAAmB,CAAC;IAExC,OAAO,CAAC,EAAE,kCAAkC,CAAA;CAC/C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapters/http/middleware/built-in/authorization/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAER,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,MAAM,kCAAkC,GAAG;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,0BAA0B,EAAE,2BAA2B,CAAC;IACxD,cAAc,EAAE,eAAe,CAAC;IAChC,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,kBAAkB,EAAE,mBAAmB,CAAC;IAExC,OAAO,CAAC,EAAE,kCAAkC,CAAA;CAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cors.mjs","names":["cors","registerCorsMiddleware","router","input","use","origin","credentials","exposeHeaders"],"sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options as CorsOptions } from '@routup/cors';\nimport { cors } from '@routup/cors';\nimport type { App } from 'routup';\n\nexport function registerCorsMiddleware(router: App, input?: CorsOptions) {\n router.use(cors({\n // Reflect any origin by default: OAuth2 clients (and their UIs) are\n // registered at runtime on arbitrary domains, so a startup-time\n // allowlist cannot know them. All authentication is header-based\n // (Bearer/Basic) — no cookie-authenticated endpoint exists — so an\n // origin allowlist would add no security, only break dynamically\n // registered browser clients. Operators can still pass an explicit\n // `origin` via the middlewareCors config options.\n origin: true,\n credentials: true,\n // `credentials: true` is incompatible with the `*` wildcard for\n // exposeHeaders, so enumerate the response headers JS clients need.\n exposeHeaders: [\n 'ratelimit-limit',\n 'ratelimit-remaining',\n 'ratelimit-reset',\n 'retry-after',\n 'etag',\n 'content-disposition',\n 'content-range',\n 'accept-ranges',\n 'location',\n 'www-authenticate',\n ],\n ...(input ?? {}),\n }));\n}\n"],"mappings":";;;;;AAWA,SAAgBC,uBAAuBC,QAAaC,OAAmB;CACnED,OAAOE,IAAIJ,KAAK;EAQZK,QAAQ;EACRC,aAAa;EAGbC,eAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;;EAEJ,GAAIJ,SAAS,CAAC;CAClB,CAAA,CAAA;AACJ"}
1
+ {"version":3,"file":"cors.mjs","names":["cors","registerCorsMiddleware","router","input","use","origin","credentials","exposeHeaders"],"sources":["../../../../../src/adapters/http/middleware/built-in/cors.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options as CorsOptions } from '@routup/cors';\nimport { cors } from '@routup/cors';\nimport type { App } from 'routup';\n\nexport function registerCorsMiddleware(router: App, input?: CorsOptions) {\n router.use(cors({\n // Reflect any origin by default: OAuth2 clients (and their UIs) are\n // registered at runtime on arbitrary domains, so a startup-time\n // allowlist cannot know them. All authentication is header-based\n // (Bearer/Basic) — no cookie-authenticated endpoint exists — so an\n // origin allowlist would add no security, only break dynamically\n // registered browser clients. Operators can still pass an explicit\n // `origin` via the middlewareCors config options.\n origin: true,\n credentials: true,\n // `credentials: true` is incompatible with the `*` wildcard for\n // exposeHeaders, so enumerate the response headers JS clients need.\n exposeHeaders: [\n 'ratelimit-limit',\n 'ratelimit-remaining',\n 'ratelimit-reset',\n 'retry-after',\n 'etag',\n 'content-disposition',\n 'content-range',\n 'accept-ranges',\n 'location',\n 'www-authenticate',\n ],\n ...(input ?? {}),\n }));\n}\n"],"mappings":";;;;;AAWA,SAAgBC,uBAAuBC,QAAaC,OAAmB;CACnED,OAAOE,IAAIJ,KAAK;EAQZK,QAAQ;EACRC,aAAa;EAGbC,eAAe;GACX;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH;EACD,GAAIJ,SAAS,CAAC;CAClB,CAAA,CAAA;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.mjs","names":["logger","getRequestIP","EnvironmentName","SENSITIVE_QUERY_PARAMS","redactSensitiveURLParams","url","queryIndex","indexOf","params","URLSearchParams","substring","redacted","name","has","set","toString","createLoggerMiddleware","options","format","tokens","event","response","method","status","join","write","line","env","TEST","http","skip","path","length","PRODUCTION"],"sources":["../../../../../src/adapters/http/middleware/built-in/logger.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { logger } from '@routup/logger';\nimport type { Handler } from 'routup';\nimport { getRequestIP } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { EnvironmentName } from '@authup/kit';\n\ntype LoggerMiddlewareOptions = {\n env: string,\n logger: Logger\n};\n\n// Query params whose values are credentials/tokens — the access log must never\n// persist them (a GET /logout?id_token_hint=<jwt> would otherwise write a\n// signature-valid token into the log).\nconst SENSITIVE_QUERY_PARAMS = [\n 'id_token_hint',\n 'id_token',\n 'access_token',\n 'refresh_token',\n 'token',\n 'code',\n 'client_secret',\n];\n\nexport function redactSensitiveURLParams(url: string): string {\n const queryIndex = url.indexOf('?');\n if (queryIndex === -1) {\n return url;\n }\n\n const params = new URLSearchParams(url.substring(queryIndex + 1));\n let redacted = false;\n for (const name of SENSITIVE_QUERY_PARAMS) {\n if (params.has(name)) {\n params.set(name, '***');\n redacted = true;\n }\n }\n\n if (!redacted) {\n return url;\n }\n\n return `${url.substring(0, queryIndex)}?${params.toString()}`;\n}\n\nexport function createLoggerMiddleware(options: LoggerMiddlewareOptions) : Handler {\n return logger({\n format: (tokens, event, response) => [\n getRequestIP(event) || '-',\n '-',\n tokens.method(event, response) ?? '-',\n redactSensitiveURLParams(tokens.url(event, response) ?? '-'),\n tokens.status(event, response) ?? '-',\n '-',\n tokens['response-time'](event, response) ?? '-',\n ].join(' '),\n write(line) {\n if (options.env !== EnvironmentName.TEST) {\n options.logger.http(line);\n }\n },\n skip(event, response): boolean {\n const path = event.path || '';\n if (path.length === 0 || path === '/') {\n return true;\n }\n\n if (options.env === EnvironmentName.PRODUCTION) {\n return (response?.status ?? 0) < 400;\n }\n\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;AAqBA,MAAMG,yBAAyB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;;AAGJ,SAAgBC,yBAAyBC,KAAW;CAChD,MAAMC,aAAaD,IAAIE,QAAQ,GAAA;CAC/B,IAAID,eAAe,IACf,OAAOD;CAGX,MAAMG,SAAS,IAAIC,gBAAgBJ,IAAIK,UAAUJ,aAAa,CAAA,CAAA;CAC9D,IAAIK,WAAW;CACf,KAAK,MAAMC,QAAQT,wBACf,IAAIK,OAAOK,IAAID,IAAAA,GAAO;EAClBJ,OAAOM,IAAIF,MAAM,KAAA;EACjBD,WAAW;CACf;CAGJ,IAAI,CAACA,UACD,OAAON;CAGX,OAAO,GAAGA,IAAIK,UAAU,GAAGJ,UAAAA,EAAY,GAAGE,OAAOO,SAAQ;AAC7D;AAEA,SAAgBC,uBAAuBC,SAAgC;CACnE,OAAOjB,OAAO;EACVkB,SAASC,QAAQC,OAAOC,aAAa;GACjCpB,aAAamB,KAAAA,KAAU;GACvB;GACAD,OAAOG,OAAOF,OAAOC,QAAAA,KAAa;GAClCjB,yBAAyBe,OAAOd,IAAIe,OAAOC,QAAAA,KAAa,GAAA;GACxDF,OAAOI,OAAOH,OAAOC,QAAAA,KAAa;GAClC;GACAF,OAAO,gBAAgB,CAACC,OAAOC,QAAAA,KAAa;GAC/C,CAACG,KAAK,GAAA;EACPC,MAAMC,MAAI;GACN,IAAIT,QAAQU,QAAQzB,gBAAgB0B,MAChCX,QAAQjB,OAAO6B,KAAKH,IAAAA;EAE5B;EACAI,KAAKV,OAAOC,UAAQ;GAChB,MAAMU,OAAOX,MAAMW,QAAQ;GAC3B,IAAIA,KAAKC,WAAW,KAAKD,SAAS,KAC9B,OAAO;GAGX,IAAId,QAAQU,QAAQzB,gBAAgB+B,YAChC,QAAQZ,UAAUE,UAAU,KAAK;GAGrC,OAAO;EACX;CACJ,CAAA;AACJ"}
1
+ {"version":3,"file":"logger.mjs","names":["logger","getRequestIP","EnvironmentName","SENSITIVE_QUERY_PARAMS","redactSensitiveURLParams","url","queryIndex","indexOf","params","URLSearchParams","substring","redacted","name","has","set","toString","createLoggerMiddleware","options","format","tokens","event","response","method","status","join","write","line","env","TEST","http","skip","path","length","PRODUCTION"],"sources":["../../../../../src/adapters/http/middleware/built-in/logger.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { logger } from '@routup/logger';\nimport type { Handler } from 'routup';\nimport { getRequestIP } from 'routup';\nimport type { Logger } from '@authup/server-kit';\nimport { EnvironmentName } from '@authup/kit';\n\ntype LoggerMiddlewareOptions = {\n env: string,\n logger: Logger\n};\n\n// Query params whose values are credentials/tokens — the access log must never\n// persist them (a GET /logout?id_token_hint=<jwt> would otherwise write a\n// signature-valid token into the log).\nconst SENSITIVE_QUERY_PARAMS = [\n 'id_token_hint',\n 'id_token',\n 'access_token',\n 'refresh_token',\n 'token',\n 'code',\n 'client_secret',\n];\n\nexport function redactSensitiveURLParams(url: string): string {\n const queryIndex = url.indexOf('?');\n if (queryIndex === -1) {\n return url;\n }\n\n const params = new URLSearchParams(url.substring(queryIndex + 1));\n let redacted = false;\n for (const name of SENSITIVE_QUERY_PARAMS) {\n if (params.has(name)) {\n params.set(name, '***');\n redacted = true;\n }\n }\n\n if (!redacted) {\n return url;\n }\n\n return `${url.substring(0, queryIndex)}?${params.toString()}`;\n}\n\nexport function createLoggerMiddleware(options: LoggerMiddlewareOptions) : Handler {\n return logger({\n format: (tokens, event, response) => [\n getRequestIP(event) || '-',\n '-',\n tokens.method(event, response) ?? '-',\n redactSensitiveURLParams(tokens.url(event, response) ?? '-'),\n tokens.status(event, response) ?? '-',\n '-',\n tokens['response-time'](event, response) ?? '-',\n ].join(' '),\n write(line) {\n if (options.env !== EnvironmentName.TEST) {\n options.logger.http(line);\n }\n },\n skip(event, response): boolean {\n const path = event.path || '';\n if (path.length === 0 || path === '/') {\n return true;\n }\n\n if (options.env === EnvironmentName.PRODUCTION) {\n return (response?.status ?? 0) < 400;\n }\n\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;AAqBA,MAAMG,yBAAyB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;AACH;AAED,SAAgBC,yBAAyBC,KAAW;CAChD,MAAMC,aAAaD,IAAIE,QAAQ,GAAA;CAC/B,IAAID,eAAe,IACf,OAAOD;CAGX,MAAMG,SAAS,IAAIC,gBAAgBJ,IAAIK,UAAUJ,aAAa,CAAA,CAAA;CAC9D,IAAIK,WAAW;CACf,KAAK,MAAMC,QAAQT,wBACf,IAAIK,OAAOK,IAAID,IAAAA,GAAO;EAClBJ,OAAOM,IAAIF,MAAM,KAAA;EACjBD,WAAW;CACf;CAGJ,IAAI,CAACA,UACD,OAAON;CAGX,OAAO,GAAGA,IAAIK,UAAU,GAAGJ,UAAAA,EAAY,GAAGE,OAAOO,SAAQ;AAC7D;AAEA,SAAgBC,uBAAuBC,SAAgC;CACnE,OAAOjB,OAAO;EACVkB,SAASC,QAAQC,OAAOC,aAAa;GACjCpB,aAAamB,KAAAA,KAAU;GACvB;GACAD,OAAOG,OAAOF,OAAOC,QAAAA,KAAa;GAClCjB,yBAAyBe,OAAOd,IAAIe,OAAOC,QAAAA,KAAa,GAAA;GACxDF,OAAOI,OAAOH,OAAOC,QAAAA,KAAa;GAClC;GACAF,OAAO,gBAAgB,CAACC,OAAOC,QAAAA,KAAa;EAC/C,CAAA,CAACG,KAAK,GAAA;EACPC,MAAMC,MAAI;GACN,IAAIT,QAAQU,QAAQzB,gBAAgB0B,MAChCX,QAAQjB,OAAO6B,KAAKH,IAAAA;EAE5B;EACAI,KAAKV,OAAOC,UAAQ;GAChB,MAAMU,OAAOX,MAAMW,QAAQ;GAC3B,IAAIA,KAAKC,WAAW,KAAKD,SAAS,KAC9B,OAAO;GAGX,IAAId,QAAQU,QAAQzB,gBAAgB+B,YAChC,QAAQZ,UAAUE,UAAU,KAAK;GAGrC,OAAO;EACX;CACJ,CAAA;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIlC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,YAAY,QAyB5E"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIlC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,YAAY,QAwB5E"}
@@ -12,7 +12,6 @@ function registerRateLimitMiddleware(router, input) {
12
12
  const identity = useRequestIdentity(event);
13
13
  if (!identity) return 1200;
14
14
  switch (identity.type) {
15
- case "robot":
16
15
  case "client": return 60 * 5e3;
17
16
  default: return 6e3;
18
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.mjs","names":["rateLimit","merge","useRequestIdentity","registerRateLimitMiddleware","router","input","options","max","event","identity","type","windowMs","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OptionsInput } from '@routup/rate-limit';\nimport { rateLimit } from '@routup/rate-limit';\nimport type { App } from 'routup';\nimport { merge } from 'smob';\nimport { useRequestIdentity } from '../../request/index.ts';\n\nexport function registerRateLimitMiddleware(router: App, input?: OptionsInput) {\n let options : OptionsInput = {\n max(event) {\n const identity = useRequestIdentity(event);\n if (!identity) {\n return 60 * 20; // 20 req. p. sec\n }\n\n switch (identity.type) {\n case 'robot':\n case 'client': {\n return 60 * 5_000; // 1000 req p. sec\n }\n case 'user':\n default: {\n return 60 * 100; // 100 req p. sec\n }\n }\n },\n windowMs: 60 * 1000, // 60 sec\n };\n\n options = merge(input || {}, options);\n\n router.use(rateLimit(options));\n}\n"],"mappings":";;;;;;;;AAaA,SAAgBG,4BAA4BC,QAAaC,OAAoB;CACzE,IAAIC,UAAyB;EACzBC,IAAIC,OAAK;GACL,MAAMC,WAAWP,mBAAmBM,KAAAA;GACpC,IAAI,CAACC,UACD,OAAO;GAGX,QAAQA,SAASC,MAAjB;IACI,KAAK;IACL,KAAK,UACD,OAAO,KAAK;IAGhB,SACI,OAAO;GAEf;EACJ;EACAC,UAAU,KAAK;CACnB;CAEAL,UAAUL,MAAMI,SAAS,CAAC,GAAGC,OAAAA;CAE7BF,OAAOQ,IAAIZ,UAAUM,OAAAA,CAAAA;AACzB"}
1
+ {"version":3,"file":"rate-limit.mjs","names":["rateLimit","merge","useRequestIdentity","registerRateLimitMiddleware","router","input","options","max","event","identity","type","windowMs","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OptionsInput } from '@routup/rate-limit';\nimport { rateLimit } from '@routup/rate-limit';\nimport type { App } from 'routup';\nimport { merge } from 'smob';\nimport { useRequestIdentity } from '../../request/index.ts';\n\nexport function registerRateLimitMiddleware(router: App, input?: OptionsInput) {\n let options : OptionsInput = {\n max(event) {\n const identity = useRequestIdentity(event);\n if (!identity) {\n return 60 * 20; // 20 req. p. sec\n }\n\n switch (identity.type) {\n case 'client': {\n return 60 * 5_000; // 1000 req p. sec\n }\n case 'user':\n default: {\n return 60 * 100; // 100 req p. sec\n }\n }\n },\n windowMs: 60 * 1000, // 60 sec\n };\n\n options = merge(input || {}, options);\n\n router.use(rateLimit(options));\n}\n"],"mappings":";;;;;;;;AAaA,SAAgBG,4BAA4BC,QAAaC,OAAoB;CACzE,IAAIC,UAAyB;EACzBC,IAAIC,OAAK;GACL,MAAMC,WAAWP,mBAAmBM,KAAAA;GACpC,IAAI,CAACC,UACD,OAAO;GAGX,QAAQA,SAASC,MAAjB;IACI,KAAK,UACD,OAAO,KAAK;IAGhB,SACI,OAAO;GAEf;EACJ;EACAC,UAAU,KAAK;CACnB;CAEAL,UAAUL,MAAMI,SAAS,CAAC,GAAGC,OAAAA;CAE7BF,OAAOQ,IAAIZ,UAAUM,OAAAA,CAAAA;AACzB"}
@@ -1,3 +1,4 @@
1
+ import '../../../core/client-certificate/reflect.ts';
1
2
  import type { IAppEvent } from 'routup';
2
3
  import type { ClientCertificateEvidence } from '../../../core/index.ts';
3
4
  import type { CertificateSource } from './types.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"client-certificate.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/request/client-certificate.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAKxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,wBAAsB,gCAAgC,CAClD,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,iBAAiB,GAC1B,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAqBhD"}
1
+ {"version":3,"file":"client-certificate.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/request/client-certificate.ts"],"names":[],"mappings":"AAOA,OAAO,6CAA6C,CAAC;AAIrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAKxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,wBAAsB,gCAAgC,CAClD,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,iBAAiB,GAC1B,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAqBhD"}
@@ -1,6 +1,7 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
+ import "../../../core/client-certificate/reflect.mjs";
4
5
  import { buildClientCertificateThumbprint, parseClientCertificateChain } from "../../../core/client-certificate/module.mjs";
5
6
  import "../../../core/index.mjs";
6
7
  import { base64ToArrayBuffer } from "@authup/kit";
@@ -1 +1 @@
1
- {"version":3,"file":"client-certificate.mjs","names":["X509Certificate","BadRequestError","base64ToArrayBuffer","buildClientCertificateThumbprint","parseClientCertificateChain","MAX_CERTIFICATE_HEADER_LENGTH","MAX_CERTIFICATE_CHAIN_LENGTH","STRUCTURED_BINARY_PATTERN","extractClientCertificateEvidence","event","source","undefined","result","extractStandardEvidence","extractForwardedEvidence","thumbprint","certificate","leafHeader","headers","get","chainHeader","certificateHeaderError","assertHeaderLength","parseStructuredCertificate","chain","parseStructuredCertificateList","value","pem","includes","decodeURIComponent","replace","certificates","length","items","split","map","item","trim","some","match","exec","raw","byteLength","toString"],"sources":["../../../../src/adapters/http/request/client-certificate.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 { X509Certificate } from '@peculiar/x509';\nimport { BadRequestError } from '@authup/errors';\nimport { base64ToArrayBuffer } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport type { ClientCertificateEvidence } from '../../../core/index.ts';\nimport {\n buildClientCertificateThumbprint,\n parseClientCertificateChain,\n} from '../../../core/index.ts';\nimport type { CertificateSource } from './types.ts';\n\nconst MAX_CERTIFICATE_HEADER_LENGTH = 128 * 1024;\nconst MAX_CERTIFICATE_CHAIN_LENGTH = 10;\nconst STRUCTURED_BINARY_PATTERN = /^:([A-Za-z0-9+/]*={0,2}):$/;\n\nexport async function extractClientCertificateEvidence(\n event: IAppEvent,\n source: CertificateSource,\n): Promise<ClientCertificateEvidence | undefined> {\n if (source === 'disabled') {\n return undefined;\n }\n\n let result: Omit<ClientCertificateEvidence, 'thumbprint'> | undefined;\n if (source === 'standard') {\n result = extractStandardEvidence(event);\n } else if (source === 'forwarded') {\n result = extractForwardedEvidence(event);\n } else {\n throw new BadRequestError('The client certificate source is not configured correctly.');\n }\n if (!result) {\n return undefined;\n }\n\n return {\n ...result,\n thumbprint: await buildClientCertificateThumbprint(result.certificate),\n };\n}\n\nfunction extractStandardEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const leafHeader = event.headers.get('client-cert');\n const chainHeader = event.headers.get('client-cert-chain');\n\n if (!leafHeader) {\n if (chainHeader) {\n throw certificateHeaderError();\n }\n return undefined;\n }\n\n assertHeaderLength(leafHeader);\n const certificate = parseStructuredCertificate(leafHeader);\n const chain = chainHeader ? parseStructuredCertificateList(chainHeader) : [];\n\n return { certificate, chain };\n}\n\nfunction extractForwardedEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const value = event.headers.get('x-forwarded-tls-client-cert');\n if (!value) {\n return undefined;\n }\n\n assertHeaderLength(value);\n\n let pem: string;\n try {\n // Native raw PEM is useful in tests and a few proxy integrations. The\n // NGINX/Traefik contract is escaped PEM: query-style `+` represents a\n // space, while literal base64 plus signs arrive as `%2B`.\n pem = value.includes('-----BEGIN CERTIFICATE-----') ?\n value :\n decodeURIComponent(value.replace(/\\+/g, '%20'));\n } catch {\n throw certificateHeaderError();\n }\n\n let certificates: X509Certificate[];\n try {\n certificates = parseClientCertificateChain(pem);\n } catch {\n throw certificateHeaderError();\n }\n\n if (certificates.length !== 1 || !certificates[0]) {\n throw certificateHeaderError();\n }\n\n return {\n certificate: certificates[0],\n chain: [],\n };\n}\n\nfunction parseStructuredCertificateList(value: string): X509Certificate[] {\n assertHeaderLength(value);\n const items = value.split(',').map((item) => item.trim());\n if (items.length > MAX_CERTIFICATE_CHAIN_LENGTH || items.some((item) => item.length === 0)) {\n throw certificateHeaderError();\n }\n\n return items.map(parseStructuredCertificate);\n}\n\nfunction parseStructuredCertificate(value: string): X509Certificate {\n const match = STRUCTURED_BINARY_PATTERN.exec(value.trim());\n if (!match?.[1]) {\n throw certificateHeaderError();\n }\n\n try {\n const raw = base64ToArrayBuffer(match[1]);\n if (raw.byteLength === 0) {\n throw certificateHeaderError();\n }\n\n const certificate = new X509Certificate(raw);\n if (\n certificate.toString('base64').replace(/=+$/, '') !==\n match[1].replace(/=+$/, '')\n ) {\n throw certificateHeaderError();\n }\n\n return certificate;\n } catch {\n throw certificateHeaderError();\n }\n}\n\nfunction assertHeaderLength(value: string): void {\n if (value.length > MAX_CERTIFICATE_HEADER_LENGTH) {\n throw certificateHeaderError();\n }\n}\n\nfunction certificateHeaderError(): BadRequestError {\n return new BadRequestError('The forwarded client certificate header is malformed.');\n}\n"],"mappings":";;;;;;;;;AAkBA,MAAMK,gCAAgC,MAAM;AAC5C,MAAMC,+BAA+B;AACrC,MAAMC,4BAA4B;AAElC,eAAsBC,iCAClBC,OACAC,QAAyB;CAEzB,IAAIA,WAAW,YACX;CAGJ,IAAIE;CACJ,IAAIF,WAAW,YACXE,SAASC,wBAAwBJ,KAAAA;MAC9B,IAAIC,WAAW,aAClBE,SAASE,yBAAyBL,KAAAA;MAElC,MAAM,IAAIR,gBAAgB,4DAAA;CAE9B,IAAI,CAACW,QACD;CAGJ,OAAO;EACH,GAAGA;EACHG,YAAY,MAAMZ,iCAAiCS,OAAOI,WAAW;CACzE;AACJ;AAEA,SAASH,wBACLJ,OAAgB;CAEhB,MAAMQ,aAAaR,MAAMS,QAAQC,IAAI,aAAA;CACrC,MAAMC,cAAcX,MAAMS,QAAQC,IAAI,mBAAA;CAEtC,IAAI,CAACF,YAAY;EACb,IAAIG,aACA,MAAMC,uBAAAA;EAEV;CACJ;CAEAC,mBAAmBL,UAAAA;CAInB,OAAO;EAAED,aAHWO,2BAA2BN,UAGtCD;EAAaQ,OAFRJ,cAAcK,+BAA+BL,WAAAA,IAAe,CAAA;CAE9C;AAChC;AAEA,SAASN,yBACLL,OAAgB;CAEhB,MAAMiB,QAAQjB,MAAMS,QAAQC,IAAI,6BAAA;CAChC,IAAI,CAACO,OACD;CAGJJ,mBAAmBI,KAAAA;CAEnB,IAAIC;CACJ,IAAI;EAIAA,MAAMD,MAAME,SAAS,6BAAA,IACjBF,QACAG,mBAAmBH,MAAMI,QAAQ,OAAO,KAAA,CAAA;CAChD,QAAQ;EACJ,MAAMT,uBAAAA;CACV;CAEA,IAAIU;CACJ,IAAI;EACAA,eAAe3B,4BAA4BuB,GAAAA;CAC/C,QAAQ;EACJ,MAAMN,uBAAAA;CACV;CAEA,IAAIU,aAAaC,WAAW,KAAK,CAACD,aAAa,IAC3C,MAAMV,uBAAAA;CAGV,OAAO;EACHL,aAAae,aAAa;EAC1BP,OAAO,CAAA;CACX;AACJ;AAEA,SAASC,+BAA+BC,OAAa;CACjDJ,mBAAmBI,KAAAA;CACnB,MAAMO,QAAQP,MAAMQ,MAAM,GAAA,CAAA,CAAKC,KAAKC,SAASA,KAAKC,KAAI,CAAA;CACtD,IAAIJ,MAAMD,SAAS1B,gCAAgC2B,MAAMK,MAAMF,SAASA,KAAKJ,WAAW,CAAA,GACpF,MAAMX,uBAAAA;CAGV,OAAOY,MAAME,IAAIZ,0BAAAA;AACrB;AAEA,SAASA,2BAA2BG,OAAa;CAC7C,MAAMa,QAAQhC,0BAA0BiC,KAAKd,MAAMW,KAAI,CAAA;CACvD,IAAI,CAACE,QAAQ,IACT,MAAMlB,uBAAAA;CAGV,IAAI;EACA,MAAMoB,MAAMvC,oBAAoBqC,MAAM,EAAE;EACxC,IAAIE,IAAIC,eAAe,GACnB,MAAMrB,uBAAAA;EAGV,MAAML,cAAc,IAAIhB,gBAAgByC,GAAAA;EACxC,IACIzB,YAAY2B,SAAS,QAAA,CAAA,CAAUb,QAAQ,OAAO,EAAA,MAC9CS,MAAM,EAAE,CAACT,QAAQ,OAAO,EAAA,GAExB,MAAMT,uBAAAA;EAGV,OAAOL;CACX,QAAQ;EACJ,MAAMK,uBAAAA;CACV;AACJ;AAEA,SAASC,mBAAmBI,OAAa;CACrC,IAAIA,MAAMM,SAAS3B,+BACf,MAAMgB,uBAAAA;AAEd;AAEA,SAASA,yBAAAA;CACL,OAAO,IAAIpB,gBAAgB,uDAAA;AAC/B"}
1
+ {"version":3,"file":"client-certificate.mjs","names":["X509Certificate","BadRequestError","base64ToArrayBuffer","buildClientCertificateThumbprint","parseClientCertificateChain","MAX_CERTIFICATE_HEADER_LENGTH","MAX_CERTIFICATE_CHAIN_LENGTH","STRUCTURED_BINARY_PATTERN","extractClientCertificateEvidence","event","source","undefined","result","extractStandardEvidence","extractForwardedEvidence","thumbprint","certificate","leafHeader","headers","get","chainHeader","certificateHeaderError","assertHeaderLength","parseStructuredCertificate","chain","parseStructuredCertificateList","value","pem","includes","decodeURIComponent","replace","certificates","length","items","split","map","item","trim","some","match","exec","raw","byteLength","toString"],"sources":["../../../../src/adapters/http/request/client-certificate.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 '../../../core/client-certificate/reflect.ts';\nimport { X509Certificate } from '@peculiar/x509';\nimport { BadRequestError } from '@authup/errors';\nimport { base64ToArrayBuffer } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport type { ClientCertificateEvidence } from '../../../core/index.ts';\nimport {\n buildClientCertificateThumbprint,\n parseClientCertificateChain,\n} from '../../../core/index.ts';\nimport type { CertificateSource } from './types.ts';\n\nconst MAX_CERTIFICATE_HEADER_LENGTH = 128 * 1024;\nconst MAX_CERTIFICATE_CHAIN_LENGTH = 10;\nconst STRUCTURED_BINARY_PATTERN = /^:([A-Za-z0-9+/]*={0,2}):$/;\n\nexport async function extractClientCertificateEvidence(\n event: IAppEvent,\n source: CertificateSource,\n): Promise<ClientCertificateEvidence | undefined> {\n if (source === 'disabled') {\n return undefined;\n }\n\n let result: Omit<ClientCertificateEvidence, 'thumbprint'> | undefined;\n if (source === 'standard') {\n result = extractStandardEvidence(event);\n } else if (source === 'forwarded') {\n result = extractForwardedEvidence(event);\n } else {\n throw new BadRequestError('The client certificate source is not configured correctly.');\n }\n if (!result) {\n return undefined;\n }\n\n return {\n ...result,\n thumbprint: await buildClientCertificateThumbprint(result.certificate),\n };\n}\n\nfunction extractStandardEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const leafHeader = event.headers.get('client-cert');\n const chainHeader = event.headers.get('client-cert-chain');\n\n if (!leafHeader) {\n if (chainHeader) {\n throw certificateHeaderError();\n }\n return undefined;\n }\n\n assertHeaderLength(leafHeader);\n const certificate = parseStructuredCertificate(leafHeader);\n const chain = chainHeader ? parseStructuredCertificateList(chainHeader) : [];\n\n return { certificate, chain };\n}\n\nfunction extractForwardedEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const value = event.headers.get('x-forwarded-tls-client-cert');\n if (!value) {\n return undefined;\n }\n\n assertHeaderLength(value);\n\n let pem: string;\n try {\n // Native raw PEM is useful in tests and a few proxy integrations. The\n // NGINX/Traefik contract is escaped PEM: query-style `+` represents a\n // space, while literal base64 plus signs arrive as `%2B`.\n pem = value.includes('-----BEGIN CERTIFICATE-----') ?\n value :\n decodeURIComponent(value.replace(/\\+/g, '%20'));\n } catch {\n throw certificateHeaderError();\n }\n\n let certificates: X509Certificate[];\n try {\n certificates = parseClientCertificateChain(pem);\n } catch {\n throw certificateHeaderError();\n }\n\n if (certificates.length !== 1 || !certificates[0]) {\n throw certificateHeaderError();\n }\n\n return {\n certificate: certificates[0],\n chain: [],\n };\n}\n\nfunction parseStructuredCertificateList(value: string): X509Certificate[] {\n assertHeaderLength(value);\n const items = value.split(',').map((item) => item.trim());\n if (items.length > MAX_CERTIFICATE_CHAIN_LENGTH || items.some((item) => item.length === 0)) {\n throw certificateHeaderError();\n }\n\n return items.map(parseStructuredCertificate);\n}\n\nfunction parseStructuredCertificate(value: string): X509Certificate {\n const match = STRUCTURED_BINARY_PATTERN.exec(value.trim());\n if (!match?.[1]) {\n throw certificateHeaderError();\n }\n\n try {\n const raw = base64ToArrayBuffer(match[1]);\n if (raw.byteLength === 0) {\n throw certificateHeaderError();\n }\n\n const certificate = new X509Certificate(raw);\n if (\n certificate.toString('base64').replace(/=+$/, '') !==\n match[1].replace(/=+$/, '')\n ) {\n throw certificateHeaderError();\n }\n\n return certificate;\n } catch {\n throw certificateHeaderError();\n }\n}\n\nfunction assertHeaderLength(value: string): void {\n if (value.length > MAX_CERTIFICATE_HEADER_LENGTH) {\n throw certificateHeaderError();\n }\n}\n\nfunction certificateHeaderError(): BadRequestError {\n return new BadRequestError('The forwarded client certificate header is malformed.');\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAMK,gCAAgC,MAAM;AAC5C,MAAMC,+BAA+B;AACrC,MAAMC,4BAA4B;AAElC,eAAsBC,iCAClBC,OACAC,QAAyB;CAEzB,IAAIA,WAAW,YACX;CAGJ,IAAIE;CACJ,IAAIF,WAAW,YACXE,SAASC,wBAAwBJ,KAAAA;MAC9B,IAAIC,WAAW,aAClBE,SAASE,yBAAyBL,KAAAA;MAElC,MAAM,IAAIR,gBAAgB,4DAAA;CAE9B,IAAI,CAACW,QACD;CAGJ,OAAO;EACH,GAAGA;EACHG,YAAY,MAAMZ,iCAAiCS,OAAOI,WAAW;CACzE;AACJ;AAEA,SAASH,wBACLJ,OAAgB;CAEhB,MAAMQ,aAAaR,MAAMS,QAAQC,IAAI,aAAA;CACrC,MAAMC,cAAcX,MAAMS,QAAQC,IAAI,mBAAA;CAEtC,IAAI,CAACF,YAAY;EACb,IAAIG,aACA,MAAMC,uBAAAA;EAEV;CACJ;CAEAC,mBAAmBL,UAAAA;CAInB,OAAO;EAAED,aAHWO,2BAA2BN,UAGtCD;EAAaQ,OAFRJ,cAAcK,+BAA+BL,WAAAA,IAAe,CAAA;CAE9C;AAChC;AAEA,SAASN,yBACLL,OAAgB;CAEhB,MAAMiB,QAAQjB,MAAMS,QAAQC,IAAI,6BAAA;CAChC,IAAI,CAACO,OACD;CAGJJ,mBAAmBI,KAAAA;CAEnB,IAAIC;CACJ,IAAI;EAIAA,MAAMD,MAAME,SAAS,6BAAA,IACjBF,QACAG,mBAAmBH,MAAMI,QAAQ,OAAO,KAAA,CAAA;CAChD,QAAQ;EACJ,MAAMT,uBAAAA;CACV;CAEA,IAAIU;CACJ,IAAI;EACAA,eAAe3B,4BAA4BuB,GAAAA;CAC/C,QAAQ;EACJ,MAAMN,uBAAAA;CACV;CAEA,IAAIU,aAAaC,WAAW,KAAK,CAACD,aAAa,IAC3C,MAAMV,uBAAAA;CAGV,OAAO;EACHL,aAAae,aAAa;EAC1BP,OAAO,CAAA;CACX;AACJ;AAEA,SAASC,+BAA+BC,OAAa;CACjDJ,mBAAmBI,KAAAA;CACnB,MAAMO,QAAQP,MAAMQ,MAAM,GAAA,CAAA,CAAKC,KAAKC,SAASA,KAAKC,KAAI,CAAA;CACtD,IAAIJ,MAAMD,SAAS1B,gCAAgC2B,MAAMK,MAAMF,SAASA,KAAKJ,WAAW,CAAA,GACpF,MAAMX,uBAAAA;CAGV,OAAOY,MAAME,IAAIZ,0BAAAA;AACrB;AAEA,SAASA,2BAA2BG,OAAa;CAC7C,MAAMa,QAAQhC,0BAA0BiC,KAAKd,MAAMW,KAAI,CAAA;CACvD,IAAI,CAACE,QAAQ,IACT,MAAMlB,uBAAAA;CAGV,IAAI;EACA,MAAMoB,MAAMvC,oBAAoBqC,MAAM,EAAE;EACxC,IAAIE,IAAIC,eAAe,GACnB,MAAMrB,uBAAAA;EAGV,MAAML,cAAc,IAAIhB,gBAAgByC,GAAAA;EACxC,IACIzB,YAAY2B,SAAS,QAAA,CAAA,CAAUb,QAAQ,OAAO,EAAA,MAC9CS,MAAM,EAAE,CAACT,QAAQ,OAAO,EAAA,GAExB,MAAMT,uBAAAA;EAGV,OAAOL;CACX,QAAQ;EACJ,MAAMK,uBAAAA;CACV;AACJ;AAEA,SAASC,mBAAmBI,OAAa;CACrC,IAAIA,MAAMM,SAAS3B,+BACf,MAAMgB,uBAAAA;AAEd;AAEA,SAASA,yBAAAA;CACL,OAAO,IAAIpB,gBAAgB,uDAAA;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","names":["RequestHandlerOperation","CERTIFICATE_SOURCES"],"sources":["../../../../src/adapters/http/request/constants.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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\nexport enum RequestHandlerOperation {\n COMMAND = 'command',\n CREATE = 'create',\n READ = 'read',\n UPDATE = 'update',\n DELETE = 'delete',\n}\n\nexport const CERTIFICATE_SOURCES = [\n 'disabled',\n 'standard',\n 'forwarded',\n] as const;\n"],"mappings":";;;;AAOA,IAAO,0BAAKA,uBAAAA,yBAAAA;;;;;;QAAAA;;AAQZ,MAAaC,sBAAsB;CAC/B;CACA;CACA"}
1
+ {"version":3,"file":"constants.mjs","names":["RequestHandlerOperation","CERTIFICATE_SOURCES"],"sources":["../../../../src/adapters/http/request/constants.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\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\nexport enum RequestHandlerOperation {\n COMMAND = 'command',\n CREATE = 'create',\n READ = 'read',\n UPDATE = 'update',\n DELETE = 'delete',\n}\n\nexport const CERTIFICATE_SOURCES = [\n 'disabled',\n 'standard',\n 'forwarded',\n] as const;\n"],"mappings":";;;;AAOA,IAAO,0BAAKA,uBAAAA,yBAAAA;;;;;;CAAAA,OAAAA;AAMX,EAAA,CAAA,CAAA;AAED,MAAaC,sBAAsB;CAC/B;CACA;CACA;AACH"}
@@ -4,7 +4,7 @@ import.meta.url;
4
4
  import { isUUID } from "@authup/kit";
5
5
  //#region src/adapters/http/request/helpers/body-realm-id.ts
6
6
  function getBodyRealmID(body) {
7
- const realmId = body?.realm_id;
7
+ const realmId = body?.realmId;
8
8
  if (typeof realmId !== "string") return;
9
9
  if (!isUUID(realmId)) return;
10
10
  return realmId;
@@ -1 +1 @@
1
- {"version":3,"file":"body-realm-id.mjs","names":["isUUID","getBodyRealmID","body","realmId","realm_id","undefined"],"sources":["../../../../../src/adapters/http/request/helpers/body-realm-id.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 { isUUID } from '@authup/kit';\n\nexport function getBodyRealmID(body: Record<string, any> | undefined) : string | undefined {\n const realmId = body?.realm_id;\n if (typeof realmId !== 'string') {\n return undefined;\n }\n\n if (!isUUID(realmId)) {\n return undefined;\n }\n\n return realmId;\n}\n"],"mappings":";;;;;AASA,SAAgBC,eAAeC,MAAqC;CAChE,MAAMC,UAAUD,MAAME;CACtB,IAAI,OAAOD,YAAY,UACnB;CAGJ,IAAI,CAACH,OAAOG,OAAAA,GACR;CAGJ,OAAOA;AACX"}
1
+ {"version":3,"file":"body-realm-id.mjs","names":["isUUID","getBodyRealmID","body","realmId","undefined"],"sources":["../../../../../src/adapters/http/request/helpers/body-realm-id.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 { isUUID } from '@authup/kit';\n\nexport function getBodyRealmID(body: Record<string, any> | undefined) : string | undefined {\n const realmId = body?.realmId;\n if (typeof realmId !== 'string') {\n return undefined;\n }\n\n if (!isUUID(realmId)) {\n return undefined;\n }\n\n return realmId;\n}\n"],"mappings":";;;;;AASA,SAAgBC,eAAeC,MAAqC;CAChE,MAAMC,UAAUD,MAAMC;CACtB,IAAI,OAAOA,YAAY,UACnB;CAGJ,IAAI,CAACH,OAAOG,OAAAA,GACR;CAGJ,OAAOA;AACX"}
@@ -4,8 +4,8 @@ export declare class RequestIdentity {
4
4
  readonly raw: Identity;
5
5
  constructor(identity: Identity);
6
6
  get clientId(): any;
7
- get data(): import("@authup/core-kit").Client | import("@authup/core-kit").Robot | import("@authup/core-kit").User;
8
- get type(): "user" | "client" | "robot";
7
+ get data(): import("@authup/core-kit").Client | import("@authup/core-kit").User;
8
+ get type(): "user" | "client";
9
9
  get id(): string;
10
10
  get realmId(): string;
11
11
  get realmName(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/request/helpers/identity.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,qBAAa,eAAe;IACxB,SAAgB,GAAG,EAAG,QAAQ,CAAC;gBAEnB,QAAQ,EAAE,QAAQ;IAI9B,IAAI,QAAQ,QAOX;IAED,IAAI,IAAI,2GAEP;IAED,IAAI,IAAI,gCAEP;IAED,IAAI,EAAE,WAEL;IAED,IAAI,OAAO,WAEV;IAED,IAAI,SAAS,WAEZ;CACJ;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAI,eAAe,GAAG,SAAS,CAEjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,eAAe,GAAI,IAAI,CAU7F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAI,eAAe,CAO3E"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/request/helpers/identity.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,qBAAa,eAAe;IACxB,SAAgB,GAAG,EAAG,QAAQ,CAAC;gBAEnB,QAAQ,EAAE,QAAQ;IAI9B,IAAI,QAAQ,QAOX;IAED,IAAI,IAAI,wEAEP;IAED,IAAI,IAAI,sBAEP;IAED,IAAI,EAAE,WAEL;IAED,IAAI,OAAO,WAEV;IAED,IAAI,SAAS,WAEZ;CACJ;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAI,eAAe,GAAG,SAAS,CAEjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,eAAe,GAAI,IAAI,CAU7F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAI,eAAe,CAO3E"}
@@ -13,7 +13,7 @@ var RequestIdentity = class {
13
13
  get clientId() {
14
14
  const { raw } = this;
15
15
  if (raw.type === IdentityType.CLIENT) return raw.data.id;
16
- return raw.data.client_id || null;
16
+ return raw.data.clientId || null;
17
17
  }
18
18
  get data() {
19
19
  return this.raw.data;
@@ -25,7 +25,7 @@ var RequestIdentity = class {
25
25
  return this.raw.data.id;
26
26
  }
27
27
  get realmId() {
28
- return this.raw.data.realm_id || this.raw.data.realm?.id;
28
+ return this.raw.data.realmId || this.raw.data.realm?.id;
29
29
  }
30
30
  get realmName() {
31
31
  return this.raw.data.realm?.name;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.mjs","names":["IdentityType","UnauthorizedError","sym","Symbol","RequestIdentity","raw","identity","clientId","type","CLIENT","data","id","client_id","realmId","realm_id","realm","realmName","name","useRequestIdentity","event","store","setRequestIdentity","input","useRequestIdentityOrFail"],"sources":["../../../../../src/adapters/http/request/helpers/identity.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 type { Identity } from '@authup/core-kit';\nimport { IdentityType } from '@authup/core-kit';\nimport { UnauthorizedError } from '@authup/errors';\nimport type { IAppEvent } from 'routup';\n\nconst sym = Symbol('RIdentity');\n\nexport class RequestIdentity {\n public readonly raw : Identity;\n\n constructor(identity: Identity) {\n this.raw = identity;\n }\n\n get clientId() {\n const { raw } = this;\n if (raw.type === IdentityType.CLIENT) {\n return raw.data.id;\n }\n\n return raw.data.client_id || null;\n }\n\n get data() {\n return this.raw.data;\n }\n\n get type() {\n return this.raw.type;\n }\n\n get id() {\n return this.raw.data.id;\n }\n\n get realmId() {\n return this.raw.data.realm_id || this.raw.data.realm?.id;\n }\n\n get realmName() {\n return this.raw.data.realm?.name;\n }\n}\n\nexport function useRequestIdentity(event: IAppEvent) : RequestIdentity | undefined {\n return event.store[sym] as RequestIdentity | undefined;\n}\n\nexport function setRequestIdentity(event: IAppEvent, input: Identity | RequestIdentity) : void {\n let data : RequestIdentity;\n\n if (input instanceof RequestIdentity) {\n data = input;\n } else {\n data = new RequestIdentity(input);\n }\n\n event.store[sym] = data;\n}\n\nexport function useRequestIdentityOrFail(event: IAppEvent) : RequestIdentity {\n const identity = useRequestIdentity(event);\n if (!identity) {\n throw new UnauthorizedError();\n }\n\n return identity;\n}\n"],"mappings":";;;;;;AAYA,MAAME,MAAMC,OAAO,WAAA;AAEnB,IAAaC,kBAAb,MAAaA;CACOC;CAEhB,YAAYC,UAAoB;EAC5B,KAAKD,MAAMC;CACf;CAEA,IAAIC,WAAW;EACX,MAAM,EAAEF,QAAQ;EAChB,IAAIA,IAAIG,SAASR,aAAaS,QAC1B,OAAOJ,IAAIK,KAAKC;EAGpB,OAAON,IAAIK,KAAKE,aAAa;CACjC;CAEA,IAAIF,OAAO;EACP,OAAO,KAAKL,IAAIK;CACpB;CAEA,IAAIF,OAAO;EACP,OAAO,KAAKH,IAAIG;CACpB;CAEA,IAAIG,KAAK;EACL,OAAO,KAAKN,IAAIK,KAAKC;CACzB;CAEA,IAAIE,UAAU;EACV,OAAO,KAAKR,IAAIK,KAAKI,YAAY,KAAKT,IAAIK,KAAKK,OAAOJ;CAC1D;CAEA,IAAIK,YAAY;EACZ,OAAO,KAAKX,IAAIK,KAAKK,OAAOE;CAChC;AACJ;AAEA,SAAgBC,mBAAmBC,OAAgB;CAC/C,OAAOA,MAAMC,MAAMlB;AACvB;AAEA,SAAgBmB,mBAAmBF,OAAkBG,OAAiC;CAClF,IAAIZ;CAEJ,IAAIY,iBAAiBlB,iBACjBM,OAAOY;MAEPZ,OAAO,IAAIN,gBAAgBkB,KAAAA;CAG/BH,MAAMC,MAAMlB,OAAOQ;AACvB;AAEA,SAAgBa,yBAAyBJ,OAAgB;CACrD,MAAMb,WAAWY,mBAAmBC,KAAAA;CACpC,IAAI,CAACb,UACD,MAAM,IAAIL,kBAAAA;CAGd,OAAOK;AACX"}
1
+ {"version":3,"file":"identity.mjs","names":["IdentityType","UnauthorizedError","sym","Symbol","RequestIdentity","raw","identity","clientId","type","CLIENT","data","id","realmId","realm","realmName","name","useRequestIdentity","event","store","setRequestIdentity","input","useRequestIdentityOrFail"],"sources":["../../../../../src/adapters/http/request/helpers/identity.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 type { Identity } from '@authup/core-kit';\nimport { IdentityType } from '@authup/core-kit';\nimport { UnauthorizedError } from '@authup/errors';\nimport type { IAppEvent } from 'routup';\n\nconst sym = Symbol('RIdentity');\n\nexport class RequestIdentity {\n public readonly raw : Identity;\n\n constructor(identity: Identity) {\n this.raw = identity;\n }\n\n get clientId() {\n const { raw } = this;\n if (raw.type === IdentityType.CLIENT) {\n return raw.data.id;\n }\n\n return raw.data.clientId || null;\n }\n\n get data() {\n return this.raw.data;\n }\n\n get type() {\n return this.raw.type;\n }\n\n get id() {\n return this.raw.data.id;\n }\n\n get realmId() {\n return this.raw.data.realmId || this.raw.data.realm?.id;\n }\n\n get realmName() {\n return this.raw.data.realm?.name;\n }\n}\n\nexport function useRequestIdentity(event: IAppEvent) : RequestIdentity | undefined {\n return event.store[sym] as RequestIdentity | undefined;\n}\n\nexport function setRequestIdentity(event: IAppEvent, input: Identity | RequestIdentity) : void {\n let data : RequestIdentity;\n\n if (input instanceof RequestIdentity) {\n data = input;\n } else {\n data = new RequestIdentity(input);\n }\n\n event.store[sym] = data;\n}\n\nexport function useRequestIdentityOrFail(event: IAppEvent) : RequestIdentity {\n const identity = useRequestIdentity(event);\n if (!identity) {\n throw new UnauthorizedError();\n }\n\n return identity;\n}\n"],"mappings":";;;;;;AAYA,MAAME,MAAMC,OAAO,WAAA;AAEnB,IAAaC,kBAAb,MAAaA;CACOC;CAEhB,YAAYC,UAAoB;EAC5B,KAAKD,MAAMC;CACf;CAEA,IAAIC,WAAW;EACX,MAAM,EAAEF,QAAQ;EAChB,IAAIA,IAAIG,SAASR,aAAaS,QAC1B,OAAOJ,IAAIK,KAAKC;EAGpB,OAAON,IAAIK,KAAKH,YAAY;CAChC;CAEA,IAAIG,OAAO;EACP,OAAO,KAAKL,IAAIK;CACpB;CAEA,IAAIF,OAAO;EACP,OAAO,KAAKH,IAAIG;CACpB;CAEA,IAAIG,KAAK;EACL,OAAO,KAAKN,IAAIK,KAAKC;CACzB;CAEA,IAAIC,UAAU;EACV,OAAO,KAAKP,IAAIK,KAAKE,WAAW,KAAKP,IAAIK,KAAKG,OAAOF;CACzD;CAEA,IAAIG,YAAY;EACZ,OAAO,KAAKT,IAAIK,KAAKG,OAAOE;CAChC;AACJ;AAEA,SAAgBC,mBAAmBC,OAAgB;CAC/C,OAAOA,MAAMC,MAAMhB;AACvB;AAEA,SAAgBiB,mBAAmBF,OAAkBG,OAAiC;CAClF,IAAIV;CAEJ,IAAIU,iBAAiBhB,iBACjBM,OAAOU;MAEPV,OAAO,IAAIN,gBAAgBgB,KAAAA;CAG/BH,MAAMC,MAAMhB,OAAOQ;AACvB;AAEA,SAAgBW,yBAAyBJ,OAAgB;CACrD,MAAMX,WAAWU,mBAAmBC,KAAAA;CACpC,IAAI,CAACX,UACD,MAAM,IAAIL,kBAAAA;CAGd,OAAOK;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"param-id.mjs","names":["isUUID","ValidupError","buildErrorMessageForAttribute","defineIssueItem","useRequestParamID","event","options","id","getRequestParamID","path","message","getRequestStringParam","undefined","key","value","params","length","getRequestStringParamOrFail"],"sources":["../../../../../src/adapters/http/request/helpers/param-id.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 { isUUID } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport { ValidupError, buildErrorMessageForAttribute, defineIssueItem } from 'validup';\n\ntype RequestIDParamOptions = {\n /**\n * default: true\n */\n isUUID?: boolean\n};\n\nexport function useRequestParamID(event: IAppEvent, options: RequestIDParamOptions = {}) : string {\n const id = getRequestParamID(event, options);\n if (typeof id === 'undefined') {\n throw new ValidupError([\n defineIssueItem({\n path: ['id'],\n message: buildErrorMessageForAttribute('id'),\n }),\n ]);\n }\n\n return id;\n}\n\nexport function getRequestParamID(event: IAppEvent, options: RequestIDParamOptions = {}) : string | undefined {\n const id = getRequestStringParam(event, 'id');\n if (!id) {\n return undefined;\n }\n\n options.isUUID = options.isUUID ?? true;\n if (options.isUUID && !isUUID(id)) {\n return undefined;\n }\n\n return id;\n}\n\nexport function getRequestStringParam(event: IAppEvent, key: string) : string | undefined {\n const value = event.params[key];\n if (typeof value !== 'string' || value.length === 0) {\n return undefined;\n }\n\n return value;\n}\n\nexport function getRequestStringParamOrFail(event: IAppEvent, key: string) : string | undefined {\n const value = getRequestStringParam(event, key);\n if (typeof value === 'undefined') {\n throw new ValidupError([\n defineIssueItem({\n path: [key],\n message: buildErrorMessageForAttribute(key),\n }),\n ]);\n }\n\n return value;\n}\n"],"mappings":";;;;;;AAkBA,SAAgBI,kBAAkBC,OAAkBC,UAAiC,CAAC,GAAC;CACnF,MAAMC,KAAKC,kBAAkBH,OAAOC,OAAAA;CACpC,IAAI,OAAOC,OAAO,aACd,MAAM,IAAIN,aAAa,CACnBE,gBAAgB;EACZM,MAAM,CAAC,IAAA;EACPC,SAASR,8BAA8B,IAAA;CAC3C,CAAA,CAAA,CACH;CAGL,OAAOK;AACX;AAEA,SAAgBC,kBAAkBH,OAAkBC,UAAiC,CAAC,GAAC;CACnF,MAAMC,KAAKI,sBAAsBN,OAAO,IAAA;CACxC,IAAI,CAACE,IACD;CAGJD,QAAQN,SAASM,QAAQN,UAAU;CACnC,IAAIM,QAAQN,UAAU,CAACA,OAAOO,EAAAA,GAC1B;CAGJ,OAAOA;AACX;AAEA,SAAgBI,sBAAsBN,OAAkBQ,KAAW;CAC/D,MAAMC,QAAQT,MAAMU,OAAOF;CAC3B,IAAI,OAAOC,UAAU,YAAYA,MAAME,WAAW,GAC9C;CAGJ,OAAOF;AACX;AAEA,SAAgBG,4BAA4BZ,OAAkBQ,KAAW;CACrE,MAAMC,QAAQH,sBAAsBN,OAAOQ,GAAAA;CAC3C,IAAI,OAAOC,UAAU,aACjB,MAAM,IAAIb,aAAa,CACnBE,gBAAgB;EACZM,MAAM,CAACI,GAAAA;EACPH,SAASR,8BAA8BW,GAAAA;CAC3C,CAAA,CAAA,CACH;CAGL,OAAOC;AACX"}
1
+ {"version":3,"file":"param-id.mjs","names":["isUUID","ValidupError","buildErrorMessageForAttribute","defineIssueItem","useRequestParamID","event","options","id","getRequestParamID","path","message","getRequestStringParam","undefined","key","value","params","length","getRequestStringParamOrFail"],"sources":["../../../../../src/adapters/http/request/helpers/param-id.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 { isUUID } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport { ValidupError, buildErrorMessageForAttribute, defineIssueItem } from 'validup';\n\ntype RequestIDParamOptions = {\n /**\n * default: true\n */\n isUUID?: boolean\n};\n\nexport function useRequestParamID(event: IAppEvent, options: RequestIDParamOptions = {}) : string {\n const id = getRequestParamID(event, options);\n if (typeof id === 'undefined') {\n throw new ValidupError([\n defineIssueItem({\n path: ['id'],\n message: buildErrorMessageForAttribute('id'),\n }),\n ]);\n }\n\n return id;\n}\n\nexport function getRequestParamID(event: IAppEvent, options: RequestIDParamOptions = {}) : string | undefined {\n const id = getRequestStringParam(event, 'id');\n if (!id) {\n return undefined;\n }\n\n options.isUUID = options.isUUID ?? true;\n if (options.isUUID && !isUUID(id)) {\n return undefined;\n }\n\n return id;\n}\n\nexport function getRequestStringParam(event: IAppEvent, key: string) : string | undefined {\n const value = event.params[key];\n if (typeof value !== 'string' || value.length === 0) {\n return undefined;\n }\n\n return value;\n}\n\nexport function getRequestStringParamOrFail(event: IAppEvent, key: string) : string | undefined {\n const value = getRequestStringParam(event, key);\n if (typeof value === 'undefined') {\n throw new ValidupError([\n defineIssueItem({\n path: [key],\n message: buildErrorMessageForAttribute(key),\n }),\n ]);\n }\n\n return value;\n}\n"],"mappings":";;;;;;AAkBA,SAAgBI,kBAAkBC,OAAkBC,UAAiC,CAAC,GAAC;CACnF,MAAMC,KAAKC,kBAAkBH,OAAOC,OAAAA;CACpC,IAAI,OAAOC,OAAO,aACd,MAAM,IAAIN,aAAa,CACnBE,gBAAgB;EACZM,MAAM,CAAC,IAAK;EACZC,SAASR,8BAA8B,IAAA;CAC3C,CAAA,CACH,CAAA;CAGL,OAAOK;AACX;AAEA,SAAgBC,kBAAkBH,OAAkBC,UAAiC,CAAC,GAAC;CACnF,MAAMC,KAAKI,sBAAsBN,OAAO,IAAA;CACxC,IAAI,CAACE,IACD;CAGJD,QAAQN,SAASM,QAAQN,UAAU;CACnC,IAAIM,QAAQN,UAAU,CAACA,OAAOO,EAAAA,GAC1B;CAGJ,OAAOA;AACX;AAEA,SAAgBI,sBAAsBN,OAAkBQ,KAAW;CAC/D,MAAMC,QAAQT,MAAMU,OAAOF;CAC3B,IAAI,OAAOC,UAAU,YAAYA,MAAME,WAAW,GAC9C;CAGJ,OAAOF;AACX;AAEA,SAAgBG,4BAA4BZ,OAAkBQ,KAAW;CACrE,MAAMC,QAAQH,sBAAsBN,OAAOQ,GAAAA;CAC3C,IAAI,OAAOC,UAAU,aACjB,MAAM,IAAIb,aAAa,CACnBE,gBAAgB;EACZM,MAAM,CAACI,GAAI;EACXH,SAASR,8BAA8BW,GAAAA;CAC3C,CAAA,CACH,CAAA;CAGL,OAAOC;AACX"}
@@ -14,7 +14,7 @@ function getRequestRealmID(event) {
14
14
  }
15
15
  function applyRouteRealmIDToBody(event, data) {
16
16
  const routeRealmId = getRequestRealmID(event);
17
- if (routeRealmId) data.realm_id = routeRealmId;
17
+ if (routeRealmId) data.realmId = routeRealmId;
18
18
  }
19
19
  //#endregion
20
20
  export { applyRouteRealmIDToBody, getRequestRealmID, setRequestRealmID };
@@ -1 +1 @@
1
- {"version":3,"file":"realm-id.mjs","names":["getRequestStringParam","sym","Symbol","setRequestRealmID","event","id","store","getRequestRealmID","stored","applyRouteRealmIDToBody","data","routeRealmId","realm_id"],"sources":["../../../../../src/adapters/http/request/helpers/realm-id.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IAppEvent } from 'routup';\nimport { getRequestStringParam } from './param-id.ts';\n\nconst sym = Symbol('RRealmID');\n\nexport function setRequestRealmID(event: IAppEvent, id: string): void {\n event.store[sym] = id;\n}\n\nexport function getRequestRealmID(event: IAppEvent): string | undefined {\n const stored = event.store[sym] as string | undefined;\n if (stored) {\n return stored;\n }\n return getRequestStringParam(event, 'realmId');\n}\n\nexport function applyRouteRealmIDToBody(event: IAppEvent, data: Record<string, any>): void {\n const routeRealmId = getRequestRealmID(event);\n if (routeRealmId) {\n data.realm_id = routeRealmId;\n }\n}\n"],"mappings":";;;;;AAUA,MAAMC,MAAMC,OAAO,UAAA;AAEnB,SAAgBC,kBAAkBC,OAAkBC,IAAU;CAC1DD,MAAME,MAAML,OAAOI;AACvB;AAEA,SAAgBE,kBAAkBH,OAAgB;CAC9C,MAAMI,SAASJ,MAAME,MAAML;CAC3B,IAAIO,QACA,OAAOA;CAEX,OAAOR,sBAAsBI,OAAO,SAAA;AACxC;AAEA,SAAgBK,wBAAwBL,OAAkBM,MAAyB;CAC/E,MAAMC,eAAeJ,kBAAkBH,KAAAA;CACvC,IAAIO,cACAD,KAAKE,WAAWD;AAExB"}
1
+ {"version":3,"file":"realm-id.mjs","names":["getRequestStringParam","sym","Symbol","setRequestRealmID","event","id","store","getRequestRealmID","stored","applyRouteRealmIDToBody","data","routeRealmId","realmId"],"sources":["../../../../../src/adapters/http/request/helpers/realm-id.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IAppEvent } from 'routup';\nimport { getRequestStringParam } from './param-id.ts';\n\nconst sym = Symbol('RRealmID');\n\nexport function setRequestRealmID(event: IAppEvent, id: string): void {\n event.store[sym] = id;\n}\n\nexport function getRequestRealmID(event: IAppEvent): string | undefined {\n const stored = event.store[sym] as string | undefined;\n if (stored) {\n return stored;\n }\n return getRequestStringParam(event, 'realmId');\n}\n\nexport function applyRouteRealmIDToBody(event: IAppEvent, data: Record<string, any>): void {\n const routeRealmId = getRequestRealmID(event);\n if (routeRealmId) {\n data.realmId = routeRealmId;\n }\n}\n"],"mappings":";;;;;AAUA,MAAMC,MAAMC,OAAO,UAAA;AAEnB,SAAgBC,kBAAkBC,OAAkBC,IAAU;CAC1DD,MAAME,MAAML,OAAOI;AACvB;AAEA,SAAgBE,kBAAkBH,OAAgB;CAC9C,MAAMI,SAASJ,MAAME,MAAML;CAC3B,IAAIO,QACA,OAAOA;CAEX,OAAOR,sBAAsBI,OAAO,SAAA;AACxC;AAEA,SAAgBK,wBAAwBL,OAAkBM,MAAyB;CAC/E,MAAMC,eAAeJ,kBAAkBH,KAAAA;CACvC,IAAIO,cACAD,KAAKE,UAAUD;AAEvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"redirect.mjs","names":["sanitizeRelativeRedirect","input","length","undefined","test","decoded","decodeURIComponent","candidate","startsWith","includes"],"sources":["../../../../../src/adapters/http/request/helpers/redirect.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\n/**\n * Open-redirect guard for the `redirect` query parameter carried by the\n * auth workflow pages: only same-origin relative paths pass through, so the\n * value can be safely reflected into an anchor href / forwarded as a\n * post-login destination.\n *\n * Rejects: non-strings, control/whitespace chars (browsers strip some,\n * shifting where the URL authority begins), protocol-relative (`//host`),\n * backslash variants (browsers normalise `\\` → `/`), and any scheme\n * (`javascript:`, `http:`) — both on the raw and once-decoded form so a\n * percent-encoded separator (`%2f`, `%5c`) can't slip past.\n */\nexport function sanitizeRelativeRedirect(input: unknown): string | undefined {\n if (typeof input !== 'string' || input.length === 0) {\n return undefined;\n }\n\n // Raw input: reject control chars AND whitespace (space/tab/newline) — a\n // raw space can shift where the URL authority begins.\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u0020\\u007f]/.test(input)) {\n return undefined;\n }\n\n let decoded: string;\n try {\n decoded = decodeURIComponent(input);\n } catch {\n return undefined;\n }\n\n // Decoded form: reject C0 controls + DEL (CR/LF/NUL — the header-injection\n // vectors a `%0a`/`%0d` would smuggle past the raw check) but NOT space\n // (0x20), so a legitimate `%20` in the path still passes.\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f]/.test(decoded)) {\n return undefined;\n }\n\n for (const candidate of [input, decoded]) {\n if (!candidate.startsWith('/')) {\n return undefined;\n }\n if (candidate.length > 1 && (candidate[1] === '/' || candidate[1] === '\\\\')) {\n return undefined;\n }\n if (candidate.includes('\\\\')) {\n return undefined;\n }\n }\n\n return input;\n}\n"],"mappings":";;;;;;;;;;;;;;;GAmBA,SAAgBA,yBAAyBC,OAAc;CACnD,IAAI,OAAOA,UAAU,YAAYA,MAAMC,WAAW,GAC9C;CAMJ,IAAI,wBAAwBE,KAAKH,KAAAA,GAC7B;CAGJ,IAAII;CACJ,IAAI;EACAA,UAAUC,mBAAmBL,KAAAA;CACjC,QAAQ;EACJ;CACJ;CAMA,IAAI,wBAAwBG,KAAKC,OAAAA,GAC7B;CAGJ,KAAK,MAAME,aAAa,CAACN,OAAOI,OAAAA,GAAU;EACtC,IAAI,CAACE,UAAUC,WAAW,GAAA,GACtB;EAEJ,IAAID,UAAUL,SAAS,MAAMK,UAAU,OAAO,OAAOA,UAAU,OAAO,OAClE;EAEJ,IAAIA,UAAUE,SAAS,IAAA,GACnB;CAER;CAEA,OAAOR;AACX"}
1
+ {"version":3,"file":"redirect.mjs","names":["sanitizeRelativeRedirect","input","length","undefined","test","decoded","decodeURIComponent","candidate","startsWith","includes"],"sources":["../../../../../src/adapters/http/request/helpers/redirect.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\n/**\n * Open-redirect guard for the `redirect` query parameter carried by the\n * auth workflow pages: only same-origin relative paths pass through, so the\n * value can be safely reflected into an anchor href / forwarded as a\n * post-login destination.\n *\n * Rejects: non-strings, control/whitespace chars (browsers strip some,\n * shifting where the URL authority begins), protocol-relative (`//host`),\n * backslash variants (browsers normalise `\\` → `/`), and any scheme\n * (`javascript:`, `http:`) — both on the raw and once-decoded form so a\n * percent-encoded separator (`%2f`, `%5c`) can't slip past.\n */\nexport function sanitizeRelativeRedirect(input: unknown): string | undefined {\n if (typeof input !== 'string' || input.length === 0) {\n return undefined;\n }\n\n // Raw input: reject control chars AND whitespace (space/tab/newline) — a\n // raw space can shift where the URL authority begins.\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u0020\\u007f]/.test(input)) {\n return undefined;\n }\n\n let decoded: string;\n try {\n decoded = decodeURIComponent(input);\n } catch {\n return undefined;\n }\n\n // Decoded form: reject C0 controls + DEL (CR/LF/NUL — the header-injection\n // vectors a `%0a`/`%0d` would smuggle past the raw check) but NOT space\n // (0x20), so a legitimate `%20` in the path still passes.\n // eslint-disable-next-line no-control-regex\n if (/[\\u0000-\\u001f\\u007f]/.test(decoded)) {\n return undefined;\n }\n\n for (const candidate of [input, decoded]) {\n if (!candidate.startsWith('/')) {\n return undefined;\n }\n if (candidate.length > 1 && (candidate[1] === '/' || candidate[1] === '\\\\')) {\n return undefined;\n }\n if (candidate.includes('\\\\')) {\n return undefined;\n }\n }\n\n return input;\n}\n"],"mappings":";;;;;;;;;;;;;;;GAmBA,SAAgBA,yBAAyBC,OAAc;CACnD,IAAI,OAAOA,UAAU,YAAYA,MAAMC,WAAW,GAC9C;CAMJ,IAAI,wBAAwBE,KAAKH,KAAAA,GAC7B;CAGJ,IAAII;CACJ,IAAI;EACAA,UAAUC,mBAAmBL,KAAAA;CACjC,QAAQ;EACJ;CACJ;CAMA,IAAI,wBAAwBG,KAAKC,OAAAA,GAC7B;CAGJ,KAAK,MAAME,aAAa,CAACN,OAAOI,OAAQ,GAAE;EACtC,IAAI,CAACE,UAAUC,WAAW,GAAA,GACtB;EAEJ,IAAID,UAAUL,SAAS,MAAMK,UAAU,OAAO,OAAOA,UAAU,OAAO,OAClE;EAEJ,IAAIA,UAAUE,SAAS,IAAA,GACnB;CAER;CAEA,OAAOR;AACX"}
@@ -1,4 +1,4 @@
1
- import type { IPermissionEvaluator, PermissionEvaluationContext } from '@authup/access';
1
+ import type { IPermissionEvaluator, PermissionCompileContext, PermissionCompileResult, PermissionEvaluationContext } from '@authup/access';
2
2
  import type { IAppEvent } from 'routup';
3
3
  export declare class RequestPermissionEvaluator implements IPermissionEvaluator {
4
4
  protected event: IAppEvent;
@@ -8,6 +8,7 @@ export declare class RequestPermissionEvaluator implements IPermissionEvaluator
8
8
  preEvaluate(ctx: PermissionEvaluationContext): Promise<void>;
9
9
  preEvaluateOneOf(ctx: PermissionEvaluationContext): Promise<void>;
10
10
  evaluateOneOf(ctx: PermissionEvaluationContext): Promise<void>;
11
- protected extendContext(ctx: PermissionEvaluationContext): PermissionEvaluationContext;
11
+ compile(ctx: PermissionCompileContext): Promise<PermissionCompileResult>;
12
+ protected extendContext<T extends PermissionEvaluationContext | PermissionCompileContext>(ctx: T): T;
12
13
  }
13
14
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/request/permission/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACR,oBAAoB,EACpB,2BAA2B,EAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,qBAAa,0BAA2B,YAAW,oBAAoB;IACnE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAE3B,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;gBAE9B,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB;IAOvD,QAAQ,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAI1D,WAAW,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAM7D,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAIlE,aAAa,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAMrE,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,2BAA2B;CAiB3D"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/request/permission/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACR,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC9B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,qBAAa,0BAA2B,YAAW,oBAAoB;IACnE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAE3B,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;gBAE9B,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB;IAOvD,QAAQ,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAI1D,WAAW,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAM7D,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAIlE,aAAa,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAAC,IAAI,CAAC;IAM/D,OAAO,CAAC,GAAG,EAAE,wBAAwB,GAAI,OAAO,CAAC,uBAAuB,CAAC;IAM/E,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,2BAA2B,GAAG,wBAAwB,EAAE,GAAG,EAAE,CAAC,GAAI,CAAC;CAiBxG"}
@@ -26,6 +26,9 @@ var RequestPermissionEvaluator = class {
26
26
  async evaluateOneOf(ctx) {
27
27
  return this.evaluator.evaluateOneOf(this.extendContext(ctx));
28
28
  }
29
+ async compile(ctx) {
30
+ return this.evaluator.compile(this.extendContext(ctx));
31
+ }
29
32
  extendContext(ctx) {
30
33
  const scopes = useRequestScopes(this.event);
31
34
  const identity = useRequestIdentity(this.event);
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["ScopeName","BuiltInPolicyType","PolicyData","useRequestIdentity","useRequestScopes","RequestPermissionEvaluator","event","evaluator","evaluate","ctx","extendContext","preEvaluate","preEvaluateOneOf","evaluateOneOf","scopes","identity","includes","GLOBAL","data","set","IDENTITY"],"sources":["../../../../../src/adapters/http/request/permission/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 { ScopeName } from '@authup/core-kit';\nimport type {\n IPermissionEvaluator,\n PermissionEvaluationContext,\n} from '@authup/access';\nimport { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport type { IAppEvent } from 'routup';\nimport { useRequestIdentity, useRequestScopes } from '../helpers/index.ts';\n\nexport class RequestPermissionEvaluator implements IPermissionEvaluator {\n protected event: IAppEvent;\n\n protected evaluator: IPermissionEvaluator;\n\n constructor(event: IAppEvent, evaluator: IPermissionEvaluator) {\n this.event = event;\n this.evaluator = evaluator;\n }\n\n // --------------------------------------------------------------\n\n async evaluate(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.evaluate(this.extendContext(ctx));\n }\n\n async preEvaluate(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.preEvaluate(this.extendContext(ctx));\n }\n\n // --------------------------------------------------------------\n\n async preEvaluateOneOf(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.preEvaluateOneOf(this.extendContext(ctx));\n }\n\n async evaluateOneOf(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.evaluateOneOf(this.extendContext(ctx));\n }\n\n // --------------------------------------------------------------\n\n protected extendContext(ctx: PermissionEvaluationContext) {\n const scopes = useRequestScopes(this.event);\n const identity = useRequestIdentity(this.event);\n\n // Only attach the identity policy data when an identity was actually\n // resolved. Setting it to `undefined` would still make\n // `PolicyData.has('identity')` true (key presence), so the built-in\n // identity evaluator would run its validator against `undefined` and\n // throw an uncaught error instead of a clean permission denial — see\n // the deleted-subject edge case in issue #3184.\n if (scopes.includes(ScopeName.GLOBAL) && identity) {\n ctx.data = ctx.data || new PolicyData();\n ctx.data.set(BuiltInPolicyType.IDENTITY, identity);\n }\n\n return ctx;\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAaK,6BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,OAAkBC,WAAiC;EAC3D,KAAKD,QAAQA;EACb,KAAKC,YAAYA;CACrB;CAIA,MAAMC,SAASC,KAAkD;EAC7D,OAAO,KAAKF,UAAUC,SAAS,KAAKE,cAAcD,GAAAA,CAAAA;CACtD;CAEA,MAAME,YAAYF,KAAkD;EAChE,OAAO,KAAKF,UAAUI,YAAY,KAAKD,cAAcD,GAAAA,CAAAA;CACzD;CAIA,MAAMG,iBAAiBH,KAAkD;EACrE,OAAO,KAAKF,UAAUK,iBAAiB,KAAKF,cAAcD,GAAAA,CAAAA;CAC9D;CAEA,MAAMI,cAAcJ,KAAkD;EAClE,OAAO,KAAKF,UAAUM,cAAc,KAAKH,cAAcD,GAAAA,CAAAA;CAC3D;CAIUC,cAAcD,KAAkC;EACtD,MAAMK,SAASV,iBAAiB,KAAKE,KAAK;EAC1C,MAAMS,WAAWZ,mBAAmB,KAAKG,KAAK;EAQ9C,IAAIQ,OAAOE,SAAShB,UAAUiB,MAAM,KAAKF,UAAU;GAC/CN,IAAIS,OAAOT,IAAIS,QAAQ,IAAIhB,WAAAA;GAC3BO,IAAIS,KAAKC,IAAIlB,kBAAkBmB,UAAUL,QAAAA;EAC7C;EAEA,OAAON;CACX;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["ScopeName","BuiltInPolicyType","PolicyData","useRequestIdentity","useRequestScopes","RequestPermissionEvaluator","event","evaluator","evaluate","ctx","extendContext","preEvaluate","preEvaluateOneOf","evaluateOneOf","compile","scopes","identity","includes","GLOBAL","data","set","IDENTITY"],"sources":["../../../../../src/adapters/http/request/permission/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 { ScopeName } from '@authup/core-kit';\nimport type {\n IPermissionEvaluator,\n PermissionCompileContext,\n PermissionCompileResult,\n PermissionEvaluationContext,\n} from '@authup/access';\nimport { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport type { IAppEvent } from 'routup';\nimport { useRequestIdentity, useRequestScopes } from '../helpers/index.ts';\n\nexport class RequestPermissionEvaluator implements IPermissionEvaluator {\n protected event: IAppEvent;\n\n protected evaluator: IPermissionEvaluator;\n\n constructor(event: IAppEvent, evaluator: IPermissionEvaluator) {\n this.event = event;\n this.evaluator = evaluator;\n }\n\n // --------------------------------------------------------------\n\n async evaluate(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.evaluate(this.extendContext(ctx));\n }\n\n async preEvaluate(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.preEvaluate(this.extendContext(ctx));\n }\n\n // --------------------------------------------------------------\n\n async preEvaluateOneOf(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.preEvaluateOneOf(this.extendContext(ctx));\n }\n\n async evaluateOneOf(ctx: PermissionEvaluationContext) : Promise<void> {\n return this.evaluator.evaluateOneOf(this.extendContext(ctx));\n }\n\n // --------------------------------------------------------------\n\n async compile(ctx: PermissionCompileContext) : Promise<PermissionCompileResult> {\n return this.evaluator.compile(this.extendContext(ctx));\n }\n\n // --------------------------------------------------------------\n\n protected extendContext<T extends PermissionEvaluationContext | PermissionCompileContext>(ctx: T) : T {\n const scopes = useRequestScopes(this.event);\n const identity = useRequestIdentity(this.event);\n\n // Only attach the identity policy data when an identity was actually\n // resolved. Setting it to `undefined` would still make\n // `PolicyData.has('identity')` true (key presence), so the built-in\n // identity evaluator would run its validator against `undefined` and\n // throw an uncaught error instead of a clean permission denial — see\n // the deleted-subject edge case in issue #3184.\n if (scopes.includes(ScopeName.GLOBAL) && identity) {\n ctx.data = ctx.data || new PolicyData();\n ctx.data.set(BuiltInPolicyType.IDENTITY, identity);\n }\n\n return ctx;\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAaK,6BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,OAAkBC,WAAiC;EAC3D,KAAKD,QAAQA;EACb,KAAKC,YAAYA;CACrB;CAIA,MAAMC,SAASC,KAAkD;EAC7D,OAAO,KAAKF,UAAUC,SAAS,KAAKE,cAAcD,GAAAA,CAAAA;CACtD;CAEA,MAAME,YAAYF,KAAkD;EAChE,OAAO,KAAKF,UAAUI,YAAY,KAAKD,cAAcD,GAAAA,CAAAA;CACzD;CAIA,MAAMG,iBAAiBH,KAAkD;EACrE,OAAO,KAAKF,UAAUK,iBAAiB,KAAKF,cAAcD,GAAAA,CAAAA;CAC9D;CAEA,MAAMI,cAAcJ,KAAkD;EAClE,OAAO,KAAKF,UAAUM,cAAc,KAAKH,cAAcD,GAAAA,CAAAA;CAC3D;CAIA,MAAMK,QAAQL,KAAkE;EAC5E,OAAO,KAAKF,UAAUO,QAAQ,KAAKJ,cAAcD,GAAAA,CAAAA;CACrD;CAIUC,cAAgFD,KAAY;EAClG,MAAMM,SAASX,iBAAiB,KAAKE,KAAK;EAC1C,MAAMU,WAAWb,mBAAmB,KAAKG,KAAK;EAQ9C,IAAIS,OAAOE,SAASjB,UAAUkB,MAAM,KAAKF,UAAU;GAC/CP,IAAIU,OAAOV,IAAIU,QAAQ,IAAIjB,WAAAA;GAC3BO,IAAIU,KAAKC,IAAInB,kBAAkBoB,UAAUL,QAAAA;EAC7C;EAEA,OAAOP;CACX;AACJ"}
@@ -11,7 +11,7 @@ import { getURLBasePath } from "@authup/kit";
11
11
  import path from "node:path";
12
12
  import { useRequestCookie } from "@routup/basic/cookie";
13
13
  import { CodeTransformation, isCodeTransformation } from "typeorm-extension";
14
- import { load } from "locter";
14
+ import { read } from "locter";
15
15
  import fs from "node:fs";
16
16
  //#region src/adapters/http/ui/render.ts
17
17
  const COLOR_MODE_COOKIE = "vc-color-mode";
@@ -36,7 +36,7 @@ async function renderUIPage(event, ctx) {
36
36
  } else {
37
37
  html = cachedHtml ??= await fs.promises.readFile(path.join(UI_DIST_PATH, "client", "index.html"), "utf-8");
38
38
  manifest = cachedManifest ??= JSON.parse(await fs.promises.readFile(path.join(UI_DIST_PATH, "client", ".vite", "ssr-manifest.json"), "utf-8"));
39
- render = cachedRender ??= (await load(path.join(UI_DIST_PATH, "server", "server.js"))).render;
39
+ render = cachedRender ??= (await read(path.join(UI_DIST_PATH, "server", "server.js"))).render;
40
40
  }
41
41
  const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY];
42
42
  const [appHtml, preloadLinks] = await render({
@@ -1 +1 @@
1
- {"version":3,"file":"render.mjs","names":["getURLBasePath","useRequestCookie","load","fs","path","CodeTransformation","isCodeTransformation","UI_DIST_PATH","UI_SOURCE_PATH","UI_HTTP_CLIENT_FACTORY_STORE_KEY","VITE_SERVER_STORE_KEY","LOCALE_COOKIE","rebasePublicAssetURLs","COLOR_MODE_COOKIE","cachedHtml","cachedManifest","cachedRender","renderUIPage","event","ctx","isJIT","JUST_IN_TIME","colorMode","payload","config","locale","html","manifest","render","vite","store","promises","readFile","join","transformIndexHtml","ssrLoadModule","JSON","parse","httpClientFactory","appHtml","preloadLinks","url","httpClient","undefined","body","replace","htmlAttrs","test","baseURL","response","headers","set"],"sources":["../../../../src/adapters/http/ui/render.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 { getURLBasePath } from '@authup/kit';\nimport { useRequestCookie } from '@routup/basic/cookie';\nimport { load } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { IAppEvent } from 'routup';\nimport type { ViteDevServer } from 'vite';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport type { IClient } from '@authup/core-http-kit';\nimport { UI_DIST_PATH, UI_SOURCE_PATH } from '../../../path.ts';\nimport { UI_HTTP_CLIENT_FACTORY_STORE_KEY, VITE_SERVER_STORE_KEY } from '../middleware/index.ts';\nimport { LOCALE_COOKIE } from '../request/helpers/locale.ts';\nimport { rebasePublicAssetURLs } from './base-path.ts';\nimport type { UIRenderContext } from './types.ts';\n\nconst COLOR_MODE_COOKIE = 'vc-color-mode';\n\n// Process-lifetime caches for the immutable production SSR assets. The dist\n// template, manifest and server bundle don't change after boot, so read them\n// once instead of per request (the auth/login routes are hot paths). The JIT\n// (dev) path deliberately re-reads so HMR keeps working.\nlet cachedHtml: string | undefined;\nlet cachedManifest: Record<string, any> | undefined;\nlet cachedRender: CallableFunction | undefined;\n\nexport async function renderUIPage(event: IAppEvent, ctx: UIRenderContext): Promise<string> {\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n // Mirror @vuecs/nuxt's SSR plugins: resolve the cookies server-side so\n // the HTML shell already carries the `.dark`/`.light` class and lang\n // attribute (no flash) and the client app hydrates from the same values.\n const colorMode = useRequestCookie(event, COLOR_MODE_COOKIE);\n ctx.payload.config.colorMode = colorMode;\n\n const locale = useRequestCookie(event, LOCALE_COOKIE);\n ctx.payload.config.locale = locale;\n\n let html : string;\n let manifest : Record<string, any>;\n let render : CallableFunction;\n\n if (isJIT) {\n const vite = event.store[VITE_SERVER_STORE_KEY] as ViteDevServer;\n\n html = await fs.promises.readFile(\n path.join(UI_SOURCE_PATH, 'index.html'),\n 'utf-8',\n );\n html = await vite.transformIndexHtml('/', html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render;\n } else {\n html = (cachedHtml ??= await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', 'index.html'),\n 'utf-8',\n ));\n manifest = (cachedManifest ??= JSON.parse(await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n )));\n render = (cachedRender ??= (await load(\n path.join(UI_DIST_PATH, 'server', 'server.js'),\n )).render);\n }\n\n const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY] as (() => IClient) | undefined;\n\n const [appHtml, preloadLinks] = await render({\n url: ctx.url,\n manifest,\n payload: ctx.payload,\n httpClient: httpClientFactory ? httpClientFactory() : undefined,\n });\n\n let body = html\n .replace('<!--preload-links-->', preloadLinks)\n .replace('<!--app-html-->', appHtml);\n\n let htmlAttrs = 'lang=\"en\"';\n if (locale && /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$/.test(locale)) {\n htmlAttrs = `lang=\"${locale}\"`;\n }\n if (colorMode === 'dark' || colorMode === 'light') {\n htmlAttrs += ` class=\"${colorMode}\"`;\n }\n // Match the opening <html> tag by pattern rather than an exact literal,\n // so a reformatted tag / dev-mode transformIndexHtml rewrite still gets\n // the lang + color-mode attributes (no silent FOUC).\n body = body.replace(/<html\\b[^>]*>/i, `<html ${htmlAttrs}>`);\n\n // When authup is publicly served under a sub-path (publicUrl carries a\n // pathname, e.g. https://example.com/auth), the fixed /public/ vite base\n // would bypass the proxy mapping — rebase asset URLs onto the prefix.\n body = rebasePublicAssetURLs(body, getURLBasePath(ctx.payload.config.baseURL));\n\n event.response.headers.set('content-type', 'text/html; charset=utf-8');\n\n // Clickjacking guard: the SSR auth pages (login, consent, realm-mismatch,\n // logout) mutate state behind explicit clicks and hydrate the logged-in\n // session from first-party cookies. Framing them would make click-gating\n // defeatable via overlay attacks, so deny embedding entirely. (Iframe-based\n // silent renew is therefore unsupported — auth state is JS-readable anyway.)\n event.response.headers.set('content-security-policy', \"frame-ancestors 'none'\");\n event.response.headers.set('x-frame-options', 'DENY');\n\n // The auth pages' URLs routinely carry sensitive query params\n // (id_token_hint, code, redirect, state) — never leak them via Referer.\n event.response.headers.set('referrer-policy', 'no-referrer');\n\n return body;\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAMa,oBAAoB;AAM1B,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AAEJ,eAAsBC,aAAaC,OAAkBC,KAAoB;CACrE,MAAMC,QAAQd,qBAAqBD,mBAAmBgB,YAAY;CAKlE,MAAMC,YAAYrB,iBAAiBiB,OAAOL,iBAAAA;CAC1CM,IAAII,QAAQC,OAAOF,YAAYA;CAE/B,MAAMG,SAASxB,iBAAiBiB,OAAOP,aAAAA;CACvCQ,IAAII,QAAQC,OAAOC,SAASA;CAE5B,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CAEJ,IAAIR,OAAO;EACP,MAAMS,OAAOX,MAAMY,MAAMpB;EAEzBgB,OAAO,MAAMvB,GAAG4B,SAASC,SACrB5B,KAAK6B,KAAKzB,gBAAgB,YAAA,GAC1B,OAAA;EAEJkB,OAAO,MAAMG,KAAKK,mBAAmB,KAAKR,IAAAA;EAC1CC,WAAW,CAAC;EACZC,UAAU,MAAMC,KAAKM,cAAc,gBAAA,EAAA,CAAmBP;CAC1D,OAAO;EACHF,OAAQZ,eAAe,MAAMX,GAAG4B,SAASC,SACrC5B,KAAK6B,KAAK1B,cAAc,UAAU,YAAA,GAClC,OAAA;EAEJoB,WAAYZ,mBAAmBqB,KAAKC,MAAM,MAAMlC,GAAG4B,SAASC,SACxD5B,KAAK6B,KAAK1B,cAAc,UAAU,SAAS,mBAAA,GAC3C,OAAA,CAAA;EAEJqB,SAAUZ,kBAAkB,MAAMd,KAC9BE,KAAK6B,KAAK1B,cAAc,UAAU,WAAA,CAAA,EAAA,CACnCqB;CACP;CAEA,MAAMU,oBAAoBpB,MAAMY,MAAMrB;CAEtC,MAAM,CAAC8B,SAASC,gBAAgB,MAAMZ,OAAO;EACzCa,KAAKtB,IAAIsB;EACTd;EACAJ,SAASJ,IAAII;EACbmB,YAAYJ,oBAAoBA,kBAAAA,IAAsBK,KAAAA;CAC1D,CAAA;CAEA,IAAIC,OAAOlB,KACNmB,QAAQ,wBAAwBL,YAAAA,CAAAA,CAChCK,QAAQ,mBAAmBN,OAAAA;CAEhC,IAAIO,YAAY;CAChB,IAAIrB,UAAU,kCAAkCsB,KAAKtB,MAAAA,GACjDqB,YAAY,SAASrB,OAAO;CAEhC,IAAIH,cAAc,UAAUA,cAAc,SACtCwB,aAAa,WAAWxB,UAAU;CAKtCsB,OAAOA,KAAKC,QAAQ,kBAAkB,SAASC,UAAU,EAAE;CAK3DF,OAAOhC,sBAAsBgC,MAAM5C,eAAemB,IAAII,QAAQC,OAAOwB,OAAO,CAAA;CAE5E9B,MAAM+B,SAASC,QAAQC,IAAI,gBAAgB,0BAAA;CAO3CjC,MAAM+B,SAASC,QAAQC,IAAI,2BAA2B,wBAAA;CACtDjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,MAAA;CAI9CjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,aAAA;CAE9C,OAAOP;AACX"}
1
+ {"version":3,"file":"render.mjs","names":["getURLBasePath","useRequestCookie","read","fs","path","CodeTransformation","isCodeTransformation","UI_DIST_PATH","UI_SOURCE_PATH","UI_HTTP_CLIENT_FACTORY_STORE_KEY","VITE_SERVER_STORE_KEY","LOCALE_COOKIE","rebasePublicAssetURLs","COLOR_MODE_COOKIE","cachedHtml","cachedManifest","cachedRender","renderUIPage","event","ctx","isJIT","JUST_IN_TIME","colorMode","payload","config","locale","html","manifest","render","vite","store","promises","readFile","join","transformIndexHtml","ssrLoadModule","JSON","parse","httpClientFactory","appHtml","preloadLinks","url","httpClient","undefined","body","replace","htmlAttrs","test","baseURL","response","headers","set"],"sources":["../../../../src/adapters/http/ui/render.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 { getURLBasePath } from '@authup/kit';\nimport { useRequestCookie } from '@routup/basic/cookie';\nimport { read } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { IAppEvent } from 'routup';\nimport type { ViteDevServer } from 'vite';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport type { IClient } from '@authup/core-http-kit';\nimport { UI_DIST_PATH, UI_SOURCE_PATH } from '../../../path.ts';\nimport { UI_HTTP_CLIENT_FACTORY_STORE_KEY, VITE_SERVER_STORE_KEY } from '../middleware/index.ts';\nimport { LOCALE_COOKIE } from '../request/helpers/locale.ts';\nimport { rebasePublicAssetURLs } from './base-path.ts';\nimport type { UIRenderContext } from './types.ts';\n\nconst COLOR_MODE_COOKIE = 'vc-color-mode';\n\n// Process-lifetime caches for the immutable production SSR assets. The dist\n// template, manifest and server bundle don't change after boot, so read them\n// once instead of per request (the auth/login routes are hot paths). The JIT\n// (dev) path deliberately re-reads so HMR keeps working.\nlet cachedHtml: string | undefined;\nlet cachedManifest: Record<string, any> | undefined;\nlet cachedRender: CallableFunction | undefined;\n\nexport async function renderUIPage(event: IAppEvent, ctx: UIRenderContext): Promise<string> {\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n // Mirror @vuecs/nuxt's SSR plugins: resolve the cookies server-side so\n // the HTML shell already carries the `.dark`/`.light` class and lang\n // attribute (no flash) and the client app hydrates from the same values.\n const colorMode = useRequestCookie(event, COLOR_MODE_COOKIE);\n ctx.payload.config.colorMode = colorMode;\n\n const locale = useRequestCookie(event, LOCALE_COOKIE);\n ctx.payload.config.locale = locale;\n\n let html : string;\n let manifest : Record<string, any>;\n let render : CallableFunction;\n\n if (isJIT) {\n const vite = event.store[VITE_SERVER_STORE_KEY] as ViteDevServer;\n\n html = await fs.promises.readFile(\n path.join(UI_SOURCE_PATH, 'index.html'),\n 'utf-8',\n );\n html = await vite.transformIndexHtml('/', html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render;\n } else {\n html = (cachedHtml ??= await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', 'index.html'),\n 'utf-8',\n ));\n manifest = (cachedManifest ??= JSON.parse(await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n )));\n render = (cachedRender ??= (await read(\n path.join(UI_DIST_PATH, 'server', 'server.js'),\n )).render);\n }\n\n const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY] as (() => IClient) | undefined;\n\n const [appHtml, preloadLinks] = await render({\n url: ctx.url,\n manifest,\n payload: ctx.payload,\n httpClient: httpClientFactory ? httpClientFactory() : undefined,\n });\n\n let body = html\n .replace('<!--preload-links-->', preloadLinks)\n .replace('<!--app-html-->', appHtml);\n\n let htmlAttrs = 'lang=\"en\"';\n if (locale && /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$/.test(locale)) {\n htmlAttrs = `lang=\"${locale}\"`;\n }\n if (colorMode === 'dark' || colorMode === 'light') {\n htmlAttrs += ` class=\"${colorMode}\"`;\n }\n // Match the opening <html> tag by pattern rather than an exact literal,\n // so a reformatted tag / dev-mode transformIndexHtml rewrite still gets\n // the lang + color-mode attributes (no silent FOUC).\n body = body.replace(/<html\\b[^>]*>/i, `<html ${htmlAttrs}>`);\n\n // When authup is publicly served under a sub-path (publicUrl carries a\n // pathname, e.g. https://example.com/auth), the fixed /public/ vite base\n // would bypass the proxy mapping — rebase asset URLs onto the prefix.\n body = rebasePublicAssetURLs(body, getURLBasePath(ctx.payload.config.baseURL));\n\n event.response.headers.set('content-type', 'text/html; charset=utf-8');\n\n // Clickjacking guard: the SSR auth pages (login, consent, realm-mismatch,\n // logout) mutate state behind explicit clicks and hydrate the logged-in\n // session from first-party cookies. Framing them would make click-gating\n // defeatable via overlay attacks, so deny embedding entirely. (Iframe-based\n // silent renew is therefore unsupported — auth state is JS-readable anyway.)\n event.response.headers.set('content-security-policy', \"frame-ancestors 'none'\");\n event.response.headers.set('x-frame-options', 'DENY');\n\n // The auth pages' URLs routinely carry sensitive query params\n // (id_token_hint, code, redirect, state) — never leak them via Referer.\n event.response.headers.set('referrer-policy', 'no-referrer');\n\n return body;\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAMa,oBAAoB;AAM1B,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AAEJ,eAAsBC,aAAaC,OAAkBC,KAAoB;CACrE,MAAMC,QAAQd,qBAAqBD,mBAAmBgB,YAAY;CAKlE,MAAMC,YAAYrB,iBAAiBiB,OAAOL,iBAAAA;CAC1CM,IAAII,QAAQC,OAAOF,YAAYA;CAE/B,MAAMG,SAASxB,iBAAiBiB,OAAOP,aAAAA;CACvCQ,IAAII,QAAQC,OAAOC,SAASA;CAE5B,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CAEJ,IAAIR,OAAO;EACP,MAAMS,OAAOX,MAAMY,MAAMpB;EAEzBgB,OAAO,MAAMvB,GAAG4B,SAASC,SACrB5B,KAAK6B,KAAKzB,gBAAgB,YAAA,GAC1B,OAAA;EAEJkB,OAAO,MAAMG,KAAKK,mBAAmB,KAAKR,IAAAA;EAC1CC,WAAW,CAAC;EACZC,UAAU,MAAMC,KAAKM,cAAc,gBAAA,EAAA,CAAmBP;CAC1D,OAAO;EACHF,OAAQZ,eAAe,MAAMX,GAAG4B,SAASC,SACrC5B,KAAK6B,KAAK1B,cAAc,UAAU,YAAA,GAClC,OAAA;EAEJoB,WAAYZ,mBAAmBqB,KAAKC,MAAM,MAAMlC,GAAG4B,SAASC,SACxD5B,KAAK6B,KAAK1B,cAAc,UAAU,SAAS,mBAAA,GAC3C,OAAA,CAAA;EAEJqB,SAAUZ,kBAAkB,MAAMd,KAC9BE,KAAK6B,KAAK1B,cAAc,UAAU,WAAA,CAAA,EAAA,CACnCqB;CACP;CAEA,MAAMU,oBAAoBpB,MAAMY,MAAMrB;CAEtC,MAAM,CAAC8B,SAASC,gBAAgB,MAAMZ,OAAO;EACzCa,KAAKtB,IAAIsB;EACTd;EACAJ,SAASJ,IAAII;EACbmB,YAAYJ,oBAAoBA,kBAAAA,IAAsBK,KAAAA;CAC1D,CAAA;CAEA,IAAIC,OAAOlB,KACNmB,QAAQ,wBAAwBL,YAAAA,CAAAA,CAChCK,QAAQ,mBAAmBN,OAAAA;CAEhC,IAAIO,YAAY;CAChB,IAAIrB,UAAU,kCAAkCsB,KAAKtB,MAAAA,GACjDqB,YAAY,SAASrB,OAAO;CAEhC,IAAIH,cAAc,UAAUA,cAAc,SACtCwB,aAAa,WAAWxB,UAAU;CAKtCsB,OAAOA,KAAKC,QAAQ,kBAAkB,SAASC,UAAU,EAAE;CAK3DF,OAAOhC,sBAAsBgC,MAAM5C,eAAemB,IAAII,QAAQC,OAAOwB,OAAO,CAAA;CAE5E9B,MAAM+B,SAASC,QAAQC,IAAI,gBAAgB,0BAAA;CAO3CjC,MAAM+B,SAASC,QAAQC,IAAI,2BAA2B,wBAAA;CACtDjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,MAAA;CAI9CjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,aAAA;CAE9C,OAAOP;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/serve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IAIjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/serve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IAIjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
@@ -16,7 +16,10 @@ import { useRequestQuery } from "@routup/basic/query";
16
16
  features: options.features,
17
17
  redirect: sanitizeRelativeRedirect(query.redirect)
18
18
  };
19
- if (options.realmAware) data.realmId = typeof query.realm_id === "string" ? query.realm_id : void 0;
19
+ if (options.realmAware) {
20
+ const realmId = typeof query.realmId === "string" ? query.realmId : query.realm_id;
21
+ data.realmId = typeof realmId === "string" ? realmId : void 0;
22
+ }
20
23
  if (options.tokenAware) data.token = typeof query.token === "string" ? query.token : void 0;
21
24
  return renderUIPage(event, {
22
25
  url: options.url,
@@ -1 +1 @@
1
- {"version":3,"file":"serve.mjs","names":["useRequestQuery","sanitizeRelativeRedirect","renderUIPage","serveWorkflowPage","event","options","query","data","features","redirect","realmAware","realmId","realm_id","undefined","tokenAware","token","url","payload","config","baseURL"],"sources":["../../../../src/adapters/http/ui/serve.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IAppEvent } from 'routup';\nimport { sanitizeRelativeRedirect } from '../request/index.ts';\nimport { renderUIPage } from './render.ts';\n\nexport type ServeWorkflowPageOptions = {\n url: string,\n baseURL: string,\n features: StatusResponseFeatures,\n // Whether the page consumes the `realm_id` / `token` query params (e.g.\n // prefill from an email deep link). Off by default so a page never\n // reflects a param it doesn't use.\n realmAware?: boolean,\n tokenAware?: boolean,\n};\n\n/**\n * Single SSR payload-assembly path for the auth workflow GET routes:\n * whitelists query params, applies the open-redirect guard, and renders.\n * Keeps the four workflow controllers as thin POST adapters.\n */\nexport function serveWorkflowPage(\n event: IAppEvent,\n options: ServeWorkflowPageOptions,\n): Promise<string> {\n const query = useRequestQuery(event);\n\n const data: Record<string, any> = {\n features: options.features,\n redirect: sanitizeRelativeRedirect(query.redirect),\n };\n\n if (options.realmAware) {\n data.realmId = typeof query.realm_id === 'string' ? query.realm_id : undefined;\n }\n\n if (options.tokenAware) {\n data.token = typeof query.token === 'string' ? query.token : undefined;\n }\n\n return renderUIPage(event, {\n url: options.url,\n payload: {\n config: { baseURL: options.baseURL },\n data,\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;GA6BA,SAAgBG,kBACZC,OACAC,SAAiC;CAEjC,MAAMC,QAAQN,gBAAgBI,KAAAA;CAE9B,MAAMG,OAA4B;EAC9BC,UAAUH,QAAQG;EAClBC,UAAUR,yBAAyBK,MAAMG,QAAQ;CACrD;CAEA,IAAIJ,QAAQK,YACRH,KAAKI,UAAU,OAAOL,MAAMM,aAAa,WAAWN,MAAMM,WAAWC,KAAAA;CAGzE,IAAIR,QAAQS,YACRP,KAAKQ,QAAQ,OAAOT,MAAMS,UAAU,WAAWT,MAAMS,QAAQF,KAAAA;CAGjE,OAAOX,aAAaE,OAAO;EACvBY,KAAKX,QAAQW;EACbC,SAAS;GACLC,QAAQ,EAAEC,SAASd,QAAQc,QAAQ;GACnCZ;EACJ;CACJ,CAAA;AACJ"}
1
+ {"version":3,"file":"serve.mjs","names":["useRequestQuery","sanitizeRelativeRedirect","renderUIPage","serveWorkflowPage","event","options","query","data","features","redirect","realmAware","realmId","realm_id","undefined","tokenAware","token","url","payload","config","baseURL"],"sources":["../../../../src/adapters/http/ui/serve.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IAppEvent } from 'routup';\nimport { sanitizeRelativeRedirect } from '../request/index.ts';\nimport { renderUIPage } from './render.ts';\n\nexport type ServeWorkflowPageOptions = {\n url: string,\n baseURL: string,\n features: StatusResponseFeatures,\n // Whether the page consumes the `realmId` (legacy `realm_id`) / `token`\n // query params (e.g. prefill from an email deep link). Off by default so\n // a page never reflects a param it doesn't use.\n realmAware?: boolean,\n tokenAware?: boolean,\n};\n\n/**\n * Single SSR payload-assembly path for the auth workflow GET routes:\n * whitelists query params, applies the open-redirect guard, and renders.\n * Keeps the four workflow controllers as thin POST adapters.\n */\nexport function serveWorkflowPage(\n event: IAppEvent,\n options: ServeWorkflowPageOptions,\n): Promise<string> {\n const query = useRequestQuery(event);\n\n const data: Record<string, any> = {\n features: options.features,\n redirect: sanitizeRelativeRedirect(query.redirect),\n };\n\n if (options.realmAware) {\n const realmId = typeof query.realmId === 'string' ? query.realmId : query.realm_id;\n data.realmId = typeof realmId === 'string' ? realmId : undefined;\n }\n\n if (options.tokenAware) {\n data.token = typeof query.token === 'string' ? query.token : undefined;\n }\n\n return renderUIPage(event, {\n url: options.url,\n payload: {\n config: { baseURL: options.baseURL },\n data,\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;GA6BA,SAAgBG,kBACZC,OACAC,SAAiC;CAEjC,MAAMC,QAAQN,gBAAgBI,KAAAA;CAE9B,MAAMG,OAA4B;EAC9BC,UAAUH,QAAQG;EAClBC,UAAUR,yBAAyBK,MAAMG,QAAQ;CACrD;CAEA,IAAIJ,QAAQK,YAAY;EACpB,MAAMC,UAAU,OAAOL,MAAMK,YAAY,WAAWL,MAAMK,UAAUL,MAAMM;EAC1EL,KAAKI,UAAU,OAAOA,YAAY,WAAWA,UAAUE,KAAAA;CAC3D;CAEA,IAAIR,QAAQS,YACRP,KAAKQ,QAAQ,OAAOT,MAAMS,UAAU,WAAWT,MAAMS,QAAQF,KAAAA;CAGjE,OAAOX,aAAaE,OAAO;EACvBY,KAAKX,QAAQW;EACbC,SAAS;GACLC,QAAQ,EAAEC,SAASd,QAAQc,QAAQ;GACnCZ;EACJ;CACJ,CAAA;AACJ"}