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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
  2. package/dist/adapters/database/domains/role/entity.mjs +2 -1
  3. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  4. package/dist/adapters/database/logger/module.mjs +2 -4
  5. package/dist/adapters/database/logger/module.mjs.map +1 -1
  6. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts +25 -0
  7. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  8. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs +60 -0
  9. package/dist/adapters/database/migrations/mysql/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  10. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts +25 -0
  11. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.d.ts.map +1 -0
  12. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs +60 -0
  13. package/dist/adapters/database/migrations/postgres/1784970000000-RoleClientForeignKey.mjs.map +1 -0
  14. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +1 -1
  15. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  16. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +1 -1
  17. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  18. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs +1 -1
  19. package/dist/adapters/http/adapters/oauth2/grant-types/identity.mjs.map +1 -1
  20. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +1 -1
  21. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  22. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +1 -1
  23. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  24. package/dist/adapters/http/controllers/entities/client/module.d.ts +6 -6
  25. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  26. package/dist/adapters/http/controllers/entities/client/module.mjs +30 -7
  27. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  28. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts +5 -5
  29. package/dist/adapters/http/controllers/entities/client-permission/module.d.ts.map +1 -1
  30. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +23 -5
  31. package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
  32. package/dist/adapters/http/controllers/entities/client-role/module.d.ts +4 -4
  33. package/dist/adapters/http/controllers/entities/client-role/module.d.ts.map +1 -1
  34. package/dist/adapters/http/controllers/entities/client-role/module.mjs +19 -4
  35. package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
  36. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts +4 -4
  37. package/dist/adapters/http/controllers/entities/client-scope/module.d.ts.map +1 -1
  38. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +19 -4
  39. package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
  40. package/dist/adapters/http/controllers/entities/consent/module.d.ts +3 -3
  41. package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -1
  42. package/dist/adapters/http/controllers/entities/consent/module.mjs +15 -3
  43. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
  44. package/dist/adapters/http/controllers/entities/event/module.d.ts +2 -2
  45. package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -1
  46. package/dist/adapters/http/controllers/entities/event/module.mjs +11 -2
  47. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
  48. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts +5 -5
  49. package/dist/adapters/http/controllers/entities/identity-provide-role/module.d.ts.map +1 -1
  50. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +23 -5
  51. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
  52. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +6 -6
  53. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  54. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +24 -8
  55. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  56. package/dist/adapters/http/controllers/entities/key/module.d.ts +5 -5
  57. package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -1
  58. package/dist/adapters/http/controllers/entities/key/module.mjs +23 -5
  59. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
  60. package/dist/adapters/http/controllers/entities/permission/module.d.ts +6 -6
  61. package/dist/adapters/http/controllers/entities/permission/module.d.ts.map +1 -1
  62. package/dist/adapters/http/controllers/entities/permission/module.mjs +27 -6
  63. package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
  64. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts +4 -4
  65. package/dist/adapters/http/controllers/entities/permission-policy/module.d.ts.map +1 -1
  66. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +19 -4
  67. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
  68. package/dist/adapters/http/controllers/entities/policy/module.d.ts +7 -7
  69. package/dist/adapters/http/controllers/entities/policy/module.d.ts.map +1 -1
  70. package/dist/adapters/http/controllers/entities/policy/module.mjs +27 -6
  71. package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
  72. package/dist/adapters/http/controllers/entities/realm/module.d.ts +6 -6
  73. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  74. package/dist/adapters/http/controllers/entities/realm/module.mjs +29 -8
  75. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  76. package/dist/adapters/http/controllers/entities/role/module.d.ts +6 -6
  77. package/dist/adapters/http/controllers/entities/role/module.d.ts.map +1 -1
  78. package/dist/adapters/http/controllers/entities/role/module.mjs +27 -6
  79. package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
  80. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts +5 -5
  81. package/dist/adapters/http/controllers/entities/role-attribute/module.d.ts.map +1 -1
  82. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +23 -5
  83. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
  84. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts +5 -5
  85. package/dist/adapters/http/controllers/entities/role-permission/module.d.ts.map +1 -1
  86. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +23 -5
  87. package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
  88. package/dist/adapters/http/controllers/entities/scope/module.d.ts +6 -6
  89. package/dist/adapters/http/controllers/entities/scope/module.d.ts.map +1 -1
  90. package/dist/adapters/http/controllers/entities/scope/module.mjs +27 -6
  91. package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
  92. package/dist/adapters/http/controllers/entities/session/module.d.ts +3 -3
  93. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -1
  94. package/dist/adapters/http/controllers/entities/session/module.mjs +15 -3
  95. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  96. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +5 -5
  97. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -1
  98. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +23 -5
  99. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
  100. package/dist/adapters/http/controllers/entities/user/module.d.ts +6 -6
  101. package/dist/adapters/http/controllers/entities/user/module.d.ts.map +1 -1
  102. package/dist/adapters/http/controllers/entities/user/module.mjs +27 -6
  103. package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
  104. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts +5 -5
  105. package/dist/adapters/http/controllers/entities/user-attribute/module.d.ts.map +1 -1
  106. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +23 -5
  107. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
  108. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +4 -4
  109. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -1
  110. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +19 -4
  111. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
  112. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts +5 -5
  113. package/dist/adapters/http/controllers/entities/user-permission/module.d.ts.map +1 -1
  114. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +23 -5
  115. package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
  116. package/dist/adapters/http/controllers/entities/user-role/module.d.ts +4 -4
  117. package/dist/adapters/http/controllers/entities/user-role/module.d.ts.map +1 -1
  118. package/dist/adapters/http/controllers/entities/user-role/module.mjs +19 -4
  119. package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/index.mjs +2 -1
  121. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -1
  122. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  123. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  124. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  125. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  126. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -1
  127. package/dist/adapters/http/controllers/workflows/logout/module.mjs +5 -1
  128. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  129. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts +2 -0
  130. package/dist/adapters/http/controllers/workflows/userinfo/index.d.ts.map +1 -0
  131. package/dist/adapters/http/controllers/workflows/userinfo/index.mjs +5 -0
  132. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts +18 -0
  133. package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -0
  134. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +53 -0
  135. package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -0
  136. package/dist/adapters/http/index.mjs +2 -1
  137. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +1 -0
  138. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  139. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +10 -1
  140. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  141. package/dist/adapters/http/middleware/built-in/rate-limit.d.ts.map +1 -1
  142. package/dist/adapters/http/middleware/built-in/rate-limit.mjs +4 -2
  143. package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
  144. package/dist/adapters/http/request/client-certificate.mjs +1 -1
  145. package/dist/adapters/http/request/client-certificate.mjs.map +1 -1
  146. package/dist/adapters/http/request/event-context.mjs +1 -1
  147. package/dist/adapters/http/request/event-context.mjs.map +1 -1
  148. package/dist/adapters/http/request/helpers/locations.mjs +1 -3
  149. package/dist/adapters/http/request/helpers/locations.mjs.map +1 -1
  150. package/dist/app/factory.d.ts +2 -1
  151. package/dist/app/factory.d.ts.map +1 -1
  152. package/dist/app/factory.mjs +2 -2
  153. package/dist/app/factory.mjs.map +1 -1
  154. package/dist/app/index.d.ts +1 -0
  155. package/dist/app/index.d.ts.map +1 -1
  156. package/dist/app/index.mjs +5 -1
  157. package/dist/app/modules/authentication/module.mjs +6 -3
  158. package/dist/app/modules/authentication/module.mjs.map +1 -1
  159. package/dist/app/modules/authentication/repositories/session.mjs +2 -2
  160. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  161. package/dist/app/modules/components/module.d.ts +3 -0
  162. package/dist/app/modules/components/module.d.ts.map +1 -1
  163. package/dist/app/modules/components/module.mjs +17 -2
  164. package/dist/app/modules/components/module.mjs.map +1 -1
  165. package/dist/app/modules/config/constants.d.ts +1 -0
  166. package/dist/app/modules/config/constants.d.ts.map +1 -1
  167. package/dist/app/modules/config/constants.mjs +1 -0
  168. package/dist/app/modules/config/constants.mjs.map +1 -1
  169. package/dist/app/modules/config/helpers.d.ts +9 -0
  170. package/dist/app/modules/config/helpers.d.ts.map +1 -0
  171. package/dist/app/modules/config/helpers.mjs +22 -0
  172. package/dist/app/modules/config/helpers.mjs.map +1 -0
  173. package/dist/app/modules/config/index.d.ts +2 -0
  174. package/dist/app/modules/config/index.d.ts.map +1 -1
  175. package/dist/app/modules/config/index.mjs +6 -1
  176. package/dist/app/modules/config/module.d.ts.map +1 -1
  177. package/dist/app/modules/config/module.mjs +2 -7
  178. package/dist/app/modules/config/module.mjs.map +1 -1
  179. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  180. package/dist/app/modules/config/normalize.mjs +4 -0
  181. package/dist/app/modules/config/normalize.mjs.map +1 -1
  182. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  183. package/dist/app/modules/config/read/env.mjs +2 -0
  184. package/dist/app/modules/config/read/env.mjs.map +1 -1
  185. package/dist/app/modules/config/read/fs.d.ts.map +1 -1
  186. package/dist/app/modules/config/read/fs.mjs +31 -8
  187. package/dist/app/modules/config/read/fs.mjs.map +1 -1
  188. package/dist/app/modules/config/read/module.mjs +8 -3
  189. package/dist/app/modules/config/read/module.mjs.map +1 -1
  190. package/dist/app/modules/config/trust-proxy.d.ts +28 -0
  191. package/dist/app/modules/config/trust-proxy.d.ts.map +1 -0
  192. package/dist/app/modules/config/trust-proxy.mjs +64 -0
  193. package/dist/app/modules/config/trust-proxy.mjs.map +1 -0
  194. package/dist/app/modules/config/types.d.ts +18 -0
  195. package/dist/app/modules/config/types.d.ts.map +1 -1
  196. package/dist/app/modules/config/validator.d.ts.map +1 -1
  197. package/dist/app/modules/config/validator.mjs +7 -0
  198. package/dist/app/modules/config/validator.mjs.map +1 -1
  199. package/dist/app/modules/database/module.mjs +2 -1
  200. package/dist/app/modules/database/module.mjs.map +1 -1
  201. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  202. package/dist/app/modules/database/repositories/client/repository.mjs +3 -4
  203. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  204. package/dist/app/modules/database/repositories/client-permission/repository.mjs +2 -2
  205. package/dist/app/modules/database/repositories/client-permission/repository.mjs.map +1 -1
  206. package/dist/app/modules/database/repositories/client-role/repository.mjs +2 -2
  207. package/dist/app/modules/database/repositories/client-role/repository.mjs.map +1 -1
  208. package/dist/app/modules/database/repositories/client-scope/repository.mjs +2 -2
  209. package/dist/app/modules/database/repositories/client-scope/repository.mjs.map +1 -1
  210. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -1
  211. package/dist/app/modules/database/repositories/event/repository.mjs +4 -3
  212. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  213. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +2 -2
  214. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  215. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs +2 -2
  216. package/dist/app/modules/database/repositories/identity-provider-role-mapping/repository.mjs.map +1 -1
  217. package/dist/app/modules/database/repositories/key/repository.mjs +2 -2
  218. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  219. package/dist/app/modules/database/repositories/permission/repository.mjs +2 -2
  220. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  221. package/dist/app/modules/database/repositories/permission-policy/repository.mjs +2 -2
  222. package/dist/app/modules/database/repositories/permission-policy/repository.mjs.map +1 -1
  223. package/dist/app/modules/database/repositories/policy/repository.mjs +2 -2
  224. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  225. package/dist/app/modules/database/repositories/query.d.ts +20 -0
  226. package/dist/app/modules/database/repositories/query.d.ts.map +1 -1
  227. package/dist/app/modules/database/repositories/query.mjs +26 -3
  228. package/dist/app/modules/database/repositories/query.mjs.map +1 -1
  229. package/dist/app/modules/database/repositories/realm/repository.mjs +2 -2
  230. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  231. package/dist/app/modules/database/repositories/role/repository.mjs +2 -2
  232. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  233. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -2
  234. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  235. package/dist/app/modules/database/repositories/role-permission/repository.mjs +2 -2
  236. package/dist/app/modules/database/repositories/role-permission/repository.mjs.map +1 -1
  237. package/dist/app/modules/database/repositories/schema-validation.d.ts +17 -3
  238. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
  239. package/dist/app/modules/database/repositories/schema-validation.mjs +29 -5
  240. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
  241. package/dist/app/modules/database/repositories/scope/repository.mjs +2 -2
  242. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  243. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +2 -2
  244. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -1
  245. package/dist/app/modules/database/repositories/user/repository.mjs +2 -2
  246. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  247. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -2
  248. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  249. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +2 -2
  250. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
  251. package/dist/app/modules/database/repositories/user-permission/repository.mjs +2 -2
  252. package/dist/app/modules/database/repositories/user-permission/repository.mjs.map +1 -1
  253. package/dist/app/modules/database/repositories/user-role/repository.mjs +2 -2
  254. package/dist/app/modules/database/repositories/user-role/repository.mjs.map +1 -1
  255. package/dist/app/modules/http/constants.d.ts +2 -13
  256. package/dist/app/modules/http/constants.d.ts.map +1 -1
  257. package/dist/app/modules/http/constants.mjs.map +1 -1
  258. package/dist/app/modules/http/module.d.ts.map +1 -1
  259. package/dist/app/modules/http/module.mjs +7 -1
  260. package/dist/app/modules/http/module.mjs.map +1 -1
  261. package/dist/app/modules/http/modules/controller.d.ts +4 -2
  262. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  263. package/dist/app/modules/http/modules/controller.mjs +208 -124
  264. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  265. package/dist/app/modules/http/modules/middleware.mjs +10 -5
  266. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  267. package/dist/app/modules/identity/module.mjs +6 -3
  268. package/dist/app/modules/identity/module.mjs.map +1 -1
  269. package/dist/app/modules/index.mjs +5 -1
  270. package/dist/app/modules/oauth2/module.mjs +37 -17
  271. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  272. package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs +1 -1
  273. package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs.map +1 -1
  274. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +2 -2
  275. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  276. package/dist/app/modules/oauth2/repositories/token/repository.mjs +1 -1
  277. package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
  278. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  279. package/dist/app/modules/provisioning/module.mjs +21 -12
  280. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  281. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  282. package/dist/app/modules/provisioning/sources/file/module.mjs +11 -2
  283. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  284. package/dist/app/types.d.ts +5 -0
  285. package/dist/app/types.d.ts.map +1 -0
  286. package/dist/app/types.mjs +4 -0
  287. package/dist/cli/commands/healthcheck.d.ts +2 -1
  288. package/dist/cli/commands/healthcheck.d.ts.map +1 -1
  289. package/dist/cli/commands/healthcheck.mjs +3 -2
  290. package/dist/cli/commands/healthcheck.mjs.map +1 -1
  291. package/dist/cli/commands/index.d.ts +0 -1
  292. package/dist/cli/commands/index.d.ts.map +1 -1
  293. package/dist/cli/commands/index.mjs +1 -2
  294. package/dist/cli/commands/migration.d.ts +2 -1
  295. package/dist/cli/commands/migration.d.ts.map +1 -1
  296. package/dist/cli/commands/migration.mjs +3 -2
  297. package/dist/cli/commands/migration.mjs.map +1 -1
  298. package/dist/cli/commands/start.d.ts +2 -1
  299. package/dist/cli/commands/start.d.ts.map +1 -1
  300. package/dist/cli/commands/start.mjs +3 -2
  301. package/dist/cli/commands/start.mjs.map +1 -1
  302. package/dist/cli/config.d.ts +18 -0
  303. package/dist/cli/config.d.ts.map +1 -0
  304. package/dist/cli/config.mjs +34 -0
  305. package/dist/cli/config.mjs.map +1 -0
  306. package/dist/cli/module.d.ts +8 -8
  307. package/dist/cli/module.d.ts.map +1 -1
  308. package/dist/cli/module.mjs +8 -28
  309. package/dist/cli/module.mjs.map +1 -1
  310. package/dist/cli/types.d.ts +5 -0
  311. package/dist/cli/types.d.ts.map +1 -0
  312. package/dist/cli/types.mjs +4 -0
  313. package/dist/components/event-cleaner/module.d.ts.map +1 -1
  314. package/dist/components/event-cleaner/module.mjs +26 -14
  315. package/dist/components/event-cleaner/module.mjs.map +1 -1
  316. package/dist/components/index.d.ts +0 -1
  317. package/dist/components/index.d.ts.map +1 -1
  318. package/dist/components/index.mjs +1 -4
  319. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  320. package/dist/components/oauth2-cleaner/module.mjs +29 -17
  321. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  322. package/dist/components/types.d.ts +1 -0
  323. package/dist/components/types.d.ts.map +1 -1
  324. package/dist/core/authentication/login-throttle/service.d.ts.map +1 -1
  325. package/dist/core/authentication/login-throttle/service.mjs +2 -1
  326. package/dist/core/authentication/login-throttle/service.mjs.map +1 -1
  327. package/dist/core/authentication/session/module.mjs +2 -4
  328. package/dist/core/authentication/session/module.mjs.map +1 -1
  329. package/dist/core/entities/client/constants.d.ts +10 -0
  330. package/dist/core/entities/client/constants.d.ts.map +1 -0
  331. package/dist/core/entities/client/constants.mjs +20 -0
  332. package/dist/core/entities/client/constants.mjs.map +1 -0
  333. package/dist/core/entities/client/index.d.ts +1 -0
  334. package/dist/core/entities/client/index.d.ts.map +1 -1
  335. package/dist/core/entities/client/index.mjs +3 -2
  336. package/dist/core/entities/client/schema.d.ts.map +1 -1
  337. package/dist/core/entities/client/schema.mjs +40 -3
  338. package/dist/core/entities/client/schema.mjs.map +1 -1
  339. package/dist/core/entities/client/service.d.ts.map +1 -1
  340. package/dist/core/entities/client/service.mjs +9 -61
  341. package/dist/core/entities/client/service.mjs.map +1 -1
  342. package/dist/core/entities/client/web-client.d.ts +39 -3
  343. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  344. package/dist/core/entities/client/web-client.mjs +68 -12
  345. package/dist/core/entities/client/web-client.mjs.map +1 -1
  346. package/dist/core/entities/client-permission/service.mjs +12 -9
  347. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  348. package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
  349. package/dist/core/entities/client-scope/schema.mjs +3 -1
  350. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  351. package/dist/core/entities/event/constants.d.ts +7 -0
  352. package/dist/core/entities/event/constants.d.ts.map +1 -1
  353. package/dist/core/entities/event/constants.mjs +7 -1
  354. package/dist/core/entities/event/constants.mjs.map +1 -1
  355. package/dist/core/entities/event/index.mjs +2 -2
  356. package/dist/core/entities/event/service.mjs +1 -1
  357. package/dist/core/entities/event/service.mjs.map +1 -1
  358. package/dist/core/entities/index.mjs +4 -3
  359. package/dist/core/entities/key/service.mjs +4 -2
  360. package/dist/core/entities/key/service.mjs.map +1 -1
  361. package/dist/core/entities/permission/service.d.ts.map +1 -1
  362. package/dist/core/entities/permission/service.mjs +1 -1
  363. package/dist/core/entities/permission/service.mjs.map +1 -1
  364. package/dist/core/entities/policy/service.d.ts.map +1 -1
  365. package/dist/core/entities/policy/service.mjs +3 -2
  366. package/dist/core/entities/policy/service.mjs.map +1 -1
  367. package/dist/core/entities/realm/service.d.ts.map +1 -1
  368. package/dist/core/entities/realm/service.mjs +1 -1
  369. package/dist/core/entities/realm/service.mjs.map +1 -1
  370. package/dist/core/entities/role/schema.d.ts.map +1 -1
  371. package/dist/core/entities/role/schema.mjs +4 -0
  372. package/dist/core/entities/role/schema.mjs.map +1 -1
  373. package/dist/core/entities/role/service.d.ts.map +1 -1
  374. package/dist/core/entities/role/service.mjs +1 -1
  375. package/dist/core/entities/role/service.mjs.map +1 -1
  376. package/dist/core/entities/role-permission/service.mjs +12 -9
  377. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  378. package/dist/core/entities/scope/service.d.ts.map +1 -1
  379. package/dist/core/entities/scope/service.mjs +1 -1
  380. package/dist/core/entities/scope/service.mjs.map +1 -1
  381. package/dist/core/entities/session/schema.d.ts.map +1 -1
  382. package/dist/core/entities/session/schema.mjs +2 -0
  383. package/dist/core/entities/session/schema.mjs.map +1 -1
  384. package/dist/core/entities/user/schema.d.ts.map +1 -1
  385. package/dist/core/entities/user/schema.mjs +2 -0
  386. package/dist/core/entities/user/schema.mjs.map +1 -1
  387. package/dist/core/entities/user/service.d.ts.map +1 -1
  388. package/dist/core/entities/user/service.mjs +1 -1
  389. package/dist/core/entities/user/service.mjs.map +1 -1
  390. package/dist/core/entities/user-authenticator/helpers.mjs +1 -1
  391. package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -1
  392. package/dist/core/entities/user-authenticator/service.mjs +7 -7
  393. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  394. package/dist/core/entities/user-permission/service.mjs +12 -9
  395. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  396. package/dist/core/identity/password-recovery/check.mjs +4 -4
  397. package/dist/core/identity/password-recovery/check.mjs.map +1 -1
  398. package/dist/core/identity/password-recovery/service.mjs +1 -1
  399. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  400. package/dist/core/identity/registration/check.mjs +2 -2
  401. package/dist/core/identity/registration/check.mjs.map +1 -1
  402. package/dist/core/index.mjs +5 -3
  403. package/dist/core/key/check.mjs +2 -2
  404. package/dist/core/key/check.mjs.map +1 -1
  405. package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
  406. package/dist/core/provisioning/entities/client/relations-validator.mjs +2 -0
  407. package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
  408. package/dist/core/provisioning/entities/client/types.d.ts +8 -0
  409. package/dist/core/provisioning/entities/client/types.d.ts.map +1 -1
  410. package/dist/core/provisioning/synchronizer/client/module.d.ts +3 -1
  411. package/dist/core/provisioning/synchronizer/client/module.d.ts.map +1 -1
  412. package/dist/core/provisioning/synchronizer/client/module.mjs +10 -1
  413. package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
  414. package/dist/core/provisioning/synchronizer/client/types.d.ts +3 -1
  415. package/dist/core/provisioning/synchronizer/client/types.d.ts.map +1 -1
  416. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts +4 -1
  417. package/dist/core/provisioning/synchronizer/entity-resolver.d.ts.map +1 -1
  418. package/dist/core/provisioning/synchronizer/entity-resolver.mjs +14 -29
  419. package/dist/core/provisioning/synchronizer/entity-resolver.mjs.map +1 -1
  420. package/dist/core/provisioning/synchronizer/index.d.ts +1 -0
  421. package/dist/core/provisioning/synchronizer/index.d.ts.map +1 -1
  422. package/dist/core/provisioning/synchronizer/permission/module.mjs +0 -1
  423. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  424. package/dist/core/provisioning/synchronizer/realm/module.d.ts.map +1 -1
  425. package/dist/core/provisioning/synchronizer/realm/module.mjs +8 -9
  426. package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
  427. package/dist/core/provisioning/synchronizer/role/module.mjs +0 -1
  428. package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
  429. package/dist/core/provisioning/synchronizer/scope/module.mjs +0 -1
  430. package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
  431. package/dist/core/provisioning/synchronizer/types.d.ts +11 -0
  432. package/dist/core/provisioning/synchronizer/types.d.ts.map +1 -0
  433. package/dist/core/provisioning/synchronizer/types.mjs +4 -0
  434. package/dist/core/provisioning/synchronizer/user/module.mjs +0 -1
  435. package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
  436. package/dist/core/query/describe.d.ts +25 -0
  437. package/dist/core/query/describe.d.ts.map +1 -0
  438. package/dist/core/query/describe.mjs +50 -0
  439. package/dist/core/query/describe.mjs.map +1 -0
  440. package/dist/core/query/fields.d.ts +44 -0
  441. package/dist/core/query/fields.d.ts.map +1 -0
  442. package/dist/core/query/fields.mjs +46 -0
  443. package/dist/core/query/fields.mjs.map +1 -0
  444. package/dist/core/query/index.d.ts +1 -0
  445. package/dist/core/query/index.d.ts.map +1 -1
  446. package/dist/core/query/index.mjs +2 -1
  447. package/dist/core/query/module.d.ts +1 -1
  448. package/dist/core/query/module.mjs +1 -1
  449. package/dist/core/query/module.mjs.map +1 -1
  450. package/dist/index.mjs +6 -2
  451. package/dist/path.mjs.map +1 -1
  452. package/dist/swagger.json +1324 -193
  453. package/dist/ui/client/.vite/ssr-manifest.json +1030 -760
  454. package/dist/ui/client/assets/index-BTK3GPZZ.js +106 -0
  455. package/dist/ui/client/assets/index-Cx_pI7BS.css +2 -0
  456. package/dist/ui/client/index.html +2 -2
  457. package/dist/ui/server/server.js +4465 -11501
  458. package/package.json +51 -50
  459. package/dist/cli/commands/reset.d.ts +0 -2
  460. package/dist/cli/commands/reset.d.ts.map +0 -1
  461. package/dist/cli/commands/reset.mjs +0 -23
  462. package/dist/cli/commands/reset.mjs.map +0 -1
  463. package/dist/components/database/index.d.ts +0 -2
  464. package/dist/components/database/index.d.ts.map +0 -1
  465. package/dist/components/database/index.mjs +0 -7
  466. package/dist/components/database/unique-entries/factory.d.ts +0 -4
  467. package/dist/components/database/unique-entries/factory.d.ts.map +0 -1
  468. package/dist/components/database/unique-entries/factory.mjs +0 -12
  469. package/dist/components/database/unique-entries/factory.mjs.map +0 -1
  470. package/dist/components/database/unique-entries/index.d.ts +0 -3
  471. package/dist/components/database/unique-entries/index.d.ts.map +0 -1
  472. package/dist/components/database/unique-entries/index.mjs +0 -6
  473. package/dist/components/database/unique-entries/module.d.ts +0 -15
  474. package/dist/components/database/unique-entries/module.d.ts.map +0 -1
  475. package/dist/components/database/unique-entries/module.mjs +0 -69
  476. package/dist/components/database/unique-entries/module.mjs.map +0 -1
  477. package/dist/ui/client/assets/index-C05uGFDe.js +0 -131
  478. package/dist/ui/client/assets/index-CiHrf73J.css +0 -2
