@authup/server-core 1.0.0-beta.56 → 1.0.0-beta.58

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 (478) hide show
  1. package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
  2. package/dist/adapters/database/domains/role/entity.mjs +2 -1
  3. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  4. package/dist/adapters/database/logger/module.mjs +2 -4
  5. package/dist/adapters/database/logger/module.mjs.map +1 -1
  6. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts +25 -0
  7. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  8. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs +60 -0
  9. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  10. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts +25 -0
  11. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  12. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs +60 -0
  13. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  14. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +1 -1
  15. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  16. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +1 -1
  17. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  18. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs +1 -1
  19. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs.map +1 -1
  20. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +1 -1
  21. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  22. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +1 -1
  23. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  24. package/dist/adapters/http/controllers/entities/client/module.d.ts +6 -6
  25. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  26. package/dist/adapters/http/controllers/entities/client/module.mjs +30 -7
  27. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  28. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts +5 -5
  29. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts.map +1 -1
  30. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +23 -5
  31. package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
  32. package/dist/adapters/http/controllers/entities/client-role/module.d.ts +4 -4
  33. package/dist/adapters/http/controllers/entities/client-role/module.d.ts.map +1 -1
  34. package/dist/adapters/http/controllers/entities/client-role/module.mjs +19 -4
  35. package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
  36. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts +4 -4
  37. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts.map +1 -1
  38. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +19 -4
  39. package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
  40. package/dist/adapters/http/controllers/entities/consent/module.d.ts +3 -3
  41. package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -1
  42. package/dist/adapters/http/controllers/entities/consent/module.mjs +15 -3
  43. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
  44. package/dist/adapters/http/controllers/entities/event/module.d.ts +2 -2
  45. package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -1
  46. package/dist/adapters/http/controllers/entities/event/module.mjs +11 -2
  47. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
  48. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts +5 -5
  49. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts.map +1 -1
  50. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +23 -5
  51. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
  52. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +6 -6
  53. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  54. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +24 -8
  55. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  56. package/dist/adapters/http/controllers/entities/key/module.d.ts +5 -5
  57. package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
  58. package/dist/adapters/http/controllers/entities/key/module.mjs +23 -5
  59. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
  60. package/dist/adapters/http/controllers/entities/permission/module.d.ts +6 -6
  61. package/dist/adapters/http/controllers/entities/permission/module.d.ts.map +1 -1
  62. package/dist/adapters/http/controllers/entities/permission/module.mjs +27 -6
  63. package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
  64. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts +4 -4
  65. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts.map +1 -1
  66. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +19 -4
  67. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
  68. package/dist/adapters/http/controllers/entities/policy/module.d.ts +7 -7
  69. package/dist/adapters/http/controllers/entities/policy/module.d.ts.map +1 -1
  70. package/dist/adapters/http/controllers/entities/policy/module.mjs +27 -6
  71. package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
  72. package/dist/adapters/http/controllers/entities/realm/module.d.ts +6 -6
  73. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  74. package/dist/adapters/http/controllers/entities/realm/module.mjs +29 -8
  75. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  76. package/dist/adapters/http/controllers/entities/role/module.d.ts +6 -6
  77. package/dist/adapters/http/controllers/entities/role/module.d.ts.map +1 -1
  78. package/dist/adapters/http/controllers/entities/role/module.mjs +27 -6
  79. package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
  80. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts +5 -5
  81. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts.map +1 -1
  82. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +23 -5
  83. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
  84. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts +5 -5
  85. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts.map +1 -1
  86. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +23 -5
  87. package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
  88. package/dist/adapters/http/controllers/entities/scope/module.d.ts +6 -6
  89. package/dist/adapters/http/controllers/entities/scope/module.d.ts.map +1 -1
  90. package/dist/adapters/http/controllers/entities/scope/module.mjs +27 -6
  91. package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
  92. package/dist/adapters/http/controllers/entities/session/module.d.ts +3 -3
  93. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
  94. package/dist/adapters/http/controllers/entities/session/module.mjs +15 -3
  95. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  96. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +5 -5
  97. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -1
  98. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +23 -5
  99. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
  100. package/dist/adapters/http/controllers/entities/user/module.d.ts +6 -6
  101. package/dist/adapters/http/controllers/entities/user/module.d.ts.map +1 -1
  102. package/dist/adapters/http/controllers/entities/user/module.mjs +27 -6
  103. package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
  104. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts +5 -5
  105. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts.map +1 -1
  106. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +23 -5
  107. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
  108. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +4 -4
  109. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -1
  110. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +19 -4
  111. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
  112. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts +5 -5
  113. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts.map +1 -1
  114. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +23 -5
  115. package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
  116. package/dist/adapters/http/controllers/entities/user-role/module.d.ts +4 -4
  117. package/dist/adapters/http/controllers/entities/user-role/module.d.ts.map +1 -1
  118. package/dist/adapters/http/controllers/entities/user-role/module.mjs +19 -4
  119. package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/index.mjs +2 -1
  121. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -1
  122. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  123. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  124. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  125. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  126. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
  127. package/dist/adapters/http/controllers/workflows/logout/module.mjs +5 -1
  128. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  129. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts +2 -0
  130. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts.map +1 -0
  131. package/dist/adapters/http/controllers/workflows/userinfo/index.mjs +5 -0
  132. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts +18 -0
  133. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -0
  134. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +53 -0
  135. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -0
  136. package/dist/adapters/http/index.mjs +2 -1
  137. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -0
  138. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  139. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +10 -1
  140. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  141. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  142. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +4 -2
  143. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  144. package/dist/adapters/http/request/client-certificate.mjs +1 -1
  145. package/dist/adapters/http/request/client-certificate.mjs.map +1 -1
  146. package/dist/adapters/http/request/event-context.mjs +1 -1
  147. package/dist/adapters/http/request/event-context.mjs.map +1 -1
  148. package/dist/adapters/http/request/helpers/locations.mjs +1 -3
  149. package/dist/adapters/http/request/helpers/locations.mjs.map +1 -1
  150. package/dist/app/factory.d.ts +2 -1
  151. package/dist/app/factory.d.ts.map +1 -1
  152. package/dist/app/factory.mjs +2 -2
  153. package/dist/app/factory.mjs.map +1 -1
  154. package/dist/app/index.d.ts +1 -0
  155. package/dist/app/index.d.ts.map +1 -1
  156. package/dist/app/index.mjs +5 -1
  157. package/dist/app/modules/authentication/module.mjs +6 -3
  158. package/dist/app/modules/authentication/module.mjs.map +1 -1
  159. package/dist/app/modules/authentication/repositories/session.mjs +2 -2
  160. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  161. package/dist/app/modules/components/module.d.ts +3 -0
  162. package/dist/app/modules/components/module.d.ts.map +1 -1
  163. package/dist/app/modules/components/module.mjs +17 -2
  164. package/dist/app/modules/components/module.mjs.map +1 -1
  165. package/dist/app/modules/config/constants.d.ts +1 -0
  166. package/dist/app/modules/config/constants.d.ts.map +1 -1
  167. package/dist/app/modules/config/constants.mjs +1 -0
  168. package/dist/app/modules/config/constants.mjs.map +1 -1
  169. package/dist/app/modules/config/helpers.d.ts +9 -0
  170. package/dist/app/modules/config/helpers.d.ts.map +1 -0
  171. package/dist/app/modules/config/helpers.mjs +22 -0
  172. package/dist/app/modules/config/helpers.mjs.map +1 -0
  173. package/dist/app/modules/config/index.d.ts +2 -0
  174. package/dist/app/modules/config/index.d.ts.map +1 -1
  175. package/dist/app/modules/config/index.mjs +6 -1
  176. package/dist/app/modules/config/module.d.ts.map +1 -1
  177. package/dist/app/modules/config/module.mjs +2 -7
  178. package/dist/app/modules/config/module.mjs.map +1 -1
  179. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  180. package/dist/app/modules/config/normalize.mjs +4 -0
  181. package/dist/app/modules/config/normalize.mjs.map +1 -1
  182. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  183. package/dist/app/modules/config/read/env.mjs +2 -0
  184. package/dist/app/modules/config/read/env.mjs.map +1 -1
  185. package/dist/app/modules/config/read/fs.d.ts.map +1 -1
  186. package/dist/app/modules/config/read/fs.mjs +31 -8
  187. package/dist/app/modules/config/read/fs.mjs.map +1 -1
  188. package/dist/app/modules/config/read/module.mjs +8 -3
  189. package/dist/app/modules/config/read/module.mjs.map +1 -1
  190. package/dist/app/modules/config/trust-proxy.d.ts +28 -0
  191. package/dist/app/modules/config/trust-proxy.d.ts.map +1 -0
  192. package/dist/app/modules/config/trust-proxy.mjs +64 -0
  193. package/dist/app/modules/config/trust-proxy.mjs.map +1 -0
  194. package/dist/app/modules/config/types.d.ts +18 -0
  195. package/dist/app/modules/config/types.d.ts.map +1 -1
  196. package/dist/app/modules/config/validator.d.ts.map +1 -1
  197. package/dist/app/modules/config/validator.mjs +7 -0
  198. package/dist/app/modules/config/validator.mjs.map +1 -1
  199. package/dist/app/modules/database/module.mjs +2 -1
  200. package/dist/app/modules/database/module.mjs.map +1 -1
  201. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  202. package/dist/app/modules/database/repositories/client/repository.mjs +3 -4
  203. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  204. package/dist/app/modules/database/repositories/client-permission/repository.mjs +2 -2
  205. package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
  206. package/dist/app/modules/database/repositories/client-role/repository.mjs +2 -2
  207. package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
  208. package/dist/app/modules/database/repositories/client-scope/repository.mjs +2 -2
  209. package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
  210. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  211. package/dist/app/modules/database/repositories/event/repository.mjs +4 -3
  212. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  213. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +2 -2
  214. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  215. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +2 -2
  216. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
  217. package/dist/app/modules/database/repositories/key/repository.mjs +2 -2
  218. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  219. package/dist/app/modules/database/repositories/permission/repository.mjs +2 -2
  220. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  221. package/dist/app/modules/database/repositories/permission-policy/repository.mjs +2 -2
  222. package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
  223. package/dist/app/modules/database/repositories/policy/repository.mjs +2 -2
  224. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  225. package/dist/app/modules/database/repositories/query.d.ts +20 -0
  226. package/dist/app/modules/database/repositories/query.d.ts.map +1 -1
  227. package/dist/app/modules/database/repositories/query.mjs +26 -3
  228. package/dist/app/modules/database/repositories/query.mjs.map +1 -1
  229. package/dist/app/modules/database/repositories/realm/repository.mjs +2 -2
  230. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  231. package/dist/app/modules/database/repositories/role/repository.mjs +2 -2
  232. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  233. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -2
  234. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  235. package/dist/app/modules/database/repositories/role-permission/repository.mjs +2 -2
  236. package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
  237. package/dist/app/modules/database/repositories/schema-validation.d.ts +17 -3
  238. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
  239. package/dist/app/modules/database/repositories/schema-validation.mjs +29 -5
  240. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
  241. package/dist/app/modules/database/repositories/scope/repository.mjs +2 -2
  242. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  243. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +2 -2
  244. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
  245. package/dist/app/modules/database/repositories/user/repository.mjs +2 -2
  246. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  247. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -2
  248. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  249. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +2 -2
  250. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
  251. package/dist/app/modules/database/repositories/user-permission/repository.mjs +2 -2
  252. package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
  253. package/dist/app/modules/database/repositories/user-role/repository.mjs +2 -2
  254. package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
  255. package/dist/app/modules/http/constants.d.ts +2 -13
  256. package/dist/app/modules/http/constants.d.ts.map +1 -1
  257. package/dist/app/modules/http/constants.mjs.map +1 -1
  258. package/dist/app/modules/http/module.d.ts.map +1 -1
  259. package/dist/app/modules/http/module.mjs +7 -1
  260. package/dist/app/modules/http/module.mjs.map +1 -1
  261. package/dist/app/modules/http/modules/controller.d.ts +4 -2
  262. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  263. package/dist/app/modules/http/modules/controller.mjs +208 -124
  264. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  265. package/dist/app/modules/http/modules/middleware.mjs +10 -5
  266. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  267. package/dist/app/modules/identity/module.mjs +6 -3
  268. package/dist/app/modules/identity/module.mjs.map +1 -1
  269. package/dist/app/modules/index.mjs +5 -1
  270. package/dist/app/modules/oauth2/module.mjs +37 -17
  271. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  272. package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs +1 -1
  273. package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs.map +1 -1
  274. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +2 -2
  275. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  276. package/dist/app/modules/oauth2/repositories/token/repository.mjs +1 -1
  277. package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
  278. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  279. package/dist/app/modules/provisioning/module.mjs +21 -12
  280. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  281. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  282. package/dist/app/modules/provisioning/sources/file/module.mjs +11 -2
  283. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  284. package/dist/app/types.d.ts +5 -0
  285. package/dist/app/types.d.ts.map +1 -0
  286. package/dist/app/types.mjs +4 -0
  287. package/dist/cli/commands/healthcheck.d.ts +2 -1
  288. package/dist/cli/commands/healthcheck.d.ts.map +1 -1
  289. package/dist/cli/commands/healthcheck.mjs +3 -2
  290. package/dist/cli/commands/healthcheck.mjs.map +1 -1
  291. package/dist/cli/commands/index.d.ts +0 -1
  292. package/dist/cli/commands/index.d.ts.map +1 -1
  293. package/dist/cli/commands/index.mjs +1 -2
  294. package/dist/cli/commands/migration.d.ts +2 -1
  295. package/dist/cli/commands/migration.d.ts.map +1 -1
  296. package/dist/cli/commands/migration.mjs +3 -2
  297. package/dist/cli/commands/migration.mjs.map +1 -1
  298. package/dist/cli/commands/start.d.ts +2 -1
  299. package/dist/cli/commands/start.d.ts.map +1 -1
  300. package/dist/cli/commands/start.mjs +3 -2
  301. package/dist/cli/commands/start.mjs.map +1 -1
  302. package/dist/cli/config.d.ts +18 -0
  303. package/dist/cli/config.d.ts.map +1 -0
  304. package/dist/cli/config.mjs +34 -0
  305. package/dist/cli/config.mjs.map +1 -0
  306. package/dist/cli/module.d.ts +8 -8
  307. package/dist/cli/module.d.ts.map +1 -1
  308. package/dist/cli/module.mjs +8 -28
  309. package/dist/cli/module.mjs.map +1 -1
  310. package/dist/cli/types.d.ts +5 -0
  311. package/dist/cli/types.d.ts.map +1 -0
  312. package/dist/cli/types.mjs +4 -0
  313. package/dist/components/event-cleaner/module.d.ts.map +1 -1
  314. package/dist/components/event-cleaner/module.mjs +26 -14
  315. package/dist/components/event-cleaner/module.mjs.map +1 -1
  316. package/dist/components/index.d.ts +0 -1
  317. package/dist/components/index.d.ts.map +1 -1
  318. package/dist/components/index.mjs +1 -4
  319. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  320. package/dist/components/oauth2-cleaner/module.mjs +29 -17
  321. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  322. package/dist/components/types.d.ts +1 -0
  323. package/dist/components/types.d.ts.map +1 -1
  324. package/dist/core/authentication/login-throttle/service.d.ts.map +1 -1
  325. package/dist/core/authentication/login-throttle/service.mjs +2 -1
  326. package/dist/core/authentication/login-throttle/service.mjs.map +1 -1
  327. package/dist/core/authentication/session/module.mjs +2 -4
  328. package/dist/core/authentication/session/module.mjs.map +1 -1
  329. package/dist/core/entities/client/constants.d.ts +10 -0
  330. package/dist/core/entities/client/constants.d.ts.map +1 -0
  331. package/dist/core/entities/client/constants.mjs +20 -0
  332. package/dist/core/entities/client/constants.mjs.map +1 -0
  333. package/dist/core/entities/client/index.d.ts +1 -0
  334. package/dist/core/entities/client/index.d.ts.map +1 -1
  335. package/dist/core/entities/client/index.mjs +3 -2
  336. package/dist/core/entities/client/schema.d.ts.map +1 -1
  337. package/dist/core/entities/client/schema.mjs +40 -3
  338. package/dist/core/entities/client/schema.mjs.map +1 -1
  339. package/dist/core/entities/client/service.d.ts.map +1 -1
  340. package/dist/core/entities/client/service.mjs +9 -61
  341. package/dist/core/entities/client/service.mjs.map +1 -1
  342. package/dist/core/entities/client/web-client.d.ts +39 -3
  343. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  344. package/dist/core/entities/client/web-client.mjs +68 -12
  345. package/dist/core/entities/client/web-client.mjs.map +1 -1
  346. package/dist/core/entities/client-permission/service.mjs +12 -9
  347. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  348. package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
  349. package/dist/core/entities/client-scope/schema.mjs +3 -1
  350. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  351. package/dist/core/entities/event/constants.d.ts +7 -0
  352. package/dist/core/entities/event/constants.d.ts.map +1 -1
  353. package/dist/core/entities/event/constants.mjs +7 -1
  354. package/dist/core/entities/event/constants.mjs.map +1 -1
  355. package/dist/core/entities/event/index.mjs +2 -2
  356. package/dist/core/entities/event/service.mjs +1 -1
  357. package/dist/core/entities/event/service.mjs.map +1 -1
  358. package/dist/core/entities/index.mjs +4 -3
  359. package/dist/core/entities/key/service.mjs +4 -2
  360. package/dist/core/entities/key/service.mjs.map +1 -1
  361. package/dist/core/entities/permission/service.d.ts.map +1 -1
  362. package/dist/core/entities/permission/service.mjs +1 -1
  363. package/dist/core/entities/permission/service.mjs.map +1 -1
  364. package/dist/core/entities/policy/service.d.ts.map +1 -1
  365. package/dist/core/entities/policy/service.mjs +3 -2
  366. package/dist/core/entities/policy/service.mjs.map +1 -1
  367. package/dist/core/entities/realm/service.d.ts.map +1 -1
  368. package/dist/core/entities/realm/service.mjs +1 -1
  369. package/dist/core/entities/realm/service.mjs.map +1 -1
  370. package/dist/core/entities/role/schema.d.ts.map +1 -1
  371. package/dist/core/entities/role/schema.mjs +4 -0
  372. package/dist/core/entities/role/schema.mjs.map +1 -1
  373. package/dist/core/entities/role/service.d.ts.map +1 -1
  374. package/dist/core/entities/role/service.mjs +1 -1
  375. package/dist/core/entities/role/service.mjs.map +1 -1
  376. package/dist/core/entities/role-permission/service.mjs +12 -9
  377. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  378. package/dist/core/entities/scope/service.d.ts.map +1 -1
  379. package/dist/core/entities/scope/service.mjs +1 -1
  380. package/dist/core/entities/scope/service.mjs.map +1 -1
  381. package/dist/core/entities/session/schema.d.ts.map +1 -1
  382. package/dist/core/entities/session/schema.mjs +2 -0
  383. package/dist/core/entities/session/schema.mjs.map +1 -1
  384. package/dist/core/entities/user/schema.d.ts.map +1 -1
  385. package/dist/core/entities/user/schema.mjs +2 -0
  386. package/dist/core/entities/user/schema.mjs.map +1 -1
  387. package/dist/core/entities/user/service.d.ts.map +1 -1
  388. package/dist/core/entities/user/service.mjs +1 -1
  389. package/dist/core/entities/user/service.mjs.map +1 -1
  390. package/dist/core/entities/user-authenticator/helpers.mjs +1 -1
  391. package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -1
  392. package/dist/core/entities/user-authenticator/service.mjs +7 -7
  393. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  394. package/dist/core/entities/user-permission/service.mjs +12 -9
  395. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  396. package/dist/core/identity/password-recovery/check.mjs +4 -4
  397. package/dist/core/identity/password-recovery/check.mjs.map +1 -1
  398. package/dist/core/identity/password-recovery/service.mjs +1 -1
  399. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  400. package/dist/core/identity/registration/check.mjs +2 -2
  401. package/dist/core/identity/registration/check.mjs.map +1 -1
  402. package/dist/core/index.mjs +5 -3
  403. package/dist/core/key/check.mjs +2 -2
  404. package/dist/core/key/check.mjs.map +1 -1
  405. package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
  406. package/dist/core/provisioning/entities/client/relations-validator.mjs +2 -0
  407. package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
  408. package/dist/core/provisioning/entities/client/types.d.ts +8 -0
  409. package/dist/core/provisioning/entities/client/types.d.ts.map +1 -1
  410. package/dist/core/provisioning/synchronizer/client/module.d.ts +3 -1
  411. package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
  412. package/dist/core/provisioning/synchronizer/client/module.mjs +10 -1
  413. package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
  414. package/dist/core/provisioning/synchronizer/client/types.d.ts +3 -1
  415. package/dist/core/provisioning/synchronizer/client/types.d.ts.map +1 -1
  416. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts +4 -1
  417. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
  418. package/dist/core/provisioning/synchronizer/entity-resolver.mjs +14 -29
  419. package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
  420. package/dist/core/provisioning/synchronizer/index.d.ts +1 -0
  421. package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
  422. package/dist/core/provisioning/synchronizer/permission/module.mjs +0 -1
  423. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  424. package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
  425. package/dist/core/provisioning/synchronizer/realm/module.mjs +8 -9
  426. package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
  427. package/dist/core/provisioning/synchronizer/role/module.mjs +0 -1
  428. package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
  429. package/dist/core/provisioning/synchronizer/scope/module.mjs +0 -1
  430. package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
  431. package/dist/core/provisioning/synchronizer/types.d.ts +11 -0
  432. package/dist/core/provisioning/synchronizer/types.d.ts.map +1 -0
  433. package/dist/core/provisioning/synchronizer/types.mjs +4 -0
  434. package/dist/core/provisioning/synchronizer/user/module.mjs +0 -1
  435. package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
  436. package/dist/core/query/describe.d.ts +25 -0
  437. package/dist/core/query/describe.d.ts.map +1 -0
  438. package/dist/core/query/describe.mjs +50 -0
  439. package/dist/core/query/describe.mjs.map +1 -0
  440. package/dist/core/query/fields.d.ts +44 -0
  441. package/dist/core/query/fields.d.ts.map +1 -0
  442. package/dist/core/query/fields.mjs +46 -0
  443. package/dist/core/query/fields.mjs.map +1 -0
  444. package/dist/core/query/index.d.ts +1 -0
  445. package/dist/core/query/index.d.ts.map +1 -1
  446. package/dist/core/query/index.mjs +2 -1
  447. package/dist/core/query/module.d.ts +1 -1
  448. package/dist/core/query/module.mjs +1 -1
  449. package/dist/core/query/module.mjs.map +1 -1
  450. package/dist/index.mjs +6 -2
  451. package/dist/path.mjs.map +1 -1
  452. package/dist/swagger.json +1324 -193
  453. package/dist/ui/client/.vite/ssr-manifest.json +1030 -760
  454. package/dist/ui/client/assets/index-BTK3GPZZ.js +106 -0
  455. package/dist/ui/client/assets/index-Cx_pI7BS.css +2 -0
  456. package/dist/ui/client/index.html +2 -2
  457. package/dist/ui/server/server.js +4465 -11501
  458. package/package.json +51 -50
  459. package/dist/cli/commands/reset.d.ts +0 -2
  460. package/dist/cli/commands/reset.d.ts.map +0 -1
  461. package/dist/cli/commands/reset.mjs +0 -23
  462. package/dist/cli/commands/reset.mjs.map +0 -1
  463. package/dist/components/database/index.d.ts +0 -2
  464. package/dist/components/database/index.d.ts.map +0 -1
  465. package/dist/components/database/index.mjs +0 -7
  466. package/dist/components/database/unique-entries/factory.d.ts +0 -4
  467. package/dist/components/database/unique-entries/factory.d.ts.map +0 -1
  468. package/dist/components/database/unique-entries/factory.mjs +0 -12
  469. package/dist/components/database/unique-entries/factory.mjs.map +0 -1
  470. package/dist/components/database/unique-entries/index.d.ts +0 -3
  471. package/dist/components/database/unique-entries/index.d.ts.map +0 -1
  472. package/dist/components/database/unique-entries/index.mjs +0 -6
  473. package/dist/components/database/unique-entries/module.d.ts +0 -15
  474. package/dist/components/database/unique-entries/module.d.ts.map +0 -1
  475. package/dist/components/database/unique-entries/module.mjs +0 -69
  476. package/dist/components/database/unique-entries/module.mjs.map +0 -1
  477. package/dist/ui/client/assets/index-C05uGFDe.js +0 -131
  478. package/dist/ui/client/assets/index-CiHrf73J.css +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":["EventName","EventRefType","EventScope","IdentityType","USER_PASSWORD_MAX_LENGTH","USER_PASSWORD_MIN_LENGTH","EntityNotFoundError","ValidationError","PasswordRecoveryDisabledError","EmailVerificationRequiredError","ResetTokenExpiredError","createValidator","randomBytes","Container","z","UserCredentialsService","MailTemplateName","PASSWORD_RESET_EXPIRES_IN_MINUTES","PasswordRecoveryService","options","repository","realmRepository","mailClient","mailTemplateRenderer","eventService","ctx","forgotPassword","data","context","passwordRecoveryEnabled","emailVerificationEnabled","validated","runForgotPasswordValidator","realm","resolve","realmId","where","name","email","id","entity","findOneByWithEmail","merged","merge","resetExpires","Date","now","toISOString","resetHash","toString","save","resetUrl","publicUrl","replace","encodeURIComponent","undefined","mail","render","template","PASSWORD_RESET","params","code","url","expiresInMinutes","locale","send","to","record","scope","IDENTITY","PASSWORD_RESET_REQUESTED","refType","USER","refId","actorType","actorId","actorName","resetPassword","runResetPasswordValidator","validateJoinColumns","token","findOneBy","credentialsService","hashedPassword","protect","password","resetAt","PASSWORD_RESET_COMPLETED","validator","oneOfContainer","oneOf","mount","string","trim","toLowerCase","regex","message","min","optional","uuid","nullable","run","max","passwordMinLength"],"sources":["../../../../src/core/identity/password-recovery/service.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 {\n EventName,\n EventRefType,\n EventScope,\n IdentityType,\n USER_PASSWORD_MAX_LENGTH,\n USER_PASSWORD_MIN_LENGTH,\n} from '@authup/core-kit';\nimport { EntityNotFoundError, ValidationError } from '@authup/errors';\nimport { PasswordRecoveryDisabledError } from './disabled.ts';\nimport { EmailVerificationRequiredError } from './email-verification-required.ts';\nimport { ResetTokenExpiredError } from './token-expired.ts';\nimport { createValidator } from '@validup/zod';\nimport { randomBytes } from 'node:crypto';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { UserCredentialsService } from '../../authentication/credential/entities/user/module.ts';\nimport type {\n IPasswordRecoveryService,\n PasswordForgotResult,\n PasswordRecoveryServiceContext,\n PasswordRecoveryServiceOptions,\n PasswordResetResult,\n} from './types.ts';\nimport type { IMailClient, IMailTemplateRenderer } from '../../mail/types.ts';\nimport { MailTemplateName } from '../../mail/index.ts';\nimport type { IEventService, IRealmRepository, IUserRepository } from '../../entities/index.ts';\nimport type { IdentityWorkflowContext } from '../types.ts';\nimport { PASSWORD_RESET_EXPIRES_IN_MINUTES } from './constants.ts';\n\nexport class PasswordRecoveryService implements IPasswordRecoveryService {\n protected options: PasswordRecoveryServiceOptions;\n\n protected repository: IUserRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected mailClient: IMailClient;\n\n protected mailTemplateRenderer: IMailTemplateRenderer;\n\n protected eventService?: IEventService;\n\n constructor(ctx: PasswordRecoveryServiceContext) {\n this.options = ctx.options;\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.mailClient = ctx.mailClient;\n this.mailTemplateRenderer = ctx.mailTemplateRenderer;\n this.eventService = ctx.eventService;\n }\n\n async forgotPassword(data: Record<string, any>, context?: IdentityWorkflowContext): Promise<PasswordForgotResult> {\n if (!this.options.passwordRecoveryEnabled) {\n throw new PasswordRecoveryDisabledError();\n }\n\n if (!this.options.emailVerificationEnabled) {\n throw new EmailVerificationRequiredError('Email verification is not enabled, but required to reset a password.');\n }\n\n const validated = await this.runForgotPasswordValidator(data);\n\n const realm = await this.realmRepository.resolve(validated.realmId, true);\n\n const where: Record<string, any> = {\n ...(validated.name ? { name: validated.name } : {}),\n ...(validated.email ? { email: validated.email } : {}),\n realmId: realm.id,\n };\n\n const entity = await this.repository.findOneByWithEmail(where);\n\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n const merged = this.repository.merge(entity, {\n resetExpires: new Date(\n Date.now() + (1000 * 60 * PASSWORD_RESET_EXPIRES_IN_MINUTES),\n ).toISOString(),\n resetHash: randomBytes(32).toString('hex'),\n });\n\n await this.repository.save(merged);\n\n try {\n // realmId MUST ride the link: resetPassword resolves the realm\n // from the request and filters the lookup by it, so a realm-less\n // link resolves to the master realm and never matches a\n // non-master user.\n const resetUrl = this.options.publicUrl ?\n `${this.options.publicUrl.replace(/\\/+$/, '')}/password-reset` +\n `?token=${encodeURIComponent(merged.resetHash!)}` +\n `&realmId=${encodeURIComponent(entity.realmId)}` :\n undefined;\n\n const mail = await this.mailTemplateRenderer.render({\n template: MailTemplateName.PASSWORD_RESET,\n params: {\n code: merged.resetHash!,\n url: resetUrl,\n expiresInMinutes: PASSWORD_RESET_EXPIRES_IN_MINUTES,\n },\n locale: context?.locale,\n });\n\n await this.mailClient.send({\n to: entity.email,\n ...mail,\n });\n } catch {\n this.repository.merge(merged, {\n resetHash: null,\n resetExpires: null,\n });\n await this.repository.save(merged);\n\n throw new ValidationError('Password recovery failed. Could not send reset email.');\n }\n\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name: EventName.PASSWORD_RESET_REQUESTED,\n refType: EventRefType.USER,\n refId: merged.id,\n actorType: IdentityType.USER,\n actorId: merged.id,\n actorName: merged.name,\n realmId: merged.realmId,\n });\n\n return { resetExpires: merged.resetExpires! };\n }\n\n async resetPassword(data: Record<string, any>): Promise<PasswordResetResult> {\n if (!this.options.passwordRecoveryEnabled) {\n throw new PasswordRecoveryDisabledError();\n }\n\n const validated = await this.runResetPasswordValidator(data);\n\n await this.repository.validateJoinColumns(validated);\n\n const realm = await this.realmRepository.resolve(validated.realmId, true);\n\n const where: Record<string, any> = {\n ...(validated.name ? { name: validated.name } : {}),\n ...(validated.email ? { email: validated.email } : {}),\n resetHash: validated.token,\n realmId: realm.id,\n };\n\n const entity = await this.repository.findOneBy(where);\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n if (!entity.resetExpires || new Date(entity.resetExpires) < new Date()) {\n throw new ResetTokenExpiredError();\n }\n\n const credentialsService = new UserCredentialsService();\n const hashedPassword = await credentialsService.protect(validated.password);\n\n const merged = this.repository.merge(entity, {\n resetAt: new Date().toISOString(),\n resetHash: null,\n resetExpires: null,\n password: hashedPassword,\n });\n\n await this.repository.save(merged);\n\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name: EventName.PASSWORD_RESET_COMPLETED,\n refType: EventRefType.USER,\n refId: merged.id,\n actorType: IdentityType.USER,\n actorId: merged.id,\n actorName: merged.name,\n realmId: merged.realmId,\n });\n\n return { resetAt: merged.resetAt! };\n }\n\n private async runForgotPasswordValidator(data: Record<string, any>) {\n const validator = new Container<any>({});\n\n const oneOfContainer = new Container({ oneOf: true });\n\n oneOfContainer.mount(\n 'email',\n createValidator(\n z.string()\n .trim()\n .toLowerCase()\n .email()\n .regex(/^[^A-Z]+$/, { message: 'Email must be lowercase.' }),\n ),\n );\n\n oneOfContainer.mount(\n 'name',\n createValidator(z.string().trim().toLowerCase().min(1)),\n );\n\n validator.mount(oneOfContainer);\n\n validator.mount(\n 'realmId',\n { optional: true },\n createValidator(z.uuid().nullable()),\n );\n\n return validator.run(data);\n }\n\n private async runResetPasswordValidator(data: Record<string, any>) {\n const validator = new Container<any>({});\n\n const oneOfContainer = new Container({ oneOf: true });\n oneOfContainer.mount(\n 'email',\n createValidator(\n z.string()\n .trim()\n .toLowerCase()\n .email()\n .regex(/^[^A-Z]+$/, { message: 'Email must be lowercase.' }),\n ),\n );\n oneOfContainer.mount(\n 'name',\n createValidator(z.string().trim().toLowerCase().min(1)),\n );\n\n validator.mount(oneOfContainer);\n\n validator.mount(\n 'realmId',\n { optional: true },\n createValidator(z.uuid().nullable()),\n );\n\n validator.mount(\n 'token',\n createValidator(z.string().min(3).max(256)),\n );\n\n validator.mount(\n 'password',\n createValidator(\n z.string()\n .min(this.options.passwordMinLength ?? USER_PASSWORD_MIN_LENGTH)\n .max(USER_PASSWORD_MAX_LENGTH),\n ),\n );\n\n return validator.run(data);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":["EventName","EventRefType","EventScope","IdentityType","USER_PASSWORD_MAX_LENGTH","USER_PASSWORD_MIN_LENGTH","EntityNotFoundError","ValidationError","PasswordRecoveryDisabledError","EmailVerificationRequiredError","ResetTokenExpiredError","createValidator","randomBytes","Container","z","UserCredentialsService","MailTemplateName","PASSWORD_RESET_EXPIRES_IN_MINUTES","PasswordRecoveryService","options","repository","realmRepository","mailClient","mailTemplateRenderer","eventService","ctx","forgotPassword","data","context","passwordRecoveryEnabled","emailVerificationEnabled","validated","runForgotPasswordValidator","realm","resolve","realmId","where","name","email","id","entity","findOneByWithEmail","merged","merge","resetExpires","Date","now","toISOString","resetHash","toString","save","resetUrl","publicUrl","replace","encodeURIComponent","undefined","mail","render","template","PASSWORD_RESET","params","code","url","expiresInMinutes","locale","send","to","record","scope","IDENTITY","PASSWORD_RESET_REQUESTED","refType","USER","refId","actorType","actorId","actorName","resetPassword","runResetPasswordValidator","validateJoinColumns","token","findOneBy","credentialsService","hashedPassword","protect","password","resetAt","PASSWORD_RESET_COMPLETED","validator","oneOfContainer","oneOf","mount","string","trim","toLowerCase","regex","message","min","optional","uuid","nullable","run","max","passwordMinLength"],"sources":["../../../../src/core/identity/password-recovery/service.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 {\n EventName,\n EventRefType,\n EventScope,\n IdentityType,\n USER_PASSWORD_MAX_LENGTH,\n USER_PASSWORD_MIN_LENGTH,\n} from '@authup/core-kit';\nimport { EntityNotFoundError, ValidationError } from '@authup/errors';\nimport { PasswordRecoveryDisabledError } from './disabled.ts';\nimport { EmailVerificationRequiredError } from './email-verification-required.ts';\nimport { ResetTokenExpiredError } from './token-expired.ts';\nimport { createValidator } from '@validup/zod';\nimport { randomBytes } from 'node:crypto';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { UserCredentialsService } from '../../authentication/credential/entities/user/module.ts';\nimport type {\n IPasswordRecoveryService,\n PasswordForgotResult,\n PasswordRecoveryServiceContext,\n PasswordRecoveryServiceOptions,\n PasswordResetResult,\n} from './types.ts';\nimport type { IMailClient, IMailTemplateRenderer } from '../../mail/types.ts';\nimport { MailTemplateName } from '../../mail/index.ts';\nimport type { IEventService, IRealmRepository, IUserRepository } from '../../entities/index.ts';\nimport type { IdentityWorkflowContext } from '../types.ts';\nimport { PASSWORD_RESET_EXPIRES_IN_MINUTES } from './constants.ts';\n\nexport class PasswordRecoveryService implements IPasswordRecoveryService {\n protected options: PasswordRecoveryServiceOptions;\n\n protected repository: IUserRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected mailClient: IMailClient;\n\n protected mailTemplateRenderer: IMailTemplateRenderer;\n\n protected eventService?: IEventService;\n\n constructor(ctx: PasswordRecoveryServiceContext) {\n this.options = ctx.options;\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.mailClient = ctx.mailClient;\n this.mailTemplateRenderer = ctx.mailTemplateRenderer;\n this.eventService = ctx.eventService;\n }\n\n async forgotPassword(data: Record<string, any>, context?: IdentityWorkflowContext): Promise<PasswordForgotResult> {\n if (!this.options.passwordRecoveryEnabled) {\n throw new PasswordRecoveryDisabledError();\n }\n\n if (!this.options.emailVerificationEnabled) {\n throw new EmailVerificationRequiredError('Email verification is not enabled, but required to reset a password.');\n }\n\n const validated = await this.runForgotPasswordValidator(data);\n\n const realm = await this.realmRepository.resolve(validated.realmId, true);\n\n const where: Record<string, any> = {\n ...(validated.name ? { name: validated.name } : {}),\n ...(validated.email ? { email: validated.email } : {}),\n realmId: realm.id,\n };\n\n const entity = await this.repository.findOneByWithEmail(where);\n\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n const merged = this.repository.merge(entity, {\n resetExpires: new Date(\n Date.now() + (1000 * 60 * PASSWORD_RESET_EXPIRES_IN_MINUTES),\n ).toISOString(),\n resetHash: randomBytes(32).toString('hex'),\n });\n\n await this.repository.save(merged);\n\n try {\n // realmId MUST ride the link: resetPassword resolves the realm\n // from the request and filters the lookup by it, so a realm-less\n // link resolves to the master realm and never matches a\n // non-master user.\n const resetUrl = this.options.publicUrl ?\n `${this.options.publicUrl.replace(/\\/+$/, '')}/password-reset` +\n `?token=${encodeURIComponent(merged.resetHash!)}` +\n `&realmId=${encodeURIComponent(entity.realmId)}` :\n undefined;\n\n const mail = await this.mailTemplateRenderer.render({\n template: MailTemplateName.PASSWORD_RESET,\n params: {\n code: merged.resetHash!,\n url: resetUrl,\n expiresInMinutes: PASSWORD_RESET_EXPIRES_IN_MINUTES,\n },\n locale: context?.locale,\n });\n\n await this.mailClient.send({\n to: entity.email,\n ...mail,\n });\n } catch {\n this.repository.merge(merged, {\n resetHash: null,\n resetExpires: null,\n });\n await this.repository.save(merged);\n\n throw new ValidationError('Password recovery failed. Could not send reset email.');\n }\n\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name: EventName.PASSWORD_RESET_REQUESTED,\n refType: EventRefType.USER,\n refId: merged.id,\n actorType: IdentityType.USER,\n actorId: merged.id,\n actorName: merged.name,\n realmId: merged.realmId,\n });\n\n return { resetExpires: merged.resetExpires! };\n }\n\n async resetPassword(data: Record<string, any>): Promise<PasswordResetResult> {\n if (!this.options.passwordRecoveryEnabled) {\n throw new PasswordRecoveryDisabledError();\n }\n\n const validated = await this.runResetPasswordValidator(data);\n\n await this.repository.validateJoinColumns(validated);\n\n const realm = await this.realmRepository.resolve(validated.realmId, true);\n\n const where: Record<string, any> = {\n ...(validated.name ? { name: validated.name } : {}),\n ...(validated.email ? { email: validated.email } : {}),\n resetHash: validated.token,\n realmId: realm.id,\n };\n\n const entity = await this.repository.findOneBy(where);\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n if (!entity.resetExpires || new Date(entity.resetExpires) < new Date()) {\n throw new ResetTokenExpiredError();\n }\n\n const credentialsService = new UserCredentialsService();\n const hashedPassword = await credentialsService.protect(validated.password);\n\n const merged = this.repository.merge(entity, {\n resetAt: new Date().toISOString(),\n resetHash: null,\n resetExpires: null,\n password: hashedPassword,\n });\n\n await this.repository.save(merged);\n\n await this.eventService?.record({\n scope: EventScope.IDENTITY,\n name: EventName.PASSWORD_RESET_COMPLETED,\n refType: EventRefType.USER,\n refId: merged.id,\n actorType: IdentityType.USER,\n actorId: merged.id,\n actorName: merged.name,\n realmId: merged.realmId,\n });\n\n return { resetAt: merged.resetAt! };\n }\n\n private async runForgotPasswordValidator(data: Record<string, any>) {\n const validator = new Container<any>({});\n\n const oneOfContainer = new Container({ oneOf: true });\n\n oneOfContainer.mount(\n 'email',\n createValidator(\n z.string()\n .trim()\n .toLowerCase()\n .email()\n .regex(/^[^A-Z]+$/, { message: 'Email must be lowercase.' }),\n ),\n );\n\n oneOfContainer.mount(\n 'name',\n createValidator(z.string().trim().toLowerCase().min(1)),\n );\n\n validator.mount(oneOfContainer);\n\n validator.mount(\n 'realmId',\n { optional: true },\n createValidator(z.uuid().nullable()),\n );\n\n return validator.run(data);\n }\n\n private async runResetPasswordValidator(data: Record<string, any>) {\n const validator = new Container<any>({});\n\n const oneOfContainer = new Container({ oneOf: true });\n oneOfContainer.mount(\n 'email',\n createValidator(\n z.string()\n .trim()\n .toLowerCase()\n .email()\n .regex(/^[^A-Z]+$/, { message: 'Email must be lowercase.' }),\n ),\n );\n oneOfContainer.mount(\n 'name',\n createValidator(z.string().trim().toLowerCase().min(1)),\n );\n\n validator.mount(oneOfContainer);\n\n validator.mount(\n 'realmId',\n { optional: true },\n createValidator(z.uuid().nullable()),\n );\n\n validator.mount(\n 'token',\n createValidator(z.string().min(3).max(256)),\n );\n\n validator.mount(\n 'password',\n createValidator(\n z.string()\n .min(this.options.passwordMinLength ?? USER_PASSWORD_MIN_LENGTH)\n .max(USER_PASSWORD_MAX_LENGTH),\n ),\n );\n\n return validator.run(data);\n }\n}\n"],"mappings":"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"}
@@ -2,10 +2,10 @@ import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
4
  import { REGISTRATION_DISABLED_ERROR_INSTANCE } from "./error.mjs";
5
- import { ErrorCode, hasInstanceof, isAuthupError } from "@authup/errors";
5
+ import { ErrorCode, isAuthupError, matchesInstanceof } from "@authup/errors";
6
6
  //#region src/core/identity/registration/check.ts
7
7
  function isRegistrationDisabledError(input) {
8
- if (hasInstanceof(input, REGISTRATION_DISABLED_ERROR_INSTANCE)) return true;
8
+ if (matchesInstanceof(input, REGISTRATION_DISABLED_ERROR_INSTANCE)) return true;
9
9
  if (!isAuthupError(input)) return false;
10
10
  return input.code === ErrorCode.REGISTRATION_DISABLED;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.mjs","names":["ErrorCode","hasInstanceof","isAuthupError","REGISTRATION_DISABLED_ERROR_INSTANCE","isRegistrationDisabledError","input","code","REGISTRATION_DISABLED"],"sources":["../../../../src/core/identity/registration/check.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 { ErrorCode, hasInstanceof, isAuthupError } from '@authup/errors';\nimport { REGISTRATION_DISABLED_ERROR_INSTANCE, type RegistrationDisabledError } from './error.ts';\n\nexport function isRegistrationDisabledError(input: unknown): input is RegistrationDisabledError {\n if (hasInstanceof(input, REGISTRATION_DISABLED_ERROR_INSTANCE)) return true;\n if (!isAuthupError(input)) return false;\n return input.code === ErrorCode.REGISTRATION_DISABLED;\n}\n"],"mappings":";;;;;;AAUA,SAAgBI,4BAA4BC,OAAc;CACtD,IAAIJ,cAAcI,OAAOF,oCAAAA,GAAuC,OAAO;CACvE,IAAI,CAACD,cAAcG,KAAAA,GAAQ,OAAO;CAClC,OAAOA,MAAMC,SAASN,UAAUO;AACpC"}
1
+ {"version":3,"file":"check.mjs","names":["ErrorCode","isAuthupError","matchesInstanceof","REGISTRATION_DISABLED_ERROR_INSTANCE","isRegistrationDisabledError","input","code","REGISTRATION_DISABLED"],"sources":["../../../../src/core/identity/registration/check.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 { ErrorCode, isAuthupError, matchesInstanceof } from '@authup/errors';\nimport { REGISTRATION_DISABLED_ERROR_INSTANCE, type RegistrationDisabledError } from './error.ts';\n\nexport function isRegistrationDisabledError(input: unknown): input is RegistrationDisabledError {\n if (matchesInstanceof(input, REGISTRATION_DISABLED_ERROR_INSTANCE)) return true;\n if (!isAuthupError(input)) return false;\n return input.code === ErrorCode.REGISTRATION_DISABLED;\n}\n"],"mappings":";;;;;;AAUA,SAAgBI,4BAA4BC,OAAc;CACtD,IAAIH,kBAAkBG,OAAOF,oCAAAA,GAAuC,OAAO;CAC3E,IAAI,CAACF,cAAcI,KAAAA,GAAQ,OAAO;CAClC,OAAOA,MAAMC,SAASN,UAAUO;AACpC"}
@@ -7,6 +7,7 @@ import { UserCredentialsService } from "./authentication/credential/entities/use
7
7
  import { BaseCredentialsAuthenticator } from "./authentication/base.mjs";
8
8
  import { ClientAuthenticator } from "./authentication/entities/client/module.mjs";
9
9
  import { UserAuthenticator } from "./authentication/entities/user/module.mjs";
10
+ import { EVENT_ACTOR_NAME_MAX_LENGTH, EVENT_LOG_RETENTION_DAYS_DEFAULT } from "./entities/event/constants.mjs";
10
11
  import { LoginThrottleService } from "./authentication/login-throttle/service.mjs";
11
12
  import { CredentialsAuthenticator } from "./authentication/module.mjs";
12
13
  import { SessionManager } from "./authentication/session/module.mjs";
@@ -14,6 +15,8 @@ import { SESSION_FILTER_KEYS } from "./authentication/session/types.mjs";
14
15
  import "./authentication/index.mjs";
15
16
  import { ClientCertificateValidator, assertClientCertificateEvidenceValidForBinding, buildClientCertificateThumbprint, parseClientCertificateChain } from "./client-certificate/module.mjs";
16
17
  import "./client-certificate/index.mjs";
18
+ import { CLIENT_READ_PERMISSIONS } from "./entities/client/constants.mjs";
19
+ import { RECORD_QUERY_PARAMETERS, describeQuerySchema } from "./query/describe.mjs";
17
20
  import { createRelationsReadGate } from "./query/relations.mjs";
18
21
  import { clientSchema } from "./entities/client/schema.mjs";
19
22
  import { clientPermissionSchema } from "./entities/client-permission/schema.mjs";
@@ -42,13 +45,12 @@ import { userRoleSchema } from "./entities/user-role/schema.mjs";
42
45
  import { appendQueryConditions, decodeQuery, queryCodec, schemaRegistry } from "./query/module.mjs";
43
46
  import "./query/index.mjs";
44
47
  import { ClientService } from "./entities/client/service.mjs";
45
- import { WebClientProvisioner, buildWebClientAttributes } from "./entities/client/web-client.mjs";
48
+ import { WEB_CLIENT_SCOPE_NAMES, WebClientProvisioner, buildWebClientAttributes } from "./entities/client/web-client.mjs";
46
49
  import { applyJunctionCreateGrant, buildJunctionUpdateData } from "./identity/permission/junction-grant.mjs";
47
50
  import { ClientPermissionService } from "./entities/client-permission/service.mjs";
48
51
  import { ClientRoleService } from "./entities/client-role/service.mjs";
49
52
  import { ClientScopeService } from "./entities/client-scope/service.mjs";
50
53
  import { ConsentService } from "./entities/consent/service.mjs";
51
- import { EVENT_LOG_RETENTION_DAYS_DEFAULT } from "./entities/event/constants.mjs";
52
54
  import { EVENT_DIFF_SECRET_KEY_REGEX, EVENT_DIFF_VALUE_MAX_LENGTH, buildEntityDiff } from "./entities/event/diff.mjs";
53
55
  import { EntityEventHandler } from "./entities/event/entity-event-handler.mjs";
54
56
  import { sanitizeEventData } from "./entities/event/sanitize.mjs";
@@ -173,4 +175,4 @@ import { ScopeProvisioningSynchronizer } from "./provisioning/synchronizer/scope
173
175
  import { UserProvisioningSynchronizer } from "./provisioning/synchronizer/user/module.mjs";
174
176
  import "./provisioning/index.mjs";
175
177
  import "./security/index.mjs";
176
- export { BaseCredentialsAuthenticator, CONSENT_FILTER_KEYS, CONSENT_SCOPE_MAX_LENGTH, ClientAuthenticator, ClientCertificateValidator, ClientCredentialsGrant, ClientCredentialsService, ClientPermissionService, ClientProvisioningSynchronizer, ClientProvisioningValidator, ClientRoleService, ClientScopeService, ClientService, ConsentService, CredentialsAuthenticator, EVENT_DIFF_SECRET_KEY_REGEX, EVENT_DIFF_VALUE_MAX_LENGTH, EVENT_LOG_RETENTION_DAYS_DEFAULT, EntityEventHandler, EventService, GraphProvisioningSynchronizer, IDENTITY_PROVIDER_LDAP_COLLECTION_AUTHENTICATOR_TOKEN, IdentityGrantType, IdentityPermissionProvider, IdentityProviderAccountBaseMapper, IdentityProviderAccountManager, IdentityProviderAttributeMapper, IdentityProviderFacebookAuthenticator, IdentityProviderGithubAuthenticator, IdentityProviderGoogleAuthenticator, IdentityProviderInstagramAuthenticator, IdentityProviderLdapAuthenticator, IdentityProviderLdapCollectionAuthenticator, IdentityProviderMapperOperation, IdentityProviderOAuth2Authenticator, IdentityProviderOpenIDAuthenticator, IdentityProviderPaypalAuthenticator, IdentityProviderPermissionMapper, IdentityProviderRoleMapper, IdentityProviderRoleMappingService, IdentityResolver, IdentityRoleProvider, KEY_CERTIFICATE_ERROR_INSTANCE, KeyCertificateError, KeyProvisioner, KeyService, LoginThrottleService, MAIL_TEMPLATE_REGISTRY, MailTemplateName, MailTemplateRenderer, NoopAuthFlowMetrics, OAuth2AccessPolicyEvaluator, OAuth2AccessTokenIssuer, OAuth2Authorization, OAuth2AuthorizationCodeIssuer, OAuth2AuthorizationCodeRequestValidator, OAuth2AuthorizationCodeRequestVerifier, OAuth2AuthorizationCodeVerifier, OAuth2AuthorizationStateManager, OAuth2AuthorizeGrant, OAuth2ClientAuthenticator, OAuth2EndSessionRequestValidator, OAuth2EndSessionService, OAuth2MfaLoginService, OAuth2MfaTokenIssuer, OAuth2OpenIDClaimsBuilder, OAuth2OpenIDTokenIssuer, OAuth2RefreshTokenGrant, OAuth2RefreshTokenIssuer, OAuth2ScopeAttributesResolver, OAuth2TokenRevoker, OAuth2TokenSigner, OAuth2TokenVerifier, PASSWORD_RESET_EXPIRES_IN_MINUTES, PasswordGrantType, PasswordRecoveryService, PermissionBindingPolicyEvaluator, PermissionCheckerService, PermissionPolicyService, PermissionProvisioningRelationsValidator, PermissionProvisioningSynchronizer, PermissionProvisioningValidator, PermissionService, PolicyCheckerService, PolicyEngine, PolicyProvisioningSynchronizer, PolicyProvisioningValidator, PolicyService, ProvisioningEntityResolver, ProvisioningEntityStrategyType, ProvisioningJunctionSynchronizer, ProvisioningStrategyValidator, REALM_CIPHER_BLOB_ERROR_INSTANCE, REALM_CIPHER_BLOB_VERSION, RealmCipher, RealmCipherBlobError, RealmProvisioningSynchronizer, RealmProvisioningValidator, RealmService, RegistrationService, RoleAttributeService, RolePermissionService, RoleProvisioningSynchronizer, RoleProvisioningValidator, RoleService, RootProvisioningValidator, SESSION_FILTER_KEYS, ScopeProvisioningSynchronizer, ScopeProvisioningValidator, ScopeService, SessionManager, SessionService, TrustAnchorService, USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX, USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR, USER_AUTHENTICATOR_ATTEMPT_LOCK_MAX, USER_AUTHENTICATOR_ATTEMPT_WINDOW, USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX, USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES, USER_AUTHENTICATOR_EMAIL_CODE_LENGTH, USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX, USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN, USER_AUTHENTICATOR_FILTER_KEYS, USER_AUTHENTICATOR_RECOVERY_CODE_COUNT, USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX, USER_AUTHENTICATOR_TOTP_ALGORITHM, USER_AUTHENTICATOR_TOTP_DIGITS, USER_AUTHENTICATOR_TOTP_PERIOD, USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX, USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL, USER_AUTHENTICATOR_VERIFY_LOCK_TTL, USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW, USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, UserAttributeService, UserAuthenticator, UserAuthenticatorService, UserCredentialsService, UserPermissionService, UserProvisioningSynchronizer, UserProvisioningValidator, UserRoleService, UserService, WRAPPED_KEY_MATERIAL_PREFIX, WebClientProvisioner, appendQueryConditions, applyJunctionCreateGrant, assertCertificateMatchesKey, assertClientCertificateEvidenceValidForBinding, assertClientGrantAllowed, base64URLEncode, buildCertificateJwkFields, buildClientCertificateThumbprint, buildEntityDiff, buildJunctionUpdateData, buildOAuth2BearerTokenResponse, buildOAuth2CodeChallenge, buildOAuth2TokenHash, buildWebClientAttributes, buildWebauthnAuthenticationOptions, buildWebauthnRegistrationOptions, buildX5c, buildX5tS256, clientPermissionSchema, clientRoleSchema, clientSchema, clientScopeSchema, consentSchema, createIdentityProviderOAuth2Authenticator, createProvisioningEntitiesValidator, createRelationsReadGate, decodeQuery, defineMailTemplate, deriveAmrAcr, eventSchema, generateNumericCode, generateOAuth2CodeVerifier, generateRecoveryCode, guessUserAuthenticatorKindByResponse, identityProviderRoleMappingSchema, identityProviderSchema, isRealmCipherBlobError, isWrappedKeyMaterial, keySchema, normalizeEntityProvisioningStrategy, parseCertificateChain, parseClientCertificateChain, permissionPolicySchema, permissionSchema, policySchema, queryCodec, realmSchema, roleAttributeSchema, rolePermissionSchema, roleSchema, sanitizeEventData, schemaRegistry, scopeSchema, sessionSchema, toIdentityPolicyData, trustAnchorSchema, unwrapKeyMaterial, userAttributeSchema, userAuthenticatorSchema, userPermissionSchema, userRoleSchema, userSchema, verifyWebauthnAuthentication, verifyWebauthnRegistration, wrapKeyMaterial };
178
+ export { BaseCredentialsAuthenticator, CLIENT_READ_PERMISSIONS, CONSENT_FILTER_KEYS, CONSENT_SCOPE_MAX_LENGTH, ClientAuthenticator, ClientCertificateValidator, ClientCredentialsGrant, ClientCredentialsService, ClientPermissionService, ClientProvisioningSynchronizer, ClientProvisioningValidator, ClientRoleService, ClientScopeService, ClientService, ConsentService, CredentialsAuthenticator, EVENT_ACTOR_NAME_MAX_LENGTH, EVENT_DIFF_SECRET_KEY_REGEX, EVENT_DIFF_VALUE_MAX_LENGTH, EVENT_LOG_RETENTION_DAYS_DEFAULT, EntityEventHandler, EventService, GraphProvisioningSynchronizer, IDENTITY_PROVIDER_LDAP_COLLECTION_AUTHENTICATOR_TOKEN, IdentityGrantType, IdentityPermissionProvider, IdentityProviderAccountBaseMapper, IdentityProviderAccountManager, IdentityProviderAttributeMapper, IdentityProviderFacebookAuthenticator, IdentityProviderGithubAuthenticator, IdentityProviderGoogleAuthenticator, IdentityProviderInstagramAuthenticator, IdentityProviderLdapAuthenticator, IdentityProviderLdapCollectionAuthenticator, IdentityProviderMapperOperation, IdentityProviderOAuth2Authenticator, IdentityProviderOpenIDAuthenticator, IdentityProviderPaypalAuthenticator, IdentityProviderPermissionMapper, IdentityProviderRoleMapper, IdentityProviderRoleMappingService, IdentityResolver, IdentityRoleProvider, KEY_CERTIFICATE_ERROR_INSTANCE, KeyCertificateError, KeyProvisioner, KeyService, LoginThrottleService, MAIL_TEMPLATE_REGISTRY, MailTemplateName, MailTemplateRenderer, NoopAuthFlowMetrics, OAuth2AccessPolicyEvaluator, OAuth2AccessTokenIssuer, OAuth2Authorization, OAuth2AuthorizationCodeIssuer, OAuth2AuthorizationCodeRequestValidator, OAuth2AuthorizationCodeRequestVerifier, OAuth2AuthorizationCodeVerifier, OAuth2AuthorizationStateManager, OAuth2AuthorizeGrant, OAuth2ClientAuthenticator, OAuth2EndSessionRequestValidator, OAuth2EndSessionService, OAuth2MfaLoginService, OAuth2MfaTokenIssuer, OAuth2OpenIDClaimsBuilder, OAuth2OpenIDTokenIssuer, OAuth2RefreshTokenGrant, OAuth2RefreshTokenIssuer, OAuth2ScopeAttributesResolver, OAuth2TokenRevoker, OAuth2TokenSigner, OAuth2TokenVerifier, PASSWORD_RESET_EXPIRES_IN_MINUTES, PasswordGrantType, PasswordRecoveryService, PermissionBindingPolicyEvaluator, PermissionCheckerService, PermissionPolicyService, PermissionProvisioningRelationsValidator, PermissionProvisioningSynchronizer, PermissionProvisioningValidator, PermissionService, PolicyCheckerService, PolicyEngine, PolicyProvisioningSynchronizer, PolicyProvisioningValidator, PolicyService, ProvisioningEntityResolver, ProvisioningEntityStrategyType, ProvisioningJunctionSynchronizer, ProvisioningStrategyValidator, REALM_CIPHER_BLOB_ERROR_INSTANCE, REALM_CIPHER_BLOB_VERSION, RECORD_QUERY_PARAMETERS, RealmCipher, RealmCipherBlobError, RealmProvisioningSynchronizer, RealmProvisioningValidator, RealmService, RegistrationService, RoleAttributeService, RolePermissionService, RoleProvisioningSynchronizer, RoleProvisioningValidator, RoleService, RootProvisioningValidator, SESSION_FILTER_KEYS, ScopeProvisioningSynchronizer, ScopeProvisioningValidator, ScopeService, SessionManager, SessionService, TrustAnchorService, USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX, USER_AUTHENTICATOR_ATTEMPT_LOCK_FACTOR, USER_AUTHENTICATOR_ATTEMPT_LOCK_MAX, USER_AUTHENTICATOR_ATTEMPT_WINDOW, USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX, USER_AUTHENTICATOR_EMAIL_CODE_EXPIRES_IN_MINUTES, USER_AUTHENTICATOR_EMAIL_CODE_LENGTH, USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX, USER_AUTHENTICATOR_EMAIL_SEND_COOLDOWN, USER_AUTHENTICATOR_FILTER_KEYS, USER_AUTHENTICATOR_RECOVERY_CODE_COUNT, USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX, USER_AUTHENTICATOR_TOTP_ALGORITHM, USER_AUTHENTICATOR_TOTP_DIGITS, USER_AUTHENTICATOR_TOTP_PERIOD, USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX, USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL, USER_AUTHENTICATOR_VERIFY_LOCK_TTL, USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, USER_AUTHENTICATOR_WEBAUTHN_CHALLENGE_WINDOW, USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, UserAttributeService, UserAuthenticator, UserAuthenticatorService, UserCredentialsService, UserPermissionService, UserProvisioningSynchronizer, UserProvisioningValidator, UserRoleService, UserService, WEB_CLIENT_SCOPE_NAMES, WRAPPED_KEY_MATERIAL_PREFIX, WebClientProvisioner, appendQueryConditions, applyJunctionCreateGrant, assertCertificateMatchesKey, assertClientCertificateEvidenceValidForBinding, assertClientGrantAllowed, base64URLEncode, buildCertificateJwkFields, buildClientCertificateThumbprint, buildEntityDiff, buildJunctionUpdateData, buildOAuth2BearerTokenResponse, buildOAuth2CodeChallenge, buildOAuth2TokenHash, buildWebClientAttributes, buildWebauthnAuthenticationOptions, buildWebauthnRegistrationOptions, buildX5c, buildX5tS256, clientPermissionSchema, clientRoleSchema, clientSchema, clientScopeSchema, consentSchema, createIdentityProviderOAuth2Authenticator, createProvisioningEntitiesValidator, createRelationsReadGate, decodeQuery, defineMailTemplate, deriveAmrAcr, describeQuerySchema, eventSchema, generateNumericCode, generateOAuth2CodeVerifier, generateRecoveryCode, guessUserAuthenticatorKindByResponse, identityProviderRoleMappingSchema, identityProviderSchema, isRealmCipherBlobError, isWrappedKeyMaterial, keySchema, normalizeEntityProvisioningStrategy, parseCertificateChain, parseClientCertificateChain, permissionPolicySchema, permissionSchema, policySchema, queryCodec, realmSchema, roleAttributeSchema, rolePermissionSchema, roleSchema, sanitizeEventData, schemaRegistry, scopeSchema, sessionSchema, toIdentityPolicyData, trustAnchorSchema, unwrapKeyMaterial, userAttributeSchema, userAuthenticatorSchema, userPermissionSchema, userRoleSchema, userSchema, verifyWebauthnAuthentication, verifyWebauthnRegistration, wrapKeyMaterial };
@@ -2,10 +2,10 @@ import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
4
  import { REALM_CIPHER_BLOB_ERROR_INSTANCE } from "./error.mjs";
5
- import { hasInstanceof } from "@authup/errors";
5
+ import { matchesInstanceof } from "@authup/errors";
6
6
  //#region src/core/key/check.ts
7
7
  function isRealmCipherBlobError(input) {
8
- return hasInstanceof(input, REALM_CIPHER_BLOB_ERROR_INSTANCE);
8
+ return matchesInstanceof(input, REALM_CIPHER_BLOB_ERROR_INSTANCE);
9
9
  }
10
10
  //#endregion
11
11
  export { isRealmCipherBlobError };
@@ -1 +1 @@
1
- {"version":3,"file":"check.mjs","names":["hasInstanceof","REALM_CIPHER_BLOB_ERROR_INSTANCE","isRealmCipherBlobError","input"],"sources":["../../../src/core/key/check.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 { hasInstanceof } from '@authup/errors';\nimport { REALM_CIPHER_BLOB_ERROR_INSTANCE, type RealmCipherBlobError } from './error.ts';\n\nexport function isRealmCipherBlobError(input: unknown): input is RealmCipherBlobError {\n return hasInstanceof(input, REALM_CIPHER_BLOB_ERROR_INSTANCE);\n}\n"],"mappings":";;;;;;AAUA,SAAgBE,uBAAuBC,OAAc;CACjD,OAAOH,cAAcG,OAAOF,gCAAAA;AAChC"}
1
+ {"version":3,"file":"check.mjs","names":["matchesInstanceof","REALM_CIPHER_BLOB_ERROR_INSTANCE","isRealmCipherBlobError","input"],"sources":["../../../src/core/key/check.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 { matchesInstanceof } from '@authup/errors';\nimport { REALM_CIPHER_BLOB_ERROR_INSTANCE, type RealmCipherBlobError } from './error.ts';\n\nexport function isRealmCipherBlobError(input: unknown): input is RealmCipherBlobError {\n return matchesInstanceof(input, REALM_CIPHER_BLOB_ERROR_INSTANCE);\n}\n"],"mappings":";;;;;;AAUA,SAAgBE,uBAAuBC,OAAc;CACjD,OAAOH,kBAAkBG,OAAOF,gCAAAA;AACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"relations-validator.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/relations-validator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,oCAAqC,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IAC5F,SAAS,CAAC,UAAU;CAkCvB"}
1
+ {"version":3,"file":"relations-validator.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/relations-validator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,oCAAqC,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IAC5F,SAAS,CAAC,UAAU;CA0CvB"}
@@ -21,6 +21,8 @@ var ClientProvisioningRelationsValidator = class extends Container {
21
21
  this.mount("roles", { optional: true }, createValidator(z.array(z.any()).check(createProvisioningEntitiesValidator(roleValidator))));
22
22
  this.mount("realmRoles", { optional: true }, createValidator(z.array(z.string())));
23
23
  this.mount("globalRoles", { optional: true }, createValidator(z.array(z.string())));
24
+ this.mount("realmScopes", { optional: true }, createValidator(z.array(z.string())));
25
+ this.mount("globalScopes", { optional: true }, createValidator(z.array(z.string())));
24
26
  }
25
27
  };
26
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"relations-validator.mjs","names":["createValidator","Container","z","PermissionProvisioningValidator","RoleProvisioningValidator","createProvisioningEntitiesValidator","ClientProvisioningRelationsValidator","initialize","permissionValidator","roleValidator","mount","optional","array","any","check","string"],"sources":["../../../../../src/core/provisioning/entities/client/relations-validator.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 { createValidator } from '@validup/zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { PermissionProvisioningValidator } from '../permission/index.ts';\nimport { RoleProvisioningValidator } from '../role/index.ts';\nimport { createProvisioningEntitiesValidator } from '../utils.ts';\nimport type { ClientProvisioningRelations } from './types.ts';\n\nexport class ClientProvisioningRelationsValidator extends Container<ClientProvisioningRelations> {\n protected initialize() {\n super.initialize();\n\n const permissionValidator = new PermissionProvisioningValidator();\n const roleValidator = new RoleProvisioningValidator();\n\n this.mount('permissions', { optional: true }, createValidator(\n z\n .array(z.any())\n .check(createProvisioningEntitiesValidator(permissionValidator)),\n ));\n\n this.mount('realmPermissions', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('globalPermissions', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('roles', { optional: true }, createValidator(\n z\n .array(z.any())\n .check(createProvisioningEntitiesValidator(roleValidator)),\n ));\n\n this.mount('realmRoles', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('globalRoles', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n }\n}\n"],"mappings":";;;;;;;;;;;;AAeA,IAAaM,uCAAb,cAA0DL,UAAAA;CAC5CM,aAAa;EACnB,MAAMA,WAAAA;EAEN,MAAMC,sBAAsB,IAAIL,gCAAAA;EAChC,MAAMM,gBAAgB,IAAIL,0BAAAA;EAE1B,KAAKM,MAAM,eAAe,EAAEC,UAAU,KAAK,GAAGX,gBAC1CE,EACKU,MAAMV,EAAEW,IAAG,CAAA,CAAA,CACXC,MAAMT,oCAAoCG,mBAAAA,CAAAA,CAAAA,CAAAA;EAGnD,KAAKE,MAAM,oBAAoB,EAAEC,UAAU,KAAK,GAAGX,gBAC/CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,qBAAqB,EAAEC,UAAU,KAAK,GAAGX,gBAChDE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,SAAS,EAAEC,UAAU,KAAK,GAAGX,gBACpCE,EACKU,MAAMV,EAAEW,IAAG,CAAA,CAAA,CACXC,MAAMT,oCAAoCI,aAAAA,CAAAA,CAAAA,CAAAA;EAGnD,KAAKC,MAAM,cAAc,EAAEC,UAAU,KAAK,GAAGX,gBACzCE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,eAAe,EAAEC,UAAU,KAAK,GAAGX,gBAC1CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;CAExB;AACJ"}
1
+ {"version":3,"file":"relations-validator.mjs","names":["createValidator","Container","z","PermissionProvisioningValidator","RoleProvisioningValidator","createProvisioningEntitiesValidator","ClientProvisioningRelationsValidator","initialize","permissionValidator","roleValidator","mount","optional","array","any","check","string"],"sources":["../../../../../src/core/provisioning/entities/client/relations-validator.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 { createValidator } from '@validup/zod';\nimport { Container } from 'validup';\nimport { z } from 'zod';\nimport { PermissionProvisioningValidator } from '../permission/index.ts';\nimport { RoleProvisioningValidator } from '../role/index.ts';\nimport { createProvisioningEntitiesValidator } from '../utils.ts';\nimport type { ClientProvisioningRelations } from './types.ts';\n\nexport class ClientProvisioningRelationsValidator extends Container<ClientProvisioningRelations> {\n protected initialize() {\n super.initialize();\n\n const permissionValidator = new PermissionProvisioningValidator();\n const roleValidator = new RoleProvisioningValidator();\n\n this.mount('permissions', { optional: true }, createValidator(\n z\n .array(z.any())\n .check(createProvisioningEntitiesValidator(permissionValidator)),\n ));\n\n this.mount('realmPermissions', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('globalPermissions', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('roles', { optional: true }, createValidator(\n z\n .array(z.any())\n .check(createProvisioningEntitiesValidator(roleValidator)),\n ));\n\n this.mount('realmRoles', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('globalRoles', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('realmScopes', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n\n this.mount('globalScopes', { optional: true }, createValidator(\n z.array(z.string()),\n ));\n }\n}\n"],"mappings":";;;;;;;;;;;;AAeA,IAAaM,uCAAb,cAA0DL,UAAAA;CAC5CM,aAAa;EACnB,MAAMA,WAAAA;EAEN,MAAMC,sBAAsB,IAAIL,gCAAAA;EAChC,MAAMM,gBAAgB,IAAIL,0BAAAA;EAE1B,KAAKM,MAAM,eAAe,EAAEC,UAAU,KAAK,GAAGX,gBAC1CE,EACKU,MAAMV,EAAEW,IAAG,CAAA,CAAA,CACXC,MAAMT,oCAAoCG,mBAAAA,CAAAA,CAAAA,CAAAA;EAGnD,KAAKE,MAAM,oBAAoB,EAAEC,UAAU,KAAK,GAAGX,gBAC/CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,qBAAqB,EAAEC,UAAU,KAAK,GAAGX,gBAChDE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,SAAS,EAAEC,UAAU,KAAK,GAAGX,gBACpCE,EACKU,MAAMV,EAAEW,IAAG,CAAA,CAAA,CACXC,MAAMT,oCAAoCI,aAAAA,CAAAA,CAAAA,CAAAA;EAGnD,KAAKC,MAAM,cAAc,EAAEC,UAAU,KAAK,GAAGX,gBACzCE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,eAAe,EAAEC,UAAU,KAAK,GAAGX,gBAC1CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,eAAe,EAAEC,UAAU,KAAK,GAAGX,gBAC1CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;EAGpB,KAAKL,MAAM,gBAAgB,EAAEC,UAAU,KAAK,GAAGX,gBAC3CE,EAAEU,MAAMV,EAAEa,OAAM,CAAA,CAAA,CAAA;CAExB;AACJ"}
@@ -27,6 +27,14 @@ export type ClientProvisioningRelations = {
27
27
  * Assign client to global roles.
28
28
  */
29
29
  globalRoles?: string[];
30
+ /**
31
+ * Assign client to scopes of same realm.
32
+ */
33
+ realmScopes?: string[];
34
+ /**
35
+ * Assign client to global scopes.
36
+ */
37
+ globalScopes?: string[];
30
38
  };
31
39
  export type ClientProvisioningEntity = BaseProvisioningEntity<Client> & {
32
40
  attributes: Partial<Client>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,2BAA2B,GAAG;IACtC;;OAEG;IACH,WAAW,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAE7C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAI7B;;OAEG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAE1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,MAAM,CAAC,GAAG;IACpE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5B,SAAS,CAAC,EAAE,2BAA2B,CAAA;CAC1C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,2BAA2B,GAAG;IACtC;;OAEG;IACH,WAAW,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAE7C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAI7B;;OAEG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAIvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAE3B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,MAAM,CAAC,GAAG;IACpE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5B,SAAS,CAAC,EAAE,2BAA2B,CAAA;CAC1C,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ClientPermission, ClientRole, Permission, Role } from '@authup/core-kit';
1
+ import type { ClientPermission, ClientRole, ClientScope, Permission, Role, Scope } from '@authup/core-kit';
2
2
  import type { IClientRepository } from '../../../entities/index.ts';
3
3
  import type { ClientProvisioningEntity } from '../../entities/client';
4
4
  import type { PermissionProvisioningEntity } from '../../entities/permission';
@@ -12,8 +12,10 @@ export declare class ClientProvisioningSynchronizer extends BaseProvisioningSync
12
12
  protected clientRepository: IClientRepository;
13
13
  protected permissionResolver: ProvisioningEntityResolver<Permission>;
14
14
  protected roleResolver: ProvisioningEntityResolver<Role>;
15
+ protected scopeResolver: ProvisioningEntityResolver<Scope>;
15
16
  protected permissionJunction: ProvisioningJunctionSynchronizer<ClientPermission>;
16
17
  protected roleJunction: ProvisioningJunctionSynchronizer<ClientRole>;
18
+ protected scopeJunction: ProvisioningJunctionSynchronizer<ClientScope>;
17
19
  protected permissionSynchronizer: IProvisioningSynchronizer<PermissionProvisioningEntity>;
18
20
  protected roleSynchronizer: IProvisioningSynchronizer<RoleProvisioningEntity>;
19
21
  constructor(ctx: ClientProvisioningSynchronizerContext);
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/client/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,IAAI,EACP,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,8BAA+B,SAAQ,4BAA4B,CAAC,wBAAwB,CAAC;IACtG,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,gBAAgB,CAAC,CAAC;IAEjF,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;gBAElE,GAAG,EAAE,qCAAqC;IAuBhD,WAAW,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA+GxF"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/client/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,IAAI,EACJ,KAAK,EACR,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,8BAA+B,SAAQ,4BAA4B,CAAC,wBAAwB,CAAC;IACtG,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,YAAY,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,aAAa,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAE3D,SAAS,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,gBAAgB,CAAC,CAAC;IAEjF,SAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,UAAU,CAAC,CAAC;IAErE,SAAS,CAAC,aAAa,EAAE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAEvE,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;gBAElE,GAAG,EAAE,qCAAqC;IA6BhD,WAAW,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAsIxF"}
@@ -13,8 +13,10 @@ var ClientProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
13
13
  clientRepository;
14
14
  permissionResolver;
15
15
  roleResolver;
16
+ scopeResolver;
16
17
  permissionJunction;
17
18
  roleJunction;
19
+ scopeJunction;
18
20
  permissionSynchronizer;
19
21
  roleSynchronizer;
20
22
  constructor(ctx) {
@@ -22,6 +24,7 @@ var ClientProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
22
24
  this.clientRepository = ctx.clientRepository;
23
25
  this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);
24
26
  this.roleResolver = new ProvisioningEntityResolver(ctx.roleRepository);
27
+ this.scopeResolver = new ProvisioningEntityResolver(ctx.scopeRepository, { clientScoped: false });
25
28
  this.permissionJunction = new ProvisioningJunctionSynchronizer({
26
29
  repository: ctx.clientPermissionRepository,
27
30
  ownerKey: "clientId",
@@ -32,6 +35,11 @@ var ClientProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
32
35
  ownerKey: "clientId",
33
36
  ownerRealmKey: "clientRealmId"
34
37
  });
38
+ this.scopeJunction = new ProvisioningJunctionSynchronizer({
39
+ repository: ctx.clientScopeRepository,
40
+ ownerKey: "clientId",
41
+ ownerRealmKey: "clientRealmId"
42
+ });
35
43
  this.permissionSynchronizer = ctx.permissionSynchronizer;
36
44
  this.roleSynchronizer = ctx.roleSynchronizer;
37
45
  }
@@ -57,13 +65,14 @@ var ClientProvisioningSynchronizer = class extends BaseProvisioningSynchronizer
57
65
  case ProvisioningEntityStrategyType.REPLACE:
58
66
  input.attributes.id = attributes.id;
59
67
  attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));
