webapp-factory 0.1.0

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 (574) hide show
  1. package/README.md +145 -0
  2. package/dist/access-control/adapters/in-memory-relations.d.ts +7 -0
  3. package/dist/access-control/adapters/in-memory-relations.d.ts.map +1 -0
  4. package/dist/access-control/adapters/in-memory-relations.js +6 -0
  5. package/dist/access-control/adapters/in-memory-relations.js.map +1 -0
  6. package/dist/access-control/core/enforcement.d.ts +13 -0
  7. package/dist/access-control/core/enforcement.d.ts.map +1 -0
  8. package/dist/access-control/core/enforcement.js +38 -0
  9. package/dist/access-control/core/enforcement.js.map +1 -0
  10. package/dist/access-control/core/errors.d.ts +30 -0
  11. package/dist/access-control/core/errors.d.ts.map +1 -0
  12. package/dist/access-control/core/errors.js +46 -0
  13. package/dist/access-control/core/errors.js.map +1 -0
  14. package/dist/access-control/core/pdp.d.ts +14 -0
  15. package/dist/access-control/core/pdp.d.ts.map +1 -0
  16. package/dist/access-control/core/pdp.js +79 -0
  17. package/dist/access-control/core/pdp.js.map +1 -0
  18. package/dist/access-control/core/ports.d.ts +68 -0
  19. package/dist/access-control/core/ports.d.ts.map +1 -0
  20. package/dist/access-control/core/ports.js +6 -0
  21. package/dist/access-control/core/ports.js.map +1 -0
  22. package/dist/access-control/core/rbac.d.ts +10 -0
  23. package/dist/access-control/core/rbac.d.ts.map +1 -0
  24. package/dist/access-control/core/rbac.js +78 -0
  25. package/dist/access-control/core/rbac.js.map +1 -0
  26. package/dist/access-control/core/rebac.d.ts +15 -0
  27. package/dist/access-control/core/rebac.d.ts.map +1 -0
  28. package/dist/access-control/core/rebac.js +48 -0
  29. package/dist/access-control/core/rebac.js.map +1 -0
  30. package/dist/access-control/index.d.ts +15 -0
  31. package/dist/access-control/index.d.ts.map +1 -0
  32. package/dist/access-control/index.js +20 -0
  33. package/dist/access-control/index.js.map +1 -0
  34. package/dist/access-control/nestjs/access-control.module.d.ts +34 -0
  35. package/dist/access-control/nestjs/access-control.module.d.ts.map +1 -0
  36. package/dist/access-control/nestjs/access-control.module.js +80 -0
  37. package/dist/access-control/nestjs/access-control.module.js.map +1 -0
  38. package/dist/audit/adapters/in-memory-store.d.ts +3 -0
  39. package/dist/audit/adapters/in-memory-store.d.ts.map +1 -0
  40. package/dist/audit/adapters/in-memory-store.js +66 -0
  41. package/dist/audit/adapters/in-memory-store.js.map +1 -0
  42. package/dist/audit/adapters/pg-store.d.ts +22 -0
  43. package/dist/audit/adapters/pg-store.d.ts.map +1 -0
  44. package/dist/audit/adapters/pg-store.js +119 -0
  45. package/dist/audit/adapters/pg-store.js.map +1 -0
  46. package/dist/audit/core/audit-log.d.ts +41 -0
  47. package/dist/audit/core/audit-log.d.ts.map +1 -0
  48. package/dist/audit/core/audit-log.js +78 -0
  49. package/dist/audit/core/audit-log.js.map +1 -0
  50. package/dist/audit/core/errors.d.ts +22 -0
  51. package/dist/audit/core/errors.d.ts.map +1 -0
  52. package/dist/audit/core/errors.js +35 -0
  53. package/dist/audit/core/errors.js.map +1 -0
  54. package/dist/audit/core/hash.d.ts +9 -0
  55. package/dist/audit/core/hash.d.ts.map +1 -0
  56. package/dist/audit/core/hash.js +45 -0
  57. package/dist/audit/core/hash.js.map +1 -0
  58. package/dist/audit/core/ports.d.ts +68 -0
  59. package/dist/audit/core/ports.d.ts.map +1 -0
  60. package/dist/audit/core/ports.js +6 -0
  61. package/dist/audit/core/ports.js.map +1 -0
  62. package/dist/audit/index.d.ts +13 -0
  63. package/dist/audit/index.d.ts.map +1 -0
  64. package/dist/audit/index.js +16 -0
  65. package/dist/audit/index.js.map +1 -0
  66. package/dist/auth/adapters/argon2id-hasher.d.ts +15 -0
  67. package/dist/auth/adapters/argon2id-hasher.d.ts.map +1 -0
  68. package/dist/auth/adapters/argon2id-hasher.js +61 -0
  69. package/dist/auth/adapters/argon2id-hasher.js.map +1 -0
  70. package/dist/auth/adapters/in-memory-stores.d.ts +14 -0
  71. package/dist/auth/adapters/in-memory-stores.d.ts.map +1 -0
  72. package/dist/auth/adapters/in-memory-stores.js +78 -0
  73. package/dist/auth/adapters/in-memory-stores.js.map +1 -0
  74. package/dist/auth/core/auth-service.d.ts +40 -0
  75. package/dist/auth/core/auth-service.d.ts.map +1 -0
  76. package/dist/auth/core/auth-service.js +106 -0
  77. package/dist/auth/core/auth-service.js.map +1 -0
  78. package/dist/auth/core/credentials.d.ts +15 -0
  79. package/dist/auth/core/credentials.d.ts.map +1 -0
  80. package/dist/auth/core/credentials.js +15 -0
  81. package/dist/auth/core/credentials.js.map +1 -0
  82. package/dist/auth/core/crypto-util.d.ts +7 -0
  83. package/dist/auth/core/crypto-util.d.ts.map +1 -0
  84. package/dist/auth/core/crypto-util.js +15 -0
  85. package/dist/auth/core/crypto-util.js.map +1 -0
  86. package/dist/auth/core/errors.d.ts +33 -0
  87. package/dist/auth/core/errors.d.ts.map +1 -0
  88. package/dist/auth/core/errors.js +48 -0
  89. package/dist/auth/core/errors.js.map +1 -0
  90. package/dist/auth/core/jwt.d.ts +5 -0
  91. package/dist/auth/core/jwt.d.ts.map +1 -0
  92. package/dist/auth/core/jwt.js +40 -0
  93. package/dist/auth/core/jwt.js.map +1 -0
  94. package/dist/auth/core/ports.d.ts +95 -0
  95. package/dist/auth/core/ports.d.ts.map +1 -0
  96. package/dist/auth/core/ports.js +7 -0
  97. package/dist/auth/core/ports.js.map +1 -0
  98. package/dist/auth/core/single-use.d.ts +10 -0
  99. package/dist/auth/core/single-use.d.ts.map +1 -0
  100. package/dist/auth/core/single-use.js +47 -0
  101. package/dist/auth/core/single-use.js.map +1 -0
  102. package/dist/auth/core/tokens.d.ts +14 -0
  103. package/dist/auth/core/tokens.d.ts.map +1 -0
  104. package/dist/auth/core/tokens.js +85 -0
  105. package/dist/auth/core/tokens.js.map +1 -0
  106. package/dist/auth/index.d.ts +18 -0
  107. package/dist/auth/index.d.ts.map +1 -0
  108. package/dist/auth/index.js +22 -0
  109. package/dist/auth/index.js.map +1 -0
  110. package/dist/auth/nestjs/auth.module.d.ts +17 -0
  111. package/dist/auth/nestjs/auth.module.d.ts.map +1 -0
  112. package/dist/auth/nestjs/auth.module.js +18 -0
  113. package/dist/auth/nestjs/auth.module.js.map +1 -0
  114. package/dist/cache/adapters/in-memory-store.d.ts +6 -0
  115. package/dist/cache/adapters/in-memory-store.d.ts.map +1 -0
  116. package/dist/cache/adapters/in-memory-store.js +65 -0
  117. package/dist/cache/adapters/in-memory-store.js.map +1 -0
  118. package/dist/cache/adapters/redis-store.d.ts +32 -0
  119. package/dist/cache/adapters/redis-store.d.ts.map +1 -0
  120. package/dist/cache/adapters/redis-store.js +59 -0
  121. package/dist/cache/adapters/redis-store.js.map +1 -0
  122. package/dist/cache/core/cache.d.ts +31 -0
  123. package/dist/cache/core/cache.d.ts.map +1 -0
  124. package/dist/cache/core/cache.js +89 -0
  125. package/dist/cache/core/cache.js.map +1 -0
  126. package/dist/cache/core/errors.d.ts +17 -0
  127. package/dist/cache/core/errors.d.ts.map +1 -0
  128. package/dist/cache/core/errors.js +27 -0
  129. package/dist/cache/core/errors.js.map +1 -0
  130. package/dist/cache/core/lock.d.ts +21 -0
  131. package/dist/cache/core/lock.d.ts.map +1 -0
  132. package/dist/cache/core/lock.js +47 -0
  133. package/dist/cache/core/lock.js.map +1 -0
  134. package/dist/cache/core/ports.d.ts +33 -0
  135. package/dist/cache/core/ports.d.ts.map +1 -0
  136. package/dist/cache/core/ports.js +6 -0
  137. package/dist/cache/core/ports.js.map +1 -0
  138. package/dist/cache/core/pubsub.d.ts +14 -0
  139. package/dist/cache/core/pubsub.d.ts.map +1 -0
  140. package/dist/cache/core/pubsub.js +13 -0
  141. package/dist/cache/core/pubsub.js.map +1 -0
  142. package/dist/cache/core/serializer.d.ts +4 -0
  143. package/dist/cache/core/serializer.d.ts.map +1 -0
  144. package/dist/cache/core/serializer.js +6 -0
  145. package/dist/cache/core/serializer.js.map +1 -0
  146. package/dist/cache/index.d.ts +14 -0
  147. package/dist/cache/index.d.ts.map +1 -0
  148. package/dist/cache/index.js +19 -0
  149. package/dist/cache/index.js.map +1 -0
  150. package/dist/config/adapters/reporters.d.ts +17 -0
  151. package/dist/config/adapters/reporters.d.ts.map +1 -0
  152. package/dist/config/adapters/reporters.js +35 -0
  153. package/dist/config/adapters/reporters.js.map +1 -0
  154. package/dist/config/adapters/secret-resolvers.d.ts +21 -0
  155. package/dist/config/adapters/secret-resolvers.d.ts.map +1 -0
  156. package/dist/config/adapters/secret-resolvers.js +60 -0
  157. package/dist/config/adapters/secret-resolvers.js.map +1 -0
  158. package/dist/config/adapters/zod-schema.d.ts +20 -0
  159. package/dist/config/adapters/zod-schema.d.ts.map +1 -0
  160. package/dist/config/adapters/zod-schema.js +35 -0
  161. package/dist/config/adapters/zod-schema.js.map +1 -0
  162. package/dist/config/core/env-loader.d.ts +47 -0
  163. package/dist/config/core/env-loader.d.ts.map +1 -0
  164. package/dist/config/core/env-loader.js +155 -0
  165. package/dist/config/core/env-loader.js.map +1 -0
  166. package/dist/config/core/errors.d.ts +34 -0
  167. package/dist/config/core/errors.d.ts.map +1 -0
  168. package/dist/config/core/errors.js +49 -0
  169. package/dist/config/core/errors.js.map +1 -0
  170. package/dist/config/core/freeze.d.ts +7 -0
  171. package/dist/config/core/freeze.d.ts.map +1 -0
  172. package/dist/config/core/freeze.js +20 -0
  173. package/dist/config/core/freeze.js.map +1 -0
  174. package/dist/config/core/load-config.d.ts +43 -0
  175. package/dist/config/core/load-config.d.ts.map +1 -0
  176. package/dist/config/core/load-config.js +74 -0
  177. package/dist/config/core/load-config.js.map +1 -0
  178. package/dist/config/core/merge.d.ts +19 -0
  179. package/dist/config/core/merge.d.ts.map +1 -0
  180. package/dist/config/core/merge.js +31 -0
  181. package/dist/config/core/merge.js.map +1 -0
  182. package/dist/config/core/ports.d.ts +58 -0
  183. package/dist/config/core/ports.d.ts.map +1 -0
  184. package/dist/config/core/ports.js +2 -0
  185. package/dist/config/core/ports.js.map +1 -0
  186. package/dist/config/core/secret-resolver.d.ts +16 -0
  187. package/dist/config/core/secret-resolver.d.ts.map +1 -0
  188. package/dist/config/core/secret-resolver.js +73 -0
  189. package/dist/config/core/secret-resolver.js.map +1 -0
  190. package/dist/config/core/secret.d.ts +21 -0
  191. package/dist/config/core/secret.d.ts.map +1 -0
  192. package/dist/config/core/secret.js +40 -0
  193. package/dist/config/core/secret.js.map +1 -0
  194. package/dist/config/index.d.ts +16 -0
  195. package/dist/config/index.d.ts.map +1 -0
  196. package/dist/config/index.js +23 -0
  197. package/dist/config/index.js.map +1 -0
  198. package/dist/config/nestjs/config-kit.module.d.ts +37 -0
  199. package/dist/config/nestjs/config-kit.module.d.ts.map +1 -0
  200. package/dist/config/nestjs/config-kit.module.js +24 -0
  201. package/dist/config/nestjs/config-kit.module.js.map +1 -0
  202. package/dist/http/adapters/zod-schema.d.ts +11 -0
  203. package/dist/http/adapters/zod-schema.d.ts.map +1 -0
  204. package/dist/http/adapters/zod-schema.js +74 -0
  205. package/dist/http/adapters/zod-schema.js.map +1 -0
  206. package/dist/http/core/context.d.ts +25 -0
  207. package/dist/http/core/context.d.ts.map +1 -0
  208. package/dist/http/core/context.js +60 -0
  209. package/dist/http/core/context.js.map +1 -0
  210. package/dist/http/core/errors.d.ts +41 -0
  211. package/dist/http/core/errors.d.ts.map +1 -0
  212. package/dist/http/core/errors.js +99 -0
  213. package/dist/http/core/errors.js.map +1 -0
  214. package/dist/http/core/kernel.d.ts +54 -0
  215. package/dist/http/core/kernel.d.ts.map +1 -0
  216. package/dist/http/core/kernel.js +122 -0
  217. package/dist/http/core/kernel.js.map +1 -0
  218. package/dist/http/core/openapi.d.ts +37 -0
  219. package/dist/http/core/openapi.d.ts.map +1 -0
  220. package/dist/http/core/openapi.js +99 -0
  221. package/dist/http/core/openapi.js.map +1 -0
  222. package/dist/http/core/pagination.d.ts +17 -0
  223. package/dist/http/core/pagination.d.ts.map +1 -0
  224. package/dist/http/core/pagination.js +108 -0
  225. package/dist/http/core/pagination.js.map +1 -0
  226. package/dist/http/core/ports.d.ts +106 -0
  227. package/dist/http/core/ports.d.ts.map +1 -0
  228. package/dist/http/core/ports.js +6 -0
  229. package/dist/http/core/ports.js.map +1 -0
  230. package/dist/http/core/redaction.d.ts +8 -0
  231. package/dist/http/core/redaction.d.ts.map +1 -0
  232. package/dist/http/core/redaction.js +45 -0
  233. package/dist/http/core/redaction.js.map +1 -0
  234. package/dist/http/core/router.d.ts +37 -0
  235. package/dist/http/core/router.d.ts.map +1 -0
  236. package/dist/http/core/router.js +120 -0
  237. package/dist/http/core/router.js.map +1 -0
  238. package/dist/http/core/security.d.ts +43 -0
  239. package/dist/http/core/security.d.ts.map +1 -0
  240. package/dist/http/core/security.js +66 -0
  241. package/dist/http/core/security.js.map +1 -0
  242. package/dist/http/core/validation.d.ts +9 -0
  243. package/dist/http/core/validation.d.ts.map +1 -0
  244. package/dist/http/core/validation.js +36 -0
  245. package/dist/http/core/validation.js.map +1 -0
  246. package/dist/http/index.d.ts +20 -0
  247. package/dist/http/index.d.ts.map +1 -0
  248. package/dist/http/index.js +29 -0
  249. package/dist/http/index.js.map +1 -0
  250. package/dist/http/nestjs/http-kernel.module.d.ts +37 -0
  251. package/dist/http/nestjs/http-kernel.module.d.ts.map +1 -0
  252. package/dist/http/nestjs/http-kernel.module.js +77 -0
  253. package/dist/http/nestjs/http-kernel.module.js.map +1 -0
  254. package/dist/http/nodejs/http-adapter.d.ts +11 -0
  255. package/dist/http/nodejs/http-adapter.d.ts.map +1 -0
  256. package/dist/http/nodejs/http-adapter.js +60 -0
  257. package/dist/http/nodejs/http-adapter.js.map +1 -0
  258. package/dist/i18n/core/catalog.d.ts +23 -0
  259. package/dist/i18n/core/catalog.d.ts.map +1 -0
  260. package/dist/i18n/core/catalog.js +31 -0
  261. package/dist/i18n/core/catalog.js.map +1 -0
  262. package/dist/i18n/core/errors.d.ts +14 -0
  263. package/dist/i18n/core/errors.d.ts.map +1 -0
  264. package/dist/i18n/core/errors.js +22 -0
  265. package/dist/i18n/core/errors.js.map +1 -0
  266. package/dist/i18n/core/i18n.d.ts +20 -0
  267. package/dist/i18n/core/i18n.d.ts.map +1 -0
  268. package/dist/i18n/core/i18n.js +48 -0
  269. package/dist/i18n/core/i18n.js.map +1 -0
  270. package/dist/i18n/core/message.d.ts +8 -0
  271. package/dist/i18n/core/message.d.ts.map +1 -0
  272. package/dist/i18n/core/message.js +38 -0
  273. package/dist/i18n/core/message.js.map +1 -0
  274. package/dist/i18n/core/negotiate.d.ts +13 -0
  275. package/dist/i18n/core/negotiate.d.ts.map +1 -0
  276. package/dist/i18n/core/negotiate.js +46 -0
  277. package/dist/i18n/core/negotiate.js.map +1 -0
  278. package/dist/i18n/core/ports.d.ts +35 -0
  279. package/dist/i18n/core/ports.d.ts.map +1 -0
  280. package/dist/i18n/core/ports.js +6 -0
  281. package/dist/i18n/core/ports.js.map +1 -0
  282. package/dist/i18n/index.d.ts +14 -0
  283. package/dist/i18n/index.d.ts.map +1 -0
  284. package/dist/i18n/index.js +18 -0
  285. package/dist/i18n/index.js.map +1 -0
  286. package/dist/i18n/nestjs/i18n.module.d.ts +16 -0
  287. package/dist/i18n/nestjs/i18n.module.d.ts.map +1 -0
  288. package/dist/i18n/nestjs/i18n.module.js +17 -0
  289. package/dist/i18n/nestjs/i18n.module.js.map +1 -0
  290. package/dist/index.d.ts +31 -0
  291. package/dist/index.d.ts.map +1 -0
  292. package/dist/index.js +31 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/jobs/adapters/in-memory-idempotency.d.ts +9 -0
  295. package/dist/jobs/adapters/in-memory-idempotency.d.ts.map +1 -0
  296. package/dist/jobs/adapters/in-memory-idempotency.js +34 -0
  297. package/dist/jobs/adapters/in-memory-idempotency.js.map +1 -0
  298. package/dist/jobs/adapters/in-memory-queue-store.d.ts +7 -0
  299. package/dist/jobs/adapters/in-memory-queue-store.d.ts.map +1 -0
  300. package/dist/jobs/adapters/in-memory-queue-store.js +70 -0
  301. package/dist/jobs/adapters/in-memory-queue-store.js.map +1 -0
  302. package/dist/jobs/adapters/redis-queue-store.d.ts +28 -0
  303. package/dist/jobs/adapters/redis-queue-store.d.ts.map +1 -0
  304. package/dist/jobs/adapters/redis-queue-store.js +86 -0
  305. package/dist/jobs/adapters/redis-queue-store.js.map +1 -0
  306. package/dist/jobs/core/backoff.d.ts +15 -0
  307. package/dist/jobs/core/backoff.d.ts.map +1 -0
  308. package/dist/jobs/core/backoff.js +20 -0
  309. package/dist/jobs/core/backoff.js.map +1 -0
  310. package/dist/jobs/core/cron.d.ts +13 -0
  311. package/dist/jobs/core/cron.d.ts.map +1 -0
  312. package/dist/jobs/core/cron.js +101 -0
  313. package/dist/jobs/core/cron.js.map +1 -0
  314. package/dist/jobs/core/errors.d.ts +18 -0
  315. package/dist/jobs/core/errors.d.ts.map +1 -0
  316. package/dist/jobs/core/errors.js +30 -0
  317. package/dist/jobs/core/errors.js.map +1 -0
  318. package/dist/jobs/core/ports.d.ts +80 -0
  319. package/dist/jobs/core/ports.d.ts.map +1 -0
  320. package/dist/jobs/core/ports.js +6 -0
  321. package/dist/jobs/core/ports.js.map +1 -0
  322. package/dist/jobs/core/queue.d.ts +16 -0
  323. package/dist/jobs/core/queue.d.ts.map +1 -0
  324. package/dist/jobs/core/queue.js +29 -0
  325. package/dist/jobs/core/queue.js.map +1 -0
  326. package/dist/jobs/core/registry.d.ts +4 -0
  327. package/dist/jobs/core/registry.d.ts.map +1 -0
  328. package/dist/jobs/core/registry.js +11 -0
  329. package/dist/jobs/core/registry.js.map +1 -0
  330. package/dist/jobs/core/scheduler.d.ts +30 -0
  331. package/dist/jobs/core/scheduler.d.ts.map +1 -0
  332. package/dist/jobs/core/scheduler.js +53 -0
  333. package/dist/jobs/core/scheduler.js.map +1 -0
  334. package/dist/jobs/core/serializer.d.ts +3 -0
  335. package/dist/jobs/core/serializer.d.ts.map +1 -0
  336. package/dist/jobs/core/serializer.js +5 -0
  337. package/dist/jobs/core/serializer.js.map +1 -0
  338. package/dist/jobs/core/worker.d.ts +28 -0
  339. package/dist/jobs/core/worker.d.ts.map +1 -0
  340. package/dist/jobs/core/worker.js +118 -0
  341. package/dist/jobs/core/worker.js.map +1 -0
  342. package/dist/jobs/index.d.ts +18 -0
  343. package/dist/jobs/index.d.ts.map +1 -0
  344. package/dist/jobs/index.js +23 -0
  345. package/dist/jobs/index.js.map +1 -0
  346. package/dist/mailer/adapters/dev-inbox.d.ts +17 -0
  347. package/dist/mailer/adapters/dev-inbox.d.ts.map +1 -0
  348. package/dist/mailer/adapters/dev-inbox.js +29 -0
  349. package/dist/mailer/adapters/dev-inbox.js.map +1 -0
  350. package/dist/mailer/adapters/i18n-renderer.d.ts +13 -0
  351. package/dist/mailer/adapters/i18n-renderer.d.ts.map +1 -0
  352. package/dist/mailer/adapters/i18n-renderer.js +27 -0
  353. package/dist/mailer/adapters/i18n-renderer.js.map +1 -0
  354. package/dist/mailer/adapters/in-memory-templates.d.ts +6 -0
  355. package/dist/mailer/adapters/in-memory-templates.d.ts.map +1 -0
  356. package/dist/mailer/adapters/in-memory-templates.js +6 -0
  357. package/dist/mailer/adapters/in-memory-templates.js.map +1 -0
  358. package/dist/mailer/adapters/transports.d.ts +19 -0
  359. package/dist/mailer/adapters/transports.d.ts.map +1 -0
  360. package/dist/mailer/adapters/transports.js +38 -0
  361. package/dist/mailer/adapters/transports.js.map +1 -0
  362. package/dist/mailer/core/errors.d.ts +23 -0
  363. package/dist/mailer/core/errors.d.ts.map +1 -0
  364. package/dist/mailer/core/errors.js +40 -0
  365. package/dist/mailer/core/errors.js.map +1 -0
  366. package/dist/mailer/core/failover.d.ts +3 -0
  367. package/dist/mailer/core/failover.d.ts.map +1 -0
  368. package/dist/mailer/core/failover.js +30 -0
  369. package/dist/mailer/core/failover.js.map +1 -0
  370. package/dist/mailer/core/mailer.d.ts +25 -0
  371. package/dist/mailer/core/mailer.d.ts.map +1 -0
  372. package/dist/mailer/core/mailer.js +61 -0
  373. package/dist/mailer/core/mailer.js.map +1 -0
  374. package/dist/mailer/core/ports.d.ts +54 -0
  375. package/dist/mailer/core/ports.d.ts.map +1 -0
  376. package/dist/mailer/core/ports.js +6 -0
  377. package/dist/mailer/core/ports.js.map +1 -0
  378. package/dist/mailer/core/render.d.ts +4 -0
  379. package/dist/mailer/core/render.d.ts.map +1 -0
  380. package/dist/mailer/core/render.js +29 -0
  381. package/dist/mailer/core/render.js.map +1 -0
  382. package/dist/mailer/index.d.ts +17 -0
  383. package/dist/mailer/index.d.ts.map +1 -0
  384. package/dist/mailer/index.js +21 -0
  385. package/dist/mailer/index.js.map +1 -0
  386. package/dist/mailer/nestjs/mailer.module.d.ts +17 -0
  387. package/dist/mailer/nestjs/mailer.module.d.ts.map +1 -0
  388. package/dist/mailer/nestjs/mailer.module.js +15 -0
  389. package/dist/mailer/nestjs/mailer.module.js.map +1 -0
  390. package/dist/observability/core/context.d.ts +9 -0
  391. package/dist/observability/core/context.d.ts.map +1 -0
  392. package/dist/observability/core/context.js +15 -0
  393. package/dist/observability/core/context.js.map +1 -0
  394. package/dist/observability/core/health.d.ts +40 -0
  395. package/dist/observability/core/health.d.ts.map +1 -0
  396. package/dist/observability/core/health.js +51 -0
  397. package/dist/observability/core/health.js.map +1 -0
  398. package/dist/observability/core/logger.d.ts +22 -0
  399. package/dist/observability/core/logger.d.ts.map +1 -0
  400. package/dist/observability/core/logger.js +45 -0
  401. package/dist/observability/core/logger.js.map +1 -0
  402. package/dist/observability/core/metrics.d.ts +63 -0
  403. package/dist/observability/core/metrics.d.ts.map +1 -0
  404. package/dist/observability/core/metrics.js +172 -0
  405. package/dist/observability/core/metrics.js.map +1 -0
  406. package/dist/observability/core/redaction.d.ts +10 -0
  407. package/dist/observability/core/redaction.d.ts.map +1 -0
  408. package/dist/observability/core/redaction.js +48 -0
  409. package/dist/observability/core/redaction.js.map +1 -0
  410. package/dist/observability/core/tracing.d.ts +52 -0
  411. package/dist/observability/core/tracing.d.ts.map +1 -0
  412. package/dist/observability/core/tracing.js +88 -0
  413. package/dist/observability/core/tracing.js.map +1 -0
  414. package/dist/observability/index.d.ts +14 -0
  415. package/dist/observability/index.d.ts.map +1 -0
  416. package/dist/observability/index.js +19 -0
  417. package/dist/observability/index.js.map +1 -0
  418. package/dist/observability/nestjs/observability.module.d.ts +35 -0
  419. package/dist/observability/nestjs/observability.module.d.ts.map +1 -0
  420. package/dist/observability/nestjs/observability.module.js +87 -0
  421. package/dist/observability/nestjs/observability.module.js.map +1 -0
  422. package/dist/persistence/adapters/in-memory-driver.d.ts +18 -0
  423. package/dist/persistence/adapters/in-memory-driver.d.ts.map +1 -0
  424. package/dist/persistence/adapters/in-memory-driver.js +229 -0
  425. package/dist/persistence/adapters/in-memory-driver.js.map +1 -0
  426. package/dist/persistence/adapters/pg-driver.d.ts +21 -0
  427. package/dist/persistence/adapters/pg-driver.d.ts.map +1 -0
  428. package/dist/persistence/adapters/pg-driver.js +42 -0
  429. package/dist/persistence/adapters/pg-driver.js.map +1 -0
  430. package/dist/persistence/adapters/testcontainer-harness.d.ts +37 -0
  431. package/dist/persistence/adapters/testcontainer-harness.d.ts.map +1 -0
  432. package/dist/persistence/adapters/testcontainer-harness.js +79 -0
  433. package/dist/persistence/adapters/testcontainer-harness.js.map +1 -0
  434. package/dist/persistence/core/errors.d.ts +36 -0
  435. package/dist/persistence/core/errors.d.ts.map +1 -0
  436. package/dist/persistence/core/errors.js +58 -0
  437. package/dist/persistence/core/errors.js.map +1 -0
  438. package/dist/persistence/core/migrations.d.ts +16 -0
  439. package/dist/persistence/core/migrations.d.ts.map +1 -0
  440. package/dist/persistence/core/migrations.js +95 -0
  441. package/dist/persistence/core/migrations.js.map +1 -0
  442. package/dist/persistence/core/pool.d.ts +4 -0
  443. package/dist/persistence/core/pool.d.ts.map +1 -0
  444. package/dist/persistence/core/pool.js +180 -0
  445. package/dist/persistence/core/pool.js.map +1 -0
  446. package/dist/persistence/core/ports.d.ts +91 -0
  447. package/dist/persistence/core/ports.d.ts.map +1 -0
  448. package/dist/persistence/core/ports.js +6 -0
  449. package/dist/persistence/core/ports.js.map +1 -0
  450. package/dist/persistence/core/repository.d.ts +18 -0
  451. package/dist/persistence/core/repository.d.ts.map +1 -0
  452. package/dist/persistence/core/repository.js +113 -0
  453. package/dist/persistence/core/repository.js.map +1 -0
  454. package/dist/persistence/core/sql.d.ts +13 -0
  455. package/dist/persistence/core/sql.d.ts.map +1 -0
  456. package/dist/persistence/core/sql.js +35 -0
  457. package/dist/persistence/core/sql.js.map +1 -0
  458. package/dist/persistence/index.d.ts +14 -0
  459. package/dist/persistence/index.d.ts.map +1 -0
  460. package/dist/persistence/index.js +22 -0
  461. package/dist/persistence/index.js.map +1 -0
  462. package/dist/persistence/pg.d.ts +7 -0
  463. package/dist/persistence/pg.d.ts.map +1 -0
  464. package/dist/persistence/pg.js +7 -0
  465. package/dist/persistence/pg.js.map +1 -0
  466. package/dist/privacy/adapters/audit-sink.d.ts +19 -0
  467. package/dist/privacy/adapters/audit-sink.d.ts.map +1 -0
  468. package/dist/privacy/adapters/audit-sink.js +13 -0
  469. package/dist/privacy/adapters/audit-sink.js.map +1 -0
  470. package/dist/privacy/adapters/in-memory-consent-store.d.ts +7 -0
  471. package/dist/privacy/adapters/in-memory-consent-store.d.ts.map +1 -0
  472. package/dist/privacy/adapters/in-memory-consent-store.js +18 -0
  473. package/dist/privacy/adapters/in-memory-consent-store.js.map +1 -0
  474. package/dist/privacy/adapters/pg-consent-store.d.ts +26 -0
  475. package/dist/privacy/adapters/pg-consent-store.d.ts.map +1 -0
  476. package/dist/privacy/adapters/pg-consent-store.js +43 -0
  477. package/dist/privacy/adapters/pg-consent-store.js.map +1 -0
  478. package/dist/privacy/core/consent.d.ts +35 -0
  479. package/dist/privacy/core/consent.d.ts.map +1 -0
  480. package/dist/privacy/core/consent.js +49 -0
  481. package/dist/privacy/core/consent.js.map +1 -0
  482. package/dist/privacy/core/erasure.d.ts +22 -0
  483. package/dist/privacy/core/erasure.d.ts.map +1 -0
  484. package/dist/privacy/core/erasure.js +35 -0
  485. package/dist/privacy/core/erasure.js.map +1 -0
  486. package/dist/privacy/core/errors.d.ts +18 -0
  487. package/dist/privacy/core/errors.d.ts.map +1 -0
  488. package/dist/privacy/core/errors.js +30 -0
  489. package/dist/privacy/core/errors.js.map +1 -0
  490. package/dist/privacy/core/export.d.ts +20 -0
  491. package/dist/privacy/core/export.d.ts.map +1 -0
  492. package/dist/privacy/core/export.js +30 -0
  493. package/dist/privacy/core/export.js.map +1 -0
  494. package/dist/privacy/core/ports.d.ts +48 -0
  495. package/dist/privacy/core/ports.d.ts.map +1 -0
  496. package/dist/privacy/core/ports.js +6 -0
  497. package/dist/privacy/core/ports.js.map +1 -0
  498. package/dist/privacy/core/registry.d.ts +17 -0
  499. package/dist/privacy/core/registry.d.ts.map +1 -0
  500. package/dist/privacy/core/registry.js +31 -0
  501. package/dist/privacy/core/registry.js.map +1 -0
  502. package/dist/privacy/index.d.ts +16 -0
  503. package/dist/privacy/index.d.ts.map +1 -0
  504. package/dist/privacy/index.js +21 -0
  505. package/dist/privacy/index.js.map +1 -0
  506. package/dist/rate-limit/adapters/in-memory-store.d.ts +7 -0
  507. package/dist/rate-limit/adapters/in-memory-store.d.ts.map +1 -0
  508. package/dist/rate-limit/adapters/in-memory-store.js +50 -0
  509. package/dist/rate-limit/adapters/in-memory-store.js.map +1 -0
  510. package/dist/rate-limit/adapters/redis-store.d.ts +11 -0
  511. package/dist/rate-limit/adapters/redis-store.d.ts.map +1 -0
  512. package/dist/rate-limit/adapters/redis-store.js +93 -0
  513. package/dist/rate-limit/adapters/redis-store.js.map +1 -0
  514. package/dist/rate-limit/core/enforcer.d.ts +23 -0
  515. package/dist/rate-limit/core/enforcer.d.ts.map +1 -0
  516. package/dist/rate-limit/core/enforcer.js +27 -0
  517. package/dist/rate-limit/core/enforcer.js.map +1 -0
  518. package/dist/rate-limit/core/errors.d.ts +19 -0
  519. package/dist/rate-limit/core/errors.d.ts.map +1 -0
  520. package/dist/rate-limit/core/errors.js +32 -0
  521. package/dist/rate-limit/core/errors.js.map +1 -0
  522. package/dist/rate-limit/core/ports.d.ts +50 -0
  523. package/dist/rate-limit/core/ports.d.ts.map +1 -0
  524. package/dist/rate-limit/core/ports.js +6 -0
  525. package/dist/rate-limit/core/ports.js.map +1 -0
  526. package/dist/rate-limit/core/sliding-window.d.ts +9 -0
  527. package/dist/rate-limit/core/sliding-window.d.ts.map +1 -0
  528. package/dist/rate-limit/core/sliding-window.js +24 -0
  529. package/dist/rate-limit/core/sliding-window.js.map +1 -0
  530. package/dist/rate-limit/core/token-bucket.d.ts +9 -0
  531. package/dist/rate-limit/core/token-bucket.d.ts.map +1 -0
  532. package/dist/rate-limit/core/token-bucket.js +24 -0
  533. package/dist/rate-limit/core/token-bucket.js.map +1 -0
  534. package/dist/rate-limit/index.d.ts +15 -0
  535. package/dist/rate-limit/index.d.ts.map +1 -0
  536. package/dist/rate-limit/index.js +19 -0
  537. package/dist/rate-limit/index.js.map +1 -0
  538. package/dist/rate-limit/nestjs/rate-limit.module.d.ts +25 -0
  539. package/dist/rate-limit/nestjs/rate-limit.module.d.ts.map +1 -0
  540. package/dist/rate-limit/nestjs/rate-limit.module.js +63 -0
  541. package/dist/rate-limit/nestjs/rate-limit.module.js.map +1 -0
  542. package/dist/rate-limit/nodejs/middleware.d.ts +16 -0
  543. package/dist/rate-limit/nodejs/middleware.d.ts.map +1 -0
  544. package/dist/rate-limit/nodejs/middleware.js +26 -0
  545. package/dist/rate-limit/nodejs/middleware.js.map +1 -0
  546. package/dist/test-kit/adapters/infra-bootstrap.d.ts +40 -0
  547. package/dist/test-kit/adapters/infra-bootstrap.d.ts.map +1 -0
  548. package/dist/test-kit/adapters/infra-bootstrap.js +64 -0
  549. package/dist/test-kit/adapters/infra-bootstrap.js.map +1 -0
  550. package/dist/test-kit/core/contract.d.ts +49 -0
  551. package/dist/test-kit/core/contract.d.ts.map +1 -0
  552. package/dist/test-kit/core/contract.js +52 -0
  553. package/dist/test-kit/core/contract.js.map +1 -0
  554. package/dist/test-kit/core/errors.d.ts +12 -0
  555. package/dist/test-kit/core/errors.d.ts.map +1 -0
  556. package/dist/test-kit/core/errors.js +19 -0
  557. package/dist/test-kit/core/errors.js.map +1 -0
  558. package/dist/test-kit/core/factories.d.ts +24 -0
  559. package/dist/test-kit/core/factories.d.ts.map +1 -0
  560. package/dist/test-kit/core/factories.js +57 -0
  561. package/dist/test-kit/core/factories.js.map +1 -0
  562. package/dist/test-kit/core/http-client.d.ts +46 -0
  563. package/dist/test-kit/core/http-client.d.ts.map +1 -0
  564. package/dist/test-kit/core/http-client.js +63 -0
  565. package/dist/test-kit/core/http-client.js.map +1 -0
  566. package/dist/test-kit/index.d.ts +10 -0
  567. package/dist/test-kit/index.d.ts.map +1 -0
  568. package/dist/test-kit/index.js +14 -0
  569. package/dist/test-kit/index.js.map +1 -0
  570. package/dist/test-kit/infra.d.ts +6 -0
  571. package/dist/test-kit/infra.d.ts.map +1 -0
  572. package/dist/test-kit/infra.js +6 -0
  573. package/dist/test-kit/infra.js.map +1 -0
  574. package/package.json +170 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * US-0205 — Paginatie/filtering/sortering-conventies.
