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

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 (410) 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/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts +25 -0
  5. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  6. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs +60 -0
  7. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  8. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts +25 -0
  9. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  10. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs +60 -0
  11. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  12. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +1 -1
  13. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  14. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +1 -1
  15. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  16. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs +1 -1
  17. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs.map +1 -1
  18. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +1 -1
  19. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  20. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +1 -1
  21. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  22. package/dist/adapters/http/controllers/entities/client/module.d.ts +6 -6
  23. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  24. package/dist/adapters/http/controllers/entities/client/module.mjs +30 -7
  25. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  26. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts +5 -5
  27. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts.map +1 -1
  28. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +23 -5
  29. package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
  30. package/dist/adapters/http/controllers/entities/client-role/module.d.ts +4 -4
  31. package/dist/adapters/http/controllers/entities/client-role/module.d.ts.map +1 -1
  32. package/dist/adapters/http/controllers/entities/client-role/module.mjs +19 -4
  33. package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
  34. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts +4 -4
  35. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts.map +1 -1
  36. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +19 -4
  37. package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
  38. package/dist/adapters/http/controllers/entities/consent/module.d.ts +3 -3
  39. package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -1
  40. package/dist/adapters/http/controllers/entities/consent/module.mjs +15 -3
  41. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
  42. package/dist/adapters/http/controllers/entities/event/module.d.ts +2 -2
  43. package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -1
  44. package/dist/adapters/http/controllers/entities/event/module.mjs +11 -2
  45. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
  46. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts +5 -5
  47. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts.map +1 -1
  48. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +23 -5
  49. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
  50. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +6 -6
  51. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  52. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +23 -7
  53. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  54. package/dist/adapters/http/controllers/entities/key/module.d.ts +5 -5
  55. package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
  56. package/dist/adapters/http/controllers/entities/key/module.mjs +23 -5
  57. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
  58. package/dist/adapters/http/controllers/entities/permission/module.d.ts +6 -6
  59. package/dist/adapters/http/controllers/entities/permission/module.d.ts.map +1 -1
  60. package/dist/adapters/http/controllers/entities/permission/module.mjs +27 -6
  61. package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
  62. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts +4 -4
  63. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts.map +1 -1
  64. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +19 -4
  65. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
  66. package/dist/adapters/http/controllers/entities/policy/module.d.ts +7 -7
  67. package/dist/adapters/http/controllers/entities/policy/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/entities/policy/module.mjs +27 -6
  69. package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/entities/realm/module.d.ts +6 -6
  71. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  72. package/dist/adapters/http/controllers/entities/realm/module.mjs +29 -8
  73. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  74. package/dist/adapters/http/controllers/entities/role/module.d.ts +6 -6
  75. package/dist/adapters/http/controllers/entities/role/module.d.ts.map +1 -1
  76. package/dist/adapters/http/controllers/entities/role/module.mjs +27 -6
  77. package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
  78. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts +5 -5
  79. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts.map +1 -1
  80. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +23 -5
  81. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
  82. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts +5 -5
  83. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts.map +1 -1
  84. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +23 -5
  85. package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
  86. package/dist/adapters/http/controllers/entities/scope/module.d.ts +6 -6
  87. package/dist/adapters/http/controllers/entities/scope/module.d.ts.map +1 -1
  88. package/dist/adapters/http/controllers/entities/scope/module.mjs +27 -6
  89. package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
  90. package/dist/adapters/http/controllers/entities/session/module.d.ts +3 -3
  91. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
  92. package/dist/adapters/http/controllers/entities/session/module.mjs +15 -3
  93. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  94. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +5 -5
  95. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -1
  96. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +23 -5
  97. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
  98. package/dist/adapters/http/controllers/entities/user/module.d.ts +6 -6
  99. package/dist/adapters/http/controllers/entities/user/module.d.ts.map +1 -1
  100. package/dist/adapters/http/controllers/entities/user/module.mjs +27 -6
  101. package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
  102. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts +5 -5
  103. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts.map +1 -1
  104. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +23 -5
  105. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
  106. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +4 -4
  107. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -1
  108. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +19 -4
  109. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
  110. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts +5 -5
  111. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts.map +1 -1
  112. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +23 -5
  113. package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
  114. package/dist/adapters/http/controllers/entities/user-role/module.d.ts +4 -4
  115. package/dist/adapters/http/controllers/entities/user-role/module.d.ts.map +1 -1
  116. package/dist/adapters/http/controllers/entities/user-role/module.mjs +19 -4
  117. package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
  118. package/dist/adapters/http/controllers/index.mjs +2 -1
  119. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -1
  120. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  121. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  122. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  123. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  124. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
  125. package/dist/adapters/http/controllers/workflows/logout/module.mjs +5 -1
  126. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  127. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts +2 -0
  128. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts.map +1 -0
  129. package/dist/adapters/http/controllers/workflows/userinfo/index.mjs +5 -0
  130. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts +18 -0
  131. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -0
  132. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +53 -0
  133. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -0
  134. package/dist/adapters/http/index.mjs +2 -1
  135. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -0
  136. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  137. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +8 -0
  138. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  139. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  140. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +2 -0
  141. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  142. package/dist/adapters/http/request/event-context.mjs +1 -1
  143. package/dist/adapters/http/request/event-context.mjs.map +1 -1
  144. package/dist/app/factory.d.ts +2 -1
  145. package/dist/app/factory.d.ts.map +1 -1
  146. package/dist/app/factory.mjs +2 -2
  147. package/dist/app/factory.mjs.map +1 -1
  148. package/dist/app/index.d.ts +1 -0
  149. package/dist/app/index.d.ts.map +1 -1
  150. package/dist/app/index.mjs +5 -1
  151. package/dist/app/modules/authentication/repositories/session.mjs +2 -2
  152. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  153. package/dist/app/modules/components/module.d.ts +3 -0
  154. package/dist/app/modules/components/module.d.ts.map +1 -1
  155. package/dist/app/modules/components/module.mjs +17 -2
  156. package/dist/app/modules/components/module.mjs.map +1 -1
  157. package/dist/app/modules/config/constants.d.ts +1 -0
  158. package/dist/app/modules/config/constants.d.ts.map +1 -1
  159. package/dist/app/modules/config/constants.mjs +1 -0
  160. package/dist/app/modules/config/constants.mjs.map +1 -1
  161. package/dist/app/modules/config/helpers.d.ts +9 -0
  162. package/dist/app/modules/config/helpers.d.ts.map +1 -0
  163. package/dist/app/modules/config/helpers.mjs +21 -0
  164. package/dist/app/modules/config/helpers.mjs.map +1 -0
  165. package/dist/app/modules/config/index.d.ts +2 -0
  166. package/dist/app/modules/config/index.d.ts.map +1 -1
  167. package/dist/app/modules/config/index.mjs +6 -1
  168. package/dist/app/modules/config/module.d.ts.map +1 -1
  169. package/dist/app/modules/config/module.mjs +2 -7
  170. package/dist/app/modules/config/module.mjs.map +1 -1
  171. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  172. package/dist/app/modules/config/normalize.mjs +4 -0
  173. package/dist/app/modules/config/normalize.mjs.map +1 -1
  174. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  175. package/dist/app/modules/config/read/env.mjs +2 -0
  176. package/dist/app/modules/config/read/env.mjs.map +1 -1
  177. package/dist/app/modules/config/read/fs.d.ts.map +1 -1
  178. package/dist/app/modules/config/read/fs.mjs +31 -8
  179. package/dist/app/modules/config/read/fs.mjs.map +1 -1
  180. package/dist/app/modules/config/trust-proxy.d.ts +28 -0
  181. package/dist/app/modules/config/trust-proxy.d.ts.map +1 -0
  182. package/dist/app/modules/config/trust-proxy.mjs +64 -0
  183. package/dist/app/modules/config/trust-proxy.mjs.map +1 -0
  184. package/dist/app/modules/config/types.d.ts +18 -0
  185. package/dist/app/modules/config/types.d.ts.map +1 -1
  186. package/dist/app/modules/config/validator.d.ts.map +1 -1
  187. package/dist/app/modules/config/validator.mjs +7 -0
  188. package/dist/app/modules/config/validator.mjs.map +1 -1
  189. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  190. package/dist/app/modules/database/repositories/client/repository.mjs +3 -4
  191. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  192. package/dist/app/modules/database/repositories/client-permission/repository.mjs +2 -2
  193. package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
  194. package/dist/app/modules/database/repositories/client-role/repository.mjs +2 -2
  195. package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
  196. package/dist/app/modules/database/repositories/client-scope/repository.mjs +2 -2
  197. package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
  198. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  199. package/dist/app/modules/database/repositories/event/repository.mjs +4 -3
  200. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  201. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +2 -2
  202. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  203. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +2 -2
  204. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
  205. package/dist/app/modules/database/repositories/key/repository.mjs +2 -2
  206. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  207. package/dist/app/modules/database/repositories/permission/repository.mjs +2 -2
  208. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  209. package/dist/app/modules/database/repositories/permission-policy/repository.mjs +2 -2
  210. package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
  211. package/dist/app/modules/database/repositories/policy/repository.mjs +2 -2
  212. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  213. package/dist/app/modules/database/repositories/query.d.ts +20 -0
  214. package/dist/app/modules/database/repositories/query.d.ts.map +1 -1
  215. package/dist/app/modules/database/repositories/query.mjs +26 -3
  216. package/dist/app/modules/database/repositories/query.mjs.map +1 -1
  217. package/dist/app/modules/database/repositories/realm/repository.mjs +2 -2
  218. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  219. package/dist/app/modules/database/repositories/role/repository.mjs +2 -2
  220. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  221. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -2
  222. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  223. package/dist/app/modules/database/repositories/role-permission/repository.mjs +2 -2
  224. package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
  225. package/dist/app/modules/database/repositories/schema-validation.d.ts +17 -3
  226. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
  227. package/dist/app/modules/database/repositories/schema-validation.mjs +29 -5
  228. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
  229. package/dist/app/modules/database/repositories/scope/repository.mjs +2 -2
  230. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  231. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +2 -2
  232. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
  233. package/dist/app/modules/database/repositories/user/repository.mjs +2 -2
  234. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  235. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -2
  236. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  237. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +2 -2
  238. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
  239. package/dist/app/modules/database/repositories/user-permission/repository.mjs +2 -2
  240. package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
  241. package/dist/app/modules/database/repositories/user-role/repository.mjs +2 -2
  242. package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
  243. package/dist/app/modules/http/constants.d.ts +2 -13
  244. package/dist/app/modules/http/constants.d.ts.map +1 -1
  245. package/dist/app/modules/http/constants.mjs.map +1 -1
  246. package/dist/app/modules/http/module.d.ts.map +1 -1
  247. package/dist/app/modules/http/module.mjs +7 -1
  248. package/dist/app/modules/http/module.mjs.map +1 -1
  249. package/dist/app/modules/http/modules/controller.d.ts +4 -2
  250. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  251. package/dist/app/modules/http/modules/controller.mjs +16 -3
  252. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  253. package/dist/app/modules/index.mjs +5 -1
  254. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +2 -2
  255. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  256. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  257. package/dist/app/modules/provisioning/module.mjs +12 -4
  258. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  259. package/dist/app/types.d.ts +5 -0
  260. package/dist/app/types.d.ts.map +1 -0
  261. package/dist/app/types.mjs +4 -0
  262. package/dist/cli/commands/healthcheck.d.ts +2 -1
  263. package/dist/cli/commands/healthcheck.d.ts.map +1 -1
  264. package/dist/cli/commands/healthcheck.mjs +3 -2
  265. package/dist/cli/commands/healthcheck.mjs.map +1 -1
  266. package/dist/cli/commands/index.d.ts +0 -1
  267. package/dist/cli/commands/index.d.ts.map +1 -1
  268. package/dist/cli/commands/index.mjs +1 -2
  269. package/dist/cli/commands/migration.d.ts +2 -1
  270. package/dist/cli/commands/migration.d.ts.map +1 -1
  271. package/dist/cli/commands/migration.mjs +3 -2
  272. package/dist/cli/commands/migration.mjs.map +1 -1
  273. package/dist/cli/commands/start.d.ts +2 -1
  274. package/dist/cli/commands/start.d.ts.map +1 -1
  275. package/dist/cli/commands/start.mjs +3 -2
  276. package/dist/cli/commands/start.mjs.map +1 -1
  277. package/dist/cli/config.d.ts +18 -0
  278. package/dist/cli/config.d.ts.map +1 -0
  279. package/dist/cli/config.mjs +34 -0
  280. package/dist/cli/config.mjs.map +1 -0
  281. package/dist/cli/module.d.ts +8 -8
  282. package/dist/cli/module.d.ts.map +1 -1
  283. package/dist/cli/module.mjs +8 -28
  284. package/dist/cli/module.mjs.map +1 -1
  285. package/dist/cli/types.d.ts +5 -0
  286. package/dist/cli/types.d.ts.map +1 -0
  287. package/dist/cli/types.mjs +4 -0
  288. package/dist/components/event-cleaner/module.d.ts.map +1 -1
  289. package/dist/components/event-cleaner/module.mjs +26 -14
  290. package/dist/components/event-cleaner/module.mjs.map +1 -1
  291. package/dist/components/index.d.ts +0 -1
  292. package/dist/components/index.d.ts.map +1 -1
  293. package/dist/components/index.mjs +1 -4
  294. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  295. package/dist/components/oauth2-cleaner/module.mjs +29 -17
  296. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  297. package/dist/components/types.d.ts +1 -0
  298. package/dist/components/types.d.ts.map +1 -1
  299. package/dist/core/authentication/login-throttle/service.d.ts.map +1 -1
  300. package/dist/core/authentication/login-throttle/service.mjs +2 -1
  301. package/dist/core/authentication/login-throttle/service.mjs.map +1 -1
  302. package/dist/core/entities/client/constants.d.ts +10 -0
  303. package/dist/core/entities/client/constants.d.ts.map +1 -0
  304. package/dist/core/entities/client/constants.mjs +20 -0
  305. package/dist/core/entities/client/constants.mjs.map +1 -0
  306. package/dist/core/entities/client/index.d.ts +1 -0
  307. package/dist/core/entities/client/index.d.ts.map +1 -1
  308. package/dist/core/entities/client/index.mjs +3 -2
  309. package/dist/core/entities/client/schema.d.ts.map +1 -1
  310. package/dist/core/entities/client/schema.mjs +40 -3
  311. package/dist/core/entities/client/schema.mjs.map +1 -1
  312. package/dist/core/entities/client/service.d.ts.map +1 -1
  313. package/dist/core/entities/client/service.mjs +8 -60
  314. package/dist/core/entities/client/service.mjs.map +1 -1
  315. package/dist/core/entities/client/web-client.d.ts +39 -3
  316. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  317. package/dist/core/entities/client/web-client.mjs +68 -12
  318. package/dist/core/entities/client/web-client.mjs.map +1 -1
  319. package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
  320. package/dist/core/entities/client-scope/schema.mjs +3 -1
  321. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  322. package/dist/core/entities/event/constants.d.ts +7 -0
  323. package/dist/core/entities/event/constants.d.ts.map +1 -1
  324. package/dist/core/entities/event/constants.mjs +7 -1
  325. package/dist/core/entities/event/constants.mjs.map +1 -1
  326. package/dist/core/entities/event/index.mjs +2 -2
  327. package/dist/core/entities/event/service.mjs +1 -1
  328. package/dist/core/entities/event/service.mjs.map +1 -1
  329. package/dist/core/entities/index.mjs +4 -3
  330. package/dist/core/entities/role/schema.d.ts.map +1 -1
  331. package/dist/core/entities/role/schema.mjs +4 -0
  332. package/dist/core/entities/role/schema.mjs.map +1 -1
  333. package/dist/core/entities/session/schema.d.ts.map +1 -1
  334. package/dist/core/entities/session/schema.mjs +2 -0
  335. package/dist/core/entities/session/schema.mjs.map +1 -1
  336. package/dist/core/entities/user/schema.d.ts.map +1 -1
  337. package/dist/core/entities/user/schema.mjs +2 -0
  338. package/dist/core/entities/user/schema.mjs.map +1 -1
  339. package/dist/core/identity/password-recovery/check.mjs +4 -4
  340. package/dist/core/identity/password-recovery/check.mjs.map +1 -1
  341. package/dist/core/identity/registration/check.mjs +2 -2
  342. package/dist/core/identity/registration/check.mjs.map +1 -1
  343. package/dist/core/index.mjs +5 -3
  344. package/dist/core/key/check.mjs +2 -2
  345. package/dist/core/key/check.mjs.map +1 -1
  346. package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
  347. package/dist/core/provisioning/entities/client/relations-validator.mjs +2 -0
  348. package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
  349. package/dist/core/provisioning/entities/client/types.d.ts +8 -0
  350. package/dist/core/provisioning/entities/client/types.d.ts.map +1 -1
  351. package/dist/core/provisioning/synchronizer/client/module.d.ts +3 -1
  352. package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
  353. package/dist/core/provisioning/synchronizer/client/module.mjs +10 -0
  354. package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
  355. package/dist/core/provisioning/synchronizer/client/types.d.ts +3 -1
  356. package/dist/core/provisioning/synchronizer/client/types.d.ts.map +1 -1
  357. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts +4 -1
  358. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
  359. package/dist/core/provisioning/synchronizer/entity-resolver.mjs +14 -29
  360. package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
  361. package/dist/core/provisioning/synchronizer/index.d.ts +1 -0
  362. package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
  363. package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
  364. package/dist/core/provisioning/synchronizer/realm/module.mjs +8 -8
  365. package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
  366. package/dist/core/provisioning/synchronizer/types.d.ts +11 -0
  367. package/dist/core/provisioning/synchronizer/types.d.ts.map +1 -0
  368. package/dist/core/provisioning/synchronizer/types.mjs +4 -0
  369. package/dist/core/query/describe.d.ts +25 -0
  370. package/dist/core/query/describe.d.ts.map +1 -0
  371. package/dist/core/query/describe.mjs +50 -0
  372. package/dist/core/query/describe.mjs.map +1 -0
  373. package/dist/core/query/fields.d.ts +44 -0
  374. package/dist/core/query/fields.d.ts.map +1 -0
  375. package/dist/core/query/fields.mjs +46 -0
  376. package/dist/core/query/fields.mjs.map +1 -0
  377. package/dist/core/query/index.d.ts +1 -0
  378. package/dist/core/query/index.d.ts.map +1 -1
  379. package/dist/core/query/index.mjs +2 -1
  380. package/dist/core/query/module.d.ts +1 -1
  381. package/dist/core/query/module.mjs +1 -1
  382. package/dist/core/query/module.mjs.map +1 -1
  383. package/dist/index.mjs +6 -2
  384. package/dist/swagger.json +852 -145
  385. package/dist/ui/client/.vite/ssr-manifest.json +862 -754
  386. package/dist/ui/client/assets/index-Bk6-OZy9.css +2 -0
  387. package/dist/ui/client/assets/index-DO6_7NTJ.js +106 -0
  388. package/dist/ui/client/index.html +2 -2
  389. package/dist/ui/server/server.js +152569 -156411
  390. package/package.json +40 -40
  391. package/dist/cli/commands/reset.d.ts +0 -2
  392. package/dist/cli/commands/reset.d.ts.map +0 -1
  393. package/dist/cli/commands/reset.mjs +0 -23
  394. package/dist/cli/commands/reset.mjs.map +0 -1
  395. package/dist/components/database/index.d.ts +0 -2
  396. package/dist/components/database/index.d.ts.map +0 -1
  397. package/dist/components/database/index.mjs +0 -7
  398. package/dist/components/database/unique-entries/factory.d.ts +0 -4
  399. package/dist/components/database/unique-entries/factory.d.ts.map +0 -1
  400. package/dist/components/database/unique-entries/factory.mjs +0 -12
  401. package/dist/components/database/unique-entries/factory.mjs.map +0 -1
  402. package/dist/components/database/unique-entries/index.d.ts +0 -3
  403. package/dist/components/database/unique-entries/index.d.ts.map +0 -1
  404. package/dist/components/database/unique-entries/index.mjs +0 -6
  405. package/dist/components/database/unique-entries/module.d.ts +0 -15
  406. package/dist/components/database/unique-entries/module.d.ts.map +0 -1
  407. package/dist/components/database/unique-entries/module.mjs +0 -69
  408. package/dist/components/database/unique-entries/module.mjs.map +0 -1
  409. package/dist/ui/client/assets/index-CiHrf73J.css +0 -2
  410. package/dist/ui/client/assets/index-mtJngmng.js +0 -131
