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

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 (730) hide show
  1. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  2. package/dist/adapters/database/domains/client/entity.mjs +58 -30
  3. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
  5. package/dist/adapters/database/domains/client-permission/entity.mjs +48 -24
  6. package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
  7. package/dist/adapters/database/domains/client-role/entity.d.ts.map +1 -1
  8. package/dist/adapters/database/domains/client-role/entity.mjs +37 -17
  9. package/dist/adapters/database/domains/client-role/entity.mjs.map +1 -1
  10. package/dist/adapters/database/domains/client-scope/entity.d.ts.map +1 -1
  11. package/dist/adapters/database/domains/client-scope/entity.mjs +30 -14
  12. package/dist/adapters/database/domains/client-scope/entity.mjs.map +1 -1
  13. package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -1
  14. package/dist/adapters/database/domains/consent/entity.mjs +34 -18
  15. package/dist/adapters/database/domains/consent/entity.mjs.map +1 -1
  16. package/dist/adapters/database/domains/event/entity.d.ts +1 -0
  17. package/dist/adapters/database/domains/event/entity.d.ts.map +1 -1
  18. package/dist/adapters/database/domains/event/entity.mjs +48 -23
  19. package/dist/adapters/database/domains/event/entity.mjs.map +1 -1
  20. package/dist/adapters/database/domains/identity-provider/entity.d.ts.map +1 -1
  21. package/dist/adapters/database/domains/identity-provider/entity.mjs +43 -23
  22. package/dist/adapters/database/domains/identity-provider/entity.mjs.map +1 -1
  23. package/dist/adapters/database/domains/identity-provider-account/entity.d.ts.map +1 -1
  24. package/dist/adapters/database/domains/identity-provider-account/entity.mjs +50 -22
  25. package/dist/adapters/database/domains/identity-provider-account/entity.mjs.map +1 -1
  26. package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts.map +1 -1
  27. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs +14 -6
  28. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs.map +1 -1
  29. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts.map +1 -1
  30. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs +5 -1
  31. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs.map +1 -1
  32. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts.map +1 -1
  33. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs +18 -6
  34. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs.map +1 -1
  35. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts.map +1 -1
  36. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs +34 -14
  37. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs.map +1 -1
  38. package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
  39. package/dist/adapters/database/domains/key/entity.mjs +35 -19
  40. package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
  41. package/dist/adapters/database/domains/permission/entity.d.ts.map +1 -1
  42. package/dist/adapters/database/domains/permission/entity.mjs +35 -19
  43. package/dist/adapters/database/domains/permission/entity.mjs.map +1 -1
  44. package/dist/adapters/database/domains/permission-policy/entity.d.ts.map +1 -1
  45. package/dist/adapters/database/domains/permission-policy/entity.mjs +37 -17
  46. package/dist/adapters/database/domains/permission-policy/entity.mjs.map +1 -1
  47. package/dist/adapters/database/domains/policy/entity.d.ts.map +1 -1
  48. package/dist/adapters/database/domains/policy/entity.mjs +51 -27
  49. package/dist/adapters/database/domains/policy/entity.mjs.map +1 -1
  50. package/dist/adapters/database/domains/policy-attribute/entity.d.ts.map +1 -1
  51. package/dist/adapters/database/domains/policy-attribute/entity.mjs +14 -6
  52. package/dist/adapters/database/domains/policy-attribute/entity.mjs.map +1 -1
  53. package/dist/adapters/database/domains/realm/entity.d.ts.map +1 -1
  54. package/dist/adapters/database/domains/realm/entity.mjs +36 -20
  55. package/dist/adapters/database/domains/realm/entity.mjs.map +1 -1
  56. package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
  57. package/dist/adapters/database/domains/role/entity.mjs +44 -24
  58. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  59. package/dist/adapters/database/domains/role-attribute/entity.d.ts.map +1 -1
  60. package/dist/adapters/database/domains/role-attribute/entity.mjs +30 -14
  61. package/dist/adapters/database/domains/role-attribute/entity.mjs.map +1 -1
  62. package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
  63. package/dist/adapters/database/domains/role-permission/entity.mjs +45 -21
  64. package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
  65. package/dist/adapters/database/domains/scope/entity.d.ts.map +1 -1
  66. package/dist/adapters/database/domains/scope/entity.mjs +35 -19
  67. package/dist/adapters/database/domains/scope/entity.mjs.map +1 -1
  68. package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
  69. package/dist/adapters/database/domains/session/entity.mjs +63 -31
  70. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  71. package/dist/adapters/database/domains/session-token/entity.d.ts +4 -1
  72. package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -1
  73. package/dist/adapters/database/domains/session-token/entity.mjs +40 -11
  74. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -1
  75. package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -1
  76. package/dist/adapters/database/domains/trust-anchor/entity.mjs +25 -13
  77. package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -1
  78. package/dist/adapters/database/domains/user/entity.d.ts.map +1 -1
  79. package/dist/adapters/database/domains/user/entity.mjs +58 -34
  80. package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
  81. package/dist/adapters/database/domains/user-attribute/entity.d.ts.map +1 -1
  82. package/dist/adapters/database/domains/user-attribute/entity.mjs +27 -11
  83. package/dist/adapters/database/domains/user-attribute/entity.mjs.map +1 -1
  84. package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -1
  85. package/dist/adapters/database/domains/user-authenticator/entity.mjs +43 -23
  86. package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -1
  87. package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
  88. package/dist/adapters/database/domains/user-permission/entity.mjs +45 -21
  89. package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
  90. package/dist/adapters/database/domains/user-role/entity.d.ts.map +1 -1
  91. package/dist/adapters/database/domains/user-role/entity.mjs +37 -17
  92. package/dist/adapters/database/domains/user-role/entity.mjs.map +1 -1
  93. package/dist/adapters/database/errors/driver.d.ts +9 -0
  94. package/dist/adapters/database/errors/driver.d.ts.map +1 -1
  95. package/dist/adapters/database/errors/driver.mjs +20 -1
  96. package/dist/adapters/database/errors/driver.mjs.map +1 -1
  97. package/dist/adapters/database/errors/index.mjs +2 -2
  98. package/dist/adapters/database/helpers/index.mjs +2 -2
  99. package/dist/adapters/database/helpers/is-supported.d.ts +7 -0
  100. package/dist/adapters/database/helpers/is-supported.d.ts.map +1 -1
  101. package/dist/adapters/database/helpers/is-supported.mjs +9 -1
  102. package/dist/adapters/database/helpers/is-supported.mjs.map +1 -1
  103. package/dist/adapters/database/index.mjs +3 -3
  104. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.d.ts +66 -0
  105. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.d.ts.map +1 -0
  106. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.mjs +181 -0
  107. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.mjs.map +1 -0
  108. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.d.ts +44 -0
  109. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.d.ts.map +1 -0
  110. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.mjs +1294 -0
  111. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.mjs.map +1 -0
  112. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.d.ts +43 -0
  113. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.d.ts.map +1 -0
  114. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.mjs +120 -0
  115. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.mjs.map +1 -0
  116. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.d.ts +44 -0
  117. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.d.ts.map +1 -0
  118. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.mjs +987 -0
  119. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.mjs.map +1 -0
  120. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +14 -2
  121. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  122. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +85 -19
  123. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  124. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +4 -1
  125. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
  126. package/dist/adapters/http/controllers/entities/identity-provider-account/index.d.ts.map +1 -0
  127. package/dist/adapters/http/controllers/entities/identity-provider-account/index.mjs +5 -0
  128. package/dist/adapters/http/controllers/entities/identity-provider-account/module.d.ts +15 -0
  129. package/dist/adapters/http/controllers/entities/identity-provider-account/module.d.ts.map +1 -0
  130. package/dist/adapters/http/controllers/entities/identity-provider-account/module.mjs +94 -0
  131. package/dist/adapters/http/controllers/entities/identity-provider-account/module.mjs.map +1 -0
  132. package/dist/adapters/http/controllers/entities/index.d.ts +2 -0
  133. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  134. package/dist/adapters/http/controllers/entities/index.mjs +5 -1
  135. package/dist/adapters/http/controllers/entities/session-token/index.d.ts +2 -0
  136. package/dist/adapters/http/controllers/entities/session-token/index.d.ts.map +1 -0
  137. package/dist/adapters/http/controllers/entities/session-token/index.mjs +5 -0
  138. package/dist/adapters/http/controllers/entities/session-token/module.d.ts +23 -0
  139. package/dist/adapters/http/controllers/entities/session-token/module.d.ts.map +1 -0
  140. package/dist/adapters/http/controllers/entities/session-token/module.mjs +112 -0
  141. package/dist/adapters/http/controllers/entities/session-token/module.mjs.map +1 -0
  142. package/dist/adapters/http/controllers/index.mjs +4 -1
  143. package/dist/adapters/http/controllers/workflows/account/index.d.ts +2 -0
  144. package/dist/adapters/http/controllers/workflows/account/index.d.ts.map +1 -0
  145. package/dist/adapters/http/controllers/workflows/account/index.mjs +5 -0
  146. package/dist/adapters/http/controllers/workflows/account/module.d.ts +24 -0
  147. package/dist/adapters/http/controllers/workflows/account/module.d.ts.map +1 -0
  148. package/dist/adapters/http/controllers/workflows/account/module.mjs +63 -0
  149. package/dist/adapters/http/controllers/workflows/account/module.mjs.map +1 -0
  150. package/dist/adapters/http/controllers/workflows/activate/module.mjs +1 -1
  151. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts.map +1 -1
  152. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -0
  153. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  154. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +2 -2
  155. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  156. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  157. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  158. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  159. package/dist/adapters/http/controllers/workflows/logout/module.mjs +2 -2
  160. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  161. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +1 -1
  162. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +1 -1
  163. package/dist/adapters/http/controllers/workflows/register/module.mjs +1 -1
  164. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -1
  165. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +5 -1
  166. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -1
  167. package/dist/adapters/http/index.mjs +5 -1
  168. package/dist/adapters/http/middleware/built-in/assets.d.ts +8 -1
  169. package/dist/adapters/http/middleware/built-in/assets.d.ts.map +1 -1
  170. package/dist/adapters/http/middleware/built-in/assets.mjs +48 -4
  171. package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
  172. package/dist/adapters/http/middleware/built-in/error.d.ts.map +1 -1
  173. package/dist/adapters/http/middleware/built-in/error.mjs +4 -3
  174. package/dist/adapters/http/middleware/built-in/error.mjs.map +1 -1
  175. package/dist/adapters/http/middleware/built-in/index.d.ts +2 -0
  176. package/dist/adapters/http/middleware/built-in/index.d.ts.map +1 -1
  177. package/dist/adapters/http/middleware/built-in/index.mjs +2 -1
  178. package/dist/adapters/http/middleware/built-in/theme.d.ts +15 -0
  179. package/dist/adapters/http/middleware/built-in/theme.d.ts.map +1 -0
  180. package/dist/adapters/http/middleware/built-in/theme.mjs +27 -0
  181. package/dist/adapters/http/middleware/built-in/theme.mjs.map +1 -0
  182. package/dist/adapters/http/middleware/built-in/types.d.ts +14 -0
  183. package/dist/adapters/http/middleware/built-in/types.d.ts.map +1 -0
  184. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +1 -1
  185. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +1 -1
  186. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +1 -1
  187. package/dist/adapters/http/middleware/index.mjs +2 -1
  188. package/dist/adapters/http/request/event-context.d.ts.map +1 -1
  189. package/dist/adapters/http/request/event-context.mjs +2 -0
  190. package/dist/adapters/http/request/event-context.mjs.map +1 -1
  191. package/dist/adapters/http/ui/account-console/index.d.ts +4 -0
  192. package/dist/adapters/http/ui/account-console/index.d.ts.map +1 -0
  193. package/dist/adapters/http/ui/account-console/index.mjs +6 -0
  194. package/dist/adapters/http/ui/account-console/module.d.ts +28 -0
  195. package/dist/adapters/http/ui/account-console/module.d.ts.map +1 -0
  196. package/dist/adapters/http/ui/account-console/module.mjs +80 -0
  197. package/dist/adapters/http/ui/account-console/module.mjs.map +1 -0
  198. package/dist/adapters/http/ui/account-console/ref.d.ts +30 -0
  199. package/dist/adapters/http/ui/account-console/ref.d.ts.map +1 -0
  200. package/dist/adapters/http/ui/account-console/ref.mjs +50 -0
  201. package/dist/adapters/http/ui/account-console/ref.mjs.map +1 -0
  202. package/dist/adapters/http/ui/account-console/types.d.ts +11 -0
  203. package/dist/adapters/http/ui/account-console/types.d.ts.map +1 -0
  204. package/dist/adapters/http/ui/account-console/types.mjs +4 -0
  205. package/dist/adapters/http/ui/{internal-http-client.d.ts → auth-console/http-client.d.ts} +1 -1
  206. package/dist/adapters/http/ui/auth-console/http-client.d.ts.map +1 -0
  207. package/dist/adapters/http/ui/{internal-http-client.mjs → auth-console/http-client.mjs} +2 -2
  208. package/dist/adapters/http/ui/auth-console/http-client.mjs.map +1 -0
  209. package/dist/adapters/http/ui/auth-console/index.d.ts +6 -0
  210. package/dist/adapters/http/ui/auth-console/index.d.ts.map +1 -0
  211. package/dist/adapters/http/ui/auth-console/index.mjs +8 -0
  212. package/dist/adapters/http/ui/auth-console/module.d.ts +4 -0
  213. package/dist/adapters/http/ui/auth-console/module.d.ts.map +1 -0
  214. package/dist/adapters/http/ui/auth-console/module.mjs +73 -0
  215. package/dist/adapters/http/ui/auth-console/module.mjs.map +1 -0
  216. package/dist/adapters/http/ui/auth-console/resolve.d.ts +21 -0
  217. package/dist/adapters/http/ui/auth-console/resolve.d.ts.map +1 -0
  218. package/dist/adapters/http/ui/auth-console/resolve.mjs +53 -0
  219. package/dist/adapters/http/ui/auth-console/resolve.mjs.map +1 -0
  220. package/dist/adapters/http/ui/{serve.d.ts → auth-console/serve.d.ts} +1 -8
  221. package/dist/adapters/http/ui/auth-console/serve.d.ts.map +1 -0
  222. package/dist/adapters/http/ui/{serve.mjs → auth-console/serve.mjs} +5 -5
  223. package/dist/adapters/http/ui/auth-console/serve.mjs.map +1 -0
  224. package/dist/adapters/http/ui/auth-console/types.d.ts +26 -0
  225. package/dist/adapters/http/ui/auth-console/types.d.ts.map +1 -0
  226. package/dist/adapters/http/ui/auth-console/types.mjs +4 -0
  227. package/dist/adapters/http/ui/console-packages/index.d.ts +3 -0
  228. package/dist/adapters/http/ui/console-packages/index.d.ts.map +1 -0
  229. package/dist/adapters/http/ui/console-packages/index.mjs +5 -0
  230. package/dist/adapters/http/ui/console-packages/module.d.ts +33 -0
  231. package/dist/adapters/http/ui/console-packages/module.d.ts.map +1 -0
  232. package/dist/adapters/http/ui/console-packages/module.mjs +70 -0
  233. package/dist/adapters/http/ui/console-packages/module.mjs.map +1 -0
  234. package/dist/adapters/http/ui/console-packages/types.d.ts +12 -0
  235. package/dist/adapters/http/ui/console-packages/types.d.ts.map +1 -0
  236. package/dist/adapters/http/ui/console-packages/types.mjs +4 -0
  237. package/dist/adapters/http/ui/index.d.ts +5 -5
  238. package/dist/adapters/http/ui/index.d.ts.map +1 -1
  239. package/dist/adapters/http/ui/index.mjs +22 -5
  240. package/dist/adapters/http/ui/shared/html.d.ts +76 -0
  241. package/dist/adapters/http/ui/shared/html.d.ts.map +1 -0
  242. package/dist/adapters/http/ui/shared/html.mjs +103 -0
  243. package/dist/adapters/http/ui/shared/html.mjs.map +1 -0
  244. package/dist/adapters/http/ui/shared/index.d.ts +2 -0
  245. package/dist/adapters/http/ui/shared/index.d.ts.map +1 -0
  246. package/dist/adapters/http/ui/shared/index.mjs +5 -0
  247. package/dist/adapters/http/ui/theme/apply.d.ts +12 -0
  248. package/dist/adapters/http/ui/theme/apply.d.ts.map +1 -0
  249. package/dist/adapters/http/ui/theme/apply.mjs +29 -0
  250. package/dist/adapters/http/ui/theme/apply.mjs.map +1 -0
  251. package/dist/adapters/http/ui/theme/assets.d.ts +20 -0
  252. package/dist/adapters/http/ui/theme/assets.d.ts.map +1 -0
  253. package/dist/adapters/http/ui/theme/assets.mjs +86 -0
  254. package/dist/adapters/http/ui/theme/assets.mjs.map +1 -0
  255. package/dist/adapters/http/ui/theme/constants.d.ts +16 -0
  256. package/dist/adapters/http/ui/theme/constants.d.ts.map +1 -0
  257. package/dist/adapters/http/ui/theme/constants.mjs +20 -0
  258. package/dist/adapters/http/ui/theme/constants.mjs.map +1 -0
  259. package/dist/adapters/http/ui/theme/contract/constants.d.ts +120 -0
  260. package/dist/adapters/http/ui/theme/contract/constants.d.ts.map +1 -0
  261. package/dist/adapters/http/ui/theme/contract/constants.mjs +136 -0
  262. package/dist/adapters/http/ui/theme/contract/constants.mjs.map +1 -0
  263. package/dist/adapters/http/ui/theme/contract/head.d.ts +12 -0
  264. package/dist/adapters/http/ui/theme/contract/head.d.ts.map +1 -0
  265. package/dist/adapters/http/ui/theme/contract/head.mjs +61 -0
  266. package/dist/adapters/http/ui/theme/contract/head.mjs.map +1 -0
  267. package/dist/adapters/http/ui/theme/contract/index.d.ts +6 -0
  268. package/dist/adapters/http/ui/theme/contract/index.d.ts.map +1 -0
  269. package/dist/adapters/http/ui/theme/contract/index.mjs +8 -0
  270. package/dist/adapters/http/ui/theme/contract/manifest.d.ts +25 -0
  271. package/dist/adapters/http/ui/theme/contract/manifest.d.ts.map +1 -0
  272. package/dist/adapters/http/ui/theme/contract/manifest.mjs +77 -0
  273. package/dist/adapters/http/ui/theme/contract/manifest.mjs.map +1 -0
  274. package/dist/adapters/http/ui/theme/contract/types.d.ts +26 -0
  275. package/dist/adapters/http/ui/theme/contract/types.d.ts.map +1 -0
  276. package/dist/adapters/http/ui/theme/contract/types.mjs +4 -0
  277. package/dist/adapters/http/ui/theme/contract/utils.d.ts +11 -0
  278. package/dist/adapters/http/ui/theme/contract/utils.d.ts.map +1 -0
  279. package/dist/adapters/http/ui/theme/contract/utils.mjs +22 -0
  280. package/dist/adapters/http/ui/theme/contract/utils.mjs.map +1 -0
  281. package/dist/adapters/http/ui/theme/index.d.ts +7 -0
  282. package/dist/adapters/http/ui/theme/index.d.ts.map +1 -0
  283. package/dist/adapters/http/ui/theme/index.mjs +13 -0
  284. package/dist/adapters/http/ui/theme/module.d.ts +79 -0
  285. package/dist/adapters/http/ui/theme/module.d.ts.map +1 -0
  286. package/dist/adapters/http/ui/theme/module.mjs +206 -0
  287. package/dist/adapters/http/ui/theme/module.mjs.map +1 -0
  288. package/dist/adapters/http/ui/theme/types.d.ts +42 -0
  289. package/dist/adapters/http/ui/theme/types.d.ts.map +1 -0
  290. package/dist/adapters/http/ui/theme/types.mjs +4 -0
  291. package/dist/app/index.mjs +4 -2
  292. package/dist/app/modules/config/constants.d.ts +5 -0
  293. package/dist/app/modules/config/constants.d.ts.map +1 -1
  294. package/dist/app/modules/config/constants.mjs +5 -0
  295. package/dist/app/modules/config/constants.mjs.map +1 -1
  296. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  297. package/dist/app/modules/config/normalize.mjs +8 -0
  298. package/dist/app/modules/config/normalize.mjs.map +1 -1
  299. package/dist/app/modules/config/origins.d.ts.map +1 -1
  300. package/dist/app/modules/config/origins.mjs +2 -0
  301. package/dist/app/modules/config/origins.mjs.map +1 -1
  302. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  303. package/dist/app/modules/config/read/env.mjs +10 -0
  304. package/dist/app/modules/config/read/env.mjs.map +1 -1
  305. package/dist/app/modules/config/types.d.ts +63 -3
  306. package/dist/app/modules/config/types.d.ts.map +1 -1
  307. package/dist/app/modules/config/validator.d.ts.map +1 -1
  308. package/dist/app/modules/config/validator.mjs +5 -0
  309. package/dist/app/modules/config/validator.mjs.map +1 -1
  310. package/dist/app/modules/database/index.mjs +2 -1
  311. package/dist/app/modules/database/repositories/identity-provider-account/index.d.ts +2 -0
  312. package/dist/app/modules/database/repositories/identity-provider-account/index.d.ts.map +1 -0
  313. package/dist/app/modules/database/repositories/identity-provider-account/index.mjs +5 -0
  314. package/dist/app/modules/database/repositories/identity-provider-account/repository.d.ts +18 -0
  315. package/dist/app/modules/database/repositories/identity-provider-account/repository.d.ts.map +1 -0
  316. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs +69 -0
  317. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs.map +1 -0
  318. package/dist/app/modules/database/repositories/index.d.ts +1 -0
  319. package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
  320. package/dist/app/modules/database/repositories/index.mjs +3 -1
  321. package/dist/app/modules/database/repositories/key/repository.d.ts +23 -0
  322. package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -1
  323. package/dist/app/modules/database/repositories/key/repository.mjs +39 -3
  324. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  325. package/dist/app/modules/database/repositories/schema-validation.d.ts +14 -6
  326. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
  327. package/dist/app/modules/database/repositories/schema-validation.mjs +18 -6
  328. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
  329. package/dist/app/modules/http/module.d.ts.map +1 -1
  330. package/dist/app/modules/http/module.mjs +7 -1
  331. package/dist/app/modules/http/module.mjs.map +1 -1
  332. package/dist/app/modules/http/modules/controller.d.ts +5 -2
  333. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  334. package/dist/app/modules/http/modules/controller.mjs +57 -6
  335. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  336. package/dist/app/modules/http/modules/middleware.d.ts +9 -1
  337. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  338. package/dist/app/modules/http/modules/middleware.mjs +18 -3
  339. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  340. package/dist/app/modules/identity/index.mjs +1 -2
  341. package/dist/app/modules/identity/module.d.ts.map +1 -1
  342. package/dist/app/modules/identity/module.mjs +2 -2
  343. package/dist/app/modules/identity/module.mjs.map +1 -1
  344. package/dist/app/modules/identity/repositories/index.mjs +1 -2
  345. package/dist/app/modules/identity/repositories/provider/index.d.ts +0 -1
  346. package/dist/app/modules/identity/repositories/provider/index.d.ts.map +1 -1
  347. package/dist/app/modules/identity/repositories/provider/index.mjs +1 -3
  348. package/dist/app/modules/index.mjs +4 -2
  349. package/dist/app/modules/logger/module.d.ts.map +1 -1
  350. package/dist/app/modules/logger/module.mjs +1 -0
  351. package/dist/app/modules/logger/module.mjs.map +1 -1
  352. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +25 -1
  353. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -1
  354. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +70 -1
  355. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
  356. package/dist/app/modules/provisioning/constants.d.ts +12 -0
  357. package/dist/app/modules/provisioning/constants.d.ts.map +1 -0
  358. package/dist/app/modules/provisioning/constants.mjs +16 -0
  359. package/dist/app/modules/provisioning/constants.mjs.map +1 -0
  360. package/dist/app/modules/provisioning/index.d.ts +2 -0
  361. package/dist/app/modules/provisioning/index.d.ts.map +1 -1
  362. package/dist/app/modules/provisioning/index.mjs +3 -1
  363. package/dist/app/modules/provisioning/lazy-wildcard.d.ts +15 -0
  364. package/dist/app/modules/provisioning/lazy-wildcard.d.ts.map +1 -0
  365. package/dist/app/modules/provisioning/lazy-wildcard.mjs +23 -0
  366. package/dist/app/modules/provisioning/lazy-wildcard.mjs.map +1 -0
  367. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  368. package/dist/app/modules/provisioning/module.mjs +24 -4
  369. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  370. package/dist/app/modules/provisioning/sources/composite/module.d.ts +0 -19
  371. package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
  372. package/dist/app/modules/provisioning/sources/composite/module.mjs +7 -77
  373. package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
  374. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  375. package/dist/app/modules/provisioning/sources/default/module.mjs +1 -0
  376. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  377. package/dist/core/entities/client/index.d.ts +1 -1
  378. package/dist/core/entities/client/index.d.ts.map +1 -1
  379. package/dist/core/entities/client/index.mjs +2 -2
  380. package/dist/core/entities/client/schema.d.ts.map +1 -1
  381. package/dist/core/entities/client/schema.mjs +29 -10
  382. package/dist/core/entities/client/schema.mjs.map +1 -1
  383. package/dist/core/entities/client/service.mjs.map +1 -1
  384. package/dist/core/entities/client/system-clients.d.ts +95 -0
  385. package/dist/core/entities/client/system-clients.d.ts.map +1 -0
  386. package/dist/core/entities/client/system-clients.mjs +158 -0
  387. package/dist/core/entities/client/system-clients.mjs.map +1 -0
  388. package/dist/core/entities/client/types.d.ts +17 -4
  389. package/dist/core/entities/client/types.d.ts.map +1 -1
  390. package/dist/core/entities/client-permission/schema.d.ts.map +1 -1
  391. package/dist/core/entities/client-permission/schema.mjs +29 -6
  392. package/dist/core/entities/client-permission/schema.mjs.map +1 -1
  393. package/dist/core/entities/client-role/schema.d.ts.map +1 -1
  394. package/dist/core/entities/client-role/schema.mjs +27 -6
  395. package/dist/core/entities/client-role/schema.mjs.map +1 -1
  396. package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
  397. package/dist/core/entities/client-scope/schema.mjs +19 -5
  398. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  399. package/dist/core/entities/consent/schema.d.ts.map +1 -1
  400. package/dist/core/entities/consent/schema.mjs +28 -6
  401. package/dist/core/entities/consent/schema.mjs.map +1 -1
  402. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
  403. package/dist/core/entities/event/entity-event-handler.mjs +2 -0
  404. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
  405. package/dist/core/entities/event/sanitize.d.ts.map +1 -1
  406. package/dist/core/entities/event/sanitize.mjs +7 -4
  407. package/dist/core/entities/event/sanitize.mjs.map +1 -1
  408. package/dist/core/entities/event/schema.d.ts.map +1 -1
  409. package/dist/core/entities/event/schema.mjs +45 -16
  410. package/dist/core/entities/event/schema.mjs.map +1 -1
  411. package/dist/core/entities/event/service.d.ts.map +1 -1
  412. package/dist/core/entities/event/service.mjs +2 -0
  413. package/dist/core/entities/event/service.mjs.map +1 -1
  414. package/dist/core/entities/event/types.d.ts +2 -0
  415. package/dist/core/entities/event/types.d.ts.map +1 -1
  416. package/dist/core/entities/identity-provider/schema.d.ts.map +1 -1
  417. package/dist/core/entities/identity-provider/schema.mjs +29 -11
  418. package/dist/core/entities/identity-provider/schema.mjs.map +1 -1
  419. package/dist/core/entities/identity-provider-account/error.d.ts +7 -0
  420. package/dist/core/entities/identity-provider-account/error.d.ts.map +1 -0
  421. package/dist/core/entities/identity-provider-account/error.mjs +24 -0
  422. package/dist/core/entities/identity-provider-account/error.mjs.map +1 -0
  423. package/dist/core/entities/identity-provider-account/index.d.ts +5 -0
  424. package/dist/core/entities/identity-provider-account/index.d.ts.map +1 -0
  425. package/dist/core/entities/identity-provider-account/index.mjs +8 -0
  426. package/dist/core/entities/identity-provider-account/schema.d.ts +3 -0
  427. package/dist/core/entities/identity-provider-account/schema.d.ts.map +1 -0
  428. package/dist/core/entities/identity-provider-account/schema.mjs +52 -0
  429. package/dist/core/entities/identity-provider-account/schema.mjs.map +1 -0
  430. package/dist/core/entities/identity-provider-account/service.d.ts +24 -0
  431. package/dist/core/entities/identity-provider-account/service.d.ts.map +1 -0
  432. package/dist/core/entities/identity-provider-account/service.mjs +129 -0
  433. package/dist/core/entities/identity-provider-account/service.mjs.map +1 -0
  434. package/dist/core/entities/identity-provider-account/types.d.ts +69 -0
  435. package/dist/core/entities/identity-provider-account/types.d.ts.map +1 -0
  436. package/dist/core/entities/identity-provider-account/types.mjs +17 -0
  437. package/dist/core/entities/identity-provider-account/types.mjs.map +1 -0
  438. package/dist/core/entities/identity-provider-role-mapping/schema.d.ts.map +1 -1
  439. package/dist/core/entities/identity-provider-role-mapping/schema.mjs +27 -6
  440. package/dist/core/entities/identity-provider-role-mapping/schema.mjs.map +1 -1
  441. package/dist/core/entities/index.d.ts +2 -0
  442. package/dist/core/entities/index.d.ts.map +1 -1
  443. package/dist/core/entities/index.mjs +10 -2
  444. package/dist/core/entities/key/schema.d.ts.map +1 -1
  445. package/dist/core/entities/key/schema.mjs +39 -17
  446. package/dist/core/entities/key/schema.mjs.map +1 -1
  447. package/dist/core/entities/key/service.d.ts.map +1 -1
  448. package/dist/core/entities/key/service.mjs +1 -0
  449. package/dist/core/entities/key/service.mjs.map +1 -1
  450. package/dist/core/entities/permission/schema.d.ts.map +1 -1
  451. package/dist/core/entities/permission/schema.mjs +34 -13
  452. package/dist/core/entities/permission/schema.mjs.map +1 -1
  453. package/dist/core/entities/permission-policy/schema.d.ts.map +1 -1
  454. package/dist/core/entities/permission-policy/schema.mjs +27 -6
  455. package/dist/core/entities/permission-policy/schema.mjs.map +1 -1
  456. package/dist/core/entities/policy/schema.d.ts.map +1 -1
  457. package/dist/core/entities/policy/schema.mjs +31 -12
  458. package/dist/core/entities/policy/schema.mjs.map +1 -1
  459. package/dist/core/entities/realm/schema.d.ts.map +1 -1
  460. package/dist/core/entities/realm/schema.mjs +26 -12
  461. package/dist/core/entities/realm/schema.mjs.map +1 -1
  462. package/dist/core/entities/realm/service.d.ts +8 -6
  463. package/dist/core/entities/realm/service.d.ts.map +1 -1
  464. package/dist/core/entities/realm/service.mjs +5 -8
  465. package/dist/core/entities/realm/service.mjs.map +1 -1
  466. package/dist/core/entities/role/schema.d.ts.map +1 -1
  467. package/dist/core/entities/role/schema.mjs +36 -14
  468. package/dist/core/entities/role/schema.mjs.map +1 -1
  469. package/dist/core/entities/role-attribute/schema.d.ts.map +1 -1
  470. package/dist/core/entities/role-attribute/schema.mjs +28 -14
  471. package/dist/core/entities/role-attribute/schema.mjs.map +1 -1
  472. package/dist/core/entities/role-permission/schema.d.ts.map +1 -1
  473. package/dist/core/entities/role-permission/schema.mjs +29 -6
  474. package/dist/core/entities/role-permission/schema.mjs.map +1 -1
  475. package/dist/core/entities/scope/schema.d.ts.map +1 -1
  476. package/dist/core/entities/scope/schema.mjs +28 -12
  477. package/dist/core/entities/scope/schema.mjs.map +1 -1
  478. package/dist/core/entities/session/schema.d.ts.map +1 -1
  479. package/dist/core/entities/session/schema.mjs +41 -9
  480. package/dist/core/entities/session/schema.mjs.map +1 -1
  481. package/dist/core/entities/session-token/index.d.ts +4 -0
  482. package/dist/core/entities/session-token/index.d.ts.map +1 -0
  483. package/dist/core/entities/session-token/index.mjs +6 -0
  484. package/dist/core/entities/session-token/schema.d.ts +12 -0
  485. package/dist/core/entities/session-token/schema.d.ts.map +1 -0
  486. package/dist/core/entities/session-token/schema.mjs +66 -0
  487. package/dist/core/entities/session-token/schema.mjs.map +1 -0
  488. package/dist/core/entities/session-token/service.d.ts +70 -0
  489. package/dist/core/entities/session-token/service.d.ts.map +1 -0
  490. package/dist/core/entities/session-token/service.mjs +216 -0
  491. package/dist/core/entities/session-token/service.mjs.map +1 -0
  492. package/dist/core/entities/session-token/types.d.ts +37 -0
  493. package/dist/core/entities/session-token/types.d.ts.map +1 -0
  494. package/dist/core/entities/session-token/types.mjs +4 -0
  495. package/dist/core/entities/trust-anchor/schema.d.ts.map +1 -1
  496. package/dist/core/entities/trust-anchor/schema.mjs +27 -13
  497. package/dist/core/entities/trust-anchor/schema.mjs.map +1 -1
  498. package/dist/core/entities/trust-anchor/service.d.ts.map +1 -1
  499. package/dist/core/entities/trust-anchor/service.mjs +1 -0
  500. package/dist/core/entities/trust-anchor/service.mjs.map +1 -1
  501. package/dist/core/entities/user/schema.d.ts.map +1 -1
  502. package/dist/core/entities/user/schema.mjs +29 -12
  503. package/dist/core/entities/user/schema.mjs.map +1 -1
  504. package/dist/core/entities/user-attribute/schema.d.ts.map +1 -1
  505. package/dist/core/entities/user-attribute/schema.mjs +28 -14
  506. package/dist/core/entities/user-attribute/schema.mjs.map +1 -1
  507. package/dist/core/entities/user-authenticator/schema.d.ts.map +1 -1
  508. package/dist/core/entities/user-authenticator/schema.mjs +29 -12
  509. package/dist/core/entities/user-authenticator/schema.mjs.map +1 -1
  510. package/dist/core/entities/user-authenticator/service.d.ts +2 -1
  511. package/dist/core/entities/user-authenticator/service.d.ts.map +1 -1
  512. package/dist/core/entities/user-authenticator/service.mjs +5 -0
  513. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  514. package/dist/core/entities/user-authenticator/types.d.ts +7 -1
  515. package/dist/core/entities/user-authenticator/types.d.ts.map +1 -1
  516. package/dist/core/entities/user-authenticator/types.mjs.map +1 -1
  517. package/dist/core/entities/user-permission/schema.d.ts.map +1 -1
  518. package/dist/core/entities/user-permission/schema.mjs +29 -6
  519. package/dist/core/entities/user-permission/schema.mjs.map +1 -1
  520. package/dist/core/entities/user-role/schema.d.ts.map +1 -1
  521. package/dist/core/entities/user-role/schema.mjs +27 -6
  522. package/dist/core/entities/user-role/schema.mjs.map +1 -1
  523. package/dist/core/identity/index.mjs +2 -1
  524. package/dist/core/identity/provider/account/error.d.ts +7 -0
  525. package/dist/core/identity/provider/account/error.d.ts.map +1 -0
  526. package/dist/core/identity/provider/account/error.mjs +24 -0
  527. package/dist/core/identity/provider/account/error.mjs.map +1 -0
  528. package/dist/core/identity/provider/account/index.d.ts +1 -0
  529. package/dist/core/identity/provider/account/index.d.ts.map +1 -1
  530. package/dist/core/identity/provider/account/index.mjs +2 -1
  531. package/dist/core/identity/provider/account/module.d.ts +2 -0
  532. package/dist/core/identity/provider/account/module.d.ts.map +1 -1
  533. package/dist/core/identity/provider/account/module.mjs +30 -0
  534. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  535. package/dist/core/identity/provider/account/types.d.ts +12 -10
  536. package/dist/core/identity/provider/account/types.d.ts.map +1 -1
  537. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts +1 -0
  538. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts.map +1 -1
  539. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +5 -1
  540. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  541. package/dist/core/identity/provider/authentication/protocols/oauth2/types.d.ts +7 -0
  542. package/dist/core/identity/provider/authentication/protocols/oauth2/types.d.ts.map +1 -1
  543. package/dist/core/identity/provider/index.mjs +2 -1
  544. package/dist/core/index.mjs +15 -3
  545. package/dist/core/key/types.d.ts +2 -1
  546. package/dist/core/key/types.d.ts.map +1 -1
  547. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  548. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +2 -2
  549. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  550. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  551. package/dist/core/oauth2/authorization/module.mjs +2 -0
  552. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  553. package/dist/core/oauth2/authorization/state/types.d.ts +11 -0
  554. package/dist/core/oauth2/authorization/state/types.d.ts.map +1 -1
  555. package/dist/core/oauth2/end-session/service.d.ts.map +1 -1
  556. package/dist/core/oauth2/end-session/service.mjs +4 -4
  557. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  558. package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
  559. package/dist/core/oauth2/grant-types/authorize.mjs +1 -5
  560. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  561. package/dist/core/oauth2/grant-types/password.mjs +2 -5
  562. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  563. package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
  564. package/dist/core/oauth2/grant-types/refresh-token.mjs +37 -24
  565. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  566. package/dist/core/oauth2/index.mjs +3 -1
  567. package/dist/core/oauth2/mfa-login/module.d.ts.map +1 -1
  568. package/dist/core/oauth2/mfa-login/module.mjs +4 -7
  569. package/dist/core/oauth2/mfa-login/module.mjs.map +1 -1
  570. package/dist/core/oauth2/session-token/error.d.ts +36 -0
  571. package/dist/core/oauth2/session-token/error.d.ts.map +1 -0
  572. package/dist/core/oauth2/session-token/error.mjs +49 -0
  573. package/dist/core/oauth2/session-token/error.mjs.map +1 -0
  574. package/dist/core/oauth2/session-token/index.d.ts +1 -0
  575. package/dist/core/oauth2/session-token/index.d.ts.map +1 -1
  576. package/dist/core/oauth2/session-token/index.mjs +2 -1
  577. package/dist/core/oauth2/session-token/types.d.ts +40 -0
  578. package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
  579. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  580. package/dist/core/oauth2/token/issuer/access/module.mjs +1 -0
  581. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  582. package/dist/core/oauth2/token/issuer/base.d.ts +1 -1
  583. package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
  584. package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
  585. package/dist/core/oauth2/token/issuer/refresh/module.d.ts.map +1 -1
  586. package/dist/core/oauth2/token/issuer/refresh/module.mjs +1 -0
  587. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  588. package/dist/core/provisioning/constants.d.ts +8 -0
  589. package/dist/core/provisioning/constants.d.ts.map +1 -0
  590. package/dist/core/provisioning/constants.mjs +14 -0
  591. package/dist/core/provisioning/constants.mjs.map +1 -0
  592. package/dist/core/provisioning/entities/index.mjs +2 -1
  593. package/dist/core/provisioning/entities/realm/index.d.ts +1 -0
  594. package/dist/core/provisioning/entities/realm/index.d.ts.map +1 -1
  595. package/dist/core/provisioning/entities/realm/index.mjs +2 -1
  596. package/dist/core/provisioning/entities/realm/validator.d.ts +11 -0
  597. package/dist/core/provisioning/entities/realm/validator.d.ts.map +1 -1
  598. package/dist/core/provisioning/entities/realm/validator.mjs +14 -0
  599. package/dist/core/provisioning/entities/realm/validator.mjs.map +1 -1
  600. package/dist/core/provisioning/entities/realm/wildcard-validator.d.ts +19 -0
  601. package/dist/core/provisioning/entities/realm/wildcard-validator.d.ts.map +1 -0
  602. package/dist/core/provisioning/entities/realm/wildcard-validator.mjs +65 -0
  603. package/dist/core/provisioning/entities/realm/wildcard-validator.mjs.map +1 -0
  604. package/dist/core/provisioning/index.d.ts +3 -0
  605. package/dist/core/provisioning/index.d.ts.map +1 -1
  606. package/dist/core/provisioning/index.mjs +7 -1
  607. package/dist/core/provisioning/merge/index.d.ts +3 -0
  608. package/dist/core/provisioning/merge/index.d.ts.map +1 -0
  609. package/dist/core/provisioning/merge/index.mjs +5 -0
  610. package/dist/core/provisioning/merge/module.d.ts +18 -0
  611. package/dist/core/provisioning/merge/module.d.ts.map +1 -0
  612. package/dist/core/provisioning/merge/module.mjs +82 -0
  613. package/dist/core/provisioning/merge/module.mjs.map +1 -0
  614. package/dist/core/provisioning/merge/types.d.ts +34 -0
  615. package/dist/core/provisioning/merge/types.d.ts.map +1 -0
  616. package/dist/core/provisioning/merge/types.mjs +4 -0
  617. package/dist/core/provisioning/types.d.ts +10 -0
  618. package/dist/core/provisioning/types.d.ts.map +1 -1
  619. package/dist/core/provisioning/wildcard/index.d.ts +3 -0
  620. package/dist/core/provisioning/wildcard/index.d.ts.map +1 -0
  621. package/dist/core/provisioning/wildcard/index.mjs +5 -0
  622. package/dist/core/provisioning/wildcard/module.d.ts +53 -0
  623. package/dist/core/provisioning/wildcard/module.d.ts.map +1 -0
  624. package/dist/core/provisioning/wildcard/module.mjs +91 -0
  625. package/dist/core/provisioning/wildcard/module.mjs.map +1 -0
  626. package/dist/core/provisioning/wildcard/types.d.ts +19 -0
  627. package/dist/core/provisioning/wildcard/types.d.ts.map +1 -0
  628. package/dist/core/provisioning/wildcard/types.mjs +4 -0
  629. package/dist/core/query/index.mjs +2 -2
  630. package/dist/core/query/module.d.ts +19 -9
  631. package/dist/core/query/module.d.ts.map +1 -1
  632. package/dist/core/query/module.mjs +22 -10
  633. package/dist/core/query/module.mjs.map +1 -1
  634. package/dist/index.mjs +10 -4
  635. package/dist/path.d.ts +0 -2
  636. package/dist/path.d.ts.map +1 -1
  637. package/dist/path.mjs +1 -3
  638. package/dist/path.mjs.map +1 -1
  639. package/dist/swagger.json +885 -112
  640. package/dist/utils/error.d.ts +20 -3
  641. package/dist/utils/error.d.ts.map +1 -1
  642. package/dist/utils/error.mjs +102 -5
  643. package/dist/utils/error.mjs.map +1 -1
  644. package/dist/utils/index.mjs +2 -2
  645. package/package.json +25 -61
  646. package/dist/adapters/http/ui/base-path.d.ts +0 -9
  647. package/dist/adapters/http/ui/base-path.d.ts.map +0 -1
  648. package/dist/adapters/http/ui/base-path.mjs +0 -18
  649. package/dist/adapters/http/ui/base-path.mjs.map +0 -1
  650. package/dist/adapters/http/ui/internal-http-client.d.ts.map +0 -1
  651. package/dist/adapters/http/ui/internal-http-client.mjs.map +0 -1
  652. package/dist/adapters/http/ui/render.d.ts +0 -4
  653. package/dist/adapters/http/ui/render.d.ts.map +0 -1
  654. package/dist/adapters/http/ui/render.mjs +0 -63
  655. package/dist/adapters/http/ui/render.mjs.map +0 -1
  656. package/dist/adapters/http/ui/serve.d.ts.map +0 -1
  657. package/dist/adapters/http/ui/serve.mjs.map +0 -1
  658. package/dist/adapters/http/ui/types.d.ts +0 -20
  659. package/dist/adapters/http/ui/types.d.ts.map +0 -1
  660. package/dist/app/modules/identity/repositories/provider/account/index.d.ts.map +0 -1
  661. package/dist/app/modules/identity/repositories/provider/account/index.mjs +0 -5
  662. package/dist/app/modules/identity/repositories/provider/account/module.d.ts +0 -10
  663. package/dist/app/modules/identity/repositories/provider/account/module.d.ts.map +0 -1
  664. package/dist/app/modules/identity/repositories/provider/account/module.mjs +0 -28
  665. package/dist/app/modules/identity/repositories/provider/account/module.mjs.map +0 -1
  666. package/dist/core/entities/client/web-client.d.ts +0 -72
  667. package/dist/core/entities/client/web-client.d.ts.map +0 -1
  668. package/dist/core/entities/client/web-client.mjs +0 -123
  669. package/dist/core/entities/client/web-client.mjs.map +0 -1
  670. package/dist/ui/client/.vite/ssr-manifest.json +0 -54974
  671. package/dist/ui/client/assets/asap-latin-400-normal-Dc37g3Il.woff +0 -0
  672. package/dist/ui/client/assets/asap-latin-400-normal-DnZ1MOsG.woff2 +0 -0
  673. package/dist/ui/client/assets/asap-latin-700-normal-Dqcopq14.woff +0 -0
  674. package/dist/ui/client/assets/asap-latin-700-normal-l2Y8pi-F.woff2 +0 -0
  675. package/dist/ui/client/assets/asap-latin-ext-400-normal-C-fcRdtE.woff +0 -0
  676. package/dist/ui/client/assets/asap-latin-ext-400-normal-DwYtpHbV.woff2 +0 -0
  677. package/dist/ui/client/assets/asap-latin-ext-700-normal-D00OESsZ.woff +0 -0
  678. package/dist/ui/client/assets/asap-latin-ext-700-normal-y8bo5aW5.woff2 +0 -0
  679. package/dist/ui/client/assets/asap-vietnamese-400-normal-DGyJlJLT.woff2 +0 -0
  680. package/dist/ui/client/assets/asap-vietnamese-400-normal-lfLaoF2x.woff +0 -0
  681. package/dist/ui/client/assets/asap-vietnamese-700-normal-B-e19ug5.woff +0 -0
  682. package/dist/ui/client/assets/asap-vietnamese-700-normal-D-SxY94i.woff2 +0 -0
  683. package/dist/ui/client/assets/index-BTK3GPZZ.js +0 -106
  684. package/dist/ui/client/assets/index-Cx_pI7BS.css +0 -2
  685. package/dist/ui/client/assets/nunito-cyrillic-300-normal-BPQV259B.woff2 +0 -0
  686. package/dist/ui/client/assets/nunito-cyrillic-300-normal-g5qSsvc0.woff +0 -0
  687. package/dist/ui/client/assets/nunito-cyrillic-400-normal-D1j0u8EH.woff +0 -0
  688. package/dist/ui/client/assets/nunito-cyrillic-400-normal-xAOo5cBP.woff2 +0 -0
  689. package/dist/ui/client/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff +0 -0
  690. package/dist/ui/client/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2 +0 -0
  691. package/dist/ui/client/assets/nunito-cyrillic-700-normal-DP36NgGt.woff2 +0 -0
  692. package/dist/ui/client/assets/nunito-cyrillic-700-normal-DfHRUDv-.woff +0 -0
  693. package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-BDHtqmCR.woff +0 -0
  694. package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-ChMQLIrm.woff2 +0 -0
  695. package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-CuPM9foi.woff2 +0 -0
  696. package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-xaE7D4Sw.woff +0 -0
  697. package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2 +0 -0
  698. package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff +0 -0
  699. package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-BuR0mlCG.woff2 +0 -0
  700. package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-DfoqN4Gs.woff +0 -0
  701. package/dist/ui/client/assets/nunito-latin-300-normal-C3ZIKvzv.woff +0 -0
  702. package/dist/ui/client/assets/nunito-latin-300-normal-COoPE5VN.woff2 +0 -0
  703. package/dist/ui/client/assets/nunito-latin-400-normal-DKg4f3fz.woff +0 -0
  704. package/dist/ui/client/assets/nunito-latin-400-normal-r8SDr6Up.woff2 +0 -0
  705. package/dist/ui/client/assets/nunito-latin-600-normal-Br8yIETf.woff2 +0 -0
  706. package/dist/ui/client/assets/nunito-latin-600-normal-Cd0eNu1l.woff +0 -0
  707. package/dist/ui/client/assets/nunito-latin-700-normal-Dort48En.woff2 +0 -0
  708. package/dist/ui/client/assets/nunito-latin-700-normal-OcDqTBcA.woff +0 -0
  709. package/dist/ui/client/assets/nunito-latin-ext-300-normal-D1SyVuPt.woff2 +0 -0
  710. package/dist/ui/client/assets/nunito-latin-ext-300-normal-DfqbmdMl.woff +0 -0
  711. package/dist/ui/client/assets/nunito-latin-ext-400-normal-CjMJVfGn.woff +0 -0
  712. package/dist/ui/client/assets/nunito-latin-ext-400-normal-i-8OOpdj.woff2 +0 -0
  713. package/dist/ui/client/assets/nunito-latin-ext-600-normal-BKUpuB78.woff +0 -0
  714. package/dist/ui/client/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2 +0 -0
  715. package/dist/ui/client/assets/nunito-latin-ext-700-normal-BWeMsAzO.woff2 +0 -0
  716. package/dist/ui/client/assets/nunito-latin-ext-700-normal-D4woHhbd.woff +0 -0
  717. package/dist/ui/client/assets/nunito-vietnamese-300-normal-DATld5Vw.woff +0 -0
  718. package/dist/ui/client/assets/nunito-vietnamese-300-normal-mLneKULB.woff2 +0 -0
  719. package/dist/ui/client/assets/nunito-vietnamese-400-normal-BHkVbP3T.woff2 +0 -0
  720. package/dist/ui/client/assets/nunito-vietnamese-400-normal-DtOtW02z.woff +0 -0
  721. package/dist/ui/client/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2 +0 -0
  722. package/dist/ui/client/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff +0 -0
  723. package/dist/ui/client/assets/nunito-vietnamese-700-normal-C9SQsXvj.woff +0 -0
  724. package/dist/ui/client/assets/nunito-vietnamese-700-normal-Ch8EUCfz.woff2 +0 -0
  725. package/dist/ui/client/index.html +0 -22
  726. package/dist/ui/server/assets/multipart-parser-BCMy8Xwv.js +0 -181
  727. package/dist/ui/server/assets/multipart-parser-BVY8pIV2.js +0 -176
  728. package/dist/ui/server/server.js +0 -155269
  729. /package/dist/{app/modules/identity/repositories/provider/account → adapters/http/controllers/entities/identity-provider-account}/index.d.ts +0 -0
  730. /package/dist/adapters/http/{ui → middleware/built-in}/types.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","names":["and","defineSchema","eq","ne","or","EntityType","IdentityType","createFieldsReadGate","createRelationsReadGate","CLIENT_READ_PERMISSIONS","schemaMapping","realm","REALM","accessPolicy","POLICY","secretReadGate","actor","compiled","permissionEvaluator","compile","name","verdict","visible","push","condition","identity","type","CLIENT","data","id","clientSchema","fields","default","allowed","validateMany","secret","filters","relations","validate","sort","pagination","maxLimit"],"sources":["../../../../src/core/entities/client/schema.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 { ICondition, KeyValidationVerdict } from '@rapiq/core';\nimport {\n and,\n defineSchema,\n eq,\n ne,\n or,\n} from '@rapiq/core';\nimport type { Client } from '@authup/core-kit';\nimport { EntityType, IdentityType } from '@authup/core-kit';\nimport type { ActorContext } from '@authup/server-kit';\nimport { createFieldsReadGate } from '../../query/fields.ts';\nimport { createRelationsReadGate } from '../../query/relations.ts';\nimport { CLIENT_READ_PERMISSIONS } from './constants.ts';\n\nconst schemaMapping = { realm: EntityType.REALM, accessPolicy: EntityType.POLICY };\n\n/**\n * Per-row visibility gate for the `secret` column (issue #3322) —\n * schema-level, so it applies wherever the client schema governs a\n * projection: the `/clients` root AND the `include=client` paths of\n * client-permission / client-role / client-scope, which never run\n * `ClientService`'s read path.\n *\n * Only rows exposing a PLAINTEXT secret are guarded: `null`, hashed\n * and encrypted values stay visible to any actor that passed the read\n * pre-gate (the historical service semantics). A plaintext value is\n * additionally visible on the actor's OWN client row (the `getOne`\n * isMe bypass, list-shaped) and on rows the compiled permission\n * condition covers. A non-expressible (`post`) or settled-deny compile\n * yields no permission leg — fail closed for plaintext rows rather\n * than falling back to per-row evaluation.\n *\n * The outer `ne('realmId', null)` guard is semantically inert (clients\n * are realm-bound) but makes the condition fail closed on rows whose\n * gate columns were not fetched — an `ownOrNull` reach compiles to a\n * null-inclusive realm leg that would otherwise MATCH a missing\n * column. The SQL adapter force-selects every column the condition\n * reads (rapiq#830's operand projection), so this is defense in depth.\n */\nasync function secretReadGate(actor: ActorContext) : Promise<KeyValidationVerdict> {\n const compiled = await actor.permissionEvaluator.compile({ name: CLIENT_READ_PERMISSIONS });\n if (compiled.verdict === 'allow') {\n return true;\n }\n\n const visible : ICondition[] = [\n eq('secret', null),\n eq('secretHashed', true),\n eq('secretEncrypted', true),\n ];\n\n if (compiled.verdict === 'conditional') {\n visible.push(compiled.condition);\n }\n\n if (\n actor.identity &&\n actor.identity.type === IdentityType.CLIENT &&\n actor.identity.data.id\n ) {\n visible.push(eq('id', actor.identity.data.id));\n }\n\n return and(ne('realmId', null), or(...visible));\n}\n\nexport const clientSchema = defineSchema<Client>({\n name: EntityType.CLIENT,\n fields: {\n default: [\n 'id',\n 'active',\n 'builtIn',\n 'name',\n 'displayName',\n 'description',\n 'secretHashed',\n 'secretEncrypted',\n 'baseUrl',\n 'rootUrl',\n 'redirectUri',\n 'postLogoutRedirectUri',\n 'grantTypes',\n 'scope',\n 'authMethod',\n 'tokenBindingMethod',\n 'accessPolicyId',\n 'realmId',\n 'updatedAt',\n 'createdAt',\n ],\n allowed: ['secret'],\n validateMany: createFieldsReadGate({ secret: secretReadGate }),\n },\n filters: { allowed: ['id', 'name', 'realmId'] },\n relations: { allowed: ['realm', 'accessPolicy'], validate: createRelationsReadGate(schemaMapping) },\n sort: { allowed: ['id', 'createdAt', 'updatedAt'] },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;;;AAsBA,MAAMU,gBAAgB;CAAEC,OAAON,WAAWO;CAAOC,cAAcR,WAAWS;AAAO;;;;;;;;;;;;;;;;;;;;;;;GAyBjF,eAAeC,eAAeC,OAAmB;CAC7C,MAAMC,WAAW,MAAMD,MAAME,oBAAoBC,QAAQ,EAAEC,MAAMX,wBAAwB,CAAA;CACzF,IAAIQ,SAASI,YAAY,SACrB,OAAO;CAGX,MAAMC,UAAyB;EAC3BpB,GAAG,UAAU,IAAA;EACbA,GAAG,gBAAgB,IAAA;EACnBA,GAAG,mBAAmB,IAAA;CACzB;CAED,IAAIe,SAASI,YAAY,eACrBC,QAAQC,KAAKN,SAASO,SAAS;CAGnC,IACIR,MAAMS,YACNT,MAAMS,SAASC,SAASpB,aAAaqB,UACrCX,MAAMS,SAASG,KAAKC,IAEpBP,QAAQC,KAAKrB,GAAG,MAAMc,MAAMS,SAASG,KAAKC,EAAE,CAAA;CAGhD,OAAO7B,IAAIG,GAAG,WAAW,IAAA,GAAOC,GAAAA,GAAMkB,OAAAA,CAAAA;AAC1C;AAEA,MAAaQ,eAAe7B,aAAqB;CAC7CmB,MAAMf,WAAWsB;CACjBI,QAAQ;EACJC,SAAS;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH;EACDC,SAAS,CAAC,QAAS;EACnBC,cAAc3B,qBAAqB,EAAE4B,QAAQpB,eAAe,CAAA;CAChE;CACAqB,SAAS,EAAEH,SAAS;EAAC;EAAM;EAAQ;CAAU,EAAC;CAC9CI,WAAW;EAAEJ,SAAS,CAAC,SAAS,cAAe;EAAEK,UAAU9B,wBAAwBE,aAAAA;CAAe;CAClG6B,MAAM,EAAEN,SAAS;EAAC;EAAM;EAAa;CAAY,EAAC;CAClDO,YAAY,EAAEC,UAAU,GAAG;CAC3B/B;AACJ,CAAA"}
1
+ {"version":3,"file":"schema.mjs","names":["and","defineSchema","eq","ne","or","EntityType","IdentityType","createFieldsReadGate","createRelationsReadGate","CLIENT_READ_PERMISSIONS","schemaMapping","realm","REALM","accessPolicy","POLICY","secretReadGate","actor","compiled","permissionEvaluator","compile","name","verdict","visible","push","condition","identity","type","CLIENT","data","id","clientSchema","indexes","fields","default","allowed","validateMany","secret","filters","indexed","relations","validate","sorts","pagination","maxLimit"],"sources":["../../../../src/core/entities/client/schema.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 { ICondition, KeyValidationVerdict } from '@rapiq/core';\nimport {\n and,\n defineSchema,\n eq,\n ne,\n or,\n} from '@rapiq/core';\nimport type { Client } from '@authup/core-kit';\nimport { EntityType, IdentityType } from '@authup/core-kit';\nimport type { ActorContext } from '@authup/server-kit';\nimport { createFieldsReadGate } from '../../query/fields.ts';\nimport { createRelationsReadGate } from '../../query/relations.ts';\nimport { CLIENT_READ_PERMISSIONS } from './constants.ts';\n\nconst schemaMapping = { realm: EntityType.REALM, accessPolicy: EntityType.POLICY };\n\n/**\n * Per-row visibility gate for the `secret` column (issue #3322) —\n * schema-level, so it applies wherever the client schema governs a\n * projection: the `/clients` root AND the `include=client` paths of\n * client-permission / client-role / client-scope, which never run\n * `ClientService`'s read path.\n *\n * Only rows exposing a PLAINTEXT secret are guarded: `null`, hashed\n * and encrypted values stay visible to any actor that passed the read\n * pre-gate (the historical service semantics). A plaintext value is\n * additionally visible on the actor's OWN client row (the `getOne`\n * isMe bypass, list-shaped) and on rows the compiled permission\n * condition covers. A non-expressible (`post`) or settled-deny compile\n * yields no permission leg — fail closed for plaintext rows rather\n * than falling back to per-row evaluation.\n *\n * The outer `ne('realmId', null)` guard is semantically inert (clients\n * are realm-bound) but makes the condition fail closed on rows whose\n * gate columns were not fetched — an `ownOrNull` reach compiles to a\n * null-inclusive realm leg that would otherwise MATCH a missing\n * column. The SQL adapter force-selects every column the condition\n * reads (rapiq#830's operand projection), so this is defense in depth.\n */\nasync function secretReadGate(actor: ActorContext) : Promise<KeyValidationVerdict> {\n const compiled = await actor.permissionEvaluator.compile({ name: CLIENT_READ_PERMISSIONS });\n if (compiled.verdict === 'allow') {\n return true;\n }\n\n const visible : ICondition[] = [\n eq('secret', null),\n eq('secretHashed', true),\n eq('secretEncrypted', true),\n ];\n\n if (compiled.verdict === 'conditional') {\n visible.push(compiled.condition);\n }\n\n if (\n actor.identity &&\n actor.identity.type === IdentityType.CLIENT &&\n actor.identity.data.id\n ) {\n visible.push(eq('id', actor.identity.data.id));\n }\n\n return and(ne('realmId', null), or(...visible));\n}\n\nexport const clientSchema = defineSchema<Client>({\n name: EntityType.CLIENT,\n indexes: [\n ['id'],\n ['name', 'realmId'],\n ['displayName'],\n ['realmId'],\n ['active'],\n ['builtIn'],\n ['createdAt'],\n ['updatedAt'],\n ],\n fields: {\n default: [\n 'id',\n 'active',\n 'builtIn',\n 'name',\n 'displayName',\n 'description',\n 'secretHashed',\n 'secretEncrypted',\n 'baseUrl',\n 'rootUrl',\n 'redirectUri',\n 'postLogoutRedirectUri',\n 'grantTypes',\n 'scope',\n 'authMethod',\n 'tokenBindingMethod',\n 'accessPolicyId',\n 'realmId',\n 'updatedAt',\n 'createdAt',\n ],\n allowed: ['secret'],\n validateMany: createFieldsReadGate({ secret: secretReadGate }),\n },\n filters: { allowed: ['id', 'name', 'displayName', 'realmId', 'active', 'builtIn'], indexed: true },\n relations: { allowed: ['realm', 'accessPolicy'], validate: createRelationsReadGate(schemaMapping) },\n sorts: { allowed: ['id', 'createdAt', 'updatedAt'], indexed: true },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;;;AAsBA,MAAMU,gBAAgB;CAAEC,OAAON,WAAWO;CAAOC,cAAcR,WAAWS;AAAO;;;;;;;;;;;;;;;;;;;;;;;GAyBjF,eAAeC,eAAeC,OAAmB;CAC7C,MAAMC,WAAW,MAAMD,MAAME,oBAAoBC,QAAQ,EAAEC,MAAMX,wBAAwB,CAAA;CACzF,IAAIQ,SAASI,YAAY,SACrB,OAAO;CAGX,MAAMC,UAAyB;EAC3BpB,GAAG,UAAU,IAAA;EACbA,GAAG,gBAAgB,IAAA;EACnBA,GAAG,mBAAmB,IAAA;CACzB;CAED,IAAIe,SAASI,YAAY,eACrBC,QAAQC,KAAKN,SAASO,SAAS;CAGnC,IACIR,MAAMS,YACNT,MAAMS,SAASC,SAASpB,aAAaqB,UACrCX,MAAMS,SAASG,KAAKC,IAEpBP,QAAQC,KAAKrB,GAAG,MAAMc,MAAMS,SAASG,KAAKC,EAAE,CAAA;CAGhD,OAAO7B,IAAIG,GAAG,WAAW,IAAA,GAAOC,GAAAA,GAAMkB,OAAAA,CAAAA;AAC1C;AAEA,MAAaQ,eAAe7B,aAAqB;CAC7CmB,MAAMf,WAAWsB;CACjBI,SAAS;EACL,CAAC,IAAK;EACN,CAAC,QAAQ,SAAU;EACnB,CAAC,aAAc;EACf,CAAC,SAAU;EACX,CAAC,QAAS;EACV,CAAC,SAAU;EACX,CAAC,WAAY;EACb,CAAC,WAAY;CAChB;CACDC,QAAQ;EACJC,SAAS;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH;EACDC,SAAS,CAAC,QAAS;EACnBC,cAAc5B,qBAAqB,EAAE6B,QAAQrB,eAAe,CAAA;CAChE;CACAsB,SAAS;EAAEH,SAAS;GAAC;GAAM;GAAQ;GAAe;GAAW;GAAU;EAAU;EAAEI,SAAS;CAAK;CACjGC,WAAW;EAAEL,SAAS,CAAC,SAAS,cAAe;EAAEM,UAAUhC,wBAAwBE,aAAAA;CAAe;CAClG+B,OAAO;EAAEP,SAAS;GAAC;GAAM;GAAa;EAAY;EAAEI,SAAS;CAAK;CAClEI,YAAY,EAAEC,UAAU,GAAG;CAC3BjC;AACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","definePolicyData","ValidatorGroup","isUUID","EntityNotFoundError","ValidationError","CLIENT_RESERVED_NAMES","ClientAuthMethod","ClientValidator","PermissionName","AbstractEntityService","ClientCredentialsService","CLIENT_READ_PERMISSIONS","decodeQuery","clientSchema","ClientService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","findMany","schema","getOne","idOrName","realmId","isMe","identity","type","data","id","entity","findOne","parameters","secret","secretEncrypted","secretHashed","evaluateOneOf","ATTRIBUTES","resourceRealmMatch","create","save","undefined","update","updateOnly","options","group","realm","resolve","where","findOneWithSecret","isSelfEdit","preEvaluate","CLIENT_UPDATE","e","CLIENT_SELF_MANAGE","UPDATE","CLIENT_CREATE","CREATE","validated","run","includes","builtIn","validateJoinColumns","checkUniqueness","credentialsService","actorRealmId","getActorRealmId","evaluate","merge","authMethod","SECRET","generateSecret","protect","created","delete","CLIENT_DELETE","findOneBy","entityId","remove"],"sources":["../../../../src/core/entities/client/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuiltInPolicyType, definePolicyData } from '@authup/access';\nimport { ValidatorGroup, isUUID } from '@authup/kit';\nimport { EntityNotFoundError, ValidationError } from '@authup/errors';\nimport {\n CLIENT_RESERVED_NAMES,\n ClientAuthMethod,\n ClientValidator,\n PermissionName,\n} from '@authup/core-kit';\nimport type { Client } from '@authup/core-kit';\nimport type { ActorContext, EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '@authup/server-kit';\nimport { ClientCredentialsService } from '../../authentication/credential/entities/client/module.ts';\nimport type { IClientRepository, IClientService } from './types.ts';\nimport { CLIENT_READ_PERMISSIONS } from './constants.ts';\nimport { decodeQuery } from '../../query/index.ts';\nimport { clientSchema } from './schema.ts';\n\nexport type ClientServiceContext = {\n repository: IClientRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class ClientService extends AbstractEntityService implements IClientService {\n protected repository: IClientRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: ClientValidator;\n\n constructor(ctx: ClientServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new ClientValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Client>> {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n\n // The per-row `secret` visibility gate lives on the client SCHEMA\n // (`fields.validateMany`, issue #3322), so it also covers the\n // `include=client` paths served by other services; the repository\n // layer redacts unauthorized values without dropping rows.\n return this.repository.findMany(\n await decodeQuery(query, { schema: clientSchema, actor }),\n );\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n query?: Record<string, any>,\n realmId?: string,\n ): Promise<Client> {\n let isMe = !!actor.identity &&\n actor.identity.type === 'client' &&\n (\n actor.identity.data.id === idOrName ||\n actor.identity.data.name === idOrName\n );\n\n if (!isMe) {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n }\n\n const entity = await this.repository.findOne(\n idOrName,\n await decodeQuery(query, {\n schema: clientSchema, \n parameters: ['fields', 'relations'], \n actor, \n }),\n realmId,\n );\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n if (isMe && actor.identity!.data.id !== entity.id) {\n isMe = false;\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n }\n\n if (\n !isMe &&\n entity.secret &&\n !entity.secretEncrypted &&\n !entity.secretHashed\n ) {\n await actor.permissionEvaluator.evaluateOneOf({\n name: CLIENT_READ_PERMISSIONS,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Client,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realmId === 'string' ?\n await this.realmRepository.resolve(data.realmId) :\n undefined;\n\n let entity: Client | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realmId = realm.id;\n }\n\n entity = await this.repository.findOneWithSecret(where);\n // Only a NAME key may upsert-create. A UUID addresses one specific\n // row, so a miss is a 404 (creating would write a different id).\n if (!entity && (options.updateOnly || where.id)) {\n throw new EntityNotFoundError();\n }\n } else if (options.updateOnly) {\n throw new EntityNotFoundError();\n }\n\n let isSelfEdit = false;\n if (entity) {\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_UPDATE });\n } catch (e) {\n if (\n !actor.identity ||\n actor.identity.type !== 'client' ||\n actor.identity.data.id !== entity.id\n ) {\n throw e;\n }\n isSelfEdit = true;\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SELF_MANAGE });\n }\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n // Reserve the system-provisioned client names (`system`, `web`) so an\n // API caller can't create or rename a client onto them — that would\n // collide on unique(name, realmId) or shadow the builtIn client.\n // Provisioning and runtime hooks bypass this service, so they remain\n // free to manage the reserved clients. builtIn clients are exempt\n // (they ARE the provisioned ones) but API callers can never produce a\n // builtIn client since the validator strips the flag.\n if (\n typeof validated.name === 'string' &&\n CLIENT_RESERVED_NAMES.includes(validated.name) &&\n !(entity && entity.builtIn && entity.name === validated.name)\n ) {\n throw new ValidationError(`The client name '${validated.name}' is reserved.`);\n }\n\n await this.repository.validateJoinColumns(validated);\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new ClientCredentialsService();\n\n if (entity) {\n if (\n !isSelfEdit &&\n !validated.realmId &&\n !entity.realmId\n ) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realmId = actorRealmId;\n }\n }\n\n if (isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SELF_MANAGE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated, ...this.resourceRealmMatch(validated) }),\n });\n }\n\n entity = this.repository.merge(entity, validated);\n\n if (!isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_UPDATE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n }\n\n if (entity.authMethod === ClientAuthMethod.SECRET) {\n if (!validated.secret && !entity.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret, entity);\n }\n } else {\n entity.secret = null;\n entity.secretHashed = false;\n entity.secretEncrypted = false;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realmId) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realmId = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_CREATE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated, ...this.resourceRealmMatch(validated) }),\n });\n\n entity = this.repository.create(validated);\n\n if (entity.authMethod === ClientAuthMethod.SECRET) {\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity.secret = await credentialsService.protect(validated.secret, validated);\n } else {\n entity.secret = null;\n entity.secretHashed = false;\n entity.secretEncrypted = false;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Client> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_DELETE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","definePolicyData","ValidatorGroup","isUUID","EntityNotFoundError","ValidationError","CLIENT_RESERVED_NAMES","ClientAuthMethod","ClientValidator","PermissionName","AbstractEntityService","ClientCredentialsService","CLIENT_READ_PERMISSIONS","decodeQuery","clientSchema","ClientService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","findMany","schema","getOne","idOrName","realmId","isMe","identity","type","data","id","entity","findOne","parameters","secret","secretEncrypted","secretHashed","evaluateOneOf","ATTRIBUTES","resourceRealmMatch","create","save","undefined","update","updateOnly","options","group","realm","resolve","where","findOneWithSecret","isSelfEdit","preEvaluate","CLIENT_UPDATE","e","CLIENT_SELF_MANAGE","UPDATE","CLIENT_CREATE","CREATE","validated","run","includes","builtIn","validateJoinColumns","checkUniqueness","credentialsService","actorRealmId","getActorRealmId","evaluate","merge","authMethod","SECRET","generateSecret","protect","created","delete","CLIENT_DELETE","findOneBy","entityId","remove"],"sources":["../../../../src/core/entities/client/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuiltInPolicyType, definePolicyData } from '@authup/access';\nimport { ValidatorGroup, isUUID } from '@authup/kit';\nimport { EntityNotFoundError, ValidationError } from '@authup/errors';\nimport {\n CLIENT_RESERVED_NAMES,\n ClientAuthMethod,\n ClientValidator,\n PermissionName,\n} from '@authup/core-kit';\nimport type { Client } from '@authup/core-kit';\nimport type { ActorContext, EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '@authup/server-kit';\nimport { ClientCredentialsService } from '../../authentication/credential/entities/client/module.ts';\nimport type { IClientRepository, IClientService } from './types.ts';\nimport { CLIENT_READ_PERMISSIONS } from './constants.ts';\nimport { decodeQuery } from '../../query/index.ts';\nimport { clientSchema } from './schema.ts';\n\nexport type ClientServiceContext = {\n repository: IClientRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class ClientService extends AbstractEntityService implements IClientService {\n protected repository: IClientRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: ClientValidator;\n\n constructor(ctx: ClientServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new ClientValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Client>> {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n\n // The per-row `secret` visibility gate lives on the client SCHEMA\n // (`fields.validateMany`, issue #3322), so it also covers the\n // `include=client` paths served by other services; the repository\n // layer redacts unauthorized values without dropping rows.\n return this.repository.findMany(\n await decodeQuery(query, { schema: clientSchema, actor }),\n );\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n query?: Record<string, any>,\n realmId?: string,\n ): Promise<Client> {\n let isMe = !!actor.identity &&\n actor.identity.type === 'client' &&\n (\n actor.identity.data.id === idOrName ||\n actor.identity.data.name === idOrName\n );\n\n if (!isMe) {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n }\n\n const entity = await this.repository.findOne(\n idOrName,\n await decodeQuery(query, {\n schema: clientSchema, \n parameters: ['fields', 'relations'], \n actor, \n }),\n realmId,\n );\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n if (isMe && actor.identity!.data.id !== entity.id) {\n isMe = false;\n await actor.permissionEvaluator.preEvaluateOneOf({ name: CLIENT_READ_PERMISSIONS });\n }\n\n if (\n !isMe &&\n entity.secret &&\n !entity.secretEncrypted &&\n !entity.secretHashed\n ) {\n await actor.permissionEvaluator.evaluateOneOf({\n name: CLIENT_READ_PERMISSIONS,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Client,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realmId === 'string' ?\n await this.realmRepository.resolve(data.realmId) :\n undefined;\n\n let entity: Client | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realmId = realm.id;\n }\n\n entity = await this.repository.findOneWithSecret(where);\n // Only a NAME key may upsert-create. A UUID addresses one specific\n // row, so a miss is a 404 (creating would write a different id).\n if (!entity && (options.updateOnly || where.id)) {\n throw new EntityNotFoundError();\n }\n } else if (options.updateOnly) {\n throw new EntityNotFoundError();\n }\n\n let isSelfEdit = false;\n if (entity) {\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_UPDATE });\n } catch (e) {\n if (\n !actor.identity ||\n actor.identity.type !== 'client' ||\n actor.identity.data.id !== entity.id\n ) {\n throw e;\n }\n isSelfEdit = true;\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SELF_MANAGE });\n }\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n // Reserve the system-provisioned client names (`system`, the console\n // clients) so an API caller can't create or rename a client onto them — that would\n // collide on unique(name, realmId) or shadow the builtIn client.\n // Provisioning and runtime hooks bypass this service, so they remain\n // free to manage the reserved clients. builtIn clients are exempt\n // (they ARE the provisioned ones) but API callers can never produce a\n // builtIn client since the validator strips the flag.\n if (\n typeof validated.name === 'string' &&\n CLIENT_RESERVED_NAMES.includes(validated.name) &&\n !(entity && entity.builtIn && entity.name === validated.name)\n ) {\n throw new ValidationError(`The client name '${validated.name}' is reserved.`);\n }\n\n await this.repository.validateJoinColumns(validated);\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new ClientCredentialsService();\n\n if (entity) {\n if (\n !isSelfEdit &&\n !validated.realmId &&\n !entity.realmId\n ) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realmId = actorRealmId;\n }\n }\n\n if (isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SELF_MANAGE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated, ...this.resourceRealmMatch(validated) }),\n });\n }\n\n entity = this.repository.merge(entity, validated);\n\n if (!isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_UPDATE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n }\n\n if (entity.authMethod === ClientAuthMethod.SECRET) {\n if (!validated.secret && !entity.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret, entity);\n }\n } else {\n entity.secret = null;\n entity.secretHashed = false;\n entity.secretEncrypted = false;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realmId) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realmId = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_CREATE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated, ...this.resourceRealmMatch(validated) }),\n });\n\n entity = this.repository.create(validated);\n\n if (entity.authMethod === ClientAuthMethod.SECRET) {\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity.secret = await credentialsService.protect(validated.secret, validated);\n } else {\n entity.secret = null;\n entity.secretHashed = false;\n entity.secretEncrypted = false;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Client> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_DELETE,\n data: definePolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity, ...this.resourceRealmMatch(entity) }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import type { Client, Realm } from '@authup/core-kit';
2
+ import type { Logger } from '@authup/server-kit';
3
+ import type { IClientScopeRepository } from '../client-scope/types.ts';
4
+ import type { IScopeRepository } from '../scope/types.ts';
5
+ import type { IClientRepository, ISystemClientProvisioner, SystemClientDefinition } from './types.ts';
6
+ export type SystemClientProvisionerContext = {
7
+ clientRepository: IClientRepository;
8
+ scopeRepository: IScopeRepository;
9
+ clientScopeRepository: IClientScopeRepository;
10
+ appOrigins: string[];
11
+ logger?: Logger;
12
+ };
13
+ /**
14
+ * The scopes every system client is granted.
15
+ *
16
+ * `global` lets the issued token drive the management API (parity with the
17
+ * legacy password-grant admin login); `openid` yields the id-token.
18
+ */
19
+ export declare const SYSTEM_CLIENT_SCOPE_NAMES: string[];
20
+ /**
21
+ * The public (PKCE) clients provisioned for every realm (plan 079):
22
+ *
23
+ * - `admin-console` — authup's own admin console (apps/client-admin-console),
24
+ * - `account-console` — the account self-service surface (plan 080; each
25
+ * definition gets its own `<origin>/**` patterns from
26
+ * `buildSystemClientAttributes`, so an inert row adds no redirect
27
+ * surface).
28
+ *
29
+ * Downstream RPs register their own clients (per realm, or in every realm
30
+ * via a wildcard realm provisioning entry, plan 082) — the former shared
31
+ * `web` client was removed.
32
+ *
33
+ * `displayName` is seeded at CREATE only and never re-asserted by the
34
+ * MERGE, so an admin may relabel a client without the next boot undoing it.
35
+ */
36
+ export declare const SYSTEM_CLIENT_DEFINITIONS: SystemClientDefinition[];
37
+ /**
38
+ * Build the MERGE-owned attribute set for a realm's system client.
39
+ *
40
+ * `builtIn` makes the client auto-consent in the /authorize flow and
41
+ * protects it from the API reserved-name guard.
42
+ *
43
+ * `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the
44
+ * /token grants and the /authorize code-request verifier; null = allow-all),
45
+ * so it must list every flow the client uses. `redirectUri` and
46
+ * `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted
47
+ * origin (matched by isSimpleMatch) — deliberately the shared app-origin
48
+ * set for every definition: `redirectUri` is re-asserted on each boot, so a
49
+ * separately-hosted surface (plan 078 "relocatable by choice") registers
50
+ * its origin via TRUSTED_ORIGINS rather than editing the client row.
51
+ *
52
+ * The `scope` column is descriptive only. Scope authorization resolves
53
+ * through the `auth_client_scopes` junction, which
54
+ * `SystemClientProvisioner.ensureForRealm` fills from the definition's
55
+ * `scopeNames`.
56
+ *
57
+ * `accessPolicyId` and `displayName` are deliberately NOT part of this set:
58
+ * the MERGE must neither wipe an admin-bound access policy nor undo a
59
+ * relabel.
60
+ */
61
+ export declare function buildSystemClientAttributes(definition: SystemClientDefinition, realm: Realm | {
62
+ id: string;
63
+ }, appOrigins: string[]): Partial<Client>;
64
+ export declare class SystemClientProvisioner implements ISystemClientProvisioner {
65
+ protected clientRepository: IClientRepository;
66
+ protected scopeRepository: IScopeRepository;
67
+ protected clientScopeRepository: IClientScopeRepository;
68
+ protected appOrigins: string[];
69
+ protected logger?: Logger;
70
+ constructor(ctx: SystemClientProvisionerContext);
71
+ ensureForRealm(realm: Realm | {
72
+ id: string;
73
+ }): Promise<void>;
74
+ /**
75
+ * Upsert the client row itself.
76
+ *
77
+ * Every system client name is reserved (`CLIENT_RESERVED_NAMES`), so the
78
+ * row belongs to the system whatever state it is in. A non-built-in one
79
+ * predates the reservation and is taken over rather than left to shadow
80
+ * the realm's system client.
81
+ */
82
+ protected ensureClient(definition: SystemClientDefinition, realm: Realm | {
83
+ id: string;
84
+ }): Promise<Client>;
85
+ /**
86
+ * Bind the definition's scopes through `auth_client_scopes`. That
87
+ * junction is the only source the /authorize code-request verifier reads
88
+ * scopes from.
89
+ *
90
+ * Additive like the attribute MERGE above: an extra scope an admin bound
91
+ * by hand is left in place.
92
+ */
93
+ protected ensureScopes(definition: SystemClientDefinition, client: Client): Promise<void>;
94
+ }
95
+ //# sourceMappingURL=system-clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-clients.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/system-clients.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEtG,MAAM,MAAM,8BAA8B,GAAG;IACzC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,eAAe,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAG7C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,EAAE,sBAAsB,EAW7D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,sBAAsB,EAClC,KAAK,EAAE,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC7B,UAAU,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,qBAAa,uBAAwB,YAAW,wBAAwB;IACpE,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IAExD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAE/B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEd,GAAG,EAAE,8BAA8B;IAQzC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE;;;;;;;OAOG;cACa,YAAY,CACxB,UAAU,EAAE,sBAAsB,EAClC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAC9B,OAAO,CAAC,MAAM,CAAC;IAyDlB;;;;;;;OAOG;cACa,YAAY,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiClG"}
@@ -0,0 +1,158 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { CLIENT_ACCOUNT_CONSOLE_NAME, CLIENT_ADMIN_CONSOLE_NAME, ClientAuthMethod, ClientTokenBindingMethod, ScopeName } from "@authup/core-kit";
5
+ //#region src/core/entities/client/system-clients.ts
6
+ /**
7
+ * The scopes every system client is granted.
8
+ *
9
+ * `global` lets the issued token drive the management API (parity with the
10
+ * legacy password-grant admin login); `openid` yields the id-token.
11
+ */ const SYSTEM_CLIENT_SCOPE_NAMES = [ScopeName.GLOBAL, ScopeName.OPEN_ID];
12
+ /**
13
+ * The public (PKCE) clients provisioned for every realm (plan 079):
14
+ *
15
+ * - `admin-console` — authup's own admin console (apps/client-admin-console),
16
+ * - `account-console` — the account self-service surface (plan 080; each
17
+ * definition gets its own `<origin>/**` patterns from
18
+ * `buildSystemClientAttributes`, so an inert row adds no redirect
19
+ * surface).
20
+ *
21
+ * Downstream RPs register their own clients (per realm, or in every realm
22
+ * via a wildcard realm provisioning entry, plan 082) — the former shared
23
+ * `web` client was removed.
24
+ *
25
+ * `displayName` is seeded at CREATE only and never re-asserted by the
26
+ * MERGE, so an admin may relabel a client without the next boot undoing it.
27
+ */ const SYSTEM_CLIENT_DEFINITIONS = [{
28
+ name: CLIENT_ADMIN_CONSOLE_NAME,
29
+ displayName: "Admin Console",
30
+ scopeNames: SYSTEM_CLIENT_SCOPE_NAMES
31
+ }, {
32
+ name: CLIENT_ACCOUNT_CONSOLE_NAME,
33
+ displayName: "Account Console",
34
+ scopeNames: SYSTEM_CLIENT_SCOPE_NAMES
35
+ }];
36
+ /**
37
+ * Build the MERGE-owned attribute set for a realm's system client.
38
+ *
39
+ * `builtIn` makes the client auto-consent in the /authorize flow and
40
+ * protects it from the API reserved-name guard.
41
+ *
42
+ * `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the
43
+ * /token grants and the /authorize code-request verifier; null = allow-all),
44
+ * so it must list every flow the client uses. `redirectUri` and
45
+ * `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted
46
+ * origin (matched by isSimpleMatch) — deliberately the shared app-origin
47
+ * set for every definition: `redirectUri` is re-asserted on each boot, so a
48
+ * separately-hosted surface (plan 078 "relocatable by choice") registers
49
+ * its origin via TRUSTED_ORIGINS rather than editing the client row.
50
+ *
51
+ * The `scope` column is descriptive only. Scope authorization resolves
52
+ * through the `auth_client_scopes` junction, which
53
+ * `SystemClientProvisioner.ensureForRealm` fills from the definition's
54
+ * `scopeNames`.
55
+ *
56
+ * `accessPolicyId` and `displayName` are deliberately NOT part of this set:
57
+ * the MERGE must neither wipe an admin-bound access policy nor undo a
58
+ * relabel.
59
+ */ function buildSystemClientAttributes(definition, realm, appOrigins) {
60
+ const originPatterns = appOrigins.map((origin) => `${origin}/**`).join(",");
61
+ return {
62
+ name: definition.name,
63
+ realmId: realm.id,
64
+ authMethod: ClientAuthMethod.NONE,
65
+ tokenBindingMethod: ClientTokenBindingMethod.NONE,
66
+ builtIn: true,
67
+ active: true,
68
+ grantTypes: "authorization_code refresh_token",
69
+ scope: definition.scopeNames.join(" "),
70
+ redirectUri: originPatterns,
71
+ postLogoutRedirectUri: originPatterns
72
+ };
73
+ }
74
+ var SystemClientProvisioner = class {
75
+ clientRepository;
76
+ scopeRepository;
77
+ clientScopeRepository;
78
+ appOrigins;
79
+ logger;
80
+ constructor(ctx) {
81
+ this.clientRepository = ctx.clientRepository;
82
+ this.scopeRepository = ctx.scopeRepository;
83
+ this.clientScopeRepository = ctx.clientScopeRepository;
84
+ this.appOrigins = ctx.appOrigins;
85
+ this.logger = ctx.logger;
86
+ }
87
+ async ensureForRealm(realm) {
88
+ for (const definition of SYSTEM_CLIENT_DEFINITIONS) {
89
+ const client = await this.ensureClient(definition, realm);
90
+ await this.ensureScopes(definition, client);
91
+ }
92
+ }
93
+ /**
94
+ * Upsert the client row itself.
95
+ *
96
+ * Every system client name is reserved (`CLIENT_RESERVED_NAMES`), so the
97
+ * row belongs to the system whatever state it is in. A non-built-in one
98
+ * predates the reservation and is taken over rather than left to shadow
99
+ * the realm's system client.
100
+ */ async ensureClient(definition, realm) {
101
+ const attributes = buildSystemClientAttributes(definition, realm, this.appOrigins);
102
+ const existing = await this.clientRepository.findOneBy({
103
+ name: definition.name,
104
+ realmId: realm.id
105
+ });
106
+ if (existing) {
107
+ if (!Object.keys(attributes).some((key) => existing[key] !== attributes[key])) return existing;
108
+ let target = existing;
109
+ if (!existing.builtIn) {
110
+ if (this.logger) this.logger.warn(`Taking over the non-built-in client named '${definition.name}' in realm ${realm.id}: the name is reserved for a built-in system client.`);
111
+ target = await this.clientRepository.findOneWithSecret({ id: existing.id }) || existing;
112
+ target.secret = null;
113
+ target.secretHashed = false;
114
+ target.secretEncrypted = false;
115
+ }
116
+ const merged = this.clientRepository.merge(target, attributes);
117
+ return this.clientRepository.save(merged);
118
+ }
119
+ const entity = this.clientRepository.create({
120
+ ...attributes,
121
+ displayName: definition.displayName
122
+ });
123
+ return this.clientRepository.save(entity);
124
+ }
125
+ /**
126
+ * Bind the definition's scopes through `auth_client_scopes`. That
127
+ * junction is the only source the /authorize code-request verifier reads
128
+ * scopes from.
129
+ *
130
+ * Additive like the attribute MERGE above: an extra scope an admin bound
131
+ * by hand is left in place.
132
+ */ async ensureScopes(definition, client) {
133
+ for (const name of definition.scopeNames) {
134
+ const scope = await this.scopeRepository.findOneBy({
135
+ name,
136
+ realmId: null
137
+ });
138
+ if (!scope) {
139
+ if (this.logger) this.logger.warn(`Skipping scope '${name}' for the ${definition.name} client of realm ${client.realmId}: the scope is not provisioned.`);
140
+ continue;
141
+ }
142
+ if (await this.clientScopeRepository.findOneBy({
143
+ clientId: client.id,
144
+ scopeId: scope.id
145
+ })) continue;
146
+ await this.clientScopeRepository.save(this.clientScopeRepository.create({
147
+ clientId: client.id,
148
+ clientRealmId: client.realmId,
149
+ scopeId: scope.id,
150
+ scopeRealmId: scope.realmId
151
+ }));
152
+ }
153
+ }
154
+ };
155
+ //#endregion
156
+ export { SYSTEM_CLIENT_DEFINITIONS, SYSTEM_CLIENT_SCOPE_NAMES, SystemClientProvisioner, buildSystemClientAttributes };
157
+
158
+ //# sourceMappingURL=system-clients.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-clients.mjs","names":["CLIENT_ACCOUNT_CONSOLE_NAME","CLIENT_ADMIN_CONSOLE_NAME","ClientAuthMethod","ClientTokenBindingMethod","ScopeName","SYSTEM_CLIENT_SCOPE_NAMES","GLOBAL","OPEN_ID","SYSTEM_CLIENT_DEFINITIONS","name","displayName","scopeNames","buildSystemClientAttributes","definition","realm","appOrigins","originPatterns","map","origin","join","realmId","id","authMethod","NONE","tokenBindingMethod","builtIn","active","grantTypes","scope","redirectUri","postLogoutRedirectUri","SystemClientProvisioner","clientRepository","scopeRepository","clientScopeRepository","logger","ctx","ensureForRealm","client","ensureClient","ensureScopes","attributes","existing","findOneBy","isDirty","Object","keys","some","key","target","warn","findOneWithSecret","secret","secretHashed","secretEncrypted","merged","merge","save","entity","create","clientId","scopeId","clientRealmId","scopeRealmId"],"sources":["../../../../src/core/entities/client/system-clients.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n CLIENT_ACCOUNT_CONSOLE_NAME,\n CLIENT_ADMIN_CONSOLE_NAME,\n ClientAuthMethod,\n ClientTokenBindingMethod,\n ScopeName,\n} from '@authup/core-kit';\nimport type { Client, Realm } from '@authup/core-kit';\nimport type { Logger } from '@authup/server-kit';\nimport type { IClientScopeRepository } from '../client-scope/types.ts';\nimport type { IScopeRepository } from '../scope/types.ts';\nimport type { IClientRepository, ISystemClientProvisioner, SystemClientDefinition } from './types.ts';\n\nexport type SystemClientProvisionerContext = {\n clientRepository: IClientRepository;\n scopeRepository: IScopeRepository;\n clientScopeRepository: IClientScopeRepository;\n appOrigins: string[];\n logger?: Logger;\n};\n\n/**\n * The scopes every system client is granted.\n *\n * `global` lets the issued token drive the management API (parity with the\n * legacy password-grant admin login); `openid` yields the id-token.\n */\nexport const SYSTEM_CLIENT_SCOPE_NAMES: string[] = [\n ScopeName.GLOBAL,\n ScopeName.OPEN_ID,\n];\n\n/**\n * The public (PKCE) clients provisioned for every realm (plan 079):\n *\n * - `admin-console` — authup's own admin console (apps/client-admin-console),\n * - `account-console` — the account self-service surface (plan 080; each\n * definition gets its own `<origin>/**` patterns from\n * `buildSystemClientAttributes`, so an inert row adds no redirect\n * surface).\n *\n * Downstream RPs register their own clients (per realm, or in every realm\n * via a wildcard realm provisioning entry, plan 082) — the former shared\n * `web` client was removed.\n *\n * `displayName` is seeded at CREATE only and never re-asserted by the\n * MERGE, so an admin may relabel a client without the next boot undoing it.\n */\nexport const SYSTEM_CLIENT_DEFINITIONS: SystemClientDefinition[] = [\n {\n name: CLIENT_ADMIN_CONSOLE_NAME,\n displayName: 'Admin Console',\n scopeNames: SYSTEM_CLIENT_SCOPE_NAMES,\n },\n {\n name: CLIENT_ACCOUNT_CONSOLE_NAME,\n displayName: 'Account Console',\n scopeNames: SYSTEM_CLIENT_SCOPE_NAMES,\n },\n];\n\n/**\n * Build the MERGE-owned attribute set for a realm's system client.\n *\n * `builtIn` makes the client auto-consent in the /authorize flow and\n * protects it from the API reserved-name guard.\n *\n * `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the\n * /token grants and the /authorize code-request verifier; null = allow-all),\n * so it must list every flow the client uses. `redirectUri` and\n * `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted\n * origin (matched by isSimpleMatch) — deliberately the shared app-origin\n * set for every definition: `redirectUri` is re-asserted on each boot, so a\n * separately-hosted surface (plan 078 \"relocatable by choice\") registers\n * its origin via TRUSTED_ORIGINS rather than editing the client row.\n *\n * The `scope` column is descriptive only. Scope authorization resolves\n * through the `auth_client_scopes` junction, which\n * `SystemClientProvisioner.ensureForRealm` fills from the definition's\n * `scopeNames`.\n *\n * `accessPolicyId` and `displayName` are deliberately NOT part of this set:\n * the MERGE must neither wipe an admin-bound access policy nor undo a\n * relabel.\n */\nexport function buildSystemClientAttributes(\n definition: SystemClientDefinition,\n realm: Realm | { id: string },\n appOrigins: string[],\n): Partial<Client> {\n const originPatterns = appOrigins.map((origin) => `${origin}/**`).join(',');\n\n return {\n name: definition.name,\n realmId: realm.id,\n authMethod: ClientAuthMethod.NONE,\n tokenBindingMethod: ClientTokenBindingMethod.NONE,\n builtIn: true,\n active: true,\n grantTypes: 'authorization_code refresh_token',\n scope: definition.scopeNames.join(' '),\n redirectUri: originPatterns,\n postLogoutRedirectUri: originPatterns,\n };\n}\n\nexport class SystemClientProvisioner implements ISystemClientProvisioner {\n protected clientRepository: IClientRepository;\n\n protected scopeRepository: IScopeRepository;\n\n protected clientScopeRepository: IClientScopeRepository;\n\n protected appOrigins: string[];\n\n protected logger?: Logger;\n\n constructor(ctx: SystemClientProvisionerContext) {\n this.clientRepository = ctx.clientRepository;\n this.scopeRepository = ctx.scopeRepository;\n this.clientScopeRepository = ctx.clientScopeRepository;\n this.appOrigins = ctx.appOrigins;\n this.logger = ctx.logger;\n }\n\n async ensureForRealm(realm: Realm | { id: string }): Promise<void> {\n for (const definition of SYSTEM_CLIENT_DEFINITIONS) {\n const client = await this.ensureClient(definition, realm);\n\n // Always run, even when the attributes were already up to date:\n // an instance provisioned before the junction rows existed\n // carries a steady-state client with no scopes at all.\n await this.ensureScopes(definition, client);\n }\n }\n\n /**\n * Upsert the client row itself.\n *\n * Every system client name is reserved (`CLIENT_RESERVED_NAMES`), so the\n * row belongs to the system whatever state it is in. A non-built-in one\n * predates the reservation and is taken over rather than left to shadow\n * the realm's system client.\n */\n protected async ensureClient(\n definition: SystemClientDefinition,\n realm: Realm | { id: string },\n ): Promise<Client> {\n const attributes = buildSystemClientAttributes(definition, realm, this.appOrigins);\n\n const existing = await this.clientRepository.findOneBy({\n name: definition.name,\n realmId: realm.id,\n });\n\n if (existing) {\n // MERGE: refresh attributes (e.g. redirectUri) when config\n // changes. Dirty-check first — the attributes are deterministic\n // from config, so a steady-state boot would otherwise issue one\n // redundant UPDATE (bumping updatedAt) per client and realm.\n const isDirty = (Object.keys(attributes) as (keyof Client)[])\n .some((key) => existing[key] !== attributes[key]);\n if (!isDirty) {\n return existing;\n }\n\n let target = existing;\n\n if (!existing.builtIn) {\n if (this.logger) {\n this.logger.warn(\n `Taking over the non-built-in client named '${definition.name}' in realm ${realm.id}: the name is reserved for a built-in system client.`,\n );\n }\n\n // The takeover makes the client public, so a secret it carried\n // as a confidential client can never authenticate it again.\n // Drop it instead of leaving the material at rest.\n //\n // The row has to be re-read WITH the secret for that: `secret`\n // is a `select: false` column, so the loaded entity carries no\n // value for it and typeorm's changed-column diff would not\n // emit the null. Re-reading is confined to this branch, and\n // the secret stays out of `buildSystemClientAttributes` for\n // the same reason (an undefined-vs-null compare would read as\n // dirty on every boot).\n target = await this.clientRepository.findOneWithSecret({ id: existing.id }) || existing;\n target.secret = null;\n target.secretHashed = false;\n target.secretEncrypted = false;\n }\n\n const merged = this.clientRepository.merge(target, attributes);\n\n return this.clientRepository.save(merged);\n }\n\n const entity = this.clientRepository.create({\n ...attributes,\n displayName: definition.displayName,\n });\n return this.clientRepository.save(entity);\n }\n\n /**\n * Bind the definition's scopes through `auth_client_scopes`. That\n * junction is the only source the /authorize code-request verifier reads\n * scopes from.\n *\n * Additive like the attribute MERGE above: an extra scope an admin bound\n * by hand is left in place.\n */\n protected async ensureScopes(definition: SystemClientDefinition, client: Client): Promise<void> {\n for (const name of definition.scopeNames) {\n const scope = await this.scopeRepository.findOneBy({\n name,\n realmId: null,\n });\n\n if (!scope) {\n if (this.logger) {\n this.logger.warn(\n `Skipping scope '${name}' for the ${definition.name} client of realm ${client.realmId}: the scope is not provisioned.`,\n );\n }\n continue;\n }\n\n const existing = await this.clientScopeRepository.findOneBy({\n clientId: client.id,\n scopeId: scope.id,\n });\n\n if (existing) {\n continue;\n }\n\n await this.clientScopeRepository.save(this.clientScopeRepository.create({\n clientId: client.id,\n clientRealmId: client.realmId,\n scopeId: scope.id,\n scopeRealmId: scope.realmId,\n }));\n }\n }\n}\n"],"mappings":"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"}
@@ -2,12 +2,25 @@ import type { Client, Realm, Role } from '@authup/core-kit';
2
2
  import type { IQuery } from '@rapiq/core';
3
3
  import type { PermissionPolicyBinding } from '@authup/access';
4
4
  import type { ActorContext, EntityRepositoryFindManyResult, IEntityRepository } from '@authup/server-kit';
5
+ import type { IRealmProvisioner } from '../../provisioning/types.ts';
5
6
  /**
6
- * Ensures a realm has its system-provisioned public `web` client.
7
- * Used by startup provisioning (every realm) and the runtime realm-create
8
- * hook (a single realm). System-level never gated on an actor.
7
+ * One system-provisioned public client (plan 079): `admin-console` or
8
+ * `account-console`. `displayName` is seeded at CREATE only; the
9
+ * MERGE-owned attribute set is derived per definition by
10
+ * `buildSystemClientAttributes`.
9
11
  */
10
- export interface IWebClientProvisioner {
12
+ export type SystemClientDefinition = {
13
+ name: string;
14
+ displayName: string;
15
+ scopeNames: string[];
16
+ };
17
+ /**
18
+ * Ensures a realm has its system-provisioned public clients
19
+ * (`admin-console`, `account-console`). Used by startup provisioning
20
+ * (every realm) and the runtime realm-create hook (a single realm).
21
+ * System-level — never gated on an actor.
22
+ */
23
+ export interface ISystemClientProvisioner extends IRealmProvisioner {
11
24
  ensureForRealm(realm: Realm | {
12
25
  id: string;
13
26
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAG,MAAM,oBAAoB,CAAC;AAE3G;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IAChE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE5E,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,MAAM,CACF,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAG,MAAM,oBAAoB,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IAC/D,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IAChE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE5E,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,MAAM,CACF,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-permission/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD,eAAO,MAAM,sBAAsB,qDAqBjC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-permission/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD,eAAO,MAAM,sBAAsB,qDA+BjC,CAAC"}
@@ -11,6 +11,16 @@ const schemaMapping = {
11
11
  };
12
12
  const clientPermissionSchema = defineSchema({
13
13
  name: EntityType.CLIENT_PERMISSION,
14
+ indexes: [
15
+ ["id"],
16
+ ["clientId", "permissionId"],
17
+ ["permissionId"],
18
+ ["clientRealmId"],
19
+ ["permissionRealmId"],
20
+ ["policyId"],
21
+ ["createdAt"],
22
+ ["updatedAt"]
23
+ ],
14
24
  fields: { default: [
15
25
  "id",
16
26
  "policyId",
@@ -22,16 +32,29 @@ const clientPermissionSchema = defineSchema({
22
32
  "createdAt",
23
33
  "updatedAt"
24
34
  ] },
25
- filters: { allowed: ["clientId", "permissionId"] },
35
+ filters: {
36
+ allowed: [
37
+ "clientId",
38
+ "permissionId",
39
+ "id",
40
+ "clientRealmId",
41
+ "permissionRealmId",
42
+ "policyId"
43
+ ],
44
+ indexed: true
45
+ },
26
46
  relations: {
27
47
  allowed: ["client", "permission"],
28
48
  validate: createRelationsReadGate(schemaMapping)
29
49
  },
30
- sort: { allowed: [
31
- "id",
32
- "createdAt",
33
- "updatedAt"
34
- ] },
50
+ sorts: {
51
+ allowed: [
52
+ "id",
53
+ "createdAt",
54
+ "updatedAt"
55
+ ],
56
+ indexed: true
57
+ },
35
58
  pagination: { maxLimit: 50 },
36
59
  schemaMapping
37
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","client","CLIENT","permission","PERMISSION","clientPermissionSchema","name","CLIENT_PERMISSION","fields","default","filters","allowed","relations","validate","sort","pagination","maxLimit"],"sources":["../../../../src/core/entities/client-permission/schema.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 { defineSchema } from '@rapiq/core';\nimport type { ClientPermission } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { client: EntityType.CLIENT, permission: EntityType.PERMISSION };\n\nexport const clientPermissionSchema = defineSchema<ClientPermission>({\n name: EntityType.CLIENT_PERMISSION,\n // see user-role schema — explicit root projection for include= decodes\n fields: {\n default: [\n 'id',\n 'policyId',\n 'realmScope',\n 'permissionId',\n 'permissionRealmId',\n 'clientId',\n 'clientRealmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['clientId', 'permissionId'] },\n relations: { allowed: ['client', 'permission'], validate: createRelationsReadGate(schemaMapping) },\n sort: { allowed: ['id', 'createdAt', 'updatedAt'] },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB;CAAEC,QAAQH,WAAWI;CAAQC,YAAYL,WAAWM;AAAW;AAErF,MAAaC,yBAAyBR,aAA+B;CACjES,MAAMR,WAAWS;CAEjBC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS,EAAEC,SAAS,CAAC,YAAY,cAAe,EAAC;CACjDC,WAAW;EAAED,SAAS,CAAC,UAAU,YAAa;EAAEE,UAAUd,wBAAwBC,aAAAA;CAAe;CACjGc,MAAM,EAAEH,SAAS;EAAC;EAAM;EAAa;CAAY,EAAC;CAClDI,YAAY,EAAEC,UAAU,GAAG;CAC3BhB;AACJ,CAAA"}
1
+ {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","client","CLIENT","permission","PERMISSION","clientPermissionSchema","name","CLIENT_PERMISSION","indexes","fields","default","filters","allowed","indexed","relations","validate","sorts","pagination","maxLimit"],"sources":["../../../../src/core/entities/client-permission/schema.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 { defineSchema } from '@rapiq/core';\nimport type { ClientPermission } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { client: EntityType.CLIENT, permission: EntityType.PERMISSION };\n\nexport const clientPermissionSchema = defineSchema<ClientPermission>({\n name: EntityType.CLIENT_PERMISSION,\n indexes: [\n ['id'],\n ['clientId', 'permissionId'],\n ['permissionId'],\n ['clientRealmId'],\n ['permissionRealmId'],\n ['policyId'],\n ['createdAt'],\n ['updatedAt'],\n ],\n // see user-role schema — explicit root projection for include= decodes\n fields: {\n default: [\n 'id',\n 'policyId',\n 'realmScope',\n 'permissionId',\n 'permissionRealmId',\n 'clientId',\n 'clientRealmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['clientId', 'permissionId', 'id', 'clientRealmId', 'permissionRealmId', 'policyId'], indexed: true },\n relations: { allowed: ['client', 'permission'], validate: createRelationsReadGate(schemaMapping) },\n sorts: { allowed: ['id', 'createdAt', 'updatedAt'], indexed: true },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB;CAAEC,QAAQH,WAAWI;CAAQC,YAAYL,WAAWM;AAAW;AAErF,MAAaC,yBAAyBR,aAA+B;CACjES,MAAMR,WAAWS;CACjBC,SAAS;EACL,CAAC,IAAK;EACN,CAAC,YAAY,cAAe;EAC5B,CAAC,cAAe;EAChB,CAAC,eAAgB;EACjB,CAAC,mBAAoB;EACrB,CAAC,UAAW;EACZ,CAAC,WAAY;EACb,CAAC,WAAY;CAChB;CAEDC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS;EAAEC,SAAS;GAAC;GAAY;GAAgB;GAAM;GAAiB;GAAqB;EAAW;EAAEC,SAAS;CAAK;CACxHC,WAAW;EAAEF,SAAS,CAAC,UAAU,YAAa;EAAEG,UAAUhB,wBAAwBC,aAAAA;CAAe;CACjGgB,OAAO;EAAEJ,SAAS;GAAC;GAAM;GAAa;EAAY;EAAEC,SAAS;CAAK;CAClEI,YAAY,EAAEC,UAAU,GAAG;CAC3BlB;AACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-role/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,eAAO,MAAM,gBAAgB,+CAmB3B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-role/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,eAAO,MAAM,gBAAgB,+CA4B3B,CAAC"}
@@ -11,6 +11,15 @@ const schemaMapping = {
11
11
  };
12
12
  const clientRoleSchema = defineSchema({
13
13
  name: EntityType.CLIENT_ROLE,
14
+ indexes: [
15
+ ["id"],
16
+ ["roleId", "clientId"],
17
+ ["clientId"],
18
+ ["clientRealmId"],
19
+ ["roleRealmId"],
20
+ ["createdAt"],
21
+ ["updatedAt"]
22
+ ],
14
23
  fields: { default: [
15
24
  "id",
16
25
  "clientId",
@@ -20,16 +29,28 @@ const clientRoleSchema = defineSchema({
20
29
  "createdAt",
21
30
  "updatedAt"
22
31
  ] },
23
- filters: { allowed: ["clientId", "roleId"] },
32
+ filters: {
33
+ allowed: [
34
+ "clientId",
35
+ "roleId",
36
+ "id",
37
+ "clientRealmId",
38
+ "roleRealmId"
39
+ ],
40
+ indexed: true
41
+ },
24
42
  relations: {
25
43
  allowed: ["client", "role"],
26
44
  validate: createRelationsReadGate(schemaMapping)
27
45
  },
28
- sort: { allowed: [
29
- "id",
30
- "createdAt",
31
- "updatedAt"
32
- ] },
46
+ sorts: {
47
+ allowed: [
48
+ "id",
49
+ "createdAt",
50
+ "updatedAt"
51
+ ],
52
+ indexed: true
53
+ },
33
54
  pagination: { maxLimit: 50 },
34
55
  schemaMapping
35
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","client","CLIENT","role","ROLE","clientRoleSchema","name","CLIENT_ROLE","fields","default","filters","allowed","relations","validate","sort","pagination","maxLimit"],"sources":["../../../../src/core/entities/client-role/schema.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 { defineSchema } from '@rapiq/core';\nimport type { ClientRole } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { client: EntityType.CLIENT, role: EntityType.ROLE };\n\nexport const clientRoleSchema = defineSchema<ClientRole>({\n name: EntityType.CLIENT_ROLE,\n // see user-role schema — explicit root projection for include= decodes\n fields: {\n default: [\n 'id',\n 'clientId',\n 'clientRealmId',\n 'roleId',\n 'roleRealmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['clientId', 'roleId'] },\n relations: { allowed: ['client', 'role'], validate: createRelationsReadGate(schemaMapping) },\n sort: { allowed: ['id', 'createdAt', 'updatedAt'] },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB;CAAEC,QAAQH,WAAWI;CAAQC,MAAML,WAAWM;AAAK;AAEzE,MAAaC,mBAAmBR,aAAyB;CACrDS,MAAMR,WAAWS;CAEjBC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS,EAAEC,SAAS,CAAC,YAAY,QAAS,EAAC;CAC3CC,WAAW;EAAED,SAAS,CAAC,UAAU,MAAO;EAAEE,UAAUd,wBAAwBC,aAAAA;CAAe;CAC3Fc,MAAM,EAAEH,SAAS;EAAC;EAAM;EAAa;CAAY,EAAC;CAClDI,YAAY,EAAEC,UAAU,GAAG;CAC3BhB;AACJ,CAAA"}
1
+ {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","client","CLIENT","role","ROLE","clientRoleSchema","name","CLIENT_ROLE","indexes","fields","default","filters","allowed","indexed","relations","validate","sorts","pagination","maxLimit"],"sources":["../../../../src/core/entities/client-role/schema.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 { defineSchema } from '@rapiq/core';\nimport type { ClientRole } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { client: EntityType.CLIENT, role: EntityType.ROLE };\n\nexport const clientRoleSchema = defineSchema<ClientRole>({\n name: EntityType.CLIENT_ROLE,\n indexes: [\n ['id'],\n ['roleId', 'clientId'],\n ['clientId'],\n ['clientRealmId'],\n ['roleRealmId'],\n ['createdAt'],\n ['updatedAt'],\n ],\n // see user-role schema — explicit root projection for include= decodes\n fields: {\n default: [\n 'id',\n 'clientId',\n 'clientRealmId',\n 'roleId',\n 'roleRealmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['clientId', 'roleId', 'id', 'clientRealmId', 'roleRealmId'], indexed: true },\n relations: { allowed: ['client', 'role'], validate: createRelationsReadGate(schemaMapping) },\n sorts: { allowed: ['id', 'createdAt', 'updatedAt'], indexed: true },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB;CAAEC,QAAQH,WAAWI;CAAQC,MAAML,WAAWM;AAAK;AAEzE,MAAaC,mBAAmBR,aAAyB;CACrDS,MAAMR,WAAWS;CACjBC,SAAS;EACL,CAAC,IAAK;EACN,CAAC,UAAU,UAAW;EACtB,CAAC,UAAW;EACZ,CAAC,eAAgB;EACjB,CAAC,aAAc;EACf,CAAC,WAAY;EACb,CAAC,WAAY;CAChB;CAEDC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS;EAAEC,SAAS;GAAC;GAAY;GAAU;GAAM;GAAiB;EAAc;EAAEC,SAAS;CAAK;CAChGC,WAAW;EAAEF,SAAS,CAAC,UAAU,MAAO;EAAEG,UAAUhB,wBAAwBC,aAAAA;CAAe;CAC3FgB,OAAO;EAAEJ,SAAS;GAAC;GAAM;GAAa;EAAY;EAAEC,SAAS;CAAK;CAClEI,YAAY,EAAEC,UAAU,GAAG;CAC3BlB;AACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-scope/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,eAAO,MAAM,iBAAiB,gDAmB5B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-scope/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,eAAO,MAAM,iBAAiB,gDA2B5B,CAAC"}