@@ -4,19 +4,21 @@ import.meta.url;
4
4
  import { useRequestIdentity } from "../../request/helpers/identity.mjs";
5
5
  import "../../request/index.mjs";
6
6
  import { merge } from "smob";
7
+ import { getRequestIP } from "routup";
7
8
  import { rateLimit } from "@routup/rate-limit";
8
9
  //#region src/adapters/http/middleware/built-in/rate-limit.ts
9
10
  function registerRateLimitMiddleware(router, input) {
10
11
  let options = {
12
+ keyGenerator: (event) => getRequestIP(event) || "127.0.0.1",
11
13
  max(event) {
12
14
  const identity = useRequestIdentity(event);
13
15
  if (!identity) return 1200;
14
16
  switch (identity.type) {
15
- case "client": return 60 * 5e3;
17
+ case "client": return 3e5;
16
18
  default: return 6e3;
17
19
  }
18
20
  },
19
- windowMs: 60 * 1e3
21
+ windowMs: 6e4
20
22
  };
21
23
  options = merge(input || {}, options);
22
24
  router.use(rateLimit(options));
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.mjs","names":["rateLimit","merge","useRequestIdentity","registerRateLimitMiddleware","router","input","options","max","event","identity","type","windowMs","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OptionsInput } from '@routup/rate-limit';\nimport { rateLimit } from '@routup/rate-limit';\nimport type { App } from 'routup';\nimport { merge } from 'smob';\nimport { useRequestIdentity } from '../../request/index.ts';\n\nexport function registerRateLimitMiddleware(router: App, input?: OptionsInput) {\n let options : OptionsInput = {\n max(event) {\n const identity = useRequestIdentity(event);\n if (!identity) {\n return 60 * 20; // 20 req. p. sec\n }\n\n switch (identity.type) {\n case 'client': {\n return 60 * 5_000; // 1000 req p. sec\n }\n case 'user':\n default: {\n return 60 * 100; // 100 req p. sec\n }\n }\n },\n windowMs: 60 * 1000, // 60 sec\n };\n\n options = merge(input || {}, options);\n\n router.use(rateLimit(options));\n}\n"],"mappings":";;;;;;;;AAaA,SAAgBG,4BAA4BC,QAAaC,OAAoB;CACzE,IAAIC,UAAyB;EACzBC,IAAIC,OAAK;GACL,MAAMC,WAAWP,mBAAmBM,KAAAA;GACpC,IAAI,CAACC,UACD,OAAO;GAGX,QAAQA,SAASC,MAAjB;IACI,KAAK,UACD,OAAO,KAAK;IAGhB,SACI,OAAO;GAEf;EACJ;EACAC,UAAU,KAAK;CACnB;CAEAL,UAAUL,MAAMI,SAAS,CAAC,GAAGC,OAAAA;CAE7BF,OAAOQ,IAAIZ,UAAUM,OAAAA,CAAAA;AACzB"}
1
+ {"version":3,"file":"rate-limit.mjs","names":["rateLimit","getRequestIP","merge","useRequestIdentity","registerRateLimitMiddleware","router","input","options","keyGenerator","event","max","identity","type","windowMs","use"],"sources":["../../../../../src/adapters/http/middleware/built-in/rate-limit.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OptionsInput } from '@routup/rate-limit';\nimport { rateLimit } from '@routup/rate-limit';\nimport type { App } from 'routup';\nimport { getRequestIP } from 'routup';\nimport { merge } from 'smob';\nimport { useRequestIdentity } from '../../request/index.ts';\n\nexport function registerRateLimitMiddleware(router: App, input?: OptionsInput) {\n let options : OptionsInput = {\n // @routup/rate-limit's default keyGenerator hardcodes\n // `{ trustProxy: true }`; deriving the key here instead lets it\n // follow the app-level trust contract (config `trustProxy`).\n keyGenerator: (event) => getRequestIP(event) || '127.0.0.1',\n max(event) {\n const identity = useRequestIdentity(event);\n if (!identity) {\n return 60 * 20; // 20 req. p. sec\n }\n\n switch (identity.type) {\n case 'client': {\n return 60 * 5_000; // 1000 req p. sec\n }\n case 'user':\n default: {\n return 60 * 100; // 100 req p. sec\n }\n }\n },\n windowMs: 60 * 1000, // 60 sec\n };\n\n options = merge(input || {}, options);\n\n router.use(rateLimit(options));\n}\n"],"mappings":";;;;;;;;;AAcA,SAAgBI,4BAA4BC,QAAaC,OAAoB;CACzE,IAAIC,UAAyB;EAIzBC,eAAeC,UAAUR,aAAaQ,KAAAA,KAAU;EAChDC,IAAID,OAAK;GACL,MAAME,WAAWR,mBAAmBM,KAAAA;GACpC,IAAI,CAACE,UACD,OAAO;GAGX,QAAQA,SAASC,MAAjB;IACI,KAAK,UACD,OAAO;IAGX,SACI,OAAO;GAEf;EACJ;EACAC,UAAU;CACd;CAEAN,UAAUL,MAAMI,SAAS,CAAC,GAAGC,OAAAA;CAE7BF,OAAOS,IAAId,UAAUO,OAAAA,CAAAA;AACzB"}
@@ -8,7 +8,7 @@ import { base64ToArrayBuffer } from "@authup/kit";
8
8
  import { BadRequestError } from "@authup/errors";
9
9
  import { X509Certificate } from "@peculiar/x509";
10
10
  //#region src/adapters/http/request/client-certificate.ts
11
- const MAX_CERTIFICATE_HEADER_LENGTH = 128 * 1024;
11
+ const MAX_CERTIFICATE_HEADER_LENGTH = 131072;
12
12
  const MAX_CERTIFICATE_CHAIN_LENGTH = 10;
13
13
  const STRUCTURED_BINARY_PATTERN = /^:([A-Za-z0-9+/]*={0,2}):$/;
14
14
  async function extractClientCertificateEvidence(event, source) {
@@ -1 +1 @@
1
- {"version":3,"file":"client-certificate.mjs","names":["X509Certificate","BadRequestError","base64ToArrayBuffer","buildClientCertificateThumbprint","parseClientCertificateChain","MAX_CERTIFICATE_HEADER_LENGTH","MAX_CERTIFICATE_CHAIN_LENGTH","STRUCTURED_BINARY_PATTERN","extractClientCertificateEvidence","event","source","undefined","result","extractStandardEvidence","extractForwardedEvidence","thumbprint","certificate","leafHeader","headers","get","chainHeader","certificateHeaderError","assertHeaderLength","parseStructuredCertificate","chain","parseStructuredCertificateList","value","pem","includes","decodeURIComponent","replace","certificates","length","items","split","map","item","trim","some","match","exec","raw","byteLength","toString"],"sources":["../../../../src/adapters/http/request/client-certificate.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport '../../../core/client-certificate/reflect.ts';\nimport { X509Certificate } from '@peculiar/x509';\nimport { BadRequestError } from '@authup/errors';\nimport { base64ToArrayBuffer } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport type { ClientCertificateEvidence } from '../../../core/index.ts';\nimport {\n buildClientCertificateThumbprint,\n parseClientCertificateChain,\n} from '../../../core/index.ts';\nimport type { CertificateSource } from './types.ts';\n\nconst MAX_CERTIFICATE_HEADER_LENGTH = 128 * 1024;\nconst MAX_CERTIFICATE_CHAIN_LENGTH = 10;\nconst STRUCTURED_BINARY_PATTERN = /^:([A-Za-z0-9+/]*={0,2}):$/;\n\nexport async function extractClientCertificateEvidence(\n event: IAppEvent,\n source: CertificateSource,\n): Promise<ClientCertificateEvidence | undefined> {\n if (source === 'disabled') {\n return undefined;\n }\n\n let result: Omit<ClientCertificateEvidence, 'thumbprint'> | undefined;\n if (source === 'standard') {\n result = extractStandardEvidence(event);\n } else if (source === 'forwarded') {\n result = extractForwardedEvidence(event);\n } else {\n throw new BadRequestError('The client certificate source is not configured correctly.');\n }\n if (!result) {\n return undefined;\n }\n\n return {\n ...result,\n thumbprint: await buildClientCertificateThumbprint(result.certificate),\n };\n}\n\nfunction extractStandardEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const leafHeader = event.headers.get('client-cert');\n const chainHeader = event.headers.get('client-cert-chain');\n\n if (!leafHeader) {\n if (chainHeader) {\n throw certificateHeaderError();\n }\n return undefined;\n }\n\n assertHeaderLength(leafHeader);\n const certificate = parseStructuredCertificate(leafHeader);\n const chain = chainHeader ? parseStructuredCertificateList(chainHeader) : [];\n\n return { certificate, chain };\n}\n\nfunction extractForwardedEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const value = event.headers.get('x-forwarded-tls-client-cert');\n if (!value) {\n return undefined;\n }\n\n assertHeaderLength(value);\n\n let pem: string;\n try {\n // Native raw PEM is useful in tests and a few proxy integrations. The\n // NGINX/Traefik contract is escaped PEM: query-style `+` represents a\n // space, while literal base64 plus signs arrive as `%2B`.\n pem = value.includes('-----BEGIN CERTIFICATE-----') ?\n value :\n decodeURIComponent(value.replace(/\\+/g, '%20'));\n } catch {\n throw certificateHeaderError();\n }\n\n let certificates: X509Certificate[];\n try {\n certificates = parseClientCertificateChain(pem);\n } catch {\n throw certificateHeaderError();\n }\n\n if (certificates.length !== 1 || !certificates[0]) {\n throw certificateHeaderError();\n }\n\n return {\n certificate: certificates[0],\n chain: [],\n };\n}\n\nfunction parseStructuredCertificateList(value: string): X509Certificate[] {\n assertHeaderLength(value);\n const items = value.split(',').map((item) => item.trim());\n if (items.length > MAX_CERTIFICATE_CHAIN_LENGTH || items.some((item) => item.length === 0)) {\n throw certificateHeaderError();\n }\n\n return items.map(parseStructuredCertificate);\n}\n\nfunction parseStructuredCertificate(value: string): X509Certificate {\n const match = STRUCTURED_BINARY_PATTERN.exec(value.trim());\n if (!match?.[1]) {\n throw certificateHeaderError();\n }\n\n try {\n const raw = base64ToArrayBuffer(match[1]);\n if (raw.byteLength === 0) {\n throw certificateHeaderError();\n }\n\n const certificate = new X509Certificate(raw);\n if (\n certificate.toString('base64').replace(/=+$/, '') !==\n match[1].replace(/=+$/, '')\n ) {\n throw certificateHeaderError();\n }\n\n return certificate;\n } catch {\n throw certificateHeaderError();\n }\n}\n\nfunction assertHeaderLength(value: string): void {\n if (value.length > MAX_CERTIFICATE_HEADER_LENGTH) {\n throw certificateHeaderError();\n }\n}\n\nfunction certificateHeaderError(): BadRequestError {\n return new BadRequestError('The forwarded client certificate header is malformed.');\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAMK,gCAAgC,MAAM;AAC5C,MAAMC,+BAA+B;AACrC,MAAMC,4BAA4B;AAElC,eAAsBC,iCAClBC,OACAC,QAAyB;CAEzB,IAAIA,WAAW,YACX;CAGJ,IAAIE;CACJ,IAAIF,WAAW,YACXE,SAASC,wBAAwBJ,KAAAA;MAC9B,IAAIC,WAAW,aAClBE,SAASE,yBAAyBL,KAAAA;MAElC,MAAM,IAAIR,gBAAgB,4DAAA;CAE9B,IAAI,CAACW,QACD;CAGJ,OAAO;EACH,GAAGA;EACHG,YAAY,MAAMZ,iCAAiCS,OAAOI,WAAW;CACzE;AACJ;AAEA,SAASH,wBACLJ,OAAgB;CAEhB,MAAMQ,aAAaR,MAAMS,QAAQC,IAAI,aAAA;CACrC,MAAMC,cAAcX,MAAMS,QAAQC,IAAI,mBAAA;CAEtC,IAAI,CAACF,YAAY;EACb,IAAIG,aACA,MAAMC,uBAAAA;EAEV;CACJ;CAEAC,mBAAmBL,UAAAA;CAInB,OAAO;EAAED,aAHWO,2BAA2BN,UAGtCD;EAAaQ,OAFRJ,cAAcK,+BAA+BL,WAAAA,IAAe,CAAA;CAE9C;AAChC;AAEA,SAASN,yBACLL,OAAgB;CAEhB,MAAMiB,QAAQjB,MAAMS,QAAQC,IAAI,6BAAA;CAChC,IAAI,CAACO,OACD;CAGJJ,mBAAmBI,KAAAA;CAEnB,IAAIC;CACJ,IAAI;EAIAA,MAAMD,MAAME,SAAS,6BAAA,IACjBF,QACAG,mBAAmBH,MAAMI,QAAQ,OAAO,KAAA,CAAA;CAChD,QAAQ;EACJ,MAAMT,uBAAAA;CACV;CAEA,IAAIU;CACJ,IAAI;EACAA,eAAe3B,4BAA4BuB,GAAAA;CAC/C,QAAQ;EACJ,MAAMN,uBAAAA;CACV;CAEA,IAAIU,aAAaC,WAAW,KAAK,CAACD,aAAa,IAC3C,MAAMV,uBAAAA;CAGV,OAAO;EACHL,aAAae,aAAa;EAC1BP,OAAO,CAAA;CACX;AACJ;AAEA,SAASC,+BAA+BC,OAAa;CACjDJ,mBAAmBI,KAAAA;CACnB,MAAMO,QAAQP,MAAMQ,MAAM,GAAA,CAAA,CAAKC,KAAKC,SAASA,KAAKC,KAAI,CAAA;CACtD,IAAIJ,MAAMD,SAAS1B,gCAAgC2B,MAAMK,MAAMF,SAASA,KAAKJ,WAAW,CAAA,GACpF,MAAMX,uBAAAA;CAGV,OAAOY,MAAME,IAAIZ,0BAAAA;AACrB;AAEA,SAASA,2BAA2BG,OAAa;CAC7C,MAAMa,QAAQhC,0BAA0BiC,KAAKd,MAAMW,KAAI,CAAA;CACvD,IAAI,CAACE,QAAQ,IACT,MAAMlB,uBAAAA;CAGV,IAAI;EACA,MAAMoB,MAAMvC,oBAAoBqC,MAAM,EAAE;EACxC,IAAIE,IAAIC,eAAe,GACnB,MAAMrB,uBAAAA;EAGV,MAAML,cAAc,IAAIhB,gBAAgByC,GAAAA;EACxC,IACIzB,YAAY2B,SAAS,QAAA,CAAA,CAAUb,QAAQ,OAAO,EAAA,MAC9CS,MAAM,EAAE,CAACT,QAAQ,OAAO,EAAA,GAExB,MAAMT,uBAAAA;EAGV,OAAOL;CACX,QAAQ;EACJ,MAAMK,uBAAAA;CACV;AACJ;AAEA,SAASC,mBAAmBI,OAAa;CACrC,IAAIA,MAAMM,SAAS3B,+BACf,MAAMgB,uBAAAA;AAEd;AAEA,SAASA,yBAAAA;CACL,OAAO,IAAIpB,gBAAgB,uDAAA;AAC/B"}
1
+ {"version":3,"file":"client-certificate.mjs","names":["X509Certificate","BadRequestError","base64ToArrayBuffer","buildClientCertificateThumbprint","parseClientCertificateChain","MAX_CERTIFICATE_HEADER_LENGTH","MAX_CERTIFICATE_CHAIN_LENGTH","STRUCTURED_BINARY_PATTERN","extractClientCertificateEvidence","event","source","undefined","result","extractStandardEvidence","extractForwardedEvidence","thumbprint","certificate","leafHeader","headers","get","chainHeader","certificateHeaderError","assertHeaderLength","parseStructuredCertificate","chain","parseStructuredCertificateList","value","pem","includes","decodeURIComponent","replace","certificates","length","items","split","map","item","trim","some","match","exec","raw","byteLength","toString"],"sources":["../../../../src/adapters/http/request/client-certificate.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport '../../../core/client-certificate/reflect.ts';\nimport { X509Certificate } from '@peculiar/x509';\nimport { BadRequestError } from '@authup/errors';\nimport { base64ToArrayBuffer } from '@authup/kit';\nimport type { IAppEvent } from 'routup';\nimport type { ClientCertificateEvidence } from '../../../core/index.ts';\nimport {\n buildClientCertificateThumbprint,\n parseClientCertificateChain,\n} from '../../../core/index.ts';\nimport type { CertificateSource } from './types.ts';\n\nconst MAX_CERTIFICATE_HEADER_LENGTH = 128 * 1024;\nconst MAX_CERTIFICATE_CHAIN_LENGTH = 10;\nconst STRUCTURED_BINARY_PATTERN = /^:([A-Za-z0-9+/]*={0,2}):$/;\n\nexport async function extractClientCertificateEvidence(\n event: IAppEvent,\n source: CertificateSource,\n): Promise<ClientCertificateEvidence | undefined> {\n if (source === 'disabled') {\n return undefined;\n }\n\n let result: Omit<ClientCertificateEvidence, 'thumbprint'> | undefined;\n if (source === 'standard') {\n result = extractStandardEvidence(event);\n } else if (source === 'forwarded') {\n result = extractForwardedEvidence(event);\n } else {\n throw new BadRequestError('The client certificate source is not configured correctly.');\n }\n if (!result) {\n return undefined;\n }\n\n return {\n ...result,\n thumbprint: await buildClientCertificateThumbprint(result.certificate),\n };\n}\n\nfunction extractStandardEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const leafHeader = event.headers.get('client-cert');\n const chainHeader = event.headers.get('client-cert-chain');\n\n if (!leafHeader) {\n if (chainHeader) {\n throw certificateHeaderError();\n }\n return undefined;\n }\n\n assertHeaderLength(leafHeader);\n const certificate = parseStructuredCertificate(leafHeader);\n const chain = chainHeader ? parseStructuredCertificateList(chainHeader) : [];\n\n return { certificate, chain };\n}\n\nfunction extractForwardedEvidence(\n event: IAppEvent,\n): Omit<ClientCertificateEvidence, 'thumbprint'> | undefined {\n const value = event.headers.get('x-forwarded-tls-client-cert');\n if (!value) {\n return undefined;\n }\n\n assertHeaderLength(value);\n\n let pem: string;\n try {\n // Native raw PEM is useful in tests and a few proxy integrations. The\n // NGINX/Traefik contract is escaped PEM: query-style `+` represents a\n // space, while literal base64 plus signs arrive as `%2B`.\n pem = value.includes('-----BEGIN CERTIFICATE-----') ?\n value :\n decodeURIComponent(value.replace(/\\+/g, '%20'));\n } catch {\n throw certificateHeaderError();\n }\n\n let certificates: X509Certificate[];\n try {\n certificates = parseClientCertificateChain(pem);\n } catch {\n throw certificateHeaderError();\n }\n\n if (certificates.length !== 1 || !certificates[0]) {\n throw certificateHeaderError();\n }\n\n return {\n certificate: certificates[0],\n chain: [],\n };\n}\n\nfunction parseStructuredCertificateList(value: string): X509Certificate[] {\n assertHeaderLength(value);\n const items = value.split(',').map((item) => item.trim());\n if (items.length > MAX_CERTIFICATE_CHAIN_LENGTH || items.some((item) => item.length === 0)) {\n throw certificateHeaderError();\n }\n\n return items.map(parseStructuredCertificate);\n}\n\nfunction parseStructuredCertificate(value: string): X509Certificate {\n const match = STRUCTURED_BINARY_PATTERN.exec(value.trim());\n if (!match?.[1]) {\n throw certificateHeaderError();\n }\n\n try {\n const raw = base64ToArrayBuffer(match[1]);\n if (raw.byteLength === 0) {\n throw certificateHeaderError();\n }\n\n const certificate = new X509Certificate(raw);\n if (\n certificate.toString('base64').replace(/=+$/, '') !==\n match[1].replace(/=+$/, '')\n ) {\n throw certificateHeaderError();\n }\n\n return certificate;\n } catch {\n throw certificateHeaderError();\n }\n}\n\nfunction assertHeaderLength(value: string): void {\n if (value.length > MAX_CERTIFICATE_HEADER_LENGTH) {\n throw certificateHeaderError();\n }\n}\n\nfunction certificateHeaderError(): BadRequestError {\n return new BadRequestError('The forwarded client certificate header is malformed.');\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAMK,gCAAgC;AACtC,MAAMC,+BAA+B;AACrC,MAAMC,4BAA4B;AAElC,eAAsBC,iCAClBC,OACAC,QAAyB;CAEzB,IAAIA,WAAW,YACX;CAGJ,IAAIE;CACJ,IAAIF,WAAW,YACXE,SAASC,wBAAwBJ,KAAAA;MAC9B,IAAIC,WAAW,aAClBE,SAASE,yBAAyBL,KAAAA;MAElC,MAAM,IAAIR,gBAAgB,4DAAA;CAE9B,IAAI,CAACW,QACD;CAGJ,OAAO;EACH,GAAGA;EACHG,YAAY,MAAMZ,iCAAiCS,OAAOI,WAAW;CACzE;AACJ;AAEA,SAASH,wBACLJ,OAAgB;CAEhB,MAAMQ,aAAaR,MAAMS,QAAQC,IAAI,aAAA;CACrC,MAAMC,cAAcX,MAAMS,QAAQC,IAAI,mBAAA;CAEtC,IAAI,CAACF,YAAY;EACb,IAAIG,aACA,MAAMC,uBAAAA;EAEV;CACJ;CAEAC,mBAAmBL,UAAAA;CAInB,OAAO;EAAED,aAHWO,2BAA2BN,UAGtCD;EAAaQ,OAFRJ,cAAcK,+BAA+BL,WAAAA,IAAe,CAAA;CAE9C;AAChC;AAEA,SAASN,yBACLL,OAAgB;CAEhB,MAAMiB,QAAQjB,MAAMS,QAAQC,IAAI,6BAAA;CAChC,IAAI,CAACO,OACD;CAGJJ,mBAAmBI,KAAAA;CAEnB,IAAIC;CACJ,IAAI;EAIAA,MAAMD,MAAME,SAAS,6BAAA,IACjBF,QACAG,mBAAmBH,MAAMI,QAAQ,OAAO,KAAA,CAAA;CAChD,QAAQ;EACJ,MAAMT,uBAAAA;CACV;CAEA,IAAIU;CACJ,IAAI;EACAA,eAAe3B,4BAA4BuB,GAAAA;CAC/C,QAAQ;EACJ,MAAMN,uBAAAA;CACV;CAEA,IAAIU,aAAaC,WAAW,KAAK,CAACD,aAAa,IAC3C,MAAMV,uBAAAA;CAGV,OAAO;EACHL,aAAae,aAAa;EAC1BP,OAAO,CAAA;CACX;AACJ;AAEA,SAASC,+BAA+BC,OAAa;CACjDJ,mBAAmBI,KAAAA;CACnB,MAAMO,QAAQP,MAAMQ,MAAM,GAAA,CAAA,CAAKC,KAAKC,SAASA,KAAKC,KAAI,CAAA;CACtD,IAAIJ,MAAMD,SAAS1B,gCAAgC2B,MAAMK,MAAMF,SAASA,KAAKJ,WAAW,CAAA,GACpF,MAAMX,uBAAAA;CAGV,OAAOY,MAAME,IAAIZ,0BAAAA;AACrB;AAEA,SAASA,2BAA2BG,OAAa;CAC7C,MAAMa,QAAQhC,0BAA0BiC,KAAKd,MAAMW,KAAI,CAAA;CACvD,IAAI,CAACE,QAAQ,IACT,MAAMlB,uBAAAA;CAGV,IAAI;EACA,MAAMoB,MAAMvC,oBAAoBqC,MAAM,EAAE;EACxC,IAAIE,IAAIC,eAAe,GACnB,MAAMrB,uBAAAA;EAGV,MAAML,cAAc,IAAIhB,gBAAgByC,GAAAA;EACxC,IACIzB,YAAY2B,SAAS,QAAA,CAAA,CAAUb,QAAQ,OAAO,EAAA,MAC9CS,MAAM,EAAE,CAACT,QAAQ,OAAO,EAAA,GAExB,MAAMT,uBAAAA;EAGV,OAAOL;CACX,QAAQ;EACJ,MAAMK,uBAAAA;CACV;AACJ;AAEA,SAASC,mBAAmBI,OAAa;CACrC,IAAIA,MAAMM,SAAS3B,+BACf,MAAMgB,uBAAAA;AAEd;AAEA,SAASA,yBAAAA;CACL,OAAO,IAAIpB,gBAAgB,uDAAA;AAC/B"}
@@ -26,7 +26,7 @@ function useRequestEventContext() {
26
26
  actorName: identity ? identity.data.name ?? null : null,
27
27
  requestPath: event.path,
28
28
  requestMethod: event.method,
29
- requestIpAddress: getRequestIP(event, { trustProxy: true }) ?? null,
29
+ requestIpAddress: getRequestIP(event) ?? null,
30
30
  requestUserAgent: getRequestHeader(event, "user-agent") ?? null
31
31
  }, () => event.next());
32
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"event-context.mjs","names":["AsyncLocalStorage","defineCoreHandler","getRequestHeader","getRequestIP","useRequestIdentity","storage","runWithRequestEventContext","ctx","fn","run","useRequestEventContext","getStore","createRequestEventContextMiddleware","event","identity","actorType","type","actorId","id","actorName","data","name","requestPath","path","requestMethod","method","requestIpAddress","trustProxy","requestUserAgent","next"],"sources":["../../../../src/adapters/http/request/event-context.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 { AsyncLocalStorage } from 'node:async_hooks';\nimport { defineCoreHandler, getRequestHeader, getRequestIP } from 'routup';\nimport type { Handler } from 'routup';\nimport type { EventRequestContext } from '../../../core/index.ts';\nimport { useRequestIdentity } from './helpers/index.ts';\n\n/**\n * Actor + request attribution snapshot for entity-CRUD audit rows, carried\n * across the request's async continuation via AsyncLocalStorage so the\n * database subscribers (which have no request handle) can attribute their\n * writes. Writes outside HTTP (provisioning, CLI, cron) have no store —\n * the getter returns undefined, the correct \"system\" semantics.\n */\nexport type RequestEventContext = EventRequestContext;\n\nconst storage = new AsyncLocalStorage<RequestEventContext>();\n\nexport function runWithRequestEventContext<R>(\n ctx: RequestEventContext,\n fn: () => R,\n): R {\n return storage.run(ctx, fn);\n}\n\nexport function useRequestEventContext(): RequestEventContext | undefined {\n return storage.getStore();\n}\n\n/**\n * Builds the {@link RequestEventContext} from the routup event and wraps the\n * downstream pipeline in it. Must be mounted AFTER the authorization\n * middleware — the identity has to be resolved for actor attribution.\n */\nexport function createRequestEventContextMiddleware() : Handler {\n return defineCoreHandler(async (event) => {\n const identity = useRequestIdentity(event);\n\n const ctx : RequestEventContext = {\n actorType: identity ? identity.type : null,\n actorId: identity ? identity.id : null,\n actorName: identity ? identity.data.name ?? null : null,\n requestPath: event.path,\n requestMethod: event.method,\n requestIpAddress: getRequestIP(event, { trustProxy: true }) ?? null,\n requestUserAgent: getRequestHeader(event, 'user-agent') ?? null,\n };\n\n return runWithRequestEventContext(ctx, () => event.next());\n });\n}\n"],"mappings":";;;;;;;;AAsBA,MAAMK,UAAU,IAAIL,kBAAAA;AAEpB,SAAgBM,2BACZC,KACAC,IAAW;CAEX,OAAOH,QAAQI,IAAIF,KAAKC,EAAAA;AAC5B;AAEA,SAAgBE,yBAAAA;CACZ,OAAOL,QAAQM,SAAQ;AAC3B;;;;;GAOA,SAAgBC,sCAAAA;CACZ,OAAOX,kBAAkB,OAAOY,UAAAA;EAC5B,MAAMC,WAAWV,mBAAmBS,KAAAA;EAYpC,OAAOP,2BAA2BC;GAT9BQ,WAAWD,WAAWA,SAASE,OAAO;GACtCC,SAASH,WAAWA,SAASI,KAAK;GAClCC,WAAWL,WAAWA,SAASM,KAAKC,QAAQ,OAAO;GACnDC,aAAaT,MAAMU;GACnBC,eAAeX,MAAMY;GACrBC,kBAAkBvB,aAAaU,OAAO,EAAEc,YAAY,KAAK,CAAA,KAAM;GAC/DC,kBAAkB1B,iBAAiBW,OAAO,YAAA,KAAiB;EAG7BN,SAAWM,MAAMgB,KAAI,CAAA;CAC3D,CAAA;AACJ"}
1
+ {"version":3,"file":"event-context.mjs","names":["AsyncLocalStorage","defineCoreHandler","getRequestHeader","getRequestIP","useRequestIdentity","storage","runWithRequestEventContext","ctx","fn","run","useRequestEventContext","getStore","createRequestEventContextMiddleware","event","identity","actorType","type","actorId","id","actorName","data","name","requestPath","path","requestMethod","method","requestIpAddress","requestUserAgent","next"],"sources":["../../../../src/adapters/http/request/event-context.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 { AsyncLocalStorage } from 'node:async_hooks';\nimport { defineCoreHandler, getRequestHeader, getRequestIP } from 'routup';\nimport type { Handler } from 'routup';\nimport type { EventRequestContext } from '../../../core/index.ts';\nimport { useRequestIdentity } from './helpers/index.ts';\n\n/**\n * Actor + request attribution snapshot for entity-CRUD audit rows, carried\n * across the request's async continuation via AsyncLocalStorage so the\n * database subscribers (which have no request handle) can attribute their\n * writes. Writes outside HTTP (provisioning, CLI, cron) have no store —\n * the getter returns undefined, the correct \"system\" semantics.\n */\nexport type RequestEventContext = EventRequestContext;\n\nconst storage = new AsyncLocalStorage<RequestEventContext>();\n\nexport function runWithRequestEventContext<R>(\n ctx: RequestEventContext,\n fn: () => R,\n): R {\n return storage.run(ctx, fn);\n}\n\nexport function useRequestEventContext(): RequestEventContext | undefined {\n return storage.getStore();\n}\n\n/**\n * Builds the {@link RequestEventContext} from the routup event and wraps the\n * downstream pipeline in it. Must be mounted AFTER the authorization\n * middleware — the identity has to be resolved for actor attribution.\n */\nexport function createRequestEventContextMiddleware() : Handler {\n return defineCoreHandler(async (event) => {\n const identity = useRequestIdentity(event);\n\n const ctx : RequestEventContext = {\n actorType: identity ? identity.type : null,\n actorId: identity ? identity.id : null,\n actorName: identity ? identity.data.name ?? null : null,\n requestPath: event.path,\n requestMethod: event.method,\n requestIpAddress: getRequestIP(event) ?? null,\n requestUserAgent: getRequestHeader(event, 'user-agent') ?? null,\n };\n\n return runWithRequestEventContext(ctx, () => event.next());\n });\n}\n"],"mappings":";;;;;;;;AAsBA,MAAMK,UAAU,IAAIL,kBAAAA;AAEpB,SAAgBM,2BACZC,KACAC,IAAW;CAEX,OAAOH,QAAQI,IAAIF,KAAKC,EAAAA;AAC5B;AAEA,SAAgBE,yBAAAA;CACZ,OAAOL,QAAQM,SAAQ;AAC3B;;;;;GAOA,SAAgBC,sCAAAA;CACZ,OAAOX,kBAAkB,OAAOY,UAAAA;EAC5B,MAAMC,WAAWV,mBAAmBS,KAAAA;EAYpC,OAAOP,2BAA2BC;GAT9BQ,WAAWD,WAAWA,SAASE,OAAO;GACtCC,SAASH,WAAWA,SAASI,KAAK;GAClCC,WAAWL,WAAWA,SAASM,KAAKC,QAAQ,OAAO;GACnDC,aAAaT,MAAMU;GACnBC,eAAeX,MAAMY;GACrBC,kBAAkBvB,aAAaU,KAAAA,KAAU;GACzCc,kBAAkBzB,iBAAiBW,OAAO,YAAA,KAAiB;EAG7BN,SAAWM,MAAMe,KAAI,CAAA;CAC3D,CAAA;AACJ"}
@@ -19,9 +19,7 @@ async function readFromLocations(event, locations) {
19
19
  case "params":
20
20
  Object.assign(out, event.params);
21
21
  break;
22
- case "cookies":
23
- Object.assign(out, useRequestCookies(event));
24
- break;
22
+ case "cookies": Object.assign(out, useRequestCookies(event));
25
23
  }
26
24
  return out;
27
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"locations.mjs","names":["readRequestBody","useRequestCookies","useRequestQuery","readFromLocations","event","locations","out","loc","body","Object","assign","params"],"sources":["../../../../../src/adapters/http/request/helpers/locations.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IAppEvent } from 'routup';\nimport { readRequestBody } from '@routup/basic/body';\nimport { useRequestCookies } from '@routup/basic/cookie';\nimport { useRequestQuery } from '@routup/basic/query';\n\nexport type RequestDataLocation = 'body' | 'query' | 'params' | 'cookies';\n\nexport async function readFromLocations(\n event: IAppEvent,\n locations: RequestDataLocation[],\n): Promise<Record<string, any>> {\n const out: Record<string, any> = {};\n for (const loc of locations) {\n switch (loc) {\n case 'body': {\n const body = await readRequestBody(event);\n if (body && typeof body === 'object') {\n Object.assign(out, body);\n }\n break;\n }\n case 'query': {\n Object.assign(out, useRequestQuery(event));\n break;\n }\n case 'params': {\n Object.assign(out, event.params);\n break;\n }\n case 'cookies': {\n Object.assign(out, useRequestCookies(event));\n break;\n }\n }\n }\n return out;\n}\n"],"mappings":";;;;;;;AAcA,eAAsBG,kBAClBC,OACAC,WAAgC;CAEhC,MAAMC,MAA2B,CAAC;CAClC,KAAK,MAAMC,OAAOF,WACd,QAAQE,KAAR;EACI,KAAK,QAAQ;GACT,MAAMC,OAAO,MAAMR,gBAAgBI,KAAAA;GACnC,IAAII,QAAQ,OAAOA,SAAS,UACxBC,OAAOC,OAAOJ,KAAKE,IAAAA;GAEvB;EACJ;EACA,KAAK;GACDC,OAAOC,OAAOJ,KAAKJ,gBAAgBE,KAAAA,CAAAA;GACnC;EAEJ,KAAK;GACDK,OAAOC,OAAOJ,KAAKF,MAAMO,MAAM;GAC/B;EAEJ,KAAK;GACDF,OAAOC,OAAOJ,KAAKL,kBAAkBG,KAAAA,CAAAA;GACrC;CAER;CAEJ,OAAOE;AACX"}
1
+ {"version":3,"file":"locations.mjs","names":["readRequestBody","useRequestCookies","useRequestQuery","readFromLocations","event","locations","out","loc","body","Object","assign","params"],"sources":["../../../../../src/adapters/http/request/helpers/locations.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IAppEvent } from 'routup';\nimport { readRequestBody } from '@routup/basic/body';\nimport { useRequestCookies } from '@routup/basic/cookie';\nimport { useRequestQuery } from '@routup/basic/query';\n\nexport type RequestDataLocation = 'body' | 'query' | 'params' | 'cookies';\n\nexport async function readFromLocations(\n event: IAppEvent,\n locations: RequestDataLocation[],\n): Promise<Record<string, any>> {\n const out: Record<string, any> = {};\n for (const loc of locations) {\n switch (loc) {\n case 'body': {\n const body = await readRequestBody(event);\n if (body && typeof body === 'object') {\n Object.assign(out, body);\n }\n break;\n }\n case 'query': {\n Object.assign(out, useRequestQuery(event));\n break;\n }\n case 'params': {\n Object.assign(out, event.params);\n break;\n }\n case 'cookies': {\n Object.assign(out, useRequestCookies(event));\n break;\n }\n }\n }\n return out;\n}\n"],"mappings":";;;;;;;AAcA,eAAsBG,kBAClBC,OACAC,WAAgC;CAEhC,MAAMC,MAA2B,CAAC;CAClC,KAAK,MAAMC,OAAOF,WACd,QAAQE,KAAR;EACI,KAAK,QAAQ;GACT,MAAMC,OAAO,MAAMR,gBAAgBI,KAAAA;GACnC,IAAII,QAAQ,OAAOA,SAAS,UACxBC,OAAOC,OAAOJ,KAAKE,IAAAA;GAEvB;EACJ;EACA,KAAK;GACDC,OAAOC,OAAOJ,KAAKJ,gBAAgBE,KAAAA,CAAAA;GACnC;EAEJ,KAAK;GACDK,OAAOC,OAAOJ,KAAKF,MAAMO,MAAM;GAC/B;EAEJ,KAAK,WACDF,OAAOC,OAAOJ,KAAKL,kBAAkBG,KAAAA,CAAAA;CAG7C;CAEJ,OAAOE;AACX"}
@@ -1,2 +1,3 @@
1
- export declare function createApplication(): import("orkos").IApplication;
1
+ import type { CreateApplicationContext } from './types.ts';
2
+ export declare function createApplication(context?: CreateApplicationContext): import("orkos").IApplication;
2
3
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/app/factory.ts"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,iCAkBhC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/app/factory.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,gCAkBvE"}
@@ -6,8 +6,8 @@ import { ProvisionerModule } from "./modules/provisioning/module.mjs";
6
6
  import "./modules/index.mjs";
7
7
  import { ApplicationBuilder } from "./builder.mjs";
8
8
  //#region src/app/factory.ts
9
- function createApplication() {
10
- return new ApplicationBuilder().withConfig().withLogger().withCache().withMail().withRuntime().withDatabase().withProvisioning(new ProvisionerModule([new DefaultProvisioningSource()])).withLdap().withAuthentication().withIdentity().withOAuth2().withComponents().withHTTP().build();
9
+ function createApplication(context = {}) {
10
+ return new ApplicationBuilder().withConfig(context.config).withLogger().withCache().withMail().withRuntime().withDatabase().withProvisioning(new ProvisionerModule([new DefaultProvisioningSource()])).withLdap().withAuthentication().withIdentity().withOAuth2().withComponents().withHTTP().build();
11
11
  }
12
12
  //#endregion
13
13
  export { createApplication };
@@ -1 +1 @@
1
- {"version":3,"file":"factory.mjs","names":["ApplicationBuilder","DefaultProvisioningSource","ProvisionerModule","createApplication","withConfig","withLogger","withCache","withMail","withRuntime","withDatabase","withProvisioning","withLdap","withAuthentication","withIdentity","withOAuth2","withComponents","withHTTP","build"],"sources":["../../src/app/factory.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 { ApplicationBuilder } from './builder.ts';\nimport {\n DefaultProvisioningSource,\n ProvisionerModule,\n} from './modules/index.ts';\n\nexport function createApplication() {\n return new ApplicationBuilder()\n .withConfig()\n .withLogger()\n .withCache()\n .withMail()\n .withRuntime()\n .withDatabase()\n .withProvisioning(new ProvisionerModule([\n new DefaultProvisioningSource(),\n ]))\n .withLdap()\n .withAuthentication()\n .withIdentity()\n .withOAuth2()\n .withComponents()\n .withHTTP()\n .build();\n}\n"],"mappings":";;;;;;;;AAaA,SAAgBG,oBAAAA;CACZ,OAAO,IAAIH,mBAAAA,CAAAA,CACNI,WAAU,CAAA,CACVC,WAAU,CAAA,CACVC,UAAS,CAAA,CACTC,SAAQ,CAAA,CACRC,YAAW,CAAA,CACXC,aAAY,CAAA,CACZC,iBAAiB,IAAIR,kBAAkB,CACpC,IAAID,0BAAAA,CACP,CAAA,CAAA,CAAA,CACAU,SAAQ,CAAA,CACRC,mBAAkB,CAAA,CAClBC,aAAY,CAAA,CACZC,WAAU,CAAA,CACVC,eAAc,CAAA,CACdC,SAAQ,CAAA,CACRC,MAAK;AACd"}
1
+ {"version":3,"file":"factory.mjs","names":["ApplicationBuilder","DefaultProvisioningSource","ProvisionerModule","createApplication","context","withConfig","config","withLogger","withCache","withMail","withRuntime","withDatabase","withProvisioning","withLdap","withAuthentication","withIdentity","withOAuth2","withComponents","withHTTP","build"],"sources":["../../src/app/factory.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 { ApplicationBuilder } from './builder.ts';\nimport {\n DefaultProvisioningSource,\n ProvisionerModule,\n} from './modules/index.ts';\nimport type { CreateApplicationContext } from './types.ts';\n\nexport function createApplication(context: CreateApplicationContext = {}) {\n return new ApplicationBuilder()\n .withConfig(context.config)\n .withLogger()\n .withCache()\n .withMail()\n .withRuntime()\n .withDatabase()\n .withProvisioning(new ProvisionerModule([\n new DefaultProvisioningSource(),\n ]))\n .withLdap()\n .withAuthentication()\n .withIdentity()\n .withOAuth2()\n .withComponents()\n .withHTTP()\n .build();\n}\n"],"mappings":";;;;;;;;AAcA,SAAgBG,kBAAkBC,UAAoC,CAAC,GAAC;CACpE,OAAO,IAAIJ,mBAAAA,CAAAA,CACNK,WAAWD,QAAQE,MAAM,CAAA,CACzBC,WAAU,CAAA,CACVC,UAAS,CAAA,CACTC,SAAQ,CAAA,CACRC,YAAW,CAAA,CACXC,aAAY,CAAA,CACZC,iBAAiB,IAAIV,kBAAkB,CACpC,IAAID,0BAAAA,CACP,CAAA,CAAA,CAAA,CACAY,SAAQ,CAAA,CACRC,mBAAkB,CAAA,CAClBC,aAAY,CAAA,CACZC,WAAU,CAAA,CACVC,eAAc,CAAA,CACdC,SAAQ,CAAA,CACRC,MAAK;AACd"}
@@ -1,4 +1,5 @@
1
1
  export * from './builder.ts';
2
2
  export * from './factory.ts';
3
3
  export * from './modules/index.ts';
4
+ export * from './types.ts';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAOA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAOA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
@@ -6,6 +6,10 @@ import { CacheInjectionKey } from "./modules/cache/constants.mjs";
6
6
  import { ModuleName } from "./modules/constants.mjs";
7
7
  import { ConfigEnvironmentVariableName, ConfigInjectionKey } from "./modules/config/constants.mjs";
8
8
  import { expandToOrigins, getAppOrigins } from "./modules/config/origins.mjs";
9
+ import { readConfigRawFromEnv } from "./modules/config/read/env.mjs";
10
+ import { readConfigRawFromFS } from "./modules/config/read/fs.mjs";
11
+ import { readConfigRaw } from "./modules/config/read/module.mjs";
12
+ import { readConfig } from "./modules/config/helpers.mjs";
9
13
  import { ConfigModule } from "./modules/config/module.mjs";
10
14
  import { CacheModule } from "./modules/cache/module.mjs";
11
15
  import { SessionRepository } from "./modules/authentication/repositories/session.mjs";
@@ -64,4 +68,4 @@ import { RuntimeModule } from "./modules/runtime/module.mjs";
64
68
  import "./modules/index.mjs";
65
69
  import { ApplicationBuilder } from "./builder.mjs";
66
70
  import { createApplication } from "./factory.mjs";
67
- export { ApplicationBuilder, AuthenticationInjectionKey, AuthenticationModule, CacheInjectionKey, CacheModule, ClientIdentityRepository, ClientPermissionRepositoryAdapter, ClientRepositoryAdapter, ClientRoleRepositoryAdapter, ClientScopeRepositoryAdapter, ComponentsModule, CompositeProvisioningSource, ConfigEnvironmentVariableName, ConfigInjectionKey, ConfigModule, DatabaseInjectionKey, DatabaseModule, DefaultProvisioningSource, EventRepositoryAdapter, FileProvisioningSource, HTTPInjectionKey, HTTPModule, IdentityInjectionKey, IdentityModule, IdentityProviderAccountRepository, IdentityProviderAttributeMappingRepository, IdentityProviderPermissionMappingRepository, IdentityProviderRepositoryAdapter, IdentityProviderRoleMappingRepository, IdentityProviderRoleMappingRepositoryAdapter, KeyRepositoryAdapter, LDAPInjectionKey, LdapModule, LoggerInjectionKey, LoggerModule, MailInjectionKey, MailModule, MailTemplateRendererInjectionKey, MetricsInjectionKey, ModuleName, OAuth2InjectionToken, OAuth2Module, PermissionDatabaseProvider, PermissionPolicyRepositoryAdapter, PermissionRepositoryAdapter, PolicyRepositoryAdapter, PromAuthFlowMetrics, ProvisionerModule, RealmRepositoryAdapter, RoleAttributeRepositoryAdapter, RolePermissionRepositoryAdapter, RoleRepositoryAdapter, RuntimeModule, ScopeRepositoryAdapter, SessionRepository, TrustAnchorRepositoryAdapter, UserAttributeRepositoryAdapter, UserAuthenticatorRepositoryAdapter, UserIdentityRepository, UserPermissionRepositoryAdapter, UserRepositoryAdapter, UserRoleRepositoryAdapter, createApplication, expandToOrigins, getAppOrigins };
71
+ export { ApplicationBuilder, AuthenticationInjectionKey, AuthenticationModule, CacheInjectionKey, CacheModule, ClientIdentityRepository, ClientPermissionRepositoryAdapter, ClientRepositoryAdapter, ClientRoleRepositoryAdapter, ClientScopeRepositoryAdapter, ComponentsModule, CompositeProvisioningSource, ConfigEnvironmentVariableName, ConfigInjectionKey, ConfigModule, DatabaseInjectionKey, DatabaseModule, DefaultProvisioningSource, EventRepositoryAdapter, FileProvisioningSource, HTTPInjectionKey, HTTPModule, IdentityInjectionKey, IdentityModule, IdentityProviderAccountRepository, IdentityProviderAttributeMappingRepository, IdentityProviderPermissionMappingRepository, IdentityProviderRepositoryAdapter, IdentityProviderRoleMappingRepository, IdentityProviderRoleMappingRepositoryAdapter, KeyRepositoryAdapter, LDAPInjectionKey, LdapModule, LoggerInjectionKey, LoggerModule, MailInjectionKey, MailModule, MailTemplateRendererInjectionKey, MetricsInjectionKey, ModuleName, OAuth2InjectionToken, OAuth2Module, PermissionDatabaseProvider, PermissionPolicyRepositoryAdapter, PermissionRepositoryAdapter, PolicyRepositoryAdapter, PromAuthFlowMetrics, ProvisionerModule, RealmRepositoryAdapter, RoleAttributeRepositoryAdapter, RolePermissionRepositoryAdapter, RoleRepositoryAdapter, RuntimeModule, ScopeRepositoryAdapter, SessionRepository, TrustAnchorRepositoryAdapter, UserAttributeRepositoryAdapter, UserAuthenticatorRepositoryAdapter, UserIdentityRepository, UserPermissionRepositoryAdapter, UserRepositoryAdapter, UserRoleRepositoryAdapter, createApplication, expandToOrigins, getAppOrigins, readConfig, readConfigRaw, readConfigRawFromEnv, readConfigRawFromFS };
@@ -27,15 +27,18 @@ var AuthenticationModule = class {
27
27
  }
28
28
  async setup(container) {
29
29
  container.register(AuthenticationInjectionKey.SessionRepository, { useFactory: (c) => {
30
+ const cache = c.resolve(CacheInjectionKey);
31
+ const repository = c.resolve(SessionEntity);
30
32
  return new SessionRepository({
31
- cache: c.resolve(CacheInjectionKey),
32
- repository: c.resolve(SessionEntity)
33
+ cache,
34
+ repository
33
35
  });
34
36
  } });
35
37
  container.register(AuthenticationInjectionKey.SessionManager, { useFactory: (c) => {
36
38
  const config = c.resolve(ConfigInjectionKey);
39
+ const repository = c.resolve(AuthenticationInjectionKey.SessionRepository);
37
40
  return new SessionManager({
38
- repository: c.resolve(AuthenticationInjectionKey.SessionRepository),
41
+ repository,
39
42
  options: { maxAge: config.tokenRefreshMaxAge + 3600 }
40
43
  });
41
44
  } });
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["SessionEntity","SessionManager","CacheInjectionKey","ConfigInjectionKey","ModuleName","AuthenticationInjectionKey","SessionRepository","AuthenticationModule","name","dependencies","AUTHENTICATION","DATABASE","CACHE","CONFIG","setup","container","register","useFactory","c","cache","resolve","repository","config","options","maxAge","tokenRefreshMaxAge"],"sources":["../../../../src/app/modules/authentication/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Session } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport { SessionEntity } from '../../../adapters/database/domains/index.ts';\nimport type { IContainer } from 'eldin';\nimport { SessionManager } from '../../../core/index.ts';\nimport { CacheInjectionKey } from '../cache/index.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { AuthenticationInjectionKey } from './constants.ts';\nimport { SessionRepository } from './repositories/index.ts';\n\nexport class AuthenticationModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.AUTHENTICATION;\n this.dependencies = [ModuleName.DATABASE, ModuleName.CACHE, ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n container.register(AuthenticationInjectionKey.SessionRepository, {\n useFactory: (c) => {\n const cache = c.resolve(CacheInjectionKey);\n const repository = c.resolve<Repository<Session>>(SessionEntity);\n return new SessionRepository({\n cache,\n repository,\n });\n },\n });\n\n container.register(AuthenticationInjectionKey.SessionManager, {\n useFactory: (c) => {\n const config = c.resolve(ConfigInjectionKey);\n const repository = c.resolve(AuthenticationInjectionKey.SessionRepository);\n return new SessionManager({\n repository,\n options: { maxAge: config.tokenRefreshMaxAge + 3_600 },\n });\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,IAAaO,uBAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOJ,WAAWM;EACvB,KAAKD,eAAe;GAACL,WAAWO;GAAUP,WAAWQ;GAAOR,WAAWS;EAAO;CAClF;CAEA,MAAMC,MAAMC,WAAsC;EAC9CA,UAAUC,SAASX,2BAA2BC,mBAAmB,EAC7DW,aAAaC,MAAAA;GAGT,OAAO,IAAIZ,kBAAkB;IACzBa,OAHUD,EAAEE,QAAQlB,iBAGpBiB;IACAE,YAHeH,EAAEE,QAA6BpB,aAG9CqB;GACJ,CAAA;EACJ,EACJ,CAAA;EAEAN,UAAUC,SAASX,2BAA2BJ,gBAAgB,EAC1DgB,aAAaC,MAAAA;GACT,MAAMI,SAASJ,EAAEE,QAAQjB,kBAAAA;GAEzB,OAAO,IAAIF,eAAe;IACtBoB,YAFeH,EAAEE,QAAQf,2BAA2BC,iBAEpDe;IACAE,SAAS,EAAEC,QAAQF,OAAOG,qBAAqB,KAAM;GACzD,CAAA;EACJ,EACJ,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["SessionEntity","SessionManager","CacheInjectionKey","ConfigInjectionKey","ModuleName","AuthenticationInjectionKey","SessionRepository","AuthenticationModule","name","dependencies","AUTHENTICATION","DATABASE","CACHE","CONFIG","setup","container","register","useFactory","c","cache","resolve","repository","config","options","maxAge","tokenRefreshMaxAge"],"sources":["../../../../src/app/modules/authentication/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Session } from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport { SessionEntity } from '../../../adapters/database/domains/index.ts';\nimport type { IContainer } from 'eldin';\nimport { SessionManager } from '../../../core/index.ts';\nimport { CacheInjectionKey } from '../cache/index.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { AuthenticationInjectionKey } from './constants.ts';\nimport { SessionRepository } from './repositories/index.ts';\n\nexport class AuthenticationModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.AUTHENTICATION;\n this.dependencies = [ModuleName.DATABASE, ModuleName.CACHE, ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n container.register(AuthenticationInjectionKey.SessionRepository, {\n useFactory: (c) => {\n const cache = c.resolve(CacheInjectionKey);\n const repository = c.resolve<Repository<Session>>(SessionEntity);\n return new SessionRepository({\n cache,\n repository,\n });\n },\n });\n\n container.register(AuthenticationInjectionKey.SessionManager, {\n useFactory: (c) => {\n const config = c.resolve(ConfigInjectionKey);\n const repository = c.resolve(AuthenticationInjectionKey.SessionRepository);\n return new SessionManager({\n repository,\n options: { maxAge: config.tokenRefreshMaxAge + 3_600 },\n });\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,IAAaO,uBAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOJ,WAAWM;EACvB,KAAKD,eAAe;GAACL,WAAWO;GAAUP,WAAWQ;GAAOR,WAAWS;EAAO;CAClF;CAEA,MAAMC,MAAMC,WAAsC;EAC9CA,UAAUC,SAASX,2BAA2BC,mBAAmB,EAC7DW,aAAaC,MAAAA;GACT,MAAMC,QAAQD,EAAEE,QAAQlB,iBAAAA;GACxB,MAAMmB,aAAaH,EAAEE,QAA6BpB,aAAAA;GAClD,OAAO,IAAIM,kBAAkB;IACzBa;IACAE;GACJ,CAAA;EACJ,EACJ,CAAA;EAEAN,UAAUC,SAASX,2BAA2BJ,gBAAgB,EAC1DgB,aAAaC,MAAAA;GACT,MAAMI,SAASJ,EAAEE,QAAQjB,kBAAAA;GACzB,MAAMkB,aAAaH,EAAEE,QAAQf,2BAA2BC,iBAAiB;GACzE,OAAO,IAAIL,eAAe;IACtBoB;IACAE,SAAS,EAAEC,QAAQF,OAAOG,qBAAqB,KAAM;GACzD,CAAA;EACJ,EACJ,CAAA;CACJ;AACJ"}
@@ -1,7 +1,7 @@
1
1
  import "node:path";
2
2
  import "node:url";
3
3
  import.meta.url;
4
- import { applyQuery } from "../../database/repositories/query.mjs";
4
+ import { applyQuery, redactFieldConditions } from "../../database/repositories/query.mjs";
5
5
  import { applyRealmScopeSelect } from "../../database/repositories/helpers.mjs";
6
6
  import { AuthenticationCachePrefix } from "./constants.mjs";
7
7
  import { buildCacheKey } from "@authup/server-kit";
@@ -31,7 +31,7 @@ var SessionRepository = class {
31
31
  });
32
32
  const [entities, total] = await qb.getManyAndCount();
33
33
  return {
34
- data: entities,
34
+ data: redactFieldConditions(query, entities),
35
35
  meta: {
36
36
  total,
37
37
  ...pagination
@@ -1 +1 @@
1
- {"version":3,"file":"session.mjs","names":["buildCacheKey","applyQuery","applyRealmScopeSelect","AuthenticationCachePrefix","SessionRepository","cache","repository","ctx","findOneById","id","session","get","prefix","SESSION","key","findOneBy","findMany","query","options","qb","createQueryBuilder","pagination","owner","andWhere","ownerSub","sub","ownerSubKind","subKind","entities","total","getManyAndCount","data","meta","findAllByOwner","where","getMany","findAllByQuery","save","input","create","set","ttl","Date","expiresAt","getTime","now","remove","drop","removeById"],"sources":["../../../../../src/app/modules/authentication/repositories/session.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Session } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { EntityRepositoryFindManyResult, ICache } from '@authup/server-kit';\nimport { buildCacheKey } from '@authup/server-kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery } from '../../database/repositories/query.ts';\nimport type {\n ISessionRepository,\n SessionFindManyOptions,\n SessionOwner,\n} from '../../../../core/index.ts';\nimport { applyRealmScopeSelect } from '../../database/repositories/helpers.ts';\nimport { AuthenticationCachePrefix } from './constants.ts';\n\ntype SessionRepositoryContext = {\n repository: Repository<Session>,\n cache: ICache\n};\n\nexport class SessionRepository implements ISessionRepository {\n protected cache : ICache;\n\n protected repository : Repository<Session>;\n\n // -----------------------------------------------------\n\n constructor(ctx: SessionRepositoryContext) {\n this.cache = ctx.cache;\n this.repository = ctx.repository;\n }\n\n // -----------------------------------------------------\n\n async findOneById(id: string): Promise<Session | null> {\n const session = await this.cache.get<Session>(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: id, \n }),\n );\n\n if (session) {\n return session;\n }\n\n return this.repository.findOneBy({ id });\n }\n\n // -----------------------------------------------------\n\n async findMany(\n query: IQuery,\n options: SessionFindManyOptions = {},\n ): Promise<EntityRepositoryFindManyResult<Session>> {\n const qb = this.repository.createQueryBuilder('session');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'session', ['sub', 'subKind']);\n\n if (options.owner) {\n // mandatory constraint — not overridable by a rapiq filter\n qb.andWhere('session.sub = :ownerSub AND session.subKind = :ownerSubKind', {\n ownerSub: options.owner.sub,\n ownerSubKind: options.owner.subKind,\n });\n }\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findAllByOwner(owner: SessionOwner): Promise<Session[]> {\n return this.repository.createQueryBuilder('session')\n .where('session.sub = :sub AND session.subKind = :subKind', {\n sub: owner.sub,\n subKind: owner.subKind,\n })\n .getMany();\n }\n\n async findAllByQuery(query: IQuery): Promise<Session[]> {\n const qb = this.repository.createQueryBuilder('session');\n\n // NOTE: `parameters: ['filters']` — a bulk revoke must reach every\n // matching row. Applying the schema's `pagination.maxLimit` would\n // default the limit to that cap when the caller sends no page (rapiq\n // `finalizePagination`), silently truncating the delete.\n applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'session', ['sub', 'subKind']);\n\n return qb.getMany();\n }\n\n // -----------------------------------------------------\n\n async save(input: Partial<Session>): Promise<Session> {\n const session = this.repository.create(input);\n await this.repository.save(session);\n\n await this.cache.set(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: session.id, \n }),\n session,\n { ttl: new Date(session.expiresAt).getTime() - Date.now() },\n );\n\n return session;\n }\n\n // -----------------------------------------------------\n\n async remove(session: Session): Promise<void> {\n await this.repository.remove(session);\n await this.cache.drop(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: session.id, \n }),\n );\n }\n\n async removeById(id: string): Promise<void> {\n const session = await this.findOneById(id);\n\n if (session) {\n await this.remove(session);\n }\n }\n}\n"],"mappings":";;;;;;;;AA0BA,IAAaI,oBAAb,MAAaA;CACCC;CAEAC;CAIV,YAAYC,KAA+B;EACvC,KAAKF,QAAQE,IAAIF;EACjB,KAAKC,aAAaC,IAAID;CAC1B;CAIA,MAAME,YAAYC,IAAqC;EACnD,MAAMC,UAAU,MAAM,KAAKL,MAAMM,IAC7BX,cAAc;GACVY,QAAQT,0BAA0BU;GAClCC,KAAKL;EACT,CAAA,CAAA;EAGJ,IAAIC,SACA,OAAOA;EAGX,OAAO,KAAKJ,WAAWS,UAAU,EAAEN,GAAG,CAAA;CAC1C;CAIA,MAAMO,SACFC,OACAC,UAAkC,CAAC,GACa;EAChD,MAAMC,KAAK,KAAKb,WAAWc,mBAAmB,SAAA;EAE9C,MAAM,EAAEC,eAAepB,WAAWkB,IAAIF,KAAAA;EAEtCf,sBAAsBiB,IAAI,WAAW,CAAC,OAAO,SAAU,CAAA;EAEvD,IAAID,QAAQI,OAERH,GAAGI,SAAS,+DAA+D;GACvEC,UAAUN,QAAQI,MAAMG;GACxBC,cAAcR,QAAQI,MAAMK;EAChC,CAAA;EAGJ,MAAM,CAACC,UAAUC,SAAS,MAAMV,GAAGW,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;GACP;EACJ;CACJ;CAEA,MAAMY,eAAeX,OAAyC;EAC1D,OAAO,KAAKhB,WAAWc,mBAAmB,SAAA,CAAA,CACrCc,MAAM,qDAAqD;GACxDT,KAAKH,MAAMG;GACXE,SAASL,MAAMK;EACnB,CAAA,CAAA,CACCQ,QAAO;CAChB;CAEA,MAAMC,eAAenB,OAAmC;EACpD,MAAME,KAAK,KAAKb,WAAWc,mBAAmB,SAAA;EAM9CnB,WAAWkB,IAAIF,KAAAA;EAEff,sBAAsBiB,IAAI,WAAW,CAAC,OAAO,SAAU,CAAA;EAEvD,OAAOA,GAAGgB,QAAO;CACrB;CAIA,MAAME,KAAKC,OAA2C;EAClD,MAAM5B,UAAU,KAAKJ,WAAWiC,OAAOD,KAAAA;EACvC,MAAM,KAAKhC,WAAW+B,KAAK3B,OAAAA;EAE3B,MAAM,KAAKL,MAAMmC,IACbxC,cAAc;GACVY,QAAQT,0BAA0BU;GAClCC,KAAKJ,QAAQD;EACjB,CAAA,GACAC,SACA,EAAE+B,KAAK,IAAIC,KAAKhC,QAAQiC,SAAS,CAAA,CAAEC,QAAO,IAAKF,KAAKG,IAAG,EAAG,CAAA;EAG9D,OAAOnC;CACX;CAIA,MAAMoC,OAAOpC,SAAiC;EAC1C,MAAM,KAAKJ,WAAWwC,OAAOpC,OAAAA;EAC7B,MAAM,KAAKL,MAAM0C,KACb/C,cAAc;GACVY,QAAQT,0BAA0BU;GAClCC,KAAKJ,QAAQD;EACjB,CAAA,CAAA;CAER;CAEA,MAAMuC,WAAWvC,IAA2B;EACxC,MAAMC,UAAU,MAAM,KAAKF,YAAYC,EAAAA;EAEvC,IAAIC,SACA,MAAM,KAAKoC,OAAOpC,OAAAA;CAE1B;AACJ"}
1
+ {"version":3,"file":"session.mjs","names":["buildCacheKey","applyQuery","redactFieldConditions","applyRealmScopeSelect","AuthenticationCachePrefix","SessionRepository","cache","repository","ctx","findOneById","id","session","get","prefix","SESSION","key","findOneBy","findMany","query","options","qb","createQueryBuilder","pagination","owner","andWhere","ownerSub","sub","ownerSubKind","subKind","entities","total","getManyAndCount","data","meta","findAllByOwner","where","getMany","findAllByQuery","save","input","create","set","ttl","Date","expiresAt","getTime","now","remove","drop","removeById"],"sources":["../../../../../src/app/modules/authentication/repositories/session.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Session } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { EntityRepositoryFindManyResult, ICache } from '@authup/server-kit';\nimport { buildCacheKey } from '@authup/server-kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, redactFieldConditions } from '../../database/repositories/query.ts';\nimport type {\n ISessionRepository,\n SessionFindManyOptions,\n SessionOwner,\n} from '../../../../core/index.ts';\nimport { applyRealmScopeSelect } from '../../database/repositories/helpers.ts';\nimport { AuthenticationCachePrefix } from './constants.ts';\n\ntype SessionRepositoryContext = {\n repository: Repository<Session>,\n cache: ICache\n};\n\nexport class SessionRepository implements ISessionRepository {\n protected cache : ICache;\n\n protected repository : Repository<Session>;\n\n // -----------------------------------------------------\n\n constructor(ctx: SessionRepositoryContext) {\n this.cache = ctx.cache;\n this.repository = ctx.repository;\n }\n\n // -----------------------------------------------------\n\n async findOneById(id: string): Promise<Session | null> {\n const session = await this.cache.get<Session>(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: id, \n }),\n );\n\n if (session) {\n return session;\n }\n\n return this.repository.findOneBy({ id });\n }\n\n // -----------------------------------------------------\n\n async findMany(\n query: IQuery,\n options: SessionFindManyOptions = {},\n ): Promise<EntityRepositoryFindManyResult<Session>> {\n const qb = this.repository.createQueryBuilder('session');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'session', ['sub', 'subKind']);\n\n if (options.owner) {\n // mandatory constraint — not overridable by a rapiq filter\n qb.andWhere('session.sub = :ownerSub AND session.subKind = :ownerSubKind', {\n ownerSub: options.owner.sub,\n ownerSubKind: options.owner.subKind,\n });\n }\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: redactFieldConditions(query, entities),\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findAllByOwner(owner: SessionOwner): Promise<Session[]> {\n return this.repository.createQueryBuilder('session')\n .where('session.sub = :sub AND session.subKind = :subKind', {\n sub: owner.sub,\n subKind: owner.subKind,\n })\n .getMany();\n }\n\n async findAllByQuery(query: IQuery): Promise<Session[]> {\n const qb = this.repository.createQueryBuilder('session');\n\n // NOTE: `parameters: ['filters']` — a bulk revoke must reach every\n // matching row. Applying the schema's `pagination.maxLimit` would\n // default the limit to that cap when the caller sends no page (rapiq\n // `finalizePagination`), silently truncating the delete.\n applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'session', ['sub', 'subKind']);\n\n return qb.getMany();\n }\n\n // -----------------------------------------------------\n\n async save(input: Partial<Session>): Promise<Session> {\n const session = this.repository.create(input);\n await this.repository.save(session);\n\n await this.cache.set(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: session.id, \n }),\n session,\n { ttl: new Date(session.expiresAt).getTime() - Date.now() },\n );\n\n return session;\n }\n\n // -----------------------------------------------------\n\n async remove(session: Session): Promise<void> {\n await this.repository.remove(session);\n await this.cache.drop(\n buildCacheKey({\n prefix: AuthenticationCachePrefix.SESSION,\n key: session.id, \n }),\n );\n }\n\n async removeById(id: string): Promise<void> {\n const session = await this.findOneById(id);\n\n if (session) {\n await this.remove(session);\n }\n }\n}\n"],"mappings":";;;;;;;;AA0BA,IAAaK,oBAAb,MAAaA;CACCC;CAEAC;CAIV,YAAYC,KAA+B;EACvC,KAAKF,QAAQE,IAAIF;EACjB,KAAKC,aAAaC,IAAID;CAC1B;CAIA,MAAME,YAAYC,IAAqC;EACnD,MAAMC,UAAU,MAAM,KAAKL,MAAMM,IAC7BZ,cAAc;GACVa,QAAQT,0BAA0BU;GAClCC,KAAKL;EACT,CAAA,CAAA;EAGJ,IAAIC,SACA,OAAOA;EAGX,OAAO,KAAKJ,WAAWS,UAAU,EAAEN,GAAG,CAAA;CAC1C;CAIA,MAAMO,SACFC,OACAC,UAAkC,CAAC,GACa;EAChD,MAAMC,KAAK,KAAKb,WAAWc,mBAAmB,SAAA;EAE9C,MAAM,EAAEC,eAAerB,WAAWmB,IAAIF,KAAAA;EAEtCf,sBAAsBiB,IAAI,WAAW,CAAC,OAAO,SAAU,CAAA;EAEvD,IAAID,QAAQI,OAERH,GAAGI,SAAS,+DAA+D;GACvEC,UAAUN,QAAQI,MAAMG;GACxBC,cAAcR,QAAQI,MAAMK;EAChC,CAAA;EAGJ,MAAM,CAACC,UAAUC,SAAS,MAAMV,GAAGW,gBAAe;EAElD,OAAO;GACHC,MAAM9B,sBAAsBgB,OAAOW,QAAAA;GACnCI,MAAM;IACFH;IACA,GAAGR;GACP;EACJ;CACJ;CAEA,MAAMY,eAAeX,OAAyC;EAC1D,OAAO,KAAKhB,WAAWc,mBAAmB,SAAA,CAAA,CACrCc,MAAM,qDAAqD;GACxDT,KAAKH,MAAMG;GACXE,SAASL,MAAMK;EACnB,CAAA,CAAA,CACCQ,QAAO;CAChB;CAEA,MAAMC,eAAenB,OAAmC;EACpD,MAAME,KAAK,KAAKb,WAAWc,mBAAmB,SAAA;EAM9CpB,WAAWmB,IAAIF,KAAAA;EAEff,sBAAsBiB,IAAI,WAAW,CAAC,OAAO,SAAU,CAAA;EAEvD,OAAOA,GAAGgB,QAAO;CACrB;CAIA,MAAME,KAAKC,OAA2C;EAClD,MAAM5B,UAAU,KAAKJ,WAAWiC,OAAOD,KAAAA;EACvC,MAAM,KAAKhC,WAAW+B,KAAK3B,OAAAA;EAE3B,MAAM,KAAKL,MAAMmC,IACbzC,cAAc;GACVa,QAAQT,0BAA0BU;GAClCC,KAAKJ,QAAQD;EACjB,CAAA,GACAC,SACA,EAAE+B,KAAK,IAAIC,KAAKhC,QAAQiC,SAAS,CAAA,CAAEC,QAAO,IAAKF,KAAKG,IAAG,EAAG,CAAA;EAG9D,OAAOnC;CACX;CAIA,MAAMoC,OAAOpC,SAAiC;EAC1C,MAAM,KAAKJ,WAAWwC,OAAOpC,OAAAA;EAC7B,MAAM,KAAKL,MAAM0C,KACbhD,cAAc;GACVa,QAAQT,0BAA0BU;GAClCC,KAAKJ,QAAQD;EACjB,CAAA,CAAA;CAER;CAEA,MAAMuC,WAAWvC,IAA2B;EACxC,MAAMC,UAAU,MAAM,KAAKF,YAAYC,EAAAA;EAEvC,IAAIC,SACA,MAAM,KAAKoC,OAAOpC,OAAAA;CAE1B;AACJ"}
@@ -1,9 +1,12 @@
1
+ import type { Component } from '../../../components/index.ts';
1
2
  import type { IModule } from 'orkos';
2
3
  import type { IContainer } from 'eldin';
3
4
  export declare class ComponentsModule implements IModule {
4
5
  readonly name: string;
5
6
  readonly dependencies: string[];
7
+ protected components: Component[];
6
8
  constructor();
7
9
  setup(container: IContainer): Promise<void>;
10
+ teardown(container: IContainer): Promise<void>;
8
11
  }
9
12
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/components/module.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,gBAAiB,YAAW,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;;IAO1B,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA+BpD"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/components/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,gBAAiB,YAAW,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;;IAQ5B,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B3C,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBvD"}
@@ -4,7 +4,6 @@ import.meta.url;
4
4
  import { ModuleName } from "../constants.mjs";
5
5
  import { ConfigInjectionKey } from "../config/constants.mjs";
6
6
  import "../config/index.mjs";
7
- import { createDatabaseUniqueEntriesComponent } from "../../../components/database/unique-entries/factory.mjs";
8
7
  import { createEventCleanerComponent } from "../../../components/event-cleaner/module.mjs";
9
8
  import { createOAuth2CleanerComponent } from "../../../components/oauth2-cleaner/module.mjs";
10
9
  import "../../../components/index.mjs";
@@ -16,6 +15,7 @@ import "../database/index.mjs";
16
15
  var ComponentsModule = class {
17
16
  name;
18
17
  dependencies;
18
+ components;
19
19
  constructor() {
20
20
  this.name = ModuleName.COMPONENTS;
21
21
  this.dependencies = [
@@ -23,15 +23,17 @@ var ComponentsModule = class {
23
23
  ModuleName.LOGGER,
24
24
  ModuleName.DATABASE
25
25
  ];
26
+ this.components = [];
26
27
  }
27
28
  async setup(container) {
28
29
  const config = container.resolve(ConfigInjectionKey);
29
30
  const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
30
31
  const logger = container.resolve(LoggerInjectionKey);
31
- const components = [createOAuth2CleanerComponent(dataSource, logger), createDatabaseUniqueEntriesComponent(dataSource)];
32
+ const components = [createOAuth2CleanerComponent(dataSource, logger)];
32
33
  const securitySweep = config.eventLogRetentionDays > 0;
33
34
  const entitySweep = config.eventLogEntityEnabled && config.eventLogEntityRetentionDays > 0;
34
35
  if (config.eventLogEnabled && (securitySweep || entitySweep)) components.push(createEventCleanerComponent(dataSource, logger));
36
+ this.components = components;
35
37
  components.forEach((component) => {
36
38
  component.start().catch((e) => {
37
39
  logger.error("Starting a background component failed.");
@@ -39,6 +41,19 @@ var ComponentsModule = class {
39
41
  });
40
42
  });
41
43
  }
44
+ async teardown(container) {
45
+ const logger = container.tryResolve(LoggerInjectionKey);
46
+ const { components } = this;
47
+ this.components = [];
48
+ for (const component of components) try {
49
+ await component.stop();
50
+ } catch (e) {
51
+ if (logger.success) {
52
+ logger.data.warn("Stopping a background component failed.");
53
+ logger.data.warn(e);
54
+ }
55
+ }
56
+ }
42
57
  };
43
58
  //#endregion
44
59
  export { ComponentsModule };
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["createDatabaseUniqueEntriesComponent","createEventCleanerComponent","createOAuth2CleanerComponent","ConfigInjectionKey","DatabaseInjectionKey","LoggerInjectionKey","ModuleName","ComponentsModule","name","dependencies","COMPONENTS","CONFIG","LOGGER","DATABASE","setup","container","config","resolve","dataSource","DataSource","logger","components","securitySweep","eventLogRetentionDays","entitySweep","eventLogEntityEnabled","eventLogEntityRetentionDays","eventLogEnabled","push","forEach","component","start","catch","e","error"],"sources":["../../../../src/app/modules/components/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Component } from '../../../components/index.ts';\nimport {\n createDatabaseUniqueEntriesComponent,\n createEventCleanerComponent,\n createOAuth2CleanerComponent,\n} from '../../../components/index.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport { DatabaseInjectionKey } from '../database/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport type { IContainer } from 'eldin';\n\nexport class ComponentsModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.COMPONENTS;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER, ModuleName.DATABASE];\n }\n\n async setup(container: IContainer): Promise<void> {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const logger = container.resolve(LoggerInjectionKey);\n\n const components: Component[] = [\n createOAuth2CleanerComponent(dataSource, logger),\n createDatabaseUniqueEntriesComponent(dataSource),\n ];\n\n // The sweep only exists when rows are written AND at least one row\n // family carries an expiry — security events (eventLogRetentionDays)\n // and entity-CRUD events (eventLogEntityRetentionDays) are stamped\n // independently, so either non-zero retention needs the cleaner.\n const securitySweep = config.eventLogRetentionDays > 0;\n const entitySweep = config.eventLogEntityEnabled && config.eventLogEntityRetentionDays > 0;\n if (config.eventLogEnabled && (securitySweep || entitySweep)) {\n components.push(createEventCleanerComponent(dataSource, logger));\n }\n\n // start() is deliberately fire-and-forget, so a rejection must be\n // caught here — an unhandled rejection is fatal on modern node.\n components.forEach((component) => {\n component.start().catch((e) => {\n logger.error('Starting a background component failed.');\n logger.error(e);\n });\n });\n }\n\n // ----------------------------------------------------\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,IAAaO,mBAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOF,WAAWI;EACvB,KAAKD,eAAe;GAACH,WAAWK;GAAQL,WAAWM;GAAQN,WAAWO;EAAS;CACnF;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,QAAQd,kBAAAA;EACjC,MAAMe,aAAaH,UAAUE,QAAQb,qBAAqBe,UAAU;EACpE,MAAMC,SAASL,UAAUE,QAAQZ,kBAAAA;EAEjC,MAAMgB,aAA0B,CAC5BnB,6BAA6BgB,YAAYE,MAAAA,GACzCpB,qCAAqCkB,UAAAA,CACxC;EAMD,MAAMI,gBAAgBN,OAAOO,wBAAwB;EACrD,MAAMC,cAAcR,OAAOS,yBAAyBT,OAAOU,8BAA8B;EACzF,IAAIV,OAAOW,oBAAoBL,iBAAiBE,cAC5CH,WAAWO,KAAK3B,4BAA4BiB,YAAYE,MAAAA,CAAAA;EAK5DC,WAAWQ,SAASC,cAAAA;GAChBA,UAAUC,MAAK,CAAA,CAAGC,OAAOC,MAAAA;IACrBb,OAAOc,MAAM,yCAAA;IACbd,OAAOc,MAAMD,CAAAA;GACjB,CAAA;EACJ,CAAA;CACJ;AAGJ"}
1
+ {"version":3,"file":"module.mjs","names":["createEventCleanerComponent","createOAuth2CleanerComponent","ConfigInjectionKey","DatabaseInjectionKey","LoggerInjectionKey","ModuleName","ComponentsModule","name","dependencies","components","COMPONENTS","CONFIG","LOGGER","DATABASE","setup","container","config","resolve","dataSource","DataSource","logger","securitySweep","eventLogRetentionDays","entitySweep","eventLogEntityEnabled","eventLogEntityRetentionDays","eventLogEnabled","push","forEach","component","start","catch","e","error","teardown","tryResolve","stop","success","data","warn"],"sources":["../../../../src/app/modules/components/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Component } from '../../../components/index.ts';\nimport {\n createEventCleanerComponent,\n createOAuth2CleanerComponent,\n} from '../../../components/index.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport { DatabaseInjectionKey } from '../database/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport type { IContainer } from 'eldin';\n\nexport class ComponentsModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected components: Component[];\n\n constructor() {\n this.name = ModuleName.COMPONENTS;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER, ModuleName.DATABASE];\n this.components = [];\n }\n\n async setup(container: IContainer): Promise<void> {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const logger = container.resolve(LoggerInjectionKey);\n\n const components: Component[] = [\n createOAuth2CleanerComponent(dataSource, logger),\n ];\n\n // The sweep only exists when rows are written AND at least one row\n // family carries an expiry — security events (eventLogRetentionDays)\n // and entity-CRUD events (eventLogEntityRetentionDays) are stamped\n // independently, so either non-zero retention needs the cleaner.\n const securitySweep = config.eventLogRetentionDays > 0;\n const entitySweep = config.eventLogEntityEnabled && config.eventLogEntityRetentionDays > 0;\n if (config.eventLogEnabled && (securitySweep || entitySweep)) {\n components.push(createEventCleanerComponent(dataSource, logger));\n }\n\n this.components = components;\n\n // start() is deliberately fire-and-forget, so a rejection must be\n // caught here — an unhandled rejection is fatal on modern node.\n components.forEach((component) => {\n component.start().catch((e) => {\n logger.error('Starting a background component failed.');\n logger.error(e);\n });\n });\n }\n\n async teardown(container: IContainer): Promise<void> {\n const logger = container.tryResolve(LoggerInjectionKey);\n\n const { components } = this;\n this.components = [];\n\n for (const component of components) {\n try {\n await component.stop();\n } catch (e) {\n if (logger.success) {\n logger.data.warn('Stopping a background component failed.');\n logger.data.warn(e);\n }\n }\n }\n }\n\n // ----------------------------------------------------\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,IAAaM,mBAAb,MAAaA;CACAC;CAEAC;CAECC;CAEV,cAAc;EACV,KAAKF,OAAOF,WAAWK;EACvB,KAAKF,eAAe;GAACH,WAAWM;GAAQN,WAAWO;GAAQP,WAAWQ;EAAS;EAC/E,KAAKJ,aAAa,CAAA;CACtB;CAEA,MAAMK,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,QAAQf,kBAAAA;EACjC,MAAMgB,aAAaH,UAAUE,QAAQd,qBAAqBgB,UAAU;EACpE,MAAMC,SAASL,UAAUE,QAAQb,kBAAAA;EAEjC,MAAMK,aAA0B,CAC5BR,6BAA6BiB,YAAYE,MAAAA,CAC5C;EAMD,MAAMC,gBAAgBL,OAAOM,wBAAwB;EACrD,MAAMC,cAAcP,OAAOQ,yBAAyBR,OAAOS,8BAA8B;EACzF,IAAIT,OAAOU,oBAAoBL,iBAAiBE,cAC5Cd,WAAWkB,KAAK3B,4BAA4BkB,YAAYE,MAAAA,CAAAA;EAG5D,KAAKX,aAAaA;EAIlBA,WAAWmB,SAASC,cAAAA;GAChBA,UAAUC,MAAK,CAAA,CAAGC,OAAOC,MAAAA;IACrBZ,OAAOa,MAAM,yCAAA;IACbb,OAAOa,MAAMD,CAAAA;GACjB,CAAA;EACJ,CAAA;CACJ;CAEA,MAAME,SAASnB,WAAsC;EACjD,MAAMK,SAASL,UAAUoB,WAAW/B,kBAAAA;EAEpC,MAAM,EAAEK,eAAe;EACvB,KAAKA,aAAa,CAAA;EAElB,KAAK,MAAMoB,aAAapB,YACpB,IAAI;GACA,MAAMoB,UAAUO,KAAI;EACxB,SAASJ,GAAG;GACR,IAAIZ,OAAOiB,SAAS;IAChBjB,OAAOkB,KAAKC,KAAK,yCAAA;IACjBnB,OAAOkB,KAAKC,KAAKP,CAAAA;GACrB;EACJ;CAER;AAGJ"}
@@ -11,6 +11,7 @@ export declare enum ConfigEnvironmentVariableName {
11
11
  PUBLIC_URL = "PUBLIC_URL",
12
12
  MTLS_PUBLIC_URL = "MTLS_PUBLIC_URL",
13
13
  CERTIFICATE_SOURCE = "CERTIFICATE_SOURCE",
14
+ TRUST_PROXY = "TRUST_PROXY",
14
15
  TRUSTED_ORIGINS = "TRUSTED_ORIGINS",
15
16
  TOKEN_ACCESS_MAX_AGE = "TOKEN_ACCESS_MAX_AGE",
16
17
  TOKEN_REFRESH_MAX_AGE = "TOKEN_REFRESH_MAX_AGE",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,kBAAkB,oBAAmC,CAAC;AAEnE,oBAAY,6BAA6B;IACrC,QAAQ,aAAa;IACrB,uBAAuB,4BAA4B;IAEnD,KAAK,UAAU;IACf,IAAI,SAAS;IAEb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,eAAe,oBAAoB;IACnC,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,0BAA0B,+BAA+B;IACzD,oBAAoB,yBAAyB;IAC7C,6BAA6B,kCAAkC;IAC/D,oBAAoB,yBAAyB;IAC7C,0BAA0B,+BAA+B;IACzD,yBAAyB,8BAA8B;IACvD,mBAAmB,wBAAwB;IAE3C,iBAAiB,sBAAsB;IACvC,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,+BAA+B,oCAAoC;IACnE,8BAA8B,mCAAmC;IACjE,uBAAuB,4BAA4B;IACnD,oBAAoB,yBAAyB;IAE7C,sBAAsB,2BAA2B;IAEjD,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,qBAAqB,0BAA0B;IAC/C,kBAAkB,uBAAuB;IAEzC,iBAAiB,sBAAsB;IACvC,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;IAC7C,0BAA0B,+BAA+B;IAEzD,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,yBAAyB,8BAA8B;IAEvD,WAAW,gBAAgB;IAC3B,qCAAqC,0CAA0C;CAClF"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,kBAAkB,oBAAmC,CAAC;AAEnE,oBAAY,6BAA6B;IACrC,QAAQ,aAAa;IACrB,uBAAuB,4BAA4B;IAEnD,KAAK,UAAU;IACf,IAAI,SAAS;IAEb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,0BAA0B,+BAA+B;IACzD,oBAAoB,yBAAyB;IAC7C,6BAA6B,kCAAkC;IAC/D,oBAAoB,yBAAyB;IAC7C,0BAA0B,+BAA+B;IACzD,yBAAyB,8BAA8B;IACvD,mBAAmB,wBAAwB;IAE3C,iBAAiB,sBAAsB;IACvC,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,+BAA+B,oCAAoC;IACnE,8BAA8B,mCAAmC;IACjE,uBAAuB,4BAA4B;IACnD,oBAAoB,yBAAyB;IAE7C,sBAAsB,2BAA2B;IAEjD,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,qBAAqB,0BAA0B;IAC/C,kBAAkB,uBAAuB;IAEzC,iBAAiB,sBAAsB;IACvC,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;IAC7C,0BAA0B,+BAA+B;IAEzD,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,yBAAyB,8BAA8B;IAEvD,WAAW,gBAAgB;IAC3B,qCAAqC,0CAA0C;CAClF"}
@@ -14,6 +14,7 @@ var ConfigEnvironmentVariableName = /*#__PURE__*/ function(ConfigEnvironmentVari
14
14
  ConfigEnvironmentVariableName["PUBLIC_URL"] = "PUBLIC_URL";
15
15
  ConfigEnvironmentVariableName["MTLS_PUBLIC_URL"] = "MTLS_PUBLIC_URL";
16
16
  ConfigEnvironmentVariableName["CERTIFICATE_SOURCE"] = "CERTIFICATE_SOURCE";
17
+ ConfigEnvironmentVariableName["TRUST_PROXY"] = "TRUST_PROXY";
17
18
  ConfigEnvironmentVariableName["TRUSTED_ORIGINS"] = "TRUSTED_ORIGINS";
18
19
  ConfigEnvironmentVariableName["TOKEN_ACCESS_MAX_AGE"] = "TOKEN_ACCESS_MAX_AGE";
19
20
  ConfigEnvironmentVariableName["TOKEN_REFRESH_MAX_AGE"] = "TOKEN_REFRESH_MAX_AGE";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","names":["TypedToken","ConfigInjectionKey","ConfigEnvironmentVariableName"],"sources":["../../../../src/app/modules/config/constants.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 { TypedToken } from 'eldin';\nimport type { Config } from './types.ts';\n\nexport const ConfigInjectionKey = new TypedToken<Config>('Config');\n\nexport enum ConfigEnvironmentVariableName {\n NODE_ENV = 'NODE_ENV',\n WRITABLE_DIRECTORY_PATH = 'WRITABLE_DIRECTORY_PATH',\n\n REDIS = 'REDIS',\n SMTP = 'SMTP',\n\n HOST = 'HOST',\n PORT = 'PORT',\n PUBLIC_URL = 'PUBLIC_URL',\n MTLS_PUBLIC_URL = 'MTLS_PUBLIC_URL',\n CERTIFICATE_SOURCE = 'CERTIFICATE_SOURCE',\n TRUSTED_ORIGINS = 'TRUSTED_ORIGINS',\n TOKEN_ACCESS_MAX_AGE = 'TOKEN_ACCESS_MAX_AGE',\n TOKEN_REFRESH_MAX_AGE = 'TOKEN_REFRESH_MAX_AGE',\n TOKEN_REFRESH_GRACE_PERIOD = 'TOKEN_REFRESH_GRACE_PERIOD',\n PROMPT_LOGIN_MAX_AGE = 'PROMPT_LOGIN_MAX_AGE',\n END_SESSION_HINT_GRACE_PERIOD = 'END_SESSION_HINT_GRACE_PERIOD',\n REGISTRATION_ENABLED = 'REGISTRATION_ENABLED',\n EMAIL_VERIFICATION_ENABLED = 'EMAIL_VERIFICATION_ENABLED',\n PASSWORD_RECOVERY_ENABLED = 'PASSWORD_RECOVERY_ENABLED',\n PASSWORD_MIN_LENGTH = 'PASSWORD_MIN_LENGTH',\n\n EVENT_LOG_ENABLED = 'EVENT_LOG_ENABLED',\n EVENT_LOG_RETENTION_DAYS = 'EVENT_LOG_RETENTION_DAYS',\n EVENT_LOG_ENTITY_ENABLED = 'EVENT_LOG_ENTITY_ENABLED',\n EVENT_LOG_ENTITY_RETENTION_DAYS = 'EVENT_LOG_ENTITY_RETENTION_DAYS',\n LOGIN_ATTEMPT_THROTTLE_ENABLED = 'LOGIN_ATTEMPT_THROTTLE_ENABLED',\n LOGIN_ATTEMPT_THRESHOLD = 'LOGIN_ATTEMPT_THRESHOLD',\n LOGIN_ATTEMPT_WINDOW = 'LOGIN_ATTEMPT_WINDOW',\n\n SECRETS_ENCRYPTION_KEY = 'SECRETS_ENCRYPTION_KEY',\n\n MFA_ENABLED = 'MFA_ENABLED',\n MFA_REQUIRED = 'MFA_REQUIRED',\n MFA_FRESHNESS_MAX_AGE = 'MFA_FRESHNESS_MAX_AGE',\n MFA_TICKET_MAX_AGE = 'MFA_TICKET_MAX_AGE',\n\n CLIENT_AUTH_BASIC = 'CLIENT_AUTH_BASIC',\n CLIENT_SYSTEM_ENABLED = 'CLIENT_SYSTEM_ENABLED',\n CLIENT_SYSTEM_SECRET = 'CLIENT_SYSTEM_SECRET',\n CLIENT_SYSTEM_SECRET_RESET = 'CLIENT_SYSTEM_SECRET_RESET',\n\n USER_AUTH_BASIC = 'USER_AUTH_BASIC',\n USER_ADMIN_ENABLED = 'USER_ADMIN_ENABLED',\n USER_ADMIN_PASSWORD = 'USER_ADMIN_PASSWORD',\n USER_ADMIN_PASSWORD_RESET = 'USER_ADMIN_PASSWORD_RESET',\n\n PERMISSIONS = 'PERMISSIONS',\n PERMISSIONS_DEFAULT_POLICY_ASSIGNMENT = 'PERMISSIONS_DEFAULT_POLICY_ASSIGNMENT',\n}\n"],"mappings":";;;;;AAUA,MAAaC,qBAAqB,IAAID,WAAmB,QAAA;AAEzD,IAAO,gCAAKE,uBAAAA,+BAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAAA,OAAAA;AAkDX,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"constants.mjs","names":["TypedToken","ConfigInjectionKey","ConfigEnvironmentVariableName"],"sources":["../../../../src/app/modules/config/constants.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 { TypedToken } from 'eldin';\nimport type { Config } from './types.ts';\n\nexport const ConfigInjectionKey = new TypedToken<Config>('Config');\n\nexport enum ConfigEnvironmentVariableName {\n NODE_ENV = 'NODE_ENV',\n WRITABLE_DIRECTORY_PATH = 'WRITABLE_DIRECTORY_PATH',\n\n REDIS = 'REDIS',\n SMTP = 'SMTP',\n\n HOST = 'HOST',\n PORT = 'PORT',\n PUBLIC_URL = 'PUBLIC_URL',\n MTLS_PUBLIC_URL = 'MTLS_PUBLIC_URL',\n CERTIFICATE_SOURCE = 'CERTIFICATE_SOURCE',\n TRUST_PROXY = 'TRUST_PROXY',\n TRUSTED_ORIGINS = 'TRUSTED_ORIGINS',\n TOKEN_ACCESS_MAX_AGE = 'TOKEN_ACCESS_MAX_AGE',\n TOKEN_REFRESH_MAX_AGE = 'TOKEN_REFRESH_MAX_AGE',\n TOKEN_REFRESH_GRACE_PERIOD = 'TOKEN_REFRESH_GRACE_PERIOD',\n PROMPT_LOGIN_MAX_AGE = 'PROMPT_LOGIN_MAX_AGE',\n END_SESSION_HINT_GRACE_PERIOD = 'END_SESSION_HINT_GRACE_PERIOD',\n REGISTRATION_ENABLED = 'REGISTRATION_ENABLED',\n EMAIL_VERIFICATION_ENABLED = 'EMAIL_VERIFICATION_ENABLED',\n PASSWORD_RECOVERY_ENABLED = 'PASSWORD_RECOVERY_ENABLED',\n PASSWORD_MIN_LENGTH = 'PASSWORD_MIN_LENGTH',\n\n EVENT_LOG_ENABLED = 'EVENT_LOG_ENABLED',\n EVENT_LOG_RETENTION_DAYS = 'EVENT_LOG_RETENTION_DAYS',\n EVENT_LOG_ENTITY_ENABLED = 'EVENT_LOG_ENTITY_ENABLED',\n EVENT_LOG_ENTITY_RETENTION_DAYS = 'EVENT_LOG_ENTITY_RETENTION_DAYS',\n LOGIN_ATTEMPT_THROTTLE_ENABLED = 'LOGIN_ATTEMPT_THROTTLE_ENABLED',\n LOGIN_ATTEMPT_THRESHOLD = 'LOGIN_ATTEMPT_THRESHOLD',\n LOGIN_ATTEMPT_WINDOW = 'LOGIN_ATTEMPT_WINDOW',\n\n SECRETS_ENCRYPTION_KEY = 'SECRETS_ENCRYPTION_KEY',\n\n MFA_ENABLED = 'MFA_ENABLED',\n MFA_REQUIRED = 'MFA_REQUIRED',\n MFA_FRESHNESS_MAX_AGE = 'MFA_FRESHNESS_MAX_AGE',\n MFA_TICKET_MAX_AGE = 'MFA_TICKET_MAX_AGE',\n\n CLIENT_AUTH_BASIC = 'CLIENT_AUTH_BASIC',\n CLIENT_SYSTEM_ENABLED = 'CLIENT_SYSTEM_ENABLED',\n CLIENT_SYSTEM_SECRET = 'CLIENT_SYSTEM_SECRET',\n CLIENT_SYSTEM_SECRET_RESET = 'CLIENT_SYSTEM_SECRET_RESET',\n\n USER_AUTH_BASIC = 'USER_AUTH_BASIC',\n USER_ADMIN_ENABLED = 'USER_ADMIN_ENABLED',\n USER_ADMIN_PASSWORD = 'USER_ADMIN_PASSWORD',\n USER_ADMIN_PASSWORD_RESET = 'USER_ADMIN_PASSWORD_RESET',\n\n PERMISSIONS = 'PERMISSIONS',\n PERMISSIONS_DEFAULT_POLICY_ASSIGNMENT = 'PERMISSIONS_DEFAULT_POLICY_ASSIGNMENT',\n}\n"],"mappings":";;;;;AAUA,MAAaC,qBAAqB,IAAID,WAAmB,QAAA;AAEzD,IAAO,gCAAKE,uBAAAA,+BAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAAA,OAAAA;AAmDX,EAAA,CAAA,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { ConfigRawReadOptions } from './read/index.ts';
2
+ import type { Config } from './types.ts';
3
+ /**
4
+ * Read config from env (and optionally fs) and normalize it.
5
+ *
6
+ * @param options
7
+ */
8
+ export declare function readConfig(options?: ConfigRawReadOptions): Promise<Config>;
9
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/helpers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,oBAAyB,GAAI,OAAO,CAAC,MAAM,CAAC,CAOrF"}
@@ -0,0 +1,22 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { normalizeConfig } from "./normalize.mjs";
5
+ import { readConfigRaw } from "./read/module.mjs";
6
+ import "./read/index.mjs";
7
+ //#region src/app/modules/config/helpers.ts
8
+ /**
9
+ * Read config from env (and optionally fs) and normalize it.
10
+ *
11
+ * @param options
12
+ */ async function readConfig(options = {}) {
13
+ const raw = await readConfigRaw({
14
+ env: true,
15
+ ...options
16
+ });
17
+ return normalizeConfig(raw);
18
+ }
19
+ //#endregion
20
+ export { readConfig };
21
+
22
+ //# sourceMappingURL=helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.mjs","names":["normalizeConfig","readConfigRaw","readConfig","options","raw","env"],"sources":["../../../../src/app/modules/config/helpers.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 { normalizeConfig } from './normalize.ts';\nimport type { ConfigRawReadOptions } from './read/index.ts';\nimport { readConfigRaw } from './read/index.ts';\nimport type { Config } from './types.ts';\n\n/**\n * Read config from env (and optionally fs) and normalize it.\n *\n * @param options\n */\nexport async function readConfig(options: ConfigRawReadOptions = {}) : Promise<Config> {\n const raw = await readConfigRaw({\n env: true,\n ...options,\n });\n\n return normalizeConfig(raw);\n}\n"],"mappings":";;;;;;;;;;;GAiBA,eAAsBE,WAAWC,UAAgC,CAAC,GAAC;CAC/D,MAAMC,MAAM,MAAMH,cAAc;EAC5BI,KAAK;EACL,GAAGF;CACP,CAAA;CAEA,OAAOH,gBAAgBI,GAAAA;AAC3B"}
@@ -1,5 +1,7 @@
1
1
  export * from './constants.ts';
2
+ export * from './helpers.ts';
2
3
  export * from './module.ts';
3
4
  export * from './origins.ts';
5
+ export * from './read/index.ts';
4
6
  export * from './types.ts';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/index.ts"],"names":[],"mappings":"AAOA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/index.ts"],"names":[],"mappings":"AAOA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
@@ -3,5 +3,10 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { ConfigEnvironmentVariableName, ConfigInjectionKey } from "./constants.mjs";
5
5
  import { expandToOrigins, getAppOrigins } from "./origins.mjs";
6
+ import { readConfigRawFromEnv } from "./read/env.mjs";
7
+ import { readConfigRawFromFS } from "./read/fs.mjs";
8
+ import { readConfigRaw } from "./read/module.mjs";
9
+ import "./read/index.mjs";
10
+ import { readConfig } from "./helpers.mjs";
6
11
  import { ConfigModule } from "./module.mjs";
7
- export { ConfigEnvironmentVariableName, ConfigInjectionKey, ConfigModule, expandToOrigins, getAppOrigins };
12
+ export { ConfigEnvironmentVariableName, ConfigInjectionKey, ConfigModule, expandToOrigins, getAppOrigins, readConfig, readConfigRaw, readConfigRawFromEnv, readConfigRawFromFS };
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExD,qBAAa,YAAa,YAAW,OAAO;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,QAAQ,EAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;gBAI5C,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa;IAOrC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD;;;;OAIG;IACG,IAAI,CAAC,OAAO,GAAE,oBAAyB,GAAI,OAAO,CAAC,MAAM,CAAC;CAQnE"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/app/modules/config/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExD,qBAAa,YAAa,YAAW,OAAO;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,QAAQ,EAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;gBAI5C,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa;IAOrC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD;;;;OAIG;IACG,IAAI,CAAC,OAAO,GAAE,oBAAyB,GAAI,OAAO,CAAC,MAAM,CAAC;CAGnE"}
@@ -3,9 +3,7 @@ import "node:url";
3
3
  import.meta.url;
4
4
  import { ModuleName } from "../constants.mjs";
5
5
  import { ConfigInjectionKey } from "./constants.mjs";
6
- import { normalizeConfig } from "./normalize.mjs";
7
- import { readConfigRaw } from "./read/module.mjs";
8
- import "./read/index.mjs";
6
+ import { readConfig } from "./helpers.mjs";
9
7
  //#region src/app/modules/config/module.ts
10
8
  var ConfigModule = class {
11
9
  name;
@@ -26,10 +24,7 @@ var ConfigModule = class {
26
24
  *
27
25
  * @param options
28
26
  */ async read(options = {}) {
29
- return normalizeConfig(await readConfigRaw({
30
- env: true,
31
- ...options
32
- }));
27
+ return readConfig(options);
33
28
  }
34
29
  };
35
30
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["ModuleName","ConfigInjectionKey","normalizeConfig","readConfigRaw","ConfigModule","name","instance","config","CONFIG","setup","container","read","register","useValue","options","raw","env"],"sources":["../../../../src/app/modules/config/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { ConfigInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\nimport { normalizeConfig } from './normalize.ts';\nimport type { ConfigRawReadOptions } from './read/index.ts';\nimport { readConfigRaw } from './read/index.ts';\nimport type { Config, ConfigFactory } from './types.ts';\n\nexport class ConfigModule implements IModule {\n readonly name: string;\n\n protected instance : Config | ConfigFactory | undefined;\n\n // ----------------------------------------------------\n\n constructor(config?: Config | ConfigFactory) {\n this.name = ModuleName.CONFIG;\n this.instance = config;\n }\n\n // ----------------------------------------------------\n\n async setup(container: IContainer): Promise<void> {\n let instance : Config;\n if (typeof this.instance === 'function') {\n instance = await this.instance();\n } else if (this.instance) {\n instance = this.instance;\n } else {\n instance = await this.read();\n }\n\n container.register(ConfigInjectionKey, { useValue: instance });\n }\n\n // ----------------------------------------------------\n\n /**\n * Read config from env and fs.\n *\n * @param options\n */\n async read(options: ConfigRawReadOptions = {}) : Promise<Config> {\n const raw = await readConfigRaw({\n env: true,\n ...options,\n });\n\n return normalizeConfig(raw);\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAaI,eAAb,MAAaA;CACAC;CAECC;CAIV,YAAYC,QAAiC;EACzC,KAAKF,OAAOL,WAAWQ;EACvB,KAAKF,WAAWC;CACpB;CAIA,MAAME,MAAMC,WAAsC;EAC9C,IAAIJ;EACJ,IAAI,OAAO,KAAKA,aAAa,YACzBA,WAAW,MAAM,KAAKA,SAAQ;OAC3B,IAAI,KAAKA,UACZA,WAAW,KAAKA;OAEhBA,WAAW,MAAM,KAAKK,KAAI;EAG9BD,UAAUE,SAASX,oBAAoB,EAAEY,UAAUP,SAAS,CAAA;CAChE;;;;;IASA,MAAMK,KAAKG,UAAgC,CAAC,GAAqB;EAM7D,OAAOZ,gBAAgBa,MALLZ,cAAc;GAC5Ba,KAAK;GACL,GAAGF;EACP,CAAA,CAEuBC;CAC3B;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["ModuleName","ConfigInjectionKey","readConfig","ConfigModule","name","instance","config","CONFIG","setup","container","read","register","useValue","options"],"sources":["../../../../src/app/modules/config/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { ConfigInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\nimport { readConfig } from './helpers.ts';\nimport type { ConfigRawReadOptions } from './read/index.ts';\nimport type { Config, ConfigFactory } from './types.ts';\n\nexport class ConfigModule implements IModule {\n readonly name: string;\n\n protected instance : Config | ConfigFactory | undefined;\n\n // ----------------------------------------------------\n\n constructor(config?: Config | ConfigFactory) {\n this.name = ModuleName.CONFIG;\n this.instance = config;\n }\n\n // ----------------------------------------------------\n\n async setup(container: IContainer): Promise<void> {\n let instance : Config;\n if (typeof this.instance === 'function') {\n instance = await this.instance();\n } else if (this.instance) {\n instance = this.instance;\n } else {\n instance = await this.read();\n }\n\n container.register(ConfigInjectionKey, { useValue: instance });\n }\n\n // ----------------------------------------------------\n\n /**\n * Read config from env and fs.\n *\n * @param options\n */\n async read(options: ConfigRawReadOptions = {}) : Promise<Config> {\n return readConfig(options);\n }\n}\n"],"mappings":";;;;;;;AAeA,IAAaG,eAAb,MAAaA;CACAC;CAECC;CAIV,YAAYC,QAAiC;EACzC,KAAKF,OAAOJ,WAAWO;EACvB,KAAKF,WAAWC;CACpB;CAIA,MAAME,MAAMC,WAAsC;EAC9C,IAAIJ;EACJ,IAAI,OAAO,KAAKA,aAAa,YACzBA,WAAW,MAAM,KAAKA,SAAQ;OAC3B,IAAI,KAAKA,UACZA,WAAW,KAAKA;OAEhBA,WAAW,MAAM,KAAKK,KAAI;EAG9BD,UAAUE,SAASV,oBAAoB,EAAEW,UAAUP,SAAS,CAAA;CAChE;;;;;IASA,MAAMK,KAAKG,UAAgC,CAAC,GAAqB;EAC7D,OAAOX,WAAWW,OAAAA;CACtB;AACJ"}