60
- break;
61
68
  }
62
69
  else attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));
63
70
  const permissions = [...await this.permissionResolver.resolveGlobal(input.relations && input.relations.globalPermissions), ...attributes.realmId ? await this.permissionResolver.resolveRealm(input.relations && input.relations.realmPermissions, attributes.realmId) : []];
64
71
  if (permissions.length > 0) await this.permissionJunction.synchronize(attributes, permissions, "permissionId", "permissionRealmId");
65
72
  const roles = [...await this.roleResolver.resolveGlobal(input.relations && input.relations.globalRoles), ...attributes.realmId ? await this.roleResolver.resolveRealm(input.relations && input.relations.realmRoles, attributes.realmId) : []];
66
73
  if (roles.length > 0) await this.roleJunction.synchronize(attributes, roles, "roleId", "roleRealmId");
74
+ const scopes = [...await this.scopeResolver.resolveGlobal(input.relations && input.relations.globalScopes), ...attributes.realmId ? await this.scopeResolver.resolveRealm(input.relations && input.relations.realmScopes, attributes.realmId) : []];
75
+ if (scopes.length > 0) await this.scopeJunction.synchronize(attributes, scopes, "scopeId", "scopeRealmId");
67
76
  if (input.relations && input.relations.permissions) {
68
77
  const children = input.relations.permissions.map((child) => {
69
78
  child.attributes.clientId = attributes.id;
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","ClientProvisioningSynchronizer","clientRepository","permissionResolver","roleResolver","permissionJunction","roleJunction","permissionSynchronizer","roleSynchronizer","ctx","permissionRepository","roleRepository","repository","clientPermissionRepository","ownerKey","ownerRealmKey","clientRoleRepository","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realmId","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","permissions","resolveGlobal","relations","globalPermissions","resolveRealm","realmPermissions","length","roles","globalRoles","realmRoles","children","map","child","clientId","client","synchronizeMany"],"sources":["../../../../../src/core/provisioning/synchronizer/client/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-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 {\n ClientPermission, \n ClientRole, \n Permission, \n Role,\n} from '@authup/core-kit';\nimport { pickRecord } from '@authup/kit';\nimport type { IClientRepository } from '../../../entities/index.ts';\nimport type { ClientProvisioningEntity } from '../../entities/client';\nimport type { PermissionProvisioningEntity } from '../../entities/permission';\nimport type { RoleProvisioningEntity } from '../../entities/role';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport type { IProvisioningSynchronizer } from '../../types.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport { ProvisioningEntityResolver } from '../entity-resolver.ts';\nimport { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';\nimport type { ClientProvisioningSynchronizerContext } from './types.ts';\n\nexport class ClientProvisioningSynchronizer extends BaseProvisioningSynchronizer<ClientProvisioningEntity> {\n protected clientRepository: IClientRepository;\n\n protected permissionResolver: ProvisioningEntityResolver<Permission>;\n\n protected roleResolver: ProvisioningEntityResolver<Role>;\n\n protected permissionJunction: ProvisioningJunctionSynchronizer<ClientPermission>;\n\n protected roleJunction: ProvisioningJunctionSynchronizer<ClientRole>;\n\n protected permissionSynchronizer: IProvisioningSynchronizer<PermissionProvisioningEntity>;\n\n protected roleSynchronizer: IProvisioningSynchronizer<RoleProvisioningEntity>;\n\n constructor(ctx: ClientProvisioningSynchronizerContext) {\n super();\n\n this.clientRepository = ctx.clientRepository;\n\n this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);\n this.roleResolver = new ProvisioningEntityResolver(ctx.roleRepository);\n\n this.permissionJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.clientPermissionRepository,\n ownerKey: 'clientId',\n ownerRealmKey: 'clientRealmId',\n });\n this.roleJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.clientRoleRepository,\n ownerKey: 'clientId',\n ownerRealmKey: 'clientRealmId',\n });\n\n this.permissionSynchronizer = ctx.permissionSynchronizer;\n this.roleSynchronizer = ctx.roleSynchronizer;\n }\n\n async synchronize(input: ClientProvisioningEntity): Promise<ClientProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.clientRepository.findOneBy({\n name: input.attributes.name,\n realmId: input.attributes.realmId || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.clientRepository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.clientRepository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n attributes = await this.clientRepository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));\n }\n\n // Permissions (Global + Realm)\n const permissions = [\n ...await this.permissionResolver.resolveGlobal(\n input.relations && input.relations.globalPermissions,\n ),\n ...(attributes.realmId ?\n await this.permissionResolver.resolveRealm(\n input.relations && input.relations.realmPermissions,\n attributes.realmId,\n ) :\n []),\n ];\n\n if (permissions.length > 0) {\n await this.permissionJunction.synchronize(\n attributes,\n permissions,\n 'permissionId',\n 'permissionRealmId',\n );\n }\n\n // Roles (Global + Realm)\n const roles = [\n ...await this.roleResolver.resolveGlobal(\n input.relations && input.relations.globalRoles,\n ),\n ...(attributes.realmId ?\n await this.roleResolver.resolveRealm(\n input.relations && input.relations.realmRoles,\n attributes.realmId,\n ) :\n []),\n ];\n\n if (roles.length > 0) {\n await this.roleJunction.synchronize(\n attributes,\n roles,\n 'roleId',\n 'roleRealmId',\n );\n }\n\n // Containers\n\n if (input.relations && input.relations.permissions) {\n const children = input.relations.permissions.map((child) => {\n child.attributes.clientId = attributes.id;\n child.attributes.client = attributes;\n return child;\n });\n\n await this.permissionSynchronizer.synchronizeMany(children);\n }\n\n if (input.relations && input.relations.roles) {\n const children = input.relations.roles.map((child) => {\n child.attributes.clientId = attributes.id;\n child.attributes.client = attributes;\n return child;\n });\n\n await this.roleSynchronizer.synchronizeMany(children);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","ProvisioningEntityResolver","ProvisioningJunctionSynchronizer","ClientProvisioningSynchronizer","clientRepository","permissionResolver","roleResolver","scopeResolver","permissionJunction","roleJunction","scopeJunction","permissionSynchronizer","roleSynchronizer","ctx","permissionRepository","roleRepository","scopeRepository","clientScoped","repository","clientPermissionRepository","ownerKey","ownerRealmKey","clientRoleRepository","clientScopeRepository","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realmId","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","permissions","resolveGlobal","relations","globalPermissions","resolveRealm","realmPermissions","length","roles","globalRoles","realmRoles","scopes","globalScopes","realmScopes","children","map","child","clientId","client","synchronizeMany"],"sources":["../../../../../src/core/provisioning/synchronizer/client/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-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 {\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n Role,\n Scope,\n} from '@authup/core-kit';\nimport { pickRecord } from '@authup/kit';\nimport type { IClientRepository } from '../../../entities/index.ts';\nimport type { ClientProvisioningEntity } from '../../entities/client';\nimport type { PermissionProvisioningEntity } from '../../entities/permission';\nimport type { RoleProvisioningEntity } from '../../entities/role';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport type { IProvisioningSynchronizer } from '../../types.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport { ProvisioningEntityResolver } from '../entity-resolver.ts';\nimport { ProvisioningJunctionSynchronizer } from '../junction-synchronizer.ts';\nimport type { ClientProvisioningSynchronizerContext } from './types.ts';\n\nexport class ClientProvisioningSynchronizer extends BaseProvisioningSynchronizer<ClientProvisioningEntity> {\n protected clientRepository: IClientRepository;\n\n protected permissionResolver: ProvisioningEntityResolver<Permission>;\n\n protected roleResolver: ProvisioningEntityResolver<Role>;\n\n protected scopeResolver: ProvisioningEntityResolver<Scope>;\n\n protected permissionJunction: ProvisioningJunctionSynchronizer<ClientPermission>;\n\n protected roleJunction: ProvisioningJunctionSynchronizer<ClientRole>;\n\n protected scopeJunction: ProvisioningJunctionSynchronizer<ClientScope>;\n\n protected permissionSynchronizer: IProvisioningSynchronizer<PermissionProvisioningEntity>;\n\n protected roleSynchronizer: IProvisioningSynchronizer<RoleProvisioningEntity>;\n\n constructor(ctx: ClientProvisioningSynchronizerContext) {\n super();\n\n this.clientRepository = ctx.clientRepository;\n\n this.permissionResolver = new ProvisioningEntityResolver(ctx.permissionRepository);\n this.roleResolver = new ProvisioningEntityResolver(ctx.roleRepository);\n this.scopeResolver = new ProvisioningEntityResolver(ctx.scopeRepository, { clientScoped: false });\n\n this.permissionJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.clientPermissionRepository,\n ownerKey: 'clientId',\n ownerRealmKey: 'clientRealmId',\n });\n this.roleJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.clientRoleRepository,\n ownerKey: 'clientId',\n ownerRealmKey: 'clientRealmId',\n });\n this.scopeJunction = new ProvisioningJunctionSynchronizer({\n repository: ctx.clientScopeRepository,\n ownerKey: 'clientId',\n ownerRealmKey: 'clientRealmId',\n });\n\n this.permissionSynchronizer = ctx.permissionSynchronizer;\n this.roleSynchronizer = ctx.roleSynchronizer;\n }\n\n async synchronize(input: ClientProvisioningEntity): Promise<ClientProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.clientRepository.findOneBy({\n name: input.attributes.name,\n realmId: input.attributes.realmId || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.clientRepository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes, \n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.clientRepository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n attributes = await this.clientRepository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.clientRepository.save(this.clientRepository.create(input.attributes));\n }\n\n // Permissions (Global + Realm)\n const permissions = [\n ...await this.permissionResolver.resolveGlobal(\n input.relations && input.relations.globalPermissions,\n ),\n ...(attributes.realmId ?\n await this.permissionResolver.resolveRealm(\n input.relations && input.relations.realmPermissions,\n attributes.realmId,\n ) :\n []),\n ];\n\n if (permissions.length > 0) {\n await this.permissionJunction.synchronize(\n attributes,\n permissions,\n 'permissionId',\n 'permissionRealmId',\n );\n }\n\n // Roles (Global + Realm)\n const roles = [\n ...await this.roleResolver.resolveGlobal(\n input.relations && input.relations.globalRoles,\n ),\n ...(attributes.realmId ?\n await this.roleResolver.resolveRealm(\n input.relations && input.relations.realmRoles,\n attributes.realmId,\n ) :\n []),\n ];\n\n if (roles.length > 0) {\n await this.roleJunction.synchronize(\n attributes,\n roles,\n 'roleId',\n 'roleRealmId',\n );\n }\n\n // Scopes (Global + Realm). The junction is the only source the\n // /authorize code-request verifier reads scopes from.\n const scopes = [\n ...await this.scopeResolver.resolveGlobal(\n input.relations && input.relations.globalScopes,\n ),\n ...(attributes.realmId ?\n await this.scopeResolver.resolveRealm(\n input.relations && input.relations.realmScopes,\n attributes.realmId,\n ) :\n []),\n ];\n\n if (scopes.length > 0) {\n await this.scopeJunction.synchronize(\n attributes,\n scopes,\n 'scopeId',\n 'scopeRealmId',\n );\n }\n\n // Containers\n\n if (input.relations && input.relations.permissions) {\n const children = input.relations.permissions.map((child) => {\n child.attributes.clientId = attributes.id;\n child.attributes.client = attributes;\n return child;\n });\n\n await this.permissionSynchronizer.synchronizeMany(children);\n }\n\n if (input.relations && input.relations.roles) {\n const children = input.relations.roles.map((child) => {\n child.attributes.clientId = attributes.id;\n child.attributes.client = attributes;\n return child;\n });\n\n await this.roleSynchronizer.synchronizeMany(children);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;AA2BA,IAAaM,iCAAb,cAAoDH,6BAAAA;CACtCI;CAEAC;CAEAC;CAEAC;CAEAC;CAEAC;CAEAC;CAEAC;CAEAC;CAEV,YAAYC,KAA4C;EACpD,MAAK;EAEL,KAAKT,mBAAmBS,IAAIT;EAE5B,KAAKC,qBAAqB,IAAIJ,2BAA2BY,IAAIC,oBAAoB;EACjF,KAAKR,eAAe,IAAIL,2BAA2BY,IAAIE,cAAc;EACrE,KAAKR,gBAAgB,IAAIN,2BAA2BY,IAAIG,iBAAiB,EAAEC,cAAc,MAAM,CAAA;EAE/F,KAAKT,qBAAqB,IAAIN,iCAAiC;GAC3DgB,YAAYL,IAAIM;GAChBC,UAAU;GACVC,eAAe;EACnB,CAAA;EACA,KAAKZ,eAAe,IAAIP,iCAAiC;GACrDgB,YAAYL,IAAIS;GAChBF,UAAU;GACVC,eAAe;EACnB,CAAA;EACA,KAAKX,gBAAgB,IAAIR,iCAAiC;GACtDgB,YAAYL,IAAIU;GAChBH,UAAU;GACVC,eAAe;EACnB,CAAA;EAEA,KAAKV,yBAAyBE,IAAIF;EAClC,KAAKC,mBAAmBC,IAAID;CAChC;CAEA,MAAMY,YAAYC,OAAoE;EAClF,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAW7B,oCAAoC0B,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKvB,iBAAiByB,UAAU;GACnDC,MAAML,MAAME,WAAWG;GACvBC,SAASN,MAAME,WAAWI,WAAW;EACzC,CAAA;EAEA,IAAIH,SAASI,SAASlC,+BAA+BmC,QAAQ;GACzD,IAAIN,YACA,MAAM,KAAKvB,iBAAiB8B,OAAOP,UAAAA;GAEvC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASI,MAAjB;GACI,KAAKlC,+BAA+BqC;IAChCR,aAAa,KAAKvB,iBAAiBgC,MAC/BT,YACAC,SAASD,aACL9B,WAAW4B,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAExBA,aAAa,MAAM,KAAKvB,iBAAiBiC,KAAKV,UAAAA;IAC9C;GACJ,KAAK7B,+BAA+BwC;IAChCb,MAAME,WAAWY,KAAKZ,WAAWY;IACjCZ,aAAa,MAAM,KAAKvB,iBAAiBiC,KAAK,KAAKjC,iBAAiBoC,OAAOf,MAAME,UAAU,CAAA;EAEnG;OAEAA,aAAa,MAAM,KAAKvB,iBAAiBiC,KAAK,KAAKjC,iBAAiBoC,OAAOf,MAAME,UAAU,CAAA;EAI/F,MAAMc,cAAc,CACb,GAAA,MAAM,KAAKpC,mBAAmBqC,cAC7BjB,MAAMkB,aAAalB,MAAMkB,UAAUC,iBAAiB,GAEpDjB,GAAAA,WAAWI,UACX,MAAM,KAAK1B,mBAAmBwC,aAC1BpB,MAAMkB,aAAalB,MAAMkB,UAAUG,kBACnCnB,WAAWI,OAAO,IAEtB,CAAA,CACP;EAED,IAAIU,YAAYM,SAAS,GACrB,MAAM,KAAKvC,mBAAmBgB,YAC1BG,YACAc,aACA,gBACA,mBAAA;EAKR,MAAMO,QAAQ,CACP,GAAA,MAAM,KAAK1C,aAAaoC,cACvBjB,MAAMkB,aAAalB,MAAMkB,UAAUM,WAAW,GAE9CtB,GAAAA,WAAWI,UACX,MAAM,KAAKzB,aAAauC,aACpBpB,MAAMkB,aAAalB,MAAMkB,UAAUO,YACnCvB,WAAWI,OAAO,IAEtB,CAAA,CACP;EAED,IAAIiB,MAAMD,SAAS,GACf,MAAM,KAAKtC,aAAae,YACpBG,YACAqB,OACA,UACA,aAAA;EAMR,MAAMG,SAAS,CACR,GAAA,MAAM,KAAK5C,cAAcmC,cACxBjB,MAAMkB,aAAalB,MAAMkB,UAAUS,YAAY,GAE/CzB,GAAAA,WAAWI,UACX,MAAM,KAAKxB,cAAcsC,aACrBpB,MAAMkB,aAAalB,MAAMkB,UAAUU,aACnC1B,WAAWI,OAAO,IAEtB,CAAA,CACP;EAED,IAAIoB,OAAOJ,SAAS,GAChB,MAAM,KAAKrC,cAAcc,YACrBG,YACAwB,QACA,WACA,cAAA;EAMR,IAAI1B,MAAMkB,aAAalB,MAAMkB,UAAUF,aAAa;GAChD,MAAMa,WAAW7B,MAAMkB,UAAUF,YAAYc,KAAKC,UAAAA;IAC9CA,MAAM7B,WAAW8B,WAAW9B,WAAWY;IACvCiB,MAAM7B,WAAW+B,SAAS/B;IAC1B,OAAO6B;GACX,CAAA;GAEA,MAAM,KAAK7C,uBAAuBgD,gBAAgBL,QAAAA;EACtD;EAEA,IAAI7B,MAAMkB,aAAalB,MAAMkB,UAAUK,OAAO;GAC1C,MAAMM,WAAW7B,MAAMkB,UAAUK,MAAMO,KAAKC,UAAAA;IACxCA,MAAM7B,WAAW8B,WAAW9B,WAAWY;IACvCiB,MAAM7B,WAAW+B,SAAS/B;IAC1B,OAAO6B;GACX,CAAA;GAEA,MAAM,KAAK5C,iBAAiB+C,gBAAgBL,QAAAA;EAChD;EAEA,OAAO;GACH,GAAG7B;GACHE;EACJ;CACJ;AACJ"}
@@ -1,4 +1,4 @@
1
- import type { IClientPermissionRepository, IClientRepository, IClientRoleRepository, IPermissionRepository, IRoleRepository } from '../../../entities/index.ts';
1
+ import type { IClientPermissionRepository, IClientRepository, IClientRoleRepository, IClientScopeRepository, IPermissionRepository, IRoleRepository, IScopeRepository } from '../../../entities/index.ts';
2
2
  import type { PermissionProvisioningEntity } from '../../entities/permission';