@@ -11,8 +11,28 @@ import type { EntityRepositoryPaginationMeta } from '@authup/server-kit';
11
11
  * Joins triggered by the parsed relations replicate the DISTINCT-id
12
12
  * pattern: when the builder already groups by the root id, every join
13
13
  * contributes its own `GROUP BY <alias>.id`.
14
+ *
15
+ * Field visibility conditions (`IField.condition`, attached by a
16
+ * schema `fields.validateMany` gate) cannot go into the statement — a
17
+ * TypeORM selection must stay a bare column for entity hydration.
18
+ * The adapter projects the gated column unconditionally and
19
+ * force-selects every column its condition reads (rapiq#830's operand
20
+ * projection — the SQL counterpart of the plan-039 force-select
21
+ * discipline, so a sparse replace-projection can neither over-redact
22
+ * nor fail open on missing operands); the fetching adapter MUST then
23
+ * run the rows through `redactFieldConditions` before returning them.
14
24
  */
15
25
  export declare function applyQuery(queryBuilder: SelectQueryBuilder<any>, query?: IQuery): {
16
26
  pagination: EntityRepositoryPaginationMeta;
17
27
  };
28
+ /**
29
+ * Enforce the field visibility conditions of a decoded query on
30
+ * already-fetched rows: a gated column is dropped from every row that
31
+ * fails its condition; no row is ever removed. The SQL execution path
32
+ * projects gated columns unconditionally, so EVERY `findMany` adapter
33
+ * must pass its fetched entities through this before returning them —
34
+ * enforcement is fail-open by construction (a skipped call ships the
35
+ * value). Condition-less queries pass through untouched.
36
+ */
37
+ export declare function redactFieldConditions<T>(query: IQuery | undefined, data: T[]): T[];
18
38
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/query.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACtB,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACrC,KAAK,CAAC,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,8BAA8B,CAAA;CAAE,CAejD"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/query.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CACtB,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACrC,KAAK,CAAC,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,8BAA8B,CAAA;CAAE,CAejD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAI,CAAC,EAAE,CAMnF"}
@@ -1,8 +1,9 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
- import { Query } from "@rapiq/core";
5
- import { TypeormAdapter } from "@rapiq/typeorm";
4
+ import { Query, hasFieldConditions } from "@rapiq/core";
5
+ import { applyFieldConditions } from "@rapiq/adapter-memory";
6
+ import { TypeormAdapter } from "@rapiq/adapter-typeorm";
6
7
  //#region src/app/modules/database/repositories/query.ts