3
+ *
4
+ * Parset en valideert list-query-parameters tot genormaliseerde, getypte parameters en levert een
5
+ * consistente response-envelope met metadata. Toegestane sorteer-/filtervelden worden per route
6
+ * geïnjecteerd (whitelist); defaults en limieten zijn configureerbaar. De kern bevat geen
7
+ * domeinvelden.
8
+ */
9
+ import { ValidationError } from './errors.js';
10
+ const DEFAULT_PAGE_SIZE = 20;
11
+ const DEFAULT_MAX_PAGE_SIZE = 100;
12
+ /**
13
+ * Parset `page`, `pageSize`, `sort` en filters uit de query. `sort` heeft de vorm
14
+ * `veld:asc,ander:desc` of `veld,-ander`. Ongeldige/niet-toegestane velden -> {@link ValidationError}.
15
+ */
16
+ export function parseListQuery(query = {}, config = {}) {
17
+ const issues = [];
18
+ const defaultPageSize = config.defaultPageSize ?? DEFAULT_PAGE_SIZE;
19
+ const maxPageSize = config.maxPageSize ?? DEFAULT_MAX_PAGE_SIZE;
20
+ const page = parsePositiveInt(query['page'], 1, 'page', issues);
21
+ let pageSize = parsePositiveInt(query['pageSize'], defaultPageSize, 'pageSize', issues);
22
+ // AC2: begrens boven het maximum tot het maximum.
23
+ if (pageSize > maxPageSize)
24
+ pageSize = maxPageSize;
25
+ const sort = parseSort(query['sort'], config, issues);
26
+ const filters = parseFilters(query, config, issues);
27
+ if (issues.length > 0) {
28
+ throw new ValidationError(issues, 'Ongeldige list-parameters');
29
+ }
30
+ return {
31
+ page,
32
+ pageSize,
33
+ offset: (page - 1) * pageSize,
34
+ sort: sort.length > 0 ? sort : (config.defaultSort ?? []),
35
+ filters,
36
+ };
37
+ }
38
+ /** Bouwt een consistente response-envelope met paginatie-metadata. */
39
+ export function paginate(items, total, params) {
40
+ return {
41
+ data: items,
42
+ meta: {
43
+ page: params.page,
44
+ pageSize: params.pageSize,
45
+ total,
46
+ totalPages: params.pageSize > 0 ? Math.ceil(total / params.pageSize) : 0,
47
+ },
48
+ };
49
+ }
50
+ function parsePositiveInt(raw, fallback, field, issues) {
51
+ if (raw === undefined || raw === '')
52
+ return fallback;
53
+ const n = Number(raw);
54
+ if (!Number.isInteger(n) || n < 1) {
55
+ issues.push({ path: field, message: `moet een positief geheel getal zijn` });
56
+ return fallback;
57
+ }
58
+ return n;
59
+ }
60
+ function parseSort(raw, config, issues) {
61
+ if (raw === undefined || raw === '')
62
+ return [];
63
+ const allowed = config.allowedSortFields;
64
+ const tokens = String(raw)
65
+ .split(',')
66
+ .map((t) => t.trim())
67
+ .filter((t) => t.length > 0);
68
+ const result = [];
69
+ for (const token of tokens) {
70
+ let field = token;
71
+ let direction = 'asc';
72
+ if (token.includes(':')) {
73
+ const [f, d] = token.split(':');
74
+ field = (f ?? '').trim();
75
+ direction = (d ?? '').trim().toLowerCase() === 'desc' ? 'desc' : 'asc';
76
+ }
77
+ else if (token.startsWith('-')) {
78
+ field = token.slice(1);
79
+ direction = 'desc';
80
+ }
81
+ if (allowed && !allowed.includes(field)) {
82
+ issues.push({ path: 'sort', message: `sorteren op "${field}" is niet toegestaan` });
83
+ continue;
84
+ }
85
+ result.push({ field, direction });
86
+ }
87
+ return result;
88
+ }
89
+ const RESERVED = new Set(['page', 'pageSize', 'sort']);
90
+ function parseFilters(query, config, issues) {
91
+ const allowed = config.allowedFilterFields;
92
+ const filters = {};
93
+ for (const [key, value] of Object.entries(query)) {
94
+ if (RESERVED.has(key))
95
+ continue;
96
+ if (value === undefined)
97
+ continue;
98
+ if (allowed === undefined)
99
+ continue; // geen filtering geconfigureerd -> negeer overige params
100
+ if (!allowed.includes(key)) {
101
+ issues.push({ path: key, message: `filteren op "${key}" is niet toegestaan` });
102
+ continue;
103
+ }
104
+ filters[key] = String(value);
105
+ }
106
+ return filters;
107
+ }
108
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/http/core/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Poorten & types voor de http-kernel. Het consumerende project injecteert route-modules, schema's
3
+ * en (optioneel) configuratie; de kernel bevat zelf geen route of domeinkennis.
4
+ */
5
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
6
+ /** Framework-agnostisch request-object dat de kernel verwerkt. */
7
+ export interface KernelRequest {
8
+ method: string;
9
+ /** Pad zonder query-string, bv. `/users/42`. */
10
+ path: string;
11
+ headers: Record<string, string | string[] | undefined>;
12
+ /** Reeds geparste query-parameters. */
13
+ query?: Record<string, unknown>;
14
+ body?: unknown;
15
+ /** Door de router ingevulde path-parameters. */
16
+ params?: Record<string, string>;
17
+ }
18
+ /** Framework-agnostisch response-object dat de kernel oplevert. */
19
+ export interface KernelResponse {
20
+ status: number;
21
+ headers: Record<string, string>;
22
+ body: unknown;
23
+ }
24
+ export interface ValidationIssue {
25
+ path: string;
26
+ message: string;
27
+ }
28
+ export type ValidationOutcome<T> = {
29
+ success: true;
30
+ value: T;
31
+ } | {
32
+ success: false;
33
+ issues: ValidationIssue[];
34
+ };
35
+ /** Vervangbare validatie-engine. Zie de Zod-adapter voor een implementatie. */
36
+ export interface Schema<T = unknown> {
37
+ validate(input: unknown): ValidationOutcome<T>;
38
+ /** Optioneel: JSON-schema voor OpenAPI-generatie (US-0206). */
39
+ jsonSchema?(): JsonSchema;
40
+ }
41
+ /** Minimale JSON-schema-vorm (OpenAPI 3.1 componenten). */
42
+ export type JsonSchema = {
43
+ type?: string;
44
+ properties?: Record<string, JsonSchema>;
45
+ required?: string[];
46
+ items?: JsonSchema;
47
+ enum?: unknown[];
48
+ format?: string;
49
+ [key: string]: unknown;
50
+ };
51
+ export interface RequestContext {
52
+ requestId: string;
53
+ correlationId: string;
54
+ }
55
+ export interface RouteHandlerInput<B = unknown, Q = unknown, P = unknown> {
56
+ body: B;
57
+ query: Q;
58
+ params: P;
59
+ /** Genormaliseerde list-parameters, alleen voor list-routes (US-0205). */
60
+ list?: ListParams;
61
+ raw: KernelRequest;
62
+ context: RequestContext;
63
+ }
64
+ export type RouteHandler<B = unknown, Q = unknown, P = unknown> = (input: RouteHandlerInput<B, Q, P>) => unknown | Promise<unknown>;
65
+ export interface RouteSchemas {
66
+ body?: Schema;
67
+ query?: Schema;
68
+ params?: Schema;
69
+ /** Response-schema voor OpenAPI (validatie van output is optioneel). */
70
+ response?: Schema;
71
+ }
72
+ export interface RouteDefinition {
73
+ method: HttpMethod;
74
+ /** Pad relatief aan de module-basePath; mag `:param`-segmenten bevatten. */
75
+ path: string;
76
+ handler: RouteHandler;
77
+ schemas?: RouteSchemas;
78
+ summary?: string;
79
+ /** Markeer als list-endpoint met paginatie/sortering/filtering (US-0205). */
80
+ list?: ListConfig | boolean;
81
+ /** Success-statuscode (default 200, of 204 bij lege body). */
82
+ status?: number;
83
+ }
84
+ export interface RouteModule {
85
+ basePath?: string;
86
+ routes: RouteDefinition[];
87
+ }
88
+ export interface ListConfig {
89
+ defaultPageSize?: number;
90
+ maxPageSize?: number;
91
+ allowedSortFields?: string[];
92
+ allowedFilterFields?: string[];
93
+ defaultSort?: SortField[];
94
+ }
95
+ export interface SortField {
96
+ field: string;
97
+ direction: 'asc' | 'desc';
98
+ }
99
+ export interface ListParams {
100
+ page: number;
101
+ pageSize: number;
102
+ offset: number;
103
+ sort: SortField[];
104
+ filters: Record<string, string>;
105
+ }
106
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/http/core/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Poorten & types voor de http-kernel. Het consumerende project injecteert route-modules, schema's
3
+ * en (optioneel) configuratie; de kernel bevat zelf geen route of domeinkennis.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/http/core/ports.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Redactie van gevoelige velden in fout-payloads en logs (US-0204 AC3). Domein-loos: de set
3
+ * gevoelige key-namen is configureerbaar.
4
+ */
5
+ export declare const DEFAULT_SENSITIVE_KEYS: string[];
6
+ /** Diep redigeren: waarden van keys die (case-insensitief) matchen worden vervangen door `***`. */
7
+ export declare function redactSensitive(value: unknown, sensitiveKeys?: string[]): unknown;
8
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/http/core/redaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,UAkBlC,CAAC;AAIF,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,GAAE,MAAM,EAA2B,GAAG,OAAO,CAGzG"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Redactie van gevoelige velden in fout-payloads en logs (US-0204 AC3). Domein-loos: de set
3
+ * gevoelige key-namen is configureerbaar.
4
+ */
5
+ export const DEFAULT_SENSITIVE_KEYS = [
6
+ 'password',
7
+ 'pass',
8
+ 'secret',
9
+ 'token',
10
+ 'authorization',
11
+ 'apikey',
12
+ 'api_key',
13
+ 'accesstoken',
14
+ 'access_token',
15
+ 'refreshtoken',
16
+ 'refresh_token',
17
+ 'cookie',
18
+ 'setcookie',
19
+ 'ssn',
20
+ 'creditcard',
21
+ 'card',
22
+ 'pin',
23
+ ];
24
+ const REDACTED = '***';
25
+ /** Diep redigeren: waarden van keys die (case-insensitief) matchen worden vervangen door `***`. */
26
+ export function redactSensitive(value, sensitiveKeys = DEFAULT_SENSITIVE_KEYS) {
27
+ const set = new Set(sensitiveKeys.map((k) => k.toLowerCase()));
28
+ return redact(value, set, new WeakSet());
29
+ }
30
+ function redact(value, keys, seen) {
31
+ if (value === null || typeof value !== 'object')
32
+ return value;
33
+ if (seen.has(value))
34
+ return '[Circular]';
35
+ seen.add(value);
36
+ if (Array.isArray(value)) {
37
+ return value.map((item) => redact(item, keys, seen));
38
+ }
39
+ const out = {};
40
+ for (const [key, val] of Object.entries(value)) {
41
+ out[key] = keys.has(key.toLowerCase()) ? REDACTED : redact(val, keys, seen);
42
+ }
43
+ return out;
44
+ }
45
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/http/core/redaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,MAAM;IACN,QAAQ;IACR,OAAO;IACP,eAAe;IACf,QAAQ;IACR,SAAS;IACT,aAAa;IACb,cAAc;IACd,cAAc;IACd,eAAe;IACf,QAAQ;IACR,WAAW;IACX,KAAK;IACL,YAAY;IACZ,MAAM;IACN,KAAK;CACN,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,mGAAmG;AACnG,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,gBAA0B,sBAAsB;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,IAAiB,EAAE,IAAqB;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEhB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * US-0201 — Route-modules valideren, mounten en matchen.
3
+ *
4
+ * Valideert geïnjecteerde route-modules tegen het port-contract (fail-fast bij een ongeldige module),
5
+ * compileert ze tot een route-tabel onder het geconfigureerde base-path en detecteert conflicterende
6
+ * registraties (zelfde methode + pad). Bevat geen domeinkennis.
7
+ */
8
+ import type { HttpMethod, RouteDefinition, RouteModule } from './ports.js';
9
+ /** Fout bij het bootstrappen van de kernel (US-0201 AC3 / US-0206 AC3). Bevat geen interne payload. */
10
+ export declare class KernelBootstrapError extends Error {
11
+ constructor(message: string);
12
+ }
13
+ interface Segment {
14
+ value: string;
15
+ param: boolean;
16
+ }
17
+ export interface CompiledRoute {
18
+ method: HttpMethod;
19
+ /** Volledig pad inclusief base-path, bv. `/api/users/:id`. */
20
+ fullPath: string;
21
+ segments: Segment[];
22
+ definition: RouteDefinition;
23
+ }
24
+ /** Valideert één route-module tegen het port-contract. Gooit {@link KernelBootstrapError}. */
25
+ export declare function validateRouteModule(mod: unknown, index: number): asserts mod is RouteModule;
26
+ /** Compileert alle route-modules tot één route-tabel; detecteert conflicten (fail-fast). */
27
+ export declare function compileRoutes(modules: unknown[], basePath?: string): CompiledRoute[];
28
+ export interface RouteMatch {
29
+ route: CompiledRoute;
30
+ params: Record<string, string>;
31
+ }
32
+ /** Zoekt de eerste route die matcht op methode + pad en extraheert path-params. */
33
+ export declare function matchRoute(routes: CompiledRoute[], method: string, path: string): RouteMatch | null;
34
+ /** True als er wel een pad matcht maar geen enkele methode (405-hint). */
35
+ export declare function pathExistsWithOtherMethod(routes: CompiledRoute[], path: string): boolean;
36
+ export {};
37
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/http/core/router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3E,uGAAuG;AACvG,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAK5B;AAYD,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,WAAW,CAyB3F;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,SAAK,GAAG,aAAa,EAAE,CAuBhF;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,GAAG,IAAI,CASnB;AAED,0EAA0E;AAC1E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxF"}
@@ -0,0 +1,120 @@
1
+ /** Fout bij het bootstrappen van de kernel (US-0201 AC3 / US-0206 AC3). Bevat geen interne payload. */
2
+ export class KernelBootstrapError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'KernelBootstrapError';
6
+ Object.setPrototypeOf(this, KernelBootstrapError.prototype);
7
+ }
8
+ }
9
+ const VALID_METHODS = new Set([
10
+ 'GET',
11
+ 'POST',
12
+ 'PUT',
13
+ 'PATCH',
14
+ 'DELETE',
15
+ 'OPTIONS',
16
+ 'HEAD',
17
+ ]);
18
+ /** Valideert één route-module tegen het port-contract. Gooit {@link KernelBootstrapError}. */
19
+ export function validateRouteModule(mod, index) {
20
+ const label = `route-module[${index}]`;
21
+ if (typeof mod !== 'object' || mod === null || Array.isArray(mod)) {
22
+ throw new KernelBootstrapError(`${label} is geen geldig object`);
23
+ }
24
+ const routes = mod.routes;
25
+ if (!Array.isArray(routes)) {
26
+ throw new KernelBootstrapError(`${label}.routes ontbreekt of is geen array`);
27
+ }
28
+ routes.forEach((route, i) => {
29
+ const rl = `${label}.routes[${i}]`;
30
+ if (typeof route !== 'object' || route === null) {
31
+ throw new KernelBootstrapError(`${rl} is geen geldig route-object`);
32
+ }
33
+ const r = route;
34
+ if (typeof r.method !== 'string' || !VALID_METHODS.has(r.method.toUpperCase())) {
35
+ throw new KernelBootstrapError(`${rl}.method "${String(r.method)}" is ongeldig`);
36
+ }
37
+ if (typeof r.path !== 'string' || !r.path.startsWith('/')) {
38
+ throw new KernelBootstrapError(`${rl}.path moet een string zijn die met "/" begint`);
39
+ }
40
+ if (typeof r.handler !== 'function') {
41
+ throw new KernelBootstrapError(`${rl}.handler ontbreekt of is geen functie`);
42
+ }
43
+ });
44
+ }
45
+ /** Compileert alle route-modules tot één route-tabel; detecteert conflicten (fail-fast). */
46
+ export function compileRoutes(modules, basePath = '') {
47
+ const routes = [];
48
+ const seen = new Map();
49
+ const normalizedBase = normalize(basePath);
50
+ modules.forEach((mod, index) => {
51
+ validateRouteModule(mod, index);
52
+ const moduleBase = normalize(mod.basePath ?? '');
53
+ for (const definition of mod.routes) {
54
+ const method = definition.method.toUpperCase();
55
+ const fullPath = joinPaths(normalizedBase, moduleBase, definition.path);
56
+ const key = `${method} ${fullPath}`;
57
+ if (seen.has(key)) {
58
+ throw new KernelBootstrapError(`conflicterende route-registratie: ${key} is meer dan één keer geregistreerd`);
59
+ }
60
+ seen.set(key, key);
61
+ routes.push({ method, fullPath, segments: toSegments(fullPath), definition });
62
+ }
63
+ });
64
+ return routes;
65
+ }
66
+ /** Zoekt de eerste route die matcht op methode + pad en extraheert path-params. */
67
+ export function matchRoute(routes, method, path) {
68
+ const upper = method.toUpperCase();
69
+ const target = toSegments(normalize(path));
70
+ for (const route of routes) {
71
+ if (route.method !== upper)
72
+ continue;
73
+ const params = matchSegments(route.segments, target);
74
+ if (params)
75
+ return { route, params };
76
+ }
77
+ return null;
78
+ }
79
+ /** True als er wel een pad matcht maar geen enkele methode (405-hint). */
80
+ export function pathExistsWithOtherMethod(routes, path) {
81
+ const target = toSegments(normalize(path));
82
+ return routes.some((route) => matchSegments(route.segments, target) !== null);
83
+ }
84
+ function matchSegments(routeSegs, target) {
85
+ if (routeSegs.length !== target.length)
86
+ return null;
87
+ const params = {};
88
+ for (let i = 0; i < routeSegs.length; i++) {
89
+ const seg = routeSegs[i];
90
+ const value = target[i].value;
91
+ if (seg.param) {
92
+ params[seg.value] = decodeURIComponent(value);
93
+ }
94
+ else if (seg.value !== value) {
95
+ return null;
96
+ }
97
+ }
98
+ return params;
99
+ }
100
+ function toSegments(path) {
101
+ return path
102
+ .split('/')
103
+ .filter((s) => s.length > 0)
104
+ .map((s) => (s.startsWith(':') ? { value: s.slice(1), param: true } : { value: s, param: false }));
105
+ }
106
+ function normalize(path) {
107
+ if (!path)
108
+ return '';
109
+ let p = path.trim();
110
+ if (!p.startsWith('/'))
111
+ p = `/${p}`;
112
+ if (p.length > 1 && p.endsWith('/'))
113
+ p = p.slice(0, -1);
114
+ return p === '/' ? '' : p;
115
+ }
116
+ function joinPaths(...parts) {
117
+ const joined = parts.map((p) => normalize(p)).join('');
118
+ return joined === '' ? '/' : joined;
119
+ }
120
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/http/core/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * US-0207 — CORS + security-headers.
3
+ *
4
+ * Past veilige security-header-defaults toe en handelt CORS af op basis van een geconfigureerde
5
+ * allowlist van origins/methodes/headers. Onbekende origins krijgen geen CORS-toegangs-headers. De
6
+ * laag is domein-loos; allowlist en overrides komen via config-injectie binnen.
7
+ */
8
+ export interface SecurityHeadersConfig {
9
+ /** `Strict-Transport-Security`. Default veilige waarde; `false` schakelt uit. */
10
+ hsts?: string | false;
11
+ /** `Content-Security-Policy`. Default `default-src 'self'`; `false` schakelt uit. */
12
+ csp?: string | false;
13
+ /** `X-Frame-Options`. Default `DENY`. */
14
+ frameOptions?: string | false;
15
+ /** `Referrer-Policy`. Default `no-referrer`. */
16
+ referrerPolicy?: string | false;
17
+ /** Extra/overschrijvende headers. */
18
+ extra?: Record<string, string>;
19
+ }
20
+ /** Bouwt de security-headers met veilige defaults. */
21
+ export declare function securityHeaders(config?: SecurityHeadersConfig): Record<string, string>;
22
+ export interface CorsConfig {
23
+ /** Toegestane origins, of `'*'` voor alle. Leeg/afwezig = geen cross-origin-toegang. */
24
+ allowedOrigins?: string[] | '*';
25
+ allowedMethods?: string[];
26
+ allowedHeaders?: string[];
27
+ exposedHeaders?: string[];
28
+ allowCredentials?: boolean;
29
+ maxAge?: number;
30
+ }
31
+ export interface CorsResult {
32
+ headers: Record<string, string>;
33
+ /** True als de origin op de allowlist staat (of `*`). */
34
+ allowed: boolean;
35
+ isPreflight: boolean;
36
+ }
37
+ /**
38
+ * Berekent de CORS-headers voor een request. Onbekende origins krijgen geen
39
+ * `Access-Control-Allow-Origin` (US-0207 AC3). Voor een preflight (OPTIONS met
40
+ * `Access-Control-Request-Method`) worden de toegestane methodes/headers teruggegeven.
41
+ */
42
+ export declare function resolveCors(origin: string | undefined, method: string, config?: CorsConfig, hasPreflightHeader?: boolean): CorsResult;
43
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/http/core/security.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAKD,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,GAAE,qBAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW1F;AAED,MAAM,WAAW,UAAU;IACzB,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,yDAAyD;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAKD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,UAAe,EACvB,kBAAkB,UAAQ,GACzB,UAAU,CAwBZ"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * US-0207 — CORS + security-headers.
3
+ *
4
+ * Past veilige security-header-defaults toe en handelt CORS af op basis van een geconfigureerde
5
+ * allowlist van origins/methodes/headers. Onbekende origins krijgen geen CORS-toegangs-headers. De
6
+ * laag is domein-loos; allowlist en overrides komen via config-injectie binnen.
7
+ */
8
+ const DEFAULT_HSTS = 'max-age=63072000; includeSubDomains';
9
+ const DEFAULT_CSP = "default-src 'self'";
10
+ /** Bouwt de security-headers met veilige defaults. */
11
+ export function securityHeaders(config = {}) {
12
+ const headers = {
13
+ 'X-Content-Type-Options': 'nosniff',
14
+ };
15
+ if (config.frameOptions !== false)
16
+ headers['X-Frame-Options'] = config.frameOptions ?? 'DENY';
17
+ if (config.hsts !== false)
18
+ headers['Strict-Transport-Security'] = config.hsts ?? DEFAULT_HSTS;
19
+ if (config.csp !== false)
20
+ headers['Content-Security-Policy'] = config.csp ?? DEFAULT_CSP;
21
+ if (config.referrerPolicy !== false) {
22
+ headers['Referrer-Policy'] = config.referrerPolicy ?? 'no-referrer';
23
+ }
24
+ return { ...headers, ...(config.extra ?? {}) };
25
+ }
26
+ const DEFAULT_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'];
27
+ const DEFAULT_HEADERS = ['Content-Type', 'Authorization'];
28
+ /**
29
+ * Berekent de CORS-headers voor een request. Onbekende origins krijgen geen
30
+ * `Access-Control-Allow-Origin` (US-0207 AC3). Voor een preflight (OPTIONS met
31
+ * `Access-Control-Request-Method`) worden de toegestane methodes/headers teruggegeven.
32
+ */
33
+ export function resolveCors(origin, method, config = {}, hasPreflightHeader = false) {
34
+ const isPreflight = method.toUpperCase() === 'OPTIONS' && hasPreflightHeader;
35
+ const allowed = isOriginAllowed(origin, config.allowedOrigins);
36
+ if (!allowed || origin === undefined) {
37
+ return { headers: {}, allowed: false, isPreflight };
38
+ }
39
+ const headers = {};
40
+ const originValue = config.allowedOrigins === '*' && !config.allowCredentials ? '*' : origin;
41
+ headers['Access-Control-Allow-Origin'] = originValue;
42
+ if (originValue !== '*')
43
+ headers['Vary'] = 'Origin';
44
+ if (config.allowCredentials)
45
+ headers['Access-Control-Allow-Credentials'] = 'true';
46
+ if (config.exposedHeaders?.length) {
47
+ headers['Access-Control-Expose-Headers'] = config.exposedHeaders.join(', ');
48
+ }
49
+ if (isPreflight) {
50
+ headers['Access-Control-Allow-Methods'] = (config.allowedMethods ?? DEFAULT_METHODS).join(', ');
51
+ headers['Access-Control-Allow-Headers'] = (config.allowedHeaders ?? DEFAULT_HEADERS).join(', ');
52
+ if (config.maxAge !== undefined)
53
+ headers['Access-Control-Max-Age'] = String(config.maxAge);
54
+ }
55
+ return { headers, allowed: true, isPreflight };
56
+ }
57
+ function isOriginAllowed(origin, allowlist) {
58
+ if (origin === undefined)
59
+ return false;
60
+ if (allowlist === '*')
61
+ return true;
62
+ if (!allowlist || allowlist.length === 0)
63
+ return false;
64
+ return allowlist.includes(origin);
65
+ }
66
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/http/core/security.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAC3D,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,sDAAsD;AACtD,MAAM,UAAU,eAAe,CAAC,SAAgC,EAAE;IAChE,MAAM,OAAO,GAA2B;QACtC,wBAAwB,EAAE,SAAS;KACpC,CAAC;IACF,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK;QAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC;IAC9F,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC;IAC9F,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK;QAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;IACzF,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,cAAc,IAAI,aAAa,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAmBD,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7E,MAAM,eAAe,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,MAA0B,EAC1B,MAAc,EACd,SAAqB,EAAE,EACvB,kBAAkB,GAAG,KAAK;IAE1B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,SAAS,IAAI,kBAAkB,CAAC;IAC7E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAE/D,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7F,OAAO,CAAC,6BAA6B,CAAC,GAAG,WAAW,CAAC;IACrD,IAAI,WAAW,KAAK,GAAG;QAAE,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;IACpD,IAAI,MAAM,CAAC,gBAAgB;QAAE,OAAO,CAAC,kCAAkC,CAAC,GAAG,MAAM,CAAC;IAClF,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,+BAA+B,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,OAAO,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B,EAAE,SAAqC;IACxF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,SAAS,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { KernelRequest, RouteSchemas } from './ports.js';
2
+ export interface ValidatedRequest {
3
+ body: unknown;
4
+ query: unknown;
5
+ params: unknown;
6
+ }
7
+ /** Valideert de request-onderdelen; verzamelt álle overtredingen over body/query/params heen. */
8
+ export declare function validateRequest(req: KernelRequest, schemas?: RouteSchemas): ValidatedRequest;
9
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/http/core/validation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAc5F"}