3
3
  import type { RoleProvisioningEntity } from '../../entities/role';
4
4
  import type { IProvisioningSynchronizer } from '../../types.ts';
@@ -6,8 +6,10 @@ export type ClientProvisioningSynchronizerContext = {
6
6
  clientRepository: IClientRepository;
7
7
  clientRoleRepository: IClientRoleRepository;
8
8
  clientPermissionRepository: IClientPermissionRepository;
9
+ clientScopeRepository: IClientScopeRepository;
9
10
  roleRepository: IRoleRepository;
10
11
  permissionRepository: IPermissionRepository;
12
+ scopeRepository: IScopeRepository;
11
13
  roleSynchronizer: IProvisioningSynchronizer<RoleProvisioningEntity>;
12
14
  permissionSynchronizer: IProvisioningSynchronizer<PermissionProvisioningEntity>;
13
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,MAAM,qCAAqC,GAAG;IAChD,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,oBAAoB,EAAE,qBAAqB,CAAC;IAC5C,0BAA0B,EAAE,2BAA2B,CAAC;IAExD,cAAc,EAAE,eAAe,CAAC;IAChC,oBAAoB,EAAE,qBAAqB,CAAC;IAE5C,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IACpE,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;CACnF,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,MAAM,qCAAqC,GAAG;IAChD,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,oBAAoB,EAAE,qBAAqB,CAAC;IAC5C,0BAA0B,EAAE,2BAA2B,CAAC;IACxD,qBAAqB,EAAE,sBAAsB,CAAC;IAE9C,cAAc,EAAE,eAAe,CAAC;IAChC,oBAAoB,EAAE,qBAAqB,CAAC;IAC5C,eAAe,EAAE,gBAAgB,CAAC;IAElC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IACpE,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;CACnF,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import type { ObjectLiteral } from '@authup/kit';
2
2
  import type { IEntityRepository } from '@authup/server-kit';
3
+ import type { ProvisioningEntityResolverOptions } from './types.ts';
3
4
  export declare class ProvisioningEntityResolver<T extends ObjectLiteral = ObjectLiteral> {
4
5
  protected repository: IEntityRepository<T>;
5
- constructor(repository: IEntityRepository<T>);
6
+ protected clientScoped: boolean;
7
+ constructor(repository: IEntityRepository<T>, options?: ProvisioningEntityResolverOptions);
6
8
  resolveGlobal(names?: string[]): Promise<T[]>;
7
9
  resolveRealm(names: string[] | undefined, realmId: string): Promise<T[]>;
8
10
  resolveClient(names: string[] | undefined, realmId: string, clientId: string): Promise<T[]>;
11
+ protected resolve(names: string[] | undefined, where: Record<string, any>, clientId?: string | null): Promise<T[]>;
9
12
  }
10
13
  //# sourceMappingURL=entity-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/provisioning/synchronizer/entity-resolver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,qBAAa,0BAA0B,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IAC3E,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAE/B,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAItC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAsB7C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAsBxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAqBpG"}
1
+ {"version":3,"file":"entity-resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/provisioning/synchronizer/entity-resolver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAEpE,qBAAa,0BAA0B,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IAC3E,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;gBAEpB,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,iCAAsC;IAKvF,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAI7C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;cAIjF,OAAO,CACnB,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC/B,OAAO,CAAC,CAAC,EAAE,CAAC;CA0BlB"}
@@ -4,46 +4,31 @@ import.meta.url;
4
4
  //#region src/core/provisioning/synchronizer/entity-resolver.ts
5
5
  var ProvisioningEntityResolver = class {
6
6
  repository;
7
- constructor(repository) {
7
+ clientScoped;
8
+ constructor(repository, options = {}) {
8
9
  this.repository = repository;
10
+ this.clientScoped = options.clientScoped ?? true;
9
11
  }
10
12
  async resolveGlobal(names) {
11
- if (!names || names.length === 0) return [];
12
- names = names.map((name) => name.trim().toLowerCase());
13
- if (names.includes("*")) return this.repository.findManyBy({
14
- realmId: null,
15
- clientId: null
16
- });
17
- return this.repository.findManyBy({
18
- name: names,
19
- realmId: null,
20
- clientId: null
21
- });
13
+ return this.resolve(names, { realmId: null });
22
14
  }
23
15
  async resolveRealm(names, realmId) {
24
- if (!names || names.length === 0) return [];
25
- names = names.map((name) => name.trim().toLowerCase());
26
- if (names.includes("*")) return this.repository.findManyBy({
27
- realmId,
28
- clientId: null
29
- });
30
- return this.repository.findManyBy({
31
- name: names,
32
- realmId,
33
- clientId: null
34
- });
16
+ return this.resolve(names, { realmId });
35
17
  }
36
18
  async resolveClient(names, realmId, clientId) {
19
+ return this.resolve(names, { realmId }, clientId);
20
+ }
21
+ async resolve(names, where, clientId = null) {
37
22
  if (!names || names.length === 0) return [];
38
23
  names = names.map((name) => name.trim().toLowerCase());
39
- if (names.includes("*")) return this.repository.findManyBy({
40
- realmId,
24
+ const conditions = this.clientScoped ? {
25
+ ...where,
41
26
  clientId
42
- });
27
+ } : where;
28
+ if (names.includes("*")) return this.repository.findManyBy(conditions);
43
29
  return this.repository.findManyBy({
44
- name: names,
45
- realmId,
46
- clientId
30
+ ...conditions,
31
+ name: names
47
32
  });
48
33
  }
49
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"entity-resolver.mjs","names":["ProvisioningEntityResolver","repository","resolveGlobal","names","length","map","name","trim","toLowerCase","hasWildcard","includes","findManyBy","realmId","clientId","resolveRealm","resolveClient"],"sources":["../../../../src/core/provisioning/synchronizer/entity-resolver.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 { ObjectLiteral } from '@authup/kit';\nimport type { IEntityRepository } from '@authup/server-kit';\n\nexport class ProvisioningEntityResolver<T extends ObjectLiteral = ObjectLiteral> {\n protected repository: IEntityRepository<T>;\n\n constructor(repository: IEntityRepository<T>) {\n this.repository = repository;\n }\n\n async resolveGlobal(names?: string[]): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realmId: null,\n clientId: null,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realmId: null,\n clientId: null,\n });\n }\n\n async resolveRealm(names: string[] | undefined, realmId: string): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realmId,\n clientId: null,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realmId,\n clientId: null,\n });\n }\n\n async resolveClient(names: string[] | undefined, realmId: string, clientId: string): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n const hasWildcard = names.includes('*');\n if (hasWildcard) {\n return this.repository.findManyBy({\n realmId,\n clientId,\n });\n }\n\n return this.repository.findManyBy({\n name: names,\n realmId,\n clientId,\n });\n }\n}\n"],"mappings":";;;;AAUA,IAAaA,6BAAb,MAAaA;CACCC;CAEV,YAAYA,YAAkC;EAC1C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,cAAcC,OAAgC;EAChD,IAAI,CAACA,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC,SAAS;GACTC,UAAU;EACd,CAAA;EAGJ,OAAO,KAAKZ,WAAWU,WAAW;GAC9BL,MAAMH;GACNS,SAAS;GACTC,UAAU;EACd,CAAA;CACJ;CAEA,MAAMC,aAAaX,OAA6BS,SAA+B;EAC3E,IAAI,CAACT,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC;GACAC,UAAU;EACd,CAAA;EAGJ,OAAO,KAAKZ,WAAWU,WAAW;GAC9BL,MAAMH;GACNS;GACAC,UAAU;EACd,CAAA;CACJ;CAEA,MAAME,cAAcZ,OAA6BS,SAAiBC,UAAgC;EAC9F,IAAI,CAACV,SAASA,MAAMC,WAAW,GAC3B,OAAO,CAAA;EAGXD,QAAQA,MAAME,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAGnD,IADoBL,MAAMO,SAAS,GAC/BD,GACA,OAAO,KAAKR,WAAWU,WAAW;GAC9BC;GACAC;EACJ,CAAA;EAGJ,OAAO,KAAKZ,WAAWU,WAAW;GAC9BL,MAAMH;GACNS;GACAC;EACJ,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"entity-resolver.mjs","names":["ProvisioningEntityResolver","repository","clientScoped","options","resolveGlobal","names","resolve","realmId","resolveRealm","resolveClient","clientId","where","length","map","name","trim","toLowerCase","conditions","includes","findManyBy"],"sources":["../../../../src/core/provisioning/synchronizer/entity-resolver.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 { ObjectLiteral } from '@authup/kit';\nimport type { IEntityRepository } from '@authup/server-kit';\nimport type { ProvisioningEntityResolverOptions } from './types.ts';\n\nexport class ProvisioningEntityResolver<T extends ObjectLiteral = ObjectLiteral> {\n protected repository: IEntityRepository<T>;\n\n protected clientScoped: boolean;\n\n constructor(repository: IEntityRepository<T>, options: ProvisioningEntityResolverOptions = {}) {\n this.repository = repository;\n this.clientScoped = options.clientScoped ?? true;\n }\n\n async resolveGlobal(names?: string[]): Promise<T[]> {\n return this.resolve(names, { realmId: null });\n }\n\n async resolveRealm(names: string[] | undefined, realmId: string): Promise<T[]> {\n return this.resolve(names, { realmId });\n }\n\n async resolveClient(names: string[] | undefined, realmId: string, clientId: string): Promise<T[]> {\n return this.resolve(names, { realmId }, clientId);\n }\n\n protected async resolve(\n names: string[] | undefined,\n where: Record<string, any>,\n clientId: string | null = null,\n ): Promise<T[]> {\n if (!names || names.length === 0) {\n return [];\n }\n\n names = names.map((name) => name.trim().toLowerCase());\n\n // A client-ownable entity must never resolve another owner's rows, so\n // the client dimension is always pinned. Entities without one (scope)\n // opt out, because the predicate would not compile against the table.\n const conditions = this.clientScoped ?\n {\n ...where,\n clientId,\n } :\n where;\n\n if (names.includes('*')) {\n return this.repository.findManyBy(conditions);\n }\n\n return this.repository.findManyBy({\n ...conditions,\n name: names,\n });\n }\n}\n"],"mappings":";;;;AAWA,IAAaA,6BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,YAAkCE,UAA6C,CAAC,GAAG;EAC3F,KAAKF,aAAaA;EAClB,KAAKC,eAAeC,QAAQD,gBAAgB;CAChD;CAEA,MAAME,cAAcC,OAAgC;EAChD,OAAO,KAAKC,QAAQD,OAAO,EAAEE,SAAS,KAAK,CAAA;CAC/C;CAEA,MAAMC,aAAaH,OAA6BE,SAA+B;EAC3E,OAAO,KAAKD,QAAQD,OAAO,EAAEE,QAAQ,CAAA;CACzC;CAEA,MAAME,cAAcJ,OAA6BE,SAAiBG,UAAgC;EAC9F,OAAO,KAAKJ,QAAQD,OAAO,EAAEE,QAAQ,GAAGG,QAAAA;CAC5C;CAEA,MAAgBJ,QACZD,OACAM,OACAD,WAA0B,MACd;EACZ,IAAI,CAACL,SAASA,MAAMO,WAAW,GAC3B,OAAO,CAAA;EAGXP,QAAQA,MAAMQ,KAAKC,SAASA,KAAKC,KAAI,CAAA,CAAGC,YAAW,CAAA;EAKnD,MAAMC,aAAa,KAAKf,eACpB;GACI,GAAGS;GACHD;EACJ,IACAC;EAEJ,IAAIN,MAAMa,SAAS,GAAA,GACf,OAAO,KAAKjB,WAAWkB,WAAWF,UAAAA;EAGtC,OAAO,KAAKhB,WAAWkB,WAAW;GAC9B,GAAGF;GACHH,MAAMT;EACV,CAAA;CACJ;AACJ"}
@@ -7,5 +7,6 @@ export * from './realm/index.ts';
7
7
  export * from './role/index.ts';
8
8
  export * from './root/index.ts';
9
9
  export * from './scope/index.ts';
10
+ export * from './types.ts';
10
11
  export * from './user/index.ts';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/provisioning/synchronizer/index.ts"],"names":[],"mappings":"AAOA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/provisioning/synchronizer/index.ts"],"names":[],"mappings":"AAOA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -40,7 +40,6 @@ var PermissionProvisioningSynchronizer = class extends BaseProvisioningSynchroni
40
40
  case ProvisioningEntityStrategyType.REPLACE:
41
41
  input.attributes.id = attributes.id;
42
42
  attributes = await this.repository.save(this.repository.create(input.attributes));
43
- break;
44
43
  }
45
44
  else attributes = await this.repository.save(this.repository.create(input.attributes));
46
45
  if (input.relations?.policies && input.relations.policies.length > 0) await this.synchronizePolicies(attributes, input.relations.policies);
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","PermissionProvisioningSynchronizer","repository","policyRepository","permissionPolicyRepository","ctx","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realmId","clientId","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","policies","length","synchronizePolicies","permission","policyNames","Error","policyName","policy","findOneByName","trim","toLowerCase","existing","permissionId","policyId","entry","permissionRealmId","policyRealmId"],"sources":["../../../../../src/core/provisioning/synchronizer/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-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 { pickRecord } from '@authup/kit';\nimport type { Permission } from '@authup/core-kit';\nimport type { IPermissionPolicyRepository } from '../../../entities/permission-policy/types.ts';\nimport type { IPermissionRepository, IPolicyRepository } from '../../../entities/index.ts';\nimport type { PermissionProvisioningEntity } from '../../entities/permission';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { PermissionProvisioningSynchronizerContext } from './types.ts';\n\nexport class PermissionProvisioningSynchronizer extends BaseProvisioningSynchronizer<PermissionProvisioningEntity> {\n protected repository : IPermissionRepository;\n\n protected policyRepository?: IPolicyRepository;\n\n protected permissionPolicyRepository?: IPermissionPolicyRepository;\n\n constructor(ctx: PermissionProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.policyRepository = ctx.policyRepository;\n this.permissionPolicyRepository = ctx.permissionPolicyRepository;\n }\n\n async synchronize(input: PermissionProvisioningEntity): Promise<PermissionProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realmId: input.attributes.realmId || null,\n clientId: input.attributes.clientId || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes,\n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (input.relations?.policies && input.relations.policies.length > 0) {\n await this.synchronizePolicies(attributes, input.relations.policies);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n\n private async synchronizePolicies(permission: Permission, policyNames: string[]): Promise<void> {\n if (!this.policyRepository || !this.permissionPolicyRepository) {\n throw new Error(\n 'Provisioning: policy/permissionPolicy repositories must be wired to attach policies to permissions.',\n );\n }\n\n for (const policyName of policyNames) {\n const policy = await this.policyRepository.findOneByName(policyName.trim().toLowerCase());\n if (!policy) {\n throw new Error(\n `Provisioning: policy '${policyName}' not found for permission '${permission.name}'.`,\n );\n }\n\n const existing = await this.permissionPolicyRepository.findOneBy({\n permissionId: permission.id,\n policyId: policy.id,\n });\n if (existing) {\n continue;\n }\n\n const entry = this.permissionPolicyRepository.create({\n permissionId: permission.id,\n permissionRealmId: permission.realmId,\n policyId: policy.id,\n policyRealmId: policy.realmId,\n });\n await this.permissionPolicyRepository.save(entry);\n }\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAaI,qCAAb,cAAwDD,6BAAAA;CAC1CE;CAEAC;CAEAC;CAEV,YAAYC,KAAgD;EACxD,MAAK;EAEL,KAAKH,aAAaG,IAAIH;EACtB,KAAKC,mBAAmBE,IAAIF;EAC5B,KAAKC,6BAA6BC,IAAID;CAC1C;CAEA,MAAME,YAAYC,OAA4E;EAC1F,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAWX,oCAAoCQ,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKP,WAAWS,UAAU;GAC7CC,MAAML,MAAME,WAAWG;GACvBC,SAASN,MAAME,WAAWI,WAAW;GACrCC,UAAUP,MAAME,WAAWK,YAAY;EAC3C,CAAA;EAEA,IAAIJ,SAASK,SAASjB,+BAA+BkB,QAAQ;GACzD,IAAIP,YACA,MAAM,KAAKP,WAAWe,OAAOR,UAAAA;GAEjC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASK,MAAjB;GACI,KAAKjB,+BAA+BoB;IAChCT,aAAa,KAAKP,WAAWiB,MACzBV,YACAC,SAASD,aACLZ,WAAWU,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAGxBA,aAAa,MAAM,KAAKP,WAAWkB,KAAKX,UAAAA;IACxC;GACJ,KAAKX,+BAA+BuB;IAChCd,MAAME,WAAWa,KAAKb,WAAWa;IACjCb,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;IAC/E;EACR;OAEAA,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;EAGnF,IAAIF,MAAMiB,WAAWC,YAAYlB,MAAMiB,UAAUC,SAASC,SAAS,GAC/D,MAAM,KAAKC,oBAAoBlB,YAAYF,MAAMiB,UAAUC,QAAQ;EAGvE,OAAO;GACH,GAAGlB;GACHE;EACJ;CACJ;CAEA,MAAckB,oBAAoBC,YAAwBC,aAAsC;EAC5F,IAAI,CAAC,KAAK1B,oBAAoB,CAAC,KAAKC,4BAChC,MAAM,IAAI0B,MACN,qGAAA;EAIR,KAAK,MAAMC,cAAcF,aAAa;GAClC,MAAMG,SAAS,MAAM,KAAK7B,iBAAiB8B,cAAcF,WAAWG,KAAI,CAAA,CAAGC,YAAW,CAAA;GACtF,IAAI,CAACH,QACD,MAAM,IAAIF,MACN,yBAAyBC,WAAW,8BAA8BH,WAAWhB,KAAK,GAAG;GAQ7F,IAAIwB,MAJmB,KAAKhC,2BAA2BO,UAAU;IAC7D0B,cAAcT,WAAWN;IACzBgB,UAAUN,OAAOV;GACrB,CAAA,GAEI;GAGJ,MAAMiB,QAAQ,KAAKnC,2BAA2BmB,OAAO;IACjDc,cAAcT,WAAWN;IACzBkB,mBAAmBZ,WAAWf;IAC9ByB,UAAUN,OAAOV;IACjBmB,eAAeT,OAAOnB;GAC1B,CAAA;GACA,MAAM,KAAKT,2BAA2BgB,KAAKmB,KAAAA;EAC/C;CACJ;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["pickRecord","ProvisioningEntityStrategyType","normalizeEntityProvisioningStrategy","BaseProvisioningSynchronizer","PermissionProvisioningSynchronizer","repository","policyRepository","permissionPolicyRepository","ctx","synchronize","input","canonicalizeName","attributes","strategy","findOneBy","name","realmId","clientId","type","ABSENT","remove","MERGE","merge","save","REPLACE","id","create","relations","policies","length","synchronizePolicies","permission","policyNames","Error","policyName","policy","findOneByName","trim","toLowerCase","existing","permissionId","policyId","entry","permissionRealmId","policyRealmId"],"sources":["../../../../../src/core/provisioning/synchronizer/permission/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026-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 { pickRecord } from '@authup/kit';\nimport type { Permission } from '@authup/core-kit';\nimport type { IPermissionPolicyRepository } from '../../../entities/permission-policy/types.ts';\nimport type { IPermissionRepository, IPolicyRepository } from '../../../entities/index.ts';\nimport type { PermissionProvisioningEntity } from '../../entities/permission';\nimport { ProvisioningEntityStrategyType, normalizeEntityProvisioningStrategy } from '../../strategy/index.ts';\nimport { BaseProvisioningSynchronizer } from '../base.ts';\nimport type { PermissionProvisioningSynchronizerContext } from './types.ts';\n\nexport class PermissionProvisioningSynchronizer extends BaseProvisioningSynchronizer<PermissionProvisioningEntity> {\n protected repository : IPermissionRepository;\n\n protected policyRepository?: IPolicyRepository;\n\n protected permissionPolicyRepository?: IPermissionPolicyRepository;\n\n constructor(ctx: PermissionProvisioningSynchronizerContext) {\n super();\n\n this.repository = ctx.repository;\n this.policyRepository = ctx.policyRepository;\n this.permissionPolicyRepository = ctx.permissionPolicyRepository;\n }\n\n async synchronize(input: PermissionProvisioningEntity): Promise<PermissionProvisioningEntity> {\n this.canonicalizeName(input.attributes);\n\n const strategy = normalizeEntityProvisioningStrategy(input.strategy);\n\n let attributes = await this.repository.findOneBy({\n name: input.attributes.name,\n realmId: input.attributes.realmId || null,\n clientId: input.attributes.clientId || null,\n });\n\n if (strategy.type === ProvisioningEntityStrategyType.ABSENT) {\n if (attributes) {\n await this.repository.remove(attributes);\n }\n return {\n ...input,\n attributes: attributes || input.attributes,\n };\n }\n\n if (attributes) {\n switch (strategy.type) {\n case ProvisioningEntityStrategyType.MERGE:\n attributes = this.repository.merge(\n attributes,\n strategy.attributes ?\n pickRecord(input.attributes, strategy.attributes) :\n input.attributes,\n );\n\n attributes = await this.repository.save(attributes);\n break;\n case ProvisioningEntityStrategyType.REPLACE:\n input.attributes.id = attributes.id;\n attributes = await this.repository.save(this.repository.create(input.attributes));\n break;\n }\n } else {\n attributes = await this.repository.save(this.repository.create(input.attributes));\n }\n\n if (input.relations?.policies && input.relations.policies.length > 0) {\n await this.synchronizePolicies(attributes, input.relations.policies);\n }\n\n return {\n ...input,\n attributes,\n };\n }\n\n private async synchronizePolicies(permission: Permission, policyNames: string[]): Promise<void> {\n if (!this.policyRepository || !this.permissionPolicyRepository) {\n throw new Error(\n 'Provisioning: policy/permissionPolicy repositories must be wired to attach policies to permissions.',\n );\n }\n\n for (const policyName of policyNames) {\n const policy = await this.policyRepository.findOneByName(policyName.trim().toLowerCase());\n if (!policy) {\n throw new Error(\n `Provisioning: policy '${policyName}' not found for permission '${permission.name}'.`,\n );\n }\n\n const existing = await this.permissionPolicyRepository.findOneBy({\n permissionId: permission.id,\n policyId: policy.id,\n });\n if (existing) {\n continue;\n }\n\n const entry = this.permissionPolicyRepository.create({\n permissionId: permission.id,\n permissionRealmId: permission.realmId,\n policyId: policy.id,\n policyRealmId: policy.realmId,\n });\n await this.permissionPolicyRepository.save(entry);\n }\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAaI,qCAAb,cAAwDD,6BAAAA;CAC1CE;CAEAC;CAEAC;CAEV,YAAYC,KAAgD;EACxD,MAAK;EAEL,KAAKH,aAAaG,IAAIH;EACtB,KAAKC,mBAAmBE,IAAIF;EAC5B,KAAKC,6BAA6BC,IAAID;CAC1C;CAEA,MAAME,YAAYC,OAA4E;EAC1F,KAAKC,iBAAiBD,MAAME,UAAU;EAEtC,MAAMC,WAAWX,oCAAoCQ,MAAMG,QAAQ;EAEnE,IAAID,aAAa,MAAM,KAAKP,WAAWS,UAAU;GAC7CC,MAAML,MAAME,WAAWG;GACvBC,SAASN,MAAME,WAAWI,WAAW;GACrCC,UAAUP,MAAME,WAAWK,YAAY;EAC3C,CAAA;EAEA,IAAIJ,SAASK,SAASjB,+BAA+BkB,QAAQ;GACzD,IAAIP,YACA,MAAM,KAAKP,WAAWe,OAAOR,UAAAA;GAEjC,OAAO;IACH,GAAGF;IACHE,YAAYA,cAAcF,MAAME;GACpC;EACJ;EAEA,IAAIA,YACA,QAAQC,SAASK,MAAjB;GACI,KAAKjB,+BAA+BoB;IAChCT,aAAa,KAAKP,WAAWiB,MACzBV,YACAC,SAASD,aACLZ,WAAWU,MAAME,YAAYC,SAASD,UAAU,IAChDF,MAAME,UAAU;IAGxBA,aAAa,MAAM,KAAKP,WAAWkB,KAAKX,UAAAA;IACxC;GACJ,KAAKX,+BAA+BuB;IAChCd,MAAME,WAAWa,KAAKb,WAAWa;IACjCb,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;EAEvF;OAEAA,aAAa,MAAM,KAAKP,WAAWkB,KAAK,KAAKlB,WAAWqB,OAAOhB,MAAME,UAAU,CAAA;EAGnF,IAAIF,MAAMiB,WAAWC,YAAYlB,MAAMiB,UAAUC,SAASC,SAAS,GAC/D,MAAM,KAAKC,oBAAoBlB,YAAYF,MAAMiB,UAAUC,QAAQ;EAGvE,OAAO;GACH,GAAGlB;GACHE;EACJ;CACJ;CAEA,MAAckB,oBAAoBC,YAAwBC,aAAsC;EAC5F,IAAI,CAAC,KAAK1B,oBAAoB,CAAC,KAAKC,4BAChC,MAAM,IAAI0B,MACN,qGAAA;EAIR,KAAK,MAAMC,cAAcF,aAAa;GAClC,MAAMG,SAAS,MAAM,KAAK7B,iBAAiB8B,cAAcF,WAAWG,KAAI,CAAA,CAAGC,YAAW,CAAA;GACtF,IAAI,CAACH,QACD,MAAM,IAAIF,MACN,yBAAyBC,WAAW,8BAA8BH,WAAWhB,KAAK,GAAG;GAQ7F,IAAIwB,MAJmB,KAAKhC,2BAA2BO,UAAU;IAC7D0B,cAAcT,WAAWN;IACzBgB,UAAUN,OAAOV;GACrB,CAAA,GAEI;GAGJ,MAAMiB,QAAQ,KAAKnC,2BAA2BmB,OAAO;IACjDc,cAAcT,WAAWN;IACzBkB,mBAAmBZ,WAAWf;IAC9ByB,UAAUN,OAAOV;IACjBmB,eAAeT,OAAOnB;GAC1B,CAAA;GACA,MAAM,KAAKT,2BAA2BgB,KAAKmB,KAAAA;EAC/C;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/realm/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;IAExC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;IAElF,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,iBAAiB,EAAG,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;gBAErE,GAAG,EAAE,oCAAoC;IAW/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA8FtF"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/synchronizer/realm/module.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,qBAAa,6BAA8B,SAAQ,4BAA4B,CAAC,uBAAuB,CAAC;IACpG,SAAS,CAAC,UAAU,EAAG,gBAAgB,CAAC;IAExC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;IAElF,SAAS,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IAE1F,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAE9E,SAAS,CAAC,iBAAiB,EAAG,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;gBAErE,GAAG,EAAE,oCAAoC;IAW/C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAgGtF"}