7
8
  /**
8
9
  * Apply a decoded rapiq query (IR) to the given TypeORM query builder.
@@ -14,6 +15,16 @@ import { TypeormAdapter } from "@rapiq/typeorm";
14
15
  * Joins triggered by the parsed relations replicate the DISTINCT-id
15
16
  * pattern: when the builder already groups by the root id, every join
16
17
  * contributes its own `GROUP BY <alias>.id`.
18
+ *
19
+ * Field visibility conditions (`IField.condition`, attached by a
20
+ * schema `fields.validateMany` gate) cannot go into the statement — a
21
+ * TypeORM selection must stay a bare column for entity hydration.
22
+ * The adapter projects the gated column unconditionally and
23
+ * force-selects every column its condition reads (rapiq#830's operand
24
+ * projection — the SQL counterpart of the plan-039 force-select
25
+ * discipline, so a sparse replace-projection can neither over-redact
26
+ * nor fail open on missing operands); the fetching adapter MUST then
27
+ * run the rows through `redactFieldConditions` before returning them.
17
28
  */ function applyQuery(queryBuilder, query) {
18
29
  const { pagination } = new TypeormAdapter({
19
30
  queryBuilder,
@@ -23,7 +34,19 @@ import { TypeormAdapter } from "@rapiq/typeorm";
23
34
  }).execute(query ?? new Query({}));
24
35
  return { pagination };
25
36
  }
37
+ /**
38
+ * Enforce the field visibility conditions of a decoded query on
39
+ * already-fetched rows: a gated column is dropped from every row that
40
+ * fails its condition; no row is ever removed. The SQL execution path
41
+ * projects gated columns unconditionally, so EVERY `findMany` adapter
42
+ * must pass its fetched entities through this before returning them —
43
+ * enforcement is fail-open by construction (a skipped call ships the
44
+ * value). Condition-less queries pass through untouched.
45
+ */ function redactFieldConditions(query, data) {
46
+ if (!query || !hasFieldConditions(query.fields)) return data;
47
+ return applyFieldConditions(query.fields, data);
48
+ }
26
49
  //#endregion
27
- export { applyQuery };
50
+ export { applyQuery, redactFieldConditions };
28
51
 
29
52
  //# sourceMappingURL=query.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.mjs","names":["Query","TypeormAdapter","applyQuery","queryBuilder","query","adapter","relations","onJoin","_path","alias","qb","expressionMap","groupBys","length","addGroupBy","pagination","execute"],"sources":["../../../../../src/app/modules/database/repositories/query.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 { IQuery } from '@rapiq/core';\nimport { Query } from '@rapiq/core';\nimport { TypeormAdapter } from '@rapiq/typeorm';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { EntityRepositoryPaginationMeta } from '@authup/server-kit';\n\n/**\n * Apply a decoded rapiq query (IR) to the given TypeORM query builder.\n * Schema allow-lists, defaults and pagination bounds were already\n * applied at decode time (`decodeQuery` in core/query) — this helper\n * only executes the IR. Returns the applied pagination for the\n * response meta block.\n *\n * Joins triggered by the parsed relations replicate the DISTINCT-id\n * pattern: when the builder already groups by the root id, every join\n * contributes its own `GROUP BY <alias>.id`.\n */\nexport function applyQuery(\n queryBuilder: SelectQueryBuilder<any>,\n query?: IQuery,\n) : { pagination: EntityRepositoryPaginationMeta } {\n const adapter = new TypeormAdapter({\n queryBuilder,\n relations: {\n onJoin: (_path, alias, qb) => {\n if (qb.expressionMap.groupBys.length > 0) {\n qb.addGroupBy(`${alias}.id`);\n }\n },\n },\n });\n\n const { pagination } = adapter.execute(query ?? new Query({}));\n\n return { pagination };\n}\n"],"mappings":";;;;;;;;;;;;;;;;GAwBA,SAAgBE,WACZC,cACAC,OAAc;CAad,MAAM,EAAEW,eAAeV,IAXHJ,eAAe;EAC/BE;EACAG,WAAW,EACPC,SAASC,OAAOC,OAAOC,OAAAA;GACnB,IAAIA,GAAGC,cAAcC,SAASC,SAAS,GACnCH,GAAGI,WAAW,GAAGL,MAAM,IAAI;EAEnC,EACJ;CACJ,CAEuBJ,CAAAA,CAAQW,QAAQZ,SAAS,IAAIJ,MAAM,CAAC,CAAA,CAAA;CAE3D,OAAO,EAAEe,WAAW;AACxB"}
1
+ {"version":3,"file":"query.mjs","names":["Query","hasFieldConditions","applyFieldConditions","TypeormAdapter","applyQuery","queryBuilder","query","adapter","relations","onJoin","_path","alias","qb","expressionMap","groupBys","length","addGroupBy","pagination","execute","redactFieldConditions","data","fields"],"sources":["../../../../../src/app/modules/database/repositories/query.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 { IQuery } from '@rapiq/core';\nimport { Query, hasFieldConditions } from '@rapiq/core';\nimport { applyFieldConditions } from '@rapiq/adapter-memory';\nimport { TypeormAdapter } from '@rapiq/adapter-typeorm';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { EntityRepositoryPaginationMeta } from '@authup/server-kit';\n\n/**\n * Apply a decoded rapiq query (IR) to the given TypeORM query builder.\n * Schema allow-lists, defaults and pagination bounds were already\n * applied at decode time (`decodeQuery` in core/query) — this helper\n * only executes the IR. Returns the applied pagination for the\n * response meta block.\n *\n * Joins triggered by the parsed relations replicate the DISTINCT-id\n * pattern: when the builder already groups by the root id, every join\n * contributes its own `GROUP BY <alias>.id`.\n *\n * Field visibility conditions (`IField.condition`, attached by a\n * schema `fields.validateMany` gate) cannot go into the statement — a\n * TypeORM selection must stay a bare column for entity hydration.\n * The adapter projects the gated column unconditionally and\n * force-selects every column its condition reads (rapiq#830's operand\n * projection — the SQL counterpart of the plan-039 force-select\n * discipline, so a sparse replace-projection can neither over-redact\n * nor fail open on missing operands); the fetching adapter MUST then\n * run the rows through `redactFieldConditions` before returning them.\n */\nexport function applyQuery(\n queryBuilder: SelectQueryBuilder<any>,\n query?: IQuery,\n) : { pagination: EntityRepositoryPaginationMeta } {\n const adapter = new TypeormAdapter({\n queryBuilder,\n relations: {\n onJoin: (_path, alias, qb) => {\n if (qb.expressionMap.groupBys.length > 0) {\n qb.addGroupBy(`${alias}.id`);\n }\n },\n },\n });\n\n const { pagination } = adapter.execute(query ?? new Query({}));\n\n return { pagination };\n}\n\n/**\n * Enforce the field visibility conditions of a decoded query on\n * already-fetched rows: a gated column is dropped from every row that\n * fails its condition; no row is ever removed. The SQL execution path\n * projects gated columns unconditionally, so EVERY `findMany` adapter\n * must pass its fetched entities through this before returning them —\n * enforcement is fail-open by construction (a skipped call ships the\n * value). Condition-less queries pass through untouched.\n */\nexport function redactFieldConditions<T>(query: IQuery | undefined, data: T[]) : T[] {\n if (!query || !hasFieldConditions(query.fields)) {\n return data;\n }\n\n return applyFieldConditions(query.fields, data);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCA,SAAgBI,WACZC,cACAC,OAAc;CAad,MAAM,EAAEW,eAAeV,IAXHJ,eAAe;EAC/BE;EACAG,WAAW,EACPC,SAASC,OAAOC,OAAOC,OAAAA;GACnB,IAAIA,GAAGC,cAAcC,SAASC,SAAS,GACnCH,GAAGI,WAAW,GAAGL,MAAM,IAAI;EAEnC,EACJ;CACJ,CAEuBJ,CAAAA,CAAQW,QAAQZ,SAAS,IAAIN,MAAM,CAAC,CAAA,CAAA;CAE3D,OAAO,EAAEiB,WAAW;AACxB;;;;;;;;;GAWA,SAAgBE,sBAAyBb,OAA2Bc,MAAS;CACzE,IAAI,CAACd,SAAS,CAACL,mBAAmBK,MAAMe,MAAM,GAC1C,OAAOD;CAGX,OAAOlB,qBAAqBI,MAAMe,QAAQD,IAAAA;AAC9C"}
@@ -4,7 +4,7 @@ import.meta.url;
4
4
  import { RealmEntity } from "../../../../../adapters/database/domains/realm/entity.mjs";
5
5
  import { CachePrefix } from "../../../../../adapters/database/domains/constants.mjs";
6
6
  import "../../../../../adapters/database/domains/index.mjs";
7
- import { applyQuery } from "../query.mjs";
7
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
8
8
  import { translateWhereConditions } from "../helpers.mjs";
9
9
  import { isUUID } from "@authup/kit";
10
10
  import { REALM_MASTER_NAME } from "@authup/core-kit";
@@ -37,7 +37,7 @@ var RealmRepositoryAdapter = class {
37
37
  const { pagination } = applyQuery(qb, query);
38
38
  const [entities, total] = await qb.getManyAndCount();
39
39
  return {
40
- data: entities,
40
+ data: redactFieldConditions(query, entities),
41
41
  meta: {
42
42
  total,
43
43
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["REALM_MASTER_NAME","InternalError","isUUID","validateEntityJoinColumns","applyQuery","buildRedisKeyPath","CachePrefix","RealmEntity","translateWhereConditions","RealmRepositoryAdapter","repository","findOneById","id","qb","createQueryBuilder","where","cache","prefix","REALM","key","getOne","findOneByName","name","trim","toLowerCase","findMany","query","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneByIdOrName","idOrName","findManyBy","findBy","findOneBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","resolveId","resolve","withFallback"],"sources":["../../../../../../src/app/modules/database/repositories/realm/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { REALM_MASTER_NAME } from '@authup/core-kit';\nimport { InternalError } from '@authup/errors';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { IRealmRepository } from '../../../../../core/index.ts';\nimport { CachePrefix, RealmEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RealmRepositoryAdapter implements IRealmRepository {\n private readonly repository: Repository<Realm>;\n\n constructor(repository: Repository<Realm>) {\n this.repository = repository;\n }\n\n findOneById(id: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.id = :id', { id });\n qb.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.REALM,\n key: id,\n }),\n 60_000,\n );\n\n return qb.getOne();\n }\n\n findOneByName(name: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.name = :name', { name: name.trim().toLowerCase() });\n\n return qb.getOne();\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Realm>> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.groupBy('realm.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneByIdOrName(idOrName: string): Promise<Realm | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Realm[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Realm | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Realm>): Realm {\n return this.repository.create(data);\n }\n\n merge(entity: Realm, data: Partial<Realm>): Realm {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Realm): Promise<Realm> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Realm): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Realm>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RealmEntity,\n });\n }\n\n async resolveId(key: string): Promise<string | null> {\n if (isUUID(key)) {\n return key;\n }\n\n const entity = await this.findOneByName(key);\n return entity ? entity.id : null;\n }\n\n async resolve(id: string | undefined, withFallback: true): Promise<Realm>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null> {\n let entity: Realm | null = null;\n\n if (id) {\n entity = await this.findOneByIdOrName(id);\n }\n\n if (!entity && withFallback) {\n entity = await this.findOneBy({ name: REALM_MASTER_NAME });\n if (!entity) {\n throw new InternalError('The master realm could not be resolved.');\n }\n }\n\n return entity;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,IAAaS,yBAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEAC,YAAYC,IAAmC;EAC3C,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,kBAAkB,EAAEH,GAAG,CAAA;EAChCC,GAAGG,MACCX,kBAAkB;GACdY,QAAQX,YAAYY;GACpBC,KAAKP;EACT,CAAA,GACA,GAAA;EAGJ,OAAOC,GAAGO,OAAM;CACpB;CAEAC,cAAcC,MAAqC;EAC/C,MAAMT,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,sBAAsB,EAAEO,MAAMA,KAAKC,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAEjE,OAAOX,GAAGO,OAAM;CACpB;CAEA,MAAMK,SAASC,OAA+D;EAC1E,MAAMb,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGc,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAexB,WAAWS,IAAIa,KAAAA;EAEtC,MAAM,CAACG,UAAUC,SAAS,MAAMjB,GAAGkB,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,kBAAkBC,UAAyC;EAC7D,OAAOjC,OAAOiC,QAAAA,IACV,KAAKxB,YAAYwB,QAAAA,IACjB,KAAKd,cAAcc,QAAAA;CAC3B;CAEA,MAAMC,WAAWrB,OAA8C;EAC3D,OAAO,KAAKL,WAAW2B,OAAO7B,yBAAyBO,KAAAA,CAAAA;CAC3D;CAEA,MAAMuB,UAAUvB,OAAmD;EAC/D,OAAO,KAAKL,WAAW4B,UAAU9B,yBAAyBO,KAAAA,CAAAA;CAC9D;CAEAwB,OAAOP,MAA6B;EAChC,OAAO,KAAKtB,WAAW6B,OAAOP,IAAAA;CAClC;CAEAQ,MAAMC,QAAeT,MAA6B;EAC9C,OAAO,KAAKtB,WAAW8B,MAAMC,QAAQT,IAAAA;CACzC;CAEA,MAAMU,KAAKD,QAA+B;EACtC,OAAO,KAAK/B,WAAWgC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAK/B,WAAWiC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBZ,MAAqC;EAC3D,MAAM7B,0BAA0B6B,MAAM;GAClCa,YAAY,KAAKnC,WAAWoC,QAAQC;GACpCC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,UAAU9B,KAAqC;EACjD,IAAIjB,OAAOiB,GAAAA,GACP,OAAOA;EAGX,MAAMsB,SAAS,MAAM,KAAKpB,cAAcF,GAAAA;EACxC,OAAOsB,SAASA,OAAO7B,KAAK;CAChC;CAMA,MAAMsC,QAAQtC,IAAwBuC,cAA+C;EACjF,IAAIV,SAAuB;EAE3B,IAAI7B,IACA6B,SAAS,MAAM,KAAKP,kBAAkBtB,EAAAA;EAG1C,IAAI,CAAC6B,UAAUU,cAAc;GACzBV,SAAS,MAAM,KAAKH,UAAU,EAAEhB,MAAMtB,kBAAkB,CAAA;GACxD,IAAI,CAACyC,QACD,MAAM,IAAIxC,cAAc,yCAAA;EAEhC;EAEA,OAAOwC;CACX;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["REALM_MASTER_NAME","InternalError","isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","buildRedisKeyPath","CachePrefix","RealmEntity","translateWhereConditions","RealmRepositoryAdapter","repository","findOneById","id","qb","createQueryBuilder","where","cache","prefix","REALM","key","getOne","findOneByName","name","trim","toLowerCase","findMany","query","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneByIdOrName","idOrName","findManyBy","findBy","findOneBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","resolveId","resolve","withFallback"],"sources":["../../../../../../src/app/modules/database/repositories/realm/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { REALM_MASTER_NAME } from '@authup/core-kit';\nimport { InternalError } from '@authup/errors';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport type { IRealmRepository } from '../../../../../core/index.ts';\nimport { CachePrefix, RealmEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RealmRepositoryAdapter implements IRealmRepository {\n private readonly repository: Repository<Realm>;\n\n constructor(repository: Repository<Realm>) {\n this.repository = repository;\n }\n\n findOneById(id: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.id = :id', { id });\n qb.cache(\n buildRedisKeyPath({\n prefix: CachePrefix.REALM,\n key: id,\n }),\n 60_000,\n );\n\n return qb.getOne();\n }\n\n findOneByName(name: string): Promise<Realm | null> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.where('realm.name = :name', { name: name.trim().toLowerCase() });\n\n return qb.getOne();\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Realm>> {\n const qb = this.repository.createQueryBuilder('realm');\n qb.groupBy('realm.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneByIdOrName(idOrName: string): Promise<Realm | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Realm[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Realm | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Realm>): Realm {\n return this.repository.create(data);\n }\n\n merge(entity: Realm, data: Partial<Realm>): Realm {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Realm): Promise<Realm> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Realm): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Realm>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RealmEntity,\n });\n }\n\n async resolveId(key: string): Promise<string | null> {\n if (isUUID(key)) {\n return key;\n }\n\n const entity = await this.findOneByName(key);\n return entity ? entity.id : null;\n }\n\n async resolve(id: string | undefined, withFallback: true): Promise<Realm>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null>;\n\n async resolve(id: string | undefined, withFallback?: boolean): Promise<Realm | null> {\n let entity: Realm | null = null;\n\n if (id) {\n entity = await this.findOneByIdOrName(id);\n }\n\n if (!entity && withFallback) {\n entity = await this.findOneBy({ name: REALM_MASTER_NAME });\n if (!entity) {\n throw new InternalError('The master realm could not be resolved.');\n }\n }\n\n return entity;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,IAAaU,yBAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA+B;EACvC,KAAKA,aAAaA;CACtB;CAEAC,YAAYC,IAAmC;EAC3C,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,kBAAkB,EAAEH,GAAG,CAAA;EAChCC,GAAGG,MACCX,kBAAkB;GACdY,QAAQX,YAAYY;GACpBC,KAAKP;EACT,CAAA,GACA,GAAA;EAGJ,OAAOC,GAAGO,OAAM;CACpB;CAEAC,cAAcC,MAAqC;EAC/C,MAAMT,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGE,MAAM,sBAAsB,EAAEO,MAAMA,KAAKC,KAAI,CAAA,CAAGC,YAAW,EAAG,CAAA;EAEjE,OAAOX,GAAGO,OAAM;CACpB;CAEA,MAAMK,SAASC,OAA+D;EAC1E,MAAMb,KAAK,KAAKH,WAAWI,mBAAmB,OAAA;EAC9CD,GAAGc,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAezB,WAAWU,IAAIa,KAAAA;EAEtC,MAAM,CAACG,UAAUC,SAAS,MAAMjB,GAAGkB,gBAAe;EAElD,OAAO;GACHC,MAAM5B,sBAAsBsB,OAAOG,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,kBAAkBC,UAAyC;EAC7D,OAAOlC,OAAOkC,QAAAA,IACV,KAAKxB,YAAYwB,QAAAA,IACjB,KAAKd,cAAcc,QAAAA;CAC3B;CAEA,MAAMC,WAAWrB,OAA8C;EAC3D,OAAO,KAAKL,WAAW2B,OAAO7B,yBAAyBO,KAAAA,CAAAA;CAC3D;CAEA,MAAMuB,UAAUvB,OAAmD;EAC/D,OAAO,KAAKL,WAAW4B,UAAU9B,yBAAyBO,KAAAA,CAAAA;CAC9D;CAEAwB,OAAOP,MAA6B;EAChC,OAAO,KAAKtB,WAAW6B,OAAOP,IAAAA;CAClC;CAEAQ,MAAMC,QAAeT,MAA6B;EAC9C,OAAO,KAAKtB,WAAW8B,MAAMC,QAAQT,IAAAA;CACzC;CAEA,MAAMU,KAAKD,QAA+B;EACtC,OAAO,KAAK/B,WAAWgC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAK/B,WAAWiC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBZ,MAAqC;EAC3D,MAAM9B,0BAA0B8B,MAAM;GAClCa,YAAY,KAAKnC,WAAWoC,QAAQC;GACpCC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,UAAU9B,KAAqC;EACjD,IAAIlB,OAAOkB,GAAAA,GACP,OAAOA;EAGX,MAAMsB,SAAS,MAAM,KAAKpB,cAAcF,GAAAA;EACxC,OAAOsB,SAASA,OAAO7B,KAAK;CAChC;CAMA,MAAMsC,QAAQtC,IAAwBuC,cAA+C;EACjF,IAAIV,SAAuB;EAE3B,IAAI7B,IACA6B,SAAS,MAAM,KAAKP,kBAAkBtB,EAAAA;EAG1C,IAAI,CAAC6B,UAAUU,cAAc;GACzBV,SAAS,MAAM,KAAKH,UAAU,EAAEhB,MAAMvB,kBAAkB,CAAA;GACxD,IAAI,CAAC0C,QACD,MAAM,IAAIzC,cAAc,yCAAA;EAEhC;EAEA,OAAOyC;CACX;AACJ"}
@@ -5,7 +5,7 @@ import { CachePrefix } from "../../../../../adapters/database/domains/constants.
5
5
  import { RoleEntity } from "../../../../../adapters/database/domains/role/entity.mjs";
6
6
  import { RolePermissionEntity } from "../../../../../adapters/database/domains/role-permission/entity.mjs";
7
7
  import "../../../../../adapters/database/domains/index.mjs";
8
- import { applyQuery } from "../query.mjs";
8
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
9
9
  import { isEntityUnique, translateWhereConditions } from "../helpers.mjs";
10
10
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
11
11
  import "../../../../../adapters/database/index.mjs";
@@ -27,7 +27,7 @@ var RoleRepositoryAdapter = class {
27
27
  const { pagination } = applyQuery(qb, query);
28
28
  const [entities, total] = await qb.getManyAndCount();
29
29
  return {
30
- data: entities,
30
+ data: redactFieldConditions(query, entities),
31
31
  meta: {
32
32
  total,
33
33
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","roleId","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('role.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { roleId: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+BA,IAAaW,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;EAC3C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA8D;EACzE,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGE,QAAQ,SAAA;EAEX,MAAM,EAAEC,eAAelB,WAAWe,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAkC;EAC1C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAyC;EACvE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGe,MAAM,qBAAqB,EAAEF,KAAK,CAAA;EAErC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;EACrD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAsC;EAC5E,OAAOvC,OAAOsC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA6C;EAC1D,OAAO,KAAKpB,WAAW6B,OAAOpC,yBAAyB2B,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAkD;EAC9D,OAAO,KAAKpB,WAAWgB,UAAUvB,yBAAyB2B,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA2B;EAC9B,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAcpB,MAA2B;EAC3C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA6B;EACpC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA6B;EACtC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAoC;EAC1D,MAAMvB,0BAA0BuB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;EAClB,CAAA;CACJ;CAEA,MAAM4C,gBAAgB5B,MAAqB6B,UAAgC;EAQvE,IAAI,CAACC,MAPkBlD,eAAe;GAClC4C,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;GACdoC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAIlD,sBAAAA;CAElB;CAEA,MAAMqD,oBAAoBZ,QAA2D;EACjF,MAAMjB,KAAK,OAAOiB,WAAW,WAAWA,SAASA,OAAOjB;EACxD,OAAOrB,qBAAqB;GACxB2C,SAAS,KAAKrC,WAAWqC;GACzBQ,gBAAgBhD;GAChBuB,OAAO,EAAE0B,QAAQ/B,GAAG;GACpBgC,aAAapD,YAAYqD;GACzBC,UAAUlC;EACd,CAAA;CACJ;CAEA,MAAMmC,2BAA2BzC,UAAiE;EAE9F,QAAO0C,MADeC,QAAQC,IAAI5C,SAAS6C,KAAKtB,WAAW,KAAKY,oBAAoBZ,MAAAA,CAAAA,CAAAA,EAAAA,CACrEuB,KAAI;CACvB;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","isEntityUnique","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","roleId","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('role.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { roleId: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+BA,IAAaY,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;EAC3C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA8D;EACzE,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGE,QAAQ,SAAA;EAEX,MAAM,EAAEC,eAAenB,WAAWgB,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMtB,sBAAsBc,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAkC;EAC1C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAyC;EACvE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGe,MAAM,qBAAqB,EAAEF,KAAK,CAAA;EAErC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;EACrD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAsC;EAC5E,OAAOxC,OAAOuC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA6C;EAC1D,OAAO,KAAKpB,WAAW6B,OAAOpC,yBAAyB2B,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAkD;EAC9D,OAAO,KAAKpB,WAAWgB,UAAUvB,yBAAyB2B,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA2B;EAC9B,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAcpB,MAA2B;EAC3C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA6B;EACpC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA6B;EACtC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAoC;EAC1D,MAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;EAClB,CAAA;CACJ;CAEA,MAAM4C,gBAAgB5B,MAAqB6B,UAAgC;EAQvE,IAAI,CAACC,MAPkBlD,eAAe;GAClC4C,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc3C;GACdoC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAIlD,sBAAAA;CAElB;CAEA,MAAMqD,oBAAoBZ,QAA2D;EACjF,MAAMjB,KAAK,OAAOiB,WAAW,WAAWA,SAASA,OAAOjB;EACxD,OAAOrB,qBAAqB;GACxB2C,SAAS,KAAKrC,WAAWqC;GACzBQ,gBAAgBhD;GAChBuB,OAAO,EAAE0B,QAAQ/B,GAAG;GACpBgC,aAAapD,YAAYqD;GACzBC,UAAUlC;EACd,CAAA;CACJ;CAEA,MAAMmC,2BAA2BzC,UAAiE;EAE9F,QAAO0C,MADeC,QAAQC,IAAI5C,SAAS6C,KAAKtB,WAAW,KAAKY,oBAAoBZ,MAAAA,CAAAA,CAAAA,EAAAA,CACrEuB,KAAI;CACvB;AACJ"}
@@ -3,7 +3,7 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { RoleAttributeEntity } from "../../../../../adapters/database/domains/role-attribute/entity.mjs";
5
5
  import "../../../../../adapters/database/domains/index.mjs";
6
- import { applyQuery } from "../query.mjs";
6
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
7
7
  import { applyRealmScopeSelect, translateWhereConditions } from "../helpers.mjs";
8
8
  import { validateEntityJoinColumns } from "typeorm-extension";
9
9
  //#region src/app/modules/database/repositories/role-attribute/repository.ts
@@ -19,7 +19,7 @@ var RoleAttributeRepositoryAdapter = class {
19
19
  applyRealmScopeSelect(qb, "roleAttribute");
20
20
  const [entities, total] = await qb.getManyAndCount();
21
21
  return {
22
- data: entities,
22
+ data: redactFieldConditions(query, entities),
23
23
  meta: {
24
24
  total,
25
25
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","RoleAttributeEntity","applyRealmScopeSelect","translateWhereConditions","RoleAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-attribute/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RoleAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRoleAttributeRepository } from '../../../../../core/index.ts';\nimport { RoleAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class RoleAttributeRepositoryAdapter implements IRoleAttributeRepository {\n private readonly repository: Repository<RoleAttribute>;\n\n constructor(repository: Repository<RoleAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RoleAttribute>> {\n const qb = this.repository.createQueryBuilder('roleAttribute');\n qb.groupBy('roleAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'roleAttribute');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RoleAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<RoleAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<RoleAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RoleAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RoleAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: RoleAttribute, data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RoleAttribute): Promise<RoleAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RoleAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RoleAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,iCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAuC;EAC/C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAuE;EAClF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,eAAA;EAC9CD,GAAGE,QAAQ,kBAAA;EAEX,MAAM,EAAEC,eAAeX,WAAWQ,IAAID,KAAAA;EAEtCL,sBAAsBM,IAAI,eAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA2C;EACnD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA+C;EACjD,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAAiD;EACrE,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAsD;EACnE,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA2D;EACvE,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAA6C;EAChD,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAuBb,MAA6C;EACtE,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA+C;EACtD,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAsC;EAC/C,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA6C;EACnE,MAAMhB,0BAA0BgB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAclC;EAClB,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","RoleAttributeEntity","applyRealmScopeSelect","translateWhereConditions","RoleAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-attribute/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RoleAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRoleAttributeRepository } from '../../../../../core/index.ts';\nimport { RoleAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class RoleAttributeRepositoryAdapter implements IRoleAttributeRepository {\n private readonly repository: Repository<RoleAttribute>;\n\n constructor(repository: Repository<RoleAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RoleAttribute>> {\n const qb = this.repository.createQueryBuilder('roleAttribute');\n qb.groupBy('roleAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'roleAttribute');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RoleAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<RoleAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<RoleAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RoleAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RoleAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: RoleAttribute, data: Partial<RoleAttribute>): RoleAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RoleAttribute): Promise<RoleAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RoleAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RoleAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaM,iCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAuC;EAC/C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAuE;EAClF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,eAAA;EAC9CD,GAAGE,QAAQ,kBAAA;EAEX,MAAM,EAAEC,eAAeZ,WAAWS,IAAID,KAAAA;EAEtCL,sBAAsBM,IAAI,eAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMf,sBAAsBO,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA2C;EACnD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA+C;EACjD,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAAiD;EACrE,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAsD;EACnE,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA2D;EACvE,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAA6C;EAChD,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAuBb,MAA6C;EACtE,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA+C;EACtD,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAsC;EAC/C,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA6C;EACnE,MAAMjB,0BAA0BiB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAclC;EAClB,CAAA;CACJ;AACJ"}
@@ -3,7 +3,7 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { RolePermissionEntity } from "../../../../../adapters/database/domains/role-permission/entity.mjs";
5
5
  import "../../../../../adapters/database/domains/index.mjs";
6
- import { applyQuery } from "../query.mjs";
6
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
7
7
  import { translateWhereConditions } from "../helpers.mjs";
8
8
  import { validateEntityJoinColumns } from "typeorm-extension";
9
9
  //#region src/app/modules/database/repositories/role-permission/repository.ts
@@ -18,7 +18,7 @@ var RolePermissionRepositoryAdapter = class {
18
18
  const { pagination } = applyQuery(qb, query);
19
19
  const [entities, total] = await qb.getManyAndCount();
20
20
  return {
21
- data: entities,
21
+ data: redactFieldConditions(query, entities),
22
22
  meta: {
23
23
  total,
24
24
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","RolePermissionEntity","translateWhereConditions","RolePermissionRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","_name","Promise","resolve","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-permission/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RolePermission } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRolePermissionRepository } from '../../../../../core/index.ts';\nimport { RolePermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RolePermissionRepositoryAdapter implements IRolePermissionRepository {\n private readonly repository: Repository<RolePermission>;\n\n constructor(repository: Repository<RolePermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RolePermission>> {\n const qb = this.repository.createQueryBuilder('rolePermission');\n qb.groupBy('rolePermission.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RolePermission | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(_name: string): Promise<RolePermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<RolePermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RolePermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RolePermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RolePermission>): RolePermission {\n return this.repository.create(data);\n }\n\n merge(entity: RolePermission, data: Partial<RolePermission>): RolePermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RolePermission): Promise<RolePermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RolePermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RolePermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RolePermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaI,kCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAwC;EAChD,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAwE;EACnF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,gBAAA;EAC9CD,GAAGE,QAAQ,mBAAA;EAEX,MAAM,EAAEC,eAAeV,WAAWO,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA4C;EACpD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,OAA+C;EAC/D,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAAkD;EAChE,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAuD;EACpE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAA4D;EACxE,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAA+C;EAClD,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAAwBhB,MAA+C;EACzE,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAAiD;EACxD,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAuC;EAChD,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAA8C;EACpE,MAAMf,0BAA0Be,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","redactFieldConditions","RolePermissionEntity","translateWhereConditions","RolePermissionRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","_name","Promise","resolve","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/role-permission/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RolePermission } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRolePermissionRepository } from '../../../../../core/index.ts';\nimport { RolePermissionEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\n\nexport class RolePermissionRepositoryAdapter implements IRolePermissionRepository {\n private readonly repository: Repository<RolePermission>;\n\n constructor(repository: Repository<RolePermission>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<RolePermission>> {\n const qb = this.repository.createQueryBuilder('rolePermission');\n qb.groupBy('rolePermission.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<RolePermission | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(_name: string): Promise<RolePermission | null> {\n return Promise.resolve(null);\n }\n\n findOneByIdOrName(idOrName: string): Promise<RolePermission | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<RolePermission[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<RolePermission | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<RolePermission>): RolePermission {\n return this.repository.create(data);\n }\n\n merge(entity: RolePermission, data: Partial<RolePermission>): RolePermission {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: RolePermission): Promise<RolePermission> {\n return this.repository.save(entity);\n }\n\n async remove(entity: RolePermission): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<RolePermission>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RolePermissionEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,kCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAwC;EAChD,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAwE;EACnF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,gBAAA;EAC9CD,GAAGE,QAAQ,mBAAA;EAEX,MAAM,EAAEC,eAAeX,WAAWQ,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMd,sBAAsBM,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA4C;EACpD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,OAA+C;EAC/D,OAAOC,QAAQC,QAAQ,IAAA;CAC3B;CAEAC,kBAAkBC,UAAkD;EAChE,OAAO,KAAKR,YAAYQ,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAuD;EACpE,OAAO,KAAKtB,WAAWuB,OAAOzB,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMR,UAAUQ,OAA4D;EACxE,OAAO,KAAKtB,WAAWc,UAAUhB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOd,MAA+C;EAClD,OAAO,KAAKV,WAAWwB,OAAOd,IAAAA;CAClC;CAEAe,MAAMC,QAAwBhB,MAA+C;EACzE,OAAO,KAAKV,WAAWyB,MAAMC,QAAQhB,IAAAA;CACzC;CAEA,MAAMiB,KAAKD,QAAiD;EACxD,OAAO,KAAK1B,WAAW2B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAuC;EAChD,MAAM,KAAK1B,WAAW4B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBnB,MAA8C;EACpE,MAAMhB,0BAA0BgB,MAAM;GAClCoB,YAAY,KAAK9B,WAAW+B,QAAQC;GACpCC,cAAcpC;EAClB,CAAA;CACJ;AACJ"}
@@ -1,9 +1,23 @@
1
- import type { DataSource } from 'typeorm';
1
+ import type { DataSource, EntityMetadata } from 'typeorm';
2
+ /**
3
+ * Every selectable column must appear in the schema's field allow-list:
4
+ * rapiq derives the root projection from `fields` (`default` when
5
+ * present, else `allowed`), so a column missing from BOTH silently
6
+ * vanishes from every collection response — no error, just an absent
7
+ * property (`role.builtIn` went missing this way).
8
+ */
9
+ export declare function assertSchemaFieldsCoverEntity(name: string, schema: {
10
+ fields?: {
11
+ default?: string[];
12
+ allowed?: string[];
13
+ };
14
+ }, metadata: EntityMetadata): void;
2
15
  /**
3
16
  * Validate every registered entity schema against its TypeORM
4
- * metadata (`@rapiq/typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
17
+ * metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
5
18
  * fields/sort defaults and the filters default condition tree must
6
- * reference existing columns/relations). Called by
19
+ * reference existing columns/relations) and assert its field allow-list
20
+ * covers every selectable column. Called by
7
21
  * `DatabaseModule.setup` once the DataSource is initialized —
8
22
  * schema/entity drift fails the boot, fail-fast.
9
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/schema-validation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AA8DxD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAI,IAAI,CAOnE"}
1
+ {"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/database/repositories/schema-validation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAgB,MAAM,SAAS,CAAC;AA2ExE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,EAC/D,QAAQ,EAAE,cAAc,GACxB,IAAI,CAiBP;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAI,IAAI,CAQnE"}
@@ -29,7 +29,7 @@ import "../../../../adapters/database/domains/index.mjs";
29
29
  import { schemaRegistry } from "../../../../core/query/module.mjs";
30
30
  import "../../../../core/index.mjs";
31
31
  import { EntityType } from "@authup/core-kit";
32
- import { assertSchemaMatchesEntity } from "@rapiq/typeorm";
32
+ import { assertSchemaMatchesEntity } from "@rapiq/adapter-typeorm";
33
33
  //#region src/app/modules/database/repositories/schema-validation.ts
34
34
  /**
35
35
  * Entity class per registered schema name — the iteration source for
@@ -62,16 +62,40 @@ import { assertSchemaMatchesEntity } from "@rapiq/typeorm";
62
62
  [EntityType.USER_ROLE]: UserRoleEntity
63
63
  };
64
64
  /**
65
+ * Selectable columns deliberately kept out of a schema's field
66
+ * allow-list. `select: false` columns are skipped automatically (the
67
+ * entity already declares them hidden); everything listed here is a
68
+ * column that IS selectable but must never ride the API projection.
69
+ */ const SCHEMA_FIELD_EXCLUSIONS = { [EntityType.USER_AUTHENTICATOR]: ["parameters"] };
70
+ /**
71
+ * Every selectable column must appear in the schema's field allow-list:
72
+ * rapiq derives the root projection from `fields` (`default` when
73
+ * present, else `allowed`), so a column missing from BOTH silently
74
+ * vanishes from every collection response — no error, just an absent
75
+ * property (`role.builtIn` went missing this way).
76
+ */ function assertSchemaFieldsCoverEntity(name, schema, metadata) {
77
+ const declared = /* @__PURE__ */ new Set([...schema.fields?.default || [], ...schema.fields?.allowed || []]);
78
+ const excluded = new Set(SCHEMA_FIELD_EXCLUSIONS[name] || []);
79
+ const missing = metadata.columns.filter((column) => column.isSelect).map((column) => column.propertyName).filter((propertyName) => !declared.has(propertyName) && !excluded.has(propertyName));
80
+ if (missing.length > 0) throw new Error(`The schema "${name}" does not declare the field(s): ${missing.join(", ")}.`);
81
+ }
82
+ /**
65
83
  * Validate every registered entity schema against its TypeORM
66
- * metadata (`@rapiq/typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
84
+ * metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,
67
85
  * fields/sort defaults and the filters default condition tree must
68
- * reference existing columns/relations). Called by
86
+ * reference existing columns/relations) and assert its field allow-list
87
+ * covers every selectable column. Called by
69
88
  * `DatabaseModule.setup` once the DataSource is initialized —
70
89
  * schema/entity drift fails the boot, fail-fast.
71
90
  */ function validateEntitySchemas(dataSource) {
72
- for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) assertSchemaMatchesEntity(schemaRegistry.getOrFail(name), dataSource.getMetadata(target));
91
+ for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) {
92
+ const schema = schemaRegistry.getOrFail(name);
93
+ const metadata = dataSource.getMetadata(target);
94
+ assertSchemaMatchesEntity(schema, metadata);
95
+ assertSchemaFieldsCoverEntity(name, schema, metadata);
96
+ }
73
97
  }
74
98
  //#endregion
75
- export { validateEntitySchemas };
99
+ export { assertSchemaFieldsCoverEntity, validateEntitySchemas };
76
100
 
77
101
  //# sourceMappingURL=schema-validation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-validation.mjs","names":["assertSchemaMatchesEntity","EntityType","schemaRegistry","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","ConsentEntity","EventEntity","IdentityProviderEntity","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyEntity","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","SessionEntity","TrustAnchorEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRoleEntity","SCHEMA_ENTITY_TARGETS","CLIENT","CLIENT_PERMISSION","CLIENT_ROLE","CLIENT_SCOPE","CONSENT","EVENT","IDENTITY_PROVIDER","IDENTITY_PROVIDER_ROLE_MAPPING","KEY","PERMISSION","PERMISSION_POLICY","POLICY","REALM","ROLE","ROLE_ATTRIBUTE","ROLE_PERMISSION","SCOPE","SESSION","TRUST_ANCHOR","USER","USER_ATTRIBUTE","USER_AUTHENTICATOR","USER_PERMISSION","USER_ROLE","validateEntitySchemas","dataSource","name","target","Object","entries","getOrFail","getMetadata"],"sources":["../../../../../src/app/modules/database/repositories/schema-validation.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 '@rapiq/core';\nimport { assertSchemaMatchesEntity } from '@rapiq/typeorm';\nimport type { DataSource, EntityTarget } from 'typeorm';\nimport { EntityType } from '@authup/core-kit';\nimport { schemaRegistry } from '../../../../core/index.ts';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n ConsentEntity,\n EventEntity,\n IdentityProviderEntity,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyEntity,\n RealmEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n SessionEntity,\n TrustAnchorEntity,\n UserAttributeEntity,\n UserAuthenticatorEntity,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\n\n/**\n * Entity class per registered schema name — the iteration source for\n * the boot-time validation. A mapped name missing from the registry\n * fails via `getOrFail`, so a renamed/removed schema surfaces here too.\n */\nconst SCHEMA_ENTITY_TARGETS : Record<string, EntityTarget<ObjectLiteral>> = {\n [EntityType.CLIENT]: ClientEntity,\n [EntityType.CLIENT_PERMISSION]: ClientPermissionEntity,\n [EntityType.CLIENT_ROLE]: ClientRoleEntity,\n [EntityType.CLIENT_SCOPE]: ClientScopeEntity,\n [EntityType.CONSENT]: ConsentEntity,\n [EntityType.EVENT]: EventEntity,\n [EntityType.IDENTITY_PROVIDER]: IdentityProviderEntity,\n [EntityType.IDENTITY_PROVIDER_ROLE_MAPPING]: IdentityProviderRoleMappingEntity,\n [EntityType.KEY]: KeyEntity,\n [EntityType.PERMISSION]: PermissionEntity,\n [EntityType.PERMISSION_POLICY]: PermissionPolicyEntity,\n [EntityType.POLICY]: PolicyEntity,\n [EntityType.REALM]: RealmEntity,\n [EntityType.ROLE]: RoleEntity,\n [EntityType.ROLE_ATTRIBUTE]: RoleAttributeEntity,\n [EntityType.ROLE_PERMISSION]: RolePermissionEntity,\n [EntityType.SCOPE]: ScopeEntity,\n [EntityType.SESSION]: SessionEntity,\n [EntityType.TRUST_ANCHOR]: TrustAnchorEntity,\n [EntityType.USER]: UserEntity,\n [EntityType.USER_ATTRIBUTE]: UserAttributeEntity,\n [EntityType.USER_AUTHENTICATOR]: UserAuthenticatorEntity,\n [EntityType.USER_PERMISSION]: UserPermissionEntity,\n [EntityType.USER_ROLE]: UserRoleEntity,\n};\n\n/**\n * Validate every registered entity schema against its TypeORM\n * metadata (`@rapiq/typeorm`'s `assertSchemaMatchesEntity`: allow-lists,\n * fields/sort defaults and the filters default condition tree must\n * reference existing columns/relations). Called by\n * `DatabaseModule.setup` once the DataSource is initialized —\n * schema/entity drift fails the boot, fail-fast.\n */\nexport function validateEntitySchemas(dataSource: DataSource) : void {\n for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) {\n assertSchemaMatchesEntity(\n schemaRegistry.getOrFail(name),\n dataSource.getMetadata(target),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CA,MAAM2B,wBAAsE;EACvE1B,WAAW2B,SAASzB;EACpBF,WAAW4B,oBAAoBzB;EAC/BH,WAAW6B,cAAczB;EACzBJ,WAAW8B,eAAezB;EAC1BL,WAAW+B,UAAUzB;EACrBN,WAAWgC,QAAQzB;EACnBP,WAAWiC,oBAAoBzB;EAC/BR,WAAWkC,iCAAiCzB;EAC5CT,WAAWmC,MAAMzB;EACjBV,WAAWoC,aAAazB;EACxBX,WAAWqC,oBAAoBzB;EAC/BZ,WAAWsC,SAASzB;EACpBb,WAAWuC,QAAQzB;EACnBd,WAAWwC,OAAOxB;EAClBhB,WAAWyC,iBAAiB1B;EAC5Bf,WAAW0C,kBAAkBzB;EAC7BjB,WAAW2C,QAAQzB;EACnBlB,WAAW4C,UAAUzB;EACrBnB,WAAW6C,eAAezB;EAC1BpB,WAAW8C,OAAOvB;EAClBvB,WAAW+C,iBAAiB1B;EAC5BrB,WAAWgD,qBAAqB1B;EAChCtB,WAAWiD,kBAAkBzB;EAC7BxB,WAAWkD,YAAYzB;AAC5B;;;;;;;;GAUA,SAAgB0B,sBAAsBC,YAAsB;CACxD,KAAK,MAAM,CAACC,MAAMC,WAAWC,OAAOC,QAAQ9B,qBAAAA,GACxC3B,0BACIE,eAAewD,UAAUJ,IAAAA,GACzBD,WAAWM,YAAYJ,MAAAA,CAAAA;AAGnC"}
1
+ {"version":3,"file":"schema-validation.mjs","names":["assertSchemaMatchesEntity","EntityType","schemaRegistry","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","ConsentEntity","EventEntity","IdentityProviderEntity","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyEntity","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","SessionEntity","TrustAnchorEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRoleEntity","SCHEMA_ENTITY_TARGETS","CLIENT","CLIENT_PERMISSION","CLIENT_ROLE","CLIENT_SCOPE","CONSENT","EVENT","IDENTITY_PROVIDER","IDENTITY_PROVIDER_ROLE_MAPPING","KEY","PERMISSION","PERMISSION_POLICY","POLICY","REALM","ROLE","ROLE_ATTRIBUTE","ROLE_PERMISSION","SCOPE","SESSION","TRUST_ANCHOR","USER","USER_ATTRIBUTE","USER_AUTHENTICATOR","USER_PERMISSION","USER_ROLE","SCHEMA_FIELD_EXCLUSIONS","assertSchemaFieldsCoverEntity","name","schema","metadata","declared","Set","fields","default","allowed","excluded","missing","columns","filter","column","isSelect","map","propertyName","has","length","Error","join","validateEntitySchemas","dataSource","target","Object","entries","getOrFail","getMetadata"],"sources":["../../../../../src/app/modules/database/repositories/schema-validation.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 '@rapiq/core';\nimport { assertSchemaMatchesEntity } from '@rapiq/adapter-typeorm';\nimport type { DataSource, EntityMetadata, EntityTarget } from 'typeorm';\nimport { EntityType } from '@authup/core-kit';\nimport { schemaRegistry } from '../../../../core/index.ts';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n ConsentEntity,\n EventEntity,\n IdentityProviderEntity,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyEntity,\n RealmEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n SessionEntity,\n TrustAnchorEntity,\n UserAttributeEntity,\n UserAuthenticatorEntity,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\n\n/**\n * Entity class per registered schema name — the iteration source for\n * the boot-time validation. A mapped name missing from the registry\n * fails via `getOrFail`, so a renamed/removed schema surfaces here too.\n */\nconst SCHEMA_ENTITY_TARGETS : Record<string, EntityTarget<ObjectLiteral>> = {\n [EntityType.CLIENT]: ClientEntity,\n [EntityType.CLIENT_PERMISSION]: ClientPermissionEntity,\n [EntityType.CLIENT_ROLE]: ClientRoleEntity,\n [EntityType.CLIENT_SCOPE]: ClientScopeEntity,\n [EntityType.CONSENT]: ConsentEntity,\n [EntityType.EVENT]: EventEntity,\n [EntityType.IDENTITY_PROVIDER]: IdentityProviderEntity,\n [EntityType.IDENTITY_PROVIDER_ROLE_MAPPING]: IdentityProviderRoleMappingEntity,\n [EntityType.KEY]: KeyEntity,\n [EntityType.PERMISSION]: PermissionEntity,\n [EntityType.PERMISSION_POLICY]: PermissionPolicyEntity,\n [EntityType.POLICY]: PolicyEntity,\n [EntityType.REALM]: RealmEntity,\n [EntityType.ROLE]: RoleEntity,\n [EntityType.ROLE_ATTRIBUTE]: RoleAttributeEntity,\n [EntityType.ROLE_PERMISSION]: RolePermissionEntity,\n [EntityType.SCOPE]: ScopeEntity,\n [EntityType.SESSION]: SessionEntity,\n [EntityType.TRUST_ANCHOR]: TrustAnchorEntity,\n [EntityType.USER]: UserEntity,\n [EntityType.USER_ATTRIBUTE]: UserAttributeEntity,\n [EntityType.USER_AUTHENTICATOR]: UserAuthenticatorEntity,\n [EntityType.USER_PERMISSION]: UserPermissionEntity,\n [EntityType.USER_ROLE]: UserRoleEntity,\n};\n\n/**\n * Selectable columns deliberately kept out of a schema's field\n * allow-list. `select: false` columns are skipped automatically (the\n * entity already declares them hidden); everything listed here is a\n * column that IS selectable but must never ride the API projection.\n */\nconst SCHEMA_FIELD_EXCLUSIONS : Record<string, string[]> = {\n // device-internal credential blob (TOTP config, WebAuthn public key +\n // signature counter) — surfaced only through the challenge endpoint's\n // trimmed view.\n [EntityType.USER_AUTHENTICATOR]: ['parameters'],\n};\n\n/**\n * Every selectable column must appear in the schema's field allow-list:\n * rapiq derives the root projection from `fields` (`default` when\n * present, else `allowed`), so a column missing from BOTH silently\n * vanishes from every collection response — no error, just an absent\n * property (`role.builtIn` went missing this way).\n */\nexport function assertSchemaFieldsCoverEntity(\n name: string,\n schema: { fields?: { default?: string[], allowed?: string[] } },\n metadata: EntityMetadata,\n) : void {\n const declared = new Set([\n ...(schema.fields?.default || []),\n ...(schema.fields?.allowed || []),\n ]);\n\n const excluded = new Set(SCHEMA_FIELD_EXCLUSIONS[name] || []);\n const missing = metadata.columns\n .filter((column) => column.isSelect)\n .map((column) => column.propertyName)\n .filter((propertyName) => !declared.has(propertyName) && !excluded.has(propertyName));\n\n if (missing.length > 0) {\n throw new Error(\n `The schema \"${name}\" does not declare the field(s): ${missing.join(', ')}.`,\n );\n }\n}\n\n/**\n * Validate every registered entity schema against its TypeORM\n * metadata (`@rapiq/adapter-typeorm`'s `assertSchemaMatchesEntity`: allow-lists,\n * fields/sort defaults and the filters default condition tree must\n * reference existing columns/relations) and assert its field allow-list\n * covers every selectable column. Called by\n * `DatabaseModule.setup` once the DataSource is initialized —\n * schema/entity drift fails the boot, fail-fast.\n */\nexport function validateEntitySchemas(dataSource: DataSource) : void {\n for (const [name, target] of Object.entries(SCHEMA_ENTITY_TARGETS)) {\n const schema = schemaRegistry.getOrFail(name);\n const metadata = dataSource.getMetadata(target);\n\n assertSchemaMatchesEntity(schema, metadata);\n assertSchemaFieldsCoverEntity(name, schema, metadata);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CA,MAAM2B,wBAAsE;EACvE1B,WAAW2B,SAASzB;EACpBF,WAAW4B,oBAAoBzB;EAC/BH,WAAW6B,cAAczB;EACzBJ,WAAW8B,eAAezB;EAC1BL,WAAW+B,UAAUzB;EACrBN,WAAWgC,QAAQzB;EACnBP,WAAWiC,oBAAoBzB;EAC/BR,WAAWkC,iCAAiCzB;EAC5CT,WAAWmC,MAAMzB;EACjBV,WAAWoC,aAAazB;EACxBX,WAAWqC,oBAAoBzB;EAC/BZ,WAAWsC,SAASzB;EACpBb,WAAWuC,QAAQzB;EACnBd,WAAWwC,OAAOxB;EAClBhB,WAAWyC,iBAAiB1B;EAC5Bf,WAAW0C,kBAAkBzB;EAC7BjB,WAAW2C,QAAQzB;EACnBlB,WAAW4C,UAAUzB;EACrBnB,WAAW6C,eAAezB;EAC1BpB,WAAW8C,OAAOvB;EAClBvB,WAAW+C,iBAAiB1B;EAC5BrB,WAAWgD,qBAAqB1B;EAChCtB,WAAWiD,kBAAkBzB;EAC7BxB,WAAWkD,YAAYzB;AAC5B;;;;;;GAQA,MAAM0B,0BAAqD,GAItDnD,WAAWgD,qBAAqB,CAAC,YAAa,EACnD;;;;;;;GASA,SAAgBI,8BACZC,MACAC,QACAC,UAAwB;CAExB,MAAMC,2BAAW,IAAIC,IAAI,CACjBH,GAAAA,OAAOI,QAAQC,WAAW,CAAA,GAC1BL,GAAAA,OAAOI,QAAQE,WAAW,CAAA,CACjC,CAAA;CAED,MAAMC,WAAW,IAAIJ,IAAIN,wBAAwBE,SAAS,CAAA,CAAE;CAC5D,MAAMS,UAAUP,SAASQ,QACpBC,QAAQC,WAAWA,OAAOC,QAAQ,CAAA,CAClCC,KAAKF,WAAWA,OAAOG,YAAY,CAAA,CACnCJ,QAAQI,iBAAiB,CAACZ,SAASa,IAAID,YAAAA,KAAiB,CAACP,SAASQ,IAAID,YAAAA,CAAAA;CAE3E,IAAIN,QAAQQ,SAAS,GACjB,MAAM,IAAIC,MACN,eAAelB,KAAK,mCAAmCS,QAAQU,KAAK,IAAA,EAAM,EAAE;AAGxF;;;;;;;;;GAWA,SAAgBC,sBAAsBC,YAAsB;CACxD,KAAK,MAAM,CAACrB,MAAMsB,WAAWC,OAAOC,QAAQnD,qBAAAA,GAAwB;EAChE,MAAM4B,SAASrD,eAAe6E,UAAUzB,IAAAA;EACxC,MAAME,WAAWmB,WAAWK,YAAYJ,MAAAA;EAExC5E,0BAA0BuD,QAAQC,QAAAA;EAClCH,8BAA8BC,MAAMC,QAAQC,QAAAA;CAChD;AACJ"}
@@ -3,7 +3,7 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { ScopeEntity } from "../../../../../adapters/database/domains/scope/entity.mjs";
5
5
  import "../../../../../adapters/database/domains/index.mjs";
6
- import { applyQuery } from "../query.mjs";
6
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
7
7
  import { isEntityUnique, translateWhereConditions } from "../helpers.mjs";
8
8
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
9
9
  import "../../../../../adapters/database/index.mjs";
@@ -24,7 +24,7 @@ var ScopeRepositoryAdapter = class {
24
24
  const { pagination } = applyQuery(qb, query);
25
25
  const [entities, total] = await qb.getManyAndCount();
26
26
  return {
27
- data: entities,
27
+ data: redactFieldConditions(query, entities),
28
28
  meta: {
29
29
  total,
30
30
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","isEntityUnique","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Scope } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('scope.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAaQ,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;EAC5C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA+D;EAC1E,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGE,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAef,WAAWY,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAmC;EAC3C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGe,MAAM,sBAAsB,EAAEF,KAAK,CAAA;EAEtC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,4BAA4B,EAAEF,QAAQ,CAAA;EACtD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAuC;EAC7E,OAAOpC,OAAOmC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA8C;EAC3D,OAAO,KAAKpB,WAAW6B,OAAOjC,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAmD;EAC/D,OAAO,KAAKpB,WAAWgB,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA6B;EAChC,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAepB,MAA6B;EAC9C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA+B;EACtC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAqC;EAC3D,MAAMpB,0BAA0BoB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;EAClB,CAAA;CACJ;CAEA,MAAM2C,gBAAgB5B,MAAsB6B,UAAiC;EAQzE,IAAI,CAACC,MAPkB/C,eAAe;GAClCyC,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;GACdmC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI/C,sBAAAA;CAElB;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","isEntityUnique","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Scope } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('scope.realmId = :realmId', { realmId });\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAaS,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;EAC5C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA+D;EAC1E,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGE,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,KAAAA;EAEtC,MAAM,CAACK,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMnB,sBAAsBW,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAAmC;EAC3C,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMd,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;EAC9CD,GAAGe,MAAM,sBAAsB,EAAEF,KAAK,CAAA;EAEtC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKpB,gBAAgBqB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXhB,GAAGkB,SAAS,4BAA4B,EAAEF,QAAQ,CAAA;EACtD;EAEA,OAAOhB,GAAGmB,OAAM;CACpB;CAEA,MAAMC,kBAAkBC,UAAkBC,OAAuC;EAC7E,OAAOrC,OAAOoC,QAAAA,IACV,KAAKZ,YAAYY,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWR,OAA8C;EAC3D,OAAO,KAAKpB,WAAW6B,OAAOjC,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAmD;EAC/D,OAAO,KAAKpB,WAAWgB,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAU,OAAOlB,MAA6B;EAChC,OAAO,KAAKZ,WAAW8B,OAAOlB,IAAAA;CAClC;CAEAmB,MAAMC,QAAepB,MAA6B;EAC9C,OAAO,KAAKZ,WAAW+B,MAAMC,QAAQpB,IAAAA;CACzC;CAEA,MAAMqB,KAAKD,QAA+B;EACtC,OAAO,KAAKhC,WAAWiC,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAA8B;EACvC,MAAM,KAAKhC,WAAWkC,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBvB,MAAqC;EAC3D,MAAMrB,0BAA0BqB,MAAM;GAClCwB,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;EAClB,CAAA;CACJ;CAEA,MAAM2C,gBAAgB5B,MAAsB6B,UAAiC;EAQzE,IAAI,CAACC,MAPkB/C,eAAe;GAClCyC,YAAY,KAAKpC,WAAWqC,QAAQC;GACpCC,cAAc1C;GACdmC,QAAQpB;GACR+B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI/C,sBAAAA;CAElB;AACJ"}
@@ -3,7 +3,7 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { RealmEntity } from "../../../../../adapters/database/domains/realm/entity.mjs";
5
5
  import { TrustAnchorEntity } from "../../../../../adapters/database/domains/trust-anchor/entity.mjs";
6
- import { applyQuery } from "../query.mjs";
6
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
7
7
  import { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from "../helpers.mjs";
8
8
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
9
9
  import "../../../../../adapters/database/index.mjs";
@@ -28,7 +28,7 @@ var TrustAnchorRepositoryAdapter = class {
28
28
  applyRealmScopeSelect(qb, "trustAnchor");
29
29
  const [entities, total] = await qb.getManyAndCount();
30
30
  return {
31
- data: entities,
31
+ data: redactFieldConditions(query, entities),
32
32
  meta: {
33
33
  total,
34
34
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","RealmEntity","TrustAnchorEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","TrustAnchorRepositoryAdapter","dataSource","realmRepository","getRepository","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/trust-anchor/repository.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 { TrustAnchor } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { DataSource, FindOptionsWhere, Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport { DatabaseConflictError, RealmEntity, TrustAnchorEntity } from '../../../../../adapters/database/index.ts';\nimport type { IRealmRepository, ITrustAnchorRepository } from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport class TrustAnchorRepositoryAdapter implements ITrustAnchorRepository {\n protected dataSource: DataSource;\n\n protected realmRepository: IRealmRepository;\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource;\n this.realmRepository = new RealmRepositoryAdapter(dataSource.getRepository(RealmEntity));\n }\n\n protected get repository(): Repository<TrustAnchorEntity> {\n return this.dataSource.getRepository(TrustAnchorEntity);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<TrustAnchor>> {\n const qb = this.repository.createQueryBuilder('trustAnchor');\n qb.groupBy('trustAnchor.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'trustAnchor');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<TrustAnchor | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<TrustAnchor | null> {\n const where: FindOptionsWhere<TrustAnchorEntity> = { name };\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n\n where.realmId = realmId;\n }\n\n return this.repository.findOneBy(where);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<TrustAnchor | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<TrustAnchor[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<TrustAnchor | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.create(data);\n }\n\n merge(entity: TrustAnchor, data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.merge(entity as TrustAnchorEntity, data);\n }\n\n async save(entity: TrustAnchor): Promise<TrustAnchor> {\n return this.repository.save(entity as TrustAnchorEntity);\n }\n\n async remove(entity: TrustAnchor): Promise<void> {\n await this.repository.remove(entity as TrustAnchorEntity);\n }\n\n async validateJoinColumns(data: Partial<TrustAnchor>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n });\n }\n\n async checkUniqueness(data: Partial<TrustAnchor>, existing?: TrustAnchor): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAaU,+BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,YAAwB;EAChC,KAAKA,aAAaA;EAClB,KAAKC,kBAAkB,IAAIH,uBAAuBE,WAAWE,cAAcT,WAAAA,CAAAA;CAC/E;CAEA,IAAcU,aAA4C;EACtD,OAAO,KAAKH,WAAWE,cAAcR,iBAAAA;CACzC;CAEA,MAAMU,SAASC,OAAqE;EAChF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,aAAA;EAC9CD,GAAGE,QAAQ,gBAAA;EAEX,MAAM,EAAEC,eAAelB,WAAWe,IAAID,KAAAA;EAEtCV,sBAAsBW,IAAI,aAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,YAAYC,IAAyC;EACvD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAgD;EAC9E,MAAMC,QAA6C,EAAEF,KAAK;EAE1D,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKrB,gBAAgBsB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAGXD,MAAMC,UAAUA;EACpB;EAEA,OAAO,KAAKnB,WAAWc,UAAUI,KAAAA;CACrC;CAEA,MAAMG,kBAAkBC,UAAkBC,OAA6C;EACnF,OAAOrC,OAAOoC,QAAAA,IACV,KAAKV,YAAYU,QAAAA,IACjB,KAAKP,cAAcO,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWN,OAAoD;EACjE,OAAO,KAAKlB,WAAWyB,OAAO/B,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAyD;EACrE,OAAO,KAAKlB,WAAWc,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAQ,OAAOhB,MAAyC;EAC5C,OAAO,KAAKV,WAAW0B,OAAOhB,IAAAA;CAClC;CAEAiB,MAAMC,QAAqBlB,MAAyC;EAChE,OAAO,KAAKV,WAAW2B,MAAMC,QAA6BlB,IAAAA;CAC9D;CAEA,MAAMmB,KAAKD,QAA2C;EAClD,OAAO,KAAK5B,WAAW6B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAoC;EAC7C,MAAM,KAAK5B,WAAW8B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBrB,MAA2C;EACjE,MAAMvB,0BAA0BuB,MAAM;GAClCb,YAAY,KAAKA;GACjBmC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,gBAAgBvB,MAA4BwB,UAAuC;EAQrF,IAAI,CAACC,MAPkB1C,eAAe;GAClCI,YAAY,KAAKA;GACjBmC,cAAczC;GACdqC,QAAQlB;GACR0B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI7C,sBAAAA;CAElB;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","validateEntityJoinColumns","applyQuery","redactFieldConditions","DatabaseConflictError","RealmEntity","TrustAnchorEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","RealmRepositoryAdapter","TrustAnchorRepositoryAdapter","dataSource","realmRepository","getRepository","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realmId","resolveId","findOneByIdOrName","idOrName","realm","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/trust-anchor/repository.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 { TrustAnchor } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport { isUUID } from '@authup/kit';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { DataSource, FindOptionsWhere, Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery, redactFieldConditions } from '../query.ts';\nimport { DatabaseConflictError, RealmEntity, TrustAnchorEntity } from '../../../../../adapters/database/index.ts';\nimport type { IRealmRepository, ITrustAnchorRepository } from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport class TrustAnchorRepositoryAdapter implements ITrustAnchorRepository {\n protected dataSource: DataSource;\n\n protected realmRepository: IRealmRepository;\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource;\n this.realmRepository = new RealmRepositoryAdapter(dataSource.getRepository(RealmEntity));\n }\n\n protected get repository(): Repository<TrustAnchorEntity> {\n return this.dataSource.getRepository(TrustAnchorEntity);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<TrustAnchor>> {\n const qb = this.repository.createQueryBuilder('trustAnchor');\n qb.groupBy('trustAnchor.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'trustAnchor');\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<TrustAnchor | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<TrustAnchor | null> {\n const where: FindOptionsWhere<TrustAnchorEntity> = { name };\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n\n where.realmId = realmId;\n }\n\n return this.repository.findOneBy(where);\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<TrustAnchor | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<TrustAnchor[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<TrustAnchor | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.create(data);\n }\n\n merge(entity: TrustAnchor, data: Partial<TrustAnchor>): TrustAnchor {\n return this.repository.merge(entity as TrustAnchorEntity, data);\n }\n\n async save(entity: TrustAnchor): Promise<TrustAnchor> {\n return this.repository.save(entity as TrustAnchorEntity);\n }\n\n async remove(entity: TrustAnchor): Promise<void> {\n await this.repository.remove(entity as TrustAnchorEntity);\n }\n\n async validateJoinColumns(data: Partial<TrustAnchor>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n });\n }\n\n async checkUniqueness(data: Partial<TrustAnchor>, existing?: TrustAnchor): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.dataSource,\n entityTarget: TrustAnchorEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,IAAaW,+BAAb,MAAaA;CACCC;CAEAC;CAEV,YAAYD,YAAwB;EAChC,KAAKA,aAAaA;EAClB,KAAKC,kBAAkB,IAAIH,uBAAuBE,WAAWE,cAAcT,WAAAA,CAAAA;CAC/E;CAEA,IAAcU,aAA4C;EACtD,OAAO,KAAKH,WAAWE,cAAcR,iBAAAA;CACzC;CAEA,MAAMU,SAASC,OAAqE;EAChF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,aAAA;EAC9CD,GAAGE,QAAQ,gBAAA;EAEX,MAAM,EAAEC,eAAenB,WAAWgB,IAAID,KAAAA;EAEtCV,sBAAsBW,IAAI,aAAA;EAE1B,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMtB,sBAAsBc,OAAOK,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMM,YAAYC,IAAyC;EACvD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,cAAcC,MAAcC,UAAgD;EAC9E,MAAMC,QAA6C,EAAEF,KAAK;EAE1D,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKrB,gBAAgBsB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAGXD,MAAMC,UAAUA;EACpB;EAEA,OAAO,KAAKnB,WAAWc,UAAUI,KAAAA;CACrC;CAEA,MAAMG,kBAAkBC,UAAkBC,OAA6C;EACnF,OAAOtC,OAAOqC,QAAAA,IACV,KAAKV,YAAYU,QAAAA,IACjB,KAAKP,cAAcO,UAAUC,KAAAA;CACrC;CAEA,MAAMC,WAAWN,OAAoD;EACjE,OAAO,KAAKlB,WAAWyB,OAAO/B,yBAAyBwB,KAAAA,CAAAA;CAC3D;CAEA,MAAMJ,UAAUI,OAAyD;EACrE,OAAO,KAAKlB,WAAWc,UAAUpB,yBAAyBwB,KAAAA,CAAAA;CAC9D;CAEAQ,OAAOhB,MAAyC;EAC5C,OAAO,KAAKV,WAAW0B,OAAOhB,IAAAA;CAClC;CAEAiB,MAAMC,QAAqBlB,MAAyC;EAChE,OAAO,KAAKV,WAAW2B,MAAMC,QAA6BlB,IAAAA;CAC9D;CAEA,MAAMmB,KAAKD,QAA2C;EAClD,OAAO,KAAK5B,WAAW6B,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAoC;EAC7C,MAAM,KAAK5B,WAAW8B,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBrB,MAA2C;EACjE,MAAMxB,0BAA0BwB,MAAM;GAClCb,YAAY,KAAKA;GACjBmC,cAAczC;EAClB,CAAA;CACJ;CAEA,MAAM0C,gBAAgBvB,MAA4BwB,UAAuC;EAQrF,IAAI,CAACC,MAPkB1C,eAAe;GAClCI,YAAY,KAAKA;GACjBmC,cAAczC;GACdqC,QAAQlB;GACR0B,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI7C,sBAAAA;CAElB;AACJ"}
@@ -6,7 +6,7 @@ import { UserEntity } from "../../../../../adapters/database/domains/user/entity
6
6
  import { UserPermissionEntity } from "../../../../../adapters/database/domains/user-permission/entity.mjs";
7
7
  import { UserRoleEntity } from "../../../../../adapters/database/domains/user-role/entity.mjs";
8
8
  import "../../../../../adapters/database/domains/index.mjs";
9
- import { applyQuery } from "../query.mjs";
9
+ import { applyQuery, redactFieldConditions } from "../query.mjs";
10
10
  import { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from "../helpers.mjs";
11
11
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
12
12
  import "../../../../../adapters/database/index.mjs";
@@ -31,7 +31,7 @@ var UserRepositoryAdapter = class {
31
31
  const [entities, total] = await qb.getManyAndCount();
32
32
  await this.repository.extendManyWithEA(entities);
33
33
  return {
34
- data: entities,
34
+ data: redactFieldConditions(query, entities),
35
35
  meta: {
36
36
  total,
37
37
  ...pagination